@curless/hotel-storefront 0.18.2 → 0.19.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.
- package/dist/__tests__/demo-hotels.test.js +21 -2
- package/dist/__tests__/demo-hotels.test.js.map +1 -1
- package/dist/__tests__/server.test.js +17 -3
- package/dist/__tests__/server.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +282 -5
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/backend.d.ts +12 -1
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +7 -1
- package/dist/backend.js.map +1 -1
- package/dist/card.generated.d.ts +1 -1
- package/dist/card.generated.js +2 -2
- package/dist/card.generated.js.map +1 -1
- package/dist/data.d.ts +2 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +24 -7
- package/dist/data.js.map +1 -1
- package/dist/demo-hotels.d.ts +24 -2
- package/dist/demo-hotels.d.ts.map +1 -1
- package/dist/demo-hotels.js +313 -95
- package/dist/demo-hotels.js.map +1 -1
- package/dist/legal.d.ts +1 -1
- package/dist/legal.d.ts.map +1 -1
- package/dist/legal.js +31 -10
- package/dist/legal.js.map +1 -1
- package/dist/limits.d.ts +12 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/limits.js +47 -0
- package/dist/limits.js.map +1 -0
- package/dist/members.d.ts +9 -0
- package/dist/members.d.ts.map +1 -1
- package/dist/members.js +17 -0
- package/dist/members.js.map +1 -1
- package/dist/money.d.ts +6 -1
- package/dist/money.d.ts.map +1 -1
- package/dist/money.js +6 -1
- package/dist/money.js.map +1 -1
- package/dist/present.d.ts +2 -1
- package/dist/present.d.ts.map +1 -1
- package/dist/present.js +3 -2
- package/dist/present.js.map +1 -1
- package/dist/server.d.ts +8 -8
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -4
- package/dist/server.js.map +1 -1
- package/dist/surface.d.ts +2 -2
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +2 -2
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +39 -13
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +376 -95
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +12 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/card.generated.js
CHANGED
|
@@ -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+Y29uc3QgX2Y9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLGtmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxxYz17fSx3Zj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAoZD0+e2lmKGQ9a2YoZCxvKSxkIGluIHFjKXJldHVybjtxY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1hLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCBJPWFbd107aWYoSS5ocmVmPT09ZCYmKCFtfHxJLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKHYucmVsPW0/InN0eWxlc2hlZXQiOl9mLG18fCh2LmFzPSJzY3JpcHQiKSx2LmNyb3NzT3JpZ2luPSIiLHYuaHJlZj1kLGwmJnYuc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2KSxtKXJldHVybiBuZXcgUHJvbWlzZSgodyxJKT0+e3YuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksdi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PkkobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiAkZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBTZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBDbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIHpmKGUpe31mdW5jdGlvbiBUZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIElmKGUpe31mdW5jdGlvbiBzcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBpcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+U3MobikpLmpvaW4odCl9ZnVuY3Rpb24gZ28oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIFBme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gR3QoZSl7cmV0dXJuIG5ldyBQZihlKX1mdW5jdGlvbiB3cyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBNZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gT3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgRGM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gQXUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1EYylyZXR1cm4gbz09PXZvaWQgMCYmKG89RGMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHhmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gbnQoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBFbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBDZShlKXtyZXR1cm4gRW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gUnUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBudCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBadShlLHQsbil7dCBpbiBlP250KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gUWUoZSx0LG4sbyl7Y29uc3Qgcj1DZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9SdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpadShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBDZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/UnUoZSxuLCgpPT50W25dKTpadShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBhZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gYWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gT2YoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gQWYoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIFJmKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gTnUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIGp1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgJHM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gdXQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IE11PUd0KCgpPT57aWYobGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gRGUoZSl7aWYodXQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHV0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gT28oZSl7cmV0dXJuIERlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gWmYoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgTmY9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LGJvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSkscXU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gRWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBXKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiBfKGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBqZihlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBTcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBEdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEx1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxVdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gSHUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gUWUocyxlLEFvKGUsdCkpLFcoZSxhZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBBbyhlLHQpe2NvbnN0IG49Q2UoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBCdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoQW8oZSx0KSksaT17fTtyZXR1cm4gUWUoaSxlLFJlZmxlY3Qub3duS2V5cyhDZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLFcoZSxhZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBGdShlLHQpe2lmKCFEZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1DZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gVyhlLGFlKGUuX3pvZC5kZWYse3NoYXBlOlZ1KGUsdCl9KSl9ZnVuY3Rpb24gVnUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBRZShuLGUsUmVmbGVjdC5vd25LZXlzKENlKGUpKSksQ2Yobix0KSxufWZ1bmN0aW9uIEp1KGUsdCl7aWYoIURlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBXKGUsYWUoZS5fem9kLmRlZix7c2hhcGU6VnUoZSx0KX0pKX1mdW5jdGlvbiBLdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtRZShuLGUsUmVmbGVjdC5vd25LZXlzKENlKGUpKSksUWUobix0LFJlZmxlY3Qub3duS2V5cyhDZSh0KSkpO2NvbnN0IG89YWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBXKGUsbyl9ZnVuY3Rpb24gYXMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KEFvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiBRZSh1LHQsUmVmbGVjdC5vd25LZXlzKENlKHQpKSxlJiYoKGwsZCk9PmEmJiFhLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLFcodCxhZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiBXdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoQW8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIFFlKHIsdCxSZWZsZWN0Lm93bktleXMoQ2UodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFcodCxhZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGRlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gR3UoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2ZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIHN0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIGNzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBrZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOnN0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9zdChzPy4oZSkpPz9zdCh0Py5lcnJvcj8uKGUpKT8/c3Qobi5jdXN0b21FcnJvcj8uKGUpKT8/c3Qobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGFbdV09ZVt1XSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IE1mPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIFpvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIU1mLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIFF1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gbHQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBxZihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gWXUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFh1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gRGYoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gWXUodCtuKX1mdW5jdGlvbiBMZihlKXtyZXR1cm4gWHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIFVmKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBIZihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBCZntjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIGVsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6RmYoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBPZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBqbyhlLHQsbil7cmV0dXJuIE9lKGUsdCxuLCExKX1mdW5jdGlvbiBRdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gT2UodGhpcyxuLG8odGhpcykpfSxzZXQocil7T2UodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIEZmKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpPZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe09lKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBWZihlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IFhyLGplPSExO2NvbnN0IEpmPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7amU9ITB9fTtmdW5jdGlvbiBBKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmWHIhPT1lLl96b2Qpe1hyPXZvaWQgMDtyZXR1cm59WHI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LEpmKTtjb25zdCByPWplO2plPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIGplP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksamU9amV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxqZT1qZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gdGwoZSx0LG4sbyl7Y29uc3Qgcj1WZihlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IG5sPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24genMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtubF09ITAsdH1jb25zdCBUcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6VXUsQ09OU1RBTlRfQ0FUQ0g6bmwsQ2xhc3M6QmYsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6THUsYWJvcnRlZDpkZSxhbGxvd3NFdmFsOk11LGFzc2VydDpJZixhc3NlcnRFcXVhbDokZixhc3NlcnRJczp6Zixhc3NlcnROZXZlcjpUZixhc3NlcnROb3RFcXVhbDpTZixhc3NpZ25Qcm9wOm50LGF0dGFjaFNjaGVtYTpjcyxiYXNlNjRUb1VpbnQ4QXJyYXk6WXUsYmFzZTY0dXJsVG9VaW50OEFycmF5OkRmLGNhY2hlZDpHdCxjYXB0dXJlU3RhY2tUcmFjZTokcyxjbGVhbkVudW06cWYsY2xlYW5SZWdleDpNZSxjbG9uZTpXLGNsb25lRGVmOkVmLGNvZGVQb2ludExlbmd0aDpabyxjb25zdGFudENhdGNoOnpzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6amYsZGVmaW5lTGF6eTpBdSxkZWZpbmVMYXp5SW50ZXJuYWw6QSxkZXJpdmVkOlF0LGVzYzpOdSxlc2NhcGVSZWdleDpFZSxleHBsaWNpdGx5QWJvcnRlZDpHdSxleHRlbmQ6RnUsZmluYWxpemVJc3N1ZTprZSxmbG9hdFNhZmVSZW1haW5kZXI6T3UsZ2V0RWxlbWVudEF0UGF0aDpPZixnZXRFbnVtVmFsdWVzOnNzLGdldExlbmd0aGFibGVPcmlnaW46Tm8sZ2V0UGFyc2VkVHlwZTpOZixnZXRTaXphYmxlT3JpZ2luOlJvLGhleFRvVWludDhBcnJheTpVZixoaWRlOmpvLGluc3RhbGxMYXp5UHJvcDp0bCxpc09iamVjdDp1dCxpc1BsYWluT2JqZWN0OkRlLGlzc3VlOmx0LGpvaW5WYWx1ZXM6aXMsanNvblN0cmluZ2lmeVJlcGxhY2VyOmdvLG1lbWJlcnM6ZWwsbWVyZ2U6S3UsbWVyZ2VEZWZzOmFlLG5vcm1hbGl6ZVBhcmFtczpfLG51bGxpc2g6d3MsbnVtS2V5czpaZixvYmplY3RDbG9uZTp4ZixvbWl0OkJ1LG9wdGlvbmFsS2V5czpEdSxvd246T2UscGFyc2VkVHlwZTpRdSxwYXJ0aWFsOmFzLHBpY2s6SHUscHJlZml4SXNzdWVzOnZlLHByaW1pdGl2ZVR5cGVzOnF1LHByb21pc2VBbGxPYmplY3Q6QWYscHJvcGVydHlLZXlUeXBlczpibyxyYW5kb21TdHJpbmc6UmYscmF3U2hhcGU6RW8scmVxdWlyZWQ6V3Usc2FmZUV4dGVuZDpKdSxzaGFsbG93Q2xvbmU6T28sc2x1Z2lmeTpqdSxzdHJpbmdpZnlQcmltaXRpdmU6U3MsdG9ab2Q6Q28sdWludDhBcnJheVRvQmFzZTY0Olh1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpMZix1aW50OEFycmF5VG9IZXg6SGYsdW53cmFwTWVzc2FnZTpzdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTGM7Y29uc3QgSXM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLGVzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFVjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIEtmKGUpe2NvbnN0IHQ9VWM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBVYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHkpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7ZXMudmFsdWU9bmV3IHMoeSk7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixlcyl9ZmluYWxseXtlcy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix5KSxhKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSxJPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBqPXc7Zm9yKDtqJiZqIT09STspaj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoaik7Y29uc3QgVD1qPz93O2EuaGFzKFQpfHwoYS5hZGQoVCksZWwoVCxpKSl9Y29uc3Qgdj1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiB2KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2LHcpJiYodyBpbiBifHwoYlt3XT12W3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHk9bz8uUGFyZW50P0tmKGQpOnRoaXM7dSh5LGIpO2NvbnN0IHY9eS5fem9kLmRlZmVycmVkO2lmKHYpe2Zvcihjb25zdCBJIG9mIHYpSSgpO3kuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh5KSx5fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBQcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIHFlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIE1vIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShMYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhMYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGxlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIFkoZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24obGUsZSksbGV9ZnVuY3Rpb24gV2YoKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLGdvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gR2YoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBRZj17Z2V0OldmLHNldDpHZixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdHM9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxIYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxvbD0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIix0cy52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLHRzKSx0cy52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLFFmKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtIYy5oYXMobil8fChIYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0scmw9cCgiJFpvZEVycm9yIixvbCksZ2U9cCgiJFpvZEVycm9yIixvbCx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIFlmKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gcW8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9ZZihuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gRG8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgdT1uLGw9MDtmb3IoO2w8YS5sZW5ndGg7KXtjb25zdCBkPWFbbF0sbT1sPT09YS5sZW5ndGgtMTtpZihkPT09Il9lcnJvcnMiKXttJiZ1Ll9lcnJvcnMucHVzaCh0KGkpKSxsKys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsZCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGQse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IGI9dVtkXTttJiZiLl9lcnJvcnMucHVzaCh0KGkpKSx1PWIsbCsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIHhzKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcCh1PT5vKHtpc3N1ZXM6dX0sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IHU9Wy4uLnMsLi4uYS5wYXRoXTtpZih1Lmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IGw9bixkPTA7Zm9yKDtkPHUubGVuZ3RoOyl7Y29uc3QgbT11W2RdLGI9ZD09PXUubGVuZ3RoLTE7dHlwZW9mIG09PSJzdHJpbmciPyhsLnByb3BlcnRpZXM/PyhsLnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLnByb3BlcnRpZXMsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3BlcnRpZXMsbSx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxsPWwucHJvcGVydGllc1ttXSk6KGwuaXRlbXM/PyhsLml0ZW1zPVtdKSwoaT1sLml0ZW1zKVttXT8/KGlbbV09e2Vycm9yczpbXX0pLGw9bC5pdGVtc1ttXSksYiYmbC5lcnJvcnMucHVzaCh0KGEpKSxkKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBzbChlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gQ3MoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7c2woby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gTG8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBZdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IHFlO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgdT1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAobD0+a2UobCxpLFkoKSkpKTt0aHJvdyAkcyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LHVzPVl0KGdlKSxYdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgdT1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAobD0+a2UobCxpLFkoKSkpKTt0aHJvdyAkcyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LGxzPVh0KGdlKSxlbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBxZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP2FsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0saWw9ZW4oZ2UpO2Z1bmN0aW9uIGFsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+a2UocixuLFkoKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IHRuPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/YWwoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxYZj10bihnZSksZW09U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLHRtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksVW89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1lbSlyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIG5tKGUsdCxuKX0pO2Z1bmN0aW9uIG5tKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW3RtXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IHFlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IEhvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sRXM9ZT0+e2NvbnN0IHQ9WXQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEsTG8obixpKSl9O3JldHVybiBufSxvbT1FcyhnZSksT3M9ZT0+e2NvbnN0IHQ9WXQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMsTG8obixpKSk7cmV0dXJuIG59LHJtPU9zKGdlKSxBcz1lPT57Y29uc3QgdD1YdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLExvKG4saSkpfTtyZXR1cm4gbn0sc209QXMoZ2UpLFJzPWU9Pntjb25zdCB0PVh0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMsTG8obixpKSk7cmV0dXJuIG59LGltPVJzKGdlKSxacz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBlbihlKSh0LG4scil9LGFtPVpzKGdlKSxOcz1lPT4odCxuLG8pPT5lbihlKSh0LG4sbyksY209TnMoZ2UpLGpzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gdG4oZSkodCxuLHIpfSx1bT1qcyhnZSksTXM9ZT0+YXN5bmModCxuLG8pPT50bihlKSh0LG4sbyksbG09TXMoZ2UpLGNsPS9eW2NDXVswLTlhLXpdezYsfSQvLHVsPS9eWzAtOWEtel0rJC8sbGw9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sZGw9L15bMC05YS12QS1WXXsyMH0kLyxwbD0vXltBLVphLXowLTldezI3fSQvLGhsPS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBmbChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3QgbWw9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sZG09L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxnbD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8sZHQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLHBtPWR0KDQpLGhtPWR0KDYpLGZtPWR0KDcpLGJsPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLG1tPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGdtPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLHZsPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LGJtPXZsLHZtPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLHltPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24geWwoKXtyZXR1cm4gbmV3IFJlZ0V4cCh5bSwidSIpfWNvbnN0IF9sPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxrbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLHdsPWU9Pntjb25zdCB0PUVlKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LCRsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxTbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyxfbT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyxrbT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8semw9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLFRsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxxcz0vXmh0dHBzPyQvLElsPS9eXCtbMS05XVxkezYsMTR9JC8sRHM9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLFBsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLExzPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLHhsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiB3bShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgQ2w9d20oeGwpO2Z1bmN0aW9uIGRzKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24gRWwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2RzKGUpfSRgKX1mdW5jdGlvbiBPbChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7ZHMoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHtkcyh7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHt4bH1UKD86JHtvfSkkYCl9Y29uc3QgQWw9L15bXHNcU117MCx9JC8sUmw9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0sWmw9L14tP1xkK24/JC8sTmw9L14tP1xkKyQvLEJvPS9eLT9cZCsoPzpcLlxkKyk/JC8samw9L14oPzp0cnVlfGZhbHNlKSQvaSxNbD0vXm51bGwkL2kscWw9L151bmRlZmluZWQkL2ksRGw9L15bXkEtWl0qJC8sTGw9L15bXmEtel0qJC8sVWw9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBubihlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gb24oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0ICRtPS9eWzAtOWEtZkEtRl17MzJ9JC8sU209bm4oMjIsIj09Iiksem09b24oMjIpLFRtPS9eWzAtOWEtZkEtRl17NDB9JC8sSW09bm4oMjcsIj0iKSxQbT1vbigyNykseG09L15bMC05YS1mQS1GXXs2NH0kLyxDbT1ubig0MywiPSIpLEVtPW9uKDQzKSxPbT0vXlswLTlhLWZBLUZdezk2fSQvLEFtPW5uKDY0LCIiKSxSbT1vbig2NCksWm09L15bMC05YS1mQS1GXXsxMjh9JC8sTm09bm4oODYsIj09Iiksam09b24oODYpLEZvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6QWwsYmFzZTY0Ol9tLGJhc2U2NHVybDprbSxiaWdpbnQ6WmwsYm9vbGVhbjpqbCxicm93c2VyRW1haWw6dm0sY2lkcnY0OiRsLGNpZHJ2NjpTbCxjcmVkaXRDYXJkOkRzLGN1aWQ6Y2wsY3VpZDI6dWwsY3VycmVuY3lDb2RlOlBsLGRhdGU6Q2wsZGF0ZXRpbWU6T2wsZG9tYWluOlRsLGR1cmF0aW9uOm1sLGUxNjQ6SWwsZW1haWw6YmwsZW1vamk6eWwsZXh0ZW5kZWREdXJhdGlvbjpkbSxndWlkOmdsLGhleDpVbCxob3N0bmFtZTp6bCxodG1sNUVtYWlsOm1tLGh0dHBQcm90b2NvbDpxcyxpYmFuOkxzLGlkbkVtYWlsOmJtLGludGVnZXI6TmwsaXB2NDpfbCxpcHY2OmtsLGtzdWlkOnBsLGxvd2VyY2FzZTpEbCxtYWM6d2wsbWQ1X2Jhc2U2NDpTbSxtZDVfYmFzZTY0dXJsOnptLG1kNV9oZXg6JG0sbmFub2lkOmhsLG5hbm9pZE9mTGVuZ3RoOmZsLG51bGw6TWwsbnVtYmVyOkJvLHJmYzUzMjJFbWFpbDpnbSxzaGExX2Jhc2U2NDpJbSxzaGExX2Jhc2U2NHVybDpQbSxzaGExX2hleDpUbSxzaGEyNTZfYmFzZTY0OkNtLHNoYTI1Nl9iYXNlNjR1cmw6RW0sc2hhMjU2X2hleDp4bSxzaGEzODRfYmFzZTY0OkFtLHNoYTM4NF9iYXNlNjR1cmw6Um0sc2hhMzg0X2hleDpPbSxzaGE1MTJfYmFzZTY0Ok5tLHNoYTUxMl9iYXNlNjR1cmw6am0sc2hhNTEyX2hleDpabSxzdHJpbmc6UmwsdGltZTpFbCx1bGlkOmxsLHVuZGVmaW5lZDpxbCx1bmljb2RlRW1haWw6dmwsdXBwZXJjYXNlOkxsLHV1aWQ6ZHQsdXVpZDQ6cG0sdXVpZDY6aG0sdXVpZDc6Zm0seGlkOmRsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEo9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLFVzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIXdzKHQpJiZ0LnNpemUhPT12b2lkIDB9LEhzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIXdzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0sdm89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sQnM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj12b1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46dm9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRnM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj12b1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46dm9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxIbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e0ouaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTpPdShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEJsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntKLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109THVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRmw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0W24sb109VXVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxWbD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49VXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Um8ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSmw9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVVzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOlJvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksS2w9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVVzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjpSbyhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFdsPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUhzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtP1pvKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9Tm8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksR2w9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49SHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyP1pvKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9Tm8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxRbD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1IcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/Wm8ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9Tm8ociksdT1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLnU/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHJuPXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO0ouaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLFlsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e3JuLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFhsPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RGwpLHJuLmluaXQoZSx0KX0pLGVkPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TGwpLHJuLmluaXQoZSx0KX0pLHRkPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49RWUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG5kPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtFZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG9kPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke0VlKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIHlvKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4udmUobixlLmlzc3VlcykpfWNvbnN0IHJkPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e0ouaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PnlvKHIsbix0LnByb3BlcnR5KSk7eW8obyxuLHQucHJvcGVydHkpfX0pLHNkPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57Si5pbml0KGUsdCksam8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgdT1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO3UgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKHUudGhlbihsPT55byhsLG8saSkpKSk6eW8odSxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxpZD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGFkPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBjZHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IHVkPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0seD1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249dWQ7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsdSxsKT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgZD1kZShhKSxtO2Zvcihjb25zdCBiIG9mIHUpe2lmKGIuX3pvZC5kZWYud2hlbil7aWYoR3UoYSl8fCFiLl96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihkKWNvbnRpbnVlO2NvbnN0IHk9YS5pc3N1ZXMubGVuZ3RoLHY9Yi5fem9kLmNoZWNrKGEpO2lmKHYgaW5zdGFuY2VvZiBQcm9taXNlJiZsPy5hc3luYz09PSExKXRocm93IG5ldyBxZTtpZihtfHx2IGluc3RhbmNlb2YgUHJvbWlzZSltPShtPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgdixhLmlzc3Vlcy5sZW5ndGghPT15JiYoY3MoYS5pc3N1ZXMseSxlKSxkfHwoZD1kZShhLHkpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PXkpY29udGludWU7Y3MoYS5pc3N1ZXMseSxlKSxkfHwoZD1kZShhLHkpKX19cmV0dXJuIG0/bS50aGVuKCgpPT5hKTphfSxpPShhLHUsbCk9PntpZihkZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgZD1zKHUscixsKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYobC5hc3luYz09PSExKXRocm93IG5ldyBxZTtyZXR1cm4gZC50aGVuKG09PmUuX3pvZC5wYXJzZShtLGwpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGQsbCl9O2UuX3pvZC5ydW49KGEsdSk9PntpZih1LnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLHUpO2lmKHUuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgZD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4udSxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGQgaW5zdGFuY2VvZiBQcm9taXNlP2QudGhlbihtPT5pKG0sYSx1KSk6aShkLGEsdSl9Y29uc3QgbD1lLl96b2QucGFyc2UoYSx1KTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBxZTtyZXR1cm4gbC50aGVuKGQ9PnMoZCxyLHUpKX1yZXR1cm4gcyhsLHIsdSl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIGpvKHRoaXMsIn5zdGFuZGFyZCIsVnModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtPZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLGxkPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+a2Uobix0LFkoKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gTW0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIGxkKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBWcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIGxkKG8sbil9Y2F0Y2h7fXJldHVybiBNbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBzbj1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/QWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxIPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57cm4uaW5pdChlLHQpLHNuLmluaXQoZSx0KX0pLGRkPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1nbCksSC5pbml0KGUsdCl9KSxwZD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWR0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1kdCgpKTtILmluaXQoZSx0KX0pLGhkPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YmwpLEguaW5pdChlLHQpfSksSnM9MSxCdD0yO2Z1bmN0aW9uIEtzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZmQoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9LcyhlKXx8QnQ6bWQoZSx0KX1mdW5jdGlvbiBtZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09cXMuc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIEpzO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P0J0fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBCdH19Y29uc3QgcW09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gcHMoZSl7cmV0dXJuIGUucmVwbGFjZShxbSwiIil9ZnVuY3Rpb24gZ2QoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gYmQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgdmQ9cCgiJFpvZFVSTCIsKGUsdCk9PntILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9ZmQobyx0KTtpZihyPT09SnMpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09QnQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPXBzKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhZ2Qocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIWJkKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOnBzKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLHlkPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eWwoKSksSC5pbml0KGUsdCl9KSxfZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/aGw6ZmwodC5sZW5ndGgpKSxILmluaXQoZSx0KX0pLGtkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1jbCksSC5pbml0KGUsdCl9KSx3ZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXVsKSxILmluaXQoZSx0KX0pLCRkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1sbCksSC5pbml0KGUsdCl9KSxTZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1kbCksSC5pbml0KGUsdCl9KSx6ZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXBsKSxILmluaXQoZSx0KX0pLFRkPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49T2wodCkpLEguaW5pdChlLHQpfSksSWQ9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUNsKSxILmluaXQoZSx0KX0pLFBkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1FbCh0KSksSC5pbml0KGUsdCl9KSx4ZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW1sKSxILmluaXQoZSx0KX0pLENkPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1fbCksSC5pbml0KGUsdCl9KSxEbT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gV3MoZSl7cmV0dXJuIERtLnRlc3QoZSk/S3MoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBFZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49a2wpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57V3Mobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksT2Q9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49d2wodC5kZWxpbWl0ZXIpKSxILmluaXQoZSx0KX0pLEFkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPSRsKSxILmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpXcyhuKX1jb25zdCBaZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1TbCksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntSZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIEdzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgTmQ9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLGpkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU5kKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0dzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUXM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIE1kKGUpe2lmKCFRcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIEdzKG4pfWNvbnN0IHFkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVFzKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e01kKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRGQ9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUlsKSxILmluaXQoZSx0KX0pLExtPS9bLSBdL2c7ZnVuY3Rpb24gVW0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gTGQoZSl7cmV0dXJuIERzLnRlc3QoZSk/VW0oZS5yZXBsYWNlKExtLCIiKSk6ITF9Y29uc3QgVWQ9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPURzKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0xkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBIbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBIZChlKXtyZXR1cm4gTHMudGVzdChlKT9IbShlKTohMX1jb25zdCBCZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49THMpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57SGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gRmQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBWZD1wKCIkWm9kSldUIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RmQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxKZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFlzPXAoIiRab2ROdW1iZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49Qm8sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksS2Q9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntCbC5pbml0KGUsdCksWXMuaW5pdChlLHQpfSksWHM9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49amwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxlaT1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVpsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSksV2Q9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntGbC5pbml0KGUsdCksZWkuaW5pdChlLHQpfSksR2Q9cCgiJFpvZFN5bWJvbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksUWQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1xbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxZZD1wKCIkWm9kTnVsbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1NbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksWGQ9cCgiJFpvZEFueSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLGVwPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksdHA9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksbnA9cCgiJFpvZFZvaWQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxvcD1wKCIkWm9kRGF0ZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIEJjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4udmUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBycD1wKCIkWm9kQXJyYXkiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1sZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgdT0wO3U8cy5sZW5ndGg7dSsrKXtjb25zdCBsPXNbdV0sZD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goZC50aGVuKG09PkJjKG0sbyx1KSkpO2Vsc2UgaWYoQmMoZCxvLHUpLGEmJmQuaXNzdWVzLmxlbmd0aCE9PTAmJmRlKGQpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIF9vKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi52ZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IEJtPVtdO2Z1bmN0aW9uIHNwKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpCbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9RHUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBpcChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLHU9ci5rZXlTZXQsbD1yLmNhdGNoYWxsLl96b2QsZD1sLmRlZi50eXBlLG09bC5vcHRpbixiPWwub3B0b3V0O2xldCB5PTA7Zm9yKGNvbnN0IHYgaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09eSl7aWYoZGUobix5KSlicmVhazt5PW4uaXNzdWVzLmxlbmd0aH1pZih1Lmhhcyh2KSljb250aW51ZTtpZih2PT09Il9fcHJvdG9fXyIpe2Q9PT0ibmV2ZXIiJiZhLnB1c2godik7Y29udGludWV9aWYoZD09PSJuZXZlciIpe2EucHVzaCh2KTtjb250aW51ZX1jb25zdCB3PWwucnVuKHt2YWx1ZTp0W3ZdLGlzc3VlczpbXX0sbyk7dyBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKHcudGhlbihJPT5fbyhJLG4sdix0LG0sYikpKTpfbyh3LG4sdix0LG0sYil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBhcD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCBsPSgpPT57Y29uc3QgZD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmR9KSxsLnJhdz1kLGR9O2wucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0Omx9KX1jb25zdCByPUd0KCgpPT5zcCh0KSk7QShlLCJwcm9wVmFsdWVzIixsPT57Y29uc3QgZD1sLmRlZi5zaGFwZSxtPXt9O2Zvcihjb25zdCBiIGluIGQpe2NvbnN0IHk9ZFtiXS5fem9kO2lmKHkudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxiKXx8bnQobSxiLG5ldyBTZXQpO2Zvcihjb25zdCB2IG9mIHkudmFsdWVzKW1bYl0uYWRkKHYpO3kub3B0aW4hPT12b2lkIDAmJm1bYl0uYWRkKHZvaWQgMCl9fXJldHVybiBtfSk7Y29uc3Qgcz11dCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgdT1sZS5tZW1vaXplcjt1Py5hdHRhY2goZSksZS5fem9kLnBhcnNlPShsLGQpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgbT1sLnZhbHVlO2lmKCFzKG0pKXJldHVybiBsLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om0saW5zdDplfSksbDtsLnZhbHVlPXU/dS5hbGxvYyhlLGwse30sZCk6e307Y29uc3QgYj1bXSx5PWEuc2hhcGUsdj1kPy5hYm9ydEVhcmx5O2xldCB3PWwuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgSSBvZiBhLmFsbEtleXMpe2lmKHYmJmwuaXNzdWVzLmxlbmd0aCE9PXcpe2lmKGRlKGwsdykpYnJlYWs7dz1sLmlzc3Vlcy5sZW5ndGh9aWYoST09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGo9eVtJXSxUPWouX3pvZC5vcHRpbixWPWouX3pvZC5vcHRvdXQsdGU9ai5fem9kLnJ1bih7dmFsdWU6bVtJXSxpc3N1ZXM6W119LGQpO3RlIGluc3RhbmNlb2YgUHJvbWlzZT9iLnB1c2godGUudGhlbihLPT5fbyhLLGwsSSxtLFQsVikpKTpfbyh0ZSxsLEksbSxULFYpfXJldHVybiBpP2lwKGIsbSxsLGQsci52YWx1ZSxlLHY9PT0hMCk6Yi5sZW5ndGg/UHJvbWlzZS5hbGwoYikudGhlbigoKT0+bCk6bH19KSxjcD1wKCIkWm9kT2JqZWN0SklUIiwoZSx0KT0+e2FwLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZSxvPUd0KCgpPT5zcCh0KSkscj1sZS5tZW1vaXplcixzPXk9Pntjb25zdCB2PW8udmFsdWUsdz12LnN5bWJvbEtleXMsST1uZXcgY2QoWyJwYXlsb2FkIiwiY3R4Il0se3NoYXBlOnksaW5zdDplLG1lbW86cixzeW1zOnd9KSxqPUs9PmBzaGFwZVske0t9XS5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dFske0t9XSwgaXNzdWVzOiBbXSB9LCBjdHgpYCxUPShLLGspPT5gCiAgICAgICAgICBsZXQgJHtLfV9hYiA9IGZhbHNlOwogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAke0t9Lmlzc3Vlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjb25zdCBpc3MgPSAke0t9Lmlzc3Vlc1tpXTsKICAgICAgICAgICAgaXNzLnBhdGggPSBpc3MucGF0aCA/IFske2t9LCAuLi5pc3MucGF0aF0gOiBbJHtrfV07CiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goaXNzKTsKICAgICAgICAgICAgaWYgKGlzcy5jb250aW51ZSAhPT0gdHJ1ZSkgJHtLfV9hYiA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoJHtLfV9hYiAmJiBjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9YDtJLndyaXRlKCJjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7Iik7Y29uc3QgVj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCB0ZT0wO2Zvcihjb25zdCBLIG9mIHYuYWxsS2V5cylWW0tdPWBrZXlfJHt0ZSsrfWA7SS53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBLIG9mIHYuYWxsS2V5cyl7aWYoSz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGs9VltLXSx6PXR5cGVvZiBLPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihLKX1dYDpOdShLKSxuZT1gJHt6fSBpbiBpbnB1dGAsY2U9eVtLXSxTZT1jZT8uX3pvZD8ub3B0aW4sVmU9U2UhPT12b2lkIDAsWXI9Y2U/Ll96b2Q/Lm9wdG91dD09PSJvcHRpb25hbCI7aWYoSS53cml0ZShgY29uc3QgJHtrfSA9ICR7aih6KX07YCksVmUmJllyKXtjb25zdCB5Zj1TZT09PSJvcHRpb25hbCI/YCR7a31fcHJlc2VudGA6YCR7a30udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke2t9X3ByZXNlbnRgO0kud3JpdGUoYAogICAgICAgIGNvbnN0ICR7a31fcHJlc2VudCA9ICR7bmV9OwogICAgICAgIGlmICghJHtrfS5pc3N1ZXMubGVuZ3RoIHx8ICR7a31fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7a30uaXNzdWVzLmxlbmd0aCkgeyR7VChrLHopfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke3lmfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHt6fV0gPSAke2t9LnZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGApfWVsc2UgVmU/KEkud3JpdGUoYAogICAgICAgIGlmICgke2t9Lmlzc3Vlcy5sZW5ndGgpIHske1Qoayx6KX0KICAgICAgICB9CiAgICAgIGApLFNlPT09ImRlZmF1bHRlZCI/SS53cml0ZShgbmV3UmVzdWx0WyR7en1dID0gJHtrfS52YWx1ZTtgKTpJLndyaXRlKGAKICAgICAgICBpZiAoJHtrfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7bmV9KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt6fV0gPSAke2t9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOkkud3JpdGUoYAogICAgICAgIGNvbnN0ICR7a31fcHJlc2VudCA9ICR7bmV9OwogICAgICAgIGlmICgke2t9Lmlzc3Vlcy5sZW5ndGgpIHske1Qoayx6KX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke2t9X3ByZXNlbnQgJiYgISR7a30uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7en1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHtrfV9wcmVzZW50KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt6fV0gPSAke2t9LnZhbHVlOwogICAgICAgIH0KCiAgICAgIGApfXJldHVybiBJLndyaXRlKCJwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OyIpLEkud3JpdGUoInJldHVybiBwYXlsb2FkOyIpLEkuY29tcGlsZSgpfTtsZXQgaTtjb25zdCBhPXV0LHU9IWxlLmppdGxlc3MsZD11JiZNdS52YWx1ZSxtPXQuY2F0Y2hhbGw7bGV0IGI7ZS5fem9kLnBhcnNlPSh5LHYpPT57Yj8/KGI9by52YWx1ZSk7Y29uc3Qgdz15LnZhbHVlO3JldHVybiBhKHcpP3UmJmQmJnY/LmFzeW5jPT09ITEmJnYuaml0bGVzcyE9PSEwPyhpfHwoaT1zKHQuc2hhcGUpKSx5PWkoeSx2KSxtP2lwKFtdLHcseSx2LGIsZSx2Py5hYm9ydEVhcmx5PT09ITApOnkpOm4oeSx2KTooeS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDp3LGluc3Q6ZX0pLHkpfX0pO2Z1bmN0aW9uIEZjKGUsdCxuLG8pe2Zvcihjb25zdCBzIG9mIGUpaWYocy5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdC52YWx1ZT1zLnZhbHVlLHQ7Y29uc3Qgcj1lLmZpbHRlcihzPT4hZGUocykpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9clswXS52YWx1ZSxyWzBdKToodC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT5rZShpLG8sWSgpKSkpfSksdCl9Y29uc3QgVm89cCgiJFpvZFVuaW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIik/ImRlZmF1bHRlZCI6by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbiE9PXZvaWQgMCk/Im9wdGlvbmFsIjp2b2lkIDApLEEoZSwib3B0b3V0IixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpPyJvcHRpb25hbCI6dm9pZCAwKSxBKGUsInZhbHVlcyIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnZhbHVlcykpcmV0dXJuIG5ldyBTZXQoby5kZWYub3B0aW9ucy5mbGF0TWFwKHI9PkFycmF5LmZyb20oci5fem9kLnZhbHVlcykpKX0pLEEoZSwicGF0dGVybiIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnBhdHRlcm4pKXtjb25zdCByPW8uZGVmLm9wdGlvbnMubWFwKHM9PnMuX3pvZC5wYXR0ZXJuKTtyZXR1cm4gbmV3IFJlZ0V4cChgXigke3IubWFwKHM9Pk1lKHMuc291cmNlKSkuam9pbigifCIpfSkkYCl9fSk7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgaT1bXTtmb3IoY29uc3QgYSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9YS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaCh1KSxzPSEwO2Vsc2V7aWYodS5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdTtpLnB1c2godSl9fXJldHVybiBzP1Byb21pc2UuYWxsKGkpLnRoZW4oYT0+RmMoYSxvLGUscikpOkZjKGksbyxlLHIpfX0pO2Z1bmN0aW9uIFZjKGUsdCxuLG8pe2NvbnN0IHI9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspZVtzXS5pc3N1ZXMubGVuZ3RoPT09MCYmci5wdXNoKHMpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9ZVtyWzBdXS52YWx1ZSx0KTooci5sZW5ndGg9PT0wP3QuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+a2UoaSxvLFkoKSkpKX0pOnQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczpbXSxpbmNsdXNpdmU6ITEsbWF0Y2hlczpyfSksdCl9Y29uc3QgdXA9cCgiJFpvZFhvciIsKGUsdCk9PntWby5pbml0KGUsdCksdC5pbmNsdXNpdmU9ITE7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgaT1bXTtmb3IoY29uc3QgYSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9YS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO3UgaW5zdGFuY2VvZiBQcm9taXNlPyhpLnB1c2godSkscz0hMCk6aS5wdXNoKHUpfXJldHVybiBzP1Byb21pc2UuYWxsKGkpLnRoZW4oYT0+VmMoYSxvLGUscikpOlZjKGksbyxlLHIpfX0pO2Z1bmN0aW9uIHRpKGUsdCl7Y29uc3Qgbj1lLl96b2Q7bGV0IG89bi5iYWcub3B0aW9uc01hcDtvfHwobz1scChuLmRlZiksbi5iYWcub3B0aW9uc01hcD1vKTtjb25zdCByPW8uZ2V0KHQpO2lmKHI9PT1udWxsKXRocm93IG5ldyBFcnJvcihgQW1iaWd1b3VzIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHQpfSJgKTtyZXR1cm4gcn1mdW5jdGlvbiBscChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0IG4gb2YgZS5vcHRpb25zKXtjb25zdCBvPW4uX3pvZC5wcm9wVmFsdWVzPy5bZS5kaXNjcmltaW5hdG9yXTtpZighb3x8by5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ZS5vcHRpb25zLmluZGV4T2Yobil9ImApO2Zvcihjb25zdCByIG9mIG8paWYodC5oYXMocikpe2lmKHIhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcocil9ImApO3Quc2V0KHIsbnVsbCl9ZWxzZSB0LnNldChyLG4pfXJldHVybiB0fWNvbnN0IGRwPXAoIiRab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57dC5pbmNsdXNpdmU9ITEsVm8uaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlO0EoZSwicHJvcFZhbHVlcyIscj0+e2NvbnN0IHM9e307bGV0IGk9MDtmb3IoY29uc3QgYSBvZiByLmRlZi5vcHRpb25zKXtjb25zdCB1PWEuX3pvZC5wcm9wVmFsdWVzO2lmKCF1fHxPYmplY3Qua2V5cyh1KS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtyLmRlZi5vcHRpb25zLmluZGV4T2YoYSl9ImApO3Vbci5kZWYuZGlzY3JpbWluYXRvcl0/Lmhhcyh2b2lkIDApJiZpKys7Zm9yKGNvbnN0W2wsZF1vZiBPYmplY3QuZW50cmllcyh1KSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbCl8fG50KHMsbCxuZXcgU2V0KTtmb3IoY29uc3QgbSBvZiBkKXNbbF0uYWRkKG0pfX1yZXR1cm4hci5kZWYudW5pb25GYWxsYmFjayYmaT4xJiZzW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5kZWxldGUodm9pZCAwKSxzfSksdC5vcHRpb25zLmZvckVhY2goKHIscyk9Pntjb25zdCBpPUVvKHIuX3pvZC5kZWYpO2lmKGkmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSx0LmRpc2NyaW1pbmF0b3IpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtzfSJgKX0pO2NvbnN0IG89R3QoKCk9PmxwKHQpKTtlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIXV0KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJvYmplY3QiLGlucHV0OmksaW5zdDplfSkscjtjb25zdCBhPWk/Llt0LmRpc2NyaW1pbmF0b3JdLHU9by52YWx1ZS5nZXQoYSk7cmV0dXJuIHUmJihhIT09dm9pZCAwfHxzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCIpP3UuX3pvZC5ydW4ocixzKTp0LnVuaW9uRmFsbGJhY2t8fHMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIj9uKHIscyk6KHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGVycm9yczpbXSxub3RlOiJObyBtYXRjaGluZyBkaXNjcmltaW5hdG9yIixkaXNjcmltaW5hdG9yOnQuZGlzY3JpbWluYXRvcixvcHRpb25zOkFycmF5LmZyb20oby52YWx1ZS5rZXlzKCkpLmZpbHRlcihsPT5vLnZhbHVlLmdldChsKSE9PW51bGwpLGlucHV0OmkscGF0aDpbdC5kaXNjcmltaW5hdG9yXSxpbnN0OmV9KSxyKX19KSxwcD1wKCIkWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZSxzPXQubGVmdC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pLGk9dC5yaWdodC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZXx8aSBpbnN0YW5jZW9mIFByb21pc2U/UHJvbWlzZS5hbGwoW3MsaV0pLnRoZW4oKFt1LGxdKT0+SmMobix1LGwpKTpKYyhuLHMsaSl9fSk7ZnVuY3Rpb24ga28oZSx0KXtpZihlPT09dClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUmJitlPT0rdClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihEZShlKSYmRGUodCkpe2NvbnN0IG49T2JqZWN0LmtleXModCksbz1PYmplY3Qua2V5cyhlKS5maWx0ZXIocz0+bi5pbmRleE9mKHMpIT09LTEpLHI9ey4uLmUsLi4udH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIl9fcHJvdG9fXyIpJiZkZWxldGUgci5fX3Byb3RvX187Zm9yKGNvbnN0IHMgb2Ygbyl7aWYocz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGk9a28oZVtzXSx0W3NdKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W3MsLi4uaS5tZXJnZUVycm9yUGF0aF19O3Jbc109aS5kYXRhfXJldHVybnt2YWxpZDohMCxkYXRhOnJ9fWlmKEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkodCkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfTtjb25zdCBuPVtdO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtjb25zdCByPWVbb10scz10W29dLGk9a28ocixzKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W28sLi4uaS5tZXJnZUVycm9yUGF0aF19O24ucHVzaChpLmRhdGEpfXJldHVybnt2YWxpZDohMCxkYXRhOm59fXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX19ZnVuY3Rpb24gSmMoZSx0LG4pe2NvbnN0IG89bmV3IE1hcDtsZXQgcjtjb25zdCBzPW5ldyBNYXAsaT0obCxkKT0+e2xldCBtO2lmKGwuY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyImJiFsLnBhdGg/Lmxlbmd0aClyPz8ocj1sKSxtPWwua2V5cztlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX2tleSImJmwub3JpZ2luPT09InJlY29yZCImJmwucGF0aD8ubGVuZ3RoPT09MSl7Y29uc3QgYj1TdHJpbmcobC5wYXRoWzBdKTtzLmhhcyhiKXx8cy5zZXQoYixsKSxtPVtiXX1lbHNlIHJldHVybiExO2Zvcihjb25zdCBiIG9mIG0pby5oYXMoYil8fG8uc2V0KGIse30pLG8uZ2V0KGIpW2RdPSEwO3JldHVybiEwfTtmb3IoY29uc3QgbCBvZiB0Lmlzc3VlcylpKGwsImwiKXx8ZS5pc3N1ZXMucHVzaChsKTtmb3IoY29uc3QgbCBvZiBuLmlzc3VlcylpKGwsInIiKXx8ZS5pc3N1ZXMucHVzaChsKTtjb25zdCBhPVsuLi5vXS5maWx0ZXIoKFssbF0pPT5sLmwmJmwucikubWFwKChbbF0pPT5sKTtpZihhLmxlbmd0aCl7Y29uc3QgbD1yP2EuZmlsdGVyKGQ9PnIua2V5cy5pbmNsdWRlcyhkKSk6W107bC5sZW5ndGgmJmUuaXNzdWVzLnB1c2goey4uLnIsa2V5czpsfSk7Zm9yKGNvbnN0IGQgb2YgYSkhbC5pbmNsdWRlcyhkKSYmcy5oYXMoZCkmJmUuaXNzdWVzLnB1c2gocy5nZXQoZCkpfWNvbnN0IHU9a28odC52YWx1ZSxuLnZhbHVlKTtpZighdS52YWxpZCl7aWYoZGUoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbm1lcmdhYmxlIGludGVyc2VjdGlvbi4gRXJyb3IgcGF0aDogJHtKU09OLnN0cmluZ2lmeSh1Lm1lcmdlRXJyb3JQYXRoKX1gKX1yZXR1cm4gZS52YWx1ZT11LmRhdGEsZX1jb25zdCBuaT1wKCIkWm9kVHVwbGUiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj10Lml0ZW1zLG89bGUubWVtb2l6ZXI7bz8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighQXJyYXkuaXNBcnJheShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7aW5wdXQ6aSxpbnN0OmUsZXhwZWN0ZWQ6InR1cGxlIixjb2RlOiJpbnZhbGlkX3R5cGUifSkscjtyLnZhbHVlPW8/by5hbGxvYyhlLHIsW10scyk6W107Y29uc3QgYT1bXSx1PUtjKG4sIm9wdGluIiksbD1LYyhuLCJvcHRvdXQiKTtpZighdC5yZXN0KXtpZihpLmxlbmd0aDx1KXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dSxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KSxyO2kubGVuZ3RoPm4ubGVuZ3RoJiZyLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm4ubGVuZ3RoLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pfWNvbnN0IGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxtPXQucmVzdD9zPy5hYm9ydEVhcmx5OnZvaWQgMDtsZXQgYj0hMTtmb3IobGV0IHk9MDt5PG4ubGVuZ3RoO3krKyl7Y29uc3Qgdj1uW3ldLl96b2QucnVuKHt2YWx1ZTppW3ldLGlzc3VlczpbXX0scyk7diBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKHYudGhlbih3PT57ZFt5XT13fSkpOihkW3ldPXYsbSYmIWImJnYuaXNzdWVzLmxlbmd0aCYmKGI9ZGUodikpKX1pZih0LnJlc3QmJiFiKXtsZXQgeT1uLmxlbmd0aC0xO2NvbnN0IHY9aS5zbGljZShuLmxlbmd0aCk7bGV0IHc9ci5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCBJIG9mIHYpe2lmKG0mJnIuaXNzdWVzLmxlbmd0aCE9PXcpe2lmKGRlKHIsdykpYnJlYWs7dz1yLmlzc3Vlcy5sZW5ndGh9eSsrO2NvbnN0IGo9dC5yZXN0Ll96b2QucnVuKHt2YWx1ZTpJLGlzc3VlczpbXX0scyk7aiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKGoudGhlbihUPT5XYyhULHIseSkpKTpXYyhqLHIseSl9fXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5HYyhkLHIsbixpLGwpKTpHYyhkLHIsbixpLGwpfX0pO2Z1bmN0aW9uIEtjKGUsdCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoISh0PT09Im9wdGluIj9lW25dLl96b2Qub3B0aW4hPT12b2lkIDA6ZVtuXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpKXJldHVybiBuKzE7cmV0dXJuIDB9ZnVuY3Rpb24gV2MoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi52ZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWZ1bmN0aW9uIEdjKGUsdCxuLG8scil7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IGk9ZVtzXSxhPXM8by5sZW5ndGg7aWYoIWEmJnM+PXImJm5bc10uX3pvZC5vcHRpbj09PSJvcHRpb25hbCIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9aWYoaS5pc3N1ZXMubGVuZ3RoKXtpZighYSYmcz49cil7dC52YWx1ZS5sZW5ndGg9czticmVha310Lmlzc3Vlcy5wdXNoKC4uLnZlKHMsaS5pc3N1ZXMpKX10LnZhbHVlW3NdPWkudmFsdWV9Zm9yKGxldCBzPXQudmFsdWUubGVuZ3RoLTE7cz49by5sZW5ndGgmJihuW3NdLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIiYmdC52YWx1ZVtzXT09PXZvaWQgMCk7cy0tKXQudmFsdWUubGVuZ3RoPXM7cmV0dXJuIHR9Y29uc3QgaHA9cCgiJFpvZFJlY29yZCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWxlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIURlKHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoicmVjb3JkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdLGE9dC5rZXlUeXBlLl96b2QudmFsdWVzO2lmKGEmJiF0LnBhcnRpYWwpe28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtjb25zdCB1PW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYSlpZih0eXBlb2YgZD09InN0cmluZyJ8fHR5cGVvZiBkPT0ibnVtYmVyInx8dHlwZW9mIGQ9PSJzeW1ib2wiKXtpZih1LmFkZCh0eXBlb2YgZD09Im51bWJlciI/ZC50b1N0cmluZygpOmQpLGQ9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO2lmKG0gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKG0uaXNzdWVzLmxlbmd0aCl7by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6bS5pc3N1ZXMubWFwKHY9PmtlKHYscixZKCkpKSxpbnB1dDpkLHBhdGg6W2RdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9bS52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgeT10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tkXSxpc3N1ZXM6W119LHIpO3kgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaCh5LnRoZW4odj0+e3YuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi52ZShkLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlfSkpOih5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4udmUoZCx5Lmlzc3VlcykpLG8udmFsdWVbYl09eS52YWx1ZSl9bGV0IGw7Zm9yKGNvbnN0IGQgaW4gcylpZighdS5oYXMoZCkpaWYodC5tb2RlPT09Imxvb3NlIil7aWYoZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO28udmFsdWVbZF09c1tkXX1lbHNlIGw9bD8/W10sbC5wdXNoKGQpO2wmJmwubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOmwsY29udGludWU6ITB9KX1lbHNle28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtsZXQgdTtmb3IoY29uc3QgbCBvZiBSZWZsZWN0Lm93bktleXMocykpe2lmKGw9PT0iX19wcm90b19fInx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLGwpKWNvbnRpbnVlO2xldCBkPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKHR5cGVvZiBsPT0ic3RyaW5nIiYmQm8udGVzdChsKSYmZC5pc3N1ZXMubGVuZ3RoKXtjb25zdCB2PXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6TnVtYmVyKGwpLGlzc3VlczpbXX0scik7aWYodiBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7di5pc3N1ZXMubGVuZ3RoPT09MCYmKGQ9dil9aWYoZC5pc3N1ZXMubGVuZ3RoKXt0Lm1vZGU9PT0ibG9vc2UiP28udmFsdWVbbF09c1tsXTphPyh1PXU/P1tdLHUucHVzaChsKSk6by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6ZC5pc3N1ZXMubWFwKHY9PmtlKHYscixZKCkpKSxpbnB1dDpsLHBhdGg6W2xdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9ZC52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgeT10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tsXSxpc3N1ZXM6W119LHIpO3kgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaCh5LnRoZW4odj0+e3YuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi52ZShsLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlfSkpOih5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4udmUobCx5Lmlzc3VlcykpLG8udmFsdWVbYl09eS52YWx1ZSl9dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pLGZwPXAoIiRab2RNYXAiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1sZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJtYXAiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBNYXAscik6bmV3IE1hcDtjb25zdCBhPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdFtsLGRdb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZGUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpLGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTttIGluc3RhbmNlb2YgUHJvbWlzZXx8YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKFByb21pc2UuYWxsKFttLGJdKS50aGVuKChbeSx2XSk9PntRYyh5LHYsbyxsLHMsZSxyKX0pKTpRYyhtLGIsbyxsLHMsZSxyKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBRYyhlLHQsbixvLHIscyxpKXtlLmlzc3Vlcy5sZW5ndGgmJihiby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4udmUobyxlLmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46Im1hcCIsaW5wdXQ6cixpbnN0OnMsaXNzdWVzOmUuaXNzdWVzLm1hcChhPT5rZShhLGksWSgpKSl9KSksdC5pc3N1ZXMubGVuZ3RoJiYoYm8uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLnZlKG8sdC5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im1hcCIsY29kZToiaW52YWxpZF9lbGVtZW50IixpbnB1dDpyLGluc3Q6cyxrZXk6byxpc3N1ZXM6dC5pc3N1ZXMubWFwKGE9PmtlKGEsaSxZKCkpKX0pKSxuLnZhbHVlLnNldChlLnZhbHVlLHQudmFsdWUpfWNvbnN0IG1wPXAoIiRab2RTZXQiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1sZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIFNldCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2lucHV0OnMsaW5zdDplLGV4cGVjdGVkOiJzZXQiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvO2NvbnN0IGk9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBTZXQscik6bmV3IFNldDtjb25zdCBhPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCBsIG9mIHMpe2lmKGEmJm8uaXNzdWVzLmxlbmd0aCE9PXUpe2lmKGRlKG8sdSkpYnJlYWs7dT1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgZD10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2QgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChkLnRoZW4obT0+WWMobSxvKSkpOlljKGQsbyl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gWWMoZSx0KXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZS5pc3N1ZXMpLHQudmFsdWUuYWRkKGUudmFsdWUpfWNvbnN0IGdwPXAoIiRab2RFbnVtIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49c3ModC5lbnRyaWVzKSxvPW5ldyBTZXQobik7ZS5fem9kLnZhbHVlcz1vLEEoZSwicGF0dGVybiIscj0+e2NvbnN0IHM9c3Moci5kZWYuZW50cmllcykuZmlsdGVyKGk9PmJvLmhhcyh0eXBlb2YgaSkpO3JldHVybiBuZXcgUmVnRXhwKHMubGVuZ3RoP2BeKCR7cy5tYXAoaT0+RWUoaS50b1N0cmluZygpKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtyZXR1cm4gby5oYXMoaSl8fHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczpuLGlucHV0OmksaW5zdDplfSkscn19KSxicD1wKCIkWm9kTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC52YWx1ZXMpO2UuX3pvZC52YWx1ZXM9bixBKGUsInBhdHRlcm4iLG89Pntjb25zdCByPW8uZGVmLnZhbHVlcztyZXR1cm4gbmV3IFJlZ0V4cChyLmxlbmd0aD9gXigke3IubWFwKHM9PnR5cGVvZiBzPT0ic3RyaW5nIj9FZShzKTpzP0VlKHMudG9TdHJpbmcoKSk6U3RyaW5nKHMpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO3JldHVybiBuLmhhcyhzKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQudmFsdWVzLGlucHV0OnMsaW5zdDplfSksb319KSx2cD1wKCIkWm9kRmlsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHIgaW5zdGFuY2VvZiBGaWxlfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZmlsZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSkseXA9cCgiJFpvZFRyYW5zZm9ybSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49Im9wdGlvbmFsIixsZS5tZW1vaXplcj8uZ3VhcmQoZSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBNbyhlLmNvbnN0cnVjdG9yLm5hbWUpO2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtpZihvLmFzeW5jKXJldHVybihyIGluc3RhbmNlb2YgUHJvbWlzZT9yOlByb21pc2UucmVzb2x2ZShyKSkudGhlbihpPT4obi52YWx1ZT1pLG4pKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgcWU7cmV0dXJuIG4udmFsdWU9cixufX0pO2Z1bmN0aW9uIFhjKGUsdCl7cmV0dXJuIGUudmFsdWU9dC5pc3N1ZXMubGVuZ3RoP3ZvaWQgMDp0LnZhbHVlLGV9Y29uc3Qgb2k9cCgiJFpvZE9wdGlvbmFsIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksZS5fem9kLm9wdG91dD0ib3B0aW9uYWwiLEEoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ubyx2b2lkIDBdKTp2b2lkIDB9KSxBKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke01lKG8uc291cmNlKX0pPyRgKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihuLnZhbHVlPT09dm9pZCAwKXtpZih0LmlubmVyVHlwZS5fem9kLm9wdGluIT09ImRlZmF1bHRlZCIpcmV0dXJuIG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+WGMobixzKSk6WGMobixyKX1yZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX19KSxfcD1wKCIkWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9PntvaS5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksQShlLCJwYXR0ZXJuIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuKSxlLl96b2QucGFyc2U9KG4sbyk9PnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxrcD1wKCIkWm9kTnVsbGFibGUiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLEEoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7TWUoby5zb3VyY2UpfXxudWxsKSRgKTp2b2lkIDB9KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzP25ldyBTZXQoWy4uLm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyxudWxsXSk6dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9Pm4udmFsdWU9PT1udWxsP246dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLHdwPXAoIiRab2REZWZhdWx0IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7aWYobi52YWx1ZT09PXZvaWQgMClyZXR1cm4gbi52YWx1ZT10LmRlZmF1bHRWYWx1ZSxuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmV1KHMsdCkpOmV1KHIsdCl9fSk7ZnVuY3Rpb24gZXUoZSx0KXtyZXR1cm4gZS52YWx1ZT09PXZvaWQgMCYmKGUudmFsdWU9dC5kZWZhdWx0VmFsdWUpLGV9Y29uc3QgJHA9cCgiJFpvZFByZWZhdWx0IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCJ8fG4udmFsdWU9PT12b2lkIDAmJihuLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSx0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pKX0pLFNwPXAoIiRab2ROb25PcHRpb25hbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm9dLmZpbHRlcihyPT5yIT09dm9pZCAwKSk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+dHUocyxlKSk6dHUocixlKX19KTtmdW5jdGlvbiB0dShlLHQpe3JldHVybiFlLmlzc3Vlcy5sZW5ndGgmJmUudmFsdWU9PT12b2lkIDAmJmUuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im5vbm9wdGlvbmFsIixpbnB1dDplLnZhbHVlLGluc3Q6dH0pLGV9Y29uc3QgenA9cCgiJFpvZFN1Y2Nlc3MiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBNbygiWm9kU3VjY2VzcyIpO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMuaXNzdWVzLmxlbmd0aD09PTAsbikpOihuLnZhbHVlPXIuaXNzdWVzLmxlbmd0aD09PTAsbil9fSk7ZnVuY3Rpb24gbnUoZSx0LG4sbyl7cmV0dXJuIHQuaXNzdWVzLmxlbmd0aD8oZS52YWx1ZT1uLmNhdGNoVmFsdWUoey4uLnQsdmFsdWU6ZS52YWx1ZSxlcnJvcjp7aXNzdWVzOnQuaXNzdWVzLm1hcChyPT5rZShyLG8sWSgpKSl9LGlucHV0OmUudmFsdWV9KSxlKTooZS52YWx1ZT10LnZhbHVlLHQubWVtbyYmKGUubWVtbz0hMCksZSl9Y29uc3QgVHA9cCgiJFpvZENhdGNoIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pm51KG4scyx0LG8pKTpudShuLHIsdCxvKX19KSxJcD1wKCIkWm9kTmFOIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KCh0eXBlb2Ygbi52YWx1ZSE9Im51bWJlciJ8fCFOdW1iZXIuaXNOYU4obi52YWx1ZSkpJiZuLmlzc3Vlcy5wdXNoKHtpbnB1dDpuLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoibmFuIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbil9KSxyaT1wKCIkWm9kUGlwZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLEEoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PnJvKGksdC5pbixvKSk6cm8ocyx0LmluLG8pfWNvbnN0IHI9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+cm8ocyx0Lm91dCxvKSk6cm8ocix0Lm91dCxvKX19KTtmdW5jdGlvbiBybyhlLHQsbil7cmV0dXJuIGUuaXNzdWVzLnNvbWUobz0+by5jb2RlIT09InVucmVjb2duaXplZF9rZXlzIik/KGUuYWJvcnRlZD0hMCxlKTp0Ll96b2QucnVuKHt2YWx1ZTplLnZhbHVlLGlzc3VlczplLmlzc3Vlc30sbil9Y29uc3Qgc2k9cCgiJFpvZENvZGVjIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKChvLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcz10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5zbyhpLHQsbykpOnNvKHMsdCxvKX1lbHNle2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PnNvKGksdCxvKSk6c28ocyx0LG8pfX19KTtmdW5jdGlvbiBzbyhlLHQsbil7aWYoZS5pc3N1ZXMubGVuZ3RoKXJldHVybiBlLmFib3J0ZWQ9ITAsZTtpZigobi5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHI9dC50cmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmlvKGUscyx0Lm91dCxuKSk6aW8oZSxyLHQub3V0LG4pfWVsc2V7Y29uc3Qgcj10LnJldmVyc2VUcmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmlvKGUscyx0LmluLG4pKTppbyhlLHIsdC5pbixuKX19ZnVuY3Rpb24gaW8oZSx0LG4sbyl7cmV0dXJuIGUuaXNzdWVzLmxlbmd0aD8oZS5hYm9ydGVkPSEwLGUpOm4uX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOmUuaXNzdWVzfSxvKX1jb25zdCBQcD1wKCIkWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntyaS5pbml0KGUsdCl9KSx4cD1wKCIkWm9kUmVhZG9ubHkiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihvdSk6b3Uocil9fSk7ZnVuY3Rpb24gb3UoZSl7cmV0dXJuIGUubWVtb3x8KGUudmFsdWU9T2JqZWN0LmZyZWV6ZShlLnZhbHVlKSksZX1mdW5jdGlvbiBGbShlKXtjb25zdCB0PWUuX3pvZC5kZWY7bGV0IG49dC5wYXR0ZXJuLG89ISF0LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLHIscztmb3IoY29uc3QgYSBvZiB0LmNoZWNrcz8/W10pe2NvbnN0IHU9YS5fem9kLmRlZjt1LnBhdHRlcm4mJihuPXUucGF0dGVybiksb3x8KG89ISF1LmZvcm1hdD8uaW5jbHVkZXMoImludCIpKTtjb25zdCBsPXUubWluaW11bT8/dS5sZW5ndGgsZD11Lm1heGltdW0/P3UubGVuZ3RoO2whPT12b2lkIDAmJihyPT09dm9pZCAwfHxsPnIpJiYocj1sKSxkIT09dm9pZCAwJiYocz09PXZvaWQgMHx8ZDxzKSYmKHM9ZCl9aWYobilyZXR1cm4gbi5zb3VyY2U7aWYociE9PXZvaWQgMCYmcyE9PXZvaWQgMCYmcj5zKXJldHVybiIoPyEpIjtpZihyIT09dm9pZCAwfHxzIT09dm9pZCAwKXJldHVybiBSbCh7bWluaW11bTpyLG1heGltdW06c30pLnNvdXJjZTtjb25zdCBpPWUuX3pvZC5wYXR0ZXJuO3JldHVybihvJiZpPT09Qm8/Tmw6aSk/LnNvdXJjZX1mdW5jdGlvbiBocyhlKXtjb25zdCB0PWUuX3pvZC5kZWYsbj1lLl96b2QucGF0dGVybj8uc291cmNlLG89dC5pbm5lclR5cGU/P2UuX3pvZC5pbm5lclR5cGU7aWYobyl7Y29uc3Qgcj1vLl96b2QucGF0dGVybj8uc291cmNlLHM9aHMobyk7cmV0dXJuIG4mJnImJnMmJnMhPT1yP24ucmVwbGFjZShNZShyKSwoKT0+TWUocykpOm59aWYodC5vcHRpb25zKXtjb25zdCByPXQub3B0aW9ucy5tYXAoaHMpO2lmKHIuZXZlcnkoQm9vbGVhbikpcmV0dXJuYF4oJHtyLm1hcChzPT5NZShzKSkuam9pbigifCIpfSkkYH1yZXR1cm4gRm0oZSl9Y29uc3QgQ3A9cCgiJFpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQucGFydHMpaWYodHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCl7Y29uc3Qgcj1ocyhvKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5vLl96b2QudHJhaXRzXS5zaGlmdCgpfWApO24ucHVzaChNZShyKSl9ZWxzZSBpZihvPT09bnVsbHx8cXUuaGFzKHR5cGVvZiBvKSluLnB1c2goRWUoYCR7b31gKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke299YCk7ZS5fem9kLnBhdHRlcm49bmV3IFJlZ0V4cChgXiR7bi5qb2luKCIiKX0kYCksZS5fem9kLnBhcnNlPShvLHIpPT50eXBlb2Ygby52YWx1ZSE9InN0cmluZyI/KG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvKTooZS5fem9kLnBhdHRlcm4ubGFzdEluZGV4PTAsZS5fem9kLnBhdHRlcm4udGVzdChvLnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdD8/InRlbXBsYXRlX2xpdGVyYWwiLHBhdHRlcm46ZS5fem9kLnBhdHRlcm4uc291cmNlfSksbyl9KSxFcD1wKCIkWm9kRnVuY3Rpb24iLChlLHQpPT4oeC5pbml0KGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9kZWYiLHt2YWx1ZTp0fSksZS5fem9kLmRlZj10LGUuaW1wbGVtZW50PW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/dXMoZS5fZGVmLmlucHV0LG8pOm8scz1SZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD91cyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5pbXBsZW1lbnRBc3luYz1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmMgZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/YXdhaXQgbHMoZS5fZGVmLmlucHV0LG8pOm8scz1hd2FpdCBSZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9hd2FpdCBscyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5fem9kLnBhcnNlPShuLG8pPT50eXBlb2Ygbi52YWx1ZSE9ImZ1bmN0aW9uIj8obi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoiZnVuY3Rpb24iLGlucHV0Om4udmFsdWUsaW5zdDplfSksbik6KGUuX2RlZi5vdXRwdXQmJmUuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZT09PSJwcm9taXNlIj9uLnZhbHVlPWUuaW1wbGVtZW50QXN5bmMobi52YWx1ZSk6bi52YWx1ZT1lLmltcGxlbWVudChuLnZhbHVlKSxuKSxlLmlucHV0PSguLi5uKT0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuWzBdKT9uZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5ldyBuaSh7dHlwZToidHVwbGUiLGl0ZW1zOm5bMF0scmVzdDpuWzFdfSksb3V0cHV0OmUuX2RlZi5vdXRwdXR9KTpuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5bMF0sb3V0cHV0OmUuX2RlZi5vdXRwdXR9KX0sZS5vdXRwdXQ9bj0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDplLl9kZWYuaW5wdXQsb3V0cHV0Om59KX0sZSkpLE9wPXAoIiRab2RQcm9taXNlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUpLnRoZW4ocj0+dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSl9KSxpaT1wKCIkWm9kTGF6eSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBdShlLl96b2QsImlubmVyVHlwZSIsKCk9Pntjb25zdCBuPXQ7cmV0dXJuIG4uX2NhY2hlZElubmVyfHwobi5fY2FjaGVkSW5uZXI9dC5nZXR0ZXIoKSksbi5fY2FjaGVkSW5uZXJ9KSxBKGUsInBhdHRlcm4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4/P3ZvaWQgMCksQShlLCJvcHRvdXQiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQ/P3ZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5lLl96b2QuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxBcD1wKCIkWm9kQ3VzdG9tIiwoZSx0KT0+e0ouaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+bixlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89bi52YWx1ZSxyPXQuZm4obyk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHIudGhlbihzPT5ydShzLG4sbyxlKSk7cnUocixuLG8sZSl9fSk7ZnVuY3Rpb24gcnUoZSx0LG4sbyl7aWYoIWUpe2NvbnN0IHI9e2NvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om8scGF0aDpbLi4uby5fem9kLmRlZi5wYXRoPz9bXV0sY29udGludWU6IW8uX3pvZC5kZWYuYWJvcnR9O28uX3pvZC5kZWYucGFyYW1zJiYoci5wYXJhbXM9by5fem9kLmRlZi5wYXJhbXMpLHQuaXNzdWVzLnB1c2gobHQocikpfX1jbGFzcyBScCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwYXJzZSBhIHJlZmVyZW5jZSBjeWNsZSB0aGF0IGNsb3NlcyB0aHJvdWdoIGEgdHJhbnNmb3JtIiksdGhpcy5uYW1lPSJab2RDeWNsaWNFcnJvciJ9fWNvbnN0IGZzPSJ+bWVtbyIsc3U9W107ZnVuY3Rpb24gWnAoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCJ9ZnVuY3Rpb24gbnMoZSl7cmV0dXJuIGUubWFwKHQ9PnQucGF0aD97Li4udCxwYXRoOnQucGF0aC5zbGljZSgpfTp7Li4udH0pfWNvbnN0IE5wPW5ldyBXZWFrTWFwLGl0PTAscG89MSxNdD0yO2Z1bmN0aW9uIHF0KGUsdCxuKXtjb25zdCBvPU5wLmdldChlKTtpZihvIT09dm9pZCAwKXJldHVybiBvP010Oml0O2lmKHQuaGFzKGUpKXJldHVybiBNdDt0LmFkZChlKTtsZXQgcj1pdDtjb25zdCBzPWQ9PntpZihyIT09TXQmJmQ/Ll96b2Qpe2NvbnN0IG09cXQoZCx0LG4pO20+ciYmKHI9bSl9fSxpPShkLG0pPT57bGV0IGI9aXQ7Zm9yKGNvbnN0IHkgb2YgUmVmbGVjdC5vd25LZXlzKGQpKXtjb25zdCB2PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx5KTtpZighdi5lbnVtZXJhYmxlKWNvbnRpbnVlO2NvbnN0IHc9di5nZXQ/cG86di52YWx1ZT8uX3pvZD9xdCh2LnZhbHVlLHQsbik6aXQ7dz5iJiYoYj13KX1yZXR1cm4gYn0sYT1kPT57ZD5yJiYocj1kKX0sdT1lLl96b2QuZGVmO3N3aXRjaCh1LnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgZD1Fbyh1KTthKGQ/aShkKTpwbykscyh1LmNhdGNoYWxsKTticmVha31jYXNlImFycmF5IjpzKHUuZWxlbWVudCk7YnJlYWs7Y2FzZSJ0dXBsZSI6Zm9yKGNvbnN0IGQgb2YgdS5pdGVtcylzKGQpO3ModS5yZXN0KTticmVhaztjYXNlInJlY29yZCI6Y2FzZSJtYXAiOnModS5rZXlUeXBlKSxzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInNldCI6cyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJ1bmlvbiI6Zm9yKGNvbnN0IGQgb2YgdS5vcHRpb25zKXMoZCk7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOnModS5sZWZ0KSxzKHUucmlnaHQpO2JyZWFrO2Nhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOnModS5pbm5lclR5cGUpO2JyZWFrO2Nhc2UicGlwZSI6cyh1LmluKSxzKHUub3V0KTticmVhaztjYXNlImZ1bmN0aW9uIjpzKHUuaW5wdXQpLHModS5vdXRwdXQpO2JyZWFrO2Nhc2UibGF6eSI6e2NvbnN0IGQ9dS5fY2FjaGVkSW5uZXI/PyhuP2UuX3pvZC5pbm5lclR5cGU6dm9pZCAwKTthKGQ/cXQoZCx0LCExKTpwbyk7YnJlYWt9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6Zm9yKGNvbnN0IGQgaW4gdSl7Y29uc3QgbT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsZCk7aWYoIW18fG0uZ2V0KWNvbnRpbnVlO2NvbnN0IGI9bS52YWx1ZTtpZighKCFifHx0eXBlb2YgYiE9Im9iamVjdCIpKXtpZihiLl96b2QpcyhiKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYikpZm9yKGNvbnN0IHkgb2YgYilzKHkpfX19cmV0dXJuIHQuZGVsZXRlKGUpLFZtKGUscil9ZnVuY3Rpb24gVm0oZSx0KXtyZXR1cm4gdCE9PXBvJiZOcC5zZXQoZSx0PT09TXQpLHR9ZnVuY3Rpb24gSm0oZSl7cmV0dXJuIHF0KGUsbmV3IFNldCwhMCkhPT1pdH1mdW5jdGlvbiBLbShlLHQpe2xldCBuPWUuYnVja2V0cy5nZXQodCk7cmV0dXJuIG58fChuPW5ldyBXZWFrTWFwLGUuYnVja2V0cy5zZXQodCxuKSksbn1sZXQgYW87Y29uc3QgY289W10sV209e2FsbG9jKGUsdCxuKXtjb25zdCBvPWFvO2lmKCFvKXJldHVybiBuO2FvPXZvaWQgMDtjb25zdCByPXt2YWx1ZTpuLGlzc3VlczpudWxsfTtyZXR1cm4gby5zZXQodC52YWx1ZSxyKSxjby5wdXNoKHIpLG59LGd1YXJkKGUpe3ZhciB0Oyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IG49ZS5fem9kLnBhcnNlLG89KHIscyk9PntpZihzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCImJmpwKHMsci52YWx1ZSkpdGhyb3cgbmV3IFJwO3JldHVybiBuKHIscyl9O2UuX3pvZC5wYXJzZT1vLGUuX3pvZC5ydW49PT1uJiYoZS5fem9kLnJ1bj1vKX0pfSxhdHRhY2goZSl7dmFyIHQ7bGV0IG4sbz0hMSxyLHM7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3QgaT1lLl96b2QucGFyc2UsYT0odSxsKT0+e2lmKG49PT12b2lkIDApe2NvbnN0IGo9cXQoZSxuZXcgU2V0LCExKTtpZihqPT09aXQpcmV0dXJuIGUuX3pvZC5wYXJzZT1pLGUuX3pvZC5ydW49PT1hJiYoZS5fem9kLnJ1bj1pKSxpKHUsbCk7aj09PU10fHxvP249ITA6bz0hMH1jb25zdCBkPXUudmFsdWU7aWYoIVpwKGQpKXJldHVybiBpKHUsbCk7bGV0IG09bFtmc107bXx8KG09e2J1Y2tldHM6bmV3IFdlYWtNYXAsYmFja0VkZ2VzOnZvaWQgMH0sbFtmc109bSk7bGV0IGI7cj09PWw/Yj1zOihiPUttKG0sZSkscj1sLHM9Yik7Y29uc3QgeT1iLmdldChkKTtpZih5KXJldHVybiB1LnZhbHVlPXkudmFsdWUseS5pc3N1ZXM/eS5pc3N1ZXMubGVuZ3RoJiZ1Lmlzc3Vlcy5wdXNoKC4uLm5zKHkuaXNzdWVzKSk6KHUubWVtbz0hMCxtLmJhY2tFZGdlcz8/KG0uYmFja0VkZ2VzPW5ldyBXZWFrU2V0KSxtLmJhY2tFZGdlcy5hZGQoeS52YWx1ZSkpLHU7YW89Yjtjb25zdCB2PWNvLmxlbmd0aCx3PWkodSxsKTthbz12b2lkIDA7Y29uc3QgST1jby5sZW5ndGg+dj9jby5wb3AoKTp2b2lkIDA7cmV0dXJuIHcgaW5zdGFuY2VvZiBQcm9taXNlP3cudGhlbihqPT4oSSYmKEkuaXNzdWVzPWouaXNzdWVzLmxlbmd0aD9ucyhqLmlzc3Vlcyk6c3UpLGopKTooSSYmKEkuaXNzdWVzPXcuaXNzdWVzLmxlbmd0aD9ucyh3Lmlzc3Vlcyk6c3UpLHcpfTtlLl96b2QucGFyc2U9YSxlLl96b2QucnVuPT09aSYmKGUuX3pvZC5ydW49YSl9KX19O2Z1bmN0aW9uIEpvKCl7cmV0dXJuIFdtfWZ1bmN0aW9uIGpwKGUsdCl7Y29uc3Qgbj1lW2ZzXT8uYmFja0VkZ2VzO3JldHVybiBuIT09dm9pZCAwJiZacCh0KSYmbi5oYXModCl9Y29uc3QgR209KCk9Pntjb25zdCBlPXtzdHJpbmc6e3VuaXQ6ImNoYXJhY3RlcnMiLHZlcmI6InRvIGhhdmUifSxmaWxlOnt1bml0OiJieXRlcyIsdmVyYjoidG8gaGF2ZSJ9LGFycmF5Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LHNldDp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxtYXA6e3VuaXQ6ImVudHJpZXMiLHZlcmI6InRvIGhhdmUifX07ZnVuY3Rpb24gdChzKXtyZXR1cm4gZVtzXT8/bnVsbH1jb25zdCBuPXtyZWdleDoiaW5wdXQiLGVtYWlsOiJlbWFpbCBhZGRyZXNzIix1cmw6IlVSTCIsZW1vamk6ImVtb2ppIix1dWlkOiJVVUlEIix1dWlkdjQ6IlVVSUR2NCIsdXVpZHY2OiJVVUlEdjYiLG5hbm9pZDoibmFub2lkIixndWlkOiJHVUlEIixjdWlkOiJjdWlkIixjdWlkMjoiY3VpZDIiLHVsaWQ6IlVMSUQiLHhpZDoiWElEIixrc3VpZDoiS1NVSUQiLGRhdGV0aW1lOiJJU08gZGF0ZXRpbWUiLGRhdGU6IklTTyBkYXRlIix0aW1lOiJJU08gdGltZSIsZHVyYXRpb246IklTTyBkdXJhdGlvbiIsaXB2NDoiSVB2NCBhZGRyZXNzIixpcHY2OiJJUHY2IGFkZHJlc3MiLG1hYzoiTUFDIGFkZHJlc3MiLGNpZHJ2NDoiSVB2NCByYW5nZSIsY2lkcnY2OiJJUHY2IHJhbmdlIixiYXNlNjQ6ImJhc2U2NC1lbmNvZGVkIHN0cmluZyIsYmFzZTY0dXJsOiJiYXNlNjR1cmwtZW5jb2RlZCBzdHJpbmciLGpzb25fc3RyaW5nOiJKU09OIHN0cmluZyIsZTE2NDoiRS4xNjQgbnVtYmVyIixjdXJyZW5jeV9jb2RlOiJjdXJyZW5jeSBjb2RlIixjcmVkaXRfY2FyZDoiY3JlZGl0IGNhcmQgbnVtYmVyIixpYmFuOiJJQkFOIixqd3Q6IkpXVCIsdGVtcGxhdGVfbGl0ZXJhbDoiaW5wdXQifSxvPXtuYW46Ik5hTiJ9O2Z1bmN0aW9uIHIocyxpKXtyZXR1cm4gcz09PSJudW1iZXIiJiZ0eXBlb2YgaT09Im51bWJlciImJiFOdW1iZXIuaXNGaW5pdGUoaSk/U3RyaW5nKGkpOm9bc10/P3N9cmV0dXJuIHM9Pntzd2l0Y2gocy5jb2RlKXtjYXNlImludmFsaWRfdHlwZSI6e2NvbnN0IGk9cihzLmV4cGVjdGVkKSxhPVF1KHMuaW5wdXQpLHU9cihhLHMuaW5wdXQpO3JldHVybmBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke2l9LCByZWNlaXZlZCAke3V9YH1jYXNlImludmFsaWRfdmFsdWUiOnJldHVybiBzLnZhbHVlcy5sZW5ndGg9PT0xP2BJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke1NzKHMudmFsdWVzWzBdKX1gOmBJbnZhbGlkIG9wdGlvbjogZXhwZWN0ZWQgb25lIG9mICR7aXMocy52YWx1ZXMsInwiKX1gO2Nhc2UidG9vX2JpZyI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI8PSI6IjwiLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGhhdmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7YS51bml0Pz8iZWxlbWVudHMifWA6YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGJlICR7aX0ke3MubWF4aW11bS50b1N0cmluZygpfWB9Y2FzZSJ0b29fc21hbGwiOntjb25zdCBpPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPj0iOiI+IixhPXQocy5vcmlnaW4pO3JldHVybiBhP2BUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGhhdmUgJHtpfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9ICR7YS51bml0fWA6YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gYmUgJHtpfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9YH1jYXNlImludmFsaWRfZm9ybWF0Ijp7Y29uc3QgaT1zO3JldHVybiBpLmZvcm1hdD09PSJzdGFydHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IHN0YXJ0IHdpdGggIiR7aS5wcmVmaXh9ImA6aS5mb3JtYXQ9PT0iZW5kc193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggIiR7aS5zdWZmaXh9ImA6aS5mb3JtYXQ9PT0iaW5jbHVkZXMiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBpbmNsdWRlICIke2kuaW5jbHVkZXN9ImA6aS5mb3JtYXQ9PT0icmVnZXgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7aS5wYXR0ZXJufWA6YEludmFsaWQgJHtuW2kuZm9ybWF0XT8/cy5mb3JtYXR9YH1jYXNlIm5vdF9tdWx0aXBsZV9vZiI6cmV0dXJuYEludmFsaWQgbnVtYmVyOiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtzLmRpdmlzb3J9YDtjYXNlInVucmVjb2duaXplZF9rZXlzIjpyZXR1cm5gVW5yZWNvZ25pemVkIGtleSR7cy5rZXlzLmxlbmd0aD4xPyJzIjoiIn06ICR7aXMocy5rZXlzLCIsICIpfWA7Y2FzZSJpbnZhbGlkX2tleSI6cmV0dXJuYEludmFsaWQga2V5IGluICR7cy5vcmlnaW59YDtjYXNlImludmFsaWRfdW5pb24iOnJldHVybiBzLm9wdGlvbnMmJkFycmF5LmlzQXJyYXkocy5vcHRpb25zKSYmcy5vcHRpb25zLmxlbmd0aD4wP2BJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7cy5vcHRpb25zLm1hcChhPT5gJyR7YX0nYCkuam9pbigiIHwgIil9YDpzLmluY2x1c2l2ZT09PSExPyJJbnZhbGlkIGlucHV0OiBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVkIjoiSW52YWxpZCBpbnB1dCI7Y2FzZSJpbnZhbGlkX2VsZW1lbnQiOnJldHVybmBJbnZhbGlkIHZhbHVlIGluICR7cy5vcmlnaW59YDtkZWZhdWx0OnJldHVybiJJbnZhbGlkIGlucHV0In19fTtmdW5jdGlvbiBNcCgpe3JldHVybntsb2NhbGVFcnJvcjpHbSgpfX1jb25zdCBhaT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW46TXB9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGl1O2NvbnN0IGNpPVN5bWJvbCgiWm9kT3V0cHV0IiksdWk9U3ltYm9sKCJab2RJbnB1dCIpO2NsYXNzIHFwe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXB9YWRkKHQsLi4ubil7Y29uc3Qgbz1uWzBdO3JldHVybiB0aGlzLl9tYXAuc2V0KHQsbyksbyYmdHlwZW9mIG89PSJvYmplY3QiJiYiaWQiaW4gbyYmdGhpcy5faWRtYXAuc2V0KG8uaWQsdCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcCx0aGlzfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIG4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmImlkImluIG4mJnRoaXMuX2lkbWFwLmRlbGV0ZShuLmlkKSx0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXN9Z2V0KHQpe2NvbnN0IG49dC5fem9kLnBhcmVudDtpZihuKXtjb25zdCBvPXsuLi50aGlzLmdldChuKT8/e319O2RlbGV0ZSBvLmlkO2NvbnN0IHI9ey4uLm8sLi4udGhpcy5fbWFwLmdldCh0KX07cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD9yOnZvaWQgMH1yZXR1cm4gdGhpcy5fbWFwLmdldCh0KX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9fWZ1bmN0aW9uIEtvKCl7cmV0dXJuIG5ldyBxcH0oaXU9Z2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnk/PyhpdS5fX3pvZF9nbG9iYWxSZWdpc3RyeT1LbygpKTtjb25zdCB5ZT1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5LGxpPSgpPT57dGhyb3cgbmV3IEVycm9yKCJ6b2QgY29tcGlsZSgpIGlzIG5vdCBidW5kbGVkIGludG8gY2FyZHMgLSBzZWUgcGFja2FnZXMvaW50ZXJuYWwvY2FyZC1raXQvdml0ZS1zbGltLm1qcyIpfTtjbGFzcyBkaSBleHRlbmRzIEVycm9ye31jbGFzcyBwaSBleHRlbmRzIEVycm9ye31jbGFzcyBoaSBleHRlbmRzIEVycm9ye31jb25zdCBmaT1saSxtaT1saSxRbT1saTtmdW5jdGlvbiBXbyhlKXtyZXR1cm4gZS5jaGVja3MmJihlLmNoZWNrcz1bLi4uZS5jaGVja3NdKSxlfWZ1bmN0aW9uIERwKGUsdCl7cmV0dXJuIG5ldyBlKFdvKHt0eXBlOiJzdHJpbmciLC4uLl8odCl9KSl9ZnVuY3Rpb24gTHAoZSx0KXtyZXR1cm4gbmV3IGUoV28oe3R5cGU6InN0cmluZyIsY29lcmNlOiEwLC4uLl8odCl9KSl9ZnVuY3Rpb24gZ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbWFpbCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBiaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imd1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gdmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHlpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gX2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjYiLC4uLl8odCl9KX1mdW5jdGlvbiBraShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NyIsLi4uXyh0KX0pfWZ1bmN0aW9uIEdvKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1vamkiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gJGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJuYW5vaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gU2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZDIiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gVGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1bGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIElpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoieGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFBpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoia3N1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIENpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBVcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im1hYyIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBFaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBBaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBSaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NHVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBaaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImUxNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBCcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImliYW4iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gTmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJqd3QiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9Y29uc3Qgamk9e0FueTpudWxsLE1pbnV0ZTotMSxTZWNvbmQ6MCxNaWxsaXNlY29uZDozLE1pY3Jvc2Vjb25kOjZ9O2Z1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZXRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixvZmZzZXQ6ITEsbG9jYWw6ITEscHJlY2lzaW9uOm51bGwsLi4uXyh0KX0pfWZ1bmN0aW9uIHFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLl8odCl9KX1mdW5jdGlvbiBEaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixwcmVjaXNpb246bnVsbCwuLi5fKHQpfSl9ZnVuY3Rpb24gTGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkdXJhdGlvbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLl8odCl9KX1mdW5jdGlvbiBGcChlLHQpe3JldHVybiBuZXcgZShXbyh7dHlwZToibnVtYmVyIixjaGVja3M6W10sLi4uXyh0KX0pKX1mdW5jdGlvbiBWcChlLHQpe3JldHVybiBuZXcgZShXbyh7dHlwZToibnVtYmVyIixjb2VyY2U6ITAsY2hlY2tzOltdLC4uLl8odCl9KSl9ZnVuY3Rpb24gSnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoic2FmZWludCIsLi4uXyh0KX0pfWZ1bmN0aW9uIEtwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0MzIiLC4uLl8odCl9KX1mdW5jdGlvbiBXcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gR3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50MzIiLC4uLl8odCl9KX1mdW5jdGlvbiBRcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50MzIiLC4uLl8odCl9KX1mdW5jdGlvbiBZcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsLi4uXyh0KX0pfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIixjb2VyY2U6ITAsLi4uXyh0KX0pfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLC4uLl8odCl9KX1mdW5jdGlvbiB0aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50Iixjb2VyY2U6ITAsLi4uXyh0KX0pfWZ1bmN0aW9uIG5oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gb2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gcmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN5bWJvbCIsLi4uXyh0KX0pfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmRlZmluZWQiLC4uLl8odCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbCIsLi4uXyh0KX0pfWZ1bmN0aW9uIGFoKGUpe3JldHVybiBuZXcgZSh7dHlwZToiYW55In0pfWZ1bmN0aW9uIGNoKGUpe3JldHVybiBuZXcgZSh7dHlwZToidW5rbm93biJ9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmV2ZXIiLC4uLl8odCl9KX1mdW5jdGlvbiBsaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidm9pZCIsLi4uXyh0KX0pfWZ1bmN0aW9uIGRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIiwuLi5fKHQpfSl9ZnVuY3Rpb24gcGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gaGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5hbiIsLi4uXyh0KX0pfWZ1bmN0aW9uIEFlKGUsdCl7cmV0dXJuIG5ldyBCcyh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIGZlKGUsdCl7cmV0dXJuIG5ldyBCcyh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIFJlKGUsdCl7cmV0dXJuIG5ldyBGcyh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIG1lKGUsdCl7cmV0dXJuIG5ldyBGcyh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIFFvKGUpe3JldHVybiBSZSgwLGUpfWZ1bmN0aW9uIFlvKGUpe3JldHVybiBBZSgwLGUpfWZ1bmN0aW9uIFhvKGUpe3JldHVybiBmZSgwLGUpfWZ1bmN0aW9uIGVyKGUpe3JldHVybiBtZSgwLGUpfWZ1bmN0aW9uIFllKGUsdCl7cmV0dXJuIG5ldyBIbCh7Y2hlY2s6Im11bHRpcGxlX29mIiwuLi5fKHQpLHZhbHVlOmV9KX1mdW5jdGlvbiBvdChlLHQpe3JldHVybiBuZXcgVmwoe2NoZWNrOiJtYXhfc2l6ZSIsLi4uXyh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBaZShlLHQpe3JldHVybiBuZXcgSmwoe2NoZWNrOiJtaW5fc2l6ZSIsLi4uXyh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBidChlLHQpe3JldHVybiBuZXcgS2woe2NoZWNrOiJzaXplX2VxdWFscyIsLi4uXyh0KSxzaXplOmV9KX1mdW5jdGlvbiB2dChlLHQpe3JldHVybiBuZXcgV2woe2NoZWNrOiJtYXhfbGVuZ3RoIiwuLi5fKHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIExlKGUsdCl7cmV0dXJuIG5ldyBHbCh7Y2hlY2s6Im1pbl9sZW5ndGgiLC4uLl8odCksbWluaW11bTplfSl9ZnVuY3Rpb24geXQoZSx0KXtyZXR1cm4gbmV3IFFsKHtjaGVjazoibGVuZ3RoX2VxdWFscyIsLi4uXyh0KSxsZW5ndGg6ZX0pfWZ1bmN0aW9uIGFuKGUsdCl7cmV0dXJuIG5ldyBZbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoicmVnZXgiLC4uLl8odCkscGF0dGVybjplfSl9ZnVuY3Rpb24gY24oZSl7cmV0dXJuIG5ldyBYbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoibG93ZXJjYXNlIiwuLi5fKGUpfSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIG5ldyBlZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoidXBwZXJjYXNlIiwuLi5fKGUpfSl9ZnVuY3Rpb24gbG4oZSx0KXtyZXR1cm4gbmV3IHRkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsLi4uXyh0KSxpbmNsdWRlczplfSl9ZnVuY3Rpb24gZG4oZSx0KXtyZXR1cm4gbmV3IG5kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIsLi4uXyh0KSxwcmVmaXg6ZX0pfWZ1bmN0aW9uIHBuKGUsdCl7cmV0dXJuIG5ldyBvZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIiwuLi5fKHQpLHN1ZmZpeDplfSl9ZnVuY3Rpb24gdHIoZSx0LG4pe3JldHVybiBuZXcgcmQoe2NoZWNrOiJwcm9wZXJ0eSIscHJvcGVydHk6ZSxzY2hlbWE6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gbmV3IHNkKHtjaGVjazoicHJvcGVydGllcyIsc2hhcGU6ZSwuLi5fKHQpfSl9ZnVuY3Rpb24gZm4oZSx0KXtyZXR1cm4gbmV3IGlkKHtjaGVjazoibWltZV90eXBlIixtaW1lOmUsLi4uXyh0KX0pfWZ1bmN0aW9uIEllKGUpe3JldHVybiBuZXcgYWQoe2NoZWNrOiJvdmVyd3JpdGUiLHR4OmV9KX1mdW5jdGlvbiBtbihlKXtyZXR1cm4gSWUodD0+dC5ub3JtYWxpemUoZSkpfWZ1bmN0aW9uIGduKCl7cmV0dXJuIEllKGU9PmUudHJpbSgpKX1mdW5jdGlvbiBibigpe3JldHVybiBJZShlPT5lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHZuKCl7cmV0dXJuIEllKGU9PmUudG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24geW4oKXtyZXR1cm4gSWUoZT0+anUoZSkpfWZ1bmN0aW9uIGZoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFycmF5IixlbGVtZW50OnQsLi4uXyhuKX0pfWZ1bmN0aW9uIFltKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIFhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsaW5jbHVzaXZlOiExLC4uLl8obil9KX1mdW5jdGlvbiBlZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOm4sZGlzY3JpbWluYXRvcjp0LC4uLl8obyl9KX1mdW5jdGlvbiB0ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6dCxyaWdodDpufSl9ZnVuY3Rpb24gbmcoZSx0LG4sbyl7Y29uc3Qgcj1uIGluc3RhbmNlb2YgeCxzPXI/bzpuLGk9cj9uOm51bGw7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0dXBsZSIsaXRlbXM6dCxyZXN0OmksLi4uXyhzKX0pfWZ1bmN0aW9uIG9nKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4uXyhvKX0pfWZ1bmN0aW9uIHJnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToibWFwIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4uXyhvKX0pfWZ1bmN0aW9uIHNnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InNldCIsdmFsdWVUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGlnKGUsdCxuKXtjb25zdCBvPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHI9PltyLHJdKSk6dDtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6bywuLi5fKG4pfSl9ZnVuY3Rpb24gYWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczp0LC4uLl8obil9KX1mdW5jdGlvbiBjZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheSh0KT90Olt0XSwuLi5fKG4pfSl9ZnVuY3Rpb24gbWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImZpbGUiLC4uLl8odCl9KX1mdW5jdGlvbiB1ZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06dH0pfWZ1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBkZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gcGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOnQsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKCk6T28obil9fSl9ZnVuY3Rpb24gaGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiBmZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBtZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOnQsY2F0Y2hWYWx1ZTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOnpzKG4pfSl9ZnVuY3Rpb24gZ2coZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToicGlwZSIsaW46dCxvdXQ6bn0pfWZ1bmN0aW9uIGJnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiB2ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czp0LC4uLl8obil9KX1mdW5jdGlvbiB5ZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibGF6eSIsZ2V0dGVyOnR9KX1mdW5jdGlvbiBfZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBnaChlLHQsbil7Y29uc3Qgbz1fKG4pO3JldHVybiBvLmFib3J0Pz8oby5hYm9ydD0hMCksbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5vfSl9ZnVuY3Rpb24gYmgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLl8obil9KX1mdW5jdGlvbiB2aChlLHQpe2NvbnN0IG49eWgobz0+KG8uYWRkSXNzdWU9cj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIilvLmlzc3Vlcy5wdXNoKGx0KHIsby52YWx1ZSxuLl96b2QuZGVmKSk7ZWxzZXtjb25zdCBzPXI7cy5mYXRhbCYmKHMuY29udGludWU9ITEpLHMuY29kZT8/KHMuY29kZT0iY3VzdG9tIiksImlucHV0ImluIHN8fChzLmlucHV0PW8udmFsdWUpLHMuaW5zdD8/KHMuaW5zdD1uKSxzLmNvbnRpbnVlPz8ocy5jb250aW51ZT0hbi5fem9kLmRlZi5hYm9ydCksby5pc3N1ZXMucHVzaChsdChzKSl9fSxlKG8udmFsdWUsbykpLHQpO3JldHVybiBufWZ1bmN0aW9uIHloKGUsdCl7Y29uc3Qgbj1uZXcgSih7Y2hlY2s6ImN1c3RvbSIsLi4uXyh0KX0pO3JldHVybiBuLl96b2QuY2hlY2s9ZSxufWZ1bmN0aW9uIF9oKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJkZXNjcmliZSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz15ZS5nZXQobik/P3t9O3llLmFkZChuLHsuLi5vLGRlc2NyaXB0aW9uOmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBraChlKXtjb25zdCB0PW5ldyBKKHtjaGVjazoibWV0YSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz15ZS5nZXQobik/P3t9O3llLmFkZChuLHsuLi5vLC4uLmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiB3aChlLHQpe2NvbnN0IG49Xyh0KTtsZXQgbz1uLnRydXRoeT8/WyJ0cnVlIiwiMSIsInllcyIsIm9uIiwieSIsImVuYWJsZWQiXSxyPW4uZmFsc3k/P1siZmFsc2UiLCIwIiwibm8iLCJvZmYiLCJuIiwiZGlzYWJsZWQiXTtuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKG89by5tYXAoeT0+dHlwZW9mIHk9PSJzdHJpbmciP3kudG9Mb3dlckNhc2UoKTp5KSxyPXIubWFwKHk9PnR5cGVvZiB5PT0ic3RyaW5nIj95LnRvTG93ZXJDYXNlKCk6eSkpO2NvbnN0IHM9bmV3IFNldChvKSxpPW5ldyBTZXQociksYT1lLkNvZGVjPz9zaSx1PWUuQm9vbGVhbj8/WHMsbD1lLlN0cmluZz8/c24sZD1uZXcgbCh7dHlwZToic3RyaW5nIixlcnJvcjpuLmVycm9yfSksbT1uZXcgdSh7dHlwZToiYm9vbGVhbiIsZXJyb3I6bi5lcnJvcn0pLGI9bmV3IGEoe3R5cGU6InBpcGUiLGluOmQsb3V0Om0sdHJhbnNmb3JtOigoeSx2KT0+e2xldCB3PXk7cmV0dXJuIG4uY2FzZSE9PSJzZW5zaXRpdmUiJiYodz13LnRvTG93ZXJDYXNlKCkpLHMuaGFzKHcpPyEwOmkuaGFzKHcpPyExOih2Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIixleHBlY3RlZDoic3RyaW5nYm9vbCIsdmFsdWVzOlsuLi5zLC4uLmldLGlucHV0OnYudmFsdWUsaW5zdDpiLGNvbnRpbnVlOiExfSkse30pfSkscmV2ZXJzZVRyYW5zZm9ybTooKHksdik9Pnk9PT0hMD9vWzBdfHwidHJ1ZSI6clswXXx8ImZhbHNlIiksZXJyb3I6bi5lcnJvcn0pO3JldHVybiBiLl96b2QuYmFnLnRydXRoeT1vLGIuX3pvZC5iYWcuZmFsc3k9cixiLl96b2QuYmFnLmNhc2U9bi5jYXNlPz8iaW5zZW5zaXRpdmUiLGJ9ZnVuY3Rpb24gX3QoZSx0LG4sbz17fSl7Y29uc3Qgcj1fKG8pLHM9e2NoZWNrOiJzdHJpbmdfZm9ybWF0Iix0eXBlOiJzdHJpbmciLGZvcm1hdDp0LGZuOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246YT0+bi50ZXN0KGEpLC4uLnJ9O3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwJiYocy5wYXR0ZXJuPW4pLG5ldyBlKHMpfWNvbnN0IGtnPSgpPT4oe30pLHdnPSgpPT4oe30pLCRnPSgpPT4oe30pLFNnPSgpPT4oe30pLHpnPSgpPT4oe30pLCRoPSgpPT4oKT0+KHt9KSxtcz0oKT0+KCk9Pih7fSksVGc9KCk9Pih7fSksX2U9KCk9Pih7fSksSWc9KCk9Pih7fSksUGc9KCk9Pih7fSkseGc9KCk9Pih7fSksQ2c9KCk9Pih7fSksRWc9KCk9Pih7fSksT2c9KCk9Pih7fSksQWc9KCk9Pih7fSksUmc9KCk9Pih7fSksWmc9KCk9Pih7fSksTmc9KCk9Pih7fSksamc9KCk9Pih7fSksTWc9KCk9Pih7fSkscWc9KCk9Pih7fSksRGc9KCk9Pih7fSksTGc9KCk9Pih7fSksVWc9KCk9Pih7fSksSGc9KCk9Pih7fSksQmc9KCk9Pih7fSksRmc9KCk9Pih7fSksVmc9KCk9Pih7fSksSmc9KCk9Pih7fSksS2c9KCk9Pih7fSksV2c9KCk9Pih7fSksR2c9KCk9Pih7fSksUWc9KCk9Pih7fSksU2g9KCk9Pih7fSksWWc9KCk9Pih7fSksWGc9KCk9Pih7fSksZWI9KCk9Pih7fSksdGI9KCk9Pih7fSksbmI9KCk9Pih7fSksb2I9KCk9Pih7fSkscmI9KCk9Pih7fSksc2I9KCk9Pih7fSksaWI9KCk9Pih7fSksYWI9KCk9Pih7fSksY2I9KCk9Pih7fSksemg9KCk9Pih7fSksdWI9KCk9Pih7fSksVWk9KCk9Pih7fSk7Y2xhc3MgbGJ7fWNvbnN0IGRiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJFpvZEFueTpYZCwkWm9kQXJyYXk6cnAsJFpvZEFzeW5jRXJyb3I6cWUsJFpvZEJhc2U2NDpqZCwkWm9kQmFzZTY0VVJMOnFkLCRab2RCaWdJbnQ6ZWksJFpvZEJpZ0ludEZvcm1hdDpXZCwkWm9kQm9vbGVhbjpYcywkWm9kQ0lEUnY0OkFkLCRab2RDSURSdjY6WmQsJFpvZENVSUQ6a2QsJFpvZENVSUQyOndkLCRab2RDYXRjaDpUcCwkWm9kQ2hlY2s6SiwkWm9kQ2hlY2tCaWdJbnRGb3JtYXQ6RmwsJFpvZENoZWNrRW5kc1dpdGg6b2QsJFpvZENoZWNrR3JlYXRlclRoYW46RnMsJFpvZENoZWNrSW5jbHVkZXM6dGQsJFpvZENoZWNrTGVuZ3RoRXF1YWxzOlFsLCRab2RDaGVja0xlc3NUaGFuOkJzLCRab2RDaGVja0xvd2VyQ2FzZTpYbCwkWm9kQ2hlY2tNYXhMZW5ndGg6V2wsJFpvZENoZWNrTWF4U2l6ZTpWbCwkWm9kQ2hlY2tNaW1lVHlwZTppZCwkWm9kQ2hlY2tNaW5MZW5ndGg6R2wsJFpvZENoZWNrTWluU2l6ZTpKbCwkWm9kQ2hlY2tNdWx0aXBsZU9mOkhsLCRab2RDaGVja051bWJlckZvcm1hdDpCbCwkWm9kQ2hlY2tPdmVyd3JpdGU6YWQsJFpvZENoZWNrUHJvcGVydGllczpzZCwkWm9kQ2hlY2tQcm9wZXJ0eTpyZCwkWm9kQ2hlY2tSZWdleDpZbCwkWm9kQ2hlY2tTaXplRXF1YWxzOktsLCRab2RDaGVja1N0YXJ0c1dpdGg6bmQsJFpvZENoZWNrU3RyaW5nRm9ybWF0OnJuLCRab2RDaGVja1VwcGVyQ2FzZTplZCwkWm9kQ29kZWM6c2ksJFpvZENyZWRpdENhcmQ6VWQsJFpvZEN1c3RvbTpBcCwkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkpkLCRab2RDeWNsaWNFcnJvcjpScCwkWm9kRGF0ZTpvcCwkWm9kRGVmYXVsdDp3cCwkWm9kRGlzY3JpbWluYXRlZFVuaW9uOmRwLCRab2RFMTY0OkRkLCRab2RFbWFpbDpoZCwkWm9kRW1vamk6eWQsJFpvZEVuY29kZUVycm9yOk1vLCRab2RFbnVtOmdwLCRab2RFcnJvcjpybCwkWm9kRXhhY3RPcHRpb25hbDpfcCwkWm9kRmlsZTp2cCwkWm9kRnVuY3Rpb246RXAsJFpvZEdVSUQ6ZGQsJFpvZElCQU46QmQsJFpvZElQdjQ6Q2QsJFpvZElQdjY6RWQsJFpvZElTT0RhdGU6SWQsJFpvZElTT0RhdGVUaW1lOlRkLCRab2RJU09EdXJhdGlvbjp4ZCwkWm9kSVNPVGltZTpQZCwkWm9kSW50ZXJzZWN0aW9uOnBwLCRab2RKV1Q6VmQsJFpvZEtTVUlEOnpkLCRab2RMYXp5OmlpLCRab2RMaXRlcmFsOmJwLCRab2RNQUM6T2QsJFpvZE1hcDpmcCwkWm9kTmFOOklwLCRab2ROYW5vSUQ6X2QsJFpvZE5ldmVyOnRwLCRab2ROb25PcHRpb25hbDpTcCwkWm9kTnVsbDpZZCwkWm9kTnVsbGFibGU6a3AsJFpvZE51bWJlcjpZcywkWm9kTnVtYmVyRm9ybWF0OktkLCRab2RPYmplY3Q6YXAsJFpvZE9iamVjdEpJVDpjcCwkWm9kT3B0aW9uYWw6b2ksJFpvZFBpcGU6cmksJFpvZFByZWZhdWx0OiRwLCRab2RQcmVwcm9jZXNzOlBwLCRab2RQcm9taXNlOk9wLCRab2RSZWFkb25seTp4cCwkWm9kUmVhbEVycm9yOmdlLCRab2RSZWNvcmQ6aHAsJFpvZFJlZ2lzdHJ5OnFwLCRab2RTZXQ6bXAsJFpvZFN0cmluZzpzbiwkWm9kU3RyaW5nRm9ybWF0OkgsJFpvZFN1Y2Nlc3M6enAsJFpvZFN5bWJvbDpHZCwkWm9kVGVtcGxhdGVMaXRlcmFsOkNwLCRab2RUcmFuc2Zvcm06eXAsJFpvZFR1cGxlOm5pLCRab2RUeXBlOngsJFpvZFVMSUQ6JGQsJFpvZFVSTDp2ZCwkWm9kVVVJRDpwZCwkWm9kVW5kZWZpbmVkOlFkLCRab2RVbmlvbjpWbywkWm9kVW5rbm93bjplcCwkWm9kVm9pZDpucCwkWm9kWElEOlNkLCRab2RYb3I6dXAsJGJyYW5kOlBzLCRjb25zdHJ1Y3RvcjpwLCRpbnB1dDp1aSwkb3V0cHV0OmNpLERvYzpjZCxJTlZBTElEOmRpLEpTT05TY2hlbWE6ZGIsSlNPTlNjaGVtYUdlbmVyYXRvcjpsYixORVZFUjpJcyxUaW1lUHJlY2lzaW9uOmppLFVSTF9CQURfRk9STUFUOkpzLFVSTF9VTlBBUlNFQUJMRTpCdCxab2RDb21waWxlQXN5bmNFcnJvcjpwaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpoaSxfYW55OmFoLF9hcnJheTpmaCxfYmFzZTY0OkFpLF9iYXNlNjR1cmw6UmksX2JpZ2ludDplaCxfYm9vbGVhbjpZcCxfY2F0Y2g6bWcsX2NoZWNrOnloLF9jaWRydjQ6RWksX2NpZHJ2NjpPaSxfY29lcmNlZEJpZ2ludDp0aCxfY29lcmNlZEJvb2xlYW46WHAsX2NvZXJjZWREYXRlOnBoLF9jb2VyY2VkTnVtYmVyOlZwLF9jb2VyY2VkU3RyaW5nOkxwLF9jcmVkaXRDYXJkOkhwLF9jdWlkOlNpLF9jdWlkMjp6aSxfY3VzdG9tOmdoLF9kYXRlOmRoLF9kZWNvZGU6T3MsX2RlY29kZUFzeW5jOlJzLF9kZWZhdWx0OnBnLF9kaXNjcmltaW5hdGVkVW5pb246ZWcsX2UxNjQ6WmksX2VtYWlsOmdpLF9lbW9qaTp3aSxfZW5jb2RlOkVzLF9lbmNvZGVBc3luYzpBcyxfZW5kc1dpdGg6cG4sX2VudW06aWcsX2ZpbGU6bWgsX2Zsb2F0MzI6S3AsX2Zsb2F0NjQ6V3AsX2d0OlJlLF9ndGU6bWUsX2d1aWQ6YmksX2liYW46QnAsX2luY2x1ZGVzOmxuLF9pbnQ6SnAsX2ludDMyOkdwLF9pbnQ2NDpuaCxfaW50ZXJzZWN0aW9uOnRnLF9pcHY0OnhpLF9pcHY2OkNpLF9pc29EYXRlOnFpLF9pc29EYXRlVGltZTpNaSxfaXNvRHVyYXRpb246TGksX2lzb1RpbWU6RGksX2p3dDpOaSxfa3N1aWQ6UGksX2xhenk6eWcsX2xlbmd0aDp5dCxfbGl0ZXJhbDpjZyxfbG93ZXJjYXNlOmNuLF9sdDpBZSxfbHRlOmZlLF9tYWM6VXAsX21hcDpyZyxfbWF4OmZlLF9tYXhMZW5ndGg6dnQsX21heFNpemU6b3QsX21pbWU6Zm4sX21pbjptZSxfbWluTGVuZ3RoOkxlLF9taW5TaXplOlplLF9tdWx0aXBsZU9mOlllLF9uYW46aGgsX25hbm9pZDokaSxfbmF0aXZlRW51bTphZyxfbmVnYXRpdmU6WW8sX25ldmVyOnVoLF9ub25uZWdhdGl2ZTplcixfbm9ub3B0aW9uYWw6aGcsX25vbnBvc2l0aXZlOlhvLF9ub3JtYWxpemU6bW4sX251bGw6aWgsX251bGxhYmxlOmRnLF9udW1iZXI6RnAsX29wdGlvbmFsOmxnLF9vdmVyd3JpdGU6SWUsX3BhcnNlOll0LF9wYXJzZUFzeW5jOlh0LF9waXBlOmdnLF9wb3NpdGl2ZTpRbyxfcHJvbWlzZTpfZyxfcHJvcGVydGllczpobixfcHJvcGVydHk6dHIsX3JlYWRvbmx5OmJnLF9yZWNvcmQ6b2csX3JlZmluZTpiaCxfcmVnZXg6YW4sX3NhZmVEZWNvZGU6TnMsX3NhZmVEZWNvZGVBc3luYzpNcyxfc2FmZUVuY29kZTpacyxfc2FmZUVuY29kZUFzeW5jOmpzLF9zYWZlUGFyc2U6ZW4sX3NhZmVQYXJzZUFzeW5jOnRuLF9zZXQ6c2csX3NpemU6YnQsX3NsdWdpZnk6eW4sX3N0YXJ0c1dpdGg6ZG4sX3N0cmluZzpEcCxfc3RyaW5nRm9ybWF0Ol90LF9zdHJpbmdib29sOndoLF9zdWNjZXNzOmZnLF9zdXBlclJlZmluZTp2aCxfc3ltYm9sOnJoLF90ZW1wbGF0ZUxpdGVyYWw6dmcsX3RvTG93ZXJDYXNlOmJuLF90b1VwcGVyQ2FzZTp2bixfdHJhbnNmb3JtOnVnLF90cmltOmduLF90dXBsZTpuZyxfdWludDMyOlFwLF91aW50NjQ6b2gsX3VsaWQ6VGksX3VuZGVmaW5lZDpzaCxfdW5pb246WW0sX3Vua25vd246Y2gsX3VwcGVyY2FzZTp1bixfdXJsOkdvLF91dWlkOnZpLF91dWlkdjQ6eWksX3V1aWR2NjpfaSxfdXVpZHY3OmtpLF92b2lkOmxoLF94aWQ6SWksX3hvcjpYbSxiYXNlNjRDaGFyc2V0Ok5kLGJhc2U2NHVybENoYXJzZXQ6UXMsY2FuUGFyc2VVUkw6S3MsY2xvbmU6Vyxjb21waWxlOmZpLGNvbXBpbGVGbjpRbSxjb25maWc6WSxjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Q6bXMsY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kOiRoLGRlY29kZTpybSxkZWNvZGVBc3luYzppbSxkZXNjcmliZTpfaCxlbmNvZGU6b20sZW5jb2RlQXN5bmM6c20sZXh0cmFjdERlZnM6U2csZmluYWxpemU6emcsZmxhdHRlbkVycm9yOnFvLGZvcm1hdEVycm9yOkRvLGdldERpc2NyaW1pbmF0ZWRPcHRpb246dGksZ2xvYmFsQ29uZmlnOmxlLGdsb2JhbFJlZ2lzdHJ5OnllLGhhbmRsZVVucmVwcmVzZW50YWJsZTp3Zyxpbml0aWFsaXplQ29udGV4dDprZyxpc0JhY2tFZGdlOmpwLGlzUmVjdXJzaXZlU2NoZW1hOkptLGlzVmFsaWRCYXNlNjQ6R3MsaXNWYWxpZEJhc2U2NFVSTDpNZCxpc1ZhbGlkQ0lEUnY2OlJkLGlzVmFsaWRDcmVkaXRDYXJkOkxkLGlzVmFsaWRJQkFOOkhkLGlzVmFsaWRJUHY2OldzLGlzVmFsaWRKV1Q6RmQsbG9jYWxlczphaSxtZW1vaXplcjpKbyxtZXJnZVZhbHVlczprbyxtZXRhOmtoLHBhcnNlOnVzLHBhcnNlQXN5bmM6bHMscGFyc2VVUkxPYmplY3Q6bWQscHJldHRpZnlFcnJvcjpDcyxwcm9jZXNzOlRnLHByb2Nlc3NTY2hlbWE6JGcscmVnZXhlczpGbyxyZWdpc3RyeTpLbyxzYWZlRGVjb2RlOmNtLHNhZmVEZWNvZGVBc3luYzpsbSxzYWZlRW5jb2RlOmFtLHNhZmVFbmNvZGVBc3luYzp1bSxzYWZlUGFyc2U6aWwsc2FmZVBhcnNlQXN5bmM6WGYsc3RhbmRhcmRQcm9wczpWcyxzdHJpcFRhYkFuZE5ld2xpbmU6cHMsdG9Eb3RQYXRoOnNsLHRvSlNPTlNjaGVtYTpVaSx0b1pvZDpDbyx0cmVlaWZ5RXJyb3I6eHMsdXJsSG9zdG5hbWVPazpnZCx1cmxQcm90b2NvbE9rOmJkLHV0aWw6VHMsdmFsaWRhdGU6VW8sdmFsaWRhdGVBc3luYzpIbyx2YWxpZGF0ZVVSTDpmZCx2ZXJzaW9uOnVkLHdpdGhQYXJzZXI6bWl9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksYXU9U3ltYm9sKCJ6LnZpc2l0L3Jlc29sdmluZyIpO2Z1bmN0aW9uIEhpKGUsdCl7Y29uc3Qgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OihpLGEpPT57Y29uc3QgdT10W2kuX3pvZC5kZWYudHlwZV07cmV0dXJuIHU/dShpLGEpOml9LG89bmV3IE1hcDtmdW5jdGlvbiByKGkpe2NvbnN0IGE9by5nZXQoaSk7aWYoYT09PWF1KXJldHVybiBuZXcgaWkoe3R5cGU6ImxhenkiLGdldHRlcjooKT0+by5nZXQoaSl9KTtpZihhIT09dm9pZCAwKXJldHVybiBhO28uc2V0KGksYXUpO2NvbnN0IHU9cyhpKSxsPW4odSx1IT09aSk7cmV0dXJuIG8uc2V0KGksbCksbH1mdW5jdGlvbiBzKGkpe2NvbnN0IGE9aS5fem9kLmRlZjtzd2l0Y2goYS50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9YS5zaGFwZSxkPU9iamVjdC5rZXlzKGwpO2xldCBtPSExO2NvbnN0IGI9e307Zm9yKGNvbnN0IHYgb2YgZCl7Y29uc3Qgdz1yKGxbdl0pO3chPT1sW3ZdJiYobT0hMCksYlt2XT13fWxldCB5PWEuY2F0Y2hhbGw7cmV0dXJuIGEuY2F0Y2hhbGwmJih5PXIoYS5jYXRjaGFsbCkseSE9PWEuY2F0Y2hhbGwmJihtPSEwKSksbT9XKGksey4uLmEsc2hhcGU6YixjYXRjaGFsbDp5fSk6aX1jYXNlImFycmF5Ijp7Y29uc3QgbD1yKGEuZWxlbWVudCk7cmV0dXJuIGw9PT1hLmVsZW1lbnQ/aTpXKGksey4uLmEsZWxlbWVudDpsfSl9Y2FzZSJ0dXBsZSI6e2NvbnN0IGw9YS5pdGVtcztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCB5IG9mIGwpe2NvbnN0IHY9cih5KTt2IT09eSYmKGQ9ITApLG0ucHVzaCh2KX1sZXQgYj1hLnJlc3Q7cmV0dXJuIGEucmVzdCYmKGI9cihhLnJlc3QpLGIhPT1hLnJlc3QmJihkPSEwKSksZD9XKGksey4uLmEsaXRlbXM6bSxyZXN0OmJ9KTppfWNhc2UicmVjb3JkIjpjYXNlIm1hcCI6e2NvbnN0IGw9cihhLmtleVR5cGUpLGQ9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLmtleVR5cGUmJmQ9PT1hLnZhbHVlVHlwZT9pOlcoaSx7Li4uYSxrZXlUeXBlOmwsdmFsdWVUeXBlOmR9KX1jYXNlInNldCI6e2NvbnN0IGw9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLnZhbHVlVHlwZT9pOlcoaSx7Li4uYSx2YWx1ZVR5cGU6bH0pfWNhc2UidW5pb24iOntjb25zdCBsPWEub3B0aW9ucztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCBiIG9mIGwpe2NvbnN0IHk9cihiKTt5IT09YiYmKGQ9ITApLG0ucHVzaCh5KX1yZXR1cm4gZD9XKGksey4uLmEsb3B0aW9uczptfSk6aX1jYXNlImludGVyc2VjdGlvbiI6e2NvbnN0IGw9cihhLmxlZnQpLGQ9cihhLnJpZ2h0KTtyZXR1cm4gbD09PWEubGVmdCYmZD09PWEucmlnaHQ/aTpXKGksey4uLmEsbGVmdDpsLHJpZ2h0OmR9KX1jYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjp7Y29uc3QgbD1yKGEuaW5uZXJUeXBlKTtyZXR1cm4gbD09PWEuaW5uZXJUeXBlP2k6VyhpLHsuLi5hLGlubmVyVHlwZTpsfSl9Y2FzZSJwaXBlIjp7Y29uc3QgbD1yKGEuaW4pLGQ9cihhLm91dCk7cmV0dXJuIGw9PT1hLmluJiZkPT09YS5vdXQ/aTpXKGksey4uLmEsaW46bCxvdXQ6ZH0pfWNhc2UiZnVuY3Rpb24iOntjb25zdCBsPXIoYS5pbnB1dCksZD1yKGEub3V0cHV0KTtyZXR1cm4gbD09PWEuaW5wdXQmJmQ9PT1hLm91dHB1dD9pOlcoaSx7Li4uYSxpbnB1dDpsLG91dHB1dDpkfSl9Y2FzZSJsYXp5Ijp7Y29uc3QgbD1hLmdldHRlcix7X2NhY2hlZElubmVyOmQsLi4ubX09YTtyZXR1cm4gVyhpLHsuLi5tLGdldHRlcjooKT0+cihsKCkpfSl9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOnJldHVybiBpO2RlZmF1bHQ6cmV0dXJuIGl9fXJldHVybiByKGUpfWZ1bmN0aW9uIEJpKGUpe3JldHVybiEhZS5fem9kfWZ1bmN0aW9uIEloKGUsdCl7cmV0dXJuIEJpKGUpP2lsKGUsdCk6ZS5zYWZlUGFyc2UodCl9ZnVuY3Rpb24gcGIoZSl7aWYoIWUpcmV0dXJuO2xldCB0O2lmKEJpKGUpP3Q9ZS5fem9kPy5kZWY/LnNoYXBlOnQ9ZS5zaGFwZSwhIXQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXRyeXtyZXR1cm4gdCgpfWNhdGNoe3JldHVybn1yZXR1cm4gdH19ZnVuY3Rpb24gaGIoZSl7aWYoQmkoZSkpe2NvbnN0IHM9ZS5fem9kPy5kZWY7aWYocyl7aWYocy52YWx1ZSE9PXZvaWQgMClyZXR1cm4gcy52YWx1ZTtpZihBcnJheS5pc0FycmF5KHMudmFsdWVzKSYmcy52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIHMudmFsdWVzWzBdfX1jb25zdCBuPWUuX2RlZjtpZihuKXtpZihuLnZhbHVlIT09dm9pZCAwKXJldHVybiBuLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkobi52YWx1ZXMpJiZuLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gbi52YWx1ZXNbMF19Y29uc3Qgbz1lLnZhbHVlO2lmKG8hPT12b2lkIDApcmV0dXJuIG99Y29uc3QgZmI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuZHNXaXRoOnBuLGd0OlJlLGd0ZTptZSxpbmNsdWRlczpsbixsZW5ndGg6eXQsbG93ZXJjYXNlOmNuLGx0OkFlLGx0ZTpmZSxtYXhMZW5ndGg6dnQsbWF4U2l6ZTpvdCxtaW1lOmZuLG1pbkxlbmd0aDpMZSxtaW5TaXplOlplLG11bHRpcGxlT2Y6WWUsbmVnYXRpdmU6WW8sbm9ubmVnYXRpdmU6ZXIsbm9ucG9zaXRpdmU6WG8sbm9ybWFsaXplOm1uLG92ZXJ3cml0ZTpJZSxwb3NpdGl2ZTpRbyxwcm9wZXJ0aWVzOmhuLHByb3BlcnR5OnRyLHJlZ2V4OmFuLHNpemU6YnQsc2x1Z2lmeTp5bixzdGFydHNXaXRoOmRuLHRvTG93ZXJDYXNlOmJuLHRvVXBwZXJDYXNlOnZuLHRyaW06Z24sdXBwZXJjYXNlOnVufSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGN1PW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pO2Z1bmN0aW9uIHVvKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPW4odGhpcyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSl9Y29uc3QgUGg9KGUsdCk9PntybC5pbml0KGUsdCksZS5uYW1lPSJab2RFcnJvciI7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7Y3UuaGFzKG4pfHwoY3UuYWRkKG4pLHVvKG4sImZvcm1hdCIsbz0+cj0+RG8obyxyKSksdW8obiwiZmxhdHRlbiIsbz0+cj0+cW8obyxyKSksdW8obiwiYWRkSXNzdWUiLG89PnI9PntvLmlzc3Vlcy5wdXNoKHIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxnbywyKX0pLHVvKG4sImFkZElzc3VlcyIsbz0+cj0+e28uaXNzdWVzLnB1c2goLi4uciksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLGdvLDIpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImlzRW1wdHkiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH19KSl9LHhoPXAoIlpvZEVycm9yIixQaCkscGU9cCgiWm9kRXJyb3IiLFBoLHZvaWQgMCx7UGFyZW50OkVycm9yfSksRmk9WXQocGUpLFZpPVh0KHBlKSxKaT1lbihwZSksS2k9dG4ocGUpLFdpPUVzKHBlKSxHaT1PcyhwZSksUWk9QXMocGUpLFlpPVJzKHBlKSxYaT1acyhwZSksZWE9TnMocGUpLHRhPWpzKHBlKSxuYT1NcyhwZSk7ZnVuY3Rpb24gbWIoKXtsZS5sb2NhbGVFcnJvcnx8WShNcCgpKX1mdW5jdGlvbiBydCgpe2xlLm1lbW9pemVyfHxZKHttZW1vaXplcjpKbygpfSl9Y29uc3QgRT1wKCJab2RUeXBlIiwoZSx0KT0+KG1iKCkseC5pbml0KGUsdCksZS5kZWY9dCxlLnR5cGU9dC50eXBlLGUpLHtjaGVjayguLi5lKXtjb25zdCB0PXRoaXMuZGVmO3JldHVybiB0aGlzLmNsb25lKGFlKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBXKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhIcihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhCcihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEllKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gQih0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiAkcih0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gaHQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gQihodCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiB4cih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBQKHRoaXMpfSxvcihlKXtyZXR1cm4gTyhbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gT3QodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBWdCh0aGlzLEhuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gVHIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIFByKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBPcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBWdCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBOcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHllLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHllLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4geWUuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBqbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5Wcyh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDptcygpLG91dHB1dDptcygpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtPZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIEZpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgVmkodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBKaSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIEtpKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtPZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBVbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gSG8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBXaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gR2kodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgUWkodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgWWkodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gWGkodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIGVhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIHRhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIG5hKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiAkaCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4geWUuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxfbj1wKCJfWm9kU3RyaW5nIiwoZSx0KT0+e3NuLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWcoKX0sUXQoe2Zvcm1hdDplPT5fZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+X2UoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5fZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhhbiguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGxuKC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhkbiguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHBuKC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKExlKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHZ0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHl0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soTGUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhjbihlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayh1bihlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhnbigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKG1uKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhibigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayh2bigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKHluKCkpfX0pKSxrdD1wKCJab2RTdHJpbmciLChlLHQpPT57c24uaW5pdChlLHQpLF9uLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKGdpKGtuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKEdvKFR0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKE5pKGpuLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2koJG4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKGJpKHduLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh2aSh6ZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayh5aSh6ZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhfaSh6ZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhraSh6ZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjaygkaShTbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soU2koem4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayh6aShUbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGkoSW4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soQWkoUm4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmkoWm4sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soSWkoUG4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhQaSh4bixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGkoQ24sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKENpKEVuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKEVpKE9uLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKE9pKEFuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhaaShObixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKE1pKHd0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhxaSgkdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soRGkoU3QsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhMaSh6dCxlKSl9fSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gRHAoa3QsZSl9Y29uc3QgTD1wKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksX24uaW5pdChlLHQpfSksd3Q9cCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57VGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksJHQ9cCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntJZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KSxTdD1wKCJab2RJU09UaW1lIiwoZSx0KT0+e1BkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLHp0PXAoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLGtuPXAoIlpvZEVtYWlsIiwoZSx0KT0+e2hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG9hKGUpe3JldHVybiBnaShrbixlKX1jb25zdCB3bj1wKCJab2RHVUlEIiwoZSx0KT0+e2RkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHJhKGUpe3JldHVybiBiaSh3bixlKX1jb25zdCB6ZT1wKCJab2RVVUlEIiwoZSx0KT0+e3BkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHNhKGUpe3JldHVybiB2aSh6ZSxlKX1mdW5jdGlvbiBpYShlKXtyZXR1cm4geWkoemUsZSl9ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIF9pKHplLGUpfWZ1bmN0aW9uIGNhKGUpe3JldHVybiBraSh6ZSxlKX1jb25zdCBUdD1wKCJab2RVUkwiLChlLHQpPT57dmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIEdvKFR0LGUpfWZ1bmN0aW9uIGxhKGUpe3JldHVybiBHbyhUdCx7cHJvdG9jb2w6cXMsaG9zdG5hbWU6VGwsLi4uXyhlKX0pfWNvbnN0ICRuPXAoIlpvZEVtb2ppIiwoZSx0KT0+e3lkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGRhKGUpe3JldHVybiB3aSgkbixlKX1jb25zdCBTbj1wKCJab2ROYW5vSUQiLChlLHQpPT57X2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcGEoZSl7cmV0dXJuICRpKFNuLGUpfWNvbnN0IHpuPXAoIlpvZENVSUQiLChlLHQpPT57a2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gaGEoZSl7cmV0dXJuIFNpKHpuLGUpfWNvbnN0IFRuPXAoIlpvZENVSUQyIiwoZSx0KT0+e3dkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGZhKGUpe3JldHVybiB6aShUbixlKX1jb25zdCBJbj1wKCJab2RVTElEIiwoZSx0KT0+eyRkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG1hKGUpe3JldHVybiBUaShJbixlKX1jb25zdCBQbj1wKCJab2RYSUQiLChlLHQpPT57U2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZ2EoZSl7cmV0dXJuIElpKFBuLGUpfWNvbnN0IHhuPXAoIlpvZEtTVUlEIiwoZSx0KT0+e3pkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBQaSh4bixlKX1jb25zdCBDbj1wKCJab2RJUHY0IiwoZSx0KT0+e0NkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHZhKGUpe3JldHVybiB4aShDbixlKX1jb25zdCBucj1wKCJab2RNQUMiLChlLHQpPT57T2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24geWEoZSl7cmV0dXJuIFVwKG5yLGUpfWNvbnN0IEVuPXAoIlpvZElQdjYiLChlLHQpPT57RWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gX2EoZSl7cmV0dXJuIENpKEVuLGUpfWNvbnN0IE9uPXAoIlpvZENJRFJ2NCIsKGUsdCk9PntBZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBrYShlKXtyZXR1cm4gRWkoT24sZSl9Y29uc3QgQW49cCgiWm9kQ0lEUnY2IiwoZSx0KT0+e1pkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHdhKGUpe3JldHVybiBPaShBbixlKX1jb25zdCBSbj1wKCJab2RCYXNlNjQiLChlLHQpPT57amQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIEFpKFJuLGUpfWNvbnN0IFpuPXAoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntxZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBTYShlKXtyZXR1cm4gUmkoWm4sZSl9Y29uc3QgTm49cCgiWm9kRTE2NCIsKGUsdCk9PntEZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB6YShlKXtyZXR1cm4gWmkoTm4sZSl9Y29uc3Qgb3I9cCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntVZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBUYShlKXtyZXR1cm4gSHAob3IsZSl9Y29uc3QgcnI9cCgiWm9kSUJBTiIsKGUsdCk9PntCZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBJYShlKXtyZXR1cm4gQnAocnIsZSl9Y29uc3Qgam49cCgiWm9kSldUIiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBOaShqbixlKX1jb25zdCBIZT1wKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57SmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24geGEoZSx0LG49e30pe3JldHVybiBfdChIZSxlLHQsbil9ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIF90KEhlLCJob3N0bmFtZSIsemwsZSl9ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIF90KEhlLCJoZXgiLFVsLGUpfWZ1bmN0aW9uIE9hKGUpe3JldHVybiBfdChIZSwiY3VycmVuY3lfY29kZSIsUGwsZSl9ZnVuY3Rpb24gQWEoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPUZvW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIF90KEhlLG8scix0KX1jb25zdCBJdD1wKCJab2ROdW1iZXIiLChlLHQpPT57WXMuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QZygpLGUuaXNGaW5pdGU9ITB9LFF0KHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09X2UoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1fZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1fZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9Pl9lKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhSZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobWUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKG1lKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKEFlKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhmZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZmUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhGdChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soRnQoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhSZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKEFlKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhmZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFllKGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWWUoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBDKGUpe3JldHVybiBGcChJdCxlKX1jb25zdCBCZT1wKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57S2QuaW5pdChlLHQpLEl0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEZ0KGUpe3JldHVybiBKcChCZSxlKX1mdW5jdGlvbiBSYShlKXtyZXR1cm4gS3AoQmUsZSl9ZnVuY3Rpb24gWmEoZSl7cmV0dXJuIFdwKEJlLGUpfWZ1bmN0aW9uIE5hKGUpe3JldHVybiBHcChCZSxlKX1mdW5jdGlvbiBqYShlKXtyZXR1cm4gUXAoQmUsZSl9Y29uc3QgUHQ9cCgiWm9kQm9vbGVhbiIsKGUsdCk9PntYcy5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhnKCl9KTtmdW5jdGlvbiBEKGUpe3JldHVybiBZcChQdCxlKX1jb25zdCB4dD1wKCJab2RCaWdJbnQiLChlLHQpPT57ZWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DZygpfSxRdCh7bWluVmFsdWU6ZT0+X2UoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9Pl9lKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+X2UoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhtZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobWUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUmUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQWUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGZlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhmZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soQWUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soZmUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFllKGUsdCkpfX0pKTtmdW5jdGlvbiBNYShlKXtyZXR1cm4gZWgoeHQsZSl9Y29uc3QgTW49cCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e1dkLmluaXQoZSx0KSx4dC5pbml0KGUsdCl9KTtmdW5jdGlvbiBxYShlKXtyZXR1cm4gbmgoTW4sZSl9ZnVuY3Rpb24gRGEoZSl7cmV0dXJuIG9oKE1uLGUpfWNvbnN0IHNyPXAoIlpvZFN5bWJvbCIsKGUsdCk9PntHZC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCl9KTtmdW5jdGlvbiBMYShlKXtyZXR1cm4gcmgoc3IsZSl9Y29uc3QgaXI9cCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e1FkLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QWcoKX0pO2Z1bmN0aW9uIHB0KGUpe3JldHVybiBzaChpcixlKX1jb25zdCBhcj1wKCJab2ROdWxsIiwoZSx0KT0+e1lkLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+T2coKX0pO2Z1bmN0aW9uIHFuKGUpe3JldHVybiBpaChhcixlKX1jb25zdCBjcj1wKCJab2RBbnkiLChlLHQpPT57WGQuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OZygpfSk7ZnVuY3Rpb24gRG4oKXtyZXR1cm4gYWgoY3IpfWNvbnN0IHVyPXAoIlpvZFVua25vd24iLChlLHQpPT57ZXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpfSk7ZnVuY3Rpb24gTSgpe3JldHVybiBjaCh1cil9Y29uc3QgbHI9cCgiWm9kTmV2ZXIiLChlLHQpPT57dHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aZygpfSk7ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIHVoKGxyLGUpfWNvbnN0IGRyPXAoIlpvZFZvaWQiLChlLHQpPT57bnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SZygpfSk7ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIGxoKGRyLGUpfWNvbnN0IExuPXAoIlpvZERhdGUiLChlLHQpPT57b3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5NZygpLGUubWluPShuLG8pPT5lLmNoZWNrKG1lKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGZlKG4sbykpfSxRdCh7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1fZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09X2UoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBIYShlKXtyZXR1cm4gZGgoTG4sZSl9Y29uc3QgcHI9cCgiWm9kQXJyYXkiLChlLHQpPT57cnQoKSxycC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkdnKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKExlKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhMZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodnQoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHl0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gZmgocHIsZSx0KX1mdW5jdGlvbiBCYShlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIHJlKE9iamVjdC5rZXlzKHQpKX1jb25zdCBDdD1wKCJab2RPYmplY3QiLChlLHQpPT57cnQoKSxjcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlFnKCksdGwoZSwic2hhcGUiLG49Pm4uX3pvZC5kZWYuc2hhcGUsITEpfSx7a2V5b2YoKXtyZXR1cm4gcmUoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZShhZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKGFlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOk0oKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZShhZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpNKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKGFlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlhlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoYWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIEZ1KHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIEp1KHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBLdSh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBIdSh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBCdSh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBhcyhBdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIGFzKEJuLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBXdShGbix0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLl8odCl9O3JldHVybiBuZXcgQ3Qobil9ZnVuY3Rpb24gRmEoZSx0KXtyZXR1cm4gbmV3IEN0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6WGUoKSwuLi5fKHQpfSl9ZnVuY3Rpb24gb2UoZSx0KXtyZXR1cm4gbmV3IEN0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6TSgpLC4uLl8odCl9KX1jb25zdCBFdD1wKCJab2RVbmlvbiIsKGUsdCk9PntWby5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIE8oZSx0KXtyZXR1cm4gbmV3IEV0KHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLC4uLl8odCl9KX1jb25zdCBocj1wKCJab2RYb3IiLChlLHQpPT57RXQuaW5pdChlLHQpLHVwLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2goKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gVmEoZSx0KXtyZXR1cm4gbmV3IGhyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLGluY2x1c2l2ZTohMSwuLi5fKHQpfSl9Y29uc3QgZnI9cCgiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e0V0LmluaXQoZSx0KSxkcC5pbml0KGUsdCl9KTtmdW5jdGlvbiBVbihlLHQsbil7cmV0dXJuIG5ldyBmcih7dHlwZToidW5pb24iLG9wdGlvbnM6dCxkaXNjcmltaW5hdG9yOmUsLi4uXyhuKX0pfWNvbnN0IG1yPXAoIlpvZEludGVyc2VjdGlvbiIsKGUsdCk9PntwcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PllnKCl9KTtmdW5jdGlvbiBPdChlLHQpe3JldHVybiBuZXcgbXIoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDplLHJpZ2h0OnR9KX1jb25zdCBncj1wKCJab2RUdXBsZSIsKGUsdCk9PntydCgpLG5pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WGcoKX0se3Jlc3QoZSl7cmV0dXJuIHRoaXMuY2xvbmUoey4uLnRoaXMuX3pvZC5kZWYscmVzdDplfSl9LHBhcnRpYWwoKXtjb25zdCBlPXRoaXMuX3pvZC5kZWY7aWYoZS5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5wYXJ0aWFsKCkgY2Fubm90IGJlIHVzZWQgb24gdHVwbGUgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7cmV0dXJuIHRoaXMuY2xvbmUoey4uLmUsaXRlbXM6ZS5pdGVtcy5tYXAodD0+bmV3IEF0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KSl9KX19KTtmdW5jdGlvbiBicihlLHQsbil7Y29uc3Qgbz10IGluc3RhbmNlb2YgeCxyPW8/bjp0LHM9bz90Om51bGw7cmV0dXJuIG5ldyBncih7dHlwZToidHVwbGUiLGl0ZW1zOmUscmVzdDpzLC4uLl8ocil9KX1jb25zdCBldD1wKCJab2RSZWNvcmQiLChlLHQpPT57cnQoKSxocC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmViKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZX0pO2Z1bmN0aW9uIFIoZSx0LG4pe3JldHVybiF0fHwhdC5fem9kP25ldyBldCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmgoKSx2YWx1ZVR5cGU6ZSwuLi5fKHQpfSk6bmV3IGV0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gSmEoZSx0LG4pe3JldHVybiBuZXcgZXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obikscGFydGlhbDohMH0pfWZ1bmN0aW9uIEthKGUsdCxuKXtyZXR1cm4gbmV3IGV0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCxtb2RlOiJsb29zZSIsLi4uXyhuKX0pfWNvbnN0IHZyPXAoIlpvZE1hcCIsKGUsdCk9PntydCgpLGZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+S2coKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlLGUubWluPSguLi5uKT0+ZS5jaGVjayhaZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKFplKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhvdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhidCguLi5uKSl9KTtmdW5jdGlvbiBXYShlLHQsbil7cmV0dXJuIG5ldyB2cih7dHlwZToibWFwIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKX0pfWNvbnN0IHlyPXAoIlpvZFNldCIsKGUsdCk9PntydCgpLG1wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2coKSxlLm1pbj0oLi4ubik9PmUuY2hlY2soWmUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhaZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2sob3QoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soYnQoLi4ubikpfSk7ZnVuY3Rpb24gR2EoZSx0KXtyZXR1cm4gbmV3IHlyKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTplLC4uLl8odCl9KX1jb25zdCB0dD1wKCJab2RFbnVtIiwoZSx0KT0+e2dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG8scixzKT0+cWcoKSxlLmVudW09dC5lbnRyaWVzLGUub3B0aW9ucz1bLi4uZS5fem9kLnZhbHVlc107Y29uc3Qgbj1uZXcgU2V0KE9iamVjdC5rZXlzKHQuZW50cmllcykpO2UuZXh0cmFjdD0obyxyKT0+e2NvbnN0IHM9e307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlzW2ldPXQuZW50cmllc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IHR0KHsuLi50LGNoZWNrczpbXSwuLi5fKHIpLGVudHJpZXM6c30pfSxlLmV4Y2x1ZGU9KG8scik9Pntjb25zdCBzPXsuLi50LmVudHJpZXN9O2Zvcihjb25zdCBpIG9mIG8paWYobi5oYXMoaSkpZGVsZXRlIHNbaV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2l9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyB0dCh7Li4udCxjaGVja3M6W10sLi4uXyhyKSxlbnRyaWVzOnN9KX19KTtmdW5jdGlvbiByZShlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgdHQoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi5fKHQpfSl9ZnVuY3Rpb24gUWEoZSx0KXtyZXR1cm4gbmV3IHR0KHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4uXyh0KX0pfWNvbnN0IF9yPXAoIlpvZExpdGVyYWwiLChlLHQpPT57YnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5EZygpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBfcih7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4uXyh0KX0pfWNvbnN0IGtyPXAoIlpvZEZpbGUiLChlLHQpPT57dnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IZygpLGUubWluPShuLG8pPT5lLmNoZWNrKFplKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKG90KG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhmbihBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIFlhKGUpe3JldHVybiBtaChrcixlKX1jb25zdCB3cj1wKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57cnQoKSx5cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkpnKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBNbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKGx0KHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBpPXM7aS5mYXRhbCYmKGkuY29udGludWU9ITEpLGkuY29kZT8/KGkuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGl8fChpLmlucHV0PW4udmFsdWUpLGkuaW5zdD8/KGkuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKGx0KGkpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIG5ldyB3cih7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IEF0PXAoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e29pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBCKGUpe3JldHVybiBuZXcgQXQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEJuPXAoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57X3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT56aCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uICRyKGUpe3JldHVybiBuZXcgQm4oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IFNyPXAoIlpvZE51bGxhYmxlIiwoZSx0KT0+e2twLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBodChlKXtyZXR1cm4gbmV3IFNyKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBYYShlKXtyZXR1cm4gQihodChlKSl9Y29uc3QgenI9cCgiWm9kRGVmYXVsdCIsKGUsdCk9Pnt3cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm9iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIFRyKGUsdCl7cmV0dXJuIG5ldyB6cih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6T28odCl9fSl9Y29uc3QgSXI9cCgiWm9kUHJlZmF1bHQiLChlLHQpPT57JHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5yYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFByKGUsdCl7cmV0dXJuIG5ldyBJcih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOk9vKHQpfX0pfWNvbnN0IEZuPXAoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB4cihlLHQpe3JldHVybiBuZXcgRm4oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgQ3I9cCgiWm9kU3VjY2VzcyIsKGUsdCk9Pnt6cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkJnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gZWMoZSl7cmV0dXJuIG5ldyBDcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBFcj1wKCJab2RDYXRjaCIsKGUsdCk9PntUcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnNiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBPcihlLHQpe3JldHVybiBuZXcgRXIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6enModCl9KX1jb25zdCBBcj1wKCJab2ROYU4iLChlLHQpPT57SXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5MZygpfSk7ZnVuY3Rpb24gdGMoZSl7cmV0dXJuIGhoKEFyLGUpfWNvbnN0IFJ0PXAoIlpvZFBpcGUiLChlLHQpPT57cmkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pYigpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIFZ0KGUsdCl7cmV0dXJuIG5ldyBSdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IFp0PXAoIlpvZENvZGVjIiwoZSx0KT0+e1J0LmluaXQoZSx0KSxzaS5pbml0KGUsdCl9KTtmdW5jdGlvbiBuYyhlLHQsbil7cmV0dXJuIG5ldyBadCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIG9jKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IFp0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBScj1wKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e1J0LmluaXQoZSx0KSxQcC5pbml0KGUsdCl9KSxacj1wKCJab2RSZWFkb25seSIsKGUsdCk9Pnt4cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmFiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gTnIoZSl7cmV0dXJuIG5ldyBacih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QganI9cCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWcoKX0pO2Z1bmN0aW9uIHJjKGUsdCl7cmV0dXJuIG5ldyBqcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi5fKHQpfSl9Y29uc3QgTXI9cCgiWm9kTGF6eSIsKGUsdCk9PntpaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnViKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBxcihlKXtyZXR1cm4gbmV3IE1yKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IERyPXAoIlpvZFByb21pc2UiLChlLHQpPT57T3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHNjKGUpe3JldHVybiBuZXcgRHIoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgTHI9cCgiWm9kRnVuY3Rpb24iLChlLHQpPT57RXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5WZygpfSk7ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIG5ldyBMcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP2JyKGU/LmlucHV0KTplPy5pbnB1dD8/UChNKCkpLG91dHB1dDplPy5vdXRwdXQ/P00oKX0pfWNvbnN0IE50PXAoIlpvZEN1c3RvbSIsKGUsdCk9PntBcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkZnKCl9KTtmdW5jdGlvbiBpYyhlKXtjb25zdCB0PW5ldyBKKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIFVyKGUsdCl7cmV0dXJuIGdoKE50LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIEhyKGUsdD17fSl7cmV0dXJuIGJoKE50LGUsdCl9ZnVuY3Rpb24gQnIoZSx0KXtyZXR1cm4gdmgoZSx0KX1jb25zdCBhYz1faCxjYz1raCxGcj1wKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e050LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhobihlLHQpKX19KTtmdW5jdGlvbiB1YyhlLHQ9e30pe2NvbnN0IG49bmV3IEZyKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgbGM9KC4uLmUpPT53aCh7Q29kZWM6WnQsQm9vbGVhbjpQdCxTdHJpbmc6a3R9LC4uLmUpO2Z1bmN0aW9uIGRjKGUpe2NvbnN0IHQ9cXIoKCk9Pk8oW2goZSksQygpLEQoKSxxbigpLFAodCksUihoKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm4gbmV3IFJyKHt0eXBlOiJwaXBlIixpbjpIbihlKSxvdXQ6dH0pfWNvbnN0IGdiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6Y3IsWm9kQXJyYXk6cHIsWm9kQmFzZTY0OlJuLFpvZEJhc2U2NFVSTDpabixab2RCaWdJbnQ6eHQsWm9kQmlnSW50Rm9ybWF0Ok1uLFpvZEJvb2xlYW46UHQsWm9kQ0lEUnY0Ok9uLFpvZENJRFJ2NjpBbixab2RDVUlEOnpuLFpvZENVSUQyOlRuLFpvZENhdGNoOkVyLFpvZENvZGVjOlp0LFpvZENyZWRpdENhcmQ6b3IsWm9kQ3VzdG9tOk50LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpIZSxab2REYXRlOkxuLFpvZERlZmF1bHQ6enIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOmZyLFpvZEUxNjQ6Tm4sWm9kRW1haWw6a24sWm9kRW1vamk6JG4sWm9kRW51bTp0dCxab2RFeGFjdE9wdGlvbmFsOkJuLFpvZEZpbGU6a3IsWm9kRnVuY3Rpb246THIsWm9kR1VJRDp3bixab2RJQkFOOnJyLFpvZElQdjQ6Q24sWm9kSVB2NjpFbixab2RJU09EYXRlOiR0LFpvZElTT0RhdGVUaW1lOnd0LFpvZElTT0R1cmF0aW9uOnp0LFpvZElTT1RpbWU6U3QsWm9kSW5zdGFuY2VPZjpGcixab2RJbnRlcnNlY3Rpb246bXIsWm9kSldUOmpuLFpvZEtTVUlEOnhuLFpvZExhenk6TXIsWm9kTGl0ZXJhbDpfcixab2RNQUM6bnIsWm9kTWFwOnZyLFpvZE5hTjpBcixab2ROYW5vSUQ6U24sWm9kTmV2ZXI6bHIsWm9kTm9uT3B0aW9uYWw6Rm4sWm9kTnVsbDphcixab2ROdWxsYWJsZTpTcixab2ROdW1iZXI6SXQsWm9kTnVtYmVyRm9ybWF0OkJlLFpvZE9iamVjdDpDdCxab2RPcHRpb25hbDpBdCxab2RQaXBlOlJ0LFpvZFByZWZhdWx0OklyLFpvZFByZXByb2Nlc3M6UnIsWm9kUHJvbWlzZTpEcixab2RSZWFkb25seTpacixab2RSZWNvcmQ6ZXQsWm9kU2V0OnlyLFpvZFN0cmluZzprdCxab2RTdHJpbmdGb3JtYXQ6TCxab2RTdWNjZXNzOkNyLFpvZFN5bWJvbDpzcixab2RUZW1wbGF0ZUxpdGVyYWw6anIsWm9kVHJhbnNmb3JtOndyLFpvZFR1cGxlOmdyLFpvZFR5cGU6RSxab2RVTElEOkluLFpvZFVSTDpUdCxab2RVVUlEOnplLFpvZFVuZGVmaW5lZDppcixab2RVbmlvbjpFdCxab2RVbmtub3duOnVyLFpvZFZvaWQ6ZHIsWm9kWElEOlBuLFpvZFhvcjpocixfWm9kU3RyaW5nOl9uLF9kZWZhdWx0OlRyLF9mdW5jdGlvbjpmdCxhbnk6RG4sYXJyYXk6UCxiYXNlNjQ6JGEsYmFzZTY0dXJsOlNhLGJpZ2ludDpNYSxib29sZWFuOkQsY2F0Y2g6T3IsY2hlY2s6aWMsY2lkcnY0OmthLGNpZHJ2Njp3YSxjb2RlYzpuYyxjcmVkaXRDYXJkOlRhLGN1aWQ6aGEsY3VpZDI6ZmEsY3VycmVuY3lDb2RlOk9hLGN1c3RvbTpVcixkYXRlOkhhLGRlc2NyaWJlOmFjLGRpc2NyaW1pbmF0ZWRVbmlvbjpVbixlMTY0OnphLGVtYWlsOm9hLGVtb2ppOmRhLGVudW06cmUsZXhhY3RPcHRpb25hbDokcixmaWxlOllhLGZsb2F0MzI6UmEsZmxvYXQ2NDpaYSxmdW5jdGlvbjpmdCxndWlkOnJhLGhhc2g6QWEsaGV4OkVhLGhvc3RuYW1lOkNhLGh0dHBVcmw6bGEsaWJhbjpJYSxpbnN0YW5jZW9mOnVjLGludDpGdCxpbnQzMjpOYSxpbnQ2NDpxYSxpbnRlcnNlY3Rpb246T3QsaW52ZXJ0Q29kZWM6b2MsaXB2NDp2YSxpcHY2Ol9hLGpzb246ZGMsand0OlBhLGtleW9mOkJhLGtzdWlkOmJhLGxhenk6cXIsbGl0ZXJhbDpmLGxvb3NlT2JqZWN0Om9lLGxvb3NlUmVjb3JkOkthLG1hYzp5YSxtYXA6V2EsbWV0YTpjYyxuYW46dGMsbmFub2lkOnBhLG5hdGl2ZUVudW06UWEsbmV2ZXI6WGUsbm9ub3B0aW9uYWw6eHIsbnVsbDpxbixudWxsYWJsZTpodCxudWxsaXNoOlhhLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOkIscGFydGlhbFJlY29yZDpKYSxwaXBlOlZ0LHByZWZhdWx0OlByLHByZXByb2Nlc3M6Vm4scHJvbWlzZTpzYyxyZWFkb25seTpOcixyZWNvcmQ6UixyZWZpbmU6SHIsc2V0OkdhLHN0cmljdE9iamVjdDpGYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6eGEsc3RyaW5nYm9vbDpsYyxzdWNjZXNzOmVjLHN1cGVyUmVmaW5lOkJyLHN5bWJvbDpMYSx0ZW1wbGF0ZUxpdGVyYWw6cmMsdHJhbnNmb3JtOkhuLHR1cGxlOmJyLHVpbnQzMjpqYSx1aW50NjQ6RGEsdWxpZDptYSx1bmRlZmluZWQ6cHQsdW5pb246Tyx1bmtub3duOk0sdXJsOnVhLHV1aWQ6c2EsdXVpZHY0OmlhLHV1aWR2NjphYSx1dWlkdjc6Y2Esdm9pZDpVYSx4aWQ6Z2EseG9yOlZhfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLENoPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBFaChlKXtZKHtjdXN0b21FcnJvcjplfSl9ZnVuY3Rpb24gT2goKXtyZXR1cm4gWSgpLmN1c3RvbUVycm9yfXZhciB3bzt3b3x8KHdvPXt9KTtmdW5jdGlvbiBBaChlKXtyZXR1cm4gTWkod3QsZSl9ZnVuY3Rpb24gYmIoZSl7cmV0dXJuIHFpKCR0LGUpfWZ1bmN0aW9uIHZiKGUpe3JldHVybiBEaShTdCxlKX1mdW5jdGlvbiB5YihlKXtyZXR1cm4gTGkoenQsZSl9Y29uc3QgcGM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZElTT0RhdGU6JHQsWm9kSVNPRGF0ZVRpbWU6d3QsWm9kSVNPRHVyYXRpb246enQsWm9kSVNPVGltZTpTdCxkYXRlOmJiLGRhdGV0aW1lOkFoLGR1cmF0aW9uOnliLHRpbWU6dmJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksJD17Li4uZ2IsLi4uZmIsaXNvOnBjfSxfYj1uZXcgU2V0KFsiJHNjaGVtYSIsIiRyZWYiLCIkZGVmcyIsImRlZmluaXRpb25zIiwiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiLCJ0eXBlIiwiZW51bSIsImNvbnN0IiwiYW55T2YiLCJvbmVPZiIsImFsbE9mIiwibm90IiwicHJvcGVydGllcyIsInJlcXVpcmVkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsInByb3BlcnR5TmFtZXMiLCJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyIsIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJtaW5JdGVtcyIsIm1heEl0ZW1zIiwidW5pcXVlSXRlbXMiLCJjb250YWlucyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiLCJtaW5MZW5ndGgiLCJtYXhMZW5ndGgiLCJwYXR0ZXJuIiwiZm9ybWF0IiwibWluaW11bSIsIm1heGltdW0iLCJleGNsdXNpdmVNaW5pbXVtIiwiZXhjbHVzaXZlTWF4aW11bSIsIm11bHRpcGxlT2YiLCJkZXNjcmlwdGlvbiIsImRlZmF1bHQiLCJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJpZiIsInRoZW4iLCJlbHNlIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVudFJlcXVpcmVkIiwibnVsbGFibGUiLCJyZWFkT25seSJdKTtmdW5jdGlvbiBrYihlLHQpe2NvbnN0IG49ZS4kc2NoZW1hO3JldHVybiBuPT09Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj8iZHJhZnQtMjAyMC0xMiI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiPyJkcmFmdC03IjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI/ImRyYWZ0LTQiOnQ/PyJkcmFmdC0yMDIwLTEyIn1mdW5jdGlvbiB1dShlLHQpe3JldHVybiBlLm1hcCgobixvKT0+bzx0P246bi5vcHRpb25hbCgpKX1mdW5jdGlvbiB3YihlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uICRiKGUsdCl7aWYoIWUuc3RhcnRzV2l0aCgiIyIpKXRocm93IG5ldyBFcnJvcigiRXh0ZXJuYWwgJHJlZiBpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IGxvY2FsIHJlZnMgKCMvLi4uKSBhcmUgYWxsb3dlZCIpO2NvbnN0IG49ZS5zbGljZSgxKS5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKTtpZihuLmxlbmd0aD09PTApcmV0dXJuIHQucm9vdFNjaGVtYTtjb25zdCBvPXQudmVyc2lvbj09PSJkcmFmdC0yMDIwLTEyIj8iJGRlZnMiOiJkZWZpbml0aW9ucyI7aWYoblswXT09PW8pe2NvbnN0IHI9blsxXT09PXZvaWQgMD92b2lkIDA6d2IoblsxXSk7aWYoIXJ8fCF0LmRlZnNbcl0pdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCk7cmV0dXJuIHQuZGVmc1tyXX10aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKX1mdW5jdGlvbiBTYihlLHQpe3JldHVybiAkLnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKHR5cGVvZiByIT0ib2JqZWN0Inx8cj09PW51bGx8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuO2NvbnN0IHM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocik7aWYodC5taW5Qcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5Qcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gc21hbGw6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlID49JHt0Lm1pblByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5tYXhQcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4UHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIGJpZzogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPD0ke3QubWF4UHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0LmtleVNjaGVtYSlmb3IoY29uc3QgaSBvZiBzKXtjb25zdCBhPXQua2V5U2NoZW1hLnNhZmVQYXJzZShpKTthLnN1Y2Nlc3N8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmEuZXJyb3IuaXNzdWVzLGlucHV0OmkscGF0aDpbaV0sY29udGludWU6ITB9KX19KS5waXBlKGUpfWZ1bmN0aW9uIGdzKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuInoiO2NvbnN0IG49dHlwZW9mIGU7aWYobiE9PSJvYmplY3QiKXtpZihuPT09Im51bWJlciImJk51bWJlci5pc05hTihlKSlyZXR1cm4gbnVsbDtjb25zdCBvPVN0cmluZyhlKTtyZXR1cm5gJHtuWzBdfSR7by5sZW5ndGh9OiR7b31gfWlmKHQuaGFzKGUpKXJldHVybiBudWxsO3QuYWRkKGUpO3RyeXtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCBzPVtdO2Zvcihjb25zdCBpIG9mIGUpe2NvbnN0IGE9Z3MoaSx0KTtpZihhPT09bnVsbClyZXR1cm4gbnVsbDtzLnB1c2goYSl9cmV0dXJuYGEke3MubGVuZ3RofTpbJHtzLmpvaW4oIiwiKX1dYH1jb25zdCBvPU9iamVjdC5rZXlzKGUpLnNvcnQoKSxyPVtdO2Zvcihjb25zdCBzIG9mIG8pe2NvbnN0IGk9Z3MoZVtzXSx0KTtpZihpPT09bnVsbClyZXR1cm4gbnVsbDtyLnB1c2goYCR7cy5sZW5ndGh9OiR7c309JHtpfWApfXJldHVybmBvJHtyLmxlbmd0aH06eyR7ci5qb2luKCIsIil9fWB9ZmluYWxseXt0LmRlbGV0ZShlKX19Y29uc3QgemI9bmV3IFNldChbIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbnRhaW5zIiwicHJvcGVydHlOYW1lcyIsIm5vdCIsImlmIiwidGhlbiIsImVsc2UiLCJhbGxPZiIsImFueU9mIiwib25lT2YiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiY29udGVudFNjaGVtYSJdKSxUYj1uZXcgU2V0KFsicHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVuY2llcyIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiXSk7ZnVuY3Rpb24gRHQoZSl7cmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGw/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoRHQpOnR5cGVvZiBlLiRyZWY9PSJzdHJpbmciPyEwOk9iamVjdC5lbnRyaWVzKGUpLnNvbWUoKFt0LG5dKT0+emIuaGFzKHQpP0R0KG4pOiFUYi5oYXModCl8fHR5cGVvZiBuIT0ib2JqZWN0Inx8bj09PW51bGw/ITE6T2JqZWN0LnZhbHVlcyhuKS5zb21lKER0KSl9ZnVuY3Rpb24gbHUoZSl7cmV0dXJuIGU9PT0xPyJlbGVtZW50IjoiZWxlbWVudHMifWZ1bmN0aW9uIEliKGUsdCl7cmV0dXJuICQudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYodC51bmlxdWVJdGVtcz09PSEwKXtjb25zdCBzPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2NvbnN0IGE9Z3MocltpXSxuZXcgU2V0KTtpZihhPT09bnVsbCljb250aW51ZTtjb25zdCB1PXMuZ2V0KGEpO2lmKHU9PT12b2lkIDApe3Muc2V0KGEsaSk7Y29udGludWV9by5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBpdGVtcyBtdXN0IGJlIHVuaXF1ZTogZWxlbWVudCBhdCBpbmRleCAke2l9IGR1cGxpY2F0ZXMgdGhlIG9uZSBhdCBpbmRleCAke3V9YCxpbnB1dDpyLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fWlmKHQuY29udGFpbnNTY2hlbWEpe2NvbnN0IHM9dC5taW5Db250YWlucz8/MSxpPXQubWF4Q29udGFpbnMhPT12b2lkIDA/dC5tYXhDb250YWlucysxOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgYT0wO2Zvcihjb25zdCB1IG9mIHIpaWYodC5jb250YWluc1NjaGVtYS5zYWZlUGFyc2UodSkuc3VjY2VzcyYmKythPj1pKWJyZWFrO2E8cyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHtzfSBtYXRjaGluZyAke2x1KHMpfTsgZm91bmQgJHthfWAsaW5wdXQ6cixjb250aW51ZTohMH0pLHQubWF4Q29udGFpbnMhPT12b2lkIDAmJmE+dC5tYXhDb250YWlucyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke3QubWF4Q29udGFpbnN9IG1hdGNoaW5nICR7bHUodC5tYXhDb250YWlucyl9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSl9fX0pLnBpcGUoZSl9ZnVuY3Rpb24gZHUoZSx0KXtpZihlIT09ITEpcmV0dXJuIGU9PT12b2lkIDB8fGU9PT0hMD8kLmFueSgpOnVlKGUsdCl9Y29uc3QgUGI9L14oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkOlswLTVdXGQoPzpcLlxkKyk/KD86WnxbKy1dKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZCkkLztmdW5jdGlvbiBSaChlLHQpe2lmKGUubm90IT09dm9pZCAwKXtpZih0eXBlb2YgZS5ub3Q9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlLm5vdCkubGVuZ3RoPT09MClyZXR1cm4gJC5uZXZlcigpO3Rocm93IG5ldyBFcnJvcigibm90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWm9kIChleGNlcHQgeyBub3Q6IHt9IH0gZm9yIG5ldmVyKSIpfWlmKGUudW5ldmFsdWF0ZWRJdGVtcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkSXRlbXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmlmIT09dm9pZCAwfHxlLnRoZW4hPT12b2lkIDB8fGUuZWxzZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvbmRpdGlvbmFsIHNjaGVtYXMgKGlmL3RoZW4vZWxzZSkgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmRlcGVuZGVudFNjaGVtYXMhPT12b2lkIDB8fGUuZGVwZW5kZW50UmVxdWlyZWQhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJkZXBlbmRlbnRTY2hlbWFzIGFuZCBkZXBlbmRlbnRSZXF1aXJlZCBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuJHJlZil7Y29uc3Qgcj1lLiRyZWY7aWYodC5yZWZzLmhhcyhyKSlyZXR1cm4gdC5yZWZzLmdldChyKTtpZih0LnByb2Nlc3NpbmcuaGFzKHIpKXJldHVybiAkLmxhenkoKCk9PntpZighdC5yZWZzLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBub3QgcmVzb2x2ZWQ6ICR7cn1gKTtyZXR1cm4gdC5yZWZzLmdldChyKX0pO3QucHJvY2Vzc2luZy5hZGQocik7Y29uc3Qgcz0kYihyLHQpLGk9dWUocyx0KTtyZXR1cm4gdC5yZWZzLnNldChyLGkpLHQucHJvY2Vzc2luZy5kZWxldGUociksaX1pZihlLmVudW0hPT12b2lkIDApe2NvbnN0IHI9ZS5lbnVtO2lmKHQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJmUubnVsbGFibGU9PT0hMCYmci5sZW5ndGg9PT0xJiZyWzBdPT09bnVsbClyZXR1cm4gJC5udWxsKCk7aWYoci5sZW5ndGg9PT0wKXJldHVybiAkLm5ldmVyKCk7aWYoci5sZW5ndGg9PT0xKXJldHVybiAkLmxpdGVyYWwoclswXSk7aWYoci5ldmVyeShpPT50eXBlb2YgaT09InN0cmluZyIpKXJldHVybiAkLmVudW0ocik7Y29uc3Qgcz1yLm1hcChpPT4kLmxpdGVyYWwoaSkpO3JldHVybiBzLmxlbmd0aDwyP3NbMF06JC51bmlvbihbc1swXSxzWzFdLC4uLnMuc2xpY2UoMildKX1pZihlLmNvbnN0IT09dm9pZCAwKXJldHVybiAkLmxpdGVyYWwoZS5jb25zdCk7Y29uc3Qgbj1lLnR5cGU7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3Qgcj1uLm1hcChzPT57Y29uc3QgaT17Li4uZSx0eXBlOnN9O3JldHVybiBSaChpLHQpfSk7cmV0dXJuIHIubGVuZ3RoPT09MD8kLm5ldmVyKCk6ci5sZW5ndGg9PT0xP3JbMF06JC51bmlvbihyKX1pZighbilyZXR1cm4gJC5hbnkoKTtsZXQgbztzd2l0Y2gobil7Y2FzZSJzdHJpbmciOntsZXQgcj0kLnN0cmluZygpO2lmKGUuZm9ybWF0KXtjb25zdCBzPWUuZm9ybWF0O3M9PT0iZW1haWwiP3I9ci5jaGVjaygkLmVtYWlsKCkpOnM9PT0idXJpInx8cz09PSJ1cmktcmVmZXJlbmNlIj9yPXIuY2hlY2soJC51cmwoKSk6cz09PSJ1dWlkInx8cz09PSJndWlkIj9yPXIuY2hlY2soJC51dWlkKCkpOnM9PT0iZGF0ZS10aW1lIj9yPXIuY2hlY2soJC5pc28uZGF0ZXRpbWUoe29mZnNldDohMH0pKTpzPT09ImRhdGUiP3I9ci5jaGVjaygkLmlzby5kYXRlKCkpOnM9PT0idGltZSI/cj1yLmNoZWNrKCQucmVnZXgoUGIpKTpzPT09ImR1cmF0aW9uIj9yPXIuY2hlY2soJC5pc28uZHVyYXRpb24oKSk6cz09PSJob3N0bmFtZSI/cj1yLmNoZWNrKCQuaG9zdG5hbWUoKSk6cz09PSJpcHY0Ij9yPXIuY2hlY2soJC5pcHY0KCkpOnM9PT0iaXB2NiI/cj1yLmNoZWNrKCQuaXB2NigpKTpzPT09Im1hYyI/cj1yLmNoZWNrKCQubWFjKCkpOnM9PT0iY2lkciI/cj1yLmNoZWNrKCQuY2lkcnY0KCkpOnM9PT0iY2lkci12NiI/cj1yLmNoZWNrKCQuY2lkcnY2KCkpOnM9PT0iYmFzZTY0Ij9yPXIuY2hlY2soJC5iYXNlNjQoKSk6cz09PSJiYXNlNjR1cmwiP3I9ci5jaGVjaygkLmJhc2U2NHVybCgpKTpzPT09ImUxNjQiP3I9ci5jaGVjaygkLmUxNjQoKSk6cz09PSJjcmVkaXRfY2FyZCI/cj1yLmNoZWNrKCQuY3JlZGl0Q2FyZCgpKTpzPT09ImliYW4iP3I9ci5jaGVjaygkLmliYW4oKSk6cz09PSJqd3QiP3I9ci5jaGVjaygkLmp3dCgpKTpzPT09ImVtb2ppIj9yPXIuY2hlY2soJC5lbW9qaSgpKTpzPT09Im5hbm9pZCI/cj1yLmNoZWNrKCQubmFub2lkKCkpOnM9PT0iY3VpZCI/cj1yLmNoZWNrKCQuY3VpZCgpKTpzPT09ImN1aWQyIj9yPXIuY2hlY2soJC5jdWlkMigpKTpzPT09InVsaWQiP3I9ci5jaGVjaygkLnVsaWQoKSk6cz09PSJ4aWQiP3I9ci5jaGVjaygkLnhpZCgpKTpzPT09ImtzdWlkIiYmKHI9ci5jaGVjaygkLmtzdWlkKCkpKX10eXBlb2YgZS5taW5MZW5ndGg9PSJudW1iZXIiJiYocj1yLm1pbihlLm1pbkxlbmd0aCkpLHR5cGVvZiBlLm1heExlbmd0aD09Im51bWJlciImJihyPXIubWF4KGUubWF4TGVuZ3RoKSksZS5wYXR0ZXJuJiYocj1yLnJlZ2V4KG5ldyBSZWdFeHAoZS5wYXR0ZXJuKSkpLG89cjticmVha31jYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjp7bGV0IHI9bj09PSJpbnRlZ2VyIj8kLm51bWJlcigpLmludCgpOiQubnVtYmVyKCk7dHlwZW9mIGUubWluaW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWluaW11bSE9PSEwJiYocj1yLm1pbihlLm1pbmltdW0pKSx0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNYXhpbXVtIT09ITAmJihyPXIubWF4KGUubWF4aW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1pbmltdW09PSJudW1iZXIiP3I9ci5ndChlLmV4Y2x1c2l2ZU1pbmltdW0pOmUuZXhjbHVzaXZlTWluaW11bT09PSEwJiZ0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmKHI9ci5ndChlLm1pbmltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNYXhpbXVtPT0ibnVtYmVyIj9yPXIubHQoZS5leGNsdXNpdmVNYXhpbXVtKTplLmV4Y2x1c2l2ZU1heGltdW09PT0hMCYmdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJihyPXIubHQoZS5tYXhpbXVtKSksdHlwZW9mIGUubXVsdGlwbGVPZj09Im51bWJlciImJihyPXIubXVsdGlwbGVPZihlLm11bHRpcGxlT2YpKSxvPXI7YnJlYWt9Y2FzZSJib29sZWFuIjp7bz0kLmJvb2xlYW4oKTticmVha31jYXNlIm51bGwiOntvPSQubnVsbCgpO2JyZWFrfWNhc2Uib2JqZWN0Ijp7Y29uc3Qgcj17fSxzPWUucHJvcGVydGllc3x8e30saT1uZXcgU2V0KGUucmVxdWlyZWR8fFtdKSxhPXR5cGVvZiBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT0ib2JqZWN0Ij91ZShlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHQpOnZvaWQgMDtmb3IoY29uc3RbbSxiXW9mIE9iamVjdC5lbnRyaWVzKHMpKXtjb25zdCB5PXVlKGIsdCk7bnQocixtLGkuaGFzKG0pP3k6eS5vcHRpb25hbCgpKX1pZihlLnBhdHRlcm5Qcm9wZXJ0aWVzKXtjb25zdCBtPWUucGF0dGVyblByb3BlcnRpZXMsYj1PYmplY3Qua2V5cyhtKSx5PVtdO2Zvcihjb25zdCB3IG9mIGIpe2NvbnN0IEk9dWUobVt3XSx0KSxqPSQuc3RyaW5nKCkucmVnZXgobmV3IFJlZ0V4cCh3KSk7eS5wdXNoKCQubG9vc2VSZWNvcmQoaixJKSl9Y29uc3Qgdj1bXTtpZihPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmdi5wdXNoKCQub2JqZWN0KHIpLnBhc3N0aHJvdWdoKCkpLHYucHVzaCguLi55KSx2Lmxlbmd0aD09PTApbz0kLm9iamVjdCh7fSkucGFzc3Rocm91Z2goKTtlbHNlIGlmKHYubGVuZ3RoPT09MSlvPXZbMF07ZWxzZXtsZXQgdz0kLmludGVyc2VjdGlvbih2WzBdLHZbMV0pO2ZvcihsZXQgST0yO0k8di5sZW5ndGg7SSsrKXc9JC5pbnRlcnNlY3Rpb24odyx2W0ldKTtvPXd9aWYoZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExKXtjb25zdCB3PU9iamVjdC5rZXlzKHIpLEk9Yi5tYXAoVD0+bmV3IFJlZ0V4cChUKSksaj1vO289by5jaGVjayhUPT57aWYoIURlKFQudmFsdWUpKXJldHVybjtjb25zdCBWPVtdO2Zvcihjb25zdCB0ZSBvZiBPYmplY3Qua2V5cyhULnZhbHVlKSl3LmluY2x1ZGVzKHRlKXx8SS5zb21lKEs9PksudGVzdCh0ZSkpfHxWLnB1c2godGUpO1YubGVuZ3RoJiZULmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czpWLGlucHV0OlQudmFsdWUsaW5zdDpqfSl9KX19ZWxzZXtjb25zdCBtPSQub2JqZWN0KHIpO2UuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMT9vPW0uc3RyaWN0KCk6YT9vPW0uY2F0Y2hhbGwoYSk6bz1tLnBhc3N0aHJvdWdoKCl9Y29uc3QgdT1lLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJmUucHJvcGVydHlOYW1lcyE9PSEwLGw9dHlwZW9mIGUubWluUHJvcGVydGllcz09Im51bWJlciI/ZS5taW5Qcm9wZXJ0aWVzOnZvaWQgMCxkPXR5cGVvZiBlLm1heFByb3BlcnRpZXM9PSJudW1iZXIiP2UubWF4UHJvcGVydGllczp2b2lkIDA7aWYodXx8bCE9PXZvaWQgMHx8ZCE9PXZvaWQgMCl7bGV0IG07aWYodSl7Y29uc3QgYj10eXBlb2YgZS5wcm9wZXJ0eU5hbWVzPT0ib2JqZWN0IiYmZS5wcm9wZXJ0eU5hbWVzLnR5cGU9PT12b2lkIDA/e3R5cGU6InN0cmluZyIsLi4uZS5wcm9wZXJ0eU5hbWVzfTplLnByb3BlcnR5TmFtZXM7bT11ZShiLHQpfW89U2Iobyx7a2V5U2NoZW1hOm0sbWluUHJvcGVydGllczpsLG1heFByb3BlcnRpZXM6ZH0pfWJyZWFrfWNhc2UiYXJyYXkiOntjb25zdCByPWUucHJlZml4SXRlbXMscz1lLml0ZW1zO2lmKHImJkFycmF5LmlzQXJyYXkocikpe2NvbnN0IGk9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxhPXIubWFwKG09PnVlKG0sdCkpLHU9dXUoYSxpKSxsPUFycmF5LmlzQXJyYXkocyk/dm9pZCAwOmR1KHMsdCksZD0kLnR1cGxlKHUpO289bD9kLnJlc3QobCk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soJC5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soJC5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGk9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxhPXMubWFwKG09PnVlKG0sdCkpLHU9dXUoYSxpKSxsPWR1KGUuYWRkaXRpb25hbEl0ZW1zLHQpLGQ9JC50dXBsZSh1KTtvPWw/ZC5yZXN0KGwpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKCQubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKCQubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihzIT09dm9pZCAwKXtjb25zdCBpPXVlKHMsdCk7bGV0IGE9JC5hcnJheShpKTt0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihhPWEubWluKGUubWluSXRlbXMpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihhPWEubWF4KGUubWF4SXRlbXMpKSxvPWF9ZWxzZSBvPSQuYXJyYXkoJC5hbnkoKSk7KGUudW5pcXVlSXRlbXM9PT0hMHx8ZS5jb250YWlucyE9PXZvaWQgMCkmJihvPUliKG8se3VuaXF1ZUl0ZW1zOmUudW5pcXVlSXRlbXM9PT0hMCxjb250YWluc1NjaGVtYTplLmNvbnRhaW5zIT09dm9pZCAwP3VlKGUuY29udGFpbnMsdCk6dm9pZCAwLG1pbkNvbnRhaW5zOnR5cGVvZiBlLm1pbkNvbnRhaW5zPT0ibnVtYmVyIj9lLm1pbkNvbnRhaW5zOnZvaWQgMCxtYXhDb250YWluczp0eXBlb2YgZS5tYXhDb250YWlucz09Im51bWJlciI/ZS5tYXhDb250YWluczp2b2lkIDB9KSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGU6ICR7bn1gKX1yZXR1cm4gb31mdW5jdGlvbiB1ZShlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/JC5hbnkoKTokLm5ldmVyKCk7bGV0IG49UmgoZSx0KTtjb25zdCBvPWUudHlwZXx8ZS5lbnVtIT09dm9pZCAwfHxlLmNvbnN0IT09dm9pZCAwO2lmKGUuYW55T2YmJkFycmF5LmlzQXJyYXkoZS5hbnlPZikpe2NvbnN0IGE9ZS5hbnlPZi5tYXAobD0+dWUobCx0KSksdT0kLnVuaW9uKGEpO249bz8kLmludGVyc2VjdGlvbihuLHUpOnV9aWYoZS5vbmVPZiYmQXJyYXkuaXNBcnJheShlLm9uZU9mKSl7Y29uc3QgYT1lLm9uZU9mLm1hcChsPT51ZShsLHQpKSx1PSQueG9yKGEpO249bz8kLmludGVyc2VjdGlvbihuLHUpOnV9aWYoZS5hbGxPZiYmQXJyYXkuaXNBcnJheShlLmFsbE9mKSlpZihlLmFsbE9mLmxlbmd0aD09PTApbj1vP246JC5hbnkoKTtlbHNle2xldCBhPW8/bjp1ZShlLmFsbE9mWzBdLHQpO2NvbnN0IHU9bz8wOjE7Zm9yKGxldCBsPXU7bDxlLmFsbE9mLmxlbmd0aDtsKyspYT0kLmludGVyc2VjdGlvbihhLHVlKGUuYWxsT2ZbbF0sdCkpO249YX1lLm51bGxhYmxlPT09ITAmJnQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJihuPSQubnVsbGFibGUobikpLGUucmVhZE9ubHk9PT0hMCYmKG49JC5yZWFkb25seShuKSksZS5kZWZhdWx0IT09dm9pZCAwJiYobj1uLmRlZmF1bHQoZS5kZWZhdWx0KSk7Y29uc3Qgcj17fSxzPVsiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiXTtmb3IoY29uc3QgYSBvZiBzKWEgaW4gZSYmKHJbYV09ZVthXSk7Y29uc3QgaT1bImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIl07Zm9yKGNvbnN0IGEgb2YgaSlhIGluIGUmJihyW2FdPWVbYV0pO2lmKGUudHlwZT09PSJvYmplY3QiJiZlLiRyZWY9PT12b2lkIDApe2UucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmIUR0KGUucHJvcGVydHlOYW1lcykmJihyLnByb3BlcnR5TmFtZXM9ZS5wcm9wZXJ0eU5hbWVzKTtmb3IoY29uc3QgYSBvZlsibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1pZihlLnR5cGU9PT0iYXJyYXkiJiZlLiRyZWY9PT12b2lkIDApe2UuY29udGFpbnMhPT12b2lkIDAmJiFEdChlLmNvbnRhaW5zKSYmKHIuY29udGFpbnM9ZS5jb250YWlucyk7Zm9yKGNvbnN0IGEgb2ZbInVuaXF1ZUl0ZW1zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyJdKWVbYV0hPT12b2lkIDAmJihyW2FdPWVbYV0pfWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKGUpKV9iLmhhcyhhKXx8bnQocixhLGVbYV0pO3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmdC5yZWdpc3RyeS5hZGQobixyKSxlLmRlc2NyaXB0aW9uJiYobj1uLmRlc2NyaWJlKGUuZGVzY3JpcHRpb24pKSxufWZ1bmN0aW9uIFpoKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT8kLmFueSgpOiQubmV2ZXIoKTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoImZyb21KU09OU2NoZW1hIGlucHV0IGlzIG5vdCB2YWxpZCBKU09OIChwb3NzaWJseSBjeWNsaWMpOyB1c2UgJGRlZnMvJHJlZiBmb3IgcmVjdXJzaXZlIHNjaGVtYXMiKX1jb25zdCBvPWtiKG4sdD8uZGVmYXVsdFRhcmdldCkscj1uLiRkZWZzfHxuLmRlZmluaXRpb25zfHx7fSxzPXt2ZXJzaW9uOm8sZGVmczpyLHJlZnM6bmV3IE1hcCxwcm9jZXNzaW5nOm5ldyBTZXQscm9vdFNjaGVtYTpuLHJlZ2lzdHJ5OnQ/LnJlZ2lzdHJ5Pz95ZX07cmV0dXJuIHVlKG4scyl9ZnVuY3Rpb24gTmgoZSl7cmV0dXJuIEhpKGUse29iamVjdDp0PT50LnBhcnRpYWwoKSx1bmlvbjp0PT57Y29uc3Qgbj10Ll96b2QuZGVmO3JldHVybiBuLmRpc2NyaW1pbmF0b3I9PT12b2lkIDA/dDpPKG4ub3B0aW9ucyl9fSl9ZnVuY3Rpb24geGIoZSx0KXtpZighdD8ubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49ZS5fem9kLmRlZjtyZXR1cm4gVyhlLGFlKG4se2NoZWNrczpbLi4ubi5jaGVja3M/P1tdLC4uLnRdfSkse3BhcmVudDohMH0pfWZ1bmN0aW9uIGpoKGUpe3JldHVybiB4YihlLm91dCxlLmNoZWNrcyl9ZnVuY3Rpb24gQ2IoZSl7cmV0dXJuIGUuaW4uX3pvZC50cmFpdHMuaGFzKCIkWm9kVHJhbnNmb3JtIik/amgoZSk6ZS5pbn1mdW5jdGlvbiBNaChlKXtyZXR1cm4gSGkoZSx7cGlwZTp0PT5DYih0Ll96b2QuZGVmKSxkZWZhdWx0Oih0LG4pPT5uP0IodC5fem9kLmRlZi5pbm5lclR5cGUpOnQsY2F0Y2g6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHFoKGUpe3JldHVybiBIaShlLHtwaXBlOnQ9PmpoKHQuX3pvZC5kZWYpLHByZWZhdWx0Oih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBFYihlKXtyZXR1cm4gTHAoa3QsZSl9ZnVuY3Rpb24gT2IoZSl7cmV0dXJuIFZwKEl0LGUpfWZ1bmN0aW9uIEFiKGUpe3JldHVybiBYcChQdCxlKX1mdW5jdGlvbiBSYihlKXtyZXR1cm4gdGgoeHQsZSl9ZnVuY3Rpb24gWmIoZSl7cmV0dXJuIHBoKExuLGUpfWNvbnN0IERoPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiaWdpbnQ6UmIsYm9vbGVhbjpBYixkYXRlOlpiLG51bWJlcjpPYixzdHJpbmc6RWJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkscHU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpQcywkaW5wdXQ6dWksJG91dHB1dDpjaSxJTlZBTElEOmRpLE5FVkVSOklzLFRpbWVQcmVjaXNpb246amksWm9kQW55OmNyLFpvZEFycmF5OnByLFpvZEJhc2U2NDpSbixab2RCYXNlNjRVUkw6Wm4sWm9kQmlnSW50Onh0LFpvZEJpZ0ludEZvcm1hdDpNbixab2RCb29sZWFuOlB0LFpvZENJRFJ2NDpPbixab2RDSURSdjY6QW4sWm9kQ1VJRDp6bixab2RDVUlEMjpUbixab2RDYXRjaDpFcixab2RDb2RlYzpadCxab2RDb21waWxlQXN5bmNFcnJvcjpwaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpoaSxab2RDcmVkaXRDYXJkOm9yLFpvZEN1c3RvbTpOdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6SGUsWm9kRGF0ZTpMbixab2REZWZhdWx0OnpyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpmcixab2RFMTY0Ok5uLFpvZEVtYWlsOmtuLFpvZEVtb2ppOiRuLFpvZEVudW06dHQsWm9kRXJyb3I6eGgsWm9kRXhhY3RPcHRpb25hbDpCbixab2RGaWxlOmtyLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gd299LFpvZEZ1bmN0aW9uOkxyLFpvZEdVSUQ6d24sWm9kSUJBTjpycixab2RJUHY0OkNuLFpvZElQdjY6RW4sWm9kSVNPRGF0ZTokdCxab2RJU09EYXRlVGltZTp3dCxab2RJU09EdXJhdGlvbjp6dCxab2RJU09UaW1lOlN0LFpvZEluc3RhbmNlT2Y6RnIsWm9kSW50ZXJzZWN0aW9uOm1yLFpvZElzc3VlQ29kZTpDaCxab2RKV1Q6am4sWm9kS1NVSUQ6eG4sWm9kTGF6eTpNcixab2RMaXRlcmFsOl9yLFpvZE1BQzpucixab2RNYXA6dnIsWm9kTmFOOkFyLFpvZE5hbm9JRDpTbixab2ROZXZlcjpscixab2ROb25PcHRpb25hbDpGbixab2ROdWxsOmFyLFpvZE51bGxhYmxlOlNyLFpvZE51bWJlcjpJdCxab2ROdW1iZXJGb3JtYXQ6QmUsWm9kT2JqZWN0OkN0LFpvZE9wdGlvbmFsOkF0LFpvZFBpcGU6UnQsWm9kUHJlZmF1bHQ6SXIsWm9kUHJlcHJvY2VzczpScixab2RQcm9taXNlOkRyLFpvZFJlYWRvbmx5OlpyLFpvZFJlYWxFcnJvcjpwZSxab2RSZWNvcmQ6ZXQsWm9kU2V0OnlyLFpvZFN0cmluZzprdCxab2RTdHJpbmdGb3JtYXQ6TCxab2RTdWNjZXNzOkNyLFpvZFN5bWJvbDpzcixab2RUZW1wbGF0ZUxpdGVyYWw6anIsWm9kVHJhbnNmb3JtOndyLFpvZFR1cGxlOmdyLFpvZFR5cGU6RSxab2RVTElEOkluLFpvZFVSTDpUdCxab2RVVUlEOnplLFpvZFVuZGVmaW5lZDppcixab2RVbmlvbjpFdCxab2RVbmtub3duOnVyLFpvZFZvaWQ6ZHIsWm9kWElEOlBuLFpvZFhvcjpocixfWm9kU3RyaW5nOl9uLF9kZWZhdWx0OlRyLF9mdW5jdGlvbjpmdCxhbnk6RG4sYXJyYXk6UCxiYXNlNjQ6JGEsYmFzZTY0dXJsOlNhLGJpZ2ludDpNYSxib29sZWFuOkQsY2F0Y2g6T3IsY2hlY2s6aWMsY2lkcnY0OmthLGNpZHJ2Njp3YSxjbG9uZTpXLGNvZGVjOm5jLGNvZXJjZTpEaCxjb21waWxlOmZpLGNvbmZpZzpZLGNvcmU6VGgsY3JlZGl0Q2FyZDpUYSxjdWlkOmhhLGN1aWQyOmZhLGN1cnJlbmN5Q29kZTpPYSxjdXN0b206VXIsZGF0ZTpIYSxkZWNvZGU6R2ksZGVjb2RlQXN5bmM6WWksZGVlcFBhcnRpYWw6TmgsZGVzY3JpYmU6YWMsZGlzY3JpbWluYXRlZFVuaW9uOlVuLGUxNjQ6emEsZW1haWw6b2EsZW1vamk6ZGEsZW5jb2RlOldpLGVuY29kZUFzeW5jOlFpLGVuZHNXaXRoOnBuLGVudW06cmUsZXhhY3RPcHRpb25hbDokcixmaWxlOllhLGZsYXR0ZW5FcnJvcjpxbyxmbG9hdDMyOlJhLGZsb2F0NjQ6WmEsZm9ybWF0RXJyb3I6RG8sZnJvbUpTT05TY2hlbWE6WmgsZnVuY3Rpb246ZnQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjp0aSxnZXRFcnJvck1hcDpPaCxnbG9iYWxSZWdpc3RyeTp5ZSxndDpSZSxndGU6bWUsZ3VpZDpyYSxoYXNoOkFhLGhleDpFYSxob3N0bmFtZTpDYSxodHRwVXJsOmxhLGliYW46SWEsaW5jbHVkZXM6bG4saW5wdXQ6TWgsaW5zdGFuY2VvZjp1YyxpbnQ6RnQsaW50MzI6TmEsaW50NjQ6cWEsaW50ZXJzZWN0aW9uOk90LGludmVydENvZGVjOm9jLGlwdjQ6dmEsaXB2NjpfYSxpc286cGMsanNvbjpkYyxqd3Q6UGEsa2V5b2Y6QmEsa3N1aWQ6YmEsbGF6eTpxcixsZW5ndGg6eXQsbGl0ZXJhbDpmLGxvY2FsZXM6YWksbG9vc2VPYmplY3Q6b2UsbG9vc2VSZWNvcmQ6S2EsbG93ZXJjYXNlOmNuLGx0OkFlLGx0ZTpmZSxtYWM6eWEsbWFwOldhLG1heExlbmd0aDp2dCxtYXhTaXplOm90LG1lbW9pemVyOkpvLG1ldGE6Y2MsbWltZTpmbixtaW5MZW5ndGg6TGUsbWluU2l6ZTpaZSxtdWx0aXBsZU9mOlllLG5hbjp0YyxuYW5vaWQ6cGEsbmF0aXZlRW51bTpRYSxuZWdhdGl2ZTpZbyxuZXZlcjpYZSxub25uZWdhdGl2ZTplcixub25vcHRpb25hbDp4cixub25wb3NpdGl2ZTpYbyxub3JtYWxpemU6bW4sbnVsbDpxbixudWxsYWJsZTpodCxudWxsaXNoOlhhLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOkIsb3V0cHV0OnFoLG92ZXJ3cml0ZTpJZSxwYXJzZTpGaSxwYXJzZUFzeW5jOlZpLHBhcnRpYWxSZWNvcmQ6SmEscGlwZTpWdCxwb3NpdGl2ZTpRbyxwcmVmYXVsdDpQcixwcmVwcm9jZXNzOlZuLHByZXR0aWZ5RXJyb3I6Q3MscHJvbWlzZTpzYyxwcm9wZXJ0aWVzOmhuLHByb3BlcnR5OnRyLHJlYWRvbmx5Ok5yLHJlY29yZDpSLHJlZmluZTpIcixyZWdleDphbixyZWdleGVzOkZvLHJlZ2lzdHJ5OktvLHNhZmVEZWNvZGU6ZWEsc2FmZURlY29kZUFzeW5jOm5hLHNhZmVFbmNvZGU6WGksc2FmZUVuY29kZUFzeW5jOnRhLHNhZmVQYXJzZTpKaSxzYWZlUGFyc2VBc3luYzpLaSxzZXQ6R2Esc2V0RXJyb3JNYXA6RWgsc2l6ZTpidCxzbHVnaWZ5OnluLHN0YXJ0c1dpdGg6ZG4sc3RyaWN0T2JqZWN0OkZhLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDp4YSxzdHJpbmdib29sOmxjLHN1Y2Nlc3M6ZWMsc3VwZXJSZWZpbmU6QnIsc3ltYm9sOkxhLHRlbXBsYXRlTGl0ZXJhbDpyYyx0b0pTT05TY2hlbWE6VWksdG9Mb3dlckNhc2U6Ym4sdG9VcHBlckNhc2U6dm4sdG9ab2Q6Q28sdHJhbnNmb3JtOkhuLHRyZWVpZnlFcnJvcjp4cyx0cmltOmduLHR1cGxlOmJyLHVpbnQzMjpqYSx1aW50NjQ6RGEsdWxpZDptYSx1bmRlZmluZWQ6cHQsdW5pb246Tyx1bmtub3duOk0sdXBwZXJjYXNlOnVuLHVybDp1YSx1dGlsOlRzLHV1aWQ6c2EsdXVpZHY0OmlhLHV1aWR2NjphYSx1dWlkdjc6Y2EsdmFsaWRhdGU6VW8sdmFsaWRhdGVBc3luYzpIbyx2b2lkOlVhLHdpdGhQYXJzZXI6bWkseGlkOmdhLHhvcjpWYX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxOYj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOlBzLCRpbnB1dDp1aSwkb3V0cHV0OmNpLElOVkFMSUQ6ZGksTkVWRVI6SXMsVGltZVByZWNpc2lvbjpqaSxab2RBbnk6Y3IsWm9kQXJyYXk6cHIsWm9kQmFzZTY0OlJuLFpvZEJhc2U2NFVSTDpabixab2RCaWdJbnQ6eHQsWm9kQmlnSW50Rm9ybWF0Ok1uLFpvZEJvb2xlYW46UHQsWm9kQ0lEUnY0Ok9uLFpvZENJRFJ2NjpBbixab2RDVUlEOnpuLFpvZENVSUQyOlRuLFpvZENhdGNoOkVyLFpvZENvZGVjOlp0LFpvZENvbXBpbGVBc3luY0Vycm9yOnBpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOmhpLFpvZENyZWRpdENhcmQ6b3IsWm9kQ3VzdG9tOk50LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpIZSxab2REYXRlOkxuLFpvZERlZmF1bHQ6enIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOmZyLFpvZEUxNjQ6Tm4sWm9kRW1haWw6a24sWm9kRW1vamk6JG4sWm9kRW51bTp0dCxab2RFcnJvcjp4aCxab2RFeGFjdE9wdGlvbmFsOkJuLFpvZEZpbGU6a3IsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiB3b30sWm9kRnVuY3Rpb246THIsWm9kR1VJRDp3bixab2RJQkFOOnJyLFpvZElQdjQ6Q24sWm9kSVB2NjpFbixab2RJU09EYXRlOiR0LFpvZElTT0RhdGVUaW1lOnd0LFpvZElTT0R1cmF0aW9uOnp0LFpvZElTT1RpbWU6U3QsWm9kSW5zdGFuY2VPZjpGcixab2RJbnRlcnNlY3Rpb246bXIsWm9kSXNzdWVDb2RlOkNoLFpvZEpXVDpqbixab2RLU1VJRDp4bixab2RMYXp5Ok1yLFpvZExpdGVyYWw6X3IsWm9kTUFDOm5yLFpvZE1hcDp2cixab2ROYU46QXIsWm9kTmFub0lEOlNuLFpvZE5ldmVyOmxyLFpvZE5vbk9wdGlvbmFsOkZuLFpvZE51bGw6YXIsWm9kTnVsbGFibGU6U3IsWm9kTnVtYmVyOkl0LFpvZE51bWJlckZvcm1hdDpCZSxab2RPYmplY3Q6Q3QsWm9kT3B0aW9uYWw6QXQsWm9kUGlwZTpSdCxab2RQcmVmYXVsdDpJcixab2RQcmVwcm9jZXNzOlJyLFpvZFByb21pc2U6RHIsWm9kUmVhZG9ubHk6WnIsWm9kUmVhbEVycm9yOnBlLFpvZFJlY29yZDpldCxab2RTZXQ6eXIsWm9kU3RyaW5nOmt0LFpvZFN0cmluZ0Zvcm1hdDpMLFpvZFN1Y2Nlc3M6Q3IsWm9kU3ltYm9sOnNyLFpvZFRlbXBsYXRlTGl0ZXJhbDpqcixab2RUcmFuc2Zvcm06d3IsWm9kVHVwbGU6Z3IsWm9kVHlwZTpFLFpvZFVMSUQ6SW4sWm9kVVJMOlR0LFpvZFVVSUQ6emUsWm9kVW5kZWZpbmVkOmlyLFpvZFVuaW9uOkV0LFpvZFVua25vd246dXIsWm9kVm9pZDpkcixab2RYSUQ6UG4sWm9kWG9yOmhyLF9ab2RTdHJpbmc6X24sX2RlZmF1bHQ6VHIsX2Z1bmN0aW9uOmZ0LGFueTpEbixhcnJheTpQLGJhc2U2NDokYSxiYXNlNjR1cmw6U2EsYmlnaW50Ok1hLGJvb2xlYW46RCxjYXRjaDpPcixjaGVjazppYyxjaWRydjQ6a2EsY2lkcnY2OndhLGNsb25lOlcsY29kZWM6bmMsY29lcmNlOkRoLGNvbXBpbGU6ZmksY29uZmlnOlksY29yZTpUaCxjcmVkaXRDYXJkOlRhLGN1aWQ6aGEsY3VpZDI6ZmEsY3VycmVuY3lDb2RlOk9hLGN1c3RvbTpVcixkYXRlOkhhLGRlY29kZTpHaSxkZWNvZGVBc3luYzpZaSxkZWVwUGFydGlhbDpOaCxkZWZhdWx0OnB1LGRlc2NyaWJlOmFjLGRpc2NyaW1pbmF0ZWRVbmlvbjpVbixlMTY0OnphLGVtYWlsOm9hLGVtb2ppOmRhLGVuY29kZTpXaSxlbmNvZGVBc3luYzpRaSxlbmRzV2l0aDpwbixlbnVtOnJlLGV4YWN0T3B0aW9uYWw6JHIsZmlsZTpZYSxmbGF0dGVuRXJyb3I6cW8sZmxvYXQzMjpSYSxmbG9hdDY0OlphLGZvcm1hdEVycm9yOkRvLGZyb21KU09OU2NoZW1hOlpoLGZ1bmN0aW9uOmZ0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246dGksZ2V0RXJyb3JNYXA6T2gsZ2xvYmFsUmVnaXN0cnk6eWUsZ3Q6UmUsZ3RlOm1lLGd1aWQ6cmEsaGFzaDpBYSxoZXg6RWEsaG9zdG5hbWU6Q2EsaHR0cFVybDpsYSxpYmFuOklhLGluY2x1ZGVzOmxuLGlucHV0Ok1oLGluc3RhbmNlb2Y6dWMsaW50OkZ0LGludDMyOk5hLGludDY0OnFhLGludGVyc2VjdGlvbjpPdCxpbnZlcnRDb2RlYzpvYyxpcHY0OnZhLGlwdjY6X2EsaXNvOnBjLGpzb246ZGMsand0OlBhLGtleW9mOkJhLGtzdWlkOmJhLGxhenk6cXIsbGVuZ3RoOnl0LGxpdGVyYWw6Zixsb2NhbGVzOmFpLGxvb3NlT2JqZWN0Om9lLGxvb3NlUmVjb3JkOkthLGxvd2VyY2FzZTpjbixsdDpBZSxsdGU6ZmUsbWFjOnlhLG1hcDpXYSxtYXhMZW5ndGg6dnQsbWF4U2l6ZTpvdCxtZW1vaXplcjpKbyxtZXRhOmNjLG1pbWU6Zm4sbWluTGVuZ3RoOkxlLG1pblNpemU6WmUsbXVsdGlwbGVPZjpZZSxuYW46dGMsbmFub2lkOnBhLG5hdGl2ZUVudW06UWEsbmVnYXRpdmU6WW8sbmV2ZXI6WGUsbm9ubmVnYXRpdmU6ZXIsbm9ub3B0aW9uYWw6eHIsbm9ucG9zaXRpdmU6WG8sbm9ybWFsaXplOm1uLG51bGw6cW4sbnVsbGFibGU6aHQsbnVsbGlzaDpYYSxudW1iZXI6QyxvYmplY3Q6ZyxvcHRpb25hbDpCLG91dHB1dDpxaCxvdmVyd3JpdGU6SWUscGFyc2U6RmkscGFyc2VBc3luYzpWaSxwYXJ0aWFsUmVjb3JkOkphLHBpcGU6VnQscG9zaXRpdmU6UW8scHJlZmF1bHQ6UHIscHJlcHJvY2VzczpWbixwcmV0dGlmeUVycm9yOkNzLHByb21pc2U6c2MscHJvcGVydGllczpobixwcm9wZXJ0eTp0cixyZWFkb25seTpOcixyZWNvcmQ6UixyZWZpbmU6SHIscmVnZXg6YW4scmVnZXhlczpGbyxyZWdpc3RyeTpLbyxzYWZlRGVjb2RlOmVhLHNhZmVEZWNvZGVBc3luYzpuYSxzYWZlRW5jb2RlOlhpLHNhZmVFbmNvZGVBc3luYzp0YSxzYWZlUGFyc2U6Smksc2FmZVBhcnNlQXN5bmM6S2ksc2V0OkdhLHNldEVycm9yTWFwOkVoLHNpemU6YnQsc2x1Z2lmeTp5bixzdGFydHNXaXRoOmRuLHN0cmljdE9iamVjdDpGYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6eGEsc3RyaW5nYm9vbDpsYyxzdWNjZXNzOmVjLHN1cGVyUmVmaW5lOkJyLHN5bWJvbDpMYSx0ZW1wbGF0ZUxpdGVyYWw6cmMsdG9KU09OU2NoZW1hOlVpLHRvTG93ZXJDYXNlOmJuLHRvVXBwZXJDYXNlOnZuLHRvWm9kOkNvLHRyYW5zZm9ybTpIbix0cmVlaWZ5RXJyb3I6eHMsdHJpbTpnbix0dXBsZTpicix1aW50MzI6amEsdWludDY0OkRhLHVsaWQ6bWEsdW5kZWZpbmVkOnB0LHVuaW9uOk8sdW5rbm93bjpNLHVwcGVyY2FzZTp1bix1cmw6dWEsdXRpbDpUcyx1dWlkOnNhLHV1aWR2NDppYSx1dWlkdjY6YWEsdXVpZHY3OmNhLHZhbGlkYXRlOlVvLHZhbGlkYXRlQXN5bmM6SG8sdm9pZDpVYSx3aXRoUGFyc2VyOm1pLHhpZDpnYSx4b3I6VmEsejpwdX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxLZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixWcj0iMi4wIixRPVVyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLExoPU8oW2goKSxDKCkuaW50KCldKSxVaD1oKCk7b2Uoe3R0bDpDKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6QygpLm9wdGlvbmFsKCl9KTtjb25zdCBqYj1nKHt0dGw6QygpLm9wdGlvbmFsKCl9KSxNYj1nKHt0YXNrSWQ6aCgpfSksaGM9b2Uoe3Byb2dyZXNzVG9rZW46TGgub3B0aW9uYWwoKSxbS2VdOk1iLm9wdGlvbmFsKCl9KSxiZT1nKHtfbWV0YTpoYy5vcHRpb25hbCgpfSksSm49YmUuZXh0ZW5kKHt0YXNrOmpiLm9wdGlvbmFsKCl9KSxxYj1lPT5Kbi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxzZT1nKHttZXRob2Q6aCgpLHBhcmFtczpiZS5sb29zZSgpLm9wdGlvbmFsKCl9KSx3ZT1nKHtfbWV0YTpoYy5vcHRpb25hbCgpfSksJGU9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6d2UubG9vc2UoKS5vcHRpb25hbCgpfSksaWU9b2Uoe19tZXRhOmhjLm9wdGlvbmFsKCl9KSxLbj1PKFtoKCksQygpLmludCgpXSksSGg9Zyh7anNvbnJwYzpmKFZyKSxpZDpLbiwuLi5zZS5zaGFwZX0pLnN0cmljdCgpLGh1PWU9PkhoLnNhZmVQYXJzZShlKS5zdWNjZXNzLEJoPWcoe2pzb25ycGM6ZihWciksLi4uJGUuc2hhcGV9KS5zdHJpY3QoKSxEYj1lPT5CaC5zYWZlUGFyc2UoZSkuc3VjY2VzcyxmYz1nKHtqc29ucnBjOmYoVnIpLGlkOktuLHJlc3VsdDppZX0pLnN0cmljdCgpLGxvPWU9PmZjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBVOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoVXx8KFU9e30pKTtjb25zdCBtYz1nKHtqc29ucnBjOmYoVnIpLGlkOktuLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpDKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpNKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksTGI9ZT0+bWMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsVWI9TyhbSGgsQmgsZmMsbWNdKTtPKFtmYyxtY10pO2NvbnN0IGdjPWllLnN0cmljdCgpLEhiPXdlLmV4dGVuZCh7cmVxdWVzdElkOktuLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSksYmM9JGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6SGJ9KSxCYj1nKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOlAoaCgpKS5vcHRpb25hbCgpLHRoZW1lOnJlKFsibGlnaHQiLCJkYXJrIl0pLm9wdGlvbmFsKCl9KSxXbj1nKHtpY29uczpQKEJiKS5vcHRpb25hbCgpfSksbXQ9Zyh7bmFtZTpoKCksdGl0bGU6aCgpLm9wdGlvbmFsKCl9KSxKcj1tdC5leHRlbmQoey4uLm10LnNoYXBlLC4uLlduLnNoYXBlLHZlcnNpb246aCgpLHdlYnNpdGVVcmw6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCl9KSxGYj1PdChnKHthcHBseURlZmF1bHRzOkQoKS5vcHRpb25hbCgpfSksUihoKCksTSgpKSksVmI9Vm4oZT0+ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MD97Zm9ybTp7fX06ZSxPdChnKHtmb3JtOkZiLm9wdGlvbmFsKCksdXJsOlEub3B0aW9uYWwoKX0pLFIoaCgpLE0oKSkub3B0aW9uYWwoKSkpLEpiPW9lKHtsaXN0OlEub3B0aW9uYWwoKSxjYW5jZWw6US5vcHRpb25hbCgpLHJlcXVlc3RzOm9lKHtzYW1wbGluZzpvZSh7Y3JlYXRlTWVzc2FnZTpRLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOm9lKHtjcmVhdGU6US5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxLYj1vZSh7bGlzdDpRLm9wdGlvbmFsKCksY2FuY2VsOlEub3B0aW9uYWwoKSxyZXF1ZXN0czpvZSh7dG9vbHM6b2Uoe2NhbGw6US5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxXYj1nKHtleHBlcmltZW50YWw6UihoKCksUSkub3B0aW9uYWwoKSxzYW1wbGluZzpnKHtjb250ZXh0OlEub3B0aW9uYWwoKSx0b29sczpRLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOlZiLm9wdGlvbmFsKCkscm9vdHM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOkpiLm9wdGlvbmFsKCksZXh0ZW5zaW9uczpSKGgoKSxRKS5vcHRpb25hbCgpfSksR2I9YmUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpXYixjbGllbnRJbmZvOkpyfSksUWI9c2UuZXh0ZW5kKHttZXRob2Q6ZigiaW5pdGlhbGl6ZSIpLHBhcmFtczpHYn0pLFliPWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxRKS5vcHRpb25hbCgpLGxvZ2dpbmc6US5vcHRpb25hbCgpLGNvbXBsZXRpb25zOlEub3B0aW9uYWwoKSxwcm9tcHRzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6Zyh7c3Vic2NyaWJlOkQoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6S2Iub3B0aW9uYWwoKSxleHRlbnNpb25zOlIoaCgpLFEpLm9wdGlvbmFsKCl9KSxYYj1pZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOlliLHNlcnZlckluZm86SnIsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksZXY9JGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczp3ZS5vcHRpb25hbCgpfSksS3I9c2UuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczpiZS5vcHRpb25hbCgpfSksdHY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOkIoQygpKSxtZXNzYWdlOkIoaCgpKX0pLG52PWcoey4uLndlLnNoYXBlLC4uLnR2LnNoYXBlLHByb2dyZXNzVG9rZW46TGh9KSx2Yz0kZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOm52fSksb3Y9YmUuZXh0ZW5kKHtjdXJzb3I6VWgub3B0aW9uYWwoKX0pLEduPXNlLmV4dGVuZCh7cGFyYW1zOm92Lm9wdGlvbmFsKCl9KSxRbj1pZS5leHRlbmQoe25leHRDdXJzb3I6VWgub3B0aW9uYWwoKX0pLHJ2PXJlKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLFluPWcoe3Rhc2tJZDpoKCksc3RhdHVzOnJ2LHR0bDpPKFtDKCkscW4oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOkIoQygpKSxzdGF0dXNNZXNzYWdlOkIoaCgpKX0pLHljPWllLmV4dGVuZCh7dGFzazpZbn0pLHN2PXdlLm1lcmdlKFluKSwkbz0kZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpzdn0pLF9jPXNlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczpiZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLGtjPWllLm1lcmdlKFluKSx3Yz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6YmUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtpZS5sb29zZSgpO2NvbnN0ICRjPUduLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLFNjPVFuLmV4dGVuZCh7dGFza3M6UChZbil9KSx6Yz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6YmUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxpdj1pZS5tZXJnZShZbiksRmg9Zyh7dXJpOmgoKSxtaW1lVHlwZTpCKGgoKSksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksVmg9RmguZXh0ZW5kKHt0ZXh0OmgoKX0pLFRjPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksSmg9RmguZXh0ZW5kKHtibG9iOlRjfSksWG49cmUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLGp0PWcoe2F1ZGllbmNlOlAoWG4pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6QWgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxLaD1nKHsuLi5tdC5zaGFwZSwuLi5Xbi5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxtaW1lVHlwZTpCKGgoKSksc2l6ZTpCKEMoKSksYW5ub3RhdGlvbnM6anQub3B0aW9uYWwoKSxfbWV0YTpCKG9lKHt9KSl9KSxhdj1nKHsuLi5tdC5zaGFwZSwuLi5Xbi5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246QihoKCkpLG1pbWVUeXBlOkIoaCgpKSxhbm5vdGF0aW9uczpqdC5vcHRpb25hbCgpLF9tZXRhOkIob2Uoe30pKX0pLGN2PUduLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxXaD1Rbi5leHRlbmQoe3Jlc291cmNlczpQKEtoKX0pLHV2PUduLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksbHY9UW4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKGF2KX0pLEljPWJlLmV4dGVuZCh7dXJpOmgoKX0pLGR2PUljLHB2PXNlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOmR2fSksR2g9aWUuZXh0ZW5kKHtjb250ZW50czpQKE8oW1ZoLEpoXSkpfSksaHY9JGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOndlLm9wdGlvbmFsKCl9KSxmdj1JYyxtdj1zZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOmZ2fSksZ3Y9SWMsYnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOmd2fSksdnY9d2UuZXh0ZW5kKHt1cmk6aCgpfSkseXY9JGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczp2dn0pLF92PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxyZXF1aXJlZDpCKEQoKSl9KSxrdj1nKHsuLi5tdC5zaGFwZSwuLi5Xbi5zaGFwZSxkZXNjcmlwdGlvbjpCKGgoKSksYXJndW1lbnRzOkIoUChfdikpLF9tZXRhOkIob2Uoe30pKX0pLHd2PUduLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksJHY9UW4uZXh0ZW5kKHtwcm9tcHRzOlAoa3YpfSksU3Y9YmUuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6UihoKCksaCgpKS5vcHRpb25hbCgpfSksenY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6U3Z9KSxQYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpqdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLHhjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOlRjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpqdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLENjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOlRjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpqdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLFR2PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6UihoKCksTSgpKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxRaD1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6TyhbVmgsSmhdKSxhbm5vdGF0aW9uczpqdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLFloPUtoLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxlbz1PKFtQYyx4YyxDYyxZaCxRaF0pLEl2PWcoe3JvbGU6WG4sY29udGVudDplb30pLFB2PWllLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChJdil9KSx4dj0kZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOndlLm9wdGlvbmFsKCl9KSxDdj1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6RCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkQoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkQoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6RCgpLm9wdGlvbmFsKCl9KSxFdj1nKHt0YXNrU3VwcG9ydDpyZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLEVjPWcoey4uLm10LnNoYXBlLC4uLlduLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpSKGgoKSxRKS5vcHRpb25hbCgpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoTSgpKSxvdXRwdXRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLFEpLm9wdGlvbmFsKCkscmVxdWlyZWQ6UChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChNKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6Q3Yub3B0aW9uYWwoKSxleGVjdXRpb246RXYub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxYaD1Hbi5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9saXN0Iil9KSxPdj1Rbi5leHRlbmQoe3Rvb2xzOlAoRWMpfSksV3I9aWUuZXh0ZW5kKHtjb250ZW50OlAoZW8pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OlIoaCgpLE0oKSkub3B0aW9uYWwoKSxpc0Vycm9yOkQoKS5vcHRpb25hbCgpfSk7V3Iub3IoaWUuZXh0ZW5kKHt0b29sUmVzdWx0Ok0oKX0pKTtjb25zdCBBdj1Kbi5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxlZj1zZS5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9jYWxsIikscGFyYW1zOkF2fSksUnY9JGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6d2Uub3B0aW9uYWwoKX0pO2coe2F1dG9SZWZyZXNoOkQoKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOkMoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IHRmPXJlKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxadj1iZS5leHRlbmQoe2xldmVsOnRmfSksTnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczpadn0pLGp2PXdlLmV4dGVuZCh7bGV2ZWw6dGYsbG9nZ2VyOmgoKS5vcHRpb25hbCgpLGRhdGE6TSgpfSksTXY9JGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOmp2fSkscXY9Zyh7bmFtZTpoKCkub3B0aW9uYWwoKX0pLER2PWcoe2hpbnRzOlAocXYpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSxMdj1nKHttb2RlOnJlKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksVXY9Zyh7dHlwZTpmKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpoKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6UChlbykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6RCgpLm9wdGlvbmFsKCksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksSHY9VW4oInR5cGUiLFtQYyx4YyxDY10pLFNvPVVuKCJ0eXBlIixbUGMseGMsQ2MsVHYsVXZdKSxCdj1nKHtyb2xlOlhuLGNvbnRlbnQ6TyhbU28sUChTbyldKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxGdj1Kbi5leHRlbmQoe21lc3NhZ2VzOlAoQnYpLG1vZGVsUHJlZmVyZW5jZXM6RHYub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6aCgpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6cmUoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpDKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6QygpLmludCgpLHN0b3BTZXF1ZW5jZXM6UChoKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6US5vcHRpb25hbCgpLHRvb2xzOlAoRWMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpMdi5vcHRpb25hbCgpfSksVnY9c2UuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpGdn0pLG5mPWllLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246QihyZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTpYbixjb250ZW50Okh2fSksb2Y9aWUuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpCKHJlKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTpYbixjb250ZW50Ok8oW1NvLFAoU28pXSl9KSxKdj1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkQoKS5vcHRpb25hbCgpfSksS3Y9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDpyZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxXdj1nKHt0eXBlOnJlKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLEd2PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLFF2PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxZdj1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksWHY9TyhbR3YsUXZdKSxleT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSx0eT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLG55PU8oW2V5LHR5XSksb3k9TyhbWXYsWHYsbnldKSxyeT1PKFtveSxKdixLdixXdl0pLHN5PUpuLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLHJ5KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksaXk9Sm4uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSxheT1PKFtzeSxpeV0pLGN5PXNlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpheX0pLHV5PXdlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxseT0kZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOnV5fSksZHk9aWUuZXh0ZW5kKHthY3Rpb246cmUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6Vm4oZT0+ZT09PW51bGw/dm9pZCAwOmUsUihoKCksTyhbaCgpLEMoKSxEKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSkscHk9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksaHk9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSxmeT1iZS5leHRlbmQoe3JlZjpPKFtoeSxweV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlIoaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxteT1zZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOmZ5fSksZ3k9aWUuZXh0ZW5kKHtjb21wbGV0aW9uOm9lKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOkIoQygpLmludCgpKSxoYXNNb3JlOkIoRCgpKX0pfSksYnk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSx2eT1zZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOmJlLm9wdGlvbmFsKCl9KSx5eT1pZS5leHRlbmQoe3Jvb3RzOlAoYnkpfSksX3k9JGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6d2Uub3B0aW9uYWwoKX0pO08oW0tyLFFiLG15LE52LHp2LHd2LGN2LHV2LHB2LG12LGJ2LGVmLFhoLF9jLHdjLCRjLHpjXSk7TyhbYmMsdmMsZXYsX3ksJG9dKTtPKFtnYyxuZixvZixkeSx5eSxrYyxTYyx5Y10pO08oW0tyLFZ2LGN5LHZ5LF9jLHdjLCRjLHpjXSk7TyhbYmMsdmMsTXYseXYsaHYsUnYseHYsJG8sbHldKTtPKFtnYyxYYixneSxQdiwkdixXaCxsdixHaCxXcixPdixrYyxTYyx5Y10pO2NsYXNzIE4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PVUuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcga3koci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBOKHQsbixvKX19Y2xhc3Mga3kgZXh0ZW5kcyBOe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihVLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gSmUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gZnUoZSl7Y29uc3Qgbj1wYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89aGIobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBtdShlLHQpe2NvbnN0IG49SWgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCB3eT02ZTQ7Y2xhc3MgJHl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoYmMsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKHZjLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihLcixuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKF9jLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IE4oVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHdjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgYTtmb3IoO2E9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoYS50eXBlPT09InJlc3BvbnNlInx8YS50eXBlPT09ImVycm9yIil7Y29uc3QgdT1hLm1lc3NhZ2UsbD11LmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxhLnR5cGU9PT0icmVzcG9uc2UiKWQodSk7ZWxzZXtjb25zdCBtPXUsYj1uZXcgTihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09YS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGEubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFpKXRocm93IG5ldyBOKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighSmUoaS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoSmUoaS5zdGF0dXMpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uYSxfbWV0YTp7Li4uYS5fbWV0YSxbS2VdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcigkYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IE4oVS5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHpjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBOKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKEplKHIuc3RhdHVzKSl0aHJvdyBuZXcgTihVLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBOKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIE4/cjpuZXcgTihVLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLE4uZnJvbUVycm9yKFUuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGkpPT57cj8uKHMsaSksbG8ocyl8fExiKHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6aHUocyk/dGhpcy5fb25yZXF1ZXN0KHMsaSk6RGIocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49Ti5mcm9tRXJyb3IoVS5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bS2VdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOlUuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGkpO2NvbnN0IGE9cWIodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLHU9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDppLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IE4oVS5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB5PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXkucmVsYXRlZFRhc2smJih5LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IHY9eS5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiB2JiZ1JiZhd2FpdCB1LnVwZGF0ZVRhc2tTdGF0dXModiwiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHkpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6dSx0YXNrUmVxdWVzdGVkVHRsOmE/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57YSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpVLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWkmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgaT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxhPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihhJiZpJiZhLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaCh1KXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxpKHUpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksbG8odCkpbyh0KTtlbHNle2NvbnN0IGk9bmV3IE4odC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oaSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKGxvKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgaT10LnJlc3VsdDtpZihpLnRhc2smJnR5cGVvZiBpLnRhc2s9PSJvYmplY3QiKXtjb25zdCBhPWkudGFzazt0eXBlb2YgYS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGEudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksbG8odCkpcih0KTtlbHNle2NvbnN0IGk9Ti5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoaSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIE4/aTpuZXcgTihVLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBpPWF3YWl0IHRoaXMucmVxdWVzdCh0LHljLG8pO2lmKGkudGFzaylzPWkudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6aS50YXNrfTtlbHNlIHRocm93IG5ldyBOKFUuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGE9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazphfSxKZShhLnN0YXR1cykpe2Euc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06YS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IE4oVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9OmEuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IE4oVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGEuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IHU9YS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLHUpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2YgTj9pOm5ldyBOKFUuSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmksdGFzazphLHJlbGF0ZWRUYXNrOnV9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09VD0+e2QoVCl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksYSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goVCl7bShUKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHk9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHkucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksYSYmKHkucGFyYW1zPXsuLi55LnBhcmFtcyx0YXNrOmF9KSx1JiYoeS5wYXJhbXM9ey4uLnkucGFyYW1zLF9tZXRhOnsuLi55LnBhcmFtcz8uX21ldGF8fHt9LFtLZV06dX19KTtjb25zdCB2PVQ9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKFQpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2godGU9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7dGV9YCkpKTtjb25zdCBWPVQgaW5zdGFuY2VvZiBOP1Q6bmV3IE4oVS5SZXF1ZXN0VGltZW91dCxTdHJpbmcoVCkpO2QoVil9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsVD0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKFQgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChUKTt0cnl7Y29uc3QgVj1JaChuLFQucmVzdWx0KTtWLnN1Y2Nlc3M/bChWLmRhdGEpOmQoVi5lcnJvcil9Y2F0Y2goVil7ZChWKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9Pnt2KG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IHc9bz8udGltZW91dD8/d3ksST0oKT0+dihOLmZyb21FcnJvcihVLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6d30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYix3LG8/Lm1heFRvdGFsVGltZW91dCxJLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBqPXU/LnRhc2tJZDtpZihqKXtjb25zdCBUPVY9Pntjb25zdCB0ZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTt0ZT90ZShWKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsVCksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKGose3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6eSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKFY9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKFYpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh5LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKFQ9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKFQpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxrYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sU2Msbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0saXYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBhPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTphLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW0tlXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYSxuKS5jYXRjaCh1PT50aGlzLl9vbmVycm9yKHUpKX0pO3JldHVybn1sZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPWZ1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGk9bXUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oaSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPWZ1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPW11KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZodShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxpPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2k/KGkobmV3IE4oVS5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgTihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgaT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoaSkscyhuZXcgTihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IE4oVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxpKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxpLG4pO2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoYSl7Y29uc3QgdT0kby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmF9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxKZShhLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxpKT0+e2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWEpdGhyb3cgbmV3IE4oVS5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihKZShhLnN0YXR1cykpdGhyb3cgbmV3IE4oVS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2Euc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGksbik7Y29uc3QgdT1hd2FpdCBvLmdldFRhc2socixuKTtpZih1KXtjb25zdCBsPSRvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6dX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLEplKHUuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIGd1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBTeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBpPW5bcl07Z3UoaSkmJmd1KHMpP25bcl09ey4uLmksLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIHp5IGV4dGVuZHMgJHl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8saT0+e2xldCBhPWkucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsYSkscy5vbkhhbmRsZXI/LihhKTtmb3IobGV0IHUgb2ZbLi4ucy5saXN0ZW5lcnNdKXUoYSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIFR5PSIyMDI2LTAxLTI2IixJeT0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIFB5e2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1VYi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PUl5JiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgeHk9TyhbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksSnQ9TyhbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLEN5PU8oW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLEV5PVIoQ3kuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksTyhbaCgpLHB0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIE95PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLEF5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxSeT1nKHtpc0Vycm9yOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIE9jPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLEFjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBaeT1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksTnk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLGp5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxNeT1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLHF5PWcoe3ZhcmlhYmxlczpFeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOk15Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxEeT1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtSKGgoKSxNKCkpO3ZhciBidT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIEx5PWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxSKGgoKSxEbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOkFjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpPYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpidS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6YnUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxVeT1nKHtleHBlcmltZW50YWw6UihoKCksUihoKCksRG4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAoSnQpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6T2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOkFjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTpKdC5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBIeT1nKHttb2RlOkp0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxCeT1PKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UChCeSkub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpYZSgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6WGUoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChPKFtRaCxZaF0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAoZW8pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpPYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOkFjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIEZ5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOldyLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSkscmY9Zyh7dG9vbEluZm86Zyh7aWQ6S24ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOkVjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOnh5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6cXkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOkp0Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChKdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOk8oW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0Ok8oW0MoKSxwdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKE8oW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOk8oW0MoKSxwdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06TyhbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLFZ5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOnJmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAoZW8pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpSKGgoKSxNKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86SnIuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOlV5LmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBKeT1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOkpyLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6THkuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6cmYuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksS3k9e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIHZ1KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oS3kpO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IHdmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5OYiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiB5dShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGk9cy5wYXRoPy5tYXAoYT0+dHlwZW9mIGE9PSJvYmplY3QiP2Eua2V5OmEpLmpvaW4oIi4iKTtyZXR1cm4gaT9gJHtpfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gV3koZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gR3koZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIFF5KGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgUmMgZXh0ZW5kcyB6eXtfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6WnksdG9vbGlucHV0cGFydGlhbDpOeSx0b29scmVzdWx0OkZ5LHRvb2xjYW5jZWxsZWQ6anksaG9zdGNvbnRleHRjaGFuZ2VkOlZ5fTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFSYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8WSh7aml0bGVzczohMH0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoS3Iscj0+KGNvbnNvbGUubG9nKCJSZWNlaXZlZCBwaW5nOiIsci5wYXJhbXMpLHt9KSksdGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdm9pZCAwKX1yZWdpc3RlckNhcGFiaWxpdGllcyh0KXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhZnRlciB0cmFuc3BvcnQgaXMgZXN0YWJsaXNoZWQiKTt0aGlzLl9jYXBhYmlsaXRpZXM9U3kodGhpcy5fY2FwYWJpbGl0aWVzLHQpfXJlZ2lzdGVyVG9vbCh0LG4sbyl7aWYodGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7bGV0IHI9dGhpcyxzPSgpPT57ci5faW5pdGlhbGl6ZWRTZW50JiZyLl9jYXBhYmlsaXRpZXMudG9vbHM/Lmxpc3RDaGFuZ2VkJiZyLnNlbmRUb29sTGlzdENoYW5nZWQoKX0saT1uLmlucHV0U2NoZW1hIT09dm9pZCAwLGE9e3RpdGxlOm4udGl0bGUsZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpuLmlucHV0U2NoZW1hLG91dHB1dFNjaGVtYTpuLm91dHB1dFNjaGVtYSxhbm5vdGF0aW9uczpuLmFubm90YXRpb25zLF9tZXRhOm4uX21ldGEsZW5hYmxlZDohMCxlbmFibGUoKXt0aGlzLmVuYWJsZWQ9ITAscygpfSxkaXNhYmxlKCl7dGhpcy5lbmFibGVkPSExLHMoKX0sdXBkYXRlKHUpe09iamVjdC5hc3NpZ24odGhpcyx1KSxzKCl9LHJlbW92ZSgpe3IuX3JlZ2lzdGVyZWRUb29sc1t0XT09PWEmJihkZWxldGUgci5fcmVnaXN0ZXJlZFRvb2xzW3RdLHMoKSl9LGhhbmRsZXI6YXN5bmModSxsKT0+e2lmKCFhLmVuYWJsZWQpdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBkaXNhYmxlZGApO2xldCBkO2lmKGkpe2xldCBtPWEuaW5wdXRTY2hlbWEsYj1tP2F3YWl0IHl1KG0sdT8/e30sYEludmFsaWQgaW5wdXQgZm9yIHRvb2wgJHt0fTogYCk6dT8/e307ZD1hd2FpdCBvKGIsbCl9ZWxzZSBkPWF3YWl0IG8obCk7cmV0dXJuIGEub3V0cHV0U2NoZW1hJiYhZC5pc0Vycm9yJiYoZC5zdHJ1Y3R1cmVkQ29udGVudD1hd2FpdCB5dShhLm91dHB1dFNjaGVtYSxkLnN0cnVjdHVyZWRDb250ZW50LGBJbnZhbGlkIG91dHB1dCBmb3IgdG9vbCAke3R9OiBgKSksZH19O3JldHVybiB0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF09YSwhdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzJiYhdGhpcy50cmFuc3BvcnQmJnRoaXMucmVnaXN0ZXJDYXBhYmlsaXRpZXMoe3Rvb2xzOntsaXN0Q2hhbmdlZDohMH19KSx0aGlzLmVuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCkscygpLGF9X3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSExO2Vuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCl7dGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWR8fCh0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMCx0aGlzLm9uY2FsbHRvb2w9YXN5bmModCxuKT0+e2xldCBvPXRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0Lm5hbWVdO2lmKCFvKXRocm93IEVycm9yKGBUb29sICR7dC5uYW1lfSBub3QgZm91bmRgKTtyZXR1cm4gby5oYW5kbGVyKHQuYXJndW1lbnRzLG4pfSx0aGlzLm9ubGlzdHRvb2xzPWFzeW5jKHQsbik9Pih7dG9vbHM6YXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModGhpcy5fcmVnaXN0ZXJlZFRvb2xzKS5maWx0ZXIoKFtvLHJdKT0+ci5lbmFibGVkKS5tYXAoYXN5bmMoW28scl0pPT57bGV0IHM9e25hbWU6byx0aXRsZTpyLnRpdGxlLGRlc2NyaXB0aW9uOnIuZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6ci5pbnB1dFNjaGVtYT9hd2FpdCB2dShyLmlucHV0U2NoZW1hLCJpbnB1dCIpOnt0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e319fTtyZXR1cm4gci5vdXRwdXRTY2hlbWEmJihzLm91dHB1dFNjaGVtYT1hd2FpdCB2dShyLm91dHB1dFNjaGVtYSwib3V0cHV0IikpLHIuYW5ub3RhdGlvbnMmJihzLmFubm90YXRpb25zPXIuYW5ub3RhdGlvbnMpLHIuX21ldGEmJihzLl9tZXRhPXIuX21ldGEpLHN9KSl9KSl9YXN5bmMgc2VuZFRvb2xMaXN0Q2hhbmdlZCh0PXt9KXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZFRvb2xMaXN0Q2hhbmdlZCIpLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIixwYXJhbXM6dH0pfWdldEhvc3RDYXBhYmlsaXRpZXMoKXtyZXR1cm4gdGhpcy5faG9zdENhcGFiaWxpdGllc31nZXRIb3N0VmVyc2lvbigpe3JldHVybiB0aGlzLl9ob3N0SW5mb31nZXRIb3N0Q29udGV4dCgpe3JldHVybiB0aGlzLl9ob3N0Q29udGV4dH1nZXQgb250b29saW5wdXQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIpfXNldCBvbnRvb2xpbnB1dCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iix0KX1nZXQgb250b29saW5wdXRwYXJ0aWFsKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIil9c2V0IG9udG9vbGlucHV0cGFydGlhbCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIsdCl9Z2V0IG9udG9vbHJlc3VsdCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIpfXNldCBvbnRvb2xyZXN1bHQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiLHQpfWdldCBvbnRvb2xjYW5jZWxsZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiKX1zZXQgb250b29sY2FuY2VsbGVkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIix0KX1nZXQgb25ob3N0Y29udGV4dGNoYW5nZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIpfXNldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix0KX1fb250ZWFyZG93bjtnZXQgb250ZWFyZG93bigpe3JldHVybiB0aGlzLl9vbnRlYXJkb3dufXNldCBvbnRlYXJkb3duKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib250ZWFyZG93biIsdGhpcy5fb250ZWFyZG93bix0KSx0aGlzLl9vbnRlYXJkb3duPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoRHksKG4sbyk9PntpZighdGhpcy5fb250ZWFyZG93bil0aHJvdyBFcnJvcigiTm8gb250ZWFyZG93biBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbnRlYXJkb3duKG4ucGFyYW1zLG8pfSl9X29uY2FsbHRvb2w7Z2V0IG9uY2FsbHRvb2woKXtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbH1zZXQgb25jYWxsdG9vbCh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9uY2FsbHRvb2wiLHRoaXMuX29uY2FsbHRvb2wsdCksdGhpcy5fb25jYWxsdG9vbD10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGVmLChuLG8pPT57aWYoIXRoaXMuX29uY2FsbHRvb2wpdGhyb3cgRXJyb3IoIk5vIG9uY2FsbHRvb2wgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbChuLnBhcmFtcyxvKX0pfV9vbmxpc3R0b29scztnZXQgb25saXN0dG9vbHMoKXtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHN9c2V0IG9ubGlzdHRvb2xzKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25saXN0dG9vbHMiLHRoaXMuX29ubGlzdHRvb2xzLHQpLHRoaXMuX29ubGlzdHRvb2xzPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoWGgsKG4sbyk9PntpZighdGhpcy5fb25saXN0dG9vbHMpdGhyb3cgRXJyb3IoIk5vIG9ubGlzdHRvb2xzIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzKG4ucGFyYW1zLG8pfSl9YXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0KXtzd2l0Y2godCl7Y2FzZSJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIjppZighdGhpcy5faG9zdENhcGFiaWxpdGllcz8uc2FtcGxpbmcpdGhyb3cgRXJyb3IoYEhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZyAocmVxdWlyZWQgZm9yICR7dH0pYCk7YnJlYWt9fWFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eSh0KXtzd2l0Y2godCl7Y2FzZSJ0b29scy9jYWxsIjpjYXNlInRvb2xzL2xpc3QiOmlmKCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMpdGhyb3cgRXJyb3IoYENsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHRvb2wgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7dH0pYCk7cmV0dXJuO2Nhc2UicGluZyI6Y2FzZSJ1aS9yZXNvdXJjZS10ZWFyZG93biI6cmV0dXJuO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYE5vIGhhbmRsZXIgZm9yIG1ldGhvZCAke3R9IHJlZ2lzdGVyZWRgKX19YXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0KXt9YXNzZXJ0VGFza0NhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrIGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXN5bmMgY2FsbFNlcnZlclRvb2wodCxuKXtpZih0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY2FsbFNlcnZlclRvb2wiKSx0eXBlb2YgdD09InN0cmluZyIpdGhyb3cgRXJyb3IoYGNhbGxTZXJ2ZXJUb29sKCkgZXhwZWN0cyBhbiBvYmplY3QgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBidXQgcmVjZWl2ZWQgYSBzdHJpbmcgKCIke3R9IikuIERpZCB5b3UgbWVhbjogY2FsbFNlcnZlclRvb2woeyBuYW1lOiAiJHt0fSIsIGFyZ3VtZW50czogeyAuLi4gfSB9KT9gKTtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRvb2xzL2NhbGwiLHBhcmFtczp0fSxXcix7b25wcm9ncmVzczooKT0+e30scmVzZXRUaW1lb3V0T25Qcm9ncmVzczohMCwuLi5ufSl9YXN5bmMgcmVhZFNlcnZlclJlc291cmNlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZWFkU2VydmVyUmVzb3VyY2UiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL3JlYWQiLHBhcmFtczp0fSxHaCxuKX1hc3luYyBsaXN0U2VydmVyUmVzb3VyY2VzKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJsaXN0U2VydmVyUmVzb3VyY2VzIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9saXN0IixwYXJhbXM6dH0sV2gsbil9YXN5bmMgY3JlYXRlU2FtcGxpbmdNZXNzYWdlKHQsbil7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNyZWF0ZVNhbXBsaW5nTWVzc2FnZSIpO2xldCBvPXQudG9vbHM/b2Y6bmY7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIixwYXJhbXM6dH0sbyxuKX1zZW5kTWVzc2FnZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZE1lc3NhZ2UiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvbWVzc2FnZSIscGFyYW1zOnR9LFJ5LG4pfXNlbmRMb2codCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvbWVzc2FnZSIscGFyYW1zOnR9KX11cGRhdGVNb2RlbENvbnRleHQodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInVwZGF0ZU1vZGVsQ29udGV4dCIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIscGFyYW1zOnR9LGdjLG4pfW9wZW5MaW5rKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJvcGVuTGluayIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9vcGVuLWxpbmsiLHBhcmFtczp0fSxPeSxuKX1zZW5kT3Blbkxpbms9dGhpcy5vcGVuTGluaztkb3dubG9hZEZpbGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImRvd25sb2FkRmlsZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9kb3dubG9hZC1maWxlIixwYXJhbXM6dH0sQXksbil9cmVxdWVzdFRlYXJkb3duKHQ9e30pe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iLHBhcmFtczp0fSl9cmVxdWVzdERpc3BsYXlNb2RlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZXF1ZXN0RGlzcGxheU1vZGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiLHBhcmFtczp0fSxIeSxuKX1zZW5kU2l6ZUNoYW5nZWQodCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIixwYXJhbXM6dH0pfXNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl7bGV0IHQ9ITEsbj0wLG89MCxyPSgpPT57dHx8KHQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dD0hMTtsZXQgaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1pLnN0eWxlLmhlaWdodDtpLnN0eWxlLmhlaWdodD0ibWF4LWNvbnRlbnQiO2xldCB1PU1hdGguY2VpbChpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7aS5zdHlsZS5oZWlnaHQ9YTtsZXQgbD1NYXRoLmNlaWwod2luZG93LmlubmVyV2lkdGgpOyhsIT09bnx8dSE9PW8pJiYobj1sLG89dSx0aGlzLnNlbmRTaXplQ2hhbmdlZCh7d2lkdGg6bCxoZWlnaHQ6dX0pKX0pKX07cigpO2xldCBzPW5ldyBSZXNpemVPYnNlcnZlcihyKTtyZXR1cm4gcy5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5vYnNlcnZlKGRvY3VtZW50LmJvZHkpLCgpPT5zLmRpc2Nvbm5lY3QoKX1hc3luYyBjb25uZWN0KHQ9bmV3IFB5KHdpbmRvdy5wYXJlbnQsd2luZG93LnBhcmVudCksbil7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkFwcCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIGFnYWluLiIpO3RoaXMuX2luaXRpYWxpemVkU2VudD0hMSxhd2FpdCBzdXBlci5jb25uZWN0KHQpO3RyeXtsZXQgbz1hd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvaW5pdGlhbGl6ZSIscGFyYW1zOnthcHBDYXBhYmlsaXRpZXM6dGhpcy5fY2FwYWJpbGl0aWVzLGFwcEluZm86dGhpcy5fYXBwSW5mbyxwcm90b2NvbFZlcnNpb246VHl9fSxKeSxuKTtpZihvPT09dm9pZCAwKXRocm93IEVycm9yKGBTZXJ2ZXIgc2VudCBpbnZhbGlkIGluaXRpYWxpemUgcmVzdWx0OiAke299YCk7dGhpcy5faG9zdENhcGFiaWxpdGllcz1vLmhvc3RDYXBhYmlsaXRpZXMsdGhpcy5faG9zdEluZm89by5ob3N0SW5mbyx0aGlzLl9ob3N0Q29udGV4dD1vLmhvc3RDb250ZXh0LGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQifSksdGhpcy5faW5pdGlhbGl6ZWRTZW50PSEwLHRoaXMub3B0aW9ucz8uYXV0b1Jlc2l6ZSYmdGhpcy5zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpfWNhdGNoKG8pe3Rocm93IHRoaXMuY2xvc2UoKSxvfX19bGV0IF91PSIiO2NvbnN0IHNmPShlLHQsbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT57aWYoIWUpcmV0dXJuOyhlLnRoZW1lPT09ImxpZ2h0Inx8ZS50aGVtZT09PSJkYXJrIikmJnQuYXBwbHlEb2N1bWVudFRoZW1lKGUudGhlbWUpO2NvbnN0IG89ZS5zdHlsZXM/LnZhcmlhYmxlcztvJiZ0eXBlb2Ygbz09Im9iamVjdCImJnQuYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXMobyk7Y29uc3Qgcj1lLnN0eWxlcz8uY3NzPy5mb250czt0eXBlb2Ygcj09InN0cmluZyImJnImJnIhPT1fdSYmKHQuYXBwbHlIb3N0Rm9udHMociksX3U9cik7Y29uc3Qgcz1lLnNhZmVBcmVhSW5zZXRzO2lmKHMpZm9yKGNvbnN0IGkgb2ZbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdKXtjb25zdCBhPU51bWJlcihzW2ldPz8wKTtuLnN0eWxlLnNldFByb3BlcnR5KGAtLWluc2V0LSR7aX1gLGAke051bWJlci5pc0Zpbml0ZShhKSYmYT4wP2E6MH1weGApfX0sTmU9bmV3IFJjKHtuYW1lOiJob3RlbC1zdG9yZWZyb250Iix2ZXJzaW9uOiIxLjAuMCJ9LHtvcGVuTGlua3M6e319KSxhZj17YXBwbHlEb2N1bWVudFRoZW1lOld5LGFwcGx5SG9zdFN0eWxlVmFyaWFibGVzOkd5LGFwcGx5SG9zdEZvbnRzOlF5fSxoZT1lPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxjPWU9PlN0cmluZyhlPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLHQ9PnQ9PT0iJiI/IiZhbXA7Ijp0PT09IjwiPyImbHQ7Ijp0PT09Ij4iPyImZ3Q7Ijp0PT09JyInPyImcXVvdDsiOiImIzM5OyIpO2xldCBhdD0iIixvcz0iIixjZj17fSx1Zj0hMSxsZj0iIixTPXtjaGVja0luOiIiLGNoZWNrT3V0OiIiLGd1ZXN0czoyfSxHPTE7Y29uc3Qga3U9NTtsZXQgZWU9bnVsbCxndD1bXSxXZT0iIix4ZT1bXSxGPW51bGwsem89MDtjb25zdCBZeT1uZXcgU2V0KFsiZm9yZ2V0UHJlZmVyZW5jZXMiLCJhZGRUb1RyaXAiLCJjbGVhclRyaXAiLCJyZXF1ZXN0Qm9va2luZyIsImNhbmNlbEJvb2tpbmciLCJjaGFuZ2VCb29raW5nIiwic2lnbkluIiwic2lnbk91dCJdKSx3dT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO3JldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP2Bob3RlbDoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGV4dHJhczpib29raW5nOiR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgZXh0cmFzOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzInx8dD09PSJwb2xpY3ktbWlzc2luZyI/YHBvbGljeToke2UuaG90ZWw/LmlkPz8iIn06JHtlLnRvcGljPz8iIn1gOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciP2BjYW5jZWw6JHtlLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJjaGFuZ2UtcHJldmlldyI/YGNoYW5nZToke2UuY29uZmlybWF0aW9uQ29kZT8/ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iZGVzdGluYXRpb25zIj9gZGVzdGluYXRpb25zOiR7ZS5zY29wZT8ubmFtZT8/IiJ9YDp0PT09ImhvdGVscyJ8fHQ9PT0ibm8taG90ZWxzIj9gaG90ZWxzOiR7ZS5hc2s/LmNpdHk/PyIifToke2UuYXNrPy5xdWVyeT8/ZS5xdWVyeT8/IiJ9YDp0fSxobz1lPT57IUZ8fGVfLmhhcyhTdHJpbmcoRi52aWV3KSl8fHd1KGUpIT09d3UoRikmJih4ZT1bLi4ueGUse3BheWxvYWQ6RixsYWJlbDp0XyhGKSx2ZXJzaW9uOnpvfV0uc2xpY2UoLTYpKX0sWHk9ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKSxuPWU/LnN0YXk/LmNoZWNrSW4/e2NoZWNrSW46ZS5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6ZS5zdGF5LmNoZWNrT3V0LGd1ZXN0czplLnN0YXkuZ3Vlc3RzPz8yfTp7fTtpZih0PT09InRyaXAiKXJldHVybntrZXk6InZpZXdUcmlwIixhcmdzOnt9fTtpZih0PT09ImJvb2tpbmdzIilyZXR1cm57a2V5OiJsaXN0Qm9va2luZ3MiLGFyZ3M6e319O2lmKCh0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyIpJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJnZXRIb3RlbCIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5uLC4uLmUucm9vbXNfd2FudGVkP3tyb29tczplLnJvb21zX3dhbnRlZH06e319fTtpZih0PT09ImV4dHJhcyImJmUuZm9yQm9va2luZylyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntib29raW5nOmUuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfX07aWYodD09PSJleHRyYXMiJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm59fTtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJue2tleToiaXRpbmVyYXJ5IixhcmdzOnt0aXRsZTplLnRpdGxlLC4uLm4sZGF5czooZS5kYXlzPz9bXSkubWFwKG89Pih7bGFiZWw6by5sYWJlbCwuLi5vLm5vdGU/e25vdGU6by5ub3RlfTp7fSxpdGVtczooby5pdGVtcz8/W10pLm1hcChyPT5yLmlkKX0pKX19fSwkdT1lPT57eGU9eGUuZmlsdGVyKHQ9PiFlLmluY2x1ZGVzKFN0cmluZyh0LnBheWxvYWQ/LnZpZXcpKSl9LGVfPW5ldyBTZXQoWyJmaW5kLWJvb2tpbmciLCJib29raW5nIiwiY2FuY2VsbGVkIiwiY2hhbmdlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0IiwibWVtYmVyLXNpZ24taW4iXSksdF89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJuby1ob3RlbHMiKXJldHVybiJ0aGUgc2VhcmNoIjtpZih0PT09ImRlc3RpbmF0aW9ucyIpcmV0dXJuIGUuc2NvcGU/Lm5hbWU/U3RyaW5nKGUuc2NvcGUubmFtZSk6ImFsbCBkZXN0aW5hdGlvbnMiO2lmKHQ9PT0iaG90ZWxzIil7aWYoZS5hc2s/LmNpdHkpcmV0dXJuIFN0cmluZyhlLmFzay5jaXR5KTtjb25zdCBuPVsuLi5uZXcgU2V0KChlLmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby5jaXR5KSkpXTtyZXR1cm4gbi5sZW5ndGg9PT0xP1N0cmluZyhuWzBdKTpgJHtlLnRvdGFsPz8wfSBob3RlbHNgfXJldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIik6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/InRoZSBjYW5jZWxsYXRpb24iOnQ9PT0iY2hhbmdlLXByZXZpZXciPyJ0aGUgY2hhbmdlIjp0PT09Im1lbWJlciI/InlvdXIgbWVtYmVyc2hpcCI6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gYWRkLW9ucyBmb3IgJHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmAke1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIil9IGFkZC1vbnNgOnQ9PT0idHJpcCI/InRoZSB0cmlwIjp0PT09ImJvb2tpbmdzIj8ieW91ciBib29raW5ncyI6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzIj8idGhlIHBvbGljaWVzIjoiYmFjayJ9LG5fPSgpPT57Y29uc3QgZT1oZSgiYmFja2J0biIpLHQ9eGUuYXQoLTEpO2UuaGlkZGVuPSF0LHQmJihlLnRleHRDb250ZW50PWDigLkgJHt0LmxhYmVsfWApfTtsZXQgTHQ9IiIsYnM9IiIsS3Q9MCxaYz0hMTtjb25zdCBkZj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKGJzPXQudHJpcElkKSxLdD1OdW1iZXIodC5jb3VudD8/MCksQXJyYXkuaXNBcnJheSh0LmxpbmVzKSYmKGd0PXQubGluZXMsWmM9ITApKX0sb189ZT0+YnM/ey4uLmUsdHJpcDpic306ZSxyXz1lPT5jZltlXT8/IiI7bGV0IHRvPSExO2NvbnN0IFN1PWU9Pnt0bz1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfTtsZXQgVG89MCx2cz0iIjtjb25zdCBxPShlLHQ9e30sbj17fSk9Pntjb25zdCBvPXJfKGUpO2lmKCFvKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYG5vIHRvb2wgZm9yICR7ZX1gKSk7aWYodG8pcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtTdSghMCk7Y29uc3Qgcj1UbztyZXR1cm4gTmUuY2FsbFNlcnZlclRvb2woe25hbWU6byxhcmd1bWVudHM6b18odCl9KS5maW5hbGx5KCgpPT5TdSghMSkpLnRoZW4ocz0+e2RmKHM/Ll9tZXRhKTtjb25zdCBpPXM/LnN0cnVjdHVyZWRDb250ZW50LGE9aSYmbi5mb2xkP24uZm9sZChpKTppO3ZzPWk/SlNPTi5zdHJpbmdpZnkoaSk6IiI7Y29uc3QgdT1ZeS5oYXMoZSkmJmEmJmEudmlldyE9PSJlcnJvciI7cmV0dXJuIHI9PT1UbyYmYT8obi5wdXNoIT09ITEmJmhvKGEpLHUmJih6bys9MSksYS52aWV3PT09ImJvb2tpbmciJiYoJHUoWyJ0cmlwIiwibmVlZHMtZGF0ZXMiLCJuZWVkcy1ndWVzdCJdKSxQZT1udWxsKSwoYS52aWV3PT09ImNhbmNlbGxlZCJ8fGEudmlldz09PSJjaGFuZ2VkIikmJiR1KFsiY2FuY2VsbGF0aW9uLXByZXZpZXciLCJjaGFuZ2UtcHJldmlldyJdKSxHZShhKSk6dSYmKHpvKz0xKSxzXyhzKSxzfSl9LHNfPWU9Pntjb25zdCB0PShlPy5jb250ZW50Pz9bXSkuZmluZChuPT5uPy50eXBlPT09InRleHQiKT8udGV4dDshdHx8IU5lLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8udXBkYXRlTW9kZWxDb250ZXh0fHxOZS51cGRhdGVNb2RlbENvbnRleHQoe2NvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OlN0cmluZyh0KX1dfSkuY2F0Y2goKCk9Pnt9KX0sbm89ZT0+e2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0xKXQ9KHQqMzErZS5jaGFyQ29kZUF0KG4pKSUzNjA7cmV0dXJuYC0tc2hvdC1hOmhzbCgke3R9IDQyJSAzNCUpOy0tc2hvdC1iOmhzbCgkeyh0KzM4KSUzNjB9IDQ2JSAyMiUpYH0sb289ZT0+ZS5yZXBsYWNlKC9bXlxwe0x9XHB7Tn0gXS9ndSwiICIpLnNwbGl0KC9ccysvKS5maWx0ZXIoQm9vbGVhbikuc2xpY2UoMCwyKS5tYXAodD0+dFswXT8udG9VcHBlckNhc2UoKT8/IiIpLmpvaW4oIiIpLGlfPSc8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiBmaWxsPSJjdXJyZW50Q29sb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTIgMy41bDIuNiA1LjMgNS45LjktNC4zIDQuMSAxIDUuOEwxMiAxNi45IDYuOCAxOS42bDEtNS44TDMuNSA5LjdsNS45LS45eiIvPjwvc3ZnPicsYV89ZT0+ZSYmdHlwZW9mIGUudmFsdWU9PSJudW1iZXIiP2A8c3BhbiBjbGFzcz0icmF0ZSI+JHtpX30ke2MoZS52YWx1ZSl9PHNwYW4gY2xhc3M9InQtZnJvbSI+PHNtYWxsPiDCtyAke2MoZS5jb3VudCl9PC9zbWFsbD48L3NwYW4+PC9zcGFuPmA6IiIsWD0oKT0+dWY/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtjKGxmfHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsV3Q9ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LHlzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxGZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtXdChlLmNoZWNrSW4pfSDigJMgJHtXdChlLmNoZWNrT3V0KX0gwrcgJHt5cyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7eXMoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsY189KGUsdCxuKT0+e2NvbnN0IG89Z3QuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LHVfPShlLHQpPT57Y29uc3Qgbj1ndC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sSW89KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7YyhuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7YyhuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Mobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAscGY9KGUsdCk9Pntjb25zdCBuPXR8fE5jKCk7cmV0dXJuKCFTLmNoZWNrSW58fFMuY2hlY2tJbjxuKSYmKFMuY2hlY2tJbj1uKSwoIVMuY2hlY2tPdXR8fFMuY2hlY2tPdXQ8PVMuY2hlY2tJbikmJihTLmNoZWNrT3V0PVVlKFMuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7YyhTLmNoZWNrSW4pfSIgbWluPSIke2Mobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2MoUy5jaGVja091dCl9IiBtaW49IiR7YyhVZShTLmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxsYWJlbCBjbGFzcz0iZ3Vlc3RzIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2MoRyl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9sYWJlbD4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7YyhHcigpKX08L3NwYW4+CiAgPC9kaXY+YH0sR3I9KCk9Pntjb25zdCBlPVMuY2hlY2tJbiYmUy5jaGVja091dD95cyhTLmNoZWNrSW4sUy5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPUc+MT9gJHtHfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sVWU9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxOYz0oKT0+bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLGxfPWU9Pntjb25zdCB0PU5jKCk7KCFTLmNoZWNrSW58fFMuY2hlY2tJbjx0KSYmKFMuY2hlY2tJbj10KSwoIVMuY2hlY2tPdXR8fFMuY2hlY2tPdXQ8PVMuY2hlY2tJbikmJihTLmNoZWNrT3V0PVVlKFMuY2hlY2tJbiwxKSk7Y29uc3Qgbj1gPGRpdiBjbGFzcz0ic2VhcmNoIj4KICAgICAgPGxhYmVsIGNsYXNzPSJ3aGVyZSI+V2hlcmUgdG88aW5wdXQgaWQ9IndoZXJlIiB0eXBlPSJzZWFyY2giIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbCIgYXJpYS1sYWJlbD0iV2hlcmUgdG8iPjwvbGFiZWw+CiAgICAgIDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHtjKFMuY2hlY2tJbil9IiBtaW49IiR7Yyh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHtjKFMuY2hlY2tPdXQpfSIgbWluPSIke2MoVWUoUy5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsIGNsYXNzPSJndWVzdHMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhHKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2xhYmVsPgogICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kIj5TZWFyY2g8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLG89cz0+YDxkaXYgY2xhc3M9InBsYWNlcyI+JHtzLm1hcCgoaSxhKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKGkubmFtZSl9IiR7YT49Y3Q/IiBoaWRkZW4iOiIifT4ke2MoaS5uYW1lKX0gPHNtYWxsPiR7YyhpLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfSR7cy5sZW5ndGg+Y3Q/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHtzLmxlbmd0aC1jdH0gbW9yZTwvYnV0dG9uPmA6IiJ9PC9kaXY+YCxyPWUuc2NvcGU7cmV0dXJuIHI/W1goKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLnRvdGFsKX0gJHtjKGUudm9jYWI/Lm5vdW5QbHVyYWw/PyJob3RlbHMiKX0gaW4gJHtjKChyLmNpdGllcz8/W10pLmxlbmd0aCl9IGNpdGllczwvZGl2PjwvZGl2PmAsbyhyLmNpdGllcz8/W10pLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlLWFsbD0iJHtjKHIubmFtZSl9Ij5BbGwgJHtjKGUudG90YWwpfSBpbiAke2Moci5uYW1lKX08L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTpbWCgpLG4sLi4uKGUucmVnaW9ucz8/W10pLm1hcChzPT5gCiAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7YyhzLm5hbWUpfSA8c21hbGw+JHtjKHMuY291bnQpfTwvc21hbGw+PC9kaXY+CiAgICAgICAgJHsocy5jb3VudHJpZXM/P1tdKS5tYXAoaT0+e2NvbnN0IGE9aS5jaXRpZXM/P1tdLHU9YS5sZW5ndGg9PT0xP2FbMF06dm9pZCAwO3JldHVybmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc3QiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0LWNvdW50cnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKGkubmFtZSl9Ij4ke2MoaS5uYW1lKX0ke3UmJnUubmFtZSE9PWkubmFtZT9gPHNtYWxsPiDCtyAke2ModS5uYW1lKX08L3NtYWxsPmA6IiJ9IDxzbWFsbCBjbGFzcz0ibiI+JHtjKGkuY291bnQpfTwvc21hbGw+PC9idXR0b24+CiAgICAgICAgICAgICR7YS5sZW5ndGg+MT9vKGEpOiIifQogICAgICAgICAgPC9kaXY+YH0pLmpvaW4oIiIpfQogICAgICA8L2Rpdj5gKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYWxsLWhvdGVscyI+QnJvd3NlIGFsbCAke2MoZS50b3RhbCl9PC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5GaW5kIGEgYm9va2luZzwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxjdD04LGRfPWU9Pntjb25zdCB0PWUuZm9yU3RheTtyZXR1cm4gdD9gPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtjKHQudG90YWwpfTxzbWFsbCBjbGFzcz0idC1zdWIiPiR7TnVtYmVyKHQucm9vbXMpPjE/YCR7Yyh0LnJvb21zKX0gcm9vbXMgw5cgYDoiIn0ke2ModC5uaWdodHMpfSAke051bWJlcih0Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IMK3IHRheGVzIGluPC9zbWFsbD48L3NwYW4+YDplLm5vUm9vbXNGb3JTdGF5Pyc8c3BhbiBjbGFzcz0idC1mcm9tIHQtbm9uZSI+Tm8gcm9vbSBmb3IgdGhlc2UgZGF0ZXM8L3NwYW4+JzpgPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtlLmZyb21OaWdodGx5P2Ake2MoZS5mcm9tTmlnaHRseSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvc3Bhbj5gfSxwXz1lPT57Y29uc3QgdD1lLmZvclN0YXk7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj1bdC5mcmVlQ2FuY2VsbGF0aW9uPyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb248L3NwYW4+JzoiIixOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7Yyh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIl0uZmlsdGVyKEJvb2xlYW4pO3JldHVybiBuLmxlbmd0aD9gPHNwYW4gY2xhc3M9InQtdGFncyI+JHtuLmpvaW4oIiIpfTwvc3Bhbj5gOiIifSxVdD0oKT0+Uy5jaGVja0luJiZTLmNoZWNrT3V0P3tjaGVja0luOlMuY2hlY2tJbixjaGVja091dDpTLmNoZWNrT3V0LGd1ZXN0czpTLmd1ZXN0cywuLi5HPjE/e3Jvb21zOkd9Ont9fTp7fSxoXz1lPT57Y29uc3R7Y2hlY2tJbjp0LGNoZWNrT3V0Om4sZ3Vlc3RzOm8scm9vbXM6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sZl89ZT0+e2NvbnN0IHQ9TmMoKTtyZXR1cm4oIVMuY2hlY2tJbnx8Uy5jaGVja0luPHQpJiYoUy5jaGVja0luPXQpLCghUy5jaGVja091dHx8Uy5jaGVja091dDw9Uy5jaGVja0luKSYmKFMuY2hlY2tPdXQ9VWUoUy5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjaSIgdmFsdWU9IiR7YyhTLmNoZWNrSW4pfSIgbWluPSIke2ModCl9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibGNvIiB2YWx1ZT0iJHtjKFMuY2hlY2tPdXQpfSIgbWluPSIke2MoVWUoUy5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICA8bGFiZWwgY2xhc3M9Imd1ZXN0cyI+Um9vbXMKICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9Im4iIGlkPSJscm4iPiR7YyhHKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtbGlzdC1yb29tcz0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2xhYmVsPgogICAgJHtlP2A8c3BhbiBjbGFzcz0ibmlnaHRzIj4ke2MoR3IoKSl9PC9zcGFuPmA6JzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwcmljZS1saXN0Ij5TaG93IHByaWNlczwvYnV0dG9uPid9CiAgPC9kaXY+YH07bGV0IFRlPSIiO2NvbnN0IGZvPWU9Pntjb25zdCB0PWU/P3t9O3JldHVybnsuLi50LmJyYW5kP3ticmFuZDp0LmJyYW5kfTp7fSwuLi5BcnJheS5pc0FycmF5KHQuZmFjaWxpdGllcykmJnQuZmFjaWxpdGllcy5sZW5ndGg/e2ZhY2lsaXRpZXM6dC5mYWNpbGl0aWVzfTp7fSwuLi50LmZyZWVDYW5jZWxsYXRpb24/e2ZyZWVDYW5jZWxsYXRpb246ITB9Ont9LC4uLnQuYnJlYWtmYXN0P3ticmVha2Zhc3Q6ITB9Ont9fX0senU9ZT0+e2NvbnN0e2JyYW5kOnQsZmFjaWxpdGllczpuLGZyZWVDYW5jZWxsYXRpb246byxicmVha2Zhc3Q6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sbV89ZT0+e2NvbnN0IHQ9Zm8oZSk7cmV0dXJuKHQuYnJhbmQ/MTowKSsodC5mYWNpbGl0aWVzPy5sZW5ndGg/PzApKyh0LmZyZWVDYW5jZWxsYXRpb24/MTowKSsodC5icmVha2Zhc3Q/MTowKX0sZ189ZT0+e2NvbnN0IHQ9ZS5yZWZpbmU7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj0ocixzLGksYSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXI9IiR7YyhyKX0iIGFyaWEtcHJlc3NlZD0iJHthPyJ0cnVlIjoiZmFsc2UifSI+JHtjKHMpfSA8c21hbGw+JHtjKGkpfTwvc21hbGw+PC9idXR0b24+YCxvPShyLHMpPT5zLmxlbmd0aD9gPGRpdiBjbGFzcz0iZmdyb3VwIj48c3BhbiBjbGFzcz0ic29ydHMtayI+JHtjKHIpfTwvc3Bhbj4ke3Muam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bbygiQnJhbmQiLCh0LmJyYW5kcz8/W10pLm1hcChyPT5uKGBicmFuZDoke3IubmFtZX1gLHIubmFtZSxyLmNvdW50LHIub24pKSksbygiSGFzIiwodC5mYWNpbGl0aWVzPz9bXSkubWFwKHI9Pm4oYGZhY2lsaXR5OiR7ci5rZXl9YCxyLmxhYmVsLHIuY291bnQsci5vbikpKSxvKCJSb29tIiwodC5yb29tPz9bXSkubWFwKHI9Pm4oci5rZXksci5sYWJlbCxyLmNvdW50LHIub24pKSldLmpvaW4oIiIpfSxiXz0oZSx0KT0+e2NvbnN0IG49cj0+TnVtYmVyKHIuc2xpY2UoOCwxMCkpLG89cj0+bmV3IERhdGUoYCR7cn1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse21vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KTtyZXR1cm4gbyhlKT09PW8odCk/YCR7bihlKX3igJMke24odCl9ICR7byh0KX1gOmAke24oZSl9ICR7byhlKX0g4oCTICR7bih0KX0gJHtvKHQpfWB9LGhmPShlLHQsbik9Pntjb25zdCBvPSEhZS5zdGF5Py5jaGVja0luLHI9bV8oZS5hc2spLHM9Z18oZSksaT1mZi5maW5kKChbbF0pPT5sPT09bik/LlsxXT8/IkRlZmF1bHQiLGE9bz9gJHtiXyhlLnN0YXkuY2hlY2tJbixlLnN0YXkuY2hlY2tPdXQpfSR7Rz4xP2AgwrcgJHtHfSByb29tc2A6IiJ9YDoiQWRkIGRhdGVzIix1PShsLGQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSB0b29sIiB0eXBlPSJidXR0b24iIGRhdGEtcGFuZWw9IiR7bH0iIGFyaWEtZXhwYW5kZWQ9IiR7VGU9PT1sPyJ0cnVlIjoiZmFsc2UifSI+JHtkfTwvYnV0dG9uPmA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icGxhY2VzIHRvb2xiYXIiPgogICAgICAke3UoImRhdGVzIixjKGEpKX0KICAgICAgJHt0P3UoInNvcnQiLG49PT0iZ3JvdXAiPyJTb3J0IjpjKGkpKToiIn0KICAgICAgJHtzfHxyP3UoImZpbHRlcnMiLGBGaWx0ZXJzJHtyP2AgwrcgJHtyfWA6IiJ9YCk6IiJ9CiAgICAgICR7cj8nPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImNsZWFyLWZpbHRlcnMiPkNsZWFyPC9idXR0b24+JzoiIn0KICAgIDwvZGl2PgogICAgPGRpdiBkYXRhLXBhbmVsLWJvZHk9ImRhdGVzIiR7VGU9PT0iZGF0ZXMiPyIiOiIgaGlkZGVuIn0+JHtmXyhvKX08L2Rpdj4KICAgICR7dD9gPGRpdiBjbGFzcz0iZmlsdGVyLXBhbmVsIiBkYXRhLXBhbmVsLWJvZHk9InNvcnQiJHtUZT09PSJzb3J0Ij8iIjoiIGhpZGRlbiJ9PiR7dH08L2Rpdj5gOiIifQogICAgJHtzP2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0iZmlsdGVycyIke1RlPT09ImZpbHRlcnMiPyIiOiIgaGlkZGVuIn0+JHtzfTwvZGl2PmA6IiJ9YH0sZmY9W1siZ3JvdXAiLCJEZWZhdWx0Il0sWyJwcmljZS1sb3ciLCJMb3dlc3QgcHJpY2UiXSxbInByaWNlLWhpZ2giLCJIaWdoZXN0IHByaWNlIl0sWyJyYXRpbmciLCJSYXRpbmciXV0sdl89ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAodj0+U3RyaW5nKHYuY2l0eSkpKV0sbz12PT57Y29uc3Qgdz10LmZpbmQoST0+SS5jaXR5PT09dik/LmNvdW50cnk7cmV0dXJuIHcmJiFTdHJpbmcodykuc3RhcnRzV2l0aCh2KT9TdHJpbmcodyk6IiJ9LHI9Wy4uLm5ldyBTZXQodC5tYXAodj0+U3RyaW5nKHYuY291bnRyeT8/IiIpKSldLHM9ci5sZW5ndGg+MSxpPXY9PmAKICAgIDxkaXYgY2xhc3M9ImNpdHlncm91cCI+CiAgICAgICR7bi5sZW5ndGg+MT9gPGRpdiBjbGFzcz0iY2l0eW5hbWUiPiR7Yyh2KX0keyFzJiZvKHYpP2A8c21hbGw+IMK3ICR7YyhvKHYpKX08L3NtYWxsPmA6IiJ9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0idGlsZXMiPgogICAgICAgICR7dC5maWx0ZXIodz0+dy5jaXR5PT09dikubWFwKHc9PmAKICAgICAgICAgIDxidXR0b24gY2xhc3M9InRpbGUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHcuaWQpfSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXNob3QiIHN0eWxlPSIke25vKFN0cmluZyh3LmlkKSl9Ij4KICAgICAgICAgICAgICAke3cuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Mody5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2Mob28oU3RyaW5nKHcubmFtZSkpKX08L3NwYW4+CiAgICAgICAgICAgICAgJHt3LmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKHcuYnJhbmQpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7Yyh3Lm5hbWUpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHtjKG4ubGVuZ3RoPjE/dy5hcmVhPz93LmNpdHk6W3cuYXJlYSx3LmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgICAgICR7ZF8odyl9CiAgICAgICAgICAgICAgICAke2FfKHcucmF0aW5nKX0KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgJHtwXyh3KX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxhPU51bWJlcihlLnRvdGFsPz90Lmxlbmd0aCksdT1hLXQubGVuZ3RoLGw9ZS5wbGFjZXM/P1tdO2UuYXNrPy5jaXR5O2NvbnN0IGQ9bC5sZW5ndGg/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2wubWFwKCh2LHcpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2Modi5wbGFjZSl9IiR7dz49Y3Q/IiBoaWRkZW4iOiIifT4ke2Modi5sYWJlbCl9IDxzbWFsbD4ke2Modi5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke2wubGVuZ3RoPmN0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7bC5sZW5ndGgtY3R9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiLG09U3RyaW5nKGUuc29ydD8/Imdyb3VwIiksYj0hKChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MSkseT10Lmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJPcmRlciI+JHtmZi5maWx0ZXIoKFt2XSk9PmJ8fCF2LnN0YXJ0c1dpdGgoInByaWNlIikpLm1hcCgoW3Ysd10pPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtc29ydD0iJHt2fSIgYXJpYS1wcmVzc2VkPSIke3Y9PT1tPyJ0cnVlIjoiZmFsc2UifSI+JHt3fTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW1goKSxkLGhmKGUseSxtKSxlLndpZGVuZWQ/YDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIG1hdGNoZWQgJHtjKGUud2lkZW5lZC5mcm9tKX0uIFRoZXNlIGFyZSAke2MoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIixgPGRpdj4ke3M/ci5tYXAodj0+YDxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj4ke2Modil9PC9kaXY+JHtuLmZpbHRlcih3PT50LnNvbWUoST0+SS5jaXR5PT09dyYmU3RyaW5nKEkuY291bnRyeT8/IiIpPT09dikpLm1hcChpKS5qb2luKCIiKX1gKS5qb2luKCIiKTpuLm1hcChpKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIix1PjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt0Lmxlbmd0aH0gb2YgJHthfS48L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMjAsdSl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKX0seV89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXTtyZXR1cm4gZS5iZWZvcmVGaWx0ZXJzPyhUZT0iZmlsdGVycyIsW1goKSxgPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vbmUgb2YgdGhlICR7YyhlLmJlZm9yZUZpbHRlcnMpfSBoZXJlIGhhcyBhbGwgb2YgdGhvc2UgdG9nZXRoZXIuPC9kaXY+YCxoZihlLCIiLFN0cmluZyhlLmFzaz8uc29ydD8/Imdyb3VwIikpXS5qb2luKCIiKSk6dC5sZW5ndGg/W1goKSxgPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgY2FtZSBpbiB1bmRlciB0aGUgcHJpY2UgY2VpbGluZy4gJHtjKHQubGVuZ3RoPT09MT8iVGhlIG5lYXJlc3QgaXMiOiJUaGUgbmVhcmVzdCBhcmUiKX0gb3ZlciBpdC48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ0aWxlcyI+JHt0Lm1hcChuPT5gCiAgICAgIDxidXR0b24gY2xhc3M9InRpbGUgb3ZlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Mobi5pZCl9Ij4KICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtubyhTdHJpbmcobi5pZCkpfSI+CiAgICAgICAgICAke24uaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Mobi5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhvbyhTdHJpbmcobi5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2Mobi5uYW1lKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHtjKFtuLmFyZWEsbi5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtuLmZyb21OaWdodGx5P2Ake2Mobi5mcm9tTmlnaHRseSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIHdhcm4iPk92ZXI8L3NwYW4+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKTpgPGRpdiBjbGFzcz0iZW1wdHkiPk5vdGhpbmcgbWF0Y2hlZCR7ZS5xdWVyeT9gICIke2MoZS5xdWVyeSl9ImA6IiJ9LiBUcnkgYSBjaXR5LjwvZGl2PmB9LG1mPWU9PmAKICA8ZGl2IGNsYXNzPSJoZXJvIiBzdHlsZT0iJHtubyhTdHJpbmcoZS5pZCkpfSI+CiAgICAke2UuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2MoZS5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhvbyhTdHJpbmcoZS5uYW1lKSkpfTwvc3Bhbj4KICAgICR7ZS5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7YyhlLmJyYW5kKX08L3NwYW4+YDoiIn0KICA8L2Rpdj4KICA8ZGl2PgogICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS5uYW1lKX08L2Rpdj4KICAgIDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhbZS5hcmVhLGUuY2l0eSxTdHJpbmcoZS5jb3VudHJ5Pz8iIikuc3RhcnRzV2l0aChTdHJpbmcoZS5jaXR5KSk/IiI6ZS5jb3VudHJ5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX0ke2UucmF0aW5nP2AgwrcgJHtjKGUucmF0aW5nLnZhbHVlKX3imIUgKCR7YyhlLnJhdGluZy5jb3VudCl9KWA6IiJ9PC9kaXY+CiAgPC9kaXY+CiAgJHtlLnN1bW1hcnk/YDxkaXYgY2xhc3M9Imgtc3VtIj4ke2MoZS5zdW1tYXJ5KX08L2Rpdj5gOiIifQogICR7KGUuYW1lbml0aWVzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJjaGlwcyI+JHtlLmFtZW5pdGllcy5zbGljZSgwLDgpLm1hcCh0PT5gPHNwYW4gY2xhc3M9ImNoaXAiPiR7Yyh0KX08L3NwYW4+YCkuam9pbigiIil9PC9kaXY+YDoiIn1gLF9fPShlLHQsbik9Pntjb25zdCBvPWNfKFN0cmluZyhlLmlkKSxTdHJpbmcodC5pZCksbikscj1bdC5iZWRzLHQudmlldyxgU2xlZXBzICR7dC5zbGVlcHN9YCx0LnNpemVTcW0/YCR7dC5zaXplU3FtfW3CsmA6IiJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93IHdpdGh0aHVtYiI+CiAgICAgIDxzcGFuIGNsYXNzPSJ0aHVtYiIgc3R5bGU9IiR7bm8oYCR7ZS5pZH06JHt0LmlkfWApfSI+CiAgICAgICAgJHt0LmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKHQuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6YyhvbyhTdHJpbmcodC5uYW1lKSkpfQogICAgICA8L3NwYW4+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7Yyh0Lm5hbWUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJiYWRnZXMiPgogICAgICAgICAgJHt0LmJyZWFrZmFzdD8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkJyZWFrZmFzdDwvc3Bhbj4nOiIifQogICAgICAgICAgJHt0LnJlZnVuZGFibGU/YDxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5GcmVlIGNhbmNlbGxhdGlvbiR7dC5mcmVlQ2FuY2VsbGF0aW9uVW50aWw/YCB1bnRpbCAke2MoU3RyaW5nKHQuZnJlZUNhbmNlbGxhdGlvblVudGlsKS5zbGljZSgwLDEwKSl9YDoiIn08L3NwYW4+YDonPHNwYW4gY2xhc3M9ImJhZGdlIHdhcm4iPk5vbi1yZWZ1bmRhYmxlPC9zcGFuPid9CiAgICAgICAgICAke051bWJlcih0LnJvb21zTGVmdCk8PTM/YDxzcGFuIGNsYXNzPSJiYWRnZSI+JHtjKHQucm9vbXNMZWZ0KX0gbGVmdDwvc3Bhbj5gOiIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICR7dC5wdWJsaWNTdGF5VG90YWw/YDxkaXYgY2xhc3M9InAtd2FzIj4ke2ModC5wdWJsaWNTdGF5VG90YWwpfTwvZGl2PmA6IiJ9CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKHQucm9vbXNUb3RhbD8/dC5zdGF5VG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHtjKHQubmlnaHRseSl9IC8gbmlnaHQke0c+MT9gIMK3ICR7R30gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7Yyh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke0lvKGBkYXRhLWFkZC1yb29tPSIke2ModC5pZCl9IiBkYXRhLWhvdGVsPSIke2MoZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSxHKX08L2Rpdj4KICAgIDwvZGl2PmB9LGtfPShlLHQpPT4hQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8Mj8iIjpgCiAgPGRpdiBjbGFzcz0iZmxleC1kYXRlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Ik5lYXJieSBhcnJpdmFsIGRhdGVzIj4KICAgICR7dC5tYXAobj0+YDxidXR0b24gY2xhc3M9ImZkJHtuLmNob3Nlbj8iIG9uIjoiIn0ke24uZnJvbT8iIjoiIG91dCJ9JHtuLmJlc3Q/IiBiZXN0IjoiIn0iIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKGUpfSIgZGF0YS1jaT0iJHtjKG4uY2hlY2tJbil9IiBkYXRhLWNvPSIke2Mobi5jaGVja091dCl9IiBhcmlhLWxhYmVsPSJBcnJpdmUgJHtjKFd0KFN0cmluZyhuLmNoZWNrSW4pKSl9JHtuLmZyb20/YCwgZnJvbSAke2Mobi5mcm9tKX1gOiIsIG5vdGhpbmcgbGVmdCJ9Ij4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtZGF5Ij4ke2MoV3QoU3RyaW5nKG4uY2hlY2tJbikpKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLXByaWNlIj4ke24uZnJvbT9jKG4uZnJvbSk6IkZ1bGwifTwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgPC9kaXY+YCxUdT1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUucm9vbXM/P1tdLG89ZS5zdGF5Pz9TO3JldHVybltYKCksbWYodCkscGYoU3RyaW5nKHQuaWQpLHQudG9kYXlUaGVyZSksa18oU3RyaW5nKHQuaWQpLGUuZGF0ZXMpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9Pl9fKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke2ModC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke2Moci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij4ke2Moci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LHdfPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdLG89ZS5mb3JCb29raW5nO3JldHVybiBvP1tYKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Moby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2ModC5uYW1lKX0gwrcgJHtjKEZlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtJbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W1goKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7Yyh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgaXQgb2ZmZXJzIGJlc2lkZSB0aGUgcm9vbTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij5wZXIgJHtjKHIucGVyKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7SW8oYGRhdGEtYWRkLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWhvdGVsPSIke2ModC5pZCl9ImAsdV8oU3RyaW5nKHQuaWQpLFN0cmluZyhyLmlkKSksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij5CYWNrIHRvICR7Yyh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSwkXz1lPT57Y29uc3QgdD1lLmtpbmQ9PT0icm9vbSI/YGRhdGEtYWRkLXJvb209IiR7YyhlLnJvb21SZWYpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9IiBkYXRhLWNpPSIke2MoZS5zdGF5Py5jaGVja0luKX0iIGRhdGEtY289IiR7YyhlLnN0YXk/LmNoZWNrT3V0KX0iIGRhdGEtZ3U9IiR7YyhlLnN0YXk/Lmd1ZXN0cyl9ImA6YGRhdGEtYWRkLWV4dHJhPSIke2MoZS5leHRyYVJlZj8/ZS50aXRsZSl9IiBkYXRhLWhvdGVsPSIke2MoZS5ob3RlbElkKX0iYDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtGZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7YyhlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtJbyh0LE51bWJlcihlLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0sSXU9KGUsdCk9PmA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7YyhlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke2MoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHtjKGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHtjKGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7Yyh0KX08L3NwYW4+PHNwYW4+JHtjKGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIGVhcm5zPC9zcGFuPjxzcGFuPiR7YyhOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgIDwvZGl2PmAsU189ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVybltYKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+QnJvd3NlICR7YyhhdCl9IGhvdGVsczwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltYKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtjKFd0KG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKCRfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtjKG8udGl0bGUpfTogJHtjKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIiwuLi5BcnJheS5pc0FycmF5KGUuZ3JvdXBzKSYmZS5ncm91cHMubGVuZ3RoPjE/W2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZWQgaW4gJHtjKChlLmN1cnJlbmNpZXM/P1tdKS5qb2luKCIgYW5kICIpKX0sIHNlcGFyYXRlbHkuIE5vdGhpbmcgaGVyZSBjb252ZXJ0cyBvbmUgaW50byB0aGUgb3RoZXI7IGVhY2ggaG90ZWwgaXMgYm9va2VkIGFuZCBwYWlkIGluIGl0cyBvd24uPC9kaXY+YCwuLi5lLmdyb3Vwcy5tYXAobz0+SXUobyxgVG90YWwgaW4gJHtvLmN1cnJlbmN5fWApKV06W0l1KGUsIlRvdGFsIildLC4uLkFycmF5LmlzQXJyYXkoZS5uZWVkc1Jvb20pJiZlLm5lZWRzUm9vbS5sZW5ndGg/ZS5uZWVkc1Jvb20ubWFwKG89PmA8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgICA8Yj5Hb2VzIHdpdGggYSBzdGF5PC9iPgogICAgICAgICAgICAgPHNwYW4+JHtjKChvLmV4dHJhcz8/W10pLmpvaW4oIiBhbmQgIikpfSBpcyAke2Moby5ob3RlbE5hbWUpfSdzIHNlcnZpY2UgZm9yIGl0cyBndWVzdHMsIHNvIGl0IGlzIGJvb2tlZCB3aXRoIGEgcm9vbSB0aGVyZSAtIG9yIGFkZGVkIHRvIGEgYm9va2luZyB5b3UgYWxyZWFkeSBoYXZlLjwvc3Bhbj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Moby5ob3RlbElkKX0iPlJvb21zIGF0ICR7YyhvLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDwvZGl2PmApOlsnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke2MoYXQpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxnZigpXSxlZT8iIjpgPGRpdiBjbGFzcz0ibm90ZSI+QSAke2MoYXQpfSBDaXJjbGUgbWVtYmVyPyA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPlNpZ24gaW4gZm9yIHRoZSBtZW1iZXIgcmF0ZTwvYnV0dG9uPi48L2Rpdj4ke1BvKCl9YF0uam9pbigiIil9LGpjPVt7aWQ6ImtpbmctYmVkIixsYWJlbDoiS2luZyBiZWQifSx7aWQ6InR3aW4tYmVkcyIsbGFiZWw6IlR3aW4gYmVkcyJ9LHtpZDoiaGlnaC1mbG9vciIsbGFiZWw6IkhpZ2ggZmxvb3IifSx7aWQ6Imxvdy1mbG9vciIsbGFiZWw6IkxvdyBmbG9vciJ9LHtpZDoicXVpZXQtcm9vbSIsbGFiZWw6IlF1aWV0IHJvb20ifSx7aWQ6ImNvbm5lY3Rpbmctcm9vbXMiLGxhYmVsOiJDb25uZWN0aW5nIHJvb21zIn0se2lkOiJlYXJseS1jaGVjay1pbiIsbGFiZWw6IkVhcmx5IGNoZWNrLWluIn0se2lkOiJsYXRlLWFycml2YWwiLGxhYmVsOiJMYXRlIGFycml2YWwifSx7aWQ6ImFjY2Vzc2libGUtcm9vbSIsbGFiZWw6IkFjY2Vzc2libGUgcm9vbSJ9XSx6Xz17ImtpbmctYmVkIjoidHdpbi1iZWRzIiwidHdpbi1iZWRzIjoia2luZy1iZWQiLCJoaWdoLWZsb29yIjoibG93LWZsb29yIiwibG93LWZsb29yIjoiaGlnaC1mbG9vciJ9O2xldCBQZT1udWxsO2NvbnN0IGdmPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIiB2YWx1ZT0iJHtjKFBlPy5uYW1lPz8iIil9Ij48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiIgdmFsdWU9IiR7YyhQZT8uZW1haWw/PyIiKX0iPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFza3MiPgogICAgICA8ZGl2IGNsYXNzPSJhc2tzLXQiPkFzayB0aGUgZGVzayBmb3I8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2hpcHMiPiR7amMubWFwKHQ9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIGFzayIgdHlwZT0iYnV0dG9uIiBkYXRhLWFzaz0iJHtjKHQuaWQpfSIgYXJpYS1wcmVzc2VkPSIkeyhQZT9QZS5yZXF1ZXN0czplZT8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7Yyh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7YyhQZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHtjKFBlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke2MoYXQpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7ZWU/YDxsYWJlbCBjbGFzcz0icmVtZW1iZXIiPjxpbnB1dCBpZD0iZ3JlbWVtYmVyIiB0eXBlPSJjaGVja2JveCIke1BlPy5yZW1lbWJlcj8iIGNoZWNrZWQiOiIifT4gUmVtZW1iZXIgdGhlIGJlZCwgZmxvb3IgYW5kIHJvb20gcmVxdWVzdHMgb24gbXkgJHtjKGVlLnByb2dyYW1tZT8/Im1lbWJlcnNoaXAiKX0gZm9yIG5leHQgdGltZTwvbGFiZWw+YDoiIn0KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPkhvbGQgdGhlc2Ugcm9vbXM8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PgogIDwvZGl2PmAsVF89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7YygoZS5taXNzaW5nPz9bXSkuam9pbigiIGFuZCAiKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCxnZighMCksJzxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PiddLmpvaW4oIiIpLElfPWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5bWCgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7Yyh0LnByb2dyYW1tZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtjKE51bWJlcih0LnBvaW50cz8/MCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPjxiPiR7YyhNYXRoLnJvdW5kKCh0LnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApKX0lIG9mZjwvYj48c3Bhbj5Sb29tIHJhdGVzIGFuZCB0cmlwIHRvdGFscyBub3cgc2hvdyB0aGUgJHtjKHQudGllcj8ubmFtZSl9IG1lbWJlciByYXRlLiBOb3RoaW5nIGlzIGNoYXJnZWQgYnkgc2lnbmluZyBpbi48L3NwYW4+PC9kaXY+YCwodC5wcmVmZXJlbmNlcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgIDxiPlNhdmVkIGZvciB5b3VyIG5leHQgc3RheXM8L2I+CiAgICAgICAgICAgPHNwYW4+JHtjKHQucHJlZmVyZW5jZXMubWFwKG49PmpjLmZpbmQobz0+by5pZD09PW4pPy5sYWJlbD8/bikuam9pbigiLCAiKSl9IC0gdGlja2VkIG9uIHRoZSBib29raW5nIGZvcm0sIGFuZCBhc2tlZCBmb3Igb25seSB3aGVuIHlvdSBib29rIHdpdGggdGhlbS48L3NwYW4+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZvcmdldC1wcmVmcyI+Rm9yZ2V0IHRoZW08L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1vdXQiPlNpZ24gb3V0PC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LFBfPSgpPT5bJzxkaXYgY2xhc3M9ImVyciI+Tm8gbWVtYmVyc2hpcCBtYXRjaGVzIHRoYXQgbnVtYmVyIGFuZCBzdXJuYW1lLiBDaGVjayBib3RoIGFzIHRoZXkgYXJlIHByaW50ZWQg4oCUIG5vdGhpbmcgZWxzZSBpcyBuZWVkZWQsIHRoaXMgY29ubmVjdG9yIG5ldmVyIGFza3MgZm9yIGEgcGFzc3dvcmQuPC9kaXY+JyxQbyghMCldLmpvaW4oIiIpLFBvPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJzaWduaW4iJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+TWVtYmVyc2hpcCBudW1iZXI8aW5wdXQgaWQ9Im1udW0iIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgaXMgcHJpbnRlZCI+PC9sYWJlbD4KICAgICAgPGxhYmVsPlN1cm5hbWU8aW5wdXQgaWQ9Im1zdXIiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIHN1cm5hbWUgb24gaXQiPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLWluIj5TaWduIGluPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBwYXNzd29yZCBpcyBhc2tlZCBmb3IgYW5kIG5vbmUgaXMgc3RvcmVkLiBTaWduaW5nIGluIHNob3dzIHRoZSBtZW1iZXIgcmF0ZTsgbm90aGluZyBpcyBjaGFyZ2VkLjwvZGl2PgogIDwvZGl2PmAseF89ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0ZWQ/P1tdO3JldHVybiB0Lmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQke2UuYWNjZXNzaWJpbGl0eT8iIGZsYWciOiIifSI+CiAgICA8Yj5SZXF1ZXN0ZWQsIG5vdCBoZWxkPC9iPgogICAgJHt0Lm1hcChuPT5gPHNwYW4+JHtjKG4pfTwvc3Bhbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gOiIifSxQdT1lPT5TdHJpbmcoZS5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpLENfPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5ib29raW5ncykmJmUuYm9va2luZ3MubGVuZ3RoP2UuYm9va2luZ3M6W2UuYm9va2luZz8/e31dLG49dC5sZW5ndGg+MSxvPShyLHMsaSk9PltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHIuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtjKEZlKHIuc3RheSkpfSDCtyAke2Moci5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgICAgPC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJub3RlIj5IZWxkIHVudGlsICR7YyhQdShyKSl9IFVUQy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJtb25leS1vdXQiPjxzcGFuPlRvdGFsIGZvciB0aGUgc3RheTwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmAseF8oaSksYDxkaXYgY2xhc3M9InJvd3MiPiR7KHIucXVvdGU/LmxpbmVzPz9bXSkubWFwKE9fKS5qb2luKCIiKX08L2Rpdj5gLG4/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtjKHIuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bWCgpLG4/YDxkaXYgY2xhc3M9Im5vdGUiPiR7dC5sZW5ndGh9IGJvb2tpbmdzLCBvbmUgZm9yIGVhY2ggc3RheS4gRWFjaCBob3RlbCBob2xkcyBpdHMgb3duIG5pZ2h0cyB1bmRlciBpdHMgb3duIGNvZGUsIGFuZCBlYWNoIGlzIGNoYW5nZWQgb3IgY2FuY2VsbGVkIG9uIGl0cyBvd24uPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCB0aGUgdGltZSB1bmRlciBlYWNoIGNvZGUuIjpgVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7YyhQdSh0WzBdKSl9IFVUQy5gfSBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCwuLi50Lm1hcChyPT5uP28ocixTdHJpbmcoci50b3RhbD8/IiIpLHIpOm8ocixTdHJpbmcoZS50b3RhbD8/IiIpLGUpKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAke24/IiI6YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPmB9CiAgICAgPC9kaXY+YF0uam9pbigiIil9LEVfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5kZXRhaWw/P2Uud2h5Pz8iVGhhdCBjb3VsZCBub3QgYmUgZG9uZS4iKX08L2Rpdj5gLEt0PjA/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIj5WaWV3IHRoZSB0cmlwPC9idXR0b24+PC9kaXY+JzoiIl0uam9pbigiIiksT189ZT0+YAogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoZS5raW5kPT09InJvb20iP0ZlKGUuc3RheSk6ZS5kZXRhaWw/PyIiKX08L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj48L2Rpdj4KICA8L2Rpdj5gLEFfPXtyZXF1ZXN0ZWQ6Indhcm4iLGNvbmZpcm1lZDoiZ29vZCIsY2FuY2VsbGVkOiJiYWQiLGV4cGlyZWQ6ImJhZCJ9LFJfPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5qYy5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke2Mobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LFpfPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdO3JldHVybiBlLm5vdEZvdW5kJiZ0Lmxlbmd0aD09PTA/YDxkaXYgY2xhc3M9ImVyciI+Tm8gYm9va2luZyBtYXRjaGVzICR7YyhlLm5vdEZvdW5kKX0gd2l0aCB0aGF0IGVtYWlsLiBCb3RoIGhhdmUgdG8gYmUgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQtYm9va2luZyI+VHJ5IGFnYWluPC9idXR0b24+PC9kaXY+YDp0Lmxlbmd0aD09PTA/JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5ncyBpbiB0aGlzIGNvbnZlcnNhdGlvbiB5ZXQuPC9kaXY+JzpbWCgpLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QubWFwKG49PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhuLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX0gwrcgJHtjKEZlKG4uc3RheSkpfTwvZGl2PgogICAgICAgICAgJHtSXyhuKX0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+PHNwYW4gY2xhc3M9ImJhZGdlICR7QV9bU3RyaW5nKG4uc3RhdHVzKV0/PyIifSI+JHtjKG4uc3RhdHVzKX08L3NwYW4+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhuLnF1b3RlPy50b3RhbD8/IiIpfTwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtuLnN0YXR1cz09PSJyZXF1ZXN0ZWQifHxuLnN0YXR1cz09PSJjb25maXJtZWQiP2A8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsPC9idXR0b24+YDoiIn08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIil9LHh1PWU9Pntjb25zdCB0PWUudmlldz09PSJjYW5jZWxsZWQiLG49ZS5ib29raW5nPz97fTtyZXR1cm5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDYW5jZWxsZWQiOiJDYW5jZWxsaW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtjKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sQ3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNoYW5nZWQiLG49ZS5ib29raW5nPz97fSxvPShyLHMsaSk9PnM/YDxkaXYgY2xhc3M9ImxlZyR7aT8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke2Mocil9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHtjKHMuY2hlY2tJbil9IOKGkiAke2Mocy5jaGVja091dCl9IMK3ICR7YyhzLm5pZ2h0cyl9ICR7TnVtYmVyKHMubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke2Mocy5yb29tTmFtZSl9JHtOdW1iZXIocy5yb29tcyk+MT9gIMK3ICR7YyhzLnJvb21zKX0gcm9vbXNgOiIifSDCtyAke2Mocy50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW1goKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7byh0PyJXYXMiOiJOb3ciLGUuZnJvbSwhMCl9JHtvKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtjKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7YyhlLmFkZE9uLmZyb20pfSDihpIgJHtjKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0scnM9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7YyhlLnRpdGxlKX08L2g0PiR7YyhlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtjKG8udGl0bGUpfTwvaDQ+JHtjKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sTl89ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7bm8oU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhvbyhTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtjKHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7YyhyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke2Moci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7YyhyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7YyhyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW1goKSxlLnRpdGxlP2A8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj5gOiIiLGUuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKEZlKGUuc3RheSkpfTwvZGl2PmA6IiIsQXJyYXkuaXNBcnJheShlLmN1cnJlbmNpZXMpJiZlLmN1cnJlbmNpZXMubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlcyBhcmUgaW4gZWFjaCBob3RlbCdzIG93biBjdXJyZW5jeSAoJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0pLiBUaGV5IGFyZSBub3QgY29udmVydGVkLCBzbyB0aGUgY29sdW1ucyBhcmUgbm90IGEgcHJpY2UgcmFua2luZy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJjbXAtd3JhcCI+PGRpdiBjbGFzcz0iY21wIiBzdHlsZT0iLS1jb2xzOiR7dC5sZW5ndGh9Ij4KICAgICAgIDxkaXYgY2xhc3M9ImNtcC1jb3JuZXIiPjwvZGl2PgogICAgICAgJHt0Lm1hcChvKS5qb2luKCIiKX0KICAgICAgICR7bi5tYXAoKHIscyk9PmA8ZGl2IGNsYXNzPSJrIj4ke2Mocil9PC9kaXY+JHt0Lm1hcChpPT5gPGRpdiBjbGFzcz0idiR7cyUyPyIgYWx0IjoiIn0iPiR7YyhpLnJvd3M/LltzXT8udmFsdWU/PyLigJQiKX08L2Rpdj5gKS5qb2luKCIiKX1gKS5qb2luKCIiKX0KICAgICA8L2Rpdj48L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKHI9PmAke2Moci5uYW1lKX06ICR7YyhyLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPk9wZW4gYSAke2MoZS52b2NhYj8ubm91bj8/ImhvdGVsIil9IHRvIHNlZSBpdHMgcm9vbXMke2Uuc3RheT8uY2hlY2tJbj8iIGZvciB0aGVzZSBuaWdodHMiOiIifS48L2Rpdj5gXS5qb2luKCIiKX0sal89ZT0+e2NvbnN0IHQ9ZS5kYXlzPz9bXTtyZXR1cm5bWCgpLGA8ZGl2PgogICAgICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgICAke2Uuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKEZlKGUuc3RheSkpfTwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0iZ2FwIj48Yj4ke2MoTnVtYmVyKGUuaW5UcmlwPz8wKStOdW1iZXIoZS5ib29rZWQ/PzApKX0vJHtjKGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7YyhlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChuLG8pPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke28rMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7YyhuLmxhYmVsKX0ke24uZGF0ZT9gPHNtYWxsPiDCtyAke2MoU3RyaW5nKG4uZGF0ZSkuc2xpY2UoNSkpfTwvc21hbGw+YDoiIn08L2Rpdj4KICAgICAgICAgICR7bi5ub3RlP2A8ZGl2IGNsYXNzPSJkYXlub3RlIj4ke2Mobi5ub3RlKX08L2Rpdj5gOiIifQogICAgICAgICAgJHsobi5pdGVtcz8/W10pLm1hcChyPT5gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSIke3Iua2luZD09PSJob3RlbCI/YCBkYXRhLWhvdGVsPSIke2Moci5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIiR7ci5jaGVja0luP2AgZGF0YS1jaT0iJHtjKHIuY2hlY2tJbil9IiBkYXRhLWNvPSIke2Moci5jaGVja091dCl9ImA6IiJ9YDoiIn0+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKFtyLmRldGFpbCxyLm5pZ2h0cz9OdW1iZXIoci5uaWdodD8/MSk+MT9gbmlnaHQgJHtyLm5pZ2h0fSBvZiAke3IubmlnaHRzfWA6YCR7ci5uaWdodHN9ICR7ci5uaWdodHM9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IGhlcmVgOiIiLHIucHJpY2VdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnN0YXRlICR7ci5ib29rZWR8fHIuaW5UcmlwPyJ5ZXMiOiJubyJ9Ij4ke3IuYm9va2VkP2BCb29rZWQgwrcgJHtjKHIuYm9va2VkKX1gOnIuaW5UcmlwPyJJbiB0aGUgdHJpcCI6IlBsYW4gb25seSJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChuPT5gJHtjKG4ubmFtZSl9OiAke2Mobi53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sR2U9ZT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2UudG9vbE5hbWVzJiYoY2Y9ZS50b29sTmFtZXMpLGUuYnJhbmQmJihhdD1TdHJpbmcoZS5icmFuZCkpLGUubG9nb1VybCYmKG9zPVN0cmluZyhlLmxvZ29VcmwpKSx0eXBlb2YgZS5kZW1vPT0iYm9vbGVhbiImJih1Zj1lLmRlbW8pLGUuZGVtb05vdGUmJihsZj1TdHJpbmcoZS5kZW1vTm90ZSkpLHR5cGVvZiBlLnJvb21zX3dhbnRlZD09Im51bWJlciImJihHPWUucm9vbXNfd2FudGVkKSxlLnZpZXc9PT0ibWVtYmVyIiYmZS5tZW1iZXI/LnRpZXI/Lm5hbWU/ZWU9ZS5tZW1iZXI6ZS5tZW1iZXI/LnRpZXI/Lm5hbWUmJihlZT1lZT8ucHJvZ3JhbW1lPT09ZS5tZW1iZXIucHJvZ3JhbW1lJiZlZT8udGllcj8ubmFtZT09PWUubWVtYmVyLnRpZXIubmFtZT97Li4uZWUsLi4uZS5tZW1iZXJ9OmUubWVtYmVyKSwoZS52aWV3PT09InNpZ25lZC1vdXQifHxlLnNpZ25lZEluPT09ITEpJiYoZWU9bnVsbCksZS5zdGF5Py5jaGVja0luJiYhSHQmJihTPXtjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn0pLCFaYyYmKGUudmlldz09PSJ0cmlwInx8ZS52aWV3PT09Im5lZWRzLWRhdGVzIikmJihndD1lLmxpbmVzPz9bXSksKGUudmlldz09PSJib29raW5nInx8ZS52aWV3PT09ImVtcHR5LXRyaXAiKSYmKGd0PVtdLEt0PTApLFdlPVN0cmluZyhlLnZpZXc/PyIiKSxuXygpO2NvbnN0IHQ9aGUoImJyYW5kIik7b3M/KHQuc3JjPW9zLHQuaGlkZGVuPSExLGhlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KHQuaGlkZGVuPSEwLGhlKCJ0aXRsZSIpLmhpZGRlbj0hMSxoZSgidGl0bGUiKS50ZXh0Q29udGVudD1hdHx8IkhvdGVscyIpLGhlKCJzdWIiKS50ZXh0Q29udGVudD1EXyhlKSxVXygpLExfKCk7Y29uc3Qgbj17aG90ZWxzOnZfLGRlc3RpbmF0aW9uczpsXywibm8taG90ZWxzIjp5Xyxob3RlbDpUdSwibm8tcm9vbXMiOlR1LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOndfLHRyaXA6U18sIm5lZWRzLWRhdGVzIjpxXyxib29raW5nOkNfLCJuZWVkcy1ndWVzdCI6VF8sbWVtYmVyOklfLCJtZW1iZXItbm90LWZvdW5kIjpQXywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpaXywiY2FuY2VsbGF0aW9uLXByZXZpZXciOnh1LGNhbmNlbGxlZDp4dSwiY2hhbmdlLXByZXZpZXciOkN1LGNoYW5nZWQ6Q3UsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOk5fLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpqXywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpycyxwb2xpY2llczpycywicG9saWN5LW1pc3NpbmciOnJzLGVycm9yOkVfLCJmaW5kLWJvb2tpbmciOigpPT5bWCgpLCc8ZGl2IGNsYXNzPSJub3RlIj5BIGJvb2tpbmcgbWFkZSBpbiBhbm90aGVyIGNvbnZlcnNhdGlvbiBpcyBmb3VuZCB3aXRoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIGl0IHdhcyBtYWRlIHdpdGggLSBib3RoLCBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvcm0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgICAgICA8bGFiZWw+Q29uZmlybWF0aW9uIGNvZGU8aW5wdXQgaWQ9ImZjb2RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlNMLeKApiI+PC9sYWJlbD4KICAgICAgICAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZm1haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBvbmUgb24gdGhlIGJvb2tpbmciPjwvbGFiZWw+CiAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Imxvb2t1cC1ib29raW5nIj5GaW5kIGl0PC9idXR0b24+CiAgICAgICAgIDwvZGl2PmBdLmpvaW4oIiIpLCJuby1tZW1iZXIiOigpPT5gPGRpdiBjbGFzcz0iZW1wdHkiPk5vYm9keSBpcyBzaWduZWQgaW4sIHNvIHRoZXJlIGlzIG5vdGhpbmcgc2F2ZWQgdG8gZm9yZ2V0LjwvZGl2PiR7UG8oITApfWAsIm1lbWJlci1zaWduLWluIjooKT0+W1goKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+JyxQbyghMCldLmpvaW4oIiIpfTsoV2U9PT0iaG90ZWwifHxXZT09PSJuby1yb29tcyJ8fFdlPT09Im5lZWRzLWRhdGVzIikmJmUuaG90ZWw/LmlkPyhMdD1TdHJpbmcoZS5ob3RlbC5pZCksZS5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5RcigpLDApKTooTHQ9IiIsTWMoKSksRj1lO2NvbnN0IG89bltXZV07aGUoImNvbnRlbnQiKS5pbm5lckhUTUw9KG8/byhlKTpgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS5lcnJvcj8/IlNvbWV0aGluZyBjYW1lIGJhY2sgdGhhdCB0aGlzIGNhcmQgZG9lcyBub3Qga25vdyBob3cgdG8gZHJhdy4iKX0ke2UuZGV0YWlsP2A8YnI+JHtjKGUuZGV0YWlsKX1gOiIifTwvZGl2PmApK01fKGUpfSxNXz1lPT57Y29uc3QgdD0hIU5lLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8ubWVzc2FnZSxuPShlLnN1Z2dlc3Rpb25zPz9bXSkubWFwKChvLHIpPT5vPy5hc2s/YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zdWdnZXN0PSIke3J9Ij4ke2Moby5sYWJlbCl9PC9idXR0b24+YDpvPy5zYXkmJnQ/YDxidXR0b24gY2xhc3M9ImNoaXAgc2F5IiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfSA8c21hbGw+wrcgaW4gdGhlIGNoYXQ8L3NtYWxsPjwvYnV0dG9uPmA6IiIpLmpvaW4oIiIpO3JldHVybiBuP2A8ZGl2IGNsYXNzPSJzdWdnZXN0Ij4ke259PC9kaXY+YDoiIn0scV89ZT0+W1goKSxlLmhvdGVsP21mKGUuaG90ZWwpOiIiLGA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLndoeT8/IldoaWNoIG5pZ2h0cz8gQSByb29tIG5lZWRzIGEgY2hlY2staW4gYW5kIGEgY2hlY2stb3V0IGRhdGUuIil9PC9kaXY+YCxwZihTdHJpbmcoZS5ob3RlbD8uaWQ/PyIiKSxlLmhvdGVsPy50b2RheVRoZXJlKV0uam9pbigiIiksRF89ZT0+ZS52aWV3PT09ImhvdGVscyI/YCR7ZS50b3RhbD8/MH0gJHtOdW1iZXIoZS50b3RhbCk9PT0xPyJob3RlbCI6ImhvdGVscyJ9YDplLnZpZXc9PT0iaG90ZWwifHxlLnZpZXc9PT0ibm8tcm9vbXMiP0ZlKGUuc3RheSk6ZS52aWV3PT09InRyaXAiPyhlLmxpbmVzPz9bXSkubGVuZ3RoP1N0cmluZyhlLnRvdGFsPz8iIik6IiI6ZS52aWV3PT09ImNvbXBhcmlzb24iP2AkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA6ZS52aWV3PT09Iml0aW5lcmFyeSI/TnVtYmVyKGUuYm9va2VkKT4wP2Ake2UuYm9va2VkfS8ke2UucGxhbm5lZH0gYm9va2VkYDpgJHtlLmluVHJpcH0vJHtlLnBsYW5uZWR9IGluIHRoZSB0cmlwYDplLnZpZXc9PT0iYm9va2luZ3MiP2Ake2UuY291bnQ/PzB9IGJvb2tpbmcke051bWJlcihlLmNvdW50KT09PTE/IiI6InMifWA6IiIsTF89KCk9Pntjb25zdCBlPWhlKCJtZW1iZXJjaGlwIik7ZWU/KGUuaGlkZGVuPSExLGUudGV4dENvbnRlbnQ9YCR7ZWUudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoZWUudGllcj8uZGlzY291bnQ/PzApKjEwMCl9JSBvZmZgLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsIm1lbWJlciIpLGUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsYCR7ZWUubmFtZX0gwrcgJHtlZS5wcm9ncmFtbWV9YCkpOihlLmhpZGRlbj1XZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LFVfPSgpPT57Y29uc3QgZT1oZSgiaGVhZHRyaXAiKSx0PVpjP0t0Okt0fHxndC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fFdlPT09InRyaXAiLGhlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LEhfPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7Uz17Y2hlY2tJbjplPy52YWx1ZT8/Uy5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9TLmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P1MuZ3Vlc3RzKXx8Mn19LG1vPShlPXt9KT0+Uy5jaGVja0luJiZTLmNoZWNrT3V0P3tjaGVja0luOlMuY2hlY2tJbixjaGVja091dDpTLmNoZWNrT3V0LGd1ZXN0czpTLmd1ZXN0cywuLi5lfTplO2xldCBfcyxIdD0hMTtjb25zdCBNYz0oKT0+e2NsZWFyVGltZW91dChfcyksSHQ9ITF9LFFyPShlPTApPT57THQmJihjbGVhclRpbWVvdXQoX3MpLEh0PSEwLF9zPXNldFRpbWVvdXQoKCk9PntpZighTHQpe0h0PSExO3JldHVybn1pZih0byl7UXIoMTUwKTtyZXR1cm59SHQ9ITEscSgiZ2V0SG90ZWwiLHtob3RlbDpMdCxyb29tczpHLC4uLm1vKCl9KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxaPWU9PntoZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSxbZGF0YS1ib29raW5nLWV4dHJhc10sW2RhdGEtYm9va2luZy1leHRyYV0sW2RhdGEtc3VnZ2VzdF0sW2RhdGEtcGxhY2VdLFtkYXRhLXBsYWNlLWFsbF0sW2RhdGEtc29ydF0sW2RhdGEtbGlzdC1yb29tc10sW2RhdGEtZmlsdGVyXSxbZGF0YS1wYW5lbF0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKGspKTtjb25zdCB6PXpfW25dO2smJnomJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7en0iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIik7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtbGlzdC1yb29tcyIpO2lmKG8hPT1udWxsKXtHPU1hdGgubWluKGt1LE1hdGgubWF4KDEsRytOdW1iZXIobykpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJscm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcoRykpLHhvKDQ1MCk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKHIhPT1udWxsKXtIXygpLEc9TWF0aC5taW4oa3UsTWF0aC5tYXgoMSxHK051bWJlcihyKSkpO2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJuIik7ayYmKGsudGV4dENvbnRlbnQ9U3RyaW5nKEcpKTtjb25zdCB6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTt6JiYoei50ZXh0Q29udGVudD1HcigpKSxRcig0NTApO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYocyE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsej1OdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxuZT10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9Om1vKCk7cSgiYWRkVG9UcmlwIix7aG90ZWw6ayxyb29tOnMscm9vbXM6eiwuLi5uZX0pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihpIT09bnVsbCl7cSgiYWRkVG9UcmlwIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZXh0cmE6aSxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZSIpO2lmKGEhPT1udWxsKXtjb25zdCBrPUY/LmFzaz8uc29ydCx6PUY/LnZpZXc9PT0iaG90ZWxzIj9GPy5hc2s/LnF1ZXJ5OnZvaWQgMDtrcygpO2NvbnN0IG5lPUY/LnZpZXc9PT0iZGVzdGluYXRpb25zInx8ISFGPy5zdGF5Py5jaGVja0luO3EoImxpc3RIb3RlbHMiLHsuLi5hP3tjaXR5OmF9Ont9LC4uLms/e3NvcnQ6a306e30sLi4uYSYmej97cXVlcnk6en06e30sLi4uRj8udmlldz09PSJob3RlbHMiP2ZvKEY/LmFzayk6e30sLi4ubmU/VXQoKTp7fX0pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCB1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWZpbHRlciIpO2lmKHUhPT1udWxsKXtjb25zdCBrPUY/LmFzaz8/e30sej1mbyhrKTtpZih1LnN0YXJ0c1dpdGgoImJyYW5kOiIpKXtjb25zdCBjZT11LnNsaWNlKDYpO3ouYnJhbmQ9ei5icmFuZD09PWNlP3ZvaWQgMDpjZX1lbHNlIGlmKHUuc3RhcnRzV2l0aCgiZmFjaWxpdHk6Iikpe2NvbnN0IGNlPXUuc2xpY2UoOSksU2U9ei5mYWNpbGl0aWVzPz9bXTt6LmZhY2lsaXRpZXM9U2UuaW5jbHVkZXMoY2UpP1NlLmZpbHRlcihWZT0+VmUhPT1jZSk6Wy4uLlNlLGNlXX1lbHNlKHU9PT0iZnJlZUNhbmNlbGxhdGlvbiJ8fHU9PT0iYnJlYWtmYXN0IikmJih6W3VdPSF6W3VdKTtjb25zdCBuZT1mbyh6KTtxKCJsaXN0SG90ZWxzIix7Li4uenUoayksLi4ubmV9KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGZpbHRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc29ydCIpO2lmKGwhPT1udWxsKXtUZT0iIjtjb25zdHtzb3J0OmssLi4uen09Rj8uYXNrPz97fTtxKCJsaXN0SG90ZWxzIix7Li4ueiwuLi5sIT09Imdyb3VwIj97c29ydDpsfTp7fX0pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgcmVvcmRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UtYWxsIik7aWYoZCE9PW51bGwpe3EoImxpc3RIb3RlbHMiLHtjaXR5OmQsYWxsOiEwLC4uLlV0KCl9KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgbT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKG0hPT1udWxsKXtxKCJsaXN0RXh0cmFzIix7Ym9va2luZzptfSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgYj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYoYiE9PW51bGwpe3EoInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6YixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCB5PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHkhPT1udWxsKXtxKCJsaXN0RXh0cmFzIix7aG90ZWw6eSwuLi5tbygpfSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZih2IT09bnVsbCl7cSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzp2fSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZih3IT09bnVsbCl7cSgicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6d30pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0IEk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZihJIT09bnVsbCl7cSgiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6SSxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBqPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoaiE9PW51bGwpe2NvbnN0IGs9Rj8udG8/P3t9LHo9Rj8uZnJvbT8/e30sbmU9Rj8uYWRkT24sY2U9ay5jaGVja0luJiYoay5jaGVja0luIT09ei5jaGVja0lufHxrLmNoZWNrT3V0IT09ei5jaGVja091dCk7cSgiY2hhbmdlQm9va2luZyIse2Jvb2tpbmc6aixjb25maXJtZWQ6ITAsLi4uY2U/e2NoZWNrSW46ay5jaGVja0luLGNoZWNrT3V0OmsuY2hlY2tPdXR9Ont9LC4uLm5lPy5pZD97ZXh0cmE6bmUuaWQscXVhbnRpdHk6TnVtYmVyKG5lLnRvKX06e30sLi4uay5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKGsucm9vbXMpIT09TnVtYmVyKHoucm9vbXMpP3tyb29tczpOdW1iZXIoay5yb29tcyl9Ont9LC4uLmsucm9vbU5hbWUmJmsucm9vbU5hbWUhPT16LnJvb21OYW1lP3tyb29tOmsucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgVD10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZihUPT09ImJhY2siKXtjb25zdCBrPXhlLmF0KC0xKTtpZigha3x8dG8pcmV0dXJuO3hlPXhlLnNsaWNlKDAsLTEpLFRvKz0xLE1jKCk7Y29uc3Qgej1rLnZlcnNpb249PT16bz92b2lkIDA6WHkoay5wYXlsb2FkKTt6PyhGPWsucGF5bG9hZCxxKHoua2V5LHouYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT5HZShrLnBheWxvYWQpKSk6R2Uoay5wYXlsb2FkKTtyZXR1cm59aWYoVD09PSJtb3JlLXBsYWNlcyIpe2Zvcihjb25zdCBrIG9mKHQuY2xvc2VzdCgiLnBsYWNlcyIpPz9kb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbCgiLmNoaXAucGxhY2VbaGlkZGVuXSIpKWsuaGlkZGVuPSExO3QucmVtb3ZlKCk7cmV0dXJufWNvbnN0IFY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKTtpZihWIT09bnVsbCl7VGU9VGU9PT1WPyIiOlY7Zm9yKGNvbnN0IGsgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcGFuZWwtYm9keV0iKSlrLmhpZGRlbj1rLmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbC1ib2R5IikhPT1UZTtmb3IoY29uc3QgayBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbF0iKSlrLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKGsuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsIik9PT1UZSkpO3JldHVybn1pZihUPT09ImNsZWFyLWZpbHRlcnMiKXtxKCJsaXN0SG90ZWxzIix6dShGPy5hc2spKS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGNsZWFyIHRoZSBmaWx0ZXJzLiIpKTtyZXR1cm59aWYoVD09PSJhbGwtaG90ZWxzIil7a3MoKSxxKCJsaXN0SG90ZWxzIix7YWxsOiEwLC4uLlV0KCl9KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKFQ9PT0icHJpY2UtbGlzdCIpe3hvKDApO3JldHVybn1pZihUPT09ImZpbmQtYm9va2luZyIpe2NvbnN0IGs9e3ZpZXc6ImZpbmQtYm9va2luZyJ9O2hvKGspLEdlKGspLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy5mb2N1cygpO3JldHVybn1pZihUPT09Imxvb2t1cC1ib29raW5nIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwhei5pbmNsdWRlcygiQCIpKXtaKCJCb3RoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIHRoZSBib29raW5nIHdhcyBtYWRlIHdpdGgsIHBsZWFzZS4iKTtyZXR1cm59cSgibGlzdEJvb2tpbmdzIix7Ym9va2luZzprLGVtYWlsOnp9KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGxvb2sgdGhhdCB1cC4iKSk7cmV0dXJufWlmKFQ9PT0iZmluZCIpe2JmKCk7cmV0dXJufWlmKFQ9PT0ibW9yZS1ob3RlbHMiKXtjb25zdCBrPUY7aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtxKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDooay5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MjB9LHtmb2xkOno9Pno/LnZpZXc9PT0iaG90ZWxzIj97Li4ueixob3RlbHM6Wy4uLmsuaG90ZWxzPz9bXSwuLi56LmhvdGVscz8/W11dLHNob3duOihrLmhvdGVscz8/W10pLmxlbmd0aCsoei5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0OjAscGxhY2VzOmsucGxhY2VzfTp6fSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYoVD09PSJob21lIil7cSgibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoVD09PSJtZW1iZXIiKXtpZighZWUpcmV0dXJuO2NvbnN0IGs9e3ZpZXc6Im1lbWJlciIsbWVtYmVyOmVlfTtobyhrKSxHZShrKTtyZXR1cm59aWYoVD09PSJhc2stc2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNpZ25pbiIpO2lmKGspay5oaWRkZW49ITE7ZWxzZXtjb25zdCB6PXt2aWV3OiJtZW1iZXItc2lnbi1pbiJ9O2hvKHopLEdlKHopfWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKFQ9PT0ic2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCF6KXtaKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59cSgic2lnbkluIix7bnVtYmVyOmssc3VybmFtZTp6fSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBzaWduIGluLiIpKTtyZXR1cm59aWYoVD09PSJmb3JnZXQtcHJlZnMiKXtxKCJmb3JnZXRQcmVmZXJlbmNlcyIse30pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgZm9yZ2V0IHRoZW0uIikpO3JldHVybn1jb25zdCB0ZT10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYodGUhPT1udWxsKXtjb25zdCBrPShGPy5zdWdnZXN0aW9ucz8/W10pW051bWJlcih0ZSldO2s/LmFzaz8udG9vbD9xKFN0cmluZyhrLmFzay50b29sKSxrLmFzay5hcmdzPz97fSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBkbyB0aGF0IGp1c3Qgbm93LiIpKTprPy5zYXkmJk5lLnNlbmRNZXNzYWdlKHtyb2xlOiJ1c2VyIixjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDpTdHJpbmcoay5zYXkpfV19KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IHNlbmQgdGhhdCB0byB0aGUgY2hhdC4iKSk7cmV0dXJufWlmKFQ9PT0ic2lnbi1vdXQiKXtlZT1udWxsLHEoInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoVD09PSJhc2stYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7ayYmKGsuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoVD09PSJib29rIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLG5lPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiLGNlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndGltZSIpPy52YWx1ZS50cmltKCk/PyIiLFNlPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcChZcj0+WXIuZGF0YXNldC5hc2s/PyIiKSxWZT0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZihQZT17bmFtZTprLGVtYWlsOnosbm90ZXM6bmUsYXJyaXZpbmdBdDpjZSxyZXF1ZXN0czpTZSxyZW1lbWJlcjpWZX0sIWt8fCF6LmluY2x1ZGVzKCJAIikpe1ooaz8nVGhhdCBlbWFpbCBoYXMgbm8gIkAiIGluIGl0IC0gdGhlIGNvbmZpcm1hdGlvbiBuZWVkcyBhbiBhZGRyZXNzIGl0IGNhbiByZWFjaC4nOiJUaGUgYm9va2luZyBuZWVkcyBhIG5hbWUgYW5kIGFuIGVtYWlsIHRvIHNlbmQgdGhlIGNvbmZpcm1hdGlvbiB0by4iKTtyZXR1cm59cSgicmVxdWVzdEJvb2tpbmciLHtuYW1lOmssZW1haWw6eiwuLi5uZT97bm90ZXM6bmV9Ont9LC4uLmNlP3thcnJpdmluZ0F0OmNlfTp7fSwuLi5TZS5sZW5ndGg/e3JlcXVlc3RzOlNlfTp7fSwuLi5WZT97cmVtZW1iZXJSZXF1ZXN0czohMH06e319KS5jYXRjaCgoKT0+WigiQ291bGQgbm90IGFzayBmb3IgdGhvc2Ugcm9vbXMuIikpO3JldHVybn1pZihUPT09ImJvb2tpbmdzIil7cSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZihUPT09InRyaXAiKXtxKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IEs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihLKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIiksej10LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpO2smJnomJihTLmNoZWNrSW49ayxTLmNoZWNrT3V0PXopLHEoImdldEhvdGVsIix7aG90ZWw6SywuLi5tbygpfSkuY2F0Y2goKCk9PlooIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfX0pO2NvbnN0IGJmPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2hlcmUiKT8udmFsdWUudHJpbSgpPz8iIjtpZighZSl7WigiV2hlcmUgdG8/IEEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwuIik7cmV0dXJufWtzKCk7Y29uc3Qgbj0oRj8ucmVnaW9ucz8/W10pLmZsYXRNYXAobz0+KG8uY291bnRyaWVzPz9bXSkuZmxhdE1hcChyPT5bci5uYW1lLC4uLihyLmNpdGllcz8/W10pLm1hcChzPT5zLm5hbWUpXSkpLmZpbmQobz0+by50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpKTtxKCJsaXN0SG90ZWxzIix7Li4ubj97Y2l0eTpufTp7cXVlcnk6ZX0sLi4uVXQoKX0pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3Qgc2VhcmNoIGp1c3Qgbm93LiIpKX0sa3M9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY28iKTtlPy52YWx1ZSYmKFMuY2hlY2tJbj1lLnZhbHVlKSx0Py52YWx1ZSYmKFMuY2hlY2tPdXQ9dC52YWx1ZSl9O2xldCBFdTtjb25zdCB4bz0oZT0wKT0+e2NsZWFyVGltZW91dChFdSksRXU9c2V0VGltZW91dCgoKT0+e2lmKEY/LnZpZXc9PT0iaG90ZWxzIil7aWYodG8pe3hvKDE1MCk7cmV0dXJufXEoImxpc3RIb3RlbHMiLHsuLi5oXyhGLmFzayksLi4uVXQoKX0pLmNhdGNoKCgpPT5aKCJDb3VsZCBub3QgcHJpY2UgdGhvc2UgbmlnaHRzLiIpKX19LGUpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57aWYoZS50YXJnZXQ/LmlkPT09IndoZXJlIiYmZS5rZXk9PT0iRW50ZXIiKXtlLnByZXZlbnREZWZhdWx0KCksYmYoKTtyZXR1cm59Y29uc3QgdD1lLnRhcmdldDshdHx8dC5nZXRBdHRyaWJ1dGUoInJvbGUiKSE9PSJidXR0b24ifHxlLmtleSE9PSJFbnRlciImJmUua2V5IT09IiAifHwoZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xpY2soKSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGU9Pntjb25zdCB0PWUudGFyZ2V0LG89e2RjaTpbImRjaSIsImRjbyJdLGRjbzpbImRjaSIsImRjbyJdLGxjaTpbImxjaSIsImxjbyJdLGxjbzpbImxjaSIsImxjbyJdfVt0Py5pZD8/IiJdO2lmKG8pe2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1swXSksdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzFdKTtpZighYXx8IXUpcmV0dXJuO2lmKHQuaWQ9PT1vWzBdJiZhLnZhbHVlKXtjb25zdCBsPVVlKGEudmFsdWUsMSk7dS5taW49bCwoIXUudmFsdWV8fHUudmFsdWU8PWEudmFsdWUpJiYodS52YWx1ZT1sKX1TLmNoZWNrSW49YS52YWx1ZXx8Uy5jaGVja0luLFMuY2hlY2tPdXQ9dS52YWx1ZXx8Uy5jaGVja091dCxvWzBdPT09ImxjaSImJnhvKDMwMCk7cmV0dXJufWlmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIXJ8fCFzKXJldHVybjtpZih0LmlkPT09ImNpIiYmci52YWx1ZSl7Y29uc3QgYT1VZShyLnZhbHVlLDEpO3MubWluPWEsKCFzLnZhbHVlfHxzLnZhbHVlPD1yLnZhbHVlKSYmKHMudmFsdWU9YSl9Uy5jaGVja0luPXIudmFsdWV8fFMuY2hlY2tJbixTLmNoZWNrT3V0PXMudmFsdWV8fFMuY2hlY2tPdXQ7Y29uc3QgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7aSYmKGkudGV4dENvbnRlbnQ9R3IoKSksUXIoKX0pO2NvbnN0IHZmPShlLHQpPT57dHJ5e2RmKHQpO2NvbnN0IG49ZT9KU09OLnN0cmluZ2lmeShlKToiIjtpZihuJiZuPT09dnMmJkpTT04uc3RyaW5naWZ5KEYpPT09dnMpcmV0dXJuO3hlPVtdLFRvKz0xLE1jKCksR2UoZSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcigiW2NhcmRdIHJlbmRlciBmYWlsZWQiLG4pLGhlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhpcyBjYXJkIGNvdWxkIG5vdCBiZSBkcmF3bi4gQXNrIGFnYWluIGluIHRoZSBjaGF0LjwvZGl2Pid9fTtOZS5vbnRvb2xyZXN1bHQ9ZT0+dmYoZT8uc3RydWN0dXJlZENvbnRlbnQsZT8uX21ldGEpO05lLm9uaG9zdGNvbnRleHRjaGFuZ2VkPWU9PnNmKGUsYWYpO05lLmNvbm5lY3QoKS50aGVuKCgpPT57Y29uc3QgZT1OZS5nZXRIb3N0Q29udGV4dCgpO3NmKGUsYWYpO2NvbnN0IHQ9ZT8udG9vbEluZm8/LnJlc3VsdD8uc3RydWN0dXJlZENvbnRlbnQ7dCYmdmYodCxlPy50b29sSW5mbz8ucmVzdWx0Py5fbWV0YSl9KS5jYXRjaCgoKT0+e2hlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+Q291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGhvc3QuPC9kaXY+J30pOzwvc2NyaXB0PgogICAgPHN0eWxlIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4+OnJvb3R7LS1raXQtYmc6ICNmZmZmZmY7LS1raXQtYmctc29mdDogI2Y2ZjdmOTstLWtpdC1mZzogIzFhMWYyYjstLWtpdC1mZy1zb2Z0OiAjNjI2YjdhOy0ta2l0LWZnLWZhaW50OiAjOGE5M2ExOy0ta2l0LWxpbmU6ICNlM2U3ZWQ7LS1raXQtYWNjZW50OiAjMWExZjJiOy0ta2l0LWFjY2VudC1mZzogI2ZmZmZmZjstLWtpdC1saW5rOiAjMjU2M2ViOy0ta2l0LWdvb2Q6ICMxYTdmNWE7LS1raXQtZ29vZC1iZzogI2RkZjNlNDstLWtpdC1iYWQ6ICNiMzI2MWU7LS1raXQtYmFkLWJnOiAjZmJlNmU0Oy0ta2l0LXdhcm46ICM4YTVhMDA7LS1raXQtd2Fybi1iZzogI2ZkZjBkNTstLWtpdC1yaW5nOiAjMjU2M2VifVtkYXRhLXRoZW1lPWRhcmtdey0ta2l0LWJnOiAjMWQxZjIzOy0ta2l0LWJnLXNvZnQ6ICMyNjI5MmU7LS1raXQtZmc6ICNlY2VlZjE7LS1raXQtZmctc29mdDogI2E0YWJiNjstLWtpdC1mZy1mYWludDogIzdjODQ5MTstLWtpdC1saW5lOiAjMzYzYTQxOy0ta2l0LWFjY2VudDogI2VjZWVmMTstLWtpdC1hY2NlbnQtZmc6ICMxZDFmMjM7LS1raXQtbGluazogIzdhYTdmZjstLWtpdC1nb29kOiAjNmZkM2EyOy0ta2l0LWdvb2QtYmc6ICMxZjNhMmQ7LS1raXQtYmFkOiAjZmY4YTgwOy0ta2l0LWJhZC1iZzogIzNkMjMyMjstLWtpdC13YXJuOiAjZjJjNDZiOy0ta2l0LXdhcm4tYmc6ICMzYTMwMjA7LS1raXQtcmluZzogIzdhYTdmZn06cm9vdHstLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnksIHZhcigtLWtpdC1iZykpOy0tYmctc29mdDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnksIHZhcigtLWtpdC1iZy1zb2Z0KSk7LS1mZzogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5LCB2YXIoLS1raXQtZmcpKTstLWZnLXNvZnQ6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtZmctc29mdCkpOy0tZmctZmFpbnQ6IHZhcigtLWNvbG9yLXRleHQtdGVydGlhcnksIHZhcigtLWtpdC1mZy1mYWludCkpOy0tbGluZTogdmFyKC0tY29sb3ItYm9yZGVyLXByaW1hcnksIHZhcigtLWtpdC1saW5lKSk7LS1hY2NlbnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudCkpOy0tYWNjZW50LWZnOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQtZmcpKTstLWxpbms6IHZhcigtLWNvbG9yLXRleHQtaW5mbywgdmFyKC0ta2l0LWxpbmspKTstLWdvb2Q6IHZhcigtLWNvbG9yLXRleHQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QpKTstLWdvb2QtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QtYmcpKTstLWJhZDogdmFyKC0tY29sb3ItdGV4dC1kYW5nZXIsIHZhcigtLWtpdC1iYWQpKTstLWJhZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIsIHZhcigtLWtpdC1iYWQtYmcpKTstLXdhcm46IHZhcigtLWNvbG9yLXRleHQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4pKTstLXdhcm4tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4tYmcpKTstLXJpbmc6IHZhcigtLWNvbG9yLXJpbmctcHJpbWFyeSwgdmFyKC0ta2l0LXJpbmcpKTstLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sZywgMTRweCk7LS1yYWRpdXMtc206IHZhcigtLWJvcmRlci1yYWRpdXMtc20sIDlweCk7LS1mb250OiB2YXIoLS1mb250LXNhbnMsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBzYW5zLXNlcmlmKTstLW1vbm86IHZhcigtLWZvbnQtbW9ubywgdWktbW9ub3NwYWNlLCAiU0YgTW9ubyIsIE1lbmxvLCBtb25vc3BhY2UpOy0tc2hhZG93OiB2YXIoLS1zaGFkb3ctc20sIDAgMXB4IDJweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCksIDAgMnB4IDVweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCkpfSp7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uY2FyZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3gtc2hhZG93OnZhcigtLXNoYWRvdyk7bWF4LXdpZHRoOjU2MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0taW5zZXQtbGVmdCwgMHB4KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWluc2V0LXJpZ2h0LCAwcHgpfS5oZWFke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjE0cHggMThweCAwfS5oZWFkIC50aXRsZXtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC50aXRsZVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0jY29udGVudHtwYWRkaW5nOjEwcHggMThweCAxOHB4fS5yZWZyZXNoe21hcmdpbi1sZWZ0OjhweDthbGlnbi1zZWxmOmNlbnRlcjtmbGV4Om5vbmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O3BhZGRpbmc6MDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjEycyxjb2xvciAuMTJzfS5yZWZyZXNoOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLWZnKTtib3JkZXItY29sb3I6dmFyKC0tZmctc29mdCl9LnJlZnJlc2g6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNn0ucmVmcmVzaFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ucmVmcmVzaCBzdmd7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtkaXNwbGF5OmJsb2NrfS5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpraXQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMga2l0LXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uZW1wdHl7cGFkZGluZzoxOHB4IDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHh9LmhpbnR7bWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vdGV7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nOjAgMCAxMHB4fS5tb25ve2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctZmFpbnQpfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcH0uYmFkZ2Uub2t7Y29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uYmFkZ2Uud2FybiwuYmFkZ2UudG9kb3tjb2xvcjp2YXIoLS13YXJuKTtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpfS5iYWRnZS5lcnJ7Y29sb3I6dmFyKC0tYmFkKTtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyl9LmJ1eXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ0cHg7cGFkZGluZzoxMXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NTA7Y3Vyc29yOnBvaW50ZXJ9LmJ1eTpkaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1jb2xvcjp2YXIoLS1saW5lKTtjb2xvcjp2YXIoLS1mZy1mYWludCk7Y3Vyc29yOmRlZmF1bHR9LmJ1eS5hbHQsLmdob3N0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSl9Lmdob3N0e2ZsZXg6MTttaW4taGVpZ2h0OjQwcHg7cGFkZGluZzo5cHggMTBweDtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXJ9Lmxpbmt7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6NnB4IDAgMDtjb2xvcjp2YXIoLS1saW5rKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnF0eXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHh9LnF0eSBidXR0b257d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0ucXR5IHNwYW57bWluLXdpZHRoOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTB9YnV0dG9uOmZvY3VzLXZpc2libGUsYTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLXJpbmcpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEobWF4LXdpZHRoOjQzMHB4KXsuY2FyZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LmhlYWR7cGFkZGluZzoxMnB4IDE0cHggMH0jY29udGVudHtwYWRkaW5nOjhweCAxNHB4IDE0cHh9LmJ1eXttaW4taGVpZ2h0OjQ4cHg7Zm9udC1zaXplOjE1cHh9Lmdob3N0e21pbi1oZWlnaHQ6NDRweDtmb250LXNpemU6MTMuNXB4fS5xdHkgYnV0dG9ue3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7Zm9udC1zaXplOjE5cHh9LnJlZnJlc2h7d2lkdGg6MzRweDtoZWlnaHQ6MzRweH0uaGludCwubm90ZSwuZW1wdHl7Zm9udC1zaXplOjEzcHh9fUBtZWRpYShwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOm5vbmV9Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSNjb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHh9LmhlYWR7bWluLWhlaWdodDoyOHB4fS5ob21le2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MH0uaG9tZTpob3ZlcntvcGFjaXR5Oi43Mn0uaGVhZCAuYnJhbmR7bWF4LWhlaWdodDozNHB4O21heC13aWR0aDoxNTBweDtvYmplY3QtZml0OmNvbnRhaW59LmhlYWQgLnRpdGxle2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTVweDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmJhY2tidG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDExcHggNHB4IDhweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDttYXgtd2lkdGg6NDIlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2N1cnNvcjpwb2ludGVyfS5iYWNrYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmcpfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uY2FyZC5idXN5e29wYWNpdHk6LjYyfS5jYXJkLmJ1c3kgYnV0dG9uLC5jYXJkLmJ1c3kgaW5wdXQsLmNhcmQuYnVzeSBzZWxlY3R7cG9pbnRlci1ldmVudHM6bm9uZX0ubWVtYmVyY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5tZW1iZXJjaGlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lmxpbmt5e2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2NvbG9yOnZhcigtLWxpbmspO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LnAtd2Fze2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucC1tZW1iZXJ7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uc3VtLmdvb2Qgc3BhbjpsYXN0LWNoaWxke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmRlbW97ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LmRlbW8gYntmb250LXdlaWdodDo3MDB9LmNpdHlncm91cCsuY2l0eWdyb3Vwe21hcmdpbi10b3A6MTRweH0uY2l0eW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tYm90dG9tOjhweH0uY2l0eW5hbWUgc21hbGx7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwO29wYWNpdHk6Ljc1fS50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE5NnB4LDFmcikpO2dhcDoxMHB4fS50aWxle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tYmcpO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7cGFkZGluZzowfS50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1mZy1mYWludCl9LnQtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTthc3BlY3QtcmF0aW86MTYgLyAxMDtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnQtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnQtbWFya3tmb250LXNpemU6MzBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07b3BhY2l0eTouOTI7dGV4dC1zaGFkb3c6MCAxcHggMTJweCByZ2IoMCAwIDAgLyAyMiUpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udC1zaG90IGltZywuaGVybyBpbWd7ei1pbmRleDoxfS50LWJyYW5ke3otaW5kZXg6Mjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgxMTJweCwxZnIpIG1pbm1heCgxMTJweCwxZnIpIGF1dG8gMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3RheSBpbnB1dCwuc3RheSBzZWxlY3R7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6N3B4IDZweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5uaWdodHN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZy1ib3R0b206OHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RheSAuZ297d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTRweDtjdXJzb3I6cG9pbnRlcn0uc3RheSAuZ29bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOmRlZmF1bHR9LmZsZXgtZGF0ZXN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MnB4O3Njcm9sbGJhci13aWR0aDp0aGluOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5mZHtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweDttaW4td2lkdGg6NzhweDtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250OmluaGVyaXQ7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyfS5mZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uZmQtZGF5e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpub3dyYXB9LmZkLXByaWNle2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjUwO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmZkLm9ue2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2N1cnNvcjpkZWZhdWx0fS5mZC5vbiAuZmQtZGF5e2NvbG9yOnZhcigtLWFjY2VudC1mZyk7b3BhY2l0eTouODV9LmZkLmJlc3R7Ym9yZGVyLWNvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmZkLmJlc3QgLmZkLXByaWNlLC5mZC5iZXN0IC5mZC1kYXl7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZmQub3V0IC5mZC1wcmljZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXdlaWdodDo1MDB9LnRodW1ie2dyaWQtYXJlYTp0aHVtYjt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtmbGV4OjAgMCBhdXRvfS50aHVtYiBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LmxlZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5sZWd7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzo5cHggMTFweH0ubGVnLndhc3tvcGFjaXR5Oi43Mn0ubGVnLndhcyAubGVndnt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5sZWdre2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmxlZ3Z7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjQwO21hcmdpbi10b3A6MnB4fS5sZWdte2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDoycHh9LnJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgcHJpY2UgYWN0aW9uIjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4IDExcHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IHByaWNlIGFjdGlvbiJ9LnJvdyAuYm9keXtncmlkLWFyZWE6Ym9keTttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHh9LnJvdyAubmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnJvdyAubWV0YXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNDtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDozO2xpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS5yb3cgLnByaWNle2dyaWQtYXJlYTpwcmljZTt0ZXh0LWFsaWduOmVuZDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnJvdyAucC10b3RhbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY2MH0ucm93IC5wLXVuaXR7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJvdyAuYWN0aW9ue2dyaWQtYXJlYTphY3Rpb259LmJhZGdlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDttYXJnaW4tdG9wOjJweH0uYmFkZ2V7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2MjA7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYmFkZ2UuZ29vZHtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmJhZGdlLndhcm57YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKX0uYmFkZ2UuYmFke2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpfS5hZGR7ZGlzcGxheTppbmxpbmUtZ3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MzhweDtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdH0uYWRkOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5hZGRbZGlzYWJsZWRde29wYWNpdHk6LjQ7Y3Vyc29yOmRlZmF1bHR9LnN0ZXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4fS5zdGVwIGJ1dHRvbnt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5zdGVwIGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZmZmYyZX0uc3RlcCAubnttaW4td2lkdGg6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2ODA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXl7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbjoxMnB4IDAgNnB4fS5zdW1ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjVweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTttYXJnaW4tdG9wOjEycHg7cGFkZGluZy10b3A6MTBweDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnN1bXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3VtLnRvdGFse2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmZvb3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi10b3A6MTJweH0uZ297ZmxleDoxO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MTFweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MTJweCAxNnB4O2N1cnNvcjpwb2ludGVyfS5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTU7Y3Vyc29yOmRlZmF1bHR9LmdvLnF1aWV0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NjIwfS5nby5kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1iYWQpO2NvbG9yOnZhcigtLWJnKX0ubm90ZXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNX0uZm9ybXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMXB4O21hcmdpbi10b3A6MTBweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZm9ybSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo4cHggOXB4fS5mb3JtIC50d297ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHh9LmNvbmZ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjE2cHggMTJweH0uY29uZiAuY29kZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MjA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb25mIC53aGVyZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMH0uY29uZiAud2hlbntmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS51bnBhaWR7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS51bnBhaWQgYntmb250LXdlaWdodDo3MjB9Lndhcm5ub3Rle2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6OXB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnRpbGUub3ZlcntvcGFjaXR5Oi44Mn0uYXNrZWQtbGluZXtmb250LXN0eWxlOml0YWxpY30uYXNrZWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmFza2VkIGJ7Zm9udC13ZWlnaHQ6NzIwO2NvbG9yOnZhcigtLWZnKX0uYXNrZWQuZmxhZ3tiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS13YXJuKX0uYXNrZWQuZmxhZyBie2NvbG9yOnZhcigtLXdhcm4pfS5hc2tze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0uYXNrcy10e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXAuYXNre2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4fS5jaGlwLmFza1thcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9Lm1vbmV5LW91dHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjYwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucHJvc2V7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOnByZS13cmFwfS5wcm9zZSBoNHttYXJnaW46MTRweCAwIDRweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmVtcHR5e2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MThweCA0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVycntiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey50aWxlc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjhweH0udC1tYXJre2ZvbnQtc2l6ZToyNHB4fS5zdGF5e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zdGF5IC5ndWVzdHN7Z3JpZC1jb2x1bW46MX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uc3RheSAuZ297Z3JpZC1jb2x1bW46Mjt3aWR0aDoxMDAlfS5yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgYWN0aW9uIiAicHJpY2UgYWN0aW9uIjtyb3ctZ2FwOjZweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IGFjdGlvbiIgInRodW1iIHByaWNlIGFjdGlvbiJ9LnJvdy53aXRodGh1bWIgLnRodW1ie3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7YWxpZ24tc2VsZjpzdGFydH0ucm93IC5wcmljZXt0ZXh0LWFsaWduOnN0YXJ0fS5mb3JtIC50d297Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19LmNtcC13cmFwe292ZXJmbG93LXg6YXV0bzttYXJnaW4taW5saW5lOi0ycHg7cGFkZGluZzoycHh9LmNtcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg3NnB4LDk2cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTEycHgsMWZyKSk7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOjhweH0uY21wLWNvcm5lcntncmlkLWNvbHVtbjoxfS5jbXAtaGVhZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjttaW4td2lkdGg6MH0uY21wLWhlYWQucGlja3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQpfS5jbXAtaGVhZCAudC1zaG90e2FzcGVjdC1yYXRpbzoxNiAvIDk7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmNvbC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nOjEwcHggMTFweCAxMnB4fS5jb2wtbmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmNvbC1wcmljZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb2wtcHJpY2Ugc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS53aHl7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLWlubGluZS1zdGFydDoycHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZy1pbmxpbmUtc3RhcnQ6OHB4fS5wY3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHg7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1fS5wYyBkaXZ7ZGlzcGxheTpmbGV4O2dhcDo1cHh9LnBjIC5te2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NzAwfS5wYyAucHJvIC5te2NvbG9yOnZhcigtLWdvb2QpfS5wYyAuY29uIC5te2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jbXAgLmssLmNtcCAudntmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDU7cGFkZGluZzo2cHggOHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNtcCAua3tncmlkLWNvbHVtbjoxO2NvbG9yOnZhcigtLWZnLXNvZnQpO3Bvc2l0aW9uOnN0aWNreTtpbnNldC1pbmxpbmUtc3RhcnQ6MDtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uY21wIC52e2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY21wIC52LmFsdCwuY21wIC5rOmhhcygrLnYuYWx0KXtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6NnB4fS5waWNrbWFya3tiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7cGFkZGluZzozcHggOHB4O3RleHQtYWxpZ246Y2VudGVyfS5kYXlze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH0uZGF5cm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MjhweCAxZnI7Z2FwOjEwcHh9LmRheW51bXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4fS5kYXludW0gYntkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheW51bSBpe2ZsZXg6MTt3aWR0aDoxcHg7YmFja2dyb3VuZDp2YXIoLS1saW5lKX0uZGF5cm93Omxhc3QtY2hpbGQgLmRheW51bSBpe2Rpc3BsYXk6bm9uZX0uZGF5Ym9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTRweDttaW4td2lkdGg6MH0uZGF5bGFiZWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5kYXlub3Rle2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19LnN1Z2dlc3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWFyZ2luLXRvcDoxNHB4fS5zdWdnZXN0IC5jaGlwe2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweCAxMXB4O2NvbG9yOnZhcigtLWZnKX0uc3VnZ2VzdCAuY2hpcDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uc3VnZ2VzdCAuY2hpcDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb3JtIGxhYmVsLnJlbWVtYmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Zm9udC13ZWlnaHQ6NDAwO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowfS5mb3JtIGxhYmVsLnJlbWVtYmVyIGlucHV0e21hcmdpbjoycHggMCAwfS5wbGFjZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXAucGxhY2V7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4IDEwcHg7Y29sb3I6dmFyKC0tZmcpfS5jaGlwLnBsYWNlIHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY2hpcC5wbGFjZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uY2hpcC5wbGFjZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5zdWdnZXN0IC5jaGlwLnNheSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZmluZGVye2Rpc3BsYXk6ZmxleDtnYXA6OHB4fS5maW5kZXIgaW5wdXR7ZmxleDoxO21pbi13aWR0aDowO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtwYWRkaW5nOjlweCAxMnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKX0uZmluZGVyIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnJlZ2lvbntkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LmNvdW50cnluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXRvcDo2cHh9LmNvdW50cnluYW1lIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzowO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdHtkaXNwbGF5OmdyaWQ7Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5kZXN0Omxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTowfS5kZXN0LWNvdW50cnl7anVzdGlmeS1zZWxmOnN0YXJ0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5kZXN0LWNvdW50cnkgc21hbGx7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5kZXN0LWNvdW50cnkgLm57Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0LWNvdW50cnk6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uZGVzdC1jb3VudHJ5OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LmZpbmRlciAuZ297ZmxleDpub25lO3BhZGRpbmc6OXB4IDE4cHg7Zm9udC1zaXplOjEzcHh9LnNvcnRzLWt7YWxpZ24tc2VsZjpjZW50ZXI7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tcmlnaHQ6MnB4fS5jaGlwLnNvcnRbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5zZWFyY2h7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zZWFyY2ggLnN0YXl7cGFkZGluZzowO2JhY2tncm91bmQ6bm9uZX0uc2VhcmNoIC53aGVyZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc2VhcmNoIC53aGVyZSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OXB4IDExcHh9LnNlYXJjaCAud2hlcmUgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0uc2VhcmNoIC5zdGF5IC5nb3twYWRkaW5nOjlweCAxNHB4O2ZvbnQtc2l6ZToxM3B4fS50LXRhZ3N7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo0cHg7bWFyZ2luLXRvcDo0cHh9LnQtZnJvbS50LW5vbmV7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4fS5zdGF5IC5nby5xdWlldHtwYWRkaW5nOjhweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHh9LmZpbHRlci1wYW5lbHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LmZncm91cHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDthbGlnbi1pdGVtczpjZW50ZXJ9LnQtZnJvbSAudC1zdWJ7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjFweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXSBzbWFsbHtjb2xvcjppbmhlcml0fS5jaGlwLnRvb2x7Zm9udC13ZWlnaHQ6NjAwfS5jaGlwLnRvb2xbYXJpYS1leHBhbmRlZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfTwvc3R5bGU+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+Y29uc3QgeGY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLENmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxEYz17fSxFZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAoZD0+e2lmKGQ9Q2YoZCxvKSxkIGluIERjKXJldHVybjtEY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1hLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCAkPWFbd107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKGsucmVsPW0/InN0eWxlc2hlZXQiOnhmLG18fChrLmFzPSJzY3JpcHQiKSxrLmNyb3NzT3JpZ2luPSIiLGsuaHJlZj1kLGwmJmsuc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodywkKT0+e2suYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksay5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBPZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBBZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBFbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIFJmKGUpe31mdW5jdGlvbiBaZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIE5mKGUpe31mdW5jdGlvbiBhcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBjcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+VHMobikpLmpvaW4odCl9ZnVuY3Rpb24gYm8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIGpme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIG5ldyBqZihlKX1mdW5jdGlvbiBTcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBNZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gT3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgTGM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gQXUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1MYylyZXR1cm4gbz09PXZvaWQgMCYmKG89TGMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIE1mKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gbnQoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBPbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBDZShlKXtyZXR1cm4gT28oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gUnUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBudCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBadShlLHQsbil7dCBpbiBlP250KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gUWUoZSx0LG4sbyl7Y29uc3Qgcj1DZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9SdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpadShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBxZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/UnUoZSxuLCgpPT50W25dKTpadShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBhZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBEZihlKXtyZXR1cm4gYWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gTGYoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gVWYoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIEZmKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gTnUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIGp1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgenM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gbHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IE11PVF0KCgpPT57aWYobGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gRGUoZSl7aWYobHQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKGx0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIERlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gSGYoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgQmY9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LHZvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSkscXU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gRWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBXKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiBfKGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBWZihlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBUcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBEdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEx1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxVdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gRnUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gUWUocyxlLFJvKGUsdCkpLFcoZSxhZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBSbyhlLHQpe2NvbnN0IG49Q2UoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBIdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoUm8oZSx0KSksaT17fTtyZXR1cm4gUWUoaSxlLFJlZmxlY3Qub3duS2V5cyhDZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLFcoZSxhZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBCdShlLHQpe2lmKCFEZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1DZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gVyhlLGFlKGUuX3pvZC5kZWYse3NoYXBlOlZ1KGUsdCl9KSl9ZnVuY3Rpb24gVnUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBRZShuLGUsUmVmbGVjdC5vd25LZXlzKENlKGUpKSkscWYobix0KSxufWZ1bmN0aW9uIEp1KGUsdCl7aWYoIURlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBXKGUsYWUoZS5fem9kLmRlZix7c2hhcGU6VnUoZSx0KX0pKX1mdW5jdGlvbiBLdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtRZShuLGUsUmVmbGVjdC5vd25LZXlzKENlKGUpKSksUWUobix0LFJlZmxlY3Qub3duS2V5cyhDZSh0KSkpO2NvbnN0IG89YWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBXKGUsbyl9ZnVuY3Rpb24gdXMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KFJvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiBRZSh1LHQsUmVmbGVjdC5vd25LZXlzKENlKHQpKSxlJiYoKGwsZCk9PmEmJiFhLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLFcodCxhZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiBXdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoUm8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIFFlKHIsdCxSZWZsZWN0Lm93bktleXMoQ2UodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFcodCxhZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGRlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gR3UoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB5ZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIHN0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIGxzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiB3ZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOnN0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9zdChzPy4oZSkpPz9zdCh0Py5lcnJvcj8uKGUpKT8/c3Qobi5jdXN0b21FcnJvcj8uKGUpKT8/c3Qobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGFbdV09ZVt1XSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gWm8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IEpmPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIE5vKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIUpmLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gam8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIFF1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gZHQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBLZihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gWXUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFh1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gV2YoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gWXUodCtuKX1mdW5jdGlvbiBHZihlKXtyZXR1cm4gWHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIFFmKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBZZihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBYZntjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIGVsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6ZW0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBPZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBNbyhlLHQsbil7cmV0dXJuIE9lKGUsdCxuLCExKX1mdW5jdGlvbiBZdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gT2UodGhpcyxuLG8odGhpcykpfSxzZXQocil7T2UodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGVtKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpPZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe09lKHRoaXMsdCxvKX19KX1mdW5jdGlvbiB0bShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IHRzLGplPSExO2NvbnN0IG5tPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7amU9ITB9fTtmdW5jdGlvbiBBKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmdHMhPT1lLl96b2Qpe3RzPXZvaWQgMDtyZXR1cm59dHM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LG5tKTtjb25zdCByPWplO2plPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIGplP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksamU9amV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxqZT1qZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gdGwoZSx0LG4sbyl7Y29uc3Qgcj10bShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IG5sPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gSXMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtubF09ITAsdH1jb25zdCBQcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6VXUsQ09OU1RBTlRfQ0FUQ0g6bmwsQ2xhc3M6WGYsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6THUsYWJvcnRlZDpkZSxhbGxvd3NFdmFsOk11LGFzc2VydDpOZixhc3NlcnRFcXVhbDpPZixhc3NlcnRJczpSZixhc3NlcnROZXZlcjpaZixhc3NlcnROb3RFcXVhbDpBZixhc3NpZ25Qcm9wOm50LGF0dGFjaFNjaGVtYTpscyxiYXNlNjRUb1VpbnQ4QXJyYXk6WXUsYmFzZTY0dXJsVG9VaW50OEFycmF5OldmLGNhY2hlZDpRdCxjYXB0dXJlU3RhY2tUcmFjZTp6cyxjbGVhbkVudW06S2YsY2xlYW5SZWdleDpNZSxjbG9uZTpXLGNsb25lRGVmOkRmLGNvZGVQb2ludExlbmd0aDpObyxjb25zdGFudENhdGNoOklzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6VmYsZGVmaW5lTGF6eTpBdSxkZWZpbmVMYXp5SW50ZXJuYWw6QSxkZXJpdmVkOll0LGVzYzpOdSxlc2NhcGVSZWdleDpFZSxleHBsaWNpdGx5QWJvcnRlZDpHdSxleHRlbmQ6QnUsZmluYWxpemVJc3N1ZTp3ZSxmbG9hdFNhZmVSZW1haW5kZXI6T3UsZ2V0RWxlbWVudEF0UGF0aDpMZixnZXRFbnVtVmFsdWVzOmFzLGdldExlbmd0aGFibGVPcmlnaW46am8sZ2V0UGFyc2VkVHlwZTpCZixnZXRTaXphYmxlT3JpZ2luOlpvLGhleFRvVWludDhBcnJheTpRZixoaWRlOk1vLGluc3RhbGxMYXp5UHJvcDp0bCxpc09iamVjdDpsdCxpc1BsYWluT2JqZWN0OkRlLGlzc3VlOmR0LGpvaW5WYWx1ZXM6Y3MsanNvblN0cmluZ2lmeVJlcGxhY2VyOmJvLG1lbWJlcnM6ZWwsbWVyZ2U6S3UsbWVyZ2VEZWZzOmFlLG5vcm1hbGl6ZVBhcmFtczpfLG51bGxpc2g6U3MsbnVtS2V5czpIZixvYmplY3RDbG9uZTpNZixvbWl0Okh1LG9wdGlvbmFsS2V5czpEdSxvd246T2UscGFyc2VkVHlwZTpRdSxwYXJ0aWFsOnVzLHBpY2s6RnUscHJlZml4SXNzdWVzOnllLHByaW1pdGl2ZVR5cGVzOnF1LHByb21pc2VBbGxPYmplY3Q6VWYscHJvcGVydHlLZXlUeXBlczp2byxyYW5kb21TdHJpbmc6RmYscmF3U2hhcGU6T28scmVxdWlyZWQ6V3Usc2FmZUV4dGVuZDpKdSxzaGFsbG93Q2xvbmU6QW8sc2x1Z2lmeTpqdSxzdHJpbmdpZnlQcmltaXRpdmU6VHMsdG9ab2Q6RW8sdWludDhBcnJheVRvQmFzZTY0Olh1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpHZix1aW50OEFycmF5VG9IZXg6WWYsdW53cmFwTWVzc2FnZTpzdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgVWM7Y29uc3QgeHM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLG5zPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IEZjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIG9tKGUpe2NvbnN0IHQ9RmM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBGYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7bnMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixucyl9ZmluYWxseXtucy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxhKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBaPXc7Zm9yKDtaJiZaIT09JDspWj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoWik7Y29uc3QgST1aPz93O2EuaGFzKEkpfHwoYS5hZGQoSSksZWwoSSxpKSl9Y29uc3Qgaz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBrKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLHcpJiYodyBpbiBifHwoYlt3XT1rW3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P29tKGQpOnRoaXM7dSh2LGIpO2NvbnN0IGs9di5fem9kLmRlZmVycmVkO2lmKGspe2Zvcihjb25zdCAkIG9mIGspJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBDcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIHFlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIHFvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShVYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhVYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGxlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIFgoZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24obGUsZSksbGV9ZnVuY3Rpb24gcm0oKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLGJvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gc20oZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBpbT17Z2V0OnJtLHNldDpzbSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sb3M9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxIYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxvbD0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixvcy52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLG9zKSxvcy52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLGltKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtIYy5oYXMobil8fChIYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0scmw9cCgiJFpvZEVycm9yIixvbCksZ2U9cCgiJFpvZEVycm9yIixvbCx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIGFtKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gRG8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9hbShuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gTG8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgdT1uLGw9MDtmb3IoO2w8YS5sZW5ndGg7KXtjb25zdCBkPWFbbF0sbT1sPT09YS5sZW5ndGgtMTtpZihkPT09Il9lcnJvcnMiKXttJiZ1Ll9lcnJvcnMucHVzaCh0KGkpKSxsKys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsZCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGQse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IGI9dVtkXTttJiZiLl9lcnJvcnMucHVzaCh0KGkpKSx1PWIsbCsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIEVzKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcCh1PT5vKHtpc3N1ZXM6dX0sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IHU9Wy4uLnMsLi4uYS5wYXRoXTtpZih1Lmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IGw9bixkPTA7Zm9yKDtkPHUubGVuZ3RoOyl7Y29uc3QgbT11W2RdLGI9ZD09PXUubGVuZ3RoLTE7dHlwZW9mIG09PSJzdHJpbmciPyhsLnByb3BlcnRpZXM/PyhsLnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLnByb3BlcnRpZXMsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3BlcnRpZXMsbSx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxsPWwucHJvcGVydGllc1ttXSk6KGwuaXRlbXM/PyhsLml0ZW1zPVtdKSwoaT1sLml0ZW1zKVttXT8/KGlbbV09e2Vycm9yczpbXX0pLGw9bC5pdGVtc1ttXSksYiYmbC5lcnJvcnMucHVzaCh0KGEpKSxkKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBzbChlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gT3MoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7c2woby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gVW8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBYdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IHFlO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgdT1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAobD0+d2UobCxpLFgoKSkpKTt0aHJvdyB6cyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LGRzPVh0KGdlKSxlbj1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgdT1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAobD0+d2UobCxpLFgoKSkpKTt0aHJvdyB6cyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LHBzPWVuKGdlKSx0bj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBxZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP2FsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0saWw9dG4oZ2UpO2Z1bmN0aW9uIGFsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+d2UocixuLFgoKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IG5uPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/YWwoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxjbT1ubihnZSksdW09U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLGxtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksRm89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT11bSlyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIGRtKGUsdCxuKX0pO2Z1bmN0aW9uIGRtKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW2xtXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IHFlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IEhvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sQXM9ZT0+e2NvbnN0IHQ9WHQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEsVW8obixpKSl9O3JldHVybiBufSxwbT1BcyhnZSksUnM9ZT0+e2NvbnN0IHQ9WHQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMsVW8obixpKSk7cmV0dXJuIG59LGhtPVJzKGdlKSxacz1lPT57Y29uc3QgdD1lbihlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLFVvKG4saSkpfTtyZXR1cm4gbn0sZm09WnMoZ2UpLE5zPWU9Pntjb25zdCB0PWVuKGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMsVW8obixpKSk7cmV0dXJuIG59LG1tPU5zKGdlKSxqcz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0bihlKSh0LG4scil9LGdtPWpzKGdlKSxNcz1lPT4odCxuLG8pPT50bihlKSh0LG4sbyksYm09TXMoZ2UpLHFzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gbm4oZSkodCxuLHIpfSx2bT1xcyhnZSksRHM9ZT0+YXN5bmModCxuLG8pPT5ubihlKSh0LG4sbykseW09RHMoZ2UpLGNsPS9eW2NDXVswLTlhLXpdezYsfSQvLHVsPS9eWzAtOWEtel0rJC8sbGw9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sZGw9L15bMC05YS12QS1WXXsyMH0kLyxwbD0vXltBLVphLXowLTldezI3fSQvLGhsPS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBmbChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3QgbWw9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sX209L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxnbD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8scHQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLGttPXB0KDQpLHdtPXB0KDYpLCRtPXB0KDcpLGJsPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLFNtPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLHptPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLHZsPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LFRtPXZsLEltPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLFBtPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24geWwoKXtyZXR1cm4gbmV3IFJlZ0V4cChQbSwidSIpfWNvbnN0IF9sPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxrbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLHdsPWU9Pntjb25zdCB0PUVlKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LCRsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxTbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyx4bT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyxDbT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8semw9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLFRsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxMcz0vXmh0dHBzPyQvLElsPS9eXCtbMS05XVxkezYsMTR9JC8sVXM9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLFBsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLEZzPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLHhsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiBFbShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgQ2w9RW0oeGwpO2Z1bmN0aW9uIGhzKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24gRWwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2hzKGUpfSRgKX1mdW5jdGlvbiBPbChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7aHMoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHtocyh7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHt4bH1UKD86JHtvfSkkYCl9Y29uc3QgQWw9L15bXHNcU117MCx9JC8sUmw9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0sWmw9L14tP1xkK24/JC8sTmw9L14tP1xkKyQvLEJvPS9eLT9cZCsoPzpcLlxkKyk/JC8samw9L14oPzp0cnVlfGZhbHNlKSQvaSxNbD0vXm51bGwkL2kscWw9L151bmRlZmluZWQkL2ksRGw9L15bXkEtWl0qJC8sTGw9L15bXmEtel0qJC8sVWw9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBvbihlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IE9tPS9eWzAtOWEtZkEtRl17MzJ9JC8sQW09b24oMjIsIj09IiksUm09cm4oMjIpLFptPS9eWzAtOWEtZkEtRl17NDB9JC8sTm09b24oMjcsIj0iKSxqbT1ybigyNyksTW09L15bMC05YS1mQS1GXXs2NH0kLyxxbT1vbig0MywiPSIpLERtPXJuKDQzKSxMbT0vXlswLTlhLWZBLUZdezk2fSQvLFVtPW9uKDY0LCIiKSxGbT1ybig2NCksSG09L15bMC05YS1mQS1GXXsxMjh9JC8sQm09b24oODYsIj09IiksVm09cm4oODYpLFZvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6QWwsYmFzZTY0OnhtLGJhc2U2NHVybDpDbSxiaWdpbnQ6WmwsYm9vbGVhbjpqbCxicm93c2VyRW1haWw6SW0sY2lkcnY0OiRsLGNpZHJ2NjpTbCxjcmVkaXRDYXJkOlVzLGN1aWQ6Y2wsY3VpZDI6dWwsY3VycmVuY3lDb2RlOlBsLGRhdGU6Q2wsZGF0ZXRpbWU6T2wsZG9tYWluOlRsLGR1cmF0aW9uOm1sLGUxNjQ6SWwsZW1haWw6YmwsZW1vamk6eWwsZXh0ZW5kZWREdXJhdGlvbjpfbSxndWlkOmdsLGhleDpVbCxob3N0bmFtZTp6bCxodG1sNUVtYWlsOlNtLGh0dHBQcm90b2NvbDpMcyxpYmFuOkZzLGlkbkVtYWlsOlRtLGludGVnZXI6TmwsaXB2NDpfbCxpcHY2OmtsLGtzdWlkOnBsLGxvd2VyY2FzZTpEbCxtYWM6d2wsbWQ1X2Jhc2U2NDpBbSxtZDVfYmFzZTY0dXJsOlJtLG1kNV9oZXg6T20sbmFub2lkOmhsLG5hbm9pZE9mTGVuZ3RoOmZsLG51bGw6TWwsbnVtYmVyOkJvLHJmYzUzMjJFbWFpbDp6bSxzaGExX2Jhc2U2NDpObSxzaGExX2Jhc2U2NHVybDpqbSxzaGExX2hleDpabSxzaGEyNTZfYmFzZTY0OnFtLHNoYTI1Nl9iYXNlNjR1cmw6RG0sc2hhMjU2X2hleDpNbSxzaGEzODRfYmFzZTY0OlVtLHNoYTM4NF9iYXNlNjR1cmw6Rm0sc2hhMzg0X2hleDpMbSxzaGE1MTJfYmFzZTY0OkJtLHNoYTUxMl9iYXNlNjR1cmw6Vm0sc2hhNTEyX2hleDpIbSxzdHJpbmc6UmwsdGltZTpFbCx1bGlkOmxsLHVuZGVmaW5lZDpxbCx1bmljb2RlRW1haWw6dmwsdXBwZXJjYXNlOkxsLHV1aWQ6cHQsdXVpZDQ6a20sdXVpZDY6d20sdXVpZDc6JG0seGlkOmRsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEo9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLEhzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIVNzKHQpJiZ0LnNpemUhPT12b2lkIDB9LEJzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIVNzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0seW89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sVnM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj15b1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46eW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSnM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj15b1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46eW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxGbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e0ouaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTpPdShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEhsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntKLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109THVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksQmw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0W24sb109VXVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxWbD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49SHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Wm8ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSmw9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUhzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOlpvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksS2w9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUhzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjpabyhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFdsPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtP05vKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9am8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksR2w9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49QnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyP05vKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9am8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxRbD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1CcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/Tm8ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9am8ociksdT1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLnU/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHNuPXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO0ouaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLFlsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e3NuLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFhsPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RGwpLHNuLmluaXQoZSx0KX0pLGVkPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TGwpLHNuLmluaXQoZSx0KX0pLHRkPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49RWUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG5kPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtFZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG9kPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke0VlKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIF9vKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ueWUobixlLmlzc3VlcykpfWNvbnN0IHJkPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e0ouaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9Pl9vKHIsbix0LnByb3BlcnR5KSk7X28obyxuLHQucHJvcGVydHkpfX0pLHNkPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57Si5pbml0KGUsdCksTW8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgdT1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO3UgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKHUudGhlbihsPT5fbyhsLG8saSkpKSk6X28odSxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxpZD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGFkPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBjZHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IHVkPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0seD1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249dWQ7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsdSxsKT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgZD1kZShhKSxtO2Zvcihjb25zdCBiIG9mIHUpe2lmKGIuX3pvZC5kZWYud2hlbil7aWYoR3UoYSl8fCFiLl96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihkKWNvbnRpbnVlO2NvbnN0IHY9YS5pc3N1ZXMubGVuZ3RoLGs9Yi5fem9kLmNoZWNrKGEpO2lmKGsgaW5zdGFuY2VvZiBQcm9taXNlJiZsPy5hc3luYz09PSExKXRocm93IG5ldyBxZTtpZihtfHxrIGluc3RhbmNlb2YgUHJvbWlzZSltPShtPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgayxhLmlzc3Vlcy5sZW5ndGghPT12JiYobHMoYS5pc3N1ZXMsdixlKSxkfHwoZD1kZShhLHYpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PXYpY29udGludWU7bHMoYS5pc3N1ZXMsdixlKSxkfHwoZD1kZShhLHYpKX19cmV0dXJuIG0/bS50aGVuKCgpPT5hKTphfSxpPShhLHUsbCk9PntpZihkZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgZD1zKHUscixsKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYobC5hc3luYz09PSExKXRocm93IG5ldyBxZTtyZXR1cm4gZC50aGVuKG09PmUuX3pvZC5wYXJzZShtLGwpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGQsbCl9O2UuX3pvZC5ydW49KGEsdSk9PntpZih1LnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLHUpO2lmKHUuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgZD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4udSxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGQgaW5zdGFuY2VvZiBQcm9taXNlP2QudGhlbihtPT5pKG0sYSx1KSk6aShkLGEsdSl9Y29uc3QgbD1lLl96b2QucGFyc2UoYSx1KTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBxZTtyZXR1cm4gbC50aGVuKGQ9PnMoZCxyLHUpKX1yZXR1cm4gcyhsLHIsdSl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIE1vKHRoaXMsIn5zdGFuZGFyZCIsS3ModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtPZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLGxkPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+d2Uobix0LFgoKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gSm0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIGxkKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBLcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIGxkKG8sbil9Y2F0Y2h7fXJldHVybiBKbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBhbj1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/QWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxGPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57c24uaW5pdChlLHQpLGFuLmluaXQoZSx0KX0pLGRkPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1nbCksRi5pbml0KGUsdCl9KSxwZD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXB0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1wdCgpKTtGLmluaXQoZSx0KX0pLGhkPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YmwpLEYuaW5pdChlLHQpfSksV3M9MSxCdD0yO2Z1bmN0aW9uIEdzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZmQoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9HcyhlKXx8QnQ6bWQoZSx0KX1mdW5jdGlvbiBtZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09THMuc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIFdzO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P0J0fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBCdH19Y29uc3QgS209L1tcdFxuXHJdL2c7ZnVuY3Rpb24gZnMoZSl7cmV0dXJuIGUucmVwbGFjZShLbSwiIil9ZnVuY3Rpb24gZ2QoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gYmQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgdmQ9cCgiJFpvZFVSTCIsKGUsdCk9PntGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9ZmQobyx0KTtpZihyPT09V3Mpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09QnQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPWZzKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhZ2Qocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIWJkKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOmZzKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLHlkPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eWwoKSksRi5pbml0KGUsdCl9KSxfZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/aGw6ZmwodC5sZW5ndGgpKSxGLmluaXQoZSx0KX0pLGtkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1jbCksRi5pbml0KGUsdCl9KSx3ZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXVsKSxGLmluaXQoZSx0KX0pLCRkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1sbCksRi5pbml0KGUsdCl9KSxTZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1kbCksRi5pbml0KGUsdCl9KSx6ZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXBsKSxGLmluaXQoZSx0KX0pLFRkPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49T2wodCkpLEYuaW5pdChlLHQpfSksSWQ9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUNsKSxGLmluaXQoZSx0KX0pLFBkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1FbCh0KSksRi5pbml0KGUsdCl9KSx4ZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW1sKSxGLmluaXQoZSx0KX0pLENkPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1fbCksRi5pbml0KGUsdCl9KSxXbT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIFdtLnRlc3QoZSk/R3MoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBFZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49a2wpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57UXMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksT2Q9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49d2wodC5kZWxpbWl0ZXIpKSxGLmluaXQoZSx0KX0pLEFkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPSRsKSxGLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpRcyhuKX1jb25zdCBaZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1TbCksRi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntSZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIFlzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgTmQ9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLGpkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU5kKSxGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1lzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWHM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIE1kKGUpe2lmKCFYcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIFlzKG4pfWNvbnN0IHFkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVhzKSxGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e01kKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRGQ9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUlsKSxGLmluaXQoZSx0KX0pLEdtPS9bLSBdL2c7ZnVuY3Rpb24gUW0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gTGQoZSl7cmV0dXJuIFVzLnRlc3QoZSk/UW0oZS5yZXBsYWNlKEdtLCIiKSk6ITF9Y29uc3QgVWQ9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVzKSxGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0xkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBZbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBGZChlKXtyZXR1cm4gRnMudGVzdChlKT9ZbShlKTohMX1jb25zdCBIZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RnMpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RmQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gQmQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBWZD1wKCIkWm9kSldUIiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57QmQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxKZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGVpPXAoIiRab2ROdW1iZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49Qm8sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksS2Q9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntIbC5pbml0KGUsdCksZWkuaW5pdChlLHQpfSksdGk9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49amwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxuaT1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVpsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSksV2Q9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntCbC5pbml0KGUsdCksbmkuaW5pdChlLHQpfSksR2Q9cCgiJFpvZFN5bWJvbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksUWQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1xbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxZZD1wKCIkWm9kTnVsbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1NbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksWGQ9cCgiJFpvZEFueSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLGVwPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksdHA9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksbnA9cCgiJFpvZFZvaWQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxvcD1wKCIkWm9kRGF0ZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIEJjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ueWUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBycD1wKCIkWm9kQXJyYXkiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1sZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgdT0wO3U8cy5sZW5ndGg7dSsrKXtjb25zdCBsPXNbdV0sZD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goZC50aGVuKG09PkJjKG0sbyx1KSkpO2Vsc2UgaWYoQmMoZCxvLHUpLGEmJmQuaXNzdWVzLmxlbmd0aCE9PTAmJmRlKGQpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGtvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi55ZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IFhtPVtdO2Z1bmN0aW9uIHNwKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpYbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9RHUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBpcChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLHU9ci5rZXlTZXQsbD1yLmNhdGNoYWxsLl96b2QsZD1sLmRlZi50eXBlLG09bC5vcHRpbixiPWwub3B0b3V0O2xldCB2PTA7Zm9yKGNvbnN0IGsgaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09dil7aWYoZGUobix2KSlicmVhazt2PW4uaXNzdWVzLmxlbmd0aH1pZih1LmhhcyhrKSljb250aW51ZTtpZihrPT09Il9fcHJvdG9fXyIpe2Q9PT0ibmV2ZXIiJiZhLnB1c2goayk7Y29udGludWV9aWYoZD09PSJuZXZlciIpe2EucHVzaChrKTtjb250aW51ZX1jb25zdCB3PWwucnVuKHt2YWx1ZTp0W2tdLGlzc3VlczpbXX0sbyk7dyBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKHcudGhlbigkPT5rbygkLG4sayx0LG0sYikpKTprbyh3LG4sayx0LG0sYil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBhcD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCBsPSgpPT57Y29uc3QgZD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmR9KSxsLnJhdz1kLGR9O2wucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0Omx9KX1jb25zdCByPVF0KCgpPT5zcCh0KSk7QShlLCJwcm9wVmFsdWVzIixsPT57Y29uc3QgZD1sLmRlZi5zaGFwZSxtPXt9O2Zvcihjb25zdCBiIGluIGQpe2NvbnN0IHY9ZFtiXS5fem9kO2lmKHYudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxiKXx8bnQobSxiLG5ldyBTZXQpO2Zvcihjb25zdCBrIG9mIHYudmFsdWVzKW1bYl0uYWRkKGspO3Yub3B0aW4hPT12b2lkIDAmJm1bYl0uYWRkKHZvaWQgMCl9fXJldHVybiBtfSk7Y29uc3Qgcz1sdCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgdT1sZS5tZW1vaXplcjt1Py5hdHRhY2goZSksZS5fem9kLnBhcnNlPShsLGQpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgbT1sLnZhbHVlO2lmKCFzKG0pKXJldHVybiBsLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om0saW5zdDplfSksbDtsLnZhbHVlPXU/dS5hbGxvYyhlLGwse30sZCk6e307Y29uc3QgYj1bXSx2PWEuc2hhcGUsaz1kPy5hYm9ydEVhcmx5O2xldCB3PWwuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBhLmFsbEtleXMpe2lmKGsmJmwuaXNzdWVzLmxlbmd0aCE9PXcpe2lmKGRlKGwsdykpYnJlYWs7dz1sLmlzc3Vlcy5sZW5ndGh9aWYoJD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IFo9dlskXSxJPVouX3pvZC5vcHRpbixWPVouX3pvZC5vcHRvdXQsdGU9Wi5fem9kLnJ1bih7dmFsdWU6bVskXSxpc3N1ZXM6W119LGQpO3RlIGluc3RhbmNlb2YgUHJvbWlzZT9iLnB1c2godGUudGhlbihLPT5rbyhLLGwsJCxtLEksVikpKTprbyh0ZSxsLCQsbSxJLFYpfXJldHVybiBpP2lwKGIsbSxsLGQsci52YWx1ZSxlLGs9PT0hMCk6Yi5sZW5ndGg/UHJvbWlzZS5hbGwoYikudGhlbigoKT0+bCk6bH19KSxjcD1wKCIkWm9kT2JqZWN0SklUIiwoZSx0KT0+e2FwLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZSxvPVF0KCgpPT5zcCh0KSkscj1sZS5tZW1vaXplcixzPXY9Pntjb25zdCBrPW8udmFsdWUsdz1rLnN5bWJvbEtleXMsJD1uZXcgY2QoWyJwYXlsb2FkIiwiY3R4Il0se3NoYXBlOnYsaW5zdDplLG1lbW86cixzeW1zOnd9KSxaPUs9PmBzaGFwZVske0t9XS5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dFske0t9XSwgaXNzdWVzOiBbXSB9LCBjdHgpYCxJPShLLHkpPT5gCiAgICAgICAgICBsZXQgJHtLfV9hYiA9IGZhbHNlOwogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAke0t9Lmlzc3Vlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjb25zdCBpc3MgPSAke0t9Lmlzc3Vlc1tpXTsKICAgICAgICAgICAgaXNzLnBhdGggPSBpc3MucGF0aCA/IFske3l9LCAuLi5pc3MucGF0aF0gOiBbJHt5fV07CiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goaXNzKTsKICAgICAgICAgICAgaWYgKGlzcy5jb250aW51ZSAhPT0gdHJ1ZSkgJHtLfV9hYiA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoJHtLfV9hYiAmJiBjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9YDskLndyaXRlKCJjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7Iik7Y29uc3QgVj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCB0ZT0wO2Zvcihjb25zdCBLIG9mIGsuYWxsS2V5cylWW0tdPWBrZXlfJHt0ZSsrfWA7JC53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBLIG9mIGsuYWxsS2V5cyl7aWYoSz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IHk9VltLXSxUPXR5cGVvZiBLPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihLKX1dYDpOdShLKSxuZT1gJHtUfSBpbiBpbnB1dGAsY2U9dltLXSx6ZT1jZT8uX3pvZD8ub3B0aW4sVmU9emUhPT12b2lkIDAsZXM9Y2U/Ll96b2Q/Lm9wdG91dD09PSJvcHRpb25hbCI7aWYoJC53cml0ZShgY29uc3QgJHt5fSA9ICR7WihUKX07YCksVmUmJmVzKXtjb25zdCBQZj16ZT09PSJvcHRpb25hbCI/YCR7eX1fcHJlc2VudGA6YCR7eX0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke3l9X3ByZXNlbnRgOyQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7eX1fcHJlc2VudCA9ICR7bmV9OwogICAgICAgIGlmICghJHt5fS5pc3N1ZXMubGVuZ3RoIHx8ICR7eX1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7eX0uaXNzdWVzLmxlbmd0aCkgeyR7SSh5LFQpfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke1BmfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHtUfV0gPSAke3l9LnZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGApfWVsc2UgVmU/KCQud3JpdGUoYAogICAgICAgIGlmICgke3l9Lmlzc3Vlcy5sZW5ndGgpIHske0koeSxUKX0KICAgICAgICB9CiAgICAgIGApLHplPT09ImRlZmF1bHRlZCI/JC53cml0ZShgbmV3UmVzdWx0WyR7VH1dID0gJHt5fS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHt5fS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7bmV9KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHtUfV0gPSAke3l9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOiQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7eX1fcHJlc2VudCA9ICR7bmV9OwogICAgICAgIGlmICgke3l9Lmlzc3Vlcy5sZW5ndGgpIHske0koeSxUKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke3l9X3ByZXNlbnQgJiYgISR7eX0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7VH1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHt5fV9wcmVzZW50KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHtUfV0gPSAke3l9LnZhbHVlOwogICAgICAgIH0KCiAgICAgIGApfXJldHVybiAkLndyaXRlKCJwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OyIpLCQud3JpdGUoInJldHVybiBwYXlsb2FkOyIpLCQuY29tcGlsZSgpfTtsZXQgaTtjb25zdCBhPWx0LHU9IWxlLmppdGxlc3MsZD11JiZNdS52YWx1ZSxtPXQuY2F0Y2hhbGw7bGV0IGI7ZS5fem9kLnBhcnNlPSh2LGspPT57Yj8/KGI9by52YWx1ZSk7Y29uc3Qgdz12LnZhbHVlO3JldHVybiBhKHcpP3UmJmQmJms/LmFzeW5jPT09ITEmJmsuaml0bGVzcyE9PSEwPyhpfHwoaT1zKHQuc2hhcGUpKSx2PWkodixrKSxtP2lwKFtdLHcsdixrLGIsZSxrPy5hYm9ydEVhcmx5PT09ITApOnYpOm4odixrKToodi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDp3LGluc3Q6ZX0pLHYpfX0pO2Z1bmN0aW9uIFZjKGUsdCxuLG8pe2Zvcihjb25zdCBzIG9mIGUpaWYocy5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdC52YWx1ZT1zLnZhbHVlLHQ7Y29uc3Qgcj1lLmZpbHRlcihzPT4hZGUocykpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9clswXS52YWx1ZSxyWzBdKToodC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT53ZShpLG8sWCgpKSkpfSksdCl9Y29uc3QgSm89cCgiJFpvZFVuaW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIik/ImRlZmF1bHRlZCI6by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbiE9PXZvaWQgMCk/Im9wdGlvbmFsIjp2b2lkIDApLEEoZSwib3B0b3V0IixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpPyJvcHRpb25hbCI6dm9pZCAwKSxBKGUsInZhbHVlcyIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnZhbHVlcykpcmV0dXJuIG5ldyBTZXQoby5kZWYub3B0aW9ucy5mbGF0TWFwKHI9PkFycmF5LmZyb20oci5fem9kLnZhbHVlcykpKX0pLEEoZSwicGF0dGVybiIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnBhdHRlcm4pKXtjb25zdCByPW8uZGVmLm9wdGlvbnMubWFwKHM9PnMuX3pvZC5wYXR0ZXJuKTtyZXR1cm4gbmV3IFJlZ0V4cChgXigke3IubWFwKHM9Pk1lKHMuc291cmNlKSkuam9pbigifCIpfSkkYCl9fSk7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgaT1bXTtmb3IoY29uc3QgYSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9YS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaCh1KSxzPSEwO2Vsc2V7aWYodS5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdTtpLnB1c2godSl9fXJldHVybiBzP1Byb21pc2UuYWxsKGkpLnRoZW4oYT0+VmMoYSxvLGUscikpOlZjKGksbyxlLHIpfX0pO2Z1bmN0aW9uIEpjKGUsdCxuLG8pe2NvbnN0IHI9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspZVtzXS5pc3N1ZXMubGVuZ3RoPT09MCYmci5wdXNoKHMpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9ZVtyWzBdXS52YWx1ZSx0KTooci5sZW5ndGg9PT0wP3QuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+d2UoaSxvLFgoKSkpKX0pOnQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczpbXSxpbmNsdXNpdmU6ITEsbWF0Y2hlczpyfSksdCl9Y29uc3QgdXA9cCgiJFpvZFhvciIsKGUsdCk9PntKby5pbml0KGUsdCksdC5pbmNsdXNpdmU9ITE7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgaT1bXTtmb3IoY29uc3QgYSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9YS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO3UgaW5zdGFuY2VvZiBQcm9taXNlPyhpLnB1c2godSkscz0hMCk6aS5wdXNoKHUpfXJldHVybiBzP1Byb21pc2UuYWxsKGkpLnRoZW4oYT0+SmMoYSxvLGUscikpOkpjKGksbyxlLHIpfX0pO2Z1bmN0aW9uIG9pKGUsdCl7Y29uc3Qgbj1lLl96b2Q7bGV0IG89bi5iYWcub3B0aW9uc01hcDtvfHwobz1scChuLmRlZiksbi5iYWcub3B0aW9uc01hcD1vKTtjb25zdCByPW8uZ2V0KHQpO2lmKHI9PT1udWxsKXRocm93IG5ldyBFcnJvcihgQW1iaWd1b3VzIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHQpfSJgKTtyZXR1cm4gcn1mdW5jdGlvbiBscChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0IG4gb2YgZS5vcHRpb25zKXtjb25zdCBvPW4uX3pvZC5wcm9wVmFsdWVzPy5bZS5kaXNjcmltaW5hdG9yXTtpZighb3x8by5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ZS5vcHRpb25zLmluZGV4T2Yobil9ImApO2Zvcihjb25zdCByIG9mIG8paWYodC5oYXMocikpe2lmKHIhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcocil9ImApO3Quc2V0KHIsbnVsbCl9ZWxzZSB0LnNldChyLG4pfXJldHVybiB0fWNvbnN0IGRwPXAoIiRab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57dC5pbmNsdXNpdmU9ITEsSm8uaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlO0EoZSwicHJvcFZhbHVlcyIscj0+e2NvbnN0IHM9e307bGV0IGk9MDtmb3IoY29uc3QgYSBvZiByLmRlZi5vcHRpb25zKXtjb25zdCB1PWEuX3pvZC5wcm9wVmFsdWVzO2lmKCF1fHxPYmplY3Qua2V5cyh1KS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtyLmRlZi5vcHRpb25zLmluZGV4T2YoYSl9ImApO3Vbci5kZWYuZGlzY3JpbWluYXRvcl0/Lmhhcyh2b2lkIDApJiZpKys7Zm9yKGNvbnN0W2wsZF1vZiBPYmplY3QuZW50cmllcyh1KSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbCl8fG50KHMsbCxuZXcgU2V0KTtmb3IoY29uc3QgbSBvZiBkKXNbbF0uYWRkKG0pfX1yZXR1cm4hci5kZWYudW5pb25GYWxsYmFjayYmaT4xJiZzW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5kZWxldGUodm9pZCAwKSxzfSksdC5vcHRpb25zLmZvckVhY2goKHIscyk9Pntjb25zdCBpPU9vKHIuX3pvZC5kZWYpO2lmKGkmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSx0LmRpc2NyaW1pbmF0b3IpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtzfSJgKX0pO2NvbnN0IG89UXQoKCk9PmxwKHQpKTtlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIWx0KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJvYmplY3QiLGlucHV0OmksaW5zdDplfSkscjtjb25zdCBhPWk/Llt0LmRpc2NyaW1pbmF0b3JdLHU9by52YWx1ZS5nZXQoYSk7cmV0dXJuIHUmJihhIT09dm9pZCAwfHxzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCIpP3UuX3pvZC5ydW4ocixzKTp0LnVuaW9uRmFsbGJhY2t8fHMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIj9uKHIscyk6KHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGVycm9yczpbXSxub3RlOiJObyBtYXRjaGluZyBkaXNjcmltaW5hdG9yIixkaXNjcmltaW5hdG9yOnQuZGlzY3JpbWluYXRvcixvcHRpb25zOkFycmF5LmZyb20oby52YWx1ZS5rZXlzKCkpLmZpbHRlcihsPT5vLnZhbHVlLmdldChsKSE9PW51bGwpLGlucHV0OmkscGF0aDpbdC5kaXNjcmltaW5hdG9yXSxpbnN0OmV9KSxyKX19KSxwcD1wKCIkWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZSxzPXQubGVmdC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pLGk9dC5yaWdodC5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZXx8aSBpbnN0YW5jZW9mIFByb21pc2U/UHJvbWlzZS5hbGwoW3MsaV0pLnRoZW4oKFt1LGxdKT0+S2Mobix1LGwpKTpLYyhuLHMsaSl9fSk7ZnVuY3Rpb24gd28oZSx0KXtpZihlPT09dClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUmJitlPT0rdClyZXR1cm57dmFsaWQ6ITAsZGF0YTplfTtpZihEZShlKSYmRGUodCkpe2NvbnN0IG49T2JqZWN0LmtleXModCksbz1PYmplY3Qua2V5cyhlKS5maWx0ZXIocz0+bi5pbmRleE9mKHMpIT09LTEpLHI9ey4uLmUsLi4udH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIl9fcHJvdG9fXyIpJiZkZWxldGUgci5fX3Byb3RvX187Zm9yKGNvbnN0IHMgb2Ygbyl7aWYocz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGk9d28oZVtzXSx0W3NdKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W3MsLi4uaS5tZXJnZUVycm9yUGF0aF19O3Jbc109aS5kYXRhfXJldHVybnt2YWxpZDohMCxkYXRhOnJ9fWlmKEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkodCkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfTtjb25zdCBuPVtdO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtjb25zdCByPWVbb10scz10W29dLGk9d28ocixzKTtpZighaS52YWxpZClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W28sLi4uaS5tZXJnZUVycm9yUGF0aF19O24ucHVzaChpLmRhdGEpfXJldHVybnt2YWxpZDohMCxkYXRhOm59fXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX19ZnVuY3Rpb24gS2MoZSx0LG4pe2NvbnN0IG89bmV3IE1hcDtsZXQgcjtjb25zdCBzPW5ldyBNYXAsaT0obCxkKT0+e2xldCBtO2lmKGwuY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyImJiFsLnBhdGg/Lmxlbmd0aClyPz8ocj1sKSxtPWwua2V5cztlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX2tleSImJmwub3JpZ2luPT09InJlY29yZCImJmwucGF0aD8ubGVuZ3RoPT09MSl7Y29uc3QgYj1TdHJpbmcobC5wYXRoWzBdKTtzLmhhcyhiKXx8cy5zZXQoYixsKSxtPVtiXX1lbHNlIHJldHVybiExO2Zvcihjb25zdCBiIG9mIG0pby5oYXMoYil8fG8uc2V0KGIse30pLG8uZ2V0KGIpW2RdPSEwO3JldHVybiEwfTtmb3IoY29uc3QgbCBvZiB0Lmlzc3VlcylpKGwsImwiKXx8ZS5pc3N1ZXMucHVzaChsKTtmb3IoY29uc3QgbCBvZiBuLmlzc3VlcylpKGwsInIiKXx8ZS5pc3N1ZXMucHVzaChsKTtjb25zdCBhPVsuLi5vXS5maWx0ZXIoKFssbF0pPT5sLmwmJmwucikubWFwKChbbF0pPT5sKTtpZihhLmxlbmd0aCl7Y29uc3QgbD1yP2EuZmlsdGVyKGQ9PnIua2V5cy5pbmNsdWRlcyhkKSk6W107bC5sZW5ndGgmJmUuaXNzdWVzLnB1c2goey4uLnIsa2V5czpsfSk7Zm9yKGNvbnN0IGQgb2YgYSkhbC5pbmNsdWRlcyhkKSYmcy5oYXMoZCkmJmUuaXNzdWVzLnB1c2gocy5nZXQoZCkpfWNvbnN0IHU9d28odC52YWx1ZSxuLnZhbHVlKTtpZighdS52YWxpZCl7aWYoZGUoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbm1lcmdhYmxlIGludGVyc2VjdGlvbi4gRXJyb3IgcGF0aDogJHtKU09OLnN0cmluZ2lmeSh1Lm1lcmdlRXJyb3JQYXRoKX1gKX1yZXR1cm4gZS52YWx1ZT11LmRhdGEsZX1jb25zdCByaT1wKCIkWm9kVHVwbGUiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj10Lml0ZW1zLG89bGUubWVtb2l6ZXI7bz8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighQXJyYXkuaXNBcnJheShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7aW5wdXQ6aSxpbnN0OmUsZXhwZWN0ZWQ6InR1cGxlIixjb2RlOiJpbnZhbGlkX3R5cGUifSkscjtyLnZhbHVlPW8/by5hbGxvYyhlLHIsW10scyk6W107Y29uc3QgYT1bXSx1PVdjKG4sIm9wdGluIiksbD1XYyhuLCJvcHRvdXQiKTtpZighdC5yZXN0KXtpZihpLmxlbmd0aDx1KXJldHVybiByLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dSxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KSxyO2kubGVuZ3RoPm4ubGVuZ3RoJiZyLmlzc3Vlcy5wdXNoKHtjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm4ubGVuZ3RoLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pfWNvbnN0IGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxtPXQucmVzdD9zPy5hYm9ydEVhcmx5OnZvaWQgMDtsZXQgYj0hMTtmb3IobGV0IHY9MDt2PG4ubGVuZ3RoO3YrKyl7Y29uc3Qgaz1uW3ZdLl96b2QucnVuKHt2YWx1ZTppW3ZdLGlzc3VlczpbXX0scyk7ayBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKGsudGhlbih3PT57ZFt2XT13fSkpOihkW3ZdPWssbSYmIWImJmsuaXNzdWVzLmxlbmd0aCYmKGI9ZGUoaykpKX1pZih0LnJlc3QmJiFiKXtsZXQgdj1uLmxlbmd0aC0xO2NvbnN0IGs9aS5zbGljZShuLmxlbmd0aCk7bGV0IHc9ci5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGspe2lmKG0mJnIuaXNzdWVzLmxlbmd0aCE9PXcpe2lmKGRlKHIsdykpYnJlYWs7dz1yLmlzc3Vlcy5sZW5ndGh9disrO2NvbnN0IFo9dC5yZXN0Ll96b2QucnVuKHt2YWx1ZTokLGlzc3VlczpbXX0scyk7WiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFoudGhlbihJPT5HYyhJLHIsdikpKTpHYyhaLHIsdil9fXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5RYyhkLHIsbixpLGwpKTpRYyhkLHIsbixpLGwpfX0pO2Z1bmN0aW9uIFdjKGUsdCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoISh0PT09Im9wdGluIj9lW25dLl96b2Qub3B0aW4hPT12b2lkIDA6ZVtuXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpKXJldHVybiBuKzE7cmV0dXJuIDB9ZnVuY3Rpb24gR2MoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi55ZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWZ1bmN0aW9uIFFjKGUsdCxuLG8scil7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IGk9ZVtzXSxhPXM8by5sZW5ndGg7aWYoIWEmJnM+PXImJm5bc10uX3pvZC5vcHRpbj09PSJvcHRpb25hbCIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9aWYoaS5pc3N1ZXMubGVuZ3RoKXtpZighYSYmcz49cil7dC52YWx1ZS5sZW5ndGg9czticmVha310Lmlzc3Vlcy5wdXNoKC4uLnllKHMsaS5pc3N1ZXMpKX10LnZhbHVlW3NdPWkudmFsdWV9Zm9yKGxldCBzPXQudmFsdWUubGVuZ3RoLTE7cz49by5sZW5ndGgmJihuW3NdLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIiYmdC52YWx1ZVtzXT09PXZvaWQgMCk7cy0tKXQudmFsdWUubGVuZ3RoPXM7cmV0dXJuIHR9Y29uc3QgaHA9cCgiJFpvZFJlY29yZCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWxlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIURlKHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoicmVjb3JkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdLGE9dC5rZXlUeXBlLl96b2QudmFsdWVzO2lmKGEmJiF0LnBhcnRpYWwpe28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtjb25zdCB1PW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYSlpZih0eXBlb2YgZD09InN0cmluZyJ8fHR5cGVvZiBkPT0ibnVtYmVyInx8dHlwZW9mIGQ9PSJzeW1ib2wiKXtpZih1LmFkZCh0eXBlb2YgZD09Im51bWJlciI/ZC50b1N0cmluZygpOmQpLGQ9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO2lmKG0gaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKG0uaXNzdWVzLmxlbmd0aCl7by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6bS5pc3N1ZXMubWFwKGs9PndlKGsscixYKCkpKSxpbnB1dDpkLHBhdGg6W2RdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9bS52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tkXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaCh2LnRoZW4oaz0+e2suaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi55ZShkLGsuaXNzdWVzKSksby52YWx1ZVtiXT1rLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ueWUoZCx2Lmlzc3VlcykpLG8udmFsdWVbYl09di52YWx1ZSl9bGV0IGw7Zm9yKGNvbnN0IGQgaW4gcylpZighdS5oYXMoZCkpaWYodC5tb2RlPT09Imxvb3NlIil7aWYoZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO28udmFsdWVbZF09c1tkXX1lbHNlIGw9bD8/W10sbC5wdXNoKGQpO2wmJmwubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOmwsY29udGludWU6ITB9KX1lbHNle28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtsZXQgdTtmb3IoY29uc3QgbCBvZiBSZWZsZWN0Lm93bktleXMocykpe2lmKGw9PT0iX19wcm90b19fInx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLGwpKWNvbnRpbnVlO2xldCBkPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKHR5cGVvZiBsPT0ic3RyaW5nIiYmQm8udGVzdChsKSYmZC5pc3N1ZXMubGVuZ3RoKXtjb25zdCBrPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6TnVtYmVyKGwpLGlzc3VlczpbXX0scik7aWYoayBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7ay5pc3N1ZXMubGVuZ3RoPT09MCYmKGQ9ayl9aWYoZC5pc3N1ZXMubGVuZ3RoKXt0Lm1vZGU9PT0ibG9vc2UiP28udmFsdWVbbF09c1tsXTphPyh1PXU/P1tdLHUucHVzaChsKSk6by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6ZC5pc3N1ZXMubWFwKGs9PndlKGsscixYKCkpKSxpbnB1dDpsLHBhdGg6W2xdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9ZC52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tsXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaCh2LnRoZW4oaz0+e2suaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi55ZShsLGsuaXNzdWVzKSksby52YWx1ZVtiXT1rLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ueWUobCx2Lmlzc3VlcykpLG8udmFsdWVbYl09di52YWx1ZSl9dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pLGZwPXAoIiRab2RNYXAiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1sZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJtYXAiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBNYXAscik6bmV3IE1hcDtjb25zdCBhPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdFtsLGRdb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZGUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpLGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTttIGluc3RhbmNlb2YgUHJvbWlzZXx8YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKFByb21pc2UuYWxsKFttLGJdKS50aGVuKChbdixrXSk9PntZYyh2LGssbyxsLHMsZSxyKX0pKTpZYyhtLGIsbyxsLHMsZSxyKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBZYyhlLHQsbixvLHIscyxpKXtlLmlzc3Vlcy5sZW5ndGgmJih2by5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ueWUobyxlLmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46Im1hcCIsaW5wdXQ6cixpbnN0OnMsaXNzdWVzOmUuaXNzdWVzLm1hcChhPT53ZShhLGksWCgpKSl9KSksdC5pc3N1ZXMubGVuZ3RoJiYodm8uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLnllKG8sdC5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im1hcCIsY29kZToiaW52YWxpZF9lbGVtZW50IixpbnB1dDpyLGluc3Q6cyxrZXk6byxpc3N1ZXM6dC5pc3N1ZXMubWFwKGE9PndlKGEsaSxYKCkpKX0pKSxuLnZhbHVlLnNldChlLnZhbHVlLHQudmFsdWUpfWNvbnN0IG1wPXAoIiRab2RTZXQiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1sZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIFNldCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2lucHV0OnMsaW5zdDplLGV4cGVjdGVkOiJzZXQiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvO2NvbnN0IGk9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBTZXQscik6bmV3IFNldDtjb25zdCBhPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCBsIG9mIHMpe2lmKGEmJm8uaXNzdWVzLmxlbmd0aCE9PXUpe2lmKGRlKG8sdSkpYnJlYWs7dT1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgZD10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2QgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChkLnRoZW4obT0+WGMobSxvKSkpOlhjKGQsbyl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gWGMoZSx0KXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZS5pc3N1ZXMpLHQudmFsdWUuYWRkKGUudmFsdWUpfWNvbnN0IGdwPXAoIiRab2RFbnVtIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49YXModC5lbnRyaWVzKSxvPW5ldyBTZXQobik7ZS5fem9kLnZhbHVlcz1vLEEoZSwicGF0dGVybiIscj0+e2NvbnN0IHM9YXMoci5kZWYuZW50cmllcykuZmlsdGVyKGk9PnZvLmhhcyh0eXBlb2YgaSkpO3JldHVybiBuZXcgUmVnRXhwKHMubGVuZ3RoP2BeKCR7cy5tYXAoaT0+RWUoaS50b1N0cmluZygpKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtyZXR1cm4gby5oYXMoaSl8fHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczpuLGlucHV0OmksaW5zdDplfSkscn19KSxicD1wKCIkWm9kTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC52YWx1ZXMpO2UuX3pvZC52YWx1ZXM9bixBKGUsInBhdHRlcm4iLG89Pntjb25zdCByPW8uZGVmLnZhbHVlcztyZXR1cm4gbmV3IFJlZ0V4cChyLmxlbmd0aD9gXigke3IubWFwKHM9PnR5cGVvZiBzPT0ic3RyaW5nIj9FZShzKTpzP0VlKHMudG9TdHJpbmcoKSk6U3RyaW5nKHMpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO3JldHVybiBuLmhhcyhzKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQudmFsdWVzLGlucHV0OnMsaW5zdDplfSksb319KSx2cD1wKCIkWm9kRmlsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHIgaW5zdGFuY2VvZiBGaWxlfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZmlsZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSkseXA9cCgiJFpvZFRyYW5zZm9ybSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2Qub3B0aW49Im9wdGlvbmFsIixsZS5tZW1vaXplcj8uZ3VhcmQoZSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBxbyhlLmNvbnN0cnVjdG9yLm5hbWUpO2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtpZihvLmFzeW5jKXJldHVybihyIGluc3RhbmNlb2YgUHJvbWlzZT9yOlByb21pc2UucmVzb2x2ZShyKSkudGhlbihpPT4obi52YWx1ZT1pLG4pKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgcWU7cmV0dXJuIG4udmFsdWU9cixufX0pO2Z1bmN0aW9uIGV1KGUsdCl7cmV0dXJuIGUudmFsdWU9dC5pc3N1ZXMubGVuZ3RoP3ZvaWQgMDp0LnZhbHVlLGV9Y29uc3Qgc2k9cCgiJFpvZE9wdGlvbmFsIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksZS5fem9kLm9wdG91dD0ib3B0aW9uYWwiLEEoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ubyx2b2lkIDBdKTp2b2lkIDB9KSxBKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke01lKG8uc291cmNlKX0pPyRgKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihuLnZhbHVlPT09dm9pZCAwKXtpZih0LmlubmVyVHlwZS5fem9kLm9wdGluIT09ImRlZmF1bHRlZCIpcmV0dXJuIG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+ZXUobixzKSk6ZXUobixyKX1yZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX19KSxfcD1wKCIkWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9PntzaS5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksQShlLCJwYXR0ZXJuIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuKSxlLl96b2QucGFyc2U9KG4sbyk9PnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxrcD1wKCIkWm9kTnVsbGFibGUiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLEEoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7TWUoby5zb3VyY2UpfXxudWxsKSRgKTp2b2lkIDB9KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzP25ldyBTZXQoWy4uLm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyxudWxsXSk6dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9Pm4udmFsdWU9PT1udWxsP246dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLHdwPXAoIiRab2REZWZhdWx0IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7aWYobi52YWx1ZT09PXZvaWQgMClyZXR1cm4gbi52YWx1ZT10LmRlZmF1bHRWYWx1ZSxuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnR1KHMsdCkpOnR1KHIsdCl9fSk7ZnVuY3Rpb24gdHUoZSx0KXtyZXR1cm4gZS52YWx1ZT09PXZvaWQgMCYmKGUudmFsdWU9dC5kZWZhdWx0VmFsdWUpLGV9Y29uc3QgJHA9cCgiJFpvZFByZWZhdWx0IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCJ8fG4udmFsdWU9PT12b2lkIDAmJihuLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSx0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pKX0pLFNwPXAoIiRab2ROb25PcHRpb25hbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm9dLmZpbHRlcihyPT5yIT09dm9pZCAwKSk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+bnUocyxlKSk6bnUocixlKX19KTtmdW5jdGlvbiBudShlLHQpe3JldHVybiFlLmlzc3Vlcy5sZW5ndGgmJmUudmFsdWU9PT12b2lkIDAmJmUuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im5vbm9wdGlvbmFsIixpbnB1dDplLnZhbHVlLGluc3Q6dH0pLGV9Y29uc3QgenA9cCgiJFpvZFN1Y2Nlc3MiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBxbygiWm9kU3VjY2VzcyIpO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMuaXNzdWVzLmxlbmd0aD09PTAsbikpOihuLnZhbHVlPXIuaXNzdWVzLmxlbmd0aD09PTAsbil9fSk7ZnVuY3Rpb24gb3UoZSx0LG4sbyl7cmV0dXJuIHQuaXNzdWVzLmxlbmd0aD8oZS52YWx1ZT1uLmNhdGNoVmFsdWUoey4uLnQsdmFsdWU6ZS52YWx1ZSxlcnJvcjp7aXNzdWVzOnQuaXNzdWVzLm1hcChyPT53ZShyLG8sWCgpKSl9LGlucHV0OmUudmFsdWV9KSxlKTooZS52YWx1ZT10LnZhbHVlLHQubWVtbyYmKGUubWVtbz0hMCksZSl9Y29uc3QgVHA9cCgiJFpvZENhdGNoIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pm91KG4scyx0LG8pKTpvdShuLHIsdCxvKX19KSxJcD1wKCIkWm9kTmFOIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KCh0eXBlb2Ygbi52YWx1ZSE9Im51bWJlciJ8fCFOdW1iZXIuaXNOYU4obi52YWx1ZSkpJiZuLmlzc3Vlcy5wdXNoKHtpbnB1dDpuLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoibmFuIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbil9KSxpaT1wKCIkWm9kUGlwZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLEEoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PnNvKGksdC5pbixvKSk6c28ocyx0LmluLG8pfWNvbnN0IHI9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+c28ocyx0Lm91dCxvKSk6c28ocix0Lm91dCxvKX19KTtmdW5jdGlvbiBzbyhlLHQsbil7cmV0dXJuIGUuaXNzdWVzLnNvbWUobz0+by5jb2RlIT09InVucmVjb2duaXplZF9rZXlzIik/KGUuYWJvcnRlZD0hMCxlKTp0Ll96b2QucnVuKHt2YWx1ZTplLnZhbHVlLGlzc3VlczplLmlzc3Vlc30sbil9Y29uc3QgYWk9cCgiJFpvZENvZGVjIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKChvLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcz10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5pbyhpLHQsbykpOmlvKHMsdCxvKX1lbHNle2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PmlvKGksdCxvKSk6aW8ocyx0LG8pfX19KTtmdW5jdGlvbiBpbyhlLHQsbil7aWYoZS5pc3N1ZXMubGVuZ3RoKXJldHVybiBlLmFib3J0ZWQ9ITAsZTtpZigobi5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHI9dC50cmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmFvKGUscyx0Lm91dCxuKSk6YW8oZSxyLHQub3V0LG4pfWVsc2V7Y29uc3Qgcj10LnJldmVyc2VUcmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmFvKGUscyx0LmluLG4pKTphbyhlLHIsdC5pbixuKX19ZnVuY3Rpb24gYW8oZSx0LG4sbyl7cmV0dXJuIGUuaXNzdWVzLmxlbmd0aD8oZS5hYm9ydGVkPSEwLGUpOm4uX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOmUuaXNzdWVzfSxvKX1jb25zdCBQcD1wKCIkWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntpaS5pbml0KGUsdCl9KSx4cD1wKCIkWm9kUmVhZG9ubHkiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihydSk6cnUocil9fSk7ZnVuY3Rpb24gcnUoZSl7cmV0dXJuIGUubWVtb3x8KGUudmFsdWU9T2JqZWN0LmZyZWV6ZShlLnZhbHVlKSksZX1mdW5jdGlvbiBlZyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7bGV0IG49dC5wYXR0ZXJuLG89ISF0LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLHIscztmb3IoY29uc3QgYSBvZiB0LmNoZWNrcz8/W10pe2NvbnN0IHU9YS5fem9kLmRlZjt1LnBhdHRlcm4mJihuPXUucGF0dGVybiksb3x8KG89ISF1LmZvcm1hdD8uaW5jbHVkZXMoImludCIpKTtjb25zdCBsPXUubWluaW11bT8/dS5sZW5ndGgsZD11Lm1heGltdW0/P3UubGVuZ3RoO2whPT12b2lkIDAmJihyPT09dm9pZCAwfHxsPnIpJiYocj1sKSxkIT09dm9pZCAwJiYocz09PXZvaWQgMHx8ZDxzKSYmKHM9ZCl9aWYobilyZXR1cm4gbi5zb3VyY2U7aWYociE9PXZvaWQgMCYmcyE9PXZvaWQgMCYmcj5zKXJldHVybiIoPyEpIjtpZihyIT09dm9pZCAwfHxzIT09dm9pZCAwKXJldHVybiBSbCh7bWluaW11bTpyLG1heGltdW06c30pLnNvdXJjZTtjb25zdCBpPWUuX3pvZC5wYXR0ZXJuO3JldHVybihvJiZpPT09Qm8/Tmw6aSk/LnNvdXJjZX1mdW5jdGlvbiBtcyhlKXtjb25zdCB0PWUuX3pvZC5kZWYsbj1lLl96b2QucGF0dGVybj8uc291cmNlLG89dC5pbm5lclR5cGU/P2UuX3pvZC5pbm5lclR5cGU7aWYobyl7Y29uc3Qgcj1vLl96b2QucGF0dGVybj8uc291cmNlLHM9bXMobyk7cmV0dXJuIG4mJnImJnMmJnMhPT1yP24ucmVwbGFjZShNZShyKSwoKT0+TWUocykpOm59aWYodC5vcHRpb25zKXtjb25zdCByPXQub3B0aW9ucy5tYXAobXMpO2lmKHIuZXZlcnkoQm9vbGVhbikpcmV0dXJuYF4oJHtyLm1hcChzPT5NZShzKSkuam9pbigifCIpfSkkYH1yZXR1cm4gZWcoZSl9Y29uc3QgQ3A9cCgiJFpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQucGFydHMpaWYodHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCl7Y29uc3Qgcj1tcyhvKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5vLl96b2QudHJhaXRzXS5zaGlmdCgpfWApO24ucHVzaChNZShyKSl9ZWxzZSBpZihvPT09bnVsbHx8cXUuaGFzKHR5cGVvZiBvKSluLnB1c2goRWUoYCR7b31gKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke299YCk7ZS5fem9kLnBhdHRlcm49bmV3IFJlZ0V4cChgXiR7bi5qb2luKCIiKX0kYCksZS5fem9kLnBhcnNlPShvLHIpPT50eXBlb2Ygby52YWx1ZSE9InN0cmluZyI/KG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvKTooZS5fem9kLnBhdHRlcm4ubGFzdEluZGV4PTAsZS5fem9kLnBhdHRlcm4udGVzdChvLnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdD8/InRlbXBsYXRlX2xpdGVyYWwiLHBhdHRlcm46ZS5fem9kLnBhdHRlcm4uc291cmNlfSksbyl9KSxFcD1wKCIkWm9kRnVuY3Rpb24iLChlLHQpPT4oeC5pbml0KGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9kZWYiLHt2YWx1ZTp0fSksZS5fem9kLmRlZj10LGUuaW1wbGVtZW50PW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/ZHMoZS5fZGVmLmlucHV0LG8pOm8scz1SZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9kcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5pbXBsZW1lbnRBc3luYz1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmMgZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/YXdhaXQgcHMoZS5fZGVmLmlucHV0LG8pOm8scz1hd2FpdCBSZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9hd2FpdCBwcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5fem9kLnBhcnNlPShuLG8pPT50eXBlb2Ygbi52YWx1ZSE9ImZ1bmN0aW9uIj8obi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoiZnVuY3Rpb24iLGlucHV0Om4udmFsdWUsaW5zdDplfSksbik6KGUuX2RlZi5vdXRwdXQmJmUuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZT09PSJwcm9taXNlIj9uLnZhbHVlPWUuaW1wbGVtZW50QXN5bmMobi52YWx1ZSk6bi52YWx1ZT1lLmltcGxlbWVudChuLnZhbHVlKSxuKSxlLmlucHV0PSguLi5uKT0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuWzBdKT9uZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5ldyByaSh7dHlwZToidHVwbGUiLGl0ZW1zOm5bMF0scmVzdDpuWzFdfSksb3V0cHV0OmUuX2RlZi5vdXRwdXR9KTpuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5bMF0sb3V0cHV0OmUuX2RlZi5vdXRwdXR9KX0sZS5vdXRwdXQ9bj0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDplLl9kZWYuaW5wdXQsb3V0cHV0Om59KX0sZSkpLE9wPXAoIiRab2RQcm9taXNlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUpLnRoZW4ocj0+dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSl9KSxjaT1wKCIkWm9kTGF6eSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBdShlLl96b2QsImlubmVyVHlwZSIsKCk9Pntjb25zdCBuPXQ7cmV0dXJuIG4uX2NhY2hlZElubmVyfHwobi5fY2FjaGVkSW5uZXI9dC5nZXR0ZXIoKSksbi5fY2FjaGVkSW5uZXJ9KSxBKGUsInBhdHRlcm4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4/P3ZvaWQgMCksQShlLCJvcHRvdXQiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQ/P3ZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5lLl96b2QuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxBcD1wKCIkWm9kQ3VzdG9tIiwoZSx0KT0+e0ouaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+bixlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89bi52YWx1ZSxyPXQuZm4obyk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHIudGhlbihzPT5zdShzLG4sbyxlKSk7c3UocixuLG8sZSl9fSk7ZnVuY3Rpb24gc3UoZSx0LG4sbyl7aWYoIWUpe2NvbnN0IHI9e2NvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om8scGF0aDpbLi4uby5fem9kLmRlZi5wYXRoPz9bXV0sY29udGludWU6IW8uX3pvZC5kZWYuYWJvcnR9O28uX3pvZC5kZWYucGFyYW1zJiYoci5wYXJhbXM9by5fem9kLmRlZi5wYXJhbXMpLHQuaXNzdWVzLnB1c2goZHQocikpfX1jbGFzcyBScCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwYXJzZSBhIHJlZmVyZW5jZSBjeWNsZSB0aGF0IGNsb3NlcyB0aHJvdWdoIGEgdHJhbnNmb3JtIiksdGhpcy5uYW1lPSJab2RDeWNsaWNFcnJvciJ9fWNvbnN0IGdzPSJ+bWVtbyIsaXU9W107ZnVuY3Rpb24gWnAoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCJ9ZnVuY3Rpb24gcnMoZSl7cmV0dXJuIGUubWFwKHQ9PnQucGF0aD97Li4udCxwYXRoOnQucGF0aC5zbGljZSgpfTp7Li4udH0pfWNvbnN0IE5wPW5ldyBXZWFrTWFwLGl0PTAsaG89MSxxdD0yO2Z1bmN0aW9uIER0KGUsdCxuKXtjb25zdCBvPU5wLmdldChlKTtpZihvIT09dm9pZCAwKXJldHVybiBvP3F0Oml0O2lmKHQuaGFzKGUpKXJldHVybiBxdDt0LmFkZChlKTtsZXQgcj1pdDtjb25zdCBzPWQ9PntpZihyIT09cXQmJmQ/Ll96b2Qpe2NvbnN0IG09RHQoZCx0LG4pO20+ciYmKHI9bSl9fSxpPShkLG0pPT57bGV0IGI9aXQ7Zm9yKGNvbnN0IHYgb2YgUmVmbGVjdC5vd25LZXlzKGQpKXtjb25zdCBrPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx2KTtpZighay5lbnVtZXJhYmxlKWNvbnRpbnVlO2NvbnN0IHc9ay5nZXQ/aG86ay52YWx1ZT8uX3pvZD9EdChrLnZhbHVlLHQsbik6aXQ7dz5iJiYoYj13KX1yZXR1cm4gYn0sYT1kPT57ZD5yJiYocj1kKX0sdT1lLl96b2QuZGVmO3N3aXRjaCh1LnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgZD1Pbyh1KTthKGQ/aShkKTpobykscyh1LmNhdGNoYWxsKTticmVha31jYXNlImFycmF5IjpzKHUuZWxlbWVudCk7YnJlYWs7Y2FzZSJ0dXBsZSI6Zm9yKGNvbnN0IGQgb2YgdS5pdGVtcylzKGQpO3ModS5yZXN0KTticmVhaztjYXNlInJlY29yZCI6Y2FzZSJtYXAiOnModS5rZXlUeXBlKSxzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInNldCI6cyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJ1bmlvbiI6Zm9yKGNvbnN0IGQgb2YgdS5vcHRpb25zKXMoZCk7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOnModS5sZWZ0KSxzKHUucmlnaHQpO2JyZWFrO2Nhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOnModS5pbm5lclR5cGUpO2JyZWFrO2Nhc2UicGlwZSI6cyh1LmluKSxzKHUub3V0KTticmVhaztjYXNlImZ1bmN0aW9uIjpzKHUuaW5wdXQpLHModS5vdXRwdXQpO2JyZWFrO2Nhc2UibGF6eSI6e2NvbnN0IGQ9dS5fY2FjaGVkSW5uZXI/PyhuP2UuX3pvZC5pbm5lclR5cGU6dm9pZCAwKTthKGQ/RHQoZCx0LCExKTpobyk7YnJlYWt9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6Zm9yKGNvbnN0IGQgaW4gdSl7Y29uc3QgbT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsZCk7aWYoIW18fG0uZ2V0KWNvbnRpbnVlO2NvbnN0IGI9bS52YWx1ZTtpZighKCFifHx0eXBlb2YgYiE9Im9iamVjdCIpKXtpZihiLl96b2QpcyhiKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYikpZm9yKGNvbnN0IHYgb2YgYilzKHYpfX19cmV0dXJuIHQuZGVsZXRlKGUpLHRnKGUscil9ZnVuY3Rpb24gdGcoZSx0KXtyZXR1cm4gdCE9PWhvJiZOcC5zZXQoZSx0PT09cXQpLHR9ZnVuY3Rpb24gbmcoZSl7cmV0dXJuIER0KGUsbmV3IFNldCwhMCkhPT1pdH1mdW5jdGlvbiBvZyhlLHQpe2xldCBuPWUuYnVja2V0cy5nZXQodCk7cmV0dXJuIG58fChuPW5ldyBXZWFrTWFwLGUuYnVja2V0cy5zZXQodCxuKSksbn1sZXQgY287Y29uc3QgdW89W10scmc9e2FsbG9jKGUsdCxuKXtjb25zdCBvPWNvO2lmKCFvKXJldHVybiBuO2NvPXZvaWQgMDtjb25zdCByPXt2YWx1ZTpuLGlzc3VlczpudWxsfTtyZXR1cm4gby5zZXQodC52YWx1ZSxyKSx1by5wdXNoKHIpLG59LGd1YXJkKGUpe3ZhciB0Oyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IG49ZS5fem9kLnBhcnNlLG89KHIscyk9PntpZihzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCImJmpwKHMsci52YWx1ZSkpdGhyb3cgbmV3IFJwO3JldHVybiBuKHIscyl9O2UuX3pvZC5wYXJzZT1vLGUuX3pvZC5ydW49PT1uJiYoZS5fem9kLnJ1bj1vKX0pfSxhdHRhY2goZSl7dmFyIHQ7bGV0IG4sbz0hMSxyLHM7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3QgaT1lLl96b2QucGFyc2UsYT0odSxsKT0+e2lmKG49PT12b2lkIDApe2NvbnN0IFo9RHQoZSxuZXcgU2V0LCExKTtpZihaPT09aXQpcmV0dXJuIGUuX3pvZC5wYXJzZT1pLGUuX3pvZC5ydW49PT1hJiYoZS5fem9kLnJ1bj1pKSxpKHUsbCk7Wj09PXF0fHxvP249ITA6bz0hMH1jb25zdCBkPXUudmFsdWU7aWYoIVpwKGQpKXJldHVybiBpKHUsbCk7bGV0IG09bFtnc107bXx8KG09e2J1Y2tldHM6bmV3IFdlYWtNYXAsYmFja0VkZ2VzOnZvaWQgMH0sbFtnc109bSk7bGV0IGI7cj09PWw/Yj1zOihiPW9nKG0sZSkscj1sLHM9Yik7Y29uc3Qgdj1iLmdldChkKTtpZih2KXJldHVybiB1LnZhbHVlPXYudmFsdWUsdi5pc3N1ZXM/di5pc3N1ZXMubGVuZ3RoJiZ1Lmlzc3Vlcy5wdXNoKC4uLnJzKHYuaXNzdWVzKSk6KHUubWVtbz0hMCxtLmJhY2tFZGdlcz8/KG0uYmFja0VkZ2VzPW5ldyBXZWFrU2V0KSxtLmJhY2tFZGdlcy5hZGQodi52YWx1ZSkpLHU7Y289Yjtjb25zdCBrPXVvLmxlbmd0aCx3PWkodSxsKTtjbz12b2lkIDA7Y29uc3QgJD11by5sZW5ndGg+az91by5wb3AoKTp2b2lkIDA7cmV0dXJuIHcgaW5zdGFuY2VvZiBQcm9taXNlP3cudGhlbihaPT4oJCYmKCQuaXNzdWVzPVouaXNzdWVzLmxlbmd0aD9ycyhaLmlzc3Vlcyk6aXUpLFopKTooJCYmKCQuaXNzdWVzPXcuaXNzdWVzLmxlbmd0aD9ycyh3Lmlzc3Vlcyk6aXUpLHcpfTtlLl96b2QucGFyc2U9YSxlLl96b2QucnVuPT09aSYmKGUuX3pvZC5ydW49YSl9KX19O2Z1bmN0aW9uIEtvKCl7cmV0dXJuIHJnfWZ1bmN0aW9uIGpwKGUsdCl7Y29uc3Qgbj1lW2dzXT8uYmFja0VkZ2VzO3JldHVybiBuIT09dm9pZCAwJiZacCh0KSYmbi5oYXModCl9Y29uc3Qgc2c9KCk9Pntjb25zdCBlPXtzdHJpbmc6e3VuaXQ6ImNoYXJhY3RlcnMiLHZlcmI6InRvIGhhdmUifSxmaWxlOnt1bml0OiJieXRlcyIsdmVyYjoidG8gaGF2ZSJ9LGFycmF5Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LHNldDp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxtYXA6e3VuaXQ6ImVudHJpZXMiLHZlcmI6InRvIGhhdmUifX07ZnVuY3Rpb24gdChzKXtyZXR1cm4gZVtzXT8/bnVsbH1jb25zdCBuPXtyZWdleDoiaW5wdXQiLGVtYWlsOiJlbWFpbCBhZGRyZXNzIix1cmw6IlVSTCIsZW1vamk6ImVtb2ppIix1dWlkOiJVVUlEIix1dWlkdjQ6IlVVSUR2NCIsdXVpZHY2OiJVVUlEdjYiLG5hbm9pZDoibmFub2lkIixndWlkOiJHVUlEIixjdWlkOiJjdWlkIixjdWlkMjoiY3VpZDIiLHVsaWQ6IlVMSUQiLHhpZDoiWElEIixrc3VpZDoiS1NVSUQiLGRhdGV0aW1lOiJJU08gZGF0ZXRpbWUiLGRhdGU6IklTTyBkYXRlIix0aW1lOiJJU08gdGltZSIsZHVyYXRpb246IklTTyBkdXJhdGlvbiIsaXB2NDoiSVB2NCBhZGRyZXNzIixpcHY2OiJJUHY2IGFkZHJlc3MiLG1hYzoiTUFDIGFkZHJlc3MiLGNpZHJ2NDoiSVB2NCByYW5nZSIsY2lkcnY2OiJJUHY2IHJhbmdlIixiYXNlNjQ6ImJhc2U2NC1lbmNvZGVkIHN0cmluZyIsYmFzZTY0dXJsOiJiYXNlNjR1cmwtZW5jb2RlZCBzdHJpbmciLGpzb25fc3RyaW5nOiJKU09OIHN0cmluZyIsZTE2NDoiRS4xNjQgbnVtYmVyIixjdXJyZW5jeV9jb2RlOiJjdXJyZW5jeSBjb2RlIixjcmVkaXRfY2FyZDoiY3JlZGl0IGNhcmQgbnVtYmVyIixpYmFuOiJJQkFOIixqd3Q6IkpXVCIsdGVtcGxhdGVfbGl0ZXJhbDoiaW5wdXQifSxvPXtuYW46Ik5hTiJ9O2Z1bmN0aW9uIHIocyxpKXtyZXR1cm4gcz09PSJudW1iZXIiJiZ0eXBlb2YgaT09Im51bWJlciImJiFOdW1iZXIuaXNGaW5pdGUoaSk/U3RyaW5nKGkpOm9bc10/P3N9cmV0dXJuIHM9Pntzd2l0Y2gocy5jb2RlKXtjYXNlImludmFsaWRfdHlwZSI6e2NvbnN0IGk9cihzLmV4cGVjdGVkKSxhPVF1KHMuaW5wdXQpLHU9cihhLHMuaW5wdXQpO3JldHVybmBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke2l9LCByZWNlaXZlZCAke3V9YH1jYXNlImludmFsaWRfdmFsdWUiOnJldHVybiBzLnZhbHVlcy5sZW5ndGg9PT0xP2BJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke1RzKHMudmFsdWVzWzBdKX1gOmBJbnZhbGlkIG9wdGlvbjogZXhwZWN0ZWQgb25lIG9mICR7Y3Mocy52YWx1ZXMsInwiKX1gO2Nhc2UidG9vX2JpZyI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI8PSI6IjwiLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGhhdmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7YS51bml0Pz8iZWxlbWVudHMifWA6YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGJlICR7aX0ke3MubWF4aW11bS50b1N0cmluZygpfWB9Y2FzZSJ0b29fc21hbGwiOntjb25zdCBpPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPj0iOiI+IixhPXQocy5vcmlnaW4pO3JldHVybiBhP2BUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGhhdmUgJHtpfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9ICR7YS51bml0fWA6YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gYmUgJHtpfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9YH1jYXNlImludmFsaWRfZm9ybWF0Ijp7Y29uc3QgaT1zO3JldHVybiBpLmZvcm1hdD09PSJzdGFydHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IHN0YXJ0IHdpdGggIiR7aS5wcmVmaXh9ImA6aS5mb3JtYXQ9PT0iZW5kc193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggIiR7aS5zdWZmaXh9ImA6aS5mb3JtYXQ9PT0iaW5jbHVkZXMiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBpbmNsdWRlICIke2kuaW5jbHVkZXN9ImA6aS5mb3JtYXQ9PT0icmVnZXgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7aS5wYXR0ZXJufWA6YEludmFsaWQgJHtuW2kuZm9ybWF0XT8/cy5mb3JtYXR9YH1jYXNlIm5vdF9tdWx0aXBsZV9vZiI6cmV0dXJuYEludmFsaWQgbnVtYmVyOiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtzLmRpdmlzb3J9YDtjYXNlInVucmVjb2duaXplZF9rZXlzIjpyZXR1cm5gVW5yZWNvZ25pemVkIGtleSR7cy5rZXlzLmxlbmd0aD4xPyJzIjoiIn06ICR7Y3Mocy5rZXlzLCIsICIpfWA7Y2FzZSJpbnZhbGlkX2tleSI6cmV0dXJuYEludmFsaWQga2V5IGluICR7cy5vcmlnaW59YDtjYXNlImludmFsaWRfdW5pb24iOnJldHVybiBzLm9wdGlvbnMmJkFycmF5LmlzQXJyYXkocy5vcHRpb25zKSYmcy5vcHRpb25zLmxlbmd0aD4wP2BJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7cy5vcHRpb25zLm1hcChhPT5gJyR7YX0nYCkuam9pbigiIHwgIil9YDpzLmluY2x1c2l2ZT09PSExPyJJbnZhbGlkIGlucHV0OiBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVkIjoiSW52YWxpZCBpbnB1dCI7Y2FzZSJpbnZhbGlkX2VsZW1lbnQiOnJldHVybmBJbnZhbGlkIHZhbHVlIGluICR7cy5vcmlnaW59YDtkZWZhdWx0OnJldHVybiJJbnZhbGlkIGlucHV0In19fTtmdW5jdGlvbiBNcCgpe3JldHVybntsb2NhbGVFcnJvcjpzZygpfX1jb25zdCB1aT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW46TXB9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGF1O2NvbnN0IGxpPVN5bWJvbCgiWm9kT3V0cHV0IiksZGk9U3ltYm9sKCJab2RJbnB1dCIpO2NsYXNzIHFwe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXB9YWRkKHQsLi4ubil7Y29uc3Qgbz1uWzBdO3JldHVybiB0aGlzLl9tYXAuc2V0KHQsbyksbyYmdHlwZW9mIG89PSJvYmplY3QiJiYiaWQiaW4gbyYmdGhpcy5faWRtYXAuc2V0KG8uaWQsdCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcCx0aGlzfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIG4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmImlkImluIG4mJnRoaXMuX2lkbWFwLmRlbGV0ZShuLmlkKSx0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXN9Z2V0KHQpe2NvbnN0IG49dC5fem9kLnBhcmVudDtpZihuKXtjb25zdCBvPXsuLi50aGlzLmdldChuKT8/e319O2RlbGV0ZSBvLmlkO2NvbnN0IHI9ey4uLm8sLi4udGhpcy5fbWFwLmdldCh0KX07cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD9yOnZvaWQgMH1yZXR1cm4gdGhpcy5fbWFwLmdldCh0KX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9fWZ1bmN0aW9uIFdvKCl7cmV0dXJuIG5ldyBxcH0oYXU9Z2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnk/PyhhdS5fX3pvZF9nbG9iYWxSZWdpc3RyeT1XbygpKTtjb25zdCBfZT1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5LHBpPSgpPT57dGhyb3cgbmV3IEVycm9yKCJ6b2QgY29tcGlsZSgpIGlzIG5vdCBidW5kbGVkIGludG8gY2FyZHMgLSBzZWUgcGFja2FnZXMvaW50ZXJuYWwvY2FyZC1raXQvdml0ZS1zbGltLm1qcyIpfTtjbGFzcyBoaSBleHRlbmRzIEVycm9ye31jbGFzcyBmaSBleHRlbmRzIEVycm9ye31jbGFzcyBtaSBleHRlbmRzIEVycm9ye31jb25zdCBnaT1waSxiaT1waSxpZz1waTtmdW5jdGlvbiBHbyhlKXtyZXR1cm4gZS5jaGVja3MmJihlLmNoZWNrcz1bLi4uZS5jaGVja3NdKSxlfWZ1bmN0aW9uIERwKGUsdCl7cmV0dXJuIG5ldyBlKEdvKHt0eXBlOiJzdHJpbmciLC4uLl8odCl9KSl9ZnVuY3Rpb24gTHAoZSx0KXtyZXR1cm4gbmV3IGUoR28oe3R5cGU6InN0cmluZyIsY29lcmNlOiEwLC4uLl8odCl9KSl9ZnVuY3Rpb24gdmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbWFpbCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiB5aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imd1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gX2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGtpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gd2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjYiLC4uLl8odCl9KX1mdW5jdGlvbiAkaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NyIsLi4uXyh0KX0pfWZ1bmN0aW9uIFFvKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1vamkiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gemkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJuYW5vaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gVGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIElpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZDIiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1bGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoieGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIENpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoia3N1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gRWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIE9pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBVcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im1hYyIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBBaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBSaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBaaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBOaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NHVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBqaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImUxNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gRnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBIcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImliYW4iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gTWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJqd3QiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9Y29uc3QgcWk9e0FueTpudWxsLE1pbnV0ZTotMSxTZWNvbmQ6MCxNaWxsaXNlY29uZDozLE1pY3Jvc2Vjb25kOjZ9O2Z1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZXRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixvZmZzZXQ6ITEsbG9jYWw6ITEscHJlY2lzaW9uOm51bGwsLi4uXyh0KX0pfWZ1bmN0aW9uIExpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLl8odCl9KX1mdW5jdGlvbiBVaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixwcmVjaXNpb246bnVsbCwuLi5fKHQpfSl9ZnVuY3Rpb24gRmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkdXJhdGlvbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLl8odCl9KX1mdW5jdGlvbiBCcChlLHQpe3JldHVybiBuZXcgZShHbyh7dHlwZToibnVtYmVyIixjaGVja3M6W10sLi4uXyh0KX0pKX1mdW5jdGlvbiBWcChlLHQpe3JldHVybiBuZXcgZShHbyh7dHlwZToibnVtYmVyIixjb2VyY2U6ITAsY2hlY2tzOltdLC4uLl8odCl9KSl9ZnVuY3Rpb24gSnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoic2FmZWludCIsLi4uXyh0KX0pfWZ1bmN0aW9uIEtwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0MzIiLC4uLl8odCl9KX1mdW5jdGlvbiBXcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gR3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50MzIiLC4uLl8odCl9KX1mdW5jdGlvbiBRcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50MzIiLC4uLl8odCl9KX1mdW5jdGlvbiBZcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsLi4uXyh0KX0pfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIixjb2VyY2U6ITAsLi4uXyh0KX0pfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLC4uLl8odCl9KX1mdW5jdGlvbiB0aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50Iixjb2VyY2U6ITAsLi4uXyh0KX0pfWZ1bmN0aW9uIG5oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gb2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDY0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gcmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN5bWJvbCIsLi4uXyh0KX0pfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmRlZmluZWQiLC4uLl8odCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbCIsLi4uXyh0KX0pfWZ1bmN0aW9uIGFoKGUpe3JldHVybiBuZXcgZSh7dHlwZToiYW55In0pfWZ1bmN0aW9uIGNoKGUpe3JldHVybiBuZXcgZSh7dHlwZToidW5rbm93biJ9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmV2ZXIiLC4uLl8odCl9KX1mdW5jdGlvbiBsaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidm9pZCIsLi4uXyh0KX0pfWZ1bmN0aW9uIGRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIiwuLi5fKHQpfSl9ZnVuY3Rpb24gcGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gaGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5hbiIsLi4uXyh0KX0pfWZ1bmN0aW9uIEFlKGUsdCl7cmV0dXJuIG5ldyBWcyh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIGZlKGUsdCl7cmV0dXJuIG5ldyBWcyh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIFJlKGUsdCl7cmV0dXJuIG5ldyBKcyh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIG1lKGUsdCl7cmV0dXJuIG5ldyBKcyh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4uXyh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIFlvKGUpe3JldHVybiBSZSgwLGUpfWZ1bmN0aW9uIFhvKGUpe3JldHVybiBBZSgwLGUpfWZ1bmN0aW9uIGVyKGUpe3JldHVybiBmZSgwLGUpfWZ1bmN0aW9uIHRyKGUpe3JldHVybiBtZSgwLGUpfWZ1bmN0aW9uIFllKGUsdCl7cmV0dXJuIG5ldyBGbCh7Y2hlY2s6Im11bHRpcGxlX29mIiwuLi5fKHQpLHZhbHVlOmV9KX1mdW5jdGlvbiBvdChlLHQpe3JldHVybiBuZXcgVmwoe2NoZWNrOiJtYXhfc2l6ZSIsLi4uXyh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBaZShlLHQpe3JldHVybiBuZXcgSmwoe2NoZWNrOiJtaW5fc2l6ZSIsLi4uXyh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiB2dChlLHQpe3JldHVybiBuZXcgS2woe2NoZWNrOiJzaXplX2VxdWFscyIsLi4uXyh0KSxzaXplOmV9KX1mdW5jdGlvbiB5dChlLHQpe3JldHVybiBuZXcgV2woe2NoZWNrOiJtYXhfbGVuZ3RoIiwuLi5fKHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIExlKGUsdCl7cmV0dXJuIG5ldyBHbCh7Y2hlY2s6Im1pbl9sZW5ndGgiLC4uLl8odCksbWluaW11bTplfSl9ZnVuY3Rpb24gX3QoZSx0KXtyZXR1cm4gbmV3IFFsKHtjaGVjazoibGVuZ3RoX2VxdWFscyIsLi4uXyh0KSxsZW5ndGg6ZX0pfWZ1bmN0aW9uIGNuKGUsdCl7cmV0dXJuIG5ldyBZbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoicmVnZXgiLC4uLl8odCkscGF0dGVybjplfSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIG5ldyBYbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoibG93ZXJjYXNlIiwuLi5fKGUpfSl9ZnVuY3Rpb24gbG4oZSl7cmV0dXJuIG5ldyBlZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoidXBwZXJjYXNlIiwuLi5fKGUpfSl9ZnVuY3Rpb24gZG4oZSx0KXtyZXR1cm4gbmV3IHRkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsLi4uXyh0KSxpbmNsdWRlczplfSl9ZnVuY3Rpb24gcG4oZSx0KXtyZXR1cm4gbmV3IG5kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIsLi4uXyh0KSxwcmVmaXg6ZX0pfWZ1bmN0aW9uIGhuKGUsdCl7cmV0dXJuIG5ldyBvZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIiwuLi5fKHQpLHN1ZmZpeDplfSl9ZnVuY3Rpb24gbnIoZSx0LG4pe3JldHVybiBuZXcgcmQoe2NoZWNrOiJwcm9wZXJ0eSIscHJvcGVydHk6ZSxzY2hlbWE6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gZm4oZSx0KXtyZXR1cm4gbmV3IHNkKHtjaGVjazoicHJvcGVydGllcyIsc2hhcGU6ZSwuLi5fKHQpfSl9ZnVuY3Rpb24gbW4oZSx0KXtyZXR1cm4gbmV3IGlkKHtjaGVjazoibWltZV90eXBlIixtaW1lOmUsLi4uXyh0KX0pfWZ1bmN0aW9uIHhlKGUpe3JldHVybiBuZXcgYWQoe2NoZWNrOiJvdmVyd3JpdGUiLHR4OmV9KX1mdW5jdGlvbiBnbihlKXtyZXR1cm4geGUodD0+dC5ub3JtYWxpemUoZSkpfWZ1bmN0aW9uIGJuKCl7cmV0dXJuIHhlKGU9PmUudHJpbSgpKX1mdW5jdGlvbiB2bigpe3JldHVybiB4ZShlPT5lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHluKCl7cmV0dXJuIHhlKGU9PmUudG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gX24oKXtyZXR1cm4geGUoZT0+anUoZSkpfWZ1bmN0aW9uIGZoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFycmF5IixlbGVtZW50OnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGFnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGNnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsaW5jbHVzaXZlOiExLC4uLl8obil9KX1mdW5jdGlvbiB1ZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOm4sZGlzY3JpbWluYXRvcjp0LC4uLl8obyl9KX1mdW5jdGlvbiBsZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6dCxyaWdodDpufSl9ZnVuY3Rpb24gZGcoZSx0LG4sbyl7Y29uc3Qgcj1uIGluc3RhbmNlb2YgeCxzPXI/bzpuLGk9cj9uOm51bGw7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0dXBsZSIsaXRlbXM6dCxyZXN0OmksLi4uXyhzKX0pfWZ1bmN0aW9uIHBnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4uXyhvKX0pfWZ1bmN0aW9uIGhnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToibWFwIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4uXyhvKX0pfWZ1bmN0aW9uIGZnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InNldCIsdmFsdWVUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIG1nKGUsdCxuKXtjb25zdCBvPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHI9PltyLHJdKSk6dDtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6bywuLi5fKG4pfSl9ZnVuY3Rpb24gZ2coZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczp0LC4uLl8obil9KX1mdW5jdGlvbiBiZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheSh0KT90Olt0XSwuLi5fKG4pfSl9ZnVuY3Rpb24gbWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImZpbGUiLC4uLl8odCl9KX1mdW5jdGlvbiB2ZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06dH0pfWZ1bmN0aW9uIHlnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBfZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24ga2coZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOnQsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKCk6QW8obil9fSl9ZnVuY3Rpb24gd2coZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiAkZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBTZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOnQsY2F0Y2hWYWx1ZTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOklzKG4pfSl9ZnVuY3Rpb24gemcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToicGlwZSIsaW46dCxvdXQ6bn0pfWZ1bmN0aW9uIFRnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBJZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czp0LC4uLl8obil9KX1mdW5jdGlvbiBQZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibGF6eSIsZ2V0dGVyOnR9KX1mdW5jdGlvbiB4ZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBnaChlLHQsbil7Y29uc3Qgbz1fKG4pO3JldHVybiBvLmFib3J0Pz8oby5hYm9ydD0hMCksbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5vfSl9ZnVuY3Rpb24gYmgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLl8obil9KX1mdW5jdGlvbiB2aChlLHQpe2NvbnN0IG49eWgobz0+KG8uYWRkSXNzdWU9cj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIilvLmlzc3Vlcy5wdXNoKGR0KHIsby52YWx1ZSxuLl96b2QuZGVmKSk7ZWxzZXtjb25zdCBzPXI7cy5mYXRhbCYmKHMuY29udGludWU9ITEpLHMuY29kZT8/KHMuY29kZT0iY3VzdG9tIiksImlucHV0ImluIHN8fChzLmlucHV0PW8udmFsdWUpLHMuaW5zdD8/KHMuaW5zdD1uKSxzLmNvbnRpbnVlPz8ocy5jb250aW51ZT0hbi5fem9kLmRlZi5hYm9ydCksby5pc3N1ZXMucHVzaChkdChzKSl9fSxlKG8udmFsdWUsbykpLHQpO3JldHVybiBufWZ1bmN0aW9uIHloKGUsdCl7Y29uc3Qgbj1uZXcgSih7Y2hlY2s6ImN1c3RvbSIsLi4uXyh0KX0pO3JldHVybiBuLl96b2QuY2hlY2s9ZSxufWZ1bmN0aW9uIF9oKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJkZXNjcmliZSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz1fZS5nZXQobik/P3t9O19lLmFkZChuLHsuLi5vLGRlc2NyaXB0aW9uOmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBraChlKXtjb25zdCB0PW5ldyBKKHtjaGVjazoibWV0YSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz1fZS5nZXQobik/P3t9O19lLmFkZChuLHsuLi5vLC4uLmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiB3aChlLHQpe2NvbnN0IG49Xyh0KTtsZXQgbz1uLnRydXRoeT8/WyJ0cnVlIiwiMSIsInllcyIsIm9uIiwieSIsImVuYWJsZWQiXSxyPW4uZmFsc3k/P1siZmFsc2UiLCIwIiwibm8iLCJvZmYiLCJuIiwiZGlzYWJsZWQiXTtuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKG89by5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSxyPXIubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikpO2NvbnN0IHM9bmV3IFNldChvKSxpPW5ldyBTZXQociksYT1lLkNvZGVjPz9haSx1PWUuQm9vbGVhbj8/dGksbD1lLlN0cmluZz8/YW4sZD1uZXcgbCh7dHlwZToic3RyaW5nIixlcnJvcjpuLmVycm9yfSksbT1uZXcgdSh7dHlwZToiYm9vbGVhbiIsZXJyb3I6bi5lcnJvcn0pLGI9bmV3IGEoe3R5cGU6InBpcGUiLGluOmQsb3V0Om0sdHJhbnNmb3JtOigodixrKT0+e2xldCB3PXY7cmV0dXJuIG4uY2FzZSE9PSJzZW5zaXRpdmUiJiYodz13LnRvTG93ZXJDYXNlKCkpLHMuaGFzKHcpPyEwOmkuaGFzKHcpPyExOihrLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIixleHBlY3RlZDoic3RyaW5nYm9vbCIsdmFsdWVzOlsuLi5zLC4uLmldLGlucHV0OmsudmFsdWUsaW5zdDpiLGNvbnRpbnVlOiExfSkse30pfSkscmV2ZXJzZVRyYW5zZm9ybTooKHYsayk9PnY9PT0hMD9vWzBdfHwidHJ1ZSI6clswXXx8ImZhbHNlIiksZXJyb3I6bi5lcnJvcn0pO3JldHVybiBiLl96b2QuYmFnLnRydXRoeT1vLGIuX3pvZC5iYWcuZmFsc3k9cixiLl96b2QuYmFnLmNhc2U9bi5jYXNlPz8iaW5zZW5zaXRpdmUiLGJ9ZnVuY3Rpb24ga3QoZSx0LG4sbz17fSl7Y29uc3Qgcj1fKG8pLHM9e2NoZWNrOiJzdHJpbmdfZm9ybWF0Iix0eXBlOiJzdHJpbmciLGZvcm1hdDp0LGZuOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246YT0+bi50ZXN0KGEpLC4uLnJ9O3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwJiYocy5wYXR0ZXJuPW4pLG5ldyBlKHMpfWNvbnN0IENnPSgpPT4oe30pLEVnPSgpPT4oe30pLE9nPSgpPT4oe30pLEFnPSgpPT4oe30pLFJnPSgpPT4oe30pLCRoPSgpPT4oKT0+KHt9KSxicz0oKT0+KCk9Pih7fSksWmc9KCk9Pih7fSksa2U9KCk9Pih7fSksTmc9KCk9Pih7fSksamc9KCk9Pih7fSksTWc9KCk9Pih7fSkscWc9KCk9Pih7fSksRGc9KCk9Pih7fSksTGc9KCk9Pih7fSksVWc9KCk9Pih7fSksRmc9KCk9Pih7fSksSGc9KCk9Pih7fSksQmc9KCk9Pih7fSksVmc9KCk9Pih7fSksSmc9KCk9Pih7fSksS2c9KCk9Pih7fSksV2c9KCk9Pih7fSksR2c9KCk9Pih7fSksUWc9KCk9Pih7fSksWWc9KCk9Pih7fSksWGc9KCk9Pih7fSksZWI9KCk9Pih7fSksdGI9KCk9Pih7fSksbmI9KCk9Pih7fSksb2I9KCk9Pih7fSkscmI9KCk9Pih7fSksc2I9KCk9Pih7fSksaWI9KCk9Pih7fSksU2g9KCk9Pih7fSksYWI9KCk9Pih7fSksY2I9KCk9Pih7fSksdWI9KCk9Pih7fSksbGI9KCk9Pih7fSksZGI9KCk9Pih7fSkscGI9KCk9Pih7fSksaGI9KCk9Pih7fSksZmI9KCk9Pih7fSksbWI9KCk9Pih7fSksZ2I9KCk9Pih7fSksYmI9KCk9Pih7fSksemg9KCk9Pih7fSksdmI9KCk9Pih7fSksSGk9KCk9Pih7fSk7Y2xhc3MgeWJ7fWNvbnN0IF9iPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJFpvZEFueTpYZCwkWm9kQXJyYXk6cnAsJFpvZEFzeW5jRXJyb3I6cWUsJFpvZEJhc2U2NDpqZCwkWm9kQmFzZTY0VVJMOnFkLCRab2RCaWdJbnQ6bmksJFpvZEJpZ0ludEZvcm1hdDpXZCwkWm9kQm9vbGVhbjp0aSwkWm9kQ0lEUnY0OkFkLCRab2RDSURSdjY6WmQsJFpvZENVSUQ6a2QsJFpvZENVSUQyOndkLCRab2RDYXRjaDpUcCwkWm9kQ2hlY2s6SiwkWm9kQ2hlY2tCaWdJbnRGb3JtYXQ6QmwsJFpvZENoZWNrRW5kc1dpdGg6b2QsJFpvZENoZWNrR3JlYXRlclRoYW46SnMsJFpvZENoZWNrSW5jbHVkZXM6dGQsJFpvZENoZWNrTGVuZ3RoRXF1YWxzOlFsLCRab2RDaGVja0xlc3NUaGFuOlZzLCRab2RDaGVja0xvd2VyQ2FzZTpYbCwkWm9kQ2hlY2tNYXhMZW5ndGg6V2wsJFpvZENoZWNrTWF4U2l6ZTpWbCwkWm9kQ2hlY2tNaW1lVHlwZTppZCwkWm9kQ2hlY2tNaW5MZW5ndGg6R2wsJFpvZENoZWNrTWluU2l6ZTpKbCwkWm9kQ2hlY2tNdWx0aXBsZU9mOkZsLCRab2RDaGVja051bWJlckZvcm1hdDpIbCwkWm9kQ2hlY2tPdmVyd3JpdGU6YWQsJFpvZENoZWNrUHJvcGVydGllczpzZCwkWm9kQ2hlY2tQcm9wZXJ0eTpyZCwkWm9kQ2hlY2tSZWdleDpZbCwkWm9kQ2hlY2tTaXplRXF1YWxzOktsLCRab2RDaGVja1N0YXJ0c1dpdGg6bmQsJFpvZENoZWNrU3RyaW5nRm9ybWF0OnNuLCRab2RDaGVja1VwcGVyQ2FzZTplZCwkWm9kQ29kZWM6YWksJFpvZENyZWRpdENhcmQ6VWQsJFpvZEN1c3RvbTpBcCwkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OkpkLCRab2RDeWNsaWNFcnJvcjpScCwkWm9kRGF0ZTpvcCwkWm9kRGVmYXVsdDp3cCwkWm9kRGlzY3JpbWluYXRlZFVuaW9uOmRwLCRab2RFMTY0OkRkLCRab2RFbWFpbDpoZCwkWm9kRW1vamk6eWQsJFpvZEVuY29kZUVycm9yOnFvLCRab2RFbnVtOmdwLCRab2RFcnJvcjpybCwkWm9kRXhhY3RPcHRpb25hbDpfcCwkWm9kRmlsZTp2cCwkWm9kRnVuY3Rpb246RXAsJFpvZEdVSUQ6ZGQsJFpvZElCQU46SGQsJFpvZElQdjQ6Q2QsJFpvZElQdjY6RWQsJFpvZElTT0RhdGU6SWQsJFpvZElTT0RhdGVUaW1lOlRkLCRab2RJU09EdXJhdGlvbjp4ZCwkWm9kSVNPVGltZTpQZCwkWm9kSW50ZXJzZWN0aW9uOnBwLCRab2RKV1Q6VmQsJFpvZEtTVUlEOnpkLCRab2RMYXp5OmNpLCRab2RMaXRlcmFsOmJwLCRab2RNQUM6T2QsJFpvZE1hcDpmcCwkWm9kTmFOOklwLCRab2ROYW5vSUQ6X2QsJFpvZE5ldmVyOnRwLCRab2ROb25PcHRpb25hbDpTcCwkWm9kTnVsbDpZZCwkWm9kTnVsbGFibGU6a3AsJFpvZE51bWJlcjplaSwkWm9kTnVtYmVyRm9ybWF0OktkLCRab2RPYmplY3Q6YXAsJFpvZE9iamVjdEpJVDpjcCwkWm9kT3B0aW9uYWw6c2ksJFpvZFBpcGU6aWksJFpvZFByZWZhdWx0OiRwLCRab2RQcmVwcm9jZXNzOlBwLCRab2RQcm9taXNlOk9wLCRab2RSZWFkb25seTp4cCwkWm9kUmVhbEVycm9yOmdlLCRab2RSZWNvcmQ6aHAsJFpvZFJlZ2lzdHJ5OnFwLCRab2RTZXQ6bXAsJFpvZFN0cmluZzphbiwkWm9kU3RyaW5nRm9ybWF0OkYsJFpvZFN1Y2Nlc3M6enAsJFpvZFN5bWJvbDpHZCwkWm9kVGVtcGxhdGVMaXRlcmFsOkNwLCRab2RUcmFuc2Zvcm06eXAsJFpvZFR1cGxlOnJpLCRab2RUeXBlOngsJFpvZFVMSUQ6JGQsJFpvZFVSTDp2ZCwkWm9kVVVJRDpwZCwkWm9kVW5kZWZpbmVkOlFkLCRab2RVbmlvbjpKbywkWm9kVW5rbm93bjplcCwkWm9kVm9pZDpucCwkWm9kWElEOlNkLCRab2RYb3I6dXAsJGJyYW5kOkNzLCRjb25zdHJ1Y3RvcjpwLCRpbnB1dDpkaSwkb3V0cHV0OmxpLERvYzpjZCxJTlZBTElEOmhpLEpTT05TY2hlbWE6X2IsSlNPTlNjaGVtYUdlbmVyYXRvcjp5YixORVZFUjp4cyxUaW1lUHJlY2lzaW9uOnFpLFVSTF9CQURfRk9STUFUOldzLFVSTF9VTlBBUlNFQUJMRTpCdCxab2RDb21waWxlQXN5bmNFcnJvcjpmaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjptaSxfYW55OmFoLF9hcnJheTpmaCxfYmFzZTY0OlppLF9iYXNlNjR1cmw6TmksX2JpZ2ludDplaCxfYm9vbGVhbjpZcCxfY2F0Y2g6U2csX2NoZWNrOnloLF9jaWRydjQ6QWksX2NpZHJ2NjpSaSxfY29lcmNlZEJpZ2ludDp0aCxfY29lcmNlZEJvb2xlYW46WHAsX2NvZXJjZWREYXRlOnBoLF9jb2VyY2VkTnVtYmVyOlZwLF9jb2VyY2VkU3RyaW5nOkxwLF9jcmVkaXRDYXJkOkZwLF9jdWlkOlRpLF9jdWlkMjpJaSxfY3VzdG9tOmdoLF9kYXRlOmRoLF9kZWNvZGU6UnMsX2RlY29kZUFzeW5jOk5zLF9kZWZhdWx0OmtnLF9kaXNjcmltaW5hdGVkVW5pb246dWcsX2UxNjQ6amksX2VtYWlsOnZpLF9lbW9qaTpTaSxfZW5jb2RlOkFzLF9lbmNvZGVBc3luYzpacyxfZW5kc1dpdGg6aG4sX2VudW06bWcsX2ZpbGU6bWgsX2Zsb2F0MzI6S3AsX2Zsb2F0NjQ6V3AsX2d0OlJlLF9ndGU6bWUsX2d1aWQ6eWksX2liYW46SHAsX2luY2x1ZGVzOmRuLF9pbnQ6SnAsX2ludDMyOkdwLF9pbnQ2NDpuaCxfaW50ZXJzZWN0aW9uOmxnLF9pcHY0OkVpLF9pcHY2Ok9pLF9pc29EYXRlOkxpLF9pc29EYXRlVGltZTpEaSxfaXNvRHVyYXRpb246RmksX2lzb1RpbWU6VWksX2p3dDpNaSxfa3N1aWQ6Q2ksX2xhenk6UGcsX2xlbmd0aDpfdCxfbGl0ZXJhbDpiZyxfbG93ZXJjYXNlOnVuLF9sdDpBZSxfbHRlOmZlLF9tYWM6VXAsX21hcDpoZyxfbWF4OmZlLF9tYXhMZW5ndGg6eXQsX21heFNpemU6b3QsX21pbWU6bW4sX21pbjptZSxfbWluTGVuZ3RoOkxlLF9taW5TaXplOlplLF9tdWx0aXBsZU9mOlllLF9uYW46aGgsX25hbm9pZDp6aSxfbmF0aXZlRW51bTpnZyxfbmVnYXRpdmU6WG8sX25ldmVyOnVoLF9ub25uZWdhdGl2ZTp0cixfbm9ub3B0aW9uYWw6d2csX25vbnBvc2l0aXZlOmVyLF9ub3JtYWxpemU6Z24sX251bGw6aWgsX251bGxhYmxlOl9nLF9udW1iZXI6QnAsX29wdGlvbmFsOnlnLF9vdmVyd3JpdGU6eGUsX3BhcnNlOlh0LF9wYXJzZUFzeW5jOmVuLF9waXBlOnpnLF9wb3NpdGl2ZTpZbyxfcHJvbWlzZTp4ZyxfcHJvcGVydGllczpmbixfcHJvcGVydHk6bnIsX3JlYWRvbmx5OlRnLF9yZWNvcmQ6cGcsX3JlZmluZTpiaCxfcmVnZXg6Y24sX3NhZmVEZWNvZGU6TXMsX3NhZmVEZWNvZGVBc3luYzpEcyxfc2FmZUVuY29kZTpqcyxfc2FmZUVuY29kZUFzeW5jOnFzLF9zYWZlUGFyc2U6dG4sX3NhZmVQYXJzZUFzeW5jOm5uLF9zZXQ6ZmcsX3NpemU6dnQsX3NsdWdpZnk6X24sX3N0YXJ0c1dpdGg6cG4sX3N0cmluZzpEcCxfc3RyaW5nRm9ybWF0Omt0LF9zdHJpbmdib29sOndoLF9zdWNjZXNzOiRnLF9zdXBlclJlZmluZTp2aCxfc3ltYm9sOnJoLF90ZW1wbGF0ZUxpdGVyYWw6SWcsX3RvTG93ZXJDYXNlOnZuLF90b1VwcGVyQ2FzZTp5bixfdHJhbnNmb3JtOnZnLF90cmltOmJuLF90dXBsZTpkZyxfdWludDMyOlFwLF91aW50NjQ6b2gsX3VsaWQ6UGksX3VuZGVmaW5lZDpzaCxfdW5pb246YWcsX3Vua25vd246Y2gsX3VwcGVyY2FzZTpsbixfdXJsOlFvLF91dWlkOl9pLF91dWlkdjQ6a2ksX3V1aWR2Njp3aSxfdXVpZHY3OiRpLF92b2lkOmxoLF94aWQ6eGksX3hvcjpjZyxiYXNlNjRDaGFyc2V0Ok5kLGJhc2U2NHVybENoYXJzZXQ6WHMsY2FuUGFyc2VVUkw6R3MsY2xvbmU6Vyxjb21waWxlOmdpLGNvbXBpbGVGbjppZyxjb25maWc6WCxjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Q6YnMsY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kOiRoLGRlY29kZTpobSxkZWNvZGVBc3luYzptbSxkZXNjcmliZTpfaCxlbmNvZGU6cG0sZW5jb2RlQXN5bmM6Zm0sZXh0cmFjdERlZnM6QWcsZmluYWxpemU6UmcsZmxhdHRlbkVycm9yOkRvLGZvcm1hdEVycm9yOkxvLGdldERpc2NyaW1pbmF0ZWRPcHRpb246b2ksZ2xvYmFsQ29uZmlnOmxlLGdsb2JhbFJlZ2lzdHJ5Ol9lLGhhbmRsZVVucmVwcmVzZW50YWJsZTpFZyxpbml0aWFsaXplQ29udGV4dDpDZyxpc0JhY2tFZGdlOmpwLGlzUmVjdXJzaXZlU2NoZW1hOm5nLGlzVmFsaWRCYXNlNjQ6WXMsaXNWYWxpZEJhc2U2NFVSTDpNZCxpc1ZhbGlkQ0lEUnY2OlJkLGlzVmFsaWRDcmVkaXRDYXJkOkxkLGlzVmFsaWRJQkFOOkZkLGlzVmFsaWRJUHY2OlFzLGlzVmFsaWRKV1Q6QmQsbG9jYWxlczp1aSxtZW1vaXplcjpLbyxtZXJnZVZhbHVlczp3byxtZXRhOmtoLHBhcnNlOmRzLHBhcnNlQXN5bmM6cHMscGFyc2VVUkxPYmplY3Q6bWQscHJldHRpZnlFcnJvcjpPcyxwcm9jZXNzOlpnLHByb2Nlc3NTY2hlbWE6T2cscmVnZXhlczpWbyxyZWdpc3RyeTpXbyxzYWZlRGVjb2RlOmJtLHNhZmVEZWNvZGVBc3luYzp5bSxzYWZlRW5jb2RlOmdtLHNhZmVFbmNvZGVBc3luYzp2bSxzYWZlUGFyc2U6aWwsc2FmZVBhcnNlQXN5bmM6Y20sc3RhbmRhcmRQcm9wczpLcyxzdHJpcFRhYkFuZE5ld2xpbmU6ZnMsdG9Eb3RQYXRoOnNsLHRvSlNPTlNjaGVtYTpIaSx0b1pvZDpFbyx0cmVlaWZ5RXJyb3I6RXMsdXJsSG9zdG5hbWVPazpnZCx1cmxQcm90b2NvbE9rOmJkLHV0aWw6UHMsdmFsaWRhdGU6Rm8sdmFsaWRhdGVBc3luYzpIbyx2YWxpZGF0ZVVSTDpmZCx2ZXJzaW9uOnVkLHdpdGhQYXJzZXI6Yml9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksY3U9U3ltYm9sKCJ6LnZpc2l0L3Jlc29sdmluZyIpO2Z1bmN0aW9uIEJpKGUsdCl7Y29uc3Qgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OihpLGEpPT57Y29uc3QgdT10W2kuX3pvZC5kZWYudHlwZV07cmV0dXJuIHU/dShpLGEpOml9LG89bmV3IE1hcDtmdW5jdGlvbiByKGkpe2NvbnN0IGE9by5nZXQoaSk7aWYoYT09PWN1KXJldHVybiBuZXcgY2koe3R5cGU6ImxhenkiLGdldHRlcjooKT0+by5nZXQoaSl9KTtpZihhIT09dm9pZCAwKXJldHVybiBhO28uc2V0KGksY3UpO2NvbnN0IHU9cyhpKSxsPW4odSx1IT09aSk7cmV0dXJuIG8uc2V0KGksbCksbH1mdW5jdGlvbiBzKGkpe2NvbnN0IGE9aS5fem9kLmRlZjtzd2l0Y2goYS50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9YS5zaGFwZSxkPU9iamVjdC5rZXlzKGwpO2xldCBtPSExO2NvbnN0IGI9e307Zm9yKGNvbnN0IGsgb2YgZCl7Y29uc3Qgdz1yKGxba10pO3chPT1sW2tdJiYobT0hMCksYltrXT13fWxldCB2PWEuY2F0Y2hhbGw7cmV0dXJuIGEuY2F0Y2hhbGwmJih2PXIoYS5jYXRjaGFsbCksdiE9PWEuY2F0Y2hhbGwmJihtPSEwKSksbT9XKGksey4uLmEsc2hhcGU6YixjYXRjaGFsbDp2fSk6aX1jYXNlImFycmF5Ijp7Y29uc3QgbD1yKGEuZWxlbWVudCk7cmV0dXJuIGw9PT1hLmVsZW1lbnQ/aTpXKGksey4uLmEsZWxlbWVudDpsfSl9Y2FzZSJ0dXBsZSI6e2NvbnN0IGw9YS5pdGVtcztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCB2IG9mIGwpe2NvbnN0IGs9cih2KTtrIT09diYmKGQ9ITApLG0ucHVzaChrKX1sZXQgYj1hLnJlc3Q7cmV0dXJuIGEucmVzdCYmKGI9cihhLnJlc3QpLGIhPT1hLnJlc3QmJihkPSEwKSksZD9XKGksey4uLmEsaXRlbXM6bSxyZXN0OmJ9KTppfWNhc2UicmVjb3JkIjpjYXNlIm1hcCI6e2NvbnN0IGw9cihhLmtleVR5cGUpLGQ9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLmtleVR5cGUmJmQ9PT1hLnZhbHVlVHlwZT9pOlcoaSx7Li4uYSxrZXlUeXBlOmwsdmFsdWVUeXBlOmR9KX1jYXNlInNldCI6e2NvbnN0IGw9cihhLnZhbHVlVHlwZSk7cmV0dXJuIGw9PT1hLnZhbHVlVHlwZT9pOlcoaSx7Li4uYSx2YWx1ZVR5cGU6bH0pfWNhc2UidW5pb24iOntjb25zdCBsPWEub3B0aW9ucztsZXQgZD0hMTtjb25zdCBtPVtdO2Zvcihjb25zdCBiIG9mIGwpe2NvbnN0IHY9cihiKTt2IT09YiYmKGQ9ITApLG0ucHVzaCh2KX1yZXR1cm4gZD9XKGksey4uLmEsb3B0aW9uczptfSk6aX1jYXNlImludGVyc2VjdGlvbiI6e2NvbnN0IGw9cihhLmxlZnQpLGQ9cihhLnJpZ2h0KTtyZXR1cm4gbD09PWEubGVmdCYmZD09PWEucmlnaHQ/aTpXKGksey4uLmEsbGVmdDpsLHJpZ2h0OmR9KX1jYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjp7Y29uc3QgbD1yKGEuaW5uZXJUeXBlKTtyZXR1cm4gbD09PWEuaW5uZXJUeXBlP2k6VyhpLHsuLi5hLGlubmVyVHlwZTpsfSl9Y2FzZSJwaXBlIjp7Y29uc3QgbD1yKGEuaW4pLGQ9cihhLm91dCk7cmV0dXJuIGw9PT1hLmluJiZkPT09YS5vdXQ/aTpXKGksey4uLmEsaW46bCxvdXQ6ZH0pfWNhc2UiZnVuY3Rpb24iOntjb25zdCBsPXIoYS5pbnB1dCksZD1yKGEub3V0cHV0KTtyZXR1cm4gbD09PWEuaW5wdXQmJmQ9PT1hLm91dHB1dD9pOlcoaSx7Li4uYSxpbnB1dDpsLG91dHB1dDpkfSl9Y2FzZSJsYXp5Ijp7Y29uc3QgbD1hLmdldHRlcix7X2NhY2hlZElubmVyOmQsLi4ubX09YTtyZXR1cm4gVyhpLHsuLi5tLGdldHRlcjooKT0+cihsKCkpfSl9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOnJldHVybiBpO2RlZmF1bHQ6cmV0dXJuIGl9fXJldHVybiByKGUpfWZ1bmN0aW9uIFZpKGUpe3JldHVybiEhZS5fem9kfWZ1bmN0aW9uIEloKGUsdCl7cmV0dXJuIFZpKGUpP2lsKGUsdCk6ZS5zYWZlUGFyc2UodCl9ZnVuY3Rpb24ga2IoZSl7aWYoIWUpcmV0dXJuO2xldCB0O2lmKFZpKGUpP3Q9ZS5fem9kPy5kZWY/LnNoYXBlOnQ9ZS5zaGFwZSwhIXQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXRyeXtyZXR1cm4gdCgpfWNhdGNoe3JldHVybn1yZXR1cm4gdH19ZnVuY3Rpb24gd2IoZSl7aWYoVmkoZSkpe2NvbnN0IHM9ZS5fem9kPy5kZWY7aWYocyl7aWYocy52YWx1ZSE9PXZvaWQgMClyZXR1cm4gcy52YWx1ZTtpZihBcnJheS5pc0FycmF5KHMudmFsdWVzKSYmcy52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIHMudmFsdWVzWzBdfX1jb25zdCBuPWUuX2RlZjtpZihuKXtpZihuLnZhbHVlIT09dm9pZCAwKXJldHVybiBuLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkobi52YWx1ZXMpJiZuLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gbi52YWx1ZXNbMF19Y29uc3Qgbz1lLnZhbHVlO2lmKG8hPT12b2lkIDApcmV0dXJuIG99Y29uc3QgJGI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuZHNXaXRoOmhuLGd0OlJlLGd0ZTptZSxpbmNsdWRlczpkbixsZW5ndGg6X3QsbG93ZXJjYXNlOnVuLGx0OkFlLGx0ZTpmZSxtYXhMZW5ndGg6eXQsbWF4U2l6ZTpvdCxtaW1lOm1uLG1pbkxlbmd0aDpMZSxtaW5TaXplOlplLG11bHRpcGxlT2Y6WWUsbmVnYXRpdmU6WG8sbm9ubmVnYXRpdmU6dHIsbm9ucG9zaXRpdmU6ZXIsbm9ybWFsaXplOmduLG92ZXJ3cml0ZTp4ZSxwb3NpdGl2ZTpZbyxwcm9wZXJ0aWVzOmZuLHByb3BlcnR5Om5yLHJlZ2V4OmNuLHNpemU6dnQsc2x1Z2lmeTpfbixzdGFydHNXaXRoOnBuLHRvTG93ZXJDYXNlOnZuLHRvVXBwZXJDYXNlOnluLHRyaW06Ym4sdXBwZXJjYXNlOmxufSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHV1PW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pO2Z1bmN0aW9uIGxvKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPW4odGhpcyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSl9Y29uc3QgUGg9KGUsdCk9PntybC5pbml0KGUsdCksZS5uYW1lPSJab2RFcnJvciI7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7dXUuaGFzKG4pfHwodXUuYWRkKG4pLGxvKG4sImZvcm1hdCIsbz0+cj0+TG8obyxyKSksbG8obiwiZmxhdHRlbiIsbz0+cj0+RG8obyxyKSksbG8obiwiYWRkSXNzdWUiLG89PnI9PntvLmlzc3Vlcy5wdXNoKHIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxibywyKX0pLGxvKG4sImFkZElzc3VlcyIsbz0+cj0+e28uaXNzdWVzLnB1c2goLi4uciksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLGJvLDIpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImlzRW1wdHkiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH19KSl9LHhoPXAoIlpvZEVycm9yIixQaCkscGU9cCgiWm9kRXJyb3IiLFBoLHZvaWQgMCx7UGFyZW50OkVycm9yfSksSmk9WHQocGUpLEtpPWVuKHBlKSxXaT10bihwZSksR2k9bm4ocGUpLFFpPUFzKHBlKSxZaT1ScyhwZSksWGk9WnMocGUpLGVhPU5zKHBlKSx0YT1qcyhwZSksbmE9TXMocGUpLG9hPXFzKHBlKSxyYT1EcyhwZSk7ZnVuY3Rpb24gU2IoKXtsZS5sb2NhbGVFcnJvcnx8WChNcCgpKX1mdW5jdGlvbiBydCgpe2xlLm1lbW9pemVyfHxYKHttZW1vaXplcjpLbygpfSl9Y29uc3QgRT1wKCJab2RUeXBlIiwoZSx0KT0+KFNiKCkseC5pbml0KGUsdCksZS5kZWY9dCxlLnR5cGU9dC50eXBlLGUpLHtjaGVjayguLi5lKXtjb25zdCB0PXRoaXMuZGVmO3JldHVybiB0aGlzLmNsb25lKGFlKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBXKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhIcihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhCcihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKHhlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gSCh0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBTcih0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gZnQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gSChmdCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBDcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBQKHRoaXMpfSxvcihlKXtyZXR1cm4gTyhbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gQXQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBKdCh0aGlzLEhuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gSXIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIHhyKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBBcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBKdCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBqcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIF9lLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIF9lLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gX2UuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBNbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5Lcyh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpicygpLG91dHB1dDpicygpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtPZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIEppKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgS2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBXaSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIEdpKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtPZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBGbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gSG8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBRaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gWWkodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgWGkodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgZWEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gdGEodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIG5hKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIG9hKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIHJhKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiAkaCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gX2UuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxrbj1wKCJfWm9kU3RyaW5nIiwoZSx0KT0+e2FuLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TmcoKX0sWXQoe2Zvcm1hdDplPT5rZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+a2UoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5rZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhjbiguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGRuKC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhwbiguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGhuKC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKExlKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHl0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKF90KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soTGUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayh1bihlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsbihlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhibigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGduKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayh2bigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayh5bigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKF9uKCkpfX0pKSx3dD1wKCJab2RTdHJpbmciLChlLHQpPT57YW4uaW5pdChlLHQpLGtuLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKHZpKHduLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKFFvKEl0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKE1pKE1uLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soU2koU24sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHlpKCRuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhfaShJZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhraShJZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayh3aShJZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjaygkaShJZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayh6aSh6bixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGkoVG4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhJaShJbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGkoUG4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soWmkoWm4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soTmkoTm4sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGkoeG4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhDaShDbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRWkoRW4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKE9pKE9uLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKEFpKEFuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFJpKFJuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhqaShqbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKERpKCR0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhMaShTdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soVWkoenQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhGaShUdCxlKSl9fSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gRHAod3QsZSl9Y29uc3QgTD1wKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57Ri5pbml0KGUsdCksa24uaW5pdChlLHQpfSksJHQ9cCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57VGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksU3Q9cCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntJZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KSx6dD1wKCJab2RJU09UaW1lIiwoZSx0KT0+e1BkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLFR0PXAoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLHduPXAoIlpvZEVtYWlsIiwoZSx0KT0+e2hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHNhKGUpe3JldHVybiB2aSh3bixlKX1jb25zdCAkbj1wKCJab2RHVUlEIiwoZSx0KT0+e2RkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGlhKGUpe3JldHVybiB5aSgkbixlKX1jb25zdCBJZT1wKCJab2RVVUlEIiwoZSx0KT0+e3BkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGFhKGUpe3JldHVybiBfaShJZSxlKX1mdW5jdGlvbiBjYShlKXtyZXR1cm4ga2koSWUsZSl9ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIHdpKEllLGUpfWZ1bmN0aW9uIGxhKGUpe3JldHVybiAkaShJZSxlKX1jb25zdCBJdD1wKCJab2RVUkwiLChlLHQpPT57dmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZGEoZSl7cmV0dXJuIFFvKEl0LGUpfWZ1bmN0aW9uIHBhKGUpe3JldHVybiBRbyhJdCx7cHJvdG9jb2w6THMsaG9zdG5hbWU6VGwsLi4uXyhlKX0pfWNvbnN0IFNuPXAoIlpvZEVtb2ppIiwoZSx0KT0+e3lkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGhhKGUpe3JldHVybiBTaShTbixlKX1jb25zdCB6bj1wKCJab2ROYW5vSUQiLChlLHQpPT57X2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZmEoZSl7cmV0dXJuIHppKHpuLGUpfWNvbnN0IFRuPXAoIlpvZENVSUQiLChlLHQpPT57a2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gbWEoZSl7cmV0dXJuIFRpKFRuLGUpfWNvbnN0IEluPXAoIlpvZENVSUQyIiwoZSx0KT0+e3dkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGdhKGUpe3JldHVybiBJaShJbixlKX1jb25zdCBQbj1wKCJab2RVTElEIiwoZSx0KT0+eyRkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBQaShQbixlKX1jb25zdCB4bj1wKCJab2RYSUQiLChlLHQpPT57U2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdmEoZSl7cmV0dXJuIHhpKHhuLGUpfWNvbnN0IENuPXAoIlpvZEtTVUlEIiwoZSx0KT0+e3pkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHlhKGUpe3JldHVybiBDaShDbixlKX1jb25zdCBFbj1wKCJab2RJUHY0IiwoZSx0KT0+e0NkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIF9hKGUpe3JldHVybiBFaShFbixlKX1jb25zdCBvcj1wKCJab2RNQUMiLChlLHQpPT57T2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24ga2EoZSl7cmV0dXJuIFVwKG9yLGUpfWNvbnN0IE9uPXAoIlpvZElQdjYiLChlLHQpPT57RWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIE9pKE9uLGUpfWNvbnN0IEFuPXAoIlpvZENJRFJ2NCIsKGUsdCk9PntBZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiAkYShlKXtyZXR1cm4gQWkoQW4sZSl9Y29uc3QgUm49cCgiWm9kQ0lEUnY2IiwoZSx0KT0+e1pkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFNhKGUpe3JldHVybiBSaShSbixlKX1jb25zdCBabj1wKCJab2RCYXNlNjQiLChlLHQpPT57amQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gemEoZSl7cmV0dXJuIFppKFpuLGUpfWNvbnN0IE5uPXAoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntxZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBUYShlKXtyZXR1cm4gTmkoTm4sZSl9Y29uc3Qgam49cCgiWm9kRTE2NCIsKGUsdCk9PntEZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBJYShlKXtyZXR1cm4gamkoam4sZSl9Y29uc3QgcnI9cCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntVZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBQYShlKXtyZXR1cm4gRnAocnIsZSl9Y29uc3Qgc3I9cCgiWm9kSUJBTiIsKGUsdCk9PntIZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB4YShlKXtyZXR1cm4gSHAoc3IsZSl9Y29uc3QgTW49cCgiWm9kSldUIiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBNaShNbixlKX1jb25zdCBGZT1wKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57SmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gRWEoZSx0LG49e30pe3JldHVybiBrdChGZSxlLHQsbil9ZnVuY3Rpb24gT2EoZSl7cmV0dXJuIGt0KEZlLCJob3N0bmFtZSIsemwsZSl9ZnVuY3Rpb24gQWEoZSl7cmV0dXJuIGt0KEZlLCJoZXgiLFVsLGUpfWZ1bmN0aW9uIFJhKGUpe3JldHVybiBrdChGZSwiY3VycmVuY3lfY29kZSIsUGwsZSl9ZnVuY3Rpb24gWmEoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPVZvW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIGt0KEZlLG8scix0KX1jb25zdCBQdD1wKCJab2ROdW1iZXIiLChlLHQpPT57ZWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpLGUuaXNGaW5pdGU9ITB9LFl0KHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09a2UoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1rZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1rZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PmtlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhSZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobWUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKG1lKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKEFlKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhmZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZmUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhWdChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soVnQoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhSZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKEFlKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhmZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFllKGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWWUoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBDKGUpe3JldHVybiBCcChQdCxlKX1jb25zdCBIZT1wKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57S2QuaW5pdChlLHQpLFB0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIFZ0KGUpe3JldHVybiBKcChIZSxlKX1mdW5jdGlvbiBOYShlKXtyZXR1cm4gS3AoSGUsZSl9ZnVuY3Rpb24gamEoZSl7cmV0dXJuIFdwKEhlLGUpfWZ1bmN0aW9uIE1hKGUpe3JldHVybiBHcChIZSxlKX1mdW5jdGlvbiBxYShlKXtyZXR1cm4gUXAoSGUsZSl9Y29uc3QgeHQ9cCgiWm9kQm9vbGVhbiIsKGUsdCk9Pnt0aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk1nKCl9KTtmdW5jdGlvbiBEKGUpe3JldHVybiBZcCh4dCxlKX1jb25zdCBDdD1wKCJab2RCaWdJbnQiLChlLHQpPT57bmkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5xZygpfSxZdCh7bWluVmFsdWU6ZT0+a2UoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PmtlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+a2UoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhtZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobWUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUmUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQWUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGZlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhmZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soQWUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soZmUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFllKGUsdCkpfX0pKTtmdW5jdGlvbiBEYShlKXtyZXR1cm4gZWgoQ3QsZSl9Y29uc3QgcW49cCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e1dkLmluaXQoZSx0KSxDdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBMYShlKXtyZXR1cm4gbmgocW4sZSl9ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIG9oKHFuLGUpfWNvbnN0IGlyPXAoIlpvZFN5bWJvbCIsKGUsdCk9PntHZC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkRnKCl9KTtmdW5jdGlvbiBGYShlKXtyZXR1cm4gcmgoaXIsZSl9Y29uc3QgYXI9cCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e1FkLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWcoKX0pO2Z1bmN0aW9uIGh0KGUpe3JldHVybiBzaChhcixlKX1jb25zdCBjcj1wKCJab2ROdWxsIiwoZSx0KT0+e1lkLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TGcoKX0pO2Z1bmN0aW9uIERuKGUpe3JldHVybiBpaChjcixlKX1jb25zdCB1cj1wKCJab2RBbnkiLChlLHQpPT57WGQuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CZygpfSk7ZnVuY3Rpb24gTG4oKXtyZXR1cm4gYWgodXIpfWNvbnN0IGxyPXAoIlpvZFVua25vd24iLChlLHQpPT57ZXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5WZygpfSk7ZnVuY3Rpb24gTSgpe3JldHVybiBjaChscil9Y29uc3QgZHI9cCgiWm9kTmV2ZXIiLChlLHQpPT57dHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IZygpfSk7ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIHVoKGRyLGUpfWNvbnN0IHByPXAoIlpvZFZvaWQiLChlLHQpPT57bnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5GZygpfSk7ZnVuY3Rpb24gSGEoZSl7cmV0dXJuIGxoKHByLGUpfWNvbnN0IFVuPXAoIlpvZERhdGUiLChlLHQpPT57b3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5KZygpLGUubWluPShuLG8pPT5lLmNoZWNrKG1lKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGZlKG4sbykpfSxZdCh7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1rZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09a2UoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBCYShlKXtyZXR1cm4gZGgoVW4sZSl9Y29uc3QgaHI9cCgiWm9kQXJyYXkiLChlLHQpPT57cnQoKSxycC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnNiKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKExlKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhMZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeXQoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKF90KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gZmgoaHIsZSx0KX1mdW5jdGlvbiBWYShlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIHJlKE9iamVjdC5rZXlzKHQpKX1jb25zdCBFdD1wKCJab2RPYmplY3QiLChlLHQpPT57cnQoKSxjcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmliKCksdGwoZSwic2hhcGUiLG49Pm4uX3pvZC5kZWYuc2hhcGUsITEpfSx7a2V5b2YoKXtyZXR1cm4gcmUoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZShhZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKGFlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOk0oKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZShhZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpNKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKGFlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlhlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoYWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIEJ1KHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIEp1KHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBLdSh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBGdSh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBIdSh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiB1cyhSdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIHVzKEJuLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBXdShWbix0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLl8odCl9O3JldHVybiBuZXcgRXQobil9ZnVuY3Rpb24gSmEoZSx0KXtyZXR1cm4gbmV3IEV0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6WGUoKSwuLi5fKHQpfSl9ZnVuY3Rpb24gb2UoZSx0KXtyZXR1cm4gbmV3IEV0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6TSgpLC4uLl8odCl9KX1jb25zdCBPdD1wKCJab2RVbmlvbiIsKGUsdCk9PntKby5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIE8oZSx0KXtyZXR1cm4gbmV3IE90KHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLC4uLl8odCl9KX1jb25zdCBmcj1wKCJab2RYb3IiLChlLHQpPT57T3QuaW5pdChlLHQpLHVwLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2goKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gS2EoZSx0KXtyZXR1cm4gbmV3IGZyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLGluY2x1c2l2ZTohMSwuLi5fKHQpfSl9Y29uc3QgbXI9cCgiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e090LmluaXQoZSx0KSxkcC5pbml0KGUsdCl9KTtmdW5jdGlvbiBGbihlLHQsbil7cmV0dXJuIG5ldyBtcih7dHlwZToidW5pb24iLG9wdGlvbnM6dCxkaXNjcmltaW5hdG9yOmUsLi4uXyhuKX0pfWNvbnN0IGdyPXAoIlpvZEludGVyc2VjdGlvbiIsKGUsdCk9PntwcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmFiKCl9KTtmdW5jdGlvbiBBdChlLHQpe3JldHVybiBuZXcgZ3Ioe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDplLHJpZ2h0OnR9KX1jb25zdCBicj1wKCJab2RUdXBsZSIsKGUsdCk9PntydCgpLHJpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Y2IoKX0se3Jlc3QoZSl7cmV0dXJuIHRoaXMuY2xvbmUoey4uLnRoaXMuX3pvZC5kZWYscmVzdDplfSl9LHBhcnRpYWwoKXtjb25zdCBlPXRoaXMuX3pvZC5kZWY7aWYoZS5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5wYXJ0aWFsKCkgY2Fubm90IGJlIHVzZWQgb24gdHVwbGUgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7cmV0dXJuIHRoaXMuY2xvbmUoey4uLmUsaXRlbXM6ZS5pdGVtcy5tYXAodD0+bmV3IFJ0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KSl9KX19KTtmdW5jdGlvbiB2cihlLHQsbil7Y29uc3Qgbz10IGluc3RhbmNlb2YgeCxyPW8/bjp0LHM9bz90Om51bGw7cmV0dXJuIG5ldyBicih7dHlwZToidHVwbGUiLGl0ZW1zOmUscmVzdDpzLC4uLl8ocil9KX1jb25zdCBldD1wKCJab2RSZWNvcmQiLChlLHQpPT57cnQoKSxocC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnViKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZX0pO2Z1bmN0aW9uIFIoZSx0LG4pe3JldHVybiF0fHwhdC5fem9kP25ldyBldCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmgoKSx2YWx1ZVR5cGU6ZSwuLi5fKHQpfSk6bmV3IGV0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gV2EoZSx0LG4pe3JldHVybiBuZXcgZXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obikscGFydGlhbDohMH0pfWZ1bmN0aW9uIEdhKGUsdCxuKXtyZXR1cm4gbmV3IGV0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCxtb2RlOiJsb29zZSIsLi4uXyhuKX0pfWNvbnN0IHlyPXAoIlpvZE1hcCIsKGUsdCk9PntydCgpLGZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+b2IoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlLGUubWluPSguLi5uKT0+ZS5jaGVjayhaZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKFplKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhvdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayh2dCguLi5uKSl9KTtmdW5jdGlvbiBRYShlLHQsbil7cmV0dXJuIG5ldyB5cih7dHlwZToibWFwIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKX0pfWNvbnN0IF9yPXAoIlpvZFNldCIsKGUsdCk9PntydCgpLG1wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cmIoKSxlLm1pbj0oLi4ubik9PmUuY2hlY2soWmUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhaZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2sob3QoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2sodnQoLi4ubikpfSk7ZnVuY3Rpb24gWWEoZSx0KXtyZXR1cm4gbmV3IF9yKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTplLC4uLl8odCl9KX1jb25zdCB0dD1wKCJab2RFbnVtIiwoZSx0KT0+e2dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG8scixzKT0+S2coKSxlLmVudW09dC5lbnRyaWVzLGUub3B0aW9ucz1bLi4uZS5fem9kLnZhbHVlc107Y29uc3Qgbj1uZXcgU2V0KE9iamVjdC5rZXlzKHQuZW50cmllcykpO2UuZXh0cmFjdD0obyxyKT0+e2NvbnN0IHM9e307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlzW2ldPXQuZW50cmllc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IHR0KHsuLi50LGNoZWNrczpbXSwuLi5fKHIpLGVudHJpZXM6c30pfSxlLmV4Y2x1ZGU9KG8scik9Pntjb25zdCBzPXsuLi50LmVudHJpZXN9O2Zvcihjb25zdCBpIG9mIG8paWYobi5oYXMoaSkpZGVsZXRlIHNbaV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2l9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyB0dCh7Li4udCxjaGVja3M6W10sLi4uXyhyKSxlbnRyaWVzOnN9KX19KTtmdW5jdGlvbiByZShlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgdHQoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi5fKHQpfSl9ZnVuY3Rpb24gWGEoZSx0KXtyZXR1cm4gbmV3IHR0KHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4uXyh0KX0pfWNvbnN0IGtyPXAoIlpvZExpdGVyYWwiLChlLHQpPT57YnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5XZygpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBrcih7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4uXyh0KX0pfWNvbnN0IHdyPXAoIlpvZEZpbGUiLChlLHQpPT57dnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZZygpLGUubWluPShuLG8pPT5lLmNoZWNrKFplKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKG90KG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhtbihBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIGVjKGUpe3JldHVybiBtaCh3cixlKX1jb25zdCAkcj1wKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57cnQoKSx5cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm5iKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBxbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKGR0KHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBpPXM7aS5mYXRhbCYmKGkuY29udGludWU9ITEpLGkuY29kZT8/KGkuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGl8fChpLmlucHV0PW4udmFsdWUpLGkuaW5zdD8/KGkuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKGR0KGkpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIG5ldyAkcih7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IFJ0PXAoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e3NpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBIKGUpe3JldHVybiBuZXcgUnQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEJuPXAoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57X3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT56aCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFNyKGUpe3JldHVybiBuZXcgQm4oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IHpyPXAoIlpvZE51bGxhYmxlIiwoZSx0KT0+e2twLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBmdChlKXtyZXR1cm4gbmV3IHpyKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiB0YyhlKXtyZXR1cm4gSChmdChlKSl9Y29uc3QgVHI9cCgiWm9kRGVmYXVsdCIsKGUsdCk9Pnt3cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnBiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIElyKGUsdCl7cmV0dXJuIG5ldyBUcih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6QW8odCl9fSl9Y29uc3QgUHI9cCgiWm9kUHJlZmF1bHQiLChlLHQpPT57JHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHhyKGUsdCl7cmV0dXJuIG5ldyBQcih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOkFvKHQpfX0pfWNvbnN0IFZuPXAoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZGIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBDcihlLHQpe3JldHVybiBuZXcgVm4oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgRXI9cCgiWm9kU3VjY2VzcyIsKGUsdCk9Pnt6cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbmMoZSl7cmV0dXJuIG5ldyBFcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBPcj1wKCJab2RDYXRjaCIsKGUsdCk9PntUcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmZiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBBcihlLHQpe3JldHVybiBuZXcgT3Ioe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6SXModCl9KX1jb25zdCBScj1wKCJab2ROYU4iLChlLHQpPT57SXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HZygpfSk7ZnVuY3Rpb24gb2MoZSl7cmV0dXJuIGhoKFJyLGUpfWNvbnN0IFp0PXAoIlpvZFBpcGUiLChlLHQpPT57aWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tYigpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIG5ldyBadCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IE50PXAoIlpvZENvZGVjIiwoZSx0KT0+e1p0LmluaXQoZSx0KSxhaS5pbml0KGUsdCl9KTtmdW5jdGlvbiByYyhlLHQsbil7cmV0dXJuIG5ldyBOdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIHNjKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IE50KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBacj1wKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e1p0LmluaXQoZSx0KSxQcC5pbml0KGUsdCl9KSxOcj1wKCJab2RSZWFkb25seSIsKGUsdCk9Pnt4cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24ganIoZSl7cmV0dXJuIG5ldyBOcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgTXI9cCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UWcoKX0pO2Z1bmN0aW9uIGljKGUsdCl7cmV0dXJuIG5ldyBNcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi5fKHQpfSl9Y29uc3QgcXI9cCgiWm9kTGF6eSIsKGUsdCk9PntjaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBEcihlKXtyZXR1cm4gbmV3IHFyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IExyPXAoIlpvZFByb21pc2UiLChlLHQpPT57T3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5iYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIGFjKGUpe3JldHVybiBuZXcgTHIoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgVXI9cCgiWm9kRnVuY3Rpb24iLChlLHQpPT57RXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT50YigpfSk7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIG5ldyBVcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP3ZyKGU/LmlucHV0KTplPy5pbnB1dD8/UChNKCkpLG91dHB1dDplPy5vdXRwdXQ/P00oKX0pfWNvbnN0IGp0PXAoIlpvZEN1c3RvbSIsKGUsdCk9PntBcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmViKCl9KTtmdW5jdGlvbiBjYyhlKXtjb25zdCB0PW5ldyBKKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIEZyKGUsdCl7cmV0dXJuIGdoKGp0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIEhyKGUsdD17fSl7cmV0dXJuIGJoKGp0LGUsdCl9ZnVuY3Rpb24gQnIoZSx0KXtyZXR1cm4gdmgoZSx0KX1jb25zdCB1Yz1faCxsYz1raCxWcj1wKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e2p0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhmbihlLHQpKX19KTtmdW5jdGlvbiBkYyhlLHQ9e30pe2NvbnN0IG49bmV3IFZyKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgcGM9KC4uLmUpPT53aCh7Q29kZWM6TnQsQm9vbGVhbjp4dCxTdHJpbmc6d3R9LC4uLmUpO2Z1bmN0aW9uIGhjKGUpe2NvbnN0IHQ9RHIoKCk9Pk8oW2goZSksQygpLEQoKSxEbigpLFAodCksUihoKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gSm4oZSx0KXtyZXR1cm4gbmV3IFpyKHt0eXBlOiJwaXBlIixpbjpIbihlKSxvdXQ6dH0pfWNvbnN0IHpiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6dXIsWm9kQXJyYXk6aHIsWm9kQmFzZTY0OlpuLFpvZEJhc2U2NFVSTDpObixab2RCaWdJbnQ6Q3QsWm9kQmlnSW50Rm9ybWF0OnFuLFpvZEJvb2xlYW46eHQsWm9kQ0lEUnY0OkFuLFpvZENJRFJ2NjpSbixab2RDVUlEOlRuLFpvZENVSUQyOkluLFpvZENhdGNoOk9yLFpvZENvZGVjOk50LFpvZENyZWRpdENhcmQ6cnIsWm9kQ3VzdG9tOmp0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpGZSxab2REYXRlOlVuLFpvZERlZmF1bHQ6VHIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOm1yLFpvZEUxNjQ6am4sWm9kRW1haWw6d24sWm9kRW1vamk6U24sWm9kRW51bTp0dCxab2RFeGFjdE9wdGlvbmFsOkJuLFpvZEZpbGU6d3IsWm9kRnVuY3Rpb246VXIsWm9kR1VJRDokbixab2RJQkFOOnNyLFpvZElQdjQ6RW4sWm9kSVB2NjpPbixab2RJU09EYXRlOlN0LFpvZElTT0RhdGVUaW1lOiR0LFpvZElTT0R1cmF0aW9uOlR0LFpvZElTT1RpbWU6enQsWm9kSW5zdGFuY2VPZjpWcixab2RJbnRlcnNlY3Rpb246Z3IsWm9kSldUOk1uLFpvZEtTVUlEOkNuLFpvZExhenk6cXIsWm9kTGl0ZXJhbDprcixab2RNQUM6b3IsWm9kTWFwOnlyLFpvZE5hTjpScixab2ROYW5vSUQ6em4sWm9kTmV2ZXI6ZHIsWm9kTm9uT3B0aW9uYWw6Vm4sWm9kTnVsbDpjcixab2ROdWxsYWJsZTp6cixab2ROdW1iZXI6UHQsWm9kTnVtYmVyRm9ybWF0OkhlLFpvZE9iamVjdDpFdCxab2RPcHRpb25hbDpSdCxab2RQaXBlOlp0LFpvZFByZWZhdWx0OlByLFpvZFByZXByb2Nlc3M6WnIsWm9kUHJvbWlzZTpMcixab2RSZWFkb25seTpOcixab2RSZWNvcmQ6ZXQsWm9kU2V0Ol9yLFpvZFN0cmluZzp3dCxab2RTdHJpbmdGb3JtYXQ6TCxab2RTdWNjZXNzOkVyLFpvZFN5bWJvbDppcixab2RUZW1wbGF0ZUxpdGVyYWw6TXIsWm9kVHJhbnNmb3JtOiRyLFpvZFR1cGxlOmJyLFpvZFR5cGU6RSxab2RVTElEOlBuLFpvZFVSTDpJdCxab2RVVUlEOkllLFpvZFVuZGVmaW5lZDphcixab2RVbmlvbjpPdCxab2RVbmtub3duOmxyLFpvZFZvaWQ6cHIsWm9kWElEOnhuLFpvZFhvcjpmcixfWm9kU3RyaW5nOmtuLF9kZWZhdWx0OklyLF9mdW5jdGlvbjptdCxhbnk6TG4sYXJyYXk6UCxiYXNlNjQ6emEsYmFzZTY0dXJsOlRhLGJpZ2ludDpEYSxib29sZWFuOkQsY2F0Y2g6QXIsY2hlY2s6Y2MsY2lkcnY0OiRhLGNpZHJ2NjpTYSxjb2RlYzpyYyxjcmVkaXRDYXJkOlBhLGN1aWQ6bWEsY3VpZDI6Z2EsY3VycmVuY3lDb2RlOlJhLGN1c3RvbTpGcixkYXRlOkJhLGRlc2NyaWJlOnVjLGRpc2NyaW1pbmF0ZWRVbmlvbjpGbixlMTY0OklhLGVtYWlsOnNhLGVtb2ppOmhhLGVudW06cmUsZXhhY3RPcHRpb25hbDpTcixmaWxlOmVjLGZsb2F0MzI6TmEsZmxvYXQ2NDpqYSxmdW5jdGlvbjptdCxndWlkOmlhLGhhc2g6WmEsaGV4OkFhLGhvc3RuYW1lOk9hLGh0dHBVcmw6cGEsaWJhbjp4YSxpbnN0YW5jZW9mOmRjLGludDpWdCxpbnQzMjpNYSxpbnQ2NDpMYSxpbnRlcnNlY3Rpb246QXQsaW52ZXJ0Q29kZWM6c2MsaXB2NDpfYSxpcHY2OndhLGpzb246aGMsand0OkNhLGtleW9mOlZhLGtzdWlkOnlhLGxhenk6RHIsbGl0ZXJhbDpmLGxvb3NlT2JqZWN0Om9lLGxvb3NlUmVjb3JkOkdhLG1hYzprYSxtYXA6UWEsbWV0YTpsYyxuYW46b2MsbmFub2lkOmZhLG5hdGl2ZUVudW06WGEsbmV2ZXI6WGUsbm9ub3B0aW9uYWw6Q3IsbnVsbDpEbixudWxsYWJsZTpmdCxudWxsaXNoOnRjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOkgscGFydGlhbFJlY29yZDpXYSxwaXBlOkp0LHByZWZhdWx0OnhyLHByZXByb2Nlc3M6Sm4scHJvbWlzZTphYyxyZWFkb25seTpqcixyZWNvcmQ6UixyZWZpbmU6SHIsc2V0OllhLHN0cmljdE9iamVjdDpKYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6RWEsc3RyaW5nYm9vbDpwYyxzdWNjZXNzOm5jLHN1cGVyUmVmaW5lOkJyLHN5bWJvbDpGYSx0ZW1wbGF0ZUxpdGVyYWw6aWMsdHJhbnNmb3JtOkhuLHR1cGxlOnZyLHVpbnQzMjpxYSx1aW50NjQ6VWEsdWxpZDpiYSx1bmRlZmluZWQ6aHQsdW5pb246Tyx1bmtub3duOk0sdXJsOmRhLHV1aWQ6YWEsdXVpZHY0OmNhLHV1aWR2Njp1YSx1dWlkdjc6bGEsdm9pZDpIYSx4aWQ6dmEseG9yOkthfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLENoPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBFaChlKXtYKHtjdXN0b21FcnJvcjplfSl9ZnVuY3Rpb24gT2goKXtyZXR1cm4gWCgpLmN1c3RvbUVycm9yfXZhciAkbzskb3x8KCRvPXt9KTtmdW5jdGlvbiBBaChlKXtyZXR1cm4gRGkoJHQsZSl9ZnVuY3Rpb24gVGIoZSl7cmV0dXJuIExpKFN0LGUpfWZ1bmN0aW9uIEliKGUpe3JldHVybiBVaSh6dCxlKX1mdW5jdGlvbiBQYihlKXtyZXR1cm4gRmkoVHQsZSl9Y29uc3QgZmM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZElTT0RhdGU6U3QsWm9kSVNPRGF0ZVRpbWU6JHQsWm9kSVNPRHVyYXRpb246VHQsWm9kSVNPVGltZTp6dCxkYXRlOlRiLGRhdGV0aW1lOkFoLGR1cmF0aW9uOlBiLHRpbWU6SWJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksUz17Li4uemIsLi4uJGIsaXNvOmZjfSx4Yj1uZXcgU2V0KFsiJHNjaGVtYSIsIiRyZWYiLCIkZGVmcyIsImRlZmluaXRpb25zIiwiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiLCJ0eXBlIiwiZW51bSIsImNvbnN0IiwiYW55T2YiLCJvbmVPZiIsImFsbE9mIiwibm90IiwicHJvcGVydGllcyIsInJlcXVpcmVkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsInByb3BlcnR5TmFtZXMiLCJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyIsIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJtaW5JdGVtcyIsIm1heEl0ZW1zIiwidW5pcXVlSXRlbXMiLCJjb250YWlucyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiLCJtaW5MZW5ndGgiLCJtYXhMZW5ndGgiLCJwYXR0ZXJuIiwiZm9ybWF0IiwibWluaW11bSIsIm1heGltdW0iLCJleGNsdXNpdmVNaW5pbXVtIiwiZXhjbHVzaXZlTWF4aW11bSIsIm11bHRpcGxlT2YiLCJkZXNjcmlwdGlvbiIsImRlZmF1bHQiLCJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJpZiIsInRoZW4iLCJlbHNlIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVudFJlcXVpcmVkIiwibnVsbGFibGUiLCJyZWFkT25seSJdKTtmdW5jdGlvbiBDYihlLHQpe2NvbnN0IG49ZS4kc2NoZW1hO3JldHVybiBuPT09Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj8iZHJhZnQtMjAyMC0xMiI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiPyJkcmFmdC03IjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI/ImRyYWZ0LTQiOnQ/PyJkcmFmdC0yMDIwLTEyIn1mdW5jdGlvbiBsdShlLHQpe3JldHVybiBlLm1hcCgobixvKT0+bzx0P246bi5vcHRpb25hbCgpKX1mdW5jdGlvbiBFYihlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIE9iKGUsdCl7aWYoIWUuc3RhcnRzV2l0aCgiIyIpKXRocm93IG5ldyBFcnJvcigiRXh0ZXJuYWwgJHJlZiBpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IGxvY2FsIHJlZnMgKCMvLi4uKSBhcmUgYWxsb3dlZCIpO2NvbnN0IG49ZS5zbGljZSgxKS5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKTtpZihuLmxlbmd0aD09PTApcmV0dXJuIHQucm9vdFNjaGVtYTtjb25zdCBvPXQudmVyc2lvbj09PSJkcmFmdC0yMDIwLTEyIj8iJGRlZnMiOiJkZWZpbml0aW9ucyI7aWYoblswXT09PW8pe2NvbnN0IHI9blsxXT09PXZvaWQgMD92b2lkIDA6RWIoblsxXSk7aWYoIXJ8fCF0LmRlZnNbcl0pdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCk7cmV0dXJuIHQuZGVmc1tyXX10aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKX1mdW5jdGlvbiBBYihlLHQpe3JldHVybiBTLnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKHR5cGVvZiByIT0ib2JqZWN0Inx8cj09PW51bGx8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuO2NvbnN0IHM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocik7aWYodC5taW5Qcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5Qcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gc21hbGw6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlID49JHt0Lm1pblByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5tYXhQcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4UHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIGJpZzogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPD0ke3QubWF4UHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0LmtleVNjaGVtYSlmb3IoY29uc3QgaSBvZiBzKXtjb25zdCBhPXQua2V5U2NoZW1hLnNhZmVQYXJzZShpKTthLnN1Y2Nlc3N8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmEuZXJyb3IuaXNzdWVzLGlucHV0OmkscGF0aDpbaV0sY29udGludWU6ITB9KX19KS5waXBlKGUpfWZ1bmN0aW9uIHZzKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuInoiO2NvbnN0IG49dHlwZW9mIGU7aWYobiE9PSJvYmplY3QiKXtpZihuPT09Im51bWJlciImJk51bWJlci5pc05hTihlKSlyZXR1cm4gbnVsbDtjb25zdCBvPVN0cmluZyhlKTtyZXR1cm5gJHtuWzBdfSR7by5sZW5ndGh9OiR7b31gfWlmKHQuaGFzKGUpKXJldHVybiBudWxsO3QuYWRkKGUpO3RyeXtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCBzPVtdO2Zvcihjb25zdCBpIG9mIGUpe2NvbnN0IGE9dnMoaSx0KTtpZihhPT09bnVsbClyZXR1cm4gbnVsbDtzLnB1c2goYSl9cmV0dXJuYGEke3MubGVuZ3RofTpbJHtzLmpvaW4oIiwiKX1dYH1jb25zdCBvPU9iamVjdC5rZXlzKGUpLnNvcnQoKSxyPVtdO2Zvcihjb25zdCBzIG9mIG8pe2NvbnN0IGk9dnMoZVtzXSx0KTtpZihpPT09bnVsbClyZXR1cm4gbnVsbDtyLnB1c2goYCR7cy5sZW5ndGh9OiR7c309JHtpfWApfXJldHVybmBvJHtyLmxlbmd0aH06eyR7ci5qb2luKCIsIil9fWB9ZmluYWxseXt0LmRlbGV0ZShlKX19Y29uc3QgUmI9bmV3IFNldChbIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbnRhaW5zIiwicHJvcGVydHlOYW1lcyIsIm5vdCIsImlmIiwidGhlbiIsImVsc2UiLCJhbGxPZiIsImFueU9mIiwib25lT2YiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiY29udGVudFNjaGVtYSJdKSxaYj1uZXcgU2V0KFsicHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVuY2llcyIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiXSk7ZnVuY3Rpb24gTHQoZSl7cmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGw/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoTHQpOnR5cGVvZiBlLiRyZWY9PSJzdHJpbmciPyEwOk9iamVjdC5lbnRyaWVzKGUpLnNvbWUoKFt0LG5dKT0+UmIuaGFzKHQpP0x0KG4pOiFaYi5oYXModCl8fHR5cGVvZiBuIT0ib2JqZWN0Inx8bj09PW51bGw/ITE6T2JqZWN0LnZhbHVlcyhuKS5zb21lKEx0KSl9ZnVuY3Rpb24gZHUoZSl7cmV0dXJuIGU9PT0xPyJlbGVtZW50IjoiZWxlbWVudHMifWZ1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYodC51bmlxdWVJdGVtcz09PSEwKXtjb25zdCBzPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2NvbnN0IGE9dnMocltpXSxuZXcgU2V0KTtpZihhPT09bnVsbCljb250aW51ZTtjb25zdCB1PXMuZ2V0KGEpO2lmKHU9PT12b2lkIDApe3Muc2V0KGEsaSk7Y29udGludWV9by5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBpdGVtcyBtdXN0IGJlIHVuaXF1ZTogZWxlbWVudCBhdCBpbmRleCAke2l9IGR1cGxpY2F0ZXMgdGhlIG9uZSBhdCBpbmRleCAke3V9YCxpbnB1dDpyLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fWlmKHQuY29udGFpbnNTY2hlbWEpe2NvbnN0IHM9dC5taW5Db250YWlucz8/MSxpPXQubWF4Q29udGFpbnMhPT12b2lkIDA/dC5tYXhDb250YWlucysxOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgYT0wO2Zvcihjb25zdCB1IG9mIHIpaWYodC5jb250YWluc1NjaGVtYS5zYWZlUGFyc2UodSkuc3VjY2VzcyYmKythPj1pKWJyZWFrO2E8cyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHtzfSBtYXRjaGluZyAke2R1KHMpfTsgZm91bmQgJHthfWAsaW5wdXQ6cixjb250aW51ZTohMH0pLHQubWF4Q29udGFpbnMhPT12b2lkIDAmJmE+dC5tYXhDb250YWlucyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke3QubWF4Q29udGFpbnN9IG1hdGNoaW5nICR7ZHUodC5tYXhDb250YWlucyl9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSl9fX0pLnBpcGUoZSl9ZnVuY3Rpb24gcHUoZSx0KXtpZihlIT09ITEpcmV0dXJuIGU9PT12b2lkIDB8fGU9PT0hMD9TLmFueSgpOnVlKGUsdCl9Y29uc3QgamI9L14oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkOlswLTVdXGQoPzpcLlxkKyk/KD86WnxbKy1dKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZCkkLztmdW5jdGlvbiBSaChlLHQpe2lmKGUubm90IT09dm9pZCAwKXtpZih0eXBlb2YgZS5ub3Q9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlLm5vdCkubGVuZ3RoPT09MClyZXR1cm4gUy5uZXZlcigpO3Rocm93IG5ldyBFcnJvcigibm90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWm9kIChleGNlcHQgeyBub3Q6IHt9IH0gZm9yIG5ldmVyKSIpfWlmKGUudW5ldmFsdWF0ZWRJdGVtcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkSXRlbXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmlmIT09dm9pZCAwfHxlLnRoZW4hPT12b2lkIDB8fGUuZWxzZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvbmRpdGlvbmFsIHNjaGVtYXMgKGlmL3RoZW4vZWxzZSkgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmRlcGVuZGVudFNjaGVtYXMhPT12b2lkIDB8fGUuZGVwZW5kZW50UmVxdWlyZWQhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJkZXBlbmRlbnRTY2hlbWFzIGFuZCBkZXBlbmRlbnRSZXF1aXJlZCBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuJHJlZil7Y29uc3Qgcj1lLiRyZWY7aWYodC5yZWZzLmhhcyhyKSlyZXR1cm4gdC5yZWZzLmdldChyKTtpZih0LnByb2Nlc3NpbmcuaGFzKHIpKXJldHVybiBTLmxhenkoKCk9PntpZighdC5yZWZzLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBub3QgcmVzb2x2ZWQ6ICR7cn1gKTtyZXR1cm4gdC5yZWZzLmdldChyKX0pO3QucHJvY2Vzc2luZy5hZGQocik7Y29uc3Qgcz1PYihyLHQpLGk9dWUocyx0KTtyZXR1cm4gdC5yZWZzLnNldChyLGkpLHQucHJvY2Vzc2luZy5kZWxldGUociksaX1pZihlLmVudW0hPT12b2lkIDApe2NvbnN0IHI9ZS5lbnVtO2lmKHQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJmUubnVsbGFibGU9PT0hMCYmci5sZW5ndGg9PT0xJiZyWzBdPT09bnVsbClyZXR1cm4gUy5udWxsKCk7aWYoci5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7aWYoci5sZW5ndGg9PT0xKXJldHVybiBTLmxpdGVyYWwoclswXSk7aWYoci5ldmVyeShpPT50eXBlb2YgaT09InN0cmluZyIpKXJldHVybiBTLmVudW0ocik7Y29uc3Qgcz1yLm1hcChpPT5TLmxpdGVyYWwoaSkpO3JldHVybiBzLmxlbmd0aDwyP3NbMF06Uy51bmlvbihbc1swXSxzWzFdLC4uLnMuc2xpY2UoMildKX1pZihlLmNvbnN0IT09dm9pZCAwKXJldHVybiBTLmxpdGVyYWwoZS5jb25zdCk7Y29uc3Qgbj1lLnR5cGU7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3Qgcj1uLm1hcChzPT57Y29uc3QgaT17Li4uZSx0eXBlOnN9O3JldHVybiBSaChpLHQpfSk7cmV0dXJuIHIubGVuZ3RoPT09MD9TLm5ldmVyKCk6ci5sZW5ndGg9PT0xP3JbMF06Uy51bmlvbihyKX1pZighbilyZXR1cm4gUy5hbnkoKTtsZXQgbztzd2l0Y2gobil7Y2FzZSJzdHJpbmciOntsZXQgcj1TLnN0cmluZygpO2lmKGUuZm9ybWF0KXtjb25zdCBzPWUuZm9ybWF0O3M9PT0iZW1haWwiP3I9ci5jaGVjayhTLmVtYWlsKCkpOnM9PT0idXJpInx8cz09PSJ1cmktcmVmZXJlbmNlIj9yPXIuY2hlY2soUy51cmwoKSk6cz09PSJ1dWlkInx8cz09PSJndWlkIj9yPXIuY2hlY2soUy51dWlkKCkpOnM9PT0iZGF0ZS10aW1lIj9yPXIuY2hlY2soUy5pc28uZGF0ZXRpbWUoe29mZnNldDohMH0pKTpzPT09ImRhdGUiP3I9ci5jaGVjayhTLmlzby5kYXRlKCkpOnM9PT0idGltZSI/cj1yLmNoZWNrKFMucmVnZXgoamIpKTpzPT09ImR1cmF0aW9uIj9yPXIuY2hlY2soUy5pc28uZHVyYXRpb24oKSk6cz09PSJob3N0bmFtZSI/cj1yLmNoZWNrKFMuaG9zdG5hbWUoKSk6cz09PSJpcHY0Ij9yPXIuY2hlY2soUy5pcHY0KCkpOnM9PT0iaXB2NiI/cj1yLmNoZWNrKFMuaXB2NigpKTpzPT09Im1hYyI/cj1yLmNoZWNrKFMubWFjKCkpOnM9PT0iY2lkciI/cj1yLmNoZWNrKFMuY2lkcnY0KCkpOnM9PT0iY2lkci12NiI/cj1yLmNoZWNrKFMuY2lkcnY2KCkpOnM9PT0iYmFzZTY0Ij9yPXIuY2hlY2soUy5iYXNlNjQoKSk6cz09PSJiYXNlNjR1cmwiP3I9ci5jaGVjayhTLmJhc2U2NHVybCgpKTpzPT09ImUxNjQiP3I9ci5jaGVjayhTLmUxNjQoKSk6cz09PSJjcmVkaXRfY2FyZCI/cj1yLmNoZWNrKFMuY3JlZGl0Q2FyZCgpKTpzPT09ImliYW4iP3I9ci5jaGVjayhTLmliYW4oKSk6cz09PSJqd3QiP3I9ci5jaGVjayhTLmp3dCgpKTpzPT09ImVtb2ppIj9yPXIuY2hlY2soUy5lbW9qaSgpKTpzPT09Im5hbm9pZCI/cj1yLmNoZWNrKFMubmFub2lkKCkpOnM9PT0iY3VpZCI/cj1yLmNoZWNrKFMuY3VpZCgpKTpzPT09ImN1aWQyIj9yPXIuY2hlY2soUy5jdWlkMigpKTpzPT09InVsaWQiP3I9ci5jaGVjayhTLnVsaWQoKSk6cz09PSJ4aWQiP3I9ci5jaGVjayhTLnhpZCgpKTpzPT09ImtzdWlkIiYmKHI9ci5jaGVjayhTLmtzdWlkKCkpKX10eXBlb2YgZS5taW5MZW5ndGg9PSJudW1iZXIiJiYocj1yLm1pbihlLm1pbkxlbmd0aCkpLHR5cGVvZiBlLm1heExlbmd0aD09Im51bWJlciImJihyPXIubWF4KGUubWF4TGVuZ3RoKSksZS5wYXR0ZXJuJiYocj1yLnJlZ2V4KG5ldyBSZWdFeHAoZS5wYXR0ZXJuKSkpLG89cjticmVha31jYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjp7bGV0IHI9bj09PSJpbnRlZ2VyIj9TLm51bWJlcigpLmludCgpOlMubnVtYmVyKCk7dHlwZW9mIGUubWluaW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWluaW11bSE9PSEwJiYocj1yLm1pbihlLm1pbmltdW0pKSx0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNYXhpbXVtIT09ITAmJihyPXIubWF4KGUubWF4aW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1pbmltdW09PSJudW1iZXIiP3I9ci5ndChlLmV4Y2x1c2l2ZU1pbmltdW0pOmUuZXhjbHVzaXZlTWluaW11bT09PSEwJiZ0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmKHI9ci5ndChlLm1pbmltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNYXhpbXVtPT0ibnVtYmVyIj9yPXIubHQoZS5leGNsdXNpdmVNYXhpbXVtKTplLmV4Y2x1c2l2ZU1heGltdW09PT0hMCYmdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJihyPXIubHQoZS5tYXhpbXVtKSksdHlwZW9mIGUubXVsdGlwbGVPZj09Im51bWJlciImJihyPXIubXVsdGlwbGVPZihlLm11bHRpcGxlT2YpKSxvPXI7YnJlYWt9Y2FzZSJib29sZWFuIjp7bz1TLmJvb2xlYW4oKTticmVha31jYXNlIm51bGwiOntvPVMubnVsbCgpO2JyZWFrfWNhc2Uib2JqZWN0Ijp7Y29uc3Qgcj17fSxzPWUucHJvcGVydGllc3x8e30saT1uZXcgU2V0KGUucmVxdWlyZWR8fFtdKSxhPXR5cGVvZiBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT0ib2JqZWN0Ij91ZShlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHQpOnZvaWQgMDtmb3IoY29uc3RbbSxiXW9mIE9iamVjdC5lbnRyaWVzKHMpKXtjb25zdCB2PXVlKGIsdCk7bnQocixtLGkuaGFzKG0pP3Y6di5vcHRpb25hbCgpKX1pZihlLnBhdHRlcm5Qcm9wZXJ0aWVzKXtjb25zdCBtPWUucGF0dGVyblByb3BlcnRpZXMsYj1PYmplY3Qua2V5cyhtKSx2PVtdO2Zvcihjb25zdCB3IG9mIGIpe2NvbnN0ICQ9dWUobVt3XSx0KSxaPVMuc3RyaW5nKCkucmVnZXgobmV3IFJlZ0V4cCh3KSk7di5wdXNoKFMubG9vc2VSZWNvcmQoWiwkKSl9Y29uc3Qgaz1bXTtpZihPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmay5wdXNoKFMub2JqZWN0KHIpLnBhc3N0aHJvdWdoKCkpLGsucHVzaCguLi52KSxrLmxlbmd0aD09PTApbz1TLm9iamVjdCh7fSkucGFzc3Rocm91Z2goKTtlbHNlIGlmKGsubGVuZ3RoPT09MSlvPWtbMF07ZWxzZXtsZXQgdz1TLmludGVyc2VjdGlvbihrWzBdLGtbMV0pO2ZvcihsZXQgJD0yOyQ8ay5sZW5ndGg7JCsrKXc9Uy5pbnRlcnNlY3Rpb24odyxrWyRdKTtvPXd9aWYoZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExKXtjb25zdCB3PU9iamVjdC5rZXlzKHIpLCQ9Yi5tYXAoST0+bmV3IFJlZ0V4cChJKSksWj1vO289by5jaGVjayhJPT57aWYoIURlKEkudmFsdWUpKXJldHVybjtjb25zdCBWPVtdO2Zvcihjb25zdCB0ZSBvZiBPYmplY3Qua2V5cyhJLnZhbHVlKSl3LmluY2x1ZGVzKHRlKXx8JC5zb21lKEs9PksudGVzdCh0ZSkpfHxWLnB1c2godGUpO1YubGVuZ3RoJiZJLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czpWLGlucHV0OkkudmFsdWUsaW5zdDpafSl9KX19ZWxzZXtjb25zdCBtPVMub2JqZWN0KHIpO2UuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMT9vPW0uc3RyaWN0KCk6YT9vPW0uY2F0Y2hhbGwoYSk6bz1tLnBhc3N0aHJvdWdoKCl9Y29uc3QgdT1lLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJmUucHJvcGVydHlOYW1lcyE9PSEwLGw9dHlwZW9mIGUubWluUHJvcGVydGllcz09Im51bWJlciI/ZS5taW5Qcm9wZXJ0aWVzOnZvaWQgMCxkPXR5cGVvZiBlLm1heFByb3BlcnRpZXM9PSJudW1iZXIiP2UubWF4UHJvcGVydGllczp2b2lkIDA7aWYodXx8bCE9PXZvaWQgMHx8ZCE9PXZvaWQgMCl7bGV0IG07aWYodSl7Y29uc3QgYj10eXBlb2YgZS5wcm9wZXJ0eU5hbWVzPT0ib2JqZWN0IiYmZS5wcm9wZXJ0eU5hbWVzLnR5cGU9PT12b2lkIDA/e3R5cGU6InN0cmluZyIsLi4uZS5wcm9wZXJ0eU5hbWVzfTplLnByb3BlcnR5TmFtZXM7bT11ZShiLHQpfW89QWIobyx7a2V5U2NoZW1hOm0sbWluUHJvcGVydGllczpsLG1heFByb3BlcnRpZXM6ZH0pfWJyZWFrfWNhc2UiYXJyYXkiOntjb25zdCByPWUucHJlZml4SXRlbXMscz1lLml0ZW1zO2lmKHImJkFycmF5LmlzQXJyYXkocikpe2NvbnN0IGk9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxhPXIubWFwKG09PnVlKG0sdCkpLHU9bHUoYSxpKSxsPUFycmF5LmlzQXJyYXkocyk/dm9pZCAwOnB1KHMsdCksZD1TLnR1cGxlKHUpO289bD9kLnJlc3QobCk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGk9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxhPXMubWFwKG09PnVlKG0sdCkpLHU9bHUoYSxpKSxsPXB1KGUuYWRkaXRpb25hbEl0ZW1zLHQpLGQ9Uy50dXBsZSh1KTtvPWw/ZC5yZXN0KGwpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihzIT09dm9pZCAwKXtjb25zdCBpPXVlKHMsdCk7bGV0IGE9Uy5hcnJheShpKTt0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihhPWEubWluKGUubWluSXRlbXMpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihhPWEubWF4KGUubWF4SXRlbXMpKSxvPWF9ZWxzZSBvPVMuYXJyYXkoUy5hbnkoKSk7KGUudW5pcXVlSXRlbXM9PT0hMHx8ZS5jb250YWlucyE9PXZvaWQgMCkmJihvPU5iKG8se3VuaXF1ZUl0ZW1zOmUudW5pcXVlSXRlbXM9PT0hMCxjb250YWluc1NjaGVtYTplLmNvbnRhaW5zIT09dm9pZCAwP3VlKGUuY29udGFpbnMsdCk6dm9pZCAwLG1pbkNvbnRhaW5zOnR5cGVvZiBlLm1pbkNvbnRhaW5zPT0ibnVtYmVyIj9lLm1pbkNvbnRhaW5zOnZvaWQgMCxtYXhDb250YWluczp0eXBlb2YgZS5tYXhDb250YWlucz09Im51bWJlciI/ZS5tYXhDb250YWluczp2b2lkIDB9KSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGU6ICR7bn1gKX1yZXR1cm4gb31mdW5jdGlvbiB1ZShlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/Uy5hbnkoKTpTLm5ldmVyKCk7bGV0IG49UmgoZSx0KTtjb25zdCBvPWUudHlwZXx8ZS5lbnVtIT09dm9pZCAwfHxlLmNvbnN0IT09dm9pZCAwO2lmKGUuYW55T2YmJkFycmF5LmlzQXJyYXkoZS5hbnlPZikpe2NvbnN0IGE9ZS5hbnlPZi5tYXAobD0+dWUobCx0KSksdT1TLnVuaW9uKGEpO249bz9TLmludGVyc2VjdGlvbihuLHUpOnV9aWYoZS5vbmVPZiYmQXJyYXkuaXNBcnJheShlLm9uZU9mKSl7Y29uc3QgYT1lLm9uZU9mLm1hcChsPT51ZShsLHQpKSx1PVMueG9yKGEpO249bz9TLmludGVyc2VjdGlvbihuLHUpOnV9aWYoZS5hbGxPZiYmQXJyYXkuaXNBcnJheShlLmFsbE9mKSlpZihlLmFsbE9mLmxlbmd0aD09PTApbj1vP246Uy5hbnkoKTtlbHNle2xldCBhPW8/bjp1ZShlLmFsbE9mWzBdLHQpO2NvbnN0IHU9bz8wOjE7Zm9yKGxldCBsPXU7bDxlLmFsbE9mLmxlbmd0aDtsKyspYT1TLmludGVyc2VjdGlvbihhLHVlKGUuYWxsT2ZbbF0sdCkpO249YX1lLm51bGxhYmxlPT09ITAmJnQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJihuPVMubnVsbGFibGUobikpLGUucmVhZE9ubHk9PT0hMCYmKG49Uy5yZWFkb25seShuKSksZS5kZWZhdWx0IT09dm9pZCAwJiYobj1uLmRlZmF1bHQoZS5kZWZhdWx0KSk7Y29uc3Qgcj17fSxzPVsiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiXTtmb3IoY29uc3QgYSBvZiBzKWEgaW4gZSYmKHJbYV09ZVthXSk7Y29uc3QgaT1bImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIl07Zm9yKGNvbnN0IGEgb2YgaSlhIGluIGUmJihyW2FdPWVbYV0pO2lmKGUudHlwZT09PSJvYmplY3QiJiZlLiRyZWY9PT12b2lkIDApe2UucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmIUx0KGUucHJvcGVydHlOYW1lcykmJihyLnByb3BlcnR5TmFtZXM9ZS5wcm9wZXJ0eU5hbWVzKTtmb3IoY29uc3QgYSBvZlsibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1pZihlLnR5cGU9PT0iYXJyYXkiJiZlLiRyZWY9PT12b2lkIDApe2UuY29udGFpbnMhPT12b2lkIDAmJiFMdChlLmNvbnRhaW5zKSYmKHIuY29udGFpbnM9ZS5jb250YWlucyk7Zm9yKGNvbnN0IGEgb2ZbInVuaXF1ZUl0ZW1zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyJdKWVbYV0hPT12b2lkIDAmJihyW2FdPWVbYV0pfWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKGUpKXhiLmhhcyhhKXx8bnQocixhLGVbYV0pO3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmdC5yZWdpc3RyeS5hZGQobixyKSxlLmRlc2NyaXB0aW9uJiYobj1uLmRlc2NyaWJlKGUuZGVzY3JpcHRpb24pKSxufWZ1bmN0aW9uIFpoKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9TLmFueSgpOlMubmV2ZXIoKTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoImZyb21KU09OU2NoZW1hIGlucHV0IGlzIG5vdCB2YWxpZCBKU09OIChwb3NzaWJseSBjeWNsaWMpOyB1c2UgJGRlZnMvJHJlZiBmb3IgcmVjdXJzaXZlIHNjaGVtYXMiKX1jb25zdCBvPUNiKG4sdD8uZGVmYXVsdFRhcmdldCkscj1uLiRkZWZzfHxuLmRlZmluaXRpb25zfHx7fSxzPXt2ZXJzaW9uOm8sZGVmczpyLHJlZnM6bmV3IE1hcCxwcm9jZXNzaW5nOm5ldyBTZXQscm9vdFNjaGVtYTpuLHJlZ2lzdHJ5OnQ/LnJlZ2lzdHJ5Pz9fZX07cmV0dXJuIHVlKG4scyl9ZnVuY3Rpb24gTmgoZSl7cmV0dXJuIEJpKGUse29iamVjdDp0PT50LnBhcnRpYWwoKSx1bmlvbjp0PT57Y29uc3Qgbj10Ll96b2QuZGVmO3JldHVybiBuLmRpc2NyaW1pbmF0b3I9PT12b2lkIDA/dDpPKG4ub3B0aW9ucyl9fSl9ZnVuY3Rpb24gTWIoZSx0KXtpZighdD8ubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49ZS5fem9kLmRlZjtyZXR1cm4gVyhlLGFlKG4se2NoZWNrczpbLi4ubi5jaGVja3M/P1tdLC4uLnRdfSkse3BhcmVudDohMH0pfWZ1bmN0aW9uIGpoKGUpe3JldHVybiBNYihlLm91dCxlLmNoZWNrcyl9ZnVuY3Rpb24gcWIoZSl7cmV0dXJuIGUuaW4uX3pvZC50cmFpdHMuaGFzKCIkWm9kVHJhbnNmb3JtIik/amgoZSk6ZS5pbn1mdW5jdGlvbiBNaChlKXtyZXR1cm4gQmkoZSx7cGlwZTp0PT5xYih0Ll96b2QuZGVmKSxkZWZhdWx0Oih0LG4pPT5uP0godC5fem9kLmRlZi5pbm5lclR5cGUpOnQsY2F0Y2g6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHFoKGUpe3JldHVybiBCaShlLHtwaXBlOnQ9PmpoKHQuX3pvZC5kZWYpLHByZWZhdWx0Oih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBEYihlKXtyZXR1cm4gTHAod3QsZSl9ZnVuY3Rpb24gTGIoZSl7cmV0dXJuIFZwKFB0LGUpfWZ1bmN0aW9uIFViKGUpe3JldHVybiBYcCh4dCxlKX1mdW5jdGlvbiBGYihlKXtyZXR1cm4gdGgoQ3QsZSl9ZnVuY3Rpb24gSGIoZSl7cmV0dXJuIHBoKFVuLGUpfWNvbnN0IERoPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiaWdpbnQ6RmIsYm9vbGVhbjpVYixkYXRlOkhiLG51bWJlcjpMYixzdHJpbmc6RGJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksaHU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpDcywkaW5wdXQ6ZGksJG91dHB1dDpsaSxJTlZBTElEOmhpLE5FVkVSOnhzLFRpbWVQcmVjaXNpb246cWksWm9kQW55OnVyLFpvZEFycmF5OmhyLFpvZEJhc2U2NDpabixab2RCYXNlNjRVUkw6Tm4sWm9kQmlnSW50OkN0LFpvZEJpZ0ludEZvcm1hdDpxbixab2RCb29sZWFuOnh0LFpvZENJRFJ2NDpBbixab2RDSURSdjY6Um4sWm9kQ1VJRDpUbixab2RDVUlEMjpJbixab2RDYXRjaDpPcixab2RDb2RlYzpOdCxab2RDb21waWxlQXN5bmNFcnJvcjpmaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjptaSxab2RDcmVkaXRDYXJkOnJyLFpvZEN1c3RvbTpqdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6RmUsWm9kRGF0ZTpVbixab2REZWZhdWx0OlRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjptcixab2RFMTY0OmpuLFpvZEVtYWlsOnduLFpvZEVtb2ppOlNuLFpvZEVudW06dHQsWm9kRXJyb3I6eGgsWm9kRXhhY3RPcHRpb25hbDpCbixab2RGaWxlOndyLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gJG99LFpvZEZ1bmN0aW9uOlVyLFpvZEdVSUQ6JG4sWm9kSUJBTjpzcixab2RJUHY0OkVuLFpvZElQdjY6T24sWm9kSVNPRGF0ZTpTdCxab2RJU09EYXRlVGltZTokdCxab2RJU09EdXJhdGlvbjpUdCxab2RJU09UaW1lOnp0LFpvZEluc3RhbmNlT2Y6VnIsWm9kSW50ZXJzZWN0aW9uOmdyLFpvZElzc3VlQ29kZTpDaCxab2RKV1Q6TW4sWm9kS1NVSUQ6Q24sWm9kTGF6eTpxcixab2RMaXRlcmFsOmtyLFpvZE1BQzpvcixab2RNYXA6eXIsWm9kTmFOOlJyLFpvZE5hbm9JRDp6bixab2ROZXZlcjpkcixab2ROb25PcHRpb25hbDpWbixab2ROdWxsOmNyLFpvZE51bGxhYmxlOnpyLFpvZE51bWJlcjpQdCxab2ROdW1iZXJGb3JtYXQ6SGUsWm9kT2JqZWN0OkV0LFpvZE9wdGlvbmFsOlJ0LFpvZFBpcGU6WnQsWm9kUHJlZmF1bHQ6UHIsWm9kUHJlcHJvY2Vzczpacixab2RQcm9taXNlOkxyLFpvZFJlYWRvbmx5Ok5yLFpvZFJlYWxFcnJvcjpwZSxab2RSZWNvcmQ6ZXQsWm9kU2V0Ol9yLFpvZFN0cmluZzp3dCxab2RTdHJpbmdGb3JtYXQ6TCxab2RTdWNjZXNzOkVyLFpvZFN5bWJvbDppcixab2RUZW1wbGF0ZUxpdGVyYWw6TXIsWm9kVHJhbnNmb3JtOiRyLFpvZFR1cGxlOmJyLFpvZFR5cGU6RSxab2RVTElEOlBuLFpvZFVSTDpJdCxab2RVVUlEOkllLFpvZFVuZGVmaW5lZDphcixab2RVbmlvbjpPdCxab2RVbmtub3duOmxyLFpvZFZvaWQ6cHIsWm9kWElEOnhuLFpvZFhvcjpmcixfWm9kU3RyaW5nOmtuLF9kZWZhdWx0OklyLF9mdW5jdGlvbjptdCxhbnk6TG4sYXJyYXk6UCxiYXNlNjQ6emEsYmFzZTY0dXJsOlRhLGJpZ2ludDpEYSxib29sZWFuOkQsY2F0Y2g6QXIsY2hlY2s6Y2MsY2lkcnY0OiRhLGNpZHJ2NjpTYSxjbG9uZTpXLGNvZGVjOnJjLGNvZXJjZTpEaCxjb21waWxlOmdpLGNvbmZpZzpYLGNvcmU6VGgsY3JlZGl0Q2FyZDpQYSxjdWlkOm1hLGN1aWQyOmdhLGN1cnJlbmN5Q29kZTpSYSxjdXN0b206RnIsZGF0ZTpCYSxkZWNvZGU6WWksZGVjb2RlQXN5bmM6ZWEsZGVlcFBhcnRpYWw6TmgsZGVzY3JpYmU6dWMsZGlzY3JpbWluYXRlZFVuaW9uOkZuLGUxNjQ6SWEsZW1haWw6c2EsZW1vamk6aGEsZW5jb2RlOlFpLGVuY29kZUFzeW5jOlhpLGVuZHNXaXRoOmhuLGVudW06cmUsZXhhY3RPcHRpb25hbDpTcixmaWxlOmVjLGZsYXR0ZW5FcnJvcjpEbyxmbG9hdDMyOk5hLGZsb2F0NjQ6amEsZm9ybWF0RXJyb3I6TG8sZnJvbUpTT05TY2hlbWE6WmgsZnVuY3Rpb246bXQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpvaSxnZXRFcnJvck1hcDpPaCxnbG9iYWxSZWdpc3RyeTpfZSxndDpSZSxndGU6bWUsZ3VpZDppYSxoYXNoOlphLGhleDpBYSxob3N0bmFtZTpPYSxodHRwVXJsOnBhLGliYW46eGEsaW5jbHVkZXM6ZG4saW5wdXQ6TWgsaW5zdGFuY2VvZjpkYyxpbnQ6VnQsaW50MzI6TWEsaW50NjQ6TGEsaW50ZXJzZWN0aW9uOkF0LGludmVydENvZGVjOnNjLGlwdjQ6X2EsaXB2Njp3YSxpc286ZmMsanNvbjpoYyxqd3Q6Q2Esa2V5b2Y6VmEsa3N1aWQ6eWEsbGF6eTpEcixsZW5ndGg6X3QsbGl0ZXJhbDpmLGxvY2FsZXM6dWksbG9vc2VPYmplY3Q6b2UsbG9vc2VSZWNvcmQ6R2EsbG93ZXJjYXNlOnVuLGx0OkFlLGx0ZTpmZSxtYWM6a2EsbWFwOlFhLG1heExlbmd0aDp5dCxtYXhTaXplOm90LG1lbW9pemVyOktvLG1ldGE6bGMsbWltZTptbixtaW5MZW5ndGg6TGUsbWluU2l6ZTpaZSxtdWx0aXBsZU9mOlllLG5hbjpvYyxuYW5vaWQ6ZmEsbmF0aXZlRW51bTpYYSxuZWdhdGl2ZTpYbyxuZXZlcjpYZSxub25uZWdhdGl2ZTp0cixub25vcHRpb25hbDpDcixub25wb3NpdGl2ZTplcixub3JtYWxpemU6Z24sbnVsbDpEbixudWxsYWJsZTpmdCxudWxsaXNoOnRjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOkgsb3V0cHV0OnFoLG92ZXJ3cml0ZTp4ZSxwYXJzZTpKaSxwYXJzZUFzeW5jOktpLHBhcnRpYWxSZWNvcmQ6V2EscGlwZTpKdCxwb3NpdGl2ZTpZbyxwcmVmYXVsdDp4cixwcmVwcm9jZXNzOkpuLHByZXR0aWZ5RXJyb3I6T3MscHJvbWlzZTphYyxwcm9wZXJ0aWVzOmZuLHByb3BlcnR5Om5yLHJlYWRvbmx5OmpyLHJlY29yZDpSLHJlZmluZTpIcixyZWdleDpjbixyZWdleGVzOlZvLHJlZ2lzdHJ5OldvLHNhZmVEZWNvZGU6bmEsc2FmZURlY29kZUFzeW5jOnJhLHNhZmVFbmNvZGU6dGEsc2FmZUVuY29kZUFzeW5jOm9hLHNhZmVQYXJzZTpXaSxzYWZlUGFyc2VBc3luYzpHaSxzZXQ6WWEsc2V0RXJyb3JNYXA6RWgsc2l6ZTp2dCxzbHVnaWZ5Ol9uLHN0YXJ0c1dpdGg6cG4sc3RyaWN0T2JqZWN0OkphLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpFYSxzdHJpbmdib29sOnBjLHN1Y2Nlc3M6bmMsc3VwZXJSZWZpbmU6QnIsc3ltYm9sOkZhLHRlbXBsYXRlTGl0ZXJhbDppYyx0b0pTT05TY2hlbWE6SGksdG9Mb3dlckNhc2U6dm4sdG9VcHBlckNhc2U6eW4sdG9ab2Q6RW8sdHJhbnNmb3JtOkhuLHRyZWVpZnlFcnJvcjpFcyx0cmltOmJuLHR1cGxlOnZyLHVpbnQzMjpxYSx1aW50NjQ6VWEsdWxpZDpiYSx1bmRlZmluZWQ6aHQsdW5pb246Tyx1bmtub3duOk0sdXBwZXJjYXNlOmxuLHVybDpkYSx1dGlsOlBzLHV1aWQ6YWEsdXVpZHY0OmNhLHV1aWR2Njp1YSx1dWlkdjc6bGEsdmFsaWRhdGU6Rm8sdmFsaWRhdGVBc3luYzpIbyx2b2lkOkhhLHdpdGhQYXJzZXI6YmkseGlkOnZhLHhvcjpLYX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxCYj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOkNzLCRpbnB1dDpkaSwkb3V0cHV0OmxpLElOVkFMSUQ6aGksTkVWRVI6eHMsVGltZVByZWNpc2lvbjpxaSxab2RBbnk6dXIsWm9kQXJyYXk6aHIsWm9kQmFzZTY0OlpuLFpvZEJhc2U2NFVSTDpObixab2RCaWdJbnQ6Q3QsWm9kQmlnSW50Rm9ybWF0OnFuLFpvZEJvb2xlYW46eHQsWm9kQ0lEUnY0OkFuLFpvZENJRFJ2NjpSbixab2RDVUlEOlRuLFpvZENVSUQyOkluLFpvZENhdGNoOk9yLFpvZENvZGVjOk50LFpvZENvbXBpbGVBc3luY0Vycm9yOmZpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOm1pLFpvZENyZWRpdENhcmQ6cnIsWm9kQ3VzdG9tOmp0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpGZSxab2REYXRlOlVuLFpvZERlZmF1bHQ6VHIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOm1yLFpvZEUxNjQ6am4sWm9kRW1haWw6d24sWm9kRW1vamk6U24sWm9kRW51bTp0dCxab2RFcnJvcjp4aCxab2RFeGFjdE9wdGlvbmFsOkJuLFpvZEZpbGU6d3IsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiAkb30sWm9kRnVuY3Rpb246VXIsWm9kR1VJRDokbixab2RJQkFOOnNyLFpvZElQdjQ6RW4sWm9kSVB2NjpPbixab2RJU09EYXRlOlN0LFpvZElTT0RhdGVUaW1lOiR0LFpvZElTT0R1cmF0aW9uOlR0LFpvZElTT1RpbWU6enQsWm9kSW5zdGFuY2VPZjpWcixab2RJbnRlcnNlY3Rpb246Z3IsWm9kSXNzdWVDb2RlOkNoLFpvZEpXVDpNbixab2RLU1VJRDpDbixab2RMYXp5OnFyLFpvZExpdGVyYWw6a3IsWm9kTUFDOm9yLFpvZE1hcDp5cixab2ROYU46UnIsWm9kTmFub0lEOnpuLFpvZE5ldmVyOmRyLFpvZE5vbk9wdGlvbmFsOlZuLFpvZE51bGw6Y3IsWm9kTnVsbGFibGU6enIsWm9kTnVtYmVyOlB0LFpvZE51bWJlckZvcm1hdDpIZSxab2RPYmplY3Q6RXQsWm9kT3B0aW9uYWw6UnQsWm9kUGlwZTpadCxab2RQcmVmYXVsdDpQcixab2RQcmVwcm9jZXNzOlpyLFpvZFByb21pc2U6THIsWm9kUmVhZG9ubHk6TnIsWm9kUmVhbEVycm9yOnBlLFpvZFJlY29yZDpldCxab2RTZXQ6X3IsWm9kU3RyaW5nOnd0LFpvZFN0cmluZ0Zvcm1hdDpMLFpvZFN1Y2Nlc3M6RXIsWm9kU3ltYm9sOmlyLFpvZFRlbXBsYXRlTGl0ZXJhbDpNcixab2RUcmFuc2Zvcm06JHIsWm9kVHVwbGU6YnIsWm9kVHlwZTpFLFpvZFVMSUQ6UG4sWm9kVVJMOkl0LFpvZFVVSUQ6SWUsWm9kVW5kZWZpbmVkOmFyLFpvZFVuaW9uOk90LFpvZFVua25vd246bHIsWm9kVm9pZDpwcixab2RYSUQ6eG4sWm9kWG9yOmZyLF9ab2RTdHJpbmc6a24sX2RlZmF1bHQ6SXIsX2Z1bmN0aW9uOm10LGFueTpMbixhcnJheTpQLGJhc2U2NDp6YSxiYXNlNjR1cmw6VGEsYmlnaW50OkRhLGJvb2xlYW46RCxjYXRjaDpBcixjaGVjazpjYyxjaWRydjQ6JGEsY2lkcnY2OlNhLGNsb25lOlcsY29kZWM6cmMsY29lcmNlOkRoLGNvbXBpbGU6Z2ksY29uZmlnOlgsY29yZTpUaCxjcmVkaXRDYXJkOlBhLGN1aWQ6bWEsY3VpZDI6Z2EsY3VycmVuY3lDb2RlOlJhLGN1c3RvbTpGcixkYXRlOkJhLGRlY29kZTpZaSxkZWNvZGVBc3luYzplYSxkZWVwUGFydGlhbDpOaCxkZWZhdWx0Omh1LGRlc2NyaWJlOnVjLGRpc2NyaW1pbmF0ZWRVbmlvbjpGbixlMTY0OklhLGVtYWlsOnNhLGVtb2ppOmhhLGVuY29kZTpRaSxlbmNvZGVBc3luYzpYaSxlbmRzV2l0aDpobixlbnVtOnJlLGV4YWN0T3B0aW9uYWw6U3IsZmlsZTplYyxmbGF0dGVuRXJyb3I6RG8sZmxvYXQzMjpOYSxmbG9hdDY0OmphLGZvcm1hdEVycm9yOkxvLGZyb21KU09OU2NoZW1hOlpoLGZ1bmN0aW9uOm10LGdldERpc2NyaW1pbmF0ZWRPcHRpb246b2ksZ2V0RXJyb3JNYXA6T2gsZ2xvYmFsUmVnaXN0cnk6X2UsZ3Q6UmUsZ3RlOm1lLGd1aWQ6aWEsaGFzaDpaYSxoZXg6QWEsaG9zdG5hbWU6T2EsaHR0cFVybDpwYSxpYmFuOnhhLGluY2x1ZGVzOmRuLGlucHV0Ok1oLGluc3RhbmNlb2Y6ZGMsaW50OlZ0LGludDMyOk1hLGludDY0OkxhLGludGVyc2VjdGlvbjpBdCxpbnZlcnRDb2RlYzpzYyxpcHY0Ol9hLGlwdjY6d2EsaXNvOmZjLGpzb246aGMsand0OkNhLGtleW9mOlZhLGtzdWlkOnlhLGxhenk6RHIsbGVuZ3RoOl90LGxpdGVyYWw6Zixsb2NhbGVzOnVpLGxvb3NlT2JqZWN0Om9lLGxvb3NlUmVjb3JkOkdhLGxvd2VyY2FzZTp1bixsdDpBZSxsdGU6ZmUsbWFjOmthLG1hcDpRYSxtYXhMZW5ndGg6eXQsbWF4U2l6ZTpvdCxtZW1vaXplcjpLbyxtZXRhOmxjLG1pbWU6bW4sbWluTGVuZ3RoOkxlLG1pblNpemU6WmUsbXVsdGlwbGVPZjpZZSxuYW46b2MsbmFub2lkOmZhLG5hdGl2ZUVudW06WGEsbmVnYXRpdmU6WG8sbmV2ZXI6WGUsbm9ubmVnYXRpdmU6dHIsbm9ub3B0aW9uYWw6Q3Isbm9ucG9zaXRpdmU6ZXIsbm9ybWFsaXplOmduLG51bGw6RG4sbnVsbGFibGU6ZnQsbnVsbGlzaDp0YyxudW1iZXI6QyxvYmplY3Q6ZyxvcHRpb25hbDpILG91dHB1dDpxaCxvdmVyd3JpdGU6eGUscGFyc2U6SmkscGFyc2VBc3luYzpLaSxwYXJ0aWFsUmVjb3JkOldhLHBpcGU6SnQscG9zaXRpdmU6WW8scHJlZmF1bHQ6eHIscHJlcHJvY2VzczpKbixwcmV0dGlmeUVycm9yOk9zLHByb21pc2U6YWMscHJvcGVydGllczpmbixwcm9wZXJ0eTpucixyZWFkb25seTpqcixyZWNvcmQ6UixyZWZpbmU6SHIscmVnZXg6Y24scmVnZXhlczpWbyxyZWdpc3RyeTpXbyxzYWZlRGVjb2RlOm5hLHNhZmVEZWNvZGVBc3luYzpyYSxzYWZlRW5jb2RlOnRhLHNhZmVFbmNvZGVBc3luYzpvYSxzYWZlUGFyc2U6V2ksc2FmZVBhcnNlQXN5bmM6R2ksc2V0OllhLHNldEVycm9yTWFwOkVoLHNpemU6dnQsc2x1Z2lmeTpfbixzdGFydHNXaXRoOnBuLHN0cmljdE9iamVjdDpKYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6RWEsc3RyaW5nYm9vbDpwYyxzdWNjZXNzOm5jLHN1cGVyUmVmaW5lOkJyLHN5bWJvbDpGYSx0ZW1wbGF0ZUxpdGVyYWw6aWMsdG9KU09OU2NoZW1hOkhpLHRvTG93ZXJDYXNlOnZuLHRvVXBwZXJDYXNlOnluLHRvWm9kOkVvLHRyYW5zZm9ybTpIbix0cmVlaWZ5RXJyb3I6RXMsdHJpbTpibix0dXBsZTp2cix1aW50MzI6cWEsdWludDY0OlVhLHVsaWQ6YmEsdW5kZWZpbmVkOmh0LHVuaW9uOk8sdW5rbm93bjpNLHVwcGVyY2FzZTpsbix1cmw6ZGEsdXRpbDpQcyx1dWlkOmFhLHV1aWR2NDpjYSx1dWlkdjY6dWEsdXVpZHY3OmxhLHZhbGlkYXRlOkZvLHZhbGlkYXRlQXN5bmM6SG8sdm9pZDpIYSx3aXRoUGFyc2VyOmJpLHhpZDp2YSx4b3I6S2EsejpodX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxLZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixKcj0iMi4wIixZPUZyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLExoPU8oW2goKSxDKCkuaW50KCldKSxVaD1oKCk7b2Uoe3R0bDpDKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6QygpLm9wdGlvbmFsKCl9KTtjb25zdCBWYj1nKHt0dGw6QygpLm9wdGlvbmFsKCl9KSxKYj1nKHt0YXNrSWQ6aCgpfSksbWM9b2Uoe3Byb2dyZXNzVG9rZW46TGgub3B0aW9uYWwoKSxbS2VdOkpiLm9wdGlvbmFsKCl9KSxiZT1nKHtfbWV0YTptYy5vcHRpb25hbCgpfSksS249YmUuZXh0ZW5kKHt0YXNrOlZiLm9wdGlvbmFsKCl9KSxLYj1lPT5Lbi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxzZT1nKHttZXRob2Q6aCgpLHBhcmFtczpiZS5sb29zZSgpLm9wdGlvbmFsKCl9KSwkZT1nKHtfbWV0YTptYy5vcHRpb25hbCgpfSksU2U9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6JGUubG9vc2UoKS5vcHRpb25hbCgpfSksaWU9b2Uoe19tZXRhOm1jLm9wdGlvbmFsKCl9KSxXbj1PKFtoKCksQygpLmludCgpXSksRmg9Zyh7anNvbnJwYzpmKEpyKSxpZDpXbiwuLi5zZS5zaGFwZX0pLnN0cmljdCgpLGZ1PWU9PkZoLnNhZmVQYXJzZShlKS5zdWNjZXNzLEhoPWcoe2pzb25ycGM6ZihKciksLi4uU2Uuc2hhcGV9KS5zdHJpY3QoKSxXYj1lPT5IaC5zYWZlUGFyc2UoZSkuc3VjY2VzcyxnYz1nKHtqc29ucnBjOmYoSnIpLGlkOlduLHJlc3VsdDppZX0pLnN0cmljdCgpLHBvPWU9PmdjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBVOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoVXx8KFU9e30pKTtjb25zdCBiYz1nKHtqc29ucnBjOmYoSnIpLGlkOlduLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpDKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpNKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksR2I9ZT0+YmMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsUWI9TyhbRmgsSGgsZ2MsYmNdKTtPKFtnYyxiY10pO2NvbnN0IHZjPWllLnN0cmljdCgpLFliPSRlLmV4dGVuZCh7cmVxdWVzdElkOlduLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSkseWM9U2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6WWJ9KSxYYj1nKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOlAoaCgpKS5vcHRpb25hbCgpLHRoZW1lOnJlKFsibGlnaHQiLCJkYXJrIl0pLm9wdGlvbmFsKCl9KSxHbj1nKHtpY29uczpQKFhiKS5vcHRpb25hbCgpfSksZ3Q9Zyh7bmFtZTpoKCksdGl0bGU6aCgpLm9wdGlvbmFsKCl9KSxLcj1ndC5leHRlbmQoey4uLmd0LnNoYXBlLC4uLkduLnNoYXBlLHZlcnNpb246aCgpLHdlYnNpdGVVcmw6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCl9KSxldj1BdChnKHthcHBseURlZmF1bHRzOkQoKS5vcHRpb25hbCgpfSksUihoKCksTSgpKSksdHY9Sm4oZT0+ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MD97Zm9ybTp7fX06ZSxBdChnKHtmb3JtOmV2Lm9wdGlvbmFsKCksdXJsOlkub3B0aW9uYWwoKX0pLFIoaCgpLE0oKSkub3B0aW9uYWwoKSkpLG52PW9lKHtsaXN0Olkub3B0aW9uYWwoKSxjYW5jZWw6WS5vcHRpb25hbCgpLHJlcXVlc3RzOm9lKHtzYW1wbGluZzpvZSh7Y3JlYXRlTWVzc2FnZTpZLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOm9lKHtjcmVhdGU6WS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxvdj1vZSh7bGlzdDpZLm9wdGlvbmFsKCksY2FuY2VsOlkub3B0aW9uYWwoKSxyZXF1ZXN0czpvZSh7dG9vbHM6b2Uoe2NhbGw6WS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxydj1nKHtleHBlcmltZW50YWw6UihoKCksWSkub3B0aW9uYWwoKSxzYW1wbGluZzpnKHtjb250ZXh0Olkub3B0aW9uYWwoKSx0b29sczpZLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnR2Lm9wdGlvbmFsKCkscm9vdHM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOm52Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpSKGgoKSxZKS5vcHRpb25hbCgpfSksc3Y9YmUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpydixjbGllbnRJbmZvOktyfSksaXY9c2UuZXh0ZW5kKHttZXRob2Q6ZigiaW5pdGlhbGl6ZSIpLHBhcmFtczpzdn0pLGF2PWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxZKS5vcHRpb25hbCgpLGxvZ2dpbmc6WS5vcHRpb25hbCgpLGNvbXBsZXRpb25zOlkub3B0aW9uYWwoKSxwcm9tcHRzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6Zyh7c3Vic2NyaWJlOkQoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6b3Yub3B0aW9uYWwoKSxleHRlbnNpb25zOlIoaCgpLFkpLm9wdGlvbmFsKCl9KSxjdj1pZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOmF2LHNlcnZlckluZm86S3IsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksdXY9U2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczokZS5vcHRpb25hbCgpfSksV3I9c2UuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczpiZS5vcHRpb25hbCgpfSksbHY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOkgoQygpKSxtZXNzYWdlOkgoaCgpKX0pLGR2PWcoey4uLiRlLnNoYXBlLC4uLmx2LnNoYXBlLHByb2dyZXNzVG9rZW46TGh9KSxfYz1TZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOmR2fSkscHY9YmUuZXh0ZW5kKHtjdXJzb3I6VWgub3B0aW9uYWwoKX0pLFFuPXNlLmV4dGVuZCh7cGFyYW1zOnB2Lm9wdGlvbmFsKCl9KSxZbj1pZS5leHRlbmQoe25leHRDdXJzb3I6VWgub3B0aW9uYWwoKX0pLGh2PXJlKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLFhuPWcoe3Rhc2tJZDpoKCksc3RhdHVzOmh2LHR0bDpPKFtDKCksRG4oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOkgoQygpKSxzdGF0dXNNZXNzYWdlOkgoaCgpKX0pLGtjPWllLmV4dGVuZCh7dGFzazpYbn0pLGZ2PSRlLm1lcmdlKFhuKSxTbz1TZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpmdn0pLHdjPXNlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczpiZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLCRjPWllLm1lcmdlKFhuKSxTYz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6YmUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtpZS5sb29zZSgpO2NvbnN0IHpjPVFuLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLFRjPVluLmV4dGVuZCh7dGFza3M6UChYbil9KSxJYz1zZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6YmUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxtdj1pZS5tZXJnZShYbiksQmg9Zyh7dXJpOmgoKSxtaW1lVHlwZTpIKGgoKSksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksVmg9QmguZXh0ZW5kKHt0ZXh0OmgoKX0pLFBjPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksSmg9QmguZXh0ZW5kKHtibG9iOlBjfSksZW89cmUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLE10PWcoe2F1ZGllbmNlOlAoZW8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6QWgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxLaD1nKHsuLi5ndC5zaGFwZSwuLi5Hbi5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOkgoaCgpKSxtaW1lVHlwZTpIKGgoKSksc2l6ZTpIKEMoKSksYW5ub3RhdGlvbnM6TXQub3B0aW9uYWwoKSxfbWV0YTpIKG9lKHt9KSl9KSxndj1nKHsuLi5ndC5zaGFwZSwuLi5Hbi5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246SChoKCkpLG1pbWVUeXBlOkgoaCgpKSxhbm5vdGF0aW9uczpNdC5vcHRpb25hbCgpLF9tZXRhOkgob2Uoe30pKX0pLGJ2PVFuLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxXaD1Zbi5leHRlbmQoe3Jlc291cmNlczpQKEtoKX0pLHZ2PVFuLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSkseXY9WW4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKGd2KX0pLHhjPWJlLmV4dGVuZCh7dXJpOmgoKX0pLF92PXhjLGt2PXNlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOl92fSksR2g9aWUuZXh0ZW5kKHtjb250ZW50czpQKE8oW1ZoLEpoXSkpfSksd3Y9U2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOiRlLm9wdGlvbmFsKCl9KSwkdj14YyxTdj1zZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOiR2fSksenY9eGMsVHY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOnp2fSksSXY9JGUuZXh0ZW5kKHt1cmk6aCgpfSksUHY9U2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpJdn0pLHh2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOkgoaCgpKSxyZXF1aXJlZDpIKEQoKSl9KSxDdj1nKHsuLi5ndC5zaGFwZSwuLi5Hbi5zaGFwZSxkZXNjcmlwdGlvbjpIKGgoKSksYXJndW1lbnRzOkgoUCh4dikpLF9tZXRhOkgob2Uoe30pKX0pLEV2PVFuLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksT3Y9WW4uZXh0ZW5kKHtwcm9tcHRzOlAoQ3YpfSksQXY9YmUuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6UihoKCksaCgpKS5vcHRpb25hbCgpfSksUnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6QXZ9KSxDYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpNdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLEVjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOlBjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpNdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLE9jPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOlBjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpNdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLFp2PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6UihoKCksTSgpKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxRaD1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6TyhbVmgsSmhdKSxhbm5vdGF0aW9uczpNdC5vcHRpb25hbCgpLF9tZXRhOlIoaCgpLE0oKSkub3B0aW9uYWwoKX0pLFloPUtoLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSx0bz1PKFtDYyxFYyxPYyxZaCxRaF0pLE52PWcoe3JvbGU6ZW8sY29udGVudDp0b30pLGp2PWllLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChOdil9KSxNdj1TZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOiRlLm9wdGlvbmFsKCl9KSxxdj1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6RCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkQoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkQoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6RCgpLm9wdGlvbmFsKCl9KSxEdj1nKHt0YXNrU3VwcG9ydDpyZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLEFjPWcoey4uLmd0LnNoYXBlLC4uLkduLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpSKGgoKSxZKS5vcHRpb25hbCgpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoTSgpKSxvdXRwdXRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLFkpLm9wdGlvbmFsKCkscmVxdWlyZWQ6UChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChNKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6cXYub3B0aW9uYWwoKSxleGVjdXRpb246RHYub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxYaD1Rbi5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9saXN0Iil9KSxMdj1Zbi5leHRlbmQoe3Rvb2xzOlAoQWMpfSksR3I9aWUuZXh0ZW5kKHtjb250ZW50OlAodG8pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OlIoaCgpLE0oKSkub3B0aW9uYWwoKSxpc0Vycm9yOkQoKS5vcHRpb25hbCgpfSk7R3Iub3IoaWUuZXh0ZW5kKHt0b29sUmVzdWx0Ok0oKX0pKTtjb25zdCBVdj1Lbi5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxlZj1zZS5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9jYWxsIikscGFyYW1zOlV2fSksRnY9U2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6JGUub3B0aW9uYWwoKX0pO2coe2F1dG9SZWZyZXNoOkQoKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOkMoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IHRmPXJlKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxIdj1iZS5leHRlbmQoe2xldmVsOnRmfSksQnY9c2UuZXh0ZW5kKHttZXRob2Q6ZigibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczpIdn0pLFZ2PSRlLmV4dGVuZCh7bGV2ZWw6dGYsbG9nZ2VyOmgoKS5vcHRpb25hbCgpLGRhdGE6TSgpfSksSnY9U2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOlZ2fSksS3Y9Zyh7bmFtZTpoKCkub3B0aW9uYWwoKX0pLFd2PWcoe2hpbnRzOlAoS3YpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSxHdj1nKHttb2RlOnJlKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksUXY9Zyh7dHlwZTpmKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpoKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6UCh0bykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6RCgpLm9wdGlvbmFsKCksX21ldGE6UihoKCksTSgpKS5vcHRpb25hbCgpfSksWXY9Rm4oInR5cGUiLFtDYyxFYyxPY10pLHpvPUZuKCJ0eXBlIixbQ2MsRWMsT2MsWnYsUXZdKSxYdj1nKHtyb2xlOmVvLGNvbnRlbnQ6Tyhbem8sUCh6byldKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxleT1Lbi5leHRlbmQoe21lc3NhZ2VzOlAoWHYpLG1vZGVsUHJlZmVyZW5jZXM6V3Yub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6aCgpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6cmUoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpDKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6QygpLmludCgpLHN0b3BTZXF1ZW5jZXM6UChoKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6WS5vcHRpb25hbCgpLHRvb2xzOlAoQWMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpHdi5vcHRpb25hbCgpfSksdHk9c2UuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpleX0pLG5mPWllLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246SChyZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTplbyxjb250ZW50Oll2fSksb2Y9aWUuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpIKHJlKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTplbyxjb250ZW50Ok8oW3pvLFAoem8pXSl9KSxueT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkQoKS5vcHRpb25hbCgpfSksb3k9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDpyZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxyeT1nKHt0eXBlOnJlKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLHN5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLGl5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxheT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksY3k9Tyhbc3ksaXldKSx1eT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSxseT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLGR5PU8oW3V5LGx5XSkscHk9TyhbYXksY3ksZHldKSxoeT1PKFtweSxueSxveSxyeV0pLGZ5PUtuLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlIoaCgpLGh5KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksbXk9S24uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSxneT1PKFtmeSxteV0pLGJ5PXNlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpneX0pLHZ5PSRlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSx5eT1TZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOnZ5fSksX3k9aWUuZXh0ZW5kKHthY3Rpb246cmUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6Sm4oZT0+ZT09PW51bGw/dm9pZCAwOmUsUihoKCksTyhbaCgpLEMoKSxEKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSksa3k9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksd3k9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSwkeT1iZS5leHRlbmQoe3JlZjpPKFt3eSxreV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlIoaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxTeT1zZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOiR5fSksenk9aWUuZXh0ZW5kKHtjb21wbGV0aW9uOm9lKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOkgoQygpLmludCgpKSxoYXNNb3JlOkgoRCgpKX0pfSksVHk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpSKGgoKSxNKCkpLm9wdGlvbmFsKCl9KSxJeT1zZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOmJlLm9wdGlvbmFsKCl9KSxQeT1pZS5leHRlbmQoe3Jvb3RzOlAoVHkpfSkseHk9U2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6JGUub3B0aW9uYWwoKX0pO08oW1dyLGl2LFN5LEJ2LFJ2LEV2LGJ2LHZ2LGt2LFN2LFR2LGVmLFhoLHdjLFNjLHpjLEljXSk7TyhbeWMsX2MsdXYseHksU29dKTtPKFt2YyxuZixvZixfeSxQeSwkYyxUYyxrY10pO08oW1dyLHR5LGJ5LEl5LHdjLFNjLHpjLEljXSk7TyhbeWMsX2MsSnYsUHYsd3YsRnYsTXYsU28seXldKTtPKFt2Yyxjdix6eSxqdixPdixXaCx5dixHaCxHcixMdiwkYyxUYyxrY10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PVUuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgQ3koci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgQ3kgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihVLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gSmUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gbXUoZSl7Y29uc3Qgbj1rYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89d2Iobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBndShlLHQpe2NvbnN0IG49SWgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBFeT02ZTQ7Y2xhc3MgT3l7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoeWMsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKF9jLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihXcixuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHdjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFNjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgYTtmb3IoO2E9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoYS50eXBlPT09InJlc3BvbnNlInx8YS50eXBlPT09ImVycm9yIil7Y29uc3QgdT1hLm1lc3NhZ2UsbD11LmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxhLnR5cGU9PT0icmVzcG9uc2UiKWQodSk7ZWxzZXtjb25zdCBtPXUsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09YS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGEubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFpKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighSmUoaS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoSmUoaS5zdGF0dXMpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uYSxfbWV0YTp7Li4uYS5fbWV0YSxbS2VdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcih6Yyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEljLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKEplKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihVLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKFUuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGkpPT57cj8uKHMsaSkscG8ocyl8fEdiKHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6ZnUocyk/dGhpcy5fb25yZXF1ZXN0KHMsaSk6V2Iocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoVS5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bS2VdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOlUuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGkpO2NvbnN0IGE9S2IodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLHU9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDppLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooVS5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IGs9di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBrJiZ1JiZhd2FpdCB1LnVwZGF0ZVRhc2tTdGF0dXMoaywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6dSx0YXNrUmVxdWVzdGVkVHRsOmE/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57YSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpVLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWkmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgaT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxhPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihhJiZpJiZhLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaCh1KXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxpKHUpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobikscG8odCkpbyh0KTtlbHNle2NvbnN0IGk9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oaSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKHBvKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgaT10LnJlc3VsdDtpZihpLnRhc2smJnR5cGVvZiBpLnRhc2s9PSJvYmplY3QiKXtjb25zdCBhPWkudGFzazt0eXBlb2YgYS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGEudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobikscG8odCkpcih0KTtlbHNle2NvbnN0IGk9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoaSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIGo/aTpuZXcgaihVLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBpPWF3YWl0IHRoaXMucmVxdWVzdCh0LGtjLG8pO2lmKGkudGFzaylzPWkudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6aS50YXNrfTtlbHNlIHRocm93IG5ldyBqKFUuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGE9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazphfSxKZShhLnN0YXR1cykpe2Euc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06YS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9OmEuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooVS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGEuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IHU9YS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLHUpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2Ygaj9pOm5ldyBqKFUuSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmksdGFzazphLHJlbGF0ZWRUYXNrOnV9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09ST0+e2QoSSl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksYSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goSSl7bShJKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksYSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOmF9KSx1JiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtLZV06dX19KTtjb25zdCBrPUk9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKEkpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2godGU9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7dGV9YCkpKTtjb25zdCBWPUkgaW5zdGFuY2VvZiBqP0k6bmV3IGooVS5SZXF1ZXN0VGltZW91dCxTdHJpbmcoSSkpO2QoVil9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsST0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChJKTt0cnl7Y29uc3QgVj1JaChuLEkucmVzdWx0KTtWLnN1Y2Nlc3M/bChWLmRhdGEpOmQoVi5lcnJvcil9Y2F0Y2goVil7ZChWKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntrKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IHc9bz8udGltZW91dD8/RXksJD0oKT0+ayhqLmZyb21FcnJvcihVLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6d30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYix3LG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBaPXU/LnRhc2tJZDtpZihaKXtjb25zdCBJPVY9Pntjb25zdCB0ZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTt0ZT90ZShWKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsSSksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKFose3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKFY9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKFYpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKEk9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEkpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSwkYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sVGMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sbXYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBhPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTphLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW0tlXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYSxuKS5jYXRjaCh1PT50aGlzLl9vbmVycm9yKHUpKX0pO3JldHVybn1sZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbS2VdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPW11KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGk9Z3UodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oaSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPW11KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPWd1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZmdShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxpPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2k/KGkobmV3IGooVS5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgaT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoaSkscyhuZXcgaihVLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxpKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxpLG4pO2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoYSl7Y29uc3QgdT1Tby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmF9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxKZShhLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxpKT0+e2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWEpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihKZShhLnN0YXR1cykpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2Euc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGksbik7Y29uc3QgdT1hd2FpdCBvLmdldFRhc2socixuKTtpZih1KXtjb25zdCBsPVNvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6dX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLEplKHUuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIGJ1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBBeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBpPW5bcl07YnUoaSkmJmJ1KHMpP25bcl09ey4uLmksLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIFJ5IGV4dGVuZHMgT3l7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8saT0+e2xldCBhPWkucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsYSkscy5vbkhhbmRsZXI/LihhKTtmb3IobGV0IHUgb2ZbLi4ucy5saXN0ZW5lcnNdKXUoYSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIFp5PSIyMDI2LTAxLTI2IixOeT0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIGp5e2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1RYi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PU55JiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgTXk9TyhbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksS3Q9TyhbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLHF5PU8oW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLER5PVIocXkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksTyhbaCgpLGh0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIEx5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLFV5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxGeT1nKHtpc0Vycm9yOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIFJjPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLFpjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBIeT1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksQnk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpSKGgoKSxNKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLFZ5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxKeT1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLEt5PWcoe3ZhcmlhYmxlczpEeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOkp5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxXeT1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtSKGgoKSxNKCkpO3ZhciB2dT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIEd5PWcoe2V4cGVyaW1lbnRhbDpSKGgoKSxSKGgoKSxMbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOlpjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpSYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDp2dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6dnUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxReT1nKHtleHBlcmltZW50YWw6UihoKCksUihoKCksTG4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAoS3QpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6UmMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOlpjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTpLdC5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBZeT1nKHttb2RlOkt0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxYeT1PKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UChYeSkub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpYZSgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6WGUoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChPKFtRaCxZaF0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAodG8pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpSYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOlpjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIGVfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOkdyLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSkscmY9Zyh7dG9vbEluZm86Zyh7aWQ6V24ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOkFjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOk15Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6S3kub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOkt0Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChLdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOk8oW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0Ok8oW0MoKSxodCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKE8oW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOk8oW0MoKSxodCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06TyhbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLHRfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOnJmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAodG8pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpSKGgoKSxNKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86S3IuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOlF5LmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBuXz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOktyLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6R3kuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6cmYuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksb189e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIHl1KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0ob18pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IEVmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5CYiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBfdShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGk9cy5wYXRoPy5tYXAoYT0+dHlwZW9mIGE9PSJvYmplY3QiP2Eua2V5OmEpLmpvaW4oIi4iKTtyZXR1cm4gaT9gJHtpfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gcl8oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gc18oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIGlfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgTmMgZXh0ZW5kcyBSeXtfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6SHksdG9vbGlucHV0cGFydGlhbDpCeSx0b29scmVzdWx0OmVfLHRvb2xjYW5jZWxsZWQ6VnksaG9zdGNvbnRleHRjaGFuZ2VkOnRffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFOYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8WCh7aml0bGVzczohMH0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoV3Iscj0+KGNvbnNvbGUubG9nKCJSZWNlaXZlZCBwaW5nOiIsci5wYXJhbXMpLHt9KSksdGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdm9pZCAwKX1yZWdpc3RlckNhcGFiaWxpdGllcyh0KXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhZnRlciB0cmFuc3BvcnQgaXMgZXN0YWJsaXNoZWQiKTt0aGlzLl9jYXBhYmlsaXRpZXM9QXkodGhpcy5fY2FwYWJpbGl0aWVzLHQpfXJlZ2lzdGVyVG9vbCh0LG4sbyl7aWYodGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7bGV0IHI9dGhpcyxzPSgpPT57ci5faW5pdGlhbGl6ZWRTZW50JiZyLl9jYXBhYmlsaXRpZXMudG9vbHM/Lmxpc3RDaGFuZ2VkJiZyLnNlbmRUb29sTGlzdENoYW5nZWQoKX0saT1uLmlucHV0U2NoZW1hIT09dm9pZCAwLGE9e3RpdGxlOm4udGl0bGUsZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpuLmlucHV0U2NoZW1hLG91dHB1dFNjaGVtYTpuLm91dHB1dFNjaGVtYSxhbm5vdGF0aW9uczpuLmFubm90YXRpb25zLF9tZXRhOm4uX21ldGEsZW5hYmxlZDohMCxlbmFibGUoKXt0aGlzLmVuYWJsZWQ9ITAscygpfSxkaXNhYmxlKCl7dGhpcy5lbmFibGVkPSExLHMoKX0sdXBkYXRlKHUpe09iamVjdC5hc3NpZ24odGhpcyx1KSxzKCl9LHJlbW92ZSgpe3IuX3JlZ2lzdGVyZWRUb29sc1t0XT09PWEmJihkZWxldGUgci5fcmVnaXN0ZXJlZFRvb2xzW3RdLHMoKSl9LGhhbmRsZXI6YXN5bmModSxsKT0+e2lmKCFhLmVuYWJsZWQpdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBkaXNhYmxlZGApO2xldCBkO2lmKGkpe2xldCBtPWEuaW5wdXRTY2hlbWEsYj1tP2F3YWl0IF91KG0sdT8/e30sYEludmFsaWQgaW5wdXQgZm9yIHRvb2wgJHt0fTogYCk6dT8/e307ZD1hd2FpdCBvKGIsbCl9ZWxzZSBkPWF3YWl0IG8obCk7cmV0dXJuIGEub3V0cHV0U2NoZW1hJiYhZC5pc0Vycm9yJiYoZC5zdHJ1Y3R1cmVkQ29udGVudD1hd2FpdCBfdShhLm91dHB1dFNjaGVtYSxkLnN0cnVjdHVyZWRDb250ZW50LGBJbnZhbGlkIG91dHB1dCBmb3IgdG9vbCAke3R9OiBgKSksZH19O3JldHVybiB0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF09YSwhdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzJiYhdGhpcy50cmFuc3BvcnQmJnRoaXMucmVnaXN0ZXJDYXBhYmlsaXRpZXMoe3Rvb2xzOntsaXN0Q2hhbmdlZDohMH19KSx0aGlzLmVuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCkscygpLGF9X3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSExO2Vuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCl7dGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWR8fCh0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMCx0aGlzLm9uY2FsbHRvb2w9YXN5bmModCxuKT0+e2xldCBvPXRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0Lm5hbWVdO2lmKCFvKXRocm93IEVycm9yKGBUb29sICR7dC5uYW1lfSBub3QgZm91bmRgKTtyZXR1cm4gby5oYW5kbGVyKHQuYXJndW1lbnRzLG4pfSx0aGlzLm9ubGlzdHRvb2xzPWFzeW5jKHQsbik9Pih7dG9vbHM6YXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModGhpcy5fcmVnaXN0ZXJlZFRvb2xzKS5maWx0ZXIoKFtvLHJdKT0+ci5lbmFibGVkKS5tYXAoYXN5bmMoW28scl0pPT57bGV0IHM9e25hbWU6byx0aXRsZTpyLnRpdGxlLGRlc2NyaXB0aW9uOnIuZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6ci5pbnB1dFNjaGVtYT9hd2FpdCB5dShyLmlucHV0U2NoZW1hLCJpbnB1dCIpOnt0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e319fTtyZXR1cm4gci5vdXRwdXRTY2hlbWEmJihzLm91dHB1dFNjaGVtYT1hd2FpdCB5dShyLm91dHB1dFNjaGVtYSwib3V0cHV0IikpLHIuYW5ub3RhdGlvbnMmJihzLmFubm90YXRpb25zPXIuYW5ub3RhdGlvbnMpLHIuX21ldGEmJihzLl9tZXRhPXIuX21ldGEpLHN9KSl9KSl9YXN5bmMgc2VuZFRvb2xMaXN0Q2hhbmdlZCh0PXt9KXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZFRvb2xMaXN0Q2hhbmdlZCIpLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIixwYXJhbXM6dH0pfWdldEhvc3RDYXBhYmlsaXRpZXMoKXtyZXR1cm4gdGhpcy5faG9zdENhcGFiaWxpdGllc31nZXRIb3N0VmVyc2lvbigpe3JldHVybiB0aGlzLl9ob3N0SW5mb31nZXRIb3N0Q29udGV4dCgpe3JldHVybiB0aGlzLl9ob3N0Q29udGV4dH1nZXQgb250b29saW5wdXQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIpfXNldCBvbnRvb2xpbnB1dCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iix0KX1nZXQgb250b29saW5wdXRwYXJ0aWFsKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIil9c2V0IG9udG9vbGlucHV0cGFydGlhbCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIsdCl9Z2V0IG9udG9vbHJlc3VsdCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIpfXNldCBvbnRvb2xyZXN1bHQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiLHQpfWdldCBvbnRvb2xjYW5jZWxsZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiKX1zZXQgb250b29sY2FuY2VsbGVkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIix0KX1nZXQgb25ob3N0Y29udGV4dGNoYW5nZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIpfXNldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix0KX1fb250ZWFyZG93bjtnZXQgb250ZWFyZG93bigpe3JldHVybiB0aGlzLl9vbnRlYXJkb3dufXNldCBvbnRlYXJkb3duKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib250ZWFyZG93biIsdGhpcy5fb250ZWFyZG93bix0KSx0aGlzLl9vbnRlYXJkb3duPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoV3ksKG4sbyk9PntpZighdGhpcy5fb250ZWFyZG93bil0aHJvdyBFcnJvcigiTm8gb250ZWFyZG93biBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbnRlYXJkb3duKG4ucGFyYW1zLG8pfSl9X29uY2FsbHRvb2w7Z2V0IG9uY2FsbHRvb2woKXtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbH1zZXQgb25jYWxsdG9vbCh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9uY2FsbHRvb2wiLHRoaXMuX29uY2FsbHRvb2wsdCksdGhpcy5fb25jYWxsdG9vbD10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGVmLChuLG8pPT57aWYoIXRoaXMuX29uY2FsbHRvb2wpdGhyb3cgRXJyb3IoIk5vIG9uY2FsbHRvb2wgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbChuLnBhcmFtcyxvKX0pfV9vbmxpc3R0b29scztnZXQgb25saXN0dG9vbHMoKXtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHN9c2V0IG9ubGlzdHRvb2xzKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25saXN0dG9vbHMiLHRoaXMuX29ubGlzdHRvb2xzLHQpLHRoaXMuX29ubGlzdHRvb2xzPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoWGgsKG4sbyk9PntpZighdGhpcy5fb25saXN0dG9vbHMpdGhyb3cgRXJyb3IoIk5vIG9ubGlzdHRvb2xzIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzKG4ucGFyYW1zLG8pfSl9YXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0KXtzd2l0Y2godCl7Y2FzZSJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIjppZighdGhpcy5faG9zdENhcGFiaWxpdGllcz8uc2FtcGxpbmcpdGhyb3cgRXJyb3IoYEhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZyAocmVxdWlyZWQgZm9yICR7dH0pYCk7YnJlYWt9fWFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eSh0KXtzd2l0Y2godCl7Y2FzZSJ0b29scy9jYWxsIjpjYXNlInRvb2xzL2xpc3QiOmlmKCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMpdGhyb3cgRXJyb3IoYENsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHRvb2wgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7dH0pYCk7cmV0dXJuO2Nhc2UicGluZyI6Y2FzZSJ1aS9yZXNvdXJjZS10ZWFyZG93biI6cmV0dXJuO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYE5vIGhhbmRsZXIgZm9yIG1ldGhvZCAke3R9IHJlZ2lzdGVyZWRgKX19YXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0KXt9YXNzZXJ0VGFza0NhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrIGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXN5bmMgY2FsbFNlcnZlclRvb2wodCxuKXtpZih0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY2FsbFNlcnZlclRvb2wiKSx0eXBlb2YgdD09InN0cmluZyIpdGhyb3cgRXJyb3IoYGNhbGxTZXJ2ZXJUb29sKCkgZXhwZWN0cyBhbiBvYmplY3QgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBidXQgcmVjZWl2ZWQgYSBzdHJpbmcgKCIke3R9IikuIERpZCB5b3UgbWVhbjogY2FsbFNlcnZlclRvb2woeyBuYW1lOiAiJHt0fSIsIGFyZ3VtZW50czogeyAuLi4gfSB9KT9gKTtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRvb2xzL2NhbGwiLHBhcmFtczp0fSxHcix7b25wcm9ncmVzczooKT0+e30scmVzZXRUaW1lb3V0T25Qcm9ncmVzczohMCwuLi5ufSl9YXN5bmMgcmVhZFNlcnZlclJlc291cmNlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZWFkU2VydmVyUmVzb3VyY2UiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL3JlYWQiLHBhcmFtczp0fSxHaCxuKX1hc3luYyBsaXN0U2VydmVyUmVzb3VyY2VzKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJsaXN0U2VydmVyUmVzb3VyY2VzIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9saXN0IixwYXJhbXM6dH0sV2gsbil9YXN5bmMgY3JlYXRlU2FtcGxpbmdNZXNzYWdlKHQsbil7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNyZWF0ZVNhbXBsaW5nTWVzc2FnZSIpO2xldCBvPXQudG9vbHM/b2Y6bmY7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIixwYXJhbXM6dH0sbyxuKX1zZW5kTWVzc2FnZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZE1lc3NhZ2UiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvbWVzc2FnZSIscGFyYW1zOnR9LEZ5LG4pfXNlbmRMb2codCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvbWVzc2FnZSIscGFyYW1zOnR9KX11cGRhdGVNb2RlbENvbnRleHQodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInVwZGF0ZU1vZGVsQ29udGV4dCIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIscGFyYW1zOnR9LHZjLG4pfW9wZW5MaW5rKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJvcGVuTGluayIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9vcGVuLWxpbmsiLHBhcmFtczp0fSxMeSxuKX1zZW5kT3Blbkxpbms9dGhpcy5vcGVuTGluaztkb3dubG9hZEZpbGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImRvd25sb2FkRmlsZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9kb3dubG9hZC1maWxlIixwYXJhbXM6dH0sVXksbil9cmVxdWVzdFRlYXJkb3duKHQ9e30pe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iLHBhcmFtczp0fSl9cmVxdWVzdERpc3BsYXlNb2RlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZXF1ZXN0RGlzcGxheU1vZGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiLHBhcmFtczp0fSxZeSxuKX1zZW5kU2l6ZUNoYW5nZWQodCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIixwYXJhbXM6dH0pfXNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl7bGV0IHQ9ITEsbj0wLG89MCxyPSgpPT57dHx8KHQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dD0hMTtsZXQgaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1pLnN0eWxlLmhlaWdodDtpLnN0eWxlLmhlaWdodD0ibWF4LWNvbnRlbnQiO2xldCB1PU1hdGguY2VpbChpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7aS5zdHlsZS5oZWlnaHQ9YTtsZXQgbD1NYXRoLmNlaWwod2luZG93LmlubmVyV2lkdGgpOyhsIT09bnx8dSE9PW8pJiYobj1sLG89dSx0aGlzLnNlbmRTaXplQ2hhbmdlZCh7d2lkdGg6bCxoZWlnaHQ6dX0pKX0pKX07cigpO2xldCBzPW5ldyBSZXNpemVPYnNlcnZlcihyKTtyZXR1cm4gcy5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5vYnNlcnZlKGRvY3VtZW50LmJvZHkpLCgpPT5zLmRpc2Nvbm5lY3QoKX1hc3luYyBjb25uZWN0KHQ9bmV3IGp5KHdpbmRvdy5wYXJlbnQsd2luZG93LnBhcmVudCksbil7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkFwcCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIGFnYWluLiIpO3RoaXMuX2luaXRpYWxpemVkU2VudD0hMSxhd2FpdCBzdXBlci5jb25uZWN0KHQpO3RyeXtsZXQgbz1hd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvaW5pdGlhbGl6ZSIscGFyYW1zOnthcHBDYXBhYmlsaXRpZXM6dGhpcy5fY2FwYWJpbGl0aWVzLGFwcEluZm86dGhpcy5fYXBwSW5mbyxwcm90b2NvbFZlcnNpb246Wnl9fSxuXyxuKTtpZihvPT09dm9pZCAwKXRocm93IEVycm9yKGBTZXJ2ZXIgc2VudCBpbnZhbGlkIGluaXRpYWxpemUgcmVzdWx0OiAke299YCk7dGhpcy5faG9zdENhcGFiaWxpdGllcz1vLmhvc3RDYXBhYmlsaXRpZXMsdGhpcy5faG9zdEluZm89by5ob3N0SW5mbyx0aGlzLl9ob3N0Q29udGV4dD1vLmhvc3RDb250ZXh0LGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQifSksdGhpcy5faW5pdGlhbGl6ZWRTZW50PSEwLHRoaXMub3B0aW9ucz8uYXV0b1Jlc2l6ZSYmdGhpcy5zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpfWNhdGNoKG8pe3Rocm93IHRoaXMuY2xvc2UoKSxvfX19bGV0IGt1PSIiO2NvbnN0IHNmPShlLHQsbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT57aWYoIWUpcmV0dXJuOyhlLnRoZW1lPT09ImxpZ2h0Inx8ZS50aGVtZT09PSJkYXJrIikmJnQuYXBwbHlEb2N1bWVudFRoZW1lKGUudGhlbWUpO2NvbnN0IG89ZS5zdHlsZXM/LnZhcmlhYmxlcztvJiZ0eXBlb2Ygbz09Im9iamVjdCImJnQuYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXMobyk7Y29uc3Qgcj1lLnN0eWxlcz8uY3NzPy5mb250czt0eXBlb2Ygcj09InN0cmluZyImJnImJnIhPT1rdSYmKHQuYXBwbHlIb3N0Rm9udHMociksa3U9cik7Y29uc3Qgcz1lLnNhZmVBcmVhSW5zZXRzO2lmKHMpZm9yKGNvbnN0IGkgb2ZbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdKXtjb25zdCBhPU51bWJlcihzW2ldPz8wKTtuLnN0eWxlLnNldFByb3BlcnR5KGAtLWluc2V0LSR7aX1gLGAke051bWJlci5pc0Zpbml0ZShhKSYmYT4wP2E6MH1weGApfX0sTmU9bmV3IE5jKHtuYW1lOiJob3RlbC1zdG9yZWZyb250Iix2ZXJzaW9uOiIxLjAuMCJ9LHtvcGVuTGlua3M6e319KSxhZj17YXBwbHlEb2N1bWVudFRoZW1lOnJfLGFwcGx5SG9zdFN0eWxlVmFyaWFibGVzOnNfLGFwcGx5SG9zdEZvbnRzOmlffSxoZT1lPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxjPWU9PlN0cmluZyhlPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLHQ9PnQ9PT0iJiI/IiZhbXA7Ijp0PT09IjwiPyImbHQ7Ijp0PT09Ij4iPyImZ3Q7Ijp0PT09JyInPyImcXVvdDsiOiImIzM5OyIpO2xldCBhdD0iIixzcz0iIixjZj17fSx1Zj0hMSxsZj0iIix6PXtjaGVja0luOiIiLGNoZWNrT3V0OiIiLGd1ZXN0czoyfSxHPTE7Y29uc3Qgd3U9NTtsZXQgUT1udWxsLGJ0PVtdLFdlPSIiLHZlPVtdLEI9bnVsbCxUbz0wO2NvbnN0IGFfPW5ldyBTZXQoWyJmb3JnZXRQcmVmZXJlbmNlcyIsImFkZFRvVHJpcCIsImNsZWFyVHJpcCIsInJlcXVlc3RCb29raW5nIiwiY2FuY2VsQm9va2luZyIsImNoYW5nZUJvb2tpbmciLCJzaWduSW4iLCJzaWduT3V0Il0pLCR1PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/YGhvdGVsOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gZXh0cmFzOmJvb2tpbmc6JHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmBleHRyYXM6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMifHx0PT09InBvbGljeS1taXNzaW5nIj9gcG9saWN5OiR7ZS5ob3RlbD8uaWQ/PyIifToke2UudG9waWM/PyIifWA6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/YGNhbmNlbDoke2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImNoYW5nZS1wcmV2aWV3Ij9gY2hhbmdlOiR7ZS5jb25maXJtYXRpb25Db2RlPz9lLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJkZXN0aW5hdGlvbnMiP2BkZXN0aW5hdGlvbnM6JHtlLnNjb3BlPy5uYW1lPz8iIn1gOnQ9PT0iaG90ZWxzInx8dD09PSJuby1ob3RlbHMiP2Bob3RlbHM6JHtlLmFzaz8uY2l0eT8/IiJ9OiR7ZS5hc2s/LnF1ZXJ5Pz9lLnF1ZXJ5Pz8iIn1gOnR9LGZvPWU9PnshQnx8dV8uaGFzKFN0cmluZyhCLnZpZXcpKXx8JHUoZSkhPT0kdShCKSYmKHZlPVsuLi52ZSx7cGF5bG9hZDpCLGxhYmVsOmxfKEIpLHZlcnNpb246VG99XS5zbGljZSgtNikpfSxjXz1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpLG49ZT8uc3RheT8uY2hlY2tJbj97Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9Ont9O2lmKHQ9PT0idHJpcCIpcmV0dXJue2tleToidmlld1RyaXAiLGFyZ3M6e319O2lmKHQ9PT0iYm9va2luZ3MiKXJldHVybntrZXk6Imxpc3RCb29raW5ncyIsYXJnczp7fX07aWYoKHQ9PT0iaG90ZWxzInx8dD09PSJkZXN0aW5hdGlvbnMifHx0PT09Im5vLWhvdGVscyImJmUuYXNrKSYmZS5hc2spcmV0dXJue2tleToibGlzdEhvdGVscyIsYXJnczp7Li4uZS5hc2t9fTtpZih0PT09ImNvbXBhcmlzb24iJiZBcnJheS5pc0FycmF5KGUuY29sdW1ucykpcmV0dXJue2tleToiY29tcGFyZSIsYXJnczp7Li4ubiwuLi5lLnRpdGxlP3t0aXRsZTplLnRpdGxlfTp7fSwuLi5lLnJlY29tbWVuZGVkP3tyZWNvbW1lbmRlZDplLnJlY29tbWVuZGVkfTp7fSxlbnRyaWVzOmUuY29sdW1ucy5tYXAobz0+KHtob3RlbDpvLmhvdGVsPy5pZCwuLi5vLmJlc3RGb3I/e2Jlc3RGb3I6by5iZXN0Rm9yfTp7fSwuLi5vLnByb3M/Lmxlbmd0aD97cHJvczpvLnByb3N9Ont9LC4uLm8uY29ucz8ubGVuZ3RoP3tjb25zOm8uY29uc306e319KSl9fTtpZigodD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToiZ2V0SG90ZWwiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubiwuLi5lLnJvb21zX3dhbnRlZD97cm9vbXM6ZS5yb29tc193YW50ZWR9Ont9fX07aWYodD09PSJleHRyYXMiJiZlLmZvckJvb2tpbmcpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7Ym9va2luZzplLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5ufX07aWYodD09PSJpdGluZXJhcnkiKXJldHVybntrZXk6Iml0aW5lcmFyeSIsYXJnczp7dGl0bGU6ZS50aXRsZSwuLi5uLGRheXM6KGUuZGF5cz8/W10pLm1hcChvPT4oe2xhYmVsOm8ubGFiZWwsLi4uby5ub3RlP3tub3RlOm8ubm90ZX06e30saXRlbXM6KG8uaXRlbXM/P1tdKS5tYXAocj0+ci5pZCl9KSl9fX0sU3U9ZT0+e3ZlPXZlLmZpbHRlcih0PT4hZS5pbmNsdWRlcyhTdHJpbmcodC5wYXlsb2FkPy52aWV3KSkpfSx1Xz1uZXcgU2V0KFsiZmluZC1ib29raW5nIiwiYm9va2luZyIsImNhbmNlbGxlZCIsImNoYW5nZWQiLCJlcnJvciIsIm5lZWRzLWd1ZXN0Iiwic2lnbmVkLW91dCIsIm1lbWJlci1zaWduLWluIiwibWVtYmVyLW5vdC1mb3VuZCJdKSxsXz1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO2lmKHQ9PT0iY29tcGFyaXNvbiIpcmV0dXJuYCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJuInRoZSBwbGFuIjtpZih0PT09Im5vLWhvdGVscyIpcmV0dXJuInRoZSBzZWFyY2giO2lmKHQ9PT0iZGVzdGluYXRpb25zIilyZXR1cm4gZS5zY29wZT8ubmFtZT9TdHJpbmcoZS5zY29wZS5uYW1lKToiYWxsIGRlc3RpbmF0aW9ucyI7aWYodD09PSJob3RlbHMiKXtpZihlLmFzaz8uY2l0eSlyZXR1cm4gU3RyaW5nKGUuYXNrLmNpdHkpO2NvbnN0IG49Wy4uLm5ldyBTZXQoKGUuaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLmNpdHkpKSldO3JldHVybiBuLmxlbmd0aD09PTE/U3RyaW5nKG5bMF0pOmAke2UudG90YWw/PzB9IGhvdGVsc2B9cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKTp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij8idGhlIGNhbmNlbGxhdGlvbiI6dD09PSJjaGFuZ2UtcHJldmlldyI/InRoZSBjaGFuZ2UiOnQ9PT0ibWVtYmVyIj8ieW91ciBtZW1iZXJzaGlwIjp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BhZGQtb25zIGZvciAke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YCR7U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKX0gYWRkLW9uc2A6dD09PSJ0cmlwIj8idGhlIHRyaXAiOnQ9PT0iYm9va2luZ3MiPyJ5b3VyIGJvb2tpbmdzIjp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMiPyJ0aGUgcG9saWNpZXMiOiJiYWNrIn0sZGY9KCk9Pntjb25zdCBlPWhlKCJiYWNrYnRuIiksdD12ZS5hdCgtMSk7ZS5oaWRkZW49IXQsdCYmKGUudGV4dENvbnRlbnQ9YOKAuSAke3QubGFiZWx9YCl9O2xldCBVdD0iIix5cz0iIixXdD0wLGpjPSExO2NvbnN0IHBmPWU9Pntjb25zdCB0PWU/LlsiY3VybGVzcy90cmlwIl07dCYmKHR5cGVvZiB0LnRyaXBJZD09InN0cmluZyImJnQudHJpcElkJiYoeXM9dC50cmlwSWQpLFd0PU51bWJlcih0LmNvdW50Pz8wKSxBcnJheS5pc0FycmF5KHQubGluZXMpJiYoYnQ9dC5saW5lcyxqYz0hMCkpfSxkXz1lPT55cz97Li4uZSx0cmlwOnlzfTplLHBfPWU9PmNmW2VdPz8iIjtsZXQgbm89ITE7Y29uc3QgenU9ZT0+e25vPWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9O2xldCBJbz0wLGhmPSIiLGZmPSIiO2NvbnN0IHE9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89cF8oZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihubylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO3p1KCEwKTtjb25zdCByPUlvO3JldHVybiBOZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpkXyh0KX0pLmZpbmFsbHkoKCk9Pnp1KCExKSkudGhlbihzPT57cGYocz8uX21ldGEpO2NvbnN0IGk9cz8uc3RydWN0dXJlZENvbnRlbnQsYT1pJiZuLmZvbGQ/bi5mb2xkKGkpOmksdT1hXy5oYXMoZSkmJmEmJmEudmlldyE9PSJlcnJvciI7cmV0dXJuIHI9PT1JbyYmYT8oaGY9aT9KU09OLnN0cmluZ2lmeShpKToiIixmZj1KU09OLnN0cmluZ2lmeShhKSxuLnB1c2ghPT0hMSYmZm8oYSksdSYmKFRvKz0xKSxhLnZpZXc9PT0iYm9va2luZyImJihTdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLFBlPW51bGwpLChhLnZpZXc9PT0iY2FuY2VsbGVkInx8YS52aWV3PT09ImNoYW5nZWQiKSYmU3UoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLEdlKGEpKTp1JiYoVG8rPTEpLGhfKHMsbi5ub3RlKSxzfSl9LGhfPShlLHQpPT57Y29uc3Qgbj0oZT8uY29udGVudD8/W10pLmZpbmQobz0+bz8udHlwZT09PSJ0ZXh0Iik/LnRleHQ7IW58fCFOZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/LnVwZGF0ZU1vZGVsQ29udGV4dHx8TmUudXBkYXRlTW9kZWxDb250ZXh0KHtjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDp0P2Ake3R9ICR7U3RyaW5nKG4pfWA6U3RyaW5nKG4pfV19KS5jYXRjaCgoKT0+e30pfTtsZXQgUXI9ITE7Y29uc3QgZl89IihUaGUgY2FyZCBwcmljZWQgaXRzIG93biBkZWZhdWx0IGRhdGVzLCB0b25pZ2h0LCB0byBzaG93IHRoZSByb29tczsgdGhlIGd1ZXN0IGhhcyBub3QgY2hvc2VuIHRoZW0uKSIsb289ZT0+e2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0xKXQ9KHQqMzErZS5jaGFyQ29kZUF0KG4pKSUzNjA7cmV0dXJuYC0tc2hvdC1hOmhzbCgke3R9IDQyJSAzNCUpOy0tc2hvdC1iOmhzbCgkeyh0KzM4KSUzNjB9IDQ2JSAyMiUpYH0scm89ZT0+ZS5yZXBsYWNlKC9bXlxwe0x9XHB7Tn0gXS9ndSwiICIpLnNwbGl0KC9ccysvKS5maWx0ZXIoQm9vbGVhbikuc2xpY2UoMCwyKS5tYXAodD0+dFswXT8udG9VcHBlckNhc2UoKT8/IiIpLmpvaW4oIiIpLG1fPSc8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiBmaWxsPSJjdXJyZW50Q29sb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTIgMy41bDIuNiA1LjMgNS45LjktNC4zIDQuMSAxIDUuOEwxMiAxNi45IDYuOCAxOS42bDEtNS44TDMuNSA5LjdsNS45LS45eiIvPjwvc3ZnPicsZ189ZT0+ZSYmdHlwZW9mIGUudmFsdWU9PSJudW1iZXIiP2A8c3BhbiBjbGFzcz0icmF0ZSI+JHttX30ke2MoZS52YWx1ZSl9PHNwYW4gY2xhc3M9InQtZnJvbSI+PHNtYWxsPiDCtyAke2MoZS5jb3VudCl9PC9zbWFsbD48L3NwYW4+PC9zcGFuPmA6IiIsZWU9KCk9PnVmP2A8ZGl2IGNsYXNzPSJkZW1vIj48Yj5EZW1vPC9iPjxzcGFuPiR7YyhsZnx8IkRlbW9uc3RyYXRpb24gZGF0YTogdGhlc2UgcmF0ZXMgYW5kIHJvb20gY291bnRzIHdlcmUgbWFkZSB1cCBmb3IgdGhpcyBkZW1vLiIpfTwvc3Bhbj48L2Rpdj5gOiIiLEd0PWU9Pntjb25zdCB0PW5ldyBEYXRlKGAke2V9VDEyOjAwOjAwWmApO3JldHVybiBOdW1iZXIuaXNOYU4odC5nZXRUaW1lKCkpP2U6dC50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7d2Vla2RheToic2hvcnQiLGRheToibnVtZXJpYyIsbW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pfSxfcz0oZSx0KT0+TWF0aC5yb3VuZCgoRGF0ZS5wYXJzZShgJHt0fVQxMjowMDowMFpgKS1EYXRlLnBhcnNlKGAke2V9VDEyOjAwOjAwWmApKS84NjRlNSksQmU9ZT0+ZT8uY2hlY2tJbiYmZT8uY2hlY2tPdXQ/YCR7R3QoZS5jaGVja0luKX0g4oCTICR7R3QoZS5jaGVja091dCl9IMK3ICR7X3MoZS5jaGVja0luLGUuY2hlY2tPdXQpfSAke19zKGUuY2hlY2tJbixlLmNoZWNrT3V0KT09PTE/Im5pZ2h0IjoibmlnaHRzIn1gOiIiLGJfPShlLHQsbik9Pntjb25zdCBvPWJ0LmZpbmQocj0+ci5raW5kPT09InJvb20iJiZyLmhvdGVsSWQ9PT1lJiZyLnJvb21SZWY9PT10JiZyLnN0YXk/LmNoZWNrSW49PT1uPy5jaGVja0luJiZyLnN0YXk/LmNoZWNrT3V0PT09bj8uY2hlY2tPdXQpO3JldHVybiBOdW1iZXIobz8ucXVhbnRpdHk/PzApfSx2Xz0oZSx0KT0+e2NvbnN0IG49YnQuZmluZChvPT5vLmtpbmQ9PT0iZXh0cmEiJiZvLmhvdGVsSWQ9PT1lJiZvLmV4dHJhUmVmPT09dCk7cmV0dXJuIE51bWJlcihuPy5xdWFudGl0eT8/MCl9LFBvPShlLHQsbixvPTEpPT50PjA/YDxzcGFuIGNsYXNzPSJzdGVwIj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QtMX0iIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciAke2Mobil9Ij7iiJI8L2J1dHRvbj4KICAgICAgICAgPHNwYW4gY2xhc3M9Im4iPiR7dH08L3NwYW4+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0KzF9IiBhcmlhLWxhYmVsPSJPbmUgbW9yZSAke2Mobil9Ij4rPC9idXR0b24+CiAgICAgICA8L3NwYW4+YDpgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJhZGQiICR7ZX0gZGF0YS1uPSIke299IiBhcmlhLWxhYmVsPSJBZGQgJHtjKG4pfSI+CiAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIuNCIKICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTIgNXYxNE01IDEyaDE0Ii8+PC9zdmc+CiAgICAgICA8L2J1dHRvbj5gLG1mPShlLHQpPT57Y29uc3Qgbj10fHxnZigpO3JldHVybighei5jaGVja0lufHx6LmNoZWNrSW48bikmJih6LmNoZWNrSW49biksKCF6LmNoZWNrT3V0fHx6LmNoZWNrT3V0PD16LmNoZWNrSW4pJiYoei5jaGVja091dD1VZSh6LmNoZWNrSW4sMSkpLGAKICA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY2kiIHZhbHVlPSIke2Moei5jaGVja0luKX0iIG1pbj0iJHtjKG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNvIiB2YWx1ZT0iJHtjKHouY2hlY2tPdXQpfSIgbWluPSIke2MoVWUoei5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICA8ZGl2IGNsYXNzPSJndWVzdHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJSb29tcyI+Um9vbXMKICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9Im4iIGlkPSJybiI+JHtjKEcpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvZGl2PgogICAgPHNwYW4gY2xhc3M9Im5pZ2h0cyIgaWQ9Im5pZ2h0cyI+JHtjKFlyKCkpfTwvc3Bhbj4KICA8L2Rpdj5gfSxZcj0oKT0+e2NvbnN0IGU9ei5jaGVja0luJiZ6LmNoZWNrT3V0P19zKHouY2hlY2tJbix6LmNoZWNrT3V0KTowLHQ9ZT4wP2Ake2V9ICR7ZT09PTE/Im5pZ2h0IjoibmlnaHRzIn1gOiIiLG49Rz4xP2Ake0d9IHJvb21zYDoiIjtyZXR1cm5bdCxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpfSxVZT0oZSx0KT0+bmV3IERhdGUoRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSt0Kjg2NGU1KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLGdmPSgpPT5uZXcgRGF0ZShEYXRlLm5vdygpLW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSo2ZTQpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksYmY9ZT0+e2NvbnN0IHQ9Wy4uLmU/LnRvZGF5P1tlLnRvZGF5Lm1pbixlLnRvZGF5Lm1heF06W10sLi4uKGU/LmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby50b2RheVRoZXJlPz8iIikpXS5maWx0ZXIobz0+L15cZHs0fS1cZHsyfS1cZHsyfSQvLnRlc3QobykpLnNvcnQoKSxuPWdmKCk7cmV0dXJue21pbjpbdFswXT8/bixuXS5zb3J0KClbMF0/P24sc3RhcnQ6dC5hdCgtMSk/P259fSx5Xz1lPT57Y29uc3R7bWluOnQsc3RhcnQ6bn09YmYoZSk7KCF6LmNoZWNrSW58fHouY2hlY2tJbjx0KSYmKHouY2hlY2tJbj1uKSwoIXouY2hlY2tPdXR8fHouY2hlY2tPdXQ8PXouY2hlY2tJbikmJih6LmNoZWNrT3V0PVVlKHouY2hlY2tJbiwxKSk7Y29uc3Qgbz1gPGRpdiBjbGFzcz0ic2VhcmNoIj4KICAgICAgPGxhYmVsIGNsYXNzPSJ3aGVyZSI+V2hlcmUgdG88aW5wdXQgaWQ9IndoZXJlIiB0eXBlPSJzZWFyY2giIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbCIgYXJpYS1sYWJlbD0iV2hlcmUgdG8iPjwvbGFiZWw+CiAgICAgIDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHtjKHouY2hlY2tJbil9IiBtaW49IiR7Yyh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHtjKHouY2hlY2tPdXQpfSIgbWluPSIke2MoVWUoei5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhHKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZCI+U2VhcmNoPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxyPWk9PmA8ZGl2IGNsYXNzPSJwbGFjZXMiPiR7aS5tYXAoKGEsdSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhhLm5hbWUpfSIke3U+PWN0PyIgaGlkZGVuIjoiIn0+JHtjKGEubmFtZSl9IDxzbWFsbD4ke2MoYS5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0ke2kubGVuZ3RoPmN0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7aS5sZW5ndGgtY3R9IG1vcmU8L2J1dHRvbj5gOiIifTwvZGl2PmAscz1lLnNjb3BlO3JldHVybiBzP1tlZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHMubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKGUudG90YWwpfSAke2MoZS52b2NhYj8ubm91blBsdXJhbD8/ImhvdGVscyIpfSBpbiAke2MoKHMuY2l0aWVzPz9bXSkubGVuZ3RoKX0gY2l0aWVzPC9kaXY+PC9kaXY+YCxyKHMuY2l0aWVzPz9bXSksYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2UtYWxsPSIke2Mocy5uYW1lKX0iPkFsbCAke2MoZS50b3RhbCl9IGluICR7YyhzLm5hbWUpfTwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpOltlZSgpLG8sLi4uKGUucmVnaW9ucz8/W10pLm1hcChpPT5gCiAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7YyhpLm5hbWUpfSA8c21hbGw+JHtjKGkuY291bnQpfTwvc21hbGw+PC9kaXY+CiAgICAgICAgJHsoaS5jb3VudHJpZXM/P1tdKS5tYXAoYT0+e2NvbnN0IHU9YS5jaXRpZXM/P1tdLGw9dS5sZW5ndGg9PT0xP3VbMF06dm9pZCAwO3JldHVybmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc3QiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0LWNvdW50cnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKGEubmFtZSl9Ij4ke2MoYS5uYW1lKX0ke2wmJmwubmFtZSE9PWEubmFtZT9gPHNtYWxsPiDCtyAke2MobC5uYW1lKX08L3NtYWxsPmA6IiJ9IDxzbWFsbCBjbGFzcz0ibiI+JHtjKGEuY291bnQpfTwvc21hbGw+PC9idXR0b24+CiAgICAgICAgICAgICR7dS5sZW5ndGg+MT9yKHUpOiIifQogICAgICAgICAgPC9kaXY+YH0pLmpvaW4oIiIpfQogICAgICA8L2Rpdj5gKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYWxsLWhvdGVscyI+QnJvd3NlIGFsbCAke2MoZS50b3RhbCl9PC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5GaW5kIGEgYm9va2luZzwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxjdD04LHZmPWU9Pntjb25zdCB0PWUuZm9yU3RheTtyZXR1cm4gdD9gPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtjKHQudG90YWwpfTxzbWFsbCBjbGFzcz0idC1zdWIiPiR7TnVtYmVyKHQucm9vbXMpPjE/YCR7Yyh0LnJvb21zKX0gcm9vbXMgw5cgYDoiIn0ke2ModC5uaWdodHMpfSAke051bWJlcih0Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IMK3IHRheGVzIGluPC9zbWFsbD48L3NwYW4+YDplLm5vUm9vbXNGb3JTdGF5Pyc8c3BhbiBjbGFzcz0idC1mcm9tIHQtbm9uZSI+Tm8gcm9vbSBmb3IgdGhlc2UgZGF0ZXM8L3NwYW4+JzpgPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtlLmZyb21OaWdodGx5P2Ake2MoZS5mcm9tTmlnaHRseSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvc3Bhbj5gfSxfXz1lPT57Y29uc3QgdD1lLmZvclN0YXk7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj1bdC5mcmVlQ2FuY2VsbGF0aW9uPyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb248L3NwYW4+JzoiIixOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7Yyh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIl0uZmlsdGVyKEJvb2xlYW4pO3JldHVybiBuLmxlbmd0aD9gPHNwYW4gY2xhc3M9InQtdGFncyI+JHtuLmpvaW4oIiIpfTwvc3Bhbj5gOiIifSxGdD0oKT0+ei5jaGVja0luJiZ6LmNoZWNrT3V0P3tjaGVja0luOnouY2hlY2tJbixjaGVja091dDp6LmNoZWNrT3V0LGd1ZXN0czp6Lmd1ZXN0cywuLi5HPjE/e3Jvb21zOkd9Ont9fTp7fSxrXz1lPT57Y29uc3R7Y2hlY2tJbjp0LGNoZWNrT3V0Om4sZ3Vlc3RzOm8scm9vbXM6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sd189KGUsdCk9Pntjb25zdHttaW46bixzdGFydDpvfT1iZih0KTtyZXR1cm4oIXouY2hlY2tJbnx8ei5jaGVja0luPG4pJiYoei5jaGVja0luPW8pLCghei5jaGVja091dHx8ei5jaGVja091dDw9ei5jaGVja0luKSYmKHouY2hlY2tPdXQ9VWUoei5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjaSIgdmFsdWU9IiR7Yyh6LmNoZWNrSW4pfSIgbWluPSIke2Mobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibGNvIiB2YWx1ZT0iJHtjKHouY2hlY2tPdXQpfSIgbWluPSIke2MoVWUoei5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICA8ZGl2IGNsYXNzPSJndWVzdHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJSb29tcyI+Um9vbXMKICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9Im4iIGlkPSJscm4iPiR7YyhHKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtbGlzdC1yb29tcz0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgICR7ZT9gPHNwYW4gY2xhc3M9Im5pZ2h0cyI+JHtjKFlyKCkpfTwvc3Bhbj5gOic8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icHJpY2UtbGlzdCI+U2hvdyBwcmljZXM8L2J1dHRvbj4nfQogIDwvZGl2PmB9O2xldCBUZT0iZGF0ZXMiO2NvbnN0IHlmPSJkYXRlcyIsbW89ZT0+e2NvbnN0IHQ9ZT8/e307cmV0dXJuey4uLnQuYnJhbmQ/e2JyYW5kOnQuYnJhbmR9Ont9LC4uLkFycmF5LmlzQXJyYXkodC5mYWNpbGl0aWVzKSYmdC5mYWNpbGl0aWVzLmxlbmd0aD97ZmFjaWxpdGllczp0LmZhY2lsaXRpZXN9Ont9LC4uLnQuZnJlZUNhbmNlbGxhdGlvbj97ZnJlZUNhbmNlbGxhdGlvbjohMH06e30sLi4udC5icmVha2Zhc3Q/e2JyZWFrZmFzdDohMH06e319fSxUdT1lPT57Y29uc3R7YnJhbmQ6dCxmYWNpbGl0aWVzOm4sZnJlZUNhbmNlbGxhdGlvbjpvLGJyZWFrZmFzdDpyLC4uLnN9PWU/P3t9O3JldHVybiBzfSwkXz1lPT57Y29uc3QgdD1tbyhlKTtyZXR1cm4odC5icmFuZD8xOjApKyh0LmZhY2lsaXRpZXM/Lmxlbmd0aD8/MCkrKHQuZnJlZUNhbmNlbGxhdGlvbj8xOjApKyh0LmJyZWFrZmFzdD8xOjApfSxTXz1lPT57Y29uc3QgdD1lLnJlZmluZTtpZighdClyZXR1cm4iIjtjb25zdCBuPShyLHMsaSxhKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2Ugc29ydCIgdHlwZT0iYnV0dG9uIiBkYXRhLWZpbHRlcj0iJHtjKHIpfSIgYXJpYS1wcmVzc2VkPSIke2E/InRydWUiOiJmYWxzZSJ9Ij4ke2Mocyl9IDxzbWFsbD4ke2MoaSl9PC9zbWFsbD48L2J1dHRvbj5gLG89KHIscyk9PnMubGVuZ3RoP2A8ZGl2IGNsYXNzPSJmZ3JvdXAiPjxzcGFuIGNsYXNzPSJzb3J0cy1rIj4ke2Mocil9PC9zcGFuPiR7cy5qb2luKCIiKX08L2Rpdj5gOiIiO3JldHVybltvKCJCcmFuZCIsKHQuYnJhbmRzPz9bXSkubWFwKHI9Pm4oYGJyYW5kOiR7ci5uYW1lfWAsci5uYW1lLHIuY291bnQsci5vbikpKSxvKCJIYXMiLCh0LmZhY2lsaXRpZXM/P1tdKS5tYXAocj0+bihgZmFjaWxpdHk6JHtyLmtleX1gLHIubGFiZWwsci5jb3VudCxyLm9uKSkpLG8oIlJvb20iLCh0LnJvb20/P1tdKS5tYXAocj0+bihyLmtleSxyLmxhYmVsLHIuY291bnQsci5vbikpKV0uam9pbigiIil9LHpfPShlLHQpPT57Y29uc3Qgbj1yPT5OdW1iZXIoci5zbGljZSg4LDEwKSksbz1yPT5uZXcgRGF0ZShgJHtyfVQxMjowMDowMFpgKS50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7bW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pO3JldHVybiBvKGUpPT09byh0KT9gJHtuKGUpfeKAkyR7bih0KX0gJHtvKHQpfWA6YCR7bihlKX0gJHtvKGUpfSDigJMgJHtuKHQpfSAke28odCl9YH0sX2Y9KGUsdCxuKT0+e2NvbnN0IG89ISFlLnN0YXk/LmNoZWNrSW4scj0kXyhlLmFzaykscz1TXyhlKSxpPWtmLmZpbmQoKFtsXSk9Pmw9PT1uKT8uWzFdPz8iRGVmYXVsdCIsYT1vP2Ake3pfKGUuc3RheS5jaGVja0luLGUuc3RheS5jaGVja091dCl9JHtHPjE/YCDCtyAke0d9IHJvb21zYDoiIn1gOiJBZGQgZGF0ZXMiLHU9KGwsZCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHRvb2wiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wYW5lbD0iJHtsfSIgYXJpYS1leHBhbmRlZD0iJHtUZT09PWw/InRydWUiOiJmYWxzZSJ9Ij4ke2R9PC9idXR0b24+YDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJwbGFjZXMgdG9vbGJhciI+CiAgICAgICR7dSgiZGF0ZXMiLGMoYSkpfQogICAgICAke3Q/dSgic29ydCIsbj09PSJncm91cCI/IlNvcnQiOmMoaSkpOiIifQogICAgICAke3N8fHI/dSgiZmlsdGVycyIsYEZpbHRlcnMke3I/YCDCtyAke3J9YDoiIn1gKToiIn0KICAgICAgJHtyPyc8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iY2xlYXItZmlsdGVycyI+Q2xlYXI8L2J1dHRvbj4nOiIifQogICAgPC9kaXY+CiAgICA8ZGl2IGRhdGEtcGFuZWwtYm9keT0iZGF0ZXMiJHtUZT09PSJkYXRlcyI/IiI6IiBoaWRkZW4ifT4ke3dfKG8sZSl9PC9kaXY+CiAgICAke3Q/YDxkaXYgY2xhc3M9ImZpbHRlci1wYW5lbCIgZGF0YS1wYW5lbC1ib2R5PSJzb3J0IiR7VGU9PT0ic29ydCI/IiI6IiBoaWRkZW4ifT4ke3R9PC9kaXY+YDoiIn0KICAgICR7cz9gPGRpdiBjbGFzcz0iZmlsdGVyLXBhbmVsIiBkYXRhLXBhbmVsLWJvZHk9ImZpbHRlcnMiJHtUZT09PSJmaWx0ZXJzIj8iIjoiIGhpZGRlbiJ9PiR7c308L2Rpdj5gOiIifWB9LGtmPVtbImdyb3VwIiwiRGVmYXVsdCJdLFsicHJpY2UtbG93IiwiTG93ZXN0IHByaWNlIl0sWyJwcmljZS1oaWdoIiwiSGlnaGVzdCBwcmljZSJdLFsicmF0aW5nIiwiUmF0aW5nIl1dLFRfPWU9Pntjb25zdCB0PWUuaG90ZWxzPz9bXSxuPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNpdHkpKSldLG89dz0+e2NvbnN0ICQ9dC5maW5kKFo9PlouY2l0eT09PXcpPy5jb3VudHJ5O3JldHVybiAkJiYhU3RyaW5nKCQpLnN0YXJ0c1dpdGgodyk/U3RyaW5nKCQpOiIifSxyPVsuLi5uZXcgU2V0KHQubWFwKHc9PlN0cmluZyh3LmNvdW50cnk/PyIiKSkpXSxzPXIubGVuZ3RoPjEsaT13PT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke2Modyl9JHshcyYmbyh3KT9gPHNtYWxsPiDCtyAke2Mobyh3KSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKCQ9PiQuY2l0eT09PXcpLm1hcCgkPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YygkLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtvbyhTdHJpbmcoJC5pZCkpfSI+CiAgICAgICAgICAgICAgJHskLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKCQuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKHJvKFN0cmluZygkLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7JC5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7YygkLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2MoJC5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7YyhuLmxlbmd0aD4xPyQuYXJlYT8/JC5jaXR5OlskLmFyZWEsJC5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICAke3ZmKCQpfQogICAgICAgICAgICAgICAgJHtnXygkLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICR7X18oJCl9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAsYT1OdW1iZXIoZS50b3RhbD8/dC5sZW5ndGgpLHU9TnVtYmVyKGUub2Zmc2V0Pz8wKSxsPWEtdS10Lmxlbmd0aCxkPWUucGxhY2VzPz9bXTtlLmFzaz8uY2l0eTtjb25zdCBtPWQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJXaGVyZSI+CiAgICAgICAgICAgJHtkLm1hcCgodywkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKHcucGxhY2UpfSIkeyQ+PWN0PyIgaGlkZGVuIjoiIn0+JHtjKHcubGFiZWwpfSA8c21hbGw+JHtjKHcuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9CiAgICAgICAgICAgJHtkLmxlbmd0aD5jdD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1wbGFjZXMiPiske2QubGVuZ3RoLWN0fSBtb3JlPC9idXR0b24+YDoiIn0KICAgICAgICAgPC9kaXY+YDoiIixiPVN0cmluZyhlLnNvcnQ/PyJncm91cCIpLHY9ISgoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjEpLGs9dC5sZW5ndGg+MT9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iT3JkZXIiPiR7a2YuZmlsdGVyKChbd10pPT52fHwhdy5zdGFydHNXaXRoKCJwcmljZSIpKS5tYXAoKFt3LCRdKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2Ugc29ydCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNvcnQ9IiR7d30iIGFyaWEtcHJlc3NlZD0iJHt3PT09Yj8idHJ1ZSI6ImZhbHNlIn0iPiR7JH08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiO3JldHVybltlZSgpLG0sX2YoZSxrLGIpLGUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfS4gVGhlc2UgYXJlICR7YyhlLndpZGVuZWQudG8pfS48L2Rpdj5gOiIiLGA8ZGl2PiR7cz9yLm1hcCh3PT5gPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7Yyh3KX08L2Rpdj4ke24uZmlsdGVyKCQ9PnQuc29tZShaPT5aLmNpdHk9PT0kJiZTdHJpbmcoWi5jb3VudHJ5Pz8iIik9PT13KSkubWFwKGkpLmpvaW4oIiIpfWApLmpvaW4oIiIpOm4ubWFwKGkpLmpvaW4oIiIpfTwvZGl2PmAsKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5RdW90ZWQgaW4gJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0g4oCUIG5vIHJhdGUgaXMgYXBwbGllZCBoZXJlLCBzbyB0aGlzIGlzIG5vdCBhIHByaWNlIG9yZGVyLiBPbmUgY2l0eSBvciBvbmUgY291bnRyeSBnaXZlcyBvbmUgY3VycmVuY3kuPC9kaXY+YDoiIixlLm92ZXJCdWRnZXQ/YDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLm92ZXJCdWRnZXQpfSBtb3JlIG1hdGNoZWQgYW5kIGNhbWUgaW4gb3ZlciB0aGUgcHJpY2UgY2VpbGluZy48L2Rpdj5gOiIiLGw+MD9gPGRpdiBjbGFzcz0ibm90ZSI+U2hvd2luZyAke3U/YCR7dSsxfeKAkyR7dSt0Lmxlbmd0aH1gOnQubGVuZ3RofSBvZiAke2F9LjwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1ob3RlbHMiPlNob3cgJHtNYXRoLm1pbigyMCxsKX0gbW9yZTwvYnV0dG9uPjwvZGl2PmA6IiJdLmpvaW4oIiIpfSxJXz1lPT57Y29uc3QgdD1lLm5lYXJlc3Q/P1tdLG49ZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7YyhlLndpZGVuZWQuZnJvbSl9LCBzbyB0aGlzIGxvb2tlZCBpbiAke2MoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIjtyZXR1cm4gZS5iZWZvcmVGaWx0ZXJzPyhUZT0iZmlsdGVycyIsW2VlKCksbixgPGRpdiBjbGFzcz0id2Fybm5vdGUiPiR7YyhlLndoeT8/YE5vbmUgb2YgdGhlICR7ZS5iZWZvcmVGaWx0ZXJzfSBoZXJlIGhhcyBhbGwgb2YgdGhvc2UgdG9nZXRoZXIuYCl9PC9kaXY+YCxfZihlLCIiLFN0cmluZyhlLmFzaz8uc29ydD8/Imdyb3VwIikpXS5qb2luKCIiKSk6dC5sZW5ndGg/W2VlKCksbixgPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgY2FtZSBpbiB1bmRlciB0aGUgcHJpY2UgY2VpbGluZy4gJHtjKHQubGVuZ3RoPT09MT8iVGhlIG5lYXJlc3QgaXMiOiJUaGUgbmVhcmVzdCBhcmUiKX0gb3ZlciBpdC48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ0aWxlcyI+JHt0Lm1hcChvPT5gCiAgICAgIDxidXR0b24gY2xhc3M9InRpbGUgb3ZlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Moby5pZCl9Ij4KICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtvbyhTdHJpbmcoby5pZCkpfSI+CiAgICAgICAgICAke28uaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Moby5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhybyhTdHJpbmcoby5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2Moby5uYW1lKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHtjKFtvLmFyZWEsby5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgJHt2ZihvKX0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIHdhcm4iPk92ZXI8L3NwYW4+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKTpgJHtufTxkaXYgY2xhc3M9ImVtcHR5Ij4ke2MoZS53aHk/P2BOb3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtlLnF1ZXJ5fSJgOiIifS4gVHJ5IGEgY2l0eS5gKX08L2Rpdj5gfSx3Zj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7b28oU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2Mocm8oU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2MoZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7YyhlLnJhdGluZy52YWx1ZSl94piFICgke2MoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtjKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2ModCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxQXz0oZSx0LG4pPT57Y29uc3Qgbz1iXyhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke29vKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7Yyh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmMocm8oU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2ModC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Mocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHtjKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7Yyh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHtjKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7Yyh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7Yyh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHtHPjE/YCDCtyAke0d9IHJvb21zYDoiIn0gwrcgaW5jbC4gdGF4PC9kaXY+CiAgICAgICAgJHt0Lm1lbWJlclJhdGU/YDxkaXYgY2xhc3M9InAtbWVtYmVyIj4ke2ModC5tZW1iZXJSYXRlLnRpZXIpfSByYXRlPC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtQbyhgZGF0YS1hZGQtcm9vbT0iJHtjKHQuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaWQpfSJgLG8sU3RyaW5nKHQubmFtZSksRyl9PC9kaXY+CiAgICA8L2Rpdj5gfSx4Xz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhlKX0iIGRhdGEtY2k9IiR7YyhuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7YyhHdChTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtjKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtjKEd0KFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/YyhuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsSXU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/ejtyZXR1cm5bZWUoKSx3Zih0KSxtZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSx4XyhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+UF8odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7Yyh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7YyhyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPiR7YyhyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sQ189ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Moby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2ModC5uYW1lKX0gwrcgJHtjKEJlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtQbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2ModC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke1BvKGBkYXRhLWFkZC1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSJgLHZfKFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sRV89ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2MoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtjKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2MoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtjKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9IiR7ZS5kYXk/YCBkYXRhLWRheT0iJHtjKGUuZGF5KX0iYDoiIn1gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke0JlKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHtjKGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke1BvKHQsTnVtYmVyKGUua2luZD09PSJleHRyYSI/ZS5vcmRlcmVkPz9lLnF1YW50aXR5Pz8xOmUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxQdT0oZSx0KT0+YDxkaXYgY2xhc3M9InN1bXMiPgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+Um9vbXMgYW5kIGFkZC1vbnM8L3NwYW4+PHNwYW4+JHtjKGUuc3VidG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlRheGVzIGFuZCBmZWVzPC9zcGFuPjxzcGFuPiR7YyhlLnRheGVzQW5kRmVlcyl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSBnb29kIj48c3Bhbj4ke2MoZS5tZW1iZXJTYXZpbmcudGllcil9IG1lbWJlciByYXRlPC9zcGFuPjxzcGFuPuKIkiAke2MoZS5tZW1iZXJTYXZpbmcuc2F2ZWQpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtjKHQpfTwvc3Bhbj48c3Bhbj4ke2MoZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+UG9pbnRzIHRoaXMgZWFybnM8L3NwYW4+PHNwYW4+JHtjKE51bWJlcihlLm1lbWJlclNhdmluZy5wb2ludHMpLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgPC9kaXY+YCxPXz1lPT57Y29uc3QgdD1lLmxpbmVzPz9bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW2VlKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+QnJvd3NlICR7YyhhdCl9IGhvdGVsczwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltlZSgpLG4ubWFwKG89PmAKICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJkYXkiPiR7YyhHdChvKSl9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0icm93cyI+JHt0LmZpbHRlcihyPT5TdHJpbmcoci5kYXk/PyIiKT09PW8pLm1hcChFXykuam9pbigiIil9PC9kaXY+YCkuam9pbigiIiksKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobz0+YCR7YyhvLnRpdGxlKX06ICR7YyhvLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsLi4uQXJyYXkuaXNBcnJheShlLmdyb3VwcykmJmUuZ3JvdXBzLmxlbmd0aD4xP1tgPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VkIGluICR7YygoZS5jdXJyZW5jaWVzPz9bXSkuam9pbigiIGFuZCAiKSl9LCBzZXBhcmF0ZWx5LiBOb3RoaW5nIGhlcmUgY29udmVydHMgb25lIGludG8gdGhlIG90aGVyOyBlYWNoIGhvdGVsIGlzIGJvb2tlZCBhbmQgcGFpZCBpbiBpdHMgb3duLjwvZGl2PmAsLi4uZS5ncm91cHMubWFwKG89PlB1KG8sYFRvdGFsIGluICR7by5jdXJyZW5jeX1gKSldOltQdShlLCJUb3RhbCIpXSwuLi5BcnJheS5pc0FycmF5KGUubmVlZHNSb29tKSYmZS5uZWVkc1Jvb20ubGVuZ3RoP2UubmVlZHNSb29tLm1hcChvPT5gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgICAgPGI+R29lcyB3aXRoIGEgc3RheTwvYj4KICAgICAgICAgICAgIDxzcGFuPiR7Yygoby5leHRyYXM/P1tdKS5qb2luKCIgYW5kICIpKX0gaXMgJHtjKG8uaG90ZWxOYW1lKX0ncyBzZXJ2aWNlIGZvciBpdHMgZ3Vlc3RzLCBzbyBpdCBpcyBib29rZWQgd2l0aCBhIHJvb20gdGhlcmUgLSBvciBhZGRlZCB0byBhIGJvb2tpbmcgeW91IGFscmVhZHkgaGF2ZS48L3NwYW4+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaG90ZWxJZCl9Ij5Sb29tcyBhdCAke2Moby5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8L2Rpdj5gKTpbJzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stYm9vayI+UmVxdWVzdCBib29raW5nPC9idXR0b24+PC9kaXY+JyxgPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFJlcXVlc3RpbmcgYSBib29raW5nIGFza3MgJHtjKGF0KX0gdG8gaG9sZCB0aGUgcm9vbXMgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmAsJGYoKV0sUT8iIjpgPGRpdiBjbGFzcz0ibm90ZSI+QSAke2MoYXQpfSBDaXJjbGUgbWVtYmVyPyA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPlNpZ24gaW4gZm9yIHRoZSBtZW1iZXIgcmF0ZTwvYnV0dG9uPi48L2Rpdj4ke3hvKCl9YF0uam9pbigiIil9LE1jPVt7aWQ6ImtpbmctYmVkIixsYWJlbDoiS2luZyBiZWQifSx7aWQ6InR3aW4tYmVkcyIsbGFiZWw6IlR3aW4gYmVkcyJ9LHtpZDoiaGlnaC1mbG9vciIsbGFiZWw6IkhpZ2ggZmxvb3IifSx7aWQ6Imxvdy1mbG9vciIsbGFiZWw6IkxvdyBmbG9vciJ9LHtpZDoicXVpZXQtcm9vbSIsbGFiZWw6IlF1aWV0IHJvb20ifSx7aWQ6ImNvbm5lY3Rpbmctcm9vbXMiLGxhYmVsOiJDb25uZWN0aW5nIHJvb21zIn0se2lkOiJlYXJseS1jaGVjay1pbiIsbGFiZWw6IkVhcmx5IGNoZWNrLWluIn0se2lkOiJsYXRlLWFycml2YWwiLGxhYmVsOiJMYXRlIGFycml2YWwifSx7aWQ6ImFjY2Vzc2libGUtcm9vbSIsbGFiZWw6IkFjY2Vzc2libGUgcm9vbSJ9XSxBXz17ImtpbmctYmVkIjoidHdpbi1iZWRzIiwidHdpbi1iZWRzIjoia2luZy1iZWQiLCJoaWdoLWZsb29yIjoibG93LWZsb29yIiwibG93LWZsb29yIjoiaGlnaC1mbG9vciJ9O2xldCBQZT1udWxsO2NvbnN0ICRmPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIiB2YWx1ZT0iJHtjKFBlPy5uYW1lPz8iIil9Ij48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiIgdmFsdWU9IiR7YyhQZT8uZW1haWw/PyIiKX0iPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFza3MiPgogICAgICA8ZGl2IGNsYXNzPSJhc2tzLXQiPkFzayB0aGUgZGVzayBmb3I8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2hpcHMiPiR7TWMubWFwKHQ9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIGFzayIgdHlwZT0iYnV0dG9uIiBkYXRhLWFzaz0iJHtjKHQuaWQpfSIgYXJpYS1wcmVzc2VkPSIkeyhQZT9QZS5yZXF1ZXN0czpRPy5wcmVmZXJlbmNlcz8/W10pLmluY2x1ZGVzKHQuaWQpPyJ0cnVlIjoiZmFsc2UifSI+JHtjKHQubGFiZWwpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgIDxsYWJlbD5BcnJpdmluZyBhdDxpbnB1dCBpZD0iZ3RpbWUiIHR5cGU9InRpbWUiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0iJHtjKFBlPy5hcnJpdmluZ0F0Pz8iIil9Ij48L2xhYmVsPgogICAgICAgIDxsYWJlbD5Bbnl0aGluZyBlbHNlPGlucHV0IGlkPSJnbm90ZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJJbiB5b3VyIG93biB3b3JkcyDigJQgb3B0aW9uYWwiIHZhbHVlPSIke2MoUGU/Lm5vdGVzPz8iIil9Ij48L2xhYmVsPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+VGhlc2UgZ28gdG8gdGhlIGRlc2sgYXMgcmVxdWVzdHMuICR7YyhhdCl9IG1lZXRzIHdoYXQgaXQgY2FuIG9uIHRoZSBkYXk7IG5vbmUgb2YgaXQgaXMgaGVsZC48L2Rpdj4KICAgICAgJHtRP2A8bGFiZWwgY2xhc3M9InJlbWVtYmVyIj48aW5wdXQgaWQ9ImdyZW1lbWJlciIgdHlwZT0iY2hlY2tib3giJHtQZT8ucmVtZW1iZXI/IiBjaGVja2VkIjoiIn0+IFJlbWVtYmVyIHRoZSBiZWQsIGZsb29yIGFuZCByb29tIHJlcXVlc3RzIG9uIG15ICR7YyhRLnByb2dyYW1tZT8/Im1lbWJlcnNoaXAiKX0gZm9yIG5leHQgdGltZTwvbGFiZWw+YDoiIn0KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPkhvbGQgdGhlc2Ugcm9vbXM8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PgogIDwvZGl2PmAsUl89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7YygoZS5taXNzaW5nPz9bXSkuam9pbigiIGFuZCAiKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCwkZighMCksJzxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PiddLmpvaW4oIiIpLFpfPWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5bZWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke2ModC5wcm9ncmFtbWUpfTwvZGl2PgogICAgICAgJHt0Lm5hbWU/YDxkaXYgY2xhc3M9IndoZXJlIj4ke2ModC5uYW1lKX08L2Rpdj5gOic8ZGl2IGNsYXNzPSJ3aGVyZSI+U2lnbmVkIGluPC9kaXY+J30KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiIHN0eWxlPSJmb250LXNpemU6MjBweCI+JHtjKHQudGllcj8ubmFtZSl9PC9kaXY+CiAgICAgICAke3R5cGVvZiB0LnBvaW50cz09Im51bWJlciI/YDxkaXYgY2xhc3M9IndoZW4iPiR7Yyh0LnBvaW50cy50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9IHBvaW50czwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj48Yj4ke2MoTWF0aC5yb3VuZCgodC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKSl9JSBvZmY8L2I+PHNwYW4+Um9vbSByYXRlcyBhbmQgdHJpcCB0b3RhbHMgbm93IHNob3cgdGhlICR7Yyh0LnRpZXI/Lm5hbWUpfSBtZW1iZXIgcmF0ZS4gTm90aGluZyBpcyBjaGFyZ2VkIGJ5IHNpZ25pbmcgaW4uPC9zcGFuPjwvZGl2PmAsKHQucHJlZmVyZW5jZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICA8Yj5TYXZlZCBmb3IgeW91ciBuZXh0IHN0YXlzPC9iPgogICAgICAgICAgIDxzcGFuPiR7Yyh0LnByZWZlcmVuY2VzLm1hcChuPT5NYy5maW5kKG89Pm8uaWQ9PT1uKT8ubGFiZWw/P24pLmpvaW4oIiwgIikpfSAtIHRpY2tlZCBvbiB0aGUgYm9va2luZyBmb3JtLCBhbmQgYXNrZWQgZm9yIG9ubHkgd2hlbiB5b3UgYm9vayB3aXRoIHRoZW0uPC9zcGFuPgogICAgICAgICAgIDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmb3JnZXQtcHJlZnMiPkZvcmdldCB0aGVtPC9idXR0b24+CiAgICAgICAgIDwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24tb3V0Ij5TaWduIG91dDwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxOXz0oKT0+Wyc8ZGl2IGNsYXNzPSJlcnIiPk5vIG1lbWJlcnNoaXAgbWF0Y2hlcyB0aGF0IG51bWJlciBhbmQgc3VybmFtZS4gQ2hlY2sgYm90aCBhcyB0aGV5IGFyZSBwcmludGVkIOKAlCBub3RoaW5nIGVsc2UgaXMgbmVlZGVkLCB0aGlzIGNvbm5lY3RvciBuZXZlciBhc2tzIGZvciBhIHBhc3N3b3JkLjwvZGl2PicseG8oITApXS5qb2luKCIiKSx4bz0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0ic2lnbmluIiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPk1lbWJlcnNoaXAgbnVtYmVyPGlucHV0IGlkPSJtbnVtIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IGlzIHByaW50ZWQiPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5TdXJuYW1lPGlucHV0IGlkPSJtc3VyIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBzdXJuYW1lIG9uIGl0Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1pbiI+U2lnbiBpbjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gcGFzc3dvcmQgaXMgYXNrZWQgZm9yIGFuZCBub25lIGlzIHN0b3JlZC4gU2lnbmluZyBpbiBzaG93cyB0aGUgbWVtYmVyIHJhdGU7IG5vdGhpbmcgaXMgY2hhcmdlZC48L2Rpdj4KICA8L2Rpdj5gLGpfPWU9Pntjb25zdCB0PWUucmVxdWVzdGVkPz9bXTtyZXR1cm4gdC5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkJHtlLmFjY2Vzc2liaWxpdHk/IiBmbGFnIjoiIn0iPgogICAgPGI+UmVxdWVzdGVkLCBub3QgaGVsZDwvYj4KICAgICR7dC5tYXAobj0+YDxzcGFuPiR7YyhuKX08L3NwYW4+YCkuam9pbigiIil9CiAgPC9kaXY+YDoiIn0seHU9ZT0+U3RyaW5nKGUuaG9sZFVudGlsPz8iIikuc2xpY2UoMCwxNikucmVwbGFjZSgiVCIsIiAiKSxNXz1lPT57Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuYm9va2luZ3MpJiZlLmJvb2tpbmdzLmxlbmd0aD9lLmJvb2tpbmdzOltlLmJvb2tpbmc/P3t9XSxuPXQubGVuZ3RoPjEsbz0ocixzLGkpPT5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Moci5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7YyhyLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7YyhCZShyLnN0YXkpKX0gwrcgJHtjKHIuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICAgIDwvZGl2PmAsbj9gPGRpdiBjbGFzcz0ibm90ZSI+SGVsZCB1bnRpbCAke2MoeHUocikpfSBVVEMuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibW9uZXktb3V0Ij48c3Bhbj5Ub3RhbCBmb3IgdGhlIHN0YXk8L3NwYW4+PHNwYW4+JHtjKHMpfTwvc3Bhbj48L2Rpdj5gLGpfKGkpLGA8ZGl2IGNsYXNzPSJyb3dzIj4keyhyLnF1b3RlPy5saW5lcz8/W10pLm1hcChEXykuam9pbigiIil9PC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsICR7YyhyLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIik7cmV0dXJuW2VlKCksbj9gPGRpdiBjbGFzcz0ibm90ZSI+JHt0Lmxlbmd0aH0gYm9va2luZ3MsIG9uZSBmb3IgZWFjaCBzdGF5LiBFYWNoIGhvdGVsIGhvbGRzIGl0cyBvd24gbmlnaHRzIHVuZGVyIGl0cyBvd24gY29kZSwgYW5kIGVhY2ggaXMgY2hhbmdlZCBvciBjYW5jZWxsZWQgb24gaXRzIG93bi48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPiR7bj8iVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsIHRoZSB0aW1lIHVuZGVyIGVhY2ggY29kZS4iOmBUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgJHtjKHh1KHRbMF0pKX0gVVRDLmB9IEEgY2FyZCBpcyBwcmVzZW50ZWQgYXQgY2hlY2staW4sIG5vdCBoZXJlLjwvc3Bhbj4KICAgICA8L2Rpdj5gLC4uLnQubWFwKHI9Pm4/byhyLFN0cmluZyhyLnRvdGFsPz8iIikscik6byhyLFN0cmluZyhlLnRvdGFsPz8iIiksZSkpLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICR7bj8iIjpgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2ModFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+YH0KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0scV89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLmRldGFpbD8/ZS53aHk/PyJUaGF0IGNvdWxkIG5vdCBiZSBkb25lLiIpfTwvZGl2PmAsV3Q+MD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiPlZpZXcgdGhlIHRyaXA8L2J1dHRvbj48L2Rpdj4nOiIiXS5qb2luKCIiKSxEXz1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhlLmtpbmQ9PT0icm9vbSI/QmUoZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAsTF89e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIn0sVV89ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0cz8ua2luZHM/P1tdO2lmKCF0Lmxlbmd0aClyZXR1cm4iIjtjb25zdCBuPXQubWFwKG89Pk1jLmZpbmQocj0+ci5pZD09PW8pPy5sYWJlbD8/byk7cmV0dXJuYDxkaXYgY2xhc3M9Im1ldGEgYXNrZWQtbGluZSI+QXNrZWQgZm9yICR7YyhuLmpvaW4oIiwgIikudG9Mb3dlckNhc2UoKSl9PC9kaXY+YH0sRl89ZT0+e2NvbnN0IHQ9ZS5ib29raW5ncz8/W10sbj1lLm5vdEZvdW5kP2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLnRvb01hbnk/ZS5ub3RGb3VuZExpbmU6YE5vIGJvb2tpbmcgbWF0Y2hlcyAke2Uubm90Rm91bmR9IHdpdGggdGhhdCBlbWFpbC4gQm90aCBoYXZlIHRvIGJlIGFzIHRoZXkgYXJlIG9uIHRoZSBjb25maXJtYXRpb24uYCl9PC9kaXY+YDoiIjtyZXR1cm4gZS5ub3RGb3VuZCYmdC5sZW5ndGg9PT0wP2Ake259CiAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kLWJvb2tpbmciPlRyeSBhZ2FpbjwvYnV0dG9uPjwvZGl2PmA6dC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W2VlKCksbixgPGRpdiBjbGFzcz0icm93cyI+JHt0Lm1hcChvPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Moby5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKG8uY29uZmlybWF0aW9uQ29kZSl9IMK3ICR7YyhCZShvLnN0YXkpKX08L2Rpdj4KICAgICAgICAgICR7VV8obyl9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJiYWRnZXMiPjxzcGFuIGNsYXNzPSJiYWRnZSAke0xfW1N0cmluZyhvLnN0YXR1cyldPz8iIn0iPiR7YyhvLnN0YXR1cyl9PC9zcGFuPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moby5xdW90ZT8udG90YWw/PyIiKX08L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7by5zdGF0dXM9PT0icmVxdWVzdGVkInx8by5zdGF0dXM9PT0iY29uZmlybWVkIj9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2Moby5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbDwvYnV0dG9uPmA6IiJ9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpfSxDdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2FuY2VsbGVkIixuPWUuYm9va2luZz8/e307cmV0dXJuW2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2FuY2VsbGVkIjoiQ2FuY2VsbGluZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHt0PyJUaGUgaG90ZWwgY2hhcmdlcyI6IkNhbmNlbGxpbmcgd291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmZlZSl9PC9zcGFuPjwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLnJ1bGUpfTwvZGl2PmAsdD8iIjplLmNhbmNlbGxhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+S2VlcCBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gZGFuZ2VyIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jYW5jZWw9IiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoZSBib29raW5nPC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDonPGRpdiBjbGFzcz0ibm90ZSI+VGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGNhbmNlbCBvbiB0aGlzIGJvb2tpbmcuPC9kaXY+J10uam9pbigiIil9LEV1PWU9Pntjb25zdCB0PWUudmlldz09PSJjaGFuZ2VkIixuPWUuYm9va2luZz8/e30sbz1lLmZyb20/P3t9LHI9ZS50byxzPSEhciYmKHIuY2hlY2tJbiE9PW8uY2hlY2tJbnx8ci5jaGVja091dCE9PW8uY2hlY2tPdXR8fE51bWJlcihyLnJvb21zKSE9PU51bWJlcihvLnJvb21zKXx8ci5yb29tTmFtZSE9PW8ucm9vbU5hbWUpLGk9KGEsdSxsKT0+dT9gPGRpdiBjbGFzcz0ibGVnJHtsPyIgd2FzIjoiIn0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2siPiR7YyhhKX08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWd2Ij4ke2ModS5jaGVja0luKX0g4oaSICR7Yyh1LmNoZWNrT3V0KX0gwrcgJHtjKHUubmlnaHRzKX0gJHtOdW1iZXIodS5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ20iPiR7Yyh1LnJvb21OYW1lKX0ke051bWJlcih1LnJvb21zKT4xP2AgwrcgJHtjKHUucm9vbXMpfSByb29tc2A6IiJ9IMK3ICR7Yyh1LnRvdGFsKX08L2Rpdj4KICAgICAgICAgPC9kaXY+YDoiIjtyZXR1cm5bZWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7aSh0PyJXYXMiOiJOb3ciLGUuZnJvbSxzKX0ke2kodD8iTm93IjoiV291bGQgYmUiLGUudG8sITEpfTwvZGl2PmAsZS5hZGRPbj9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIj48c3Bhbj4ke2MoZS5hZGRPbi5uYW1lKX08L3NwYW4+PHNwYW4+JHtjKGUuYWRkT24uZnJvbSl9IOKGkiAke2MoZS5hZGRPbi50byl9PC9zcGFuPjwvZGl2PjwvZGl2PmA6IiIsZS5kaWZmZXJlbmNlP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7ZS5yZWZ1bmREdWU/dD8iVGhlIGRlc2sgb3dlcyI6IldvdWxkIGNvbWUgYmFjayI6dD8iVGhlIGRlc2sgYXNrcyBmb3IiOiJXb3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtjKGUuZGlmZmVyZW5jZSl9PC9zcGFuPjwvZGl2PjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLnJ1bGUpfTwvZGl2PmAsdD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPjwvZGl2Pic6ZS5jaGFuZ2VhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TGVhdmUgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jaGFuZ2U9IiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSI+JHtlLmFkZE9uJiZlLmZyb20/LmNoZWNrSW49PT1lLnRvPy5jaGVja0luJiZlLmZyb20/LmNoZWNrT3V0PT09ZS50bz8uY2hlY2tPdXQ/IlVwZGF0ZSB0aGUgYm9va2luZyI6Ik1vdmUgdGhlIGJvb2tpbmcifTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpfSxpcz1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUudmlldz09PSJwb2xpY3kiP2A8aDQ+JHtjKGUudGl0bGUpfTwvaDQ+JHtjKGUudGV4dCl9YDooZS50b3BpY3M/P1tdKS5tYXAobz0+YDxoND4ke2Moby50aXRsZSl9PC9oND4ke2Moby50ZXh0KX1gKS5qb2luKCIiKTtyZXR1cm5bYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2ModC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IHRoZSBob3RlbCBwdWJsaXNoZXM8L2Rpdj48L2Rpdj5gLGUudmlldz09PSJwb2xpY3ktbWlzc2luZyI/YDxkaXYgY2xhc3M9ImVtcHR5Ij4ke2ModC5uYW1lKX0gZG9lcyBub3QgcHVibGlzaCBhbnl0aGluZyBhYm91dCB0aGF0IGhlcmUuPC9kaXY+YDpgPGRpdiBjbGFzcz0icHJvc2UiPiR7bn08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij5CYWNrIHRvICR7Yyh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxIXz1lPT57Y29uc3QgdD1lLmNvbHVtbnM/P1tdLG49ZS5yb3dMYWJlbHM/P1tdLG89cj0+YAogICAgPGRpdiBjbGFzcz0iY21wLWhlYWQke3IucmVjb21tZW5kZWQ/IiBwaWNrIjoiIn0iPgogICAgICAke3IucmVjb21tZW5kZWQ/JzxkaXYgY2xhc3M9InBpY2ttYXJrIj5SZWNvbW1lbmRlZDwvZGl2Pic6IiJ9CiAgICAgIDxidXR0b24gY2xhc3M9InQtc2hvdCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Moci5ob3RlbC5pZCl9IiBzdHlsZT0iJHtvbyhTdHJpbmcoci5ob3RlbC5pZCkpfSI+CiAgICAgICAgJHtyLmhvdGVsLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKHIuaG90ZWwuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKHJvKFN0cmluZyhyLmhvdGVsLm5hbWUpKSl9PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sLWJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC1uYW1lIj4ke2Moci5ob3RlbC5uYW1lKX08L2Rpdj4KICAgICAgICAke3IucHJpY2U/YDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHtjKHIucHJpY2Uuc3RheVRvdGFsKX08c21hbGw+IHRvdGFsIMK3ICR7YyhyLnByaWNlLm5pZ2h0bHkpfS9uaWdodDwvc21hbGw+PC9kaXY+YDpyLmZyb20/YDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHtjKHIuZnJvbSl9PHNtYWxsPiAvIG5pZ2h0IGZyb208L3NtYWxsPjwvZGl2PmA6IiJ9CiAgICAgICAgJHtyLmJlc3RGb3I/YDxkaXYgY2xhc3M9IndoeSI+JHtjKHIuYmVzdEZvcil9PC9kaXY+YDoiIn0KICAgICAgICAkeyhyLnByb3M/P1tdKS5sZW5ndGh8fChyLmNvbnM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9InBjIj4ke1suLi4oci5wcm9zPz9bXSkubWFwKHM9PmA8ZGl2IGNsYXNzPSJwcm8iPjxzcGFuIGNsYXNzPSJtIj4rPC9zcGFuPjxzcGFuPiR7YyhzKX08L3NwYW4+PC9kaXY+YCksLi4uKHIuY29ucz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0iY29uIj48c3BhbiBjbGFzcz0ibSI+4oiSPC9zcGFuPjxzcGFuPiR7YyhzKX08L3NwYW4+PC9kaXY+YCldLmpvaW4oIiIpfTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YDtyZXR1cm5bZWUoKSxlLnRpdGxlP2A8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj5gOiIiLGUuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKEJlKGUuc3RheSkpfTwvZGl2PmA6IiIsQXJyYXkuaXNBcnJheShlLmN1cnJlbmNpZXMpJiZlLmN1cnJlbmNpZXMubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlcyBhcmUgaW4gZWFjaCBob3RlbCdzIG93biBjdXJyZW5jeSAoJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0pLiBUaGV5IGFyZSBub3QgY29udmVydGVkLCBzbyB0aGUgY29sdW1ucyBhcmUgbm90IGEgcHJpY2UgcmFua2luZy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJjbXAtd3JhcCI+PGRpdiBjbGFzcz0iY21wIiBzdHlsZT0iLS1jb2xzOiR7dC5sZW5ndGh9Ij4KICAgICAgIDxkaXYgY2xhc3M9ImNtcC1jb3JuZXIiPjwvZGl2PgogICAgICAgJHt0Lm1hcChvKS5qb2luKCIiKX0KICAgICAgICR7bi5tYXAoKHIscyk9PmA8ZGl2IGNsYXNzPSJrIj4ke2Mocil9PC9kaXY+JHt0Lm1hcChpPT5gPGRpdiBjbGFzcz0idiR7cyUyPyIgYWx0IjoiIn0iPiR7YyhpLnJvd3M/LltzXT8udmFsdWU/PyLigJQiKX08L2Rpdj5gKS5qb2luKCIiKX1gKS5qb2luKCIiKX0KICAgICA8L2Rpdj48L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKHI9PmAke2Moci5uYW1lKX06ICR7YyhyLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPk9wZW4gYSAke2MoZS52b2NhYj8ubm91bj8/ImhvdGVsIil9IHRvIHNlZSBpdHMgcm9vbXMke2Uuc3RheT8uY2hlY2tJbj8iIGZvciB0aGVzZSBuaWdodHMiOiIifS48L2Rpdj5gXS5qb2luKCIiKX0sQl89ZT0+e2NvbnN0IHQ9ZS5kYXlzPz9bXTtyZXR1cm5bZWUoKSxgPGRpdj4KICAgICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgJHtlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhCZShlLnN0YXkpKX08L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9ImdhcCI+PGI+JHtjKE51bWJlcihlLmluVHJpcD8/MCkrTnVtYmVyKGUuYm9va2VkPz8wKSl9LyR7YyhlLnBsYW5uZWQpfTwvYj48c3Bhbj4ke2MoZS5nYXA/PyIiKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0iZGF5cyI+JHt0Lm1hcCgobixvKT0+YAogICAgICA8ZGl2IGNsYXNzPSJkYXlyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImRheW51bSI+PGI+JHtvKzF9PC9iPjxpPjwvaT48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXlib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRheWxhYmVsIj4ke2Mobi5sYWJlbCl9JHtuLmRhdGU/YDxzbWFsbD4gwrcgJHtjKFN0cmluZyhuLmRhdGUpLnNsaWNlKDUpKX08L3NtYWxsPmA6IiJ9PC9kaXY+CiAgICAgICAgICAke24ubm90ZT9gPGRpdiBjbGFzcz0iZGF5bm90ZSI+JHtjKG4ubm90ZSl9PC9kaXY+YDoiIn0KICAgICAgICAgICR7KG4uaXRlbXM/P1tdKS5tYXAocj0+YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFuLWl0ZW0iJHtyLmtpbmQ9PT0iaG90ZWwiP2AgZGF0YS1ob3RlbD0iJHtjKHIuaWQpfSIgcm9sZT0iYnV0dG9uIiB0YWJpbmRleD0iMCIke3IuY2hlY2tJbj9gIGRhdGEtY2k9IiR7YyhyLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKHIuY2hlY2tPdXQpfSJgOiIifWA6IiJ9PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Moci5uYW1lKX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7Yyhbci5kZXRhaWwsci5uaWdodHM/TnVtYmVyKHIubmlnaHQ/PzEpPjE/YG5pZ2h0ICR7ci5uaWdodH0gb2YgJHtyLm5pZ2h0c31gOmAke3IubmlnaHRzfSAke3IubmlnaHRzPT09MT8ibmlnaHQiOiJuaWdodHMifSBoZXJlYDoiIixyLnByaWNlXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5zdGF0ZSAke3IuYm9va2VkfHxyLmluVHJpcD8ieWVzIjoibm8ifSI+JHtyLmJvb2tlZD9gQm9va2VkIMK3ICR7YyhyLmJvb2tlZCl9YDpyLmluVHJpcD8iSW4gdGhlIHRyaXAiOiJQbGFuIG9ubHkifTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+YCkuam9pbigiIil9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobj0+YCR7YyhuLm5hbWUpfTogJHtjKG4ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIl0uam9pbigiIil9LEdlPShlLHQ9ITEpPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47Y29uc3Qgbj10JiZlLnZpZXc9PT0ibWVtYmVyIiYmUT97Li4uZSxtZW1iZXI6UX06ZTtuLnRvb2xOYW1lcyYmKGNmPW4udG9vbE5hbWVzKSxuLmJyYW5kJiYoYXQ9U3RyaW5nKG4uYnJhbmQpKSxuLmxvZ29VcmwmJihzcz1TdHJpbmcobi5sb2dvVXJsKSksdHlwZW9mIG4uZGVtbz09ImJvb2xlYW4iJiYodWY9bi5kZW1vKSxuLmRlbW9Ob3RlJiYobGY9U3RyaW5nKG4uZGVtb05vdGUpKSx0eXBlb2Ygbi5yb29tc193YW50ZWQ9PSJudW1iZXIiP0c9bi5yb29tc193YW50ZWQ6KG4udmlldz09PSJob3RlbHMifHxuLnZpZXc9PT0iZGVzdGluYXRpb25zInx8bi52aWV3PT09Im5vLWhvdGVscyIpJiZuLnN0YXk/LmNoZWNrSW4mJiF1dCYmKEc9TWF0aC5tYXgoMSxOdW1iZXIobi5hc2s/LnJvb21zPz8xKXx8MSkpLHR8fChuLnZpZXc9PT0ibWVtYmVyIiYmbi5tZW1iZXI/LnRpZXI/Lm5hbWU/UT1uLm1lbWJlcjpuLm1lbWJlcj8udGllcj8ubmFtZSYmKFE9UT8ucHJvZ3JhbW1lPT09bi5tZW1iZXIucHJvZ3JhbW1lJiZRPy50aWVyPy5uYW1lPT09bi5tZW1iZXIudGllci5uYW1lP3suLi5RLC4uLm4ubWVtYmVyLHByZWZlcmVuY2VzOm4ubWVtYmVyLnByZWZlcmVuY2VzfTpuLm1lbWJlciksKG4udmlldz09PSJzaWduZWQtb3V0Inx8bi5zaWduZWRJbj09PSExKSYmKFE9bnVsbCkpLG4uc3RheT8uY2hlY2tJbiYmIUh0JiYhdXQmJih6PXtjaGVja0luOm4uc3RheS5jaGVja0luLGNoZWNrT3V0Om4uc3RheS5jaGVja091dCxndWVzdHM6bi5zdGF5Lmd1ZXN0cz8/Mn0pLCFqYyYmKG4udmlldz09PSJ0cmlwInx8bi52aWV3PT09Im5lZWRzLWRhdGVzIikmJihidD1uLmxpbmVzPz9bXSksKG4udmlldz09PSJib29raW5nInx8bi52aWV3PT09ImVtcHR5LXRyaXAiKSYmKGJ0PVtdLFd0PTApLFdlPVN0cmluZyhuLnZpZXc/PyIiKSxkZigpO2NvbnN0IG89aGUoImJyYW5kIik7c3M/KG8uc3JjPXNzLG8uaGlkZGVuPSExLGhlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KG8uaGlkZGVuPSEwLGhlKCJ0aXRsZSIpLmhpZGRlbj0hMSxoZSgidGl0bGUiKS50ZXh0Q29udGVudD1hdHx8IkhvdGVscyIpLGhlKCJzdWIiKS50ZXh0Q29udGVudD1LXyhuKSxHXygpLFdfKCk7Y29uc3Qgcj17aG90ZWxzOlRfLGRlc3RpbmF0aW9uczp5Xywibm8taG90ZWxzIjpJXyxob3RlbDpJdSwibm8tcm9vbXMiOkl1LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOkNfLHRyaXA6T18sIm5lZWRzLWRhdGVzIjpKXyxib29raW5nOk1fLCJuZWVkcy1ndWVzdCI6Ul8sbWVtYmVyOlpfLCJtZW1iZXItbm90LWZvdW5kIjpOXywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpGXywiY2FuY2VsbGF0aW9uLXByZXZpZXciOkN1LGNhbmNlbGxlZDpDdSwiY2hhbmdlLXByZXZpZXciOkV1LGNoYW5nZWQ6RXUsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOkhfLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpCXywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTppcyxwb2xpY2llczppcywicG9saWN5LW1pc3NpbmciOmlzLGVycm9yOnFfLCJmaW5kLWJvb2tpbmciOigpPT5bZWUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+QSBib29raW5nIG1hZGUgaW4gYW5vdGhlciBjb252ZXJzYXRpb24gaXMgZm91bmQgd2l0aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCBpdCB3YXMgbWFkZSB3aXRoIC0gYm90aCwgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb3JtIj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgICAgICAgPGxhYmVsPkNvbmZpcm1hdGlvbiBjb2RlPGlucHV0IGlkPSJmY29kZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJTTC3igKYiPjwvbGFiZWw+CiAgICAgICAgICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImZtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgb25lIG9uIHRoZSBib29raW5nIj48L2xhYmVsPgogICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJsb29rdXAtYm9va2luZyI+RmluZCBpdDwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gXS5qb2luKCIiKSwibm8tbWVtYmVyIjooKT0+YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob2JvZHkgaXMgc2lnbmVkIGluLCBzbyB0aGVyZSBpcyBub3RoaW5nIHNhdmVkIHRvIGZvcmdldC48L2Rpdj4ke3hvKCEwKX1gLCJtZW1iZXItc2lnbi1pbiI6KCk9PltlZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5TaWduIGluIHdpdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBwcmludGVkIG9uIHRoZSBjYXJkIHRvIHNlZSB0aGUgbWVtYmVyIHJhdGUgb24gZXZlcnkgcHJpY2UgaGVyZS48L2Rpdj4nLHhvKCEwKV0uam9pbigiIil9OyhXZT09PSJob3RlbCJ8fFdlPT09Im5vLXJvb21zInx8V2U9PT0ibmVlZHMtZGF0ZXMiKSYmbi5ob3RlbD8uaWQ/KFV0PVN0cmluZyhuLmhvdGVsLmlkKSxuLm5lZWRzRGF0ZXMmJnNldFRpbWVvdXQoKCk9PlhyKDAsIVFyKSwwKSk6KFV0PSIiLHFjKCkpLEI9bjtjb25zdCBzPXJbV2VdO2hlKCJjb250ZW50IikuaW5uZXJIVE1MPShzP3Mobik6YDxkaXYgY2xhc3M9ImVyciI+JHtjKG4uZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtuLmRldGFpbD9gPGJyPiR7YyhuLmRldGFpbCl9YDoiIn08L2Rpdj5gKStWXyhuKX0sVl89ZT0+e2NvbnN0IHQ9ISFOZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2Usbj0oZS5zdWdnZXN0aW9ucz8/W10pLm1hcCgobyxyKT0+bz8uYXNrP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LEpfPWU9PltlZSgpLGUuaG90ZWw/d2YoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLG1mKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSxLXz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/QmUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixXXz0oKT0+e2NvbnN0IGU9aGUoIm1lbWJlcmNoaXAiKTtRPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1EudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoUS50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixbUS5uYW1lLFEucHJvZ3JhbW1lXS5maWx0ZXIodD0+dHlwZW9mIHQ9PSJzdHJpbmciJiZ0KS5qb2luKCIgwrcgIikpKTooZS5oaWRkZW49V2U9PT0ibWVtYmVyLW5vdC1mb3VuZCIsZS50ZXh0Q29udGVudD0iTWVtYmVyIHNpZ24gaW4iLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsImFzay1zaWduLWluIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpfSxHXz0oKT0+e2NvbnN0IGU9aGUoImhlYWR0cmlwIiksdD1qYz9XdDpXdHx8YnQubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxXZT09PSJ0cmlwIixoZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSxRXz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO3o9e2NoZWNrSW46ZT8udmFsdWU/P3ouY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/ei5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz96Lmd1ZXN0cyl8fDJ9fSxnbz0oZT17fSk9PnouY2hlY2tJbiYmei5jaGVja091dD97Y2hlY2tJbjp6LmNoZWNrSW4sY2hlY2tPdXQ6ei5jaGVja091dCxndWVzdHM6ei5ndWVzdHMsLi4uZX06ZTtsZXQga3MsSHQ9ITE7Y29uc3QgcWM9KCk9PntjbGVhclRpbWVvdXQoa3MpLEh0PSExfSxYcj0oZT0wLHQ9ITEpPT57VXQmJihjbGVhclRpbWVvdXQoa3MpLEh0PSEwLGtzPXNldFRpbWVvdXQoKCk9PntpZighVXQpe0h0PSExO3JldHVybn1pZihubyl7WHIoMTUwLHQpO3JldHVybn1IdD0hMSxxKCJnZXRIb3RlbCIse2hvdGVsOlV0LHJvb21zOkcsLi4uZ28oKX0sdD97bm90ZTpmX306e30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBuaWdodHMuIikpfSxlKSl9LE49ZT0+e2hlKCJjb250ZW50IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZSl9PC9kaXY+YCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlPT57Y29uc3QgdD1lLnRhcmdldD8uY2xvc2VzdCgiW2RhdGEtaG90ZWxdLFtkYXRhLWFjdF0sW2RhdGEtcG9saWN5XSxbZGF0YS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2FuY2VsXSxbZGF0YS1jb25maXJtLWNoYW5nZV0sW2RhdGEtZXh0cmFzXSxbZGF0YS1yb29tcy1uXSxbZGF0YS1hc2tdLFtkYXRhLWJvb2tpbmctZXh0cmFzXSxbZGF0YS1ib29raW5nLWV4dHJhXSxbZGF0YS1zdWdnZXN0XSxbZGF0YS1wbGFjZV0sW2RhdGEtcGxhY2UtYWxsXSxbZGF0YS1zb3J0XSxbZGF0YS1saXN0LXJvb21zXSxbZGF0YS1maWx0ZXJdLFtkYXRhLXBhbmVsXSIpO2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFzayIpO2lmKG4hPT1udWxsKXtjb25zdCB5PXQuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJ0cnVlIjt0LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIixTdHJpbmcoeSkpO2NvbnN0IFQ9QV9bbl07eSYmVCYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmFza1tkYXRhLWFzaz0iJHtUfSJdYCk/LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSxTZigpO3JldHVybn1jb25zdCBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWxpc3Qtcm9vbXMiKTtpZihvIT09bnVsbCl7Rz1NYXRoLm1pbih3dSxNYXRoLm1heCgxLEcrTnVtYmVyKG8pKSk7Y29uc3QgeT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibHJuIik7eSYmKHkudGV4dENvbnRlbnQ9U3RyaW5nKEcpKSxDbyg0NTApO3JldHVybn1jb25zdCByPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJvb21zLW4iKTtpZihyIT09bnVsbCl7UV8oKSxHPU1hdGgubWluKHd1LE1hdGgubWF4KDEsRytOdW1iZXIocikpKTtjb25zdCB5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO3kmJih5LnRleHRDb250ZW50PVN0cmluZyhHKSk7Y29uc3QgVD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7VCYmKFQudGV4dENvbnRlbnQ9WXIoKSksWHIoNDUwKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtcm9vbSIpO2lmKHMhPT1udWxsKXtjb25zdCB5PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLFQ9dC5jbGFzc0xpc3QuY29udGFpbnMoImFkZCIpJiYhdC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT9HOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLG5lPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06Z28oKTtxKCJhZGRUb1RyaXAiLHtob3RlbDp5LHJvb206cyxyb29tczpULC4uLm5lfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1leHRyYSIpO2lmKGkhPT1udWxsKXtjb25zdCB5PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWRheSIpO3EoImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOmkscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksLi4ueT97ZGF5Onl9Ont9fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlIik7aWYoYSE9PW51bGwpe2NvbnN0IHk9Qj8uYXNrPy5zb3J0LFQ9Qj8udmlldz09PSJob3RlbHMiP0I/LmFzaz8ucXVlcnk6dm9pZCAwO3dzKCk7Y29uc3QgbmU9Qj8udmlldz09PSJkZXN0aW5hdGlvbnMifHwhIUI/LnN0YXk/LmNoZWNrSW47cSgibGlzdEhvdGVscyIsey4uLmE/e2NpdHk6YX06e30sLi4ueT97c29ydDp5fTp7fSwuLi5hJiZUP3txdWVyeTpUfTp7fSwuLi5CPy52aWV3PT09ImhvdGVscyI/bW8oQj8uYXNrKTp7fSwuLi5uZT9GdCgpOnt9fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZmlsdGVyIik7aWYodSE9PW51bGwpe2NvbnN0IHk9Qj8uYXNrPz97fSxUPW1vKHkpO2lmKHUuc3RhcnRzV2l0aCgiYnJhbmQ6Iikpe2NvbnN0IGNlPXUuc2xpY2UoNik7VC5icmFuZD1ULmJyYW5kPT09Y2U/dm9pZCAwOmNlfWVsc2UgaWYodS5zdGFydHNXaXRoKCJmYWNpbGl0eToiKSl7Y29uc3QgY2U9dS5zbGljZSg5KSx6ZT1ULmZhY2lsaXRpZXM/P1tdO1QuZmFjaWxpdGllcz16ZS5pbmNsdWRlcyhjZSk/emUuZmlsdGVyKFZlPT5WZSE9PWNlKTpbLi4uemUsY2VdfWVsc2UodT09PSJmcmVlQ2FuY2VsbGF0aW9uInx8dT09PSJicmVha2Zhc3QiKSYmKFRbdV09IVRbdV0pO2NvbnN0IG5lPW1vKFQpO3EoImxpc3RIb3RlbHMiLHsuLi5UdSh5KSwuLi5uZX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgZmlsdGVyIHRoZSBsaXN0LiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1zb3J0Iik7aWYobCE9PW51bGwpe1RlPXlmO2NvbnN0e3NvcnQ6eSwuLi5UfT1CPy5hc2s/P3t9O3EoImxpc3RIb3RlbHMiLHsuLi5ULC4uLmwhPT0iZ3JvdXAiP3tzb3J0Omx9Ont9fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCByZW9yZGVyIHRoZSBsaXN0LiIpKTtyZXR1cm59Y29uc3QgZD10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZS1hbGwiKTtpZihkIT09bnVsbCl7cSgibGlzdEhvdGVscyIse2NpdHk6ZCxhbGw6ITAsLi4uRnQoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCBtPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmFzIik7aWYobSE9PW51bGwpe3EoImxpc3RFeHRyYXMiLHtib29raW5nOm19KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBiPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmEiKTtpZihiIT09bnVsbCl7cSgicHJldmlld0NoYW5nZSIse2Jvb2tpbmc6dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZyIpPz8iIixleHRyYTpiLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCB3b3JrIG91dCB0aGF0IGNoYW5nZS4iKSk7cmV0dXJufWNvbnN0IHY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZXh0cmFzIik7aWYodiE9PW51bGwpe3EoImxpc3RFeHRyYXMiLHtob3RlbDp2LC4uLmdvKCl9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBvbGljeSIpO2lmKGshPT1udWxsKXtxKCJwb2xpY2llcyIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHRvcGljOmt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhhdCBwb2xpY3kuIikpO3JldHVybn1jb25zdCB3PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNhbmNlbCIpO2lmKHchPT1udWxsKXtxKCJwcmV2aWV3Q2FuY2VsbGF0aW9uIix7Ym9va2luZzp3fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCB3b3JrIG91dCB0aGUgZmVlLiIpKTtyZXR1cm59Y29uc3QgJD10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNhbmNlbCIpO2lmKCQhPT1udWxsKXtxKCJjYW5jZWxCb29raW5nIix7Ym9va2luZzokLGNvbmZpcm1lZDohMH0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2FuY2VsIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IFo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jaGFuZ2UiKTtpZihaIT09bnVsbCl7Y29uc3QgeT1CPy50bz8/e30sVD1CPy5mcm9tPz97fSxuZT1CPy5hZGRPbixjZT15LmNoZWNrSW4mJih5LmNoZWNrSW4hPT1ULmNoZWNrSW58fHkuY2hlY2tPdXQhPT1ULmNoZWNrT3V0KTtxKCJjaGFuZ2VCb29raW5nIix7Ym9va2luZzpaLGNvbmZpcm1lZDohMCwuLi5jZT97Y2hlY2tJbjp5LmNoZWNrSW4sY2hlY2tPdXQ6eS5jaGVja091dH06e30sLi4ubmU/LmlkP3tleHRyYTpuZS5pZCxxdWFudGl0eTpOdW1iZXIobmUudG8pfTp7fSwuLi55LnJvb21zIT09dm9pZCAwJiZOdW1iZXIoeS5yb29tcykhPT1OdW1iZXIoVC5yb29tcyk/e3Jvb21zOk51bWJlcih5LnJvb21zKX06e30sLi4ueS5yb29tTmFtZSYmeS5yb29tTmFtZSE9PVQucm9vbU5hbWU/e3Jvb206eS5yb29tTmFtZX06e319KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGNoYW5nZSB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBJPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKEk9PT0iYmFjayIpe2Zvcig7dmUuYXQoLTEpPy5wYXlsb2FkPy52aWV3PT09Im1lbWJlciImJiFROyl2ZT12ZS5zbGljZSgwLC0xKTtjb25zdCB5PXZlLmF0KC0xKTtpZigheXx8bm8pe2RmKCk7cmV0dXJufXZlPXZlLnNsaWNlKDAsLTEpLElvKz0xLHFjKCksVGYoKTtjb25zdCBUPXkudmVyc2lvbj09PVRvP3ZvaWQgMDpjXyh5LnBheWxvYWQpO1Q/KEI9eS5wYXlsb2FkLHEoVC5rZXksVC5hcmdzLHtwdXNoOiExfSkuY2F0Y2goKCk9PkdlKHkucGF5bG9hZCwhMCkpKTpHZSh5LnBheWxvYWQsITApO3JldHVybn1pZihJPT09Im1vcmUtcGxhY2VzIil7Zm9yKGNvbnN0IHkgb2YodC5jbG9zZXN0KCIucGxhY2VzIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuY2hpcC5wbGFjZVtoaWRkZW5dIikpeS5oaWRkZW49ITE7dC5yZW1vdmUoKTtyZXR1cm59Y29uc3QgVj10LmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpO2lmKFYhPT1udWxsKXtUZT1UZT09PVY/IiI6Vjtmb3IoY29uc3QgeSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbC1ib2R5XSIpKXkuaGlkZGVuPXkuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsLWJvZHkiKSE9PVRlO2Zvcihjb25zdCB5IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsXSIpKXkuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoeS5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKT09PVRlKSk7cmV0dXJufWlmKEk9PT0iY2xlYXItZmlsdGVycyIpe3EoImxpc3RIb3RlbHMiLFR1KEI/LmFzaykpLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgY2xlYXIgdGhlIGZpbHRlcnMuIikpO3JldHVybn1pZihJPT09ImFsbC1ob3RlbHMiKXt3cygpLHEoImxpc3RIb3RlbHMiLHthbGw6ITAsLi4uRnQoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJwcmljZS1saXN0Iil7Q28oMCk7cmV0dXJufWlmKEk9PT0iZmluZC1ib29raW5nIil7Y29uc3QgeT17dmlldzoiZmluZC1ib29raW5nIn07Zm8oeSksR2UoeSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0ibG9va3VwLWJvb2tpbmciKXtjb25zdCB5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy52YWx1ZS50cmltKCk/PyIiLFQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIXl8fCFULmluY2x1ZGVzKCJAIikpe04oIkJvdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgdGhlIGJvb2tpbmcgd2FzIG1hZGUgd2l0aCwgcGxlYXNlLiIpO3JldHVybn1xKCJsaXN0Qm9va2luZ3MiLHtib29raW5nOnksZW1haWw6VH0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9vayB0aGF0IHVwLiIpKTtyZXR1cm59aWYoST09PSJmaW5kIil7emYoKTtyZXR1cm59aWYoST09PSJtb3JlLWhvdGVscyIpe2NvbnN0IHk9QjtpZigheXx8eS52aWV3IT09ImhvdGVscyIpcmV0dXJuO3EoImxpc3RIb3RlbHMiLHsuLi55LmFzaz8/e30sb2Zmc2V0Ok51bWJlcih5Lm9mZnNldD8/MCkrKHkuaG90ZWxzPz9bXSkubGVuZ3RoLGxpbWl0OjIwfSx7Zm9sZDpUPT5UPy52aWV3PT09ImhvdGVscyI/ey4uLlQsaG90ZWxzOlsuLi55LmhvdGVscz8/W10sLi4uVC5ob3RlbHM/P1tdXSxzaG93bjooeS5ob3RlbHM/P1tdKS5sZW5ndGgrKFQuaG90ZWxzPz9bXSkubGVuZ3RoLG9mZnNldDpOdW1iZXIoeS5vZmZzZXQ/PzApLHBsYWNlczp5LnBsYWNlcywuLi55LndpZGVuZWQ/e3dpZGVuZWQ6eS53aWRlbmVkfTp7fX06VH0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCBtb3JlIGhvdGVscy4iKSk7cmV0dXJufWlmKEk9PT0iaG9tZSIpe3EoImxpc3RIb3RlbHMiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKEk9PT0ibWVtYmVyIil7aWYoIVEpcmV0dXJuO2NvbnN0IHk9e3ZpZXc6Im1lbWJlciIsbWVtYmVyOlF9O2ZvKHkpLEdlKHkpO3JldHVybn1pZihJPT09ImFzay1zaWduLWluIil7Y29uc3QgeT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2lnbmluIik7aWYoeSl5LmhpZGRlbj0hMTtlbHNle2NvbnN0IFQ9e3ZpZXc6Im1lbWJlci1zaWduLWluIn07Zm8oVCksR2UoVCl9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJzaWduLWluIil7Y29uc3QgeT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy52YWx1ZS50cmltKCk/PyIiLFQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1zdXIiKT8udmFsdWUudHJpbSgpPz8iIjtpZigheXx8IVQpe04oIkJvdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBvbiBpdCwgcGxlYXNlLiIpO3JldHVybn1xKCJzaWduSW4iLHtudW1iZXI6eSxzdXJuYW1lOlR9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IHNpZ24gaW4uIikpO3JldHVybn1pZihJPT09ImZvcmdldC1wcmVmcyIpe3EoImZvcmdldFByZWZlcmVuY2VzIix7fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBmb3JnZXQgdGhlbS4iKSk7cmV0dXJufWNvbnN0IHRlPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXN1Z2dlc3QiKTtpZih0ZSE9PW51bGwpe2NvbnN0IHk9KEI/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKHRlKV07eT8uYXNrPy50b29sP3EoU3RyaW5nKHkuYXNrLnRvb2wpLHkuYXNrLmFyZ3M/P3t9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGRvIHRoYXQganVzdCBub3cuIikpOnk/LnNheSYmTmUuc2VuZE1lc3NhZ2Uoe3JvbGU6InVzZXIiLGNvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OlN0cmluZyh5LnNheSl9XX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgc2VuZCB0aGF0IHRvIHRoZSBjaGF0LiIpKTtyZXR1cm59aWYoST09PSJzaWduLW91dCIpe1E9bnVsbCxxKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKEk9PT0iYXNrLWJvb2siKXtjb25zdCB5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpO3kmJih5LmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0iYm9vayIpe2NvbnN0IHk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsVD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ21haWwiKT8udmFsdWUudHJpbSgpPz8iIixuZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25vdGUiKT8udmFsdWUudHJpbSgpPz8iIixjZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3RpbWUiKT8udmFsdWUudHJpbSgpPz8iIix6ZT1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAoZXM9PmVzLmRhdGFzZXQuYXNrPz8iIiksVmU9ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWQ7aWYoUGU9e25hbWU6eSxlbWFpbDpULG5vdGVzOm5lLGFycml2aW5nQXQ6Y2UscmVxdWVzdHM6emUscmVtZW1iZXI6VmV9LCF5fHwhVC5pbmNsdWRlcygiQCIpKXtOKHk/J1RoYXQgZW1haWwgaGFzIG5vICJAIiBpbiBpdCAtIHRoZSBjb25maXJtYXRpb24gbmVlZHMgYW4gYWRkcmVzcyBpdCBjYW4gcmVhY2guJzoiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufXEoInJlcXVlc3RCb29raW5nIix7bmFtZTp5LGVtYWlsOlQsLi4ubmU/e25vdGVzOm5lfTp7fSwuLi5jZT97YXJyaXZpbmdBdDpjZX06e30sLi4uemUubGVuZ3RoP3tyZXF1ZXN0czp6ZX06e30sLi4uVmU/e3JlbWVtYmVyUmVxdWVzdHM6ITB9Ont9fSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBhc2sgZm9yIHRob3NlIHJvb21zLiIpKTtyZXR1cm59aWYoST09PSJib29raW5ncyIpe3EoImxpc3RCb29raW5ncyIse30pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3QgbG9hZCB5b3VyIGJvb2tpbmdzLiIpKTtyZXR1cm59aWYoST09PSJ0cmlwIil7cSgidmlld1RyaXAiLHt9KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBLPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik7aWYoSyl7Y29uc3QgeT10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLFQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTt5JiZUJiYoei5jaGVja0luPXksei5jaGVja091dD1UKSxxKCJnZXRIb3RlbCIse2hvdGVsOkssLi4uZ28oKSwuLi56LmNoZWNrSW4mJkc+MT97cm9vbXM6R306e319KS5jYXRjaCgoKT0+TigiQ291bGQgbm90IGxvYWQgdGhhdCBob3RlbC4iKSl9fSk7Y29uc3QgU2Y9KCk9PntpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIikpcmV0dXJuO2NvbnN0IGU9dD0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk/LnZhbHVlPz8iIjtQZT17bmFtZTplKCJnbmFtZSIpLGVtYWlsOmUoImdtYWlsIiksbm90ZXM6ZSgiZ25vdGUiKSxhcnJpdmluZ0F0OmUoImd0aW1lIikscmVxdWVzdHM6Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKHQ9PnQuZGF0YXNldC5hc2s/PyIiKSxyZW1lbWJlcjohIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZH19O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixlPT57Y29uc3QgdD1lLnRhcmdldD8uaWQ/PyIiO1siZ25hbWUiLCJnbWFpbCIsImdub3RlIiwiZ3RpbWUiLCJncmVtZW1iZXIiXS5pbmNsdWRlcyh0KSYmU2YoKX0pO2NvbnN0IHpmPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2hlcmUiKT8udmFsdWUudHJpbSgpPz8iIjtpZighZSl7TigiV2hlcmUgdG8/IEEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwuIik7cmV0dXJufXdzKCk7Y29uc3Qgbj0oQj8ucmVnaW9ucz8/W10pLmZsYXRNYXAobz0+KG8uY291bnRyaWVzPz9bXSkuZmxhdE1hcChyPT5bci5uYW1lLC4uLihyLmNpdGllcz8/W10pLm1hcChzPT5zLm5hbWUpXSkpLmZpbmQobz0+by50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpKTtxKCJsaXN0SG90ZWxzIix7Li4ubj97Y2l0eTpufTp7cXVlcnk6ZX0sLi4uRnQoKX0pLmNhdGNoKCgpPT5OKCJDb3VsZCBub3Qgc2VhcmNoIGp1c3Qgbm93LiIpKX0sd3M9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkY28iKTtlPy52YWx1ZSYmKHouY2hlY2tJbj1lLnZhbHVlKSx0Py52YWx1ZSYmKHouY2hlY2tPdXQ9dC52YWx1ZSksZT8udmFsdWUmJihRcj0hMCl9O2xldCAkcyx1dD0hMTtjb25zdCBUZj0oKT0+e2NsZWFyVGltZW91dCgkcyksdXQ9ITF9LFlfPWU9PmU/LnZpZXc9PT0iaG90ZWxzInx8ZT8udmlldz09PSJuby1ob3RlbHMiJiYhIWU/LmFzayxDbz0oZT0wKT0+e2NsZWFyVGltZW91dCgkcyksdXQ9ITAsJHM9c2V0VGltZW91dCgoKT0+e2lmKCFZXyhCKSl7dXQ9ITE7cmV0dXJufWlmKG5vKXtDbygxNTApO3JldHVybn11dD0hMSxxKCJsaXN0SG90ZWxzIix7Li4ua18oQj8uYXNrKSwuLi5GdCgpfSkuY2F0Y2goKCk9Pk4oIkNvdWxkIG5vdCBwcmljZSB0aG9zZSBuaWdodHMuIikpfSxlKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZT0+e2lmKGUudGFyZ2V0Py5pZD09PSJ3aGVyZSImJmUua2V5PT09IkVudGVyIiYmIWUuaXNDb21wb3Npbmcpe2UucHJldmVudERlZmF1bHQoKSx6ZigpO3JldHVybn1jb25zdCB0PWUudGFyZ2V0OyF0fHx0LmdldEF0dHJpYnV0ZSgicm9sZSIpIT09ImJ1dHRvbiJ8fGUua2V5IT09IkVudGVyIiYmZS5rZXkhPT0iICJ8fChlLnByZXZlbnREZWZhdWx0KCksdC5jbGljaygpKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ7dD8udHlwZT09PSJkYXRlIiYmKFFyPSEwKTtjb25zdCBvPXtkY2k6WyJkY2kiLCJkY28iXSxkY286WyJkY2kiLCJkY28iXSxsY2k6WyJsY2kiLCJsY28iXSxsY286WyJsY2kiLCJsY28iXX1bdD8uaWQ/PyIiXTtpZihvKXtjb25zdCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9bMF0pLHU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1sxXSk7aWYoIWF8fCF1KXJldHVybjtpZih0LmlkPT09b1swXSYmYS52YWx1ZSl7Y29uc3QgbD1VZShhLnZhbHVlLDEpO3UubWluPWwsKCF1LnZhbHVlfHx1LnZhbHVlPD1hLnZhbHVlKSYmKHUudmFsdWU9bCl9ei5jaGVja0luPWEudmFsdWV8fHouY2hlY2tJbix6LmNoZWNrT3V0PXUudmFsdWV8fHouY2hlY2tPdXQsb1swXT09PSJsY2kiJiZDbygzMDApO3JldHVybn1pZih0Py5pZCE9PSJjaSImJnQ/LmlkIT09ImNvIilyZXR1cm47Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSxzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpO2lmKCFyfHwhcylyZXR1cm47aWYodC5pZD09PSJjaSImJnIudmFsdWUpe2NvbnN0IGE9VWUoci52YWx1ZSwxKTtzLm1pbj1hLCghcy52YWx1ZXx8cy52YWx1ZTw9ci52YWx1ZSkmJihzLnZhbHVlPWEpfXouY2hlY2tJbj1yLnZhbHVlfHx6LmNoZWNrSW4sei5jaGVja091dD1zLnZhbHVlfHx6LmNoZWNrT3V0O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO2kmJihpLnRleHRDb250ZW50PVlyKCkpLFhyKCl9KTtjb25zdCBJZj0oZSx0KT0+e3RyeXtwZih0KTtjb25zdCBuPWU/SlNPTi5zdHJpbmdpZnkoZSk6IiI7aWYobiYmbj09PWhmJiZKU09OLnN0cmluZ2lmeShCKT09PWZmKXJldHVybjtlPy5zdGF5Py5jaGVja0luJiYoUXI9ITApLHZlPVtdLElvKz0xLHFjKCksVGYoKSxUZT15ZixHZShlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbiksaGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O05lLm9udG9vbHJlc3VsdD1lPT5JZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7TmUub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+c2YoZSxhZik7TmUuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPU5lLmdldEhvc3RDb250ZXh0KCk7c2YoZSxhZik7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZJZih0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57aGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVsLC5zdGF5IC5ndWVzdHN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS5mbGV4LWRhdGVze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjJweDtzY3JvbGxiYXItd2lkdGg6dGhpbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uZmR7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7bWluLXdpZHRoOjc4cHg7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udDppbmhlcml0O3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcn0uZmQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmZkLWRheXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW07Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6bm93cmFwfS5mZC1wcmljZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjY1MDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5mZC5vbntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtjdXJzb3I6ZGVmYXVsdH0uZmQub24gLmZkLWRheXtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO29wYWNpdHk6Ljg1fS5mZC5iZXN0e2JvcmRlci1jb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5mZC5iZXN0IC5mZC1wcmljZSwuZmQuYmVzdCAuZmQtZGF5e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmZkLm91dCAuZmQtcHJpY2V7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC13ZWlnaHQ6NTAwfS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5sZWdze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ubGVne2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6OXB4IDExcHh9LmxlZy53YXN7b3BhY2l0eTouNzJ9LmxlZy53YXMgLmxlZ3Z7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ubGVna3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5sZWd2e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY0MDttYXJnaW4tdG9wOjJweH0ubGVnbXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6MnB4fS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS53YXJubm90ZXtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjlweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS50aWxlLm92ZXJ7b3BhY2l0eTouODJ9LmFza2VkLWxpbmV7Zm9udC1zdHlsZTppdGFsaWN9LmFza2Vke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5hc2tlZCBie2ZvbnQtd2VpZ2h0OjcyMDtjb2xvcjp2YXIoLS1mZyl9LmFza2VkLmZsYWd7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0td2Fybil9LmFza2VkLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX0uYXNrc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmFza3MtdHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwLmFza3tjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweH0uY2hpcC5hc2tbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MX0uY21wLWhlYWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZzoxMHB4IDExcHggMTJweH0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fS5zdWdnZXN0e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21hcmdpbi10b3A6MTRweH0uc3VnZ2VzdCAuY2hpcHtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHggMTFweDtjb2xvcjp2YXIoLS1mZyl9LnN1Z2dlc3QgLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LnN1Z2dlc3QgLmNoaXA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZm9ybSBsYWJlbC5yZW1lbWJlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZvbnQtd2VpZ2h0OjQwMDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MH0uZm9ybSBsYWJlbC5yZW1lbWJlciBpbnB1dHttYXJnaW46MnB4IDAgMH0ucGxhY2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwLnBsYWNle2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweCAxMHB4O2NvbG9yOnZhcigtLWZnKX0uY2hpcC5wbGFjZSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNoaXAucGxhY2U6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmNoaXAucGxhY2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uc3VnZ2VzdCAuY2hpcC5zYXkgc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZpbmRlcntkaXNwbGF5OmZsZXg7Z2FwOjhweH0uZmluZGVyIGlucHV0e2ZsZXg6MTttaW4td2lkdGg6MDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo5cHggMTJweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyl9LmZpbmRlciBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5yZWdpb257ZGlzcGxheTpncmlkO2dhcDoxMHB4fS5jb3VudHJ5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6NnB4fS5jb3VudHJ5bmFtZSBzbWFsbHtmb250LXdlaWdodDo1MDA7bGV0dGVyLXNwYWNpbmc6MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3R7ZGlzcGxheTpncmlkO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZGVzdDpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MH0uZGVzdC1jb3VudHJ5e2p1c3RpZnktc2VsZjpzdGFydDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246bGVmdH0uZGVzdC1jb3VudHJ5IHNtYWxse2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZGVzdC1jb3VudHJ5IC5ue2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdC1jb3VudHJ5OmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmRlc3QtY291bnRyeTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5maW5kZXIgLmdve2ZsZXg6bm9uZTtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtc2l6ZToxM3B4fS5zb3J0cy1re2FsaWduLXNlbGY6Y2VudGVyO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXJpZ2h0OjJweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0uc2VhcmNoe2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc2VhcmNoIC5zdGF5e3BhZGRpbmc6MDtiYWNrZ3JvdW5kOm5vbmV9LnNlYXJjaCAud2hlcmV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnNlYXJjaCAud2hlcmUgaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxMXB4fS5zZWFyY2ggLndoZXJlIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnNlYXJjaCAuc3RheSAuZ297cGFkZGluZzo5cHggMTRweDtmb250LXNpemU6MTNweH0udC10YWdze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4O21hcmdpbi10b3A6NHB4fS50LWZyb20udC1ub25le2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweH0uc3RheSAuZ28ucXVpZXR7cGFkZGluZzo4cHggMTJweDtmb250LXNpemU6MTIuNXB4fS5maWx0ZXItcGFuZWx7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5mZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS50LWZyb20gLnQtc3Vie2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxcHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV0gc21hbGx7Y29sb3I6aW5oZXJpdH0uY2hpcC50b29se2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC50b29sW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
|
|
6
6
|
/** sha256 of widget/src + widget/index.html at build time - the drift guard reads this. */
|
|
7
|
-
export const HOTEL_CARD_SOURCE_SHA = '
|
|
7
|
+
export const HOTEL_CARD_SOURCE_SHA = '0f49d17d0c8b5530a38701765e96917903bc3b207b339eaa9dfc66724430b17c';
|
|
8
8
|
//# sourceMappingURL=card.generated.js.map
|