@curless/hotel-storefront 0.22.0 → 0.23.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+Y29uc3QgRGY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLExmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxXYz17fSxVZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9TGYoZCxvKSxkIGluIFdjKXJldHVybjtXY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1pLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCAkPWlbd107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOkRmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBGZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBIZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBqbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIEJmKGUpe31mdW5jdGlvbiBWZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIEpmKGUpe31mdW5jdGlvbiBmcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBtcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+QXMobikpLmpvaW4odCl9ZnVuY3Rpb24gd28oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIEtme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gc24oZSl7cmV0dXJuIG5ldyBLZihlKX1mdW5jdGlvbiBFcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBMZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gVXUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgR2M9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gRnUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1HYylyZXR1cm4gbz09PXZvaWQgMCYmKG89R2Msbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFdmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gb3QoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBNbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBBZShlKXtyZXR1cm4gTW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gSHUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBvdCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBCdShlLHQsbil7dCBpbiBlP290KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gWWUoZSx0LG4sbyl7Y29uc3Qgcj1BZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD9IdShlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTpCdShlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiBHZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/SHUoZSxuLCgpPT50W25dKTpCdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBRZihlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gWWYoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gWGYoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIGVtKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gVnUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIEp1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgT3M9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gcHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IEt1PXNuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gRmUoZSl7aWYocHQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHB0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIEZlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gdG0oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3Qgbm09ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LCRvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksV3U9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gUmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBHKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBvbShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBBcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBHdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IFF1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxZdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gWHUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gWWUocyxlLERvKGUsdCkpLEcoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBEbyhlLHQpe2NvbnN0IG49QWUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBlbChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoRG8oZSx0KSksYT17fTtyZXR1cm4gWWUoYSxlLFJlZmxlY3Qub3duS2V5cyhBZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLEcoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiB0bChlLHQpe2lmKCFGZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1BZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gRyhlLHVlKGUuX3pvZC5kZWYse3NoYXBlOm5sKGUsdCl9KSl9ZnVuY3Rpb24gbmwoZSx0KXtjb25zdCBuPXt9O3JldHVybiBZZShuLGUsUmVmbGVjdC5vd25LZXlzKEFlKGUpKSksR2Yobix0KSxufWZ1bmN0aW9uIG9sKGUsdCl7aWYoIUZlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBHKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6bmwoZSx0KX0pKX1mdW5jdGlvbiBybChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtZZShuLGUsUmVmbGVjdC5vd25LZXlzKEFlKGUpKSksWWUobix0LFJlZmxlY3Qub3duS2V5cyhBZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBHKGUsbyl9ZnVuY3Rpb24gZ3MoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KERvKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBZZShjLHQsUmVmbGVjdC5vd25LZXlzKEFlKHQpKSxlJiYoKGwsZCk9PmkmJiFpLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLEcodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBzbChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoRG8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIFllKHIsdCxSZWZsZWN0Lm93bktleXMoQWUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEcodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGZlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaWwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIGF0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIGJzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiAkZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOmF0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9hdChzPy4oZSkpPz9hdCh0Py5lcnJvcj8uKGUpKT8/YXQobi5jdXN0b21FcnJvcj8uKGUpKT8/YXQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGlbY109ZVtjXSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gTG8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IHJtPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIFVvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIXJtLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIGFsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gaHQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBzbShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gY2woZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIHVsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gaW0oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gY2wodCtuKX1mdW5jdGlvbiBhbShlKXtyZXR1cm4gdWwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGNtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiB1bShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBsbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIGxsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6ZG0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBaZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBIbyhlLHQsbil7cmV0dXJuIFplKGUsdCxuLCExKX1mdW5jdGlvbiBhbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gWmUodGhpcyxuLG8odGhpcykpfSxzZXQocil7WmUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGRtKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpaZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe1plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBwbShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGNzLHFlPSExO2NvbnN0IGhtPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7cWU9ITB9fTtmdW5jdGlvbiBBKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmY3MhPT1lLl96b2Qpe2NzPXZvaWQgMDtyZXR1cm59Y3M9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LGhtKTtjb25zdCByPXFlO3FlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIHFlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSkscWU9cWV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxxZT1xZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gZGwoZSx0LG4sbyl7Y29uc3Qgcj1wbShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IHBsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gUnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtwbF09ITAsdH1jb25zdCBacz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6WXUsQ09OU1RBTlRfQ0FUQ0g6cGwsQ2xhc3M6bG0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6UXUsYWJvcnRlZDpmZSxhbGxvd3NFdmFsOkt1LGFzc2VydDpKZixhc3NlcnRFcXVhbDpGZixhc3NlcnRJczpCZixhc3NlcnROZXZlcjpWZixhc3NlcnROb3RFcXVhbDpIZixhc3NpZ25Qcm9wOm90LGF0dGFjaFNjaGVtYTpicyxiYXNlNjRUb1VpbnQ4QXJyYXk6Y2wsYmFzZTY0dXJsVG9VaW50OEFycmF5OmltLGNhY2hlZDpzbixjYXB0dXJlU3RhY2tUcmFjZTpPcyxjbGVhbkVudW06c20sY2xlYW5SZWdleDpMZSxjbG9uZTpHLGNsb25lRGVmOlFmLGNvZGVQb2ludExlbmd0aDpVbyxjb25zdGFudENhdGNoOlJzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6b20sZGVmaW5lTGF6eTpGdSxkZWZpbmVMYXp5SW50ZXJuYWw6QSxkZXJpdmVkOmFuLGVzYzpWdSxlc2NhcGVSZWdleDpSZSxleHBsaWNpdGx5QWJvcnRlZDppbCxleHRlbmQ6dGwsZmluYWxpemVJc3N1ZTokZSxmbG9hdFNhZmVSZW1haW5kZXI6VXUsZ2V0RWxlbWVudEF0UGF0aDpZZixnZXRFbnVtVmFsdWVzOmZzLGdldExlbmd0aGFibGVPcmlnaW46Rm8sZ2V0UGFyc2VkVHlwZTpubSxnZXRTaXphYmxlT3JpZ2luOkxvLGhleFRvVWludDhBcnJheTpjbSxoaWRlOkhvLGluc3RhbGxMYXp5UHJvcDpkbCxpc09iamVjdDpwdCxpc1BsYWluT2JqZWN0OkZlLGlzc3VlOmh0LGpvaW5WYWx1ZXM6bXMsanNvblN0cmluZ2lmeVJlcGxhY2VyOndvLG1lbWJlcnM6bGwsbWVyZ2U6cmwsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6RXMsbnVtS2V5czp0bSxvYmplY3RDbG9uZTpXZixvbWl0OmVsLG9wdGlvbmFsS2V5czpHdSxvd246WmUscGFyc2VkVHlwZTphbCxwYXJ0aWFsOmdzLHBpY2s6WHUscHJlZml4SXNzdWVzOl9lLHByaW1pdGl2ZVR5cGVzOld1LHByb21pc2VBbGxPYmplY3Q6WGYscHJvcGVydHlLZXlUeXBlczokbyxyYW5kb21TdHJpbmc6ZW0scmF3U2hhcGU6TW8scmVxdWlyZWQ6c2wsc2FmZUV4dGVuZDpvbCxzaGFsbG93Q2xvbmU6cW8sc2x1Z2lmeTpKdSxzdHJpbmdpZnlQcmltaXRpdmU6QXMsdG9ab2Q6am8sdWludDhBcnJheVRvQmFzZTY0OnVsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDphbSx1aW50OEFycmF5VG9IZXg6dW0sdW53cmFwTWVzc2FnZTphdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgUWM7Y29uc3QgTnM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLHVzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFljPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIGZtKGUpe2NvbnN0IHQ9WWM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBZYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyhiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7dXMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIix1cyl9ZmluYWxseXt1cy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxpKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBaPXc7Zm9yKDtaJiZaIT09JDspWj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoWik7Y29uc3QgVD1aPz93O2kuaGFzKFQpfHwoaS5hZGQoVCksbGwoVCxhKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBifHwoYlt3XT1fW3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P2ZtKGQpOnRoaXM7Yyh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBqcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFVlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIEJvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShRYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhRYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIHRlKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIG1tKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZix3bywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIGdtKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgYm09e2dldDptbSxzZXQ6Z20sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LGxzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sWGM9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksaGw9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIsbHMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixscyksbHMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixibSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7WGMuaGFzKG4pfHwoWGMuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LGZsPXAoIiRab2RFcnJvciIsaGwpLHZlPXAoIiRab2RFcnJvciIsaGwsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiB2bShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIFZvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/dm0obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIEpvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IGM9bixsPTA7Zm9yKDtsPGkubGVuZ3RoOyl7Y29uc3QgZD1pW2xdLG09bD09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmYy5fZXJyb3JzLnB1c2godChhKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPWNbZF07bSYmYi5fZXJyb3JzLnB1c2godChhKSksYz1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBNcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAoYz0+byh7aXNzdWVzOmN9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCBjPVsuLi5zLC4uLmkucGF0aF07aWYoYy5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDxjLmxlbmd0aDspe2NvbnN0IG09Y1tkXSxiPWQ9PT1jLmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGE9bC5pdGVtcylbbV0/PyhhW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gbWwoZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIHFzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke21sKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIEtvKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgY249ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBVZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IGM9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKGw9PiRlKGwsYSx0ZSgpKSkpO3Rocm93IE9zKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0sdnM9Y24odmUpLHVuPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcChsPT4kZShsLGEsdGUoKSkpKTt0aHJvdyBPcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LHlzPXVuKHZlKSxsbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBVZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP2JsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sZ2w9bG4odmUpO2Z1bmN0aW9uIGJsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+JGUocixuLHRlKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBkbj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP2JsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0seW09ZG4odmUpLF9tPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSxrbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLFdvPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09X20pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiB3bShlLHQsbil9KTtmdW5jdGlvbiB3bShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1trbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBVZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBHbz1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LERzPWU9Pntjb25zdCB0PWNuKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLEtvKG4sYSkpfTtyZXR1cm4gbn0sJG09RHModmUpLExzPWU9Pntjb25zdCB0PWNuKGUpLG49KG8scixzLGEpPT50KG8scixzLEtvKG4sYSkpO3JldHVybiBufSxTbT1Mcyh2ZSksVXM9ZT0+e2NvbnN0IHQ9dW4oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxLbyhuLGEpKX07cmV0dXJuIG59LHptPVVzKHZlKSxGcz1lPT57Y29uc3QgdD11bihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLEtvKG4sYSkpO3JldHVybiBufSxUbT1Gcyh2ZSksSHM9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gbG4oZSkodCxuLHIpfSxJbT1Icyh2ZSksQnM9ZT0+KHQsbixvKT0+bG4oZSkodCxuLG8pLFBtPUJzKHZlKSxWcz1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGRuKGUpKHQsbixyKX0seG09VnModmUpLEpzPWU9PmFzeW5jKHQsbixvKT0+ZG4oZSkodCxuLG8pLENtPUpzKHZlKSx2bD0vXltjQ11bMC05YS16XXs2LH0kLyx5bD0vXlswLTlhLXpdKyQvLF9sPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLGtsPS9eWzAtOWEtdkEtVl17MjB9JC8sd2w9L15bQS1aYS16MC05XXsyN30kLywkbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gU2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IHpsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLEVtPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sVGw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLGZ0PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyxPbT1mdCg0KSxBbT1mdCg2KSxSbT1mdCg3KSxJbD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxabT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxObT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxQbD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxqbT1QbCxNbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxxbT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIHhsKCl7cmV0dXJuIG5ldyBSZWdFeHAocW0sInUiKX1jb25zdCBDbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sRWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxPbD1lPT57Y29uc3QgdD1SZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxBbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sUmw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sRG09L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sTG09L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLFpsPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxObD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sS3M9L15odHRwcz8kLyxqbD0vXlwrWzEtOV1cZHs2LDE0fSQvLFdzPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxNbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxHcz0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxxbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gVW0oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IERsPVVtKHFsKTtmdW5jdGlvbiBfcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIExsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtfcyhlKX0kYCl9ZnVuY3Rpb24gVWwoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke19zKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7X3Moe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7cWx9VCg/OiR7b30pJGApfWNvbnN0IEZsPS9eW1xzXFNdezAsfSQvLEhsPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LEJsPS9eLT9cZCtuPyQvLFZsPS9eLT9cZCskLyxRbz0vXi0/XGQrKD86XC5cZCspPyQvLEpsPS9eKD86dHJ1ZXxmYWxzZSkkL2ksS2w9L15udWxsJC9pLFdsPS9edW5kZWZpbmVkJC9pLEdsPS9eW15BLVpdKiQvLFFsPS9eW15hLXpdKiQvLFlsPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gcG4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIGhuKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBGbT0vXlswLTlhLWZBLUZdezMyfSQvLEhtPXBuKDIyLCI9PSIpLEJtPWhuKDIyKSxWbT0vXlswLTlhLWZBLUZdezQwfSQvLEptPXBuKDI3LCI9IiksS209aG4oMjcpLFdtPS9eWzAtOWEtZkEtRl17NjR9JC8sR209cG4oNDMsIj0iKSxRbT1obig0MyksWW09L15bMC05YS1mQS1GXXs5Nn0kLyxYbT1wbig2NCwiIiksZWc9aG4oNjQpLHRnPS9eWzAtOWEtZkEtRl17MTI4fSQvLG5nPXBuKDg2LCI9PSIpLG9nPWhuKDg2KSxZbz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOkZsLGJhc2U2NDpEbSxiYXNlNjR1cmw6TG0sYmlnaW50OkJsLGJvb2xlYW46SmwsYnJvd3NlckVtYWlsOk1tLGNpZHJ2NDpBbCxjaWRydjY6UmwsY3JlZGl0Q2FyZDpXcyxjdWlkOnZsLGN1aWQyOnlsLGN1cnJlbmN5Q29kZTpNbCxkYXRlOkRsLGRhdGV0aW1lOlVsLGRvbWFpbjpObCxkdXJhdGlvbjp6bCxlMTY0OmpsLGVtYWlsOklsLGVtb2ppOnhsLGV4dGVuZGVkRHVyYXRpb246RW0sZ3VpZDpUbCxoZXg6WWwsaG9zdG5hbWU6WmwsaHRtbDVFbWFpbDpabSxodHRwUHJvdG9jb2w6S3MsaWJhbjpHcyxpZG5FbWFpbDpqbSxpbnRlZ2VyOlZsLGlwdjQ6Q2wsaXB2NjpFbCxrc3VpZDp3bCxsb3dlcmNhc2U6R2wsbWFjOk9sLG1kNV9iYXNlNjQ6SG0sbWQ1X2Jhc2U2NHVybDpCbSxtZDVfaGV4OkZtLG5hbm9pZDokbCxuYW5vaWRPZkxlbmd0aDpTbCxudWxsOktsLG51bWJlcjpRbyxyZmM1MzIyRW1haWw6Tm0sc2hhMV9iYXNlNjQ6Sm0sc2hhMV9iYXNlNjR1cmw6S20sc2hhMV9oZXg6Vm0sc2hhMjU2X2Jhc2U2NDpHbSxzaGEyNTZfYmFzZTY0dXJsOlFtLHNoYTI1Nl9oZXg6V20sc2hhMzg0X2Jhc2U2NDpYbSxzaGEzODRfYmFzZTY0dXJsOmVnLHNoYTM4NF9oZXg6WW0sc2hhNTEyX2Jhc2U2NDpuZyxzaGE1MTJfYmFzZTY0dXJsOm9nLHNoYTUxMl9oZXg6dGcsc3RyaW5nOkhsLHRpbWU6TGwsdWxpZDpfbCx1bmRlZmluZWQ6V2wsdW5pY29kZUVtYWlsOlBsLHVwcGVyY2FzZTpRbCx1dWlkOmZ0LHV1aWQ0Ok9tLHV1aWQ2OkFtLHV1aWQ3OlJtLHhpZDprbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxKPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxRcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFFcyh0KSYmdC5zaXplIT09dm9pZCAwfSxZcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFFcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LFNvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LFhzPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49U29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOlNvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGVpPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49U29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOlNvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWGw9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6VXUobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxlZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Si5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPVF1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHRkPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdFtuLG9dPVl1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbmQ9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVFzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkxvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG9kPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1RcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpMbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHJkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1RcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46TG8ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxzZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1ZcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9VbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPUZvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGlkPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVlzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9VbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPUZvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksYWQ9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49WXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP1VvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPUZvKHIpLGM9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi5jP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxmbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztKLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSxjZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pntmbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx1ZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUdsKSxmbi5pbml0KGUsdCl9KSxsZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVFsKSxmbi5pbml0KGUsdCl9KSxkZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPVJlKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxwZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7UmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxoZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtSZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiB6byhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLl9lKG4sZS5pc3N1ZXMpKX1jb25zdCBmZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT56byhyLG4sdC5wcm9wZXJ0eSkpO3pvKG8sbix0LnByb3BlcnR5KX19KSxtZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e0ouaW5pdChlLHQpLEhvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IGM9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTtjIGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaChjLnRoZW4obD0+em8obCxvLGEpKSkpOnpvKGMsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksZ2Q9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxiZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Si5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgdmR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCB5ZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LHg9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPXlkO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLGMsbCk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9ZmUoaSksbTtmb3IoY29uc3QgYiBvZiBjKXtpZihiLl96b2QuZGVmLndoZW4pe2lmKGlsKGkpfHwhYi5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgVWU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKGJzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO2JzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+aSk6aX0sYT0oaSxjLGwpPT57aWYoZmUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyhjLHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgVWU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShpLGMpPT57aWYoYy5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSxjKTtpZihjLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLmMsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+YShtLGksYykpOmEoZCxpLGMpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGksYyk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGMuYXN5bmM9PT0hMSl0aHJvdyBuZXcgVWU7cmV0dXJuIGwudGhlbihkPT5zKGQscixjKSl9cmV0dXJuIHMobCxyLGMpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBIbyh0aGlzLCJ+c3RhbmRhcmQiLHRpKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7WmUodGhpcywifnN0YW5kYXJkIixlKX19KSxfZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PiRlKG4sdCx0ZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiByZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gX2QoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIHRpKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gX2QobyxuKX1jYXRjaHt9cmV0dXJuIHJnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IG1uPXAoIiRab2RTdHJpbmciLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9GbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEg9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pntmbi5pbml0KGUsdCksbW4uaW5pdChlLHQpfSksa2Q9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVRsKSxILmluaXQoZSx0KX0pLHdkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZnQobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWZ0KCkpO0guaW5pdChlLHQpfSksJGQ9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1JbCksSC5pbml0KGUsdCl9KSxuaT0xLEd0PTI7ZnVuY3Rpb24gb2koZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBTZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP29pKGUpfHxHdDp6ZChlLHQpfWZ1bmN0aW9uIHpkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1Lcy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gbmk7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/R3R9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIEd0fX1jb25zdCBzZz0vW1x0XG5ccl0vZztmdW5jdGlvbiBrcyhlKXtyZXR1cm4gZS5yZXBsYWNlKHNnLCIiKX1mdW5jdGlvbiBUZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBJZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBQZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1TZChvLHQpO2lmKHI9PT1uaSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1HdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9a3Mobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFUZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhSWQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6a3Mobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSkseGQ9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj14bCgpKSxILmluaXQoZSx0KX0pLENkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD8kbDpTbCh0Lmxlbmd0aCkpLEguaW5pdChlLHQpfSksRWQ9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXZsKSxILmluaXQoZSx0KX0pLE9kPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eWwpLEguaW5pdChlLHQpfSksQWQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPV9sKSxILmluaXQoZSx0KX0pLFJkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWtsKSxILmluaXQoZSx0KX0pLFpkPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49d2wpLEguaW5pdChlLHQpfSksTmQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1VbCh0KSksSC5pbml0KGUsdCl9KSxqZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RGwpLEguaW5pdChlLHQpfSksTWQ9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUxsKHQpKSxILmluaXQoZSx0KX0pLHFkPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49emwpLEguaW5pdChlLHQpfSksRGQ9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUNsKSxILmluaXQoZSx0KX0pLGlnPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiByaShlKXtyZXR1cm4gaWcudGVzdChlKT9vaShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IExkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1FbCksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntyaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxVZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1PbCh0LmRlbGltaXRlcikpLEguaW5pdChlLHQpfSksRmQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QWwpLEguaW5pdChlLHQpfSk7ZnVuY3Rpb24gSGQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOnJpKG4pfWNvbnN0IEJkPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVJsKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0hkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gc2koZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBWZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sSmQ9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VmQpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57c2kobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxpaT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gS2QoZSl7aWYoIWlpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gc2kobil9Y29uc3QgV2Q9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aWkpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57S2Qobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxHZD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49amwpLEguaW5pdChlLHQpfSksYWc9L1stIF0vZztmdW5jdGlvbiBjZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBRZChlKXtyZXR1cm4gV3MudGVzdChlKT9jZyhlLnJlcGxhY2UoYWcsIiIpKTohMX1jb25zdCBZZD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49V3MpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57UWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIHVnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIFhkKGUpe3JldHVybiBHcy50ZXN0KGUpP3VnKGUpOiExfWNvbnN0IGVwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1HcyksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntYZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiB0cChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IG5wPXAoIiRab2RKV1QiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0cChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG9wPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksYWk9cCgiJFpvZE51bWJlciIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1RbyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxycD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e2VkLmluaXQoZSx0KSxhaS5pbml0KGUsdCl9KSxjaT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1KbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHVpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49QmwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxzcD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e3RkLmluaXQoZSx0KSx1aS5pbml0KGUsdCl9KSxpcD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxhcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVdsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGNwPXAoIiRab2ROdWxsIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPUtsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx1cD1wKCIkWm9kQW55IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksbHA9cCgiJFpvZFVua25vd24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxkcD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxwcD1wKCIkWm9kVm9pZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGhwPXAoIiRab2REYXRlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gZXUoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5fZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IGZwPXAoIiRab2RBcnJheSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspe2NvbnN0IGw9c1tjXSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4obT0+ZXUobSxvLGMpKSk7ZWxzZSBpZihldShkLG8sYyksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmZmUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gVG8oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLl9lKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgbGc9W107ZnVuY3Rpb24gbXAoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOmxnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1HdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIGdwKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sYz1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihmZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKGMuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IHc9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTt3IGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2gody50aGVuKCQ9PlRvKCQsbixfLHQsbSxiKSkpOlRvKHcsbixfLHQsbSxiKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IGJwPXAoIiRab2RPYmplY3QiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9c24oKCk9Pm1wKHQpKTtBKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHxvdChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPXB0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCBjPWRlLm1lbW9pemVyO2M/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9Yz9jLmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IHc9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGkuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoZmUobCx3KSlicmVhazt3PWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgWj12WyRdLFQ9Wi5fem9kLm9wdGluLEs9Wi5fem9kLm9wdG91dCxvZT1aLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChvZS50aGVuKFc9PlRvKFcsbCwkLG0sVCxLKSkpOlRvKG9lLGwsJCxtLFQsSyl9cmV0dXJuIGE/Z3AoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLHZwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57YnAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89c24oKCk9Pm1wKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSx3PV8uc3ltYm9sS2V5cywkPW5ldyB2ZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6d30pLFo9Vz0+YHNoYXBlWyR7V31dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7V31dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFQ9KFcsQik9PmAKICAgICAgICAgIGxldCAke1d9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7V30uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7V30uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7Qn0sIC4uLmlzcy5wYXRoXSA6IFske0J9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke1d9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke1d9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBLPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKUtbV109YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKXtpZihXPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgQj1LW1ddLGs9dHlwZW9mIFc9PSJzeW1ib2wiP2BzeW1zWyR7dy5pbmRleE9mKFcpfV1gOlZ1KFcpLEk9YCR7a30gaW4gaW5wdXRgLFk9dltXXSxyZT1ZPy5fem9kPy5vcHRpbix4ZT1yZSE9PXZvaWQgMCxpdD1ZPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7Qn0gPSAke1ooayl9O2ApLHhlJiZpdCl7Y29uc3QgYXM9cmU9PT0ib3B0aW9uYWwiP2Ake0J9X3ByZXNlbnRgOmAke0J9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtCfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0J9X3ByZXNlbnQgPSAke0l9OwogICAgICAgIGlmICghJHtCfS5pc3N1ZXMubGVuZ3RoIHx8ICR7Qn1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7Qn0uaXNzdWVzLmxlbmd0aCkgeyR7VChCLGspfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke2FzfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSAke0J9LnZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGApfWVsc2UgeGU/KCQud3JpdGUoYAogICAgICAgIGlmICgke0J9Lmlzc3Vlcy5sZW5ndGgpIHske1QoQixrKX0KICAgICAgICB9CiAgICAgIGApLHJlPT09ImRlZmF1bHRlZCI/JC53cml0ZShgbmV3UmVzdWx0WyR7a31dID0gJHtCfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtCfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7SX0pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9ICR7Qn0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtCfV9wcmVzZW50ID0gJHtJfTsKICAgICAgICBpZiAoJHtCfS5pc3N1ZXMubGVuZ3RoKSB7JHtUKEIsayl9CiAgICAgICAgfQogICAgICAgIGlmICghJHtCfV9wcmVzZW50ICYmICEke0J9Lmlzc3Vlcy5sZW5ndGgpIHsKICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goewogICAgICAgICAgICBjb2RlOiAiaW52YWxpZF90eXBlIiwKICAgICAgICAgICAgZXhwZWN0ZWQ6ICJub25vcHRpb25hbCIsCiAgICAgICAgICAgIGlucHV0OiB1bmRlZmluZWQsCiAgICAgICAgICAgIHBhdGg6IFske2t9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7Qn1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gJHtCfS52YWx1ZTsKICAgICAgICB9CgogICAgICBgKX1yZXR1cm4gJC53cml0ZSgicGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsiKSwkLndyaXRlKCJyZXR1cm4gcGF5bG9hZDsiKSwkLmNvbXBpbGUoKX07bGV0IGE7Y29uc3QgaT1wdCxjPSFkZS5qaXRsZXNzLGQ9YyYmS3UudmFsdWUsbT10LmNhdGNoYWxsO2xldCBiO2UuX3pvZC5wYXJzZT0odixfKT0+e2I/PyhiPW8udmFsdWUpO2NvbnN0IHc9di52YWx1ZTtyZXR1cm4gaSh3KT9jJiZkJiZfPy5hc3luYz09PSExJiZfLmppdGxlc3MhPT0hMD8oYXx8KGE9cyh0LnNoYXBlKSksdj1hKHYsXyksbT9ncChbXSx3LHYsXyxiLGUsXz8uYWJvcnRFYXJseT09PSEwKTp2KTpuKHYsXyk6KHYuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6dyxpbnN0OmV9KSx2KX19KTtmdW5jdGlvbiB0dShlLHQsbixvKXtmb3IoY29uc3QgcyBvZiBlKWlmKHMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHQudmFsdWU9cy52YWx1ZSx0O2NvbnN0IHI9ZS5maWx0ZXIocz0+IWZlKHMpKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPXJbMF0udmFsdWUsclswXSk6KHQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoYT0+JGUoYSxvLHRlKCkpKSl9KSx0KX1jb25zdCBYbz1wKCIkWm9kVW5pb24iLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksQShlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEEoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksQShlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+TGUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBhPVtdO2Zvcihjb25zdCBpIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1pLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpYS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2EucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoYSkudGhlbihpPT50dShpLG8sZSxyKSk6dHUoYSxvLGUscil9fSk7ZnVuY3Rpb24gbnUoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChhPT4kZShhLG8sdGUoKSkpKX0pOnQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczpbXSxpbmNsdXNpdmU6ITEsbWF0Y2hlczpyfSksdCl9Y29uc3QgeXA9cCgiJFpvZFhvciIsKGUsdCk9PntYby5pbml0KGUsdCksdC5pbmNsdXNpdmU9ITE7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgaSBvZiB0Lm9wdGlvbnMpe2NvbnN0IGM9aS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhhLnB1c2goYykscz0hMCk6YS5wdXNoKGMpfXJldHVybiBzP1Byb21pc2UuYWxsKGEpLnRoZW4oaT0+bnUoaSxvLGUscikpOm51KGEsbyxlLHIpfX0pO2Z1bmN0aW9uIGxpKGUsdCl7Y29uc3Qgbj1lLl96b2Q7bGV0IG89bi5iYWcub3B0aW9uc01hcDtvfHwobz1fcChuLmRlZiksbi5iYWcub3B0aW9uc01hcD1vKTtjb25zdCByPW8uZ2V0KHQpO2lmKHI9PT1udWxsKXRocm93IG5ldyBFcnJvcihgQW1iaWd1b3VzIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHQpfSJgKTtyZXR1cm4gcn1mdW5jdGlvbiBfcChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0IG4gb2YgZS5vcHRpb25zKXtjb25zdCBvPW4uX3pvZC5wcm9wVmFsdWVzPy5bZS5kaXNjcmltaW5hdG9yXTtpZighb3x8by5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ZS5vcHRpb25zLmluZGV4T2Yobil9ImApO2Zvcihjb25zdCByIG9mIG8paWYodC5oYXMocikpe2lmKHIhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcocil9ImApO3Quc2V0KHIsbnVsbCl9ZWxzZSB0LnNldChyLG4pfXJldHVybiB0fWNvbnN0IGtwPXAoIiRab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57dC5pbmNsdXNpdmU9ITEsWG8uaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlO0EoZSwicHJvcFZhbHVlcyIscj0+e2NvbnN0IHM9e307bGV0IGE9MDtmb3IoY29uc3QgaSBvZiByLmRlZi5vcHRpb25zKXtjb25zdCBjPWkuX3pvZC5wcm9wVmFsdWVzO2lmKCFjfHxPYmplY3Qua2V5cyhjKS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtyLmRlZi5vcHRpb25zLmluZGV4T2YoaSl9ImApO2Nbci5kZWYuZGlzY3JpbWluYXRvcl0/Lmhhcyh2b2lkIDApJiZhKys7Zm9yKGNvbnN0W2wsZF1vZiBPYmplY3QuZW50cmllcyhjKSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbCl8fG90KHMsbCxuZXcgU2V0KTtmb3IoY29uc3QgbSBvZiBkKXNbbF0uYWRkKG0pfX1yZXR1cm4hci5kZWYudW5pb25GYWxsYmFjayYmYT4xJiZzW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5kZWxldGUodm9pZCAwKSxzfSksdC5vcHRpb25zLmZvckVhY2goKHIscyk9Pntjb25zdCBhPU1vKHIuX3pvZC5kZWYpO2lmKGEmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSx0LmRpc2NyaW1pbmF0b3IpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtzfSJgKX0pO2NvbnN0IG89c24oKCk9Pl9wKHQpKTtlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBhPXIudmFsdWU7aWYoIXB0KGEpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJvYmplY3QiLGlucHV0OmEsaW5zdDplfSkscjtjb25zdCBpPWE/Llt0LmRpc2NyaW1pbmF0b3JdLGM9by52YWx1ZS5nZXQoaSk7cmV0dXJuIGMmJihpIT09dm9pZCAwfHxzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCIpP2MuX3pvZC5ydW4ocixzKTp0LnVuaW9uRmFsbGJhY2t8fHMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIj9uKHIscyk6KHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGVycm9yczpbXSxub3RlOiJObyBtYXRjaGluZyBkaXNjcmltaW5hdG9yIixkaXNjcmltaW5hdG9yOnQuZGlzY3JpbWluYXRvcixvcHRpb25zOkFycmF5LmZyb20oby52YWx1ZS5rZXlzKCkpLmZpbHRlcihsPT5vLnZhbHVlLmdldChsKSE9PW51bGwpLGlucHV0OmEscGF0aDpbdC5kaXNjcmltaW5hdG9yXSxpbnN0OmV9KSxyKX19KSx3cD1wKCIkWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZSxzPXQubGVmdC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pLGE9dC5yaWdodC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZXx8YSBpbnN0YW5jZW9mIFByb21pc2U/UHJvbWlzZS5hbGwoW3MsYV0pLnRoZW4oKFtjLGxdKT0+b3UobixjLGwpKTpvdShuLHMsYSl9fSk7ZnVuY3Rpb24gSW8oZSx0KXtpZihlPT09dClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUmJitlPT0rdClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihGZShlKSYmRmUodCkpe2NvbnN0IG49T2JqZWN0LmtleXModCksbz1PYmplY3Qua2V5cyhlKS5maWx0ZXIocz0+bi5pbmRleE9mKHMpIT09LTEpLHI9ey4uLmUsLi4udH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIl9fcHJvdG9fXyIpJiZkZWxldGUgci5fX3Byb3RvX187Zm9yKGNvbnN0IHMgb2Ygbyl7aWYocz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGE9SW8oZVtzXSx0W3NdKTtpZighYS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W3MsLi4uYS5tZXJnZUVycm9yUGF0aF19O3Jbc109YS5kYXRhfXJldHVybnt2YWxpZDohMCxkYXRhOnJ9fWlmKEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkodCkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfTtjb25zdCBuPVtdO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtjb25zdCByPWVbb10scz10W29dLGE9SW8ocixzKTtpZighYS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W28sLi4uYS5tZXJnZUVycm9yUGF0aF19O24ucHVzaChhLmRhdGEpfXJldHVybnt2YWxpZDohMCxkYXRhOm59fXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX19ZnVuY3Rpb24gb3UoZSx0LG4pe2NvbnN0IG89bmV3IE1hcDtsZXQgcjtjb25zdCBzPW5ldyBNYXAsYT0obCxkKT0+e2xldCBtO2lmKGwuY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyImJiFsLnBhdGg/Lmxlbmd0aClyPz8ocj1sKSxtPWwua2V5cztlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX2tleSImJmwub3JpZ2luPT09InJlY29yZCImJmwucGF0aD8ubGVuZ3RoPT09MSl7Y29uc3QgYj1TdHJpbmcobC5wYXRoWzBdKTtzLmhhcyhiKXx8cy5zZXQoYixsKSxtPVtiXX1lbHNlIHJldHVybiExO2Zvcihjb25zdCBiIG9mIG0pby5oYXMoYil8fG8uc2V0KGIse30pLG8uZ2V0KGIpW2RdPSEwO3JldHVybiEwfTtmb3IoY29uc3QgbCBvZiB0Lmlzc3VlcylhKGwsImwiKXx8ZS5pc3N1ZXMucHVzaChsKTtmb3IoY29uc3QgbCBvZiBuLmlzc3VlcylhKGwsInIiKXx8ZS5pc3N1ZXMucHVzaChsKTtjb25zdCBpPVsuLi5vXS5maWx0ZXIoKFssbF0pPT5sLmwmJmwucikubWFwKChbbF0pPT5sKTtpZihpLmxlbmd0aCl7Y29uc3QgbD1yP2kuZmlsdGVyKGQ9PnIua2V5cy5pbmNsdWRlcyhkKSk6W107bC5sZW5ndGgmJmUuaXNzdWVzLnB1c2goey4uLnIsa2V5czpsfSk7Zm9yKGNvbnN0IGQgb2YgaSkhbC5pbmNsdWRlcyhkKSYmcy5oYXMoZCkmJmUuaXNzdWVzLnB1c2gocy5nZXQoZCkpfWNvbnN0IGM9SW8odC52YWx1ZSxuLnZhbHVlKTtpZighYy52YWxpZCl7aWYoZmUoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbm1lcmdhYmxlIGludGVyc2VjdGlvbi4gRXJyb3IgcGF0aDogJHtKU09OLnN0cmluZ2lmeShjLm1lcmdlRXJyb3JQYXRoKX1gKX1yZXR1cm4gZS52YWx1ZT1jLmRhdGEsZX1jb25zdCBkaT1wKCIkWm9kVHVwbGUiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj10Lml0ZW1zLG89ZGUubWVtb2l6ZXI7bz8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGE9ci52YWx1ZTtpZighQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxpbnN0OmUsZXhwZWN0ZWQ6InR1cGxlIixjb2RlOiJpbnZhbGlkX3R5cGUifSkscjtyLnZhbHVlPW8/by5hbGxvYyhlLHIsW10scyk6W107Y29uc3QgaT1bXSxjPXJ1KG4sIm9wdGluIiksbD1ydShuLCJvcHRvdXQiKTtpZighdC5yZXN0KXtpZihhLmxlbmd0aDxjKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06YyxpbmNsdXNpdmU6ITAsaW5wdXQ6YSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KSxyO2EubGVuZ3RoPm4ubGVuZ3RoJiZyLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm4ubGVuZ3RoLGluY2x1c2l2ZTohMCxpbnB1dDphLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pfWNvbnN0IGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxtPXQucmVzdD9zPy5hYm9ydEVhcmx5OnZvaWQgMDtsZXQgYj0hMTtmb3IobGV0IHY9MDt2PG4ubGVuZ3RoO3YrKyl7Y29uc3QgXz1uW3ZdLl96b2QucnVuKHt2YWx1ZTphW3ZdLGlzc3VlczpbXX0scyk7XyBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKF8udGhlbih3PT57ZFt2XT13fSkpOihkW3ZdPV8sbSYmIWImJl8uaXNzdWVzLmxlbmd0aCYmKGI9ZmUoXykpKX1pZih0LnJlc3QmJiFiKXtsZXQgdj1uLmxlbmd0aC0xO2NvbnN0IF89YS5zbGljZShuLmxlbmd0aCk7bGV0IHc9ci5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIF8pe2lmKG0mJnIuaXNzdWVzLmxlbmd0aCE9PXcpe2lmKGZlKHIsdykpYnJlYWs7dz1yLmlzc3Vlcy5sZW5ndGh9disrO2NvbnN0IFo9dC5yZXN0Ll96b2QucnVuKHt2YWx1ZTokLGlzc3VlczpbXX0scyk7WiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKFoudGhlbihUPT5zdShULHIsdikpKTpzdShaLHIsdil9fXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5pdShkLHIsbixhLGwpKTppdShkLHIsbixhLGwpfX0pO2Z1bmN0aW9uIHJ1KGUsdCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoISh0PT09Im9wdGluIj9lW25dLl96b2Qub3B0aW4hPT12b2lkIDA6ZVtuXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpKXJldHVybiBuKzE7cmV0dXJuIDB9ZnVuY3Rpb24gc3UoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5fZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWZ1bmN0aW9uIGl1KGUsdCxuLG8scil7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IGE9ZVtzXSxpPXM8by5sZW5ndGg7aWYoIWkmJnM+PXImJm5bc10uX3pvZC5vcHRpbj09PSJvcHRpb25hbCIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9aWYoYS5pc3N1ZXMubGVuZ3RoKXtpZighaSYmcz49cil7dC52YWx1ZS5sZW5ndGg9czticmVha310Lmlzc3Vlcy5wdXNoKC4uLl9lKHMsYS5pc3N1ZXMpKX10LnZhbHVlW3NdPWEudmFsdWV9Zm9yKGxldCBzPXQudmFsdWUubGVuZ3RoLTE7cz49by5sZW5ndGgmJihuW3NdLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIiYmdC52YWx1ZVtzXT09PXZvaWQgMCk7cy0tKXQudmFsdWUubGVuZ3RoPXM7cmV0dXJuIHR9Y29uc3QgJHA9cCgiJFpvZFJlY29yZCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUZlKHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoicmVjb3JkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBhPVtdLGk9dC5rZXlUeXBlLl96b2QudmFsdWVzO2lmKGkmJiF0LnBhcnRpYWwpe28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtjb25zdCBjPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgaSlpZih0eXBlb2YgZD09InN0cmluZyJ8fHR5cGVvZiBkPT0ibnVtYmVyInx8dHlwZW9mIGQ9PSJzeW1ib2wiKXtpZihjLmFkZCh0eXBlb2YgZD09Im51bWJlciI/ZC50b1N0cmluZygpOmQpLGQ9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO2lmKG0gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKG0uaXNzdWVzLmxlbmd0aCl7by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6bS5pc3N1ZXMubWFwKF89PiRlKF8scix0ZSgpKSksaW5wdXQ6ZCxwYXRoOltkXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBiPW0udmFsdWU7aWYoYj09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IHY9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbZF0saXNzdWVzOltdfSxyKTt2IGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2godi50aGVuKF89PntfLmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uX2UoZCxfLmlzc3VlcykpLG8udmFsdWVbYl09Xy52YWx1ZX0pKToodi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLl9lKGQsdi5pc3N1ZXMpKSxvLnZhbHVlW2JdPXYudmFsdWUpfWxldCBsO2Zvcihjb25zdCBkIGluIHMpaWYoIWMuaGFzKGQpKWlmKHQubW9kZT09PSJsb29zZSIpe2lmKGQ9PT0iX19wcm90b19fIiljb250aW51ZTtvLnZhbHVlW2RdPXNbZF19ZWxzZSBsPWw/P1tdLGwucHVzaChkKTtsJiZsLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpsLGNvbnRpbnVlOiEwfSl9ZWxzZXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307bGV0IGM7Zm9yKGNvbnN0IGwgb2YgUmVmbGVjdC5vd25LZXlzKHMpKXtpZihsPT09Il9fcHJvdG9fXyJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocyxsKSljb250aW51ZTtsZXQgZD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZih0eXBlb2YgbD09InN0cmluZyImJlFvLnRlc3QobCkmJmQuaXNzdWVzLmxlbmd0aCl7Y29uc3QgXz10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOk51bWJlcihsKSxpc3N1ZXM6W119LHIpO2lmKF8gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO18uaXNzdWVzLmxlbmd0aD09PTAmJihkPV8pfWlmKGQuaXNzdWVzLmxlbmd0aCl7dC5tb2RlPT09Imxvb3NlIj9vLnZhbHVlW2xdPXNbbF06aT8oYz1jPz9bXSxjLnB1c2gobCkpOm8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmQuaXNzdWVzLm1hcChfPT4kZShfLHIsdGUoKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1kLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLl9lKGwsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5fZShsLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSksU3A9cCgiJFpvZE1hcCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgYT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGk9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W2wsZF1vZiBzKXtpZihpJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihmZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0sciksYj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO20gaW5zdGFuY2VvZiBQcm9taXNlfHxiIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goUHJvbWlzZS5hbGwoW20sYl0pLnRoZW4oKFt2LF9dKT0+e2F1KHYsXyxvLGwscyxlLHIpfSkpOmF1KG0sYixvLGwscyxlLHIpfXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGF1KGUsdCxuLG8scixzLGEpe2UuaXNzdWVzLmxlbmd0aCYmKCRvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5fZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGk9PiRlKGksYSx0ZSgpKSl9KSksdC5pc3N1ZXMubGVuZ3RoJiYoJG8uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLl9lKG8sdC5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im1hcCIsY29kZToiaW52YWxpZF9lbGVtZW50IixpbnB1dDpyLGluc3Q6cyxrZXk6byxpc3N1ZXM6dC5pc3N1ZXMubWFwKGk9PiRlKGksYSx0ZSgpKSl9KSksbi52YWx1ZS5zZXQoZS52YWx1ZSx0LnZhbHVlKX1jb25zdCB6cD1wKCIkWm9kU2V0IiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49ZGUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtpbnB1dDpzLGluc3Q6ZSxleHBlY3RlZDoic2V0Iixjb2RlOiJpbnZhbGlkX3R5cGUifSksbztjb25zdCBhPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgU2V0LHIpOm5ldyBTZXQ7Y29uc3QgaT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgbCBvZiBzKXtpZihpJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihmZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGQ9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtkIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goZC50aGVuKG09PmN1KG0sbykpKTpjdShkLG8pfXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGN1KGUsdCl7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmUuaXNzdWVzKSx0LnZhbHVlLmFkZChlLnZhbHVlKX1jb25zdCBUcD1wKCIkWm9kRW51bSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWZzKHQuZW50cmllcyksbz1uZXcgU2V0KG4pO2UuX3pvZC52YWx1ZXM9byxBKGUsInBhdHRlcm4iLHI9Pntjb25zdCBzPWZzKHIuZGVmLmVudHJpZXMpLmZpbHRlcihhPT4kby5oYXModHlwZW9mIGEpKTtyZXR1cm4gbmV3IFJlZ0V4cChzLmxlbmd0aD9gXigke3MubWFwKGE9PlJlKGEudG9TdHJpbmcoKSkpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBhPXIudmFsdWU7cmV0dXJuIG8uaGFzKGEpfHxyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6bixpbnB1dDphLGluc3Q6ZX0pLHJ9fSksSXA9cCgiJFpvZExpdGVyYWwiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQudmFsdWVzKTtlLl96b2QudmFsdWVzPW4sQShlLCJwYXR0ZXJuIixvPT57Y29uc3Qgcj1vLmRlZi52YWx1ZXM7cmV0dXJuIG5ldyBSZWdFeHAoci5sZW5ndGg/YF4oJHtyLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/UmUocyk6cz9SZShzLnRvU3RyaW5nKCkpOlN0cmluZyhzKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtyZXR1cm4gbi5oYXMocyl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0LnZhbHVlcyxpbnB1dDpzLGluc3Q6ZX0pLG99fSksUHA9cCgiJFpvZEZpbGUiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiByIGluc3RhbmNlb2YgRmlsZXx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImZpbGUiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHhwPXAoIiRab2RUcmFuc2Zvcm0iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJvcHRpb25hbCIsZGUubWVtb2l6ZXI/Lmd1YXJkKGUpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgQm8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7aWYoby5hc3luYylyZXR1cm4ociBpbnN0YW5jZW9mIFByb21pc2U/cjpQcm9taXNlLnJlc29sdmUocikpLnRoZW4oYT0+KG4udmFsdWU9YSxuKSk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFVlO3JldHVybiBuLnZhbHVlPXIsbn19KTtmdW5jdGlvbiB1dShlLHQpe3JldHVybiBlLnZhbHVlPXQuaXNzdWVzLmxlbmd0aD92b2lkIDA6dC52YWx1ZSxlfWNvbnN0IHBpPXAoIiRab2RPcHRpb25hbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLGUuX3pvZC5vcHRvdXQ9Im9wdGlvbmFsIixBKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm8sdm9pZCAwXSk6dm9pZCAwfSksQShlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtMZShvLnNvdXJjZSl9KT8kYCk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYobi52YWx1ZT09PXZvaWQgMCl7aWYodC5pbm5lclR5cGUuX3pvZC5vcHRpbiE9PSJkZWZhdWx0ZWQiKXJldHVybiBuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnV1KG4scykpOnV1KG4scil9cmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9fSksQ3A9cCgiJFpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57cGkuaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEEoZSwicGF0dGVybiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybiksZS5fem9kLnBhcnNlPShuLG8pPT50LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksRXA9cCgiJFpvZE51bGxhYmxlIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxBKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke0xlKG8uc291cmNlKX18bnVsbCkkYCk6dm9pZCAwfSksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcz9uZXcgU2V0KFsuLi5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsbnVsbF0pOnZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5uLnZhbHVlPT09bnVsbD9uOnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxPcD1wKCIkWm9kRGVmYXVsdCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2lmKG4udmFsdWU9PT12b2lkIDApcmV0dXJuIG4udmFsdWU9dC5kZWZhdWx0VmFsdWUsbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5sdShzLHQpKTpsdShyLHQpfX0pO2Z1bmN0aW9uIGx1KGUsdCl7cmV0dXJuIGUudmFsdWU9PT12b2lkIDAmJihlLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSxlfWNvbnN0IEFwPXAoIiRab2RQcmVmYXVsdCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT4oby5kaXJlY3Rpb249PT0iYmFja3dhcmQifHxuLnZhbHVlPT09dm9pZCAwJiYobi52YWx1ZT10LmRlZmF1bHRWYWx1ZSksdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKSl9KSxScD1wKCIkWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vXS5maWx0ZXIocj0+ciE9PXZvaWQgMCkpOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmR1KHMsZSkpOmR1KHIsZSl9fSk7ZnVuY3Rpb24gZHUoZSx0KXtyZXR1cm4hZS5pc3N1ZXMubGVuZ3RoJiZlLnZhbHVlPT09dm9pZCAwJiZlLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6ZS52YWx1ZSxpbnN0OnR9KSxlfWNvbnN0IFpwPXAoIiRab2RTdWNjZXNzIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgQm8oIlpvZFN1Y2Nlc3MiKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLmlzc3Vlcy5sZW5ndGg9PT0wLG4pKToobi52YWx1ZT1yLmlzc3Vlcy5sZW5ndGg9PT0wLG4pfX0pO2Z1bmN0aW9uIHB1KGUsdCxuLG8pe3JldHVybiB0Lmlzc3Vlcy5sZW5ndGg/KGUudmFsdWU9bi5jYXRjaFZhbHVlKHsuLi50LHZhbHVlOmUudmFsdWUsZXJyb3I6e2lzc3Vlczp0Lmlzc3Vlcy5tYXAocj0+JGUocixvLHRlKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBOcD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+cHUobixzLHQsbykpOnB1KG4scix0LG8pfX0pLGpwPXAoIiRab2ROYU4iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLGhpPXAoIiRab2RQaXBlIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oYT0+bG8oYSx0LmluLG8pKTpsbyhzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5sbyhzLHQub3V0LG8pKTpsbyhyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIGxvKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBmaT1wKCIkWm9kQ29kZWMiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PnBvKGEsdCxvKSk6cG8ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oYT0+cG8oYSx0LG8pKTpwbyhzLHQsbyl9fX0pO2Z1bmN0aW9uIHBvKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+aG8oZSxzLHQub3V0LG4pKTpobyhlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+aG8oZSxzLHQuaW4sbikpOmhvKGUscix0LmluLG4pfX1mdW5jdGlvbiBobyhlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IE1wPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e2hpLmluaXQoZSx0KX0pLHFwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKGh1KTpodShyKX19KTtmdW5jdGlvbiBodShlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIGRnKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBpIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1pLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IGw9Yy5taW5pbXVtPz9jLmxlbmd0aCxkPWMubWF4aW11bT8/Yy5sZW5ndGg7bCE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fGw+cikmJihyPWwpLGQhPT12b2lkIDAmJihzPT09dm9pZCAwfHxkPHMpJiYocz1kKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIEhsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGE9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmE9PT1Rbz9WbDphKT8uc291cmNlfWZ1bmN0aW9uIHdzKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz13cyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKExlKHIpLCgpPT5MZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcCh3cyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PkxlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBkZyhlKX1jb25zdCBEcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPXdzKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKExlKHIpKX1lbHNlIGlmKG89PT1udWxsfHxXdS5oYXModHlwZW9mIG8pKW4ucHVzaChSZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLExwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9Pih4LmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD92cyhlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P3ZzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCB5cyhlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IHlzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IGRpKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksVXA9cCgiJFpvZFByb21pc2UiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLG1pPXAoIiRab2RMYXp5IiwoZSx0KT0+e3guaW5pdChlLHQpLEZ1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEEoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEEoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxBKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLEZwPXAoIiRab2RDdXN0b20iLChlLHQpPT57Si5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PmZ1KHMsbixvLGUpKTtmdShyLG4sbyxlKX19KTtmdW5jdGlvbiBmdShlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChodChyKSl9fWNsYXNzIEhwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgJHM9In5tZW1vIixtdT1bXTtmdW5jdGlvbiBCcChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBkcyhlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgVnA9bmV3IFdlYWtNYXAsY3Q9MCx2bz0xLEh0PTI7ZnVuY3Rpb24gQnQoZSx0LG4pe2NvbnN0IG89VnAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/SHQ6Y3Q7aWYodC5oYXMoZSkpcmV0dXJuIEh0O3QuYWRkKGUpO2xldCByPWN0O2NvbnN0IHM9ZD0+e2lmKHIhPT1IdCYmZD8uX3pvZCl7Y29uc3QgbT1CdChkLHQsbik7bT5yJiYocj1tKX19LGE9KGQsbSk9PntsZXQgYj1jdDtmb3IoY29uc3QgdiBvZiBSZWZsZWN0Lm93bktleXMoZCkpe2NvbnN0IF89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLHYpO2lmKCFfLmVudW1lcmFibGUpY29udGludWU7Y29uc3Qgdz1fLmdldD92bzpfLnZhbHVlPy5fem9kP0J0KF8udmFsdWUsdCxuKTpjdDt3PmImJihiPXcpfXJldHVybiBifSxpPWQ9PntkPnImJihyPWQpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBkPU1vKGMpO2koZD9hKGQpOnZvKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgZCBvZiBjLml0ZW1zKXMoZCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgZCBvZiBjLm9wdGlvbnMpcyhkKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgZD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2koZD9CdChkLHQsITEpOnZvKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgZCBpbiBjKXtjb25zdCBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxkKTtpZighbXx8bS5nZXQpY29udGludWU7Y29uc3QgYj1tLnZhbHVlO2lmKCEoIWJ8fHR5cGVvZiBiIT0ib2JqZWN0Iikpe2lmKGIuX3pvZClzKGIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShiKSlmb3IoY29uc3QgdiBvZiBiKXModil9fX1yZXR1cm4gdC5kZWxldGUoZSkscGcoZSxyKX1mdW5jdGlvbiBwZyhlLHQpe3JldHVybiB0IT09dm8mJlZwLnNldChlLHQ9PT1IdCksdH1mdW5jdGlvbiBoZyhlKXtyZXR1cm4gQnQoZSxuZXcgU2V0LCEwKSE9PWN0fWZ1bmN0aW9uIGZnKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBmbztjb25zdCBtbz1bXSxtZz17YWxsb2MoZSx0LG4pe2NvbnN0IG89Zm87aWYoIW8pcmV0dXJuIG47Zm89dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLG1vLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmSnAocyxyLnZhbHVlKSl0aHJvdyBuZXcgSHA7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBhPWUuX3pvZC5wYXJzZSxpPShjLGwpPT57aWYobj09PXZvaWQgMCl7Y29uc3QgWj1CdChlLG5ldyBTZXQsITEpO2lmKFo9PT1jdClyZXR1cm4gZS5fem9kLnBhcnNlPWEsZS5fem9kLnJ1bj09PWkmJihlLl96b2QucnVuPWEpLGEoYyxsKTtaPT09SHR8fG8/bj0hMDpvPSEwfWNvbnN0IGQ9Yy52YWx1ZTtpZighQnAoZCkpcmV0dXJuIGEoYyxsKTtsZXQgbT1sWyRzXTttfHwobT17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSxsWyRzXT1tKTtsZXQgYjtyPT09bD9iPXM6KGI9ZmcobSxlKSxyPWwscz1iKTtjb25zdCB2PWIuZ2V0KGQpO2lmKHYpcmV0dXJuIGMudmFsdWU9di52YWx1ZSx2Lmlzc3Vlcz92Lmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uZHModi5pc3N1ZXMpKTooYy5tZW1vPSEwLG0uYmFja0VkZ2VzPz8obS5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLG0uYmFja0VkZ2VzLmFkZCh2LnZhbHVlKSksYztmbz1iO2NvbnN0IF89bW8ubGVuZ3RoLHc9YShjLGwpO2ZvPXZvaWQgMDtjb25zdCAkPW1vLmxlbmd0aD5fP21vLnBvcCgpOnZvaWQgMDtyZXR1cm4gdyBpbnN0YW5jZW9mIFByb21pc2U/dy50aGVuKFo9PigkJiYoJC5pc3N1ZXM9Wi5pc3N1ZXMubGVuZ3RoP2RzKFouaXNzdWVzKTptdSksWikpOigkJiYoJC5pc3N1ZXM9dy5pc3N1ZXMubGVuZ3RoP2RzKHcuaXNzdWVzKTptdSksdyl9O2UuX3pvZC5wYXJzZT1pLGUuX3pvZC5ydW49PT1hJiYoZS5fem9kLnJ1bj1pKX0pfX07ZnVuY3Rpb24gZXIoKXtyZXR1cm4gbWd9ZnVuY3Rpb24gSnAoZSx0KXtjb25zdCBuPWVbJHNdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJkJwKHQpJiZuLmhhcyh0KX1jb25zdCBnZz0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGEpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShhKT9TdHJpbmcoYSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgYT1yKHMuZXhwZWN0ZWQpLGk9YWwocy5pbnB1dCksYz1yKGkscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7YX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7QXMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHttcyhzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgYT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsaT10KHMub3JpZ2luKTtyZXR1cm4gaT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2F9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHtpLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHthfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGE9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGk9dChzLm9yaWdpbik7cmV0dXJuIGk/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2F9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHtpLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2F9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBhPXM7cmV0dXJuIGEuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHthLnByZWZpeH0iYDphLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHthLnN1ZmZpeH0iYDphLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7YS5pbmNsdWRlc30iYDphLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHthLnBhdHRlcm59YDpgSW52YWxpZCAke25bYS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHttcyhzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGk9PmAnJHtpfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIEtwKCl7cmV0dXJue2xvY2FsZUVycm9yOmdnKCl9fWNvbnN0IGdpPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpLcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgZ3U7Y29uc3QgYmk9U3ltYm9sKCJab2RPdXRwdXQiKSx2aT1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgV3B7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gdHIoKXtyZXR1cm4gbmV3IFdwfShndT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KGd1Ll9fem9kX2dsb2JhbFJlZ2lzdHJ5PXRyKCkpO2NvbnN0IGtlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnkseWk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIF9pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIGtpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIHdpIGV4dGVuZHMgRXJyb3J7fWNvbnN0ICRpPXlpLFNpPXlpLGJnPXlpO2Z1bmN0aW9uIG5yKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gR3AoZSx0KXtyZXR1cm4gbmV3IGUobnIoe3R5cGU6InN0cmluZyIsLi4ueSh0KX0pKX1mdW5jdGlvbiBRcChlLHQpe3JldHVybiBuZXcgZShucih7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4ueSh0KX0pKX1mdW5jdGlvbiB6aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBJaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLnkodCl9KX1mdW5jdGlvbiB4aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4ueSh0KX0pfWZ1bmN0aW9uIENpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi55KHQpfSl9ZnVuY3Rpb24gb3IoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gRWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBBaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBaaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gamkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBNaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFlwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIExpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBYcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBCaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1jb25zdCBWaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gSmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gS2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIFdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBHaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHRoKGUsdCl7cmV0dXJuIG5ldyBlKG5yKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIG5oKGUsdCl7cmV0dXJuIG5ldyBlKG5yKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBvaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24gcmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGFoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gdWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gbGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gcGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBoaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBmaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi55KHQpfSl9ZnVuY3Rpb24gbWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGdoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi55KHQpfSl9ZnVuY3Rpb24gYmgoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gdmgoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIHloKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4ueSh0KX0pfWZ1bmN0aW9uIF9oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi55KHQpfSl9ZnVuY3Rpb24ga2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLnkodCl9KX1mdW5jdGlvbiB3aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiAkaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gTmUoZSx0KXtyZXR1cm4gbmV3IFhzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gZ2UoZSx0KXtyZXR1cm4gbmV3IFhzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gamUoZSx0KXtyZXR1cm4gbmV3IGVpKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gYmUoZSx0KXtyZXR1cm4gbmV3IGVpKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gcnIoZSl7cmV0dXJuIGplKDAsZSl9ZnVuY3Rpb24gc3IoZSl7cmV0dXJuIE5lKDAsZSl9ZnVuY3Rpb24gaXIoZSl7cmV0dXJuIGdlKDAsZSl9ZnVuY3Rpb24gYXIoZSl7cmV0dXJuIGJlKDAsZSl9ZnVuY3Rpb24gWGUoZSx0KXtyZXR1cm4gbmV3IFhsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLnkodCksdmFsdWU6ZX0pfWZ1bmN0aW9uIHJ0KGUsdCl7cmV0dXJuIG5ldyBuZCh7Y2hlY2s6Im1heF9zaXplIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIG5ldyBvZCh7Y2hlY2s6Im1pbl9zaXplIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIF90KGUsdCl7cmV0dXJuIG5ldyByZCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi55KHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGt0KGUsdCl7cmV0dXJuIG5ldyBzZCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gSGUoZSx0KXtyZXR1cm4gbmV3IGlkKHtjaGVjazoibWluX2xlbmd0aCIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBuZXcgYWQoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi55KHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gZ24oZSx0KXtyZXR1cm4gbmV3IGNkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4ueSh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBibihlKXtyZXR1cm4gbmV3IHVkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiB2bihlKXtyZXR1cm4gbmV3IGxkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiB5bihlLHQpe3JldHVybiBuZXcgZGQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi55KHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBfbihlLHQpe3JldHVybiBuZXcgcGQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi55KHQpLHByZWZpeDplfSl9ZnVuY3Rpb24ga24oZSx0KXtyZXR1cm4gbmV3IGhkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLnkodCksc3VmZml4OmV9KX1mdW5jdGlvbiBjcihlLHQsbil7cmV0dXJuIG5ldyBmZCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLnkobil9KX1mdW5jdGlvbiB3bihlLHQpe3JldHVybiBuZXcgbWQoe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLnkodCl9KX1mdW5jdGlvbiAkbihlLHQpe3JldHVybiBuZXcgZ2Qoe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIG5ldyBiZCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIFNuKGUpe3JldHVybiBPZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gem4oKXtyZXR1cm4gT2UoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIFRuKCl7cmV0dXJuIE9lKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gSW4oKXtyZXR1cm4gT2UoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBQbigpe3JldHVybiBPZShlPT5KdShlKSl9ZnVuY3Rpb24gU2goZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi55KG4pfSl9ZnVuY3Rpb24gdmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi55KG4pfSl9ZnVuY3Rpb24geWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4ueShuKX0pfWZ1bmN0aW9uIF9nKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4ueShvKX0pfWZ1bmN0aW9uIGtnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiB3ZyhlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiB4LHM9cj9vOm4sYT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6YSwuLi55KHMpfSl9ZnVuY3Rpb24gJGcoZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gU2coZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gemcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gVGcoZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLnkobil9KX1mdW5jdGlvbiBJZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLnkobil9KX1mdW5jdGlvbiB6aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIHhnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gQ2coZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIEVnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBPZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTpxbyhuKX19KX1mdW5jdGlvbiBBZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFJnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFpnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246UnMobil9KX1mdW5jdGlvbiBOZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gamcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIE1nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIERnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFRoKGUsdCxuKXtjb25zdCBvPXkobik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBJaChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBoKGUsdCl7Y29uc3Qgbj14aChvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2goaHQocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKGh0KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24geGgoZSx0KXtjb25zdCBuPW5ldyBKKHtjaGVjazoiY3VzdG9tIiwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gQ2goZSl7Y29uc3QgdD1uZXcgSih7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWtlLmdldChuKT8/e307a2UuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIEVoKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWtlLmdldChuKT8/e307a2UuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIE9oKGUsdCl7Y29uc3Qgbj15KHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcCh2PT50eXBlb2Ygdj09InN0cmluZyI/di50b0xvd2VyQ2FzZSgpOnYpLHI9ci5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGE9bmV3IFNldChyKSxpPWUuQ29kZWM/P2ZpLGM9ZS5Cb29sZWFuPz9jaSxsPWUuU3RyaW5nPz9tbixkPW5ldyBsKHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxtPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksYj1uZXcgaSh7dHlwZToicGlwZSIsaW46ZCxvdXQ6bSx0cmFuc2Zvcm06KCh2LF8pPT57bGV0IHc9djtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJih3PXcudG9Mb3dlckNhc2UoKSkscy5oYXModyk/ITA6YS5oYXModyk/ITE6KF8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uYV0saW5wdXQ6Xy52YWx1ZSxpbnN0OmIsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigodixfKT0+dj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIGIuX3pvZC5iYWcudHJ1dGh5PW8sYi5fem9kLmJhZy5mYWxzeT1yLGIuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsYn1mdW5jdGlvbiAkdChlLHQsbixvPXt9KXtjb25zdCByPXkobykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjppPT5uLnRlc3QoaSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgTGc9KCk9Pih7fSksVWc9KCk9Pih7fSksRmc9KCk9Pih7fSksSGc9KCk9Pih7fSksQmc9KCk9Pih7fSksQWg9KCk9PigpPT4oe30pLFNzPSgpPT4oKT0+KHt9KSxWZz0oKT0+KHt9KSx3ZT0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxHZz0oKT0+KHt9KSxRZz0oKT0+KHt9KSxZZz0oKT0+KHt9KSxYZz0oKT0+KHt9KSxlYj0oKT0+KHt9KSx0Yj0oKT0+KHt9KSxuYj0oKT0+KHt9KSxvYj0oKT0+KHt9KSxyYj0oKT0+KHt9KSxzYj0oKT0+KHt9KSxpYj0oKT0+KHt9KSxhYj0oKT0+KHt9KSxjYj0oKT0+KHt9KSx1Yj0oKT0+KHt9KSxsYj0oKT0+KHt9KSxkYj0oKT0+KHt9KSxwYj0oKT0+KHt9KSxoYj0oKT0+KHt9KSxmYj0oKT0+KHt9KSxtYj0oKT0+KHt9KSxnYj0oKT0+KHt9KSxiYj0oKT0+KHt9KSxSaD0oKT0+KHt9KSx2Yj0oKT0+KHt9KSx5Yj0oKT0+KHt9KSxfYj0oKT0+KHt9KSxrYj0oKT0+KHt9KSx3Yj0oKT0+KHt9KSwkYj0oKT0+KHt9KSxTYj0oKT0+KHt9KSx6Yj0oKT0+KHt9KSxUYj0oKT0+KHt9KSxJYj0oKT0+KHt9KSxQYj0oKT0+KHt9KSxaaD0oKT0+KHt9KSx4Yj0oKT0+KHt9KSxRaT0oKT0+KHt9KTtjbGFzcyBDYnt9Y29uc3QgRWI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLE5oPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OnVwLCRab2RBcnJheTpmcCwkWm9kQXN5bmNFcnJvcjpVZSwkWm9kQmFzZTY0OkpkLCRab2RCYXNlNjRVUkw6V2QsJFpvZEJpZ0ludDp1aSwkWm9kQmlnSW50Rm9ybWF0OnNwLCRab2RCb29sZWFuOmNpLCRab2RDSURSdjQ6RmQsJFpvZENJRFJ2NjpCZCwkWm9kQ1VJRDpFZCwkWm9kQ1VJRDI6T2QsJFpvZENhdGNoOk5wLCRab2RDaGVjazpKLCRab2RDaGVja0JpZ0ludEZvcm1hdDp0ZCwkWm9kQ2hlY2tFbmRzV2l0aDpoZCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjplaSwkWm9kQ2hlY2tJbmNsdWRlczpkZCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6YWQsJFpvZENoZWNrTGVzc1RoYW46WHMsJFpvZENoZWNrTG93ZXJDYXNlOnVkLCRab2RDaGVja01heExlbmd0aDpzZCwkWm9kQ2hlY2tNYXhTaXplOm5kLCRab2RDaGVja01pbWVUeXBlOmdkLCRab2RDaGVja01pbkxlbmd0aDppZCwkWm9kQ2hlY2tNaW5TaXplOm9kLCRab2RDaGVja011bHRpcGxlT2Y6WGwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OmVkLCRab2RDaGVja092ZXJ3cml0ZTpiZCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOm1kLCRab2RDaGVja1Byb3BlcnR5OmZkLCRab2RDaGVja1JlZ2V4OmNkLCRab2RDaGVja1NpemVFcXVhbHM6cmQsJFpvZENoZWNrU3RhcnRzV2l0aDpwZCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6Zm4sJFpvZENoZWNrVXBwZXJDYXNlOmxkLCRab2RDb2RlYzpmaSwkWm9kQ3JlZGl0Q2FyZDpZZCwkWm9kQ3VzdG9tOkZwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6b3AsJFpvZEN5Y2xpY0Vycm9yOkhwLCRab2REYXRlOmhwLCRab2REZWZhdWx0Ok9wLCRab2REaXNjcmltaW5hdGVkVW5pb246a3AsJFpvZEUxNjQ6R2QsJFpvZEVtYWlsOiRkLCRab2RFbW9qaTp4ZCwkWm9kRW5jb2RlRXJyb3I6Qm8sJFpvZEVudW06VHAsJFpvZEVycm9yOmZsLCRab2RFeGFjdE9wdGlvbmFsOkNwLCRab2RGaWxlOlBwLCRab2RGdW5jdGlvbjpMcCwkWm9kR1VJRDprZCwkWm9kSUJBTjplcCwkWm9kSVB2NDpEZCwkWm9kSVB2NjpMZCwkWm9kSVNPRGF0ZTpqZCwkWm9kSVNPRGF0ZVRpbWU6TmQsJFpvZElTT0R1cmF0aW9uOnFkLCRab2RJU09UaW1lOk1kLCRab2RJbnRlcnNlY3Rpb246d3AsJFpvZEpXVDpucCwkWm9kS1NVSUQ6WmQsJFpvZExhenk6bWksJFpvZExpdGVyYWw6SXAsJFpvZE1BQzpVZCwkWm9kTWFwOlNwLCRab2ROYU46anAsJFpvZE5hbm9JRDpDZCwkWm9kTmV2ZXI6ZHAsJFpvZE5vbk9wdGlvbmFsOlJwLCRab2ROdWxsOmNwLCRab2ROdWxsYWJsZTpFcCwkWm9kTnVtYmVyOmFpLCRab2ROdW1iZXJGb3JtYXQ6cnAsJFpvZE9iamVjdDpicCwkWm9kT2JqZWN0SklUOnZwLCRab2RPcHRpb25hbDpwaSwkWm9kUGlwZTpoaSwkWm9kUHJlZmF1bHQ6QXAsJFpvZFByZXByb2Nlc3M6TXAsJFpvZFByb21pc2U6VXAsJFpvZFJlYWRvbmx5OnFwLCRab2RSZWFsRXJyb3I6dmUsJFpvZFJlY29yZDokcCwkWm9kUmVnaXN0cnk6V3AsJFpvZFNldDp6cCwkWm9kU3RyaW5nOm1uLCRab2RTdHJpbmdGb3JtYXQ6SCwkWm9kU3VjY2VzczpacCwkWm9kU3ltYm9sOmlwLCRab2RUZW1wbGF0ZUxpdGVyYWw6RHAsJFpvZFRyYW5zZm9ybTp4cCwkWm9kVHVwbGU6ZGksJFpvZFR5cGU6eCwkWm9kVUxJRDpBZCwkWm9kVVJMOlBkLCRab2RVVUlEOndkLCRab2RVbmRlZmluZWQ6YXAsJFpvZFVuaW9uOlhvLCRab2RVbmtub3duOmxwLCRab2RWb2lkOnBwLCRab2RYSUQ6UmQsJFpvZFhvcjp5cCwkYnJhbmQ6anMsJGNvbnN0cnVjdG9yOnAsJGlucHV0OnZpLCRvdXRwdXQ6YmksRG9jOnZkLElOVkFMSUQ6X2ksSlNPTlNjaGVtYTpFYixKU09OU2NoZW1hR2VuZXJhdG9yOkNiLE5FVkVSOk5zLFRpbWVQcmVjaXNpb246VmksVVJMX0JBRF9GT1JNQVQ6bmksVVJMX1VOUEFSU0VBQkxFOkd0LFpvZENvbXBpbGVBc3luY0Vycm9yOmtpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOndpLF9hbnk6YmgsX2FycmF5OlNoLF9iYXNlNjQ6VWksX2Jhc2U2NHVybDpGaSxfYmlnaW50OmxoLF9ib29sZWFuOmNoLF9jYXRjaDpaZyxfY2hlY2s6eGgsX2NpZHJ2NDpEaSxfY2lkcnY2OkxpLF9jb2VyY2VkQmlnaW50OmRoLF9jb2VyY2VkQm9vbGVhbjp1aCxfY29lcmNlZERhdGU6d2gsX2NvZXJjZWROdW1iZXI6bmgsX2NvZXJjZWRTdHJpbmc6UXAsX2NyZWRpdENhcmQ6WHAsX2N1aWQ6QWksX2N1aWQyOlJpLF9jdXN0b206VGgsX2RhdGU6a2gsX2RlY29kZTpMcyxfZGVjb2RlQXN5bmM6RnMsX2RlZmF1bHQ6T2csX2Rpc2NyaW1pbmF0ZWRVbmlvbjpfZyxfZTE2NDpIaSxfZW1haWw6emksX2Vtb2ppOkVpLF9lbmNvZGU6RHMsX2VuY29kZUFzeW5jOlVzLF9lbmRzV2l0aDprbixfZW51bTpUZyxfZmlsZTp6aCxfZmxvYXQzMjpyaCxfZmxvYXQ2NDpzaCxfZ3Q6amUsX2d0ZTpiZSxfZ3VpZDpUaSxfaWJhbjplaCxfaW5jbHVkZXM6eW4sX2ludDpvaCxfaW50MzI6aWgsX2ludDY0OnBoLF9pbnRlcnNlY3Rpb246a2csX2lwdjQ6TWksX2lwdjY6cWksX2lzb0RhdGU6S2ksX2lzb0RhdGVUaW1lOkppLF9pc29EdXJhdGlvbjpHaSxfaXNvVGltZTpXaSxfand0OkJpLF9rc3VpZDpqaSxfbGF6eTpxZyxfbGVuZ3RoOnd0LF9saXRlcmFsOlBnLF9sb3dlcmNhc2U6Ym4sX2x0Ok5lLF9sdGU6Z2UsX21hYzpZcCxfbWFwOlNnLF9tYXg6Z2UsX21heExlbmd0aDprdCxfbWF4U2l6ZTpydCxfbWltZTokbixfbWluOmJlLF9taW5MZW5ndGg6SGUsX21pblNpemU6TWUsX211bHRpcGxlT2Y6WGUsX25hbjokaCxfbmFub2lkOk9pLF9uYXRpdmVFbnVtOklnLF9uZWdhdGl2ZTpzcixfbmV2ZXI6eWgsX25vbm5lZ2F0aXZlOmFyLF9ub25vcHRpb25hbDpBZyxfbm9ucG9zaXRpdmU6aXIsX25vcm1hbGl6ZTpTbixfbnVsbDpnaCxfbnVsbGFibGU6RWcsX251bWJlcjp0aCxfb3B0aW9uYWw6Q2csX292ZXJ3cml0ZTpPZSxfcGFyc2U6Y24sX3BhcnNlQXN5bmM6dW4sX3BpcGU6TmcsX3Bvc2l0aXZlOnJyLF9wcm9taXNlOkRnLF9wcm9wZXJ0aWVzOnduLF9wcm9wZXJ0eTpjcixfcmVhZG9ubHk6amcsX3JlY29yZDokZyxfcmVmaW5lOkloLF9yZWdleDpnbixfc2FmZURlY29kZTpCcyxfc2FmZURlY29kZUFzeW5jOkpzLF9zYWZlRW5jb2RlOkhzLF9zYWZlRW5jb2RlQXN5bmM6VnMsX3NhZmVQYXJzZTpsbixfc2FmZVBhcnNlQXN5bmM6ZG4sX3NldDp6Zyxfc2l6ZTpfdCxfc2x1Z2lmeTpQbixfc3RhcnRzV2l0aDpfbixfc3RyaW5nOkdwLF9zdHJpbmdGb3JtYXQ6JHQsX3N0cmluZ2Jvb2w6T2gsX3N1Y2Nlc3M6UmcsX3N1cGVyUmVmaW5lOlBoLF9zeW1ib2w6ZmgsX3RlbXBsYXRlTGl0ZXJhbDpNZyxfdG9Mb3dlckNhc2U6VG4sX3RvVXBwZXJDYXNlOkluLF90cmFuc2Zvcm06eGcsX3RyaW06em4sX3R1cGxlOndnLF91aW50MzI6YWgsX3VpbnQ2NDpoaCxfdWxpZDpaaSxfdW5kZWZpbmVkOm1oLF91bmlvbjp2ZyxfdW5rbm93bjp2aCxfdXBwZXJjYXNlOnZuLF91cmw6b3IsX3V1aWQ6SWksX3V1aWR2NDpQaSxfdXVpZHY2OnhpLF91dWlkdjc6Q2ksX3ZvaWQ6X2gsX3hpZDpOaSxfeG9yOnlnLGJhc2U2NENoYXJzZXQ6VmQsYmFzZTY0dXJsQ2hhcnNldDppaSxjYW5QYXJzZVVSTDpvaSxjbG9uZTpHLGNvbXBpbGU6JGksY29tcGlsZUZuOmJnLGNvbmZpZzp0ZSxjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Q6U3MsY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kOkFoLGRlY29kZTpTbSxkZWNvZGVBc3luYzpUbSxkZXNjcmliZTpDaCxlbmNvZGU6JG0sZW5jb2RlQXN5bmM6em0sZXh0cmFjdERlZnM6SGcsZmluYWxpemU6QmcsZmxhdHRlbkVycm9yOlZvLGZvcm1hdEVycm9yOkpvLGdldERpc2NyaW1pbmF0ZWRPcHRpb246bGksZ2xvYmFsQ29uZmlnOmRlLGdsb2JhbFJlZ2lzdHJ5OmtlLGhhbmRsZVVucmVwcmVzZW50YWJsZTpVZyxpbml0aWFsaXplQ29udGV4dDpMZyxpc0JhY2tFZGdlOkpwLGlzUmVjdXJzaXZlU2NoZW1hOmhnLGlzVmFsaWRCYXNlNjQ6c2ksaXNWYWxpZEJhc2U2NFVSTDpLZCxpc1ZhbGlkQ0lEUnY2OkhkLGlzVmFsaWRDcmVkaXRDYXJkOlFkLGlzVmFsaWRJQkFOOlhkLGlzVmFsaWRJUHY2OnJpLGlzVmFsaWRKV1Q6dHAsbG9jYWxlczpnaSxtZW1vaXplcjplcixtZXJnZVZhbHVlczpJbyxtZXRhOkVoLHBhcnNlOnZzLHBhcnNlQXN5bmM6eXMscGFyc2VVUkxPYmplY3Q6emQscHJldHRpZnlFcnJvcjpxcyxwcm9jZXNzOlZnLHByb2Nlc3NTY2hlbWE6RmcscmVnZXhlczpZbyxyZWdpc3RyeTp0cixzYWZlRGVjb2RlOlBtLHNhZmVEZWNvZGVBc3luYzpDbSxzYWZlRW5jb2RlOkltLHNhZmVFbmNvZGVBc3luYzp4bSxzYWZlUGFyc2U6Z2wsc2FmZVBhcnNlQXN5bmM6eW0sc3RhbmRhcmRQcm9wczp0aSxzdHJpcFRhYkFuZE5ld2xpbmU6a3MsdG9Eb3RQYXRoOm1sLHRvSlNPTlNjaGVtYTpRaSx0b1pvZDpqbyx0cmVlaWZ5RXJyb3I6TXMsdXJsSG9zdG5hbWVPazpUZCx1cmxQcm90b2NvbE9rOklkLHV0aWw6WnMsdmFsaWRhdGU6V28sdmFsaWRhdGVBc3luYzpHbyx2YWxpZGF0ZVVSTDpTZCx2ZXJzaW9uOnlkLHdpdGhQYXJzZXI6U2l9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksYnU9U3ltYm9sKCJ6LnZpc2l0L3Jlc29sdmluZyIpO2Z1bmN0aW9uIFlpKGUsdCl7Y29uc3Qgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OihhLGkpPT57Y29uc3QgYz10W2EuX3pvZC5kZWYudHlwZV07cmV0dXJuIGM/YyhhLGkpOmF9LG89bmV3IE1hcDtmdW5jdGlvbiByKGEpe2NvbnN0IGk9by5nZXQoYSk7aWYoaT09PWJ1KXJldHVybiBuZXcgbWkoe3R5cGU6ImxhenkiLGdldHRlcjooKT0+by5nZXQoYSl9KTtpZihpIT09dm9pZCAwKXJldHVybiBpO28uc2V0KGEsYnUpO2NvbnN0IGM9cyhhKSxsPW4oYyxjIT09YSk7cmV0dXJuIG8uc2V0KGEsbCksbH1mdW5jdGlvbiBzKGEpe2NvbnN0IGk9YS5fem9kLmRlZjtzd2l0Y2goaS50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9aS5zaGFwZSxkPU9iamVjdC5rZXlzKGwpO2xldCBtPSExO2NvbnN0IGI9e307Zm9yKGNvbnN0IF8gb2YgZCl7Y29uc3Qgdz1yKGxbX10pO3chPT1sW19dJiYobT0hMCksYltfXT13fWxldCB2PWkuY2F0Y2hhbGw7cmV0dXJuIGkuY2F0Y2hhbGwmJih2PXIoaS5jYXRjaGFsbCksdiE9PWkuY2F0Y2hhbGwmJihtPSEwKSksbT9HKGEsey4uLmksc2hhcGU6YixjYXRjaGFsbDp2fSk6YX1jYXNlImFycmF5Ijp7Y29uc3QgbD1yKGkuZWxlbWVudCk7cmV0dXJuIGw9PT1pLmVsZW1lbnQ/YTpHKGEsey4uLmksZWxlbWVudDpsfSl9Y2FzZSJ0dXBsZSI6e2NvbnN0IGw9aS5pdGVtcztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCB2IG9mIGwpe2NvbnN0IF89cih2KTtfIT09diYmKGQ9ITApLG0ucHVzaChfKX1sZXQgYj1pLnJlc3Q7cmV0dXJuIGkucmVzdCYmKGI9cihpLnJlc3QpLGIhPT1pLnJlc3QmJihkPSEwKSksZD9HKGEsey4uLmksaXRlbXM6bSxyZXN0OmJ9KTphfWNhc2UicmVjb3JkIjpjYXNlIm1hcCI6e2NvbnN0IGw9cihpLmtleVR5cGUpLGQ9cihpLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1pLmtleVR5cGUmJmQ9PT1pLnZhbHVlVHlwZT9hOkcoYSx7Li4uaSxrZXlUeXBlOmwsdmFsdWVUeXBlOmR9KX1jYXNlInNldCI6e2NvbnN0IGw9cihpLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1pLnZhbHVlVHlwZT9hOkcoYSx7Li4uaSx2YWx1ZVR5cGU6bH0pfWNhc2UidW5pb24iOntjb25zdCBsPWkub3B0aW9ucztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCBiIG9mIGwpe2NvbnN0IHY9cihiKTt2IT09YiYmKGQ9ITApLG0ucHVzaCh2KX1yZXR1cm4gZD9HKGEsey4uLmksb3B0aW9uczptfSk6YX1jYXNlImludGVyc2VjdGlvbiI6e2NvbnN0IGw9cihpLmxlZnQpLGQ9cihpLnJpZ2h0KTtyZXR1cm4gbD09PWkubGVmdCYmZD09PWkucmlnaHQ/YTpHKGEsey4uLmksbGVmdDpsLHJpZ2h0OmR9KX1jYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjp7Y29uc3QgbD1yKGkuaW5uZXJUeXBlKTtyZXR1cm4gbD09PWkuaW5uZXJUeXBlP2E6RyhhLHsuLi5pLGlubmVyVHlwZTpsfSl9Y2FzZSJwaXBlIjp7Y29uc3QgbD1yKGkuaW4pLGQ9cihpLm91dCk7cmV0dXJuIGw9PT1pLmluJiZkPT09aS5vdXQ/YTpHKGEsey4uLmksaW46bCxvdXQ6ZH0pfWNhc2UiZnVuY3Rpb24iOntjb25zdCBsPXIoaS5pbnB1dCksZD1yKGkub3V0cHV0KTtyZXR1cm4gbD09PWkuaW5wdXQmJmQ9PT1pLm91dHB1dD9hOkcoYSx7Li4uaSxpbnB1dDpsLG91dHB1dDpkfSl9Y2FzZSJsYXp5Ijp7Y29uc3QgbD1pLmdldHRlcix7X2NhY2hlZElubmVyOmQsLi4ubX09aTtyZXR1cm4gRyhhLHsuLi5tLGdldHRlcjooKT0+cihsKCkpfSl9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIGF9fXJldHVybiByKGUpfWZ1bmN0aW9uIFhpKGUpe3JldHVybiEhZS5fem9kfWZ1bmN0aW9uIGpoKGUsdCl7cmV0dXJuIFhpKGUpP2dsKGUsdCk6ZS5zYWZlUGFyc2UodCl9ZnVuY3Rpb24gT2IoZSl7aWYoIWUpcmV0dXJuO2xldCB0O2lmKFhpKGUpP3Q9ZS5fem9kPy5kZWY/LnNoYXBlOnQ9ZS5zaGFwZSwhIXQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXRyeXtyZXR1cm4gdCgpfWNhdGNoe3JldHVybn1yZXR1cm4gdH19ZnVuY3Rpb24gQWIoZSl7aWYoWGkoZSkpe2NvbnN0IHM9ZS5fem9kPy5kZWY7aWYocyl7aWYocy52YWx1ZSE9PXZvaWQgMClyZXR1cm4gcy52YWx1ZTtpZihBcnJheS5pc0FycmF5KHMudmFsdWVzKSYmcy52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIHMudmFsdWVzWzBdfX1jb25zdCBuPWUuX2RlZjtpZihuKXtpZihuLnZhbHVlIT09dm9pZCAwKXJldHVybiBuLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkobi52YWx1ZXMpJiZuLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gbi52YWx1ZXNbMF19Y29uc3Qgbz1lLnZhbHVlO2lmKG8hPT12b2lkIDApcmV0dXJuIG99Y29uc3QgUmI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuZHNXaXRoOmtuLGd0OmplLGd0ZTpiZSxpbmNsdWRlczp5bixsZW5ndGg6d3QsbG93ZXJjYXNlOmJuLGx0Ok5lLGx0ZTpnZSxtYXhMZW5ndGg6a3QsbWF4U2l6ZTpydCxtaW1lOiRuLG1pbkxlbmd0aDpIZSxtaW5TaXplOk1lLG11bHRpcGxlT2Y6WGUsbmVnYXRpdmU6c3Isbm9ubmVnYXRpdmU6YXIsbm9ucG9zaXRpdmU6aXIsbm9ybWFsaXplOlNuLG92ZXJ3cml0ZTpPZSxwb3NpdGl2ZTpycixwcm9wZXJ0aWVzOnduLHByb3BlcnR5OmNyLHJlZ2V4OmduLHNpemU6X3Qsc2x1Z2lmeTpQbixzdGFydHNXaXRoOl9uLHRvTG93ZXJDYXNlOlRuLHRvVXBwZXJDYXNlOkluLHRyaW06em4sdXBwZXJjYXNlOnZufSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHZ1PW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pO2Z1bmN0aW9uIGdvKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPW4odGhpcyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSl9Y29uc3QgTWg9KGUsdCk9PntmbC5pbml0KGUsdCksZS5uYW1lPSJab2RFcnJvciI7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7dnUuaGFzKG4pfHwodnUuYWRkKG4pLGdvKG4sImZvcm1hdCIsbz0+cj0+Sm8obyxyKSksZ28obiwiZmxhdHRlbiIsbz0+cj0+Vm8obyxyKSksZ28obiwiYWRkSXNzdWUiLG89PnI9PntvLmlzc3Vlcy5wdXNoKHIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3Vlcyx3bywyKX0pLGdvKG4sImFkZElzc3VlcyIsbz0+cj0+e28uaXNzdWVzLnB1c2goLi4uciksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLHdvLDIpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImlzRW1wdHkiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH19KSl9LHFoPXAoIlpvZEVycm9yIixNaCksbWU9cCgiWm9kRXJyb3IiLE1oLHZvaWQgMCx7UGFyZW50OkVycm9yfSksZWE9Y24obWUpLHRhPXVuKG1lKSxuYT1sbihtZSksb2E9ZG4obWUpLHJhPURzKG1lKSxzYT1McyhtZSksaWE9VXMobWUpLGFhPUZzKG1lKSxjYT1IcyhtZSksdWE9QnMobWUpLGxhPVZzKG1lKSxkYT1KcyhtZSk7ZnVuY3Rpb24gWmIoKXtkZS5sb2NhbGVFcnJvcnx8dGUoS3AoKSl9ZnVuY3Rpb24gc3QoKXtkZS5tZW1vaXplcnx8dGUoe21lbW9pemVyOmVyKCl9KX1jb25zdCBFPXAoIlpvZFR5cGUiLChlLHQpPT4oWmIoKSx4LmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUodWUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEcodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKEdyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKFFyKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soT2UoZSkpfSxvcHRpb25hbCgpe3JldHVybiBWKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIENyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBndCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBWKGd0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIE5yKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIFAodGhpcyl9LG9yKGUpe3JldHVybiBPKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiBadCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIFl0KHRoaXMsWW4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBBcih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gWnIodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIHFyKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIFl0KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIEZyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4ga2UuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4ga2UuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBrZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIEhvKHRoaXMsIn5zdGFuZGFyZCIsey4uLnRpKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OlNzKCksb3V0cHV0OlNzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe1plKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZWEodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCB0YSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIG5hKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gb2EodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe1plKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIFdvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBHbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHJhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBzYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBpYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBhYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBjYSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gdWEodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gbGEodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gZGEodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIEFoKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBrZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHhuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57bW4uaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5KZygpfSxhbih7Zm9ybWF0OmU9PndlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT53ZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PndlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGduKC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soeW4oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKF9uKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soa24oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soSGUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soa3QoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sod3QoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhIZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGJuKGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKHZuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKHpuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soU24oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKFRuKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKEluKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soUG4oKSl9fSkpLFN0PXAoIlpvZFN0cmluZyIsKGUsdCk9Pnttbi5pbml0KGUsdCkseG4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soemkoQ24sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2sob3IoeHQsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soQmkoVm4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhFaShPbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGkoRW4sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKElpKEllLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKFBpKEllLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHhpKEllLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKENpKEllLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKE9pKEFuLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhBaShSbixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKFJpKFpuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhaaShObixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhVaShGbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhGaShIbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhOaShqbixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKGppKE1uLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShxbixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2socWkoRG4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRGkoTG4sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soTGkoVW4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKEhpKEJuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soSmkoenQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEtpKFR0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhXaShJdCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKEdpKFB0LGUpKX19KTtmdW5jdGlvbiBoKGUpe3JldHVybiBHcChTdCxlKX1jb25zdCBVPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntILmluaXQoZSx0KSx4bi5pbml0KGUsdCl9KSx6dD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PntOZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxUdD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e2pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLEl0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57TWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksUHQ9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57cWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksQ249cCgiWm9kRW1haWwiLChlLHQpPT57JGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcGEoZSl7cmV0dXJuIHppKENuLGUpfWNvbnN0IEVuPXAoIlpvZEdVSUQiLChlLHQpPT57a2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gaGEoZSl7cmV0dXJuIFRpKEVuLGUpfWNvbnN0IEllPXAoIlpvZFVVSUQiLChlLHQpPT57d2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZmEoZSl7cmV0dXJuIElpKEllLGUpfWZ1bmN0aW9uIG1hKGUpe3JldHVybiBQaShJZSxlKX1mdW5jdGlvbiBnYShlKXtyZXR1cm4geGkoSWUsZSl9ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIENpKEllLGUpfWNvbnN0IHh0PXAoIlpvZFVSTCIsKGUsdCk9PntQZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiB2YShlKXtyZXR1cm4gb3IoeHQsZSl9ZnVuY3Rpb24geWEoZSl7cmV0dXJuIG9yKHh0LHtwcm90b2NvbDpLcyxob3N0bmFtZTpObCwuLi55KGUpfSl9Y29uc3QgT249cCgiWm9kRW1vamkiLChlLHQpPT57eGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gX2EoZSl7cmV0dXJuIEVpKE9uLGUpfWNvbnN0IEFuPXAoIlpvZE5hbm9JRCIsKGUsdCk9PntDZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBrYShlKXtyZXR1cm4gT2koQW4sZSl9Y29uc3QgUm49cCgiWm9kQ1VJRCIsKGUsdCk9PntFZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiB3YShlKXtyZXR1cm4gQWkoUm4sZSl9Y29uc3QgWm49cCgiWm9kQ1VJRDIiLChlLHQpPT57T2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIFJpKFpuLGUpfWNvbnN0IE5uPXAoIlpvZFVMSUQiLChlLHQpPT57QWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIFppKE5uLGUpfWNvbnN0IGpuPXAoIlpvZFhJRCIsKGUsdCk9PntSZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiB6YShlKXtyZXR1cm4gTmkoam4sZSl9Y29uc3QgTW49cCgiWm9kS1NVSUQiLChlLHQpPT57WmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIGppKE1uLGUpfWNvbnN0IHFuPXAoIlpvZElQdjQiLChlLHQpPT57RGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIE1pKHFuLGUpfWNvbnN0IHVyPXAoIlpvZE1BQyIsKGUsdCk9PntVZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBQYShlKXtyZXR1cm4gWXAodXIsZSl9Y29uc3QgRG49cCgiWm9kSVB2NiIsKGUsdCk9PntMZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiB4YShlKXtyZXR1cm4gcWkoRG4sZSl9Y29uc3QgTG49cCgiWm9kQ0lEUnY0IiwoZSx0KT0+e0ZkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBEaShMbixlKX1jb25zdCBVbj1wKCJab2RDSURSdjYiLChlLHQpPT57QmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIExpKFVuLGUpfWNvbnN0IEZuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntKZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBPYShlKXtyZXR1cm4gVWkoRm4sZSl9Y29uc3QgSG49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e1dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFhKGUpe3JldHVybiBGaShIbixlKX1jb25zdCBCbj1wKCJab2RFMTY0IiwoZSx0KT0+e0dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBIaShCbixlKX1jb25zdCBscj1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e1lkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFphKGUpe3JldHVybiBYcChscixlKX1jb25zdCBkcj1wKCJab2RJQkFOIiwoZSx0KT0+e2VwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE5hKGUpe3JldHVybiBlaChkcixlKX1jb25zdCBWbj1wKCJab2RKV1QiLChlLHQpPT57bnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gamEoZSl7cmV0dXJuIEJpKFZuLGUpfWNvbnN0IFZlPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntvcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBNYShlLHQsbj17fSl7cmV0dXJuICR0KFZlLGUsdCxuKX1mdW5jdGlvbiBxYShlKXtyZXR1cm4gJHQoVmUsImhvc3RuYW1lIixabCxlKX1mdW5jdGlvbiBEYShlKXtyZXR1cm4gJHQoVmUsImhleCIsWWwsZSl9ZnVuY3Rpb24gTGEoZSl7cmV0dXJuICR0KFZlLCJjdXJyZW5jeV9jb2RlIixNbCxlKX1mdW5jdGlvbiBVYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9WW9bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gJHQoVmUsbyxyLHQpfWNvbnN0IEN0PXAoIlpvZE51bWJlciIsKGUsdCk9PnthaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PktnKCksZS5pc0Zpbml0ZT0hMH0sYW4oe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT13ZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PXdlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PXdlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+d2UoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGplKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soTmUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGdlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhnZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKFF0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhRdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soTmUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGdlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWGUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhYZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIHRoKEN0LGUpfWNvbnN0IEplPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntycC5pbml0KGUsdCksQ3QuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIG9oKEplLGUpfWZ1bmN0aW9uIEZhKGUpe3JldHVybiByaChKZSxlKX1mdW5jdGlvbiBIYShlKXtyZXR1cm4gc2goSmUsZSl9ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIGloKEplLGUpfWZ1bmN0aW9uIFZhKGUpe3JldHVybiBhaChKZSxlKX1jb25zdCBFdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e2NpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2coKX0pO2Z1bmN0aW9uIEwoZSl7cmV0dXJuIGNoKEV0LGUpfWNvbnN0IE90PXAoIlpvZEJpZ0ludCIsKGUsdCk9Pnt1aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkdnKCl9LGFuKHttaW5WYWx1ZTplPT53ZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+d2UoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT53ZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhqZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhOZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZ2UoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGdlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhqZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhOZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhnZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWGUoZSx0KSl9fSkpO2Z1bmN0aW9uIEphKGUpe3JldHVybiBsaChPdCxlKX1jb25zdCBKbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57c3AuaW5pdChlLHQpLE90LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEthKGUpe3JldHVybiBwaChKbixlKX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gaGgoSm4sZSl9Y29uc3QgcHI9cCgiWm9kU3ltYm9sIiwoZSx0KT0+e2lwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UWcoKX0pO2Z1bmN0aW9uIEdhKGUpe3JldHVybiBmaChwcixlKX1jb25zdCBocj1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57YXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5YZygpfSk7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIG1oKGhyLGUpfWNvbnN0IGZyPXAoIlpvZE51bGwiLChlLHQpPT57Y3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZZygpfSk7ZnVuY3Rpb24gS24oZSl7cmV0dXJuIGdoKGZyLGUpfWNvbnN0IG1yPXAoIlpvZEFueSIsKGUsdCk9Pnt1cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm5iKCl9KTtmdW5jdGlvbiBXbigpe3JldHVybiBiaChtcil9Y29uc3QgZ3I9cCgiWm9kVW5rbm93biIsKGUsdCk9PntscC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm9iKCl9KTtmdW5jdGlvbiBEKCl7cmV0dXJuIHZoKGdyKX1jb25zdCBicj1wKCJab2ROZXZlciIsKGUsdCk9PntkcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnRiKCl9KTtmdW5jdGlvbiBldChlKXtyZXR1cm4geWgoYnIsZSl9Y29uc3QgdnI9cCgiWm9kVm9pZCIsKGUsdCk9PntwcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmViKCl9KTtmdW5jdGlvbiBRYShlKXtyZXR1cm4gX2godnIsZSl9Y29uc3QgR249cCgiWm9kRGF0ZSIsKGUsdCk9PntocC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnJiKCksZS5taW49KG4sbyk9PmUuY2hlY2soYmUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2soZ2UobixvKSl9LGFuKHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PXdlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT13ZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIFlhKGUpe3JldHVybiBraChHbixlKX1jb25zdCB5cj1wKCJab2RBcnJheSIsKGUsdCk9PntzdCgpLGZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2IoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soSGUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKEhlKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhrdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sod3QoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24gUChlLHQpe3JldHVybiBTaCh5cixlLHQpfWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gaWUoT2JqZWN0LmtleXModCkpfWNvbnN0IEF0PXAoIlpvZE9iamVjdCIsKGUsdCk9PntzdCgpLHZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmIoKSxkbChlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiBpZShPYmplY3Qua2V5cyh0aGlzLl96b2QuZGVmLnNoYXBlKSl9LGNhdGNoYWxsKGUpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOmV9KSl9LHBhc3N0aHJvdWdoKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6RCgpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkQoKX0pKX0sc3RyaWN0KCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6ZXQoKX0pKX0sc3RyaXAoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gdGwodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4gb2wodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIHJsKHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIFh1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIGVsKHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIGdzKE50LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gZ3MoWG4sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIHNsKGVvLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gZyhlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4ueSh0KX07cmV0dXJuIG5ldyBBdChuKX1mdW5jdGlvbiBlYyhlLHQpe3JldHVybiBuZXcgQXQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpldCgpLC4uLnkodCl9KX1mdW5jdGlvbiBzZShlLHQpe3JldHVybiBuZXcgQXQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpEKCksLi4ueSh0KX0pfWNvbnN0IFJ0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e1hvLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UmgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gTyhlLHQpe3JldHVybiBuZXcgUnQoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4ueSh0KX0pfWNvbnN0IF9yPXAoIlpvZFhvciIsKGUsdCk9PntSdC5pbml0KGUsdCkseXAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SaCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiB0YyhlLHQpe3JldHVybiBuZXcgX3Ioe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLnkodCl9KX1jb25zdCBrcj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57UnQuaW5pdChlLHQpLGtwLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFFuKGUsdCxuKXtyZXR1cm4gbmV3IGtyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi55KG4pfSl9Y29uc3Qgd3I9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmIoKX0pO2Z1bmN0aW9uIFp0KGUsdCl7cmV0dXJuIG5ldyB3cih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0ICRyPXAoIlpvZFR1cGxlIiwoZSx0KT0+e3N0KCksZGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT55YigpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgTnQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIFNyKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiB4LHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3ICRyKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4ueShyKX0pfWNvbnN0IHR0PXAoIlpvZFJlY29yZCIsKGUsdCk9PntzdCgpLCRwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+X2IoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gUihlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IHR0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6aCgpLHZhbHVlVHlwZTplLC4uLnkodCl9KTpuZXcgdHQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBuYyhlLHQsbil7cmV0dXJuIG5ldyB0dCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gb2MoZSx0LG4pe3JldHVybiBuZXcgdHQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi55KG4pfSl9Y29uc3QgenI9cCgiWm9kTWFwIiwoZSx0KT0+e3N0KCksU3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5mYigpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKE1lKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soTWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKHJ0KC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKF90KC4uLm4pKX0pO2Z1bmN0aW9uIHJjKGUsdCxuKXtyZXR1cm4gbmV3IHpyKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9Y29uc3QgVHI9cCgiWm9kU2V0IiwoZSx0KT0+e3N0KCksenAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tYigpLGUubWluPSguLi5uKT0+ZS5jaGVjayhNZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKE1lKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhydCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhfdCguLi5uKSl9KTtmdW5jdGlvbiBzYyhlLHQpe3JldHVybiBuZXcgVHIoe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IG50PXAoIlpvZEVudW0iLChlLHQpPT57VHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5zYigpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgYSBvZiBvKWlmKG4uaGFzKGEpKXNbYV09dC5lbnRyaWVzW2FdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHthfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgbnQoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGEgb2YgbylpZihuLmhhcyhhKSlkZWxldGUgc1thXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7YX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IG50KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIGllKGUsdCl7Y29uc3Qgbj1BcnJheS5pc0FycmF5KGUpP09iamVjdC5mcm9tRW50cmllcyhlLm1hcChvPT5bbyxvXSkpOmU7cmV0dXJuIG5ldyBudCh7dHlwZToiZW51bSIsZW50cmllczpuLC4uLnkodCl9KX1mdW5jdGlvbiBpYyhlLHQpe3JldHVybiBuZXcgbnQoe3R5cGU6ImVudW0iLGVudHJpZXM6ZSwuLi55KHQpfSl9Y29uc3QgSXI9cCgiWm9kTGl0ZXJhbCIsKGUsdCk9PntJcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmliKCksZS52YWx1ZXM9bmV3IFNldCh0LnZhbHVlcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInZhbHVlIix7Z2V0KCl7aWYodC52YWx1ZXMubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHNjaGVtYSBjb250YWlucyBtdWx0aXBsZSB2YWxpZCBsaXRlcmFsIHZhbHVlcy4gVXNlIGAudmFsdWVzYCBpbnN0ZWFkLiIpO3JldHVybiB0LnZhbHVlc1swXX19KX0pO2Z1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbmV3IElyKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheShlKT9lOltlXSwuLi55KHQpfSl9Y29uc3QgUHI9cCgiWm9kRmlsZSIsKGUsdCk9PntQcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnViKCksZS5taW49KG4sbyk9PmUuY2hlY2soTWUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2socnQobixvKSksZS5taW1lPShuLG8pPT5lLmNoZWNrKCRuKEFycmF5LmlzQXJyYXkobik/bjpbbl0sbykpfSk7ZnVuY3Rpb24gYWMoZSl7cmV0dXJuIHpoKFByLGUpfWNvbnN0IHhyPXAoIlpvZFRyYW5zZm9ybSIsKGUsdCk9PntzdCgpLHhwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+aGIoKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IEJvKGUuY29uc3RydWN0b3IubmFtZSk7bi5hZGRJc3N1ZT1zPT57aWYodHlwZW9mIHM9PSJzdHJpbmciKW4uaXNzdWVzLnB1c2goaHQocyxuLnZhbHVlLHQpKTtlbHNle2NvbnN0IGE9czthLmZhdGFsJiYoYS5jb250aW51ZT0hMSksYS5jb2RlPz8oYS5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gYXx8KGEuaW5wdXQ9bi52YWx1ZSksYS5pbnN0Pz8oYS5pbnN0PWUpLG4uaXNzdWVzLnB1c2goaHQoYSkpfX07Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cyxuKSk6KG4udmFsdWU9cixuKX19KTtmdW5jdGlvbiBZbihlKXtyZXR1cm4gbmV3IHhyKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTplfSl9Y29uc3QgTnQ9cCgiWm9kT3B0aW9uYWwiLChlLHQpPT57cGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIG5ldyBOdCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3QgWG49cCgiWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9PntDcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlpoKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIG5ldyBYbih7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3QgRXI9cCgiWm9kTnVsbGFibGUiLChlLHQpPT57RXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5rYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIGd0KGUpe3JldHVybiBuZXcgRXIoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6ZX0pfWZ1bmN0aW9uIGNjKGUpe3JldHVybiBWKGd0KGUpKX1jb25zdCBPcj1wKCJab2REZWZhdWx0IiwoZSx0KT0+e09wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVEZWZhdWx0PWUudW53cmFwfSk7ZnVuY3Rpb24gQXIoZSx0KXtyZXR1cm4gbmV3IE9yKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpxbyh0KX19KX1jb25zdCBScj1wKCJab2RQcmVmYXVsdCIsKGUsdCk9PntBcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gWnIoZSx0KXtyZXR1cm4gbmV3IFJyKHt0eXBlOiJwcmVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6cW8odCl9fSl9Y29uc3QgZW89cCgiWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57UnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT53YigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIG5ldyBlbyh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTplLC4uLnkodCl9KX1jb25zdCBqcj1wKCJab2RTdWNjZXNzIiwoZSx0KT0+e1pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB1YyhlKXtyZXR1cm4gbmV3IGpyKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6ZX0pfWNvbnN0IE1yPXAoIlpvZENhdGNoIiwoZSx0KT0+e05wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVDYXRjaD1lLnVud3JhcH0pO2Z1bmN0aW9uIHFyKGUsdCl7cmV0dXJuIG5ldyBNcih7dHlwZToiY2F0Y2giLGlubmVyVHlwZTplLGNhdGNoVmFsdWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpScyh0KX0pfWNvbnN0IERyPXAoIlpvZE5hTiIsKGUsdCk9PntqcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmFiKCl9KTtmdW5jdGlvbiBsYyhlKXtyZXR1cm4gJGgoRHIsZSl9Y29uc3QganQ9cCgiWm9kUGlwZSIsKGUsdCk9PntoaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRiKCksZS5pbj10LmluLGUub3V0PXQub3V0fSk7ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gbmV3IGp0KHt0eXBlOiJwaXBlIixpbjplLG91dDp0fSl9Y29uc3QgTXQ9cCgiWm9kQ29kZWMiLChlLHQpPT57anQuaW5pdChlLHQpLGZpLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGRjKGUsdCxuKXtyZXR1cm4gbmV3IE10KHt0eXBlOiJwaXBlIixpbjplLG91dDp0LHRyYW5zZm9ybTpuLmRlY29kZSxyZXZlcnNlVHJhbnNmb3JtOm4uZW5jb2RlfSl9ZnVuY3Rpb24gcGMoZSl7Y29uc3QgdD1lLl96b2QuZGVmO3JldHVybiBuZXcgTXQoe3R5cGU6InBpcGUiLGluOnQub3V0LG91dDp0LmluLHRyYW5zZm9ybTp0LnJldmVyc2VUcmFuc2Zvcm0scmV2ZXJzZVRyYW5zZm9ybTp0LnRyYW5zZm9ybX0pfWNvbnN0IExyPXAoIlpvZFByZXByb2Nlc3MiLChlLHQpPT57anQuaW5pdChlLHQpLE1wLmluaXQoZSx0KX0pLFVyPXAoIlpvZFJlYWRvbmx5IiwoZSx0KT0+e3FwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBGcihlKXtyZXR1cm4gbmV3IFVyKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOmV9KX1jb25zdCBIcj1wKCJab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57RHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jYigpfSk7ZnVuY3Rpb24gaGMoZSx0KXtyZXR1cm4gbmV3IEhyKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czplLC4uLnkodCl9KX1jb25zdCBCcj1wKCJab2RMYXp5IiwoZSx0KT0+e21pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5nZXR0ZXIoKX0pO2Z1bmN0aW9uIFZyKGUpe3JldHVybiBuZXcgQnIoe3R5cGU6ImxhenkiLGdldHRlcjplfSl9Y29uc3QgSnI9cCgiWm9kUHJvbWlzZSIsKGUsdCk9PntVcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlBiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gZmMoZSl7cmV0dXJuIG5ldyBKcih7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOmV9KX1jb25zdCBLcj1wKCJab2RGdW5jdGlvbiIsKGUsdCk9PntMcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnBiKCl9KTtmdW5jdGlvbiBidChlKXtyZXR1cm4gbmV3IEtyKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6QXJyYXkuaXNBcnJheShlPy5pbnB1dCk/U3IoZT8uaW5wdXQpOmU/LmlucHV0Pz9QKEQoKSksb3V0cHV0OmU/Lm91dHB1dD8/RCgpfSl9Y29uc3QgcXQ9cCgiWm9kQ3VzdG9tIiwoZSx0KT0+e0ZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZGIoKX0pO2Z1bmN0aW9uIG1jKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJjdXN0b20ifSk7cmV0dXJuIHQuX3pvZC5jaGVjaz1lLHR9ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gVGgocXQsZT8/KCgpPT4hMCksdCl9ZnVuY3Rpb24gR3IoZSx0PXt9KXtyZXR1cm4gSWgocXQsZSx0KX1mdW5jdGlvbiBRcihlLHQpe3JldHVybiBQaChlLHQpfWNvbnN0IGdjPUNoLGJjPUVoLFlyPXAoIlpvZEluc3RhbmNlT2YiLChlLHQpPT57cXQuaW5pdChlLHQpfSx7cHJvcGVydGllcyhlLHQpe3JldHVybiB0aGlzLmNoZWNrKHduKGUsdCkpfX0pO2Z1bmN0aW9uIHZjKGUsdD17fSl7Y29uc3Qgbj1uZXcgWXIoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46bz0+byBpbnN0YW5jZW9mIGUsYWJvcnQ6ITAsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuYmFnLkNsYXNzPWUsbi5fem9kLmNoZWNrPW89PntvLnZhbHVlIGluc3RhbmNlb2YgZXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDplLm5hbWUsaW5wdXQ6by52YWx1ZSxpbnN0Om4scGF0aDpbLi4ubi5fem9kLmRlZi5wYXRoPz9bXV19KX0sbn1jb25zdCB5Yz0oLi4uZSk9Pk9oKHtDb2RlYzpNdCxCb29sZWFuOkV0LFN0cmluZzpTdH0sLi4uZSk7ZnVuY3Rpb24gX2MoZSl7Y29uc3QgdD1WcigoKT0+TyhbaChlKSxDKCksTCgpLEtuKCksUCh0KSxSKGgoKSx0KV0pKTtyZXR1cm4gdH1mdW5jdGlvbiB0byhlLHQpe3JldHVybiBuZXcgTHIoe3R5cGU6InBpcGUiLGluOlluKGUpLG91dDp0fSl9Y29uc3QgTmI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZEFueTptcixab2RBcnJheTp5cixab2RCYXNlNjQ6Rm4sWm9kQmFzZTY0VVJMOkhuLFpvZEJpZ0ludDpPdCxab2RCaWdJbnRGb3JtYXQ6Sm4sWm9kQm9vbGVhbjpFdCxab2RDSURSdjQ6TG4sWm9kQ0lEUnY2OlVuLFpvZENVSUQ6Um4sWm9kQ1VJRDI6Wm4sWm9kQ2F0Y2g6TXIsWm9kQ29kZWM6TXQsWm9kQ3JlZGl0Q2FyZDpscixab2RDdXN0b206cXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OlZlLFpvZERhdGU6R24sWm9kRGVmYXVsdDpPcixab2REaXNjcmltaW5hdGVkVW5pb246a3IsWm9kRTE2NDpCbixab2RFbWFpbDpDbixab2RFbW9qaTpPbixab2RFbnVtOm50LFpvZEV4YWN0T3B0aW9uYWw6WG4sWm9kRmlsZTpQcixab2RGdW5jdGlvbjpLcixab2RHVUlEOkVuLFpvZElCQU46ZHIsWm9kSVB2NDpxbixab2RJUHY2OkRuLFpvZElTT0RhdGU6VHQsWm9kSVNPRGF0ZVRpbWU6enQsWm9kSVNPRHVyYXRpb246UHQsWm9kSVNPVGltZTpJdCxab2RJbnN0YW5jZU9mOllyLFpvZEludGVyc2VjdGlvbjp3cixab2RKV1Q6Vm4sWm9kS1NVSUQ6TW4sWm9kTGF6eTpCcixab2RMaXRlcmFsOklyLFpvZE1BQzp1cixab2RNYXA6enIsWm9kTmFOOkRyLFpvZE5hbm9JRDpBbixab2ROZXZlcjpicixab2ROb25PcHRpb25hbDplbyxab2ROdWxsOmZyLFpvZE51bGxhYmxlOkVyLFpvZE51bWJlcjpDdCxab2ROdW1iZXJGb3JtYXQ6SmUsWm9kT2JqZWN0OkF0LFpvZE9wdGlvbmFsOk50LFpvZFBpcGU6anQsWm9kUHJlZmF1bHQ6UnIsWm9kUHJlcHJvY2VzczpMcixab2RQcm9taXNlOkpyLFpvZFJlYWRvbmx5OlVyLFpvZFJlY29yZDp0dCxab2RTZXQ6VHIsWm9kU3RyaW5nOlN0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6anIsWm9kU3ltYm9sOnByLFpvZFRlbXBsYXRlTGl0ZXJhbDpIcixab2RUcmFuc2Zvcm06eHIsWm9kVHVwbGU6JHIsWm9kVHlwZTpFLFpvZFVMSUQ6Tm4sWm9kVVJMOnh0LFpvZFVVSUQ6SWUsWm9kVW5kZWZpbmVkOmhyLFpvZFVuaW9uOlJ0LFpvZFVua25vd246Z3IsWm9kVm9pZDp2cixab2RYSUQ6am4sWm9kWG9yOl9yLF9ab2RTdHJpbmc6eG4sX2RlZmF1bHQ6QXIsX2Z1bmN0aW9uOmJ0LGFueTpXbixhcnJheTpQLGJhc2U2NDpPYSxiYXNlNjR1cmw6QWEsYmlnaW50OkphLGJvb2xlYW46TCxjYXRjaDpxcixjaGVjazptYyxjaWRydjQ6Q2EsY2lkcnY2OkVhLGNvZGVjOmRjLGNyZWRpdENhcmQ6WmEsY3VpZDp3YSxjdWlkMjokYSxjdXJyZW5jeUNvZGU6TGEsY3VzdG9tOldyLGRhdGU6WWEsZGVzY3JpYmU6Z2MsZGlzY3JpbWluYXRlZFVuaW9uOlFuLGUxNjQ6UmEsZW1haWw6cGEsZW1vamk6X2EsZW51bTppZSxleGFjdE9wdGlvbmFsOkNyLGZpbGU6YWMsZmxvYXQzMjpGYSxmbG9hdDY0OkhhLGZ1bmN0aW9uOmJ0LGd1aWQ6aGEsaGFzaDpVYSxoZXg6RGEsaG9zdG5hbWU6cWEsaHR0cFVybDp5YSxpYmFuOk5hLGluc3RhbmNlb2Y6dmMsaW50OlF0LGludDMyOkJhLGludDY0OkthLGludGVyc2VjdGlvbjpadCxpbnZlcnRDb2RlYzpwYyxpcHY0OklhLGlwdjY6eGEsanNvbjpfYyxqd3Q6amEsa2V5b2Y6WGEsa3N1aWQ6VGEsbGF6eTpWcixsaXRlcmFsOmYsbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6b2MsbWFjOlBhLG1hcDpyYyxtZXRhOmJjLG5hbjpsYyxuYW5vaWQ6a2EsbmF0aXZlRW51bTppYyxuZXZlcjpldCxub25vcHRpb25hbDpOcixudWxsOktuLG51bGxhYmxlOmd0LG51bGxpc2g6Y2MsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6VixwYXJ0aWFsUmVjb3JkOm5jLHBpcGU6WXQscHJlZmF1bHQ6WnIscHJlcHJvY2Vzczp0byxwcm9taXNlOmZjLHJlYWRvbmx5OkZyLHJlY29yZDpSLHJlZmluZTpHcixzZXQ6c2Msc3RyaWN0T2JqZWN0OmVjLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpNYSxzdHJpbmdib29sOnljLHN1Y2Nlc3M6dWMsc3VwZXJSZWZpbmU6UXIsc3ltYm9sOkdhLHRlbXBsYXRlTGl0ZXJhbDpoYyx0cmFuc2Zvcm06WW4sdHVwbGU6U3IsdWludDMyOlZhLHVpbnQ2NDpXYSx1bGlkOlNhLHVuZGVmaW5lZDptdCx1bmlvbjpPLHVua25vd246RCx1cmw6dmEsdXVpZDpmYSx1dWlkdjQ6bWEsdXVpZHY2OmdhLHV1aWR2NzpiYSx2b2lkOlFhLHhpZDp6YSx4b3I6dGN9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksRGg9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIExoKGUpe3RlKHtjdXN0b21FcnJvcjplfSl9ZnVuY3Rpb24gVWgoKXtyZXR1cm4gdGUoKS5jdXN0b21FcnJvcn12YXIgUG87UG98fChQbz17fSk7ZnVuY3Rpb24gRmgoZSl7cmV0dXJuIEppKHp0LGUpfWZ1bmN0aW9uIGpiKGUpe3JldHVybiBLaShUdCxlKX1mdW5jdGlvbiBNYihlKXtyZXR1cm4gV2koSXQsZSl9ZnVuY3Rpb24gcWIoZSl7cmV0dXJuIEdpKFB0LGUpfWNvbnN0IGtjPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RJU09EYXRlOlR0LFpvZElTT0RhdGVUaW1lOnp0LFpvZElTT0R1cmF0aW9uOlB0LFpvZElTT1RpbWU6SXQsZGF0ZTpqYixkYXRldGltZTpGaCxkdXJhdGlvbjpxYix0aW1lOk1ifSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFM9ey4uLk5iLC4uLlJiLGlzbzprY30sRGI9bmV3IFNldChbIiRzY2hlbWEiLCIkcmVmIiwiJGRlZnMiLCJkZWZpbml0aW9ucyIsIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIiwidHlwZSIsImVudW0iLCJjb25zdCIsImFueU9mIiwib25lT2YiLCJhbGxPZiIsIm5vdCIsInByb3BlcnRpZXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVzIiwibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiLCJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwibWluSXRlbXMiLCJtYXhJdGVtcyIsInVuaXF1ZUl0ZW1zIiwiY29udGFpbnMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIiwibWluTGVuZ3RoIiwibWF4TGVuZ3RoIiwicGF0dGVybiIsImZvcm1hdCIsIm1pbmltdW0iLCJtYXhpbXVtIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtdWx0aXBsZU9mIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiaWYiLCJ0aGVuIiwiZWxzZSIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbnRSZXF1aXJlZCIsIm51bGxhYmxlIiwicmVhZE9ubHkiXSk7ZnVuY3Rpb24gTGIoZSx0KXtjb25zdCBuPWUuJHNjaGVtYTtyZXR1cm4gbj09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI/ImRyYWZ0LTIwMjAtMTIiOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIj8iZHJhZnQtNyI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiPyJkcmFmdC00Ijp0Pz8iZHJhZnQtMjAyMC0xMiJ9ZnVuY3Rpb24geXUoZSx0KXtyZXR1cm4gZS5tYXAoKG4sbyk9Pm88dD9uOm4ub3B0aW9uYWwoKSl9ZnVuY3Rpb24gVWIoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBGYihlLHQpe2lmKCFlLnN0YXJ0c1dpdGgoIiMiKSl0aHJvdyBuZXcgRXJyb3IoIkV4dGVybmFsICRyZWYgaXMgbm90IHN1cHBvcnRlZCwgb25seSBsb2NhbCByZWZzICgjLy4uLikgYXJlIGFsbG93ZWQiKTtjb25zdCBuPWUuc2xpY2UoMSkuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0LnJvb3RTY2hlbWE7Y29uc3Qgbz10LnZlcnNpb249PT0iZHJhZnQtMjAyMC0xMiI/IiRkZWZzIjoiZGVmaW5pdGlvbnMiO2lmKG5bMF09PT1vKXtjb25zdCByPW5bMV09PT12b2lkIDA/dm9pZCAwOlViKG5bMV0pO2lmKCFyfHwhdC5kZWZzW3JdKXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiB0LmRlZnNbcl19dGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCl9ZnVuY3Rpb24gSGIoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZih0eXBlb2YgciE9Im9iamVjdCJ8fHI9PT1udWxsfHxBcnJheS5pc0FycmF5KHIpKXJldHVybjtjb25zdCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpO2lmKHQubWluUHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluUHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIHNtYWxsOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA+PSR7dC5taW5Qcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQubWF4UHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heFByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBiaWc6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlIDw9JHt0Lm1heFByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5rZXlTY2hlbWEpZm9yKGNvbnN0IGEgb2Ygcyl7Y29uc3QgaT10LmtleVNjaGVtYS5zYWZlUGFyc2UoYSk7aS5zdWNjZXNzfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczppLmVycm9yLmlzc3VlcyxpbnB1dDphLHBhdGg6W2FdLGNvbnRpbnVlOiEwfSl9fSkucGlwZShlKX1mdW5jdGlvbiB6cyhlLHQpe2lmKGU9PT1udWxsKXJldHVybiJ6Ijtjb25zdCBuPXR5cGVvZiBlO2lmKG4hPT0ib2JqZWN0Iil7aWYobj09PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1TdHJpbmcoZSk7cmV0dXJuYCR7blswXX0ke28ubGVuZ3RofToke299YH1pZih0LmhhcyhlKSlyZXR1cm4gbnVsbDt0LmFkZChlKTt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcz1bXTtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBpPXpzKGEsdCk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7cy5wdXNoKGkpfXJldHVybmBhJHtzLmxlbmd0aH06WyR7cy5qb2luKCIsIil9XWB9Y29uc3Qgbz1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1bXTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBhPXpzKGVbc10sdCk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7ci5wdXNoKGAke3MubGVuZ3RofToke3N9PSR7YX1gKX1yZXR1cm5gbyR7ci5sZW5ndGh9Onske3Iuam9pbigiLCIpfX1gfWZpbmFsbHl7dC5kZWxldGUoZSl9fWNvbnN0IEJiPW5ldyBTZXQoWyJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb250YWlucyIsInByb3BlcnR5TmFtZXMiLCJub3QiLCJpZiIsInRoZW4iLCJlbHNlIiwiYWxsT2YiLCJhbnlPZiIsIm9uZU9mIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImNvbnRlbnRTY2hlbWEiXSksVmI9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbmNpZXMiLCIkZGVmcyIsImRlZmluaXRpb25zIl0pO2Z1bmN0aW9uIFZ0KGUpe3JldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKFZ0KTp0eXBlb2YgZS4kcmVmPT0ic3RyaW5nIj8hMDpPYmplY3QuZW50cmllcyhlKS5zb21lKChbdCxuXSk9PkJiLmhhcyh0KT9WdChuKTohVmIuaGFzKHQpfHx0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsPyExOk9iamVjdC52YWx1ZXMobikuc29tZShWdCkpfWZ1bmN0aW9uIF91KGUpe3JldHVybiBlPT09MT8iZWxlbWVudCI6ImVsZW1lbnRzIn1mdW5jdGlvbiBKYihlLHQpe3JldHVybiBTLnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHQudW5pcXVlSXRlbXM9PT0hMCl7Y29uc3Qgcz1uZXcgTWFwO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKXtjb25zdCBpPXpzKHJbYV0sbmV3IFNldCk7aWYoaT09PW51bGwpY29udGludWU7Y29uc3QgYz1zLmdldChpKTtpZihjPT09dm9pZCAwKXtzLnNldChpLGEpO2NvbnRpbnVlfW8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgaXRlbXMgbXVzdCBiZSB1bmlxdWU6IGVsZW1lbnQgYXQgaW5kZXggJHthfSBkdXBsaWNhdGVzIHRoZSBvbmUgYXQgaW5kZXggJHtjfWAsaW5wdXQ6cixwYXRoOlthXSxjb250aW51ZTohMH0pfX1pZih0LmNvbnRhaW5zU2NoZW1hKXtjb25zdCBzPXQubWluQ29udGFpbnM/PzEsYT10Lm1heENvbnRhaW5zIT09dm9pZCAwP3QubWF4Q29udGFpbnMrMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGk9MDtmb3IoY29uc3QgYyBvZiByKWlmKHQuY29udGFpbnNTY2hlbWEuc2FmZVBhcnNlKGMpLnN1Y2Nlc3MmJisraT49YSlicmVhaztpPHMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7c30gbWF0Y2hpbmcgJHtfdShzKX07IGZvdW5kICR7aX1gLGlucHV0OnIsY29udGludWU6ITB9KSx0Lm1heENvbnRhaW5zIT09dm9pZCAwJiZpPnQubWF4Q29udGFpbnMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IG1vc3QgJHt0Lm1heENvbnRhaW5zfSBtYXRjaGluZyAke191KHQubWF4Q29udGFpbnMpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pfX19KS5waXBlKGUpfWZ1bmN0aW9uIGt1KGUsdCl7aWYoZSE9PSExKXJldHVybiBlPT09dm9pZCAwfHxlPT09ITA/Uy5hbnkoKTpsZShlLHQpfWNvbnN0IEtiPS9eKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZDpbMC01XVxkKD86XC5cZCspPyg/Olp8WystXSg/OlswMV1cZHwyWzAtM10pOlswLTVdXGQpJC87ZnVuY3Rpb24gSGgoZSx0KXtpZihlLm5vdCE9PXZvaWQgMCl7aWYodHlwZW9mIGUubm90PT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZS5ub3QpLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpcyBub3Qgc3VwcG9ydGVkIGluIFpvZCAoZXhjZXB0IHsgbm90OiB7fSB9IGZvciBuZXZlcikiKX1pZihlLnVuZXZhbHVhdGVkSXRlbXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLnVuZXZhbHVhdGVkUHJvcGVydGllcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkUHJvcGVydGllcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5pZiE9PXZvaWQgMHx8ZS50aGVuIT09dm9pZCAwfHxlLmVsc2UhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb25kaXRpb25hbCBzY2hlbWFzIChpZi90aGVuL2Vsc2UpIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS5kZXBlbmRlbnRTY2hlbWFzIT09dm9pZCAwfHxlLmRlcGVuZGVudFJlcXVpcmVkIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLiRyZWYpe2NvbnN0IHI9ZS4kcmVmO2lmKHQucmVmcy5oYXMocikpcmV0dXJuIHQucmVmcy5nZXQocik7aWYodC5wcm9jZXNzaW5nLmhhcyhyKSlyZXR1cm4gUy5sYXp5KCgpPT57aWYoIXQucmVmcy5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3J9YCk7cmV0dXJuIHQucmVmcy5nZXQocil9KTt0LnByb2Nlc3NpbmcuYWRkKHIpO2NvbnN0IHM9RmIocix0KSxhPWxlKHMsdCk7cmV0dXJuIHQucmVmcy5zZXQocixhKSx0LnByb2Nlc3NpbmcuZGVsZXRlKHIpLGF9aWYoZS5lbnVtIT09dm9pZCAwKXtjb25zdCByPWUuZW51bTtpZih0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiZlLm51bGxhYmxlPT09ITAmJnIubGVuZ3RoPT09MSYmclswXT09PW51bGwpcmV0dXJuIFMubnVsbCgpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gUy5uZXZlcigpO2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gUy5saXRlcmFsKHJbMF0pO2lmKHIuZXZlcnkoYT0+dHlwZW9mIGE9PSJzdHJpbmciKSlyZXR1cm4gUy5lbnVtKHIpO2NvbnN0IHM9ci5tYXAoYT0+Uy5saXRlcmFsKGEpKTtyZXR1cm4gcy5sZW5ndGg8Mj9zWzBdOlMudW5pb24oW3NbMF0sc1sxXSwuLi5zLnNsaWNlKDIpXSl9aWYoZS5jb25zdCE9PXZvaWQgMClyZXR1cm4gUy5saXRlcmFsKGUuY29uc3QpO2NvbnN0IG49ZS50eXBlO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IHI9bi5tYXAocz0+e2NvbnN0IGE9ey4uLmUsdHlwZTpzfTtyZXR1cm4gSGgoYSx0KX0pO3JldHVybiByLmxlbmd0aD09PTA/Uy5uZXZlcigpOnIubGVuZ3RoPT09MT9yWzBdOlMudW5pb24ocil9aWYoIW4pcmV0dXJuIFMuYW55KCk7bGV0IG87c3dpdGNoKG4pe2Nhc2Uic3RyaW5nIjp7bGV0IHI9Uy5zdHJpbmcoKTtpZihlLmZvcm1hdCl7Y29uc3Qgcz1lLmZvcm1hdDtzPT09ImVtYWlsIj9yPXIuY2hlY2soUy5lbWFpbCgpKTpzPT09InVyaSJ8fHM9PT0idXJpLXJlZmVyZW5jZSI/cj1yLmNoZWNrKFMudXJsKCkpOnM9PT0idXVpZCJ8fHM9PT0iZ3VpZCI/cj1yLmNoZWNrKFMudXVpZCgpKTpzPT09ImRhdGUtdGltZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGV0aW1lKHtvZmZzZXQ6ITB9KSk6cz09PSJkYXRlIj9yPXIuY2hlY2soUy5pc28uZGF0ZSgpKTpzPT09InRpbWUiP3I9ci5jaGVjayhTLnJlZ2V4KEtiKSk6cz09PSJkdXJhdGlvbiI/cj1yLmNoZWNrKFMuaXNvLmR1cmF0aW9uKCkpOnM9PT0iaG9zdG5hbWUiP3I9ci5jaGVjayhTLmhvc3RuYW1lKCkpOnM9PT0iaXB2NCI/cj1yLmNoZWNrKFMuaXB2NCgpKTpzPT09ImlwdjYiP3I9ci5jaGVjayhTLmlwdjYoKSk6cz09PSJtYWMiP3I9ci5jaGVjayhTLm1hYygpKTpzPT09ImNpZHIiP3I9ci5jaGVjayhTLmNpZHJ2NCgpKTpzPT09ImNpZHItdjYiP3I9ci5jaGVjayhTLmNpZHJ2NigpKTpzPT09ImJhc2U2NCI/cj1yLmNoZWNrKFMuYmFzZTY0KCkpOnM9PT0iYmFzZTY0dXJsIj9yPXIuY2hlY2soUy5iYXNlNjR1cmwoKSk6cz09PSJlMTY0Ij9yPXIuY2hlY2soUy5lMTY0KCkpOnM9PT0iY3JlZGl0X2NhcmQiP3I9ci5jaGVjayhTLmNyZWRpdENhcmQoKSk6cz09PSJpYmFuIj9yPXIuY2hlY2soUy5pYmFuKCkpOnM9PT0iand0Ij9yPXIuY2hlY2soUy5qd3QoKSk6cz09PSJlbW9qaSI/cj1yLmNoZWNrKFMuZW1vamkoKSk6cz09PSJuYW5vaWQiP3I9ci5jaGVjayhTLm5hbm9pZCgpKTpzPT09ImN1aWQiP3I9ci5jaGVjayhTLmN1aWQoKSk6cz09PSJjdWlkMiI/cj1yLmNoZWNrKFMuY3VpZDIoKSk6cz09PSJ1bGlkIj9yPXIuY2hlY2soUy51bGlkKCkpOnM9PT0ieGlkIj9yPXIuY2hlY2soUy54aWQoKSk6cz09PSJrc3VpZCImJihyPXIuY2hlY2soUy5rc3VpZCgpKSl9dHlwZW9mIGUubWluTGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5taW4oZS5taW5MZW5ndGgpKSx0eXBlb2YgZS5tYXhMZW5ndGg9PSJudW1iZXIiJiYocj1yLm1heChlLm1heExlbmd0aCkpLGUucGF0dGVybiYmKHI9ci5yZWdleChuZXcgUmVnRXhwKGUucGF0dGVybikpKSxvPXI7YnJlYWt9Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6e2xldCByPW49PT0iaW50ZWdlciI/Uy5udW1iZXIoKS5pbnQoKTpTLm51bWJlcigpO3R5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1pbmltdW0hPT0hMCYmKHI9ci5taW4oZS5taW5pbXVtKSksdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWF4aW11bSE9PSEwJiYocj1yLm1heChlLm1heGltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNaW5pbXVtPT0ibnVtYmVyIj9yPXIuZ3QoZS5leGNsdXNpdmVNaW5pbXVtKTplLmV4Y2x1c2l2ZU1pbmltdW09PT0hMCYmdHlwZW9mIGUubWluaW11bT09Im51bWJlciImJihyPXIuZ3QoZS5taW5pbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWF4aW11bT09Im51bWJlciI/cj1yLmx0KGUuZXhjbHVzaXZlTWF4aW11bSk6ZS5leGNsdXNpdmVNYXhpbXVtPT09ITAmJnR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiYocj1yLmx0KGUubWF4aW11bSkpLHR5cGVvZiBlLm11bHRpcGxlT2Y9PSJudW1iZXIiJiYocj1yLm11bHRpcGxlT2YoZS5tdWx0aXBsZU9mKSksbz1yO2JyZWFrfWNhc2UiYm9vbGVhbiI6e289Uy5ib29sZWFuKCk7YnJlYWt9Y2FzZSJudWxsIjp7bz1TLm51bGwoKTticmVha31jYXNlIm9iamVjdCI6e2NvbnN0IHI9e30scz1lLnByb3BlcnRpZXN8fHt9LGE9bmV3IFNldChlLnJlcXVpcmVkfHxbXSksaT10eXBlb2YgZS5hZGRpdGlvbmFsUHJvcGVydGllcz09Im9iamVjdCI/bGUoZS5hZGRpdGlvbmFsUHJvcGVydGllcyx0KTp2b2lkIDA7Zm9yKGNvbnN0W20sYl1vZiBPYmplY3QuZW50cmllcyhzKSl7Y29uc3Qgdj1sZShiLHQpO290KHIsbSxhLmhhcyhtKT92OnYub3B0aW9uYWwoKSl9aWYoZS5wYXR0ZXJuUHJvcGVydGllcyl7Y29uc3QgbT1lLnBhdHRlcm5Qcm9wZXJ0aWVzLGI9T2JqZWN0LmtleXMobSksdj1bXTtmb3IoY29uc3QgdyBvZiBiKXtjb25zdCAkPWxlKG1bd10sdCksWj1TLnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAodykpO3YucHVzaChTLmxvb3NlUmVjb3JkKFosJCkpfWNvbnN0IF89W107aWYoT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJl8ucHVzaChTLm9iamVjdChyKS5wYXNzdGhyb3VnaCgpKSxfLnB1c2goLi4udiksXy5sZW5ndGg9PT0wKW89Uy5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCk7ZWxzZSBpZihfLmxlbmd0aD09PTEpbz1fWzBdO2Vsc2V7bGV0IHc9Uy5pbnRlcnNlY3Rpb24oX1swXSxfWzFdKTtmb3IobGV0ICQ9MjskPF8ubGVuZ3RoOyQrKyl3PVMuaW50ZXJzZWN0aW9uKHcsX1skXSk7bz13fWlmKGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSl7Y29uc3Qgdz1PYmplY3Qua2V5cyhyKSwkPWIubWFwKFQ9Pm5ldyBSZWdFeHAoVCkpLFo9bztvPW8uY2hlY2soVD0+e2lmKCFGZShULnZhbHVlKSlyZXR1cm47Y29uc3QgSz1bXTtmb3IoY29uc3Qgb2Ugb2YgT2JqZWN0LmtleXMoVC52YWx1ZSkpdy5pbmNsdWRlcyhvZSl8fCQuc29tZShXPT5XLnRlc3Qob2UpKXx8Sy5wdXNoKG9lKTtLLmxlbmd0aCYmVC5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6SyxpbnB1dDpULnZhbHVlLGluc3Q6Wn0pfSl9fWVsc2V7Y29uc3QgbT1TLm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1tLnN0cmljdCgpOmk/bz1tLmNhdGNoYWxsKGkpOm89bS5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCxsPXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsZD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fGwhPT12b2lkIDB8fGQhPT12b2lkIDApe2xldCBtO2lmKGMpe2NvbnN0IGI9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO209bGUoYix0KX1vPUhiKG8se2tleVNjaGVtYTptLG1pblByb3BlcnRpZXM6bCxtYXhQcm9wZXJ0aWVzOmR9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBhPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsaT1yLm1hcChtPT5sZShtLHQpKSxjPXl1KGksYSksbD1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDprdShzLHQpLGQ9Uy50dXBsZShjKTtvPWw/ZC5yZXN0KGwpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBhPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsaT1zLm1hcChtPT5sZShtLHQpKSxjPXl1KGksYSksbD1rdShlLmFkZGl0aW9uYWxJdGVtcyx0KSxkPVMudHVwbGUoYyk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgYT1sZShzLHQpO2xldCBpPVMuYXJyYXkoYSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoaT1pLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoaT1pLm1heChlLm1heEl0ZW1zKSksbz1pfWVsc2Ugbz1TLmFycmF5KFMuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1KYihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9sZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gbGUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuPUhoKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBpPWUuYW55T2YubWFwKGw9PmxlKGwsdCkpLGM9Uy51bmlvbihpKTtuPW8/Uy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGk9ZS5vbmVPZi5tYXAobD0+bGUobCx0KSksYz1TLnhvcihpKTtuPW8/Uy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOlMuYW55KCk7ZWxzZXtsZXQgaT1vP246bGUoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgbD1jO2w8ZS5hbGxPZi5sZW5ndGg7bCsrKWk9Uy5pbnRlcnNlY3Rpb24oaSxsZShlLmFsbE9mW2xdLHQpKTtuPWl9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj1TLm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPVMucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGkgb2YgcylpIGluIGUmJihyW2ldPWVbaV0pO2NvbnN0IGE9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBpIG9mIGEpaSBpbiBlJiYocltpXT1lW2ldKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFWdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGkgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVtpXSE9PXZvaWQgMCYmKHJbaV09ZVtpXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhVnQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBpIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2ldIT09dm9pZCAwJiYocltpXT1lW2ldKX1mb3IoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhlKSlEYi5oYXMoaSl8fG90KHIsaSxlW2ldKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBCaChlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/Uy5hbnkoKTpTLm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1MYihuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/a2V9O3JldHVybiBsZShuLHMpfWZ1bmN0aW9uIFZoKGUpe3JldHVybiBZaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6TyhuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIFdiKGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEcoZSx1ZShuLHtjaGVja3M6Wy4uLm4uY2hlY2tzPz9bXSwuLi50XX0pLHtwYXJlbnQ6ITB9KX1mdW5jdGlvbiBKaChlKXtyZXR1cm4gV2IoZS5vdXQsZS5jaGVja3MpfWZ1bmN0aW9uIEdiKGUpe3JldHVybiBlLmluLl96b2QudHJhaXRzLmhhcygiJFpvZFRyYW5zZm9ybSIpP0poKGUpOmUuaW59ZnVuY3Rpb24gS2goZSl7cmV0dXJuIFlpKGUse3BpcGU6dD0+R2IodC5fem9kLmRlZiksZGVmYXVsdDoodCxuKT0+bj9WKHQuX3pvZC5kZWYuaW5uZXJUeXBlKTp0LGNhdGNoOih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBXaChlKXtyZXR1cm4gWWkoZSx7cGlwZTp0PT5KaCh0Ll96b2QuZGVmKSxwcmVmYXVsdDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gUWIoZSl7cmV0dXJuIFFwKFN0LGUpfWZ1bmN0aW9uIFliKGUpe3JldHVybiBuaChDdCxlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gdWgoRXQsZSl9ZnVuY3Rpb24gZXYoZSl7cmV0dXJuIGRoKE90LGUpfWZ1bmN0aW9uIHR2KGUpe3JldHVybiB3aChHbixlKX1jb25zdCBHaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmlnaW50OmV2LGJvb2xlYW46WGIsZGF0ZTp0dixudW1iZXI6WWIsc3RyaW5nOlFifSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHd1PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6anMsJGlucHV0OnZpLCRvdXRwdXQ6YmksSU5WQUxJRDpfaSxORVZFUjpOcyxUaW1lUHJlY2lzaW9uOlZpLFpvZEFueTptcixab2RBcnJheTp5cixab2RCYXNlNjQ6Rm4sWm9kQmFzZTY0VVJMOkhuLFpvZEJpZ0ludDpPdCxab2RCaWdJbnRGb3JtYXQ6Sm4sWm9kQm9vbGVhbjpFdCxab2RDSURSdjQ6TG4sWm9kQ0lEUnY2OlVuLFpvZENVSUQ6Um4sWm9kQ1VJRDI6Wm4sWm9kQ2F0Y2g6TXIsWm9kQ29kZWM6TXQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6a2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6d2ksWm9kQ3JlZGl0Q2FyZDpscixab2RDdXN0b206cXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OlZlLFpvZERhdGU6R24sWm9kRGVmYXVsdDpPcixab2REaXNjcmltaW5hdGVkVW5pb246a3IsWm9kRTE2NDpCbixab2RFbWFpbDpDbixab2RFbW9qaTpPbixab2RFbnVtOm50LFpvZEVycm9yOnFoLFpvZEV4YWN0T3B0aW9uYWw6WG4sWm9kRmlsZTpQcixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIFBvfSxab2RGdW5jdGlvbjpLcixab2RHVUlEOkVuLFpvZElCQU46ZHIsWm9kSVB2NDpxbixab2RJUHY2OkRuLFpvZElTT0RhdGU6VHQsWm9kSVNPRGF0ZVRpbWU6enQsWm9kSVNPRHVyYXRpb246UHQsWm9kSVNPVGltZTpJdCxab2RJbnN0YW5jZU9mOllyLFpvZEludGVyc2VjdGlvbjp3cixab2RJc3N1ZUNvZGU6RGgsWm9kSldUOlZuLFpvZEtTVUlEOk1uLFpvZExhenk6QnIsWm9kTGl0ZXJhbDpJcixab2RNQUM6dXIsWm9kTWFwOnpyLFpvZE5hTjpEcixab2ROYW5vSUQ6QW4sWm9kTmV2ZXI6YnIsWm9kTm9uT3B0aW9uYWw6ZW8sWm9kTnVsbDpmcixab2ROdWxsYWJsZTpFcixab2ROdW1iZXI6Q3QsWm9kTnVtYmVyRm9ybWF0OkplLFpvZE9iamVjdDpBdCxab2RPcHRpb25hbDpOdCxab2RQaXBlOmp0LFpvZFByZWZhdWx0OlJyLFpvZFByZXByb2Nlc3M6THIsWm9kUHJvbWlzZTpKcixab2RSZWFkb25seTpVcixab2RSZWFsRXJyb3I6bWUsWm9kUmVjb3JkOnR0LFpvZFNldDpUcixab2RTdHJpbmc6U3QsWm9kU3RyaW5nRm9ybWF0OlUsWm9kU3VjY2Vzczpqcixab2RTeW1ib2w6cHIsWm9kVGVtcGxhdGVMaXRlcmFsOkhyLFpvZFRyYW5zZm9ybTp4cixab2RUdXBsZTokcixab2RUeXBlOkUsWm9kVUxJRDpObixab2RVUkw6eHQsWm9kVVVJRDpJZSxab2RVbmRlZmluZWQ6aHIsWm9kVW5pb246UnQsWm9kVW5rbm93bjpncixab2RWb2lkOnZyLFpvZFhJRDpqbixab2RYb3I6X3IsX1pvZFN0cmluZzp4bixfZGVmYXVsdDpBcixfZnVuY3Rpb246YnQsYW55OlduLGFycmF5OlAsYmFzZTY0Ok9hLGJhc2U2NHVybDpBYSxiaWdpbnQ6SmEsYm9vbGVhbjpMLGNhdGNoOnFyLGNoZWNrOm1jLGNpZHJ2NDpDYSxjaWRydjY6RWEsY2xvbmU6Ryxjb2RlYzpkYyxjb2VyY2U6R2gsY29tcGlsZTokaSxjb25maWc6dGUsY29yZTpOaCxjcmVkaXRDYXJkOlphLGN1aWQ6d2EsY3VpZDI6JGEsY3VycmVuY3lDb2RlOkxhLGN1c3RvbTpXcixkYXRlOllhLGRlY29kZTpzYSxkZWNvZGVBc3luYzphYSxkZWVwUGFydGlhbDpWaCxkZXNjcmliZTpnYyxkaXNjcmltaW5hdGVkVW5pb246UW4sZTE2NDpSYSxlbWFpbDpwYSxlbW9qaTpfYSxlbmNvZGU6cmEsZW5jb2RlQXN5bmM6aWEsZW5kc1dpdGg6a24sZW51bTppZSxleGFjdE9wdGlvbmFsOkNyLGZpbGU6YWMsZmxhdHRlbkVycm9yOlZvLGZsb2F0MzI6RmEsZmxvYXQ2NDpIYSxmb3JtYXRFcnJvcjpKbyxmcm9tSlNPTlNjaGVtYTpCaCxmdW5jdGlvbjpidCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmxpLGdldEVycm9yTWFwOlVoLGdsb2JhbFJlZ2lzdHJ5OmtlLGd0OmplLGd0ZTpiZSxndWlkOmhhLGhhc2g6VWEsaGV4OkRhLGhvc3RuYW1lOnFhLGh0dHBVcmw6eWEsaWJhbjpOYSxpbmNsdWRlczp5bixpbnB1dDpLaCxpbnN0YW5jZW9mOnZjLGludDpRdCxpbnQzMjpCYSxpbnQ2NDpLYSxpbnRlcnNlY3Rpb246WnQsaW52ZXJ0Q29kZWM6cGMsaXB2NDpJYSxpcHY2OnhhLGlzbzprYyxqc29uOl9jLGp3dDpqYSxrZXlvZjpYYSxrc3VpZDpUYSxsYXp5OlZyLGxlbmd0aDp3dCxsaXRlcmFsOmYsbG9jYWxlczpnaSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDpvYyxsb3dlcmNhc2U6Ym4sbHQ6TmUsbHRlOmdlLG1hYzpQYSxtYXA6cmMsbWF4TGVuZ3RoOmt0LG1heFNpemU6cnQsbWVtb2l6ZXI6ZXIsbWV0YTpiYyxtaW1lOiRuLG1pbkxlbmd0aDpIZSxtaW5TaXplOk1lLG11bHRpcGxlT2Y6WGUsbmFuOmxjLG5hbm9pZDprYSxuYXRpdmVFbnVtOmljLG5lZ2F0aXZlOnNyLG5ldmVyOmV0LG5vbm5lZ2F0aXZlOmFyLG5vbm9wdGlvbmFsOk5yLG5vbnBvc2l0aXZlOmlyLG5vcm1hbGl6ZTpTbixudWxsOktuLG51bGxhYmxlOmd0LG51bGxpc2g6Y2MsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6VixvdXRwdXQ6V2gsb3ZlcndyaXRlOk9lLHBhcnNlOmVhLHBhcnNlQXN5bmM6dGEscGFydGlhbFJlY29yZDpuYyxwaXBlOll0LHBvc2l0aXZlOnJyLHByZWZhdWx0OlpyLHByZXByb2Nlc3M6dG8scHJldHRpZnlFcnJvcjpxcyxwcm9taXNlOmZjLHByb3BlcnRpZXM6d24scHJvcGVydHk6Y3IscmVhZG9ubHk6RnIscmVjb3JkOlIscmVmaW5lOkdyLHJlZ2V4OmduLHJlZ2V4ZXM6WW8scmVnaXN0cnk6dHIsc2FmZURlY29kZTp1YSxzYWZlRGVjb2RlQXN5bmM6ZGEsc2FmZUVuY29kZTpjYSxzYWZlRW5jb2RlQXN5bmM6bGEsc2FmZVBhcnNlOm5hLHNhZmVQYXJzZUFzeW5jOm9hLHNldDpzYyxzZXRFcnJvck1hcDpMaCxzaXplOl90LHNsdWdpZnk6UG4sc3RhcnRzV2l0aDpfbixzdHJpY3RPYmplY3Q6ZWMsc3RyaW5nOmgsc3RyaW5nRm9ybWF0Ok1hLHN0cmluZ2Jvb2w6eWMsc3VjY2Vzczp1YyxzdXBlclJlZmluZTpRcixzeW1ib2w6R2EsdGVtcGxhdGVMaXRlcmFsOmhjLHRvSlNPTlNjaGVtYTpRaSx0b0xvd2VyQ2FzZTpUbix0b1VwcGVyQ2FzZTpJbix0b1pvZDpqbyx0cmFuc2Zvcm06WW4sdHJlZWlmeUVycm9yOk1zLHRyaW06em4sdHVwbGU6U3IsdWludDMyOlZhLHVpbnQ2NDpXYSx1bGlkOlNhLHVuZGVmaW5lZDptdCx1bmlvbjpPLHVua25vd246RCx1cHBlcmNhc2U6dm4sdXJsOnZhLHV0aWw6WnMsdXVpZDpmYSx1dWlkdjQ6bWEsdXVpZHY2OmdhLHV1aWR2NzpiYSx2YWxpZGF0ZTpXbyx2YWxpZGF0ZUFzeW5jOkdvLHZvaWQ6UWEsd2l0aFBhcnNlcjpTaSx4aWQ6emEseG9yOnRjfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLG52PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6anMsJGlucHV0OnZpLCRvdXRwdXQ6YmksSU5WQUxJRDpfaSxORVZFUjpOcyxUaW1lUHJlY2lzaW9uOlZpLFpvZEFueTptcixab2RBcnJheTp5cixab2RCYXNlNjQ6Rm4sWm9kQmFzZTY0VVJMOkhuLFpvZEJpZ0ludDpPdCxab2RCaWdJbnRGb3JtYXQ6Sm4sWm9kQm9vbGVhbjpFdCxab2RDSURSdjQ6TG4sWm9kQ0lEUnY2OlVuLFpvZENVSUQ6Um4sWm9kQ1VJRDI6Wm4sWm9kQ2F0Y2g6TXIsWm9kQ29kZWM6TXQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6a2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6d2ksWm9kQ3JlZGl0Q2FyZDpscixab2RDdXN0b206cXQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OlZlLFpvZERhdGU6R24sWm9kRGVmYXVsdDpPcixab2REaXNjcmltaW5hdGVkVW5pb246a3IsWm9kRTE2NDpCbixab2RFbWFpbDpDbixab2RFbW9qaTpPbixab2RFbnVtOm50LFpvZEVycm9yOnFoLFpvZEV4YWN0T3B0aW9uYWw6WG4sWm9kRmlsZTpQcixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIFBvfSxab2RGdW5jdGlvbjpLcixab2RHVUlEOkVuLFpvZElCQU46ZHIsWm9kSVB2NDpxbixab2RJUHY2OkRuLFpvZElTT0RhdGU6VHQsWm9kSVNPRGF0ZVRpbWU6enQsWm9kSVNPRHVyYXRpb246UHQsWm9kSVNPVGltZTpJdCxab2RJbnN0YW5jZU9mOllyLFpvZEludGVyc2VjdGlvbjp3cixab2RJc3N1ZUNvZGU6RGgsWm9kSldUOlZuLFpvZEtTVUlEOk1uLFpvZExhenk6QnIsWm9kTGl0ZXJhbDpJcixab2RNQUM6dXIsWm9kTWFwOnpyLFpvZE5hTjpEcixab2ROYW5vSUQ6QW4sWm9kTmV2ZXI6YnIsWm9kTm9uT3B0aW9uYWw6ZW8sWm9kTnVsbDpmcixab2ROdWxsYWJsZTpFcixab2ROdW1iZXI6Q3QsWm9kTnVtYmVyRm9ybWF0OkplLFpvZE9iamVjdDpBdCxab2RPcHRpb25hbDpOdCxab2RQaXBlOmp0LFpvZFByZWZhdWx0OlJyLFpvZFByZXByb2Nlc3M6THIsWm9kUHJvbWlzZTpKcixab2RSZWFkb25seTpVcixab2RSZWFsRXJyb3I6bWUsWm9kUmVjb3JkOnR0LFpvZFNldDpUcixab2RTdHJpbmc6U3QsWm9kU3RyaW5nRm9ybWF0OlUsWm9kU3VjY2Vzczpqcixab2RTeW1ib2w6cHIsWm9kVGVtcGxhdGVMaXRlcmFsOkhyLFpvZFRyYW5zZm9ybTp4cixab2RUdXBsZTokcixab2RUeXBlOkUsWm9kVUxJRDpObixab2RVUkw6eHQsWm9kVVVJRDpJZSxab2RVbmRlZmluZWQ6aHIsWm9kVW5pb246UnQsWm9kVW5rbm93bjpncixab2RWb2lkOnZyLFpvZFhJRDpqbixab2RYb3I6X3IsX1pvZFN0cmluZzp4bixfZGVmYXVsdDpBcixfZnVuY3Rpb246YnQsYW55OlduLGFycmF5OlAsYmFzZTY0Ok9hLGJhc2U2NHVybDpBYSxiaWdpbnQ6SmEsYm9vbGVhbjpMLGNhdGNoOnFyLGNoZWNrOm1jLGNpZHJ2NDpDYSxjaWRydjY6RWEsY2xvbmU6Ryxjb2RlYzpkYyxjb2VyY2U6R2gsY29tcGlsZTokaSxjb25maWc6dGUsY29yZTpOaCxjcmVkaXRDYXJkOlphLGN1aWQ6d2EsY3VpZDI6JGEsY3VycmVuY3lDb2RlOkxhLGN1c3RvbTpXcixkYXRlOllhLGRlY29kZTpzYSxkZWNvZGVBc3luYzphYSxkZWVwUGFydGlhbDpWaCxkZWZhdWx0Ond1LGRlc2NyaWJlOmdjLGRpc2NyaW1pbmF0ZWRVbmlvbjpRbixlMTY0OlJhLGVtYWlsOnBhLGVtb2ppOl9hLGVuY29kZTpyYSxlbmNvZGVBc3luYzppYSxlbmRzV2l0aDprbixlbnVtOmllLGV4YWN0T3B0aW9uYWw6Q3IsZmlsZTphYyxmbGF0dGVuRXJyb3I6Vm8sZmxvYXQzMjpGYSxmbG9hdDY0OkhhLGZvcm1hdEVycm9yOkpvLGZyb21KU09OU2NoZW1hOkJoLGZ1bmN0aW9uOmJ0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246bGksZ2V0RXJyb3JNYXA6VWgsZ2xvYmFsUmVnaXN0cnk6a2UsZ3Q6amUsZ3RlOmJlLGd1aWQ6aGEsaGFzaDpVYSxoZXg6RGEsaG9zdG5hbWU6cWEsaHR0cFVybDp5YSxpYmFuOk5hLGluY2x1ZGVzOnluLGlucHV0OktoLGluc3RhbmNlb2Y6dmMsaW50OlF0LGludDMyOkJhLGludDY0OkthLGludGVyc2VjdGlvbjpadCxpbnZlcnRDb2RlYzpwYyxpcHY0OklhLGlwdjY6eGEsaXNvOmtjLGpzb246X2Msand0OmphLGtleW9mOlhhLGtzdWlkOlRhLGxhenk6VnIsbGVuZ3RoOnd0LGxpdGVyYWw6Zixsb2NhbGVzOmdpLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOm9jLGxvd2VyY2FzZTpibixsdDpOZSxsdGU6Z2UsbWFjOlBhLG1hcDpyYyxtYXhMZW5ndGg6a3QsbWF4U2l6ZTpydCxtZW1vaXplcjplcixtZXRhOmJjLG1pbWU6JG4sbWluTGVuZ3RoOkhlLG1pblNpemU6TWUsbXVsdGlwbGVPZjpYZSxuYW46bGMsbmFub2lkOmthLG5hdGl2ZUVudW06aWMsbmVnYXRpdmU6c3IsbmV2ZXI6ZXQsbm9ubmVnYXRpdmU6YXIsbm9ub3B0aW9uYWw6TnIsbm9ucG9zaXRpdmU6aXIsbm9ybWFsaXplOlNuLG51bGw6S24sbnVsbGFibGU6Z3QsbnVsbGlzaDpjYyxudW1iZXI6QyxvYmplY3Q6ZyxvcHRpb25hbDpWLG91dHB1dDpXaCxvdmVyd3JpdGU6T2UscGFyc2U6ZWEscGFyc2VBc3luYzp0YSxwYXJ0aWFsUmVjb3JkOm5jLHBpcGU6WXQscG9zaXRpdmU6cnIscHJlZmF1bHQ6WnIscHJlcHJvY2Vzczp0byxwcmV0dGlmeUVycm9yOnFzLHByb21pc2U6ZmMscHJvcGVydGllczp3bixwcm9wZXJ0eTpjcixyZWFkb25seTpGcixyZWNvcmQ6UixyZWZpbmU6R3IscmVnZXg6Z24scmVnZXhlczpZbyxyZWdpc3RyeTp0cixzYWZlRGVjb2RlOnVhLHNhZmVEZWNvZGVBc3luYzpkYSxzYWZlRW5jb2RlOmNhLHNhZmVFbmNvZGVBc3luYzpsYSxzYWZlUGFyc2U6bmEsc2FmZVBhcnNlQXN5bmM6b2Esc2V0OnNjLHNldEVycm9yTWFwOkxoLHNpemU6X3Qsc2x1Z2lmeTpQbixzdGFydHNXaXRoOl9uLHN0cmljdE9iamVjdDplYyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6TWEsc3RyaW5nYm9vbDp5YyxzdWNjZXNzOnVjLHN1cGVyUmVmaW5lOlFyLHN5bWJvbDpHYSx0ZW1wbGF0ZUxpdGVyYWw6aGMsdG9KU09OU2NoZW1hOlFpLHRvTG93ZXJDYXNlOlRuLHRvVXBwZXJDYXNlOkluLHRvWm9kOmpvLHRyYW5zZm9ybTpZbix0cmVlaWZ5RXJyb3I6TXMsdHJpbTp6bix0dXBsZTpTcix1aW50MzI6VmEsdWludDY0OldhLHVsaWQ6U2EsdW5kZWZpbmVkOm10LHVuaW9uOk8sdW5rbm93bjpELHVwcGVyY2FzZTp2bix1cmw6dmEsdXRpbDpacyx1dWlkOmZhLHV1aWR2NDptYSx1dWlkdjY6Z2EsdXVpZHY3OmJhLHZhbGlkYXRlOldvLHZhbGlkYXRlQXN5bmM6R28sdm9pZDpRYSx3aXRoUGFyc2VyOlNpLHhpZDp6YSx4b3I6dGMsejp3dX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxHZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixYcj0iMi4wIixlZT1XcihlPT5lIT09bnVsbCYmKHR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpKSxRaD1PKFtoKCksQygpLmludCgpXSksWWg9aCgpO3NlKHt0dGw6QygpLm9wdGlvbmFsKCkscG9sbEludGVydmFsOkMoKS5vcHRpb25hbCgpfSk7Y29uc3Qgb3Y9Zyh7dHRsOkMoKS5vcHRpb25hbCgpfSkscnY9Zyh7dGFza0lkOmgoKX0pLHdjPXNlKHtwcm9ncmVzc1Rva2VuOlFoLm9wdGlvbmFsKCksW0dlXTpydi5vcHRpb25hbCgpfSkseWU9Zyh7X21ldGE6d2Mub3B0aW9uYWwoKX0pLG5vPXllLmV4dGVuZCh7dGFzazpvdi5vcHRpb25hbCgpfSksc3Y9ZT0+bm8uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsYWU9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6eWUubG9vc2UoKS5vcHRpb25hbCgpfSksU2U9Zyh7X21ldGE6d2Mub3B0aW9uYWwoKX0pLHplPWcoe21ldGhvZDpoKCkscGFyYW1zOlNlLmxvb3NlKCkub3B0aW9uYWwoKX0pLGNlPXNlKHtfbWV0YTp3Yy5vcHRpb25hbCgpfSksb289TyhbaCgpLEMoKS5pbnQoKV0pLFhoPWcoe2pzb25ycGM6ZihYciksaWQ6b28sLi4uYWUuc2hhcGV9KS5zdHJpY3QoKSwkdT1lPT5YaC5zYWZlUGFyc2UoZSkuc3VjY2VzcyxlZj1nKHtqc29ucnBjOmYoWHIpLC4uLnplLnNoYXBlfSkuc3RyaWN0KCksaXY9ZT0+ZWYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsJGM9Zyh7anNvbnJwYzpmKFhyKSxpZDpvbyxyZXN1bHQ6Y2V9KS5zdHJpY3QoKSxibz1lPT4kYy5zYWZlUGFyc2UoZSkuc3VjY2Vzczt2YXIgRjsoZnVuY3Rpb24oZSl7ZVtlLkNvbm5lY3Rpb25DbG9zZWQ9LTMyZTNdPSJDb25uZWN0aW9uQ2xvc2VkIixlW2UuUmVxdWVzdFRpbWVvdXQ9LTMyMDAxXT0iUmVxdWVzdFRpbWVvdXQiLGVbZS5QYXJzZUVycm9yPS0zMjcwMF09IlBhcnNlRXJyb3IiLGVbZS5JbnZhbGlkUmVxdWVzdD0tMzI2MDBdPSJJbnZhbGlkUmVxdWVzdCIsZVtlLk1ldGhvZE5vdEZvdW5kPS0zMjYwMV09Ik1ldGhvZE5vdEZvdW5kIixlW2UuSW52YWxpZFBhcmFtcz0tMzI2MDJdPSJJbnZhbGlkUGFyYW1zIixlW2UuSW50ZXJuYWxFcnJvcj0tMzI2MDNdPSJJbnRlcm5hbEVycm9yIixlW2UuVXJsRWxpY2l0YXRpb25SZXF1aXJlZD0tMzIwNDJdPSJVcmxFbGljaXRhdGlvblJlcXVpcmVkIn0pKEZ8fChGPXt9KSk7Y29uc3QgU2M9Zyh7anNvbnJwYzpmKFhyKSxpZDpvby5vcHRpb25hbCgpLGVycm9yOmcoe2NvZGU6QygpLmludCgpLG1lc3NhZ2U6aCgpLGRhdGE6RCgpLm9wdGlvbmFsKCl9KX0pLnN0cmljdCgpLGF2PWU9PlNjLnNhZmVQYXJzZShlKS5zdWNjZXNzLGN2PU8oW1hoLGVmLCRjLFNjXSk7TyhbJGMsU2NdKTtjb25zdCB6Yz1jZS5zdHJpY3QoKSx1dj1TZS5leHRlbmQoe3JlcXVlc3RJZDpvby5vcHRpb25hbCgpLHJlYXNvbjpoKCkub3B0aW9uYWwoKX0pLFRjPXplLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvY2FuY2VsbGVkIikscGFyYW1zOnV2fSksbHY9Zyh7c3JjOmgoKSxtaW1lVHlwZTpoKCkub3B0aW9uYWwoKSxzaXplczpQKGgoKSkub3B0aW9uYWwoKSx0aGVtZTppZShbImxpZ2h0IiwiZGFyayJdKS5vcHRpb25hbCgpfSkscm89Zyh7aWNvbnM6UChsdikub3B0aW9uYWwoKX0pLHZ0PWcoe25hbWU6aCgpLHRpdGxlOmgoKS5vcHRpb25hbCgpfSksZXM9dnQuZXh0ZW5kKHsuLi52dC5zaGFwZSwuLi5yby5zaGFwZSx2ZXJzaW9uOmgoKSx3ZWJzaXRlVXJsOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpfSksZHY9WnQoZyh7YXBwbHlEZWZhdWx0czpMKCkub3B0aW9uYWwoKX0pLFIoaCgpLEQoKSkpLHB2PXRvKGU9PmUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSkmJk9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTA/e2Zvcm06e319OmUsWnQoZyh7Zm9ybTpkdi5vcHRpb25hbCgpLHVybDplZS5vcHRpb25hbCgpfSksUihoKCksRCgpKS5vcHRpb25hbCgpKSksaHY9c2Uoe2xpc3Q6ZWUub3B0aW9uYWwoKSxjYW5jZWw6ZWUub3B0aW9uYWwoKSxyZXF1ZXN0czpzZSh7c2FtcGxpbmc6c2Uoe2NyZWF0ZU1lc3NhZ2U6ZWUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246c2Uoe2NyZWF0ZTplZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxmdj1zZSh7bGlzdDplZS5vcHRpb25hbCgpLGNhbmNlbDplZS5vcHRpb25hbCgpLHJlcXVlc3RzOnNlKHt0b29sczpzZSh7Y2FsbDplZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxtdj1nKHtleHBlcmltZW50YWw6UihoKCksZWUpLm9wdGlvbmFsKCksc2FtcGxpbmc6Zyh7Y29udGV4dDplZS5vcHRpb25hbCgpLHRvb2xzOmVlLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnB2Lm9wdGlvbmFsKCkscm9vdHM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOmh2Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpSKGgoKSxlZSkub3B0aW9uYWwoKX0pLGd2PXllLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmgoKSxjYXBhYmlsaXRpZXM6bXYsY2xpZW50SW5mbzplc30pLGJ2PWFlLmV4dGVuZCh7bWV0aG9kOmYoImluaXRpYWxpemUiKSxwYXJhbXM6Z3Z9KSx2dj1nKHtleHBlcmltZW50YWw6UihoKCksZWUpLm9wdGlvbmFsKCksbG9nZ2luZzplZS5vcHRpb25hbCgpLGNvbXBsZXRpb25zOmVlLm9wdGlvbmFsKCkscHJvbXB0czpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCkscmVzb3VyY2VzOmcoe3N1YnNjcmliZTpMKCkub3B0aW9uYWwoKSxsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdG9vbHM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOmZ2Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpSKGgoKSxlZSkub3B0aW9uYWwoKX0pLHl2PWNlLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmgoKSxjYXBhYmlsaXRpZXM6dnYsc2VydmVySW5mbzplcyxpbnN0cnVjdGlvbnM6aCgpLm9wdGlvbmFsKCl9KSxfdj16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOlNlLm9wdGlvbmFsKCl9KSx0cz1hZS5leHRlbmQoe21ldGhvZDpmKCJwaW5nIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KSxrdj1nKHtwcm9ncmVzczpDKCksdG90YWw6VihDKCkpLG1lc3NhZ2U6VihoKCkpfSksd3Y9Zyh7Li4uU2Uuc2hhcGUsLi4ua3Yuc2hhcGUscHJvZ3Jlc3NUb2tlbjpRaH0pLEljPXplLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcHJvZ3Jlc3MiKSxwYXJhbXM6d3Z9KSwkdj15ZS5leHRlbmQoe2N1cnNvcjpZaC5vcHRpb25hbCgpfSksc289YWUuZXh0ZW5kKHtwYXJhbXM6JHYub3B0aW9uYWwoKX0pLGlvPWNlLmV4dGVuZCh7bmV4dEN1cnNvcjpZaC5vcHRpb25hbCgpfSksU3Y9aWUoWyJ3b3JraW5nIiwiaW5wdXRfcmVxdWlyZWQiLCJjb21wbGV0ZWQiLCJmYWlsZWQiLCJjYW5jZWxsZWQiXSksYW89Zyh7dGFza0lkOmgoKSxzdGF0dXM6U3YsdHRsOk8oW0MoKSxLbigpXSksY3JlYXRlZEF0OmgoKSxsYXN0VXBkYXRlZEF0OmgoKSxwb2xsSW50ZXJ2YWw6VihDKCkpLHN0YXR1c01lc3NhZ2U6VihoKCkpfSksUGM9Y2UuZXh0ZW5kKHt0YXNrOmFvfSksenY9U2UubWVyZ2UoYW8pLHhvPXplLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIikscGFyYW1zOnp2fSkseGM9YWUuZXh0ZW5kKHttZXRob2Q6ZigidGFza3MvZ2V0IikscGFyYW1zOnllLmV4dGVuZCh7dGFza0lkOmgoKX0pfSksQ2M9Y2UubWVyZ2UoYW8pLEVjPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL3Jlc3VsdCIpLHBhcmFtczp5ZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pO2NlLmxvb3NlKCk7Y29uc3QgT2M9c28uZXh0ZW5kKHttZXRob2Q6ZigidGFza3MvbGlzdCIpfSksQWM9aW8uZXh0ZW5kKHt0YXNrczpQKGFvKX0pLFJjPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2NhbmNlbCIpLHBhcmFtczp5ZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLFR2PWNlLm1lcmdlKGFvKSx0Zj1nKHt1cmk6aCgpLG1pbWVUeXBlOlYoaCgpKSxfbWV0YTpSKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxuZj10Zi5leHRlbmQoe3RleHQ6aCgpfSksWmM9aCgpLnJlZmluZShlPT57dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX0se21lc3NhZ2U6IkludmFsaWQgQmFzZTY0IHN0cmluZyJ9KSxvZj10Zi5leHRlbmQoe2Jsb2I6WmN9KSxjbz1pZShbInVzZXIiLCJhc3Npc3RhbnQiXSksRHQ9Zyh7YXVkaWVuY2U6UChjbykub3B0aW9uYWwoKSxwcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDpGaCh7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLHJmPWcoey4uLnZ0LnNoYXBlLC4uLnJvLnNoYXBlLHVyaTpoKCksZGVzY3JpcHRpb246VihoKCkpLG1pbWVUeXBlOlYoaCgpKSxzaXplOlYoQygpKSxhbm5vdGF0aW9uczpEdC5vcHRpb25hbCgpLF9tZXRhOlYoc2Uoe30pKX0pLEl2PWcoey4uLnZ0LnNoYXBlLC4uLnJvLnNoYXBlLHVyaVRlbXBsYXRlOmgoKSxkZXNjcmlwdGlvbjpWKGgoKSksbWltZVR5cGU6VihoKCkpLGFubm90YXRpb25zOkR0Lm9wdGlvbmFsKCksX21ldGE6VihzZSh7fSkpfSksUHY9c28uZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL2xpc3QiKX0pLHNmPWlvLmV4dGVuZCh7cmVzb3VyY2VzOlAocmYpfSkseHY9c28uZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3RlbXBsYXRlcy9saXN0Iil9KSxDdj1pby5leHRlbmQoe3Jlc291cmNlVGVtcGxhdGVzOlAoSXYpfSksTmM9eWUuZXh0ZW5kKHt1cmk6aCgpfSksRXY9TmMsT3Y9YWUuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3JlYWQiKSxwYXJhbXM6RXZ9KSxhZj1jZS5leHRlbmQoe2NvbnRlbnRzOlAoTyhbbmYsb2ZdKSl9KSxBdj16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Jlc291cmNlcy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6U2Uub3B0aW9uYWwoKX0pLFJ2PU5jLFp2PWFlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9zdWJzY3JpYmUiKSxwYXJhbXM6UnZ9KSxOdj1OYyxqdj1hZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvdW5zdWJzY3JpYmUiKSxwYXJhbXM6TnZ9KSxNdj1TZS5leHRlbmQoe3VyaTpoKCl9KSxxdj16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Jlc291cmNlcy91cGRhdGVkIikscGFyYW1zOk12fSksRHY9Zyh7bmFtZTpoKCksZGVzY3JpcHRpb246VihoKCkpLHJlcXVpcmVkOlYoTCgpKX0pLEx2PWcoey4uLnZ0LnNoYXBlLC4uLnJvLnNoYXBlLGRlc2NyaXB0aW9uOlYoaCgpKSxhcmd1bWVudHM6VihQKER2KSksX21ldGE6VihzZSh7fSkpfSksVXY9c28uZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9saXN0Iil9KSxGdj1pby5leHRlbmQoe3Byb21wdHM6UChMdil9KSxIdj15ZS5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpSKGgoKSxoKCkpLm9wdGlvbmFsKCl9KSxCdj1hZS5leHRlbmQoe21ldGhvZDpmKCJwcm9tcHRzL2dldCIpLHBhcmFtczpIdn0pLGpjPWcoe3R5cGU6ZigidGV4dCIpLHRleHQ6aCgpLGFubm90YXRpb25zOkR0Lm9wdGlvbmFsKCksX21ldGE6UihoKCksRCgpKS5vcHRpb25hbCgpfSksTWM9Zyh7dHlwZTpmKCJpbWFnZSIpLGRhdGE6WmMsbWltZVR5cGU6aCgpLGFubm90YXRpb25zOkR0Lm9wdGlvbmFsKCksX21ldGE6UihoKCksRCgpKS5vcHRpb25hbCgpfSkscWM9Zyh7dHlwZTpmKCJhdWRpbyIpLGRhdGE6WmMsbWltZVR5cGU6aCgpLGFubm90YXRpb25zOkR0Lm9wdGlvbmFsKCksX21ldGE6UihoKCksRCgpKS5vcHRpb25hbCgpfSksVnY9Zyh7dHlwZTpmKCJ0b29sX3VzZSIpLG5hbWU6aCgpLGlkOmgoKSxpbnB1dDpSKGgoKSxEKCkpLF9tZXRhOlIoaCgpLEQoKSkub3B0aW9uYWwoKX0pLGNmPWcoe3R5cGU6ZigicmVzb3VyY2UiKSxyZXNvdXJjZTpPKFtuZixvZl0pLGFubm90YXRpb25zOkR0Lm9wdGlvbmFsKCksX21ldGE6UihoKCksRCgpKS5vcHRpb25hbCgpfSksdWY9cmYuZXh0ZW5kKHt0eXBlOmYoInJlc291cmNlX2xpbmsiKX0pLHVvPU8oW2pjLE1jLHFjLHVmLGNmXSksSnY9Zyh7cm9sZTpjbyxjb250ZW50OnVvfSksS3Y9Y2UuZXh0ZW5kKHtkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtZXNzYWdlczpQKEp2KX0pLFd2PXplLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6U2Uub3B0aW9uYWwoKX0pLEd2PWcoe3RpdGxlOmgoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpMKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6TCgpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6TCgpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpMKCkub3B0aW9uYWwoKX0pLFF2PWcoe3Rhc2tTdXBwb3J0OmllKFsicmVxdWlyZWQiLCJvcHRpb25hbCIsImZvcmJpZGRlbiJdKS5vcHRpb25hbCgpfSksRGM9Zyh7Li4udnQuc2hhcGUsLi4ucm8uc2hhcGUsZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksaW5wdXRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLGVlKS5vcHRpb25hbCgpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoRCgpKSxvdXRwdXRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLGVlKS5vcHRpb25hbCgpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoRCgpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOkd2Lm9wdGlvbmFsKCksZXhlY3V0aW9uOlF2Lm9wdGlvbmFsKCksX21ldGE6UihoKCksRCgpKS5vcHRpb25hbCgpfSksbGY9c28uZXh0ZW5kKHttZXRob2Q6ZigidG9vbHMvbGlzdCIpfSksWXY9aW8uZXh0ZW5kKHt0b29sczpQKERjKX0pLG5zPWNlLmV4dGVuZCh7Y29udGVudDpQKHVvKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpSKGgoKSxEKCkpLm9wdGlvbmFsKCksaXNFcnJvcjpMKCkub3B0aW9uYWwoKX0pO25zLm9yKGNlLmV4dGVuZCh7dG9vbFJlc3VsdDpEKCl9KSk7Y29uc3QgWHY9bm8uZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6UihoKCksRCgpKS5vcHRpb25hbCgpfSksZGY9YWUuZXh0ZW5kKHttZXRob2Q6ZigidG9vbHMvY2FsbCIpLHBhcmFtczpYdn0pLGV5PXplLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlNlLm9wdGlvbmFsKCl9KTtnKHthdXRvUmVmcmVzaDpMKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpDKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCBwZj1pZShbImRlYnVnIiwiaW5mbyIsIm5vdGljZSIsIndhcm5pbmciLCJlcnJvciIsImNyaXRpY2FsIiwiYWxlcnQiLCJlbWVyZ2VuY3kiXSksdHk9eWUuZXh0ZW5kKHtsZXZlbDpwZn0pLG55PWFlLmV4dGVuZCh7bWV0aG9kOmYoImxvZ2dpbmcvc2V0TGV2ZWwiKSxwYXJhbXM6dHl9KSxveT1TZS5leHRlbmQoe2xldmVsOnBmLGxvZ2dlcjpoKCkub3B0aW9uYWwoKSxkYXRhOkQoKX0pLHJ5PXplLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvbWVzc2FnZSIpLHBhcmFtczpveX0pLHN5PWcoe25hbWU6aCgpLm9wdGlvbmFsKCl9KSxpeT1nKHtoaW50czpQKHN5KS5vcHRpb25hbCgpLGNvc3RQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLHNwZWVkUHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxpbnRlbGxpZ2VuY2VQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpfSksYXk9Zyh7bW9kZTppZShbImF1dG8iLCJyZXF1aXJlZCIsIm5vbmUiXSkub3B0aW9uYWwoKX0pLGN5PWcoe3R5cGU6ZigidG9vbF9yZXN1bHQiKSx0b29sVXNlSWQ6aCgpLmRlc2NyaWJlKCJUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRvb2wgY2FsbC4iKSxjb250ZW50OlAodW8pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLmxvb3NlKCkub3B0aW9uYWwoKSxpc0Vycm9yOkwoKS5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLEQoKSkub3B0aW9uYWwoKX0pLHV5PVFuKCJ0eXBlIixbamMsTWMscWNdKSxDbz1RbigidHlwZSIsW2pjLE1jLHFjLFZ2LGN5XSksbHk9Zyh7cm9sZTpjbyxjb250ZW50Ok8oW0NvLFAoQ28pXSksX21ldGE6UihoKCksRCgpKS5vcHRpb25hbCgpfSksZHk9bm8uZXh0ZW5kKHttZXNzYWdlczpQKGx5KSxtb2RlbFByZWZlcmVuY2VzOml5Lm9wdGlvbmFsKCksc3lzdGVtUHJvbXB0OmgoKS5vcHRpb25hbCgpLGluY2x1ZGVDb250ZXh0OmllKFsibm9uZSIsInRoaXNTZXJ2ZXIiLCJhbGxTZXJ2ZXJzIl0pLm9wdGlvbmFsKCksdGVtcGVyYXR1cmU6QygpLm9wdGlvbmFsKCksbWF4VG9rZW5zOkMoKS5pbnQoKSxzdG9wU2VxdWVuY2VzOlAoaCgpKS5vcHRpb25hbCgpLG1ldGFkYXRhOmVlLm9wdGlvbmFsKCksdG9vbHM6UChEYykub3B0aW9uYWwoKSx0b29sQ2hvaWNlOmF5Lm9wdGlvbmFsKCl9KSxweT1hZS5leHRlbmQoe21ldGhvZDpmKCJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIikscGFyYW1zOmR5fSksaGY9Y2UuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpWKGllKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyJdKS5vcihoKCkpKSxyb2xlOmNvLGNvbnRlbnQ6dXl9KSxmZj1jZS5leHRlbmQoe21vZGVsOmgoKSxzdG9wUmVhc29uOlYoaWUoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIiwidG9vbFVzZSJdKS5vcihoKCkpKSxyb2xlOmNvLGNvbnRlbnQ6TyhbQ28sUChDbyldKX0pLGh5PWcoe3R5cGU6ZigiYm9vbGVhbiIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGRlZmF1bHQ6TCgpLm9wdGlvbmFsKCl9KSxmeT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkxlbmd0aDpDKCkub3B0aW9uYWwoKSxtYXhMZW5ndGg6QygpLm9wdGlvbmFsKCksZm9ybWF0OmllKFsiZW1haWwiLCJ1cmkiLCJkYXRlIiwiZGF0ZS10aW1lIl0pLm9wdGlvbmFsKCksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLG15PWcoe3R5cGU6aWUoWyJudW1iZXIiLCJpbnRlZ2VyIl0pLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbmltdW06QygpLm9wdGlvbmFsKCksbWF4aW11bTpDKCkub3B0aW9uYWwoKSxkZWZhdWx0OkMoKS5vcHRpb25hbCgpfSksZ3k9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxlbnVtOlAoaCgpKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksYnk9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxvbmVPZjpQKGcoe2NvbnN0OmgoKSx0aXRsZTpoKCl9KSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLHZ5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZW51bU5hbWVzOlAoaCgpKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSx5eT1PKFtneSxieV0pLF95PWcoe3R5cGU6ZigiYXJyYXkiKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5JdGVtczpDKCkub3B0aW9uYWwoKSxtYXhJdGVtczpDKCkub3B0aW9uYWwoKSxpdGVtczpnKHt0eXBlOmYoInN0cmluZyIpLGVudW06UChoKCkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLGt5PWcoe3R5cGU6ZigiYXJyYXkiKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5JdGVtczpDKCkub3B0aW9uYWwoKSxtYXhJdGVtczpDKCkub3B0aW9uYWwoKSxpdGVtczpnKHthbnlPZjpQKGcoe2NvbnN0OmgoKSx0aXRsZTpoKCl9KSl9KSxkZWZhdWx0OlAoaCgpKS5vcHRpb25hbCgpfSksd3k9TyhbX3ksa3ldKSwkeT1PKFt2eSx5eSx3eV0pLFN5PU8oWyR5LGh5LGZ5LG15XSksenk9bm8uZXh0ZW5kKHttb2RlOmYoImZvcm0iKS5vcHRpb25hbCgpLG1lc3NhZ2U6aCgpLHJlcXVlc3RlZFNjaGVtYTpnKHt0eXBlOmYoIm9iamVjdCIpLHByb3BlcnRpZXM6UihoKCksU3kpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSl9KSxUeT1uby5leHRlbmQoe21vZGU6ZigidXJsIiksbWVzc2FnZTpoKCksZWxpY2l0YXRpb25JZDpoKCksdXJsOmgoKS51cmwoKX0pLEl5PU8oW3p5LFR5XSksUHk9YWUuZXh0ZW5kKHttZXRob2Q6ZigiZWxpY2l0YXRpb24vY3JlYXRlIikscGFyYW1zOkl5fSkseHk9U2UuZXh0ZW5kKHtlbGljaXRhdGlvbklkOmgoKX0pLEN5PXplLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvZWxpY2l0YXRpb24vY29tcGxldGUiKSxwYXJhbXM6eHl9KSxFeT1jZS5leHRlbmQoe2FjdGlvbjppZShbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDp0byhlPT5lPT09bnVsbD92b2lkIDA6ZSxSKGgoKSxPKFtoKCksQygpLEwoKSxQKGgoKSldKSkub3B0aW9uYWwoKSl9KSxPeT1nKHt0eXBlOmYoInJlZi9yZXNvdXJjZSIpLHVyaTpoKCl9KSxBeT1nKHt0eXBlOmYoInJlZi9wcm9tcHQiKSxuYW1lOmgoKX0pLFJ5PXllLmV4dGVuZCh7cmVmOk8oW0F5LE95XSksYXJndW1lbnQ6Zyh7bmFtZTpoKCksdmFsdWU6aCgpfSksY29udGV4dDpnKHthcmd1bWVudHM6UihoKCksaCgpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLFp5PWFlLmV4dGVuZCh7bWV0aG9kOmYoImNvbXBsZXRpb24vY29tcGxldGUiKSxwYXJhbXM6Unl9KSxOeT1jZS5leHRlbmQoe2NvbXBsZXRpb246c2Uoe3ZhbHVlczpQKGgoKSkubWF4KDEwMCksdG90YWw6VihDKCkuaW50KCkpLGhhc01vcmU6VihMKCkpfSl9KSxqeT1nKHt1cmk6aCgpLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKSxuYW1lOmgoKS5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLEQoKSkub3B0aW9uYWwoKX0pLE15PWFlLmV4dGVuZCh7bWV0aG9kOmYoInJvb3RzL2xpc3QiKSxwYXJhbXM6eWUub3B0aW9uYWwoKX0pLHF5PWNlLmV4dGVuZCh7cm9vdHM6UChqeSl9KSxEeT16ZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Jvb3RzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpTZS5vcHRpb25hbCgpfSk7TyhbdHMsYnYsWnksbnksQnYsVXYsUHYseHYsT3YsWnYsanYsZGYsbGYseGMsRWMsT2MsUmNdKTtPKFtUYyxJYyxfdixEeSx4b10pO08oW3pjLGhmLGZmLEV5LHF5LENjLEFjLFBjXSk7TyhbdHMscHksUHksTXkseGMsRWMsT2MsUmNdKTtPKFtUYyxJYyxyeSxxdixBdixleSxXdix4byxDeV0pO08oW3pjLHl2LE55LEt2LEZ2LHNmLEN2LGFmLG5zLFl2LENjLEFjLFBjXSk7Y2xhc3MgaiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbixvKXtzdXBlcihgTUNQIGVycm9yICR7dH06ICR7bn1gKSx0aGlzLmNvZGU9dCx0aGlzLmRhdGE9byx0aGlzLm5hbWU9Ik1jcEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQsbixvKXtpZih0PT09Ri5VcmxFbGljaXRhdGlvblJlcXVpcmVkJiZvKXtjb25zdCByPW87aWYoci5lbGljaXRhdGlvbnMpcmV0dXJuIG5ldyBMeShyLmVsaWNpdGF0aW9ucyxuKX1yZXR1cm4gbmV3IGoodCxuLG8pfX1jbGFzcyBMeSBleHRlbmRzIGp7Y29uc3RydWN0b3IodCxuPWBVUkwgZWxpY2l0YXRpb24ke3QubGVuZ3RoPjE/InMiOiIifSByZXF1aXJlZGApe3N1cGVyKEYuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCxuLHtlbGljaXRhdGlvbnM6dH0pfWdldCBlbGljaXRhdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRhPy5lbGljaXRhdGlvbnM/P1tdfX1mdW5jdGlvbiBXZShlKXtyZXR1cm4gZT09PSJjb21wbGV0ZWQifHxlPT09ImZhaWxlZCJ8fGU9PT0iY2FuY2VsbGVkIn1uZXcgU2V0KCJBQkNERUZHSElKS0xNTk9QUVJTVFVWWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnh5ejAxMjM0NTY3ODkiKTtmdW5jdGlvbiBTdShlKXtjb25zdCBuPU9iKGUpPy5tZXRob2Q7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgaXMgbWlzc2luZyBhIG1ldGhvZCBsaXRlcmFsIik7Y29uc3Qgbz1BYihuKTtpZih0eXBlb2YgbyE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgbWV0aG9kIGxpdGVyYWwgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBvfWZ1bmN0aW9uIHp1KGUsdCl7Y29uc3Qgbj1qaChlLHQpO2lmKCFuLnN1Y2Nlc3MpdGhyb3cgbi5lcnJvcjtyZXR1cm4gbi5kYXRhfWNvbnN0IFV5PTZlNDtjbGFzcyBGeXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9vcHRpb25zPXQsdGhpcy5fcmVxdWVzdE1lc3NhZ2VJZD0wLHRoaXMuX3JlcXVlc3RIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycz1uZXcgTWFwLHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl90aW1lb3V0SW5mbz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zPW5ldyBTZXQsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zPW5ldyBNYXAsdGhpcy5fcmVxdWVzdFJlc29sdmVycz1uZXcgTWFwLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihUYyxuPT57dGhpcy5fb25jYW5jZWwobil9KSx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoSWMsbj0+e3RoaXMuX29ucHJvZ3Jlc3Mobil9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHRzLG49Pih7fSkpLHRoaXMuX3Rhc2tTdG9yZT10Py50YXNrU3RvcmUsdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT10Py50YXNrTWVzc2FnZVF1ZXVlLHRoaXMuX3Rhc2tTdG9yZSYmKHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoeGMsYXN5bmMobixvKT0+e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybnsuLi5yfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoRWMsYXN5bmMobixvKT0+e2NvbnN0IHI9YXN5bmMoKT0+e2NvbnN0IHM9bi5wYXJhbXMudGFza0lkO2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2xldCBpO2Zvcig7aT1hd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmRlcXVldWUocyxvLnNlc3Npb25JZCk7KXtpZihpLnR5cGU9PT0icmVzcG9uc2UifHxpLnR5cGU9PT0iZXJyb3IiKXtjb25zdCBjPWkubWVzc2FnZSxsPWMuaWQsZD10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChsKTtpZihkKWlmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKGwpLGkudHlwZT09PSJyZXNwb25zZSIpZChjKTtlbHNle2NvbnN0IG09YyxiPW5ldyBqKG0uZXJyb3IuY29kZSxtLmVycm9yLm1lc3NhZ2UsbS5lcnJvci5kYXRhKTtkKGIpfWVsc2V7Y29uc3QgbT1pLnR5cGU9PT0icmVzcG9uc2UiPyJSZXNwb25zZSI6IkVycm9yIjt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgJHttfSBoYW5kbGVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtsfWApKX1jb250aW51ZX1hd2FpdCB0aGlzLl90cmFuc3BvcnQ/LnNlbmQoaS5tZXNzYWdlLHtyZWxhdGVkUmVxdWVzdElkOm8ucmVxdWVzdElkfSl9fWNvbnN0IGE9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2socyxvLnNlc3Npb25JZCk7aWYoIWEpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtzfWApO2lmKCFXZShhLnN0YXR1cykpcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRGb3JUYXNrVXBkYXRlKHMsby5zaWduYWwpLGF3YWl0IHIoKTtpZihXZShhLnN0YXR1cykpe2NvbnN0IGk9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2tSZXN1bHQocyxvLnNlc3Npb25JZCk7cmV0dXJuIHRoaXMuX2NsZWFyVGFza1F1ZXVlKHMpLHsuLi5pLF9tZXRhOnsuLi5pLl9tZXRhLFtHZV06e3Rhc2tJZDpzfX19fXJldHVybiBhd2FpdCByKCl9O3JldHVybiBhd2FpdCByKCl9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKE9jLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3R7dGFza3M6cixuZXh0Q3Vyc29yOnN9PWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5saXN0VGFza3Mobi5wYXJhbXM/LmN1cnNvcixvLnNlc3Npb25JZCk7cmV0dXJue3Rhc2tzOnIsbmV4dEN1cnNvcjpzLF9tZXRhOnt9fX1jYXRjaChyKXt0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsYEZhaWxlZCB0byBsaXN0IHRhc2tzOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoUmMsYXN5bmMobixvKT0+e3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtuLnBhcmFtcy50YXNrSWR9YCk7aWYoV2Uoci5zdGF0dXMpKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgQ2Fubm90IGNhbmNlbCB0YXNrIGluIHRlcm1pbmFsIHN0YXR1czogJHtyLnN0YXR1c31gKTthd2FpdCB0aGlzLl90YXNrU3RvcmUudXBkYXRlVGFza1N0YXR1cyhuLnBhcmFtcy50YXNrSWQsImNhbmNlbGxlZCIsIkNsaWVudCBjYW5jZWxsZWQgdGFzayBleGVjdXRpb24uIixvLnNlc3Npb25JZCksdGhpcy5fY2xlYXJUYXNrUXVldWUobi5wYXJhbXMudGFza0lkKTtjb25zdCBzPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXMpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZCBhZnRlciBjYW5jZWxsYXRpb246ICR7bi5wYXJhbXMudGFza0lkfWApO3JldHVybntfbWV0YTp7fSwuLi5zfX1jYXRjaChyKXt0aHJvdyByIGluc3RhbmNlb2Ygaj9yOm5ldyBqKEYuSW52YWxpZFJlcXVlc3QsYEZhaWxlZCB0byBjYW5jZWwgdGFzazogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSl9YXN5bmMgX29uY2FuY2VsKHQpe2lmKCF0LnBhcmFtcy5yZXF1ZXN0SWQpcmV0dXJuO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5wYXJhbXMucmVxdWVzdElkKT8uYWJvcnQodC5wYXJhbXMucmVhc29uKX1fc2V0dXBUaW1lb3V0KHQsbixvLHIscz0hMSl7dGhpcy5fdGltZW91dEluZm8uc2V0KHQse3RpbWVvdXRJZDpzZXRUaW1lb3V0KHIsbiksc3RhcnRUaW1lOkRhdGUubm93KCksdGltZW91dDpuLG1heFRvdGFsVGltZW91dDpvLHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6cyxvblRpbWVvdXQ6cn0pfV9yZXNldFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7aWYoIW4pcmV0dXJuITE7Y29uc3Qgbz1EYXRlLm5vdygpLW4uc3RhcnRUaW1lO2lmKG4ubWF4VG90YWxUaW1lb3V0JiZvPj1uLm1heFRvdGFsVGltZW91dCl0aHJvdyB0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCksai5mcm9tRXJyb3IoRi5SZXF1ZXN0VGltZW91dCwiTWF4aW11bSB0b3RhbCB0aW1lb3V0IGV4Y2VlZGVkIix7bWF4VG90YWxUaW1lb3V0Om4ubWF4VG90YWxUaW1lb3V0LHRvdGFsRWxhcHNlZDpvfSk7cmV0dXJuIGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksbi50aW1lb3V0SWQ9c2V0VGltZW91dChuLm9uVGltZW91dCxuLnRpbWVvdXQpLCEwfV9jbGVhbnVwVGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtuJiYoY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSx0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCkpfWFzeW5jIGNvbm5lY3QodCl7aWYodGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiQWxyZWFkeSBjb25uZWN0ZWQgdG8gYSB0cmFuc3BvcnQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyB0byBhIG5ldyB0cmFuc3BvcnQsIG9yIHVzZSBhIHNlcGFyYXRlIFByb3RvY29sIGluc3RhbmNlIHBlciBjb25uZWN0aW9uLiIpO3RoaXMuX3RyYW5zcG9ydD10O2NvbnN0IG49dGhpcy50cmFuc3BvcnQ/Lm9uY2xvc2U7dGhpcy5fdHJhbnNwb3J0Lm9uY2xvc2U9KCk9PntuPy4oKSx0aGlzLl9vbmNsb3NlKCl9O2NvbnN0IG89dGhpcy50cmFuc3BvcnQ/Lm9uZXJyb3I7dGhpcy5fdHJhbnNwb3J0Lm9uZXJyb3I9cz0+e28/LihzKSx0aGlzLl9vbmVycm9yKHMpfTtjb25zdCByPXRoaXMuX3RyYW5zcG9ydD8ub25tZXNzYWdlO3RoaXMuX3RyYW5zcG9ydC5vbm1lc3NhZ2U9KHMsYSk9PntyPy4ocyxhKSxibyhzKXx8YXYocyk/dGhpcy5fb25yZXNwb25zZShzKTokdShzKT90aGlzLl9vbnJlcXVlc3QocyxhKTppdihzKT90aGlzLl9vbm5vdGlmaWNhdGlvbihzKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5rbm93biBtZXNzYWdlIHR5cGU6ICR7SlNPTi5zdHJpbmdpZnkocyl9YCkpfSxhd2FpdCB0aGlzLl90cmFuc3BvcnQuc3RhcnQoKX1fb25jbG9zZSgpe2NvbnN0IHQ9dGhpcy5fcmVzcG9uc2VIYW5kbGVyczt0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5jbGVhcigpLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5jbGVhcigpLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fdGltZW91dEluZm8udmFsdWVzKCkpY2xlYXJUaW1lb3V0KG8udGltZW91dElkKTt0aGlzLl90aW1lb3V0SW5mby5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy52YWx1ZXMoKSlvLmFib3J0KCk7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmNsZWFyKCk7Y29uc3Qgbj1qLmZyb21FcnJvcihGLkNvbm5lY3Rpb25DbG9zZWQsIkNvbm5lY3Rpb24gY2xvc2VkIik7dGhpcy5fdHJhbnNwb3J0PXZvaWQgMCx0aGlzLm9uY2xvc2U/LigpO2Zvcihjb25zdCBvIG9mIHQudmFsdWVzKCkpbyhuKX1fb25lcnJvcih0KXt0aGlzLm9uZXJyb3I/Lih0KX1fb25ub3RpZmljYXRpb24odCl7Y29uc3Qgbj10aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrTm90aWZpY2F0aW9uSGFuZGxlcjtuIT09dm9pZCAwJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uKHQpKS5jYXRjaChvPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5jYXVnaHQgZXJyb3IgaW4gbm90aWZpY2F0aW9uIGhhbmRsZXI6ICR7b31gKSkpfV9vbnJlcXVlc3QodCxuKXtjb25zdCBvPXRoaXMuX3JlcXVlc3RIYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrUmVxdWVzdEhhbmRsZXIscj10aGlzLl90cmFuc3BvcnQscz10LnBhcmFtcz8uX21ldGE/LltHZV0/LnRhc2tJZDtpZihvPT09dm9pZCAwKXtjb25zdCBkPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6Ri5NZXRob2ROb3RGb3VuZCxtZXNzYWdlOiJNZXRob2Qgbm90IGZvdW5kIn19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/dGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmQsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCkuY2F0Y2gobT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBlbnF1ZXVlIGVycm9yIHJlc3BvbnNlOiAke219YCkpKTpyPy5zZW5kKGQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBhbiBlcnJvciByZXNwb25zZTogJHttfWApKSk7cmV0dXJufWNvbnN0IGE9bmV3IEFib3J0Q29udHJvbGxlcjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuc2V0KHQuaWQsYSk7Y29uc3QgaT1zdih0LnBhcmFtcyk/dC5wYXJhbXMudGFzazp2b2lkIDAsYz10aGlzLl90YXNrU3RvcmU/dGhpcy5yZXF1ZXN0VGFza1N0b3JlKHQscj8uc2Vzc2lvbklkKTp2b2lkIDAsbD17c2lnbmFsOmEuc2lnbmFsLHNlc3Npb25JZDpyPy5zZXNzaW9uSWQsX21ldGE6dC5wYXJhbXM/Ll9tZXRhLHNlbmROb3RpZmljYXRpb246YXN5bmMgZD0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e3JlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmKG0ucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oZCxtKX0sc2VuZFJlcXVlc3Q6YXN5bmMoZCxtLGIpPT57aWYoYS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgaihGLkNvbm5lY3Rpb25DbG9zZWQsIlJlcXVlc3Qgd2FzIGNhbmNlbGxlZCIpO2NvbnN0IHY9ey4uLmIscmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYhdi5yZWxhdGVkVGFzayYmKHYucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSk7Y29uc3QgXz12LnJlbGF0ZWRUYXNrPy50YXNrSWQ/P3M7cmV0dXJuIF8mJmMmJmF3YWl0IGMudXBkYXRlVGFza1N0YXR1cyhfLCJpbnB1dF9yZXF1aXJlZCIpLGF3YWl0IHRoaXMucmVxdWVzdChkLG0sdil9LGF1dGhJbmZvOm4/LmF1dGhJbmZvLHJlcXVlc3RJZDp0LmlkLHJlcXVlc3RJbmZvOm4/LnJlcXVlc3RJbmZvLHRhc2tJZDpzLHRhc2tTdG9yZTpjLHRhc2tSZXF1ZXN0ZWRUdGw6aT8udHRsLGNsb3NlU1NFU3RyZWFtOm4/LmNsb3NlU1NFU3RyZWFtLGNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbTpuPy5jbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW19O1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpJiZ0aGlzLmFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9KS50aGVuKCgpPT5vKHQsbCkpLnRoZW4oYXN5bmMgZD0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e3Jlc3VsdDpkLGpzb25ycGM6IjIuMCIsaWQ6dC5pZH07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToicmVzcG9uc2UiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSxhc3luYyBkPT57aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOk51bWJlci5pc1NhZmVJbnRlZ2VyKGQuY29kZSk/ZC5jb2RlOkYuSW50ZXJuYWxFcnJvcixtZXNzYWdlOmQubWVzc2FnZT8/IkludGVybmFsIGVycm9yIiwuLi5kLmRhdGEhPT12b2lkIDAmJntkYXRhOmQuZGF0YX19fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTptLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQobSl9KS5jYXRjaChkPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgcmVzcG9uc2U6ICR7ZH1gKSkpLmZpbmFsbHkoKCk9Pnt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQuaWQpPT09YSYmdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmRlbGV0ZSh0LmlkKX0pfV9vbnByb2dyZXNzKHQpe2NvbnN0e3Byb2dyZXNzVG9rZW46biwuLi5vfT10LnBhcmFtcyxyPU51bWJlcihuKSxzPXRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZ2V0KHIpO2lmKCFzKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSBwcm9ncmVzcyBub3RpZmljYXRpb24gZm9yIGFuIHVua25vd24gdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn1jb25zdCBhPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KHIpLGk9dGhpcy5fdGltZW91dEluZm8uZ2V0KHIpO2lmKGkmJmEmJmkucmVzZXRUaW1lb3V0T25Qcm9ncmVzcyl0cnl7dGhpcy5fcmVzZXRUaW1lb3V0KHIpfWNhdGNoKGMpe3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX2NsZWFudXBUaW1lb3V0KHIpLGEoYyk7cmV0dXJufXMobyl9X29ucmVzcG9uc2UodCl7Y29uc3Qgbj1OdW1iZXIodC5pZCksbz10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChuKTtpZihvKXtpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShuKSxibyh0KSlvKHQpO2Vsc2V7Y29uc3QgYT1uZXcgaih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7byhhKX1yZXR1cm59Y29uc3Qgcj10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChuKTtpZihyPT09dm9pZCAwKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSByZXNwb25zZSBmb3IgYW4gdW5rbm93biBtZXNzYWdlIElEOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUobiksdGhpcy5fY2xlYW51cFRpbWVvdXQobik7bGV0IHM9ITE7aWYoYm8odCkmJnQucmVzdWx0JiZ0eXBlb2YgdC5yZXN1bHQ9PSJvYmplY3QiKXtjb25zdCBhPXQucmVzdWx0O2lmKGEudGFzayYmdHlwZW9mIGEudGFzaz09Im9iamVjdCIpe2NvbnN0IGk9YS50YXNrO3R5cGVvZiBpLnRhc2tJZD09InN0cmluZyImJihzPSEwLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5zZXQoaS50YXNrSWQsbikpfX1pZihzfHx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShuKSxibyh0KSlyKHQpO2Vsc2V7Y29uc3QgYT1qLmZyb21FcnJvcih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7cihhKX19Z2V0IHRyYW5zcG9ydCgpe3JldHVybiB0aGlzLl90cmFuc3BvcnR9YXN5bmMgY2xvc2UoKXthd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCl9YXN5bmMqcmVxdWVzdFN0cmVhbSh0LG4sbyl7Y29uc3R7dGFzazpyfT1vPz97fTtpZighcil7dHJ5e3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMucmVxdWVzdCh0LG4sbyl9fWNhdGNoKGEpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjphIGluc3RhbmNlb2Ygaj9hOm5ldyBqKEYuSW50ZXJuYWxFcnJvcixTdHJpbmcoYSkpfX1yZXR1cm59bGV0IHM7dHJ5e2NvbnN0IGE9YXdhaXQgdGhpcy5yZXF1ZXN0KHQsUGMsbyk7aWYoYS50YXNrKXM9YS50YXNrLnRhc2tJZCx5aWVsZHt0eXBlOiJ0YXNrQ3JlYXRlZCIsdGFzazphLnRhc2t9O2Vsc2UgdGhyb3cgbmV3IGooRi5JbnRlcm5hbEVycm9yLCJUYXNrIGNyZWF0aW9uIGRpZCBub3QgcmV0dXJuIGEgdGFzayIpO2Zvcig7Oyl7Y29uc3QgaT1hd2FpdCB0aGlzLmdldFRhc2soe3Rhc2tJZDpzfSxvKTtpZih5aWVsZHt0eXBlOiJ0YXNrU3RhdHVzIix0YXNrOml9LFdlKGkuc3RhdHVzKSl7aS5zdGF0dXM9PT0iY29tcGxldGVkIj95aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTppLnN0YXR1cz09PSJmYWlsZWQiP3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgaihGLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSBmYWlsZWRgKX06aS5zdGF0dXM9PT0iY2FuY2VsbGVkIiYmKHlpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgaihGLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSB3YXMgY2FuY2VsbGVkYCl9KTtyZXR1cm59aWYoaS5zdGF0dXM9PT0iaW5wdXRfcmVxdWlyZWQiKXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTtyZXR1cm59Y29uc3QgYz1pLnBvbGxJbnRlcnZhbD8/dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzthd2FpdCBuZXcgUHJvbWlzZShsPT5zZXRUaW1lb3V0KGwsYykpLG8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKX19Y2F0Y2goYSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmEgaW5zdGFuY2VvZiBqP2E6bmV3IGooRi5JbnRlcm5hbEVycm9yLFN0cmluZyhhKSl9fX1yZXF1ZXN0KHQsbixvKXtjb25zdHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YSx0YXNrOmkscmVsYXRlZFRhc2s6Y309bz8/e307cmV0dXJuIG5ldyBQcm9taXNlKChsLGQpPT57Y29uc3QgbT1UPT57ZChUKX07aWYoIXRoaXMuX3RyYW5zcG9ydCl7bShuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKSk7cmV0dXJufWlmKHRoaXMuX29wdGlvbnM/LmVuZm9yY2VTdHJpY3RDYXBhYmlsaXRpZXM9PT0hMCl0cnl7dGhpcy5hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQubWV0aG9kKSxpJiZ0aGlzLmFzc2VydFRhc2tDYXBhYmlsaXR5KHQubWV0aG9kKX1jYXRjaChUKXttKFQpO3JldHVybn1vPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCk7Y29uc3QgYj10aGlzLl9yZXF1ZXN0TWVzc2FnZUlkKyssdj17Li4udCxqc29ucnBjOiIyLjAiLGlkOmJ9O28/Lm9ucHJvZ3Jlc3MmJih0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLnNldChiLG8ub25wcm9ncmVzcyksdi5wYXJhbXM9ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LHByb2dyZXNzVG9rZW46Yn19KSxpJiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLHRhc2s6aX0pLGMmJih2LnBhcmFtcz17Li4udi5wYXJhbXMsX21ldGE6ey4uLnYucGFyYW1zPy5fbWV0YXx8e30sW0dlXTpjfX0pO2NvbnN0IF89VD0+e3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKGIpLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKGIpLHRoaXMuX2NsZWFudXBUaW1lb3V0KGIpLHRoaXMuX3RyYW5zcG9ydD8uc2VuZCh7anNvbnJwYzoiMi4wIixtZXRob2Q6Im5vdGlmaWNhdGlvbnMvY2FuY2VsbGVkIixwYXJhbXM6e3JlcXVlc3RJZDpiLHJlYXNvbjpTdHJpbmcoVCl9fSx7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmF9KS5jYXRjaChvZT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGNhbmNlbGxhdGlvbjogJHtvZX1gKSkpO2NvbnN0IEs9VCBpbnN0YW5jZW9mIGo/VDpuZXcgaihGLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhUKSk7ZChLKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQoYixUPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoVCBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBkKFQpO3RyeXtjb25zdCBLPWpoKG4sVC5yZXN1bHQpO0suc3VjY2Vzcz9sKEsuZGF0YSk6ZChLLmVycm9yKX1jYXRjaChLKXtkKEspfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e18obz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3Qgdz1vPy50aW1lb3V0Pz9VeSwkPSgpPT5fKGouZnJvbUVycm9yKEYuUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDp3fSkpO3RoaXMuX3NldHVwVGltZW91dChiLHcsbz8ubWF4VG90YWxUaW1lb3V0LCQsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IFo9Yz8udGFza0lkO2lmKFope2NvbnN0IFQ9Sz0+e2NvbnN0IG9lPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KGIpO29lP29lKEspOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHtifWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQoYixUKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2UoWix7dHlwZToicmVxdWVzdCIsbWVzc2FnZTp2LHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goSz0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGIpLGQoSyl9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKHYse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphfSkuY2F0Y2goVD0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGIpLGQoVCl9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LENjLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSxBYyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSxUdixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGk9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtHZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmksdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbR2VdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChpLG4pLmNhdGNoKGM9PnRoaXMuX29uZXJyb3IoYykpfSk7cmV0dXJufWxldCBhPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoYT17Li4uYSxwYXJhbXM6ey4uLmEucGFyYW1zLF9tZXRhOnsuLi5hLnBhcmFtcz8uX21ldGF8fHt9LFtHZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoYSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89U3UodCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgYT16dSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihhLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89U3UodCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9enUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJiR1KHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGE9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7YT8oYShuZXcgaihGLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBqKEYuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBhPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChhKSxzKG5ldyBqKEYuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGEpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGEsbik7Y29uc3QgaT1hd2FpdCBvLmdldFRhc2socixuKTtpZihpKXtjb25zdCBjPXhvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6aX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGMpLFdlKGkuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGEpPT57Y29uc3QgaT1hd2FpdCBvLmdldFRhc2socixuKTtpZighaSl0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKFdlKGkuc3RhdHVzKSl0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7aS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsYSxuKTtjb25zdCBjPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGMpe2NvbnN0IGw9eG8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczpjfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24obCksV2UoYy5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gVHUoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIEh5KGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGE9bltyXTtUdShhKSYmVHUocyk/bltyXT17Li4uYSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgQnkgZXh0ZW5kcyBGeXtfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxhPT57bGV0IGk9YS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxpKSxzLm9uSGFuZGxlcj8uKGkpO2ZvcihsZXQgYyBvZlsuLi5zLmxpc3RlbmVyc10pYyhpKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgVnk9IjIwMjYtMDEtMjYiLEp5PSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3MgS3l7ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPWN2LnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09SnkmJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciBXeT1PKFtmKCJsaWdodCIpLGYoImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxYdD1PKFtmKCJpbmxpbmUiKSxmKCJmdWxsc2NyZWVuIiksZigicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIiksR3k9TyhbZigiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksZigiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxmKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksZigiLS1jb2xvci10ZXh0LWludmVyc2UiKSxmKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxmKCItLWNvbG9yLXRleHQtaW5mbyIpLGYoIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxmKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLGYoIi0tY29sb3ItdGV4dC13YXJuaW5nIiksZigiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksZigiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksZigiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLGYoIi0tY29sb3ItYm9yZGVyLWdob3N0IiksZigiLS1jb2xvci1ib3JkZXItaW5mbyIpLGYoIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLGYoIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksZigiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxmKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLGYoIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLGYoIi0tY29sb3ItcmluZy1pbmZvIiksZigiLS1jb2xvci1yaW5nLWRhbmdlciIpLGYoIi0tY29sb3ItcmluZy1zdWNjZXNzIiksZigiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxmKCItLWZvbnQtc2FucyIpLGYoIi0tZm9udC1tb25vIiksZigiLS1mb250LXdlaWdodC1ub3JtYWwiKSxmKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLGYoIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxmKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxmKCItLWZvbnQtdGV4dC14cy1zaXplIiksZigiLS1mb250LXRleHQtc20tc2l6ZSIpLGYoIi0tZm9udC10ZXh0LW1kLXNpemUiKSxmKCItLWZvbnQtdGV4dC1sZy1zaXplIiksZigiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksZigiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksZigiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksZigiLS1ib3JkZXItcmFkaXVzLXhzIiksZigiLS1ib3JkZXItcmFkaXVzLXNtIiksZigiLS1ib3JkZXItcmFkaXVzLW1kIiksZigiLS1ib3JkZXItcmFkaXVzLWxnIiksZigiLS1ib3JkZXItcmFkaXVzLXhsIiksZigiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxmKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksZigiLS1zaGFkb3ctaGFpcmxpbmUiKSxmKCItLXNoYWRvdy1zbSIpLGYoIi0tc2hhZG93LW1kIiksZigiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIiksUXk9UihHeS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxPKFtoKCksbXQoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTtnKHttZXRob2Q6ZigidWkvb3Blbi1saW5rIikscGFyYW1zOmcoe3VybDpoKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgWXk9Zyh7aXNFcnJvcjpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksWHk9Zyh7aXNFcnJvcjpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLGVfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6Zyh7fSl9KTt2YXIgTGM9Zyh7Y29ubmVjdERvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksVWM9Zyh7Y2FtZXJhOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6Zyh7d2lkdGg6QygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyIHRfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOlIoaCgpLEQoKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSxuXz1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOlIoaCgpLEQoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksb189Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6Zyh7cmVhc29uOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLHJfPWcoe2ZvbnRzOmgoKS5vcHRpb25hbCgpfSksc189Zyh7dmFyaWFibGVzOlF5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6cl8ub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLGlfPWcoe21ldGhvZDpmKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczpnKHt9KX0pO1IoaCgpLEQoKSk7dmFyIEl1PWcoe3RleHQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTt2YXIgYV89Zyh7ZXhwZXJpbWVudGFsOlIoaCgpLFIoaCgpLFduKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6Zyh7cGVybWlzc2lvbnM6VWMub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOkxjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0Okl1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTpJdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOmcoe3Rvb2xzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLGNfPWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxSKGgoKSxXbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChYdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6Zyh7fSkub3B0aW9uYWwoKX0pO2coe2NzcDpMYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6VWMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpMKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO2coe21ldGhvZDpmKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczpnKHttb2RlOlh0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIHVfPWcoe21vZGU6WHQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLGxfPU8oW2YoIm1vZGVsIiksZigiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7Zyh7cmVzb3VyY2VVcmk6aCgpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTpQKGxfKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOmV0KCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpldCgpLm9wdGlvbmFsKCl9KTtnKHttaW1lVHlwZXM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTtnKHttZXRob2Q6ZigidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczpnKHtjb250ZW50czpQKE8oW2NmLHVmXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTtnKHttZXRob2Q6ZigidWkvbWVzc2FnZSIpLHBhcmFtczpnKHtyb2xlOmYoInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6UCh1bykuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczpnKHtodG1sOmgoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOkxjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6VWMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgZF89Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6bnMuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxtZj1nKHt0b29sSW5mbzpnKHtpZDpvby5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6RGMuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6V3kub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczpzXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6WHQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2RlczpQKFh0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6TyhbZyh7aGVpZ2h0OkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSxnKHttYXhIZWlnaHQ6TyhbQygpLG10KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoTyhbZyh7d2lkdGg6QygpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksZyh7bWF4V2lkdGg6TyhbQygpLG10KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpPKFtmKCJ3ZWIiKSxmKCJkZXNrdG9wIiksZigibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOmcoe3RvdWNoOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOmcoe3RvcDpDKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OkMoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206QygpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OkMoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCkscF89Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6bWYuZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7Zyh7bWV0aG9kOmYoInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOmcoe2NvbnRlbnQ6UCh1bykub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50OlIoaCgpLEQoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL2luaXRpYWxpemUiKSxwYXJhbXM6Zyh7YXBwSW5mbzplcy5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6Y18uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmgoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIGhfPWcoe3Byb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86ZXMuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczphXy5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDptZi5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxmXz17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gUHUoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShmXyk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgVWYoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm52KSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIHh1KGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgYT1zLnBhdGg/Lm1hcChpPT50eXBlb2YgaT09Im9iamVjdCI/aS5rZXk6aSkuam9pbigiLiIpO3JldHVybiBhP2Ake2F9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBtXyhlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBnXyhlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gYl8oZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyBGYyBleHRlbmRzIEJ5e19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDp0Xyx0b29saW5wdXRwYXJ0aWFsOm5fLHRvb2xyZXN1bHQ6ZF8sdG9vbGNhbmNlbGxlZDpvXyxob3N0Y29udGV4dGNoYW5nZWQ6cF99O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIUZjLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHx0ZSh7aml0bGVzczohMH0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIodHMscj0+KGNvbnNvbGUubG9nKCJSZWNlaXZlZCBwaW5nOiIsci5wYXJhbXMpLHt9KSksdGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdm9pZCAwKX1yZWdpc3RlckNhcGFiaWxpdGllcyh0KXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhZnRlciB0cmFuc3BvcnQgaXMgZXN0YWJsaXNoZWQiKTt0aGlzLl9jYXBhYmlsaXRpZXM9SHkodGhpcy5fY2FwYWJpbGl0aWVzLHQpfXJlZ2lzdGVyVG9vbCh0LG4sbyl7aWYodGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7bGV0IHI9dGhpcyxzPSgpPT57ci5faW5pdGlhbGl6ZWRTZW50JiZyLl9jYXBhYmlsaXRpZXMudG9vbHM/Lmxpc3RDaGFuZ2VkJiZyLnNlbmRUb29sTGlzdENoYW5nZWQoKX0sYT1uLmlucHV0U2NoZW1hIT09dm9pZCAwLGk9e3RpdGxlOm4udGl0bGUsZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpuLmlucHV0U2NoZW1hLG91dHB1dFNjaGVtYTpuLm91dHB1dFNjaGVtYSxhbm5vdGF0aW9uczpuLmFubm90YXRpb25zLF9tZXRhOm4uX21ldGEsZW5hYmxlZDohMCxlbmFibGUoKXt0aGlzLmVuYWJsZWQ9ITAscygpfSxkaXNhYmxlKCl7dGhpcy5lbmFibGVkPSExLHMoKX0sdXBkYXRlKGMpe09iamVjdC5hc3NpZ24odGhpcyxjKSxzKCl9LHJlbW92ZSgpe3IuX3JlZ2lzdGVyZWRUb29sc1t0XT09PWkmJihkZWxldGUgci5fcmVnaXN0ZXJlZFRvb2xzW3RdLHMoKSl9LGhhbmRsZXI6YXN5bmMoYyxsKT0+e2lmKCFpLmVuYWJsZWQpdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBkaXNhYmxlZGApO2xldCBkO2lmKGEpe2xldCBtPWkuaW5wdXRTY2hlbWEsYj1tP2F3YWl0IHh1KG0sYz8/e30sYEludmFsaWQgaW5wdXQgZm9yIHRvb2wgJHt0fTogYCk6Yz8/e307ZD1hd2FpdCBvKGIsbCl9ZWxzZSBkPWF3YWl0IG8obCk7cmV0dXJuIGkub3V0cHV0U2NoZW1hJiYhZC5pc0Vycm9yJiYoZC5zdHJ1Y3R1cmVkQ29udGVudD1hd2FpdCB4dShpLm91dHB1dFNjaGVtYSxkLnN0cnVjdHVyZWRDb250ZW50LGBJbnZhbGlkIG91dHB1dCBmb3IgdG9vbCAke3R9OiBgKSksZH19O3JldHVybiB0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF09aSwhdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzJiYhdGhpcy50cmFuc3BvcnQmJnRoaXMucmVnaXN0ZXJDYXBhYmlsaXRpZXMoe3Rvb2xzOntsaXN0Q2hhbmdlZDohMH19KSx0aGlzLmVuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCkscygpLGl9X3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSExO2Vuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCl7dGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWR8fCh0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMCx0aGlzLm9uY2FsbHRvb2w9YXN5bmModCxuKT0+e2xldCBvPXRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0Lm5hbWVdO2lmKCFvKXRocm93IEVycm9yKGBUb29sICR7dC5uYW1lfSBub3QgZm91bmRgKTtyZXR1cm4gby5oYW5kbGVyKHQuYXJndW1lbnRzLG4pfSx0aGlzLm9ubGlzdHRvb2xzPWFzeW5jKHQsbik9Pih7dG9vbHM6YXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModGhpcy5fcmVnaXN0ZXJlZFRvb2xzKS5maWx0ZXIoKFtvLHJdKT0+ci5lbmFibGVkKS5tYXAoYXN5bmMoW28scl0pPT57bGV0IHM9e25hbWU6byx0aXRsZTpyLnRpdGxlLGRlc2NyaXB0aW9uOnIuZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6ci5pbnB1dFNjaGVtYT9hd2FpdCBQdShyLmlucHV0U2NoZW1hLCJpbnB1dCIpOnt0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e319fTtyZXR1cm4gci5vdXRwdXRTY2hlbWEmJihzLm91dHB1dFNjaGVtYT1hd2FpdCBQdShyLm91dHB1dFNjaGVtYSwib3V0cHV0IikpLHIuYW5ub3RhdGlvbnMmJihzLmFubm90YXRpb25zPXIuYW5ub3RhdGlvbnMpLHIuX21ldGEmJihzLl9tZXRhPXIuX21ldGEpLHN9KSl9KSl9YXN5bmMgc2VuZFRvb2xMaXN0Q2hhbmdlZCh0PXt9KXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZFRvb2xMaXN0Q2hhbmdlZCIpLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIixwYXJhbXM6dH0pfWdldEhvc3RDYXBhYmlsaXRpZXMoKXtyZXR1cm4gdGhpcy5faG9zdENhcGFiaWxpdGllc31nZXRIb3N0VmVyc2lvbigpe3JldHVybiB0aGlzLl9ob3N0SW5mb31nZXRIb3N0Q29udGV4dCgpe3JldHVybiB0aGlzLl9ob3N0Q29udGV4dH1nZXQgb250b29saW5wdXQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIpfXNldCBvbnRvb2xpbnB1dCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iix0KX1nZXQgb250b29saW5wdXRwYXJ0aWFsKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIil9c2V0IG9udG9vbGlucHV0cGFydGlhbCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIsdCl9Z2V0IG9udG9vbHJlc3VsdCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIpfXNldCBvbnRvb2xyZXN1bHQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiLHQpfWdldCBvbnRvb2xjYW5jZWxsZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiKX1zZXQgb250b29sY2FuY2VsbGVkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIix0KX1nZXQgb25ob3N0Y29udGV4dGNoYW5nZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIpfXNldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix0KX1fb250ZWFyZG93bjtnZXQgb250ZWFyZG93bigpe3JldHVybiB0aGlzLl9vbnRlYXJkb3dufXNldCBvbnRlYXJkb3duKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib250ZWFyZG93biIsdGhpcy5fb250ZWFyZG93bix0KSx0aGlzLl9vbnRlYXJkb3duPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoaV8sKG4sbyk9PntpZighdGhpcy5fb250ZWFyZG93bil0aHJvdyBFcnJvcigiTm8gb250ZWFyZG93biBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbnRlYXJkb3duKG4ucGFyYW1zLG8pfSl9X29uY2FsbHRvb2w7Z2V0IG9uY2FsbHRvb2woKXtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbH1zZXQgb25jYWxsdG9vbCh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9uY2FsbHRvb2wiLHRoaXMuX29uY2FsbHRvb2wsdCksdGhpcy5fb25jYWxsdG9vbD10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGRmLChuLG8pPT57aWYoIXRoaXMuX29uY2FsbHRvb2wpdGhyb3cgRXJyb3IoIk5vIG9uY2FsbHRvb2wgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbChuLnBhcmFtcyxvKX0pfV9vbmxpc3R0b29scztnZXQgb25saXN0dG9vbHMoKXtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHN9c2V0IG9ubGlzdHRvb2xzKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25saXN0dG9vbHMiLHRoaXMuX29ubGlzdHRvb2xzLHQpLHRoaXMuX29ubGlzdHRvb2xzPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIobGYsKG4sbyk9PntpZighdGhpcy5fb25saXN0dG9vbHMpdGhyb3cgRXJyb3IoIk5vIG9ubGlzdHRvb2xzIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzKG4ucGFyYW1zLG8pfSl9YXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0KXtzd2l0Y2godCl7Y2FzZSJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIjppZighdGhpcy5faG9zdENhcGFiaWxpdGllcz8uc2FtcGxpbmcpdGhyb3cgRXJyb3IoYEhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZyAocmVxdWlyZWQgZm9yICR7dH0pYCk7YnJlYWt9fWFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eSh0KXtzd2l0Y2godCl7Y2FzZSJ0b29scy9jYWxsIjpjYXNlInRvb2xzL2xpc3QiOmlmKCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMpdGhyb3cgRXJyb3IoYENsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHRvb2wgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7dH0pYCk7cmV0dXJuO2Nhc2UicGluZyI6Y2FzZSJ1aS9yZXNvdXJjZS10ZWFyZG93biI6cmV0dXJuO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYE5vIGhhbmRsZXIgZm9yIG1ldGhvZCAke3R9IHJlZ2lzdGVyZWRgKX19YXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0KXt9YXNzZXJ0VGFza0NhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrIGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXN5bmMgY2FsbFNlcnZlclRvb2wodCxuKXtpZih0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY2FsbFNlcnZlclRvb2wiKSx0eXBlb2YgdD09InN0cmluZyIpdGhyb3cgRXJyb3IoYGNhbGxTZXJ2ZXJUb29sKCkgZXhwZWN0cyBhbiBvYmplY3QgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBidXQgcmVjZWl2ZWQgYSBzdHJpbmcgKCIke3R9IikuIERpZCB5b3UgbWVhbjogY2FsbFNlcnZlclRvb2woeyBuYW1lOiAiJHt0fSIsIGFyZ3VtZW50czogeyAuLi4gfSB9KT9gKTtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRvb2xzL2NhbGwiLHBhcmFtczp0fSxucyx7b25wcm9ncmVzczooKT0+e30scmVzZXRUaW1lb3V0T25Qcm9ncmVzczohMCwuLi5ufSl9YXN5bmMgcmVhZFNlcnZlclJlc291cmNlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZWFkU2VydmVyUmVzb3VyY2UiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL3JlYWQiLHBhcmFtczp0fSxhZixuKX1hc3luYyBsaXN0U2VydmVyUmVzb3VyY2VzKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJsaXN0U2VydmVyUmVzb3VyY2VzIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9saXN0IixwYXJhbXM6dH0sc2Ysbil9YXN5bmMgY3JlYXRlU2FtcGxpbmdNZXNzYWdlKHQsbil7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNyZWF0ZVNhbXBsaW5nTWVzc2FnZSIpO2xldCBvPXQudG9vbHM/ZmY6aGY7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIixwYXJhbXM6dH0sbyxuKX1zZW5kTWVzc2FnZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZE1lc3NhZ2UiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvbWVzc2FnZSIscGFyYW1zOnR9LGVfLG4pfXNlbmRMb2codCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvbWVzc2FnZSIscGFyYW1zOnR9KX11cGRhdGVNb2RlbENvbnRleHQodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInVwZGF0ZU1vZGVsQ29udGV4dCIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIscGFyYW1zOnR9LHpjLG4pfW9wZW5MaW5rKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJvcGVuTGluayIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9vcGVuLWxpbmsiLHBhcmFtczp0fSxZeSxuKX1zZW5kT3Blbkxpbms9dGhpcy5vcGVuTGluaztkb3dubG9hZEZpbGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImRvd25sb2FkRmlsZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9kb3dubG9hZC1maWxlIixwYXJhbXM6dH0sWHksbil9cmVxdWVzdFRlYXJkb3duKHQ9e30pe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iLHBhcmFtczp0fSl9cmVxdWVzdERpc3BsYXlNb2RlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZXF1ZXN0RGlzcGxheU1vZGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiLHBhcmFtczp0fSx1XyxuKX1zZW5kU2l6ZUNoYW5nZWQodCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIixwYXJhbXM6dH0pfXNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl7bGV0IHQ9ITEsbj0wLG89MCxyPSgpPT57dHx8KHQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dD0hMTtsZXQgYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT1hLnN0eWxlLmhlaWdodDthLnN0eWxlLmhlaWdodD0ibWF4LWNvbnRlbnQiO2xldCBjPU1hdGguY2VpbChhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7YS5zdHlsZS5oZWlnaHQ9aTtsZXQgbD1NYXRoLmNlaWwod2luZG93LmlubmVyV2lkdGgpOyhsIT09bnx8YyE9PW8pJiYobj1sLG89Yyx0aGlzLnNlbmRTaXplQ2hhbmdlZCh7d2lkdGg6bCxoZWlnaHQ6Y30pKX0pKX07cigpO2xldCBzPW5ldyBSZXNpemVPYnNlcnZlcihyKTtyZXR1cm4gcy5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5vYnNlcnZlKGRvY3VtZW50LmJvZHkpLCgpPT5zLmRpc2Nvbm5lY3QoKX1hc3luYyBjb25uZWN0KHQ9bmV3IEt5KHdpbmRvdy5wYXJlbnQsd2luZG93LnBhcmVudCksbil7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkFwcCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIGFnYWluLiIpO3RoaXMuX2luaXRpYWxpemVkU2VudD0hMSxhd2FpdCBzdXBlci5jb25uZWN0KHQpO3RyeXtsZXQgbz1hd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvaW5pdGlhbGl6ZSIscGFyYW1zOnthcHBDYXBhYmlsaXRpZXM6dGhpcy5fY2FwYWJpbGl0aWVzLGFwcEluZm86dGhpcy5fYXBwSW5mbyxwcm90b2NvbFZlcnNpb246Vnl9fSxoXyxuKTtpZihvPT09dm9pZCAwKXRocm93IEVycm9yKGBTZXJ2ZXIgc2VudCBpbnZhbGlkIGluaXRpYWxpemUgcmVzdWx0OiAke299YCk7dGhpcy5faG9zdENhcGFiaWxpdGllcz1vLmhvc3RDYXBhYmlsaXRpZXMsdGhpcy5faG9zdEluZm89by5ob3N0SW5mbyx0aGlzLl9ob3N0Q29udGV4dD1vLmhvc3RDb250ZXh0LGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQifSksdGhpcy5faW5pdGlhbGl6ZWRTZW50PSEwLHRoaXMub3B0aW9ucz8uYXV0b1Jlc2l6ZSYmdGhpcy5zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpfWNhdGNoKG8pe3Rocm93IHRoaXMuY2xvc2UoKSxvfX19bGV0IEN1PSIiO2NvbnN0IGdmPShlLHQsbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT57aWYoIWUpcmV0dXJuOyhlLnRoZW1lPT09ImxpZ2h0Inx8ZS50aGVtZT09PSJkYXJrIikmJnQuYXBwbHlEb2N1bWVudFRoZW1lKGUudGhlbWUpO2NvbnN0IG89ZS5zdHlsZXM/LnZhcmlhYmxlcztvJiZ0eXBlb2Ygbz09Im9iamVjdCImJnQuYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXMobyk7Y29uc3Qgcj1lLnN0eWxlcz8uY3NzPy5mb250czt0eXBlb2Ygcj09InN0cmluZyImJnImJnIhPT1DdSYmKHQuYXBwbHlIb3N0Rm9udHMociksQ3U9cik7Y29uc3Qgcz1lLnNhZmVBcmVhSW5zZXRzO2lmKHMpZm9yKGNvbnN0IGEgb2ZbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdKXtjb25zdCBpPU51bWJlcihzW2FdPz8wKTtuLnN0eWxlLnNldFByb3BlcnR5KGAtLWluc2V0LSR7YX1gLGAke051bWJlci5pc0Zpbml0ZShpKSYmaT4wP2k6MH1weGApfX0sRWU9bmV3IEZjKHtuYW1lOiJob3RlbC1zdG9yZWZyb250Iix2ZXJzaW9uOiIxLjAuMCJ9LHtvcGVuTGlua3M6e30sYXZhaWxhYmxlRGlzcGxheU1vZGVzOlsiaW5saW5lIiwiZnVsbHNjcmVlbiJdfSksYmY9e2FwcGx5RG9jdW1lbnRUaGVtZTptXyxhcHBseUhvc3RTdHlsZVZhcmlhYmxlczpnXyxhcHBseUhvc3RGb250czpiX30scGU9ZT0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksdT1lPT5TdHJpbmcoZT8/IiIpLnJlcGxhY2UoL1smPD4iJ10vZyx0PT50PT09IiYiPyImYW1wOyI6dD09PSI8Ij8iJmx0OyI6dD09PSI+Ij8iJmd0OyI6dD09PSciJz8iJnF1b3Q7IjoiJiMzOTsiKTtsZXQgdXQ9IiIscHM9IiIsdmY9e30seWY9ITEsX2Y9IiIsej17Y2hlY2tJbjoiIixjaGVja091dDoiIixndWVzdHM6Mn0sUT0xO2NvbnN0IEV1PTU7bGV0IFg9bnVsbCx5dD1bXSxEZT0iIixoZT1bXSxNPW51bGwsRW89MDtjb25zdCB2Xz1uZXcgU2V0KFsiZm9yZ2V0UHJlZmVyZW5jZXMiLCJhZGRUb1RyaXAiLCJjbGVhclRyaXAiLCJyZXF1ZXN0Qm9va2luZyIsImNhbmNlbEJvb2tpbmciLCJjaGFuZ2VCb29raW5nIiwic2lnbkluIiwic2lnbk91dCJdKSxlbj1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO3JldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP2Bob3RlbDoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGV4dHJhczpib29raW5nOiR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgZXh0cmFzOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzInx8dD09PSJwb2xpY3ktbWlzc2luZyI/YHBvbGljeToke2UuaG90ZWw/LmlkPz8iIn06JHtlLnRvcGljPz8iIn1gOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciP2BjYW5jZWw6JHtlLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJjaGFuZ2UtcHJldmlldyI/YGNoYW5nZToke2UuY29uZmlybWF0aW9uQ29kZT8/ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iZGVzdGluYXRpb25zIj9gZGVzdGluYXRpb25zOiR7ZS5zY29wZT8ubmFtZT8/IiJ9YDp0PT09ImhvdGVscyJ8fHQ9PT0ibm8taG90ZWxzIj9gaG90ZWxzOiR7ZS5hc2s/LmNpdHk/PyIifToke2UuYXNrPy5xdWVyeT8/ZS5xdWVyeT8/IiJ9YDp0fSx5bz1lPT57IU18fF9fLmhhcyhTdHJpbmcoTS52aWV3KSl8fGVuKGUpIT09ZW4oTSkmJihoZT1bLi4uaGUse3BheWxvYWQ6TSxsYWJlbDprXyhNKSx2ZXJzaW9uOkVvfV0uc2xpY2UoLTYpKX0seV89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKSxuPWU/LnN0YXk/LmNoZWNrSW4/e2NoZWNrSW46ZS5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6ZS5zdGF5LmNoZWNrT3V0LGd1ZXN0czplLnN0YXkuZ3Vlc3RzPz8yfTp7fTtpZih0PT09InRyaXAiKXJldHVybntrZXk6InZpZXdUcmlwIixhcmdzOnt9fTtpZih0PT09ImJvb2tpbmdzIilyZXR1cm57a2V5OiJsaXN0Qm9va2luZ3MiLGFyZ3M6e319O2lmKCh0PT09ImhvdGVscyJ8fHQ9PT0iZGVzdGluYXRpb25zInx8dD09PSJuby1ob3RlbHMiJiZlLmFzaykmJmUuYXNrKXJldHVybntrZXk6Imxpc3RIb3RlbHMiLGFyZ3M6ey4uLmUuYXNrfX07aWYodD09PSJjb21wYXJpc29uIiYmQXJyYXkuaXNBcnJheShlLmNvbHVtbnMpKXJldHVybntrZXk6ImNvbXBhcmUiLGFyZ3M6ey4uLm4sLi4uZS50aXRsZT97dGl0bGU6ZS50aXRsZX06e30sLi4uZS5yZWNvbW1lbmRlZD97cmVjb21tZW5kZWQ6ZS5yZWNvbW1lbmRlZH06e30sZW50cmllczplLmNvbHVtbnMubWFwKG89Pih7aG90ZWw6by5ob3RlbD8uaWQsLi4uby5iZXN0Rm9yP3tiZXN0Rm9yOm8uYmVzdEZvcn06e30sLi4uby5wcm9zPy5sZW5ndGg/e3Byb3M6by5wcm9zfTp7fSwuLi5vLmNvbnM/Lmxlbmd0aD97Y29uczpvLmNvbnN9Ont9fSkpfX07aWYoKHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zIikmJmUuaG90ZWw/LmlkKXJldHVybntrZXk6ImdldEhvdGVsIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm4sLi4uZS5yb29tc193YW50ZWQ/e3Jvb21zOmUucm9vbXNfd2FudGVkfTp7fX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5mb3JCb29raW5nKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2Jvb2tpbmc6ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9fTtpZih0PT09ImV4dHJhcyImJmUuaG90ZWw/LmlkKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubn19O2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm57a2V5OiJpdGluZXJhcnkiLGFyZ3M6e3RpdGxlOmUudGl0bGUsLi4ubixkYXlzOihlLmRheXM/P1tdKS5tYXAobz0+KHtsYWJlbDpvLmxhYmVsLC4uLm8ubm90ZT97bm90ZTpvLm5vdGV9Ont9LGl0ZW1zOihvLml0ZW1zPz9bXSkubWFwKHI9PnIuaWQpfSkpfX19LE91PWU9PntoZT1oZS5maWx0ZXIodD0+IWUuaW5jbHVkZXMoU3RyaW5nKHQucGF5bG9hZD8udmlldykpKX0sX189bmV3IFNldChbImZpbmQtYm9va2luZyIsImJvb2tpbmciLCJjYW5jZWxsZWQiLCJjaGFuZ2VkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiLCJtZW1iZXItc2lnbi1pbiIsIm1lbWJlci1ub3QtZm91bmQiXSksa189ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJuby1ob3RlbHMiKXJldHVybiJ0aGUgc2VhcmNoIjtpZih0PT09ImRlc3RpbmF0aW9ucyIpcmV0dXJuIGUuc2NvcGU/Lm5hbWU/U3RyaW5nKGUuc2NvcGUubmFtZSk6ImFsbCBkZXN0aW5hdGlvbnMiO2lmKHQ9PT0iaG90ZWxzIil7aWYoZS5hc2s/LmNpdHkpcmV0dXJuIFN0cmluZyhlLmFzay5jaXR5KTtjb25zdCBuPVsuLi5uZXcgU2V0KChlLmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby5jaXR5KSkpXTtyZXR1cm4gbi5sZW5ndGg9PT0xP1N0cmluZyhuWzBdKTpgJHtlLnRvdGFsPz8wfSBob3RlbHNgfXJldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIik6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/InRoZSBjYW5jZWxsYXRpb24iOnQ9PT0iY2hhbmdlLXByZXZpZXciPyJ0aGUgY2hhbmdlIjp0PT09Im1lbWJlciI/InlvdXIgbWVtYmVyc2hpcCI6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gYWRkLW9ucyBmb3IgJHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmAke1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIil9IGFkZC1vbnNgOnQ9PT0idHJpcCI/InRoZSB0cmlwIjp0PT09ImJvb2tpbmdzIj8ieW91ciBib29raW5ncyI6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzIj8idGhlIHBvbGljaWVzIjoiYmFjayJ9LGtmPSgpPT57Y29uc3QgZT1wZSgiYmFja2J0biIpLHQ9aGUuYXQoLTEpO2UuaGlkZGVuPSF0LHQmJihlLnRleHRDb250ZW50PWDigLkgJHt0LmxhYmVsfWApfTtsZXQgSnQ9IiIsVHM9IiIsdG49MCxIYz0hMTtjb25zdCB3Zj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKFRzPXQudHJpcElkKSx0bj1OdW1iZXIodC5jb3VudD8/MCksQXJyYXkuaXNBcnJheSh0LmxpbmVzKSYmKHl0PXQubGluZXMsSGM9ITApKX0sd189ZT0+VHM/ey4uLmUsdHJpcDpUc306ZSwkXz1lPT52ZltlXT8/IiI7bGV0IEx0PSExO2NvbnN0IEF1PWU9PntMdD1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfTtsZXQgT289MCwkZj0iIixTZj0iIjtjb25zdCBRZT0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlYWQiKTtpZighZSlyZXR1cm47Y29uc3QgdD0oKT0+ZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KTt0KCksc2V0VGltZW91dCh0LDE4MCl9LHE9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89JF8oZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihMdClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO0F1KCEwKTtjb25zdCByPU9vO3JldHVybiBFZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czp3Xyh0KX0pLmZpbmFsbHkoKCk9PkF1KCExKSkudGhlbihzPT57d2Yocz8uX21ldGEpO2NvbnN0IGE9cz8uc3RydWN0dXJlZENvbnRlbnQsaT1hJiZuLmZvbGQ/bi5mb2xkKGEpOmEsYz12Xy5oYXMoZSkmJmkmJmkudmlldyE9PSJlcnJvciI7aWYocj09PU9vJiZpKXskZj1hP0pTT04uc3RyaW5naWZ5KGEpOiIiLFNmPUpTT04uc3RyaW5naWZ5KGkpO2NvbnN0IGw9ZW4oaSkhPT1lbihNKTtuLnB1c2ghPT0hMSYmeW8oaSksYyYmKEVvKz0xKSxpLnZpZXc9PT0iYm9va2luZyImJihPdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLENlPW51bGwpLChpLnZpZXc9PT0iY2FuY2VsbGVkInx8aS52aWV3PT09ImNoYW5nZWQiKSYmT3UoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLFBlKGkpLGwmJlFlKCl9ZWxzZSBjJiYoRW8rPTEpO3JldHVybiBTXyhzLG4ubm90ZSksc30pfSxTXz0oZSx0KT0+e2NvbnN0IG49KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG89Pm8/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyFufHwhRWUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fEVlLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6dD9gJHt0fSAke1N0cmluZyhuKX1gOlN0cmluZyhuKX1dfSkuY2F0Y2goKCk9Pnt9KX07bGV0IG9zPSExO2NvbnN0IHpfPSIoVGhlIGNhcmQgcHJpY2VkIGl0cyBvd24gZGVmYXVsdCBkYXRlcywgdG9uaWdodCwgdG8gc2hvdyB0aGUgcm9vbXM7IHRoZSBndWVzdCBoYXMgbm90IGNob3NlbiB0aGVtLikiLFV0PWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LEZ0PWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxUXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLElfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7VF99JHt1KGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHt1KGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLG5lPSgpPT55Zj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke3UoX2Z8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixubj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sSXM9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLEtlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake25uKGUuY2hlY2tJbil9IOKAkyAke25uKGUuY2hlY2tPdXQpfSDCtyAke0lzKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHtJcyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixQXz0oZSx0LG4pPT57Y29uc3Qgbz15dC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0seF89KGUsdCk9Pntjb25zdCBuPXl0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxBbz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHt1KG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHt1KG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7dShuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCx6Zj0oZSx0KT0+e2NvbnN0IG49dHx8VGYoKTtyZXR1cm4oIXouY2hlY2tJbnx8ei5jaGVja0luPG4pJiYoei5jaGVja0luPW4pLCghei5jaGVja091dHx8ei5jaGVja091dDw9ei5jaGVja0luKSYmKHouY2hlY2tPdXQ9QmUoei5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHt1KHouY2hlY2tJbil9IiBtaW49IiR7dShuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7dSh6LmNoZWNrT3V0KX0iIG1pbj0iJHt1KEJlKHouY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7dShRKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7dShycygpKX08L3NwYW4+CiAgPC9kaXY+YH0scnM9KCk9Pntjb25zdCBlPXouY2hlY2tJbiYmei5jaGVja091dD9Jcyh6LmNoZWNrSW4sei5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPVE+MT9gJHtRfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sQmU9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxUZj0oKT0+bmV3IERhdGUoRGF0ZS5ub3coKS1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqNmU0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLElmPWU9Pntjb25zdCB0PVsuLi5lPy50b2RheT9bZS50b2RheS5taW4sZS50b2RheS5tYXhdOltdLC4uLihlPy5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8udG9kYXlUaGVyZT8/IiIpKV0uZmlsdGVyKG89Pi9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KG8pKS5zb3J0KCksbj1UZigpO3JldHVybnttaW46W3RbMF0/P24sbl0uc29ydCgpWzBdPz9uLHN0YXJ0OnQuYXQoLTEpPz9ufX0sQ189ZT0+e2NvbnN0e21pbjp0LHN0YXJ0Om59PUlmKGUpOyghei5jaGVja0lufHx6LmNoZWNrSW48dCkmJih6LmNoZWNrSW49biksKCF6LmNoZWNrT3V0fHx6LmNoZWNrT3V0PD16LmNoZWNrSW4pJiYoei5jaGVja091dD1CZSh6LmNoZWNrSW4sMSkpO2NvbnN0IG89YDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHt1KHouY2hlY2tJbil9IiBtaW49IiR7dSh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHt1KHouY2hlY2tPdXQpfSIgbWluPSIke3UoQmUoei5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7dShRKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke2Uuc2NvcGU/IiI6JzxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kIj5TZWFyY2g8L2J1dHRvbj4nfQogICAgICA8L2Rpdj5gLHI9YDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgIDxsYWJlbCBjbGFzcz0id2hlcmUiPldoZXJlIHRvPGlucHV0IGlkPSJ3aGVyZSIgdHlwZT0ic2VhcmNoIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwiIGFyaWEtbGFiZWw9IldoZXJlIHRvIj48L2xhYmVsPgogICAgICAke299CiAgICA8L2Rpdj5gLHM9aT0+YDxkaXYgY2xhc3M9InBsYWNlcyI+JHtpLm1hcCgoYyxsKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHt1KGMubmFtZSl9IiR7bD49bHQ/IiBoaWRkZW4iOiIifT4ke3UoYy5uYW1lKX0gPHNtYWxsPiR7dShjLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfSR7aS5sZW5ndGg+bHQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHtpLmxlbmd0aC1sdH0gbW9yZTwvYnV0dG9uPmA6IiJ9PC9kaXY+YCxhPWUuc2NvcGU7cmV0dXJuIGE/W25lKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UoYS5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UoZS50b3RhbCl9ICR7dShlLnZvY2FiPy5ub3VuUGx1cmFsPz8iaG90ZWxzIil9IGluICR7dSgoYS5jaXRpZXM/P1tdKS5sZW5ndGgpfSBjaXRpZXM8L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzZWFyY2giPiR7b308L2Rpdj5gLHMoYS5jaXRpZXM/P1tdKSxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZS1hbGw9IiR7dShhLm5hbWUpfSI+QWxsICR7dShlLnRvdGFsKX0gaW4gJHt1KGEubmFtZSl9PC9idXR0b24+PC9kaXY+YF0uam9pbigiIik6W25lKCksciwuLi4oZS5yZWdpb25zPz9bXSkubWFwKGk9PmAKICAgICAgPGRpdiBjbGFzcz0icmVnaW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+JHt1KGkubmFtZSl9IDxzbWFsbD4ke3UoaS5jb3VudCl9PC9zbWFsbD48L2Rpdj4KICAgICAgICAkeyhpLmNvdW50cmllcz8/W10pLm1hcChjPT57Y29uc3QgbD1jLmNpdGllcz8/W10sZD1sLmxlbmd0aD09PTE/bFswXTp2b2lkIDA7cmV0dXJuYAogICAgICAgICAgPGRpdiBjbGFzcz0iZGVzdCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3QtY291bnRyeSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke3UoYy5uYW1lKX0iPiR7dShjLm5hbWUpfSR7ZCYmZC5uYW1lIT09Yy5uYW1lP2A8c21hbGw+IMK3ICR7dShkLm5hbWUpfTwvc21hbGw+YDoiIn0gPHNtYWxsIGNsYXNzPSJuIj4ke3UoYy5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj4KICAgICAgICAgICAgJHtsLmxlbmd0aD4xP3MobCk6IiJ9CiAgICAgICAgICA8L2Rpdj5gfSkuam9pbigiIil9CiAgICAgIDwvZGl2PmApLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhbGwtaG90ZWxzIj5Ccm93c2UgYWxsICR7dShlLnRvdGFsKX08L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kLWJvb2tpbmciPkZpbmQgYSBib29raW5nPC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LGx0PTgsUGY9ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O3JldHVybiB0P2A8c3BhbiBjbGFzcz0idC1mcm9tIj4ke3UodC50b3RhbCl9PHNtYWxsIGNsYXNzPSJ0LXN1YiI+JHtOdW1iZXIodC5yb29tcyk+MT9gJHt1KHQucm9vbXMpfSByb29tcyDDlyBgOiIifSR7dSh0Lm5pZ2h0cyl9ICR7TnVtYmVyKHQubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn0gwrcgdGF4ZXMgaW48L3NtYWxsPjwvc3Bhbj5gOmUubm9Sb29tc0ZvclN0YXk/YDxzcGFuIGNsYXNzPSJ0LWZyb20gdC1ub25lIj4key9zbGVlcHMvLnRlc3QoU3RyaW5nKGUubm9Sb29tc0ZvclN0YXkpKT9gTm8gcm9vbSBzbGVlcHMgJHt1KHouZ3Vlc3RzKX1gOiJObyByb29tIGZvciB0aGVzZSBkYXRlcyJ9PC9zcGFuPmA6YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7ZS5mcm9tTmlnaHRseT9gJHt1KGUuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+YH0sRV89ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O2lmKCF0KXJldHVybiIiO2NvbnN0IG49W3QuZnJlZUNhbmNlbGxhdGlvbj8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uPC9zcGFuPic6IiIsTnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke3UodC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJdLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/YDxzcGFuIGNsYXNzPSJ0LXRhZ3MiPiR7bi5qb2luKCIiKX08L3NwYW4+YDoiIn0sS3Q9KCk9PnouY2hlY2tJbiYmei5jaGVja091dD97Y2hlY2tJbjp6LmNoZWNrSW4sY2hlY2tPdXQ6ei5jaGVja091dCxndWVzdHM6ei5ndWVzdHMsLi4uUT4xP3tyb29tczpRfTp7fX06e30sT189ZT0+e2NvbnN0e2NoZWNrSW46dCxjaGVja091dDpuLGd1ZXN0czpvLHJvb21zOnIsLi4uc309ZT8/e307cmV0dXJuIHN9LEFfPShlLHQpPT57Y29uc3R7bWluOm4sc3RhcnQ6b309SWYodCk7cmV0dXJuKCF6LmNoZWNrSW58fHouY2hlY2tJbjxuKSYmKHouY2hlY2tJbj1vKSwoIXouY2hlY2tPdXR8fHouY2hlY2tPdXQ8PXouY2hlY2tJbikmJih6LmNoZWNrT3V0PUJlKHouY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY2kiIHZhbHVlPSIke3Uoei5jaGVja0luKX0iIG1pbj0iJHt1KG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjbyIgdmFsdWU9IiR7dSh6LmNoZWNrT3V0KX0iIG1pbj0iJHt1KEJlKHouY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0ibHJuIj4ke3UoUSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICAke2U/YDxzcGFuIGNsYXNzPSJuaWdodHMiPiR7dShycygpKX08L3NwYW4+YDonPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InByaWNlLWxpc3QiPlNob3cgcHJpY2VzPC9idXR0b24+J30KICA8L2Rpdj5gfTtsZXQgVGU9ImRhdGVzIjtjb25zdCB4Zj0iZGF0ZXMiLF9vPWU9Pntjb25zdCB0PWU/P3t9O3JldHVybnsuLi50LmJyYW5kP3ticmFuZDp0LmJyYW5kfTp7fSwuLi5BcnJheS5pc0FycmF5KHQuZmFjaWxpdGllcykmJnQuZmFjaWxpdGllcy5sZW5ndGg/e2ZhY2lsaXRpZXM6dC5mYWNpbGl0aWVzfTp7fSwuLi50LmZyZWVDYW5jZWxsYXRpb24/e2ZyZWVDYW5jZWxsYXRpb246ITB9Ont9LC4uLnQuYnJlYWtmYXN0P3ticmVha2Zhc3Q6ITB9Ont9fX0sUnU9ZT0+e2NvbnN0e2JyYW5kOnQsZmFjaWxpdGllczpuLGZyZWVDYW5jZWxsYXRpb246byxicmVha2Zhc3Q6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sUl89ZT0+e2NvbnN0IHQ9X28oZSk7cmV0dXJuKHQuYnJhbmQ/MTowKSsodC5mYWNpbGl0aWVzPy5sZW5ndGg/PzApKyh0LmZyZWVDYW5jZWxsYXRpb24/MTowKSsodC5icmVha2Zhc3Q/MTowKX0sWl89ZT0+e2NvbnN0IHQ9ZS5yZWZpbmU7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj0ocixzLGEsaSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXI9IiR7dShyKX0iIGFyaWEtcHJlc3NlZD0iJHtpPyJ0cnVlIjoiZmFsc2UifSI+JHt1KHMpfSA8c21hbGw+JHt1KGEpfTwvc21hbGw+PC9idXR0b24+YCxvPShyLHMpPT5zLmxlbmd0aD9gPGRpdiBjbGFzcz0iZmdyb3VwIj48c3BhbiBjbGFzcz0ic29ydHMtayI+JHt1KHIpfTwvc3Bhbj4ke3Muam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bbygiQnJhbmQiLCh0LmJyYW5kcz8/W10pLm1hcChyPT5uKGBicmFuZDoke3IubmFtZX1gLHIubmFtZSxyLmNvdW50LHIub24pKSksbygiSGFzIiwodC5mYWNpbGl0aWVzPz9bXSkubWFwKHI9Pm4oYGZhY2lsaXR5OiR7ci5rZXl9YCxyLmxhYmVsLHIuY291bnQsci5vbikpKSxvKCJSb29tIiwodC5yb29tPz9bXSkubWFwKHI9Pm4oci5rZXksci5sYWJlbCxyLmNvdW50LHIub24pKSldLmpvaW4oIiIpfSxOXz0oZSx0KT0+e2NvbnN0IG49cj0+TnVtYmVyKHIuc2xpY2UoOCwxMCkpLG89cj0+bmV3IERhdGUoYCR7cn1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse21vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KTtyZXR1cm4gbyhlKT09PW8odCk/YCR7bihlKX3igJMke24odCl9ICR7byh0KX1gOmAke24oZSl9ICR7byhlKX0g4oCTICR7bih0KX0gJHtvKHQpfWB9LENmPShlLHQsbik9Pntjb25zdCBvPSEhZS5zdGF5Py5jaGVja0luLHI9Ul8oZS5hc2spLHM9Wl8oZSksYT1FZi5maW5kKChbbF0pPT5sPT09bik/LlsxXT8/IkRlZmF1bHQiLGk9bz9gJHtOXyhlLnN0YXkuY2hlY2tJbixlLnN0YXkuY2hlY2tPdXQpfSR7UT4xP2AgwrcgJHtRfSByb29tc2A6IiJ9YDoiQWRkIGRhdGVzIixjPShsLGQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSB0b29sIiB0eXBlPSJidXR0b24iIGRhdGEtcGFuZWw9IiR7bH0iIGFyaWEtZXhwYW5kZWQ9IiR7VGU9PT1sPyJ0cnVlIjoiZmFsc2UifSI+JHtkfTwvYnV0dG9uPmA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icGxhY2VzIHRvb2xiYXIiPgogICAgICAke2MoImRhdGVzIix1KGkpKX0KICAgICAgJHt0P2MoInNvcnQiLG49PT0iZ3JvdXAiPyJTb3J0Ijp1KGEpKToiIn0KICAgICAgJHtzfHxyP2MoImZpbHRlcnMiLGBGaWx0ZXJzJHtyP2AgwrcgJHtyfWA6IiJ9YCk6IiJ9CiAgICAgICR7cj8nPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImNsZWFyLWZpbHRlcnMiPkNsZWFyPC9idXR0b24+JzoiIn0KICAgIDwvZGl2PgogICAgPGRpdiBkYXRhLXBhbmVsLWJvZHk9ImRhdGVzIiR7VGU9PT0iZGF0ZXMiPyIiOiIgaGlkZGVuIn0+JHtBXyhvLGUpfTwvZGl2PgogICAgJHt0P2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0ic29ydCIke1RlPT09InNvcnQiPyIiOiIgaGlkZGVuIn0+JHt0fTwvZGl2PmA6IiJ9CiAgICAke3M/YDxkaXYgY2xhc3M9ImZpbHRlci1wYW5lbCIgZGF0YS1wYW5lbC1ib2R5PSJmaWx0ZXJzIiR7VGU9PT0iZmlsdGVycyI/IiI6IiBoaWRkZW4ifT4ke3N9PC9kaXY+YDoiIn1gfSxFZj1bWyJncm91cCIsIkRlZmF1bHQiXSxbInByaWNlLWxvdyIsIkxvd2VzdCBwcmljZSJdLFsicHJpY2UtaGlnaCIsIkhpZ2hlc3QgcHJpY2UiXSxbInJhdGluZyIsIlJhdGluZyJdXSxqXz0zO2xldCBvbj0iaW5saW5lIixPZj1bXTtjb25zdCBybj0oKT0+b249PT0iZnVsbHNjcmVlbiIsQmM9KCk9Pntjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjb250ZW50IC50aWxlcyIpO2lmKGU/Lm9mZnNldFdpZHRoKXtjb25zdCBzPWdldENvbXB1dGVkU3R5bGUoZSkuZ3JpZFRlbXBsYXRlQ29sdW1ucy5zcGxpdCgiICIpLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7aWYocz4wKXJldHVybiBzfWNvbnN0IHQ9cGUoImNvbnRlbnQiKS5jbGllbnRXaWR0aHx8d2luZG93LmlubmVyV2lkdGh8fDAsbj10PD00NjAsbz1uPzE1MDoxOTYscj1uPzg6MTA7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5mbG9vcigodCtyKS8obytyKSkpfHwyfTtsZXQgVmM9MDtjb25zdCBzcz0oKT0+TWF0aC5tYXgoMiwoVmN8fEJjKCkpKmpfKTtsZXQgUm89MDtjb25zdCBNXz1lPT57Um89c3MoKTtjb25zdCB0PXJuKCk/ZS5ob3RlbHM/P1tdOihlLmhvdGVscz8/W10pLnNsaWNlKDAsUm8pLG49Wy4uLm5ldyBTZXQodC5tYXAodz0+U3RyaW5nKHcuY2l0eSkpKV0sbz13PT57Y29uc3QgJD10LmZpbmQoWj0+Wi5jaXR5PT09dyk/LmNvdW50cnk7cmV0dXJuICQmJiFTdHJpbmcoJCkuc3RhcnRzV2l0aCh3KT9TdHJpbmcoJCk6IiJ9LHI9Wy4uLm5ldyBTZXQodC5tYXAodz0+U3RyaW5nKHcuY291bnRyeT8/IiIpKSldLHM9ci5sZW5ndGg+MSxhPXc9PmAKICAgIDxkaXYgY2xhc3M9ImNpdHlncm91cCI+CiAgICAgICR7bi5sZW5ndGg+MT9gPGRpdiBjbGFzcz0iY2l0eW5hbWUiPiR7dSh3KX0keyFzJiZvKHcpP2A8c21hbGw+IMK3ICR7dShvKHcpKX08L3NtYWxsPmA6IiJ9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0idGlsZXMiPgogICAgICAgICR7dC5maWx0ZXIoJD0+JC5jaXR5PT09dykubWFwKCQ9PmAKICAgICAgICAgIDxidXR0b24gY2xhc3M9InRpbGUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KCQuaWQpfSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXNob3QiIHN0eWxlPSIke1V0KFN0cmluZygkLmlkKSl9Ij4KICAgICAgICAgICAgICAkeyQuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke3UoJC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke3UoRnQoU3RyaW5nKCQubmFtZSkpKX08L3NwYW4+CiAgICAgICAgICAgICAgJHskLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHt1KCQuYnJhbmQpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7dSgkLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHt1KG4ubGVuZ3RoPjE/JC5hcmVhPz8kLmNpdHk6WyQuYXJlYSwkLmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgICAgICR7UGYoJCl9CiAgICAgICAgICAgICAgICAke0lfKCQucmF0aW5nKX0KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgJHtFXygkKX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxpPU51bWJlcihlLnRvdGFsPz90Lmxlbmd0aCksYz1OdW1iZXIoZS5vZmZzZXQ/PzApLGw9aS1jLXQubGVuZ3RoLGQ9ZS5wbGFjZXM/P1tdO2UuYXNrPy5jaXR5O2NvbnN0IG09ZC5sZW5ndGg/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2QubWFwKCh3LCQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke3Uody5wbGFjZSl9IiR7JD49bHQ/IiBoaWRkZW4iOiIifT4ke3Uody5sYWJlbCl9IDxzbWFsbD4ke3Uody5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke2QubGVuZ3RoPmx0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7ZC5sZW5ndGgtbHR9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiLGI9U3RyaW5nKGUuc29ydD8/Imdyb3VwIiksdj0hKChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MSksXz10Lmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJPcmRlciI+JHtFZi5maWx0ZXIoKFt3XSk9PnZ8fCF3LnN0YXJ0c1dpdGgoInByaWNlIikpLm1hcCgoW3csJF0pPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtc29ydD0iJHt3fSIgYXJpYS1wcmVzc2VkPSIke3c9PT1iPyJ0cnVlIjoiZmFsc2UifSI+JHskfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW25lKCksbSxDZihlLF8sYiksZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7dShlLndpZGVuZWQuZnJvbSl9LiBUaGVzZSBhcmUgJHt1KGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiIsYDxkaXY+JHtzP3IubWFwKHc9PmA8ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+JHt1KHcpfTwvZGl2PiR7bi5maWx0ZXIoJD0+dC5zb21lKFo9PlouY2l0eT09PSQmJlN0cmluZyhaLmNvdW50cnk/PyIiKT09PXcpKS5tYXAoYSkuam9pbigiIil9YCkuam9pbigiIik6bi5tYXAoYSkuam9pbigiIil9PC9kaXY+YCwoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlF1b3RlZCBpbiAke3UoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSDigJQgbm8gcmF0ZSBpcyBhcHBsaWVkIGhlcmUsIHNvIHRoaXMgaXMgbm90IGEgcHJpY2Ugb3JkZXIuIE9uZSBjaXR5IG9yIG9uZSBjb3VudHJ5IGdpdmVzIG9uZSBjdXJyZW5jeS48L2Rpdj5gOiIiLGUub3ZlckJ1ZGdldD9gPGRpdiBjbGFzcz0ibm90ZSI+JHt1KGUub3ZlckJ1ZGdldCl9IG1vcmUgbWF0Y2hlZCBhbmQgY2FtZSBpbiBvdmVyIHRoZSBwcmljZSBjZWlsaW5nLjwvZGl2PmA6IiIscm4oKT9sPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHtjP2Ake2MrMX3igJMke2MrdC5sZW5ndGh9YDp0Lmxlbmd0aH0gb2YgJHtpfS48L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1ob3RlbHMiPlNob3cgJHtNYXRoLm1pbigxMixsKX0gbW9yZTwvYnV0dG9uPjwvZGl2PmA6IiI6Yz4wfHxsPjA/YDxkaXYgY2xhc3M9InBhZ2VyIiByb2xlPSJuYXZpZ2F0aW9uIiBhcmlhLWxhYmVsPSJQYWdlcyI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGFnZS1wcmV2IiR7Yz4wPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJQcmV2aW91cyBob3RlbHMiPuKAuSBQcmV2aW91czwvYnV0dG9uPgogICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im4iPiR7YysxfeKAkyR7Yyt0Lmxlbmd0aH0gb2YgJHtpfTwvc3Bhbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwYWdlLW5leHQiJHtsPjA/IiI6IiBkaXNhYmxlZCJ9IGFyaWEtbGFiZWw9Ik5leHQgaG90ZWxzIj5OZXh0IOKAujwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PiR7T2YuaW5jbHVkZXMoImZ1bGxzY3JlZW4iKT9gPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZ1bGxzY3JlZW4iPlZpZXcgYWxsICR7dShpKX08L2J1dHRvbj48L2Rpdj5gOiIifWA6IiJdLmpvaW4oIiIpfSxxXz1lPT57Y29uc3QgdD1lLm5lYXJlc3Q/P1tdLG49ZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7dShlLndpZGVuZWQuZnJvbSl9LCBzbyB0aGlzIGxvb2tlZCBpbiAke3UoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIjtyZXR1cm4gZS5iZWZvcmVGaWx0ZXJzPyhUZT0iZmlsdGVycyIsW25lKCksbixgPGRpdiBjbGFzcz0id2Fybm5vdGUiPiR7dShlLndoeT8/YE5vbmUgb2YgdGhlICR7ZS5iZWZvcmVGaWx0ZXJzfSBoZXJlIGhhcyBhbGwgb2YgdGhvc2UgdG9nZXRoZXIuYCl9PC9kaXY+YCxDZihlLCIiLFN0cmluZyhlLmFzaz8uc29ydD8/Imdyb3VwIikpXS5qb2luKCIiKSk6dC5sZW5ndGg/W25lKCksbixgPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgY2FtZSBpbiB1bmRlciB0aGUgcHJpY2UgY2VpbGluZy4gJHt1KHQubGVuZ3RoPT09MT8iVGhlIG5lYXJlc3QgaXMiOiJUaGUgbmVhcmVzdCBhcmUiKX0gb3ZlciBpdC48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ0aWxlcyI+JHt0Lm1hcChvPT5gCiAgICAgIDxidXR0b24gY2xhc3M9InRpbGUgb3ZlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke3Uoby5pZCl9Ij4KICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtVdChTdHJpbmcoby5pZCkpfSI+CiAgICAgICAgICAke28uaW1hZ2VVcmw/YDxpbWcgc3JjPSIke3Uoby5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7dShGdChTdHJpbmcoby5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke3Uoby5uYW1lKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHt1KFtvLmFyZWEsby5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgJHtQZihvKX0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIHdhcm4iPk92ZXI8L3NwYW4+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKTpgJHtufTxkaXYgY2xhc3M9ImVtcHR5Ij4ke3UoZS53aHk/P2BOb3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtlLnF1ZXJ5fSJgOiIifS4gVHJ5IGEgY2l0eS5gKX08L2Rpdj5gfSxBZj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7VXQoU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHt1KGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke3UoRnQoU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke3UoZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHt1KGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7dShlLnJhdGluZy52YWx1ZSl94piFICgke3UoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHt1KGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke3UodCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxEXz0oZSx0LG4pPT57Y29uc3Qgbz1QXyhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke1V0KGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7dSh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOnUoRnQoU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3UodC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3Uocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHt1KFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7dSh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHt1KHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7dSh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7dSh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHtRPjE/YCDCtyAke1F9IHJvb21zYDoiIn0gwrcgaW5jbC4gdGF4PC9kaXY+CiAgICAgICAgJHt0Lm1lbWJlclJhdGU/YDxkaXYgY2xhc3M9InAtbWVtYmVyIj4ke3UodC5tZW1iZXJSYXRlLnRpZXIpfSByYXRlPC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtBbyhgZGF0YS1hZGQtcm9vbT0iJHt1KHQuaWQpfSIgZGF0YS1ob3RlbD0iJHt1KGUuaWQpfSJgLG8sU3RyaW5nKHQubmFtZSksUSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxMXz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7dShlKX0iIGRhdGEtY2k9IiR7dShuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHt1KG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7dShubihTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHt1KG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHt1KG5uKFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/dShuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsWnU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/ejtyZXR1cm5bbmUoKSxBZih0KSx6ZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxMXyhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7dShlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+RF8odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7dSh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7dShyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7dSh0LmlkKX0iPiR7dShyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sVV89ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W25lKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke3Uoby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UodC5uYW1lKX0gwrcgJHt1KEtlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt1KHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7dShyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke3Uoci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7dShyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtBbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke3Uoci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7dShvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W25lKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UodC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7dShyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHt1KHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7dShyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7dShyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke0FvKGBkYXRhLWFkZC1leHRyYT0iJHt1KHIuaWQpfSIgZGF0YS1ob3RlbD0iJHt1KHQuaWQpfSJgLHhfKFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KHQuaWQpfSI+QmFjayB0byAke3UodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sRl89ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke3UoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7dShlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHt1KGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke3UoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke3UoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHt1KGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHt1KGUuaG90ZWxJZCl9IiR7ZS5kYXk/YCBkYXRhLWRheT0iJHt1KGUuZGF5KX0iYDoiIn1gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7dShlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3UoZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke0tlKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHt1KGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHt1KGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke0FvKHQsTnVtYmVyKGUua2luZD09PSJleHRyYSI/ZS5vcmRlcmVkPz9lLnF1YW50aXR5Pz8xOmUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxOdT0oZSx0KT0+YDxkaXYgY2xhc3M9InN1bXMiPgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+Um9vbXMgYW5kIGFkZC1vbnM8L3NwYW4+PHNwYW4+JHt1KGUuc3VidG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlRheGVzIGFuZCBmZWVzPC9zcGFuPjxzcGFuPiR7dShlLnRheGVzQW5kRmVlcyl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSBnb29kIj48c3Bhbj4ke3UoZS5tZW1iZXJTYXZpbmcudGllcil9IG1lbWJlciByYXRlPC9zcGFuPjxzcGFuPuKIkiAke3UoZS5tZW1iZXJTYXZpbmcuc2F2ZWQpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHt1KHQpfTwvc3Bhbj48c3Bhbj4ke3UoZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+UG9pbnRzIHRoaXMgZWFybnM8L3NwYW4+PHNwYW4+JHt1KE51bWJlcihlLm1lbWJlclNhdmluZy5wb2ludHMpLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgPC9kaXY+YCxIXz1lPT57Y29uc3QgdD1lLmxpbmVzPz9bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW25lKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+QnJvd3NlICR7dSh1dCl9IGhvdGVsczwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltuZSgpLG4ubWFwKG89PmAKICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJkYXkiPiR7dShubihvKSl9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0icm93cyI+JHt0LmZpbHRlcihyPT5TdHJpbmcoci5kYXk/PyIiKT09PW8pLm1hcChGXykuam9pbigiIil9PC9kaXY+YCkuam9pbigiIiksKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobz0+YCR7dShvLnRpdGxlKX06ICR7dShvLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsLi4uQXJyYXkuaXNBcnJheShlLmdyb3VwcykmJmUuZ3JvdXBzLmxlbmd0aD4xP1tgPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VkIGluICR7dSgoZS5jdXJyZW5jaWVzPz9bXSkuam9pbigiIGFuZCAiKSl9LCBzZXBhcmF0ZWx5LiBOb3RoaW5nIGhlcmUgY29udmVydHMgb25lIGludG8gdGhlIG90aGVyOyBlYWNoIGhvdGVsIGlzIGJvb2tlZCBhbmQgcGFpZCBpbiBpdHMgb3duLjwvZGl2PmAsLi4uZS5ncm91cHMubWFwKG89Pk51KG8sby5nb2VzV2l0aEFTdGF5P2BJbiAke28uY3VycmVuY3l9LCBnb2VzIHdpdGggYSBzdGF5IC0gbm90IGluIHRoZSB0b3RhbGA6YFRvdGFsIGluICR7by5jdXJyZW5jeX1gKSldOltOdShlLCJUb3RhbCIpXSwuLi5BcnJheS5pc0FycmF5KGUubmVlZHNSb29tKSYmZS5uZWVkc1Jvb20ubGVuZ3RoP2UubmVlZHNSb29tLm1hcChvPT5gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgICAgPGI+R29lcyB3aXRoIGEgc3RheTwvYj4KICAgICAgICAgICAgIDxzcGFuPiR7dSgoby5leHRyYXM/P1tdKS5qb2luKCIgYW5kICIpKX0gaXMgJHt1KG8uaG90ZWxOYW1lKX0ncyBzZXJ2aWNlIGZvciBpdHMgZ3Vlc3RzLCBzbyBpdCBpcyBib29rZWQgd2l0aCBhIHJvb20gdGhlcmUgLSBvciBhZGRlZCB0byBhIGJvb2tpbmcgeW91IGFscmVhZHkgaGF2ZS48L3NwYW4+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt1KG8uaG90ZWxJZCl9Ij5Sb29tcyBhdCAke3Uoby5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8L2Rpdj5gKTpbJzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stYm9vayI+UmVxdWVzdCBib29raW5nPC9idXR0b24+PC9kaXY+JyxgPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFJlcXVlc3RpbmcgYSBib29raW5nIGFza3MgJHt1KHV0KX0gdG8gaG9sZCB0aGUgcm9vbXMgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmAsUmYoKV0sWD8iIjpgPGRpdiBjbGFzcz0ibm90ZSI+QSAke3UodXQpfSBDaXJjbGUgbWVtYmVyPyA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPlNpZ24gaW4gZm9yIHRoZSBtZW1iZXIgcmF0ZTwvYnV0dG9uPi48L2Rpdj4ke1pvKCl9YF0uam9pbigiIil9LEpjPVt7aWQ6ImtpbmctYmVkIixsYWJlbDoiS2luZyBiZWQifSx7aWQ6InR3aW4tYmVkcyIsbGFiZWw6IlR3aW4gYmVkcyJ9LHtpZDoiaGlnaC1mbG9vciIsbGFiZWw6IkhpZ2ggZmxvb3IifSx7aWQ6Imxvdy1mbG9vciIsbGFiZWw6IkxvdyBmbG9vciJ9LHtpZDoicXVpZXQtcm9vbSIsbGFiZWw6IlF1aWV0IHJvb20ifSx7aWQ6ImNvbm5lY3Rpbmctcm9vbXMiLGxhYmVsOiJDb25uZWN0aW5nIHJvb21zIn0se2lkOiJlYXJseS1jaGVjay1pbiIsbGFiZWw6IkVhcmx5IGNoZWNrLWluIn0se2lkOiJsYXRlLWFycml2YWwiLGxhYmVsOiJMYXRlIGFycml2YWwifSx7aWQ6ImFjY2Vzc2libGUtcm9vbSIsbGFiZWw6IkFjY2Vzc2libGUgcm9vbSJ9XSxCXz17ImtpbmctYmVkIjoidHdpbi1iZWRzIiwidHdpbi1iZWRzIjoia2luZy1iZWQiLCJoaWdoLWZsb29yIjoibG93LWZsb29yIiwibG93LWZsb29yIjoiaGlnaC1mbG9vciJ9O2xldCBDZT1udWxsO2NvbnN0IFJmPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIiB2YWx1ZT0iJHt1KENlPy5uYW1lPz8iIil9Ij48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiIgdmFsdWU9IiR7dShDZT8uZW1haWw/PyIiKX0iPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFza3MiPgogICAgICA8ZGl2IGNsYXNzPSJhc2tzLXQiPkFzayB0aGUgZGVzayBmb3I8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2hpcHMiPiR7SmMubWFwKHQ9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIGFzayIgdHlwZT0iYnV0dG9uIiBkYXRhLWFzaz0iJHt1KHQuaWQpfSIgYXJpYS1wcmVzc2VkPSIkeyhDZT9DZS5yZXF1ZXN0czpYPy5wcmVmZXJlbmNlcz8/W10pLmluY2x1ZGVzKHQuaWQpPyJ0cnVlIjoiZmFsc2UifSI+JHt1KHQubGFiZWwpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgIDxsYWJlbD5BcnJpdmluZyBhdDxpbnB1dCBpZD0iZ3RpbWUiIHR5cGU9InRpbWUiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0iJHt1KENlPy5hcnJpdmluZ0F0Pz8iIil9Ij48L2xhYmVsPgogICAgICAgIDxsYWJlbD5Bbnl0aGluZyBlbHNlPGlucHV0IGlkPSJnbm90ZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJJbiB5b3VyIG93biB3b3JkcyDigJQgb3B0aW9uYWwiIHZhbHVlPSIke3UoQ2U/Lm5vdGVzPz8iIil9Ij48L2xhYmVsPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+VGhlc2UgZ28gdG8gdGhlIGRlc2sgYXMgcmVxdWVzdHMuICR7dSh1dCl9IG1lZXRzIHdoYXQgaXQgY2FuIG9uIHRoZSBkYXk7IG5vbmUgb2YgaXQgaXMgaGVsZC48L2Rpdj4KICAgICAgJHtYP2A8bGFiZWwgY2xhc3M9InJlbWVtYmVyIj48aW5wdXQgaWQ9ImdyZW1lbWJlciIgdHlwZT0iY2hlY2tib3giJHtDZT8ucmVtZW1iZXI/IiBjaGVja2VkIjoiIn0+IFJlbWVtYmVyIHRoZSBiZWQsIGZsb29yIGFuZCByb29tIHJlcXVlc3RzIG9uIG15ICR7dShYLnByb2dyYW1tZT8/Im1lbWJlcnNoaXAiKX0gZm9yIG5leHQgdGltZTwvbGFiZWw+YDoiIn0KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPkhvbGQgdGhlc2Ugcm9vbXM8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PgogIDwvZGl2PmAsVl89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7dSgoZS5taXNzaW5nPz9bXSkuam9pbigiIGFuZCAiKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCxSZighMCksJzxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PiddLmpvaW4oIiIpLEpfPWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5bbmUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3UodC5wcm9ncmFtbWUpfTwvZGl2PgogICAgICAgJHt0Lm5hbWU/YDxkaXYgY2xhc3M9IndoZXJlIj4ke3UodC5uYW1lKX08L2Rpdj5gOic8ZGl2IGNsYXNzPSJ3aGVyZSI+U2lnbmVkIGluPC9kaXY+J30KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiIHN0eWxlPSJmb250LXNpemU6MjBweCI+JHt1KHQudGllcj8ubmFtZSl9PC9kaXY+CiAgICAgICAke3R5cGVvZiB0LnBvaW50cz09Im51bWJlciI/YDxkaXYgY2xhc3M9IndoZW4iPiR7dSh0LnBvaW50cy50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9IHBvaW50czwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj48Yj4ke3UoTWF0aC5yb3VuZCgodC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKSl9JSBvZmY8L2I+PHNwYW4+Um9vbSByYXRlcyBhbmQgdHJpcCB0b3RhbHMgbm93IHNob3cgdGhlICR7dSh0LnRpZXI/Lm5hbWUpfSBtZW1iZXIgcmF0ZS4gTm90aGluZyBpcyBjaGFyZ2VkIGJ5IHNpZ25pbmcgaW4uPC9zcGFuPjwvZGl2PmAsKHQucHJlZmVyZW5jZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICA8Yj5TYXZlZCBmb3IgeW91ciBuZXh0IHN0YXlzPC9iPgogICAgICAgICAgIDxzcGFuPiR7dSh0LnByZWZlcmVuY2VzLm1hcChuPT5KYy5maW5kKG89Pm8uaWQ9PT1uKT8ubGFiZWw/P24pLmpvaW4oIiwgIikpfSAtIHRpY2tlZCBvbiB0aGUgYm9va2luZyBmb3JtLCBhbmQgYXNrZWQgZm9yIG9ubHkgd2hlbiB5b3UgYm9vayB3aXRoIHRoZW0uPC9zcGFuPgogICAgICAgICAgIDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmb3JnZXQtcHJlZnMiPkZvcmdldCB0aGVtPC9idXR0b24+CiAgICAgICAgIDwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24tb3V0Ij5TaWduIG91dDwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxLXz0oKT0+Wyc8ZGl2IGNsYXNzPSJlcnIiPk5vIG1lbWJlcnNoaXAgbWF0Y2hlcyB0aGF0IG51bWJlciBhbmQgc3VybmFtZS4gQ2hlY2sgYm90aCBhcyB0aGV5IGFyZSBwcmludGVkIOKAlCBub3RoaW5nIGVsc2UgaXMgbmVlZGVkLCB0aGlzIGNvbm5lY3RvciBuZXZlciBhc2tzIGZvciBhIHBhc3N3b3JkLjwvZGl2PicsWm8oITApXS5qb2luKCIiKSxabz0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0ic2lnbmluIiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPk1lbWJlcnNoaXAgbnVtYmVyPGlucHV0IGlkPSJtbnVtIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IGlzIHByaW50ZWQiPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5TdXJuYW1lPGlucHV0IGlkPSJtc3VyIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBzdXJuYW1lIG9uIGl0Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1pbiI+U2lnbiBpbjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gcGFzc3dvcmQgaXMgYXNrZWQgZm9yIGFuZCBub25lIGlzIHN0b3JlZC4gU2lnbmluZyBpbiBzaG93cyB0aGUgbWVtYmVyIHJhdGU7IG5vdGhpbmcgaXMgY2hhcmdlZC48L2Rpdj4KICA8L2Rpdj5gLFdfPWU9Pntjb25zdCB0PWUucmVxdWVzdGVkPz9bXTtyZXR1cm4gdC5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkJHtlLmFjY2Vzc2liaWxpdHk/IiBmbGFnIjoiIn0iPgogICAgPGI+UmVxdWVzdGVkLCBub3QgaGVsZDwvYj4KICAgICR7dC5tYXAobj0+YDxzcGFuPiR7dShuKX08L3NwYW4+YCkuam9pbigiIil9CiAgPC9kaXY+YDoiIn0sanU9ZT0+U3RyaW5nKGUuaG9sZFVudGlsPz8iIikuc2xpY2UoMCwxNikucmVwbGFjZSgiVCIsIiAiKSxHXz1lPT57Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuYm9va2luZ3MpJiZlLmJvb2tpbmdzLmxlbmd0aD9lLmJvb2tpbmdzOltlLmJvb2tpbmc/P3t9XSxuPXQubGVuZ3RoPjEsbz0ocixzLGEpPT5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke3Uoci5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7dShyLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7dShLZShyLnN0YXkpKX0gwrcgJHt1KHIuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICAgIDwvZGl2PmAsbj9gPGRpdiBjbGFzcz0ibm90ZSI+SGVsZCB1bnRpbCAke3UoanUocikpfSBVVEMuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibW9uZXktb3V0Ij48c3Bhbj5Ub3RhbCBmb3IgdGhlIHN0YXk8L3NwYW4+PHNwYW4+JHt1KHMpfTwvc3Bhbj48L2Rpdj5gLFdfKGEpLGA8ZGl2IGNsYXNzPSJyb3dzIj4keyhyLnF1b3RlPy5saW5lcz8/W10pLm1hcChZXykuam9pbigiIil9PC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7dShyLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7dShyLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsICR7dShyLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIik7cmV0dXJuW25lKCksbj9gPGRpdiBjbGFzcz0ibm90ZSI+JHt0Lmxlbmd0aH0gYm9va2luZ3MsIG9uZSBmb3IgZWFjaCBzdGF5LiBFYWNoIGhvdGVsIGhvbGRzIGl0cyBvd24gbmlnaHRzIHVuZGVyIGl0cyBvd24gY29kZSwgYW5kIGVhY2ggaXMgY2hhbmdlZCBvciBjYW5jZWxsZWQgb24gaXRzIG93bi48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPiR7bj8iVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsIHRoZSB0aW1lIHVuZGVyIGVhY2ggY29kZS4iOmBUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgJHt1KGp1KHRbMF0pKX0gVVRDLmB9IEEgY2FyZCBpcyBwcmVzZW50ZWQgYXQgY2hlY2staW4sIG5vdCBoZXJlLjwvc3Bhbj4KICAgICA8L2Rpdj5gLC4uLnQubWFwKHI9Pm4/byhyLFN0cmluZyhyLnRvdGFsPz8iIikscik6byhyLFN0cmluZyhlLnRvdGFsPz8iIiksZSkpLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICR7bj8iIjpgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHt1KHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke3UodFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+YH0KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sUV89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPiR7dShlLmRldGFpbD8/ZS53aHk/PyJUaGF0IGNvdWxkIG5vdCBiZSBkb25lLiIpfTwvZGl2PmAsdG4+MD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiPlZpZXcgdGhlIHRyaXA8L2J1dHRvbj48L2Rpdj4nOiIiXS5qb2luKCIiKSxZXz1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3UoZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7dShlLmtpbmQ9PT0icm9vbSI/S2UoZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHt1KGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAsWF89e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIn0sZWs9ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0cz8ua2luZHM/P1tdO2lmKCF0Lmxlbmd0aClyZXR1cm4iIjtjb25zdCBuPXQubWFwKG89PkpjLmZpbmQocj0+ci5pZD09PW8pPy5sYWJlbD8/byk7cmV0dXJuYDxkaXYgY2xhc3M9Im1ldGEgYXNrZWQtbGluZSI+QXNrZWQgZm9yICR7dShuLmpvaW4oIiwgIikudG9Mb3dlckNhc2UoKSl9PC9kaXY+YH0sdGs9ZT0+e2NvbnN0IHQ9ZS5ib29raW5ncz8/W10sbj1lLm5vdEZvdW5kP2A8ZGl2IGNsYXNzPSJlcnIiPiR7dShlLnRvb01hbnk/ZS5ub3RGb3VuZExpbmU6YE5vIGJvb2tpbmcgbWF0Y2hlcyAke2Uubm90Rm91bmR9IHdpdGggdGhhdCBlbWFpbC4gQm90aCBoYXZlIHRvIGJlIGFzIHRoZXkgYXJlIG9uIHRoZSBjb25maXJtYXRpb24uYCl9PC9kaXY+YDoiIjtyZXR1cm4gZS5ub3RGb3VuZCYmdC5sZW5ndGg9PT0wP2Ake259CiAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kLWJvb2tpbmciPlRyeSBhZ2FpbjwvYnV0dG9uPjwvZGl2PmA6dC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W25lKCksbixgPGRpdiBjbGFzcz0icm93cyI+JHt0Lm1hcChvPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3Uoby5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHt1KG8uY29uZmlybWF0aW9uQ29kZSl9IMK3ICR7dShLZShvLnN0YXkpKX08L2Rpdj4KICAgICAgICAgICR7ZWsobyl9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJiYWRnZXMiPjxzcGFuIGNsYXNzPSJiYWRnZSAke1hfW1N0cmluZyhvLnN0YXR1cyldPz8iIn0iPiR7dShvLnN0YXR1cyl9PC9zcGFuPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke3Uoby5xdW90ZT8udG90YWw/PyIiKX08L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7by5zdGF0dXM9PT0icmVxdWVzdGVkInx8by5zdGF0dXM9PT0iY29uZmlybWVkIj9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHt1KG8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke3Uoby5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbDwvYnV0dG9uPmA6IiJ9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpfSxNdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2FuY2VsbGVkIixuPWUuYm9va2luZz8/e307cmV0dXJuW2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2FuY2VsbGVkIjoiQ2FuY2VsbGluZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke3Uobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHt0PyJUaGUgaG90ZWwgY2hhcmdlcyI6IkNhbmNlbGxpbmcgd291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7dShlLmZlZSl9PC9zcGFuPjwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9Im5vdGUiPiR7dShlLnJ1bGUpfTwvZGl2PmAsdD8iIjplLmNhbmNlbGxhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+S2VlcCBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gZGFuZ2VyIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jYW5jZWw9IiR7dShuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoZSBib29raW5nPC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDonPGRpdiBjbGFzcz0ibm90ZSI+VGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGNhbmNlbCBvbiB0aGlzIGJvb2tpbmcuPC9kaXY+J10uam9pbigiIil9LHF1PWU9Pntjb25zdCB0PWUudmlldz09PSJjaGFuZ2VkIixuPWUuYm9va2luZz8/e30sbz1lLmZyb20/P3t9LHI9ZS50byxzPSEhciYmKHIuY2hlY2tJbiE9PW8uY2hlY2tJbnx8ci5jaGVja091dCE9PW8uY2hlY2tPdXR8fE51bWJlcihyLnJvb21zKSE9PU51bWJlcihvLnJvb21zKXx8ci5yb29tTmFtZSE9PW8ucm9vbU5hbWUpLGE9KGksYyxsKT0+Yz9gPGRpdiBjbGFzcz0ibGVnJHtsPyIgd2FzIjoiIn0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2siPiR7dShpKX08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWd2Ij4ke3UoYy5jaGVja0luKX0g4oaSICR7dShjLmNoZWNrT3V0KX0gwrcgJHt1KGMubmlnaHRzKX0gJHtOdW1iZXIoYy5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ20iPiR7dShjLnJvb21OYW1lKX0ke051bWJlcihjLnJvb21zKT4xP2AgwrcgJHt1KGMucm9vbXMpfSByb29tc2A6IiJ9IMK3ICR7dShjLnRvdGFsKX08L2Rpdj4KICAgICAgICAgPC9kaXY+YDoiIjtyZXR1cm5bbmUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke3Uobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke3UoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7YSh0PyJXYXMiOiJOb3ciLGUuZnJvbSxzKX0ke2EodD8iTm93IjoiV291bGQgYmUiLGUudG8sITEpfTwvZGl2PmAsZS5hZGRPbj9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIj48c3Bhbj4ke3UoZS5hZGRPbi5uYW1lKX08L3NwYW4+PHNwYW4+JHt1KGUuYWRkT24uZnJvbSl9IOKGkiAke3UoZS5hZGRPbi50byl9PC9zcGFuPjwvZGl2PjwvZGl2PmA6IiIsZS5kaWZmZXJlbmNlP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7ZS5yZWZ1bmREdWU/dD8iVGhlIGRlc2sgb3dlcyI6IldvdWxkIGNvbWUgYmFjayI6dD8iVGhlIGRlc2sgYXNrcyBmb3IiOiJXb3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHt1KGUuZGlmZmVyZW5jZSl9PC9zcGFuPjwvZGl2PjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPiR7dShlLnJ1bGUpfTwvZGl2PmAsdD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPjwvZGl2Pic6ZS5jaGFuZ2VhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TGVhdmUgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jaGFuZ2U9IiR7dShuLmNvbmZpcm1hdGlvbkNvZGUpfSI+JHtlLmFkZE9uJiZlLmZyb20/LmNoZWNrSW49PT1lLnRvPy5jaGVja0luJiZlLmZyb20/LmNoZWNrT3V0PT09ZS50bz8uY2hlY2tPdXQ/IlVwZGF0ZSB0aGUgYm9va2luZyI6Ik1vdmUgdGhlIGJvb2tpbmcifTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpfSxocz1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUudmlldz09PSJwb2xpY3kiP2A8aDQ+JHt1KGUudGl0bGUpfTwvaDQ+JHt1KGUudGV4dCl9YDooZS50b3BpY3M/P1tdKS5tYXAobz0+YDxoND4ke3Uoby50aXRsZSl9PC9oND4ke3Uoby50ZXh0KX1gKS5qb2luKCIiKTtyZXR1cm5bYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UodC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IHRoZSBob3RlbCBwdWJsaXNoZXM8L2Rpdj48L2Rpdj5gLGUudmlldz09PSJwb2xpY3ktbWlzc2luZyI/YDxkaXYgY2xhc3M9ImVtcHR5Ij4ke3UodC5uYW1lKX0gZG9lcyBub3QgcHVibGlzaCBhbnl0aGluZyBhYm91dCB0aGF0IGhlcmUuPC9kaXY+YDpgPGRpdiBjbGFzcz0icHJvc2UiPiR7bn08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke3UodC5pZCl9Ij5CYWNrIHRvICR7dSh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxuaz1lPT57Y29uc3QgdD1lLmNvbHVtbnM/P1tdLG49ZS5yb3dMYWJlbHM/P1tdLG89dC5zb21lKHM9PnMucmVjb21tZW5kZWQpLHI9cz0+YAogICAgPGRpdiBjbGFzcz0iY21wLWhlYWQke3MucmVjb21tZW5kZWQ/IiBwaWNrIjoiIn0ke28/IiBtYXJrZWQiOiIifSI+CiAgICAgICR7bz9gPGRpdiBjbGFzcz0icGlja21hcmske3MucmVjb21tZW5kZWQ/IiI6IiBub25lIn0iPiR7cy5yZWNvbW1lbmRlZD8iUmVjb21tZW5kZWQiOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxidXR0b24gY2xhc3M9InQtc2hvdCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke3Uocy5ob3RlbC5pZCl9IiBzdHlsZT0iJHtVdChTdHJpbmcocy5ob3RlbC5pZCkpfSI+CiAgICAgICAgJHtzLmhvdGVsLmltYWdlVXJsP2A8aW1nIHNyYz0iJHt1KHMuaG90ZWwuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHt1KEZ0KFN0cmluZyhzLmhvdGVsLm5hbWUpKSl9PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sLW5hbWUiPiR7dShzLmhvdGVsLm5hbWUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7cy5wcmljZT9gJHt1KHMucHJpY2Uuc3RheVRvdGFsKX08c21hbGw+IHRvdGFsIMK3ICR7dShzLnByaWNlLm5pZ2h0bHkpfS9uaWdodDwvc21hbGw+YDpzLmZyb20/YDxzbWFsbD5Gcm9tIDwvc21hbGw+JHt1KHMuZnJvbSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ3aHkke3MuYmVzdEZvcj8iIjoiIG5vbmUifSI+JHtzLmJlc3RGb3I/dShzLmJlc3RGb3IpOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHMucHJvcz8/W10pLm1hcChhPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke3UoYSl9PC9zcGFuPjwvZGl2PmApLC4uLihzLmNvbnM/P1tdKS5tYXAoYT0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke3UoYSl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW25lKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7dShLZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7dShlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofTstLWhlYWQtcm93czoke28/Njo1fSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAocikuam9pbigiIil9CiAgICAgICAke24ubWFwKChzLGEpPT5gPGRpdiBjbGFzcz0iayI+JHt1KHMpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke2ElMj8iIGFsdCI6IiJ9Ij4ke3UoaS5yb3dzPy5bYV0/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChzPT5gJHt1KHMubmFtZSl9OiAke3Uocy53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHt1KGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LG9rPWU9Pntjb25zdCB0PWUuZGF5cz8/W10sbj1pPT5gPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtpLmJvb2tlZHx8aS5pblRyaXA/InllcyI6Im5vIn0iPiR7aS5ib29rZWQ/YEJvb2tlZCDCtyAke3UoaS5ib29rZWQpfWA6aS5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+YCxvPWk9PmAgZGF0YS1ob3RlbD0iJHt1KGkuaWQpfSIgcm9sZT0iYnV0dG9uIiB0YWJpbmRleD0iMCIke2kuY2hlY2tJbj9gIGRhdGEtY2k9IiR7dShpLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHt1KGkuY2hlY2tPdXQpfSJgOiIifWAscj1pPT5OdW1iZXIoaS5uaWdodD8/MSk+MT9gPGRpdiBjbGFzcz0icGxhbi1uaWdodCIke28oaSl9PgogICAgICAgICAgIDxzcGFuPk5pZ2h0ICR7dShpLm5pZ2h0KX0gb2YgJHt1KGkubmlnaHRzKX0gwrcgJHt1KGkubmFtZSl9PC9zcGFuPiR7bihpKX0KICAgICAgICAgPC9kaXY+YDpgPGRpdiBjbGFzcz0icGxhbi1zdGF5IiR7byhpKX0+CiAgICAgICAgICAgPHNwYW4gY2xhc3M9InBzLXNob3QiIHN0eWxlPSIke1V0KFN0cmluZyhpLmlkKSl9Ij4ke2kuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke3UoaS5pbWFnZVVybCl9IiBhbHQ9IiI+YDpgPHNwYW4gY2xhc3M9InQtbWFyayI+JHt1KEZ0KFN0cmluZyhpLm5hbWUpKSl9PC9zcGFuPmB9PC9zcGFuPgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcy1ib2R5Ij4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4ke3UoaS5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YSI+JHt1KFtpLmRldGFpbCxpLm5pZ2h0cz9gJHtpLm5pZ2h0c30gJHtpLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICR7aS5wcmljZT9gPHNwYW4gY2xhc3M9InBzLXByaWNlIj4ke3UoaS5wcmljZSl9PC9zcGFuPmA6IiJ9CiAgICAgICAgICAgICAke24oaSl9CiAgICAgICAgICAgPC9zcGFuPgogICAgICAgICA8L2Rpdj5gLHM9aT0+YAogICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3UoaS5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3UoW2kuZGV0YWlsLGkucHJpY2VdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHtuKGkpfQogICAgPC9kaXY+YCxhPWk9PihpLnBsYW4/P1tdKS5sZW5ndGg/YDxvbCBjbGFzcz0ibW9tZW50cyI+JHtpLnBsYW4ubWFwKGM9PmA8bGk+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndoZW4iPiR7dShjLnRpbWU/PyIiKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndoYXQiPjxiPiR7dShjLndoYXQpfTwvYj4ke2Mubm90ZT9gPHNtYWxsPiR7dShjLm5vdGUpfTwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDwvbGk+YCkuam9pbigiIil9PC9vbD5gOiIiO3JldHVybltuZSgpLGA8ZGl2PgogICAgICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke3UoZS50aXRsZSl9PC9kaXY+CiAgICAgICAke2Uuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHt1KEtlKGUuc3RheSkpfTwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0iZ2FwIj48Yj4ke3UoTnVtYmVyKGUuaW5UcmlwPz8wKStOdW1iZXIoZS5ib29rZWQ/PzApKX0vJHt1KGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7dShlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChpLGMpPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke2MrMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7dShpLmxhYmVsKX0ke2kuZGF0ZT9gPHNtYWxsPiDCtyAke3UocmsoU3RyaW5nKGkuZGF0ZSkpKX08L3NtYWxsPmA6IiJ9PC9kaXY+CiAgICAgICAgICAke2kubm90ZT9gPGRpdiBjbGFzcz0iZGF5bm90ZSI+JHt1KGkubm90ZSl9PC9kaXY+YDoiIn0KICAgICAgICAgICR7YShpKX0KICAgICAgICAgICR7KGkuaXRlbXM/P1tdKS5tYXAobD0+bC5raW5kPT09ImhvdGVsIj9yKGwpOnMobCkpLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKGk9PmAke3UoaS5uYW1lKX06ICR7dShpLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxyaz1lPT5uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKS50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7d2Vla2RheToic2hvcnQiLGRheToibnVtZXJpYyIsbW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pLFBlPShlLHQ9ITEpPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47Y29uc3Qgbj10JiZlLnZpZXc9PT0ibWVtYmVyIiYmWD97Li4uZSxtZW1iZXI6WH06ZTtuLnRvb2xOYW1lcyYmKHZmPW4udG9vbE5hbWVzKSxuLmJyYW5kJiYodXQ9U3RyaW5nKG4uYnJhbmQpKSxuLmxvZ29VcmwmJihwcz1TdHJpbmcobi5sb2dvVXJsKSksdHlwZW9mIG4uZGVtbz09ImJvb2xlYW4iJiYoeWY9bi5kZW1vKSxuLmRlbW9Ob3RlJiYoX2Y9U3RyaW5nKG4uZGVtb05vdGUpKSx0eXBlb2Ygbi5yb29tc193YW50ZWQ9PSJudW1iZXIiP1E9bi5yb29tc193YW50ZWQ6KG4udmlldz09PSJob3RlbHMifHxuLnZpZXc9PT0iZGVzdGluYXRpb25zInx8bi52aWV3PT09Im5vLWhvdGVscyIpJiZuLnN0YXk/LmNoZWNrSW4mJiFkdCYmKFE9TWF0aC5tYXgoMSxOdW1iZXIobi5hc2s/LnJvb21zPz8xKXx8MSkpLHR8fChuLnZpZXc9PT0ibWVtYmVyIiYmbi5tZW1iZXI/LnRpZXI/Lm5hbWU/WD1uLm1lbWJlcjpuLm1lbWJlcj8udGllcj8ubmFtZSYmKFg9WD8ucHJvZ3JhbW1lPT09bi5tZW1iZXIucHJvZ3JhbW1lJiZYPy50aWVyPy5uYW1lPT09bi5tZW1iZXIudGllci5uYW1lP3suLi5YLC4uLm4ubWVtYmVyLHByZWZlcmVuY2VzOm4ubWVtYmVyLnByZWZlcmVuY2VzfTpuLm1lbWJlciksKG4udmlldz09PSJzaWduZWQtb3V0Inx8bi5zaWduZWRJbj09PSExKSYmKFg9bnVsbCkpLG4uc3RheT8uY2hlY2tJbiYmIVd0JiYhZHQmJih6PXtjaGVja0luOm4uc3RheS5jaGVja0luLGNoZWNrT3V0Om4uc3RheS5jaGVja091dCxndWVzdHM6bi5zdGF5Lmd1ZXN0cz8/Mn0pLCFIYyYmKG4udmlldz09PSJ0cmlwInx8bi52aWV3PT09Im5lZWRzLWRhdGVzIikmJih5dD1uLmxpbmVzPz9bXSksKG4udmlldz09PSJib29raW5nInx8bi52aWV3PT09ImVtcHR5LXRyaXAiKSYmKHl0PVtdLHRuPTApLERlPVN0cmluZyhuLnZpZXc/PyIiKSxrZigpO2NvbnN0IG89cGUoImJyYW5kIik7cHM/KG8uc3JjPXBzLG8uaGlkZGVuPSExLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KG8uaGlkZGVuPSEwLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMSxwZSgidGl0bGUiKS50ZXh0Q29udGVudD11dHx8IkhvdGVscyIpLHBlKCJzdWIiKS50ZXh0Q29udGVudD1hayhuKSx1aygpLGNrKCk7Y29uc3Qgcj17aG90ZWxzOk1fLGRlc3RpbmF0aW9uczpDXywibm8taG90ZWxzIjpxXyxob3RlbDpadSwibm8tcm9vbXMiOlp1LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOlVfLHRyaXA6SF8sIm5lZWRzLWRhdGVzIjppayxib29raW5nOkdfLCJuZWVkcy1ndWVzdCI6Vl8sbWVtYmVyOkpfLCJtZW1iZXItbm90LWZvdW5kIjpLXywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczp0aywiY2FuY2VsbGF0aW9uLXByZXZpZXciOk11LGNhbmNlbGxlZDpNdSwiY2hhbmdlLXByZXZpZXciOnF1LGNoYW5nZWQ6cXUsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOm5rLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpvaywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpocyxwb2xpY2llczpocywicG9saWN5LW1pc3NpbmciOmhzLGVycm9yOlFfLCJmaW5kLWJvb2tpbmciOigpPT5bbmUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+QSBib29raW5nIG1hZGUgaW4gYW5vdGhlciBjb252ZXJzYXRpb24gaXMgZm91bmQgd2l0aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCBpdCB3YXMgbWFkZSB3aXRoIC0gYm90aCwgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb3JtIj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgICAgICAgPGxhYmVsPkNvbmZpcm1hdGlvbiBjb2RlPGlucHV0IGlkPSJmY29kZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJTTC3igKYiPjwvbGFiZWw+CiAgICAgICAgICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImZtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgb25lIG9uIHRoZSBib29raW5nIj48L2xhYmVsPgogICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJsb29rdXAtYm9va2luZyI+RmluZCBpdDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gXS5qb2luKCIiKSwibm8tbWVtYmVyIjooKT0+YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob2JvZHkgaXMgc2lnbmVkIGluLCBzbyB0aGVyZSBpcyBub3RoaW5nIHNhdmVkIHRvIGZvcmdldC48L2Rpdj4ke1pvKCEwKX1gLCJtZW1iZXItc2lnbi1pbiI6KCk9PltuZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5TaWduIGluIHdpdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBwcmludGVkIG9uIHRoZSBjYXJkIHRvIHNlZSB0aGUgbWVtYmVyIHJhdGUgb24gZXZlcnkgcHJpY2UgaGVyZS48L2Rpdj4nLFpvKCEwKV0uam9pbigiIil9OyhEZT09PSJob3RlbCJ8fERlPT09Im5vLXJvb21zInx8RGU9PT0ibmVlZHMtZGF0ZXMiKSYmbi5ob3RlbD8uaWQ/KEp0PVN0cmluZyhuLmhvdGVsLmlkKSxuLm5lZWRzRGF0ZXMmJnNldFRpbWVvdXQoKCk9PmlzKDAsIW9zKSwwKSk6KEp0PSIiLEtjKCkpLE09bjtjb25zdCBzPXJbRGVdO3BlKCJjb250ZW50IikuaW5uZXJIVE1MPShzP3Mobik6YDxkaXYgY2xhc3M9ImVyciI+JHt1KG4uZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtuLmRldGFpbD9gPGJyPiR7dShuLmRldGFpbCl9YDoiIn08L2Rpdj5gKStzayhuKSxEZT09PSJob3RlbHMiJiYhcm4oKSYmKFZjPUJjKCksc3MoKSE9PVJvJiZQZShuLHQpKX0sc2s9ZT0+e2NvbnN0IHQ9ISFFZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2Usbj0oZS5zdWdnZXN0aW9ucz8/W10pLm1hcCgobyxyKT0+bz8uYXNrP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHt1KG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7dShvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LGlrPWU9PltuZSgpLGUuaG90ZWw/QWYoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHt1KGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLHpmKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSxhaz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/S2UoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixjaz0oKT0+e2NvbnN0IGU9cGUoIm1lbWJlcmNoaXAiKTtYPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1gudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoWC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixbWC5uYW1lLFgucHJvZ3JhbW1lXS5maWx0ZXIodD0+dHlwZW9mIHQ9PSJzdHJpbmciJiZ0KS5qb2luKCIgwrcgIikpKTooZS5oaWRkZW49RGU9PT0ibWVtYmVyLW5vdC1mb3VuZCIsZS50ZXh0Q29udGVudD0iTWVtYmVyIHNpZ24gaW4iLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsImFzay1zaWduLWluIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpfSx1az0oKT0+e2NvbnN0IGU9cGUoImhlYWR0cmlwIiksdD1IYz90bjp0bnx8eXQubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxEZT09PSJ0cmlwIixwZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSxsaz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO3o9e2NoZWNrSW46ZT8udmFsdWU/P3ouY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/ei5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz96Lmd1ZXN0cyl8fDJ9fSxrbz0oZT17fSk9PnouY2hlY2tJbiYmei5jaGVja091dD97Y2hlY2tJbjp6LmNoZWNrSW4sY2hlY2tPdXQ6ei5jaGVja091dCxndWVzdHM6ei5ndWVzdHMsLi4uZX06ZTtsZXQgUHMsV3Q9ITE7Y29uc3QgS2M9KCk9PntjbGVhclRpbWVvdXQoUHMpLFd0PSExfSxpcz0oZT0wLHQ9ITEpPT57SnQmJihjbGVhclRpbWVvdXQoUHMpLFd0PSEwLFBzPXNldFRpbWVvdXQoKCk9PntpZighSnQpe1d0PSExO3JldHVybn1pZihMdCl7aXMoMTUwLHQpO3JldHVybn1XdD0hMSxxKCJnZXRIb3RlbCIse2hvdGVsOkp0LHJvb21zOlEsLi4ua28oKX0sdD97bm90ZTp6X306e30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBuaWdodHMuIikpfSxlKSl9LE49ZT0+e3BlKCJjb250ZW50IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgPGRpdiBjbGFzcz0iZXJyIj4ke3UoZSl9PC9kaXY+YCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlPT57Y29uc3QgdD1lLnRhcmdldD8uY2xvc2VzdCgiW2RhdGEtaG90ZWxdLFtkYXRhLWFjdF0sW2RhdGEtcG9saWN5XSxbZGF0YS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2FuY2VsXSxbZGF0YS1jb25maXJtLWNoYW5nZV0sW2RhdGEtZXh0cmFzXSxbZGF0YS1yb29tcy1uXSxbZGF0YS1hc2tdLFtkYXRhLWJvb2tpbmctZXh0cmFzXSxbZGF0YS1ib29raW5nLWV4dHJhXSxbZGF0YS1zdWdnZXN0XSxbZGF0YS1wbGFjZV0sW2RhdGEtcGxhY2UtYWxsXSxbZGF0YS1zb3J0XSxbZGF0YS1saXN0LXJvb21zXSxbZGF0YS1maWx0ZXJdLFtkYXRhLXBhbmVsXSIpO2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFzayIpO2lmKG4hPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJ0cnVlIjt0LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIixTdHJpbmcoaykpO2NvbnN0IEk9Ql9bbl07ayYmSSYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmFza1tkYXRhLWFzaz0iJHtJfSJdYCk/LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSxaZigpO3JldHVybn1jb25zdCBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWxpc3Qtcm9vbXMiKTtpZihvIT09bnVsbCl7UT1NYXRoLm1pbihFdSxNYXRoLm1heCgxLFErTnVtYmVyKG8pKSk7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibHJuIik7ayYmKGsudGV4dENvbnRlbnQ9U3RyaW5nKFEpKSxObyg0NTApO3JldHVybn1jb25zdCByPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJvb21zLW4iKTtpZihyIT09bnVsbCl7bGsoKSxRPU1hdGgubWluKEV1LE1hdGgubWF4KDEsUStOdW1iZXIocikpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO2smJihrLnRleHRDb250ZW50PVN0cmluZyhRKSk7Y29uc3QgST1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7SSYmKEkudGV4dENvbnRlbnQ9cnMoKSksaXMoNDUwKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtcm9vbSIpO2lmKHMhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLEk9dC5jbGFzc0xpc3QuY29udGFpbnMoImFkZCIpJiYhdC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT9ROk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLFk9dC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT97Y2hlY2tJbjp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpPz8iIixjaGVja091dDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpPz8iIixndWVzdHM6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWd1Iik/PzIpfTprbygpO3EoImFkZFRvVHJpcCIse2hvdGVsOmsscm9vbTpzLHJvb21zOkksLi4uWX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihhIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1kYXkiKTtxKCJhZGRUb1RyaXAiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixleHRyYTphLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLC4uLms/e2RheTprfTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZSIpO2lmKGkhPT1udWxsKXtjb25zdCBrPU0/LmFzaz8uc29ydCxJPU0/LnZpZXc9PT0iaG90ZWxzIj9NPy5hc2s/LnF1ZXJ5OnZvaWQgMDt4cygpO2NvbnN0IFk9TT8udmlldz09PSJkZXN0aW5hdGlvbnMifHwhIU0/LnN0YXk/LmNoZWNrSW47cSgibGlzdEhvdGVscyIsey4uLmk/e2NpdHk6aX06e30sLi4uaz97c29ydDprfTp7fSwuLi5pJiZJP3txdWVyeTpJfTp7fSwuLi5NPy52aWV3PT09ImhvdGVscyI/X28oTT8uYXNrKTp7fSwuLi5ZP0t0KCk6e319KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgYz10LmdldEF0dHJpYnV0ZSgiZGF0YS1maWx0ZXIiKTtpZihjIT09bnVsbCl7Y29uc3Qgaz1NPy5hc2s/P3t9LEk9X28oayk7aWYoYy5zdGFydHNXaXRoKCJicmFuZDoiKSl7Y29uc3QgcmU9Yy5zbGljZSg2KTtJLmJyYW5kPUkuYnJhbmQ9PT1yZT92b2lkIDA6cmV9ZWxzZSBpZihjLnN0YXJ0c1dpdGgoImZhY2lsaXR5OiIpKXtjb25zdCByZT1jLnNsaWNlKDkpLHhlPUkuZmFjaWxpdGllcz8/W107SS5mYWNpbGl0aWVzPXhlLmluY2x1ZGVzKHJlKT94ZS5maWx0ZXIoaXQ9Pml0IT09cmUpOlsuLi54ZSxyZV19ZWxzZShjPT09ImZyZWVDYW5jZWxsYXRpb24ifHxjPT09ImJyZWFrZmFzdCIpJiYoSVtjXT0hSVtjXSk7Y29uc3QgWT1fbyhJKTtxKCJsaXN0SG90ZWxzIix7Li4uUnUoayksLi4uWX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgZmlsdGVyIHRoZSBsaXN0LiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1zb3J0Iik7aWYobCE9PW51bGwpe1RlPXhmO2NvbnN0e3NvcnQ6aywuLi5JfT1NPy5hc2s/P3t9O3EoImxpc3RIb3RlbHMiLHsuLi5JLC4uLmwhPT0iZ3JvdXAiP3tzb3J0Omx9Ont9fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCByZW9yZGVyIHRoZSBsaXN0LiIpKTtyZXR1cm59Y29uc3QgZD10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZS1hbGwiKTtpZihkIT09bnVsbCl7cSgibGlzdEhvdGVscyIse2NpdHk6ZCxhbGw6ITAsLi4uS3QoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCBtPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmFzIik7aWYobSE9PW51bGwpe3EoImxpc3RFeHRyYXMiLHtib29raW5nOm19KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBiPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmEiKTtpZihiIT09bnVsbCl7cSgicHJldmlld0NoYW5nZSIse2Jvb2tpbmc6dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZyIpPz8iIixleHRyYTpiLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCB3b3JrIG91dCB0aGF0IGNoYW5nZS4iKSk7cmV0dXJufWNvbnN0IHY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZXh0cmFzIik7aWYodiE9PW51bGwpe3EoImxpc3RFeHRyYXMiLHtob3RlbDp2LC4uLmtvKCl9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBfPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBvbGljeSIpO2lmKF8hPT1udWxsKXtxKCJwb2xpY2llcyIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHRvcGljOl99KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhhdCBwb2xpY3kuIikpO3JldHVybn1jb25zdCB3PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNhbmNlbCIpO2lmKHchPT1udWxsKXtxKCJwcmV2aWV3Q2FuY2VsbGF0aW9uIix7Ym9va2luZzp3fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCB3b3JrIG91dCB0aGUgZmVlLiIpKTtyZXR1cm59Y29uc3QgJD10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNhbmNlbCIpO2lmKCQhPT1udWxsKXtxKCJjYW5jZWxCb29raW5nIix7Ym9va2luZzokLGNvbmZpcm1lZDohMH0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2FuY2VsIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IFo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jaGFuZ2UiKTtpZihaIT09bnVsbCl7Y29uc3Qgaz1NPy50bz8/e30sST1NPy5mcm9tPz97fSxZPU0/LmFkZE9uLHJlPWsuY2hlY2tJbiYmKGsuY2hlY2tJbiE9PUkuY2hlY2tJbnx8ay5jaGVja091dCE9PUkuY2hlY2tPdXQpO3EoImNoYW5nZUJvb2tpbmciLHtib29raW5nOlosY29uZmlybWVkOiEwLC4uLnJlP3tjaGVja0luOmsuY2hlY2tJbixjaGVja091dDprLmNoZWNrT3V0fTp7fSwuLi5ZPy5pZD97ZXh0cmE6WS5pZCxxdWFudGl0eTpOdW1iZXIoWS50byl9Ont9LC4uLmsucm9vbXMhPT12b2lkIDAmJk51bWJlcihrLnJvb21zKSE9PU51bWJlcihJLnJvb21zKT97cm9vbXM6TnVtYmVyKGsucm9vbXMpfTp7fSwuLi5rLnJvb21OYW1lJiZrLnJvb21OYW1lIT09SS5yb29tTmFtZT97cm9vbTprLnJvb21OYW1lfTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2hhbmdlIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IFQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWN0Iik7aWYoVD09PSJiYWNrIil7RHUoKTtyZXR1cm59Y29uc3QgSz1UPT09ImJvb2tpbmdzIj8iYm9va2luZ3MiOnQuaGFzQXR0cmlidXRlKCJkYXRhLWhvdGVsIikmJiF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP2Bob3RlbDoke3QuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIil9YDoiIjtpZihLJiZoZS5sZW5ndGgmJmVuKGhlLmF0KC0xKT8ucGF5bG9hZCk9PT1LKXtEdSgpO3JldHVybn1pZihUPT09Im1vcmUtcGxhY2VzIil7Zm9yKGNvbnN0IGsgb2YodC5jbG9zZXN0KCIucGxhY2VzIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuY2hpcC5wbGFjZVtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5yZW1vdmUoKTtyZXR1cm59Y29uc3Qgb2U9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKTtpZihvZSE9PW51bGwpe1RlPVRlPT09b2U/IiI6b2U7Zm9yKGNvbnN0IGsgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcGFuZWwtYm9keV0iKSlrLmhpZGRlbj1rLmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbC1ib2R5IikhPT1UZTtmb3IoY29uc3QgayBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbF0iKSlrLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKGsuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsIik9PT1UZSkpO3JldHVybn1pZihUPT09ImNsZWFyLWZpbHRlcnMiKXtxKCJsaXN0SG90ZWxzIixSdShNPy5hc2spKS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGNsZWFyIHRoZSBmaWx0ZXJzLiIpKTtyZXR1cm59aWYoVD09PSJhbGwtaG90ZWxzIil7eHMoKSxxKCJsaXN0SG90ZWxzIix7YWxsOiEwLC4uLkt0KCl9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKFQ9PT0icHJpY2UtbGlzdCIpe05vKDApO3JldHVybn1pZihUPT09ImZpbmQtYm9va2luZyIpe2NvbnN0IGs9e3ZpZXc6ImZpbmQtYm9va2luZyJ9O3lvKGspLFBlKGspLFFlKCksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LmZvY3VzKCk7cmV0dXJufWlmKFQ9PT0ibG9va3VwLWJvb2tpbmciKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy52YWx1ZS50cmltKCk/PyIiLEk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCFJLmluY2x1ZGVzKCJAIikpe04oIkJvdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgdGhlIGJvb2tpbmcgd2FzIG1hZGUgd2l0aCwgcGxlYXNlLiIpO3JldHVybn1xKCJsaXN0Qm9va2luZ3MiLHtib29raW5nOmssZW1haWw6SX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9vayB0aGF0IHVwLiIpKTtyZXR1cm59aWYoVD09PSJmaW5kIil7TmYoKTtyZXR1cm59aWYoVD09PSJwYWdlLW5leHQifHxUPT09InBhZ2UtcHJldiIpe2NvbnN0IGs9TTtpZigha3x8ay52aWV3IT09ImhvdGVscyIpcmV0dXJuO2NvbnN0IEk9c3MoKSxZPU51bWJlcihrLm9mZnNldD8/MCkscmU9TWF0aC5taW4oSSwoay5ob3RlbHM/P1tdKS5sZW5ndGgpO3EoImxpc3RIb3RlbHMiLHsuLi5rLmFzaz8/e30sb2Zmc2V0OlQ9PT0icGFnZS1uZXh0Ij9ZK3JlOk1hdGgubWF4KDAsWS1JKSxsaW1pdDpJfSkudGhlbihRZSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWlmKFQ9PT0iZnVsbHNjcmVlbiIpe0VlLnJlcXVlc3REaXNwbGF5TW9kZSh7bW9kZToiZnVsbHNjcmVlbiJ9KS50aGVuKGs9Pntvbj1TdHJpbmcoaz8ubW9kZT8/b24pO2NvbnN0IEk9TTtpZighSSlyZXR1cm47Y29uc3QgWT1OdW1iZXIoSS50b3RhbD8/MCk7cm4oKSYmSS52aWV3PT09ImhvdGVscyImJihOdW1iZXIoSS5vZmZzZXQ/PzApPjB8fChJLmhvdGVscz8/W10pLmxlbmd0aDxNYXRoLm1pbigxMixZKSk/cSgibGlzdEhvdGVscyIsey4uLkkuYXNrPz97fSxsaW1pdDoxMn0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTpQZShJKX0pLmNhdGNoKCgpPT5OKCJUaGlzIGFwcCBjYW5ub3Qgb3BlbiBmdWxsIHNjcmVlbiBoZXJlLiIpKTtyZXR1cm59aWYoVD09PSJtb3JlLWhvdGVscyIpe2NvbnN0IGs9TTtpZigha3x8ay52aWV3IT09ImhvdGVscyIpcmV0dXJuO3EoImxpc3RIb3RlbHMiLHsuLi5rLmFzaz8/e30sb2Zmc2V0Ok51bWJlcihrLm9mZnNldD8/MCkrKGsuaG90ZWxzPz9bXSkubGVuZ3RoLGxpbWl0OjEyfSx7Zm9sZDpJPT5JPy52aWV3PT09ImhvdGVscyI/ey4uLkksaG90ZWxzOlsuLi5rLmhvdGVscz8/W10sLi4uSS5ob3RlbHM/P1tdXSxzaG93bjooay5ob3RlbHM/P1tdKS5sZW5ndGgrKEkuaG90ZWxzPz9bXSkubGVuZ3RoLG9mZnNldDpOdW1iZXIoay5vZmZzZXQ/PzApLHBsYWNlczprLnBsYWNlcywuLi5rLndpZGVuZWQ/e3dpZGVuZWQ6ay53aWRlbmVkfTp7fX06SX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCBtb3JlIGhvdGVscy4iKSk7cmV0dXJufWlmKFQ9PT0iaG9tZSIpe3EoImxpc3RIb3RlbHMiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKChUPT09Im1lbWJlciJ8fFQ9PT0iZmluZC1ib29raW5nInx8VD09PSJhc2stc2lnbi1pbiIpJiZMdClyZXR1cm47aWYoVD09PSJtZW1iZXIiKXtpZighWClyZXR1cm47Y29uc3Qgaz17dmlldzoibWVtYmVyIixtZW1iZXI6WH07eW8oayksUGUoayksUWUoKTtyZXR1cm59aWYoVD09PSJhc2stc2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNpZ25pbiIpO2lmKGspay5oaWRkZW49ITE7ZWxzZXtjb25zdCBJPXt2aWV3OiJtZW1iZXItc2lnbi1pbiJ9O3lvKEkpLFBlKEkpLFFlKCl9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8uZm9jdXMoKTtyZXR1cm59aWYoVD09PSJzaWduLWluIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy52YWx1ZS50cmltKCk/PyIiLEk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1zdXIiKT8udmFsdWUudHJpbSgpPz8iIjtpZigha3x8IUkpe04oIkJvdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBvbiBpdCwgcGxlYXNlLiIpO3JldHVybn1xKCJzaWduSW4iLHtudW1iZXI6ayxzdXJuYW1lOkl9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IHNpZ24gaW4uIikpO3JldHVybn1pZihUPT09ImZvcmdldC1wcmVmcyIpe3EoImZvcmdldFByZWZlcmVuY2VzIix7fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBmb3JnZXQgdGhlbS4iKSk7cmV0dXJufWNvbnN0IFc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc3VnZ2VzdCIpO2lmKFchPT1udWxsKXtjb25zdCBrPShNPy5zdWdnZXN0aW9ucz8/W10pW051bWJlcihXKV07az8uYXNrPy50b29sP3EoU3RyaW5nKGsuYXNrLnRvb2wpLGsuYXNrLmFyZ3M/P3t9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGRvIHRoYXQganVzdCBub3cuIikpOms/LnNheSYmRWUuc2VuZE1lc3NhZ2Uoe3JvbGU6InVzZXIiLGNvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OlN0cmluZyhrLnNheSl9XX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgc2VuZCB0aGF0IHRvIHRoZSBjaGF0LiIpKTtyZXR1cm59aWYoVD09PSJzaWduLW91dCIpe1g9bnVsbCxxKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKFQ9PT0iYXNrLWJvb2siKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpO2smJihrLmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKFQ9PT0iYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsST1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ21haWwiKT8udmFsdWUudHJpbSgpPz8iIixZPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiLHJlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndGltZSIpPy52YWx1ZS50cmltKCk/PyIiLHhlPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcChhcz0+YXMuZGF0YXNldC5hc2s/PyIiKSxpdD0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZihDZT17bmFtZTprLGVtYWlsOkksbm90ZXM6WSxhcnJpdmluZ0F0OnJlLHJlcXVlc3RzOnhlLHJlbWVtYmVyOml0fSwha3x8IUkuaW5jbHVkZXMoIkAiKSl7TihrPydUaGF0IGVtYWlsIGhhcyBubyAiQCIgaW4gaXQgLSB0aGUgY29uZmlybWF0aW9uIG5lZWRzIGFuIGFkZHJlc3MgaXQgY2FuIHJlYWNoLic6IlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwgdG8gc2VuZCB0aGUgY29uZmlybWF0aW9uIHRvLiIpO3JldHVybn1xKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6ayxlbWFpbDpJLC4uLlk/e25vdGVzOll9Ont9LC4uLnJlP3thcnJpdmluZ0F0OnJlfTp7fSwuLi54ZS5sZW5ndGg/e3JlcXVlc3RzOnhlfTp7fSwuLi5pdD97cmVtZW1iZXJSZXF1ZXN0czohMH06e319KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGFzayBmb3IgdGhvc2Ugcm9vbXMuIikpO3JldHVybn1pZihUPT09ImJvb2tpbmdzIil7cSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZihUPT09InRyaXAiKXtxKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IEI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihCKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIiksST10LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpO2smJkkmJih6LmNoZWNrSW49ayx6LmNoZWNrT3V0PUkpLHEoImdldEhvdGVsIix7aG90ZWw6QiwuLi5rbygpLC4uLnouY2hlY2tJbiYmUT4xP3tyb29tczpRfTp7fX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtjb25zdCBaZj0oKT0+e2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKSlyZXR1cm47Y29uc3QgZT10PT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KT8udmFsdWU/PyIiO0NlPXtuYW1lOmUoImduYW1lIiksZW1haWw6ZSgiZ21haWwiKSxub3RlczplKCJnbm90ZSIpLGFycml2aW5nQXQ6ZSgiZ3RpbWUiKSxyZXF1ZXN0czpbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAodD0+dC5kYXRhc2V0LmFzaz8/IiIpLHJlbWVtYmVyOiEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkfX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5pZD8/IiI7WyJnbmFtZSIsImdtYWlsIiwiZ25vdGUiLCJndGltZSIsImdyZW1lbWJlciJdLmluY2x1ZGVzKHQpJiZaZigpfSk7Y29uc3QgRHU9KCk9Pntmb3IoO2hlLmF0KC0xKT8ucGF5bG9hZD8udmlldz09PSJtZW1iZXIiJiYhWDspaGU9aGUuc2xpY2UoMCwtMSk7Y29uc3QgZT1oZS5hdCgtMSk7aWYoIWV8fEx0KXtrZigpO3JldHVybn1oZT1oZS5zbGljZSgwLC0xKSxPbys9MSxLYygpLGpmKCk7Y29uc3QgdD1lLnZlcnNpb249PT1Fbz92b2lkIDA6eV8oZS5wYXlsb2FkKTt0PyhNPWUucGF5bG9hZCxxKHQua2V5LHQuYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT5QZShlLnBheWxvYWQsITApKS5maW5hbGx5KFFlKSk6KFBlKGUucGF5bG9hZCwhMCksUWUoKSl9LE5mPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2hlcmUiKT8udmFsdWUudHJpbSgpPz8iIjtpZighZSl7TigiV2hlcmUgdG8/IEEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwuIik7cmV0dXJufXhzKCk7Y29uc3Qgbj0oTT8ucmVnaW9ucz8/W10pLmZsYXRNYXAobz0+KG8uY291bnRyaWVzPz9bXSkuZmxhdE1hcChyPT5bci5uYW1lLC4uLihyLmNpdGllcz8/W10pLm1hcChzPT5zLm5hbWUpXSkpLmZpbmQobz0+by50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpKTtxKCJsaXN0SG90ZWxzIix7Li4ubj97Y2l0eTpufTp7cXVlcnk6ZX0sLi4uS3QoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgc2VhcmNoIGp1c3Qgbm93LiIpKX0seHM9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY28iKTtlPy52YWx1ZSYmKHouY2hlY2tJbj1lLnZhbHVlKSx0Py52YWx1ZSYmKHouY2hlY2tPdXQ9dC52YWx1ZSksZT8udmFsdWUmJihvcz0hMCl9O2xldCBDcyxkdD0hMTtjb25zdCBqZj0oKT0+e2NsZWFyVGltZW91dChDcyksZHQ9ITF9LGRrPWU9PmU/LnZpZXc9PT0iaG90ZWxzInx8ZT8udmlldz09PSJuby1ob3RlbHMiJiYhIWU/LmFzayxObz0oZT0wKT0+e2NsZWFyVGltZW91dChDcyksZHQ9ITAsQ3M9c2V0VGltZW91dCgoKT0+e2lmKCFkayhNKSl7ZHQ9ITE7cmV0dXJufWlmKEx0KXtObygxNTApO3JldHVybn1kdD0hMSxxKCJsaXN0SG90ZWxzIix7Li4uT18oTT8uYXNrKSwuLi5LdCgpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBwcmljZSB0aG9zZSBuaWdodHMuIikpfSxlKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZT0+e2lmKGUudGFyZ2V0Py5pZD09PSJ3aGVyZSImJmUua2V5PT09IkVudGVyIiYmIWUuaXNDb21wb3Npbmcpe2UucHJldmVudERlZmF1bHQoKSxOZigpO3JldHVybn1jb25zdCB0PWUudGFyZ2V0OyF0fHx0LmdldEF0dHJpYnV0ZSgicm9sZSIpIT09ImJ1dHRvbiJ8fGUua2V5IT09IkVudGVyIiYmZS5rZXkhPT0iICJ8fChlLnByZXZlbnREZWZhdWx0KCksdC5jbGljaygpKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ7dD8udHlwZT09PSJkYXRlIiYmKG9zPSEwKTtjb25zdCBvPXtkY2k6WyJkY2kiLCJkY28iXSxkY286WyJkY2kiLCJkY28iXSxsY2k6WyJsY2kiLCJsY28iXSxsY286WyJsY2kiLCJsY28iXX1bdD8uaWQ/PyIiXTtpZihvKXtjb25zdCBpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9bMF0pLGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1sxXSk7aWYoIWl8fCFjKXJldHVybjtpZih0LmlkPT09b1swXSYmaS52YWx1ZSl7Y29uc3QgbD1CZShpLnZhbHVlLDEpO2MubWluPWwsKCFjLnZhbHVlfHxjLnZhbHVlPD1pLnZhbHVlKSYmKGMudmFsdWU9bCl9ei5jaGVja0luPWkudmFsdWV8fHouY2hlY2tJbix6LmNoZWNrT3V0PWMudmFsdWV8fHouY2hlY2tPdXQsb1swXT09PSJsY2kiJiZObygzMDApO3JldHVybn1pZih0Py5pZCE9PSJjaSImJnQ/LmlkIT09ImNvIilyZXR1cm47Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSxzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpO2lmKCFyfHwhcylyZXR1cm47aWYodC5pZD09PSJjaSImJnIudmFsdWUpe2NvbnN0IGk9QmUoci52YWx1ZSwxKTtzLm1pbj1pLCghcy52YWx1ZXx8cy52YWx1ZTw9ci52YWx1ZSkmJihzLnZhbHVlPWkpfXouY2hlY2tJbj1yLnZhbHVlfHx6LmNoZWNrSW4sei5jaGVja091dD1zLnZhbHVlfHx6LmNoZWNrT3V0O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO2EmJihhLnRleHRDb250ZW50PXJzKCkpLGlzKCl9KTtjb25zdCBNZj0oZSx0KT0+e3RyeXt3Zih0KTtjb25zdCBuPWU/SlNPTi5zdHJpbmdpZnkoZSk6IiI7aWYobiYmbj09PSRmJiZKU09OLnN0cmluZ2lmeShNKT09PVNmKXJldHVybjtlPy5zdGF5Py5jaGVja0luJiYob3M9ITApLGhlPVtdLE9vKz0xLEtjKCksamYoKSxUZT14ZixQZShlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbikscGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O0VlLm9udG9vbHJlc3VsdD1lPT5NZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7Y29uc3QgcWY9ZT0+e0FycmF5LmlzQXJyYXkoZT8uYXZhaWxhYmxlRGlzcGxheU1vZGVzKSYmKE9mPWUuYXZhaWxhYmxlRGlzcGxheU1vZGVzLm1hcChTdHJpbmcpKSx0eXBlb2YgZT8uZGlzcGxheU1vZGU9PSJzdHJpbmciJiZlLmRpc3BsYXlNb2RlIT09b24mJihvbj1lLmRpc3BsYXlNb2RlLE0/LnZpZXc9PT0iaG90ZWxzIiYmUGUoTSkpfTtsZXQgTHU7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsKCk9PntjbGVhclRpbWVvdXQoTHUpLEx1PXNldFRpbWVvdXQoKCk9PntNPy52aWV3IT09ImhvdGVscyJ8fHJuKCl8fChWYz1CYygpLHNzKCkhPT1SbyYmUGUoTSkpfSwxNTApfSk7RWUub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+e2dmKGUsYmYpLHFmKGUpfTtFZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9RWUuZ2V0SG9zdENvbnRleHQoKTtnZihlLGJmKSxxZihlKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJk1mKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PntwZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0jY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMnB4fS5oZWFke21pbi1oZWlnaHQ6MjhweH0uaG9tZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjB9LmhvbWU6aG92ZXJ7b3BhY2l0eTouNzJ9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5iYWNrYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMXB4IDRweCA4cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LXdpZHRoOjQyJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjdXJzb3I6cG9pbnRlcn0uYmFja2J0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uaGVhZCAuc3Vie2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWlubGluZS1zdGFydDphdXRvO3RleHQtYWxpZ246ZW5kfS5oZWFkdHJpcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo1cHggMTFweCA1cHggOXB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0uaGVhZHRyaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uaGVhZCAuc3ViKy5oZWFkdHJpcHttYXJnaW4taW5saW5lLXN0YXJ0OjB9LmNhcmQuYnVzeXtvcGFjaXR5Oi42Mn0uY2FyZC5idXN5IGJ1dHRvbiwuY2FyZC5idXN5IGlucHV0LC5jYXJkLmJ1c3kgc2VsZWN0e3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1lbWJlcmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEwcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjIwO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0ubWVtYmVyY2hpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5saW5reXtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO2ZvbnQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1saW5rKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5wLXdhc3tmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnAtbWVtYmVye2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LnN1bS5nb29kIHNwYW46bGFzdC1jaGlsZHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5kZW1ve2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQ1fS5kZW1vIGJ7Zm9udC13ZWlnaHQ6NzAwfS5jaXR5Z3JvdXArLmNpdHlncm91cHttYXJnaW4tdG9wOjE0cHh9LmNpdHluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLWJvdHRvbTo4cHh9LmNpdHluYW1lIHNtYWxse2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtvcGFjaXR5Oi43NX0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9LnQtc2hvdCBpbWcsLmhlcm8gaW1ne3otaW5kZXg6MX0udC1icmFuZHt6LWluZGV4OjI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtYmxvY2stc3RhcnQ6OHB4O2luc2V0LWlubGluZS1zdGFydDo4cHg7YmFja2dyb3VuZDojMDAwMDAwNjE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbX0udC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nOjEwcHggMTFweCAxMXB4fS50LW5hbWV7Zm9udC13ZWlnaHQ6NjQwO2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS4zO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjI7bGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDoyLjZlbX0udC13aGVyZXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udC1mb290e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6OHB4O21hcmdpbi10b3A6MnB4fS50LWZyb217Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwfS50LWZyb20gc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMXB4fS5yYXRle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJhdGUgc3Zne2NvbG9yOiNlOGEzM2R9Lmhlcm97cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MjEgLyA4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0uaGVybyAudC1tYXJre2ZvbnQtc2l6ZTo0MHB4fS5oLW5hbWV7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjgwO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07bGluZS1oZWlnaHQ6MS4yNX0uaC13aGVyZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4fS5oLXN1bXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7YmFja2dyb3VuZDp2YXIoLS1iZyl9LnN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMTEycHgsMWZyKSBtaW5tYXgoMTEycHgsMWZyKSBhdXRvIDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmVuZDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnN0YXkgbGFiZWwsLnN0YXkgLmd1ZXN0c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3RheSBpbnB1dCwuc3RheSBzZWxlY3R7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6N3B4IDZweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5uaWdodHN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZy1ib3R0b206OHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RheSAuZ297d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTRweDtjdXJzb3I6cG9pbnRlcn0uc3RheSAuZ29bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOmRlZmF1bHR9LmZsZXgtZGF0ZXN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MnB4O3Njcm9sbGJhci13aWR0aDp0aGluOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5mZHtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDttaW4td2lkdGg6NzhweDtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250OmluaGVyaXQ7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyfS5mZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uZmQtZGF5e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpub3dyYXB9LmZkLXByaWNle2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjUwO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmZkLm9ue2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2N1cnNvcjpkZWZhdWx0fS5mZC5vbiAuZmQtZGF5e2NvbG9yOnZhcigtLWFjY2VudC1mZyk7b3BhY2l0eTouODV9LmZkLmJlc3R7Ym9yZGVyLWNvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmZkLmJlc3QgLmZkLXByaWNlLC5mZC5iZXN0IC5mZC1kYXl7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZmQub3V0IC5mZC1wcmljZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXdlaWdodDo1MDB9LnRodW1ie2dyaWQtYXJlYTp0aHVtYjt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtmbGV4OjAgMCBhdXRvfS50aHVtYiBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LmxlZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5sZWd7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzo5cHggMTFweH0ubGVnLndhc3tvcGFjaXR5Oi43Mn0ubGVnLndhcyAubGVndnt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5sZWdre2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmxlZ3Z7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjQwO21hcmdpbi10b3A6MnB4fS5sZWdte2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDoycHh9LnJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgcHJpY2UgYWN0aW9uIjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4IDExcHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IHByaWNlIGFjdGlvbiJ9LnJvdyAuYm9keXtncmlkLWFyZWE6Ym9keTttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHh9LnJvdyAubmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnJvdyAubWV0YXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNDtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDozO2xpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS5yb3cgLnByaWNle2dyaWQtYXJlYTpwcmljZTt0ZXh0LWFsaWduOmVuZDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnJvdyAucC10b3RhbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY2MH0ucm93IC5wLXVuaXR7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJvdyAuYWN0aW9ue2dyaWQtYXJlYTphY3Rpb259LmJhZGdlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDttYXJnaW4tdG9wOjJweH0uYmFkZ2V7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2MjA7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYmFkZ2UuZ29vZHtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmJhZGdlLndhcm57YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKX0uYmFkZ2UuYmFke2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpfS5hZGR7ZGlzcGxheTppbmxpbmUtZ3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MzhweDtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdH0uYWRkOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5hZGRbZGlzYWJsZWRde29wYWNpdHk6LjQ7Y3Vyc29yOmRlZmF1bHR9LnN0ZXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4fS5zdGVwIGJ1dHRvbnt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5zdGVwIGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZmZmYyZX0uc3RlcCAubnttaW4td2lkdGg6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2ODA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXl7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbjoxMnB4IDAgNnB4fS5zdW1ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjVweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTttYXJnaW4tdG9wOjEycHg7cGFkZGluZy10b3A6MTBweDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnN1bXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3VtLnRvdGFse2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmZvb3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi10b3A6MTJweH0uZ297ZmxleDoxO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MTFweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MTJweCAxNnB4O2N1cnNvcjpwb2ludGVyfS5wYWdlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9LnBhZ2VyIC5ue2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS53YXJubm90ZXtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjlweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS50aWxlLm92ZXJ7b3BhY2l0eTouODJ9LmFza2VkLWxpbmV7Zm9udC1zdHlsZTppdGFsaWN9LmFza2Vke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5hc2tlZCBie2ZvbnQtd2VpZ2h0OjcyMDtjb2xvcjp2YXIoLS1mZyl9LmFza2VkLmZsYWd7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0td2Fybil9LmFza2VkLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX0uYXNrc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmFza3MtdHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwLmFza3tjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweH0uY2hpcC5hc2tbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MTtncmlkLXJvdzoxIC8gc3BhbiB2YXIoLS1oZWFkLXJvd3MsIDUpfS5jbXAtaGVhZHtkaXNwbGF5OmdyaWQ7Z3JpZC1yb3c6MSAvIHNwYW4gdmFyKC0taGVhZC1yb3dzLCA1KTtncmlkLXRlbXBsYXRlLXJvd3M6c3ViZ3JpZDtyb3ctZ2FwOjZweDthbGlnbi1jb250ZW50OnN0YXJ0O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjttaW4td2lkdGg6MDtwYWRkaW5nLWJvdHRvbToxMnB4fS5jbXAtaGVhZD4uY29sLW5hbWUsLmNtcC1oZWFkPi5jb2wtcHJpY2UsLmNtcC1oZWFkPi53aHksLmNtcC1oZWFkPi5wY3ttYXJnaW4taW5saW5lOjExcHh9LmNtcC1oZWFkPi5jb2wtbmFtZXttYXJnaW4tdG9wOjRweH0ud2h5Lm5vbmV7Ym9yZGVyOjA7cGFkZGluZzowfS5waWNrbWFyay5ub25le3Zpc2liaWxpdHk6aGlkZGVufS5jbXAgLmt7bWFyZ2luLXRvcDowfS5jbXAtaGVhZC5waWNre2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjY2VudCl9LmNtcC1oZWFkIC50LXNob3R7YXNwZWN0LXJhdGlvOjE2IC8gOTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJX0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubW9tZW50c3tsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjJweCAwIDA7cGFkZGluZzowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweH0ubW9tZW50cyBsaXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjg0cHggMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lm1vbWVudHMgLndoZW57b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5tb21lbnRzIC53aGF0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNH0ubW9tZW50cyAud2hhdCBie2ZvbnQtd2VpZ2h0OjYyMH0ubW9tZW50cyAud2hhdCBzbWFsbHtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLXN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczo5NnB4IDFmcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOnBvaW50ZXJ9LnBsYW4tc3RheSAucHMtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6ODRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5wbGFuLXN0YXkgLnBzLXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5wbGFuLXN0YXkgLnBzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDozcHg7cGFkZGluZzo5cHggMTBweCA5cHggMDttaW4td2lkdGg6MH0ucGxhbi1zdGF5IC5uYW1le2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LnBsYW4tc3RheSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1zdGF5IC5wcy1wcmljZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wbGFuLW5pZ2h0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItdG9wOjFweCBkYXNoZWQgdmFyKC0tbGluZSk7cGFkZGluZy10b3A6NnB4O2N1cnNvcjpwb2ludGVyfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19LnN1Z2dlc3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWFyZ2luLXRvcDoxNHB4fS5zdWdnZXN0IC5jaGlwe2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweCAxMXB4O2NvbG9yOnZhcigtLWZnKX0uc3VnZ2VzdCAuY2hpcDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uc3VnZ2VzdCAuY2hpcDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb3JtIGxhYmVsLnJlbWVtYmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Zm9udC13ZWlnaHQ6NDAwO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowfS5mb3JtIGxhYmVsLnJlbWVtYmVyIGlucHV0e21hcmdpbjoycHggMCAwfS5wbGFjZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXAucGxhY2V7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4IDEwcHg7Y29sb3I6dmFyKC0tZmcpfS5jaGlwLnBsYWNlIHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY2hpcC5wbGFjZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uY2hpcC5wbGFjZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5zdWdnZXN0IC5jaGlwLnNheSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZmluZGVye2Rpc3BsYXk6ZmxleDtnYXA6OHB4fS5maW5kZXIgaW5wdXR7ZmxleDoxO21pbi13aWR0aDowO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtwYWRkaW5nOjlweCAxMnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKX0uZmluZGVyIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnJlZ2lvbntkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LmNvdW50cnluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDo2cHh9LmNvdW50cnluYW1lIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzowO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdHtkaXNwbGF5OmdyaWQ7Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5kZXN0Omxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTowfS5kZXN0LWNvdW50cnl7anVzdGlmeS1zZWxmOnN0YXJ0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5kZXN0LWNvdW50cnkgc21hbGx7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5kZXN0LWNvdW50cnkgLm57Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0LWNvdW50cnk6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uZGVzdC1jb3VudHJ5OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LmZpbmRlciAuZ297ZmxleDpub25lO3BhZGRpbmc6OXB4IDE4cHg7Zm9udC1zaXplOjEzcHh9LnNvcnRzLWt7YWxpZ24tc2VsZjpjZW50ZXI7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tcmlnaHQ6MnB4fS5jaGlwLnNvcnRbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5zZWFyY2h7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zZWFyY2ggLnN0YXl7cGFkZGluZzowO2JhY2tncm91bmQ6bm9uZX0uc2VhcmNoIC53aGVyZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc2VhcmNoIC53aGVyZSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OXB4IDExcHh9LnNlYXJjaCAud2hlcmUgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0uc2VhcmNoIC5zdGF5IC5nb3twYWRkaW5nOjlweCAxNHB4O2ZvbnQtc2l6ZToxM3B4fS50LXRhZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo0cHg7bWFyZ2luLXRvcDo0cHh9LnQtZnJvbS50LW5vbmV7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4fS5zdGF5IC5nby5xdWlldHtwYWRkaW5nOjhweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHh9LmZpbHRlci1wYW5lbHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LmZncm91cHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDthbGlnbi1pdGVtczpjZW50ZXJ9LnQtZnJvbSAudC1zdWJ7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjFweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXSBzbWFsbHtjb2xvcjppbmhlcml0fS5jaGlwLnRvb2x7Zm9udC13ZWlnaHQ6NjAwfS5jaGlwLnRvb2xbYXJpYS1leHBhbmRlZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWQiPgogICAgICAgIDwhLS0gVGhlIGdyb3VwJ3Mgd29yZG1hcmsgYXJyaXZlcyBXSVRIIFRIRSBEQVRBIGFzIGBsb2dvVXJsYC4gTm90aGluZyBpcwogICAgICAgICAgICAgYmFrZWQgaW4gaGVyZTogYSBsb2dvIGNvbXBpbGVkIGludG8gdGhlIGNhcmQgaXMgdGhlIGZpcnN0IGJyYW5kJ3MsCiAgICAgICAgICAgICBhbmQgZXZlcnkgaG90ZWwgZ3JvdXAgYWZ0ZXIgdGhlbSB3b3VsZCB3ZWFyIGl0LiAtLT4KICAgICAgICA8IS0tIFRoZSB3YXkgYmFjaywgb24gZXZlcnkgdmlldy4gV2l0aG91dCBpdCB0aGUgdHJpcCwgdGhlIGJvb2tpbmdzIGxpc3QKICAgICAgICAgICAgIGFuZCBhIGNhbmNlbGxlZCBib29raW5nIGFyZSBhbGwgcGxhY2VzIGEgZ3Vlc3QgY2FuIHJlYWNoIGFuZCBub3QKICAgICAgICAgICAgIGxlYXZlIChyb2JpbiwgMjAyNi0wOS0xOCkuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhvbWUiIGlkPSJob21lIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIiBhcmlhLWxhYmVsPSJCYWNrIHRvIHRoZSBob3RlbHMiPgogICAgICAgICAgPGltZyBjbGFzcz0iYnJhbmQiIGlkPSJicmFuZCIgYWx0PSIiIGhpZGRlbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSIgaWQ9InRpdGxlIj48L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgICAgPCEtLSBPbmUgc3RlcCBiYWNrIElOU0lERSB0aGUgY2FyZC4gVGhlIGJyYW5kIGFib3ZlIGdvZXMgaG9tZSwgd2hpY2ggaXMgYQogICAgICAgICAgICAgZGlmZmVyZW50IGFuc3dlcjsgdGhpcyBjb21lcyBiYWNrIHRvIHRoZSBvbmUgdGhleSB3ZXJlIHJlYWRpbmcgLSB0aGUKICAgICAgICAgICAgIHRocmVlIGhvdGVscyB0aGV5IHdlcmUgY29tcGFyaW5nIHdoZW4gdGhleSB0YXBwZWQgb25lIChyb2JpbiwKICAgICAgICAgICAgIDIwMjYtMDktMjEpLiBIaWRkZW4gdW5sZXNzIHRoZXJlIGlzIHNvbWV3aGVyZSB0byBnbyBiYWNrIHRvLCBhbmQKICAgICAgICAgICAgIGNsZWFyZWQgd2hlbmV2ZXIgdGhlIGNvbnZlcnNhdGlvbiBzZW5kcyBhIG5ldyBhbnN3ZXIuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJhY2tidG4iIGlkPSJiYWNrYnRuIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJiYWNrIiBoaWRkZW4+PC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9InN1YiIgaWQ9InN1YiI+PC9zcGFuPgogICAgICAgIDwhLS0gVGhlIHRpZXIsIG9yIHRoZSB3YXkgaW4uIEEgbWVtYmVyIHJhdGUgaXMgYSBmYWN0IGFib3V0IGV2ZXJ5IHByaWNlCiAgICAgICAgICAgICBvbiB0aGUgY2FyZCwgc28gaXQgYmVsb25ncyBpbiB0aGUgaGVhZGVyIHJhdGhlciB0aGFuIG9uIG9uZSB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW1iZXJjaGlwIiBpZD0ibWVtYmVyY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPjwvYnV0dG9uPgogICAgICAgIDwhLS0gVGhlIHRyaXAsIGZyb20gdGhlIHRvcC4gVGhlIHNob3BwaW5nIGNhcmQgbGVhcm5lZCBvbiAyMDI2LTA5LTE3IHRoYXQKICAgICAgICAgICAgIGEgZm9vdGVyLW9ubHkgY2FydCBtZWFucyBzY3JvbGxpbmcgcGFzdCB0d2VudHkgdGlsZXMgdG8gcmVhY2ggaXQuCiAgICAgICAgICAgICBTaG93biBvbmNlIHRoZSB0cmlwIGhhcyBzb21ldGhpbmcgaW4gaXQsIGhpZGRlbiBvbiB0aGUgdHJpcCB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkdHJpcCIgaWQ9ImhlYWR0cmlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIiBoaWRkZW4gYXJpYS1sYWJlbD0iVmlldyB0aGUgdHJpcCI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIKICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQgOC41aDE2djExYTEuNSAxLjUgMCAwIDEtMS41IDEuNWgtMTNBMS41IDEuNSAwIDAgMSA0IDE5LjV6IiAvPgogICAgICAgICAgICA8cGF0aCBkPSJNOSA4LjVWNmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyLjUiIC8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDxzcGFuIGlkPSJoZWFkdHJpcG4iPjA8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250ZW50Ij48ZGl2IGNsYXNzPSJlbXB0eSI+TG9hZGluZ+KApjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==', 'base64').toString('utf8');
5
+ export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgVWY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLEZmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxHYz17fSxIZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9RmYoZCxvKSxkIGluIEdjKXJldHVybjtHY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1pLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCAkPWlbd107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOlVmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBCZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBWZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBNbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIEpmKGUpe31mdW5jdGlvbiBLZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIFdmKGUpe31mdW5jdGlvbiBtcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBncyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+UnMobikpLmpvaW4odCl9ZnVuY3Rpb24gJG8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIEdme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gYW4oZSl7cmV0dXJuIG5ldyBHZihlKX1mdW5jdGlvbiBBcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBVZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gRnUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgUWM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gSHUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1RYylyZXR1cm4gbz09PXZvaWQgMCYmKG89UWMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFFmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gc3QoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBxbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBSZShlKXtyZXR1cm4gcW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gQnUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBzdCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBWdShlLHQsbil7dCBpbiBlP3N0KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gZXQoZSx0LG4sbyl7Y29uc3Qgcj1SZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD9CdShlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTpWdShlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiBZZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/QnUoZSxuLCgpPT50W25dKTpWdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBYZihlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gZW0oZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gdG0oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIG5tKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gSnUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIEt1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgT3M9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IFd1PWFuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gSGUoZSl7aWYoaHQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKGh0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gRG8oZSl7cmV0dXJuIEhlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gb20oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3Qgcm09ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LFNvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksR3U9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBRKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBzbShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBScyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBRdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IFl1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxYdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gZWwoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gZXQocyxlLExvKGUsdCkpLFEoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBMbyhlLHQpe2NvbnN0IG49UmUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiB0bChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoTG8oZSx0KSksYT17fTtyZXR1cm4gZXQoYSxlLFJlZmxlY3Qub3duS2V5cyhSZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLFEoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBubChlLHQpe2lmKCFIZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1SZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gUShlLHVlKGUuX3pvZC5kZWYse3NoYXBlOm9sKGUsdCl9KSl9ZnVuY3Rpb24gb2woZSx0KXtjb25zdCBuPXt9O3JldHVybiBldChuLGUsUmVmbGVjdC5vd25LZXlzKFJlKGUpKSksWWYobix0KSxufWZ1bmN0aW9uIHJsKGUsdCl7aWYoIUhlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBRKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6b2woZSx0KX0pKX1mdW5jdGlvbiBzbChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtldChuLGUsUmVmbGVjdC5vd25LZXlzKFJlKGUpKSksZXQobix0LFJlZmxlY3Qub3duS2V5cyhSZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBRKGUsbyl9ZnVuY3Rpb24gYnMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KExvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiBldCh1LHQsUmVmbGVjdC5vd25LZXlzKFJlKHQpKSxlJiYoKGwsZCk9PmkmJiFpLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiBpbChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoTG8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIGV0KHIsdCxSZWZsZWN0Lm93bktleXMoUmUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGZlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYWwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIHV0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIHZzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBTZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOnV0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz91dChzPy4oZSkpPz91dCh0Py5lcnJvcj8uKGUpKT8/dXQobi5jdXN0b21FcnJvcj8uKGUpKT8/dXQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGlbdV09ZVt1XSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGltPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIEZvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWltLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIGNsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gZnQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBhbShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gdWwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIGxsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gY20oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gdWwodCtuKX1mdW5jdGlvbiB1bShlKXtyZXR1cm4gbGwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGxtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBkbShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBwbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIGRsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6aG0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBOZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBCbyhlLHQsbil7cmV0dXJuIE5lKGUsdCxuLCExKX1mdW5jdGlvbiBjbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gTmUodGhpcyxuLG8odGhpcykpfSxzZXQocil7TmUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGhtKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpOZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe05lKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBmbShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGNzLERlPSExO2NvbnN0IG1tPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7RGU9ITB9fTtmdW5jdGlvbiBPKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmY3MhPT1lLl96b2Qpe2NzPXZvaWQgMDtyZXR1cm59Y3M9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LG1tKTtjb25zdCByPURlO0RlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIERlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksRGU9RGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxEZT1EZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gcGwoZSx0LG4sbyl7Y29uc3Qgcj1mbShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IGhsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gWnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtobF09ITAsdH1jb25zdCBOcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6WHUsQ09OU1RBTlRfQ0FUQ0g6aGwsQ2xhc3M6cG0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6WXUsYWJvcnRlZDpmZSxhbGxvd3NFdmFsOld1LGFzc2VydDpXZixhc3NlcnRFcXVhbDpCZixhc3NlcnRJczpKZixhc3NlcnROZXZlcjpLZixhc3NlcnROb3RFcXVhbDpWZixhc3NpZ25Qcm9wOnN0LGF0dGFjaFNjaGVtYTp2cyxiYXNlNjRUb1VpbnQ4QXJyYXk6dWwsYmFzZTY0dXJsVG9VaW50OEFycmF5OmNtLGNhY2hlZDphbixjYXB0dXJlU3RhY2tUcmFjZTpPcyxjbGVhbkVudW06YW0sY2xlYW5SZWdleDpVZSxjbG9uZTpRLGNsb25lRGVmOlhmLGNvZGVQb2ludExlbmd0aDpGbyxjb25zdGFudENhdGNoOlpzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6c20sZGVmaW5lTGF6eTpIdSxkZWZpbmVMYXp5SW50ZXJuYWw6TyxkZXJpdmVkOmNuLGVzYzpKdSxlc2NhcGVSZWdleDpaZSxleHBsaWNpdGx5QWJvcnRlZDphbCxleHRlbmQ6bmwsZmluYWxpemVJc3N1ZTpTZSxmbG9hdFNhZmVSZW1haW5kZXI6RnUsZ2V0RWxlbWVudEF0UGF0aDplbSxnZXRFbnVtVmFsdWVzOm1zLGdldExlbmd0aGFibGVPcmlnaW46SG8sZ2V0UGFyc2VkVHlwZTpybSxnZXRTaXphYmxlT3JpZ2luOlVvLGhleFRvVWludDhBcnJheTpsbSxoaWRlOkJvLGluc3RhbGxMYXp5UHJvcDpwbCxpc09iamVjdDpodCxpc1BsYWluT2JqZWN0OkhlLGlzc3VlOmZ0LGpvaW5WYWx1ZXM6Z3MsanNvblN0cmluZ2lmeVJlcGxhY2VyOiRvLG1lbWJlcnM6ZGwsbWVyZ2U6c2wsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6QXMsbnVtS2V5czpvbSxvYmplY3RDbG9uZTpRZixvbWl0OnRsLG9wdGlvbmFsS2V5czpRdSxvd246TmUscGFyc2VkVHlwZTpjbCxwYXJ0aWFsOmJzLHBpY2s6ZWwscHJlZml4SXNzdWVzOmtlLHByaW1pdGl2ZVR5cGVzOkd1LHByb21pc2VBbGxPYmplY3Q6dG0scHJvcGVydHlLZXlUeXBlczpTbyxyYW5kb21TdHJpbmc6bm0scmF3U2hhcGU6cW8scmVxdWlyZWQ6aWwsc2FmZUV4dGVuZDpybCxzaGFsbG93Q2xvbmU6RG8sc2x1Z2lmeTpLdSxzdHJpbmdpZnlQcmltaXRpdmU6UnMsdG9ab2Q6TW8sdWludDhBcnJheVRvQmFzZTY0OmxsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDp1bSx1aW50OEFycmF5VG9IZXg6ZG0sdW53cmFwTWVzc2FnZTp1dH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWWM7Y29uc3QganM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLHVzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFhjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIGdtKGUpe2NvbnN0IHQ9WGM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBYYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7dXMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIix1cyl9ZmluYWxseXt1cy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxpKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBOPXc7Zm9yKDtOJiZOIT09JDspTj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoTik7Y29uc3QgST1OPz93O2kuaGFzKEkpfHwoaS5hZGQoSSksZGwoSSxhKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBifHwoYlt3XT1fW3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P2dtKGQpOnRoaXM7dSh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBNcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIEZlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFZvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShZYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhZYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIHRlKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIGJtKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZiwkbywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIHZtKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgeW09e2dldDpibSxzZXQ6dm0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LGxzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sZXU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksZmw9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIsbHMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixscyksbHMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIix5bSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZXUuaGFzKG4pfHwoZXUuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LG1sPXAoIiRab2RFcnJvciIsZmwpLHllPXAoIiRab2RFcnJvciIsZmwsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiBfbShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIEpvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/X20obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIEtvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IHU9bixsPTA7Zm9yKDtsPGkubGVuZ3RoOyl7Y29uc3QgZD1pW2xdLG09bD09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmdS5fZXJyb3JzLnB1c2godChhKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPXVbZF07bSYmYi5fZXJyb3JzLnB1c2godChhKSksdT1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBxcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAodT0+byh7aXNzdWVzOnV9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCB1PVsuLi5zLC4uLmkucGF0aF07aWYodS5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDx1Lmxlbmd0aDspe2NvbnN0IG09dVtkXSxiPWQ9PT11Lmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGE9bC5pdGVtcylbbV0/PyhhW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gZ2woZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIERzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke2dsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIFdvKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgdW49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHU9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKGw9PlNlKGwsYSx0ZSgpKSkpO3Rocm93IE9zKHUscz8uY2FsbGVlPz90KSx1fXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0seXM9dW4oeWUpLGxuPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCB1PW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcChsPT5TZShsLGEsdGUoKSkpKTt0aHJvdyBPcyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LF9zPWxuKHllKSxkbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP3ZsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sYmw9ZG4oeWUpO2Z1bmN0aW9uIHZsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+U2UocixuLHRlKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBwbj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP3ZsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sa209cG4oeWUpLHdtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSwkbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLEdvPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09d20pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBTbShlLHQsbil9KTtmdW5jdGlvbiBTbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1skbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBRbz1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LExzPWU9Pntjb25zdCB0PXVuKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLFdvKG4sYSkpfTtyZXR1cm4gbn0sem09THMoeWUpLFVzPWU9Pntjb25zdCB0PXVuKGUpLG49KG8scixzLGEpPT50KG8scixzLFdvKG4sYSkpO3JldHVybiBufSxUbT1Vcyh5ZSksRnM9ZT0+e2NvbnN0IHQ9bG4oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxXbyhuLGEpKX07cmV0dXJuIG59LEltPUZzKHllKSxIcz1lPT57Y29uc3QgdD1sbihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLFdvKG4sYSkpO3JldHVybiBufSxQbT1Icyh5ZSksQnM9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gZG4oZSkodCxuLHIpfSx4bT1Ccyh5ZSksVnM9ZT0+KHQsbixvKT0+ZG4oZSkodCxuLG8pLENtPVZzKHllKSxKcz1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHBuKGUpKHQsbixyKX0sRW09SnMoeWUpLEtzPWU9PmFzeW5jKHQsbixvKT0+cG4oZSkodCxuLG8pLEFtPUtzKHllKSx5bD0vXltjQ11bMC05YS16XXs2LH0kLyxfbD0vXlswLTlhLXpdKyQvLGtsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLHdsPS9eWzAtOWEtdkEtVl17MjB9JC8sJGw9L15bQS1aYS16MC05XXsyN30kLyxTbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gemwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IFRsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLE9tPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sSWw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLG10PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyxSbT1tdCg0KSxabT1tdCg2KSxObT1tdCg3KSxQbD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxqbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxNbT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyx4bD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxxbT14bCxEbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxMbT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIENsKCl7cmV0dXJuIG5ldyBSZWdFeHAoTG0sInUiKX1jb25zdCBFbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sQWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxPbD1lPT57Y29uc3QgdD1aZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxSbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sWmw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sVW09L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sRm09L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLE5sPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxqbD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sV3M9L15odHRwcz8kLyxNbD0vXlwrWzEtOV1cZHs2LDE0fSQvLEdzPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxxbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxRcz0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxEbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gSG0oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IExsPUhtKERsKTtmdW5jdGlvbiBrcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIFVsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtrcyhlKX0kYCl9ZnVuY3Rpb24gRmwoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke2tzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7a3Moe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7RGx9VCg/OiR7b30pJGApfWNvbnN0IEhsPS9eW1xzXFNdezAsfSQvLEJsPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LFZsPS9eLT9cZCtuPyQvLEpsPS9eLT9cZCskLyxZbz0vXi0/XGQrKD86XC5cZCspPyQvLEtsPS9eKD86dHJ1ZXxmYWxzZSkkL2ksV2w9L15udWxsJC9pLEdsPS9edW5kZWZpbmVkJC9pLFFsPS9eW15BLVpdKiQvLFlsPS9eW15hLXpdKiQvLFhsPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBCbT0vXlswLTlhLWZBLUZdezMyfSQvLFZtPWhuKDIyLCI9PSIpLEptPWZuKDIyKSxLbT0vXlswLTlhLWZBLUZdezQwfSQvLFdtPWhuKDI3LCI9IiksR209Zm4oMjcpLFFtPS9eWzAtOWEtZkEtRl17NjR9JC8sWW09aG4oNDMsIj0iKSxYbT1mbig0MyksZWc9L15bMC05YS1mQS1GXXs5Nn0kLyx0Zz1obig2NCwiIiksbmc9Zm4oNjQpLG9nPS9eWzAtOWEtZkEtRl17MTI4fSQvLHJnPWhuKDg2LCI9PSIpLHNnPWZuKDg2KSxYbz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOkhsLGJhc2U2NDpVbSxiYXNlNjR1cmw6Rm0sYmlnaW50OlZsLGJvb2xlYW46S2wsYnJvd3NlckVtYWlsOkRtLGNpZHJ2NDpSbCxjaWRydjY6WmwsY3JlZGl0Q2FyZDpHcyxjdWlkOnlsLGN1aWQyOl9sLGN1cnJlbmN5Q29kZTpxbCxkYXRlOkxsLGRhdGV0aW1lOkZsLGRvbWFpbjpqbCxkdXJhdGlvbjpUbCxlMTY0Ok1sLGVtYWlsOlBsLGVtb2ppOkNsLGV4dGVuZGVkRHVyYXRpb246T20sZ3VpZDpJbCxoZXg6WGwsaG9zdG5hbWU6TmwsaHRtbDVFbWFpbDpqbSxodHRwUHJvdG9jb2w6V3MsaWJhbjpRcyxpZG5FbWFpbDpxbSxpbnRlZ2VyOkpsLGlwdjQ6RWwsaXB2NjpBbCxrc3VpZDokbCxsb3dlcmNhc2U6UWwsbWFjOk9sLG1kNV9iYXNlNjQ6Vm0sbWQ1X2Jhc2U2NHVybDpKbSxtZDVfaGV4OkJtLG5hbm9pZDpTbCxuYW5vaWRPZkxlbmd0aDp6bCxudWxsOldsLG51bWJlcjpZbyxyZmM1MzIyRW1haWw6TW0sc2hhMV9iYXNlNjQ6V20sc2hhMV9iYXNlNjR1cmw6R20sc2hhMV9oZXg6S20sc2hhMjU2X2Jhc2U2NDpZbSxzaGEyNTZfYmFzZTY0dXJsOlhtLHNoYTI1Nl9oZXg6UW0sc2hhMzg0X2Jhc2U2NDp0ZyxzaGEzODRfYmFzZTY0dXJsOm5nLHNoYTM4NF9oZXg6ZWcsc2hhNTEyX2Jhc2U2NDpyZyxzaGE1MTJfYmFzZTY0dXJsOnNnLHNoYTUxMl9oZXg6b2csc3RyaW5nOkJsLHRpbWU6VWwsdWxpZDprbCx1bmRlZmluZWQ6R2wsdW5pY29kZUVtYWlsOnhsLHVwcGVyY2FzZTpZbCx1dWlkOm10LHV1aWQ0OlJtLHV1aWQ2OlptLHV1aWQ3Ok5tLHhpZDp3bH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxXPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxZcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFBcyh0KSYmdC5zaXplIT09dm9pZCAwfSxYcz1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFBcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LHpvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LGVpPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49em9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnpvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHRpPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49em9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnpvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksZWQ9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6RnUobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx0ZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Vy5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPVl1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG5kPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdFtuLG9dPVh1W3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksb2Q9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVlzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOlVvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHJkPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1ZcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpVbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHNkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1ZcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46VW8ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxpZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1YcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9GbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPUhvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGFkPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVhzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9GbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPUhvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksY2Q9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1cuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49WHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP0ZvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPUhvKHIpLHU9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi51P3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxtbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztXLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSx1ZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pnttbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxsZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVFsKSxtbi5pbml0KGUsdCl9KSxkZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVlsKSxtbi5pbml0KGUsdCl9KSxwZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPVplKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxoZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7WmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxmZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtaZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBUbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmtlKG4sZS5pc3N1ZXMpKX1jb25zdCBtZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5UbyhyLG4sdC5wcm9wZXJ0eSkpO1RvKG8sbix0LnByb3BlcnR5KX19KSxnZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e1cuaW5pdChlLHQpLEJvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTt1IGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaCh1LnRoZW4obD0+VG8obCxvLGEpKSkpOlRvKHUsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksYmQ9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Vy5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx2ZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Vy5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgeWR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCBfZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LHg9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPV9kO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLHUsbCk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9ZmUoaSksbTtmb3IoY29uc3QgYiBvZiB1KXtpZihiLl96b2QuZGVmLndoZW4pe2lmKGFsKGkpfHwhYi5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKHZzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO3ZzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+aSk6aX0sYT0oaSx1LGwpPT57aWYoZmUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyh1LHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShpLHUpPT57aWYodS5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSx1KTtpZih1LmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLnUsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+YShtLGksdSkpOmEoZCxpLHUpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGksdSk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKHUuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7cmV0dXJuIGwudGhlbihkPT5zKGQscix1KSl9cmV0dXJuIHMobCxyLHUpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBCbyh0aGlzLCJ+c3RhbmRhcmQiLG5pKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7TmUodGhpcywifnN0YW5kYXJkIixlKX19KSxrZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PlNlKG4sdCx0ZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBpZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4ga2QoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIG5pKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4ga2QobyxuKX1jYXRjaHt9cmV0dXJuIGlnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IGduPXAoIiRab2RTdHJpbmciLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9IbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEg9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pnttbi5pbml0KGUsdCksZ24uaW5pdChlLHQpfSksd2Q9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUlsKSxILmluaXQoZSx0KX0pLCRkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bXQobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW10KCkpO0guaW5pdChlLHQpfSksU2Q9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1QbCksSC5pbml0KGUsdCl9KSxvaT0xLFF0PTI7ZnVuY3Rpb24gcmkoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiB6ZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP3JpKGUpfHxRdDpUZChlLHQpfWZ1bmN0aW9uIFRkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1Xcy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gb2k7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/UXR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIFF0fX1jb25zdCBhZz0vW1x0XG5ccl0vZztmdW5jdGlvbiB3cyhlKXtyZXR1cm4gZS5yZXBsYWNlKGFnLCIiKX1mdW5jdGlvbiBJZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBQZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCB4ZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj16ZChvLHQpO2lmKHI9PT1vaSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1RdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9d3Mobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFJZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhUGQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6d3Mobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksQ2Q9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1DbCgpKSxILmluaXQoZSx0KX0pLEVkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9TbDp6bCh0Lmxlbmd0aCkpLEguaW5pdChlLHQpfSksQWQ9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXlsKSxILmluaXQoZSx0KX0pLE9kPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49X2wpLEguaW5pdChlLHQpfSksUmQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWtsKSxILmluaXQoZSx0KX0pLFpkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXdsKSxILmluaXQoZSx0KX0pLE5kPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49JGwpLEguaW5pdChlLHQpfSksamQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1GbCh0KSksSC5pbml0KGUsdCl9KSxNZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TGwpLEguaW5pdChlLHQpfSkscWQ9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVsKHQpKSxILmluaXQoZSx0KX0pLERkPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VGwpLEguaW5pdChlLHQpfSksTGQ9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUVsKSxILmluaXQoZSx0KX0pLGNnPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBzaShlKXtyZXR1cm4gY2cudGVzdChlKT9yaShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IFVkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1BbCksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntzaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxGZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1PbCh0LmRlbGltaXRlcikpLEguaW5pdChlLHQpfSksSGQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49UmwpLEguaW5pdChlLHQpfSk7ZnVuY3Rpb24gQmQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOnNpKG4pfWNvbnN0IFZkPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVpsKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0JkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gaWkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBKZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sS2Q9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SmQpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxhaT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gV2QoZSl7aWYoIWFpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gaWkobil9Y29uc3QgR2Q9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YWkpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57V2Qobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxRZD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TWwpLEguaW5pdChlLHQpfSksdWc9L1stIF0vZztmdW5jdGlvbiBsZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBZZChlKXtyZXR1cm4gR3MudGVzdChlKT9sZyhlLnJlcGxhY2UodWcsIiIpKTohMX1jb25zdCBYZD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49R3MpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57WWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGRnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGVwKGUpe3JldHVybiBRcy50ZXN0KGUpP2RnKGUpOiExfWNvbnN0IHRwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1RcyksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntlcChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBucChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IG9wPXAoIiRab2RKV1QiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntucChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHJwPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksY2k9cCgiJFpvZE51bWJlciIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1ZbyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxzcD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3RkLmluaXQoZSx0KSxjaS5pbml0KGUsdCl9KSx1aT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1LbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGxpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49VmwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxpcD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e25kLmluaXQoZSx0KSxsaS5pbml0KGUsdCl9KSxhcD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxjcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPUdsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHVwPXAoIiRab2ROdWxsIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVdsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxscD1wKCIkWm9kQW55IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksZHA9cCgiJFpvZFVua25vd24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxwcD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxocD1wKCIkWm9kVm9pZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGZwPXAoIiRab2REYXRlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gdHUoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5rZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IG1wPXAoIiRab2RBcnJheSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCB1PTA7dTxzLmxlbmd0aDt1Kyspe2NvbnN0IGw9c1t1XSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4obT0+dHUobSxvLHUpKSk7ZWxzZSBpZih0dShkLG8sdSksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmZmUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gSW8oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLmtlKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgcGc9W107ZnVuY3Rpb24gZ3AoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOnBnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1RdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIGJwKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sdT1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihmZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKHUuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IHc9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTt3IGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2gody50aGVuKCQ9PklvKCQsbixfLHQsbSxiKSkpOklvKHcsbixfLHQsbSxiKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IHZwPXAoIiRab2RPYmplY3QiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9YW4oKCk9PmdwKHQpKTtPKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHxzdChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPWh0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCB1PWRlLm1lbW9pemVyO3U/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9dT91LmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IHc9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGkuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoZmUobCx3KSlicmVhazt3PWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTj12WyRdLEk9Ti5fem9kLm9wdGluLEc9Ti5fem9kLm9wdG91dCxvZT1OLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChvZS50aGVuKEo9PklvKEosbCwkLG0sSSxHKSkpOklvKG9lLGwsJCxtLEksRyl9cmV0dXJuIGE/YnAoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLHlwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57dnAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89YW4oKCk9PmdwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSx3PV8uc3ltYm9sS2V5cywkPW5ldyB5ZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6d30pLE49Sj0+YHNoYXBlWyR7Sn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Sn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLEk9KEosQik9PmAKICAgICAgICAgIGxldCAke0p9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Sn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Sn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7Qn0sIC4uLmlzcy5wYXRoXSA6IFske0J9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0p9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0p9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBHPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKUdbSl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKXtpZihKPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgQj1HW0pdLGdlPXR5cGVvZiBKPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihKKX1dYDpKdShKKSxrPWAke2dlfSBpbiBpbnB1dGAsej12W0pdLEs9ej8uX3pvZD8ub3B0aW4scmU9SyE9PXZvaWQgMCxPZT16Py5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7Qn0gPSAke04oZ2UpfTtgKSxyZSYmT2Upe2NvbnN0IGN0PUs9PT0ib3B0aW9uYWwiP2Ake0J9X3ByZXNlbnRgOmAke0J9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtCfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0J9X3ByZXNlbnQgPSAke2t9OwogICAgICAgIGlmICghJHtCfS5pc3N1ZXMubGVuZ3RoIHx8ICR7Qn1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7Qn0uaXNzdWVzLmxlbmd0aCkgeyR7SShCLGdlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtjdH0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7Qn0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSByZT8oJC53cml0ZShgCiAgICAgICAgaWYgKCR7Qn0uaXNzdWVzLmxlbmd0aCkgeyR7SShCLGdlKX0KICAgICAgICB9CiAgICAgIGApLEs9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHtnZX1dID0gJHtCfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtCfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7a30pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0J9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOiQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7Qn1fcHJlc2VudCA9ICR7a307CiAgICAgICAgaWYgKCR7Qn0uaXNzdWVzLmxlbmd0aCkgeyR7SShCLGdlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0J9X3ByZXNlbnQgJiYgISR7Qn0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7Z2V9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7Qn1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7Qn0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuICQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksJC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksJC5jb21waWxlKCl9O2xldCBhO2NvbnN0IGk9aHQsdT0hZGUuaml0bGVzcyxkPXUmJld1LnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgYjtlLl96b2QucGFyc2U9KHYsXyk9PntiPz8oYj1vLnZhbHVlKTtjb25zdCB3PXYudmFsdWU7cmV0dXJuIGkodyk/dSYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGF8fChhPXModC5zaGFwZSkpLHY9YSh2LF8pLG0/YnAoW10sdyx2LF8sYixlLF8/LmFib3J0RWFybHk9PT0hMCk6dik6bih2LF8pOih2Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OncsaW5zdDplfSksdil9fSk7ZnVuY3Rpb24gbnUoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFmZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGE9PlNlKGEsbyx0ZSgpKSkpfSksdCl9Y29uc3QgZXI9cCgiJFpvZFVuaW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIik/ImRlZmF1bHRlZCI6by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbiE9PXZvaWQgMCk/Im9wdGlvbmFsIjp2b2lkIDApLE8oZSwib3B0b3V0IixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpPyJvcHRpb25hbCI6dm9pZCAwKSxPKGUsInZhbHVlcyIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnZhbHVlcykpcmV0dXJuIG5ldyBTZXQoby5kZWYub3B0aW9ucy5mbGF0TWFwKHI9PkFycmF5LmZyb20oci5fem9kLnZhbHVlcykpKX0pLE8oZSwicGF0dGVybiIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnBhdHRlcm4pKXtjb25zdCByPW8uZGVmLm9wdGlvbnMubWFwKHM9PnMuX3pvZC5wYXR0ZXJuKTtyZXR1cm4gbmV3IFJlZ0V4cChgXigke3IubWFwKHM9PlVlKHMuc291cmNlKSkuam9pbigifCIpfSkkYCl9fSk7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgaSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaCh1KSxzPSEwO2Vsc2V7aWYodS5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdTthLnB1c2godSl9fXJldHVybiBzP1Byb21pc2UuYWxsKGEpLnRoZW4oaT0+bnUoaSxvLGUscikpOm51KGEsbyxlLHIpfX0pO2Z1bmN0aW9uIG91KGUsdCxuLG8pe2NvbnN0IHI9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspZVtzXS5pc3N1ZXMubGVuZ3RoPT09MCYmci5wdXNoKHMpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9ZVtyWzBdXS52YWx1ZSx0KTooci5sZW5ndGg9PT0wP3QuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoYT0+U2UoYSxvLHRlKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0IF9wPXAoIiRab2RYb3IiLChlLHQpPT57ZXIuaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgdC5vcHRpb25zKXtjb25zdCB1PWkuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTt1IGluc3RhbmNlb2YgUHJvbWlzZT8oYS5wdXNoKHUpLHM9ITApOmEucHVzaCh1KX1yZXR1cm4gcz9Qcm9taXNlLmFsbChhKS50aGVuKGk9Pm91KGksbyxlLHIpKTpvdShhLG8sZSxyKX19KTtmdW5jdGlvbiBkaShlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89a3Aobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24ga3AoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCB3cD1wKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLGVyLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTtPKGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBhPTA7Zm9yKGNvbnN0IGkgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgdT1pLl96b2QucHJvcFZhbHVlcztpZighdXx8T2JqZWN0LmtleXModSkubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGkpfSJgKTt1W3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmYSsrO2Zvcihjb25zdFtsLGRdb2YgT2JqZWN0LmVudHJpZXModSkpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGwpfHxzdChzLGwsbmV3IFNldCk7Zm9yKGNvbnN0IG0gb2YgZClzW2xdLmFkZChtKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmE+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgYT1xbyhyLl96b2QuZGVmKTtpZihhJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPWFuKCgpPT5rcCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO2lmKCFodChhKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDphLGluc3Q6ZX0pLHI7Y29uc3QgaT1hPy5bdC5kaXNjcmltaW5hdG9yXSx1PW8udmFsdWUuZ2V0KGkpO3JldHVybiB1JiYoaSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT91Ll96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIobD0+by52YWx1ZS5nZXQobCkhPT1udWxsKSxpbnB1dDphLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksJHA9cCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxhPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGEgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGFdKS50aGVuKChbdSxsXSk9PnJ1KG4sdSxsKSk6cnUobixzLGEpfX0pO2Z1bmN0aW9uIFBvKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoSGUoZSkmJkhlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBhPVBvKGVbc10sdFtzXSk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWEuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxhPVBvKHIscyk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goYS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uIHJ1KGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGE9KGwsZCk9PntsZXQgbTtpZihsLmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhbC5wYXRoPy5sZW5ndGgpcj8/KHI9bCksbT1sLmtleXM7ZWxzZSBpZihsLmNvZGU9PT0iaW52YWxpZF9rZXkiJiZsLm9yaWdpbj09PSJyZWNvcmQiJiZsLnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGI9U3RyaW5nKGwucGF0aFswXSk7cy5oYXMoYil8fHMuc2V0KGIsbCksbT1bYl19ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgYiBvZiBtKW8uaGFzKGIpfHxvLnNldChiLHt9KSxvLmdldChiKVtkXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IGwgb2YgdC5pc3N1ZXMpYShsLCJsIil8fGUuaXNzdWVzLnB1c2gobCk7Zm9yKGNvbnN0IGwgb2Ygbi5pc3N1ZXMpYShsLCJyIil8fGUuaXNzdWVzLnB1c2gobCk7Y29uc3QgaT1bLi4ub10uZmlsdGVyKChbLGxdKT0+bC5sJiZsLnIpLm1hcCgoW2xdKT0+bCk7aWYoaS5sZW5ndGgpe2NvbnN0IGw9cj9pLmZpbHRlcihkPT5yLmtleXMuaW5jbHVkZXMoZCkpOltdO2wubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6bH0pO2Zvcihjb25zdCBkIG9mIGkpIWwuaW5jbHVkZXMoZCkmJnMuaGFzKGQpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGQpKX1jb25zdCB1PVBvKHQudmFsdWUsbi52YWx1ZSk7aWYoIXUudmFsaWQpe2lmKGZlKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkodS5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9dS5kYXRhLGV9Y29uc3QgcGk9cCgiJFpvZFR1cGxlIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPWRlLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBhPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmEsaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGk9W10sdT1zdShuLCJvcHRpbiIpLGw9c3Uobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoYS5sZW5ndGg8dSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnUsaW5jbHVzaXZlOiEwLGlucHV0OmEsaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjthLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6YSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBkPW5ldyBBcnJheShuLmxlbmd0aCksbT10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGI9ITE7Zm9yKGxldCB2PTA7djxuLmxlbmd0aDt2Kyspe2NvbnN0IF89blt2XS5fem9kLnJ1bih7dmFsdWU6YVt2XSxpc3N1ZXM6W119LHMpO18gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChfLnRoZW4odz0+e2Rbdl09d30pKTooZFt2XT1fLG0mJiFiJiZfLmlzc3Vlcy5sZW5ndGgmJihiPWZlKF8pKSl9aWYodC5yZXN0JiYhYil7bGV0IHY9bi5sZW5ndGgtMTtjb25zdCBfPWEuc2xpY2Uobi5sZW5ndGgpO2xldCB3PXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBfKXtpZihtJiZyLmlzc3Vlcy5sZW5ndGghPT13KXtpZihmZShyLHcpKWJyZWFrO3c9ci5pc3N1ZXMubGVuZ3RofXYrKztjb25zdCBOPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO04gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChOLnRoZW4oST0+aXUoSSxyLHYpKSk6aXUoTixyLHYpfX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+YXUoZCxyLG4sYSxsKSk6YXUoZCxyLG4sYSxsKX19KTtmdW5jdGlvbiBzdShlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIGl1KGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ua2UobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBhdShlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBhPWVbc10saT1zPG8ubGVuZ3RoO2lmKCFpJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGEuaXNzdWVzLmxlbmd0aCl7aWYoIWkmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi5rZShzLGEuaXNzdWVzKSl9dC52YWx1ZVtzXT1hLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IFNwPXAoIiRab2RSZWNvcmQiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFIZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgYT1bXSxpPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihpJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgdT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGkpaWYodHlwZW9mIGQ9PSJzdHJpbmcifHx0eXBlb2YgZD09Im51bWJlciJ8fHR5cGVvZiBkPT0ic3ltYm9sIil7aWYodS5hZGQodHlwZW9mIGQ9PSJudW1iZXIiP2QudG9TdHJpbmcoKTpkKSxkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgbT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTtpZihtIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihtLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOm0uaXNzdWVzLm1hcChfPT5TZShfLHIsdGUoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1tLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmtlKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5rZShkLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1sZXQgbDtmb3IoY29uc3QgZCBpbiBzKWlmKCF1LmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgbD1sPz9bXSxsLnB1c2goZCk7bCYmbC5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6bCxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCB1O2Zvcihjb25zdCBsIG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYobD09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsbCkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIGw9PSJzdHJpbmciJiZZby50ZXN0KGwpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIobCksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVtsXT1zW2xdOmk/KHU9dT8/W10sdS5wdXNoKGwpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+U2UoXyxyLHRlKCkpKSxpbnB1dDpsLHBhdGg6W2xdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9ZC52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tsXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh2LnRoZW4oXz0+e18uaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5rZShsLF8uaXNzdWVzKSksby52YWx1ZVtiXT1fLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ua2UobCx2Lmlzc3VlcykpLG8udmFsdWVbYl09di52YWx1ZSl9dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5vKTpvfX0pLHpwPXAoIiRab2RNYXAiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJtYXAiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGE9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBNYXAscik6bmV3IE1hcDtjb25zdCBpPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdFtsLGRdb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpLGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTttIGluc3RhbmNlb2YgUHJvbWlzZXx8YiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFByb21pc2UuYWxsKFttLGJdKS50aGVuKChbdixfXSk9PntjdSh2LF8sbyxsLHMsZSxyKX0pKTpjdShtLGIsbyxsLHMsZSxyKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBjdShlLHQsbixvLHIscyxhKXtlLmlzc3Vlcy5sZW5ndGgmJihTby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ua2UobyxlLmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46Im1hcCIsaW5wdXQ6cixpbnN0OnMsaXNzdWVzOmUuaXNzdWVzLm1hcChpPT5TZShpLGEsdGUoKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFNvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5rZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChpPT5TZShpLGEsdGUoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgVHA9cCgiJFpvZFNldCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgYT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGk9cj8uYWJvcnRFYXJseTtsZXQgdT1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IGwgb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKGQudGhlbihtPT51dShtLG8pKSk6dXUoZCxvKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiB1dShlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgSXA9cCgiJFpvZEVudW0iLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1tcyh0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sTyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1tcyhyLmRlZi5lbnRyaWVzKS5maWx0ZXIoYT0+U28uaGFzKHR5cGVvZiBhKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChhPT5aZShhLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO3JldHVybiBvLmhhcyhhKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6YSxpbnN0OmV9KSxyfX0pLFBwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLE8oZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP1plKHMpOnM/WmUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLHhwPXAoIiRab2RGaWxlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxDcD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLGRlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFZvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGE9PihuLnZhbHVlPWEsbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gbHUoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBoaT1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsTyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLE8oZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7VWUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5sdShuLHMpKTpsdShuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLEVwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e2hpLmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLEFwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtVZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksT3A9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+ZHUocyx0KSk6ZHUocix0KX19KTtmdW5jdGlvbiBkdShlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBScD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksWnA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5wdShzLGUpKTpwdShyLGUpfX0pO2Z1bmN0aW9uIHB1KGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBOcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFZvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBodShlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PlNlKHIsbyx0ZSgpKSl9LGlucHV0OmUudmFsdWV9KSxlKTooZS52YWx1ZT10LnZhbHVlLHQubWVtbyYmKGUubWVtbz0hMCksZSl9Y29uc3QganA9cCgiJFpvZENhdGNoIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pmh1KG4scyx0LG8pKTpodShuLHIsdCxvKX19KSxNcD1wKCIkWm9kTmFOIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KCh0eXBlb2Ygbi52YWx1ZSE9Im51bWJlciJ8fCFOdW1iZXIuaXNOYU4obi52YWx1ZSkpJiZuLmlzc3Vlcy5wdXNoKHtpbnB1dDpuLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoibmFuIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbil9KSxmaT1wKCIkWm9kUGlwZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLE8oZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLE8oZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PnBvKGEsdC5pbixvKSk6cG8ocyx0LmluLG8pfWNvbnN0IHI9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+cG8ocyx0Lm91dCxvKSk6cG8ocix0Lm91dCxvKX19KTtmdW5jdGlvbiBwbyhlLHQsbil7cmV0dXJuIGUuaXNzdWVzLnNvbWUobz0+by5jb2RlIT09InVucmVjb2duaXplZF9rZXlzIik/KGUuYWJvcnRlZD0hMCxlKTp0Ll96b2QucnVuKHt2YWx1ZTplLnZhbHVlLGlzc3VlczplLmlzc3Vlc30sbil9Y29uc3QgbWk9cCgiJFpvZENvZGVjIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKChvLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcz10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT5obyhhLHQsbykpOmhvKHMsdCxvKX1lbHNle2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PmhvKGEsdCxvKSk6aG8ocyx0LG8pfX19KTtmdW5jdGlvbiBobyhlLHQsbil7aWYoZS5pc3N1ZXMubGVuZ3RoKXJldHVybiBlLmFib3J0ZWQ9ITAsZTtpZigobi5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHI9dC50cmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmZvKGUscyx0Lm91dCxuKSk6Zm8oZSxyLHQub3V0LG4pfWVsc2V7Y29uc3Qgcj10LnJldmVyc2VUcmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmZvKGUscyx0LmluLG4pKTpmbyhlLHIsdC5pbixuKX19ZnVuY3Rpb24gZm8oZSx0LG4sbyl7cmV0dXJuIGUuaXNzdWVzLmxlbmd0aD8oZS5hYm9ydGVkPSEwLGUpOm4uX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOmUuaXNzdWVzfSxvKX1jb25zdCBxcD1wKCIkWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntmaS5pbml0KGUsdCl9KSxEcD1wKCIkWm9kUmVhZG9ubHkiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKSxPKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihmdSk6ZnUocil9fSk7ZnVuY3Rpb24gZnUoZSl7cmV0dXJuIGUubWVtb3x8KGUudmFsdWU9T2JqZWN0LmZyZWV6ZShlLnZhbHVlKSksZX1mdW5jdGlvbiBoZyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7bGV0IG49dC5wYXR0ZXJuLG89ISF0LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLHIscztmb3IoY29uc3QgaSBvZiB0LmNoZWNrcz8/W10pe2NvbnN0IHU9aS5fem9kLmRlZjt1LnBhdHRlcm4mJihuPXUucGF0dGVybiksb3x8KG89ISF1LmZvcm1hdD8uaW5jbHVkZXMoImludCIpKTtjb25zdCBsPXUubWluaW11bT8/dS5sZW5ndGgsZD11Lm1heGltdW0/P3UubGVuZ3RoO2whPT12b2lkIDAmJihyPT09dm9pZCAwfHxsPnIpJiYocj1sKSxkIT09dm9pZCAwJiYocz09PXZvaWQgMHx8ZDxzKSYmKHM9ZCl9aWYobilyZXR1cm4gbi5zb3VyY2U7aWYociE9PXZvaWQgMCYmcyE9PXZvaWQgMCYmcj5zKXJldHVybiIoPyEpIjtpZihyIT09dm9pZCAwfHxzIT09dm9pZCAwKXJldHVybiBCbCh7bWluaW11bTpyLG1heGltdW06c30pLnNvdXJjZTtjb25zdCBhPWUuX3pvZC5wYXR0ZXJuO3JldHVybihvJiZhPT09WW8/Smw6YSk/LnNvdXJjZX1mdW5jdGlvbiAkcyhlKXtjb25zdCB0PWUuX3pvZC5kZWYsbj1lLl96b2QucGF0dGVybj8uc291cmNlLG89dC5pbm5lclR5cGU/P2UuX3pvZC5pbm5lclR5cGU7aWYobyl7Y29uc3Qgcj1vLl96b2QucGF0dGVybj8uc291cmNlLHM9JHMobyk7cmV0dXJuIG4mJnImJnMmJnMhPT1yP24ucmVwbGFjZShVZShyKSwoKT0+VWUocykpOm59aWYodC5vcHRpb25zKXtjb25zdCByPXQub3B0aW9ucy5tYXAoJHMpO2lmKHIuZXZlcnkoQm9vbGVhbikpcmV0dXJuYF4oJHtyLm1hcChzPT5VZShzKSkuam9pbigifCIpfSkkYH1yZXR1cm4gaGcoZSl9Y29uc3QgTHA9cCgiJFpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQucGFydHMpaWYodHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCl7Y29uc3Qgcj0kcyhvKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5vLl96b2QudHJhaXRzXS5zaGlmdCgpfWApO24ucHVzaChVZShyKSl9ZWxzZSBpZihvPT09bnVsbHx8R3UuaGFzKHR5cGVvZiBvKSluLnB1c2goWmUoYCR7b31gKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke299YCk7ZS5fem9kLnBhdHRlcm49bmV3IFJlZ0V4cChgXiR7bi5qb2luKCIiKX0kYCksZS5fem9kLnBhcnNlPShvLHIpPT50eXBlb2Ygby52YWx1ZSE9InN0cmluZyI/KG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvKTooZS5fem9kLnBhdHRlcm4ubGFzdEluZGV4PTAsZS5fem9kLnBhdHRlcm4udGVzdChvLnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdD8/InRlbXBsYXRlX2xpdGVyYWwiLHBhdHRlcm46ZS5fem9kLnBhdHRlcm4uc291cmNlfSksbyl9KSxVcD1wKCIkWm9kRnVuY3Rpb24iLChlLHQpPT4oeC5pbml0KGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9kZWYiLHt2YWx1ZTp0fSksZS5fem9kLmRlZj10LGUuaW1wbGVtZW50PW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/eXMoZS5fZGVmLmlucHV0LG8pOm8scz1SZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD95cyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5pbXBsZW1lbnRBc3luYz1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmMgZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/YXdhaXQgX3MoZS5fZGVmLmlucHV0LG8pOm8scz1hd2FpdCBSZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9hd2FpdCBfcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5fem9kLnBhcnNlPShuLG8pPT50eXBlb2Ygbi52YWx1ZSE9ImZ1bmN0aW9uIj8obi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoiZnVuY3Rpb24iLGlucHV0Om4udmFsdWUsaW5zdDplfSksbik6KGUuX2RlZi5vdXRwdXQmJmUuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZT09PSJwcm9taXNlIj9uLnZhbHVlPWUuaW1wbGVtZW50QXN5bmMobi52YWx1ZSk6bi52YWx1ZT1lLmltcGxlbWVudChuLnZhbHVlKSxuKSxlLmlucHV0PSguLi5uKT0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuWzBdKT9uZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5ldyBwaSh7dHlwZToidHVwbGUiLGl0ZW1zOm5bMF0scmVzdDpuWzFdfSksb3V0cHV0OmUuX2RlZi5vdXRwdXR9KTpuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5bMF0sb3V0cHV0OmUuX2RlZi5vdXRwdXR9KX0sZS5vdXRwdXQ9bj0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDplLl9kZWYuaW5wdXQsb3V0cHV0Om59KX0sZSkpLEZwPXAoIiRab2RQcm9taXNlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUpLnRoZW4ocj0+dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSl9KSxnaT1wKCIkWm9kTGF6eSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxIdShlLl96b2QsImlubmVyVHlwZSIsKCk9Pntjb25zdCBuPXQ7cmV0dXJuIG4uX2NhY2hlZElubmVyfHwobi5fY2FjaGVkSW5uZXI9dC5nZXR0ZXIoKSksbi5fY2FjaGVkSW5uZXJ9KSxPKGUsInBhdHRlcm4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKSxPKGUsInByb3BWYWx1ZXMiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4/P3ZvaWQgMCksTyhlLCJvcHRvdXQiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQ/P3ZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5lLl96b2QuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxIcD1wKCIkWm9kQ3VzdG9tIiwoZSx0KT0+e1cuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+bixlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89bi52YWx1ZSxyPXQuZm4obyk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHIudGhlbihzPT5tdShzLG4sbyxlKSk7bXUocixuLG8sZSl9fSk7ZnVuY3Rpb24gbXUoZSx0LG4sbyl7aWYoIWUpe2NvbnN0IHI9e2NvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om8scGF0aDpbLi4uby5fem9kLmRlZi5wYXRoPz9bXV0sY29udGludWU6IW8uX3pvZC5kZWYuYWJvcnR9O28uX3pvZC5kZWYucGFyYW1zJiYoci5wYXJhbXM9by5fem9kLmRlZi5wYXJhbXMpLHQuaXNzdWVzLnB1c2goZnQocikpfX1jbGFzcyBCcCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwYXJzZSBhIHJlZmVyZW5jZSBjeWNsZSB0aGF0IGNsb3NlcyB0aHJvdWdoIGEgdHJhbnNmb3JtIiksdGhpcy5uYW1lPSJab2RDeWNsaWNFcnJvciJ9fWNvbnN0IFNzPSJ+bWVtbyIsZ3U9W107ZnVuY3Rpb24gVnAoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCJ9ZnVuY3Rpb24gZHMoZSl7cmV0dXJuIGUubWFwKHQ9PnQucGF0aD97Li4udCxwYXRoOnQucGF0aC5zbGljZSgpfTp7Li4udH0pfWNvbnN0IEpwPW5ldyBXZWFrTWFwLGx0PTAseW89MSxCdD0yO2Z1bmN0aW9uIFZ0KGUsdCxuKXtjb25zdCBvPUpwLmdldChlKTtpZihvIT09dm9pZCAwKXJldHVybiBvP0J0Omx0O2lmKHQuaGFzKGUpKXJldHVybiBCdDt0LmFkZChlKTtsZXQgcj1sdDtjb25zdCBzPWQ9PntpZihyIT09QnQmJmQ/Ll96b2Qpe2NvbnN0IG09VnQoZCx0LG4pO20+ciYmKHI9bSl9fSxhPShkLG0pPT57bGV0IGI9bHQ7Zm9yKGNvbnN0IHYgb2YgUmVmbGVjdC5vd25LZXlzKGQpKXtjb25zdCBfPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx2KTtpZighXy5lbnVtZXJhYmxlKWNvbnRpbnVlO2NvbnN0IHc9Xy5nZXQ/eW86Xy52YWx1ZT8uX3pvZD9WdChfLnZhbHVlLHQsbik6bHQ7dz5iJiYoYj13KX1yZXR1cm4gYn0saT1kPT57ZD5yJiYocj1kKX0sdT1lLl96b2QuZGVmO3N3aXRjaCh1LnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgZD1xbyh1KTtpKGQ/YShkKTp5bykscyh1LmNhdGNoYWxsKTticmVha31jYXNlImFycmF5IjpzKHUuZWxlbWVudCk7YnJlYWs7Y2FzZSJ0dXBsZSI6Zm9yKGNvbnN0IGQgb2YgdS5pdGVtcylzKGQpO3ModS5yZXN0KTticmVhaztjYXNlInJlY29yZCI6Y2FzZSJtYXAiOnModS5rZXlUeXBlKSxzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInNldCI6cyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJ1bmlvbiI6Zm9yKGNvbnN0IGQgb2YgdS5vcHRpb25zKXMoZCk7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOnModS5sZWZ0KSxzKHUucmlnaHQpO2JyZWFrO2Nhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOnModS5pbm5lclR5cGUpO2JyZWFrO2Nhc2UicGlwZSI6cyh1LmluKSxzKHUub3V0KTticmVhaztjYXNlImZ1bmN0aW9uIjpzKHUuaW5wdXQpLHModS5vdXRwdXQpO2JyZWFrO2Nhc2UibGF6eSI6e2NvbnN0IGQ9dS5fY2FjaGVkSW5uZXI/PyhuP2UuX3pvZC5pbm5lclR5cGU6dm9pZCAwKTtpKGQ/VnQoZCx0LCExKTp5byk7YnJlYWt9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6Zm9yKGNvbnN0IGQgaW4gdSl7Y29uc3QgbT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsZCk7aWYoIW18fG0uZ2V0KWNvbnRpbnVlO2NvbnN0IGI9bS52YWx1ZTtpZighKCFifHx0eXBlb2YgYiE9Im9iamVjdCIpKXtpZihiLl96b2QpcyhiKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYikpZm9yKGNvbnN0IHYgb2YgYilzKHYpfX19cmV0dXJuIHQuZGVsZXRlKGUpLGZnKGUscil9ZnVuY3Rpb24gZmcoZSx0KXtyZXR1cm4gdCE9PXlvJiZKcC5zZXQoZSx0PT09QnQpLHR9ZnVuY3Rpb24gbWcoZSl7cmV0dXJuIFZ0KGUsbmV3IFNldCwhMCkhPT1sdH1mdW5jdGlvbiBnZyhlLHQpe2xldCBuPWUuYnVja2V0cy5nZXQodCk7cmV0dXJuIG58fChuPW5ldyBXZWFrTWFwLGUuYnVja2V0cy5zZXQodCxuKSksbn1sZXQgbW87Y29uc3QgZ289W10sYmc9e2FsbG9jKGUsdCxuKXtjb25zdCBvPW1vO2lmKCFvKXJldHVybiBuO21vPXZvaWQgMDtjb25zdCByPXt2YWx1ZTpuLGlzc3VlczpudWxsfTtyZXR1cm4gby5zZXQodC52YWx1ZSxyKSxnby5wdXNoKHIpLG59LGd1YXJkKGUpe3ZhciB0Oyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IG49ZS5fem9kLnBhcnNlLG89KHIscyk9PntpZihzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCImJktwKHMsci52YWx1ZSkpdGhyb3cgbmV3IEJwO3JldHVybiBuKHIscyl9O2UuX3pvZC5wYXJzZT1vLGUuX3pvZC5ydW49PT1uJiYoZS5fem9kLnJ1bj1vKX0pfSxhdHRhY2goZSl7dmFyIHQ7bGV0IG4sbz0hMSxyLHM7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3QgYT1lLl96b2QucGFyc2UsaT0odSxsKT0+e2lmKG49PT12b2lkIDApe2NvbnN0IE49VnQoZSxuZXcgU2V0LCExKTtpZihOPT09bHQpcmV0dXJuIGUuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKSxhKHUsbCk7Tj09PUJ0fHxvP249ITA6bz0hMH1jb25zdCBkPXUudmFsdWU7aWYoIVZwKGQpKXJldHVybiBhKHUsbCk7bGV0IG09bFtTc107bXx8KG09e2J1Y2tldHM6bmV3IFdlYWtNYXAsYmFja0VkZ2VzOnZvaWQgMH0sbFtTc109bSk7bGV0IGI7cj09PWw/Yj1zOihiPWdnKG0sZSkscj1sLHM9Yik7Y29uc3Qgdj1iLmdldChkKTtpZih2KXJldHVybiB1LnZhbHVlPXYudmFsdWUsdi5pc3N1ZXM/di5pc3N1ZXMubGVuZ3RoJiZ1Lmlzc3Vlcy5wdXNoKC4uLmRzKHYuaXNzdWVzKSk6KHUubWVtbz0hMCxtLmJhY2tFZGdlcz8/KG0uYmFja0VkZ2VzPW5ldyBXZWFrU2V0KSxtLmJhY2tFZGdlcy5hZGQodi52YWx1ZSkpLHU7bW89Yjtjb25zdCBfPWdvLmxlbmd0aCx3PWEodSxsKTttbz12b2lkIDA7Y29uc3QgJD1nby5sZW5ndGg+Xz9nby5wb3AoKTp2b2lkIDA7cmV0dXJuIHcgaW5zdGFuY2VvZiBQcm9taXNlP3cudGhlbihOPT4oJCYmKCQuaXNzdWVzPU4uaXNzdWVzLmxlbmd0aD9kcyhOLmlzc3Vlcyk6Z3UpLE4pKTooJCYmKCQuaXNzdWVzPXcuaXNzdWVzLmxlbmd0aD9kcyh3Lmlzc3Vlcyk6Z3UpLHcpfTtlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSl9KX19O2Z1bmN0aW9uIHRyKCl7cmV0dXJuIGJnfWZ1bmN0aW9uIEtwKGUsdCl7Y29uc3Qgbj1lW1NzXT8uYmFja0VkZ2VzO3JldHVybiBuIT09dm9pZCAwJiZWcCh0KSYmbi5oYXModCl9Y29uc3Qgdmc9KCk9Pntjb25zdCBlPXtzdHJpbmc6e3VuaXQ6ImNoYXJhY3RlcnMiLHZlcmI6InRvIGhhdmUifSxmaWxlOnt1bml0OiJieXRlcyIsdmVyYjoidG8gaGF2ZSJ9LGFycmF5Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LHNldDp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxtYXA6e3VuaXQ6ImVudHJpZXMiLHZlcmI6InRvIGhhdmUifX07ZnVuY3Rpb24gdChzKXtyZXR1cm4gZVtzXT8/bnVsbH1jb25zdCBuPXtyZWdleDoiaW5wdXQiLGVtYWlsOiJlbWFpbCBhZGRyZXNzIix1cmw6IlVSTCIsZW1vamk6ImVtb2ppIix1dWlkOiJVVUlEIix1dWlkdjQ6IlVVSUR2NCIsdXVpZHY2OiJVVUlEdjYiLG5hbm9pZDoibmFub2lkIixndWlkOiJHVUlEIixjdWlkOiJjdWlkIixjdWlkMjoiY3VpZDIiLHVsaWQ6IlVMSUQiLHhpZDoiWElEIixrc3VpZDoiS1NVSUQiLGRhdGV0aW1lOiJJU08gZGF0ZXRpbWUiLGRhdGU6IklTTyBkYXRlIix0aW1lOiJJU08gdGltZSIsZHVyYXRpb246IklTTyBkdXJhdGlvbiIsaXB2NDoiSVB2NCBhZGRyZXNzIixpcHY2OiJJUHY2IGFkZHJlc3MiLG1hYzoiTUFDIGFkZHJlc3MiLGNpZHJ2NDoiSVB2NCByYW5nZSIsY2lkcnY2OiJJUHY2IHJhbmdlIixiYXNlNjQ6ImJhc2U2NC1lbmNvZGVkIHN0cmluZyIsYmFzZTY0dXJsOiJiYXNlNjR1cmwtZW5jb2RlZCBzdHJpbmciLGpzb25fc3RyaW5nOiJKU09OIHN0cmluZyIsZTE2NDoiRS4xNjQgbnVtYmVyIixjdXJyZW5jeV9jb2RlOiJjdXJyZW5jeSBjb2RlIixjcmVkaXRfY2FyZDoiY3JlZGl0IGNhcmQgbnVtYmVyIixpYmFuOiJJQkFOIixqd3Q6IkpXVCIsdGVtcGxhdGVfbGl0ZXJhbDoiaW5wdXQifSxvPXtuYW46Ik5hTiJ9O2Z1bmN0aW9uIHIocyxhKXtyZXR1cm4gcz09PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJiFOdW1iZXIuaXNGaW5pdGUoYSk/U3RyaW5nKGEpOm9bc10/P3N9cmV0dXJuIHM9Pntzd2l0Y2gocy5jb2RlKXtjYXNlImludmFsaWRfdHlwZSI6e2NvbnN0IGE9cihzLmV4cGVjdGVkKSxpPWNsKHMuaW5wdXQpLHU9cihpLHMuaW5wdXQpO3JldHVybmBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke2F9LCByZWNlaXZlZCAke3V9YH1jYXNlImludmFsaWRfdmFsdWUiOnJldHVybiBzLnZhbHVlcy5sZW5ndGg9PT0xP2BJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke1JzKHMudmFsdWVzWzBdKX1gOmBJbnZhbGlkIG9wdGlvbjogZXhwZWN0ZWQgb25lIG9mICR7Z3Mocy52YWx1ZXMsInwiKX1gO2Nhc2UidG9vX2JpZyI6e2NvbnN0IGE9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI8PSI6IjwiLGk9dChzLm9yaWdpbik7cmV0dXJuIGk/YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGhhdmUgJHthfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0Pz8iZWxlbWVudHMifWA6YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGJlICR7YX0ke3MubWF4aW11bS50b1N0cmluZygpfWB9Y2FzZSJ0b29fc21hbGwiOntjb25zdCBhPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPj0iOiI+IixpPXQocy5vcmlnaW4pO3JldHVybiBpP2BUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGhhdmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0fWA6YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gYmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9YH1jYXNlImludmFsaWRfZm9ybWF0Ijp7Y29uc3QgYT1zO3JldHVybiBhLmZvcm1hdD09PSJzdGFydHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IHN0YXJ0IHdpdGggIiR7YS5wcmVmaXh9ImA6YS5mb3JtYXQ9PT0iZW5kc193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggIiR7YS5zdWZmaXh9ImA6YS5mb3JtYXQ9PT0iaW5jbHVkZXMiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBpbmNsdWRlICIke2EuaW5jbHVkZXN9ImA6YS5mb3JtYXQ9PT0icmVnZXgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7YS5wYXR0ZXJufWA6YEludmFsaWQgJHtuW2EuZm9ybWF0XT8/cy5mb3JtYXR9YH1jYXNlIm5vdF9tdWx0aXBsZV9vZiI6cmV0dXJuYEludmFsaWQgbnVtYmVyOiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtzLmRpdmlzb3J9YDtjYXNlInVucmVjb2duaXplZF9rZXlzIjpyZXR1cm5gVW5yZWNvZ25pemVkIGtleSR7cy5rZXlzLmxlbmd0aD4xPyJzIjoiIn06ICR7Z3Mocy5rZXlzLCIsICIpfWA7Y2FzZSJpbnZhbGlkX2tleSI6cmV0dXJuYEludmFsaWQga2V5IGluICR7cy5vcmlnaW59YDtjYXNlImludmFsaWRfdW5pb24iOnJldHVybiBzLm9wdGlvbnMmJkFycmF5LmlzQXJyYXkocy5vcHRpb25zKSYmcy5vcHRpb25zLmxlbmd0aD4wP2BJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7cy5vcHRpb25zLm1hcChpPT5gJyR7aX0nYCkuam9pbigiIHwgIil9YDpzLmluY2x1c2l2ZT09PSExPyJJbnZhbGlkIGlucHV0OiBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVkIjoiSW52YWxpZCBpbnB1dCI7Y2FzZSJpbnZhbGlkX2VsZW1lbnQiOnJldHVybmBJbnZhbGlkIHZhbHVlIGluICR7cy5vcmlnaW59YDtkZWZhdWx0OnJldHVybiJJbnZhbGlkIGlucHV0In19fTtmdW5jdGlvbiBXcCgpe3JldHVybntsb2NhbGVFcnJvcjp2ZygpfX1jb25zdCBiaT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW46V3B9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGJ1O2NvbnN0IHZpPVN5bWJvbCgiWm9kT3V0cHV0IikseWk9U3ltYm9sKCJab2RJbnB1dCIpO2NsYXNzIEdwe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXB9YWRkKHQsLi4ubil7Y29uc3Qgbz1uWzBdO3JldHVybiB0aGlzLl9tYXAuc2V0KHQsbyksbyYmdHlwZW9mIG89PSJvYmplY3QiJiYiaWQiaW4gbyYmdGhpcy5faWRtYXAuc2V0KG8uaWQsdCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcCx0aGlzfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIG4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmImlkImluIG4mJnRoaXMuX2lkbWFwLmRlbGV0ZShuLmlkKSx0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXN9Z2V0KHQpe2NvbnN0IG49dC5fem9kLnBhcmVudDtpZihuKXtjb25zdCBvPXsuLi50aGlzLmdldChuKT8/e319O2RlbGV0ZSBvLmlkO2NvbnN0IHI9ey4uLm8sLi4udGhpcy5fbWFwLmdldCh0KX07cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD9yOnZvaWQgMH1yZXR1cm4gdGhpcy5fbWFwLmdldCh0KX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9fWZ1bmN0aW9uIG5yKCl7cmV0dXJuIG5ldyBHcH0oYnU9Z2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnk/PyhidS5fX3pvZF9nbG9iYWxSZWdpc3RyeT1ucigpKTtjb25zdCB3ZT1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5LF9pPSgpPT57dGhyb3cgbmV3IEVycm9yKCJ6b2QgY29tcGlsZSgpIGlzIG5vdCBidW5kbGVkIGludG8gY2FyZHMgLSBzZWUgcGFja2FnZXMvaW50ZXJuYWwvY2FyZC1raXQvdml0ZS1zbGltLm1qcyIpfTtjbGFzcyBraSBleHRlbmRzIEVycm9ye31jbGFzcyB3aSBleHRlbmRzIEVycm9ye31jbGFzcyAkaSBleHRlbmRzIEVycm9ye31jb25zdCBTaT1faSx6aT1faSx5Zz1faTtmdW5jdGlvbiBvcihlKXtyZXR1cm4gZS5jaGVja3MmJihlLmNoZWNrcz1bLi4uZS5jaGVja3NdKSxlfWZ1bmN0aW9uIFFwKGUsdCl7cmV0dXJuIG5ldyBlKG9yKHt0eXBlOiJzdHJpbmciLC4uLnkodCl9KSl9ZnVuY3Rpb24gWXAoZSx0KXtyZXR1cm4gbmV3IGUob3Ioe3R5cGU6InN0cmluZyIsY29lcmNlOiEwLC4uLnkodCl9KSl9ZnVuY3Rpb24gVGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbWFpbCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBJaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imd1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gQ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjYiLC4uLnkodCl9KX1mdW5jdGlvbiBFaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NyIsLi4ueSh0KX0pfWZ1bmN0aW9uIHJyKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1vamkiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJuYW5vaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZDIiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1bGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoieGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoia3N1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBYcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im1hYyIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBMaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBVaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBGaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBIaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NHVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBCaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImUxNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gZWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB0aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImliYW4iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gVmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJqd3QiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9Y29uc3QgSmk9e0FueTpudWxsLE1pbnV0ZTotMSxTZWNvbmQ6MCxNaWxsaXNlY29uZDozLE1pY3Jvc2Vjb25kOjZ9O2Z1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZXRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixvZmZzZXQ6ITEsbG9jYWw6ITEscHJlY2lzaW9uOm51bGwsLi4ueSh0KX0pfWZ1bmN0aW9uIFdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBHaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gUWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkdXJhdGlvbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBuaChlLHQpe3JldHVybiBuZXcgZShvcih7dHlwZToibnVtYmVyIixjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBvaChlLHQpe3JldHVybiBuZXcgZShvcih7dHlwZToibnVtYmVyIixjb2VyY2U6ITAsY2hlY2tzOltdLC4uLnkodCl9KSl9ZnVuY3Rpb24gcmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoic2FmZWludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gYWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBjaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGxoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIGRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLC4uLnkodCl9KX1mdW5jdGlvbiBwaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50Iixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIGhoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gZmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gbWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN5bWJvbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGdoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmRlZmluZWQiLC4uLnkodCl9KX1mdW5jdGlvbiBiaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHZoKGUpe3JldHVybiBuZXcgZSh7dHlwZToiYW55In0pfWZ1bmN0aW9uIHloKGUpe3JldHVybiBuZXcgZSh7dHlwZToidW5rbm93biJ9KX1mdW5jdGlvbiBfaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmV2ZXIiLC4uLnkodCl9KX1mdW5jdGlvbiBraChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidm9pZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHdoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIiwuLi55KHQpfSl9ZnVuY3Rpb24gJGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gU2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5hbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGplKGUsdCl7cmV0dXJuIG5ldyBlaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIGJlKGUsdCl7cmV0dXJuIG5ldyBlaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIG5ldyB0aSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIHZlKGUsdCl7cmV0dXJuIG5ldyB0aSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIHNyKGUpe3JldHVybiBNZSgwLGUpfWZ1bmN0aW9uIGlyKGUpe3JldHVybiBqZSgwLGUpfWZ1bmN0aW9uIGFyKGUpe3JldHVybiBiZSgwLGUpfWZ1bmN0aW9uIGNyKGUpe3JldHVybiB2ZSgwLGUpfWZ1bmN0aW9uIHR0KGUsdCl7cmV0dXJuIG5ldyBlZCh7Y2hlY2s6Im11bHRpcGxlX29mIiwuLi55KHQpLHZhbHVlOmV9KX1mdW5jdGlvbiBpdChlLHQpe3JldHVybiBuZXcgb2Qoe2NoZWNrOiJtYXhfc2l6ZSIsLi4ueSh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBuZXcgcmQoe2NoZWNrOiJtaW5fc2l6ZSIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBrdChlLHQpe3JldHVybiBuZXcgc2Qoe2NoZWNrOiJzaXplX2VxdWFscyIsLi4ueSh0KSxzaXplOmV9KX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiBuZXcgaWQoe2NoZWNrOiJtYXhfbGVuZ3RoIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIG5ldyBhZCh7Y2hlY2s6Im1pbl9sZW5ndGgiLC4uLnkodCksbWluaW11bTplfSl9ZnVuY3Rpb24gJHQoZSx0KXtyZXR1cm4gbmV3IGNkKHtjaGVjazoibGVuZ3RoX2VxdWFscyIsLi4ueSh0KSxsZW5ndGg6ZX0pfWZ1bmN0aW9uIGJuKGUsdCl7cmV0dXJuIG5ldyB1ZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoicmVnZXgiLC4uLnkodCkscGF0dGVybjplfSl9ZnVuY3Rpb24gdm4oZSl7cmV0dXJuIG5ldyBsZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoibG93ZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIG5ldyBkZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoidXBwZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24gX24oZSx0KXtyZXR1cm4gbmV3IHBkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsLi4ueSh0KSxpbmNsdWRlczplfSl9ZnVuY3Rpb24ga24oZSx0KXtyZXR1cm4gbmV3IGhkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIsLi4ueSh0KSxwcmVmaXg6ZX0pfWZ1bmN0aW9uIHduKGUsdCl7cmV0dXJuIG5ldyBmZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIiwuLi55KHQpLHN1ZmZpeDplfSl9ZnVuY3Rpb24gdXIoZSx0LG4pe3JldHVybiBuZXcgbWQoe2NoZWNrOiJwcm9wZXJ0eSIscHJvcGVydHk6ZSxzY2hlbWE6dCwuLi55KG4pfSl9ZnVuY3Rpb24gJG4oZSx0KXtyZXR1cm4gbmV3IGdkKHtjaGVjazoicHJvcGVydGllcyIsc2hhcGU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gU24oZSx0KXtyZXR1cm4gbmV3IGJkKHtjaGVjazoibWltZV90eXBlIixtaW1lOmUsLi4ueSh0KX0pfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBuZXcgdmQoe2NoZWNrOiJvdmVyd3JpdGUiLHR4OmV9KX1mdW5jdGlvbiB6bihlKXtyZXR1cm4gQWUodD0+dC5ub3JtYWxpemUoZSkpfWZ1bmN0aW9uIFRuKCl7cmV0dXJuIEFlKGU9PmUudHJpbSgpKX1mdW5jdGlvbiBJbigpe3JldHVybiBBZShlPT5lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIFBuKCl7cmV0dXJuIEFlKGU9PmUudG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24geG4oKXtyZXR1cm4gQWUoZT0+S3UoZSkpfWZ1bmN0aW9uIHpoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFycmF5IixlbGVtZW50OnQsLi4ueShuKX0pfWZ1bmN0aW9uIF9nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGtnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsaW5jbHVzaXZlOiExLC4uLnkobil9KX1mdW5jdGlvbiB3ZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOm4sZGlzY3JpbWluYXRvcjp0LC4uLnkobyl9KX1mdW5jdGlvbiAkZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6dCxyaWdodDpufSl9ZnVuY3Rpb24gU2coZSx0LG4sbyl7Y29uc3Qgcj1uIGluc3RhbmNlb2YgeCxzPXI/bzpuLGE9cj9uOm51bGw7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0dXBsZSIsaXRlbXM6dCxyZXN0OmEsLi4ueShzKX0pfWZ1bmN0aW9uIHpnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIFRnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToibWFwIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIElnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InNldCIsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBnKGUsdCxuKXtjb25zdCBvPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHI9PltyLHJdKSk6dDtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6bywuLi55KG4pfSl9ZnVuY3Rpb24geGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczp0LC4uLnkobil9KX1mdW5jdGlvbiBDZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheSh0KT90Olt0XSwuLi55KG4pfSl9ZnVuY3Rpb24gVGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImZpbGUiLC4uLnkodCl9KX1mdW5jdGlvbiBFZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06dH0pfWZ1bmN0aW9uIEFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBPZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gUmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOnQsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKCk6RG8obil9fSl9ZnVuY3Rpb24gWmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBOZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBqZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOnQsY2F0Y2hWYWx1ZTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOlpzKG4pfSl9ZnVuY3Rpb24gTWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToicGlwZSIsaW46dCxvdXQ6bn0pfWZ1bmN0aW9uIHFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBEZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czp0LC4uLnkobil9KX1mdW5jdGlvbiBMZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibGF6eSIsZ2V0dGVyOnR9KX1mdW5jdGlvbiBVZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBJaChlLHQsbil7Y29uc3Qgbz15KG4pO3JldHVybiBvLmFib3J0Pz8oby5hYm9ydD0hMCksbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5vfSl9ZnVuY3Rpb24gUGgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLnkobil9KX1mdW5jdGlvbiB4aChlLHQpe2NvbnN0IG49Q2gobz0+KG8uYWRkSXNzdWU9cj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIilvLmlzc3Vlcy5wdXNoKGZ0KHIsby52YWx1ZSxuLl96b2QuZGVmKSk7ZWxzZXtjb25zdCBzPXI7cy5mYXRhbCYmKHMuY29udGludWU9ITEpLHMuY29kZT8/KHMuY29kZT0iY3VzdG9tIiksImlucHV0ImluIHN8fChzLmlucHV0PW8udmFsdWUpLHMuaW5zdD8/KHMuaW5zdD1uKSxzLmNvbnRpbnVlPz8ocy5jb250aW51ZT0hbi5fem9kLmRlZi5hYm9ydCksby5pc3N1ZXMucHVzaChmdChzKSl9fSxlKG8udmFsdWUsbykpLHQpO3JldHVybiBufWZ1bmN0aW9uIENoKGUsdCl7Y29uc3Qgbj1uZXcgVyh7Y2hlY2s6ImN1c3RvbSIsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuY2hlY2s9ZSxufWZ1bmN0aW9uIEVoKGUpe2NvbnN0IHQ9bmV3IFcoe2NoZWNrOiJkZXNjcmliZSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz13ZS5nZXQobik/P3t9O3dlLmFkZChuLHsuLi5vLGRlc2NyaXB0aW9uOmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBBaChlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoibWV0YSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz13ZS5nZXQobik/P3t9O3dlLmFkZChuLHsuLi5vLC4uLmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBPaChlLHQpe2NvbnN0IG49eSh0KTtsZXQgbz1uLnRydXRoeT8/WyJ0cnVlIiwiMSIsInllcyIsIm9uIiwieSIsImVuYWJsZWQiXSxyPW4uZmFsc3k/P1siZmFsc2UiLCIwIiwibm8iLCJvZmYiLCJuIiwiZGlzYWJsZWQiXTtuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKG89by5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSxyPXIubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikpO2NvbnN0IHM9bmV3IFNldChvKSxhPW5ldyBTZXQociksaT1lLkNvZGVjPz9taSx1PWUuQm9vbGVhbj8/dWksbD1lLlN0cmluZz8/Z24sZD1uZXcgbCh7dHlwZToic3RyaW5nIixlcnJvcjpuLmVycm9yfSksbT1uZXcgdSh7dHlwZToiYm9vbGVhbiIsZXJyb3I6bi5lcnJvcn0pLGI9bmV3IGkoe3R5cGU6InBpcGUiLGluOmQsb3V0Om0sdHJhbnNmb3JtOigodixfKT0+e2xldCB3PXY7cmV0dXJuIG4uY2FzZSE9PSJzZW5zaXRpdmUiJiYodz13LnRvTG93ZXJDYXNlKCkpLHMuaGFzKHcpPyEwOmEuaGFzKHcpPyExOihfLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIixleHBlY3RlZDoic3RyaW5nYm9vbCIsdmFsdWVzOlsuLi5zLC4uLmFdLGlucHV0Ol8udmFsdWUsaW5zdDpiLGNvbnRpbnVlOiExfSkse30pfSkscmV2ZXJzZVRyYW5zZm9ybTooKHYsXyk9PnY9PT0hMD9vWzBdfHwidHJ1ZSI6clswXXx8ImZhbHNlIiksZXJyb3I6bi5lcnJvcn0pO3JldHVybiBiLl96b2QuYmFnLnRydXRoeT1vLGIuX3pvZC5iYWcuZmFsc3k9cixiLl96b2QuYmFnLmNhc2U9bi5jYXNlPz8iaW5zZW5zaXRpdmUiLGJ9ZnVuY3Rpb24gU3QoZSx0LG4sbz17fSl7Y29uc3Qgcj15KG8pLHM9e2NoZWNrOiJzdHJpbmdfZm9ybWF0Iix0eXBlOiJzdHJpbmciLGZvcm1hdDp0LGZuOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246aT0+bi50ZXN0KGkpLC4uLnJ9O3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwJiYocy5wYXR0ZXJuPW4pLG5ldyBlKHMpfWNvbnN0IEZnPSgpPT4oe30pLEhnPSgpPT4oe30pLEJnPSgpPT4oe30pLFZnPSgpPT4oe30pLEpnPSgpPT4oe30pLFJoPSgpPT4oKT0+KHt9KSx6cz0oKT0+KCk9Pih7fSksS2c9KCk9Pih7fSksJGU9KCk9Pih7fSksV2c9KCk9Pih7fSksR2c9KCk9Pih7fSksUWc9KCk9Pih7fSksWWc9KCk9Pih7fSksWGc9KCk9Pih7fSksZWI9KCk9Pih7fSksdGI9KCk9Pih7fSksbmI9KCk9Pih7fSksb2I9KCk9Pih7fSkscmI9KCk9Pih7fSksc2I9KCk9Pih7fSksaWI9KCk9Pih7fSksYWI9KCk9Pih7fSksY2I9KCk9Pih7fSksdWI9KCk9Pih7fSksbGI9KCk9Pih7fSksZGI9KCk9Pih7fSkscGI9KCk9Pih7fSksaGI9KCk9Pih7fSksZmI9KCk9Pih7fSksbWI9KCk9Pih7fSksZ2I9KCk9Pih7fSksYmI9KCk9Pih7fSksdmI9KCk9Pih7fSkseWI9KCk9Pih7fSksWmg9KCk9Pih7fSksX2I9KCk9Pih7fSksa2I9KCk9Pih7fSksd2I9KCk9Pih7fSksJGI9KCk9Pih7fSksU2I9KCk9Pih7fSksemI9KCk9Pih7fSksVGI9KCk9Pih7fSksSWI9KCk9Pih7fSksUGI9KCk9Pih7fSkseGI9KCk9Pih7fSksQ2I9KCk9Pih7fSksTmg9KCk9Pih7fSksRWI9KCk9Pih7fSksWWk9KCk9Pih7fSk7Y2xhc3MgQWJ7fWNvbnN0IE9iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxqaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJFpvZEFueTpscCwkWm9kQXJyYXk6bXAsJFpvZEFzeW5jRXJyb3I6RmUsJFpvZEJhc2U2NDpLZCwkWm9kQmFzZTY0VVJMOkdkLCRab2RCaWdJbnQ6bGksJFpvZEJpZ0ludEZvcm1hdDppcCwkWm9kQm9vbGVhbjp1aSwkWm9kQ0lEUnY0OkhkLCRab2RDSURSdjY6VmQsJFpvZENVSUQ6QWQsJFpvZENVSUQyOk9kLCRab2RDYXRjaDpqcCwkWm9kQ2hlY2s6VywkWm9kQ2hlY2tCaWdJbnRGb3JtYXQ6bmQsJFpvZENoZWNrRW5kc1dpdGg6ZmQsJFpvZENoZWNrR3JlYXRlclRoYW46dGksJFpvZENoZWNrSW5jbHVkZXM6cGQsJFpvZENoZWNrTGVuZ3RoRXF1YWxzOmNkLCRab2RDaGVja0xlc3NUaGFuOmVpLCRab2RDaGVja0xvd2VyQ2FzZTpsZCwkWm9kQ2hlY2tNYXhMZW5ndGg6aWQsJFpvZENoZWNrTWF4U2l6ZTpvZCwkWm9kQ2hlY2tNaW1lVHlwZTpiZCwkWm9kQ2hlY2tNaW5MZW5ndGg6YWQsJFpvZENoZWNrTWluU2l6ZTpyZCwkWm9kQ2hlY2tNdWx0aXBsZU9mOmVkLCRab2RDaGVja051bWJlckZvcm1hdDp0ZCwkWm9kQ2hlY2tPdmVyd3JpdGU6dmQsJFpvZENoZWNrUHJvcGVydGllczpnZCwkWm9kQ2hlY2tQcm9wZXJ0eTptZCwkWm9kQ2hlY2tSZWdleDp1ZCwkWm9kQ2hlY2tTaXplRXF1YWxzOnNkLCRab2RDaGVja1N0YXJ0c1dpdGg6aGQsJFpvZENoZWNrU3RyaW5nRm9ybWF0Om1uLCRab2RDaGVja1VwcGVyQ2FzZTpkZCwkWm9kQ29kZWM6bWksJFpvZENyZWRpdENhcmQ6WGQsJFpvZEN1c3RvbTpIcCwkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OnJwLCRab2RDeWNsaWNFcnJvcjpCcCwkWm9kRGF0ZTpmcCwkWm9kRGVmYXVsdDpPcCwkWm9kRGlzY3JpbWluYXRlZFVuaW9uOndwLCRab2RFMTY0OlFkLCRab2RFbWFpbDpTZCwkWm9kRW1vamk6Q2QsJFpvZEVuY29kZUVycm9yOlZvLCRab2RFbnVtOklwLCRab2RFcnJvcjptbCwkWm9kRXhhY3RPcHRpb25hbDpFcCwkWm9kRmlsZTp4cCwkWm9kRnVuY3Rpb246VXAsJFpvZEdVSUQ6d2QsJFpvZElCQU46dHAsJFpvZElQdjQ6TGQsJFpvZElQdjY6VWQsJFpvZElTT0RhdGU6TWQsJFpvZElTT0RhdGVUaW1lOmpkLCRab2RJU09EdXJhdGlvbjpEZCwkWm9kSVNPVGltZTpxZCwkWm9kSW50ZXJzZWN0aW9uOiRwLCRab2RKV1Q6b3AsJFpvZEtTVUlEOk5kLCRab2RMYXp5OmdpLCRab2RMaXRlcmFsOlBwLCRab2RNQUM6RmQsJFpvZE1hcDp6cCwkWm9kTmFOOk1wLCRab2ROYW5vSUQ6RWQsJFpvZE5ldmVyOnBwLCRab2ROb25PcHRpb25hbDpacCwkWm9kTnVsbDp1cCwkWm9kTnVsbGFibGU6QXAsJFpvZE51bWJlcjpjaSwkWm9kTnVtYmVyRm9ybWF0OnNwLCRab2RPYmplY3Q6dnAsJFpvZE9iamVjdEpJVDp5cCwkWm9kT3B0aW9uYWw6aGksJFpvZFBpcGU6ZmksJFpvZFByZWZhdWx0OlJwLCRab2RQcmVwcm9jZXNzOnFwLCRab2RQcm9taXNlOkZwLCRab2RSZWFkb25seTpEcCwkWm9kUmVhbEVycm9yOnllLCRab2RSZWNvcmQ6U3AsJFpvZFJlZ2lzdHJ5OkdwLCRab2RTZXQ6VHAsJFpvZFN0cmluZzpnbiwkWm9kU3RyaW5nRm9ybWF0OkgsJFpvZFN1Y2Nlc3M6TnAsJFpvZFN5bWJvbDphcCwkWm9kVGVtcGxhdGVMaXRlcmFsOkxwLCRab2RUcmFuc2Zvcm06Q3AsJFpvZFR1cGxlOnBpLCRab2RUeXBlOngsJFpvZFVMSUQ6UmQsJFpvZFVSTDp4ZCwkWm9kVVVJRDokZCwkWm9kVW5kZWZpbmVkOmNwLCRab2RVbmlvbjplciwkWm9kVW5rbm93bjpkcCwkWm9kVm9pZDpocCwkWm9kWElEOlpkLCRab2RYb3I6X3AsJGJyYW5kOk1zLCRjb25zdHJ1Y3RvcjpwLCRpbnB1dDp5aSwkb3V0cHV0OnZpLERvYzp5ZCxJTlZBTElEOmtpLEpTT05TY2hlbWE6T2IsSlNPTlNjaGVtYUdlbmVyYXRvcjpBYixORVZFUjpqcyxUaW1lUHJlY2lzaW9uOkppLFVSTF9CQURfRk9STUFUOm9pLFVSTF9VTlBBUlNFQUJMRTpRdCxab2RDb21waWxlQXN5bmNFcnJvcjp3aSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjokaSxfYW55OnZoLF9hcnJheTp6aCxfYmFzZTY0OkZpLF9iYXNlNjR1cmw6SGksX2JpZ2ludDpkaCxfYm9vbGVhbjp1aCxfY2F0Y2g6amcsX2NoZWNrOkNoLF9jaWRydjQ6TGksX2NpZHJ2NjpVaSxfY29lcmNlZEJpZ2ludDpwaCxfY29lcmNlZEJvb2xlYW46bGgsX2NvZXJjZWREYXRlOiRoLF9jb2VyY2VkTnVtYmVyOm9oLF9jb2VyY2VkU3RyaW5nOllwLF9jcmVkaXRDYXJkOmVoLF9jdWlkOlJpLF9jdWlkMjpaaSxfY3VzdG9tOkloLF9kYXRlOndoLF9kZWNvZGU6VXMsX2RlY29kZUFzeW5jOkhzLF9kZWZhdWx0OlJnLF9kaXNjcmltaW5hdGVkVW5pb246d2csX2UxNjQ6QmksX2VtYWlsOlRpLF9lbW9qaTpBaSxfZW5jb2RlOkxzLF9lbmNvZGVBc3luYzpGcyxfZW5kc1dpdGg6d24sX2VudW06UGcsX2ZpbGU6VGgsX2Zsb2F0MzI6c2gsX2Zsb2F0NjQ6aWgsX2d0Ok1lLF9ndGU6dmUsX2d1aWQ6SWksX2liYW46dGgsX2luY2x1ZGVzOl9uLF9pbnQ6cmgsX2ludDMyOmFoLF9pbnQ2NDpoaCxfaW50ZXJzZWN0aW9uOiRnLF9pcHY0OnFpLF9pcHY2OkRpLF9pc29EYXRlOldpLF9pc29EYXRlVGltZTpLaSxfaXNvRHVyYXRpb246UWksX2lzb1RpbWU6R2ksX2p3dDpWaSxfa3N1aWQ6TWksX2xhenk6TGcsX2xlbmd0aDokdCxfbGl0ZXJhbDpDZyxfbG93ZXJjYXNlOnZuLF9sdDpqZSxfbHRlOmJlLF9tYWM6WHAsX21hcDpUZyxfbWF4OmJlLF9tYXhMZW5ndGg6d3QsX21heFNpemU6aXQsX21pbWU6U24sX21pbjp2ZSxfbWluTGVuZ3RoOkJlLF9taW5TaXplOnFlLF9tdWx0aXBsZU9mOnR0LF9uYW46U2gsX25hbm9pZDpPaSxfbmF0aXZlRW51bTp4ZyxfbmVnYXRpdmU6aXIsX25ldmVyOl9oLF9ub25uZWdhdGl2ZTpjcixfbm9ub3B0aW9uYWw6WmcsX25vbnBvc2l0aXZlOmFyLF9ub3JtYWxpemU6em4sX251bGw6YmgsX251bGxhYmxlOk9nLF9udW1iZXI6bmgsX29wdGlvbmFsOkFnLF9vdmVyd3JpdGU6QWUsX3BhcnNlOnVuLF9wYXJzZUFzeW5jOmxuLF9waXBlOk1nLF9wb3NpdGl2ZTpzcixfcHJvbWlzZTpVZyxfcHJvcGVydGllczokbixfcHJvcGVydHk6dXIsX3JlYWRvbmx5OnFnLF9yZWNvcmQ6emcsX3JlZmluZTpQaCxfcmVnZXg6Ym4sX3NhZmVEZWNvZGU6VnMsX3NhZmVEZWNvZGVBc3luYzpLcyxfc2FmZUVuY29kZTpCcyxfc2FmZUVuY29kZUFzeW5jOkpzLF9zYWZlUGFyc2U6ZG4sX3NhZmVQYXJzZUFzeW5jOnBuLF9zZXQ6SWcsX3NpemU6a3QsX3NsdWdpZnk6eG4sX3N0YXJ0c1dpdGg6a24sX3N0cmluZzpRcCxfc3RyaW5nRm9ybWF0OlN0LF9zdHJpbmdib29sOk9oLF9zdWNjZXNzOk5nLF9zdXBlclJlZmluZTp4aCxfc3ltYm9sOm1oLF90ZW1wbGF0ZUxpdGVyYWw6RGcsX3RvTG93ZXJDYXNlOkluLF90b1VwcGVyQ2FzZTpQbixfdHJhbnNmb3JtOkVnLF90cmltOlRuLF90dXBsZTpTZyxfdWludDMyOmNoLF91aW50NjQ6ZmgsX3VsaWQ6TmksX3VuZGVmaW5lZDpnaCxfdW5pb246X2csX3Vua25vd246eWgsX3VwcGVyY2FzZTp5bixfdXJsOnJyLF91dWlkOlBpLF91dWlkdjQ6eGksX3V1aWR2NjpDaSxfdXVpZHY3OkVpLF92b2lkOmtoLF94aWQ6amksX3hvcjprZyxiYXNlNjRDaGFyc2V0OkpkLGJhc2U2NHVybENoYXJzZXQ6YWksY2FuUGFyc2VVUkw6cmksY2xvbmU6USxjb21waWxlOlNpLGNvbXBpbGVGbjp5Zyxjb25maWc6dGUsY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOnpzLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpSaCxkZWNvZGU6VG0sZGVjb2RlQXN5bmM6UG0sZGVzY3JpYmU6RWgsZW5jb2RlOnptLGVuY29kZUFzeW5jOkltLGV4dHJhY3REZWZzOlZnLGZpbmFsaXplOkpnLGZsYXR0ZW5FcnJvcjpKbyxmb3JtYXRFcnJvcjpLbyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmRpLGdsb2JhbENvbmZpZzpkZSxnbG9iYWxSZWdpc3RyeTp3ZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6SGcsaW5pdGlhbGl6ZUNvbnRleHQ6RmcsaXNCYWNrRWRnZTpLcCxpc1JlY3Vyc2l2ZVNjaGVtYTptZyxpc1ZhbGlkQmFzZTY0OmlpLGlzVmFsaWRCYXNlNjRVUkw6V2QsaXNWYWxpZENJRFJ2NjpCZCxpc1ZhbGlkQ3JlZGl0Q2FyZDpZZCxpc1ZhbGlkSUJBTjplcCxpc1ZhbGlkSVB2NjpzaSxpc1ZhbGlkSldUOm5wLGxvY2FsZXM6YmksbWVtb2l6ZXI6dHIsbWVyZ2VWYWx1ZXM6UG8sbWV0YTpBaCxwYXJzZTp5cyxwYXJzZUFzeW5jOl9zLHBhcnNlVVJMT2JqZWN0OlRkLHByZXR0aWZ5RXJyb3I6RHMscHJvY2VzczpLZyxwcm9jZXNzU2NoZW1hOkJnLHJlZ2V4ZXM6WG8scmVnaXN0cnk6bnIsc2FmZURlY29kZTpDbSxzYWZlRGVjb2RlQXN5bmM6QW0sc2FmZUVuY29kZTp4bSxzYWZlRW5jb2RlQXN5bmM6RW0sc2FmZVBhcnNlOmJsLHNhZmVQYXJzZUFzeW5jOmttLHN0YW5kYXJkUHJvcHM6bmksc3RyaXBUYWJBbmROZXdsaW5lOndzLHRvRG90UGF0aDpnbCx0b0pTT05TY2hlbWE6WWksdG9ab2Q6TW8sdHJlZWlmeUVycm9yOnFzLHVybEhvc3RuYW1lT2s6SWQsdXJsUHJvdG9jb2xPazpQZCx1dGlsOk5zLHZhbGlkYXRlOkdvLHZhbGlkYXRlQXN5bmM6UW8sdmFsaWRhdGVVUkw6emQsdmVyc2lvbjpfZCx3aXRoUGFyc2VyOnppfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHZ1PVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiBYaShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooYSxpKT0+e2NvbnN0IHU9dFthLl96b2QuZGVmLnR5cGVdO3JldHVybiB1P3UoYSxpKTphfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihhKXtjb25zdCBpPW8uZ2V0KGEpO2lmKGk9PT12dSlyZXR1cm4gbmV3IGdpKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGEpfSk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtvLnNldChhLHZ1KTtjb25zdCB1PXMoYSksbD1uKHUsdSE9PWEpO3JldHVybiBvLnNldChhLGwpLGx9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPWEuX3pvZC5kZWY7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPWkuc2hhcGUsZD1PYmplY3Qua2V5cyhsKTtsZXQgbT0hMTtjb25zdCBiPXt9O2Zvcihjb25zdCBfIG9mIGQpe2NvbnN0IHc9cihsW19dKTt3IT09bFtfXSYmKG09ITApLGJbX109d31sZXQgdj1pLmNhdGNoYWxsO3JldHVybiBpLmNhdGNoYWxsJiYodj1yKGkuY2F0Y2hhbGwpLHYhPT1pLmNhdGNoYWxsJiYobT0hMCkpLG0/UShhLHsuLi5pLHNoYXBlOmIsY2F0Y2hhbGw6dn0pOmF9Y2FzZSJhcnJheSI6e2NvbnN0IGw9cihpLmVsZW1lbnQpO3JldHVybiBsPT09aS5lbGVtZW50P2E6UShhLHsuLi5pLGVsZW1lbnQ6bH0pfWNhc2UidHVwbGUiOntjb25zdCBsPWkuaXRlbXM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgdiBvZiBsKXtjb25zdCBfPXIodik7XyE9PXYmJihkPSEwKSxtLnB1c2goXyl9bGV0IGI9aS5yZXN0O3JldHVybiBpLnJlc3QmJihiPXIoaS5yZXN0KSxiIT09aS5yZXN0JiYoZD0hMCkpLGQ/UShhLHsuLi5pLGl0ZW1zOm0scmVzdDpifSk6YX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCBsPXIoaS5rZXlUeXBlKSxkPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS5rZXlUeXBlJiZkPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksa2V5VHlwZTpsLHZhbHVlVHlwZTpkfSl9Y2FzZSJzZXQiOntjb25zdCBsPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksdmFsdWVUeXBlOmx9KX1jYXNlInVuaW9uIjp7Y29uc3QgbD1pLm9wdGlvbnM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgYiBvZiBsKXtjb25zdCB2PXIoYik7diE9PWImJihkPSEwKSxtLnB1c2godil9cmV0dXJuIGQ/UShhLHsuLi5pLG9wdGlvbnM6bX0pOmF9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCBsPXIoaS5sZWZ0KSxkPXIoaS5yaWdodCk7cmV0dXJuIGw9PT1pLmxlZnQmJmQ9PT1pLnJpZ2h0P2E6UShhLHsuLi5pLGxlZnQ6bCxyaWdodDpkfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IGw9cihpLmlubmVyVHlwZSk7cmV0dXJuIGw9PT1pLmlubmVyVHlwZT9hOlEoYSx7Li4uaSxpbm5lclR5cGU6bH0pfWNhc2UicGlwZSI6e2NvbnN0IGw9cihpLmluKSxkPXIoaS5vdXQpO3JldHVybiBsPT09aS5pbiYmZD09PWkub3V0P2E6UShhLHsuLi5pLGluOmwsb3V0OmR9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgbD1yKGkuaW5wdXQpLGQ9cihpLm91dHB1dCk7cmV0dXJuIGw9PT1pLmlucHV0JiZkPT09aS5vdXRwdXQ/YTpRKGEsey4uLmksaW5wdXQ6bCxvdXRwdXQ6ZH0pfWNhc2UibGF6eSI6e2NvbnN0IGw9aS5nZXR0ZXIse19jYWNoZWRJbm5lcjpkLC4uLm19PWk7cmV0dXJuIFEoYSx7Li4ubSxnZXR0ZXI6KCk9PnIobCgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiBhfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBlYShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBNaChlLHQpe3JldHVybiBlYShlKT9ibChlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIFJiKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihlYShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIFpiKGUpe2lmKGVhKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IE5iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDp3bixndDpNZSxndGU6dmUsaW5jbHVkZXM6X24sbGVuZ3RoOiR0LGxvd2VyY2FzZTp2bixsdDpqZSxsdGU6YmUsbWF4TGVuZ3RoOnd0LG1heFNpemU6aXQsbWltZTpTbixtaW5MZW5ndGg6QmUsbWluU2l6ZTpxZSxtdWx0aXBsZU9mOnR0LG5lZ2F0aXZlOmlyLG5vbm5lZ2F0aXZlOmNyLG5vbnBvc2l0aXZlOmFyLG5vcm1hbGl6ZTp6bixvdmVyd3JpdGU6QWUscG9zaXRpdmU6c3IscHJvcGVydGllczokbixwcm9wZXJ0eTp1cixyZWdleDpibixzaXplOmt0LHNsdWdpZnk6eG4sc3RhcnRzV2l0aDprbix0b0xvd2VyQ2FzZTpJbix0b1VwcGVyQ2FzZTpQbix0cmltOlRuLHVwcGVyY2FzZTp5bn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx5dT1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiBibyhlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IHFoPShlLHQpPT57bWwuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3l1LmhhcyhuKXx8KHl1LmFkZChuKSxibyhuLCJmb3JtYXQiLG89PnI9PktvKG8scikpLGJvKG4sImZsYXR0ZW4iLG89PnI9PkpvKG8scikpLGJvKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsJG8sMil9KSxibyhuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcywkbywyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxEaD1wKCJab2RFcnJvciIscWgpLG1lPXAoIlpvZEVycm9yIixxaCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLHRhPXVuKG1lKSxuYT1sbihtZSksb2E9ZG4obWUpLHJhPXBuKG1lKSxzYT1McyhtZSksaWE9VXMobWUpLGFhPUZzKG1lKSxjYT1IcyhtZSksdWE9QnMobWUpLGxhPVZzKG1lKSxkYT1KcyhtZSkscGE9S3MobWUpO2Z1bmN0aW9uIGpiKCl7ZGUubG9jYWxlRXJyb3J8fHRlKFdwKCkpfWZ1bmN0aW9uIGF0KCl7ZGUubWVtb2l6ZXJ8fHRlKHttZW1vaXplcjp0cigpfSl9Y29uc3QgRT1wKCJab2RUeXBlIiwoZSx0KT0+KGpiKCkseC5pbml0KGUsdCksZS5kZWY9dCxlLnR5cGU9dC50eXBlLGUpLHtjaGVjayguLi5lKXtjb25zdCB0PXRoaXMuZGVmO3JldHVybiB0aGlzLmNsb25lKHVlKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBRKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhRcihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhZcihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEFlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gVih0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBFcih0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gYnQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gVihidCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBqcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBQKHRoaXMpfSxvcihlKXtyZXR1cm4gQShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gTnQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBYdCh0aGlzLFhuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gUnIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIE5yKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBEcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBYdCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBIcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHdlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHdlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gd2UuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBCbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5uaSh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDp6cygpLG91dHB1dDp6cygpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtOZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHRhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgbmEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBvYSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIHJhKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtOZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBHbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gUW8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBzYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gaWEodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgYWEodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgY2EodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gdWEodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIGxhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIGRhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIHBhKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBSaCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gd2UuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxDbj1wKCJfWm9kU3RyaW5nIiwoZSx0KT0+e2duLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2coKX0sY24oe2Zvcm1hdDplPT4kZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+JGUoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT4kZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhibiguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKF9uKC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhrbiguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHduKC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEJlKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHd0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKCR0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soQmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayh2bihlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayh5bihlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhUbigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHpuKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhJbigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhQbigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKHhuKCkpfX0pKSx6dD1wKCJab2RTdHJpbmciLChlLHQpPT57Z24uaW5pdChlLHQpLENuLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKFRpKEVuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKHJyKEN0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKFZpKEpuLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soQWkoT24sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKElpKEFuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhQaShQZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayh4aShQZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhDaShQZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhFaShQZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhPaShSbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmkoWm4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhaaShObixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTmkoam4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRmkoSG4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soSGkoQm4sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soamkoTW4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShxbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2socWkoRG4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKERpKExuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKExpKFVuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFVpKEZuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhCaShWbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKEtpKFR0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhXaShJdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soR2koUHQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhRaSh4dCxlKSl9fSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gUXAoenQsZSl9Y29uc3QgVT1wKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksQ24uaW5pdChlLHQpfSksVHQ9cCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57amQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksSXQ9cCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntNZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxQdD1wKCJab2RJU09UaW1lIiwoZSx0KT0+e3FkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLHh0PXAoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e0RkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLEVuPXAoIlpvZEVtYWlsIiwoZSx0KT0+e1NkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGhhKGUpe3JldHVybiBUaShFbixlKX1jb25zdCBBbj1wKCJab2RHVUlEIiwoZSx0KT0+e3dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGZhKGUpe3JldHVybiBJaShBbixlKX1jb25zdCBQZT1wKCJab2RVVUlEIiwoZSx0KT0+eyRkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG1hKGUpe3JldHVybiBQaShQZSxlKX1mdW5jdGlvbiBnYShlKXtyZXR1cm4geGkoUGUsZSl9ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIENpKFBlLGUpfWZ1bmN0aW9uIHZhKGUpe3JldHVybiBFaShQZSxlKX1jb25zdCBDdD1wKCJab2RVUkwiLChlLHQpPT57eGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24geWEoZSl7cmV0dXJuIHJyKEN0LGUpfWZ1bmN0aW9uIF9hKGUpe3JldHVybiBycihDdCx7cHJvdG9jb2w6V3MsaG9zdG5hbWU6amwsLi4ueShlKX0pfWNvbnN0IE9uPXAoIlpvZEVtb2ppIiwoZSx0KT0+e0NkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGthKGUpe3JldHVybiBBaShPbixlKX1jb25zdCBSbj1wKCJab2ROYW5vSUQiLChlLHQpPT57RWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIE9pKFJuLGUpfWNvbnN0IFpuPXAoIlpvZENVSUQiLChlLHQpPT57QWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIFJpKFpuLGUpfWNvbnN0IE5uPXAoIlpvZENVSUQyIiwoZSx0KT0+e09kLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFNhKGUpe3JldHVybiBaaShObixlKX1jb25zdCBqbj1wKCJab2RVTElEIiwoZSx0KT0+e1JkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHphKGUpe3JldHVybiBOaShqbixlKX1jb25zdCBNbj1wKCJab2RYSUQiLChlLHQpPT57WmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIGppKE1uLGUpfWNvbnN0IHFuPXAoIlpvZEtTVUlEIiwoZSx0KT0+e05kLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIElhKGUpe3JldHVybiBNaShxbixlKX1jb25zdCBEbj1wKCJab2RJUHY0IiwoZSx0KT0+e0xkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBxaShEbixlKX1jb25zdCBscj1wKCJab2RNQUMiLChlLHQpPT57RmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24geGEoZSl7cmV0dXJuIFhwKGxyLGUpfWNvbnN0IExuPXAoIlpvZElQdjYiLChlLHQpPT57VWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIERpKExuLGUpfWNvbnN0IFVuPXAoIlpvZENJRFJ2NCIsKGUsdCk9PntIZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBFYShlKXtyZXR1cm4gTGkoVW4sZSl9Y29uc3QgRm49cCgiWm9kQ0lEUnY2IiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFhKGUpe3JldHVybiBVaShGbixlKX1jb25zdCBIbj1wKCJab2RCYXNlNjQiLChlLHQpPT57S2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gT2EoZSl7cmV0dXJuIEZpKEhuLGUpfWNvbnN0IEJuPXAoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntHZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBSYShlKXtyZXR1cm4gSGkoQm4sZSl9Y29uc3QgVm49cCgiWm9kRTE2NCIsKGUsdCk9PntRZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBaYShlKXtyZXR1cm4gQmkoVm4sZSl9Y29uc3QgZHI9cCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntYZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gZWgoZHIsZSl9Y29uc3QgcHI9cCgiWm9kSUJBTiIsKGUsdCk9Pnt0cC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBqYShlKXtyZXR1cm4gdGgocHIsZSl9Y29uc3QgSm49cCgiWm9kSldUIiwoZSx0KT0+e29wLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE1hKGUpe3JldHVybiBWaShKbixlKX1jb25zdCBKZT1wKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57cnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcWEoZSx0LG49e30pe3JldHVybiBTdChKZSxlLHQsbil9ZnVuY3Rpb24gRGEoZSl7cmV0dXJuIFN0KEplLCJob3N0bmFtZSIsTmwsZSl9ZnVuY3Rpb24gTGEoZSl7cmV0dXJuIFN0KEplLCJoZXgiLFhsLGUpfWZ1bmN0aW9uIFVhKGUpe3JldHVybiBTdChKZSwiY3VycmVuY3lfY29kZSIscWwsZSl9ZnVuY3Rpb24gRmEoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPVhvW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIFN0KEplLG8scix0KX1jb25zdCBFdD1wKCJab2ROdW1iZXIiLChlLHQpPT57Y2kuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HZygpLGUuaXNGaW5pdGU9ITB9LGNuKHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09JGUoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT0kZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT0kZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PiRlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhNZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGplKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhZdChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soWXQoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhNZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhiZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHR0KGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodHQoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBDKGUpe3JldHVybiBuaChFdCxlKX1jb25zdCBLZT1wKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57c3AuaW5pdChlLHQpLEV0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIFl0KGUpe3JldHVybiByaChLZSxlKX1mdW5jdGlvbiBIYShlKXtyZXR1cm4gc2goS2UsZSl9ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIGloKEtlLGUpfWZ1bmN0aW9uIFZhKGUpe3JldHVybiBhaChLZSxlKX1mdW5jdGlvbiBKYShlKXtyZXR1cm4gY2goS2UsZSl9Y29uc3QgQXQ9cCgiWm9kQm9vbGVhbiIsKGUsdCk9Pnt1aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlFnKCl9KTtmdW5jdGlvbiBMKGUpe3JldHVybiB1aChBdCxlKX1jb25zdCBPdD1wKCJab2RCaWdJbnQiLChlLHQpPT57bGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZZygpfSxjbih7bWluVmFsdWU6ZT0+JGUoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PiRlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+JGUoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soTWUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soTWUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soamUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYmUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHR0KGUsdCkpfX0pKTtmdW5jdGlvbiBLYShlKXtyZXR1cm4gZGgoT3QsZSl9Y29uc3QgS249cCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2lwLmluaXQoZSx0KSxPdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gaGgoS24sZSl9ZnVuY3Rpb24gR2EoZSl7cmV0dXJuIGZoKEtuLGUpfWNvbnN0IGhyPXAoIlpvZFN5bWJvbCIsKGUsdCk9PnthcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhnKCl9KTtmdW5jdGlvbiBRYShlKXtyZXR1cm4gbWgoaHIsZSl9Y29uc3QgZnI9cCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e2NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dGIoKX0pO2Z1bmN0aW9uIGd0KGUpe3JldHVybiBnaChmcixlKX1jb25zdCBtcj1wKCJab2ROdWxsIiwoZSx0KT0+e3VwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZWIoKX0pO2Z1bmN0aW9uIFduKGUpe3JldHVybiBiaChtcixlKX1jb25zdCBncj1wKCJab2RBbnkiLChlLHQpPT57bHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5yYigpfSk7ZnVuY3Rpb24gR24oKXtyZXR1cm4gdmgoZ3IpfWNvbnN0IGJyPXAoIlpvZFVua25vd24iLChlLHQpPT57ZHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5zYigpfSk7ZnVuY3Rpb24gRCgpe3JldHVybiB5aChicil9Y29uc3QgdnI9cCgiWm9kTmV2ZXIiLChlLHQpPT57cHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5vYigpfSk7ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIF9oKHZyLGUpfWNvbnN0IHlyPXAoIlpvZFZvaWQiLChlLHQpPT57aHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5uYigpfSk7ZnVuY3Rpb24gWWEoZSl7cmV0dXJuIGtoKHlyLGUpfWNvbnN0IFFuPXAoIlpvZERhdGUiLChlLHQpPT57ZnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pYigpLGUubWluPShuLG8pPT5lLmNoZWNrKHZlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGJlKG4sbykpfSxjbih7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT0kZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09JGUoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBYYShlKXtyZXR1cm4gd2goUW4sZSl9Y29uc3QgX3I9cCgiWm9kQXJyYXkiLChlLHQpPT57YXQoKSxtcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZiKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKEJlKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhCZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sod3QoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKCR0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gemgoX3IsZSx0KX1mdW5jdGlvbiBlYyhlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIGllKE9iamVjdC5rZXlzKHQpKX1jb25zdCBSdD1wKCJab2RPYmplY3QiLChlLHQpPT57YXQoKSx5cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnliKCkscGwoZSwic2hhcGUiLG49Pm4uX3pvZC5kZWYuc2hhcGUsITEpfSx7a2V5b2YoKXtyZXR1cm4gaWUoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkQoKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpEKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOm50KCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIG5sKHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIHJsKHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBzbCh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBlbCh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiB0bCh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBicyhqdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIGJzKGVvLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBpbCh0byx0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLnkodCl9O3JldHVybiBuZXcgUnQobil9ZnVuY3Rpb24gdGMoZSx0KXtyZXR1cm4gbmV3IFJ0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6bnQoKSwuLi55KHQpfSl9ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4gbmV3IFJ0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6RCgpLC4uLnkodCl9KX1jb25zdCBadD1wKCJab2RVbmlvbiIsKGUsdCk9Pntlci5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlpoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIEEoZSx0KXtyZXR1cm4gbmV3IFp0KHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLC4uLnkodCl9KX1jb25zdCBrcj1wKCJab2RYb3IiLChlLHQpPT57WnQuaW5pdChlLHQpLF9wLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WmgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gbmMoZSx0KXtyZXR1cm4gbmV3IGtyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLGluY2x1c2l2ZTohMSwuLi55KHQpfSl9Y29uc3Qgd3I9cCgiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e1p0LmluaXQoZSx0KSx3cC5pbml0KGUsdCl9KTtmdW5jdGlvbiBZbihlLHQsbil7cmV0dXJuIG5ldyB3cih7dHlwZToidW5pb24iLG9wdGlvbnM6dCxkaXNjcmltaW5hdG9yOmUsLi4ueShuKX0pfWNvbnN0ICRyPXAoIlpvZEludGVyc2VjdGlvbiIsKGUsdCk9PnskcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9iKCl9KTtmdW5jdGlvbiBOdChlLHQpe3JldHVybiBuZXcgJHIoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDplLHJpZ2h0OnR9KX1jb25zdCBTcj1wKCJab2RUdXBsZSIsKGUsdCk9PnthdCgpLHBpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+a2IoKX0se3Jlc3QoZSl7cmV0dXJuIHRoaXMuY2xvbmUoey4uLnRoaXMuX3pvZC5kZWYscmVzdDplfSl9LHBhcnRpYWwoKXtjb25zdCBlPXRoaXMuX3pvZC5kZWY7aWYoZS5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5wYXJ0aWFsKCkgY2Fubm90IGJlIHVzZWQgb24gdHVwbGUgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7cmV0dXJuIHRoaXMuY2xvbmUoey4uLmUsaXRlbXM6ZS5pdGVtcy5tYXAodD0+bmV3IGp0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KSl9KX19KTtmdW5jdGlvbiB6cihlLHQsbil7Y29uc3Qgbz10IGluc3RhbmNlb2YgeCxyPW8/bjp0LHM9bz90Om51bGw7cmV0dXJuIG5ldyBTcih7dHlwZToidHVwbGUiLGl0ZW1zOmUscmVzdDpzLC4uLnkocil9KX1jb25zdCBvdD1wKCJab2RSZWNvcmQiLChlLHQpPT57YXQoKSxTcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndiKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZX0pO2Z1bmN0aW9uIFooZSx0LG4pe3JldHVybiF0fHwhdC5fem9kP25ldyBvdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmgoKSx2YWx1ZVR5cGU6ZSwuLi55KHQpfSk6bmV3IG90KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gb2MoZSx0LG4pe3JldHVybiBuZXcgb3Qoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobikscGFydGlhbDohMH0pfWZ1bmN0aW9uIHJjKGUsdCxuKXtyZXR1cm4gbmV3IG90KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCxtb2RlOiJsb29zZSIsLi4ueShuKX0pfWNvbnN0IFRyPXAoIlpvZE1hcCIsKGUsdCk9PnthdCgpLHpwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2IoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlLGUubWluPSguLi5uKT0+ZS5jaGVjayhxZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKHFlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhpdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhrdCguLi5uKSl9KTtmdW5jdGlvbiBzYyhlLHQsbil7cmV0dXJuIG5ldyBUcih7dHlwZToibWFwIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWNvbnN0IElyPXAoIlpvZFNldCIsKGUsdCk9PnthdCgpLFRwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmIoKSxlLm1pbj0oLi4ubik9PmUuY2hlY2socWUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhxZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soaXQoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soa3QoLi4ubikpfSk7ZnVuY3Rpb24gaWMoZSx0KXtyZXR1cm4gbmV3IElyKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTplLC4uLnkodCl9KX1jb25zdCBydD1wKCJab2RFbnVtIiwoZSx0KT0+e0lwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG8scixzKT0+YWIoKSxlLmVudW09dC5lbnRyaWVzLGUub3B0aW9ucz1bLi4uZS5fem9kLnZhbHVlc107Y29uc3Qgbj1uZXcgU2V0KE9iamVjdC5rZXlzKHQuZW50cmllcykpO2UuZXh0cmFjdD0obyxyKT0+e2NvbnN0IHM9e307Zm9yKGNvbnN0IGEgb2YgbylpZihuLmhhcyhhKSlzW2FdPXQuZW50cmllc1thXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7YX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IHJ0KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfSxlLmV4Y2x1ZGU9KG8scik9Pntjb25zdCBzPXsuLi50LmVudHJpZXN9O2Zvcihjb25zdCBhIG9mIG8paWYobi5oYXMoYSkpZGVsZXRlIHNbYV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2F9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBydCh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX19KTtmdW5jdGlvbiBpZShlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgcnQoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi55KHQpfSl9ZnVuY3Rpb24gYWMoZSx0KXtyZXR1cm4gbmV3IHJ0KHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4ueSh0KX0pfWNvbnN0IFByPXAoIlpvZExpdGVyYWwiLChlLHQpPT57UHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jYigpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBQcih7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4ueSh0KX0pfWNvbnN0IHhyPXAoIlpvZEZpbGUiLChlLHQpPT57eHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kYigpLGUubWluPShuLG8pPT5lLmNoZWNrKHFlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGl0KG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhTbihBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIGNjKGUpe3JldHVybiBUaCh4cixlKX1jb25zdCBDcj1wKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57YXQoKSxDcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1iKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBWbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKGZ0KHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBhPXM7YS5mYXRhbCYmKGEuY29udGludWU9ITEpLGEuY29kZT8/KGEuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGF8fChhLmlucHV0PW4udmFsdWUpLGEuaW5zdD8/KGEuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKGZ0KGEpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gWG4oZSl7cmV0dXJuIG5ldyBDcih7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IGp0PXAoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e2hpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TmgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBWKGUpe3JldHVybiBuZXcganQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IGVvPXAoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57RXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEVyKGUpe3JldHVybiBuZXcgZW8oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEFyPXAoIlpvZE51bGxhYmxlIiwoZSx0KT0+e0FwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBidChlKXtyZXR1cm4gbmV3IEFyKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiB1YyhlKXtyZXR1cm4gVihidChlKSl9Y29uc3QgT3I9cCgiWm9kRGVmYXVsdCIsKGUsdCk9PntPcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIFJyKGUsdCl7cmV0dXJuIG5ldyBPcih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6RG8odCl9fSl9Y29uc3QgWnI9cCgiWm9kUHJlZmF1bHQiLChlLHQpPT57UnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5UYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIG5ldyBacih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOkRvKHQpfX0pfWNvbnN0IHRvPXAoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2IoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBqcihlLHQpe3JldHVybiBuZXcgdG8oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgTXI9cCgiWm9kU3VjY2VzcyIsKGUsdCk9PntOcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnBiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbGMoZSl7cmV0dXJuIG5ldyBNcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBxcj1wKCJab2RDYXRjaCIsKGUsdCk9PntqcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkliKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBEcihlLHQpe3JldHVybiBuZXcgcXIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6WnModCl9KX1jb25zdCBMcj1wKCJab2ROYU4iLChlLHQpPT57TXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT51YigpfSk7ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIFNoKExyLGUpfWNvbnN0IE10PXAoIlpvZFBpcGUiLChlLHQpPT57ZmkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QYigpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIG5ldyBNdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IHF0PXAoIlpvZENvZGVjIiwoZSx0KT0+e010LmluaXQoZSx0KSxtaS5pbml0KGUsdCl9KTtmdW5jdGlvbiBwYyhlLHQsbil7cmV0dXJuIG5ldyBxdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIGhjKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IHF0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBVcj1wKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e010LmluaXQoZSx0KSxxcC5pbml0KGUsdCl9KSxGcj1wKCJab2RSZWFkb25seSIsKGUsdCk9PntEcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gSHIoZSl7cmV0dXJuIG5ldyBGcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgQnI9cCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0xwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bGIoKX0pO2Z1bmN0aW9uIGZjKGUsdCl7cmV0dXJuIG5ldyBCcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi55KHQpfSl9Y29uc3QgVnI9cCgiWm9kTGF6eSIsKGUsdCk9PntnaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkViKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBKcihlKXtyZXR1cm4gbmV3IFZyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IEtyPXAoIlpvZFByb21pc2UiLChlLHQpPT57RnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIG1jKGUpe3JldHVybiBuZXcgS3Ioe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgV3I9cCgiWm9kRnVuY3Rpb24iLChlLHQpPT57VXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5mYigpfSk7ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIG5ldyBXcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP3pyKGU/LmlucHV0KTplPy5pbnB1dD8/UChEKCkpLG91dHB1dDplPy5vdXRwdXQ/P0QoKX0pfWNvbnN0IER0PXAoIlpvZEN1c3RvbSIsKGUsdCk9PntIcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmhiKCl9KTtmdW5jdGlvbiBnYyhlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIEdyKGUsdCl7cmV0dXJuIEloKER0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIFFyKGUsdD17fSl7cmV0dXJuIFBoKER0LGUsdCl9ZnVuY3Rpb24gWXIoZSx0KXtyZXR1cm4geGgoZSx0KX1jb25zdCBiYz1FaCx2Yz1BaCxYcj1wKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e0R0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjaygkbihlLHQpKX19KTtmdW5jdGlvbiB5YyhlLHQ9e30pe2NvbnN0IG49bmV3IFhyKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLnkodCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgX2M9KC4uLmUpPT5PaCh7Q29kZWM6cXQsQm9vbGVhbjpBdCxTdHJpbmc6enR9LC4uLmUpO2Z1bmN0aW9uIGtjKGUpe2NvbnN0IHQ9SnIoKCk9PkEoW2goZSksQygpLEwoKSxXbigpLFAodCksWihoKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gbm8oZSx0KXtyZXR1cm4gbmV3IFVyKHt0eXBlOiJwaXBlIixpbjpYbihlKSxvdXQ6dH0pfWNvbnN0IE1iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6Z3IsWm9kQXJyYXk6X3IsWm9kQmFzZTY0OkhuLFpvZEJhc2U2NFVSTDpCbixab2RCaWdJbnQ6T3QsWm9kQmlnSW50Rm9ybWF0OktuLFpvZEJvb2xlYW46QXQsWm9kQ0lEUnY0OlVuLFpvZENJRFJ2NjpGbixab2RDVUlEOlpuLFpvZENVSUQyOk5uLFpvZENhdGNoOnFyLFpvZENvZGVjOnF0LFpvZENyZWRpdENhcmQ6ZHIsWm9kQ3VzdG9tOkR0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpKZSxab2REYXRlOlFuLFpvZERlZmF1bHQ6T3IsWm9kRGlzY3JpbWluYXRlZFVuaW9uOndyLFpvZEUxNjQ6Vm4sWm9kRW1haWw6RW4sWm9kRW1vamk6T24sWm9kRW51bTpydCxab2RFeGFjdE9wdGlvbmFsOmVvLFpvZEZpbGU6eHIsWm9kRnVuY3Rpb246V3IsWm9kR1VJRDpBbixab2RJQkFOOnByLFpvZElQdjQ6RG4sWm9kSVB2NjpMbixab2RJU09EYXRlOkl0LFpvZElTT0RhdGVUaW1lOlR0LFpvZElTT0R1cmF0aW9uOnh0LFpvZElTT1RpbWU6UHQsWm9kSW5zdGFuY2VPZjpYcixab2RJbnRlcnNlY3Rpb246JHIsWm9kSldUOkpuLFpvZEtTVUlEOnFuLFpvZExhenk6VnIsWm9kTGl0ZXJhbDpQcixab2RNQUM6bHIsWm9kTWFwOlRyLFpvZE5hTjpMcixab2ROYW5vSUQ6Um4sWm9kTmV2ZXI6dnIsWm9kTm9uT3B0aW9uYWw6dG8sWm9kTnVsbDptcixab2ROdWxsYWJsZTpBcixab2ROdW1iZXI6RXQsWm9kTnVtYmVyRm9ybWF0OktlLFpvZE9iamVjdDpSdCxab2RPcHRpb25hbDpqdCxab2RQaXBlOk10LFpvZFByZWZhdWx0OlpyLFpvZFByZXByb2Nlc3M6VXIsWm9kUHJvbWlzZTpLcixab2RSZWFkb25seTpGcixab2RSZWNvcmQ6b3QsWm9kU2V0OklyLFpvZFN0cmluZzp6dCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOk1yLFpvZFN5bWJvbDpocixab2RUZW1wbGF0ZUxpdGVyYWw6QnIsWm9kVHJhbnNmb3JtOkNyLFpvZFR1cGxlOlNyLFpvZFR5cGU6RSxab2RVTElEOmpuLFpvZFVSTDpDdCxab2RVVUlEOlBlLFpvZFVuZGVmaW5lZDpmcixab2RVbmlvbjpadCxab2RVbmtub3duOmJyLFpvZFZvaWQ6eXIsWm9kWElEOk1uLFpvZFhvcjprcixfWm9kU3RyaW5nOkNuLF9kZWZhdWx0OlJyLF9mdW5jdGlvbjp2dCxhbnk6R24sYXJyYXk6UCxiYXNlNjQ6T2EsYmFzZTY0dXJsOlJhLGJpZ2ludDpLYSxib29sZWFuOkwsY2F0Y2g6RHIsY2hlY2s6Z2MsY2lkcnY0OkVhLGNpZHJ2NjpBYSxjb2RlYzpwYyxjcmVkaXRDYXJkOk5hLGN1aWQ6JGEsY3VpZDI6U2EsY3VycmVuY3lDb2RlOlVhLGN1c3RvbTpHcixkYXRlOlhhLGRlc2NyaWJlOmJjLGRpc2NyaW1pbmF0ZWRVbmlvbjpZbixlMTY0OlphLGVtYWlsOmhhLGVtb2ppOmthLGVudW06aWUsZXhhY3RPcHRpb25hbDpFcixmaWxlOmNjLGZsb2F0MzI6SGEsZmxvYXQ2NDpCYSxmdW5jdGlvbjp2dCxndWlkOmZhLGhhc2g6RmEsaGV4OkxhLGhvc3RuYW1lOkRhLGh0dHBVcmw6X2EsaWJhbjpqYSxpbnN0YW5jZW9mOnljLGludDpZdCxpbnQzMjpWYSxpbnQ2NDpXYSxpbnRlcnNlY3Rpb246TnQsaW52ZXJ0Q29kZWM6aGMsaXB2NDpQYSxpcHY2OkNhLGpzb246a2Msand0Ok1hLGtleW9mOmVjLGtzdWlkOklhLGxhenk6SnIsbGl0ZXJhbDpmLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOnJjLG1hYzp4YSxtYXA6c2MsbWV0YTp2YyxuYW46ZGMsbmFub2lkOndhLG5hdGl2ZUVudW06YWMsbmV2ZXI6bnQsbm9ub3B0aW9uYWw6anIsbnVsbDpXbixudWxsYWJsZTpidCxudWxsaXNoOnVjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYscGFydGlhbFJlY29yZDpvYyxwaXBlOlh0LHByZWZhdWx0Ok5yLHByZXByb2Nlc3M6bm8scHJvbWlzZTptYyxyZWFkb25seTpIcixyZWNvcmQ6WixyZWZpbmU6UXIsc2V0OmljLHN0cmljdE9iamVjdDp0YyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6cWEsc3RyaW5nYm9vbDpfYyxzdWNjZXNzOmxjLHN1cGVyUmVmaW5lOllyLHN5bWJvbDpRYSx0ZW1wbGF0ZUxpdGVyYWw6ZmMsdHJhbnNmb3JtOlhuLHR1cGxlOnpyLHVpbnQzMjpKYSx1aW50NjQ6R2EsdWxpZDp6YSx1bmRlZmluZWQ6Z3QsdW5pb246QSx1bmtub3duOkQsdXJsOnlhLHV1aWQ6bWEsdXVpZHY0OmdhLHV1aWR2NjpiYSx1dWlkdjc6dmEsdm9pZDpZYSx4aWQ6VGEseG9yOm5jfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLExoPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBVaChlKXt0ZSh7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIEZoKCl7cmV0dXJuIHRlKCkuY3VzdG9tRXJyb3J9dmFyIHhvO3hvfHwoeG89e30pO2Z1bmN0aW9uIEhoKGUpe3JldHVybiBLaShUdCxlKX1mdW5jdGlvbiBxYihlKXtyZXR1cm4gV2koSXQsZSl9ZnVuY3Rpb24gRGIoZSl7cmV0dXJuIEdpKFB0LGUpfWZ1bmN0aW9uIExiKGUpe3JldHVybiBRaSh4dCxlKX1jb25zdCB3Yz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpJdCxab2RJU09EYXRlVGltZTpUdCxab2RJU09EdXJhdGlvbjp4dCxab2RJU09UaW1lOlB0LGRhdGU6cWIsZGF0ZXRpbWU6SGgsZHVyYXRpb246TGIsdGltZTpEYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxTPXsuLi5NYiwuLi5OYixpc286d2N9LFViPW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIEZiKGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIF91KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIEhiKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gQmIoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpIYihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIFZiKGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBhIG9mIHMpe2NvbnN0IGk9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGEpO2kuc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6aS5lcnJvci5pc3N1ZXMsaW5wdXQ6YSxwYXRoOlthXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gVHMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgaT1UcyhhLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChpKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgYT1UcyhlW3NdLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2F9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBKYj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLEtiPW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBKdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShKdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5KYi5oYXModCk/SnQobik6IUtiLmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoSnQpKX1mdW5jdGlvbiBrdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gV2IoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7Y29uc3QgaT1UcyhyW2FdLG5ldyBTZXQpO2lmKGk9PT1udWxsKWNvbnRpbnVlO2NvbnN0IHU9cy5nZXQoaSk7aWYodT09PXZvaWQgMCl7cy5zZXQoaSxhKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7YX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7dX1gLGlucHV0OnIscGF0aDpbYV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGE9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBpPTA7Zm9yKGNvbnN0IHUgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZSh1KS5zdWNjZXNzJiYrK2k+PWEpYnJlYWs7aTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7a3Uocyl9OyBmb3VuZCAke2l9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmaT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtrdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiB3dShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP1MuYW55KCk6bGUoZSx0KX1jb25zdCBHYj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIEJoKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIFMubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPUJiKHIsdCksYT1sZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsYSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxhfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiBTLm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIFMubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGE9PnR5cGVvZiBhPT0ic3RyaW5nIikpcmV0dXJuIFMuZW51bShyKTtjb25zdCBzPXIubWFwKGE9PlMubGl0ZXJhbChhKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTpTLnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIFMubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBhPXsuLi5lLHR5cGU6c307cmV0dXJuIEJoKGEsdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP1MubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTpTLnVuaW9uKHIpfWlmKCFuKXJldHVybiBTLmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPVMuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKFMuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayhTLnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayhTLnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayhTLmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2soUy5yZWdleChHYikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayhTLmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2soUy5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayhTLmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2soUy5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2soUy5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2soUy5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2soUy5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayhTLmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKFMuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKFMuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2soUy5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKFMuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKFMuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayhTLmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2soUy5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2soUy5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayhTLmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKFMudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKFMueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKFMua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP1MubnVtYmVyKCkuaW50KCk6Uy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPVMuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289Uy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxhPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGk9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP2xlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLGJdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IHY9bGUoYix0KTtzdChyLG0sYS5oYXMobSk/djp2Lm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyxiPU9iamVjdC5rZXlzKG0pLHY9W107Zm9yKGNvbnN0IHcgb2YgYil7Y29uc3QgJD1sZShtW3ddLHQpLE49Uy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKHcpKTt2LnB1c2goUy5sb29zZVJlY29yZChOLCQpKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2goUy5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLnYpLF8ubGVuZ3RoPT09MClvPVMub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCB3PVMuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCAkPTI7JDxfLmxlbmd0aDskKyspdz1TLmludGVyc2VjdGlvbih3LF9bJF0pO289d31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IHc9T2JqZWN0LmtleXMociksJD1iLm1hcChJPT5uZXcgUmVnRXhwKEkpKSxOPW87bz1vLmNoZWNrKEk9PntpZighSGUoSS52YWx1ZSkpcmV0dXJuO2NvbnN0IEc9W107Zm9yKGNvbnN0IG9lIG9mIE9iamVjdC5rZXlzKEkudmFsdWUpKXcuaW5jbHVkZXMob2UpfHwkLnNvbWUoSj0+Si50ZXN0KG9lKSl8fEcucHVzaChvZSk7Ry5sZW5ndGgmJkkuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkcsaW5wdXQ6SS52YWx1ZSxpbnN0Ok59KX0pfX1lbHNle2NvbnN0IG09Uy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289bS5zdHJpY3QoKTppP289bS5jYXRjaGFsbChpKTpvPW0ucGFzc3Rocm91Z2goKX1jb25zdCB1PWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsbD10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGQ9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZih1fHxsIT09dm9pZCAwfHxkIT09dm9pZCAwKXtsZXQgbTtpZih1KXtjb25zdCBiPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lczttPWxlKGIsdCl9bz1WYihvLHtrZXlTY2hlbWE6bSxtaW5Qcm9wZXJ0aWVzOmwsbWF4UHJvcGVydGllczpkfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9ci5tYXAobT0+bGUobSx0KSksdT1fdShpLGEpLGw9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6d3Uocyx0KSxkPVMudHVwbGUodSk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9cy5tYXAobT0+bGUobSx0KSksdT1fdShpLGEpLGw9d3UoZS5hZGRpdGlvbmFsSXRlbXMsdCksZD1TLnR1cGxlKHUpO289bD9kLnJlc3QobCk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGE9bGUocyx0KTtsZXQgaT1TLmFycmF5KGEpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5tYXgoZS5tYXhJdGVtcykpLG89aX1lbHNlIG89Uy5hcnJheShTLmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89V2Iobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/bGUoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIGxlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9TLmFueSgpOlMubmV2ZXIoKTtsZXQgbj1CaChlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgaT1lLmFueU9mLm1hcChsPT5sZShsLHQpKSx1PVMudW5pb24oaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBpPWUub25lT2YubWFwKGw9PmxlKGwsdCkpLHU9Uy54b3IoaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjpTLmFueSgpO2Vsc2V7bGV0IGk9bz9uOmxlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgdT1vPzA6MTtmb3IobGV0IGw9dTtsPGUuYWxsT2YubGVuZ3RoO2wrKylpPVMuaW50ZXJzZWN0aW9uKGksbGUoZS5hbGxPZltsXSx0KSk7bj1pfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49Uy5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj1TLnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBpIG9mIHMpaSBpbiBlJiYocltpXT1lW2ldKTtjb25zdCBhPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgaSBvZiBhKWkgaW4gZSYmKHJbaV09ZVtpXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYhSnQoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBpIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbaV0hPT12b2lkIDAmJihyW2ldPWVbaV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIUp0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgaSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVtpXSE9PXZvaWQgMCYmKHJbaV09ZVtpXSl9Zm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoZSkpVWIuaGFzKGkpfHxzdChyLGksZVtpXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gVmgoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89RmIobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/P3dlfTtyZXR1cm4gbGUobixzKX1mdW5jdGlvbiBKaChlKXtyZXR1cm4gWGkoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90OkEobi5vcHRpb25zKX19KX1mdW5jdGlvbiBRYihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBRKGUsdWUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gS2goZSl7cmV0dXJuIFFiKGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBZYihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT9LaChlKTplLmlufWZ1bmN0aW9uIFdoKGUpe3JldHVybiBYaShlLHtwaXBlOnQ9PlliKHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/Vih0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gR2goZSl7cmV0dXJuIFhpKGUse3BpcGU6dD0+S2godC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFhiKGUpe3JldHVybiBZcCh6dCxlKX1mdW5jdGlvbiBldihlKXtyZXR1cm4gb2goRXQsZSl9ZnVuY3Rpb24gdHYoZSl7cmV0dXJuIGxoKEF0LGUpfWZ1bmN0aW9uIG52KGUpe3JldHVybiBwaChPdCxlKX1mdW5jdGlvbiBvdihlKXtyZXR1cm4gJGgoUW4sZSl9Y29uc3QgUWg9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDpudixib29sZWFuOnR2LGRhdGU6b3YsbnVtYmVyOmV2LHN0cmluZzpYYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSwkdT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOk1zLCRpbnB1dDp5aSwkb3V0cHV0OnZpLElOVkFMSUQ6a2ksTkVWRVI6anMsVGltZVByZWNpc2lvbjpKaSxab2RBbnk6Z3IsWm9kQXJyYXk6X3IsWm9kQmFzZTY0OkhuLFpvZEJhc2U2NFVSTDpCbixab2RCaWdJbnQ6T3QsWm9kQmlnSW50Rm9ybWF0OktuLFpvZEJvb2xlYW46QXQsWm9kQ0lEUnY0OlVuLFpvZENJRFJ2NjpGbixab2RDVUlEOlpuLFpvZENVSUQyOk5uLFpvZENhdGNoOnFyLFpvZENvZGVjOnF0LFpvZENvbXBpbGVBc3luY0Vycm9yOndpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOiRpLFpvZENyZWRpdENhcmQ6ZHIsWm9kQ3VzdG9tOkR0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpKZSxab2REYXRlOlFuLFpvZERlZmF1bHQ6T3IsWm9kRGlzY3JpbWluYXRlZFVuaW9uOndyLFpvZEUxNjQ6Vm4sWm9kRW1haWw6RW4sWm9kRW1vamk6T24sWm9kRW51bTpydCxab2RFcnJvcjpEaCxab2RFeGFjdE9wdGlvbmFsOmVvLFpvZEZpbGU6eHIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiB4b30sWm9kRnVuY3Rpb246V3IsWm9kR1VJRDpBbixab2RJQkFOOnByLFpvZElQdjQ6RG4sWm9kSVB2NjpMbixab2RJU09EYXRlOkl0LFpvZElTT0RhdGVUaW1lOlR0LFpvZElTT0R1cmF0aW9uOnh0LFpvZElTT1RpbWU6UHQsWm9kSW5zdGFuY2VPZjpYcixab2RJbnRlcnNlY3Rpb246JHIsWm9kSXNzdWVDb2RlOkxoLFpvZEpXVDpKbixab2RLU1VJRDpxbixab2RMYXp5OlZyLFpvZExpdGVyYWw6UHIsWm9kTUFDOmxyLFpvZE1hcDpUcixab2ROYU46THIsWm9kTmFub0lEOlJuLFpvZE5ldmVyOnZyLFpvZE5vbk9wdGlvbmFsOnRvLFpvZE51bGw6bXIsWm9kTnVsbGFibGU6QXIsWm9kTnVtYmVyOkV0LFpvZE51bWJlckZvcm1hdDpLZSxab2RPYmplY3Q6UnQsWm9kT3B0aW9uYWw6anQsWm9kUGlwZTpNdCxab2RQcmVmYXVsdDpacixab2RQcmVwcm9jZXNzOlVyLFpvZFByb21pc2U6S3IsWm9kUmVhZG9ubHk6RnIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDpvdCxab2RTZXQ6SXIsWm9kU3RyaW5nOnp0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6TXIsWm9kU3ltYm9sOmhyLFpvZFRlbXBsYXRlTGl0ZXJhbDpCcixab2RUcmFuc2Zvcm06Q3IsWm9kVHVwbGU6U3IsWm9kVHlwZTpFLFpvZFVMSUQ6am4sWm9kVVJMOkN0LFpvZFVVSUQ6UGUsWm9kVW5kZWZpbmVkOmZyLFpvZFVuaW9uOlp0LFpvZFVua25vd246YnIsWm9kVm9pZDp5cixab2RYSUQ6TW4sWm9kWG9yOmtyLF9ab2RTdHJpbmc6Q24sX2RlZmF1bHQ6UnIsX2Z1bmN0aW9uOnZ0LGFueTpHbixhcnJheTpQLGJhc2U2NDpPYSxiYXNlNjR1cmw6UmEsYmlnaW50OkthLGJvb2xlYW46TCxjYXRjaDpEcixjaGVjazpnYyxjaWRydjQ6RWEsY2lkcnY2OkFhLGNsb25lOlEsY29kZWM6cGMsY29lcmNlOlFoLGNvbXBpbGU6U2ksY29uZmlnOnRlLGNvcmU6amgsY3JlZGl0Q2FyZDpOYSxjdWlkOiRhLGN1aWQyOlNhLGN1cnJlbmN5Q29kZTpVYSxjdXN0b206R3IsZGF0ZTpYYSxkZWNvZGU6aWEsZGVjb2RlQXN5bmM6Y2EsZGVlcFBhcnRpYWw6SmgsZGVzY3JpYmU6YmMsZGlzY3JpbWluYXRlZFVuaW9uOlluLGUxNjQ6WmEsZW1haWw6aGEsZW1vamk6a2EsZW5jb2RlOnNhLGVuY29kZUFzeW5jOmFhLGVuZHNXaXRoOnduLGVudW06aWUsZXhhY3RPcHRpb25hbDpFcixmaWxlOmNjLGZsYXR0ZW5FcnJvcjpKbyxmbG9hdDMyOkhhLGZsb2F0NjQ6QmEsZm9ybWF0RXJyb3I6S28sZnJvbUpTT05TY2hlbWE6VmgsZnVuY3Rpb246dnQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpkaSxnZXRFcnJvck1hcDpGaCxnbG9iYWxSZWdpc3RyeTp3ZSxndDpNZSxndGU6dmUsZ3VpZDpmYSxoYXNoOkZhLGhleDpMYSxob3N0bmFtZTpEYSxodHRwVXJsOl9hLGliYW46amEsaW5jbHVkZXM6X24saW5wdXQ6V2gsaW5zdGFuY2VvZjp5YyxpbnQ6WXQsaW50MzI6VmEsaW50NjQ6V2EsaW50ZXJzZWN0aW9uOk50LGludmVydENvZGVjOmhjLGlwdjQ6UGEsaXB2NjpDYSxpc286d2MsanNvbjprYyxqd3Q6TWEsa2V5b2Y6ZWMsa3N1aWQ6SWEsbGF6eTpKcixsZW5ndGg6JHQsbGl0ZXJhbDpmLGxvY2FsZXM6YmksbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6cmMsbG93ZXJjYXNlOnZuLGx0OmplLGx0ZTpiZSxtYWM6eGEsbWFwOnNjLG1heExlbmd0aDp3dCxtYXhTaXplOml0LG1lbW9pemVyOnRyLG1ldGE6dmMsbWltZTpTbixtaW5MZW5ndGg6QmUsbWluU2l6ZTpxZSxtdWx0aXBsZU9mOnR0LG5hbjpkYyxuYW5vaWQ6d2EsbmF0aXZlRW51bTphYyxuZWdhdGl2ZTppcixuZXZlcjpudCxub25uZWdhdGl2ZTpjcixub25vcHRpb25hbDpqcixub25wb3NpdGl2ZTphcixub3JtYWxpemU6em4sbnVsbDpXbixudWxsYWJsZTpidCxudWxsaXNoOnVjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYsb3V0cHV0OkdoLG92ZXJ3cml0ZTpBZSxwYXJzZTp0YSxwYXJzZUFzeW5jOm5hLHBhcnRpYWxSZWNvcmQ6b2MscGlwZTpYdCxwb3NpdGl2ZTpzcixwcmVmYXVsdDpOcixwcmVwcm9jZXNzOm5vLHByZXR0aWZ5RXJyb3I6RHMscHJvbWlzZTptYyxwcm9wZXJ0aWVzOiRuLHByb3BlcnR5OnVyLHJlYWRvbmx5OkhyLHJlY29yZDpaLHJlZmluZTpRcixyZWdleDpibixyZWdleGVzOlhvLHJlZ2lzdHJ5Om5yLHNhZmVEZWNvZGU6bGEsc2FmZURlY29kZUFzeW5jOnBhLHNhZmVFbmNvZGU6dWEsc2FmZUVuY29kZUFzeW5jOmRhLHNhZmVQYXJzZTpvYSxzYWZlUGFyc2VBc3luYzpyYSxzZXQ6aWMsc2V0RXJyb3JNYXA6VWgsc2l6ZTprdCxzbHVnaWZ5OnhuLHN0YXJ0c1dpdGg6a24sc3RyaWN0T2JqZWN0OnRjLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpxYSxzdHJpbmdib29sOl9jLHN1Y2Nlc3M6bGMsc3VwZXJSZWZpbmU6WXIsc3ltYm9sOlFhLHRlbXBsYXRlTGl0ZXJhbDpmYyx0b0pTT05TY2hlbWE6WWksdG9Mb3dlckNhc2U6SW4sdG9VcHBlckNhc2U6UG4sdG9ab2Q6TW8sdHJhbnNmb3JtOlhuLHRyZWVpZnlFcnJvcjpxcyx0cmltOlRuLHR1cGxlOnpyLHVpbnQzMjpKYSx1aW50NjQ6R2EsdWxpZDp6YSx1bmRlZmluZWQ6Z3QsdW5pb246QSx1bmtub3duOkQsdXBwZXJjYXNlOnluLHVybDp5YSx1dGlsOk5zLHV1aWQ6bWEsdXVpZHY0OmdhLHV1aWR2NjpiYSx1dWlkdjc6dmEsdmFsaWRhdGU6R28sdmFsaWRhdGVBc3luYzpRbyx2b2lkOllhLHdpdGhQYXJzZXI6emkseGlkOlRhLHhvcjpuY30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxydj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOk1zLCRpbnB1dDp5aSwkb3V0cHV0OnZpLElOVkFMSUQ6a2ksTkVWRVI6anMsVGltZVByZWNpc2lvbjpKaSxab2RBbnk6Z3IsWm9kQXJyYXk6X3IsWm9kQmFzZTY0OkhuLFpvZEJhc2U2NFVSTDpCbixab2RCaWdJbnQ6T3QsWm9kQmlnSW50Rm9ybWF0OktuLFpvZEJvb2xlYW46QXQsWm9kQ0lEUnY0OlVuLFpvZENJRFJ2NjpGbixab2RDVUlEOlpuLFpvZENVSUQyOk5uLFpvZENhdGNoOnFyLFpvZENvZGVjOnF0LFpvZENvbXBpbGVBc3luY0Vycm9yOndpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOiRpLFpvZENyZWRpdENhcmQ6ZHIsWm9kQ3VzdG9tOkR0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpKZSxab2REYXRlOlFuLFpvZERlZmF1bHQ6T3IsWm9kRGlzY3JpbWluYXRlZFVuaW9uOndyLFpvZEUxNjQ6Vm4sWm9kRW1haWw6RW4sWm9kRW1vamk6T24sWm9kRW51bTpydCxab2RFcnJvcjpEaCxab2RFeGFjdE9wdGlvbmFsOmVvLFpvZEZpbGU6eHIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiB4b30sWm9kRnVuY3Rpb246V3IsWm9kR1VJRDpBbixab2RJQkFOOnByLFpvZElQdjQ6RG4sWm9kSVB2NjpMbixab2RJU09EYXRlOkl0LFpvZElTT0RhdGVUaW1lOlR0LFpvZElTT0R1cmF0aW9uOnh0LFpvZElTT1RpbWU6UHQsWm9kSW5zdGFuY2VPZjpYcixab2RJbnRlcnNlY3Rpb246JHIsWm9kSXNzdWVDb2RlOkxoLFpvZEpXVDpKbixab2RLU1VJRDpxbixab2RMYXp5OlZyLFpvZExpdGVyYWw6UHIsWm9kTUFDOmxyLFpvZE1hcDpUcixab2ROYU46THIsWm9kTmFub0lEOlJuLFpvZE5ldmVyOnZyLFpvZE5vbk9wdGlvbmFsOnRvLFpvZE51bGw6bXIsWm9kTnVsbGFibGU6QXIsWm9kTnVtYmVyOkV0LFpvZE51bWJlckZvcm1hdDpLZSxab2RPYmplY3Q6UnQsWm9kT3B0aW9uYWw6anQsWm9kUGlwZTpNdCxab2RQcmVmYXVsdDpacixab2RQcmVwcm9jZXNzOlVyLFpvZFByb21pc2U6S3IsWm9kUmVhZG9ubHk6RnIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDpvdCxab2RTZXQ6SXIsWm9kU3RyaW5nOnp0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6TXIsWm9kU3ltYm9sOmhyLFpvZFRlbXBsYXRlTGl0ZXJhbDpCcixab2RUcmFuc2Zvcm06Q3IsWm9kVHVwbGU6U3IsWm9kVHlwZTpFLFpvZFVMSUQ6am4sWm9kVVJMOkN0LFpvZFVVSUQ6UGUsWm9kVW5kZWZpbmVkOmZyLFpvZFVuaW9uOlp0LFpvZFVua25vd246YnIsWm9kVm9pZDp5cixab2RYSUQ6TW4sWm9kWG9yOmtyLF9ab2RTdHJpbmc6Q24sX2RlZmF1bHQ6UnIsX2Z1bmN0aW9uOnZ0LGFueTpHbixhcnJheTpQLGJhc2U2NDpPYSxiYXNlNjR1cmw6UmEsYmlnaW50OkthLGJvb2xlYW46TCxjYXRjaDpEcixjaGVjazpnYyxjaWRydjQ6RWEsY2lkcnY2OkFhLGNsb25lOlEsY29kZWM6cGMsY29lcmNlOlFoLGNvbXBpbGU6U2ksY29uZmlnOnRlLGNvcmU6amgsY3JlZGl0Q2FyZDpOYSxjdWlkOiRhLGN1aWQyOlNhLGN1cnJlbmN5Q29kZTpVYSxjdXN0b206R3IsZGF0ZTpYYSxkZWNvZGU6aWEsZGVjb2RlQXN5bmM6Y2EsZGVlcFBhcnRpYWw6SmgsZGVmYXVsdDokdSxkZXNjcmliZTpiYyxkaXNjcmltaW5hdGVkVW5pb246WW4sZTE2NDpaYSxlbWFpbDpoYSxlbW9qaTprYSxlbmNvZGU6c2EsZW5jb2RlQXN5bmM6YWEsZW5kc1dpdGg6d24sZW51bTppZSxleGFjdE9wdGlvbmFsOkVyLGZpbGU6Y2MsZmxhdHRlbkVycm9yOkpvLGZsb2F0MzI6SGEsZmxvYXQ2NDpCYSxmb3JtYXRFcnJvcjpLbyxmcm9tSlNPTlNjaGVtYTpWaCxmdW5jdGlvbjp2dCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmRpLGdldEVycm9yTWFwOkZoLGdsb2JhbFJlZ2lzdHJ5OndlLGd0Ok1lLGd0ZTp2ZSxndWlkOmZhLGhhc2g6RmEsaGV4OkxhLGhvc3RuYW1lOkRhLGh0dHBVcmw6X2EsaWJhbjpqYSxpbmNsdWRlczpfbixpbnB1dDpXaCxpbnN0YW5jZW9mOnljLGludDpZdCxpbnQzMjpWYSxpbnQ2NDpXYSxpbnRlcnNlY3Rpb246TnQsaW52ZXJ0Q29kZWM6aGMsaXB2NDpQYSxpcHY2OkNhLGlzbzp3Yyxqc29uOmtjLGp3dDpNYSxrZXlvZjplYyxrc3VpZDpJYSxsYXp5OkpyLGxlbmd0aDokdCxsaXRlcmFsOmYsbG9jYWxlczpiaSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDpyYyxsb3dlcmNhc2U6dm4sbHQ6amUsbHRlOmJlLG1hYzp4YSxtYXA6c2MsbWF4TGVuZ3RoOnd0LG1heFNpemU6aXQsbWVtb2l6ZXI6dHIsbWV0YTp2YyxtaW1lOlNuLG1pbkxlbmd0aDpCZSxtaW5TaXplOnFlLG11bHRpcGxlT2Y6dHQsbmFuOmRjLG5hbm9pZDp3YSxuYXRpdmVFbnVtOmFjLG5lZ2F0aXZlOmlyLG5ldmVyOm50LG5vbm5lZ2F0aXZlOmNyLG5vbm9wdGlvbmFsOmpyLG5vbnBvc2l0aXZlOmFyLG5vcm1hbGl6ZTp6bixudWxsOlduLG51bGxhYmxlOmJ0LG51bGxpc2g6dWMsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6VixvdXRwdXQ6R2gsb3ZlcndyaXRlOkFlLHBhcnNlOnRhLHBhcnNlQXN5bmM6bmEscGFydGlhbFJlY29yZDpvYyxwaXBlOlh0LHBvc2l0aXZlOnNyLHByZWZhdWx0Ok5yLHByZXByb2Nlc3M6bm8scHJldHRpZnlFcnJvcjpEcyxwcm9taXNlOm1jLHByb3BlcnRpZXM6JG4scHJvcGVydHk6dXIscmVhZG9ubHk6SHIscmVjb3JkOloscmVmaW5lOlFyLHJlZ2V4OmJuLHJlZ2V4ZXM6WG8scmVnaXN0cnk6bnIsc2FmZURlY29kZTpsYSxzYWZlRGVjb2RlQXN5bmM6cGEsc2FmZUVuY29kZTp1YSxzYWZlRW5jb2RlQXN5bmM6ZGEsc2FmZVBhcnNlOm9hLHNhZmVQYXJzZUFzeW5jOnJhLHNldDppYyxzZXRFcnJvck1hcDpVaCxzaXplOmt0LHNsdWdpZnk6eG4sc3RhcnRzV2l0aDprbixzdHJpY3RPYmplY3Q6dGMsc3RyaW5nOmgsc3RyaW5nRm9ybWF0OnFhLHN0cmluZ2Jvb2w6X2Msc3VjY2VzczpsYyxzdXBlclJlZmluZTpZcixzeW1ib2w6UWEsdGVtcGxhdGVMaXRlcmFsOmZjLHRvSlNPTlNjaGVtYTpZaSx0b0xvd2VyQ2FzZTpJbix0b1VwcGVyQ2FzZTpQbix0b1pvZDpNbyx0cmFuc2Zvcm06WG4sdHJlZWlmeUVycm9yOnFzLHRyaW06VG4sdHVwbGU6enIsdWludDMyOkphLHVpbnQ2NDpHYSx1bGlkOnphLHVuZGVmaW5lZDpndCx1bmlvbjpBLHVua25vd246RCx1cHBlcmNhc2U6eW4sdXJsOnlhLHV0aWw6TnMsdXVpZDptYSx1dWlkdjQ6Z2EsdXVpZHY2OmJhLHV1aWR2Nzp2YSx2YWxpZGF0ZTpHbyx2YWxpZGF0ZUFzeW5jOlFvLHZvaWQ6WWEsd2l0aFBhcnNlcjp6aSx4aWQ6VGEseG9yOm5jLHo6JHV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksUWU9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsZXM9IjIuMCIsZWU9R3IoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSksWWg9QShbaCgpLEMoKS5pbnQoKV0pLFhoPWgoKTtzZSh7dHRsOkMoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpDKCkub3B0aW9uYWwoKX0pO2NvbnN0IHN2PWcoe3R0bDpDKCkub3B0aW9uYWwoKX0pLGl2PWcoe3Rhc2tJZDpoKCl9KSwkYz1zZSh7cHJvZ3Jlc3NUb2tlbjpZaC5vcHRpb25hbCgpLFtRZV06aXYub3B0aW9uYWwoKX0pLF9lPWcoe19tZXRhOiRjLm9wdGlvbmFsKCl9KSxvbz1fZS5leHRlbmQoe3Rhc2s6c3Yub3B0aW9uYWwoKX0pLGF2PWU9Pm9vLnNhZmVQYXJzZShlKS5zdWNjZXNzLGFlPWcoe21ldGhvZDpoKCkscGFyYW1zOl9lLmxvb3NlKCkub3B0aW9uYWwoKX0pLHplPWcoe19tZXRhOiRjLm9wdGlvbmFsKCl9KSxUZT1nKHttZXRob2Q6aCgpLHBhcmFtczp6ZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxjZT1zZSh7X21ldGE6JGMub3B0aW9uYWwoKX0pLHJvPUEoW2goKSxDKCkuaW50KCldKSxlZj1nKHtqc29ucnBjOmYoZXMpLGlkOnJvLC4uLmFlLnNoYXBlfSkuc3RyaWN0KCksU3U9ZT0+ZWYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsdGY9Zyh7anNvbnJwYzpmKGVzKSwuLi5UZS5zaGFwZX0pLnN0cmljdCgpLGN2PWU9PnRmLnNhZmVQYXJzZShlKS5zdWNjZXNzLFNjPWcoe2pzb25ycGM6ZihlcyksaWQ6cm8scmVzdWx0OmNlfSkuc3RyaWN0KCksdm89ZT0+U2Muc2FmZVBhcnNlKGUpLnN1Y2Nlc3M7dmFyIEY7KGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0aW9uQ2xvc2VkPS0zMmUzXT0iQ29ubmVjdGlvbkNsb3NlZCIsZVtlLlJlcXVlc3RUaW1lb3V0PS0zMjAwMV09IlJlcXVlc3RUaW1lb3V0IixlW2UuUGFyc2VFcnJvcj0tMzI3MDBdPSJQYXJzZUVycm9yIixlW2UuSW52YWxpZFJlcXVlc3Q9LTMyNjAwXT0iSW52YWxpZFJlcXVlc3QiLGVbZS5NZXRob2ROb3RGb3VuZD0tMzI2MDFdPSJNZXRob2ROb3RGb3VuZCIsZVtlLkludmFsaWRQYXJhbXM9LTMyNjAyXT0iSW52YWxpZFBhcmFtcyIsZVtlLkludGVybmFsRXJyb3I9LTMyNjAzXT0iSW50ZXJuYWxFcnJvciIsZVtlLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQ9LTMyMDQyXT0iVXJsRWxpY2l0YXRpb25SZXF1aXJlZCJ9KShGfHwoRj17fSkpO2NvbnN0IHpjPWcoe2pzb25ycGM6ZihlcyksaWQ6cm8ub3B0aW9uYWwoKSxlcnJvcjpnKHtjb2RlOkMoKS5pbnQoKSxtZXNzYWdlOmgoKSxkYXRhOkQoKS5vcHRpb25hbCgpfSl9KS5zdHJpY3QoKSx1dj1lPT56Yy5zYWZlUGFyc2UoZSkuc3VjY2Vzcyxsdj1BKFtlZix0ZixTYyx6Y10pO0EoW1NjLHpjXSk7Y29uc3QgVGM9Y2Uuc3RyaWN0KCksZHY9emUuZXh0ZW5kKHtyZXF1ZXN0SWQ6cm8ub3B0aW9uYWwoKSxyZWFzb246aCgpLm9wdGlvbmFsKCl9KSxJYz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczpkdn0pLHB2PWcoe3NyYzpoKCksbWltZVR5cGU6aCgpLm9wdGlvbmFsKCksc2l6ZXM6UChoKCkpLm9wdGlvbmFsKCksdGhlbWU6aWUoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLHNvPWcoe2ljb25zOlAocHYpLm9wdGlvbmFsKCl9KSx5dD1nKHtuYW1lOmgoKSx0aXRsZTpoKCkub3B0aW9uYWwoKX0pLHRzPXl0LmV4dGVuZCh7Li4ueXQuc2hhcGUsLi4uc28uc2hhcGUsdmVyc2lvbjpoKCksd2Vic2l0ZVVybDpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKX0pLGh2PU50KGcoe2FwcGx5RGVmYXVsdHM6TCgpLm9wdGlvbmFsKCl9KSxaKGgoKSxEKCkpKSxmdj1ubyhlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLE50KGcoe2Zvcm06aHYub3B0aW9uYWwoKSx1cmw6ZWUub3B0aW9uYWwoKX0pLFooaCgpLEQoKSkub3B0aW9uYWwoKSkpLG12PXNlKHtsaXN0OmVlLm9wdGlvbmFsKCksY2FuY2VsOmVlLm9wdGlvbmFsKCkscmVxdWVzdHM6c2Uoe3NhbXBsaW5nOnNlKHtjcmVhdGVNZXNzYWdlOmVlLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnNlKHtjcmVhdGU6ZWUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksZ3Y9c2Uoe2xpc3Q6ZWUub3B0aW9uYWwoKSxjYW5jZWw6ZWUub3B0aW9uYWwoKSxyZXF1ZXN0czpzZSh7dG9vbHM6c2Uoe2NhbGw6ZWUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksYnY9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLGVlKS5vcHRpb25hbCgpLHNhbXBsaW5nOmcoe2NvbnRleHQ6ZWUub3B0aW9uYWwoKSx0b29sczplZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpmdi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczptdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksZWUpLm9wdGlvbmFsKCl9KSx2dj1fZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOmJ2LGNsaWVudEluZm86dHN9KSx5dj1hZS5leHRlbmQoe21ldGhvZDpmKCJpbml0aWFsaXplIikscGFyYW1zOnZ2fSksX3Y9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLGVlKS5vcHRpb25hbCgpLGxvZ2dpbmc6ZWUub3B0aW9uYWwoKSxjb21wbGV0aW9uczplZS5vcHRpb25hbCgpLHByb21wdHM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczpnKHtzdWJzY3JpYmU6TCgpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpndi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksZWUpLm9wdGlvbmFsKCl9KSxrdj1jZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOl92LHNlcnZlckluZm86dHMsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksd3Y9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczp6ZS5vcHRpb25hbCgpfSksbnM9YWUuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczpfZS5vcHRpb25hbCgpfSksJHY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOlYoQygpKSxtZXNzYWdlOlYoaCgpKX0pLFN2PWcoey4uLnplLnNoYXBlLC4uLiR2LnNoYXBlLHByb2dyZXNzVG9rZW46WWh9KSxQYz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOlN2fSksenY9X2UuZXh0ZW5kKHtjdXJzb3I6WGgub3B0aW9uYWwoKX0pLGlvPWFlLmV4dGVuZCh7cGFyYW1zOnp2Lm9wdGlvbmFsKCl9KSxhbz1jZS5leHRlbmQoe25leHRDdXJzb3I6WGgub3B0aW9uYWwoKX0pLFR2PWllKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLGNvPWcoe3Rhc2tJZDpoKCksc3RhdHVzOlR2LHR0bDpBKFtDKCksV24oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOlYoQygpKSxzdGF0dXNNZXNzYWdlOlYoaCgpKX0pLHhjPWNlLmV4dGVuZCh7dGFzazpjb30pLEl2PXplLm1lcmdlKGNvKSxDbz1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpJdn0pLENjPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczpfZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLEVjPWNlLm1lcmdlKGNvKSxBYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtjZS5sb29zZSgpO2NvbnN0IE9jPWlvLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLFJjPWFvLmV4dGVuZCh7dGFza3M6UChjbyl9KSxaYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxQdj1jZS5tZXJnZShjbyksbmY9Zyh7dXJpOmgoKSxtaW1lVHlwZTpWKGgoKSksX21ldGE6WihoKCksRCgpKS5vcHRpb25hbCgpfSksb2Y9bmYuZXh0ZW5kKHt0ZXh0OmgoKX0pLE5jPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSkscmY9bmYuZXh0ZW5kKHtibG9iOk5jfSksdW89aWUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLEx0PWcoe2F1ZGllbmNlOlAodW8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6SGgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxzZj1nKHsuLi55dC5zaGFwZSwuLi5zby5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxtaW1lVHlwZTpWKGgoKSksc2l6ZTpWKEMoKSksYW5ub3RhdGlvbnM6THQub3B0aW9uYWwoKSxfbWV0YTpWKHNlKHt9KSl9KSx4dj1nKHsuLi55dC5zaGFwZSwuLi5zby5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246VihoKCkpLG1pbWVUeXBlOlYoaCgpKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlYoc2Uoe30pKX0pLEN2PWlvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxhZj1hby5leHRlbmQoe3Jlc291cmNlczpQKHNmKX0pLEV2PWlvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksQXY9YW8uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKHh2KX0pLGpjPV9lLmV4dGVuZCh7dXJpOmgoKX0pLE92PWpjLFJ2PWFlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOk92fSksY2Y9Y2UuZXh0ZW5kKHtjb250ZW50czpQKEEoW29mLHJmXSkpfSksWnY9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnplLm9wdGlvbmFsKCl9KSxOdj1qYyxqdj1hZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOk52fSksTXY9amMscXY9YWUuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOk12fSksRHY9emUuZXh0ZW5kKHt1cmk6aCgpfSksTHY9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpEdn0pLFV2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxyZXF1aXJlZDpWKEwoKSl9KSxGdj1nKHsuLi55dC5zaGFwZSwuLi5zby5zaGFwZSxkZXNjcmlwdGlvbjpWKGgoKSksYXJndW1lbnRzOlYoUChVdikpLF9tZXRhOlYoc2Uoe30pKX0pLEh2PWlvLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksQnY9YW8uZXh0ZW5kKHtwcm9tcHRzOlAoRnYpfSksVnY9X2UuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6WihoKCksaCgpKS5vcHRpb25hbCgpfSksSnY9YWUuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6VnZ9KSxNYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLHFjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOk5jLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLERjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOk5jLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLEt2PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6WihoKCksRCgpKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSx1Zj1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6QShbb2YscmZdKSxhbm5vdGF0aW9uczpMdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGxmPXNmLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxsbz1BKFtNYyxxYyxEYyxsZix1Zl0pLFd2PWcoe3JvbGU6dW8sY29udGVudDpsb30pLEd2PWNlLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChXdil9KSxRdj1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnplLm9wdGlvbmFsKCl9KSxZdj1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6TCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkwoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkwoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6TCgpLm9wdGlvbmFsKCl9KSxYdj1nKHt0YXNrU3VwcG9ydDppZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLExjPWcoey4uLnl0LnNoYXBlLC4uLnNvLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxlZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxlZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSkub3B0aW9uYWwoKSxhbm5vdGF0aW9uczpZdi5vcHRpb25hbCgpLGV4ZWN1dGlvbjpYdi5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGRmPWlvLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2xpc3QiKX0pLGV5PWFvLmV4dGVuZCh7dG9vbHM6UChMYyl9KSxvcz1jZS5leHRlbmQoe2NvbnRlbnQ6UChsbykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6WihoKCksRCgpKS5vcHRpb25hbCgpLGlzRXJyb3I6TCgpLm9wdGlvbmFsKCl9KTtvcy5vcihjZS5leHRlbmQoe3Rvb2xSZXN1bHQ6RCgpfSkpO2NvbnN0IHR5PW9vLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLHBmPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2NhbGwiKSxwYXJhbXM6dHl9KSxueT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczp6ZS5vcHRpb25hbCgpfSk7Zyh7YXV0b1JlZnJlc2g6TCgpLmRlZmF1bHQoITApLGRlYm91bmNlTXM6QygpLmludCgpLm5vbm5lZ2F0aXZlKCkuZGVmYXVsdCgzMDApfSk7Y29uc3QgaGY9aWUoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLG95PV9lLmV4dGVuZCh7bGV2ZWw6aGZ9KSxyeT1hZS5leHRlbmQoe21ldGhvZDpmKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOm95fSksc3k9emUuZXh0ZW5kKHtsZXZlbDpoZixsb2dnZXI6aCgpLm9wdGlvbmFsKCksZGF0YTpEKCl9KSxpeT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6c3l9KSxheT1nKHtuYW1lOmgoKS5vcHRpb25hbCgpfSksY3k9Zyh7aGludHM6UChheSkub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLHV5PWcoe21vZGU6aWUoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSxseT1nKHt0eXBlOmYoInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmgoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDpQKGxvKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpMKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxkeT1ZbigidHlwZSIsW01jLHFjLERjXSksRW89WW4oInR5cGUiLFtNYyxxYyxEYyxLdixseV0pLHB5PWcoe3JvbGU6dW8sY29udGVudDpBKFtFbyxQKEVvKV0pLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGh5PW9vLmV4dGVuZCh7bWVzc2FnZXM6UChweSksbW9kZWxQcmVmZXJlbmNlczpjeS5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpoKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDppZShbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOkMoKS5vcHRpb25hbCgpLG1heFRva2VuczpDKCkuaW50KCksc3RvcFNlcXVlbmNlczpQKGgoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTplZS5vcHRpb25hbCgpLHRvb2xzOlAoTGMpLm9wdGlvbmFsKCksdG9vbENob2ljZTp1eS5vcHRpb25hbCgpfSksZnk9YWUuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpoeX0pLGZmPWNlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246VihpZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTp1byxjb250ZW50OmR5fSksbWY9Y2UuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpWKGllKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTp1byxjb250ZW50OkEoW0VvLFAoRW8pXSl9KSxteT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkwoKS5vcHRpb25hbCgpfSksZ3k9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDppZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxieT1nKHt0eXBlOmllKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLHZ5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLHl5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxfeT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksa3k9QShbdnkseXldKSx3eT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSwkeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLFN5PUEoW3d5LCR5XSksenk9QShbX3ksa3ksU3ldKSxUeT1BKFt6eSxteSxneSxieV0pLEl5PW9vLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlooaCgpLFR5KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksUHk9b28uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSx4eT1BKFtJeSxQeV0pLEN5PWFlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczp4eX0pLEV5PXplLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxBeT1UZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOkV5fSksT3k9Y2UuZXh0ZW5kKHthY3Rpb246aWUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6bm8oZT0+ZT09PW51bGw/dm9pZCAwOmUsWihoKCksQShbaCgpLEMoKSxMKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSksUnk9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksWnk9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSxOeT1fZS5leHRlbmQoe3JlZjpBKFtaeSxSeV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlooaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxqeT1hZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOk55fSksTXk9Y2UuZXh0ZW5kKHtjb21wbGV0aW9uOnNlKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOlYoQygpLmludCgpKSxoYXNNb3JlOlYoTCgpKX0pfSkscXk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxEeT1hZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOl9lLm9wdGlvbmFsKCl9KSxMeT1jZS5leHRlbmQoe3Jvb3RzOlAocXkpfSksVXk9VGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6emUub3B0aW9uYWwoKX0pO0EoW25zLHl2LGp5LHJ5LEp2LEh2LEN2LEV2LFJ2LGp2LHF2LHBmLGRmLENjLEFjLE9jLFpjXSk7QShbSWMsUGMsd3YsVXksQ29dKTtBKFtUYyxmZixtZixPeSxMeSxFYyxSYyx4Y10pO0EoW25zLGZ5LEN5LER5LENjLEFjLE9jLFpjXSk7QShbSWMsUGMsaXksTHYsWnYsbnksUXYsQ28sQXldKTtBKFtUYyxrdixNeSxHdixCdixhZixBdixjZixvcyxleSxFYyxSYyx4Y10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PUYuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgRnkoci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgRnkgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihGLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24genUoZSl7Y29uc3Qgbj1SYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89WmIobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBUdShlLHQpe2NvbnN0IG49TWgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBIeT02ZTQ7Y2xhc3MgQnl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoSWMsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKFBjLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihucyxuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKENjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEFjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgaTtmb3IoO2k9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoaS50eXBlPT09InJlc3BvbnNlInx8aS50eXBlPT09ImVycm9yIil7Y29uc3QgdT1pLm1lc3NhZ2UsbD11LmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxpLnR5cGU9PT0icmVzcG9uc2UiKWQodSk7ZWxzZXtjb25zdCBtPXUsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09aS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGkubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFhKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighR2UoYS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoR2UoYS5zdGF0dXMpKXtjb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uaSxfbWV0YTp7Li4uaS5fbWV0YSxbUWVdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihPYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFpjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKEdlKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihGLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKEYuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihGLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKEYuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGEpPT57cj8uKHMsYSksdm8ocyl8fHV2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6U3Uocyk/dGhpcy5fb25yZXF1ZXN0KHMsYSk6Y3Yocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoRi5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bUWVdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOkYuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGEpO2NvbnN0IGk9YXYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLHU9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDphLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooRi5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IF89di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBfJiZ1JiZhd2FpdCB1LnVwZGF0ZVRhc2tTdGF0dXMoXywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6dSx0YXNrUmVxdWVzdGVkVHRsOmk/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpGLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWEmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgYT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxpPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihpJiZhJiZpLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaCh1KXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxhKHUpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksdm8odCkpbyh0KTtlbHNle2NvbnN0IGE9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oYSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKHZvKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgYT10LnJlc3VsdDtpZihhLnRhc2smJnR5cGVvZiBhLnRhc2s9PSJvYmplY3QiKXtjb25zdCBpPWEudGFzazt0eXBlb2YgaS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGkudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdm8odCkpcih0KTtlbHNle2NvbnN0IGE9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoYSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChhKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6YSBpbnN0YW5jZW9mIGo/YTpuZXcgaihGLkludGVybmFsRXJyb3IsU3RyaW5nKGEpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBhPWF3YWl0IHRoaXMucmVxdWVzdCh0LHhjLG8pO2lmKGEudGFzaylzPWEudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6YS50YXNrfTtlbHNlIHRocm93IG5ldyBqKEYuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazppfSxHZShpLnN0YXR1cykpe2kuc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06aS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooRi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9Omkuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooRi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGkuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IHU9aS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLHUpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGEpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjphIGluc3RhbmNlb2Ygaj9hOm5ldyBqKEYuSW50ZXJuYWxFcnJvcixTdHJpbmcoYSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmEsdGFzazppLHJlbGF0ZWRUYXNrOnV9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09ST0+e2QoSSl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksaSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goSSl7bShJKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksaSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOml9KSx1JiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtRZV06dX19KTtjb25zdCBfPUk9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKEkpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBHPUkgaW5zdGFuY2VvZiBqP0k6bmV3IGooRi5SZXF1ZXN0VGltZW91dCxTdHJpbmcoSSkpO2QoRyl9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsST0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChJKTt0cnl7Y29uc3QgRz1NaChuLEkucmVzdWx0KTtHLnN1Y2Nlc3M/bChHLmRhdGEpOmQoRy5lcnJvcil9Y2F0Y2goRyl7ZChHKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntfKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IHc9bz8udGltZW91dD8/SHksJD0oKT0+XyhqLmZyb21FcnJvcihGLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6d30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYix3LG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBOPXU/LnRhc2tJZDtpZihOKXtjb25zdCBJPUc9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTtvZT9vZShHKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsSSksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKE4se3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEc9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEcpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YX0pLmNhdGNoKEk9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEkpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxFYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sUmMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sUHYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBpPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbUWVdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTppLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGk9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihpPXsuLi5pLHBhcmFtczp7Li4uaS5wYXJhbXMsX21ldGE6ey4uLmkucGFyYW1zPy5fbWV0YXx8e30sW1FlXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoaSxuKS5jYXRjaCh1PT50aGlzLl9vbmVycm9yKHUpKX0pO3JldHVybn1sZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbUWVdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGEsbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPXp1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGE9VHUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oYSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPXp1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPVR1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZTdShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxhPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2E/KGEobmV3IGooRi5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihGLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgYT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoYSkscyhuZXcgaihGLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxhKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxhLG4pO2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoaSl7Y29uc3QgdT1Dby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOml9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxHZShpLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxhKT0+e2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWkpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihHZShpLnN0YXR1cykpdGhyb3cgbmV3IGooRi5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2kuc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGEsbik7Y29uc3QgdT1hd2FpdCBvLmdldFRhc2socixuKTtpZih1KXtjb25zdCBsPUNvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6dX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLEdlKHUuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIEl1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBWeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBhPW5bcl07SXUoYSkmJkl1KHMpP25bcl09ey4uLmEsLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIEp5IGV4dGVuZHMgQnl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8sYT0+e2xldCBpPWEucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsaSkscy5vbkhhbmRsZXI/LihpKTtmb3IobGV0IHUgb2ZbLi4ucy5saXN0ZW5lcnNdKXUoaSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIEt5PSIyMDI2LTAxLTI2IixXeT0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIEd5e2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1sdi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PVd5JiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgUXk9QShbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksZW49QShbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLFl5PUEoW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLFh5PVooWXkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksQShbaCgpLGd0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIGVfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLHRfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxuXz1nKHtpc0Vycm9yOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIFVjPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLEZjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBvXz1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSkscl89Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLHNfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxpXz1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLGFfPWcoe3ZhcmlhYmxlczpYeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOmlfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxjXz1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtaKGgoKSxEKCkpO3ZhciBQdT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIHVfPWcoe2V4cGVyaW1lbnRhbDpaKGgoKSxaKGgoKSxHbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOkZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpVYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpQdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6UHUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxsXz1nKHtleHBlcmltZW50YWw6WihoKCksWihoKCksR24oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAoZW4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6VWMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOkZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTplbi5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBkXz1nKHttb2RlOmVuLmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxwXz1BKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UChwXykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpudCgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6bnQoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChBKFt1ZixsZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAobG8pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpVYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOkZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIGhfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOm9zLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksZ2Y9Zyh7dG9vbEluZm86Zyh7aWQ6cm8ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOkxjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOlF5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6YV8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOmVuLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChlbikub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkEoW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0OkEoW0MoKSxndCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEEoW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOkEoW0MoKSxndCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06QShbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLGZfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOmdmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAobG8pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpaKGgoKSxEKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86dHMuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOmxfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBtXz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOnRzLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6dV8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6Z2YuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksZ189e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIHh1KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oZ18pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IEhmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ydiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBDdShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGE9cy5wYXRoPy5tYXAoaT0+dHlwZW9mIGk9PSJvYmplY3QiP2kua2V5OmkpLmpvaW4oIi4iKTtyZXR1cm4gYT9gJHthfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gYl8oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gdl8oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIHlfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgSGMgZXh0ZW5kcyBKeXtfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6b18sdG9vbGlucHV0cGFydGlhbDpyXyx0b29scmVzdWx0OmhfLHRvb2xjYW5jZWxsZWQ6c18saG9zdGNvbnRleHRjaGFuZ2VkOmZffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFIYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8dGUoe2ppdGxlc3M6ITB9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKG5zLHI9Pihjb25zb2xlLmxvZygiUmVjZWl2ZWQgcGluZzoiLHIucGFyYW1zKSx7fSkpLHRoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHZvaWQgMCl9cmVnaXN0ZXJDYXBhYmlsaXRpZXModCl7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBjYXBhYmlsaXRpZXMgYWZ0ZXIgdHJhbnNwb3J0IGlzIGVzdGFibGlzaGVkIik7dGhpcy5fY2FwYWJpbGl0aWVzPVZ5KHRoaXMuX2NhcGFiaWxpdGllcyx0KX1yZWdpc3RlclRvb2wodCxuLG8pe2lmKHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XSl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGApO2xldCByPXRoaXMscz0oKT0+e3IuX2luaXRpYWxpemVkU2VudCYmci5fY2FwYWJpbGl0aWVzLnRvb2xzPy5saXN0Q2hhbmdlZCYmci5zZW5kVG9vbExpc3RDaGFuZ2VkKCl9LGE9bi5pbnB1dFNjaGVtYSE9PXZvaWQgMCxpPXt0aXRsZTpuLnRpdGxlLGRlc2NyaXB0aW9uOm4uZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6bi5pbnB1dFNjaGVtYSxvdXRwdXRTY2hlbWE6bi5vdXRwdXRTY2hlbWEsYW5ub3RhdGlvbnM6bi5hbm5vdGF0aW9ucyxfbWV0YTpuLl9tZXRhLGVuYWJsZWQ6ITAsZW5hYmxlKCl7dGhpcy5lbmFibGVkPSEwLHMoKX0sZGlzYWJsZSgpe3RoaXMuZW5hYmxlZD0hMSxzKCl9LHVwZGF0ZSh1KXtPYmplY3QuYXNzaWduKHRoaXMsdSkscygpfSxyZW1vdmUoKXtyLl9yZWdpc3RlcmVkVG9vbHNbdF09PT1pJiYoZGVsZXRlIHIuX3JlZ2lzdGVyZWRUb29sc1t0XSxzKCkpfSxoYW5kbGVyOmFzeW5jKHUsbCk9PntpZighaS5lbmFibGVkKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgZGlzYWJsZWRgKTtsZXQgZDtpZihhKXtsZXQgbT1pLmlucHV0U2NoZW1hLGI9bT9hd2FpdCBDdShtLHU/P3t9LGBJbnZhbGlkIGlucHV0IGZvciB0b29sICR7dH06IGApOnU/P3t9O2Q9YXdhaXQgbyhiLGwpfWVsc2UgZD1hd2FpdCBvKGwpO3JldHVybiBpLm91dHB1dFNjaGVtYSYmIWQuaXNFcnJvciYmKGQuc3RydWN0dXJlZENvbnRlbnQ9YXdhaXQgQ3UoaS5vdXRwdXRTY2hlbWEsZC5zdHJ1Y3R1cmVkQ29udGVudCxgSW52YWxpZCBvdXRwdXQgZm9yIHRvb2wgJHt0fTogYCkpLGR9fTtyZXR1cm4gdGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdPWksIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyYmIXRoaXMudHJhbnNwb3J0JiZ0aGlzLnJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHt0b29sczp7bGlzdENoYW5nZWQ6ITB9fSksdGhpcy5lbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpLHMoKSxpfV90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMTtlbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpe3RoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkfHwodGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vbmNhbGx0b29sPWFzeW5jKHQsbik9PntsZXQgbz10aGlzLl9yZWdpc3RlcmVkVG9vbHNbdC5uYW1lXTtpZighbyl0aHJvdyBFcnJvcihgVG9vbCAke3QubmFtZX0gbm90IGZvdW5kYCk7cmV0dXJuIG8uaGFuZGxlcih0LmFyZ3VtZW50cyxuKX0sdGhpcy5vbmxpc3R0b29scz1hc3luYyh0LG4pPT4oe3Rvb2xzOmF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHRoaXMuX3JlZ2lzdGVyZWRUb29scykuZmlsdGVyKChbbyxyXSk9PnIuZW5hYmxlZCkubWFwKGFzeW5jKFtvLHJdKT0+e2xldCBzPXtuYW1lOm8sdGl0bGU6ci50aXRsZSxkZXNjcmlwdGlvbjpyLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOnIuaW5wdXRTY2hlbWE/YXdhaXQgeHUoci5pbnB1dFNjaGVtYSwiaW5wdXQiKTp7dHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnt9fX07cmV0dXJuIHIub3V0cHV0U2NoZW1hJiYocy5vdXRwdXRTY2hlbWE9YXdhaXQgeHUoci5vdXRwdXRTY2hlbWEsIm91dHB1dCIpKSxyLmFubm90YXRpb25zJiYocy5hbm5vdGF0aW9ucz1yLmFubm90YXRpb25zKSxyLl9tZXRhJiYocy5fbWV0YT1yLl9tZXRhKSxzfSkpfSkpfWFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQodD17fSl7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRUb29sTGlzdENoYW5nZWQiKSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIscGFyYW1zOnR9KX1nZXRIb3N0Q2FwYWJpbGl0aWVzKCl7cmV0dXJuIHRoaXMuX2hvc3RDYXBhYmlsaXRpZXN9Z2V0SG9zdFZlcnNpb24oKXtyZXR1cm4gdGhpcy5faG9zdEluZm99Z2V0SG9zdENvbnRleHQoKXtyZXR1cm4gdGhpcy5faG9zdENvbnRleHR9Z2V0IG9udG9vbGlucHV0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiKX1zZXQgb250b29saW5wdXQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIsdCl9Z2V0IG9udG9vbGlucHV0cGFydGlhbCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIpfXNldCBvbnRvb2xpbnB1dHBhcnRpYWwodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiLHQpfWdldCBvbnRvb2xyZXN1bHQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiKX1zZXQgb250b29scmVzdWx0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iix0KX1nZXQgb250b29sY2FuY2VsbGVkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIil9c2V0IG9udG9vbGNhbmNlbGxlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIsdCl9Z2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiKX1zZXQgb25ob3N0Y29udGV4dGNoYW5nZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdCl9X29udGVhcmRvd247Z2V0IG9udGVhcmRvd24oKXtyZXR1cm4gdGhpcy5fb250ZWFyZG93bn1zZXQgb250ZWFyZG93bih0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9udGVhcmRvd24iLHRoaXMuX29udGVhcmRvd24sdCksdGhpcy5fb250ZWFyZG93bj10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGNfLChuLG8pPT57aWYoIXRoaXMuX29udGVhcmRvd24pdGhyb3cgRXJyb3IoIk5vIG9udGVhcmRvd24gaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb250ZWFyZG93bihuLnBhcmFtcyxvKX0pfV9vbmNhbGx0b29sO2dldCBvbmNhbGx0b29sKCl7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2x9c2V0IG9uY2FsbHRvb2wodCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmNhbGx0b29sIix0aGlzLl9vbmNhbGx0b29sLHQpLHRoaXMuX29uY2FsbHRvb2w9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihwZiwobixvKT0+e2lmKCF0aGlzLl9vbmNhbGx0b29sKXRocm93IEVycm9yKCJObyBvbmNhbGx0b29sIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2wobi5wYXJhbXMsbyl9KX1fb25saXN0dG9vbHM7Z2V0IG9ubGlzdHRvb2xzKCl7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzfXNldCBvbmxpc3R0b29scyh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9ubGlzdHRvb2xzIix0aGlzLl9vbmxpc3R0b29scyx0KSx0aGlzLl9vbmxpc3R0b29scz10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGRmLChuLG8pPT57aWYoIXRoaXMuX29ubGlzdHRvb2xzKXRocm93IEVycm9yKCJObyBvbmxpc3R0b29scyBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmxpc3R0b29scyhuLnBhcmFtcyxvKX0pfWFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodCl7c3dpdGNoKHQpe2Nhc2Uic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSI6aWYoIXRoaXMuX2hvc3RDYXBhYmlsaXRpZXM/LnNhbXBsaW5nKXRocm93IEVycm9yKGBIb3N0IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke3R9KWApO2JyZWFrfX1hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkodCl7c3dpdGNoKHQpe2Nhc2UidG9vbHMvY2FsbCI6Y2FzZSJ0b29scy9saXN0IjppZighdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKXRocm93IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhcGFiaWxpdHkgKHJlcXVpcmVkIGZvciAke3R9KWApO3JldHVybjtjYXNlInBpbmciOmNhc2UidWkvcmVzb3VyY2UtdGVhcmRvd24iOnJldHVybjtkZWZhdWx0OnRocm93IEVycm9yKGBObyBoYW5kbGVyIGZvciBtZXRob2QgJHt0fSByZWdpc3RlcmVkYCl9fWFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodCl7fWFzc2VydFRhc2tDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFzayBoYW5kbGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzeW5jIGNhbGxTZXJ2ZXJUb29sKHQsbil7aWYodGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNhbGxTZXJ2ZXJUb29sIiksdHlwZW9mIHQ9PSJzdHJpbmciKXRocm93IEVycm9yKGBjYWxsU2VydmVyVG9vbCgpIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgYnV0IHJlY2VpdmVkIGEgc3RyaW5nICgiJHt0fSIpLiBEaWQgeW91IG1lYW46IGNhbGxTZXJ2ZXJUb29sKHsgbmFtZTogIiR7dH0iLCBhcmd1bWVudHM6IHsgLi4uIH0gfSk/YCk7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0b29scy9jYWxsIixwYXJhbXM6dH0sb3Mse29ucHJvZ3Jlc3M6KCk9Pnt9LHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6ITAsLi4ubn0pfWFzeW5jIHJlYWRTZXJ2ZXJSZXNvdXJjZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVhZFNlcnZlclJlc291cmNlIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9yZWFkIixwYXJhbXM6dH0sY2Ysbil9YXN5bmMgbGlzdFNlcnZlclJlc291cmNlcyh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgibGlzdFNlcnZlclJlc291cmNlcyIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvbGlzdCIscGFyYW1zOnR9LGFmLG4pfWFzeW5jIGNyZWF0ZVNhbXBsaW5nTWVzc2FnZSh0LG4pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjcmVhdGVTYW1wbGluZ01lc3NhZ2UiKTtsZXQgbz10LnRvb2xzP21mOmZmO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIscGFyYW1zOnR9LG8sbil9c2VuZE1lc3NhZ2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRNZXNzYWdlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL21lc3NhZ2UiLHBhcmFtczp0fSxuXyxuKX1zZW5kTG9nKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL21lc3NhZ2UiLHBhcmFtczp0fSl9dXBkYXRlTW9kZWxDb250ZXh0KHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJ1cGRhdGVNb2RlbENvbnRleHQiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiLHBhcmFtczp0fSxUYyxuKX1vcGVuTGluayh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgib3BlbkxpbmsiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvb3Blbi1saW5rIixwYXJhbXM6dH0sZV8sbil9c2VuZE9wZW5MaW5rPXRoaXMub3Blbkxpbms7ZG93bmxvYWRGaWxlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJkb3dubG9hZEZpbGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvZG93bmxvYWQtZmlsZSIscGFyYW1zOnR9LHRfLG4pfXJlcXVlc3RUZWFyZG93bih0PXt9KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIixwYXJhbXM6dH0pfXJlcXVlc3REaXNwbGF5TW9kZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVxdWVzdERpc3BsYXlNb2RlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIixwYXJhbXM6dH0sZF8sbil9c2VuZFNpemVDaGFuZ2VkKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIscGFyYW1zOnR9KX1zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpe2xldCB0PSExLG49MCxvPTAscj0oKT0+e3R8fCh0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3Q9ITE7bGV0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9YS5zdHlsZS5oZWlnaHQ7YS5zdHlsZS5oZWlnaHQ9Im1heC1jb250ZW50IjtsZXQgdT1NYXRoLmNlaWwoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO2Euc3R5bGUuaGVpZ2h0PWk7bGV0IGw9TWF0aC5jZWlsKHdpbmRvdy5pbm5lcldpZHRoKTsobCE9PW58fHUhPT1vKSYmKG49bCxvPXUsdGhpcy5zZW5kU2l6ZUNoYW5nZWQoe3dpZHRoOmwsaGVpZ2h0OnV9KSl9KSl9O3IoKTtsZXQgcz1uZXcgUmVzaXplT2JzZXJ2ZXIocik7cmV0dXJuIHMub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHMub2JzZXJ2ZShkb2N1bWVudC5ib2R5KSwoKT0+cy5kaXNjb25uZWN0KCl9YXN5bmMgY29ubmVjdCh0PW5ldyBHeSh3aW5kb3cucGFyZW50LHdpbmRvdy5wYXJlbnQpLG4pe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJBcHAgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyBhZ2Fpbi4iKTt0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITEsYXdhaXQgc3VwZXIuY29ubmVjdCh0KTt0cnl7bGV0IG89YXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2luaXRpYWxpemUiLHBhcmFtczp7YXBwQ2FwYWJpbGl0aWVzOnRoaXMuX2NhcGFiaWxpdGllcyxhcHBJbmZvOnRoaXMuX2FwcEluZm8scHJvdG9jb2xWZXJzaW9uOkt5fX0sbV8sbik7aWYobz09PXZvaWQgMCl0aHJvdyBFcnJvcihgU2VydmVyIHNlbnQgaW52YWxpZCBpbml0aWFsaXplIHJlc3VsdDogJHtvfWApO3RoaXMuX2hvc3RDYXBhYmlsaXRpZXM9by5ob3N0Q2FwYWJpbGl0aWVzLHRoaXMuX2hvc3RJbmZvPW8uaG9zdEluZm8sdGhpcy5faG9zdENvbnRleHQ9by5ob3N0Q29udGV4dCxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIn0pLHRoaXMuX2luaXRpYWxpemVkU2VudD0hMCx0aGlzLm9wdGlvbnM/LmF1dG9SZXNpemUmJnRoaXMuc2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsb3NlKCksb319fWxldCBFdT0iIjtjb25zdCBiZj0oZSx0LG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT0+e2lmKCFlKXJldHVybjsoZS50aGVtZT09PSJsaWdodCJ8fGUudGhlbWU9PT0iZGFyayIpJiZ0LmFwcGx5RG9jdW1lbnRUaGVtZShlLnRoZW1lKTtjb25zdCBvPWUuc3R5bGVzPy52YXJpYWJsZXM7byYmdHlwZW9mIG89PSJvYmplY3QiJiZ0LmFwcGx5SG9zdFN0eWxlVmFyaWFibGVzKG8pO2NvbnN0IHI9ZS5zdHlsZXM/LmNzcz8uZm9udHM7dHlwZW9mIHI9PSJzdHJpbmciJiZyJiZyIT09RXUmJih0LmFwcGx5SG9zdEZvbnRzKHIpLEV1PXIpO2NvbnN0IHM9ZS5zYWZlQXJlYUluc2V0cztpZihzKWZvcihjb25zdCBhIG9mWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSl7Y29uc3QgaT1OdW1iZXIoc1thXT8/MCk7bi5zdHlsZS5zZXRQcm9wZXJ0eShgLS1pbnNldC0ke2F9YCxgJHtOdW1iZXIuaXNGaW5pdGUoaSkmJmk+MD9pOjB9cHhgKX19LEVlPW5ldyBIYyh7bmFtZToiaG90ZWwtc3RvcmVmcm9udCIsdmVyc2lvbjoiMS4wLjAifSx7b3BlbkxpbmtzOnt9LGF2YWlsYWJsZURpc3BsYXlNb2RlczpbImlubGluZSIsImZ1bGxzY3JlZW4iXX0pLHZmPXthcHBseURvY3VtZW50VGhlbWU6Yl8sYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6dl8sYXBwbHlIb3N0Rm9udHM6eV99LHBlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGM9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IGR0PSIiLHBzPSIiLHlmPXt9LF9mPSExLGtmPSIiLFQ9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LFk9MTtjb25zdCBBdT01O2xldCBYPW51bGwsX3Q9W10sTGU9IiIsaGU9W10scT1udWxsLEFvPTA7Y29uc3QgX189bmV3IFNldChbImZvcmdldFByZWZlcmVuY2VzIiwiYWRkVG9UcmlwIiwiY2xlYXJUcmlwIiwicmVxdWVzdEJvb2tpbmciLCJjYW5jZWxCb29raW5nIiwiY2hhbmdlQm9va2luZyIsInNpZ25JbiIsInNpZ25PdXQiXSksdG49ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtyZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9gaG90ZWw6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BleHRyYXM6Ym9va2luZzoke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YGV4dHJhczoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyJ8fHQ9PT0icG9saWN5LW1pc3NpbmciP2Bwb2xpY3k6JHtlLmhvdGVsPy5pZD8/IiJ9OiR7ZS50b3BpYz8/IiJ9YDp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij9gY2FuY2VsOiR7ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iY2hhbmdlLXByZXZpZXciP2BjaGFuZ2U6JHtlLmNvbmZpcm1hdGlvbkNvZGU/P2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImRlc3RpbmF0aW9ucyI/YGRlc3RpbmF0aW9uczoke2Uuc2NvcGU/Lm5hbWU/PyIifWA6dD09PSJob3RlbHMifHx0PT09Im5vLWhvdGVscyI/YGhvdGVsczoke2UuYXNrPy5jaXR5Pz8iIn06JHtlLmFzaz8ucXVlcnk/P2UucXVlcnk/PyIifWA6dH0sX289ZT0+eyFxfHx3Xy5oYXMoU3RyaW5nKHEudmlldykpfHx0bihlKSE9PXRuKHEpJiYoaGU9Wy4uLmhlLHtwYXlsb2FkOnEsbGFiZWw6JF8ocSksdmVyc2lvbjpBb31dLnNsaWNlKC02KSl9LGtfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbHMifHx0PT09ImRlc3RpbmF0aW9ucyJ8fHQ9PT0ibm8taG90ZWxzIiYmZS5hc2spJiZlLmFzaylyZXR1cm57a2V5OiJsaXN0SG90ZWxzIixhcmdzOnsuLi5lLmFza319O2lmKHQ9PT0iY29tcGFyaXNvbiImJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5zKSlyZXR1cm57a2V5OiJjb21wYXJlIixhcmdzOnsuLi5uLC4uLmUudGl0bGU/e3RpdGxlOmUudGl0bGV9Ont9LC4uLmUucmVjb21tZW5kZWQ/e3JlY29tbWVuZGVkOmUucmVjb21tZW5kZWR9Ont9LGVudHJpZXM6ZS5jb2x1bW5zLm1hcChvPT4oe2hvdGVsOm8uaG90ZWw/LmlkLC4uLm8uYmVzdEZvcj97YmVzdEZvcjpvLmJlc3RGb3J9Ont9LC4uLm8ucHJvcz8ubGVuZ3RoP3twcm9zOm8ucHJvc306e30sLi4uby5jb25zPy5sZW5ndGg/e2NvbnM6by5jb25zfTp7fX0pKX19O2lmKCh0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyIpJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJnZXRIb3RlbCIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5uLC4uLmUucm9vbXNfd2FudGVkP3tyb29tczplLnJvb21zX3dhbnRlZH06e319fTtpZih0PT09ImV4dHJhcyImJmUuZm9yQm9va2luZylyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntib29raW5nOmUuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfX07aWYodD09PSJleHRyYXMiJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm59fTtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJue2tleToiaXRpbmVyYXJ5IixhcmdzOnt0aXRsZTplLnRpdGxlLC4uLm4sZGF5czooZS5kYXlzPz9bXSkubWFwKG89Pih7bGFiZWw6by5sYWJlbCwuLi5vLm5vdGU/e25vdGU6by5ub3RlfTp7fSxpdGVtczooby5pdGVtcz8/W10pLm1hcChyPT5yLmlkKX0pKX19fSxPdT1lPT57aGU9aGUuZmlsdGVyKHQ9PiFlLmluY2x1ZGVzKFN0cmluZyh0LnBheWxvYWQ/LnZpZXcpKSl9LHdfPW5ldyBTZXQoWyJmaW5kLWJvb2tpbmciLCJib29raW5nIiwiY2FuY2VsbGVkIiwiY2hhbmdlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0IiwibWVtYmVyLXNpZ24taW4iLCJtZW1iZXItbm90LWZvdW5kIl0pLCRfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJkZXN0aW5hdGlvbnMiKXJldHVybiBlLnNjb3BlPy5uYW1lP1N0cmluZyhlLnNjb3BlLm5hbWUpOiJhbGwgZGVzdGluYXRpb25zIjtpZih0PT09ImhvdGVscyIpe2lmKGUuYXNrPy5jaXR5KXJldHVybiBTdHJpbmcoZS5hc2suY2l0eSk7Y29uc3Qgbj1bLi4ubmV3IFNldCgoZS5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8uY2l0eSkpKV07cmV0dXJuIG4ubGVuZ3RoPT09MT9TdHJpbmcoblswXSk6YCR7ZS50b3RhbD8/MH0gaG90ZWxzYH1yZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciPyJ0aGUgY2FuY2VsbGF0aW9uIjp0PT09ImNoYW5nZS1wcmV2aWV3Ij8idGhlIGNoYW5nZSI6dD09PSJtZW1iZXIiPyJ5b3VyIG1lbWJlcnNoaXAiOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGFkZC1vbnMgZm9yICR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSx3Zj0oKT0+e2NvbnN0IGU9cGUoImJhY2tidG4iKSx0PWhlLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IEt0PSIiLElzPSIiLG5uPTAsQmM9ITE7Y29uc3QgJGY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihJcz10LnRyaXBJZCksbm49TnVtYmVyKHQuY291bnQ/PzApLEFycmF5LmlzQXJyYXkodC5saW5lcykmJihfdD10LmxpbmVzLEJjPSEwKSl9LFNfPWU9PklzP3suLi5lLHRyaXA6SXN9OmUsel89ZT0+eWZbZV0/PyIiO2xldCBVdD0hMTtjb25zdCBSdT1lPT57VXQ9ZSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY2FyZCIpPy5jbGFzc0xpc3QudG9nZ2xlKCJidXN5IixlKX07bGV0IE9vPTAsU2Y9IiIsemY9IiI7Y29uc3QgWWU9KCk9Pntjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5oZWFkIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9KCk9PmUuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSk7dCgpLHNldFRpbWVvdXQodCwxODApfSxNPShlLHQ9e30sbj17fSk9Pntjb25zdCBvPXpfKGUpO2lmKCFvKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYG5vIHRvb2wgZm9yICR7ZX1gKSk7aWYoVXQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtSdSghMCk7Y29uc3Qgcj1PbztyZXR1cm4gRWUuY2FsbFNlcnZlclRvb2woe25hbWU6byxhcmd1bWVudHM6U18odCl9KS5maW5hbGx5KCgpPT5SdSghMSkpLnRoZW4ocz0+eyRmKHM/Ll9tZXRhKTtjb25zdCBhPXM/LnN0cnVjdHVyZWRDb250ZW50LGk9YSYmbi5mb2xkP24uZm9sZChhKTphLHU9X18uaGFzKGUpJiZpJiZpLnZpZXchPT0iZXJyb3IiO2lmKHI9PT1PbyYmaSl7U2Y9YT9KU09OLnN0cmluZ2lmeShhKToiIix6Zj1KU09OLnN0cmluZ2lmeShpKTtjb25zdCBsPXRuKGkpIT09dG4ocSk7bi5wdXNoIT09ITEmJl9vKGkpLHUmJihBbys9MSksaS52aWV3PT09ImJvb2tpbmciJiYoT3UoWyJ0cmlwIiwibmVlZHMtZGF0ZXMiLCJuZWVkcy1ndWVzdCJdKSxDZT1udWxsKSwoaS52aWV3PT09ImNhbmNlbGxlZCJ8fGkudmlldz09PSJjaGFuZ2VkIikmJk91KFsiY2FuY2VsbGF0aW9uLXByZXZpZXciLCJjaGFuZ2UtcHJldmlldyJdKSx4ZShpKSxsJiZZZSgpfWVsc2UgdSYmKEFvKz0xKTtyZXR1cm4gVF8ocyxuLm5vdGUpLHN9KX0sVF89KGUsdCk9Pntjb25zdCBuPShlPy5jb250ZW50Pz9bXSkuZmluZChvPT5vPy50eXBlPT09InRleHQiKT8udGV4dDshbnx8IUVlLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8udXBkYXRlTW9kZWxDb250ZXh0fHxFZS51cGRhdGVNb2RlbENvbnRleHQoe2NvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OnQ/YCR7dH0gJHtTdHJpbmcobil9YDpTdHJpbmcobil9XX0pLmNhdGNoKCgpPT57fSl9O2xldCBycz0hMTtjb25zdCBJXz0iKFRoZSBjYXJkIHByaWNlZCBpdHMgb3duIGRlZmF1bHQgZGF0ZXMsIHRvbmlnaHQsIHRvIHNob3cgdGhlIHJvb21zOyB0aGUgZ3Vlc3QgaGFzIG5vdCBjaG9zZW4gdGhlbS4pIixGdD1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxIdD1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksUF89Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+Jyx4Xz1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke1BffSR7YyhlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7YyhlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixuZT0oKT0+X2Y/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtjKGtmfHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsb249ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LFBzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxXZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtvbihlLmNoZWNrSW4pfSDigJMgJHtvbihlLmNoZWNrT3V0KX0gwrcgJHtQcyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7UHMoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsQ189KGUsdCxuKT0+e2NvbnN0IG89X3QuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LEVfPShlLHQpPT57Y29uc3Qgbj1fdC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sUm89KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7YyhuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7YyhuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Mobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsVGY9KGUsdCk9Pntjb25zdCBuPXR8fElmKCk7cmV0dXJuKCFULmNoZWNrSW58fFQuY2hlY2tJbjxuKSYmKFQuY2hlY2tJbj1uKSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PVZlKFQuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7YyhULmNoZWNrSW4pfSIgbWluPSIke2Mobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhWZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke2Moc3MoKSl9PC9zcGFuPgogIDwvZGl2PmB9LHNzPSgpPT57Y29uc3QgZT1ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/UHMoVC5jaGVja0luLFQuY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj1ZPjE/YCR7WX0gcm9vbXNgOiIiO3JldHVyblt0LG5dLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIil9LFZlPShlLHQpPT5uZXcgRGF0ZShEYXRlLnBhcnNlKGAke2V9VDEyOjAwOjAwWmApK3QqODY0ZTUpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksSWY9KCk9Pm5ldyBEYXRlKERhdGUubm93KCktbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKjZlNCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxQZj1lPT57Y29uc3QgdD1bLi4uZT8udG9kYXk/W2UudG9kYXkubWluLGUudG9kYXkubWF4XTpbXSwuLi4oZT8uaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLnRvZGF5VGhlcmU/PyIiKSldLmZpbHRlcihvPT4vXlxkezR9LVxkezJ9LVxkezJ9JC8udGVzdChvKSkuc29ydCgpLG49SWYoKTtyZXR1cm57bWluOlt0WzBdPz9uLG5dLnNvcnQoKVswXT8/bixzdGFydDp0LmF0KC0xKT8/bn19LEFfPWU9Pntjb25zdHttaW46dCxzdGFydDpufT1QZihlKTsoIVQuY2hlY2tJbnx8VC5jaGVja0luPHQpJiYoVC5jaGVja0luPW4pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9VmUoVC5jaGVja0luLDEpKTtjb25zdCBvPWA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgICAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImRjaSIgdmFsdWU9IiR7YyhULmNoZWNrSW4pfSIgbWluPSIke2ModCl9Ij48L2xhYmVsPgogICAgICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImRjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKFZlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHtlLnNjb3BlPyIiOic8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZCI+U2VhcmNoPC9idXR0b24+J30KICAgICAgPC9kaXY+YCxyPWA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICA8bGFiZWwgY2xhc3M9IndoZXJlIj5XaGVyZSB0bzxpbnB1dCBpZD0id2hlcmUiIHR5cGU9InNlYXJjaCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBIGNpdHksIGEgY291bnRyeSBvciBhIGhvdGVsIiBhcmlhLWxhYmVsPSJXaGVyZSB0byI+PC9sYWJlbD4KICAgICAgJHtvfQogICAgPC9kaXY+YCxzPWw9PmA8ZGl2IGNsYXNzPSJwbGFjZXMiPiR7bC5tYXAoKGQsbSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhkLm5hbWUpfSIke20+PVhlPyIgaGlkZGVuIjoiIn0+JHtjKGQubmFtZSl9IDxzbWFsbD4ke2MoZC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0ke2wubGVuZ3RoPlhlP2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7bC5sZW5ndGgtWGV9IG1vcmU8L2J1dHRvbj5gOiIifTwvZGl2PmAsYT1lLnNjb3BlO2lmKGEpcmV0dXJuW25lKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoYS5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS50b3RhbCl9ICR7YyhlLnZvY2FiPy5ub3VuUGx1cmFsPz8iaG90ZWxzIil9IGluICR7YygoYS5jaXRpZXM/P1tdKS5sZW5ndGgpfSBjaXRpZXM8L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzZWFyY2giPiR7b308L2Rpdj5gLHMoYS5jaXRpZXM/P1tdKSxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZS1hbGw9IiR7YyhhLm5hbWUpfSI+QWxsICR7YyhlLnRvdGFsKX0gaW4gJHtjKGEubmFtZSl9PC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3QgaT1lLnJlZ2lvbnM/P1tdLHU9aS5mbGF0TWFwKGw9PmwuY291bnRyaWVzPz9bXSkuZmxhdE1hcChsPT5sLmNpdGllcz8/W10pLm1hcCgobCxkKT0+KHtjOmwsaTpkfSkpLnNvcnQoKGwsZCk9Pk51bWJlcihkLmMuY291bnQpLU51bWJlcihsLmMuY291bnQpfHxsLmktZC5pKS5zbGljZSgwLFhlKS5tYXAoKHtjOmx9KT0+bCk7cmV0dXJuW25lKCkscix1Lmxlbmd0aD9gPGRpdiBjbGFzcz0icmVnaW9uIj48ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+VG9wIGNpdGllczwvZGl2PiR7cyh1KX08L2Rpdj5gOiIiLGkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJyZWdpb24iPjxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj5CeSByZWdpb248L2Rpdj48ZGl2IGNsYXNzPSJwbGFjZXMiPiR7aS5tYXAoKGwsZCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHRhYiIgdHlwZT0iYnV0dG9uIiBkYXRhLXJlZ2lvbj0iJHtkfSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPiR7YyhsLm5hbWUpfSA8c21hbGw+JHtjKGwuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+PC9kaXY+YDoiIiwuLi5pLm1hcCgobCxkKT0+YAogICAgICA8ZGl2IGNsYXNzPSJyZWdpb24iIGRhdGEtcmVnaW9uLWJvZHk9IiR7ZH0iIGhpZGRlbj4KICAgICAgICAkeyhsLmNvdW50cmllcz8/W10pLm1hcCgobSxiKT0+e2NvbnN0IHY9bS5jaXRpZXM/P1tdLF89di5sZW5ndGg9PT0xP3ZbMF06dm9pZCAwO3JldHVybmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc3QiJHtiPj1ocz8iIGhpZGRlbiI6IiJ9PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0LWNvdW50cnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKG0ubmFtZSl9Ij4ke2MobS5uYW1lKX0ke18mJl8ubmFtZSE9PW0ubmFtZT9gPHNtYWxsPiDCtyAke2MoXy5uYW1lKX08L3NtYWxsPmA6IiJ9IDxzbWFsbCBjbGFzcz0ibiI+JHtjKG0uY291bnQpfTwvc21hbGw+PC9idXR0b24+CiAgICAgICAgICAgICR7di5sZW5ndGg+MT9zKHYpOiIifQogICAgICAgICAgPC9kaXY+YH0pLmpvaW4oIiIpfQogICAgICAgICR7KGwuY291bnRyaWVzPz9bXSkubGVuZ3RoPmhzP2A8ZGl2IGNsYXNzPSJwbGFjZXMiPjxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtY291bnRyaWVzIj4rJHsobC5jb3VudHJpZXM/P1tdKS5sZW5ndGgtaHN9IG1vcmUgY291bnRyaWVzPC9idXR0b24+PC9kaXY+YDoiIn0KICAgICAgPC9kaXY+YCksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFsbC1ob3RlbHMiPkJyb3dzZSBhbGwgJHtjKGUudG90YWwpfTwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQtYm9va2luZyI+RmluZCBhIGJvb2tpbmc8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sWGU9OCxocz02LHhmPWU9Pntjb25zdCB0PWUuZm9yU3RheTtyZXR1cm4gdD9gPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtjKHQudG90YWwpfTxzbWFsbCBjbGFzcz0idC1zdWIiPiR7TnVtYmVyKHQucm9vbXMpPjE/YCR7Yyh0LnJvb21zKX0gcm9vbXMgw5cgYDoiIn0ke2ModC5uaWdodHMpfSAke051bWJlcih0Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IMK3IHRheGVzIGluPC9zbWFsbD48L3NwYW4+YDplLm5vUm9vbXNGb3JTdGF5P2A8c3BhbiBjbGFzcz0idC1mcm9tIHQtbm9uZSI+JHsvc2xlZXBzLy50ZXN0KFN0cmluZyhlLm5vUm9vbXNGb3JTdGF5KSk/YE5vIHJvb20gc2xlZXBzICR7YyhULmd1ZXN0cyl9YDoiTm8gcm9vbSBmb3IgdGhlc2UgZGF0ZXMifTwvc3Bhbj5gOmA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2UuZnJvbU5pZ2h0bHk/YCR7YyhlLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPmB9LE9fPWU9Pntjb25zdCB0PWUuZm9yU3RheTtpZighdClyZXR1cm4iIjtjb25zdCBuPVt0LmZyZWVDYW5jZWxsYXRpb24/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5GcmVlIGNhbmNlbGxhdGlvbjwvc3Bhbj4nOiIiLE51bWJlcih0LnJvb21zTGVmdCk8PTM/YDxzcGFuIGNsYXNzPSJiYWRnZSI+JHtjKHQucm9vbXNMZWZ0KX0gbGVmdDwvc3Bhbj5gOiIiXS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIG4ubGVuZ3RoP2A8c3BhbiBjbGFzcz0idC10YWdzIj4ke24uam9pbigiIil9PC9zcGFuPmA6IiJ9LFd0PSgpPT5ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/e2NoZWNrSW46VC5jaGVja0luLGNoZWNrT3V0OlQuY2hlY2tPdXQsZ3Vlc3RzOlQuZ3Vlc3RzLC4uLlk+MT97cm9vbXM6WX06e319Ont9LFJfPWU9Pntjb25zdHtjaGVja0luOnQsY2hlY2tPdXQ6bixndWVzdHM6byxyb29tczpyLC4uLnN9PWU/P3t9O3JldHVybiBzfSxaXz0oZSx0KT0+e2NvbnN0e21pbjpuLHN0YXJ0Om99PVBmKHQpO3JldHVybighVC5jaGVja0lufHxULmNoZWNrSW48bikmJihULmNoZWNrSW49byksKCFULmNoZWNrT3V0fHxULmNoZWNrT3V0PD1ULmNoZWNrSW4pJiYoVC5jaGVja091dD1WZShULmNoZWNrSW4sMSkpLGAKICA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibGNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7YyhuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhWZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxkaXYgY2xhc3M9Imd1ZXN0cyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlJvb21zIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtbGlzdC1yb29tcz0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9ImxybiI+JHtjKFkpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvZGl2PgogICAgJHtlP2A8c3BhbiBjbGFzcz0ibmlnaHRzIj4ke2Moc3MoKSl9PC9zcGFuPmA6JzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwcmljZS1saXN0Ij5TaG93IHByaWNlczwvYnV0dG9uPid9CiAgPC9kaXY+YH07bGV0IEllPSJkYXRlcyI7Y29uc3QgQ2Y9ImRhdGVzIixrbz1lPT57Y29uc3QgdD1lPz97fTtyZXR1cm57Li4udC5icmFuZD97YnJhbmQ6dC5icmFuZH06e30sLi4uQXJyYXkuaXNBcnJheSh0LmZhY2lsaXRpZXMpJiZ0LmZhY2lsaXRpZXMubGVuZ3RoP3tmYWNpbGl0aWVzOnQuZmFjaWxpdGllc306e30sLi4udC5mcmVlQ2FuY2VsbGF0aW9uP3tmcmVlQ2FuY2VsbGF0aW9uOiEwfTp7fSwuLi50LmJyZWFrZmFzdD97YnJlYWtmYXN0OiEwfTp7fX19LFp1PWU9Pntjb25zdHticmFuZDp0LGZhY2lsaXRpZXM6bixmcmVlQ2FuY2VsbGF0aW9uOm8sYnJlYWtmYXN0OnIsLi4uc309ZT8/e307cmV0dXJuIHN9LE5fPWU9Pntjb25zdCB0PWtvKGUpO3JldHVybih0LmJyYW5kPzE6MCkrKHQuZmFjaWxpdGllcz8ubGVuZ3RoPz8wKSsodC5mcmVlQ2FuY2VsbGF0aW9uPzE6MCkrKHQuYnJlYWtmYXN0PzE6MCl9LGpfPWU9Pntjb25zdCB0PWUucmVmaW5lO2lmKCF0KXJldHVybiIiO2NvbnN0IG49KHIscyxhLGkpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtZmlsdGVyPSIke2Mocil9IiBhcmlhLXByZXNzZWQ9IiR7aT8idHJ1ZSI6ImZhbHNlIn0iPiR7YyhzKX0gPHNtYWxsPiR7YyhhKX08L3NtYWxsPjwvYnV0dG9uPmAsbz0ocixzKT0+cy5sZW5ndGg/YDxkaXYgY2xhc3M9ImZncm91cCI+PHNwYW4gY2xhc3M9InNvcnRzLWsiPiR7YyhyKX08L3NwYW4+JHtzLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW28oIkJyYW5kIiwodC5icmFuZHM/P1tdKS5tYXAocj0+bihgYnJhbmQ6JHtyLm5hbWV9YCxyLm5hbWUsci5jb3VudCxyLm9uKSkpLG8oIkhhcyIsKHQuZmFjaWxpdGllcz8/W10pLm1hcChyPT5uKGBmYWNpbGl0eToke3Iua2V5fWAsci5sYWJlbCxyLmNvdW50LHIub24pKSksbygiUm9vbSIsKHQucm9vbT8/W10pLm1hcChyPT5uKHIua2V5LHIubGFiZWwsci5jb3VudCxyLm9uKSkpXS5qb2luKCIiKX0sTV89KGUsdCk9Pntjb25zdCBuPXI9Pk51bWJlcihyLnNsaWNlKDgsMTApKSxvPXI9Pm5ldyBEYXRlKGAke3J9VDEyOjAwOjAwWmApLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHttb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSk7cmV0dXJuIG8oZSk9PT1vKHQpP2Ake24oZSl94oCTJHtuKHQpfSAke28odCl9YDpgJHtuKGUpfSAke28oZSl9IOKAkyAke24odCl9ICR7byh0KX1gfSxFZj0oZSx0LG4pPT57Y29uc3Qgbz0hIWUuc3RheT8uY2hlY2tJbixyPU5fKGUuYXNrKSxzPWpfKGUpLGE9QWYuZmluZCgoW2xdKT0+bD09PW4pPy5bMV0/PyJEZWZhdWx0IixpPW8/YCR7TV8oZS5zdGF5LmNoZWNrSW4sZS5zdGF5LmNoZWNrT3V0KX0ke1k+MT9gIMK3ICR7WX0gcm9vbXNgOiIifWA6IkFkZCBkYXRlcyIsdT0obCxkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UgdG9vbCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBhbmVsPSIke2x9IiBhcmlhLWV4cGFuZGVkPSIke0llPT09bD8idHJ1ZSI6ImZhbHNlIn0iPiR7ZH08L2J1dHRvbj5gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InBsYWNlcyB0b29sYmFyIj4KICAgICAgJHt1KCJkYXRlcyIsYyhpKSl9CiAgICAgICR7dD91KCJzb3J0IixuPT09Imdyb3VwIj8iU29ydCI6YyhhKSk6IiJ9CiAgICAgICR7c3x8cj91KCJmaWx0ZXJzIixgRmlsdGVycyR7cj9gIMK3ICR7cn1gOiIifWApOiIifQogICAgICAke3I/JzxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJjbGVhci1maWx0ZXJzIj5DbGVhcjwvYnV0dG9uPic6IiJ9CiAgICA8L2Rpdj4KICAgIDxkaXYgZGF0YS1wYW5lbC1ib2R5PSJkYXRlcyIke0llPT09ImRhdGVzIj8iIjoiIGhpZGRlbiJ9PiR7Wl8obyxlKX08L2Rpdj4KICAgICR7dD9gPGRpdiBjbGFzcz0iZmlsdGVyLXBhbmVsIiBkYXRhLXBhbmVsLWJvZHk9InNvcnQiJHtJZT09PSJzb3J0Ij8iIjoiIGhpZGRlbiJ9PiR7dH08L2Rpdj5gOiIifQogICAgJHtzP2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0iZmlsdGVycyIke0llPT09ImZpbHRlcnMiPyIiOiIgaGlkZGVuIn0+JHtzfTwvZGl2PmA6IiJ9YH0sQWY9W1siZ3JvdXAiLCJEZWZhdWx0Il0sWyJwcmljZS1sb3ciLCJMb3dlc3QgcHJpY2UiXSxbInByaWNlLWhpZ2giLCJIaWdoZXN0IHByaWNlIl0sWyJyYXRpbmciLCJSYXRpbmciXV0scV89MztsZXQgcm49ImlubGluZSIsT2Y9W107Y29uc3Qgc249KCk9PnJuPT09ImZ1bGxzY3JlZW4iLFZjPSgpPT57Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY29udGVudCAudGlsZXMiKTtpZihlPy5vZmZzZXRXaWR0aCl7Y29uc3Qgcz1nZXRDb21wdXRlZFN0eWxlKGUpLmdyaWRUZW1wbGF0ZUNvbHVtbnMuc3BsaXQoIiAiKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO2lmKHM+MClyZXR1cm4gc31jb25zdCB0PXBlKCJjb250ZW50IikuY2xpZW50V2lkdGh8fHdpbmRvdy5pbm5lcldpZHRofHwwLG49dDw9NDYwLG89bj8xNTA6MTk2LHI9bj84OjEwO3JldHVybiBNYXRoLm1heCgxLE1hdGguZmxvb3IoKHQrcikvKG8rcikpKXx8Mn07bGV0IEpjPTA7Y29uc3QgaXM9KCk9Pk1hdGgubWF4KDIsKEpjfHxWYygpKSpxXyk7bGV0IFpvPTA7Y29uc3QgRF89ZT0+e1pvPWlzKCk7Y29uc3QgdD1zbigpP2UuaG90ZWxzPz9bXTooZS5ob3RlbHM/P1tdKS5zbGljZSgwLFpvKSxuPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNpdHkpKSldLG89dz0+e2NvbnN0ICQ9dC5maW5kKE49Pk4uY2l0eT09PXcpPy5jb3VudHJ5O3JldHVybiAkJiYhU3RyaW5nKCQpLnN0YXJ0c1dpdGgodyk/U3RyaW5nKCQpOiIifSxyPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNvdW50cnk/PyIiKSkpXSxzPXIubGVuZ3RoPjEsYT13PT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke2Modyl9JHshcyYmbyh3KT9gPHNtYWxsPiDCtyAke2Mobyh3KSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKCQ9PiQuY2l0eT09PXcpLm1hcCgkPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YygkLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtGdChTdHJpbmcoJC5pZCkpfSI+CiAgICAgICAgICAgICAgJHskLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKCQuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEh0KFN0cmluZygkLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7JC5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7YygkLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2MoJC5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7YyhuLmxlbmd0aD4xPyQuYXJlYT8/JC5jaXR5OlskLmFyZWEsJC5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICAke3hmKCQpfQogICAgICAgICAgICAgICAgJHt4XygkLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICR7T18oJCl9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAsaT1OdW1iZXIoZS50b3RhbD8/dC5sZW5ndGgpLHU9TnVtYmVyKGUub2Zmc2V0Pz8wKSxsPWktdS10Lmxlbmd0aCxkPWUucGxhY2VzPz9bXTtlLmFzaz8uY2l0eTtjb25zdCBtPWQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJXaGVyZSI+CiAgICAgICAgICAgJHtkLm1hcCgodywkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKHcucGxhY2UpfSIkeyQ+PVhlPyIgaGlkZGVuIjoiIn0+JHtjKHcubGFiZWwpfSA8c21hbGw+JHtjKHcuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9CiAgICAgICAgICAgJHtkLmxlbmd0aD5YZT9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1wbGFjZXMiPiske2QubGVuZ3RoLVhlfSBtb3JlPC9idXR0b24+YDoiIn0KICAgICAgICAgPC9kaXY+YDoiIixiPVN0cmluZyhlLnNvcnQ/PyJncm91cCIpLHY9ISgoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjEpLF89dC5sZW5ndGg+MT9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iT3JkZXIiPiR7QWYuZmlsdGVyKChbd10pPT52fHwhdy5zdGFydHNXaXRoKCJwcmljZSIpKS5tYXAoKFt3LCRdKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2Ugc29ydCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNvcnQ9IiR7d30iIGFyaWEtcHJlc3NlZD0iJHt3PT09Yj8idHJ1ZSI6ImZhbHNlIn0iPiR7JH08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiO3JldHVybltuZSgpLG0sRWYoZSxfLGIpLGUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfS4gVGhlc2UgYXJlICR7YyhlLndpZGVuZWQudG8pfS48L2Rpdj5gOiIiLGA8ZGl2PiR7cz9yLm1hcCh3PT5gPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7Yyh3KX08L2Rpdj4ke24uZmlsdGVyKCQ9PnQuc29tZShOPT5OLmNpdHk9PT0kJiZTdHJpbmcoTi5jb3VudHJ5Pz8iIik9PT13KSkubWFwKGEpLmpvaW4oIiIpfWApLmpvaW4oIiIpOm4ubWFwKGEpLmpvaW4oIiIpfTwvZGl2PmAsKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5RdW90ZWQgaW4gJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0g4oCUIG5vIHJhdGUgaXMgYXBwbGllZCBoZXJlLCBzbyB0aGlzIGlzIG5vdCBhIHByaWNlIG9yZGVyLiBPbmUgY2l0eSBvciBvbmUgY291bnRyeSBnaXZlcyBvbmUgY3VycmVuY3kuPC9kaXY+YDoiIixlLm92ZXJCdWRnZXQ/YDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLm92ZXJCdWRnZXQpfSBtb3JlIG1hdGNoZWQgYW5kIGNhbWUgaW4gb3ZlciB0aGUgcHJpY2UgY2VpbGluZy48L2Rpdj5gOiIiLHNuKCk/bD4wP2A8ZGl2IGNsYXNzPSJub3RlIj5TaG93aW5nICR7dT9gJHt1KzF94oCTJHt1K3QubGVuZ3RofWA6dC5sZW5ndGh9IG9mICR7aX0uPC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMTIsbCl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiOnU+MHx8bD4wP2A8ZGl2IGNsYXNzPSJwYWdlciIgcm9sZT0ibmF2aWdhdGlvbiIgYXJpYS1sYWJlbD0iUGFnZXMiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InBhZ2UtcHJldiIke3U+MD8iIjoiIGRpc2FibGVkIn0gYXJpYS1sYWJlbD0iUHJldmlvdXMgaG90ZWxzIj7igLkgUHJldmlvdXM8L2J1dHRvbj4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3UrMX3igJMke3UrdC5sZW5ndGh9IG9mICR7aX08L3NwYW4+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGFnZS1uZXh0IiR7bD4wPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJOZXh0IGhvdGVscyI+TmV4dCDigLo8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj4ke09mLmluY2x1ZGVzKCJmdWxsc2NyZWVuIik/YDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmdWxsc2NyZWVuIj5WaWV3IGFsbCAke2MoaSl9PC9idXR0b24+PC9kaXY+YDoiIn1gOiIiXS5qb2luKCIiKX0sTF89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXSxuPWUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfSwgc28gdGhpcyBsb29rZWQgaW4gJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiI7cmV0dXJuIGUuYmVmb3JlRmlsdGVycz8oSWU9ImZpbHRlcnMiLFtuZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj4ke2MoZS53aHk/P2BOb25lIG9mIHRoZSAke2UuYmVmb3JlRmlsdGVyc30gaGVyZSBoYXMgYWxsIG9mIHRob3NlIHRvZ2V0aGVyLmApfTwvZGl2PmAsRWYoZSwiIixTdHJpbmcoZS5hc2s/LnNvcnQ/PyJncm91cCIpKV0uam9pbigiIikpOnQubGVuZ3RoP1tuZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7Yyh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobz0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7RnQoU3RyaW5nKG8uaWQpKX0iPgogICAgICAgICAgJHtvLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKG8uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoSHQoU3RyaW5nKG8ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtjKG8ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7Yyhbby5hcmVhLG8uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICR7eGYobyl9CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YCR7bn08ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKGUud2h5Pz9gTm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZS5xdWVyeX0iYDoiIn0uIFRyeSBhIGNpdHkuYCl9PC9kaXY+YH0sUmY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke0Z0KFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEh0KFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke2MoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHtjKGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7YyhlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHtjKHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsVV89KGUsdCxuKT0+e2NvbnN0IG89Q18oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtGdChgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2ModC5pbWFnZVVybCl9IiBhbHQ9IiI+YDpjKEh0KFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7YyhTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7Yyh0LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2ModC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2ModC5uaWdodGx5KX0gLyBuaWdodCR7WT4xP2AgwrcgJHtZfSByb29tc2A6IiJ9IMK3IGluY2wuIHRheDwvZGl2PgogICAgICAgICR7dC5tZW1iZXJSYXRlP2A8ZGl2IGNsYXNzPSJwLW1lbWJlciI+JHtjKHQubWVtYmVyUmF0ZS50aWVyKX0gcmF0ZTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Um8oYGRhdGEtYWRkLXJvb209IiR7Yyh0LmlkKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmlkKX0iYCxvLFN0cmluZyh0Lm5hbWUpLFkpfTwvZGl2PgogICAgPC9kaXY+YH0sRl89KGUsdCk9PiFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyPyIiOmAKICA8ZGl2IGNsYXNzPSJmbGV4LWRhdGVzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iTmVhcmJ5IGFycml2YWwgZGF0ZXMiPgogICAgJHt0Lm1hcChuPT5gPGJ1dHRvbiBjbGFzcz0iZmQke24uY2hvc2VuPyIgb24iOiIifSR7bi5mcm9tPyIiOiIgb3V0In0ke24uYmVzdD8iIGJlc3QiOiIifSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2MoZSl9IiBkYXRhLWNpPSIke2Mobi5jaGVja0luKX0iIGRhdGEtY289IiR7YyhuLmNoZWNrT3V0KX0iIGFyaWEtbGFiZWw9IkFycml2ZSAke2Mob24oU3RyaW5nKG4uY2hlY2tJbikpKX0ke24uZnJvbT9gLCBmcm9tICR7YyhuLmZyb20pfWA6Iiwgbm90aGluZyBsZWZ0In0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1kYXkiPiR7YyhvbihTdHJpbmcobi5jaGVja0luKSkpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtcHJpY2UiPiR7bi5mcm9tP2Mobi5mcm9tKToiRnVsbCJ9PC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gLE51PWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5yb29tcz8/W10sbz1lLnN0YXk/P1Q7cmV0dXJuW25lKCksUmYodCksVGYoU3RyaW5nKHQuaWQpLHQudG9kYXlUaGVyZSksRl8oU3RyaW5nKHQuaWQpLGUuZGF0ZXMpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PlVfKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke2ModC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke2Moci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij4ke2Moci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LEhfPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdLG89ZS5mb3JCb29raW5nO3JldHVybiBvP1tuZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+QWRkLW9ucyBmb3IgJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKHQubmFtZSl9IMK3ICR7YyhXZShvLnN0YXkpKX08L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke2Moci5wZXIpfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Um8oYGRhdGEtYm9va2luZy1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ib29raW5nPSIke2Moby5jb25maXJtYXRpb25Db2RlKX0iYCxOdW1iZXIoby5oZWxkPy5bci5pZF0/PzApLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLCc8ZGl2IGNsYXNzPSJub3RlIj5FYWNoIGNoYW5nZSBpcyBzaG93biB3aXRoIGl0cyBuZXcgdG90YWwgYmVmb3JlIGFueXRoaW5nIG1vdmVzLiBOb3RoaW5nIGlzIGNoYXJnZWQgaGVyZS48L2Rpdj4nLCc8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkJhY2sgdG8geW91ciBib29raW5nczwvYnV0dG9uPiddLmpvaW4oIiIpOltuZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Moci5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke2Moci5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtSbyhgZGF0YS1hZGQtZXh0cmE9IiR7YyhyLmlkKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iYCxFXyhTdHJpbmcodC5pZCksU3RyaW5nKHIuaWQpKSxTdHJpbmcoci5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPkJhY2sgdG8gJHtjKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LEJfPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHtjKGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke2MoZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7YyhlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHtjKGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7YyhlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIke2UuZGF5P2AgZGF0YS1kYXk9IiR7YyhlLmRheSl9ImA6IiJ9YDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtXZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7YyhlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtSbyh0LE51bWJlcihlLmtpbmQ9PT0iZXh0cmEiP2Uub3JkZXJlZD8/ZS5xdWFudGl0eT8/MTplLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0sanU9KGUsdCk9PmA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7YyhlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke2MoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHtjKGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHtjKGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7Yyh0KX08L3NwYW4+PHNwYW4+JHtjKGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIGVhcm5zPC9zcGFuPjxzcGFuPiR7YyhOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgIDwvZGl2PmAsVl89ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVybltuZSgpLCc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlIHRyaXAgaXMgZW1wdHkuPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkJyb3dzZSAke2MoZHQpfSBob3RlbHM8L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBuPVsuLi5uZXcgU2V0KHQubWFwKG89PlN0cmluZyhvLmRheT8/IiIpKSldLnNvcnQoKTtyZXR1cm5bbmUoKSxuLm1hcChvPT5gCiAgICAgICR7bz9gPGRpdiBjbGFzcz0iZGF5Ij4ke2Mob24obykpfTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InJvd3MiPiR7dC5maWx0ZXIocj0+U3RyaW5nKHIuZGF5Pz8iIik9PT1vKS5tYXAoQl8pLmpvaW4oIiIpfTwvZGl2PmApLmpvaW4oIiIpLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG89PmAke2Moby50aXRsZSl9OiAke2Moby53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLC4uLkFycmF5LmlzQXJyYXkoZS5ncm91cHMpJiZlLmdyb3Vwcy5sZW5ndGg+MT9bYDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlZCBpbiAke2MoKGUuY3VycmVuY2llcz8/W10pLmpvaW4oIiBhbmQgIikpfSwgc2VwYXJhdGVseS4gTm90aGluZyBoZXJlIGNvbnZlcnRzIG9uZSBpbnRvIHRoZSBvdGhlcjsgZWFjaCBob3RlbCBpcyBib29rZWQgYW5kIHBhaWQgaW4gaXRzIG93bi48L2Rpdj5gLC4uLmUuZ3JvdXBzLm1hcChvPT5qdShvLG8uZ29lc1dpdGhBU3RheT9gSW4gJHtvLmN1cnJlbmN5fSwgZ29lcyB3aXRoIGEgc3RheSAtIG5vdCBpbiB0aGUgdG90YWxgOmBUb3RhbCBpbiAke28uY3VycmVuY3l9YCkpXTpbanUoZSwiVG90YWwiKV0sLi4uQXJyYXkuaXNBcnJheShlLm5lZWRzUm9vbSkmJmUubmVlZHNSb29tLmxlbmd0aD9lLm5lZWRzUm9vbS5tYXAobz0+YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICAgIDxiPkdvZXMgd2l0aCBhIHN0YXk8L2I+CiAgICAgICAgICAgICA8c3Bhbj4ke2MoKG8uZXh0cmFzPz9bXSkuam9pbigiIGFuZCAiKSl9IGlzICR7YyhvLmhvdGVsTmFtZSl9J3Mgc2VydmljZSBmb3IgaXRzIGd1ZXN0cywgc28gaXQgaXMgYm9va2VkIHdpdGggYSByb29tIHRoZXJlIC0gb3IgYWRkZWQgdG8gYSBib29raW5nIHlvdSBhbHJlYWR5IGhhdmUuPC9zcGFuPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhvLmhvdGVsSWQpfSI+Um9vbXMgYXQgJHtjKG8uaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPC9kaXY+YCk6Wyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siPlJlcXVlc3QgYm9va2luZzwvYnV0dG9uPjwvZGl2PicsYDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBSZXF1ZXN0aW5nIGEgYm9va2luZyBhc2tzICR7YyhkdCl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLFpmKCldLFg/IiI6YDxkaXYgY2xhc3M9Im5vdGUiPkEgJHtjKGR0KX0gQ2lyY2xlIG1lbWJlcj8gPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj5TaWduIGluIGZvciB0aGUgbWVtYmVyIHJhdGU8L2J1dHRvbj4uPC9kaXY+JHtObygpfWBdLmpvaW4oIiIpfSxLYz1be2lkOiJraW5nLWJlZCIsbGFiZWw6IktpbmcgYmVkIn0se2lkOiJ0d2luLWJlZHMiLGxhYmVsOiJUd2luIGJlZHMifSx7aWQ6ImhpZ2gtZmxvb3IiLGxhYmVsOiJIaWdoIGZsb29yIn0se2lkOiJsb3ctZmxvb3IiLGxhYmVsOiJMb3cgZmxvb3IifSx7aWQ6InF1aWV0LXJvb20iLGxhYmVsOiJRdWlldCByb29tIn0se2lkOiJjb25uZWN0aW5nLXJvb21zIixsYWJlbDoiQ29ubmVjdGluZyByb29tcyJ9LHtpZDoiZWFybHktY2hlY2staW4iLGxhYmVsOiJFYXJseSBjaGVjay1pbiJ9LHtpZDoibGF0ZS1hcnJpdmFsIixsYWJlbDoiTGF0ZSBhcnJpdmFsIn0se2lkOiJhY2Nlc3NpYmxlLXJvb20iLGxhYmVsOiJBY2Nlc3NpYmxlIHJvb20ifV0sSl89eyJraW5nLWJlZCI6InR3aW4tYmVkcyIsInR3aW4tYmVkcyI6ImtpbmctYmVkIiwiaGlnaC1mbG9vciI6Imxvdy1mbG9vciIsImxvdy1mbG9vciI6ImhpZ2gtZmxvb3IifTtsZXQgQ2U9bnVsbDtjb25zdCBaZj0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0iZ3Vlc3QiJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+R3Vlc3QgbmFtZTxpbnB1dCBpZD0iZ25hbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgYm9va2luZyIgdmFsdWU9IiR7YyhDZT8ubmFtZT8/IiIpfSI+PC9sYWJlbD4KICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJnbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBjb25maXJtYXRpb24iIHZhbHVlPSIke2MoQ2U/LmVtYWlsPz8iIil9Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke0tjLm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7Yyh0LmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoQ2U/Q2UucmVxdWVzdHM6WD8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7Yyh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7YyhDZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHtjKENlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke2MoZHQpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7WD9gPGxhYmVsIGNsYXNzPSJyZW1lbWJlciI+PGlucHV0IGlkPSJncmVtZW1iZXIiIHR5cGU9ImNoZWNrYm94IiR7Q2U/LnJlbWVtYmVyPyIgY2hlY2tlZCI6IiJ9PiBSZW1lbWJlciB0aGUgYmVkLCBmbG9vciBhbmQgcm9vbSByZXF1ZXN0cyBvbiBteSAke2MoWC5wcm9ncmFtbWU/PyJtZW1iZXJzaGlwIil9IGZvciBuZXh0IHRpbWU8L2xhYmVsPmA6IiJ9CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj5Ib2xkIHRoZXNlIHJvb21zPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4KICA8L2Rpdj5gLEtfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke2MoKGUubWlzc2luZz8/W10pLmpvaW4oIiBhbmQgIil8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsWmYoITApLCc8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4nXS5qb2luKCIiKSxXXz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW25lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgICR7dC5uYW1lP2A8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+YDonPGRpdiBjbGFzcz0id2hlcmUiPlNpZ25lZCBpbjwvZGl2Pid9CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgJHt0eXBlb2YgdC5wb2ludHM9PSJudW1iZXIiP2A8ZGl2IGNsYXNzPSJ3aGVuIj4ke2ModC5wb2ludHMudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHtjKE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke2ModC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLCh0LnByZWZlcmVuY2VzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgPGI+U2F2ZWQgZm9yIHlvdXIgbmV4dCBzdGF5czwvYj4KICAgICAgICAgICA8c3Bhbj4ke2ModC5wcmVmZXJlbmNlcy5tYXAobj0+S2MuZmluZChvPT5vLmlkPT09bik/LmxhYmVsPz9uKS5qb2luKCIsICIpKX0gLSB0aWNrZWQgb24gdGhlIGJvb2tpbmcgZm9ybSwgYW5kIGFza2VkIGZvciBvbmx5IHdoZW4geW91IGJvb2sgd2l0aCB0aGVtLjwvc3Bhbj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZm9yZ2V0LXByZWZzIj5Gb3JnZXQgdGhlbTwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sR189KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLE5vKCEwKV0uam9pbigiIiksTm89KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxRXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RlZD8/W107cmV0dXJuIHQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCR7ZS5hY2Nlc3NpYmlsaXR5PyIgZmxhZyI6IiJ9Ij4KICAgIDxiPlJlcXVlc3RlZCwgbm90IGhlbGQ8L2I+CiAgICAke3QubWFwKG49PmA8c3Bhbj4ke2Mobil9PC9zcGFuPmApLmpvaW4oIiIpfQogIDwvZGl2PmA6IiJ9LE11PWU9PlN0cmluZyhlLmhvbGRVbnRpbD8/IiIpLnNsaWNlKDAsMTYpLnJlcGxhY2UoIlQiLCIgIiksWV89ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmJvb2tpbmdzKSYmZS5ib29raW5ncy5sZW5ndGg/ZS5ib29raW5nczpbZS5ib29raW5nPz97fV0sbj10Lmxlbmd0aD4xLG89KHIscyxhKT0+W2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+Q29uZmlybWF0aW9uIGNvZGU8L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKHIuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke2Moci5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke2MoV2Uoci5zdGF5KSl9IMK3ICR7YyhyLmd1ZXN0Py5uYW1lPz8iIil9PC9kaXY+CiAgICAgICA8L2Rpdj5gLG4/YDxkaXYgY2xhc3M9Im5vdGUiPkhlbGQgdW50aWwgJHtjKE11KHIpKX0gVVRDLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7YyhzKX08L3NwYW4+PC9kaXY+YCxRXyhhKSxgPGRpdiBjbGFzcz0icm93cyI+JHsoci5xdW90ZT8ubGluZXM/P1tdKS5tYXAoZWspLmpvaW4oIiIpfTwvZGl2PmAsbj9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2Moci5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2Moci5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCAke2Moci5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpO3JldHVybltuZSgpLG4/YDxkaXYgY2xhc3M9Im5vdGUiPiR7dC5sZW5ndGh9IGJvb2tpbmdzLCBvbmUgZm9yIGVhY2ggc3RheS4gRWFjaCBob3RlbCBob2xkcyBpdHMgb3duIG5pZ2h0cyB1bmRlciBpdHMgb3duIGNvZGUsIGFuZCBlYWNoIGlzIGNoYW5nZWQgb3IgY2FuY2VsbGVkIG9uIGl0cyBvd24uPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCB0aGUgdGltZSB1bmRlciBlYWNoIGNvZGUuIjpgVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7YyhNdSh0WzBdKSl9IFVUQy5gfSBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCwuLi50Lm1hcChyPT5uP28ocixTdHJpbmcoci50b3RhbD8/IiIpLHIpOm8ocixTdHJpbmcoZS50b3RhbD8/IiIpLGUpKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAke24/IiI6YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPmB9CiAgICAgPC9kaXY+YF0uam9pbigiIil9LFhfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5kZXRhaWw/P2Uud2h5Pz8iVGhhdCBjb3VsZCBub3QgYmUgZG9uZS4iKX08L2Rpdj5gLG5uPjA/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIj5WaWV3IHRoZSB0cmlwPC9idXR0b24+PC9kaXY+JzoiIl0uam9pbigiIiksZWs9ZT0+YAogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoZS5raW5kPT09InJvb20iP1dlKGUuc3RheSk6ZS5kZXRhaWw/PyIiKX08L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj48L2Rpdj4KICA8L2Rpdj5gLHRrPXtyZXF1ZXN0ZWQ6Indhcm4iLGNvbmZpcm1lZDoiZ29vZCIsY2FuY2VsbGVkOiJiYWQiLGV4cGlyZWQ6ImJhZCJ9LG5rPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5LYy5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke2Mobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LG9rPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdLG49ZS5ub3RGb3VuZD9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS50b29NYW55P2Uubm90Rm91bmRMaW5lOmBObyBib29raW5nIG1hdGNoZXMgJHtlLm5vdEZvdW5kfSB3aXRoIHRoYXQgZW1haWwuIEJvdGggaGF2ZSB0byBiZSBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLmApfTwvZGl2PmA6IiI7cmV0dXJuIGUubm90Rm91bmQmJnQubGVuZ3RoPT09MD9gJHtufQogICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5UcnkgYWdhaW48L2J1dHRvbj48L2Rpdj5gOnQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOltuZSgpLG4sYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKG8uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2MoV2Uoby5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke25rKG8pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHt0a1tTdHJpbmcoby5zdGF0dXMpXT8/IiJ9Ij4ke2Moby5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKG8ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke28uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG8uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0scXU9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxEdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89ZS5mcm9tPz97fSxyPWUudG8scz0hIXImJihyLmNoZWNrSW4hPT1vLmNoZWNrSW58fHIuY2hlY2tPdXQhPT1vLmNoZWNrT3V0fHxOdW1iZXIoci5yb29tcykhPT1OdW1iZXIoby5yb29tcyl8fHIucm9vbU5hbWUhPT1vLnJvb21OYW1lKSxhPShpLHUsbCk9PnU/YDxkaXYgY2xhc3M9ImxlZyR7bD8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke2MoaSl9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHtjKHUuY2hlY2tJbil9IOKGkiAke2ModS5jaGVja091dCl9IMK3ICR7Yyh1Lm5pZ2h0cyl9ICR7TnVtYmVyKHUubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke2ModS5yb29tTmFtZSl9JHtOdW1iZXIodS5yb29tcyk+MT9gIMK3ICR7Yyh1LnJvb21zKX0gcm9vbXNgOiIifSDCtyAke2ModS50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW25lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDaGFuZ2VkIjoiQ2hhbmdpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlLmhvdGVsTmFtZT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKGUuaG90ZWxOYW1lKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJsZWdzIj4ke2EodD8iV2FzIjoiTm93IixlLmZyb20scyl9JHthKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtjKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7YyhlLmFkZE9uLmZyb20pfSDihpIgJHtjKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sZnM9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7YyhlLnRpdGxlKX08L2g0PiR7YyhlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtjKG8udGl0bGUpfTwvaDQ+JHtjKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0scms9ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXQuc29tZShzPT5zLnJlY29tbWVuZGVkKSxyPXM9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtzLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9JHtvPyIgbWFya2VkIjoiIn0iPgogICAgICAke28/YDxkaXYgY2xhc3M9InBpY2ttYXJrJHtzLnJlY29tbWVuZGVkPyIiOiIgbm9uZSJ9Ij4ke3MucmVjb21tZW5kZWQ/IlJlY29tbWVuZGVkIjoiIn08L2Rpdj5gOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHMuaG90ZWwuaWQpfSIgc3R5bGU9IiR7RnQoU3RyaW5nKHMuaG90ZWwuaWQpKX0iPgogICAgICAgICR7cy5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhzLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhIdChTdHJpbmcocy5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1uYW1lIj4ke2Mocy5ob3RlbC5uYW1lKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29sLXByaWNlIj4ke3MucHJpY2U/YCR7YyhzLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsIGNsYXNzPSJzdWIiPnRvdGFsIMK3ICR7YyhzLnByaWNlLm5pZ2h0bHkpfS9uaWdodDwvc21hbGw+YDpzLmZyb20/YDxzbWFsbD5Gcm9tIDwvc21hbGw+JHtjKHMuZnJvbSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ3aHkke3MuYmVzdEZvcj8iIjoiIG5vbmUifSI+JHtzLmJlc3RGb3I/YyhzLmJlc3RGb3IpOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHMucHJvcz8/W10pLm1hcChhPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2MoYSl9PC9zcGFuPjwvZGl2PmApLC4uLihzLmNvbnM/P1tdKS5tYXAoYT0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2MoYSl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW25lKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhXZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCR7dC5sZW5ndGg+PTQ/IiBmb3VyIjoiIn0iIHN0eWxlPSItLWNvbHM6JHt0Lmxlbmd0aH07LS1oZWFkLXJvd3M6JHtvPzY6NX0iPgogICAgICAgPGRpdiBjbGFzcz0iY21wLWNvcm5lciI+PC9kaXY+CiAgICAgICAke3QubWFwKHIpLmpvaW4oIiIpfQogICAgICAgJHtuLm1hcCgocyxhKT0+YDxkaXYgY2xhc3M9ImsiPiR7YyhzKX08L2Rpdj4ke3QubWFwKGk9PmA8ZGl2IGNsYXNzPSJ2JHthJTI/IiBhbHQiOiIifSI+JHtjKGkucm93cz8uW2FdPy52YWx1ZT8/IuKAlCIpfTwvZGl2PmApLmpvaW4oIiIpfWApLmpvaW4oIiIpfQogICAgIDwvZGl2PjwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAocz0+YCR7YyhzLm5hbWUpfTogJHtjKHMud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+T3BlbiBhICR7YyhlLnZvY2FiPy5ub3VuPz8iaG90ZWwiKX0gdG8gc2VlIGl0cyByb29tcyR7ZS5zdGF5Py5jaGVja0luPyIgZm9yIHRoZXNlIG5pZ2h0cyI6IiJ9LjwvZGl2PmBdLmpvaW4oIiIpfSxzaz1lPT57Y29uc3QgdD1lLmRheXM/P1tdLG49aT0+YDxzcGFuIGNsYXNzPSJpbnN0YXRlICR7aS5ib29rZWR8fGkuaW5UcmlwPyJ5ZXMiOiJubyJ9Ij4ke2kuYm9va2VkP2BCb29rZWQgwrcgJHtjKGkuYm9va2VkKX1gOmkuaW5UcmlwPyJJbiB0aGUgdHJpcCI6IlBsYW4gb25seSJ9PC9zcGFuPmAsbz1pPT5gIGRhdGEtaG90ZWw9IiR7YyhpLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtpLmNoZWNrSW4/YCBkYXRhLWNpPSIke2MoaS5jaGVja0luKX0iIGRhdGEtY289IiR7YyhpLmNoZWNrT3V0KX0iYDoiIn1gLHI9aT0+TnVtYmVyKGkubmlnaHQ/PzEpPjE/YDxkaXYgY2xhc3M9InBsYW4tbmlnaHQiJHtvKGkpfT4KICAgICAgICAgICA8c3Bhbj5OaWdodCAke2MoaS5uaWdodCl9IG9mICR7YyhpLm5pZ2h0cyl9IMK3ICR7YyhpLm5hbWUpfTwvc3Bhbj4ke24oaSl9CiAgICAgICAgIDwvZGl2PmA6YDxkaXYgY2xhc3M9InBsYW4tc3RheSIke28oaSl9PgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcy1zaG90IiBzdHlsZT0iJHtGdChTdHJpbmcoaS5pZCkpfSI+JHtpLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGkuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6YDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhIdChTdHJpbmcoaS5uYW1lKSkpfTwvc3Bhbj5gfTwvc3Bhbj4KICAgICAgICAgICA8c3BhbiBjbGFzcz0icHMtYm9keSI+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldGEiPiR7YyhbaS5kZXRhaWwsaS5uaWdodHM/YCR7aS5uaWdodHN9ICR7aS5uaWdodHM9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IGhlcmVgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAke2kucHJpY2U/YDxzcGFuIGNsYXNzPSJwcy1wcmljZSI+JHtjKGkucHJpY2UpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICAgJHtuKGkpfQogICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgPC9kaXY+YCxzPWk9PmAKICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKFtpLmRldGFpbCxpLnByaWNlXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgICR7bihpKX0KICAgIDwvZGl2PmAsYT1pPT4oaS5wbGFuPz9bXSkubGVuZ3RoP2A8b2wgY2xhc3M9Im1vbWVudHMiPiR7aS5wbGFuLm1hcCh1PT5gPGxpPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGVuIj4ke2ModS50aW1lPz8iIil9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGF0Ij48Yj4ke2ModS53aGF0KX08L2I+JHt1Lm5vdGU/YDxzbWFsbD4ke2ModS5ub3RlKX08L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICA8L2xpPmApLmpvaW4oIiIpfTwvb2w+YDoiIjtyZXR1cm5bbmUoKSxgPGRpdj4KICAgICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgJHtlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhXZShlLnN0YXkpKX08L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9ImdhcCI+PGI+JHtjKE51bWJlcihlLmluVHJpcD8/MCkrTnVtYmVyKGUuYm9va2VkPz8wKSl9LyR7YyhlLnBsYW5uZWQpfTwvYj48c3Bhbj4ke2MoZS5nYXA/PyIiKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0iZGF5cyI+JHt0Lm1hcCgoaSx1KT0+YAogICAgICA8ZGl2IGNsYXNzPSJkYXlyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImRheW51bSI+PGI+JHt1KzF9PC9iPjxpPjwvaT48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXlib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRheWxhYmVsIj4ke2MoaS5sYWJlbCl9JHtpLmRhdGU/YDxzbWFsbD4gwrcgJHtjKGlrKFN0cmluZyhpLmRhdGUpKSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtpLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7YyhpLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAke2EoaSl9CiAgICAgICAgICAkeyhpLml0ZW1zPz9bXSkubWFwKGw9Pmwua2luZD09PSJob3RlbCI/cihsKTpzKGwpKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChpPT5gJHtjKGkubmFtZSl9OiAke2MoaS53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0saWs9ZT0+bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KSx4ZT0oZSx0PSExKT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2NvbnN0IG49dCYmZS52aWV3PT09Im1lbWJlciImJlg/ey4uLmUsbWVtYmVyOlh9OmU7bi50b29sTmFtZXMmJih5Zj1uLnRvb2xOYW1lcyksbi5icmFuZCYmKGR0PVN0cmluZyhuLmJyYW5kKSksbi5sb2dvVXJsJiYocHM9U3RyaW5nKG4ubG9nb1VybCkpLHR5cGVvZiBuLmRlbW89PSJib29sZWFuIiYmKF9mPW4uZGVtbyksbi5kZW1vTm90ZSYmKGtmPVN0cmluZyhuLmRlbW9Ob3RlKSksdHlwZW9mIG4ucm9vbXNfd2FudGVkPT0ibnVtYmVyIj9ZPW4ucm9vbXNfd2FudGVkOihuLnZpZXc9PT0iaG90ZWxzInx8bi52aWV3PT09ImRlc3RpbmF0aW9ucyJ8fG4udmlldz09PSJuby1ob3RlbHMiKSYmbi5zdGF5Py5jaGVja0luJiYhcHQmJihZPU1hdGgubWF4KDEsTnVtYmVyKG4uYXNrPy5yb29tcz8/MSl8fDEpKSx0fHwobi52aWV3PT09Im1lbWJlciImJm4ubWVtYmVyPy50aWVyPy5uYW1lP1g9bi5tZW1iZXI6bi5tZW1iZXI/LnRpZXI/Lm5hbWUmJihYPVg/LnByb2dyYW1tZT09PW4ubWVtYmVyLnByb2dyYW1tZSYmWD8udGllcj8ubmFtZT09PW4ubWVtYmVyLnRpZXIubmFtZT97Li4uWCwuLi5uLm1lbWJlcixwcmVmZXJlbmNlczpuLm1lbWJlci5wcmVmZXJlbmNlc306bi5tZW1iZXIpLChuLnZpZXc9PT0ic2lnbmVkLW91dCJ8fG4uc2lnbmVkSW49PT0hMSkmJihYPW51bGwpKSxuLnN0YXk/LmNoZWNrSW4mJiFHdCYmIXB0JiYoVD17Y2hlY2tJbjpuLnN0YXkuY2hlY2tJbixjaGVja091dDpuLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOm4uc3RheS5ndWVzdHM/PzJ9KSwhQmMmJihuLnZpZXc9PT0idHJpcCJ8fG4udmlldz09PSJuZWVkcy1kYXRlcyIpJiYoX3Q9bi5saW5lcz8/W10pLChuLnZpZXc9PT0iYm9va2luZyJ8fG4udmlldz09PSJlbXB0eS10cmlwIikmJihfdD1bXSxubj0wKSxMZT1TdHJpbmcobi52aWV3Pz8iIiksd2YoKTtjb25zdCBvPXBlKCJicmFuZCIpO3BzPyhvLnNyYz1wcyxvLmhpZGRlbj0hMSxwZSgidGl0bGUiKS5oaWRkZW49ITApOihvLmhpZGRlbj0hMCxwZSgidGl0bGUiKS5oaWRkZW49ITEscGUoInRpdGxlIikudGV4dENvbnRlbnQ9ZHR8fCJIb3RlbHMiKSxwZSgic3ViIikudGV4dENvbnRlbnQ9dWsobiksZGsoKSxsaygpO2NvbnN0IHI9e2hvdGVsczpEXyxkZXN0aW5hdGlvbnM6QV8sIm5vLWhvdGVscyI6TF8saG90ZWw6TnUsIm5vLXJvb21zIjpOdSwiaG90ZWwtbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGF0IGhvdGVsIGlzIG5vdCBpbiB0aGlzIGNvbm5lY3Rvci48L2Rpdj4nLGV4dHJhczpIXyx0cmlwOlZfLCJuZWVkcy1kYXRlcyI6Y2ssYm9va2luZzpZXywibmVlZHMtZ3Vlc3QiOktfLG1lbWJlcjpXXywibWVtYmVyLW5vdC1mb3VuZCI6R18sInNpZ25lZC1vdXQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlNpZ25lZCBvdXQuIFJhdGVzIGFyZSB0aGUgcHVibGljIG9uZXMgYWdhaW4uPC9kaXY+PGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPjwvZGl2PicsImVtcHR5LXRyaXAiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRyaXAgeWV0LjwvZGl2PicsYm9va2luZ3M6b2ssImNhbmNlbGxhdGlvbi1wcmV2aWV3IjpxdSxjYW5jZWxsZWQ6cXUsImNoYW5nZS1wcmV2aWV3IjpEdSxjaGFuZ2VkOkR1LCJib29raW5nLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZyBoZXJlIG1hdGNoZXMgdGhhdCBjb2RlLjwvZGl2PicsY29tcGFyaXNvbjpyaywibm90aGluZy10by1jb21wYXJlIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5Ob25lIG9mIHRob3NlIGFyZSBob3RlbHMgdGhpcyBjb25uZWN0b3Iga25vd3MuPC9kaXY+JyxpdGluZXJhcnk6c2ssImVtcHR5LWl0aW5lcmFyeSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+QW4gaXRpbmVyYXJ5IG5lZWRzIGF0IGxlYXN0IG9uZSBkYXkuPC9kaXY+Jyxwb2xpY3k6ZnMscG9saWNpZXM6ZnMsInBvbGljeS1taXNzaW5nIjpmcyxlcnJvcjpYXywiZmluZC1ib29raW5nIjooKT0+W25lKCksJzxkaXYgY2xhc3M9Im5vdGUiPkEgYm9va2luZyBtYWRlIGluIGFub3RoZXIgY29udmVyc2F0aW9uIGlzIGZvdW5kIHdpdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgaXQgd2FzIG1hZGUgd2l0aCAtIGJvdGgsIGFzIHRoZXkgYXJlIG9uIHRoZSBjb25maXJtYXRpb24uPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9ybSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICAgICAgIDxsYWJlbD5Db25maXJtYXRpb24gY29kZTxpbnB1dCBpZD0iZmNvZGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iU0wt4oCmIj48L2xhYmVsPgogICAgICAgICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJmbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIG9uZSBvbiB0aGUgYm9va2luZyI+PC9sYWJlbD4KICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibG9va3VwLWJvb2tpbmciPkZpbmQgaXQ8L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YF0uam9pbigiIiksIm5vLW1lbWJlciI6KCk9PmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9ib2R5IGlzIHNpZ25lZCBpbiwgc28gdGhlcmUgaXMgbm90aGluZyBzYXZlZCB0byBmb3JnZXQuPC9kaXY+JHtObyghMCl9YCwibWVtYmVyLXNpZ24taW4iOigpPT5bbmUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+JyxObyghMCldLmpvaW4oIiIpfTsoTGU9PT0iaG90ZWwifHxMZT09PSJuby1yb29tcyJ8fExlPT09Im5lZWRzLWRhdGVzIikmJm4uaG90ZWw/LmlkPyhLdD1TdHJpbmcobi5ob3RlbC5pZCksbi5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5hcygwLCFycyksMCkpOihLdD0iIixXYygpKSxxPW47Y29uc3Qgcz1yW0xlXTtwZSgiY29udGVudCIpLmlubmVySFRNTD0ocz9zKG4pOmA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhuLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7bi5kZXRhaWw/YDxicj4ke2Mobi5kZXRhaWwpfWA6IiJ9PC9kaXY+YCkrYWsobiksTGU9PT0iaG90ZWxzIiYmIXNuKCkmJihKYz1WYygpLGlzKCkhPT1abyYmeGUobix0KSl9LGFrPWU9Pntjb25zdCB0PSEhRWUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy5tZXNzYWdlLG49KGUuc3VnZ2VzdGlvbnM/P1tdKS5tYXAoKG8scik9Pm8/LmFza3x8bz8uYXNrcz8ubGVuZ3RoP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LGNrPWU9PltuZSgpLGUuaG90ZWw/UmYoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLFRmKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSx1az1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/V2UoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixsaz0oKT0+e2NvbnN0IGU9cGUoIm1lbWJlcmNoaXAiKTtYPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1gudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoWC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixbWC5uYW1lLFgucHJvZ3JhbW1lXS5maWx0ZXIodD0+dHlwZW9mIHQ9PSJzdHJpbmciJiZ0KS5qb2luKCIgwrcgIikpKTooZS5oaWRkZW49TGU9PT0ibWVtYmVyLW5vdC1mb3VuZCIsZS50ZXh0Q29udGVudD0iTWVtYmVyIHNpZ24gaW4iLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsImFzay1zaWduLWluIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpfSxkaz0oKT0+e2NvbnN0IGU9cGUoImhlYWR0cmlwIiksdD1CYz9ubjpubnx8X3QubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxMZT09PSJ0cmlwIixwZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSxwaz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO1Q9e2NoZWNrSW46ZT8udmFsdWU/P1QuY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/VC5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz9ULmd1ZXN0cyl8fDJ9fSx3bz0oZT17fSk9PlQuY2hlY2tJbiYmVC5jaGVja091dD97Y2hlY2tJbjpULmNoZWNrSW4sY2hlY2tPdXQ6VC5jaGVja091dCxndWVzdHM6VC5ndWVzdHMsLi4uZX06ZTtsZXQgeHMsR3Q9ITE7Y29uc3QgV2M9KCk9PntjbGVhclRpbWVvdXQoeHMpLEd0PSExfSxhcz0oZT0wLHQ9ITEpPT57S3QmJihjbGVhclRpbWVvdXQoeHMpLEd0PSEwLHhzPXNldFRpbWVvdXQoKCk9PntpZighS3Qpe0d0PSExO3JldHVybn1pZihVdCl7YXMoMTUwLHQpO3JldHVybn1HdD0hMSxNKCJnZXRIb3RlbCIse2hvdGVsOkt0LHJvb21zOlksLi4ud28oKX0sdD97bm90ZTpJX306e30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBuaWdodHMuIikpfSxlKSl9LFI9ZT0+e3BlKCJjb250ZW50IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZSl9PC9kaXY+YCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlPT57Y29uc3QgdD1lLnRhcmdldD8uY2xvc2VzdCgiW2RhdGEtaG90ZWxdLFtkYXRhLWFjdF0sW2RhdGEtcG9saWN5XSxbZGF0YS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2FuY2VsXSxbZGF0YS1jb25maXJtLWNoYW5nZV0sW2RhdGEtZXh0cmFzXSxbZGF0YS1yb29tcy1uXSxbZGF0YS1hc2tdLFtkYXRhLWJvb2tpbmctZXh0cmFzXSxbZGF0YS1ib29raW5nLWV4dHJhXSxbZGF0YS1zdWdnZXN0XSxbZGF0YS1wbGFjZV0sW2RhdGEtcGxhY2UtYWxsXSxbZGF0YS1zb3J0XSxbZGF0YS1saXN0LXJvb21zXSxbZGF0YS1maWx0ZXJdLFtkYXRhLXBhbmVsXSxbZGF0YS1yZWdpb25dIik7aWYoIXQpcmV0dXJuO2NvbnN0IG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXNrIik7aWYobiE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09InRydWUiO3Quc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLFN0cmluZyhrKSk7Y29uc3Qgej1KX1tuXTtrJiZ6JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYXNrW2RhdGEtYXNrPSIke3p9Il1gKT8uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLE5mKCk7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtbGlzdC1yb29tcyIpO2lmKG8hPT1udWxsKXtZPU1hdGgubWluKEF1LE1hdGgubWF4KDEsWStOdW1iZXIobykpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJscm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcoWSkpLGpvKDQ1MCk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKHIhPT1udWxsKXtwaygpLFk9TWF0aC5taW4oQXUsTWF0aC5tYXgoMSxZK051bWJlcihyKSkpO2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJuIik7ayYmKGsudGV4dENvbnRlbnQ9U3RyaW5nKFkpKTtjb25zdCB6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTt6JiYoei50ZXh0Q29udGVudD1zcygpKSxhcyg0NTApO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYocyE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsej10LmNsYXNzTGlzdC5jb250YWlucygiYWRkIikmJiF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP1k6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksSz10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9OndvKCk7TSgiYWRkVG9UcmlwIix7aG90ZWw6ayxyb29tOnMscm9vbXM6eiwuLi5LfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1leHRyYSIpO2lmKGEhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWRheSIpO00oImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOmEscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksLi4uaz97ZGF5Omt9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlIik7aWYoaSE9PW51bGwpe2NvbnN0IGs9cT8uYXNrPy5zb3J0LHo9cT8udmlldz09PSJob3RlbHMiP3E/LmFzaz8ucXVlcnk6dm9pZCAwO0NzKCk7Y29uc3QgSz1xPy52aWV3PT09ImRlc3RpbmF0aW9ucyJ8fCEhcT8uc3RheT8uY2hlY2tJbjtNKCJsaXN0SG90ZWxzIix7Li4uaT97Y2l0eTppfTp7fSwuLi5rP3tzb3J0Omt9Ont9LC4uLmkmJno/e3F1ZXJ5Onp9Ont9LC4uLnE/LnZpZXc9PT0iaG90ZWxzIj9rbyhxPy5hc2spOnt9LC4uLks/V3QoKTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCB1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWZpbHRlciIpO2lmKHUhPT1udWxsKXtjb25zdCBrPXE/LmFzaz8/e30sej1rbyhrKTtpZih1LnN0YXJ0c1dpdGgoImJyYW5kOiIpKXtjb25zdCByZT11LnNsaWNlKDYpO3ouYnJhbmQ9ei5icmFuZD09PXJlP3ZvaWQgMDpyZX1lbHNlIGlmKHUuc3RhcnRzV2l0aCgiZmFjaWxpdHk6Iikpe2NvbnN0IHJlPXUuc2xpY2UoOSksT2U9ei5mYWNpbGl0aWVzPz9bXTt6LmZhY2lsaXRpZXM9T2UuaW5jbHVkZXMocmUpP09lLmZpbHRlcihjdD0+Y3QhPT1yZSk6Wy4uLk9lLHJlXX1lbHNlKHU9PT0iZnJlZUNhbmNlbGxhdGlvbiJ8fHU9PT0iYnJlYWtmYXN0IikmJih6W3VdPSF6W3VdKTtjb25zdCBLPWtvKHopO00oImxpc3RIb3RlbHMiLHsuLi5adShrKSwuLi5LfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBmaWx0ZXIgdGhlIGxpc3QuIikpO3JldHVybn1jb25zdCBsPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXNvcnQiKTtpZihsIT09bnVsbCl7SWU9Q2Y7Y29uc3R7c29ydDprLC4uLnp9PXE/LmFzaz8/e307TSgibGlzdEhvdGVscyIsey4uLnosLi4ubCE9PSJncm91cCI/e3NvcnQ6bH06e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHJlb3JkZXIgdGhlIGxpc3QuIikpO3JldHVybn1jb25zdCBkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlLWFsbCIpO2lmKGQhPT1udWxsKXtNKCJsaXN0SG90ZWxzIix7Y2l0eTpkLGFsbDohMCwuLi5XdCgpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWNvbnN0IG09dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYXMiKTtpZihtIT09bnVsbCl7TSgibGlzdEV4dHJhcyIse2Jvb2tpbmc6bX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IGI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYSIpO2lmKGIhPT1udWxsKXtNKCJwcmV2aWV3Q2hhbmdlIix7Ym9va2luZzp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nIik/PyIiLGV4dHJhOmIscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHdvcmsgb3V0IHRoYXQgY2hhbmdlLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1leHRyYXMiKTtpZih2IT09bnVsbCl7TSgibGlzdEV4dHJhcyIse2hvdGVsOnYsLi4ud28oKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IF89dC5nZXRBdHRyaWJ1dGUoImRhdGEtcG9saWN5Iik7aWYoXyE9PW51bGwpe00oInBvbGljaWVzIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsdG9waWM6X30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGF0IHBvbGljeS4iKSk7cmV0dXJufWNvbnN0IHc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2FuY2VsIik7aWYodyE9PW51bGwpe00oInByZXZpZXdDYW5jZWxsYXRpb24iLHtib29raW5nOnd9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHdvcmsgb3V0IHRoZSBmZWUuIikpO3JldHVybn1jb25zdCAkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2FuY2VsIik7aWYoJCE9PW51bGwpe00oImNhbmNlbEJvb2tpbmciLHtib29raW5nOiQsY29uZmlybWVkOiEwfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjYW5jZWwgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgTj10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNoYW5nZSIpO2lmKE4hPT1udWxsKXtjb25zdCBrPXE/LnRvPz97fSx6PXE/LmZyb20/P3t9LEs9cT8uYWRkT24scmU9ay5jaGVja0luJiYoay5jaGVja0luIT09ei5jaGVja0lufHxrLmNoZWNrT3V0IT09ei5jaGVja091dCk7TSgiY2hhbmdlQm9va2luZyIse2Jvb2tpbmc6Tixjb25maXJtZWQ6ITAsLi4ucmU/e2NoZWNrSW46ay5jaGVja0luLGNoZWNrT3V0OmsuY2hlY2tPdXR9Ont9LC4uLks/LmlkP3tleHRyYTpLLmlkLHF1YW50aXR5Ok51bWJlcihLLnRvKX06e30sLi4uay5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKGsucm9vbXMpIT09TnVtYmVyKHoucm9vbXMpP3tyb29tczpOdW1iZXIoay5yb29tcyl9Ont9LC4uLmsucm9vbU5hbWUmJmsucm9vbU5hbWUhPT16LnJvb21OYW1lP3tyb29tOmsucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgST10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZihJPT09ImJhY2siKXtMdSgpO3JldHVybn1jb25zdCBHPUk9PT0iYm9va2luZ3MiPyJib29raW5ncyI6dC5oYXNBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/YGhvdGVsOiR7dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKX1gOiIiO2lmKEcmJmhlLmxlbmd0aCYmdG4oaGUuYXQoLTEpPy5wYXlsb2FkKT09PUcpe0x1KCk7cmV0dXJufWNvbnN0IG9lPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJlZ2lvbiIpO2lmKG9lIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpIT09InRydWUiO2Zvcihjb25zdCB6IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJlZ2lvbl0iKSl6LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKGsmJno9PT10KSk7Zm9yKGNvbnN0IHogb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmVnaW9uLWJvZHldIikpei5oaWRkZW49IWt8fHouZ2V0QXR0cmlidXRlKCJkYXRhLXJlZ2lvbi1ib2R5IikhPT1vZTtyZXR1cm59aWYoST09PSJtb3JlLWNvdW50cmllcyIpe2Zvcihjb25zdCBrIG9mKHQuY2xvc2VzdCgiW2RhdGEtcmVnaW9uLWJvZHldIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuZGVzdFtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5jbG9zZXN0KCIucGxhY2VzIik/LnJlbW92ZSgpO3JldHVybn1pZihJPT09Im1vcmUtcGxhY2VzIil7Zm9yKGNvbnN0IGsgb2YodC5jbG9zZXN0KCIucGxhY2VzIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuY2hpcC5wbGFjZVtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5yZW1vdmUoKTtyZXR1cm59Y29uc3QgSj10LmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpO2lmKEohPT1udWxsKXtJZT1JZT09PUo/IiI6Sjtmb3IoY29uc3QgayBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbC1ib2R5XSIpKWsuaGlkZGVuPWsuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsLWJvZHkiKSE9PUllO2Zvcihjb25zdCBrIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsXSIpKWsuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoay5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKT09PUllKSk7cmV0dXJufWlmKEk9PT0iY2xlYXItZmlsdGVycyIpe00oImxpc3RIb3RlbHMiLFp1KHE/LmFzaykpLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgY2xlYXIgdGhlIGZpbHRlcnMuIikpO3JldHVybn1pZihJPT09ImFsbC1ob3RlbHMiKXtDcygpLE0oImxpc3RIb3RlbHMiLHthbGw6ITAsLi4uV3QoKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJwcmljZS1saXN0Iil7am8oMCk7cmV0dXJufWlmKEk9PT0iZmluZC1ib29raW5nIil7Y29uc3Qgaz17dmlldzoiZmluZC1ib29raW5nIn07X28oaykseGUoayksWWUoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJsb29rdXAtYm9va2luZyIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm1haWwiKT8udmFsdWUudHJpbSgpPz8iIjtpZigha3x8IXouaW5jbHVkZXMoIkAiKSl7UigiQm90aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCB0aGUgYm9va2luZyB3YXMgbWFkZSB3aXRoLCBwbGVhc2UuIik7cmV0dXJufU0oImxpc3RCb29raW5ncyIse2Jvb2tpbmc6ayxlbWFpbDp6fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb29rIHRoYXQgdXAuIikpO3JldHVybn1pZihJPT09ImZpbmQiKXtqZigpO3JldHVybn1pZihJPT09InBhZ2UtbmV4dCJ8fEk9PT0icGFnZS1wcmV2Iil7Y29uc3Qgaz1xO2lmKCFrfHxrLnZpZXchPT0iaG90ZWxzIilyZXR1cm47Y29uc3Qgej1pcygpLEs9TnVtYmVyKGsub2Zmc2V0Pz8wKSxyZT1NYXRoLm1pbih6LChrLmhvdGVscz8/W10pLmxlbmd0aCk7TSgibGlzdEhvdGVscyIsey4uLmsuYXNrPz97fSxvZmZzZXQ6ST09PSJwYWdlLW5leHQiP0srcmU6TWF0aC5tYXgoMCxLLXopLGxpbWl0Onp9KS50aGVuKFllKS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJmdWxsc2NyZWVuIil7RWUucmVxdWVzdERpc3BsYXlNb2RlKHttb2RlOiJmdWxsc2NyZWVuIn0pLnRoZW4oaz0+e3JuPVN0cmluZyhrPy5tb2RlPz9ybik7Y29uc3Qgej1xO2lmKCF6KXJldHVybjtjb25zdCBLPU51bWJlcih6LnRvdGFsPz8wKTtzbigpJiZ6LnZpZXc9PT0iaG90ZWxzIiYmKE51bWJlcih6Lm9mZnNldD8/MCk+MHx8KHouaG90ZWxzPz9bXSkubGVuZ3RoPE1hdGgubWluKDEyLEspKT9NKCJsaXN0SG90ZWxzIix7Li4uei5hc2s/P3t9LGxpbWl0OjEyfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpOnhlKHopfSkuY2F0Y2goKCk9PlIoIlRoaXMgYXBwIGNhbm5vdCBvcGVuIGZ1bGwgc2NyZWVuIGhlcmUuIikpO3JldHVybn1pZihJPT09Im1vcmUtaG90ZWxzIil7Y29uc3Qgaz1xO2lmKCFrfHxrLnZpZXchPT0iaG90ZWxzIilyZXR1cm47TSgibGlzdEhvdGVscyIsey4uLmsuYXNrPz97fSxvZmZzZXQ6TnVtYmVyKGsub2Zmc2V0Pz8wKSsoay5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MTJ9LHtmb2xkOno9Pno/LnZpZXc9PT0iaG90ZWxzIj97Li4ueixob3RlbHM6Wy4uLmsuaG90ZWxzPz9bXSwuLi56LmhvdGVscz8/W11dLHNob3duOihrLmhvdGVscz8/W10pLmxlbmd0aCsoei5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0Ok51bWJlcihrLm9mZnNldD8/MCkscGxhY2VzOmsucGxhY2VzLC4uLmsud2lkZW5lZD97d2lkZW5lZDprLndpZGVuZWR9Ont9fTp6fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJob21lIil7TSgibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoKEk9PT0ibWVtYmVyInx8ST09PSJmaW5kLWJvb2tpbmcifHxJPT09ImFzay1zaWduLWluIikmJlV0KXJldHVybjtpZihJPT09Im1lbWJlciIpe2lmKCFYKXJldHVybjtjb25zdCBrPXt2aWV3OiJtZW1iZXIiLG1lbWJlcjpYfTtfbyhrKSx4ZShrKSxZZSgpO3JldHVybn1pZihJPT09ImFzay1zaWduLWluIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2lnbmluIik7aWYoaylrLmhpZGRlbj0hMTtlbHNle2NvbnN0IHo9e3ZpZXc6Im1lbWJlci1zaWduLWluIn07X28oeikseGUoeiksWWUoKX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09InNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwheil7UigiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufU0oInNpZ25JbiIse251bWJlcjprLHN1cm5hbWU6en0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKEk9PT0iZm9yZ2V0LXByZWZzIil7TSgiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgQj10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYoQiE9PW51bGwpe2NvbnN0IGs9KHE/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKEIpXTtrPy5hc2s/LnRvb2w/TShTdHJpbmcoay5hc2sudG9vbCksay5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6QXJyYXkuaXNBcnJheShrPy5hc2tzKSYmay5hc2tzLmxlbmd0aD8oYXN5bmMoKT0+e2Zvcihjb25zdFt6LEtdb2Ygay5hc2tzLmVudHJpZXMoKSlhd2FpdCBNKFN0cmluZyhLLnRvb2wpLEsuYXJncz8/e30se3B1c2g6ej09PTB9KX0pKCkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBwdXQgYWxsIG9mIHRoZW0gaW4gdGhlIHRyaXAganVzdCBub3cuIikpOms/LnNheSYmRWUuc2VuZE1lc3NhZ2Uoe3JvbGU6InVzZXIiLGNvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OlN0cmluZyhrLnNheSl9XX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgc2VuZCB0aGF0IHRvIHRoZSBjaGF0LiIpKTtyZXR1cm59aWYoST09PSJzaWduLW91dCIpe1g9bnVsbCxNKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKEk9PT0iYXNrLWJvb2siKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpO2smJihrLmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0iYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ21haWwiKT8udmFsdWUudHJpbSgpPz8iIixLPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiLHJlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndGltZSIpPy52YWx1ZS50cmltKCk/PyIiLE9lPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcChMZj0+TGYuZGF0YXNldC5hc2s/PyIiKSxjdD0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZihDZT17bmFtZTprLGVtYWlsOnosbm90ZXM6SyxhcnJpdmluZ0F0OnJlLHJlcXVlc3RzOk9lLHJlbWVtYmVyOmN0fSwha3x8IXouaW5jbHVkZXMoIkAiKSl7UihrPydUaGF0IGVtYWlsIGhhcyBubyAiQCIgaW4gaXQgLSB0aGUgY29uZmlybWF0aW9uIG5lZWRzIGFuIGFkZHJlc3MgaXQgY2FuIHJlYWNoLic6IlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwgdG8gc2VuZCB0aGUgY29uZmlybWF0aW9uIHRvLiIpO3JldHVybn1NKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6ayxlbWFpbDp6LC4uLks/e25vdGVzOkt9Ont9LC4uLnJlP3thcnJpdmluZ0F0OnJlfTp7fSwuLi5PZS5sZW5ndGg/e3JlcXVlc3RzOk9lfTp7fSwuLi5jdD97cmVtZW1iZXJSZXF1ZXN0czohMH06e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGFzayBmb3IgdGhvc2Ugcm9vbXMuIikpO3JldHVybn1pZihJPT09ImJvb2tpbmdzIil7TSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZihJPT09InRyaXAiKXtNKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGdlPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik7aWYoZ2Upe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKSx6PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik7ayYmeiYmKFQuY2hlY2tJbj1rLFQuY2hlY2tPdXQ9eiksTSgiZ2V0SG90ZWwiLHtob3RlbDpnZSwuLi53bygpLC4uLlQuY2hlY2tJbiYmWT4xP3tyb29tczpZfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtjb25zdCBOZj0oKT0+e2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKSlyZXR1cm47Y29uc3QgZT10PT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KT8udmFsdWU/PyIiO0NlPXtuYW1lOmUoImduYW1lIiksZW1haWw6ZSgiZ21haWwiKSxub3RlczplKCJnbm90ZSIpLGFycml2aW5nQXQ6ZSgiZ3RpbWUiKSxyZXF1ZXN0czpbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAodD0+dC5kYXRhc2V0LmFzaz8/IiIpLHJlbWVtYmVyOiEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkfX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5pZD8/IiI7WyJnbmFtZSIsImdtYWlsIiwiZ25vdGUiLCJndGltZSIsImdyZW1lbWJlciJdLmluY2x1ZGVzKHQpJiZOZigpfSk7Y29uc3QgTHU9KCk9Pntmb3IoO2hlLmF0KC0xKT8ucGF5bG9hZD8udmlldz09PSJtZW1iZXIiJiYhWDspaGU9aGUuc2xpY2UoMCwtMSk7Y29uc3QgZT1oZS5hdCgtMSk7aWYoIWV8fFV0KXt3ZigpO3JldHVybn1oZT1oZS5zbGljZSgwLC0xKSxPbys9MSxXYygpLE1mKCk7Y29uc3QgdD1lLnZlcnNpb249PT1Bbz92b2lkIDA6a18oZS5wYXlsb2FkKTt0PyhxPWUucGF5bG9hZCxNKHQua2V5LHQuYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT54ZShlLnBheWxvYWQsITApKS5maW5hbGx5KFllKSk6KHhlKGUucGF5bG9hZCwhMCksWWUoKSl9LGpmPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2hlcmUiKT8udmFsdWUudHJpbSgpPz8iIjtpZighZSl7UigiV2hlcmUgdG8/IEEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwuIik7cmV0dXJufUNzKCk7Y29uc3Qgbj0ocT8ucmVnaW9ucz8/W10pLmZsYXRNYXAobz0+KG8uY291bnRyaWVzPz9bXSkuZmxhdE1hcChyPT5bci5uYW1lLC4uLihyLmNpdGllcz8/W10pLm1hcChzPT5zLm5hbWUpXSkpLmZpbmQobz0+by50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpKTtNKCJsaXN0SG90ZWxzIix7Li4ubj97Y2l0eTpufTp7cXVlcnk6ZX0sLi4uV3QoKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgc2VhcmNoIGp1c3Qgbm93LiIpKX0sQ3M9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY28iKTtlPy52YWx1ZSYmKFQuY2hlY2tJbj1lLnZhbHVlKSx0Py52YWx1ZSYmKFQuY2hlY2tPdXQ9dC52YWx1ZSksZT8udmFsdWUmJihycz0hMCl9O2xldCBFcyxwdD0hMTtjb25zdCBNZj0oKT0+e2NsZWFyVGltZW91dChFcykscHQ9ITF9LGhrPWU9PmU/LnZpZXc9PT0iaG90ZWxzInx8ZT8udmlldz09PSJuby1ob3RlbHMiJiYhIWU/LmFzayxqbz0oZT0wKT0+e2NsZWFyVGltZW91dChFcykscHQ9ITAsRXM9c2V0VGltZW91dCgoKT0+e2lmKCFoayhxKSl7cHQ9ITE7cmV0dXJufWlmKFV0KXtqbygxNTApO3JldHVybn1wdD0hMSxNKCJsaXN0SG90ZWxzIix7Li4uUl8ocT8uYXNrKSwuLi5XdCgpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBwcmljZSB0aG9zZSBuaWdodHMuIikpfSxlKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZT0+e2lmKGUudGFyZ2V0Py5pZD09PSJ3aGVyZSImJmUua2V5PT09IkVudGVyIiYmIWUuaXNDb21wb3Npbmcpe2UucHJldmVudERlZmF1bHQoKSxqZigpO3JldHVybn1jb25zdCB0PWUudGFyZ2V0OyF0fHx0LmdldEF0dHJpYnV0ZSgicm9sZSIpIT09ImJ1dHRvbiJ8fGUua2V5IT09IkVudGVyIiYmZS5rZXkhPT0iICJ8fChlLnByZXZlbnREZWZhdWx0KCksdC5jbGljaygpKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ7dD8udHlwZT09PSJkYXRlIiYmKHJzPSEwKTtjb25zdCBvPXtkY2k6WyJkY2kiLCJkY28iXSxkY286WyJkY2kiLCJkY28iXSxsY2k6WyJsY2kiLCJsY28iXSxsY286WyJsY2kiLCJsY28iXX1bdD8uaWQ/PyIiXTtpZihvKXtjb25zdCBpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9bMF0pLHU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1sxXSk7aWYoIWl8fCF1KXJldHVybjtpZih0LmlkPT09b1swXSYmaS52YWx1ZSl7Y29uc3QgbD1WZShpLnZhbHVlLDEpO3UubWluPWwsKCF1LnZhbHVlfHx1LnZhbHVlPD1pLnZhbHVlKSYmKHUudmFsdWU9bCl9VC5jaGVja0luPWkudmFsdWV8fFQuY2hlY2tJbixULmNoZWNrT3V0PXUudmFsdWV8fFQuY2hlY2tPdXQsb1swXT09PSJsY2kiJiZqbygzMDApO3JldHVybn1pZih0Py5pZCE9PSJjaSImJnQ/LmlkIT09ImNvIilyZXR1cm47Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSxzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpO2lmKCFyfHwhcylyZXR1cm47aWYodC5pZD09PSJjaSImJnIudmFsdWUpe2NvbnN0IGk9VmUoci52YWx1ZSwxKTtzLm1pbj1pLCghcy52YWx1ZXx8cy52YWx1ZTw9ci52YWx1ZSkmJihzLnZhbHVlPWkpfVQuY2hlY2tJbj1yLnZhbHVlfHxULmNoZWNrSW4sVC5jaGVja091dD1zLnZhbHVlfHxULmNoZWNrT3V0O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO2EmJihhLnRleHRDb250ZW50PXNzKCkpLGFzKCl9KTtjb25zdCBxZj0oZSx0KT0+e3RyeXskZih0KTtjb25zdCBuPWU/SlNPTi5zdHJpbmdpZnkoZSk6IiI7aWYobiYmbj09PVNmJiZKU09OLnN0cmluZ2lmeShxKT09PXpmKXJldHVybjtlPy5zdGF5Py5jaGVja0luJiYocnM9ITApLGhlPVtdLE9vKz0xLFdjKCksTWYoKSxJZT1DZix4ZShlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbikscGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O0VlLm9udG9vbHJlc3VsdD1lPT5xZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7Y29uc3QgRGY9ZT0+e0FycmF5LmlzQXJyYXkoZT8uYXZhaWxhYmxlRGlzcGxheU1vZGVzKSYmKE9mPWUuYXZhaWxhYmxlRGlzcGxheU1vZGVzLm1hcChTdHJpbmcpKSx0eXBlb2YgZT8uZGlzcGxheU1vZGU9PSJzdHJpbmciJiZlLmRpc3BsYXlNb2RlIT09cm4mJihybj1lLmRpc3BsYXlNb2RlLHE/LnZpZXc9PT0iaG90ZWxzIiYmeGUocSkpfTtsZXQgVXU7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsKCk9PntjbGVhclRpbWVvdXQoVXUpLFV1PXNldFRpbWVvdXQoKCk9PntxPy52aWV3IT09ImhvdGVscyJ8fHNuKCl8fChKYz1WYygpLGlzKCkhPT1abyYmeGUocSkpfSwxNTApfSk7RWUub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+e2JmKGUsdmYpLERmKGUpfTtFZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9RWUuZ2V0SG9zdENvbnRleHQoKTtiZihlLHZmKSxEZihlKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJnFmKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PntwZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0jY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMnB4fS5oZWFke21pbi1oZWlnaHQ6MjhweH0uaG9tZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjB9LmhvbWU6aG92ZXJ7b3BhY2l0eTouNzJ9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5iYWNrYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMXB4IDRweCA4cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LXdpZHRoOjQyJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjdXJzb3I6cG9pbnRlcn0uYmFja2J0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uaGVhZCAuc3Vie2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWlubGluZS1zdGFydDphdXRvO3RleHQtYWxpZ246ZW5kfS5oZWFkdHJpcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo1cHggMTFweCA1cHggOXB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0uaGVhZHRyaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uaGVhZCAuc3ViKy5oZWFkdHJpcHttYXJnaW4taW5saW5lLXN0YXJ0OjB9LmNhcmQuYnVzeXtvcGFjaXR5Oi42Mn0uY2FyZC5idXN5IGJ1dHRvbiwuY2FyZC5idXN5IGlucHV0LC5jYXJkLmJ1c3kgc2VsZWN0e3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1lbWJlcmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEwcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjIwO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0ubWVtYmVyY2hpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5saW5reXtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO2ZvbnQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1saW5rKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5wLXdhc3tmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnAtbWVtYmVye2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LnN1bS5nb29kIHNwYW46bGFzdC1jaGlsZHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5kZW1ve2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQ1fS5kZW1vIGJ7Zm9udC13ZWlnaHQ6NzAwfS5jaXR5Z3JvdXArLmNpdHlncm91cHttYXJnaW4tdG9wOjE0cHh9LmNpdHluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLWJvdHRvbTo4cHh9LmNpdHluYW1lIHNtYWxse2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtvcGFjaXR5Oi43NX0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9LnQtc2hvdCBpbWcsLmhlcm8gaW1ne3otaW5kZXg6MX0udC1icmFuZHt6LWluZGV4OjI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtYmxvY2stc3RhcnQ6OHB4O2luc2V0LWlubGluZS1zdGFydDo4cHg7YmFja2dyb3VuZDojMDAwMDAwNjE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbX0udC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nOjEwcHggMTFweCAxMXB4fS50LW5hbWV7Zm9udC13ZWlnaHQ6NjQwO2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS4zO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjI7bGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDoyLjZlbX0udC13aGVyZXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udC1mb290e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6OHB4O21hcmdpbi10b3A6MnB4fS50LWZyb217Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwfS50LWZyb20gc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMXB4fS5yYXRle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJhdGUgc3Zne2NvbG9yOiNlOGEzM2R9Lmhlcm97cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MjEgLyA4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0uaGVybyAudC1tYXJre2ZvbnQtc2l6ZTo0MHB4fS5oLW5hbWV7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjgwO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07bGluZS1oZWlnaHQ6MS4yNX0uaC13aGVyZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4fS5oLXN1bXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7YmFja2dyb3VuZDp2YXIoLS1iZyl9LnN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMTEycHgsMWZyKSBtaW5tYXgoMTEycHgsMWZyKSBhdXRvIDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmVuZDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnN0YXkgbGFiZWwsLnN0YXkgLmd1ZXN0c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3RheSBpbnB1dCwuc3RheSBzZWxlY3R7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6N3B4IDZweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5uaWdodHN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZy1ib3R0b206OHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RheSAuZ297d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTRweDtjdXJzb3I6cG9pbnRlcn0uc3RheSAuZ29bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOmRlZmF1bHR9LmZsZXgtZGF0ZXN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MnB4O3Njcm9sbGJhci13aWR0aDp0aGluOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5mZHtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDttaW4td2lkdGg6NzhweDtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250OmluaGVyaXQ7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyfS5mZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uZmQtZGF5e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpub3dyYXB9LmZkLXByaWNle2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjUwO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmZkLm9ue2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2N1cnNvcjpkZWZhdWx0fS5mZC5vbiAuZmQtZGF5e2NvbG9yOnZhcigtLWFjY2VudC1mZyk7b3BhY2l0eTouODV9LmZkLmJlc3R7Ym9yZGVyLWNvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmZkLmJlc3QgLmZkLXByaWNlLC5mZC5iZXN0IC5mZC1kYXl7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZmQub3V0IC5mZC1wcmljZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXdlaWdodDo1MDB9LnRodW1ie2dyaWQtYXJlYTp0aHVtYjt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtmbGV4OjAgMCBhdXRvfS50aHVtYiBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LmxlZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5sZWd7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzo5cHggMTFweH0ubGVnLndhc3tvcGFjaXR5Oi43Mn0ubGVnLndhcyAubGVndnt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5sZWdre2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmxlZ3Z7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjQwO21hcmdpbi10b3A6MnB4fS5sZWdte2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDoycHh9LnJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgcHJpY2UgYWN0aW9uIjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4IDExcHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IHByaWNlIGFjdGlvbiJ9LnJvdyAuYm9keXtncmlkLWFyZWE6Ym9keTttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHh9LnJvdyAubmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnJvdyAubWV0YXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNDtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDozO2xpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS5yb3cgLnByaWNle2dyaWQtYXJlYTpwcmljZTt0ZXh0LWFsaWduOmVuZDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnJvdyAucC10b3RhbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY2MH0ucm93IC5wLXVuaXR7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJvdyAuYWN0aW9ue2dyaWQtYXJlYTphY3Rpb259LmJhZGdlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDttYXJnaW4tdG9wOjJweH0uYmFkZ2V7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2MjA7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYmFkZ2UuZ29vZHtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmJhZGdlLndhcm57YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKX0uYmFkZ2UuYmFke2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpfS5hZGR7ZGlzcGxheTppbmxpbmUtZ3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MzhweDtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdH0uYWRkOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5hZGRbZGlzYWJsZWRde29wYWNpdHk6LjQ7Y3Vyc29yOmRlZmF1bHR9LnN0ZXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4fS5zdGVwIGJ1dHRvbnt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5zdGVwIGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZmZmYyZX0uc3RlcCAubnttaW4td2lkdGg6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2ODA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXl7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbjoxMnB4IDAgNnB4fS5zdW1ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjVweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTttYXJnaW4tdG9wOjEycHg7cGFkZGluZy10b3A6MTBweDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnN1bXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3VtLnRvdGFse2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmZvb3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi10b3A6MTJweH0uZ297ZmxleDoxO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MTFweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MTJweCAxNnB4O2N1cnNvcjpwb2ludGVyfS5wYWdlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9LnBhZ2VyIC5ue2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS53YXJubm90ZXtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjlweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS50aWxlLm92ZXJ7b3BhY2l0eTouODJ9LmFza2VkLWxpbmV7Zm9udC1zdHlsZTppdGFsaWN9LmFza2Vke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5hc2tlZCBie2ZvbnQtd2VpZ2h0OjcyMDtjb2xvcjp2YXIoLS1mZyl9LmFza2VkLmZsYWd7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0td2Fybil9LmFza2VkLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX0uYXNrc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmFza3MtdHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwLmFza3tjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweH0uY2hpcC5hc2tbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC5mb3Vye2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNTZweCw3MnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDk2cHgsMWZyKSl9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MTtncmlkLXJvdzoxIC8gc3BhbiB2YXIoLS1oZWFkLXJvd3MsIDUpfS5jbXAtaGVhZHtkaXNwbGF5OmdyaWQ7Z3JpZC1yb3c6MSAvIHNwYW4gdmFyKC0taGVhZC1yb3dzLCA1KTtncmlkLXRlbXBsYXRlLXJvd3M6c3ViZ3JpZDtyb3ctZ2FwOjZweDthbGlnbi1jb250ZW50OnN0YXJ0O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjttaW4td2lkdGg6MDtwYWRkaW5nLWJvdHRvbToxMnB4fS5jbXAtaGVhZD4uY29sLW5hbWUsLmNtcC1oZWFkPi5jb2wtcHJpY2UsLmNtcC1oZWFkPi53aHksLmNtcC1oZWFkPi5wY3ttYXJnaW4taW5saW5lOjExcHh9LmNtcC1oZWFkPi5jb2wtbmFtZXttYXJnaW4tdG9wOjRweH0ud2h5Lm5vbmV7Ym9yZGVyOjA7cGFkZGluZzowfS5waWNrbWFyay5ub25le3Zpc2liaWxpdHk6aGlkZGVufS5jbXAgLmt7bWFyZ2luLXRvcDowfS5jbXAtaGVhZC5waWNre2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjY2VudCl9LmNtcC1oZWFkIC50LXNob3R7YXNwZWN0LXJhdGlvOjE2IC8gOTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJX0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY29sLXByaWNlIHNtYWxsLnN1YntkaXNwbGF5OmJsb2NrfS53aHl7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLWlubGluZS1zdGFydDoycHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZy1pbmxpbmUtc3RhcnQ6OHB4fS5wY3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHg7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1fS5wYyBkaXZ7ZGlzcGxheTpmbGV4O2dhcDo1cHh9LnBjIC5te2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NzAwfS5wYyAucHJvIC5te2NvbG9yOnZhcigtLWdvb2QpfS5wYyAuY29uIC5te2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jbXAgLmssLmNtcCAudntmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDU7cGFkZGluZzo2cHggOHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNtcCAua3tncmlkLWNvbHVtbjoxO2NvbG9yOnZhcigtLWZnLXNvZnQpO3Bvc2l0aW9uOnN0aWNreTtpbnNldC1pbmxpbmUtc3RhcnQ6MDtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uY21wIC52e2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY21wIC52LmFsdCwuY21wIC5rOmhhcygrLnYuYWx0KXtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6NnB4fS5waWNrbWFya3tiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7cGFkZGluZzozcHggOHB4O3RleHQtYWxpZ246Y2VudGVyfS5kYXlze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH0uZGF5cm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MjhweCAxZnI7Z2FwOjEwcHh9LmRheW51bXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4fS5kYXludW0gYntkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheW51bSBpe2ZsZXg6MTt3aWR0aDoxcHg7YmFja2dyb3VuZDp2YXIoLS1saW5lKX0uZGF5cm93Omxhc3QtY2hpbGQgLmRheW51bSBpe2Rpc3BsYXk6bm9uZX0uZGF5Ym9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTRweDttaW4td2lkdGg6MH0uZGF5bGFiZWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5kYXlub3Rle2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5tb21lbnRze2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MnB4IDAgMDtwYWRkaW5nOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4fS5tb21lbnRzIGxpe2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6ODRweCAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczpiYXNlbGluZX0ubW9tZW50cyAud2hlbntvdmVyZmxvdy13cmFwOmFueXdoZXJlO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9Lm1vbWVudHMgLndoYXR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS40fS5tb21lbnRzIC53aGF0IGJ7Zm9udC13ZWlnaHQ6NjIwfS5tb21lbnRzIC53aGF0IHNtYWxse2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4tc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjk2cHggMWZyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjtjdXJzb3I6cG9pbnRlcn0ucGxhbi1zdGF5IC5wcy1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7bWluLWhlaWdodDo4NHB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnBsYW4tc3RheSAucHMtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnBsYW4tc3RheSAucHMtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjNweDtwYWRkaW5nOjlweCAxMHB4IDlweCAwO21pbi13aWR0aDowfS5wbGFuLXN0YXkgLm5hbWV7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1zdGF5IC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLXN0YXkgLnBzLXByaWNle2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYyMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnBsYW4tbmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci10b3A6MXB4IGRhc2hlZCB2YXIoLS1saW5lKTtwYWRkaW5nLXRvcDo2cHg7Y3Vyc29yOnBvaW50ZXJ9LnBsYW4taXRlbXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHh9LnBsYW4taXRlbSAubmFtZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnBsYW4taXRlbSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uaW5zdGF0ZXtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lmluc3RhdGUueWVze2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uaW5zdGF0ZS5ub3tiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXB7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2FwIGJ7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtd2VpZ2h0OjcwMH1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsuY21we2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNjhweCw4NHB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDEwOHB4LDFmcikpfX0uc3VnZ2VzdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDttYXJnaW4tdG9wOjE0cHh9LnN1Z2dlc3QgLmNoaXB7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NXB4IDExcHg7Y29sb3I6dmFyKC0tZmcpfS5zdWdnZXN0IC5jaGlwOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5zdWdnZXN0IC5jaGlwOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LmZvcm0gbGFiZWwucmVtZW1iZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmb250LXdlaWdodDo0MDA7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi10b3A6MTBweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjB9LmZvcm0gbGFiZWwucmVtZW1iZXIgaW5wdXR7bWFyZ2luOjJweCAwIDB9LnBsYWNlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcC5wbGFjZXtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo0cHggMTBweDtjb2xvcjp2YXIoLS1mZyl9LmNoaXAucGxhY2Ugc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jaGlwLnBsYWNlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5jaGlwLnBsYWNlLnRhYntmb250LXdlaWdodDo2MDB9LmNoaXAucGxhY2UudGFiW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uY2hpcC5wbGFjZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5zdWdnZXN0IC5jaGlwLnNheSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZmluZGVye2Rpc3BsYXk6ZmxleDtnYXA6OHB4fS5maW5kZXIgaW5wdXR7ZmxleDoxO21pbi13aWR0aDowO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtwYWRkaW5nOjlweCAxMnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKX0uZmluZGVyIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnJlZ2lvbntkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LmNvdW50cnluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDo2cHh9LmNvdW50cnluYW1lIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzowO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdHtkaXNwbGF5OmdyaWQ7Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5kZXN0Omxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTowfS5kZXN0LWNvdW50cnl7anVzdGlmeS1zZWxmOnN0YXJ0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5kZXN0LWNvdW50cnkgc21hbGx7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5kZXN0LWNvdW50cnkgLm57Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0LWNvdW50cnk6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uZGVzdC1jb3VudHJ5OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LmZpbmRlciAuZ297ZmxleDpub25lO3BhZGRpbmc6OXB4IDE4cHg7Zm9udC1zaXplOjEzcHh9LnNvcnRzLWt7YWxpZ24tc2VsZjpjZW50ZXI7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tcmlnaHQ6MnB4fS5jaGlwLnNvcnRbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5zZWFyY2h7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zZWFyY2ggLnN0YXl7cGFkZGluZzowO2JhY2tncm91bmQ6bm9uZX0uc2VhcmNoIC53aGVyZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc2VhcmNoIC53aGVyZSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OXB4IDExcHh9LnNlYXJjaCAud2hlcmUgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0uc2VhcmNoIC5zdGF5IC5nb3twYWRkaW5nOjlweCAxNHB4O2ZvbnQtc2l6ZToxM3B4fS50LXRhZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo0cHg7bWFyZ2luLXRvcDo0cHh9LnQtZnJvbS50LW5vbmV7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4fS5zdGF5IC5nby5xdWlldHtwYWRkaW5nOjhweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHh9LmZpbHRlci1wYW5lbHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LmZncm91cHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDthbGlnbi1pdGVtczpjZW50ZXJ9LnQtZnJvbSAudC1zdWJ7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjFweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXSBzbWFsbHtjb2xvcjppbmhlcml0fS5jaGlwLnRvb2x7Zm9udC13ZWlnaHQ6NjAwfS5jaGlwLnRvb2xbYXJpYS1leHBhbmRlZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWQiPgogICAgICAgIDwhLS0gVGhlIGdyb3VwJ3Mgd29yZG1hcmsgYXJyaXZlcyBXSVRIIFRIRSBEQVRBIGFzIGBsb2dvVXJsYC4gTm90aGluZyBpcwogICAgICAgICAgICAgYmFrZWQgaW4gaGVyZTogYSBsb2dvIGNvbXBpbGVkIGludG8gdGhlIGNhcmQgaXMgdGhlIGZpcnN0IGJyYW5kJ3MsCiAgICAgICAgICAgICBhbmQgZXZlcnkgaG90ZWwgZ3JvdXAgYWZ0ZXIgdGhlbSB3b3VsZCB3ZWFyIGl0LiAtLT4KICAgICAgICA8IS0tIFRoZSB3YXkgYmFjaywgb24gZXZlcnkgdmlldy4gV2l0aG91dCBpdCB0aGUgdHJpcCwgdGhlIGJvb2tpbmdzIGxpc3QKICAgICAgICAgICAgIGFuZCBhIGNhbmNlbGxlZCBib29raW5nIGFyZSBhbGwgcGxhY2VzIGEgZ3Vlc3QgY2FuIHJlYWNoIGFuZCBub3QKICAgICAgICAgICAgIGxlYXZlIChyb2JpbiwgMjAyNi0wOS0xOCkuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhvbWUiIGlkPSJob21lIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIiBhcmlhLWxhYmVsPSJCYWNrIHRvIHRoZSBob3RlbHMiPgogICAgICAgICAgPGltZyBjbGFzcz0iYnJhbmQiIGlkPSJicmFuZCIgYWx0PSIiIGhpZGRlbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSIgaWQ9InRpdGxlIj48L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgICAgPCEtLSBPbmUgc3RlcCBiYWNrIElOU0lERSB0aGUgY2FyZC4gVGhlIGJyYW5kIGFib3ZlIGdvZXMgaG9tZSwgd2hpY2ggaXMgYQogICAgICAgICAgICAgZGlmZmVyZW50IGFuc3dlcjsgdGhpcyBjb21lcyBiYWNrIHRvIHRoZSBvbmUgdGhleSB3ZXJlIHJlYWRpbmcgLSB0aGUKICAgICAgICAgICAgIHRocmVlIGhvdGVscyB0aGV5IHdlcmUgY29tcGFyaW5nIHdoZW4gdGhleSB0YXBwZWQgb25lIChyb2JpbiwKICAgICAgICAgICAgIDIwMjYtMDktMjEpLiBIaWRkZW4gdW5sZXNzIHRoZXJlIGlzIHNvbWV3aGVyZSB0byBnbyBiYWNrIHRvLCBhbmQKICAgICAgICAgICAgIGNsZWFyZWQgd2hlbmV2ZXIgdGhlIGNvbnZlcnNhdGlvbiBzZW5kcyBhIG5ldyBhbnN3ZXIuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJhY2tidG4iIGlkPSJiYWNrYnRuIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJiYWNrIiBoaWRkZW4+PC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9InN1YiIgaWQ9InN1YiI+PC9zcGFuPgogICAgICAgIDwhLS0gVGhlIHRpZXIsIG9yIHRoZSB3YXkgaW4uIEEgbWVtYmVyIHJhdGUgaXMgYSBmYWN0IGFib3V0IGV2ZXJ5IHByaWNlCiAgICAgICAgICAgICBvbiB0aGUgY2FyZCwgc28gaXQgYmVsb25ncyBpbiB0aGUgaGVhZGVyIHJhdGhlciB0aGFuIG9uIG9uZSB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW1iZXJjaGlwIiBpZD0ibWVtYmVyY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPjwvYnV0dG9uPgogICAgICAgIDwhLS0gVGhlIHRyaXAsIGZyb20gdGhlIHRvcC4gVGhlIHNob3BwaW5nIGNhcmQgbGVhcm5lZCBvbiAyMDI2LTA5LTE3IHRoYXQKICAgICAgICAgICAgIGEgZm9vdGVyLW9ubHkgY2FydCBtZWFucyBzY3JvbGxpbmcgcGFzdCB0d2VudHkgdGlsZXMgdG8gcmVhY2ggaXQuCiAgICAgICAgICAgICBTaG93biBvbmNlIHRoZSB0cmlwIGhhcyBzb21ldGhpbmcgaW4gaXQsIGhpZGRlbiBvbiB0aGUgdHJpcCB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkdHJpcCIgaWQ9ImhlYWR0cmlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIiBoaWRkZW4gYXJpYS1sYWJlbD0iVmlldyB0aGUgdHJpcCI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIKICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQgOC41aDE2djExYTEuNSAxLjUgMCAwIDEtMS41IDEuNWgtMTNBMS41IDEuNSAwIDAgMSA0IDE5LjV6IiAvPgogICAgICAgICAgICA8cGF0aCBkPSJNOSA4LjVWNmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyLjUiIC8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDxzcGFuIGlkPSJoZWFkdHJpcG4iPjA8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250ZW50Ij48ZGl2IGNsYXNzPSJlbXB0eSI+TG9hZGluZ+KApjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==', '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 = '4c04648ac48f9bb4e4b9b4a1f20d10077f8cdbbad4e9f8ed0997e92bb3f83c8c';
7
+ export const HOTEL_CARD_SOURCE_SHA = 'e4dc20632480be3fe276425d0824e24b6d700e90348da8d66291087adefbf05e';
8
8
  //# sourceMappingURL=card.generated.js.map