@curless/hotel-storefront 0.27.3 → 0.27.5
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__/audit-p2.test.d.ts +2 -0
- package/dist/__tests__/audit-p2.test.d.ts.map +1 -0
- package/dist/__tests__/audit-p2.test.js +98 -0
- package/dist/__tests__/audit-p2.test.js.map +1 -0
- package/dist/__tests__/card-contract.test.js +14 -0
- package/dist/__tests__/card-contract.test.js.map +1 -1
- package/dist/__tests__/demo-hotels.test.js +3 -1
- package/dist/__tests__/demo-hotels.test.js.map +1 -1
- package/dist/__tests__/huazhu-backend.test.js +13 -0
- package/dist/__tests__/huazhu-backend.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +21 -5
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/backend.d.ts +2 -0
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +2 -0
- 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.js +2 -2
- package/dist/data.js.map +1 -1
- package/dist/demo-hotels.d.ts +1 -1
- package/dist/demo-hotels.d.ts.map +1 -1
- package/dist/demo-hotels.js +9 -3
- package/dist/demo-hotels.js.map +1 -1
- package/dist/huazhu/backend.d.ts.map +1 -1
- package/dist/huazhu/backend.js +32 -8
- package/dist/huazhu/backend.js.map +1 -1
- package/dist/huazhu/sellable.d.ts +3 -1
- package/dist/huazhu/sellable.d.ts.map +1 -1
- package/dist/huazhu/sellable.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/legal.d.ts.map +1 -1
- package/dist/legal.js +6 -2
- package/dist/legal.js.map +1 -1
- package/dist/present.d.ts +1 -1
- package/dist/present.d.ts.map +1 -1
- package/dist/present.js +2 -1
- 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 +3 -2
- package/dist/server.js.map +1 -1
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +6 -1
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +65 -17
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +121 -19
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +8 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -9
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+Y29uc3QgV2Y9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLEdmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxvdT17fSxRZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9R2YoZCxvKSxkIGluIG91KXJldHVybjtvdVtkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1pLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCAkPWlbd107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOldmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBZZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBYZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBVbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIGVtKGUpe31mdW5jdGlvbiB0bShlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIG5tKGUpe31mdW5jdGlvbiBfcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBrcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+cXMobikpLmpvaW4odCl9ZnVuY3Rpb24gSW8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIG9te2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gZG4oZSl7cmV0dXJuIG5ldyBvbShlKX1mdW5jdGlvbiBqcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBCZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gR3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgcnU9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gUXUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1ydSlyZXR1cm4gbz09PXZvaWQgMCYmKG89cnUsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHJtKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gY3QoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBCbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBaZShlKXtyZXR1cm4gQm8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gWXUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBjdCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBYdShlLHQsbil7dCBpbiBlP2N0KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gb3QoZSx0LG4sbyl7Y29uc3Qgcj1aZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD9ZdShlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTpYdShlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiBzbShlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/WXUoZSxuLCgpPT50W25dKTpYdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBpbShlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gYW0oZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gY20oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIHVtKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gZWwoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIHRsKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgTXM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IG5sPWRuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gVmUoZSl7aWYoYnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKGJ0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIFZlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gbG0oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgZG09ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LFBvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksb2w9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBRKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBwbShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBxcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBybChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IHNsPXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxpbD17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gYWwoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gb3QocyxlLEhvKGUsdCkpLFEoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBIbyhlLHQpe2NvbnN0IG49WmUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBjbChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoSG8oZSx0KSksYT17fTtyZXR1cm4gb3QoYSxlLFJlZmxlY3Qub3duS2V5cyhaZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLFEoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiB1bChlLHQpe2lmKCFWZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1aZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gUShlLHVlKGUuX3pvZC5kZWYse3NoYXBlOmxsKGUsdCl9KSl9ZnVuY3Rpb24gbGwoZSx0KXtjb25zdCBuPXt9O3JldHVybiBvdChuLGUsUmVmbGVjdC5vd25LZXlzKFplKGUpKSksc20obix0KSxufWZ1bmN0aW9uIGRsKGUsdCl7aWYoIVZlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBRKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6bGwoZSx0KX0pKX1mdW5jdGlvbiBwbChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtvdChuLGUsUmVmbGVjdC5vd25LZXlzKFplKGUpKSksb3Qobix0LFJlZmxlY3Qub3duS2V5cyhaZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBRKGUsbyl9ZnVuY3Rpb24gd3MoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KEhvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiBvdCh1LHQsUmVmbGVjdC5vd25LZXlzKFplKHQpKSxlJiYoKGwsZCk9PmkmJiFpLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiBobChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoSG8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIG90KHIsdCxSZWZsZWN0Lm93bktleXMoWmUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGZlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZmwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB3ZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIGR0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uICRzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiB6ZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOmR0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9kdChzPy4oZSkpPz9kdCh0Py5lcnJvcj8uKGUpKT8/ZHQobi5jdXN0b21FcnJvcj8uKGUpKT8/ZHQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGlbdV09ZVt1XSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gVm8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGhtPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIEpvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWhtLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gS28oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIG1sKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gdnQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBmbShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gZ2woZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIGJsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gbW0oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gZ2wodCtuKX1mdW5jdGlvbiBnbShlKXtyZXR1cm4gYmwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGJtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiB2bShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyB5bXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIHZsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6X20oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBqZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBXbyhlLHQsbil7cmV0dXJuIGplKGUsdCxuLCExKX1mdW5jdGlvbiBwbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gamUodGhpcyxuLG8odGhpcykpfSxzZXQocil7amUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIF9tKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpqZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe2plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBrbShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGhzLExlPSExO2NvbnN0IHdtPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7TGU9ITB9fTtmdW5jdGlvbiBPKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmaHMhPT1lLl96b2Qpe2hzPXZvaWQgMDtyZXR1cm59aHM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHdtKTtjb25zdCByPUxlO0xlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIExlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksTGU9TGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxMZT1MZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24geWwoZSx0LG4sbyl7Y29uc3Qgcj1rbShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IF9sPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gRHMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtfbF09ITAsdH1jb25zdCBMcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6aWwsQ09OU1RBTlRfQ0FUQ0g6X2wsQ2xhc3M6eW0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6c2wsYWJvcnRlZDpmZSxhbGxvd3NFdmFsOm5sLGFzc2VydDpubSxhc3NlcnRFcXVhbDpZZixhc3NlcnRJczplbSxhc3NlcnROZXZlcjp0bSxhc3NlcnROb3RFcXVhbDpYZixhc3NpZ25Qcm9wOmN0LGF0dGFjaFNjaGVtYTokcyxiYXNlNjRUb1VpbnQ4QXJyYXk6Z2wsYmFzZTY0dXJsVG9VaW50OEFycmF5Om1tLGNhY2hlZDpkbixjYXB0dXJlU3RhY2tUcmFjZTpNcyxjbGVhbkVudW06Zm0sY2xlYW5SZWdleDpCZSxjbG9uZTpRLGNsb25lRGVmOmltLGNvZGVQb2ludExlbmd0aDpKbyxjb25zdGFudENhdGNoOkRzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6cG0sZGVmaW5lTGF6eTpRdSxkZWZpbmVMYXp5SW50ZXJuYWw6TyxkZXJpdmVkOnBuLGVzYzplbCxlc2NhcGVSZWdleDpOZSxleHBsaWNpdGx5QWJvcnRlZDpmbCxleHRlbmQ6dWwsZmluYWxpemVJc3N1ZTp6ZSxmbG9hdFNhZmVSZW1haW5kZXI6R3UsZ2V0RWxlbWVudEF0UGF0aDphbSxnZXRFbnVtVmFsdWVzOl9zLGdldExlbmd0aGFibGVPcmlnaW46S28sZ2V0UGFyc2VkVHlwZTpkbSxnZXRTaXphYmxlT3JpZ2luOlZvLGhleFRvVWludDhBcnJheTpibSxoaWRlOldvLGluc3RhbGxMYXp5UHJvcDp5bCxpc09iamVjdDpidCxpc1BsYWluT2JqZWN0OlZlLGlzc3VlOnZ0LGpvaW5WYWx1ZXM6a3MsanNvblN0cmluZ2lmeVJlcGxhY2VyOklvLG1lbWJlcnM6dmwsbWVyZ2U6cGwsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6anMsbnVtS2V5czpsbSxvYmplY3RDbG9uZTpybSxvbWl0OmNsLG9wdGlvbmFsS2V5czpybCxvd246amUscGFyc2VkVHlwZTptbCxwYXJ0aWFsOndzLHBpY2s6YWwscHJlZml4SXNzdWVzOndlLHByaW1pdGl2ZVR5cGVzOm9sLHByb21pc2VBbGxPYmplY3Q6Y20scHJvcGVydHlLZXlUeXBlczpQbyxyYW5kb21TdHJpbmc6dW0scmF3U2hhcGU6Qm8scmVxdWlyZWQ6aGwsc2FmZUV4dGVuZDpkbCxzaGFsbG93Q2xvbmU6Rm8sc2x1Z2lmeTp0bCxzdHJpbmdpZnlQcmltaXRpdmU6cXMsdG9ab2Q6VW8sdWludDhBcnJheVRvQmFzZTY0OmJsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpnbSx1aW50OEFycmF5VG9IZXg6dm0sdW53cmFwTWVzc2FnZTpkdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgc3U7Y29uc3QgVXM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLGZzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IGl1PSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uICRtKGUpe2NvbnN0IHQ9aXU7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBpdT1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7ZnMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixmcyl9ZmluYWxseXtmcy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxpKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBOPXc7Zm9yKDtOJiZOIT09JDspTj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoTik7Y29uc3QgST1OPz93O2kuaGFzKEkpfHwoaS5hZGQoSSksdmwoSSxhKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBifHwoYlt3XT1fW3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50PyRtKGQpOnRoaXM7dSh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBCcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIEZlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIEdvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShzdT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhzdS5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIG5lKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIFNtKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZixJbywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIHptKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgVG09e2dldDpTbSxzZXQ6em0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LG1zPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sYXU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksa2w9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIsbXMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixtcyksbXMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixUbSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7YXUuaGFzKG4pfHwoYXUuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LHdsPXAoIiRab2RFcnJvciIsa2wpLF9lPXAoIiRab2RFcnJvciIsa2wsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiBJbShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIFFvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/SW0obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIFlvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IHU9bixsPTA7Zm9yKDtsPGkubGVuZ3RoOyl7Y29uc3QgZD1pW2xdLG09bD09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmdS5fZXJyb3JzLnB1c2godChhKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPXVbZF07bSYmYi5fZXJyb3JzLnB1c2godChhKSksdT1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBGcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAodT0+byh7aXNzdWVzOnV9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCB1PVsuLi5zLC4uLmkucGF0aF07aWYodS5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDx1Lmxlbmd0aDspe2NvbnN0IG09dVtkXSxiPWQ9PT11Lmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGE9bC5pdGVtcylbbV0/PyhhW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gJGwoZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIEhzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAkeyRsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIFhvKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgaG49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHU9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKGw9PnplKGwsYSxuZSgpKSkpO3Rocm93IE1zKHUscz8uY2FsbGVlPz90KSx1fXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0sU3M9aG4oX2UpLGZuPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCB1PW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcChsPT56ZShsLGEsbmUoKSkpKTt0aHJvdyBNcyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LHpzPWZuKF9lKSxtbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP3psKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sU2w9bW4oX2UpO2Z1bmN0aW9uIHpsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+emUocixuLG5lKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBnbj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP3psKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sUG09Z24oX2UpLHhtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSxDbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLGVyPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09eG0pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBFbShlLHQsbil9KTtmdW5jdGlvbiBFbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1tDbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCB0cj1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LFZzPWU9Pntjb25zdCB0PWhuKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLFhvKG4sYSkpfTtyZXR1cm4gbn0sQW09VnMoX2UpLEpzPWU9Pntjb25zdCB0PWhuKGUpLG49KG8scixzLGEpPT50KG8scixzLFhvKG4sYSkpO3JldHVybiBufSxPbT1KcyhfZSksS3M9ZT0+e2NvbnN0IHQ9Zm4oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxYbyhuLGEpKX07cmV0dXJuIG59LFJtPUtzKF9lKSxXcz1lPT57Y29uc3QgdD1mbihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLFhvKG4sYSkpO3JldHVybiBufSxabT1XcyhfZSksR3M9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gbW4oZSkodCxuLHIpfSxObT1HcyhfZSksUXM9ZT0+KHQsbixvKT0+bW4oZSkodCxuLG8pLGptPVFzKF9lKSxZcz1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGduKGUpKHQsbixyKX0sTW09WXMoX2UpLFhzPWU9PmFzeW5jKHQsbixvKT0+Z24oZSkodCxuLG8pLHFtPVhzKF9lKSxUbD0vXltjQ11bMC05YS16XXs2LH0kLyxJbD0vXlswLTlhLXpdKyQvLFBsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLHhsPS9eWzAtOWEtdkEtVl17MjB9JC8sQ2w9L15bQS1aYS16MC05XXsyN30kLyxFbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gQWwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IE9sPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLERtPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sUmw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLHl0PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyxMbT15dCg0KSxVbT15dCg2KSxCbT15dCg3KSxabD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxGbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxIbT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxObD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxWbT1ObCxKbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxLbT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIGpsKCl7cmV0dXJuIG5ldyBSZWdFeHAoS20sInUiKX1jb25zdCBNbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8scWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxEbD1lPT57Y29uc3QgdD1OZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxMbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sVWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sV209L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sR209L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLEJsPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxGbD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sZWk9L15odHRwcz8kLyxIbD0vXlwrWzEtOV1cZHs2LDE0fSQvLHRpPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxWbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxuaT0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxKbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gUW0oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IEtsPVFtKEpsKTtmdW5jdGlvbiBUcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIFdsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtUcyhlKX0kYCl9ZnVuY3Rpb24gR2woZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke1RzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7VHMoe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7Smx9VCg/OiR7b30pJGApfWNvbnN0IFFsPS9eW1xzXFNdezAsfSQvLFlsPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LFhsPS9eLT9cZCtuPyQvLGVkPS9eLT9cZCskLyxucj0vXi0/XGQrKD86XC5cZCspPyQvLHRkPS9eKD86dHJ1ZXxmYWxzZSkkL2ksbmQ9L15udWxsJC9pLG9kPS9edW5kZWZpbmVkJC9pLHJkPS9eW15BLVpdKiQvLHNkPS9eW15hLXpdKiQvLGlkPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gYm4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIHZuKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBZbT0vXlswLTlhLWZBLUZdezMyfSQvLFhtPWJuKDIyLCI9PSIpLGVnPXZuKDIyKSx0Zz0vXlswLTlhLWZBLUZdezQwfSQvLG5nPWJuKDI3LCI9Iiksb2c9dm4oMjcpLHJnPS9eWzAtOWEtZkEtRl17NjR9JC8sc2c9Ym4oNDMsIj0iKSxpZz12big0MyksYWc9L15bMC05YS1mQS1GXXs5Nn0kLyxjZz1ibig2NCwiIiksdWc9dm4oNjQpLGxnPS9eWzAtOWEtZkEtRl17MTI4fSQvLGRnPWJuKDg2LCI9PSIpLHBnPXZuKDg2KSxvcj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOlFsLGJhc2U2NDpXbSxiYXNlNjR1cmw6R20sYmlnaW50OlhsLGJvb2xlYW46dGQsYnJvd3NlckVtYWlsOkptLGNpZHJ2NDpMbCxjaWRydjY6VWwsY3JlZGl0Q2FyZDp0aSxjdWlkOlRsLGN1aWQyOklsLGN1cnJlbmN5Q29kZTpWbCxkYXRlOktsLGRhdGV0aW1lOkdsLGRvbWFpbjpGbCxkdXJhdGlvbjpPbCxlMTY0OkhsLGVtYWlsOlpsLGVtb2ppOmpsLGV4dGVuZGVkRHVyYXRpb246RG0sZ3VpZDpSbCxoZXg6aWQsaG9zdG5hbWU6QmwsaHRtbDVFbWFpbDpGbSxodHRwUHJvdG9jb2w6ZWksaWJhbjpuaSxpZG5FbWFpbDpWbSxpbnRlZ2VyOmVkLGlwdjQ6TWwsaXB2NjpxbCxrc3VpZDpDbCxsb3dlcmNhc2U6cmQsbWFjOkRsLG1kNV9iYXNlNjQ6WG0sbWQ1X2Jhc2U2NHVybDplZyxtZDVfaGV4OlltLG5hbm9pZDpFbCxuYW5vaWRPZkxlbmd0aDpBbCxudWxsOm5kLG51bWJlcjpucixyZmM1MzIyRW1haWw6SG0sc2hhMV9iYXNlNjQ6bmcsc2hhMV9iYXNlNjR1cmw6b2csc2hhMV9oZXg6dGcsc2hhMjU2X2Jhc2U2NDpzZyxzaGEyNTZfYmFzZTY0dXJsOmlnLHNoYTI1Nl9oZXg6cmcsc2hhMzg0X2Jhc2U2NDpjZyxzaGEzODRfYmFzZTY0dXJsOnVnLHNoYTM4NF9oZXg6YWcsc2hhNTEyX2Jhc2U2NDpkZyxzaGE1MTJfYmFzZTY0dXJsOnBnLHNoYTUxMl9oZXg6bGcsc3RyaW5nOllsLHRpbWU6V2wsdWxpZDpQbCx1bmRlZmluZWQ6b2QsdW5pY29kZUVtYWlsOk5sLHVwcGVyY2FzZTpzZCx1dWlkOnl0LHV1aWQ0OkxtLHV1aWQ2OlVtLHV1aWQ3OkJtLHhpZDp4bH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxXPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxvaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFqcyh0KSYmdC5zaXplIT09dm9pZCAwfSxyaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFqcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LHhvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LHNpPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49eG9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnhvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGlpPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49eG9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnhvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksYWQ9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6R3Uobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxjZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Vy5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPXNsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHVkPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdFtuLG9dPWlsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbGQ9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPW9pKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOlZvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGRkPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1vaSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpWbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHBkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1vaSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Vm8ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxoZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1yaSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9KbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPUtvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGZkPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPXJpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9KbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPUtvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbWQ9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1cuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49cmkpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP0pvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPUtvKHIpLHU9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi51P3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5bj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztXLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSxnZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pnt5bi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxiZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJkKSx5bi5pbml0KGUsdCl9KSx2ZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXNkKSx5bi5pbml0KGUsdCl9KSx5ZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPU5lKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxfZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7TmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxrZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtOZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBDbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLndlKG4sZS5pc3N1ZXMpKX1jb25zdCB3ZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5DbyhyLG4sdC5wcm9wZXJ0eSkpO0NvKG8sbix0LnByb3BlcnR5KX19KSwkZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e1cuaW5pdChlLHQpLFdvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTt1IGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaCh1LnRoZW4obD0+Q28obCxvLGEpKSkpOkNvKHUsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksU2Q9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Vy5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx6ZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Vy5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgVGR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCBJZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LHg9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPUlkO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLHUsbCk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9ZmUoaSksbTtmb3IoY29uc3QgYiBvZiB1KXtpZihiLl96b2QuZGVmLndoZW4pe2lmKGZsKGkpfHwhYi5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKCRzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlOyRzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+aSk6aX0sYT0oaSx1LGwpPT57aWYoZmUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyh1LHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShpLHUpPT57aWYodS5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSx1KTtpZih1LmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLnUsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+YShtLGksdSkpOmEoZCxpLHUpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGksdSk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKHUuYXN5bmM9PT0hMSl0aHJvdyBuZXcgRmU7cmV0dXJuIGwudGhlbihkPT5zKGQscix1KSl9cmV0dXJuIHMobCxyLHUpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBXbyh0aGlzLCJ+c3RhbmRhcmQiLGFpKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7amUodGhpcywifnN0YW5kYXJkIixlKX19KSxQZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PnplKG4sdCxuZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBoZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gUGQoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIGFpKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gUGQobyxuKX1jYXRjaHt9cmV0dXJuIGhnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IF9uPXAoIiRab2RTdHJpbmciLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9RbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEY9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt5bi5pbml0KGUsdCksX24uaW5pdChlLHQpfSkseGQ9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVJsKSxGLmluaXQoZSx0KX0pLENkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eXQobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXl0KCkpO0YuaW5pdChlLHQpfSksRWQ9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1abCksRi5pbml0KGUsdCl9KSxjaT0xLHRuPTI7ZnVuY3Rpb24gdWkoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBBZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP3VpKGUpfHx0bjpPZChlLHQpfWZ1bmN0aW9uIE9kKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1laS5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gY2k7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/dG59cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIHRufX1jb25zdCBmZz0vW1x0XG5ccl0vZztmdW5jdGlvbiBJcyhlKXtyZXR1cm4gZS5yZXBsYWNlKGZnLCIiKX1mdW5jdGlvbiBSZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBaZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBOZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1BZChvLHQpO2lmKHI9PT1jaSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT10bil7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9SXMobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFSZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhWmQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6SXMobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksamQ9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1qbCgpKSxGLmluaXQoZSx0KX0pLE1kPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9FbDpBbCh0Lmxlbmd0aCkpLEYuaW5pdChlLHQpfSkscWQ9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVRsKSxGLmluaXQoZSx0KX0pLERkPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SWwpLEYuaW5pdChlLHQpfSksTGQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVBsKSxGLmluaXQoZSx0KX0pLFVkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXhsKSxGLmluaXQoZSx0KX0pLEJkPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Q2wpLEYuaW5pdChlLHQpfSksRmQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1HbCh0KSksRi5pbml0KGUsdCl9KSxIZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49S2wpLEYuaW5pdChlLHQpfSksVmQ9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVdsKHQpKSxGLmluaXQoZSx0KX0pLEpkPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49T2wpLEYuaW5pdChlLHQpfSksS2Q9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU1sKSxGLmluaXQoZSx0KX0pLG1nPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBsaShlKXtyZXR1cm4gbWcudGVzdChlKT91aShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IFdkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1xbCksRi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntsaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxHZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1EbCh0LmRlbGltaXRlcikpLEYuaW5pdChlLHQpfSksUWQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TGwpLEYuaW5pdChlLHQpfSk7ZnVuY3Rpb24gWWQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOmxpKG4pfWNvbnN0IFhkPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVsKSxGLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1lkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gZGkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBlcD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sdHA9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZXApLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57ZGkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxwaT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gbnAoZSl7aWYoIXBpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gZGkobil9Y29uc3Qgb3A9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cGkpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57bnAobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxycD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SGwpLEYuaW5pdChlLHQpfSksZ2c9L1stIF0vZztmdW5jdGlvbiBiZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBzcChlKXtyZXR1cm4gdGkudGVzdChlKT9iZyhlLnJlcGxhY2UoZ2csIiIpKTohMX1jb25zdCBpcD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dGkpLEYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57c3Aobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIHZnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGFwKGUpe3JldHVybiBuaS50ZXN0KGUpP3ZnKGUpOiExfWNvbnN0IGNwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1uaSksRi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PnthcChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiB1cChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IGxwPXAoIiRab2RKV1QiLChlLHQpPT57Ri5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt1cChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGRwPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57Ri5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksaGk9cCgiJFpvZE51bWJlciIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1ucixlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxwcD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e2NkLmluaXQoZSx0KSxoaS5pbml0KGUsdCl9KSxmaT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj10ZCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLG1pPXAoIiRab2RCaWdJbnQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49WGwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxocD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e3VkLmluaXQoZSx0KSxtaS5pbml0KGUsdCl9KSxmcD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxtcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPW9kLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGdwPXAoIiRab2ROdWxsIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPW5kLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxicD1wKCIkWm9kQW55IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksdnA9cCgiJFpvZFVua25vd24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSx5cD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxfcD1wKCIkWm9kVm9pZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGtwPXAoIiRab2REYXRlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gY3UoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi53ZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IHdwPXAoIiRab2RBcnJheSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCB1PTA7dTxzLmxlbmd0aDt1Kyspe2NvbnN0IGw9c1t1XSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4obT0+Y3UobSxvLHUpKSk7ZWxzZSBpZihjdShkLG8sdSksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmZmUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gRW8oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLndlKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgeWc9W107ZnVuY3Rpb24gJHAoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOnlnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1ybChlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIFNwKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sdT1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihmZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKHUuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IHc9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTt3IGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2gody50aGVuKCQ9PkVvKCQsbixfLHQsbSxiKSkpOkVvKHcsbixfLHQsbSxiKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IHpwPXAoIiRab2RPYmplY3QiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9ZG4oKCk9PiRwKHQpKTtPKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHxjdChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPWJ0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCB1PWRlLm1lbW9pemVyO3U/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9dT91LmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IHc9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGkuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoZmUobCx3KSlicmVhazt3PWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTj12WyRdLEk9Ti5fem9kLm9wdGluLEc9Ti5fem9kLm9wdG91dCxvZT1OLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChvZS50aGVuKEo9PkVvKEosbCwkLG0sSSxHKSkpOkVvKG9lLGwsJCxtLEksRyl9cmV0dXJuIGE/U3AoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLFRwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57enAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89ZG4oKCk9PiRwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSx3PV8uc3ltYm9sS2V5cywkPW5ldyBUZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6d30pLE49Sj0+YHNoYXBlWyR7Sn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Sn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLEk9KEosSCk9PmAKICAgICAgICAgIGxldCAke0p9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Sn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Sn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7SH0sIC4uLmlzcy5wYXRoXSA6IFske0h9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0p9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0p9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBHPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKUdbSl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKXtpZihKPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgSD1HW0pdLGdlPXR5cGVvZiBKPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihKKX1dYDplbChKKSxrPWAke2dlfSBpbiBpbnB1dGAsej12W0pdLEs9ej8uX3pvZD8ub3B0aW4scmU9SyE9PXZvaWQgMCxSZT16Py5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7SH0gPSAke04oZ2UpfTtgKSxyZSYmUmUpe2NvbnN0IFllPUs9PT0ib3B0aW9uYWwiP2Ake0h9X3ByZXNlbnRgOmAke0h9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtIfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0h9X3ByZXNlbnQgPSAke2t9OwogICAgICAgIGlmICghJHtIfS5pc3N1ZXMubGVuZ3RoIHx8ICR7SH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7SShILGdlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtZZX0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSByZT8oJC53cml0ZShgCiAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7SShILGdlKX0KICAgICAgICB9CiAgICAgIGApLEs9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHtnZX1dID0gJHtIfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtIfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7a30pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOiQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7SH1fcHJlc2VudCA9ICR7a307CiAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7SShILGdlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0h9X3ByZXNlbnQgJiYgISR7SH0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7Z2V9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7SH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuICQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksJC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksJC5jb21waWxlKCl9O2xldCBhO2NvbnN0IGk9YnQsdT0hZGUuaml0bGVzcyxkPXUmJm5sLnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgYjtlLl96b2QucGFyc2U9KHYsXyk9PntiPz8oYj1vLnZhbHVlKTtjb25zdCB3PXYudmFsdWU7cmV0dXJuIGkodyk/dSYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGF8fChhPXModC5zaGFwZSkpLHY9YSh2LF8pLG0/U3AoW10sdyx2LF8sYixlLF8/LmFib3J0RWFybHk9PT0hMCk6dik6bih2LF8pOih2Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OncsaW5zdDplfSksdil9fSk7ZnVuY3Rpb24gdXUoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFmZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGE9PnplKGEsbyxuZSgpKSkpfSksdCl9Y29uc3QgcnI9cCgiJFpvZFVuaW9uIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIik/ImRlZmF1bHRlZCI6by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbiE9PXZvaWQgMCk/Im9wdGlvbmFsIjp2b2lkIDApLE8oZSwib3B0b3V0IixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpPyJvcHRpb25hbCI6dm9pZCAwKSxPKGUsInZhbHVlcyIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnZhbHVlcykpcmV0dXJuIG5ldyBTZXQoby5kZWYub3B0aW9ucy5mbGF0TWFwKHI9PkFycmF5LmZyb20oci5fem9kLnZhbHVlcykpKX0pLE8oZSwicGF0dGVybiIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnBhdHRlcm4pKXtjb25zdCByPW8uZGVmLm9wdGlvbnMubWFwKHM9PnMuX3pvZC5wYXR0ZXJuKTtyZXR1cm4gbmV3IFJlZ0V4cChgXigke3IubWFwKHM9PkJlKHMuc291cmNlKSkuam9pbigifCIpfSkkYCl9fSk7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgaSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaCh1KSxzPSEwO2Vsc2V7aWYodS5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdTthLnB1c2godSl9fXJldHVybiBzP1Byb21pc2UuYWxsKGEpLnRoZW4oaT0+dXUoaSxvLGUscikpOnV1KGEsbyxlLHIpfX0pO2Z1bmN0aW9uIGx1KGUsdCxuLG8pe2NvbnN0IHI9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspZVtzXS5pc3N1ZXMubGVuZ3RoPT09MCYmci5wdXNoKHMpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9ZVtyWzBdXS52YWx1ZSx0KTooci5sZW5ndGg9PT0wP3QuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoYT0+emUoYSxvLG5lKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0IElwPXAoIiRab2RYb3IiLChlLHQpPT57cnIuaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgdC5vcHRpb25zKXtjb25zdCB1PWkuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTt1IGluc3RhbmNlb2YgUHJvbWlzZT8oYS5wdXNoKHUpLHM9ITApOmEucHVzaCh1KX1yZXR1cm4gcz9Qcm9taXNlLmFsbChhKS50aGVuKGk9Pmx1KGksbyxlLHIpKTpsdShhLG8sZSxyKX19KTtmdW5jdGlvbiBnaShlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89UHAobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHAoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCB4cD1wKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLHJyLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTtPKGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBhPTA7Zm9yKGNvbnN0IGkgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgdT1pLl96b2QucHJvcFZhbHVlcztpZighdXx8T2JqZWN0LmtleXModSkubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGkpfSJgKTt1W3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmYSsrO2Zvcihjb25zdFtsLGRdb2YgT2JqZWN0LmVudHJpZXModSkpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGwpfHxjdChzLGwsbmV3IFNldCk7Zm9yKGNvbnN0IG0gb2YgZClzW2xdLmFkZChtKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmE+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgYT1CbyhyLl96b2QuZGVmKTtpZihhJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPWRuKCgpPT5QcCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO2lmKCFidChhKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDphLGluc3Q6ZX0pLHI7Y29uc3QgaT1hPy5bdC5kaXNjcmltaW5hdG9yXSx1PW8udmFsdWUuZ2V0KGkpO3JldHVybiB1JiYoaSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT91Ll96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIobD0+by52YWx1ZS5nZXQobCkhPT1udWxsKSxpbnB1dDphLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksQ3A9cCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxhPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGEgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGFdKS50aGVuKChbdSxsXSk9PmR1KG4sdSxsKSk6ZHUobixzLGEpfX0pO2Z1bmN0aW9uIEFvKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoVmUoZSkmJlZlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBhPUFvKGVbc10sdFtzXSk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWEuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxhPUFvKHIscyk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goYS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uIGR1KGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGE9KGwsZCk9PntsZXQgbTtpZihsLmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhbC5wYXRoPy5sZW5ndGgpcj8/KHI9bCksbT1sLmtleXM7ZWxzZSBpZihsLmNvZGU9PT0iaW52YWxpZF9rZXkiJiZsLm9yaWdpbj09PSJyZWNvcmQiJiZsLnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGI9U3RyaW5nKGwucGF0aFswXSk7cy5oYXMoYil8fHMuc2V0KGIsbCksbT1bYl19ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgYiBvZiBtKW8uaGFzKGIpfHxvLnNldChiLHt9KSxvLmdldChiKVtkXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IGwgb2YgdC5pc3N1ZXMpYShsLCJsIil8fGUuaXNzdWVzLnB1c2gobCk7Zm9yKGNvbnN0IGwgb2Ygbi5pc3N1ZXMpYShsLCJyIil8fGUuaXNzdWVzLnB1c2gobCk7Y29uc3QgaT1bLi4ub10uZmlsdGVyKChbLGxdKT0+bC5sJiZsLnIpLm1hcCgoW2xdKT0+bCk7aWYoaS5sZW5ndGgpe2NvbnN0IGw9cj9pLmZpbHRlcihkPT5yLmtleXMuaW5jbHVkZXMoZCkpOltdO2wubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6bH0pO2Zvcihjb25zdCBkIG9mIGkpIWwuaW5jbHVkZXMoZCkmJnMuaGFzKGQpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGQpKX1jb25zdCB1PUFvKHQudmFsdWUsbi52YWx1ZSk7aWYoIXUudmFsaWQpe2lmKGZlKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkodS5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9dS5kYXRhLGV9Y29uc3QgYmk9cCgiJFpvZFR1cGxlIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPWRlLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBhPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmEsaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGk9W10sdT1wdShuLCJvcHRpbiIpLGw9cHUobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoYS5sZW5ndGg8dSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnUsaW5jbHVzaXZlOiEwLGlucHV0OmEsaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjthLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6YSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBkPW5ldyBBcnJheShuLmxlbmd0aCksbT10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGI9ITE7Zm9yKGxldCB2PTA7djxuLmxlbmd0aDt2Kyspe2NvbnN0IF89blt2XS5fem9kLnJ1bih7dmFsdWU6YVt2XSxpc3N1ZXM6W119LHMpO18gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChfLnRoZW4odz0+e2Rbdl09d30pKTooZFt2XT1fLG0mJiFiJiZfLmlzc3Vlcy5sZW5ndGgmJihiPWZlKF8pKSl9aWYodC5yZXN0JiYhYil7bGV0IHY9bi5sZW5ndGgtMTtjb25zdCBfPWEuc2xpY2Uobi5sZW5ndGgpO2xldCB3PXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBfKXtpZihtJiZyLmlzc3Vlcy5sZW5ndGghPT13KXtpZihmZShyLHcpKWJyZWFrO3c9ci5pc3N1ZXMubGVuZ3RofXYrKztjb25zdCBOPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO04gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChOLnRoZW4oST0+aHUoSSxyLHYpKSk6aHUoTixyLHYpfX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+ZnUoZCxyLG4sYSxsKSk6ZnUoZCxyLG4sYSxsKX19KTtmdW5jdGlvbiBwdShlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIGh1KGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ud2UobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBmdShlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBhPWVbc10saT1zPG8ubGVuZ3RoO2lmKCFpJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGEuaXNzdWVzLmxlbmd0aCl7aWYoIWkmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi53ZShzLGEuaXNzdWVzKSl9dC52YWx1ZVtzXT1hLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IEVwPXAoIiRab2RSZWNvcmQiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFWZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgYT1bXSxpPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihpJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgdT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGkpaWYodHlwZW9mIGQ9PSJzdHJpbmcifHx0eXBlb2YgZD09Im51bWJlciJ8fHR5cGVvZiBkPT0ic3ltYm9sIil7aWYodS5hZGQodHlwZW9mIGQ9PSJudW1iZXIiP2QudG9TdHJpbmcoKTpkKSxkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgbT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTtpZihtIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihtLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOm0uaXNzdWVzLm1hcChfPT56ZShfLHIsbmUoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1tLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLndlKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi53ZShkLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1sZXQgbDtmb3IoY29uc3QgZCBpbiBzKWlmKCF1LmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgbD1sPz9bXSxsLnB1c2goZCk7bCYmbC5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6bCxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCB1O2Zvcihjb25zdCBsIG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYobD09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsbCkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIGw9PSJzdHJpbmciJiZuci50ZXN0KGwpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIobCksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVtsXT1zW2xdOmk/KHU9dT8/W10sdS5wdXNoKGwpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+emUoXyxyLG5lKCkpKSxpbnB1dDpsLHBhdGg6W2xdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9ZC52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tsXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh2LnRoZW4oXz0+e18uaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi53ZShsLF8uaXNzdWVzKSksby52YWx1ZVtiXT1fLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ud2UobCx2Lmlzc3VlcykpLG8udmFsdWVbYl09di52YWx1ZSl9dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5vKTpvfX0pLEFwPXAoIiRab2RNYXAiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJtYXAiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGE9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBNYXAscik6bmV3IE1hcDtjb25zdCBpPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdFtsLGRdb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpLGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTttIGluc3RhbmNlb2YgUHJvbWlzZXx8YiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFByb21pc2UuYWxsKFttLGJdKS50aGVuKChbdixfXSk9PnttdSh2LF8sbyxsLHMsZSxyKX0pKTptdShtLGIsbyxsLHMsZSxyKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBtdShlLHQsbixvLHIscyxhKXtlLmlzc3Vlcy5sZW5ndGgmJihQby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ud2UobyxlLmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46Im1hcCIsaW5wdXQ6cixpbnN0OnMsaXNzdWVzOmUuaXNzdWVzLm1hcChpPT56ZShpLGEsbmUoKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFBvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi53ZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChpPT56ZShpLGEsbmUoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgT3A9cCgiJFpvZFNldCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgYT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGk9cj8uYWJvcnRFYXJseTtsZXQgdT1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IGwgb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYoZmUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKGQudGhlbihtPT5ndShtLG8pKSk6Z3UoZCxvKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBndShlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgUnA9cCgiJFpvZEVudW0iLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1fcyh0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sTyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1fcyhyLmRlZi5lbnRyaWVzKS5maWx0ZXIoYT0+UG8uaGFzKHR5cGVvZiBhKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChhPT5OZShhLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO3JldHVybiBvLmhhcyhhKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6YSxpbnN0OmV9KSxyfX0pLFpwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLE8oZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP05lKHMpOnM/TmUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLE5wPXAoIiRab2RGaWxlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxqcD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLGRlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IEdvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGE9PihuLnZhbHVlPWEsbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBGZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gYnUoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCB2aT1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsTyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLE8oZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7QmUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5idShuLHMpKTpidShuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLE1wPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e3ZpLmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLHFwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtCZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksRHA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+dnUocyx0KSk6dnUocix0KX19KTtmdW5jdGlvbiB2dShlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBMcD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksVXA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT55dShzLGUpKTp5dShyLGUpfX0pO2Z1bmN0aW9uIHl1KGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBCcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IEdvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBfdShlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PnplKHIsbyxuZSgpKSl9LGlucHV0OmUudmFsdWV9KSxlKTooZS52YWx1ZT10LnZhbHVlLHQubWVtbyYmKGUubWVtbz0hMCksZSl9Y29uc3QgRnA9cCgiJFpvZENhdGNoIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pl91KG4scyx0LG8pKTpfdShuLHIsdCxvKX19KSxIcD1wKCIkWm9kTmFOIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KCh0eXBlb2Ygbi52YWx1ZSE9Im51bWJlciJ8fCFOdW1iZXIuaXNOYU4obi52YWx1ZSkpJiZuLmlzc3Vlcy5wdXNoKHtpbnB1dDpuLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoibmFuIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbil9KSx5aT1wKCIkWm9kUGlwZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLE8oZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLE8oZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PmdvKGEsdC5pbixvKSk6Z28ocyx0LmluLG8pfWNvbnN0IHI9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+Z28ocyx0Lm91dCxvKSk6Z28ocix0Lm91dCxvKX19KTtmdW5jdGlvbiBnbyhlLHQsbil7cmV0dXJuIGUuaXNzdWVzLnNvbWUobz0+by5jb2RlIT09InVucmVjb2duaXplZF9rZXlzIik/KGUuYWJvcnRlZD0hMCxlKTp0Ll96b2QucnVuKHt2YWx1ZTplLnZhbHVlLGlzc3VlczplLmlzc3Vlc30sbil9Y29uc3QgX2k9cCgiJFpvZENvZGVjIiwoZSx0KT0+e3guaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKChvLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcz10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT5ibyhhLHQsbykpOmJvKHMsdCxvKX1lbHNle2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PmJvKGEsdCxvKSk6Ym8ocyx0LG8pfX19KTtmdW5jdGlvbiBibyhlLHQsbil7aWYoZS5pc3N1ZXMubGVuZ3RoKXJldHVybiBlLmFib3J0ZWQ9ITAsZTtpZigobi5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHI9dC50cmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnZvKGUscyx0Lm91dCxuKSk6dm8oZSxyLHQub3V0LG4pfWVsc2V7Y29uc3Qgcj10LnJldmVyc2VUcmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnZvKGUscyx0LmluLG4pKTp2byhlLHIsdC5pbixuKX19ZnVuY3Rpb24gdm8oZSx0LG4sbyl7cmV0dXJuIGUuaXNzdWVzLmxlbmd0aD8oZS5hYm9ydGVkPSEwLGUpOm4uX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOmUuaXNzdWVzfSxvKX1jb25zdCBWcD1wKCIkWm9kUHJlcHJvY2VzcyIsKGUsdCk9Pnt5aS5pbml0KGUsdCl9KSxKcD1wKCIkWm9kUmVhZG9ubHkiLChlLHQpPT57eC5pbml0KGUsdCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKSxPKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihrdSk6a3Uocil9fSk7ZnVuY3Rpb24ga3UoZSl7cmV0dXJuIGUubWVtb3x8KGUudmFsdWU9T2JqZWN0LmZyZWV6ZShlLnZhbHVlKSksZX1mdW5jdGlvbiBfZyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7bGV0IG49dC5wYXR0ZXJuLG89ISF0LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLHIscztmb3IoY29uc3QgaSBvZiB0LmNoZWNrcz8/W10pe2NvbnN0IHU9aS5fem9kLmRlZjt1LnBhdHRlcm4mJihuPXUucGF0dGVybiksb3x8KG89ISF1LmZvcm1hdD8uaW5jbHVkZXMoImludCIpKTtjb25zdCBsPXUubWluaW11bT8/dS5sZW5ndGgsZD11Lm1heGltdW0/P3UubGVuZ3RoO2whPT12b2lkIDAmJihyPT09dm9pZCAwfHxsPnIpJiYocj1sKSxkIT09dm9pZCAwJiYocz09PXZvaWQgMHx8ZDxzKSYmKHM9ZCl9aWYobilyZXR1cm4gbi5zb3VyY2U7aWYociE9PXZvaWQgMCYmcyE9PXZvaWQgMCYmcj5zKXJldHVybiIoPyEpIjtpZihyIT09dm9pZCAwfHxzIT09dm9pZCAwKXJldHVybiBZbCh7bWluaW11bTpyLG1heGltdW06c30pLnNvdXJjZTtjb25zdCBhPWUuX3pvZC5wYXR0ZXJuO3JldHVybihvJiZhPT09bnI/ZWQ6YSk/LnNvdXJjZX1mdW5jdGlvbiBQcyhlKXtjb25zdCB0PWUuX3pvZC5kZWYsbj1lLl96b2QucGF0dGVybj8uc291cmNlLG89dC5pbm5lclR5cGU/P2UuX3pvZC5pbm5lclR5cGU7aWYobyl7Y29uc3Qgcj1vLl96b2QucGF0dGVybj8uc291cmNlLHM9UHMobyk7cmV0dXJuIG4mJnImJnMmJnMhPT1yP24ucmVwbGFjZShCZShyKSwoKT0+QmUocykpOm59aWYodC5vcHRpb25zKXtjb25zdCByPXQub3B0aW9ucy5tYXAoUHMpO2lmKHIuZXZlcnkoQm9vbGVhbikpcmV0dXJuYF4oJHtyLm1hcChzPT5CZShzKSkuam9pbigifCIpfSkkYH1yZXR1cm4gX2coZSl9Y29uc3QgS3A9cCgiJFpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQucGFydHMpaWYodHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCl7Y29uc3Qgcj1QcyhvKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5vLl96b2QudHJhaXRzXS5zaGlmdCgpfWApO24ucHVzaChCZShyKSl9ZWxzZSBpZihvPT09bnVsbHx8b2wuaGFzKHR5cGVvZiBvKSluLnB1c2goTmUoYCR7b31gKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke299YCk7ZS5fem9kLnBhdHRlcm49bmV3IFJlZ0V4cChgXiR7bi5qb2luKCIiKX0kYCksZS5fem9kLnBhcnNlPShvLHIpPT50eXBlb2Ygby52YWx1ZSE9InN0cmluZyI/KG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvKTooZS5fem9kLnBhdHRlcm4ubGFzdEluZGV4PTAsZS5fem9kLnBhdHRlcm4udGVzdChvLnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdD8/InRlbXBsYXRlX2xpdGVyYWwiLHBhdHRlcm46ZS5fem9kLnBhdHRlcm4uc291cmNlfSksbyl9KSxXcD1wKCIkWm9kRnVuY3Rpb24iLChlLHQpPT4oeC5pbml0KGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9kZWYiLHt2YWx1ZTp0fSksZS5fem9kLmRlZj10LGUuaW1wbGVtZW50PW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/U3MoZS5fZGVmLmlucHV0LG8pOm8scz1SZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9TcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5pbXBsZW1lbnRBc3luYz1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmMgZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/YXdhaXQgenMoZS5fZGVmLmlucHV0LG8pOm8scz1hd2FpdCBSZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9hd2FpdCB6cyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5fem9kLnBhcnNlPShuLG8pPT50eXBlb2Ygbi52YWx1ZSE9ImZ1bmN0aW9uIj8obi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoiZnVuY3Rpb24iLGlucHV0Om4udmFsdWUsaW5zdDplfSksbik6KGUuX2RlZi5vdXRwdXQmJmUuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZT09PSJwcm9taXNlIj9uLnZhbHVlPWUuaW1wbGVtZW50QXN5bmMobi52YWx1ZSk6bi52YWx1ZT1lLmltcGxlbWVudChuLnZhbHVlKSxuKSxlLmlucHV0PSguLi5uKT0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuWzBdKT9uZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5ldyBiaSh7dHlwZToidHVwbGUiLGl0ZW1zOm5bMF0scmVzdDpuWzFdfSksb3V0cHV0OmUuX2RlZi5vdXRwdXR9KTpuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5bMF0sb3V0cHV0OmUuX2RlZi5vdXRwdXR9KX0sZS5vdXRwdXQ9bj0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDplLl9kZWYuaW5wdXQsb3V0cHV0Om59KX0sZSkpLEdwPXAoIiRab2RQcm9taXNlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUpLnRoZW4ocj0+dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSl9KSxraT1wKCIkWm9kTGF6eSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxRdShlLl96b2QsImlubmVyVHlwZSIsKCk9Pntjb25zdCBuPXQ7cmV0dXJuIG4uX2NhY2hlZElubmVyfHwobi5fY2FjaGVkSW5uZXI9dC5nZXR0ZXIoKSksbi5fY2FjaGVkSW5uZXJ9KSxPKGUsInBhdHRlcm4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKSxPKGUsInByb3BWYWx1ZXMiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4/P3ZvaWQgMCksTyhlLCJvcHRvdXQiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQ/P3ZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5lLl96b2QuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxRcD1wKCIkWm9kQ3VzdG9tIiwoZSx0KT0+e1cuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+bixlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89bi52YWx1ZSxyPXQuZm4obyk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHIudGhlbihzPT53dShzLG4sbyxlKSk7d3UocixuLG8sZSl9fSk7ZnVuY3Rpb24gd3UoZSx0LG4sbyl7aWYoIWUpe2NvbnN0IHI9e2NvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om8scGF0aDpbLi4uby5fem9kLmRlZi5wYXRoPz9bXV0sY29udGludWU6IW8uX3pvZC5kZWYuYWJvcnR9O28uX3pvZC5kZWYucGFyYW1zJiYoci5wYXJhbXM9by5fem9kLmRlZi5wYXJhbXMpLHQuaXNzdWVzLnB1c2godnQocikpfX1jbGFzcyBZcCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwYXJzZSBhIHJlZmVyZW5jZSBjeWNsZSB0aGF0IGNsb3NlcyB0aHJvdWdoIGEgdHJhbnNmb3JtIiksdGhpcy5uYW1lPSJab2RDeWNsaWNFcnJvciJ9fWNvbnN0IHhzPSJ+bWVtbyIsJHU9W107ZnVuY3Rpb24gWHAoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCJ9ZnVuY3Rpb24gZ3MoZSl7cmV0dXJuIGUubWFwKHQ9PnQucGF0aD97Li4udCxwYXRoOnQucGF0aC5zbGljZSgpfTp7Li4udH0pfWNvbnN0IGVoPW5ldyBXZWFrTWFwLGh0PTAsJG89MSxXdD0yO2Z1bmN0aW9uIEd0KGUsdCxuKXtjb25zdCBvPWVoLmdldChlKTtpZihvIT09dm9pZCAwKXJldHVybiBvP1d0Omh0O2lmKHQuaGFzKGUpKXJldHVybiBXdDt0LmFkZChlKTtsZXQgcj1odDtjb25zdCBzPWQ9PntpZihyIT09V3QmJmQ/Ll96b2Qpe2NvbnN0IG09R3QoZCx0LG4pO20+ciYmKHI9bSl9fSxhPShkLG0pPT57bGV0IGI9aHQ7Zm9yKGNvbnN0IHYgb2YgUmVmbGVjdC5vd25LZXlzKGQpKXtjb25zdCBfPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx2KTtpZighXy5lbnVtZXJhYmxlKWNvbnRpbnVlO2NvbnN0IHc9Xy5nZXQ/JG86Xy52YWx1ZT8uX3pvZD9HdChfLnZhbHVlLHQsbik6aHQ7dz5iJiYoYj13KX1yZXR1cm4gYn0saT1kPT57ZD5yJiYocj1kKX0sdT1lLl96b2QuZGVmO3N3aXRjaCh1LnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgZD1Cbyh1KTtpKGQ/YShkKTokbykscyh1LmNhdGNoYWxsKTticmVha31jYXNlImFycmF5IjpzKHUuZWxlbWVudCk7YnJlYWs7Y2FzZSJ0dXBsZSI6Zm9yKGNvbnN0IGQgb2YgdS5pdGVtcylzKGQpO3ModS5yZXN0KTticmVhaztjYXNlInJlY29yZCI6Y2FzZSJtYXAiOnModS5rZXlUeXBlKSxzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInNldCI6cyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJ1bmlvbiI6Zm9yKGNvbnN0IGQgb2YgdS5vcHRpb25zKXMoZCk7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOnModS5sZWZ0KSxzKHUucmlnaHQpO2JyZWFrO2Nhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOnModS5pbm5lclR5cGUpO2JyZWFrO2Nhc2UicGlwZSI6cyh1LmluKSxzKHUub3V0KTticmVhaztjYXNlImZ1bmN0aW9uIjpzKHUuaW5wdXQpLHModS5vdXRwdXQpO2JyZWFrO2Nhc2UibGF6eSI6e2NvbnN0IGQ9dS5fY2FjaGVkSW5uZXI/PyhuP2UuX3pvZC5pbm5lclR5cGU6dm9pZCAwKTtpKGQ/R3QoZCx0LCExKTokbyk7YnJlYWt9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6Zm9yKGNvbnN0IGQgaW4gdSl7Y29uc3QgbT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsZCk7aWYoIW18fG0uZ2V0KWNvbnRpbnVlO2NvbnN0IGI9bS52YWx1ZTtpZighKCFifHx0eXBlb2YgYiE9Im9iamVjdCIpKXtpZihiLl96b2QpcyhiKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYikpZm9yKGNvbnN0IHYgb2YgYilzKHYpfX19cmV0dXJuIHQuZGVsZXRlKGUpLGtnKGUscil9ZnVuY3Rpb24ga2coZSx0KXtyZXR1cm4gdCE9PSRvJiZlaC5zZXQoZSx0PT09V3QpLHR9ZnVuY3Rpb24gd2coZSl7cmV0dXJuIEd0KGUsbmV3IFNldCwhMCkhPT1odH1mdW5jdGlvbiAkZyhlLHQpe2xldCBuPWUuYnVja2V0cy5nZXQodCk7cmV0dXJuIG58fChuPW5ldyBXZWFrTWFwLGUuYnVja2V0cy5zZXQodCxuKSksbn1sZXQgeW87Y29uc3QgX289W10sU2c9e2FsbG9jKGUsdCxuKXtjb25zdCBvPXlvO2lmKCFvKXJldHVybiBuO3lvPXZvaWQgMDtjb25zdCByPXt2YWx1ZTpuLGlzc3VlczpudWxsfTtyZXR1cm4gby5zZXQodC52YWx1ZSxyKSxfby5wdXNoKHIpLG59LGd1YXJkKGUpe3ZhciB0Oyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IG49ZS5fem9kLnBhcnNlLG89KHIscyk9PntpZihzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCImJnRoKHMsci52YWx1ZSkpdGhyb3cgbmV3IFlwO3JldHVybiBuKHIscyl9O2UuX3pvZC5wYXJzZT1vLGUuX3pvZC5ydW49PT1uJiYoZS5fem9kLnJ1bj1vKX0pfSxhdHRhY2goZSl7dmFyIHQ7bGV0IG4sbz0hMSxyLHM7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3QgYT1lLl96b2QucGFyc2UsaT0odSxsKT0+e2lmKG49PT12b2lkIDApe2NvbnN0IE49R3QoZSxuZXcgU2V0LCExKTtpZihOPT09aHQpcmV0dXJuIGUuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKSxhKHUsbCk7Tj09PVd0fHxvP249ITA6bz0hMH1jb25zdCBkPXUudmFsdWU7aWYoIVhwKGQpKXJldHVybiBhKHUsbCk7bGV0IG09bFt4c107bXx8KG09e2J1Y2tldHM6bmV3IFdlYWtNYXAsYmFja0VkZ2VzOnZvaWQgMH0sbFt4c109bSk7bGV0IGI7cj09PWw/Yj1zOihiPSRnKG0sZSkscj1sLHM9Yik7Y29uc3Qgdj1iLmdldChkKTtpZih2KXJldHVybiB1LnZhbHVlPXYudmFsdWUsdi5pc3N1ZXM/di5pc3N1ZXMubGVuZ3RoJiZ1Lmlzc3Vlcy5wdXNoKC4uLmdzKHYuaXNzdWVzKSk6KHUubWVtbz0hMCxtLmJhY2tFZGdlcz8/KG0uYmFja0VkZ2VzPW5ldyBXZWFrU2V0KSxtLmJhY2tFZGdlcy5hZGQodi52YWx1ZSkpLHU7eW89Yjtjb25zdCBfPV9vLmxlbmd0aCx3PWEodSxsKTt5bz12b2lkIDA7Y29uc3QgJD1fby5sZW5ndGg+Xz9fby5wb3AoKTp2b2lkIDA7cmV0dXJuIHcgaW5zdGFuY2VvZiBQcm9taXNlP3cudGhlbihOPT4oJCYmKCQuaXNzdWVzPU4uaXNzdWVzLmxlbmd0aD9ncyhOLmlzc3Vlcyk6JHUpLE4pKTooJCYmKCQuaXNzdWVzPXcuaXNzdWVzLmxlbmd0aD9ncyh3Lmlzc3Vlcyk6JHUpLHcpfTtlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSl9KX19O2Z1bmN0aW9uIHNyKCl7cmV0dXJuIFNnfWZ1bmN0aW9uIHRoKGUsdCl7Y29uc3Qgbj1lW3hzXT8uYmFja0VkZ2VzO3JldHVybiBuIT09dm9pZCAwJiZYcCh0KSYmbi5oYXModCl9Y29uc3Qgemc9KCk9Pntjb25zdCBlPXtzdHJpbmc6e3VuaXQ6ImNoYXJhY3RlcnMiLHZlcmI6InRvIGhhdmUifSxmaWxlOnt1bml0OiJieXRlcyIsdmVyYjoidG8gaGF2ZSJ9LGFycmF5Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LHNldDp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxtYXA6e3VuaXQ6ImVudHJpZXMiLHZlcmI6InRvIGhhdmUifX07ZnVuY3Rpb24gdChzKXtyZXR1cm4gZVtzXT8/bnVsbH1jb25zdCBuPXtyZWdleDoiaW5wdXQiLGVtYWlsOiJlbWFpbCBhZGRyZXNzIix1cmw6IlVSTCIsZW1vamk6ImVtb2ppIix1dWlkOiJVVUlEIix1dWlkdjQ6IlVVSUR2NCIsdXVpZHY2OiJVVUlEdjYiLG5hbm9pZDoibmFub2lkIixndWlkOiJHVUlEIixjdWlkOiJjdWlkIixjdWlkMjoiY3VpZDIiLHVsaWQ6IlVMSUQiLHhpZDoiWElEIixrc3VpZDoiS1NVSUQiLGRhdGV0aW1lOiJJU08gZGF0ZXRpbWUiLGRhdGU6IklTTyBkYXRlIix0aW1lOiJJU08gdGltZSIsZHVyYXRpb246IklTTyBkdXJhdGlvbiIsaXB2NDoiSVB2NCBhZGRyZXNzIixpcHY2OiJJUHY2IGFkZHJlc3MiLG1hYzoiTUFDIGFkZHJlc3MiLGNpZHJ2NDoiSVB2NCByYW5nZSIsY2lkcnY2OiJJUHY2IHJhbmdlIixiYXNlNjQ6ImJhc2U2NC1lbmNvZGVkIHN0cmluZyIsYmFzZTY0dXJsOiJiYXNlNjR1cmwtZW5jb2RlZCBzdHJpbmciLGpzb25fc3RyaW5nOiJKU09OIHN0cmluZyIsZTE2NDoiRS4xNjQgbnVtYmVyIixjdXJyZW5jeV9jb2RlOiJjdXJyZW5jeSBjb2RlIixjcmVkaXRfY2FyZDoiY3JlZGl0IGNhcmQgbnVtYmVyIixpYmFuOiJJQkFOIixqd3Q6IkpXVCIsdGVtcGxhdGVfbGl0ZXJhbDoiaW5wdXQifSxvPXtuYW46Ik5hTiJ9O2Z1bmN0aW9uIHIocyxhKXtyZXR1cm4gcz09PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJiFOdW1iZXIuaXNGaW5pdGUoYSk/U3RyaW5nKGEpOm9bc10/P3N9cmV0dXJuIHM9Pntzd2l0Y2gocy5jb2RlKXtjYXNlImludmFsaWRfdHlwZSI6e2NvbnN0IGE9cihzLmV4cGVjdGVkKSxpPW1sKHMuaW5wdXQpLHU9cihpLHMuaW5wdXQpO3JldHVybmBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke2F9LCByZWNlaXZlZCAke3V9YH1jYXNlImludmFsaWRfdmFsdWUiOnJldHVybiBzLnZhbHVlcy5sZW5ndGg9PT0xP2BJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke3FzKHMudmFsdWVzWzBdKX1gOmBJbnZhbGlkIG9wdGlvbjogZXhwZWN0ZWQgb25lIG9mICR7a3Mocy52YWx1ZXMsInwiKX1gO2Nhc2UidG9vX2JpZyI6e2NvbnN0IGE9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI8PSI6IjwiLGk9dChzLm9yaWdpbik7cmV0dXJuIGk/YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGhhdmUgJHthfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0Pz8iZWxlbWVudHMifWA6YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGJlICR7YX0ke3MubWF4aW11bS50b1N0cmluZygpfWB9Y2FzZSJ0b29fc21hbGwiOntjb25zdCBhPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPj0iOiI+IixpPXQocy5vcmlnaW4pO3JldHVybiBpP2BUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGhhdmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0fWA6YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gYmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9YH1jYXNlImludmFsaWRfZm9ybWF0Ijp7Y29uc3QgYT1zO3JldHVybiBhLmZvcm1hdD09PSJzdGFydHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IHN0YXJ0IHdpdGggIiR7YS5wcmVmaXh9ImA6YS5mb3JtYXQ9PT0iZW5kc193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggIiR7YS5zdWZmaXh9ImA6YS5mb3JtYXQ9PT0iaW5jbHVkZXMiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBpbmNsdWRlICIke2EuaW5jbHVkZXN9ImA6YS5mb3JtYXQ9PT0icmVnZXgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7YS5wYXR0ZXJufWA6YEludmFsaWQgJHtuW2EuZm9ybWF0XT8/cy5mb3JtYXR9YH1jYXNlIm5vdF9tdWx0aXBsZV9vZiI6cmV0dXJuYEludmFsaWQgbnVtYmVyOiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtzLmRpdmlzb3J9YDtjYXNlInVucmVjb2duaXplZF9rZXlzIjpyZXR1cm5gVW5yZWNvZ25pemVkIGtleSR7cy5rZXlzLmxlbmd0aD4xPyJzIjoiIn06ICR7a3Mocy5rZXlzLCIsICIpfWA7Y2FzZSJpbnZhbGlkX2tleSI6cmV0dXJuYEludmFsaWQga2V5IGluICR7cy5vcmlnaW59YDtjYXNlImludmFsaWRfdW5pb24iOnJldHVybiBzLm9wdGlvbnMmJkFycmF5LmlzQXJyYXkocy5vcHRpb25zKSYmcy5vcHRpb25zLmxlbmd0aD4wP2BJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7cy5vcHRpb25zLm1hcChpPT5gJyR7aX0nYCkuam9pbigiIHwgIil9YDpzLmluY2x1c2l2ZT09PSExPyJJbnZhbGlkIGlucHV0OiBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVkIjoiSW52YWxpZCBpbnB1dCI7Y2FzZSJpbnZhbGlkX2VsZW1lbnQiOnJldHVybmBJbnZhbGlkIHZhbHVlIGluICR7cy5vcmlnaW59YDtkZWZhdWx0OnJldHVybiJJbnZhbGlkIGlucHV0In19fTtmdW5jdGlvbiBuaCgpe3JldHVybntsb2NhbGVFcnJvcjp6ZygpfX1jb25zdCB3aT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW46bmh9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFN1O2NvbnN0ICRpPVN5bWJvbCgiWm9kT3V0cHV0IiksU2k9U3ltYm9sKCJab2RJbnB1dCIpO2NsYXNzIG9oe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXB9YWRkKHQsLi4ubil7Y29uc3Qgbz1uWzBdO3JldHVybiB0aGlzLl9tYXAuc2V0KHQsbyksbyYmdHlwZW9mIG89PSJvYmplY3QiJiYiaWQiaW4gbyYmdGhpcy5faWRtYXAuc2V0KG8uaWQsdCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcCx0aGlzfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIG4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmImlkImluIG4mJnRoaXMuX2lkbWFwLmRlbGV0ZShuLmlkKSx0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXN9Z2V0KHQpe2NvbnN0IG49dC5fem9kLnBhcmVudDtpZihuKXtjb25zdCBvPXsuLi50aGlzLmdldChuKT8/e319O2RlbGV0ZSBvLmlkO2NvbnN0IHI9ey4uLm8sLi4udGhpcy5fbWFwLmdldCh0KX07cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD9yOnZvaWQgMH1yZXR1cm4gdGhpcy5fbWFwLmdldCh0KX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9fWZ1bmN0aW9uIGlyKCl7cmV0dXJuIG5ldyBvaH0oU3U9Z2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnk/PyhTdS5fX3pvZF9nbG9iYWxSZWdpc3RyeT1pcigpKTtjb25zdCAkZT1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5LHppPSgpPT57dGhyb3cgbmV3IEVycm9yKCJ6b2QgY29tcGlsZSgpIGlzIG5vdCBidW5kbGVkIGludG8gY2FyZHMgLSBzZWUgcGFja2FnZXMvaW50ZXJuYWwvY2FyZC1raXQvdml0ZS1zbGltLm1qcyIpfTtjbGFzcyBUaSBleHRlbmRzIEVycm9ye31jbGFzcyBJaSBleHRlbmRzIEVycm9ye31jbGFzcyBQaSBleHRlbmRzIEVycm9ye31jb25zdCB4aT16aSxDaT16aSxUZz16aTtmdW5jdGlvbiBhcihlKXtyZXR1cm4gZS5jaGVja3MmJihlLmNoZWNrcz1bLi4uZS5jaGVja3NdKSxlfWZ1bmN0aW9uIHJoKGUsdCl7cmV0dXJuIG5ldyBlKGFyKHt0eXBlOiJzdHJpbmciLC4uLnkodCl9KSl9ZnVuY3Rpb24gc2goZSx0KXtyZXR1cm4gbmV3IGUoYXIoe3R5cGU6InN0cmluZyIsY29lcmNlOiEwLC4uLnkodCl9KSl9ZnVuY3Rpb24gRWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbWFpbCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBBaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imd1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gWmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjYiLC4uLnkodCl9KX1mdW5jdGlvbiBOaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NyIsLi4ueSh0KX0pfWZ1bmN0aW9uIGNyKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1vamkiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJuYW5vaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZDIiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1bGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoieGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoia3N1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gRmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBpaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im1hYyIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBWaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBKaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBLaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBXaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NHVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBHaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImUxNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gYWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBjaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImliYW4iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gUWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJqd3QiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9Y29uc3QgWWk9e0FueTpudWxsLE1pbnV0ZTotMSxTZWNvbmQ6MCxNaWxsaXNlY29uZDozLE1pY3Jvc2Vjb25kOjZ9O2Z1bmN0aW9uIFhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZXRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixvZmZzZXQ6ITEsbG9jYWw6ITEscHJlY2lzaW9uOm51bGwsLi4ueSh0KX0pfWZ1bmN0aW9uIGVhKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiB0YShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gbmEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkdXJhdGlvbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZShhcih7dHlwZToibnVtYmVyIixjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBsaChlLHQpe3JldHVybiBuZXcgZShhcih7dHlwZToibnVtYmVyIixjb2VyY2U6ITAsY2hlY2tzOltdLC4uLnkodCl9KSl9ZnVuY3Rpb24gZGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoic2FmZWludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHBoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBoaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gZmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBtaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBnaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGJoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIHZoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLC4uLnkodCl9KX1mdW5jdGlvbiB5aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50Iixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIF9oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24ga2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gd2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN5bWJvbCIsLi4ueSh0KX0pfWZ1bmN0aW9uICRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmRlZmluZWQiLC4uLnkodCl9KX1mdW5jdGlvbiBTaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHpoKGUpe3JldHVybiBuZXcgZSh7dHlwZToiYW55In0pfWZ1bmN0aW9uIFRoKGUpe3JldHVybiBuZXcgZSh7dHlwZToidW5rbm93biJ9KX1mdW5jdGlvbiBJaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmV2ZXIiLC4uLnkodCl9KX1mdW5jdGlvbiBQaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidm9pZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHhoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIiwuLi55KHQpfSl9ZnVuY3Rpb24gQ2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gRWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5hbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIG5ldyBzaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIHZlKGUsdCl7cmV0dXJuIG5ldyBzaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIHFlKGUsdCl7cmV0dXJuIG5ldyBpaSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIHllKGUsdCl7cmV0dXJuIG5ldyBpaSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIHVyKGUpe3JldHVybiBxZSgwLGUpfWZ1bmN0aW9uIGxyKGUpe3JldHVybiBNZSgwLGUpfWZ1bmN0aW9uIGRyKGUpe3JldHVybiB2ZSgwLGUpfWZ1bmN0aW9uIHByKGUpe3JldHVybiB5ZSgwLGUpfWZ1bmN0aW9uIHJ0KGUsdCl7cmV0dXJuIG5ldyBhZCh7Y2hlY2s6Im11bHRpcGxlX29mIiwuLi55KHQpLHZhbHVlOmV9KX1mdW5jdGlvbiB1dChlLHQpe3JldHVybiBuZXcgbGQoe2NoZWNrOiJtYXhfc2l6ZSIsLi4ueSh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBuZXcgZGQoe2NoZWNrOiJtaW5fc2l6ZSIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiB6dChlLHQpe3JldHVybiBuZXcgcGQoe2NoZWNrOiJzaXplX2VxdWFscyIsLi4ueSh0KSxzaXplOmV9KX1mdW5jdGlvbiBUdChlLHQpe3JldHVybiBuZXcgaGQoe2NoZWNrOiJtYXhfbGVuZ3RoIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEplKGUsdCl7cmV0dXJuIG5ldyBmZCh7Y2hlY2s6Im1pbl9sZW5ndGgiLC4uLnkodCksbWluaW11bTplfSl9ZnVuY3Rpb24gSXQoZSx0KXtyZXR1cm4gbmV3IG1kKHtjaGVjazoibGVuZ3RoX2VxdWFscyIsLi4ueSh0KSxsZW5ndGg6ZX0pfWZ1bmN0aW9uIGtuKGUsdCl7cmV0dXJuIG5ldyBnZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoicmVnZXgiLC4uLnkodCkscGF0dGVybjplfSl9ZnVuY3Rpb24gd24oZSl7cmV0dXJuIG5ldyBiZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoibG93ZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24gJG4oZSl7cmV0dXJuIG5ldyB2ZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoidXBwZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24gU24oZSx0KXtyZXR1cm4gbmV3IHlkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsLi4ueSh0KSxpbmNsdWRlczplfSl9ZnVuY3Rpb24gem4oZSx0KXtyZXR1cm4gbmV3IF9kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIsLi4ueSh0KSxwcmVmaXg6ZX0pfWZ1bmN0aW9uIFRuKGUsdCl7cmV0dXJuIG5ldyBrZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIiwuLi55KHQpLHN1ZmZpeDplfSl9ZnVuY3Rpb24gaHIoZSx0LG4pe3JldHVybiBuZXcgd2Qoe2NoZWNrOiJwcm9wZXJ0eSIscHJvcGVydHk6ZSxzY2hlbWE6dCwuLi55KG4pfSl9ZnVuY3Rpb24gSW4oZSx0KXtyZXR1cm4gbmV3ICRkKHtjaGVjazoicHJvcGVydGllcyIsc2hhcGU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm4gbmV3IFNkKHtjaGVjazoibWltZV90eXBlIixtaW1lOmUsLi4ueSh0KX0pfWZ1bmN0aW9uIE9lKGUpe3JldHVybiBuZXcgemQoe2NoZWNrOiJvdmVyd3JpdGUiLHR4OmV9KX1mdW5jdGlvbiB4bihlKXtyZXR1cm4gT2UodD0+dC5ub3JtYWxpemUoZSkpfWZ1bmN0aW9uIENuKCl7cmV0dXJuIE9lKGU9PmUudHJpbSgpKX1mdW5jdGlvbiBFbigpe3JldHVybiBPZShlPT5lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIEFuKCl7cmV0dXJuIE9lKGU9PmUudG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gT24oKXtyZXR1cm4gT2UoZT0+dGwoZSkpfWZ1bmN0aW9uIEFoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFycmF5IixlbGVtZW50OnQsLi4ueShuKX0pfWZ1bmN0aW9uIElnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsaW5jbHVzaXZlOiExLC4uLnkobil9KX1mdW5jdGlvbiB4ZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOm4sZGlzY3JpbWluYXRvcjp0LC4uLnkobyl9KX1mdW5jdGlvbiBDZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6dCxyaWdodDpufSl9ZnVuY3Rpb24gRWcoZSx0LG4sbyl7Y29uc3Qgcj1uIGluc3RhbmNlb2YgeCxzPXI/bzpuLGE9cj9uOm51bGw7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0dXBsZSIsaXRlbXM6dCxyZXN0OmEsLi4ueShzKX0pfWZ1bmN0aW9uIEFnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIE9nKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToibWFwIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIFJnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InNldCIsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFpnKGUsdCxuKXtjb25zdCBvPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHI9PltyLHJdKSk6dDtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6bywuLi55KG4pfSl9ZnVuY3Rpb24gTmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczp0LC4uLnkobil9KX1mdW5jdGlvbiBqZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheSh0KT90Olt0XSwuLi55KG4pfSl9ZnVuY3Rpb24gT2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImZpbGUiLC4uLnkodCl9KX1mdW5jdGlvbiBNZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06dH0pfWZ1bmN0aW9uIHFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBEZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gTGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOnQsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKCk6Rm8obil9fSl9ZnVuY3Rpb24gVWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBGZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOnQsY2F0Y2hWYWx1ZTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOkRzKG4pfSl9ZnVuY3Rpb24gSGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToicGlwZSIsaW46dCxvdXQ6bn0pfWZ1bmN0aW9uIFZnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBKZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czp0LC4uLnkobil9KX1mdW5jdGlvbiBLZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibGF6eSIsZ2V0dGVyOnR9KX1mdW5jdGlvbiBXZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBSaChlLHQsbil7Y29uc3Qgbz15KG4pO3JldHVybiBvLmFib3J0Pz8oby5hYm9ydD0hMCksbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5vfSl9ZnVuY3Rpb24gWmgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLnkobil9KX1mdW5jdGlvbiBOaChlLHQpe2NvbnN0IG49amgobz0+KG8uYWRkSXNzdWU9cj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIilvLmlzc3Vlcy5wdXNoKHZ0KHIsby52YWx1ZSxuLl96b2QuZGVmKSk7ZWxzZXtjb25zdCBzPXI7cy5mYXRhbCYmKHMuY29udGludWU9ITEpLHMuY29kZT8/KHMuY29kZT0iY3VzdG9tIiksImlucHV0ImluIHN8fChzLmlucHV0PW8udmFsdWUpLHMuaW5zdD8/KHMuaW5zdD1uKSxzLmNvbnRpbnVlPz8ocy5jb250aW51ZT0hbi5fem9kLmRlZi5hYm9ydCksby5pc3N1ZXMucHVzaCh2dChzKSl9fSxlKG8udmFsdWUsbykpLHQpO3JldHVybiBufWZ1bmN0aW9uIGpoKGUsdCl7Y29uc3Qgbj1uZXcgVyh7Y2hlY2s6ImN1c3RvbSIsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuY2hlY2s9ZSxufWZ1bmN0aW9uIE1oKGUpe2NvbnN0IHQ9bmV3IFcoe2NoZWNrOiJkZXNjcmliZSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz0kZS5nZXQobik/P3t9OyRlLmFkZChuLHsuLi5vLGRlc2NyaXB0aW9uOmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBxaChlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoibWV0YSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz0kZS5nZXQobik/P3t9OyRlLmFkZChuLHsuLi5vLC4uLmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBEaChlLHQpe2NvbnN0IG49eSh0KTtsZXQgbz1uLnRydXRoeT8/WyJ0cnVlIiwiMSIsInllcyIsIm9uIiwieSIsImVuYWJsZWQiXSxyPW4uZmFsc3k/P1siZmFsc2UiLCIwIiwibm8iLCJvZmYiLCJuIiwiZGlzYWJsZWQiXTtuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKG89by5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSxyPXIubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikpO2NvbnN0IHM9bmV3IFNldChvKSxhPW5ldyBTZXQociksaT1lLkNvZGVjPz9faSx1PWUuQm9vbGVhbj8/ZmksbD1lLlN0cmluZz8/X24sZD1uZXcgbCh7dHlwZToic3RyaW5nIixlcnJvcjpuLmVycm9yfSksbT1uZXcgdSh7dHlwZToiYm9vbGVhbiIsZXJyb3I6bi5lcnJvcn0pLGI9bmV3IGkoe3R5cGU6InBpcGUiLGluOmQsb3V0Om0sdHJhbnNmb3JtOigodixfKT0+e2xldCB3PXY7cmV0dXJuIG4uY2FzZSE9PSJzZW5zaXRpdmUiJiYodz13LnRvTG93ZXJDYXNlKCkpLHMuaGFzKHcpPyEwOmEuaGFzKHcpPyExOihfLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIixleHBlY3RlZDoic3RyaW5nYm9vbCIsdmFsdWVzOlsuLi5zLC4uLmFdLGlucHV0Ol8udmFsdWUsaW5zdDpiLGNvbnRpbnVlOiExfSkse30pfSkscmV2ZXJzZVRyYW5zZm9ybTooKHYsXyk9PnY9PT0hMD9vWzBdfHwidHJ1ZSI6clswXXx8ImZhbHNlIiksZXJyb3I6bi5lcnJvcn0pO3JldHVybiBiLl96b2QuYmFnLnRydXRoeT1vLGIuX3pvZC5iYWcuZmFsc3k9cixiLl96b2QuYmFnLmNhc2U9bi5jYXNlPz8iaW5zZW5zaXRpdmUiLGJ9ZnVuY3Rpb24gUHQoZSx0LG4sbz17fSl7Y29uc3Qgcj15KG8pLHM9e2NoZWNrOiJzdHJpbmdfZm9ybWF0Iix0eXBlOiJzdHJpbmciLGZvcm1hdDp0LGZuOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246aT0+bi50ZXN0KGkpLC4uLnJ9O3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwJiYocy5wYXR0ZXJuPW4pLG5ldyBlKHMpfWNvbnN0IEdnPSgpPT4oe30pLFFnPSgpPT4oe30pLFlnPSgpPT4oe30pLFhnPSgpPT4oe30pLGViPSgpPT4oe30pLExoPSgpPT4oKT0+KHt9KSxDcz0oKT0+KCk9Pih7fSksdGI9KCk9Pih7fSksU2U9KCk9Pih7fSksbmI9KCk9Pih7fSksb2I9KCk9Pih7fSkscmI9KCk9Pih7fSksc2I9KCk9Pih7fSksaWI9KCk9Pih7fSksYWI9KCk9Pih7fSksY2I9KCk9Pih7fSksdWI9KCk9Pih7fSksbGI9KCk9Pih7fSksZGI9KCk9Pih7fSkscGI9KCk9Pih7fSksaGI9KCk9Pih7fSksZmI9KCk9Pih7fSksbWI9KCk9Pih7fSksZ2I9KCk9Pih7fSksYmI9KCk9Pih7fSksdmI9KCk9Pih7fSkseWI9KCk9Pih7fSksX2I9KCk9Pih7fSksa2I9KCk9Pih7fSksd2I9KCk9Pih7fSksJGI9KCk9Pih7fSksU2I9KCk9Pih7fSksemI9KCk9Pih7fSksVGI9KCk9Pih7fSksVWg9KCk9Pih7fSksSWI9KCk9Pih7fSksUGI9KCk9Pih7fSkseGI9KCk9Pih7fSksQ2I9KCk9Pih7fSksRWI9KCk9Pih7fSksQWI9KCk9Pih7fSksT2I9KCk9Pih7fSksUmI9KCk9Pih7fSksWmI9KCk9Pih7fSksTmI9KCk9Pih7fSksamI9KCk9Pih7fSksQmg9KCk9Pih7fSksTWI9KCk9Pih7fSksb2E9KCk9Pih7fSk7Y2xhc3MgcWJ7fWNvbnN0IERiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxGaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJFpvZEFueTpicCwkWm9kQXJyYXk6d3AsJFpvZEFzeW5jRXJyb3I6RmUsJFpvZEJhc2U2NDp0cCwkWm9kQmFzZTY0VVJMOm9wLCRab2RCaWdJbnQ6bWksJFpvZEJpZ0ludEZvcm1hdDpocCwkWm9kQm9vbGVhbjpmaSwkWm9kQ0lEUnY0OlFkLCRab2RDSURSdjY6WGQsJFpvZENVSUQ6cWQsJFpvZENVSUQyOkRkLCRab2RDYXRjaDpGcCwkWm9kQ2hlY2s6VywkWm9kQ2hlY2tCaWdJbnRGb3JtYXQ6dWQsJFpvZENoZWNrRW5kc1dpdGg6a2QsJFpvZENoZWNrR3JlYXRlclRoYW46aWksJFpvZENoZWNrSW5jbHVkZXM6eWQsJFpvZENoZWNrTGVuZ3RoRXF1YWxzOm1kLCRab2RDaGVja0xlc3NUaGFuOnNpLCRab2RDaGVja0xvd2VyQ2FzZTpiZCwkWm9kQ2hlY2tNYXhMZW5ndGg6aGQsJFpvZENoZWNrTWF4U2l6ZTpsZCwkWm9kQ2hlY2tNaW1lVHlwZTpTZCwkWm9kQ2hlY2tNaW5MZW5ndGg6ZmQsJFpvZENoZWNrTWluU2l6ZTpkZCwkWm9kQ2hlY2tNdWx0aXBsZU9mOmFkLCRab2RDaGVja051bWJlckZvcm1hdDpjZCwkWm9kQ2hlY2tPdmVyd3JpdGU6emQsJFpvZENoZWNrUHJvcGVydGllczokZCwkWm9kQ2hlY2tQcm9wZXJ0eTp3ZCwkWm9kQ2hlY2tSZWdleDpnZCwkWm9kQ2hlY2tTaXplRXF1YWxzOnBkLCRab2RDaGVja1N0YXJ0c1dpdGg6X2QsJFpvZENoZWNrU3RyaW5nRm9ybWF0OnluLCRab2RDaGVja1VwcGVyQ2FzZTp2ZCwkWm9kQ29kZWM6X2ksJFpvZENyZWRpdENhcmQ6aXAsJFpvZEN1c3RvbTpRcCwkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OmRwLCRab2RDeWNsaWNFcnJvcjpZcCwkWm9kRGF0ZTprcCwkWm9kRGVmYXVsdDpEcCwkWm9kRGlzY3JpbWluYXRlZFVuaW9uOnhwLCRab2RFMTY0OnJwLCRab2RFbWFpbDpFZCwkWm9kRW1vamk6amQsJFpvZEVuY29kZUVycm9yOkdvLCRab2RFbnVtOlJwLCRab2RFcnJvcjp3bCwkWm9kRXhhY3RPcHRpb25hbDpNcCwkWm9kRmlsZTpOcCwkWm9kRnVuY3Rpb246V3AsJFpvZEdVSUQ6eGQsJFpvZElCQU46Y3AsJFpvZElQdjQ6S2QsJFpvZElQdjY6V2QsJFpvZElTT0RhdGU6SGQsJFpvZElTT0RhdGVUaW1lOkZkLCRab2RJU09EdXJhdGlvbjpKZCwkWm9kSVNPVGltZTpWZCwkWm9kSW50ZXJzZWN0aW9uOkNwLCRab2RKV1Q6bHAsJFpvZEtTVUlEOkJkLCRab2RMYXp5OmtpLCRab2RMaXRlcmFsOlpwLCRab2RNQUM6R2QsJFpvZE1hcDpBcCwkWm9kTmFOOkhwLCRab2ROYW5vSUQ6TWQsJFpvZE5ldmVyOnlwLCRab2ROb25PcHRpb25hbDpVcCwkWm9kTnVsbDpncCwkWm9kTnVsbGFibGU6cXAsJFpvZE51bWJlcjpoaSwkWm9kTnVtYmVyRm9ybWF0OnBwLCRab2RPYmplY3Q6enAsJFpvZE9iamVjdEpJVDpUcCwkWm9kT3B0aW9uYWw6dmksJFpvZFBpcGU6eWksJFpvZFByZWZhdWx0OkxwLCRab2RQcmVwcm9jZXNzOlZwLCRab2RQcm9taXNlOkdwLCRab2RSZWFkb25seTpKcCwkWm9kUmVhbEVycm9yOl9lLCRab2RSZWNvcmQ6RXAsJFpvZFJlZ2lzdHJ5Om9oLCRab2RTZXQ6T3AsJFpvZFN0cmluZzpfbiwkWm9kU3RyaW5nRm9ybWF0OkYsJFpvZFN1Y2Nlc3M6QnAsJFpvZFN5bWJvbDpmcCwkWm9kVGVtcGxhdGVMaXRlcmFsOktwLCRab2RUcmFuc2Zvcm06anAsJFpvZFR1cGxlOmJpLCRab2RUeXBlOngsJFpvZFVMSUQ6TGQsJFpvZFVSTDpOZCwkWm9kVVVJRDpDZCwkWm9kVW5kZWZpbmVkOm1wLCRab2RVbmlvbjpyciwkWm9kVW5rbm93bjp2cCwkWm9kVm9pZDpfcCwkWm9kWElEOlVkLCRab2RYb3I6SXAsJGJyYW5kOkJzLCRjb25zdHJ1Y3RvcjpwLCRpbnB1dDpTaSwkb3V0cHV0OiRpLERvYzpUZCxJTlZBTElEOlRpLEpTT05TY2hlbWE6RGIsSlNPTlNjaGVtYUdlbmVyYXRvcjpxYixORVZFUjpVcyxUaW1lUHJlY2lzaW9uOllpLFVSTF9CQURfRk9STUFUOmNpLFVSTF9VTlBBUlNFQUJMRTp0bixab2RDb21waWxlQXN5bmNFcnJvcjpJaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpQaSxfYW55OnpoLF9hcnJheTpBaCxfYmFzZTY0OktpLF9iYXNlNjR1cmw6V2ksX2JpZ2ludDp2aCxfYm9vbGVhbjpnaCxfY2F0Y2g6RmcsX2NoZWNrOmpoLF9jaWRydjQ6VmksX2NpZHJ2NjpKaSxfY29lcmNlZEJpZ2ludDp5aCxfY29lcmNlZEJvb2xlYW46YmgsX2NvZXJjZWREYXRlOkNoLF9jb2VyY2VkTnVtYmVyOmxoLF9jb2VyY2VkU3RyaW5nOnNoLF9jcmVkaXRDYXJkOmFoLF9jdWlkOnFpLF9jdWlkMjpEaSxfY3VzdG9tOlJoLF9kYXRlOnhoLF9kZWNvZGU6SnMsX2RlY29kZUFzeW5jOldzLF9kZWZhdWx0OkxnLF9kaXNjcmltaW5hdGVkVW5pb246eGcsX2UxNjQ6R2ksX2VtYWlsOkVpLF9lbW9qaTpqaSxfZW5jb2RlOlZzLF9lbmNvZGVBc3luYzpLcyxfZW5kc1dpdGg6VG4sX2VudW06WmcsX2ZpbGU6T2gsX2Zsb2F0MzI6cGgsX2Zsb2F0NjQ6aGgsX2d0OnFlLF9ndGU6eWUsX2d1aWQ6QWksX2liYW46Y2gsX2luY2x1ZGVzOlNuLF9pbnQ6ZGgsX2ludDMyOmZoLF9pbnQ2NDpfaCxfaW50ZXJzZWN0aW9uOkNnLF9pcHY0OkZpLF9pcHY2OkhpLF9pc29EYXRlOmVhLF9pc29EYXRlVGltZTpYaSxfaXNvRHVyYXRpb246bmEsX2lzb1RpbWU6dGEsX2p3dDpRaSxfa3N1aWQ6QmksX2xhenk6S2csX2xlbmd0aDpJdCxfbGl0ZXJhbDpqZyxfbG93ZXJjYXNlOnduLF9sdDpNZSxfbHRlOnZlLF9tYWM6aWgsX21hcDpPZyxfbWF4OnZlLF9tYXhMZW5ndGg6VHQsX21heFNpemU6dXQsX21pbWU6UG4sX21pbjp5ZSxfbWluTGVuZ3RoOkplLF9taW5TaXplOkRlLF9tdWx0aXBsZU9mOnJ0LF9uYW46RWgsX25hbm9pZDpNaSxfbmF0aXZlRW51bTpOZyxfbmVnYXRpdmU6bHIsX25ldmVyOkloLF9ub25uZWdhdGl2ZTpwcixfbm9ub3B0aW9uYWw6VWcsX25vbnBvc2l0aXZlOmRyLF9ub3JtYWxpemU6eG4sX251bGw6U2gsX251bGxhYmxlOkRnLF9udW1iZXI6dWgsX29wdGlvbmFsOnFnLF9vdmVyd3JpdGU6T2UsX3BhcnNlOmhuLF9wYXJzZUFzeW5jOmZuLF9waXBlOkhnLF9wb3NpdGl2ZTp1cixfcHJvbWlzZTpXZyxfcHJvcGVydGllczpJbixfcHJvcGVydHk6aHIsX3JlYWRvbmx5OlZnLF9yZWNvcmQ6QWcsX3JlZmluZTpaaCxfcmVnZXg6a24sX3NhZmVEZWNvZGU6UXMsX3NhZmVEZWNvZGVBc3luYzpYcyxfc2FmZUVuY29kZTpHcyxfc2FmZUVuY29kZUFzeW5jOllzLF9zYWZlUGFyc2U6bW4sX3NhZmVQYXJzZUFzeW5jOmduLF9zZXQ6UmcsX3NpemU6enQsX3NsdWdpZnk6T24sX3N0YXJ0c1dpdGg6em4sX3N0cmluZzpyaCxfc3RyaW5nRm9ybWF0OlB0LF9zdHJpbmdib29sOkRoLF9zdWNjZXNzOkJnLF9zdXBlclJlZmluZTpOaCxfc3ltYm9sOndoLF90ZW1wbGF0ZUxpdGVyYWw6SmcsX3RvTG93ZXJDYXNlOkVuLF90b1VwcGVyQ2FzZTpBbixfdHJhbnNmb3JtOk1nLF90cmltOkNuLF90dXBsZTpFZyxfdWludDMyOm1oLF91aW50NjQ6a2gsX3VsaWQ6TGksX3VuZGVmaW5lZDokaCxfdW5pb246SWcsX3Vua25vd246VGgsX3VwcGVyY2FzZTokbixfdXJsOmNyLF91dWlkOk9pLF91dWlkdjQ6UmksX3V1aWR2NjpaaSxfdXVpZHY3Ok5pLF92b2lkOlBoLF94aWQ6VWksX3hvcjpQZyxiYXNlNjRDaGFyc2V0OmVwLGJhc2U2NHVybENoYXJzZXQ6cGksY2FuUGFyc2VVUkw6dWksY2xvbmU6USxjb21waWxlOnhpLGNvbXBpbGVGbjpUZyxjb25maWc6bmUsY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOkNzLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpMaCxkZWNvZGU6T20sZGVjb2RlQXN5bmM6Wm0sZGVzY3JpYmU6TWgsZW5jb2RlOkFtLGVuY29kZUFzeW5jOlJtLGV4dHJhY3REZWZzOlhnLGZpbmFsaXplOmViLGZsYXR0ZW5FcnJvcjpRbyxmb3JtYXRFcnJvcjpZbyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmdpLGdsb2JhbENvbmZpZzpkZSxnbG9iYWxSZWdpc3RyeTokZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6UWcsaW5pdGlhbGl6ZUNvbnRleHQ6R2csaXNCYWNrRWRnZTp0aCxpc1JlY3Vyc2l2ZVNjaGVtYTp3Zyxpc1ZhbGlkQmFzZTY0OmRpLGlzVmFsaWRCYXNlNjRVUkw6bnAsaXNWYWxpZENJRFJ2NjpZZCxpc1ZhbGlkQ3JlZGl0Q2FyZDpzcCxpc1ZhbGlkSUJBTjphcCxpc1ZhbGlkSVB2NjpsaSxpc1ZhbGlkSldUOnVwLGxvY2FsZXM6d2ksbWVtb2l6ZXI6c3IsbWVyZ2VWYWx1ZXM6QW8sbWV0YTpxaCxwYXJzZTpTcyxwYXJzZUFzeW5jOnpzLHBhcnNlVVJMT2JqZWN0Ok9kLHByZXR0aWZ5RXJyb3I6SHMscHJvY2Vzczp0Yixwcm9jZXNzU2NoZW1hOllnLHJlZ2V4ZXM6b3IscmVnaXN0cnk6aXIsc2FmZURlY29kZTpqbSxzYWZlRGVjb2RlQXN5bmM6cW0sc2FmZUVuY29kZTpObSxzYWZlRW5jb2RlQXN5bmM6TW0sc2FmZVBhcnNlOlNsLHNhZmVQYXJzZUFzeW5jOlBtLHN0YW5kYXJkUHJvcHM6YWksc3RyaXBUYWJBbmROZXdsaW5lOklzLHRvRG90UGF0aDokbCx0b0pTT05TY2hlbWE6b2EsdG9ab2Q6VW8sdHJlZWlmeUVycm9yOkZzLHVybEhvc3RuYW1lT2s6UmQsdXJsUHJvdG9jb2xPazpaZCx1dGlsOkxzLHZhbGlkYXRlOmVyLHZhbGlkYXRlQXN5bmM6dHIsdmFsaWRhdGVVUkw6QWQsdmVyc2lvbjpJZCx3aXRoUGFyc2VyOkNpfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHp1PVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiByYShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooYSxpKT0+e2NvbnN0IHU9dFthLl96b2QuZGVmLnR5cGVdO3JldHVybiB1P3UoYSxpKTphfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihhKXtjb25zdCBpPW8uZ2V0KGEpO2lmKGk9PT16dSlyZXR1cm4gbmV3IGtpKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGEpfSk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtvLnNldChhLHp1KTtjb25zdCB1PXMoYSksbD1uKHUsdSE9PWEpO3JldHVybiBvLnNldChhLGwpLGx9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPWEuX3pvZC5kZWY7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPWkuc2hhcGUsZD1PYmplY3Qua2V5cyhsKTtsZXQgbT0hMTtjb25zdCBiPXt9O2Zvcihjb25zdCBfIG9mIGQpe2NvbnN0IHc9cihsW19dKTt3IT09bFtfXSYmKG09ITApLGJbX109d31sZXQgdj1pLmNhdGNoYWxsO3JldHVybiBpLmNhdGNoYWxsJiYodj1yKGkuY2F0Y2hhbGwpLHYhPT1pLmNhdGNoYWxsJiYobT0hMCkpLG0/UShhLHsuLi5pLHNoYXBlOmIsY2F0Y2hhbGw6dn0pOmF9Y2FzZSJhcnJheSI6e2NvbnN0IGw9cihpLmVsZW1lbnQpO3JldHVybiBsPT09aS5lbGVtZW50P2E6UShhLHsuLi5pLGVsZW1lbnQ6bH0pfWNhc2UidHVwbGUiOntjb25zdCBsPWkuaXRlbXM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgdiBvZiBsKXtjb25zdCBfPXIodik7XyE9PXYmJihkPSEwKSxtLnB1c2goXyl9bGV0IGI9aS5yZXN0O3JldHVybiBpLnJlc3QmJihiPXIoaS5yZXN0KSxiIT09aS5yZXN0JiYoZD0hMCkpLGQ/UShhLHsuLi5pLGl0ZW1zOm0scmVzdDpifSk6YX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCBsPXIoaS5rZXlUeXBlKSxkPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS5rZXlUeXBlJiZkPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksa2V5VHlwZTpsLHZhbHVlVHlwZTpkfSl9Y2FzZSJzZXQiOntjb25zdCBsPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksdmFsdWVUeXBlOmx9KX1jYXNlInVuaW9uIjp7Y29uc3QgbD1pLm9wdGlvbnM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgYiBvZiBsKXtjb25zdCB2PXIoYik7diE9PWImJihkPSEwKSxtLnB1c2godil9cmV0dXJuIGQ/UShhLHsuLi5pLG9wdGlvbnM6bX0pOmF9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCBsPXIoaS5sZWZ0KSxkPXIoaS5yaWdodCk7cmV0dXJuIGw9PT1pLmxlZnQmJmQ9PT1pLnJpZ2h0P2E6UShhLHsuLi5pLGxlZnQ6bCxyaWdodDpkfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IGw9cihpLmlubmVyVHlwZSk7cmV0dXJuIGw9PT1pLmlubmVyVHlwZT9hOlEoYSx7Li4uaSxpbm5lclR5cGU6bH0pfWNhc2UicGlwZSI6e2NvbnN0IGw9cihpLmluKSxkPXIoaS5vdXQpO3JldHVybiBsPT09aS5pbiYmZD09PWkub3V0P2E6UShhLHsuLi5pLGluOmwsb3V0OmR9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgbD1yKGkuaW5wdXQpLGQ9cihpLm91dHB1dCk7cmV0dXJuIGw9PT1pLmlucHV0JiZkPT09aS5vdXRwdXQ/YTpRKGEsey4uLmksaW5wdXQ6bCxvdXRwdXQ6ZH0pfWNhc2UibGF6eSI6e2NvbnN0IGw9aS5nZXR0ZXIse19jYWNoZWRJbm5lcjpkLC4uLm19PWk7cmV0dXJuIFEoYSx7Li4ubSxnZXR0ZXI6KCk9PnIobCgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiBhfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBzYShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBIaChlLHQpe3JldHVybiBzYShlKT9TbChlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIExiKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihzYShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIFViKGUpe2lmKHNhKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IEJiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDpUbixndDpxZSxndGU6eWUsaW5jbHVkZXM6U24sbGVuZ3RoOkl0LGxvd2VyY2FzZTp3bixsdDpNZSxsdGU6dmUsbWF4TGVuZ3RoOlR0LG1heFNpemU6dXQsbWltZTpQbixtaW5MZW5ndGg6SmUsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOnJ0LG5lZ2F0aXZlOmxyLG5vbm5lZ2F0aXZlOnByLG5vbnBvc2l0aXZlOmRyLG5vcm1hbGl6ZTp4bixvdmVyd3JpdGU6T2UscG9zaXRpdmU6dXIscHJvcGVydGllczpJbixwcm9wZXJ0eTpocixyZWdleDprbixzaXplOnp0LHNsdWdpZnk6T24sc3RhcnRzV2l0aDp6bix0b0xvd2VyQ2FzZTpFbix0b1VwcGVyQ2FzZTpBbix0cmltOkNuLHVwcGVyY2FzZTokbn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUdT1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiBrbyhlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IFZoPShlLHQpPT57d2wuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO1R1LmhhcyhuKXx8KFR1LmFkZChuKSxrbyhuLCJmb3JtYXQiLG89PnI9PllvKG8scikpLGtvKG4sImZsYXR0ZW4iLG89PnI9PlFvKG8scikpLGtvKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsSW8sMil9KSxrbyhuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxJbywyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxKaD1wKCJab2RFcnJvciIsVmgpLG1lPXAoIlpvZEVycm9yIixWaCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLGlhPWhuKG1lKSxhYT1mbihtZSksY2E9bW4obWUpLHVhPWduKG1lKSxsYT1WcyhtZSksZGE9SnMobWUpLHBhPUtzKG1lKSxoYT1XcyhtZSksZmE9R3MobWUpLG1hPVFzKG1lKSxnYT1ZcyhtZSksYmE9WHMobWUpO2Z1bmN0aW9uIEZiKCl7ZGUubG9jYWxlRXJyb3J8fG5lKG5oKCkpfWZ1bmN0aW9uIGx0KCl7ZGUubWVtb2l6ZXJ8fG5lKHttZW1vaXplcjpzcigpfSl9Y29uc3QgRT1wKCJab2RUeXBlIiwoZSx0KT0+KEZiKCkseC5pbml0KGUsdCksZS5kZWY9dCxlLnR5cGU9dC50eXBlLGUpLHtjaGVjayguLi5lKXtjb25zdCB0PXRoaXMuZGVmO3JldHVybiB0aGlzLmNsb25lKHVlKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBRKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh0cyhlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhucyhlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKE9lKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gVih0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBacih0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4ga3QodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gVihrdCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBMcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBQKHRoaXMpfSxvcihlKXtyZXR1cm4gQShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gRHQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBvbih0aGlzLG9vKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gTXIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIERyKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBGcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBvbih0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBLcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuICRlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuICRlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gJGUuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBXbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5haSh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpDcygpLG91dHB1dDpDcygpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtqZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGlhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgYWEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBjYSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIHVhKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtqZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBlcih0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gdHIodGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBsYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZGEodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgcGEodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgaGEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gZmEodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIG1hKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIGdhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIGJhKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBMaCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gJGUuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxSbj1wKCJfWm9kU3RyaW5nIiwoZSx0KT0+e19uLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bmIoKX0scG4oe2Zvcm1hdDplPT5TZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+U2UoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5TZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhrbiguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFNuKC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayh6biguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFRuKC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEplKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFR0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEl0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soSmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayh3bihlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjaygkbihlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhDbigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHhuKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhFbigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhBbigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKE9uKCkpfX0pKSx4dD1wKCJab2RTdHJpbmciLChlLHQpPT57X24uaW5pdChlLHQpLFJuLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKEVpKFpuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKGNyKFJ0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKFFpKFFuLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soamkoam4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKEFpKE5uLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhPaShDZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhSaShDZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhaaShDZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhOaShDZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShNbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2socWkocW4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhEaShEbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTGkoTG4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soS2koS24sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soV2koV24sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soVWkoVW4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhCaShCbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRmkoRm4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKEhpKEhuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKFZpKFZuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKEppKEpuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhHaShHbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKFhpKEN0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhlYShFdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodGEoQXQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhuYShPdCxlKSl9fSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gcmgoeHQsZSl9Y29uc3QgVT1wKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57Ri5pbml0KGUsdCksUm4uaW5pdChlLHQpfSksQ3Q9cCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57RmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksRXQ9cCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntIZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxBdD1wKCJab2RJU09UaW1lIiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLE90PXAoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e0pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLFpuPXAoIlpvZEVtYWlsIiwoZSx0KT0+e0VkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHZhKGUpe3JldHVybiBFaShabixlKX1jb25zdCBObj1wKCJab2RHVUlEIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHlhKGUpe3JldHVybiBBaShObixlKX1jb25zdCBDZT1wKCJab2RVVUlEIiwoZSx0KT0+e0NkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIF9hKGUpe3JldHVybiBPaShDZSxlKX1mdW5jdGlvbiBrYShlKXtyZXR1cm4gUmkoQ2UsZSl9ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIFppKENlLGUpfWZ1bmN0aW9uICRhKGUpe3JldHVybiBOaShDZSxlKX1jb25zdCBSdD1wKCJab2RVUkwiLChlLHQpPT57TmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIGNyKFJ0LGUpfWZ1bmN0aW9uIHphKGUpe3JldHVybiBjcihSdCx7cHJvdG9jb2w6ZWksaG9zdG5hbWU6RmwsLi4ueShlKX0pfWNvbnN0IGpuPXAoIlpvZEVtb2ppIiwoZSx0KT0+e2pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFRhKGUpe3JldHVybiBqaShqbixlKX1jb25zdCBNbj1wKCJab2ROYW5vSUQiLChlLHQpPT57TWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIE1pKE1uLGUpfWNvbnN0IHFuPXAoIlpvZENVSUQiLChlLHQpPT57cWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUGEoZSl7cmV0dXJuIHFpKHFuLGUpfWNvbnN0IERuPXAoIlpvZENVSUQyIiwoZSx0KT0+e0RkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBEaShEbixlKX1jb25zdCBMbj1wKCJab2RVTElEIiwoZSx0KT0+e0xkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBMaShMbixlKX1jb25zdCBVbj1wKCJab2RYSUQiLChlLHQpPT57VWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIFVpKFVuLGUpfWNvbnN0IEJuPXAoIlpvZEtTVUlEIiwoZSx0KT0+e0JkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFhKGUpe3JldHVybiBCaShCbixlKX1jb25zdCBGbj1wKCJab2RJUHY0IiwoZSx0KT0+e0tkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE9hKGUpe3JldHVybiBGaShGbixlKX1jb25zdCBmcj1wKCJab2RNQUMiLChlLHQpPT57R2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUmEoZSl7cmV0dXJuIGloKGZyLGUpfWNvbnN0IEhuPXAoIlpvZElQdjYiLChlLHQpPT57V2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gWmEoZSl7cmV0dXJuIEhpKEhuLGUpfWNvbnN0IFZuPXAoIlpvZENJRFJ2NCIsKGUsdCk9PntRZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gVmkoVm4sZSl9Y29uc3QgSm49cCgiWm9kQ0lEUnY2IiwoZSx0KT0+e1hkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGphKGUpe3JldHVybiBKaShKbixlKX1jb25zdCBLbj1wKCJab2RCYXNlNjQiLChlLHQpPT57dHAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTWEoZSl7cmV0dXJuIEtpKEtuLGUpfWNvbnN0IFduPXAoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntvcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBxYShlKXtyZXR1cm4gV2koV24sZSl9Y29uc3QgR249cCgiWm9kRTE2NCIsKGUsdCk9PntycC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBEYShlKXtyZXR1cm4gR2koR24sZSl9Y29uc3QgbXI9cCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntpcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBMYShlKXtyZXR1cm4gYWgobXIsZSl9Y29uc3QgZ3I9cCgiWm9kSUJBTiIsKGUsdCk9PntjcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBVYShlKXtyZXR1cm4gY2goZ3IsZSl9Y29uc3QgUW49cCgiWm9kSldUIiwoZSx0KT0+e2xwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEJhKGUpe3JldHVybiBRaShRbixlKX1jb25zdCBXZT1wKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57ZHAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gRmEoZSx0LG49e30pe3JldHVybiBQdChXZSxlLHQsbil9ZnVuY3Rpb24gSGEoZSl7cmV0dXJuIFB0KFdlLCJob3N0bmFtZSIsQmwsZSl9ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIFB0KFdlLCJoZXgiLGlkLGUpfWZ1bmN0aW9uIEphKGUpe3JldHVybiBQdChXZSwiY3VycmVuY3lfY29kZSIsVmwsZSl9ZnVuY3Rpb24gS2EoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPW9yW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIFB0KFdlLG8scix0KX1jb25zdCBadD1wKCJab2ROdW1iZXIiLChlLHQpPT57aGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5vYigpLGUuaXNGaW5pdGU9ITB9LHBuKHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09U2UoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1TZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1TZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PlNlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhxZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeWUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHllKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKE1lKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhubihlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobm4oZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhxZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeWUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKE1lKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh2ZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHJ0KGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socnQoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBDKGUpe3JldHVybiB1aChadCxlKX1jb25zdCBHZT1wKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57cHAuaW5pdChlLHQpLFp0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIG5uKGUpe3JldHVybiBkaChHZSxlKX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gcGgoR2UsZSl9ZnVuY3Rpb24gR2EoZSl7cmV0dXJuIGhoKEdlLGUpfWZ1bmN0aW9uIFFhKGUpe3JldHVybiBmaChHZSxlKX1mdW5jdGlvbiBZYShlKXtyZXR1cm4gbWgoR2UsZSl9Y29uc3QgTnQ9cCgiWm9kQm9vbGVhbiIsKGUsdCk9PntmaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnJiKCl9KTtmdW5jdGlvbiBMKGUpe3JldHVybiBnaChOdCxlKX1jb25zdCBqdD1wKCJab2RCaWdJbnQiLChlLHQpPT57bWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5zYigpfSxwbih7bWluVmFsdWU6ZT0+U2UoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PlNlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+U2UoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh5ZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeWUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soTWUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2socWUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soTWUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeWUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHJ0KGUsdCkpfX0pKTtmdW5jdGlvbiBYYShlKXtyZXR1cm4gdmgoanQsZSl9Y29uc3QgWW49cCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2hwLmluaXQoZSx0KSxqdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBlYyhlKXtyZXR1cm4gX2goWW4sZSl9ZnVuY3Rpb24gdGMoZSl7cmV0dXJuIGtoKFluLGUpfWNvbnN0IGJyPXAoIlpvZFN5bWJvbCIsKGUsdCk9PntmcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmliKCl9KTtmdW5jdGlvbiBuYyhlKXtyZXR1cm4gd2goYnIsZSl9Y29uc3QgdnI9cCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e21wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Y2IoKX0pO2Z1bmN0aW9uIF90KGUpe3JldHVybiAkaCh2cixlKX1jb25zdCB5cj1wKCJab2ROdWxsIiwoZSx0KT0+e2dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YWIoKX0pO2Z1bmN0aW9uIFhuKGUpe3JldHVybiBTaCh5cixlKX1jb25zdCBfcj1wKCJab2RBbnkiLChlLHQpPT57YnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kYigpfSk7ZnVuY3Rpb24gZW8oKXtyZXR1cm4gemgoX3IpfWNvbnN0IGtyPXAoIlpvZFVua25vd24iLChlLHQpPT57dnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5wYigpfSk7ZnVuY3Rpb24gRCgpe3JldHVybiBUaChrcil9Y29uc3Qgd3I9cCgiWm9kTmV2ZXIiLChlLHQpPT57eXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5sYigpfSk7ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIEloKHdyLGUpfWNvbnN0ICRyPXAoIlpvZFZvaWQiLChlLHQpPT57X3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT51YigpfSk7ZnVuY3Rpb24gb2MoZSl7cmV0dXJuIFBoKCRyLGUpfWNvbnN0IHRvPXAoIlpvZERhdGUiLChlLHQpPT57a3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oYigpLGUubWluPShuLG8pPT5lLmNoZWNrKHllKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKHZlKG4sbykpfSxwbih7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1TZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09U2UoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiByYyhlKXtyZXR1cm4geGgodG8sZSl9Y29uc3QgU3I9cCgiWm9kQXJyYXkiLChlLHQpPT57bHQoKSx3cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpiKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKEplKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhKZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soVHQoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKEl0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gQWgoU3IsZSx0KX1mdW5jdGlvbiBzYyhlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIGllKE9iamVjdC5rZXlzKHQpKX1jb25zdCBNdD1wKCJab2RPYmplY3QiLChlLHQpPT57bHQoKSxUcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRiKCkseWwoZSwic2hhcGUiLG49Pm4uX3pvZC5kZWYuc2hhcGUsITEpfSx7a2V5b2YoKXtyZXR1cm4gaWUoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkQoKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpEKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOnN0KCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIHVsKHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIGRsKHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBwbCh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBhbCh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBjbCh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiB3cyhMdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIHdzKHJvLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBobChzbyx0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLnkodCl9O3JldHVybiBuZXcgTXQobil9ZnVuY3Rpb24gaWMoZSx0KXtyZXR1cm4gbmV3IE10KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6c3QoKSwuLi55KHQpfSl9ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4gbmV3IE10KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6RCgpLC4uLnkodCl9KX1jb25zdCBxdD1wKCJab2RVbmlvbiIsKGUsdCk9Pntyci5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlVoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIEEoZSx0KXtyZXR1cm4gbmV3IHF0KHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLC4uLnkodCl9KX1jb25zdCB6cj1wKCJab2RYb3IiLChlLHQpPT57cXQuaW5pdChlLHQpLElwLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gYWMoZSx0KXtyZXR1cm4gbmV3IHpyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLGluY2x1c2l2ZTohMSwuLi55KHQpfSl9Y29uc3QgVHI9cCgiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3F0LmluaXQoZSx0KSx4cC5pbml0KGUsdCl9KTtmdW5jdGlvbiBubyhlLHQsbil7cmV0dXJuIG5ldyBUcih7dHlwZToidW5pb24iLG9wdGlvbnM6dCxkaXNjcmltaW5hdG9yOmUsLi4ueShuKX0pfWNvbnN0IElyPXAoIlpvZEludGVyc2VjdGlvbiIsKGUsdCk9PntDcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkliKCl9KTtmdW5jdGlvbiBEdChlLHQpe3JldHVybiBuZXcgSXIoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDplLHJpZ2h0OnR9KX1jb25zdCBQcj1wKCJab2RUdXBsZSIsKGUsdCk9PntsdCgpLGJpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGIoKX0se3Jlc3QoZSl7cmV0dXJuIHRoaXMuY2xvbmUoey4uLnRoaXMuX3pvZC5kZWYscmVzdDplfSl9LHBhcnRpYWwoKXtjb25zdCBlPXRoaXMuX3pvZC5kZWY7aWYoZS5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5wYXJ0aWFsKCkgY2Fubm90IGJlIHVzZWQgb24gdHVwbGUgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7cmV0dXJuIHRoaXMuY2xvbmUoey4uLmUsaXRlbXM6ZS5pdGVtcy5tYXAodD0+bmV3IEx0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KSl9KX19KTtmdW5jdGlvbiB4cihlLHQsbil7Y29uc3Qgbz10IGluc3RhbmNlb2YgeCxyPW8/bjp0LHM9bz90Om51bGw7cmV0dXJuIG5ldyBQcih7dHlwZToidHVwbGUiLGl0ZW1zOmUscmVzdDpzLC4uLnkocil9KX1jb25zdCBpdD1wKCJab2RSZWNvcmQiLChlLHQpPT57bHQoKSxFcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhiKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZX0pO2Z1bmN0aW9uIFooZSx0LG4pe3JldHVybiF0fHwhdC5fem9kP25ldyBpdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmgoKSx2YWx1ZVR5cGU6ZSwuLi55KHQpfSk6bmV3IGl0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gY2MoZSx0LG4pe3JldHVybiBuZXcgaXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobikscGFydGlhbDohMH0pfWZ1bmN0aW9uIHVjKGUsdCxuKXtyZXR1cm4gbmV3IGl0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCxtb2RlOiJsb29zZSIsLi4ueShuKX0pfWNvbnN0IENyPXAoIlpvZE1hcCIsKGUsdCk9PntsdCgpLEFwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGIoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlLGUubWluPSguLi5uKT0+ZS5jaGVjayhEZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKERlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayh1dCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayh6dCguLi5uKSl9KTtmdW5jdGlvbiBsYyhlLHQsbil7cmV0dXJuIG5ldyBDcih7dHlwZToibWFwIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWNvbnN0IEVyPXAoIlpvZFNldCIsKGUsdCk9PntsdCgpLE9wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2IoKSxlLm1pbj0oLi4ubik9PmUuY2hlY2soRGUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhEZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2sodXQoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soenQoLi4ubikpfSk7ZnVuY3Rpb24gZGMoZSx0KXtyZXR1cm4gbmV3IEVyKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTplLC4uLnkodCl9KX1jb25zdCBhdD1wKCJab2RFbnVtIiwoZSx0KT0+e1JwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG8scixzKT0+ZmIoKSxlLmVudW09dC5lbnRyaWVzLGUub3B0aW9ucz1bLi4uZS5fem9kLnZhbHVlc107Y29uc3Qgbj1uZXcgU2V0KE9iamVjdC5rZXlzKHQuZW50cmllcykpO2UuZXh0cmFjdD0obyxyKT0+e2NvbnN0IHM9e307Zm9yKGNvbnN0IGEgb2YgbylpZihuLmhhcyhhKSlzW2FdPXQuZW50cmllc1thXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7YX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IGF0KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfSxlLmV4Y2x1ZGU9KG8scik9Pntjb25zdCBzPXsuLi50LmVudHJpZXN9O2Zvcihjb25zdCBhIG9mIG8paWYobi5oYXMoYSkpZGVsZXRlIHNbYV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2F9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBhdCh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX19KTtmdW5jdGlvbiBpZShlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgYXQoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi55KHQpfSl9ZnVuY3Rpb24gcGMoZSx0KXtyZXR1cm4gbmV3IGF0KHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4ueSh0KX0pfWNvbnN0IEFyPXAoIlpvZExpdGVyYWwiLChlLHQpPT57WnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tYigpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBBcih7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4ueSh0KX0pfWNvbnN0IE9yPXAoIlpvZEZpbGUiLChlLHQpPT57TnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT52YigpLGUubWluPShuLG8pPT5lLmNoZWNrKERlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKHV0KG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhQbihBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIGhjKGUpe3JldHVybiBPaChPcixlKX1jb25zdCBScj1wKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57bHQoKSxqcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndiKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBHbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKHZ0KHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBhPXM7YS5mYXRhbCYmKGEuY29udGludWU9ITEpLGEuY29kZT8/KGEuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGF8fChhLmlucHV0PW4udmFsdWUpLGEuaW5zdD8/KGEuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKHZ0KGEpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gb28oZSl7cmV0dXJuIG5ldyBScih7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IEx0PXAoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e3ZpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QmgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBWKGUpe3JldHVybiBuZXcgTHQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IHJvPXAoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57TXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFpyKGUpe3JldHVybiBuZXcgcm8oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IE5yPXAoIlpvZE51bGxhYmxlIiwoZSx0KT0+e3FwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Q2IoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBrdChlKXtyZXR1cm4gbmV3IE5yKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBmYyhlKXtyZXR1cm4gVihrdChlKSl9Y29uc3QganI9cCgiWm9kRGVmYXVsdCIsKGUsdCk9PntEcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkFiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIE1yKGUsdCl7cmV0dXJuIG5ldyBqcih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6Rm8odCl9fSl9Y29uc3QgcXI9cCgiWm9kUHJlZmF1bHQiLChlLHQpPT57THAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIERyKGUsdCl7cmV0dXJuIG5ldyBxcih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOkZvKHQpfX0pfWNvbnN0IHNvPXAoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1VwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBMcihlLHQpe3JldHVybiBuZXcgc28oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgVXI9cCgiWm9kU3VjY2VzcyIsKGUsdCk9PntCcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnliKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbWMoZSl7cmV0dXJuIG5ldyBVcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBCcj1wKCJab2RDYXRjaCIsKGUsdCk9PntGcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlJiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBGcihlLHQpe3JldHVybiBuZXcgQnIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RHModCl9KX1jb25zdCBIcj1wKCJab2ROYU4iLChlLHQpPT57SHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5nYigpfSk7ZnVuY3Rpb24gZ2MoZSl7cmV0dXJuIEVoKEhyLGUpfWNvbnN0IFV0PXAoIlpvZFBpcGUiLChlLHQpPT57eWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aYigpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIG9uKGUsdCl7cmV0dXJuIG5ldyBVdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IEJ0PXAoIlpvZENvZGVjIiwoZSx0KT0+e1V0LmluaXQoZSx0KSxfaS5pbml0KGUsdCl9KTtmdW5jdGlvbiBiYyhlLHQsbil7cmV0dXJuIG5ldyBCdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIHZjKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IEJ0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBWcj1wKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e1V0LmluaXQoZSx0KSxWcC5pbml0KGUsdCl9KSxKcj1wKCJab2RSZWFkb25seSIsKGUsdCk9PntKcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk5iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gS3IoZSl7cmV0dXJuIG5ldyBKcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgV3I9cCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0twLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmIoKX0pO2Z1bmN0aW9uIHljKGUsdCl7cmV0dXJuIG5ldyBXcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi55KHQpfSl9Y29uc3QgR3I9cCgiWm9kTGF6eSIsKGUsdCk9PntraS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk1iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBRcihlKXtyZXR1cm4gbmV3IEdyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IFlyPXAoIlpvZFByb21pc2UiLChlLHQpPT57R3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIF9jKGUpe3JldHVybiBuZXcgWXIoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgWHI9cCgiWm9kRnVuY3Rpb24iLChlLHQpPT57V3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5rYigpfSk7ZnVuY3Rpb24gd3QoZSl7cmV0dXJuIG5ldyBYcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP3hyKGU/LmlucHV0KTplPy5pbnB1dD8/UChEKCkpLG91dHB1dDplPy5vdXRwdXQ/P0QoKX0pfWNvbnN0IEZ0PXAoIlpvZEN1c3RvbSIsKGUsdCk9PntRcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9iKCl9KTtmdW5jdGlvbiBrYyhlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIGVzKGUsdCl7cmV0dXJuIFJoKEZ0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIHRzKGUsdD17fSl7cmV0dXJuIFpoKEZ0LGUsdCl9ZnVuY3Rpb24gbnMoZSx0KXtyZXR1cm4gTmgoZSx0KX1jb25zdCB3Yz1NaCwkYz1xaCxvcz1wKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e0Z0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhJbihlLHQpKX19KTtmdW5jdGlvbiBTYyhlLHQ9e30pe2NvbnN0IG49bmV3IG9zKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLnkodCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgemM9KC4uLmUpPT5EaCh7Q29kZWM6QnQsQm9vbGVhbjpOdCxTdHJpbmc6eHR9LC4uLmUpO2Z1bmN0aW9uIFRjKGUpe2NvbnN0IHQ9UXIoKCk9PkEoW2goZSksQygpLEwoKSxYbigpLFAodCksWihoKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaW8oZSx0KXtyZXR1cm4gbmV3IFZyKHt0eXBlOiJwaXBlIixpbjpvbyhlKSxvdXQ6dH0pfWNvbnN0IEhiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6X3IsWm9kQXJyYXk6U3IsWm9kQmFzZTY0OktuLFpvZEJhc2U2NFVSTDpXbixab2RCaWdJbnQ6anQsWm9kQmlnSW50Rm9ybWF0OlluLFpvZEJvb2xlYW46TnQsWm9kQ0lEUnY0OlZuLFpvZENJRFJ2NjpKbixab2RDVUlEOnFuLFpvZENVSUQyOkRuLFpvZENhdGNoOkJyLFpvZENvZGVjOkJ0LFpvZENyZWRpdENhcmQ6bXIsWm9kQ3VzdG9tOkZ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpXZSxab2REYXRlOnRvLFpvZERlZmF1bHQ6anIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOlRyLFpvZEUxNjQ6R24sWm9kRW1haWw6Wm4sWm9kRW1vamk6am4sWm9kRW51bTphdCxab2RFeGFjdE9wdGlvbmFsOnJvLFpvZEZpbGU6T3IsWm9kRnVuY3Rpb246WHIsWm9kR1VJRDpObixab2RJQkFOOmdyLFpvZElQdjQ6Rm4sWm9kSVB2NjpIbixab2RJU09EYXRlOkV0LFpvZElTT0RhdGVUaW1lOkN0LFpvZElTT0R1cmF0aW9uOk90LFpvZElTT1RpbWU6QXQsWm9kSW5zdGFuY2VPZjpvcyxab2RJbnRlcnNlY3Rpb246SXIsWm9kSldUOlFuLFpvZEtTVUlEOkJuLFpvZExhenk6R3IsWm9kTGl0ZXJhbDpBcixab2RNQUM6ZnIsWm9kTWFwOkNyLFpvZE5hTjpIcixab2ROYW5vSUQ6TW4sWm9kTmV2ZXI6d3IsWm9kTm9uT3B0aW9uYWw6c28sWm9kTnVsbDp5cixab2ROdWxsYWJsZTpOcixab2ROdW1iZXI6WnQsWm9kTnVtYmVyRm9ybWF0OkdlLFpvZE9iamVjdDpNdCxab2RPcHRpb25hbDpMdCxab2RQaXBlOlV0LFpvZFByZWZhdWx0OnFyLFpvZFByZXByb2Nlc3M6VnIsWm9kUHJvbWlzZTpZcixab2RSZWFkb25seTpKcixab2RSZWNvcmQ6aXQsWm9kU2V0OkVyLFpvZFN0cmluZzp4dCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOlVyLFpvZFN5bWJvbDpicixab2RUZW1wbGF0ZUxpdGVyYWw6V3IsWm9kVHJhbnNmb3JtOlJyLFpvZFR1cGxlOlByLFpvZFR5cGU6RSxab2RVTElEOkxuLFpvZFVSTDpSdCxab2RVVUlEOkNlLFpvZFVuZGVmaW5lZDp2cixab2RVbmlvbjpxdCxab2RVbmtub3duOmtyLFpvZFZvaWQ6JHIsWm9kWElEOlVuLFpvZFhvcjp6cixfWm9kU3RyaW5nOlJuLF9kZWZhdWx0Ok1yLF9mdW5jdGlvbjp3dCxhbnk6ZW8sYXJyYXk6UCxiYXNlNjQ6TWEsYmFzZTY0dXJsOnFhLGJpZ2ludDpYYSxib29sZWFuOkwsY2F0Y2g6RnIsY2hlY2s6a2MsY2lkcnY0Ok5hLGNpZHJ2NjpqYSxjb2RlYzpiYyxjcmVkaXRDYXJkOkxhLGN1aWQ6UGEsY3VpZDI6eGEsY3VycmVuY3lDb2RlOkphLGN1c3RvbTplcyxkYXRlOnJjLGRlc2NyaWJlOndjLGRpc2NyaW1pbmF0ZWRVbmlvbjpubyxlMTY0OkRhLGVtYWlsOnZhLGVtb2ppOlRhLGVudW06aWUsZXhhY3RPcHRpb25hbDpacixmaWxlOmhjLGZsb2F0MzI6V2EsZmxvYXQ2NDpHYSxmdW5jdGlvbjp3dCxndWlkOnlhLGhhc2g6S2EsaGV4OlZhLGhvc3RuYW1lOkhhLGh0dHBVcmw6emEsaWJhbjpVYSxpbnN0YW5jZW9mOlNjLGludDpubixpbnQzMjpRYSxpbnQ2NDplYyxpbnRlcnNlY3Rpb246RHQsaW52ZXJ0Q29kZWM6dmMsaXB2NDpPYSxpcHY2OlphLGpzb246VGMsand0OkJhLGtleW9mOnNjLGtzdWlkOkFhLGxhenk6UXIsbGl0ZXJhbDpmLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOnVjLG1hYzpSYSxtYXA6bGMsbWV0YTokYyxuYW46Z2MsbmFub2lkOklhLG5hdGl2ZUVudW06cGMsbmV2ZXI6c3Qsbm9ub3B0aW9uYWw6THIsbnVsbDpYbixudWxsYWJsZTprdCxudWxsaXNoOmZjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYscGFydGlhbFJlY29yZDpjYyxwaXBlOm9uLHByZWZhdWx0OkRyLHByZXByb2Nlc3M6aW8scHJvbWlzZTpfYyxyZWFkb25seTpLcixyZWNvcmQ6WixyZWZpbmU6dHMsc2V0OmRjLHN0cmljdE9iamVjdDppYyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6RmEsc3RyaW5nYm9vbDp6YyxzdWNjZXNzOm1jLHN1cGVyUmVmaW5lOm5zLHN5bWJvbDpuYyx0ZW1wbGF0ZUxpdGVyYWw6eWMsdHJhbnNmb3JtOm9vLHR1cGxlOnhyLHVpbnQzMjpZYSx1aW50NjQ6dGMsdWxpZDpDYSx1bmRlZmluZWQ6X3QsdW5pb246QSx1bmtub3duOkQsdXJsOlNhLHV1aWQ6X2EsdXVpZHY0OmthLHV1aWR2Njp3YSx1dWlkdjc6JGEsdm9pZDpvYyx4aWQ6RWEseG9yOmFjfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEtoPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBXaChlKXtuZSh7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIEdoKCl7cmV0dXJuIG5lKCkuY3VzdG9tRXJyb3J9dmFyIE9vO09vfHwoT289e30pO2Z1bmN0aW9uIFFoKGUpe3JldHVybiBYaShDdCxlKX1mdW5jdGlvbiBWYihlKXtyZXR1cm4gZWEoRXQsZSl9ZnVuY3Rpb24gSmIoZSl7cmV0dXJuIHRhKEF0LGUpfWZ1bmN0aW9uIEtiKGUpe3JldHVybiBuYShPdCxlKX1jb25zdCBJYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpFdCxab2RJU09EYXRlVGltZTpDdCxab2RJU09EdXJhdGlvbjpPdCxab2RJU09UaW1lOkF0LGRhdGU6VmIsZGF0ZXRpbWU6UWgsZHVyYXRpb246S2IsdGltZTpKYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxTPXsuLi5IYiwuLi5CYixpc286SWN9LFdiPW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIEdiKGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIEl1KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIFFiKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gWWIoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpRYihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIFhiKGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBhIG9mIHMpe2NvbnN0IGk9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGEpO2kuc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6aS5lcnJvci5pc3N1ZXMsaW5wdXQ6YSxwYXRoOlthXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gRXMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgaT1FcyhhLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChpKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgYT1FcyhlW3NdLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2F9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBldj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLHR2PW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBRdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShRdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5ldi5oYXModCk/UXQobik6IXR2Lmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoUXQpKX1mdW5jdGlvbiBQdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gbnYoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7Y29uc3QgaT1FcyhyW2FdLG5ldyBTZXQpO2lmKGk9PT1udWxsKWNvbnRpbnVlO2NvbnN0IHU9cy5nZXQoaSk7aWYodT09PXZvaWQgMCl7cy5zZXQoaSxhKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7YX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7dX1gLGlucHV0OnIscGF0aDpbYV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGE9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBpPTA7Zm9yKGNvbnN0IHUgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZSh1KS5zdWNjZXNzJiYrK2k+PWEpYnJlYWs7aTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7UHUocyl9OyBmb3VuZCAke2l9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmaT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtQdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiB4dShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP1MuYW55KCk6bGUoZSx0KX1jb25zdCBvdj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIFloKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIFMubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPVliKHIsdCksYT1sZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsYSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxhfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiBTLm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIFMubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGE9PnR5cGVvZiBhPT0ic3RyaW5nIikpcmV0dXJuIFMuZW51bShyKTtjb25zdCBzPXIubWFwKGE9PlMubGl0ZXJhbChhKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTpTLnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIFMubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBhPXsuLi5lLHR5cGU6c307cmV0dXJuIFloKGEsdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP1MubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTpTLnVuaW9uKHIpfWlmKCFuKXJldHVybiBTLmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPVMuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKFMuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayhTLnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayhTLnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayhTLmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2soUy5yZWdleChvdikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayhTLmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2soUy5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayhTLmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2soUy5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2soUy5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2soUy5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2soUy5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayhTLmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKFMuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKFMuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2soUy5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKFMuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKFMuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayhTLmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2soUy5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2soUy5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayhTLmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKFMudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKFMueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKFMua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP1MubnVtYmVyKCkuaW50KCk6Uy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPVMuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289Uy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxhPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGk9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP2xlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLGJdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IHY9bGUoYix0KTtjdChyLG0sYS5oYXMobSk/djp2Lm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyxiPU9iamVjdC5rZXlzKG0pLHY9W107Zm9yKGNvbnN0IHcgb2YgYil7Y29uc3QgJD1sZShtW3ddLHQpLE49Uy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKHcpKTt2LnB1c2goUy5sb29zZVJlY29yZChOLCQpKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2goUy5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLnYpLF8ubGVuZ3RoPT09MClvPVMub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCB3PVMuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCAkPTI7JDxfLmxlbmd0aDskKyspdz1TLmludGVyc2VjdGlvbih3LF9bJF0pO289d31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IHc9T2JqZWN0LmtleXMociksJD1iLm1hcChJPT5uZXcgUmVnRXhwKEkpKSxOPW87bz1vLmNoZWNrKEk9PntpZighVmUoSS52YWx1ZSkpcmV0dXJuO2NvbnN0IEc9W107Zm9yKGNvbnN0IG9lIG9mIE9iamVjdC5rZXlzKEkudmFsdWUpKXcuaW5jbHVkZXMob2UpfHwkLnNvbWUoSj0+Si50ZXN0KG9lKSl8fEcucHVzaChvZSk7Ry5sZW5ndGgmJkkuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkcsaW5wdXQ6SS52YWx1ZSxpbnN0Ok59KX0pfX1lbHNle2NvbnN0IG09Uy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289bS5zdHJpY3QoKTppP289bS5jYXRjaGFsbChpKTpvPW0ucGFzc3Rocm91Z2goKX1jb25zdCB1PWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsbD10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGQ9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZih1fHxsIT09dm9pZCAwfHxkIT09dm9pZCAwKXtsZXQgbTtpZih1KXtjb25zdCBiPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lczttPWxlKGIsdCl9bz1YYihvLHtrZXlTY2hlbWE6bSxtaW5Qcm9wZXJ0aWVzOmwsbWF4UHJvcGVydGllczpkfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9ci5tYXAobT0+bGUobSx0KSksdT1JdShpLGEpLGw9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6eHUocyx0KSxkPVMudHVwbGUodSk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9cy5tYXAobT0+bGUobSx0KSksdT1JdShpLGEpLGw9eHUoZS5hZGRpdGlvbmFsSXRlbXMsdCksZD1TLnR1cGxlKHUpO289bD9kLnJlc3QobCk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGE9bGUocyx0KTtsZXQgaT1TLmFycmF5KGEpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5tYXgoZS5tYXhJdGVtcykpLG89aX1lbHNlIG89Uy5hcnJheShTLmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89bnYobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/bGUoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIGxlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9TLmFueSgpOlMubmV2ZXIoKTtsZXQgbj1ZaChlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgaT1lLmFueU9mLm1hcChsPT5sZShsLHQpKSx1PVMudW5pb24oaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBpPWUub25lT2YubWFwKGw9PmxlKGwsdCkpLHU9Uy54b3IoaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjpTLmFueSgpO2Vsc2V7bGV0IGk9bz9uOmxlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgdT1vPzA6MTtmb3IobGV0IGw9dTtsPGUuYWxsT2YubGVuZ3RoO2wrKylpPVMuaW50ZXJzZWN0aW9uKGksbGUoZS5hbGxPZltsXSx0KSk7bj1pfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49Uy5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj1TLnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBpIG9mIHMpaSBpbiBlJiYocltpXT1lW2ldKTtjb25zdCBhPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgaSBvZiBhKWkgaW4gZSYmKHJbaV09ZVtpXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYhUXQoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBpIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbaV0hPT12b2lkIDAmJihyW2ldPWVbaV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIVF0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgaSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVtpXSE9PXZvaWQgMCYmKHJbaV09ZVtpXSl9Zm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoZSkpV2IuaGFzKGkpfHxjdChyLGksZVtpXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gWGgoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89R2Iobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/PyRlfTtyZXR1cm4gbGUobixzKX1mdW5jdGlvbiBlZihlKXtyZXR1cm4gcmEoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90OkEobi5vcHRpb25zKX19KX1mdW5jdGlvbiBydihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBRKGUsdWUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gdGYoZSl7cmV0dXJuIHJ2KGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBzdihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT90ZihlKTplLmlufWZ1bmN0aW9uIG5mKGUpe3JldHVybiByYShlLHtwaXBlOnQ9PnN2KHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/Vih0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gb2YoZSl7cmV0dXJuIHJhKGUse3BpcGU6dD0+dGYodC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGl2KGUpe3JldHVybiBzaCh4dCxlKX1mdW5jdGlvbiBhdihlKXtyZXR1cm4gbGgoWnQsZSl9ZnVuY3Rpb24gY3YoZSl7cmV0dXJuIGJoKE50LGUpfWZ1bmN0aW9uIHV2KGUpe3JldHVybiB5aChqdCxlKX1mdW5jdGlvbiBsdihlKXtyZXR1cm4gQ2godG8sZSl9Y29uc3QgcmY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDp1dixib29sZWFuOmN2LGRhdGU6bHYsbnVtYmVyOmF2LHN0cmluZzppdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxDdT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOkJzLCRpbnB1dDpTaSwkb3V0cHV0OiRpLElOVkFMSUQ6VGksTkVWRVI6VXMsVGltZVByZWNpc2lvbjpZaSxab2RBbnk6X3IsWm9kQXJyYXk6U3IsWm9kQmFzZTY0OktuLFpvZEJhc2U2NFVSTDpXbixab2RCaWdJbnQ6anQsWm9kQmlnSW50Rm9ybWF0OlluLFpvZEJvb2xlYW46TnQsWm9kQ0lEUnY0OlZuLFpvZENJRFJ2NjpKbixab2RDVUlEOnFuLFpvZENVSUQyOkRuLFpvZENhdGNoOkJyLFpvZENvZGVjOkJ0LFpvZENvbXBpbGVBc3luY0Vycm9yOklpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOlBpLFpvZENyZWRpdENhcmQ6bXIsWm9kQ3VzdG9tOkZ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpXZSxab2REYXRlOnRvLFpvZERlZmF1bHQ6anIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOlRyLFpvZEUxNjQ6R24sWm9kRW1haWw6Wm4sWm9kRW1vamk6am4sWm9kRW51bTphdCxab2RFcnJvcjpKaCxab2RFeGFjdE9wdGlvbmFsOnJvLFpvZEZpbGU6T3IsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBPb30sWm9kRnVuY3Rpb246WHIsWm9kR1VJRDpObixab2RJQkFOOmdyLFpvZElQdjQ6Rm4sWm9kSVB2NjpIbixab2RJU09EYXRlOkV0LFpvZElTT0RhdGVUaW1lOkN0LFpvZElTT0R1cmF0aW9uOk90LFpvZElTT1RpbWU6QXQsWm9kSW5zdGFuY2VPZjpvcyxab2RJbnRlcnNlY3Rpb246SXIsWm9kSXNzdWVDb2RlOktoLFpvZEpXVDpRbixab2RLU1VJRDpCbixab2RMYXp5OkdyLFpvZExpdGVyYWw6QXIsWm9kTUFDOmZyLFpvZE1hcDpDcixab2ROYU46SHIsWm9kTmFub0lEOk1uLFpvZE5ldmVyOndyLFpvZE5vbk9wdGlvbmFsOnNvLFpvZE51bGw6eXIsWm9kTnVsbGFibGU6TnIsWm9kTnVtYmVyOlp0LFpvZE51bWJlckZvcm1hdDpHZSxab2RPYmplY3Q6TXQsWm9kT3B0aW9uYWw6THQsWm9kUGlwZTpVdCxab2RQcmVmYXVsdDpxcixab2RQcmVwcm9jZXNzOlZyLFpvZFByb21pc2U6WXIsWm9kUmVhZG9ubHk6SnIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDppdCxab2RTZXQ6RXIsWm9kU3RyaW5nOnh0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6VXIsWm9kU3ltYm9sOmJyLFpvZFRlbXBsYXRlTGl0ZXJhbDpXcixab2RUcmFuc2Zvcm06UnIsWm9kVHVwbGU6UHIsWm9kVHlwZTpFLFpvZFVMSUQ6TG4sWm9kVVJMOlJ0LFpvZFVVSUQ6Q2UsWm9kVW5kZWZpbmVkOnZyLFpvZFVuaW9uOnF0LFpvZFVua25vd246a3IsWm9kVm9pZDokcixab2RYSUQ6VW4sWm9kWG9yOnpyLF9ab2RTdHJpbmc6Um4sX2RlZmF1bHQ6TXIsX2Z1bmN0aW9uOnd0LGFueTplbyxhcnJheTpQLGJhc2U2NDpNYSxiYXNlNjR1cmw6cWEsYmlnaW50OlhhLGJvb2xlYW46TCxjYXRjaDpGcixjaGVjazprYyxjaWRydjQ6TmEsY2lkcnY2OmphLGNsb25lOlEsY29kZWM6YmMsY29lcmNlOnJmLGNvbXBpbGU6eGksY29uZmlnOm5lLGNvcmU6RmgsY3JlZGl0Q2FyZDpMYSxjdWlkOlBhLGN1aWQyOnhhLGN1cnJlbmN5Q29kZTpKYSxjdXN0b206ZXMsZGF0ZTpyYyxkZWNvZGU6ZGEsZGVjb2RlQXN5bmM6aGEsZGVlcFBhcnRpYWw6ZWYsZGVzY3JpYmU6d2MsZGlzY3JpbWluYXRlZFVuaW9uOm5vLGUxNjQ6RGEsZW1haWw6dmEsZW1vamk6VGEsZW5jb2RlOmxhLGVuY29kZUFzeW5jOnBhLGVuZHNXaXRoOlRuLGVudW06aWUsZXhhY3RPcHRpb25hbDpacixmaWxlOmhjLGZsYXR0ZW5FcnJvcjpRbyxmbG9hdDMyOldhLGZsb2F0NjQ6R2EsZm9ybWF0RXJyb3I6WW8sZnJvbUpTT05TY2hlbWE6WGgsZnVuY3Rpb246d3QsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpnaSxnZXRFcnJvck1hcDpHaCxnbG9iYWxSZWdpc3RyeTokZSxndDpxZSxndGU6eWUsZ3VpZDp5YSxoYXNoOkthLGhleDpWYSxob3N0bmFtZTpIYSxodHRwVXJsOnphLGliYW46VWEsaW5jbHVkZXM6U24saW5wdXQ6bmYsaW5zdGFuY2VvZjpTYyxpbnQ6bm4saW50MzI6UWEsaW50NjQ6ZWMsaW50ZXJzZWN0aW9uOkR0LGludmVydENvZGVjOnZjLGlwdjQ6T2EsaXB2NjpaYSxpc286SWMsanNvbjpUYyxqd3Q6QmEsa2V5b2Y6c2Msa3N1aWQ6QWEsbGF6eTpRcixsZW5ndGg6SXQsbGl0ZXJhbDpmLGxvY2FsZXM6d2ksbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6dWMsbG93ZXJjYXNlOnduLGx0Ok1lLGx0ZTp2ZSxtYWM6UmEsbWFwOmxjLG1heExlbmd0aDpUdCxtYXhTaXplOnV0LG1lbW9pemVyOnNyLG1ldGE6JGMsbWltZTpQbixtaW5MZW5ndGg6SmUsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOnJ0LG5hbjpnYyxuYW5vaWQ6SWEsbmF0aXZlRW51bTpwYyxuZWdhdGl2ZTpscixuZXZlcjpzdCxub25uZWdhdGl2ZTpwcixub25vcHRpb25hbDpMcixub25wb3NpdGl2ZTpkcixub3JtYWxpemU6eG4sbnVsbDpYbixudWxsYWJsZTprdCxudWxsaXNoOmZjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYsb3V0cHV0Om9mLG92ZXJ3cml0ZTpPZSxwYXJzZTppYSxwYXJzZUFzeW5jOmFhLHBhcnRpYWxSZWNvcmQ6Y2MscGlwZTpvbixwb3NpdGl2ZTp1cixwcmVmYXVsdDpEcixwcmVwcm9jZXNzOmlvLHByZXR0aWZ5RXJyb3I6SHMscHJvbWlzZTpfYyxwcm9wZXJ0aWVzOkluLHByb3BlcnR5OmhyLHJlYWRvbmx5OktyLHJlY29yZDpaLHJlZmluZTp0cyxyZWdleDprbixyZWdleGVzOm9yLHJlZ2lzdHJ5OmlyLHNhZmVEZWNvZGU6bWEsc2FmZURlY29kZUFzeW5jOmJhLHNhZmVFbmNvZGU6ZmEsc2FmZUVuY29kZUFzeW5jOmdhLHNhZmVQYXJzZTpjYSxzYWZlUGFyc2VBc3luYzp1YSxzZXQ6ZGMsc2V0RXJyb3JNYXA6V2gsc2l6ZTp6dCxzbHVnaWZ5Ok9uLHN0YXJ0c1dpdGg6em4sc3RyaWN0T2JqZWN0OmljLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpGYSxzdHJpbmdib29sOnpjLHN1Y2Nlc3M6bWMsc3VwZXJSZWZpbmU6bnMsc3ltYm9sOm5jLHRlbXBsYXRlTGl0ZXJhbDp5Yyx0b0pTT05TY2hlbWE6b2EsdG9Mb3dlckNhc2U6RW4sdG9VcHBlckNhc2U6QW4sdG9ab2Q6VW8sdHJhbnNmb3JtOm9vLHRyZWVpZnlFcnJvcjpGcyx0cmltOkNuLHR1cGxlOnhyLHVpbnQzMjpZYSx1aW50NjQ6dGMsdWxpZDpDYSx1bmRlZmluZWQ6X3QsdW5pb246QSx1bmtub3duOkQsdXBwZXJjYXNlOiRuLHVybDpTYSx1dGlsOkxzLHV1aWQ6X2EsdXVpZHY0OmthLHV1aWR2Njp3YSx1dWlkdjc6JGEsdmFsaWRhdGU6ZXIsdmFsaWRhdGVBc3luYzp0cix2b2lkOm9jLHdpdGhQYXJzZXI6Q2kseGlkOkVhLHhvcjphY30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxkdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOkJzLCRpbnB1dDpTaSwkb3V0cHV0OiRpLElOVkFMSUQ6VGksTkVWRVI6VXMsVGltZVByZWNpc2lvbjpZaSxab2RBbnk6X3IsWm9kQXJyYXk6U3IsWm9kQmFzZTY0OktuLFpvZEJhc2U2NFVSTDpXbixab2RCaWdJbnQ6anQsWm9kQmlnSW50Rm9ybWF0OlluLFpvZEJvb2xlYW46TnQsWm9kQ0lEUnY0OlZuLFpvZENJRFJ2NjpKbixab2RDVUlEOnFuLFpvZENVSUQyOkRuLFpvZENhdGNoOkJyLFpvZENvZGVjOkJ0LFpvZENvbXBpbGVBc3luY0Vycm9yOklpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOlBpLFpvZENyZWRpdENhcmQ6bXIsWm9kQ3VzdG9tOkZ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpXZSxab2REYXRlOnRvLFpvZERlZmF1bHQ6anIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOlRyLFpvZEUxNjQ6R24sWm9kRW1haWw6Wm4sWm9kRW1vamk6am4sWm9kRW51bTphdCxab2RFcnJvcjpKaCxab2RFeGFjdE9wdGlvbmFsOnJvLFpvZEZpbGU6T3IsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBPb30sWm9kRnVuY3Rpb246WHIsWm9kR1VJRDpObixab2RJQkFOOmdyLFpvZElQdjQ6Rm4sWm9kSVB2NjpIbixab2RJU09EYXRlOkV0LFpvZElTT0RhdGVUaW1lOkN0LFpvZElTT0R1cmF0aW9uOk90LFpvZElTT1RpbWU6QXQsWm9kSW5zdGFuY2VPZjpvcyxab2RJbnRlcnNlY3Rpb246SXIsWm9kSXNzdWVDb2RlOktoLFpvZEpXVDpRbixab2RLU1VJRDpCbixab2RMYXp5OkdyLFpvZExpdGVyYWw6QXIsWm9kTUFDOmZyLFpvZE1hcDpDcixab2ROYU46SHIsWm9kTmFub0lEOk1uLFpvZE5ldmVyOndyLFpvZE5vbk9wdGlvbmFsOnNvLFpvZE51bGw6eXIsWm9kTnVsbGFibGU6TnIsWm9kTnVtYmVyOlp0LFpvZE51bWJlckZvcm1hdDpHZSxab2RPYmplY3Q6TXQsWm9kT3B0aW9uYWw6THQsWm9kUGlwZTpVdCxab2RQcmVmYXVsdDpxcixab2RQcmVwcm9jZXNzOlZyLFpvZFByb21pc2U6WXIsWm9kUmVhZG9ubHk6SnIsWm9kUmVhbEVycm9yOm1lLFpvZFJlY29yZDppdCxab2RTZXQ6RXIsWm9kU3RyaW5nOnh0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6VXIsWm9kU3ltYm9sOmJyLFpvZFRlbXBsYXRlTGl0ZXJhbDpXcixab2RUcmFuc2Zvcm06UnIsWm9kVHVwbGU6UHIsWm9kVHlwZTpFLFpvZFVMSUQ6TG4sWm9kVVJMOlJ0LFpvZFVVSUQ6Q2UsWm9kVW5kZWZpbmVkOnZyLFpvZFVuaW9uOnF0LFpvZFVua25vd246a3IsWm9kVm9pZDokcixab2RYSUQ6VW4sWm9kWG9yOnpyLF9ab2RTdHJpbmc6Um4sX2RlZmF1bHQ6TXIsX2Z1bmN0aW9uOnd0LGFueTplbyxhcnJheTpQLGJhc2U2NDpNYSxiYXNlNjR1cmw6cWEsYmlnaW50OlhhLGJvb2xlYW46TCxjYXRjaDpGcixjaGVjazprYyxjaWRydjQ6TmEsY2lkcnY2OmphLGNsb25lOlEsY29kZWM6YmMsY29lcmNlOnJmLGNvbXBpbGU6eGksY29uZmlnOm5lLGNvcmU6RmgsY3JlZGl0Q2FyZDpMYSxjdWlkOlBhLGN1aWQyOnhhLGN1cnJlbmN5Q29kZTpKYSxjdXN0b206ZXMsZGF0ZTpyYyxkZWNvZGU6ZGEsZGVjb2RlQXN5bmM6aGEsZGVlcFBhcnRpYWw6ZWYsZGVmYXVsdDpDdSxkZXNjcmliZTp3YyxkaXNjcmltaW5hdGVkVW5pb246bm8sZTE2NDpEYSxlbWFpbDp2YSxlbW9qaTpUYSxlbmNvZGU6bGEsZW5jb2RlQXN5bmM6cGEsZW5kc1dpdGg6VG4sZW51bTppZSxleGFjdE9wdGlvbmFsOlpyLGZpbGU6aGMsZmxhdHRlbkVycm9yOlFvLGZsb2F0MzI6V2EsZmxvYXQ2NDpHYSxmb3JtYXRFcnJvcjpZbyxmcm9tSlNPTlNjaGVtYTpYaCxmdW5jdGlvbjp3dCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOmdpLGdldEVycm9yTWFwOkdoLGdsb2JhbFJlZ2lzdHJ5OiRlLGd0OnFlLGd0ZTp5ZSxndWlkOnlhLGhhc2g6S2EsaGV4OlZhLGhvc3RuYW1lOkhhLGh0dHBVcmw6emEsaWJhbjpVYSxpbmNsdWRlczpTbixpbnB1dDpuZixpbnN0YW5jZW9mOlNjLGludDpubixpbnQzMjpRYSxpbnQ2NDplYyxpbnRlcnNlY3Rpb246RHQsaW52ZXJ0Q29kZWM6dmMsaXB2NDpPYSxpcHY2OlphLGlzbzpJYyxqc29uOlRjLGp3dDpCYSxrZXlvZjpzYyxrc3VpZDpBYSxsYXp5OlFyLGxlbmd0aDpJdCxsaXRlcmFsOmYsbG9jYWxlczp3aSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDp1Yyxsb3dlcmNhc2U6d24sbHQ6TWUsbHRlOnZlLG1hYzpSYSxtYXA6bGMsbWF4TGVuZ3RoOlR0LG1heFNpemU6dXQsbWVtb2l6ZXI6c3IsbWV0YTokYyxtaW1lOlBuLG1pbkxlbmd0aDpKZSxtaW5TaXplOkRlLG11bHRpcGxlT2Y6cnQsbmFuOmdjLG5hbm9pZDpJYSxuYXRpdmVFbnVtOnBjLG5lZ2F0aXZlOmxyLG5ldmVyOnN0LG5vbm5lZ2F0aXZlOnByLG5vbm9wdGlvbmFsOkxyLG5vbnBvc2l0aXZlOmRyLG5vcm1hbGl6ZTp4bixudWxsOlhuLG51bGxhYmxlOmt0LG51bGxpc2g6ZmMsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6VixvdXRwdXQ6b2Ysb3ZlcndyaXRlOk9lLHBhcnNlOmlhLHBhcnNlQXN5bmM6YWEscGFydGlhbFJlY29yZDpjYyxwaXBlOm9uLHBvc2l0aXZlOnVyLHByZWZhdWx0OkRyLHByZXByb2Nlc3M6aW8scHJldHRpZnlFcnJvcjpIcyxwcm9taXNlOl9jLHByb3BlcnRpZXM6SW4scHJvcGVydHk6aHIscmVhZG9ubHk6S3IscmVjb3JkOloscmVmaW5lOnRzLHJlZ2V4OmtuLHJlZ2V4ZXM6b3IscmVnaXN0cnk6aXIsc2FmZURlY29kZTptYSxzYWZlRGVjb2RlQXN5bmM6YmEsc2FmZUVuY29kZTpmYSxzYWZlRW5jb2RlQXN5bmM6Z2Esc2FmZVBhcnNlOmNhLHNhZmVQYXJzZUFzeW5jOnVhLHNldDpkYyxzZXRFcnJvck1hcDpXaCxzaXplOnp0LHNsdWdpZnk6T24sc3RhcnRzV2l0aDp6bixzdHJpY3RPYmplY3Q6aWMsc3RyaW5nOmgsc3RyaW5nRm9ybWF0OkZhLHN0cmluZ2Jvb2w6emMsc3VjY2VzczptYyxzdXBlclJlZmluZTpucyxzeW1ib2w6bmMsdGVtcGxhdGVMaXRlcmFsOnljLHRvSlNPTlNjaGVtYTpvYSx0b0xvd2VyQ2FzZTpFbix0b1VwcGVyQ2FzZTpBbix0b1pvZDpVbyx0cmFuc2Zvcm06b28sdHJlZWlmeUVycm9yOkZzLHRyaW06Q24sdHVwbGU6eHIsdWludDMyOllhLHVpbnQ2NDp0Yyx1bGlkOkNhLHVuZGVmaW5lZDpfdCx1bmlvbjpBLHVua25vd246RCx1cHBlcmNhc2U6JG4sdXJsOlNhLHV0aWw6THMsdXVpZDpfYSx1dWlkdjQ6a2EsdXVpZHY2OndhLHV1aWR2NzokYSx2YWxpZGF0ZTplcix2YWxpZGF0ZUFzeW5jOnRyLHZvaWQ6b2Msd2l0aFBhcnNlcjpDaSx4aWQ6RWEseG9yOmFjLHo6Q3V9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksZXQ9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIscnM9IjIuMCIsdGU9ZXMoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSksc2Y9QShbaCgpLEMoKS5pbnQoKV0pLGFmPWgoKTtzZSh7dHRsOkMoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpDKCkub3B0aW9uYWwoKX0pO2NvbnN0IHB2PWcoe3R0bDpDKCkub3B0aW9uYWwoKX0pLGh2PWcoe3Rhc2tJZDpoKCl9KSxQYz1zZSh7cHJvZ3Jlc3NUb2tlbjpzZi5vcHRpb25hbCgpLFtldF06aHYub3B0aW9uYWwoKX0pLGtlPWcoe19tZXRhOlBjLm9wdGlvbmFsKCl9KSxhbz1rZS5leHRlbmQoe3Rhc2s6cHYub3B0aW9uYWwoKX0pLGZ2PWU9PmFvLnNhZmVQYXJzZShlKS5zdWNjZXNzLGFlPWcoe21ldGhvZDpoKCkscGFyYW1zOmtlLmxvb3NlKCkub3B0aW9uYWwoKX0pLFRlPWcoe19tZXRhOlBjLm9wdGlvbmFsKCl9KSxJZT1nKHttZXRob2Q6aCgpLHBhcmFtczpUZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxjZT1zZSh7X21ldGE6UGMub3B0aW9uYWwoKX0pLGNvPUEoW2goKSxDKCkuaW50KCldKSxjZj1nKHtqc29ucnBjOmYocnMpLGlkOmNvLC4uLmFlLnNoYXBlfSkuc3RyaWN0KCksRXU9ZT0+Y2Yuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsdWY9Zyh7anNvbnJwYzpmKHJzKSwuLi5JZS5zaGFwZX0pLnN0cmljdCgpLG12PWU9PnVmLnNhZmVQYXJzZShlKS5zdWNjZXNzLHhjPWcoe2pzb25ycGM6ZihycyksaWQ6Y28scmVzdWx0OmNlfSkuc3RyaWN0KCksd289ZT0+eGMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3M7dmFyIEI7KGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0aW9uQ2xvc2VkPS0zMmUzXT0iQ29ubmVjdGlvbkNsb3NlZCIsZVtlLlJlcXVlc3RUaW1lb3V0PS0zMjAwMV09IlJlcXVlc3RUaW1lb3V0IixlW2UuUGFyc2VFcnJvcj0tMzI3MDBdPSJQYXJzZUVycm9yIixlW2UuSW52YWxpZFJlcXVlc3Q9LTMyNjAwXT0iSW52YWxpZFJlcXVlc3QiLGVbZS5NZXRob2ROb3RGb3VuZD0tMzI2MDFdPSJNZXRob2ROb3RGb3VuZCIsZVtlLkludmFsaWRQYXJhbXM9LTMyNjAyXT0iSW52YWxpZFBhcmFtcyIsZVtlLkludGVybmFsRXJyb3I9LTMyNjAzXT0iSW50ZXJuYWxFcnJvciIsZVtlLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQ9LTMyMDQyXT0iVXJsRWxpY2l0YXRpb25SZXF1aXJlZCJ9KShCfHwoQj17fSkpO2NvbnN0IENjPWcoe2pzb25ycGM6ZihycyksaWQ6Y28ub3B0aW9uYWwoKSxlcnJvcjpnKHtjb2RlOkMoKS5pbnQoKSxtZXNzYWdlOmgoKSxkYXRhOkQoKS5vcHRpb25hbCgpfSl9KS5zdHJpY3QoKSxndj1lPT5DYy5zYWZlUGFyc2UoZSkuc3VjY2Vzcyxidj1BKFtjZix1Zix4YyxDY10pO0EoW3hjLENjXSk7Y29uc3QgRWM9Y2Uuc3RyaWN0KCksdnY9VGUuZXh0ZW5kKHtyZXF1ZXN0SWQ6Y28ub3B0aW9uYWwoKSxyZWFzb246aCgpLm9wdGlvbmFsKCl9KSxBYz1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczp2dn0pLHl2PWcoe3NyYzpoKCksbWltZVR5cGU6aCgpLm9wdGlvbmFsKCksc2l6ZXM6UChoKCkpLm9wdGlvbmFsKCksdGhlbWU6aWUoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLHVvPWcoe2ljb25zOlAoeXYpLm9wdGlvbmFsKCl9KSwkdD1nKHtuYW1lOmgoKSx0aXRsZTpoKCkub3B0aW9uYWwoKX0pLHNzPSR0LmV4dGVuZCh7Li4uJHQuc2hhcGUsLi4udW8uc2hhcGUsdmVyc2lvbjpoKCksd2Vic2l0ZVVybDpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKX0pLF92PUR0KGcoe2FwcGx5RGVmYXVsdHM6TCgpLm9wdGlvbmFsKCl9KSxaKGgoKSxEKCkpKSxrdj1pbyhlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLER0KGcoe2Zvcm06X3Yub3B0aW9uYWwoKSx1cmw6dGUub3B0aW9uYWwoKX0pLFooaCgpLEQoKSkub3B0aW9uYWwoKSkpLHd2PXNlKHtsaXN0OnRlLm9wdGlvbmFsKCksY2FuY2VsOnRlLm9wdGlvbmFsKCkscmVxdWVzdHM6c2Uoe3NhbXBsaW5nOnNlKHtjcmVhdGVNZXNzYWdlOnRlLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnNlKHtjcmVhdGU6dGUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksJHY9c2Uoe2xpc3Q6dGUub3B0aW9uYWwoKSxjYW5jZWw6dGUub3B0aW9uYWwoKSxyZXF1ZXN0czpzZSh7dG9vbHM6c2Uoe2NhbGw6dGUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksU3Y9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLHRlKS5vcHRpb25hbCgpLHNhbXBsaW5nOmcoe2NvbnRleHQ6dGUub3B0aW9uYWwoKSx0b29sczp0ZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjprdi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczp3di5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksdGUpLm9wdGlvbmFsKCl9KSx6dj1rZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOlN2LGNsaWVudEluZm86c3N9KSxUdj1hZS5leHRlbmQoe21ldGhvZDpmKCJpbml0aWFsaXplIikscGFyYW1zOnp2fSksSXY9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLHRlKS5vcHRpb25hbCgpLGxvZ2dpbmc6dGUub3B0aW9uYWwoKSxjb21wbGV0aW9uczp0ZS5vcHRpb25hbCgpLHByb21wdHM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczpnKHtzdWJzY3JpYmU6TCgpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczokdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksdGUpLm9wdGlvbmFsKCl9KSxQdj1jZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOkl2LHNlcnZlckluZm86c3MsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSkseHY9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSksaXM9YWUuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczprZS5vcHRpb25hbCgpfSksQ3Y9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOlYoQygpKSxtZXNzYWdlOlYoaCgpKX0pLEV2PWcoey4uLlRlLnNoYXBlLC4uLkN2LnNoYXBlLHByb2dyZXNzVG9rZW46c2Z9KSxPYz1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOkV2fSksQXY9a2UuZXh0ZW5kKHtjdXJzb3I6YWYub3B0aW9uYWwoKX0pLGxvPWFlLmV4dGVuZCh7cGFyYW1zOkF2Lm9wdGlvbmFsKCl9KSxwbz1jZS5leHRlbmQoe25leHRDdXJzb3I6YWYub3B0aW9uYWwoKX0pLE92PWllKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLGhvPWcoe3Rhc2tJZDpoKCksc3RhdHVzOk92LHR0bDpBKFtDKCksWG4oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOlYoQygpKSxzdGF0dXNNZXNzYWdlOlYoaCgpKX0pLFJjPWNlLmV4dGVuZCh7dGFzazpob30pLFJ2PVRlLm1lcmdlKGhvKSxSbz1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpSdn0pLFpjPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczprZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLE5jPWNlLm1lcmdlKGhvKSxqYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6a2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtjZS5sb29zZSgpO2NvbnN0IE1jPWxvLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLHFjPXBvLmV4dGVuZCh7dGFza3M6UChobyl9KSxEYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6a2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxadj1jZS5tZXJnZShobyksbGY9Zyh7dXJpOmgoKSxtaW1lVHlwZTpWKGgoKSksX21ldGE6WihoKCksRCgpKS5vcHRpb25hbCgpfSksZGY9bGYuZXh0ZW5kKHt0ZXh0OmgoKX0pLExjPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSkscGY9bGYuZXh0ZW5kKHtibG9iOkxjfSksZm89aWUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLEh0PWcoe2F1ZGllbmNlOlAoZm8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6UWgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxoZj1nKHsuLi4kdC5zaGFwZSwuLi51by5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxtaW1lVHlwZTpWKGgoKSksc2l6ZTpWKEMoKSksYW5ub3RhdGlvbnM6SHQub3B0aW9uYWwoKSxfbWV0YTpWKHNlKHt9KSl9KSxOdj1nKHsuLi4kdC5zaGFwZSwuLi51by5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246VihoKCkpLG1pbWVUeXBlOlYoaCgpKSxhbm5vdGF0aW9uczpIdC5vcHRpb25hbCgpLF9tZXRhOlYoc2Uoe30pKX0pLGp2PWxvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxmZj1wby5leHRlbmQoe3Jlc291cmNlczpQKGhmKX0pLE12PWxvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSkscXY9cG8uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpQKE52KX0pLFVjPWtlLmV4dGVuZCh7dXJpOmgoKX0pLER2PVVjLEx2PWFlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOkR2fSksbWY9Y2UuZXh0ZW5kKHtjb250ZW50czpQKEEoW2RmLHBmXSkpfSksVXY9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlRlLm9wdGlvbmFsKCl9KSxCdj1VYyxGdj1hZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOkJ2fSksSHY9VWMsVnY9YWUuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOkh2fSksSnY9VGUuZXh0ZW5kKHt1cmk6aCgpfSksS3Y9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpKdn0pLFd2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxyZXF1aXJlZDpWKEwoKSl9KSxHdj1nKHsuLi4kdC5zaGFwZSwuLi51by5zaGFwZSxkZXNjcmlwdGlvbjpWKGgoKSksYXJndW1lbnRzOlYoUChXdikpLF9tZXRhOlYoc2Uoe30pKX0pLFF2PWxvLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksWXY9cG8uZXh0ZW5kKHtwcm9tcHRzOlAoR3YpfSksWHY9a2UuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6WihoKCksaCgpKS5vcHRpb25hbCgpfSksZXk9YWUuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6WHZ9KSxCYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpIdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLEZjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOkxjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpIdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLEhjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOkxjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpIdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLHR5PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6WihoKCksRCgpKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxnZj1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6QShbZGYscGZdKSxhbm5vdGF0aW9uczpIdC5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLGJmPWhmLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxtbz1BKFtCYyxGYyxIYyxiZixnZl0pLG55PWcoe3JvbGU6Zm8sY29udGVudDptb30pLG95PWNlLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6UChueSl9KSxyeT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlRlLm9wdGlvbmFsKCl9KSxzeT1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6TCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkwoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkwoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6TCgpLm9wdGlvbmFsKCl9KSxpeT1nKHt0YXNrU3VwcG9ydDppZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLFZjPWcoey4uLiR0LnNoYXBlLC4uLnVvLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSx0ZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSx0ZSkub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSkub3B0aW9uYWwoKSxhbm5vdGF0aW9uczpzeS5vcHRpb25hbCgpLGV4ZWN1dGlvbjppeS5vcHRpb25hbCgpLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLHZmPWxvLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2xpc3QiKX0pLGF5PXBvLmV4dGVuZCh7dG9vbHM6UChWYyl9KSxhcz1jZS5leHRlbmQoe2NvbnRlbnQ6UChtbykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6WihoKCksRCgpKS5vcHRpb25hbCgpLGlzRXJyb3I6TCgpLm9wdGlvbmFsKCl9KTthcy5vcihjZS5leHRlbmQoe3Rvb2xSZXN1bHQ6RCgpfSkpO2NvbnN0IGN5PWFvLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLHlmPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2NhbGwiKSxwYXJhbXM6Y3l9KSx1eT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSk7Zyh7YXV0b1JlZnJlc2g6TCgpLmRlZmF1bHQoITApLGRlYm91bmNlTXM6QygpLmludCgpLm5vbm5lZ2F0aXZlKCkuZGVmYXVsdCgzMDApfSk7Y29uc3QgX2Y9aWUoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLGx5PWtlLmV4dGVuZCh7bGV2ZWw6X2Z9KSxkeT1hZS5leHRlbmQoe21ldGhvZDpmKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOmx5fSkscHk9VGUuZXh0ZW5kKHtsZXZlbDpfZixsb2dnZXI6aCgpLm9wdGlvbmFsKCksZGF0YTpEKCl9KSxoeT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6cHl9KSxmeT1nKHtuYW1lOmgoKS5vcHRpb25hbCgpfSksbXk9Zyh7aGludHM6UChmeSkub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLGd5PWcoe21vZGU6aWUoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSxieT1nKHt0eXBlOmYoInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmgoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDpQKG1vKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpMKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSx2eT1ubygidHlwZSIsW0JjLEZjLEhjXSksWm89bm8oInR5cGUiLFtCYyxGYyxIYyx0eSxieV0pLHl5PWcoe3JvbGU6Zm8sY29udGVudDpBKFtabyxQKFpvKV0pLF9tZXRhOlooaCgpLEQoKSkub3B0aW9uYWwoKX0pLF95PWFvLmV4dGVuZCh7bWVzc2FnZXM6UCh5eSksbW9kZWxQcmVmZXJlbmNlczpteS5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpoKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDppZShbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOkMoKS5vcHRpb25hbCgpLG1heFRva2VuczpDKCkuaW50KCksc3RvcFNlcXVlbmNlczpQKGgoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTp0ZS5vcHRpb25hbCgpLHRvb2xzOlAoVmMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpneS5vcHRpb25hbCgpfSksa3k9YWUuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpfeX0pLGtmPWNlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246VihpZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTpmbyxjb250ZW50OnZ5fSksd2Y9Y2UuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpWKGllKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTpmbyxjb250ZW50OkEoW1pvLFAoWm8pXSl9KSx3eT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkwoKS5vcHRpb25hbCgpfSksJHk9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDppZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxTeT1nKHt0eXBlOmllKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLHp5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpQKGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLFR5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxJeT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGVudW1OYW1lczpQKGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksUHk9QShbenksVHldKSx4eT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOlAoaCgpKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSxDeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6UChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDpQKGgoKSkub3B0aW9uYWwoKX0pLEV5PUEoW3h5LEN5XSksQXk9QShbSXksUHksRXldKSxPeT1BKFtBeSx3eSwkeSxTeV0pLFJ5PWFvLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOlooaCgpLE95KSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pfSksWnk9YW8uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSxOeT1BKFtSeSxaeV0pLGp5PWFlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpOeX0pLE15PVRlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxxeT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOk15fSksRHk9Y2UuZXh0ZW5kKHthY3Rpb246aWUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6aW8oZT0+ZT09PW51bGw/dm9pZCAwOmUsWihoKCksQShbaCgpLEMoKSxMKCksUChoKCkpXSkpLm9wdGlvbmFsKCkpfSksTHk9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksVXk9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSxCeT1rZS5leHRlbmQoe3JlZjpBKFtVeSxMeV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOlooaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxGeT1hZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOkJ5fSksSHk9Y2UuZXh0ZW5kKHtjb21wbGV0aW9uOnNlKHt2YWx1ZXM6UChoKCkpLm1heCgxMDApLHRvdGFsOlYoQygpLmludCgpKSxoYXNNb3JlOlYoTCgpKX0pfSksVnk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxKeT1hZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOmtlLm9wdGlvbmFsKCl9KSxLeT1jZS5leHRlbmQoe3Jvb3RzOlAoVnkpfSksV3k9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6VGUub3B0aW9uYWwoKX0pO0EoW2lzLFR2LEZ5LGR5LGV5LFF2LGp2LE12LEx2LEZ2LFZ2LHlmLHZmLFpjLGpjLE1jLERjXSk7QShbQWMsT2MseHYsV3ksUm9dKTtBKFtFYyxrZix3ZixEeSxLeSxOYyxxYyxSY10pO0EoW2lzLGt5LGp5LEp5LFpjLGpjLE1jLERjXSk7QShbQWMsT2MsaHksS3YsVXYsdXkscnksUm8scXldKTtBKFtFYyxQdixIeSxveSxZdixmZixxdixtZixhcyxheSxOYyxxYyxSY10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PUIuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgR3koci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgR3kgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihCLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gQXUoZSl7Y29uc3Qgbj1MYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89VWIobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBPdShlLHQpe2NvbnN0IG49SGgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBReT02ZTQ7Y2xhc3MgWXl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoQWMsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKE9jLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihpcyxuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFpjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGpjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgaTtmb3IoO2k9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoaS50eXBlPT09InJlc3BvbnNlInx8aS50eXBlPT09ImVycm9yIil7Y29uc3QgdT1pLm1lc3NhZ2UsbD11LmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxpLnR5cGU9PT0icmVzcG9uc2UiKWQodSk7ZWxzZXtjb25zdCBtPXUsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09aS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGkubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFhKXRocm93IG5ldyBqKEIuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighWGUoYS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoWGUoYS5zdGF0dXMpKXtjb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uaSxfbWV0YTp7Li4uaS5fbWV0YSxbZXRdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihNYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKERjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKEIuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKFhlKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihCLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKEIuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihCLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKEIuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGEpPT57cj8uKHMsYSksd28ocyl8fGd2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6RXUocyk/dGhpcy5fb25yZXF1ZXN0KHMsYSk6bXYocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoQi5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bZXRdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOkIuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGEpO2NvbnN0IGk9ZnYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLHU9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDphLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooQi5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IF89di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBfJiZ1JiZhd2FpdCB1LnVwZGF0ZVRhc2tTdGF0dXMoXywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6dSx0YXNrUmVxdWVzdGVkVHRsOmk/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpCLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWEmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgYT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxpPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihpJiZhJiZpLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaCh1KXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxhKHUpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksd28odCkpbyh0KTtlbHNle2NvbnN0IGE9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oYSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKHdvKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgYT10LnJlc3VsdDtpZihhLnRhc2smJnR5cGVvZiBhLnRhc2s9PSJvYmplY3QiKXtjb25zdCBpPWEudGFzazt0eXBlb2YgaS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGkudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksd28odCkpcih0KTtlbHNle2NvbnN0IGE9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoYSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChhKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6YSBpbnN0YW5jZW9mIGo/YTpuZXcgaihCLkludGVybmFsRXJyb3IsU3RyaW5nKGEpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBhPWF3YWl0IHRoaXMucmVxdWVzdCh0LFJjLG8pO2lmKGEudGFzaylzPWEudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6YS50YXNrfTtlbHNlIHRocm93IG5ldyBqKEIuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazppfSxYZShpLnN0YXR1cykpe2kuc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06aS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooQi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9Omkuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooQi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGkuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IHU9aS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLHUpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGEpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjphIGluc3RhbmNlb2Ygaj9hOm5ldyBqKEIuSW50ZXJuYWxFcnJvcixTdHJpbmcoYSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmEsdGFzazppLHJlbGF0ZWRUYXNrOnV9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09ST0+e2QoSSl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksaSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goSSl7bShJKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksaSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOml9KSx1JiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtldF06dX19KTtjb25zdCBfPUk9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKEkpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBHPUkgaW5zdGFuY2VvZiBqP0k6bmV3IGooQi5SZXF1ZXN0VGltZW91dCxTdHJpbmcoSSkpO2QoRyl9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsST0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChJKTt0cnl7Y29uc3QgRz1IaChuLEkucmVzdWx0KTtHLnN1Y2Nlc3M/bChHLmRhdGEpOmQoRy5lcnJvcil9Y2F0Y2goRyl7ZChHKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntfKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IHc9bz8udGltZW91dD8/UXksJD0oKT0+XyhqLmZyb21FcnJvcihCLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6d30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYix3LG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBOPXU/LnRhc2tJZDtpZihOKXtjb25zdCBJPUc9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTtvZT9vZShHKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsSSksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKE4se3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEc9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEcpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YX0pLmNhdGNoKEk9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEkpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxOYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0scWMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sWnYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBpPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbZXRdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTppLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGk9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihpPXsuLi5pLHBhcmFtczp7Li4uaS5wYXJhbXMsX21ldGE6ey4uLmkucGFyYW1zPy5fbWV0YXx8e30sW2V0XTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoaSxuKS5jYXRjaCh1PT50aGlzLl9vbmVycm9yKHUpKX0pO3JldHVybn1sZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbZXRdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGEsbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPUF1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGE9T3UodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oYSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPUF1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPU91KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZFdShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxhPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2E/KGEobmV3IGooQi5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihCLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgYT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoYSkscyhuZXcgaihCLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxhKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxhLG4pO2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoaSl7Y29uc3QgdT1Sby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOml9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxYZShpLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxhKT0+e2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWkpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihYZShpLnN0YXR1cykpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2kuc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGEsbik7Y29uc3QgdT1hd2FpdCBvLmdldFRhc2socixuKTtpZih1KXtjb25zdCBsPVJvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6dX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLFhlKHUuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIFJ1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBYeShlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBhPW5bcl07UnUoYSkmJlJ1KHMpP25bcl09ey4uLmEsLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIGVfIGV4dGVuZHMgWXl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8sYT0+e2xldCBpPWEucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsaSkscy5vbkhhbmRsZXI/LihpKTtmb3IobGV0IHUgb2ZbLi4ucy5saXN0ZW5lcnNdKXUoaSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIHRfPSIyMDI2LTAxLTI2IixuXz0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIG9fe2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1idi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PW5fJiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgcl89QShbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIikscm49QShbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLHNfPUEoW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLGlfPVooc18uZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksQShbaCgpLF90KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIGFfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLGNfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSx1Xz1nKHtpc0Vycm9yOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIEpjPWcoe2Nvbm5lY3REb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLEtjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBsXz1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksZF89Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpaKGgoKSxEKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLHBfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxoXz1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLGZfPWcoe3ZhcmlhYmxlczppXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOmhfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxtXz1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtaKGgoKSxEKCkpO3ZhciBadT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIGdfPWcoe2V4cGVyaW1lbnRhbDpaKGgoKSxaKGgoKSxlbygpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOktjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpKYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpadS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6WnUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxiXz1nKHtleHBlcmltZW50YWw6WihoKCksWihoKCksZW8oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlAocm4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6SmMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOktjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTpybi5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciB2Xz1nKHttb2RlOnJuLmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSx5Xz1BKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UCh5Xykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpzdCgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6c3QoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6UChBKFtnZixiZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlAobW8pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpKYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOktjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIF9fPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOmFzLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksJGY9Zyh7dG9vbEluZm86Zyh7aWQ6Y28ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOlZjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOnJfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6Zl8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOnJuLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChybikub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkEoW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0OkEoW0MoKSxfdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEEoW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOkEoW0MoKSxfdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06QShbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLGtfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOiRmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OlAobW8pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpaKGgoKSxEKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86c3MuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOmJfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciB3Xz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOnNzLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6Z18uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6JGYuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksJF89e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIE51KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oJF8pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IFFmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5kdiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBqdShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGE9cy5wYXRoPy5tYXAoaT0+dHlwZW9mIGk9PSJvYmplY3QiP2kua2V5OmkpLmpvaW4oIi4iKTtyZXR1cm4gYT9gJHthfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gU18oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gel8oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIFRfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgV2MgZXh0ZW5kcyBlX3tfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6bF8sdG9vbGlucHV0cGFydGlhbDpkXyx0b29scmVzdWx0Ol9fLHRvb2xjYW5jZWxsZWQ6cF8saG9zdGNvbnRleHRjaGFuZ2VkOmtffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFXYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8bmUoe2ppdGxlc3M6ITB9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGlzLHI9Pihjb25zb2xlLmxvZygiUmVjZWl2ZWQgcGluZzoiLHIucGFyYW1zKSx7fSkpLHRoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHZvaWQgMCl9cmVnaXN0ZXJDYXBhYmlsaXRpZXModCl7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBjYXBhYmlsaXRpZXMgYWZ0ZXIgdHJhbnNwb3J0IGlzIGVzdGFibGlzaGVkIik7dGhpcy5fY2FwYWJpbGl0aWVzPVh5KHRoaXMuX2NhcGFiaWxpdGllcyx0KX1yZWdpc3RlclRvb2wodCxuLG8pe2lmKHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XSl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGApO2xldCByPXRoaXMscz0oKT0+e3IuX2luaXRpYWxpemVkU2VudCYmci5fY2FwYWJpbGl0aWVzLnRvb2xzPy5saXN0Q2hhbmdlZCYmci5zZW5kVG9vbExpc3RDaGFuZ2VkKCl9LGE9bi5pbnB1dFNjaGVtYSE9PXZvaWQgMCxpPXt0aXRsZTpuLnRpdGxlLGRlc2NyaXB0aW9uOm4uZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6bi5pbnB1dFNjaGVtYSxvdXRwdXRTY2hlbWE6bi5vdXRwdXRTY2hlbWEsYW5ub3RhdGlvbnM6bi5hbm5vdGF0aW9ucyxfbWV0YTpuLl9tZXRhLGVuYWJsZWQ6ITAsZW5hYmxlKCl7dGhpcy5lbmFibGVkPSEwLHMoKX0sZGlzYWJsZSgpe3RoaXMuZW5hYmxlZD0hMSxzKCl9LHVwZGF0ZSh1KXtPYmplY3QuYXNzaWduKHRoaXMsdSkscygpfSxyZW1vdmUoKXtyLl9yZWdpc3RlcmVkVG9vbHNbdF09PT1pJiYoZGVsZXRlIHIuX3JlZ2lzdGVyZWRUb29sc1t0XSxzKCkpfSxoYW5kbGVyOmFzeW5jKHUsbCk9PntpZighaS5lbmFibGVkKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgZGlzYWJsZWRgKTtsZXQgZDtpZihhKXtsZXQgbT1pLmlucHV0U2NoZW1hLGI9bT9hd2FpdCBqdShtLHU/P3t9LGBJbnZhbGlkIGlucHV0IGZvciB0b29sICR7dH06IGApOnU/P3t9O2Q9YXdhaXQgbyhiLGwpfWVsc2UgZD1hd2FpdCBvKGwpO3JldHVybiBpLm91dHB1dFNjaGVtYSYmIWQuaXNFcnJvciYmKGQuc3RydWN0dXJlZENvbnRlbnQ9YXdhaXQganUoaS5vdXRwdXRTY2hlbWEsZC5zdHJ1Y3R1cmVkQ29udGVudCxgSW52YWxpZCBvdXRwdXQgZm9yIHRvb2wgJHt0fTogYCkpLGR9fTtyZXR1cm4gdGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdPWksIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyYmIXRoaXMudHJhbnNwb3J0JiZ0aGlzLnJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHt0b29sczp7bGlzdENoYW5nZWQ6ITB9fSksdGhpcy5lbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpLHMoKSxpfV90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMTtlbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpe3RoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkfHwodGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vbmNhbGx0b29sPWFzeW5jKHQsbik9PntsZXQgbz10aGlzLl9yZWdpc3RlcmVkVG9vbHNbdC5uYW1lXTtpZighbyl0aHJvdyBFcnJvcihgVG9vbCAke3QubmFtZX0gbm90IGZvdW5kYCk7cmV0dXJuIG8uaGFuZGxlcih0LmFyZ3VtZW50cyxuKX0sdGhpcy5vbmxpc3R0b29scz1hc3luYyh0LG4pPT4oe3Rvb2xzOmF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHRoaXMuX3JlZ2lzdGVyZWRUb29scykuZmlsdGVyKChbbyxyXSk9PnIuZW5hYmxlZCkubWFwKGFzeW5jKFtvLHJdKT0+e2xldCBzPXtuYW1lOm8sdGl0bGU6ci50aXRsZSxkZXNjcmlwdGlvbjpyLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOnIuaW5wdXRTY2hlbWE/YXdhaXQgTnUoci5pbnB1dFNjaGVtYSwiaW5wdXQiKTp7dHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnt9fX07cmV0dXJuIHIub3V0cHV0U2NoZW1hJiYocy5vdXRwdXRTY2hlbWE9YXdhaXQgTnUoci5vdXRwdXRTY2hlbWEsIm91dHB1dCIpKSxyLmFubm90YXRpb25zJiYocy5hbm5vdGF0aW9ucz1yLmFubm90YXRpb25zKSxyLl9tZXRhJiYocy5fbWV0YT1yLl9tZXRhKSxzfSkpfSkpfWFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQodD17fSl7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRUb29sTGlzdENoYW5nZWQiKSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIscGFyYW1zOnR9KX1nZXRIb3N0Q2FwYWJpbGl0aWVzKCl7cmV0dXJuIHRoaXMuX2hvc3RDYXBhYmlsaXRpZXN9Z2V0SG9zdFZlcnNpb24oKXtyZXR1cm4gdGhpcy5faG9zdEluZm99Z2V0SG9zdENvbnRleHQoKXtyZXR1cm4gdGhpcy5faG9zdENvbnRleHR9Z2V0IG9udG9vbGlucHV0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiKX1zZXQgb250b29saW5wdXQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIsdCl9Z2V0IG9udG9vbGlucHV0cGFydGlhbCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIpfXNldCBvbnRvb2xpbnB1dHBhcnRpYWwodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiLHQpfWdldCBvbnRvb2xyZXN1bHQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiKX1zZXQgb250b29scmVzdWx0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iix0KX1nZXQgb250b29sY2FuY2VsbGVkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIil9c2V0IG9udG9vbGNhbmNlbGxlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIsdCl9Z2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiKX1zZXQgb25ob3N0Y29udGV4dGNoYW5nZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdCl9X29udGVhcmRvd247Z2V0IG9udGVhcmRvd24oKXtyZXR1cm4gdGhpcy5fb250ZWFyZG93bn1zZXQgb250ZWFyZG93bih0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9udGVhcmRvd24iLHRoaXMuX29udGVhcmRvd24sdCksdGhpcy5fb250ZWFyZG93bj10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKG1fLChuLG8pPT57aWYoIXRoaXMuX29udGVhcmRvd24pdGhyb3cgRXJyb3IoIk5vIG9udGVhcmRvd24gaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb250ZWFyZG93bihuLnBhcmFtcyxvKX0pfV9vbmNhbGx0b29sO2dldCBvbmNhbGx0b29sKCl7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2x9c2V0IG9uY2FsbHRvb2wodCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmNhbGx0b29sIix0aGlzLl9vbmNhbGx0b29sLHQpLHRoaXMuX29uY2FsbHRvb2w9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcih5ZiwobixvKT0+e2lmKCF0aGlzLl9vbmNhbGx0b29sKXRocm93IEVycm9yKCJObyBvbmNhbGx0b29sIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2wobi5wYXJhbXMsbyl9KX1fb25saXN0dG9vbHM7Z2V0IG9ubGlzdHRvb2xzKCl7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzfXNldCBvbmxpc3R0b29scyh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9ubGlzdHRvb2xzIix0aGlzLl9vbmxpc3R0b29scyx0KSx0aGlzLl9vbmxpc3R0b29scz10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKHZmLChuLG8pPT57aWYoIXRoaXMuX29ubGlzdHRvb2xzKXRocm93IEVycm9yKCJObyBvbmxpc3R0b29scyBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmxpc3R0b29scyhuLnBhcmFtcyxvKX0pfWFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodCl7c3dpdGNoKHQpe2Nhc2Uic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSI6aWYoIXRoaXMuX2hvc3RDYXBhYmlsaXRpZXM/LnNhbXBsaW5nKXRocm93IEVycm9yKGBIb3N0IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke3R9KWApO2JyZWFrfX1hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkodCl7c3dpdGNoKHQpe2Nhc2UidG9vbHMvY2FsbCI6Y2FzZSJ0b29scy9saXN0IjppZighdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKXRocm93IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhcGFiaWxpdHkgKHJlcXVpcmVkIGZvciAke3R9KWApO3JldHVybjtjYXNlInBpbmciOmNhc2UidWkvcmVzb3VyY2UtdGVhcmRvd24iOnJldHVybjtkZWZhdWx0OnRocm93IEVycm9yKGBObyBoYW5kbGVyIGZvciBtZXRob2QgJHt0fSByZWdpc3RlcmVkYCl9fWFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodCl7fWFzc2VydFRhc2tDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFzayBoYW5kbGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzeW5jIGNhbGxTZXJ2ZXJUb29sKHQsbil7aWYodGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNhbGxTZXJ2ZXJUb29sIiksdHlwZW9mIHQ9PSJzdHJpbmciKXRocm93IEVycm9yKGBjYWxsU2VydmVyVG9vbCgpIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgYnV0IHJlY2VpdmVkIGEgc3RyaW5nICgiJHt0fSIpLiBEaWQgeW91IG1lYW46IGNhbGxTZXJ2ZXJUb29sKHsgbmFtZTogIiR7dH0iLCBhcmd1bWVudHM6IHsgLi4uIH0gfSk/YCk7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0b29scy9jYWxsIixwYXJhbXM6dH0sYXMse29ucHJvZ3Jlc3M6KCk9Pnt9LHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6ITAsLi4ubn0pfWFzeW5jIHJlYWRTZXJ2ZXJSZXNvdXJjZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVhZFNlcnZlclJlc291cmNlIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9yZWFkIixwYXJhbXM6dH0sbWYsbil9YXN5bmMgbGlzdFNlcnZlclJlc291cmNlcyh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgibGlzdFNlcnZlclJlc291cmNlcyIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvbGlzdCIscGFyYW1zOnR9LGZmLG4pfWFzeW5jIGNyZWF0ZVNhbXBsaW5nTWVzc2FnZSh0LG4pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjcmVhdGVTYW1wbGluZ01lc3NhZ2UiKTtsZXQgbz10LnRvb2xzP3dmOmtmO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIscGFyYW1zOnR9LG8sbil9c2VuZE1lc3NhZ2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRNZXNzYWdlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL21lc3NhZ2UiLHBhcmFtczp0fSx1XyxuKX1zZW5kTG9nKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL21lc3NhZ2UiLHBhcmFtczp0fSl9dXBkYXRlTW9kZWxDb250ZXh0KHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJ1cGRhdGVNb2RlbENvbnRleHQiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiLHBhcmFtczp0fSxFYyxuKX1vcGVuTGluayh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgib3BlbkxpbmsiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvb3Blbi1saW5rIixwYXJhbXM6dH0sYV8sbil9c2VuZE9wZW5MaW5rPXRoaXMub3Blbkxpbms7ZG93bmxvYWRGaWxlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJkb3dubG9hZEZpbGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvZG93bmxvYWQtZmlsZSIscGFyYW1zOnR9LGNfLG4pfXJlcXVlc3RUZWFyZG93bih0PXt9KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIixwYXJhbXM6dH0pfXJlcXVlc3REaXNwbGF5TW9kZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVxdWVzdERpc3BsYXlNb2RlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIixwYXJhbXM6dH0sdl8sbil9c2VuZFNpemVDaGFuZ2VkKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIscGFyYW1zOnR9KX1zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpe2xldCB0PSExLG49MCxvPTAscj0oKT0+e3R8fCh0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3Q9ITE7bGV0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9YS5zdHlsZS5oZWlnaHQ7YS5zdHlsZS5oZWlnaHQ9Im1heC1jb250ZW50IjtsZXQgdT1NYXRoLmNlaWwoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO2Euc3R5bGUuaGVpZ2h0PWk7bGV0IGw9TWF0aC5jZWlsKHdpbmRvdy5pbm5lcldpZHRoKTsobCE9PW58fHUhPT1vKSYmKG49bCxvPXUsdGhpcy5zZW5kU2l6ZUNoYW5nZWQoe3dpZHRoOmwsaGVpZ2h0OnV9KSl9KSl9O3IoKTtsZXQgcz1uZXcgUmVzaXplT2JzZXJ2ZXIocik7cmV0dXJuIHMub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHMub2JzZXJ2ZShkb2N1bWVudC5ib2R5KSwoKT0+cy5kaXNjb25uZWN0KCl9YXN5bmMgY29ubmVjdCh0PW5ldyBvXyh3aW5kb3cucGFyZW50LHdpbmRvdy5wYXJlbnQpLG4pe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJBcHAgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyBhZ2Fpbi4iKTt0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITEsYXdhaXQgc3VwZXIuY29ubmVjdCh0KTt0cnl7bGV0IG89YXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2luaXRpYWxpemUiLHBhcmFtczp7YXBwQ2FwYWJpbGl0aWVzOnRoaXMuX2NhcGFiaWxpdGllcyxhcHBJbmZvOnRoaXMuX2FwcEluZm8scHJvdG9jb2xWZXJzaW9uOnRffX0sd18sbik7aWYobz09PXZvaWQgMCl0aHJvdyBFcnJvcihgU2VydmVyIHNlbnQgaW52YWxpZCBpbml0aWFsaXplIHJlc3VsdDogJHtvfWApO3RoaXMuX2hvc3RDYXBhYmlsaXRpZXM9by5ob3N0Q2FwYWJpbGl0aWVzLHRoaXMuX2hvc3RJbmZvPW8uaG9zdEluZm8sdGhpcy5faG9zdENvbnRleHQ9by5ob3N0Q29udGV4dCxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIn0pLHRoaXMuX2luaXRpYWxpemVkU2VudD0hMCx0aGlzLm9wdGlvbnM/LmF1dG9SZXNpemUmJnRoaXMuc2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsb3NlKCksb319fWxldCBNdT0iIjtjb25zdCBTZj0oZSx0LG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT0+e2lmKCFlKXJldHVybjsoZS50aGVtZT09PSJsaWdodCJ8fGUudGhlbWU9PT0iZGFyayIpJiZ0LmFwcGx5RG9jdW1lbnRUaGVtZShlLnRoZW1lKTtjb25zdCBvPWUuc3R5bGVzPy52YXJpYWJsZXM7byYmdHlwZW9mIG89PSJvYmplY3QiJiZ0LmFwcGx5SG9zdFN0eWxlVmFyaWFibGVzKG8pO2NvbnN0IHI9ZS5zdHlsZXM/LmNzcz8uZm9udHM7dHlwZW9mIHI9PSJzdHJpbmciJiZyJiZyIT09TXUmJih0LmFwcGx5SG9zdEZvbnRzKHIpLE11PXIpO2NvbnN0IHM9ZS5zYWZlQXJlYUluc2V0cztpZihzKWZvcihjb25zdCBhIG9mWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSl7Y29uc3QgaT1OdW1iZXIoc1thXT8/MCk7bi5zdHlsZS5zZXRQcm9wZXJ0eShgLS1pbnNldC0ke2F9YCxgJHtOdW1iZXIuaXNGaW5pdGUoaSkmJmk+MD9pOjB9cHhgKX19LEFlPW5ldyBXYyh7bmFtZToiaG90ZWwtc3RvcmVmcm9udCIsdmVyc2lvbjoiMS4wLjAifSx7b3BlbkxpbmtzOnt9LGF2YWlsYWJsZURpc3BsYXlNb2RlczpbImlubGluZSIsImZ1bGxzY3JlZW4iXX0pLHpmPXthcHBseURvY3VtZW50VGhlbWU6U18sYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6el8sYXBwbHlIb3N0Rm9udHM6VF99LHBlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGM9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IGJlPSIiLGJzPSIiLEdjPXt9LFRmPSExLElmPSIiLFQ9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LFk9MTtjb25zdCBxdT01O2xldCBYPW51bGwsU3Q9W10sVWU9IiIsaGU9W10scT1udWxsLE5vPTA7Y29uc3QgSV89bmV3IFNldChbImZvcmdldFByZWZlcmVuY2VzIiwiYWRkVG9UcmlwIiwiY2xlYXJUcmlwIiwicmVxdWVzdEJvb2tpbmciLCJjYW5jZWxCb29raW5nIiwiY2hhbmdlQm9va2luZyIsInNpZ25JbiIsInNpZ25PdXQiXSksc249ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtyZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9gaG90ZWw6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BleHRyYXM6Ym9va2luZzoke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YGV4dHJhczoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyJ8fHQ9PT0icG9saWN5LW1pc3NpbmciP2Bwb2xpY3k6JHtlLmhvdGVsPy5pZD8/IiJ9OiR7ZS50b3BpYz8/IiJ9YDp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij9gY2FuY2VsOiR7ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iY2hhbmdlLXByZXZpZXciP2BjaGFuZ2U6JHtlLmNvbmZpcm1hdGlvbkNvZGU/P2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImRlc3RpbmF0aW9ucyI/YGRlc3RpbmF0aW9uczoke2Uuc2NvcGU/Lm5hbWU/PyIifWA6dD09PSJob3RlbHMifHx0PT09Im5vLWhvdGVscyI/YGhvdGVsczoke2UuYXNrPy5jaXR5Pz8iIn06JHtlLmFzaz8ucXVlcnk/P2UucXVlcnk/PyIifWA6dH0sU289ZT0+eyFxfHx4Xy5oYXMoU3RyaW5nKHEudmlldykpfHxzbihlKSE9PXNuKHEpJiYoaGU9Wy4uLmhlLHtwYXlsb2FkOnEsbGFiZWw6Q18ocSksdmVyc2lvbjpOb31dLnNsaWNlKC02KSl9LFBfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbHMifHx0PT09ImRlc3RpbmF0aW9ucyJ8fHQ9PT0ibm8taG90ZWxzIiYmZS5hc2spJiZlLmFzaylyZXR1cm57a2V5OiJsaXN0SG90ZWxzIixhcmdzOnsuLi5lLmFza319O2lmKHQ9PT0iY29tcGFyaXNvbiImJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5zKSlyZXR1cm57a2V5OiJjb21wYXJlIixhcmdzOnsuLi5uLC4uLmUudGl0bGU/e3RpdGxlOmUudGl0bGV9Ont9LC4uLmUucmVjb21tZW5kZWQ/e3JlY29tbWVuZGVkOmUucmVjb21tZW5kZWR9Ont9LGVudHJpZXM6ZS5jb2x1bW5zLm1hcChvPT4oe2hvdGVsOm8uaG90ZWw/LmlkLC4uLm8uYmVzdEZvcj97YmVzdEZvcjpvLmJlc3RGb3J9Ont9LC4uLm8ucHJvcz8ubGVuZ3RoP3twcm9zOm8ucHJvc306e30sLi4uby5jb25zPy5sZW5ndGg/e2NvbnM6by5jb25zfTp7fX0pKX19O2lmKCh0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyIpJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJnZXRIb3RlbCIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5uLC4uLmUucm9vbXNfd2FudGVkP3tyb29tczplLnJvb21zX3dhbnRlZH06e319fTtpZih0PT09ImV4dHJhcyImJmUuZm9yQm9va2luZylyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOnB0KFN0cmluZyhlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZSkpfTtpZih0PT09ImV4dHJhcyImJmUuaG90ZWw/LmlkKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubn19O2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm57a2V5OiJpdGluZXJhcnkiLGFyZ3M6e3RpdGxlOmUudGl0bGUsLi4ubixkYXlzOihlLmRheXM/P1tdKS5tYXAobz0+KHtsYWJlbDpvLmxhYmVsLC4uLm8ubm90ZT97bm90ZTpvLm5vdGV9Ont9LGl0ZW1zOihvLml0ZW1zPz9bXSkubWFwKHI9PnIuaWQpfSkpfX19LER1PWU9PntoZT1oZS5maWx0ZXIodD0+IWUuaW5jbHVkZXMoU3RyaW5nKHQucGF5bG9hZD8udmlldykpKX0seF89bmV3IFNldChbImZpbmQtYm9va2luZyIsImJvb2tpbmciLCJjYW5jZWxsZWQiLCJjaGFuZ2VkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiLCJtZW1iZXItc2lnbi1pbiIsIm1lbWJlci1ub3QtZm91bmQiXSksQ189ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJuby1ob3RlbHMiKXJldHVybiJ0aGUgc2VhcmNoIjtpZih0PT09ImRlc3RpbmF0aW9ucyIpcmV0dXJuIGUuc2NvcGU/Lm5hbWU/U3RyaW5nKGUuc2NvcGUubmFtZSk6ImFsbCBkZXN0aW5hdGlvbnMiO2lmKHQ9PT0iaG90ZWxzIil7aWYoZS5hc2s/LmNpdHkpcmV0dXJuIFN0cmluZyhlLmFzay5jaXR5KTtjb25zdCBuPVsuLi5uZXcgU2V0KChlLmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby5jaXR5KSkpXTtyZXR1cm4gbi5sZW5ndGg9PT0xP1N0cmluZyhuWzBdKTpgJHtlLnRvdGFsPz8wfSBob3RlbHNgfXJldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIik6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/InRoZSBjYW5jZWxsYXRpb24iOnQ9PT0iY2hhbmdlLXByZXZpZXciPyJ0aGUgY2hhbmdlIjp0PT09Im1lbWJlciI/InlvdXIgbWVtYmVyc2hpcCI6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gYWRkLW9ucyBmb3IgJHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmAke1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIil9IGFkZC1vbnNgOnQ9PT0idHJpcCI/InRoZSB0cmlwIjp0PT09ImJvb2tpbmdzIj8ieW91ciBib29raW5ncyI6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzIj8idGhlIHBvbGljaWVzIjoiYmFjayJ9LFBmPSgpPT57Y29uc3QgZT1wZSgiYmFja2J0biIpLHQ9aGUuYXQoLTEpO2UuaGlkZGVuPSF0LHQmJihlLnRleHRDb250ZW50PWDigLkgJHt0LmxhYmVsfWApfTtsZXQgWXQ9IiIsQXM9IiIsYW49MCxRYz0hMTtjb25zdCB4Zj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKEFzPXQudHJpcElkKSxhbj1OdW1iZXIodC5jb3VudD8/MCksQXJyYXkuaXNBcnJheSh0LmxpbmVzKSYmKFN0PXQubGluZXMsUWM9ITApKX0sRV89ZT0+QXM/ey4uLmUsdHJpcDpBc306ZSxDZj1uZXcgTWFwLEFfPWU9Pntjb25zdCB0PVtlPy5ib29raW5nLC4uLkFycmF5LmlzQXJyYXkoZT8uYm9va2luZ3MpP2UuYm9va2luZ3M6W11dO2Zvcihjb25zdCBuIG9mIHQpbj8uY29uZmlybWF0aW9uQ29kZSYmbj8uZ3Vlc3Q/LmVtYWlsJiZDZi5zZXQoU3RyaW5nKG4uY29uZmlybWF0aW9uQ29kZSkudG9VcHBlckNhc2UoKSxTdHJpbmcobi5ndWVzdC5lbWFpbCkpfSxwdD1lPT57Y29uc3QgdD1DZi5nZXQoZS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gdD97Ym9va2luZzplLGVtYWlsOnR9Ontib29raW5nOmV9fSxPXz1lPT5HY1tlXT8/IiIsZnQ9ZT0+ISFHY1tlXTtsZXQgSGU9ImhvbGQiLGNzPSExLG10PSExLFZ0PSExO2NvbnN0IEx1PWU9PntWdD1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfTtsZXQgam89MCxFZj0iIixBZj0iIjtjb25zdCB0dD0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlYWQiKTtpZighZSlyZXR1cm47Y29uc3QgdD0oKT0+ZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KTt0KCksc2V0VGltZW91dCh0LDE4MCl9LE09KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89T18oZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihWdClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO0x1KCEwKTtjb25zdCByPWpvO3JldHVybiBBZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpFXyh0KX0pLmZpbmFsbHkoKCk9Pkx1KCExKSkudGhlbihzPT57eGYocz8uX21ldGEpO2NvbnN0IGE9cz8uc3RydWN0dXJlZENvbnRlbnQsaT1hJiZuLmZvbGQ/bi5mb2xkKGEpOmEsdT1JXy5oYXMoZSkmJmkmJmkudmlldyE9PSJlcnJvciI7aWYocj09PWpvJiZpKXtFZj1hP0pTT04uc3RyaW5naWZ5KGEpOiIiLEFmPUpTT04uc3RyaW5naWZ5KGkpO2NvbnN0IGw9c24oaSkhPT1zbihxKTtuLnB1c2ghPT0hMSYmU28oaSksdSYmKE5vKz0xKSxpLnZpZXc9PT0iYm9va2luZyImJihEdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLFBlPW51bGwpLChpLnZpZXc9PT0iY2FuY2VsbGVkInx8aS52aWV3PT09ImNoYW5nZWQiKSYmRHUoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLEVlKGkpLGwmJnR0KCl9ZWxzZSB1JiYoTm8rPTEpO3JldHVybiBSXyhzLG4ubm90ZSksc30pfSxSXz0oZSx0KT0+e2NvbnN0IG49KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG89Pm8/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyFufHwhQWUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fEFlLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6dD9gJHt0fSAke1N0cmluZyhuKX1gOlN0cmluZyhuKX1dfSkuY2F0Y2goKCk9Pnt9KX07bGV0IHVzPSExO2NvbnN0IFpfPSIoVGhlIGNhcmQgcHJpY2VkIGl0cyBvd24gZGVmYXVsdCBkYXRlcywgdG9uaWdodCwgdG8gc2hvdyB0aGUgcm9vbXM7IHRoZSBndWVzdCBoYXMgbm90IGNob3NlbiB0aGVtLikiLEp0PWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LEt0PWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxOXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLGpfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7Tl99JHtjKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHtjKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLGVlPSgpPT5UZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke2MoSWZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixjbj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sT3M9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLFFlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake2NuKGUuY2hlY2tJbil9IOKAkyAke2NuKGUuY2hlY2tPdXQpfSDCtyAke09zKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHtPcyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixNXz0oZSx0LG4pPT57Y29uc3Qgbz1TdC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0scV89KGUsdCk9Pntjb25zdCBuPVN0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxNbz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHtjKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHtjKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7YyhuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxPZj0oZSx0KT0+e2NvbnN0IG49dHx8UmYoKTtyZXR1cm4oIVQuY2hlY2tJbnx8VC5jaGVja0luPG4pJiYoVC5jaGVja0luPW4pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9S2UoVC5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7YyhuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKEtlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7YyhscygpKX08L3NwYW4+CiAgPC9kaXY+YH0sbHM9KCk9Pntjb25zdCBlPVQuY2hlY2tJbiYmVC5jaGVja091dD9PcyhULmNoZWNrSW4sVC5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPVk+MT9gJHtZfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sS2U9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxSZj0oKT0+bmV3IERhdGUoRGF0ZS5ub3coKS1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqNmU0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLFpmPWU9Pntjb25zdCB0PVsuLi5lPy50b2RheT9bZS50b2RheS5taW4sZS50b2RheS5tYXhdOltdLC4uLihlPy5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8udG9kYXlUaGVyZT8/IiIpKV0uZmlsdGVyKG89Pi9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KG8pKS5zb3J0KCksbj1SZigpO3JldHVybnttaW46W3RbMF0/P24sbl0uc29ydCgpWzBdPz9uLHN0YXJ0OnQuYXQoLTEpPz9ufX0sRF89ZT0+e2NvbnN0e21pbjp0LHN0YXJ0Om59PVpmKGUpOyghVC5jaGVja0lufHxULmNoZWNrSW48dCkmJihULmNoZWNrSW49biksKCFULmNoZWNrT3V0fHxULmNoZWNrT3V0PD1ULmNoZWNrSW4pJiYoVC5jaGVja091dD1LZShULmNoZWNrSW4sMSkpO2NvbnN0IG89YDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7Yyh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHtjKFQuY2hlY2tPdXQpfSIgbWluPSIke2MoS2UoVC5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke2Uuc2NvcGU/IiI6JzxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kIj5TZWFyY2g8L2J1dHRvbj4nfQogICAgICA8L2Rpdj5gLHI9YDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgIDxsYWJlbCBjbGFzcz0id2hlcmUiPldoZXJlIHRvPGlucHV0IGlkPSJ3aGVyZSIgdHlwZT0ic2VhcmNoIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwiIGFyaWEtbGFiZWw9IldoZXJlIHRvIj48L2xhYmVsPgogICAgICAke299CiAgICA8L2Rpdj5gLHM9bD0+YDxkaXYgY2xhc3M9InBsYWNlcyI+JHtsLm1hcCgoZCxtKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKGQubmFtZSl9IiR7bT49bnQ/IiBoaWRkZW4iOiIifT4ke2MoZC5uYW1lKX0gPHNtYWxsPiR7YyhkLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfSR7bC5sZW5ndGg+bnQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHtsLmxlbmd0aC1udH0gbW9yZTwvYnV0dG9uPmA6IiJ9PC9kaXY+YCxhPWUuc2NvcGU7aWYoYSlyZXR1cm5bZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhhLm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLnRvdGFsKX0gJHtjKGUudm9jYWI/Lm5vdW5QbHVyYWw/PyJob3RlbHMiKX0gaW4gJHtjKChhLmNpdGllcz8/W10pLmxlbmd0aCl9IGNpdGllczwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InNlYXJjaCI+JHtvfTwvZGl2PmAscyhhLmNpdGllcz8/W10pLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlLWFsbD0iJHtjKGEubmFtZSl9Ij5BbGwgJHtjKGUudG90YWwpfSBpbiAke2MoYS5uYW1lKX08L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBpPWUucmVnaW9ucz8/W10sdT1pLmZsYXRNYXAobD0+bC5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKGw9PmwuY2l0aWVzPz9bXSkubWFwKChsLGQpPT4oe2M6bCxpOmR9KSkuc29ydCgobCxkKT0+TnVtYmVyKGQuYy5jb3VudCktTnVtYmVyKGwuYy5jb3VudCl8fGwuaS1kLmkpLnNsaWNlKDAsbnQpLm1hcCgoe2M6bH0pPT5sKTtyZXR1cm5bZWUoKSxyLHUubGVuZ3RoP2A8ZGl2IGNsYXNzPSJyZWdpb24iPjxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj5Ub3AgY2l0aWVzPC9kaXY+JHtzKHUpfTwvZGl2PmA6IiIsaS5sZW5ndGg/YDxkaXYgY2xhc3M9InJlZ2lvbiI+PGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPkJ5IHJlZ2lvbjwvZGl2PjxkaXYgY2xhc3M9InBsYWNlcyI+JHtpLm1hcCgobCxkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UgdGFiIiB0eXBlPSJidXR0b24iIGRhdGEtcmVnaW9uPSIke2R9IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+JHtjKGwubmFtZSl9IDxzbWFsbD4ke2MobC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj48L2Rpdj5gOiIiLC4uLmkubWFwKChsLGQpPT5gCiAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiIgZGF0YS1yZWdpb24tYm9keT0iJHtkfSIgaGlkZGVuPgogICAgICAgICR7KGwuY291bnRyaWVzPz9bXSkubWFwKChtLGIpPT57Y29uc3Qgdj1tLmNpdGllcz8/W10sXz12Lmxlbmd0aD09PTE/dlswXTp2b2lkIDA7cmV0dXJuYAogICAgICAgICAgPGRpdiBjbGFzcz0iZGVzdCIke2I+PXZzPyIgaGlkZGVuIjoiIn0+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3QtY291bnRyeSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2MobS5uYW1lKX0iPiR7YyhtLm5hbWUpfSR7XyYmXy5uYW1lIT09bS5uYW1lP2A8c21hbGw+IMK3ICR7YyhfLm5hbWUpfTwvc21hbGw+YDoiIn0gPHNtYWxsIGNsYXNzPSJuIj4ke2MobS5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj4KICAgICAgICAgICAgJHt2Lmxlbmd0aD4xP3Modik6IiJ9CiAgICAgICAgICA8L2Rpdj5gfSkuam9pbigiIil9CiAgICAgICAgJHsobC5jb3VudHJpZXM/P1tdKS5sZW5ndGg+dnM/YDxkaXYgY2xhc3M9InBsYWNlcyI+PGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1jb3VudHJpZXMiPiskeyhsLmNvdW50cmllcz8/W10pLmxlbmd0aC12c30gbW9yZSBjb3VudHJpZXM8L2J1dHRvbj48L2Rpdj5gOiIifQogICAgICA8L2Rpdj5gKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYWxsLWhvdGVscyI+QnJvd3NlIGFsbCAke2MoZS50b3RhbCl9PC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5GaW5kIGEgYm9va2luZzwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxudD04LHZzPTYsTmY9ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O3JldHVybiB0P2A8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2ModC50b3RhbCl9PHNtYWxsIGNsYXNzPSJ0LXN1YiI+JHtOdW1iZXIodC5yb29tcyk+MT9gJHtjKHQucm9vbXMpfSByb29tcyDDlyBgOiIifSR7Yyh0Lm5pZ2h0cyl9ICR7TnVtYmVyKHQubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn0gwrcgdGF4ZXMgaW48L3NtYWxsPjwvc3Bhbj5gOmUubm9Sb29tc0ZvclN0YXk/YDxzcGFuIGNsYXNzPSJ0LWZyb20gdC1ub25lIj4key9zbGVlcHMvLnRlc3QoU3RyaW5nKGUubm9Sb29tc0ZvclN0YXkpKT9gTm8gcm9vbSBzbGVlcHMgJHtjKFQuZ3Vlc3RzKX1gOiJObyByb29tIGZvciB0aGVzZSBkYXRlcyJ9PC9zcGFuPmA6YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7ZS5mcm9tTmlnaHRseT9gJHtjKGUuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+YH0sTF89ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O2lmKCF0KXJldHVybiIiO2NvbnN0IG49W3QuZnJlZUNhbmNlbGxhdGlvbj8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uPC9zcGFuPic6IiIsTnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJdLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/YDxzcGFuIGNsYXNzPSJ0LXRhZ3MiPiR7bi5qb2luKCIiKX08L3NwYW4+YDoiIn0sWHQ9KCk9PlQuY2hlY2tJbiYmVC5jaGVja091dD97Y2hlY2tJbjpULmNoZWNrSW4sY2hlY2tPdXQ6VC5jaGVja091dCxndWVzdHM6VC5ndWVzdHMsLi4uWT4xP3tyb29tczpZfTp7fX06e30sVV89ZT0+e2NvbnN0e2NoZWNrSW46dCxjaGVja091dDpuLGd1ZXN0czpvLHJvb21zOnIsLi4uc309ZT8/e307cmV0dXJuIHN9LEJfPShlLHQpPT57Y29uc3R7bWluOm4sc3RhcnQ6b309WmYodCk7cmV0dXJuKCFULmNoZWNrSW58fFQuY2hlY2tJbjxuKSYmKFQuY2hlY2tJbj1vKSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PUtlKFQuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY2kiIHZhbHVlPSIke2MoVC5jaGVja0luKX0iIG1pbj0iJHtjKG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKEtlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0ibHJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICAke2U/YDxzcGFuIGNsYXNzPSJuaWdodHMiPiR7YyhscygpKX08L3NwYW4+YDonPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InByaWNlLWxpc3QiPlNob3cgcHJpY2VzPC9idXR0b24+J30KICA8L2Rpdj5gfTtsZXQgeGU9ImRhdGVzIjtjb25zdCBqZj0iZGF0ZXMiLHpvPWU9Pntjb25zdCB0PWU/P3t9O3JldHVybnsuLi50LmJyYW5kP3ticmFuZDp0LmJyYW5kfTp7fSwuLi5BcnJheS5pc0FycmF5KHQuZmFjaWxpdGllcykmJnQuZmFjaWxpdGllcy5sZW5ndGg/e2ZhY2lsaXRpZXM6dC5mYWNpbGl0aWVzfTp7fSwuLi50LmZyZWVDYW5jZWxsYXRpb24/e2ZyZWVDYW5jZWxsYXRpb246ITB9Ont9LC4uLnQuYnJlYWtmYXN0P3ticmVha2Zhc3Q6ITB9Ont9fX0sVXU9ZT0+e2NvbnN0e2JyYW5kOnQsZmFjaWxpdGllczpuLGZyZWVDYW5jZWxsYXRpb246byxicmVha2Zhc3Q6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sRl89ZT0+e2NvbnN0IHQ9em8oZSk7cmV0dXJuKHQuYnJhbmQ/MTowKSsodC5mYWNpbGl0aWVzPy5sZW5ndGg/PzApKyh0LmZyZWVDYW5jZWxsYXRpb24/MTowKSsodC5icmVha2Zhc3Q/MTowKX0sSF89ZT0+e2NvbnN0IHQ9ZS5yZWZpbmU7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj0ocixzLGEsaSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXI9IiR7YyhyKX0iIGFyaWEtcHJlc3NlZD0iJHtpPyJ0cnVlIjoiZmFsc2UifSI+JHtjKHMpfSA8c21hbGw+JHtjKGEpfTwvc21hbGw+PC9idXR0b24+YCxvPShyLHMpPT5zLmxlbmd0aD9gPGRpdiBjbGFzcz0iZmdyb3VwIj48c3BhbiBjbGFzcz0ic29ydHMtayI+JHtjKHIpfTwvc3Bhbj4ke3Muam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bbygiQnJhbmQiLCh0LmJyYW5kcz8/W10pLm1hcChyPT5uKGBicmFuZDoke3IubmFtZX1gLHIubmFtZSxyLmNvdW50LHIub24pKSksbygiSGFzIiwodC5mYWNpbGl0aWVzPz9bXSkubWFwKHI9Pm4oYGZhY2lsaXR5OiR7ci5rZXl9YCxyLmxhYmVsLHIuY291bnQsci5vbikpKSxvKCJSb29tIiwodC5yb29tPz9bXSkubWFwKHI9Pm4oci5rZXksci5sYWJlbCxyLmNvdW50LHIub24pKSldLmpvaW4oIiIpfSxWXz0oZSx0KT0+e2NvbnN0IG49cj0+TnVtYmVyKHIuc2xpY2UoOCwxMCkpLG89cj0+bmV3IERhdGUoYCR7cn1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse21vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KTtyZXR1cm4gbyhlKT09PW8odCk/YCR7bihlKX3igJMke24odCl9ICR7byh0KX1gOmAke24oZSl9ICR7byhlKX0g4oCTICR7bih0KX0gJHtvKHQpfWB9LE1mPShlLHQsbik9Pntjb25zdCBvPSEhZS5zdGF5Py5jaGVja0luLHI9Rl8oZS5hc2spLHM9SF8oZSksYT1xZi5maW5kKChbbF0pPT5sPT09bik/LlsxXT8/IkRlZmF1bHQiLGk9bz9gJHtWXyhlLnN0YXkuY2hlY2tJbixlLnN0YXkuY2hlY2tPdXQpfSR7WT4xP2AgwrcgJHtZfSByb29tc2A6IiJ9YDoiQWRkIGRhdGVzIix1PShsLGQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSB0b29sIiB0eXBlPSJidXR0b24iIGRhdGEtcGFuZWw9IiR7bH0iIGFyaWEtZXhwYW5kZWQ9IiR7eGU9PT1sPyJ0cnVlIjoiZmFsc2UifSI+JHtkfTwvYnV0dG9uPmA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icGxhY2VzIHRvb2xiYXIiPgogICAgICAke3UoImRhdGVzIixjKGkpKX0KICAgICAgJHt0P3UoInNvcnQiLG49PT0iZ3JvdXAiPyJTb3J0IjpjKGEpKToiIn0KICAgICAgJHtzfHxyP3UoImZpbHRlcnMiLGBGaWx0ZXJzJHtyP2AgwrcgJHtyfWA6IiJ9YCk6IiJ9CiAgICAgICR7cj8nPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImNsZWFyLWZpbHRlcnMiPkNsZWFyPC9idXR0b24+JzoiIn0KICAgIDwvZGl2PgogICAgPGRpdiBkYXRhLXBhbmVsLWJvZHk9ImRhdGVzIiR7eGU9PT0iZGF0ZXMiPyIiOiIgaGlkZGVuIn0+JHtCXyhvLGUpfTwvZGl2PgogICAgJHt0P2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0ic29ydCIke3hlPT09InNvcnQiPyIiOiIgaGlkZGVuIn0+JHt0fTwvZGl2PmA6IiJ9CiAgICAke3M/YDxkaXYgY2xhc3M9ImZpbHRlci1wYW5lbCIgZGF0YS1wYW5lbC1ib2R5PSJmaWx0ZXJzIiR7eGU9PT0iZmlsdGVycyI/IiI6IiBoaWRkZW4ifT4ke3N9PC9kaXY+YDoiIn1gfSxxZj1bWyJncm91cCIsIkRlZmF1bHQiXSxbInByaWNlLWxvdyIsIkxvd2VzdCBwcmljZSJdLFsicHJpY2UtaGlnaCIsIkhpZ2hlc3QgcHJpY2UiXSxbInJhdGluZyIsIlJhdGluZyJdXSxKXz0zO2xldCB1bj0iaW5saW5lIixEZj1bXTtjb25zdCBsbj0oKT0+dW49PT0iZnVsbHNjcmVlbiIsWWM9KCk9Pntjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjb250ZW50IC50aWxlcyIpO2lmKGU/Lm9mZnNldFdpZHRoKXtjb25zdCBzPWdldENvbXB1dGVkU3R5bGUoZSkuZ3JpZFRlbXBsYXRlQ29sdW1ucy5zcGxpdCgiICIpLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7aWYocz4wKXJldHVybiBzfWNvbnN0IHQ9cGUoImNvbnRlbnQiKS5jbGllbnRXaWR0aHx8d2luZG93LmlubmVyV2lkdGh8fDAsbj10PD00NjAsbz1uPzE1MDoxOTYscj1uPzg6MTA7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5mbG9vcigodCtyKS8obytyKSkpfHwyfTtsZXQgWGM9MDtjb25zdCBkcz0oKT0+TWF0aC5tYXgoMiwoWGN8fFljKCkpKkpfKTtsZXQgcW89MDtjb25zdCBLXz1lPT57cW89ZHMoKTtjb25zdCB0PWxuKCk/ZS5ob3RlbHM/P1tdOihlLmhvdGVscz8/W10pLnNsaWNlKDAscW8pLG49Wy4uLm5ldyBTZXQodC5tYXAodz0+U3RyaW5nKHcuY2l0eSkpKV0sbz13PT57Y29uc3QgJD10LmZpbmQoTj0+Ti5jaXR5PT09dyk/LmNvdW50cnk7cmV0dXJuICQmJiFTdHJpbmcoJCkuc3RhcnRzV2l0aCh3KT9TdHJpbmcoJCk6IiJ9LHI9Wy4uLm5ldyBTZXQodC5tYXAodz0+U3RyaW5nKHcuY291bnRyeT8/IiIpKSldLHM9ci5sZW5ndGg+MSxhPXc9PmAKICAgIDxkaXYgY2xhc3M9ImNpdHlncm91cCI+CiAgICAgICR7bi5sZW5ndGg+MT9gPGRpdiBjbGFzcz0iY2l0eW5hbWUiPiR7Yyh3KX0keyFzJiZvKHcpP2A8c21hbGw+IMK3ICR7YyhvKHcpKX08L3NtYWxsPmA6IiJ9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0idGlsZXMiPgogICAgICAgICR7dC5maWx0ZXIoJD0+JC5jaXR5PT09dykubWFwKCQ9PmAKICAgICAgICAgIDxidXR0b24gY2xhc3M9InRpbGUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKCQuaWQpfSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXNob3QiIHN0eWxlPSIke0p0KFN0cmluZygkLmlkKSl9Ij4KICAgICAgICAgICAgICAkeyQuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2MoJC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoS3QoU3RyaW5nKCQubmFtZSkpKX08L3NwYW4+CiAgICAgICAgICAgICAgJHskLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKCQuYnJhbmQpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7YygkLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHtjKG4ubGVuZ3RoPjE/JC5hcmVhPz8kLmNpdHk6WyQuYXJlYSwkLmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgICAgICR7TmYoJCl9CiAgICAgICAgICAgICAgICAke2pfKCQucmF0aW5nKX0KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgJHtMXygkKX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxpPU51bWJlcihlLnRvdGFsPz90Lmxlbmd0aCksdT1OdW1iZXIoZS5vZmZzZXQ/PzApLGw9aS11LXQubGVuZ3RoLGQ9ZS5wbGFjZXM/P1tdO2UuYXNrPy5jaXR5O2NvbnN0IG09ZC5sZW5ndGg/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2QubWFwKCh3LCQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2Mody5wbGFjZSl9IiR7JD49bnQ/IiBoaWRkZW4iOiIifT4ke2Mody5sYWJlbCl9IDxzbWFsbD4ke2Mody5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke2QubGVuZ3RoPm50P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7ZC5sZW5ndGgtbnR9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiLGI9U3RyaW5nKGUuc29ydD8/Imdyb3VwIiksdj0hKChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MSksXz10Lmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJPcmRlciI+JHtxZi5maWx0ZXIoKFt3XSk9PnZ8fCF3LnN0YXJ0c1dpdGgoInByaWNlIikpLm1hcCgoW3csJF0pPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtc29ydD0iJHt3fSIgYXJpYS1wcmVzc2VkPSIke3c9PT1iPyJ0cnVlIjoiZmFsc2UifSI+JHskfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW2VlKCksbSxNZihlLF8sYiksZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7YyhlLndpZGVuZWQuZnJvbSl9LiBUaGVzZSBhcmUgJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiIsYDxkaXY+JHtzP3IubWFwKHc9PmA8ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+JHtjKHcpfTwvZGl2PiR7bi5maWx0ZXIoJD0+dC5zb21lKE49Pk4uY2l0eT09PSQmJlN0cmluZyhOLmNvdW50cnk/PyIiKT09PXcpKS5tYXAoYSkuam9pbigiIil9YCkuam9pbigiIik6bi5tYXAoYSkuam9pbigiIil9PC9kaXY+YCwoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlF1b3RlZCBpbiAke2MoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSDigJQgbm8gcmF0ZSBpcyBhcHBsaWVkIGhlcmUsIHNvIHRoaXMgaXMgbm90IGEgcHJpY2Ugb3JkZXIuIE9uZSBjaXR5IG9yIG9uZSBjb3VudHJ5IGdpdmVzIG9uZSBjdXJyZW5jeS48L2Rpdj5gOiIiLGUub3ZlckJ1ZGdldD9gPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUub3ZlckJ1ZGdldCl9IG1vcmUgbWF0Y2hlZCBhbmQgY2FtZSBpbiBvdmVyIHRoZSBwcmljZSBjZWlsaW5nLjwvZGl2PmA6IiIsbG4oKT9sPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt1P2Ake3UrMX3igJMke3UrdC5sZW5ndGh9YDp0Lmxlbmd0aH0gb2YgJHtpfS48L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1ob3RlbHMiPlNob3cgJHtNYXRoLm1pbigxMixsKX0gbW9yZTwvYnV0dG9uPjwvZGl2PmA6IiI6dT4wfHxsPjA/YDxkaXYgY2xhc3M9InBhZ2VyIiByb2xlPSJuYXZpZ2F0aW9uIiBhcmlhLWxhYmVsPSJQYWdlcyI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icGFnZS1wcmV2IiR7dT4wPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJQcmV2aW91cyBob3RlbHMiPuKAuSBQcmV2aW91czwvYnV0dG9uPgogICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im4iPiR7dSsxfeKAkyR7dSt0Lmxlbmd0aH0gb2YgJHtpfTwvc3Bhbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJwYWdlLW5leHQiJHtsPjA/IiI6IiBkaXNhYmxlZCJ9IGFyaWEtbGFiZWw9Ik5leHQgaG90ZWxzIj5OZXh0IOKAujwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PiR7RGYuaW5jbHVkZXMoImZ1bGxzY3JlZW4iKT9gPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZ1bGxzY3JlZW4iPlZpZXcgYWxsICR7YyhpKX08L2J1dHRvbj48L2Rpdj5gOiIifWA6IiJdLmpvaW4oIiIpfSxXXz1lPT57Y29uc3QgdD1lLm5lYXJlc3Q/P1tdLG49ZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7YyhlLndpZGVuZWQuZnJvbSl9LCBzbyB0aGlzIGxvb2tlZCBpbiAke2MoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIjtyZXR1cm4gZS5iZWZvcmVGaWx0ZXJzPyh4ZT0iZmlsdGVycyIsW2VlKCksbixgPGRpdiBjbGFzcz0id2Fybm5vdGUiPiR7YyhlLndoeT8/YE5vbmUgb2YgdGhlICR7ZS5iZWZvcmVGaWx0ZXJzfSBoZXJlIGhhcyBhbGwgb2YgdGhvc2UgdG9nZXRoZXIuYCl9PC9kaXY+YCxNZihlLCIiLFN0cmluZyhlLmFzaz8uc29ydD8/Imdyb3VwIikpXS5qb2luKCIiKSk6dC5sZW5ndGg/W2VlKCksbixgPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgY2FtZSBpbiB1bmRlciB0aGUgcHJpY2UgY2VpbGluZy4gJHtjKHQubGVuZ3RoPT09MT8iVGhlIG5lYXJlc3QgaXMiOiJUaGUgbmVhcmVzdCBhcmUiKX0gb3ZlciBpdC48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ0aWxlcyI+JHt0Lm1hcChvPT5gCiAgICAgIDxidXR0b24gY2xhc3M9InRpbGUgb3ZlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Moby5pZCl9Ij4KICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtKdChTdHJpbmcoby5pZCkpfSI+CiAgICAgICAgICAke28uaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Moby5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhLdChTdHJpbmcoby5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2Moby5uYW1lKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHtjKFtvLmFyZWEsby5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgJHtOZihvKX0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIHdhcm4iPk92ZXI8L3NwYW4+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKTpgJHtufTxkaXYgY2xhc3M9ImVtcHR5Ij4ke2MoZS53aHk/P2BOb3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtlLnF1ZXJ5fSJgOiIifS4gVHJ5IGEgY2l0eS5gKX08L2Rpdj5gfSxMZj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7SnQoU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoS3QoU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2MoZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7YyhlLnJhdGluZy52YWx1ZSl94piFICgke2MoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtjKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2ModCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxHXz0oZSx0LG4pPT57Y29uc3Qgbz1NXyhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke0p0KGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7Yyh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmMoS3QoU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2ModC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Mocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvbkxvY2FsP2AgdW50aWwgJHtjKHQuZnJlZUNhbmNlbGxhdGlvbkxvY2FsKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7Yyh0LnB1YmxpY1Jvb21zVG90YWw/P3QucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7Yyh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7Yyh0Lm5pZ2h0bHkpfSAvIG5pZ2h0ICsgdGF4JHtZPjE/YCDCtyAke1l9IHJvb21zYDoiIn0gwrcgdG90YWwgdGF4ZXMgaW48L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7Yyh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke01vKGBkYXRhLWFkZC1yb29tPSIke2ModC5pZCl9IiBkYXRhLWhvdGVsPSIke2MoZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSxZKX08L2Rpdj4KICAgIDwvZGl2PmB9LFFfPShlLHQpPT4hQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8Mj8iIjpgCiAgPGRpdiBjbGFzcz0iZmxleC1kYXRlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Ik5lYXJieSBhcnJpdmFsIGRhdGVzIj4KICAgICR7dC5tYXAobj0+YDxidXR0b24gY2xhc3M9ImZkJHtuLmNob3Nlbj8iIG9uIjoiIn0ke24uZnJvbT8iIjoiIG91dCJ9JHtuLmJlc3Q/IiBiZXN0IjoiIn0iIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKGUpfSIgZGF0YS1jaT0iJHtjKG4uY2hlY2tJbil9IiBkYXRhLWNvPSIke2Mobi5jaGVja091dCl9IiBhcmlhLWxhYmVsPSJBcnJpdmUgJHtjKGNuKFN0cmluZyhuLmNoZWNrSW4pKSl9JHtuLmZyb20/YCwgZnJvbSAke2Mobi5mcm9tKX1gOiIsIG5vdGhpbmcgbGVmdCJ9Ij4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtZGF5Ij4ke2MoY24oU3RyaW5nKG4uY2hlY2tJbikpKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLXByaWNlIj4ke24uZnJvbT9jKG4uZnJvbSk6IkZ1bGwifTwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgPC9kaXY+YCxCdT1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUucm9vbXM/P1tdLG89ZS5zdGF5Pz9UO3JldHVybltlZSgpLExmKHQpLE9mKFN0cmluZyh0LmlkKSx0LnRvZGF5VGhlcmUpLFFfKFN0cmluZyh0LmlkKSxlLmRhdGVzKSxlLm5lZWRzRGF0ZXM/JzxkaXYgY2xhc3M9ImVtcHR5Ij5Mb29raW5nIHVwIHJvb21z4oCmPC9kaXY+JzplLm5vUm9vbXM/YDxkaXYgY2xhc3M9ImVyciI+JHtjKGUubm9Sb29tcyl9PC9kaXY+YDpgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5HXyh0LHIsbykpLmpvaW4oIiIpfTwvZGl2PmAsKGUuZXh0cmFzPz9bXSkubGVuZ3RoP2A8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWV4dHJhcz0iJHtjKHQuaWQpfSI+QWRkLW9ucyBhbmQgZXhwZXJpZW5jZXM8L2J1dHRvbj5gOiIiLChlLnBvbGljaWVzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJjaGlwcyI+JHtlLnBvbGljaWVzLm1hcChyPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBvbGljeT0iJHtjKHIudG9waWMpfSIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+JHtjKHIudGl0bGUpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxZXz1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUuZXh0cmFzPz9bXSxvPWUuZm9yQm9va2luZztyZXR1cm4gbz9bZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPkFkZC1vbnMgZm9yICR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7Yyh0Lm5hbWUpfSDCtyAke2MoUWUoby5zdGF5KSl9PC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5gCiAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Moci5uYW1lKX08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhyLnByaWNlKX08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij5wZXIgJHtjKHIucGVyKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke01vKGBkYXRhLWJvb2tpbmctZXh0cmE9IiR7YyhyLmlkKX0iIGRhdGEtYm9va2luZz0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9ImAsTnVtYmVyKG8uaGVsZD8uW3IuaWRdPz8wKSxTdHJpbmcoci5uYW1lKSl9PC9kaXY+CiAgICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwnPGRpdiBjbGFzcz0ibm90ZSI+RWFjaCBjaGFuZ2UgaXMgc2hvd24gd2l0aCBpdHMgbmV3IHRvdGFsIGJlZm9yZSBhbnl0aGluZyBtb3Zlcy4gTm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuPC9kaXY+JywnPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5CYWNrIHRvIHlvdXIgYm9va2luZ3M8L2J1dHRvbj4nXS5qb2luKCIiKTpbZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7Yyh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgaXQgb2ZmZXJzIGJlc2lkZSB0aGUgcm9vbTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij5wZXIgJHtjKHIucGVyKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7TW8oYGRhdGEtYWRkLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWhvdGVsPSIke2ModC5pZCl9ImAscV8oU3RyaW5nKHQuaWQpLFN0cmluZyhyLmlkKSksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij5CYWNrIHRvICR7Yyh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxYXz1lPT57Y29uc3QgdD1lLmtpbmQ9PT0icm9vbSI/YGRhdGEtYWRkLXJvb209IiR7YyhlLnJvb21SZWYpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9IiBkYXRhLWNpPSIke2MoZS5zdGF5Py5jaGVja0luKX0iIGRhdGEtY289IiR7YyhlLnN0YXk/LmNoZWNrT3V0KX0iIGRhdGEtZ3U9IiR7YyhlLnN0YXk/Lmd1ZXN0cyl9ImA6YGRhdGEtYWRkLWV4dHJhPSIke2MoZS5leHRyYVJlZj8/ZS50aXRsZSl9IiBkYXRhLWhvdGVsPSIke2MoZS5ob3RlbElkKX0iJHtlLmRheT9gIGRhdGEtZGF5PSIke2MoZS5kYXkpfSJgOiIifWA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhlLmtpbmQ9PT0icm9vbSI/YCR7ZS5ob3RlbE5hbWV9IMK3ICR7UWUoZS5zdGF5KX0ke2UucmVmdW5kYWJsZT09PSExPyIgwrcgbm9uLXJlZnVuZGFibGUiOiIifWA6YCR7ZS5ob3RlbE5hbWV9JHtlLmRldGFpbD9gIMK3ICR7ZS5kZXRhaWx9YDoiIn1gKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2MoZS50b3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2MoZS51bml0KX0ke2Uua2luZD09PSJyb29tIj8iIC8gbmlnaHQiOiIgZWFjaCJ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7TW8odCxOdW1iZXIoZS5raW5kPT09ImV4dHJhIj9lLm9yZGVyZWQ/P2UucXVhbnRpdHk/PzE6ZS5xdWFudGl0eT8/MSksU3RyaW5nKGUudGl0bGUpKX08L2Rpdj4KICAgIDwvZGl2PmB9LEZ1PShlLHQpPT5gPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke2MoZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+VGF4ZXMgYW5kIGZlZXM8L3NwYW4+PHNwYW4+JHtjKGUudGF4ZXNBbmRGZWVzKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIGdvb2QiPjxzcGFuPiR7YyhlLm1lbWJlclNhdmluZy50aWVyKX0gbWVtYmVyIHJhdGU8L3NwYW4+PHNwYW4+4oiSICR7YyhlLm1lbWJlclNhdmluZy5zYXZlZCl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2ModCl9PC9zcGFuPjxzcGFuPiR7YyhlLnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyBlYXJuczwvc3Bhbj48c3Bhbj4ke2MoTnVtYmVyKGUubWVtYmVyU2F2aW5nLnBvaW50cykudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfTwvc3Bhbj48L2Rpdj5gOiIifQogICA8L2Rpdj5gLGVrPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bZWUoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtjKGJlKX0gaG90ZWxzPC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW2VlKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtjKGNuKG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKFhfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtjKG8udGl0bGUpfTogJHtjKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIiwuLi5BcnJheS5pc0FycmF5KGUuZ3JvdXBzKSYmZS5ncm91cHMubGVuZ3RoPjE/W2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZWQgaW4gJHtjKChlLmN1cnJlbmNpZXM/P1tdKS5qb2luKCIgYW5kICIpKX0sIHNlcGFyYXRlbHkuIE5vdGhpbmcgaGVyZSBjb252ZXJ0cyBvbmUgaW50byB0aGUgb3RoZXI7IGVhY2ggaG90ZWwgaXMgYm9va2VkIGFuZCBwYWlkIGluIGl0cyBvd24uPC9kaXY+YCwuLi5lLmdyb3Vwcy5tYXAobz0+RnUobyxvLmdvZXNXaXRoQVN0YXk/YEluICR7by5jdXJyZW5jeX0sIGdvZXMgd2l0aCBhIHN0YXkgLSBub3QgaW4gdGhlIHRvdGFsYDpgVG90YWwgaW4gJHtvLmN1cnJlbmN5fWApKV06W0Z1KGUsIlRvdGFsIildLC4uLkFycmF5LmlzQXJyYXkoZS5uZWVkc1Jvb20pJiZlLm5lZWRzUm9vbS5sZW5ndGg/ZS5uZWVkc1Jvb20ubWFwKG89PmA8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgICA8Yj5Hb2VzIHdpdGggYSBzdGF5PC9iPgogICAgICAgICAgICAgPHNwYW4+JHtjKChvLmV4dHJhcz8/W10pLmpvaW4oIiBhbmQgIikpfSBpcyAke2Moby5ob3RlbE5hbWUpfSdzIHNlcnZpY2UgZm9yIGl0cyBndWVzdHMsIHNvIGl0IGlzIGJvb2tlZCB3aXRoIGEgcm9vbSB0aGVyZSAtIG9yIGFkZGVkIHRvIGEgYm9va2luZyB5b3UgYWxyZWFkeSBoYXZlLjwvc3Bhbj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Moby5ob3RlbElkKX0iPlJvb21zIGF0ICR7YyhvLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDwvZGl2PmApOltgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj4ke0hlPT09InBheS1hdC1ob3RlbCI/IkJvb2siOiJSZXF1ZXN0IGJvb2tpbmcifTwvYnV0dG9uPjwvZGl2PmAsY3M/YDxkaXYgY2xhc3M9Im5vdGUiPlRoaXMgaXMgYSB0ZXN0IGVudmlyb25tZW50LiBCb29raW5nIGhlcmUgbWFrZXMgYSBzaW11bGF0ZWQgYm9va2luZywgbm90IGEgJHtjKGJlKX0gcmVzZXJ2YXRpb24sIGFuZCBub3RoaW5nIGlzIHBhaWQuPC9kaXY+YDpIZT09PSJwYXktYXQtaG90ZWwiP2A8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gQm9va2luZyBtYWtlcyBhIHJlc2VydmF0aW9uIHdpdGggJHtjKGJlKX0sIHBhaWQgYXQgdGhlIGhvdGVsLCBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YDpgPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFJlcXVlc3RpbmcgYSBib29raW5nIGFza3MgJHtjKGJlKX0gdG8gaG9sZCB0aGUgcm9vbXMgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmAsVWYoKV0sWHx8IWZ0KCJzaWduSW4iKT8iIjpgPGRpdiBjbGFzcz0ibm90ZSI+QSAke2MoYmUpfSBDaXJjbGUgbWVtYmVyPyA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPlNpZ24gaW4gZm9yIHRoZSBtZW1iZXIgcmF0ZTwvYnV0dG9uPi48L2Rpdj4ke0RvKCl9YF0uam9pbigiIil9LGV1PVt7aWQ6ImtpbmctYmVkIixsYWJlbDoiS2luZyBiZWQifSx7aWQ6InR3aW4tYmVkcyIsbGFiZWw6IlR3aW4gYmVkcyJ9LHtpZDoiaGlnaC1mbG9vciIsbGFiZWw6IkhpZ2ggZmxvb3IifSx7aWQ6Imxvdy1mbG9vciIsbGFiZWw6IkxvdyBmbG9vciJ9LHtpZDoicXVpZXQtcm9vbSIsbGFiZWw6IlF1aWV0IHJvb20ifSx7aWQ6ImNvbm5lY3Rpbmctcm9vbXMiLGxhYmVsOiJDb25uZWN0aW5nIHJvb21zIn0se2lkOiJlYXJseS1jaGVjay1pbiIsbGFiZWw6IkVhcmx5IGNoZWNrLWluIn0se2lkOiJsYXRlLWFycml2YWwiLGxhYmVsOiJMYXRlIGFycml2YWwifSx7aWQ6ImFjY2Vzc2libGUtcm9vbSIsbGFiZWw6IkFjY2Vzc2libGUgcm9vbSJ9XSx0az17ImtpbmctYmVkIjoidHdpbi1iZWRzIiwidHdpbi1iZWRzIjoia2luZy1iZWQiLCJoaWdoLWZsb29yIjoibG93LWZsb29yIiwibG93LWZsb29yIjoiaGlnaC1mbG9vciJ9O2xldCBQZT1udWxsO2NvbnN0IFVmPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIiB2YWx1ZT0iJHtjKFBlPy5uYW1lPz8iIil9Ij48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiIgdmFsdWU9IiR7YyhQZT8uZW1haWw/PyIiKX0iPjwvbGFiZWw+CiAgICA8L2Rpdj4ke210P2AKICAgIDxsYWJlbD5QaG9uZTxpbnB1dCBpZD0iZ3Bob25lIiB0eXBlPSJ0ZWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBob3RlbCB0byByZWFjaCB5b3UiIHZhbHVlPSIke2MoUGU/LnBob25lPz8iIil9Ij48L2xhYmVsPmA6IiJ9CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke2V1Lm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7Yyh0LmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoUGU/UGUucmVxdWVzdHM6WD8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7Yyh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7YyhQZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHtjKFBlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke2MoYmUpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7WD9gPGxhYmVsIGNsYXNzPSJyZW1lbWJlciI+PGlucHV0IGlkPSJncmVtZW1iZXIiIHR5cGU9ImNoZWNrYm94IiR7UGU/LnJlbWVtYmVyPyIgY2hlY2tlZCI6IiJ9PiBSZW1lbWJlciB0aGUgYmVkLCBmbG9vciBhbmQgcm9vbSByZXF1ZXN0cyBvbiBteSAke2MoWC5wcm9ncmFtbWU/PyJtZW1iZXJzaGlwIil9IGZvciBuZXh0IHRpbWU8L2xhYmVsPmA6IiJ9CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj4ke0hlPT09InBheS1hdC1ob3RlbCI/IkJvb2sgdGhlc2Ugcm9vbXMiOiJIb2xkIHRoZXNlIHJvb21zIn08L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7Y3M/IkEgdGVzdCBib29raW5nOiBub3RoaW5nIGlzIGhlbGQgYW5kIG5vdGhpbmcgaXMgcGFpZC4iOkhlPT09InBheS1hdC1ob3RlbCI/Ik5vIGNhcmQgaXMgdGFrZW4gaGVyZSBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcGF5IGF0IHRoZSBob3RlbC4iOiJObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi4ifTwvZGl2PgogIDwvZGl2PmAsbms9ZT0+ZS5sZW5ndGg+MT9gJHtlLnNsaWNlKDAsLTEpLmpvaW4oIiwgIil9IGFuZCAke2UuYXQoLTEpfWA6ZVswXT8/IiIsb2s9ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7YyhuayhlLm1pc3Npbmc/P1tdKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCxVZighMCldLmpvaW4oIiIpLHJrPWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5bZWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke2ModC5wcm9ncmFtbWUpfTwvZGl2PgogICAgICAgJHt0Lm5hbWU/YDxkaXYgY2xhc3M9IndoZXJlIj4ke2ModC5uYW1lKX08L2Rpdj5gOic8ZGl2IGNsYXNzPSJ3aGVyZSI+U2lnbmVkIGluPC9kaXY+J30KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiIHN0eWxlPSJmb250LXNpemU6MjBweCI+JHtjKHQudGllcj8ubmFtZSl9PC9kaXY+CiAgICAgICAke3R5cGVvZiB0LnBvaW50cz09Im51bWJlciI/YDxkaXYgY2xhc3M9IndoZW4iPiR7Yyh0LnBvaW50cy50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9IHBvaW50czwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj48Yj4ke2MoTWF0aC5yb3VuZCgodC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKSl9JSBvZmY8L2I+PHNwYW4+Um9vbSByYXRlcyBhbmQgdHJpcCB0b3RhbHMgbm93IHNob3cgdGhlICR7Yyh0LnRpZXI/Lm5hbWUpfSBtZW1iZXIgcmF0ZS4gTm90aGluZyBpcyBjaGFyZ2VkIGJ5IHNpZ25pbmcgaW4uPC9zcGFuPjwvZGl2PmAsKHQucHJlZmVyZW5jZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICA8Yj5TYXZlZCBmb3IgeW91ciBuZXh0IHN0YXlzPC9iPgogICAgICAgICAgIDxzcGFuPiR7Yyh0LnByZWZlcmVuY2VzLm1hcChuPT5ldS5maW5kKG89Pm8uaWQ9PT1uKT8ubGFiZWw/P24pLmpvaW4oIiwgIikpfSAtIHRpY2tlZCBvbiB0aGUgYm9va2luZyBmb3JtLCBhbmQgYXNrZWQgZm9yIG9ubHkgd2hlbiB5b3UgYm9vayB3aXRoIHRoZW0uPC9zcGFuPgogICAgICAgICAgIDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmb3JnZXQtcHJlZnMiPkZvcmdldCB0aGVtPC9idXR0b24+CiAgICAgICAgIDwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24tb3V0Ij5TaWduIG91dDwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxzaz0oKT0+Wyc8ZGl2IGNsYXNzPSJlcnIiPk5vIG1lbWJlcnNoaXAgbWF0Y2hlcyB0aGF0IG51bWJlciBhbmQgc3VybmFtZS4gQ2hlY2sgYm90aCBhcyB0aGV5IGFyZSBwcmludGVkIOKAlCBub3RoaW5nIGVsc2UgaXMgbmVlZGVkLCB0aGlzIGNvbm5lY3RvciBuZXZlciBhc2tzIGZvciBhIHBhc3N3b3JkLjwvZGl2PicsRG8oITApXS5qb2luKCIiKSxEbz0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0ic2lnbmluIiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPk1lbWJlcnNoaXAgbnVtYmVyPGlucHV0IGlkPSJtbnVtIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IGlzIHByaW50ZWQiPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5TdXJuYW1lPGlucHV0IGlkPSJtc3VyIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBzdXJuYW1lIG9uIGl0Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1pbiI+U2lnbiBpbjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gcGFzc3dvcmQgaXMgYXNrZWQgZm9yIGFuZCBub25lIGlzIHN0b3JlZC4gU2lnbmluZyBpbiBzaG93cyB0aGUgbWVtYmVyIHJhdGU7IG5vdGhpbmcgaXMgY2hhcmdlZC48L2Rpdj4KICA8L2Rpdj5gLGlrPWU9Pntjb25zdCB0PWUucmVxdWVzdGVkPz9bXTtyZXR1cm4gdC5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkJHtlLmFjY2Vzc2liaWxpdHk/IiBmbGFnIjoiIn0iPgogICAgPGI+UmVxdWVzdGVkLCBub3QgaGVsZDwvYj4KICAgICR7dC5tYXAobj0+YDxzcGFuPiR7YyhuKX08L3NwYW4+YCkuam9pbigiIil9CiAgPC9kaXY+YDoiIn0sSHU9ZT0+U3RyaW5nKGUuaG9sZFVudGlsPz8iIikuc2xpY2UoMCwxNikucmVwbGFjZSgiVCIsIiAiKSxhaz1lPT57Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuYm9va2luZ3MpJiZlLmJvb2tpbmdzLmxlbmd0aD9lLmJvb2tpbmdzOltlLmJvb2tpbmc/P3t9XSxuPXQubGVuZ3RoPjEsbz0ocixzLGEpPT5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Moci5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7YyhyLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7YyhRZShyLnN0YXkpKX0gwrcgJHtjKHIuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICAgIDwvZGl2PmAsbiYmSGU9PT0iaG9sZCI/YDxkaXYgY2xhc3M9Im5vdGUiPkhlbGQgdW50aWwgJHtjKEh1KHIpKX0gVVRDLjwvZGl2PmA6IiIsSGU9PT0icGF5LWF0LWhvdGVsIiYmci5zdGF0dXM9PT0icmVxdWVzdGVkIj9gPGRpdiBjbGFzcz0ibm90ZSI+V2FpdGluZyBmb3IgJHtjKGJlKX0gdG8gY29uZmlybSB0aGlzIGJvb2tpbmcg4oCUIHRoYXQgdGFrZXMgdXAgdG8gZWlnaHQgbWludXRlcy4gTXkgYm9va2luZ3Mgc2hvd3Mgd2hlbiBpdCBoYXMuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibW9uZXktb3V0Ij48c3Bhbj5Ub3RhbCBmb3IgdGhlIHN0YXk8L3NwYW4+PHNwYW4+JHtjKHMpfTwvc3Bhbj48L2Rpdj5gLGlrKGEpLGA8ZGl2IGNsYXNzPSJyb3dzIj4keyhyLnF1b3RlPy5saW5lcz8/W10pLm1hcCh1aykuam9pbigiIil9PC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgICR7ZnQoImxpc3RFeHRyYXMiKT9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+YDoiIn0KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2Moci5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCAke2Moci5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpO3JldHVybltlZSgpLG4/YDxkaXYgY2xhc3M9Im5vdGUiPiR7dC5sZW5ndGh9IGJvb2tpbmdzLCBvbmUgZm9yIGVhY2ggc3RheS4gRWFjaCBob3RlbCBrZWVwcyBpdHMgb3duIG5pZ2h0cyB1bmRlciBpdHMgb3duIGNvZGUsIGFuZCBlYWNoIGlzICR7ZnQoImNoYW5nZUJvb2tpbmciKT8iY2hhbmdlZCBvciBjYW5jZWxsZWQiOiJjYW5jZWxsZWQifSBvbiBpdHMgb3duLjwvZGl2PmA6IiIsY3M/YDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5BIHRlc3QgYm9va2luZy48L2I+CiAgICAgICA8c3Bhbj5NYWRlIGluIGEgc2ltdWxhdGVkIGNvcHkgb2YgJHtjKGJlKX0ncyBzeXN0ZW06IG5vdCBhICR7YyhiZSl9IHJlc2VydmF0aW9uLCBubyByb29tIGlzIGhlbGQsIGFuZCBub3RoaW5nIGlzIHBhaWQuPC9zcGFuPgogICAgIDwvZGl2PmA6SGU9PT0icGF5LWF0LWhvdGVsIj9gPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IkVhY2ggaXMiOiJUaGlzIGlzIn0gJHtjKGJlKX0ncyBvd24gcmVzZXJ2YXRpb24sIHBhaWQgYXQgdGhlIGhvdGVsLiBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YDpgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCB0aGUgdGltZSB1bmRlciBlYWNoIGNvZGUuIjpgVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7YyhIdSh0WzBdKSl9IFVUQy5gfSBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCwuLi50Lm1hcChyPT5uP28ocixTdHJpbmcoci50b3RhbD8/IiIpLHIpOm8ocixTdHJpbmcoZS50b3RhbD8/IiIpLGUpKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAke24/IiI6YCR7ZnQoImxpc3RFeHRyYXMiKT9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPmA6IiJ9CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGlzIGJvb2tpbmc8L2J1dHRvbj5gfQogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxjaz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUuZGV0YWlsPz9lLndoeT8/IlRoYXQgY291bGQgbm90IGJlIGRvbmUuIil9PC9kaXY+YCxhbj4wPyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCI+VmlldyB0aGUgdHJpcDwvYnV0dG9uPjwvZGl2Pic6IiJdLmpvaW4oIiIpLHVrPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9RZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2MoZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxsaz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQiLGZhaWxlZDoiYmFkIix1bmNvbmZpcm1lZDoid2FybiJ9LGRrPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5ldS5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke2Mobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LHBrPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdLG49ZS5ub3RGb3VuZD9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS50b29NYW55P2Uubm90Rm91bmRMaW5lOmBObyBib29raW5nIG1hdGNoZXMgJHtlLm5vdEZvdW5kfSB3aXRoIHRoYXQgZW1haWwuIEJvdGggaGF2ZSB0byBiZSBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLmApfTwvZGl2PmA6IiI7cmV0dXJuIGUubm90Rm91bmQmJnQubGVuZ3RoPT09MD9gJHtufQogICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5UcnkgYWdhaW48L2J1dHRvbj48L2Rpdj5gOnQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOltlZSgpLG4sYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKG8uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2MoUWUoby5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke2RrKG8pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtsa1tTdHJpbmcoby5zdGF0dXMpXT8/IiJ9Ij4ke2Moby5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICAgICR7by5zdGF0dXM9PT0idW5jb25maXJtZWQiP2A8ZGl2IGNsYXNzPSJtZXRhIj5Ob3Qga25vd24geWV0IHdoZXRoZXIgJHtjKGJlKX0gbWFkZSB0aGlzIGJvb2tpbmcg4oCUIGEgcGVyc29uIGlzIGNvbmZpcm1pbmcgaXQuPC9kaXY+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKG8ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke28uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG8uc3RhdHVzPT09ImNvbmZpcm1lZCI/YCR7ZnQoImxpc3RFeHRyYXMiKT9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+YDoiIn0KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsPC9idXR0b24+YDoiIn08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIil9LFZ1PWU9Pntjb25zdCB0PWUudmlldz09PSJjYW5jZWxsZWQiLG49ZS5ib29raW5nPz97fTtyZXR1cm5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDYW5jZWxsZWQiOiJDYW5jZWxsaW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsZWUoKSxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxKdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89ZS5mcm9tPz97fSxyPWUudG8scz0hIXImJihyLmNoZWNrSW4hPT1vLmNoZWNrSW58fHIuY2hlY2tPdXQhPT1vLmNoZWNrT3V0fHxOdW1iZXIoci5yb29tcykhPT1OdW1iZXIoby5yb29tcyl8fHIucm9vbU5hbWUhPT1vLnJvb21OYW1lKSxhPShpLHUsbCk9PnU/YDxkaXYgY2xhc3M9ImxlZyR7bD8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke2MoaSl9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHtjKHUuY2hlY2tJbil9IOKGkiAke2ModS5jaGVja091dCl9IMK3ICR7Yyh1Lm5pZ2h0cyl9ICR7TnVtYmVyKHUubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke2ModS5yb29tTmFtZSl9JHtOdW1iZXIodS5yb29tcyk+MT9gIMK3ICR7Yyh1LnJvb21zKX0gcm9vbXNgOiIifSDCtyAke2ModS50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW2VlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDaGFuZ2VkIjoiQ2hhbmdpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlLmhvdGVsTmFtZT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKGUuaG90ZWxOYW1lKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJsZWdzIj4ke2EodD8iV2FzIjoiTm93IixlLmZyb20scyl9JHthKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtjKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7YyhlLmFkZE9uLmZyb20pfSDihpIgJHtjKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0seXM9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7YyhlLnRpdGxlKX08L2g0PiR7YyhlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtjKG8udGl0bGUpfTwvaDQ+JHtjKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0saGs9ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXQuc29tZShzPT5zLnJlY29tbWVuZGVkKSxyPXM9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtzLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9JHtvPyIgbWFya2VkIjoiIn0iPgogICAgICAke28/YDxkaXYgY2xhc3M9InBpY2ttYXJrJHtzLnJlY29tbWVuZGVkPyIiOiIgbm9uZSJ9Ij4ke3MucmVjb21tZW5kZWQ/IlJlY29tbWVuZGVkIjoiIn08L2Rpdj5gOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHMuaG90ZWwuaWQpfSIgc3R5bGU9IiR7SnQoU3RyaW5nKHMuaG90ZWwuaWQpKX0iPgogICAgICAgICR7cy5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhzLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhLdChTdHJpbmcocy5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1uYW1lIj4ke2Mocy5ob3RlbC5uYW1lKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29sLXByaWNlIj4ke3MucHJpY2U/YCR7YyhzLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsIGNsYXNzPSJzdWIiPnRvdGFsIMK3ICR7YyhzLnByaWNlLm5pZ2h0bHkpfS9uaWdodDwvc21hbGw+YDpzLmZyb20/YDxzbWFsbD5Gcm9tIDwvc21hbGw+JHtjKHMuZnJvbSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ3aHkke3MuYmVzdEZvcj8iIjoiIG5vbmUifSI+JHtzLmJlc3RGb3I/YyhzLmJlc3RGb3IpOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHMucHJvcz8/W10pLm1hcChhPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2MoYSl9PC9zcGFuPjwvZGl2PmApLC4uLihzLmNvbnM/P1tdKS5tYXAoYT0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2MoYSl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW2VlKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhRZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCR7dC5sZW5ndGg+PTQ/IiBmb3VyIjoiIn0iIHN0eWxlPSItLWNvbHM6JHt0Lmxlbmd0aH07LS1oZWFkLXJvd3M6JHtvPzY6NX0iPgogICAgICAgPGRpdiBjbGFzcz0iY21wLWNvcm5lciI+PC9kaXY+CiAgICAgICAke3QubWFwKHIpLmpvaW4oIiIpfQogICAgICAgJHtuLm1hcCgocyxhKT0+YDxkaXYgY2xhc3M9ImsiPiR7YyhzKX08L2Rpdj4ke3QubWFwKGk9PmA8ZGl2IGNsYXNzPSJ2JHthJTI/IiBhbHQiOiIifSI+JHtjKGkucm93cz8uW2FdPy52YWx1ZT8/IuKAlCIpfTwvZGl2PmApLmpvaW4oIiIpfWApLmpvaW4oIiIpfQogICAgIDwvZGl2PjwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAocz0+YCR7YyhzLm5hbWUpfTogJHtjKHMud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+T3BlbiBhICR7YyhlLnZvY2FiPy5ub3VuPz8iaG90ZWwiKX0gdG8gc2VlIGl0cyByb29tcyR7ZS5zdGF5Py5jaGVja0luPyIgZm9yIHRoZXNlIG5pZ2h0cyI6IiJ9LjwvZGl2PmBdLmpvaW4oIiIpfSxmaz1lPT57Y29uc3QgdD1lLmRheXM/P1tdLG49aT0+YDxzcGFuIGNsYXNzPSJpbnN0YXRlICR7aS5ib29rZWR8fGkuaW5UcmlwPyJ5ZXMiOiJubyJ9Ij4ke2kuYm9va2VkP2BCb29rZWQgwrcgJHtjKGkuYm9va2VkKX1gOmkuaW5UcmlwPyJJbiB0aGUgdHJpcCI6IlBsYW4gb25seSJ9PC9zcGFuPmAsbz1pPT5gIGRhdGEtaG90ZWw9IiR7YyhpLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtpLmNoZWNrSW4/YCBkYXRhLWNpPSIke2MoaS5jaGVja0luKX0iIGRhdGEtY289IiR7YyhpLmNoZWNrT3V0KX0iYDoiIn1gLHI9aT0+aS5jaGVja291dD9gPGRpdiBjbGFzcz0icGxhbi1uaWdodCIke28oaSl9PjxzcGFuPkNoZWNrIG91dCDCtyAke2MoaS5uYW1lKX08L3NwYW4+PC9kaXY+YDpOdW1iZXIoaS5uaWdodD8/MSk+MT9gPGRpdiBjbGFzcz0icGxhbi1uaWdodCIke28oaSl9PgogICAgICAgICAgIDxzcGFuPk5pZ2h0ICR7YyhpLm5pZ2h0KX0gb2YgJHtjKGkubmlnaHRzKX0gwrcgJHtjKGkubmFtZSl9PC9zcGFuPiR7bihpKX0KICAgICAgICAgPC9kaXY+YDpgPGRpdiBjbGFzcz0icGxhbi1zdGF5IiR7byhpKX0+CiAgICAgICAgICAgPHNwYW4gY2xhc3M9InBzLXNob3QiIHN0eWxlPSIke0p0KFN0cmluZyhpLmlkKSl9Ij4ke2kuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2MoaS5pbWFnZVVybCl9IiBhbHQ9IiI+YDpgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEt0KFN0cmluZyhpLm5hbWUpKSl9PC9zcGFuPmB9PC9zcGFuPgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcy1ib2R5Ij4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4ke2MoaS5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YSI+JHtjKFtpLmRldGFpbCxpLm5pZ2h0cz9gJHtpLm5pZ2h0c30gJHtpLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICR7aS5wcmljZT9gPHNwYW4gY2xhc3M9InBzLXByaWNlIj4ke2MoaS5wcmljZSl9PC9zcGFuPmA6IiJ9CiAgICAgICAgICAgICAke24oaSl9CiAgICAgICAgICAgPC9zcGFuPgogICAgICAgICA8L2Rpdj5gLHM9aT0+YAogICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoaS5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoW2kuZGV0YWlsLGkucHJpY2VdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHtuKGkpfQogICAgPC9kaXY+YCxhPWk9PihpLnBsYW4/P1tdKS5sZW5ndGg/YDxvbCBjbGFzcz0ibW9tZW50cyI+JHtpLnBsYW4ubWFwKHU9PmA8bGk+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndoZW4iPiR7Yyh1LnRpbWU/PyIiKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndoYXQiPjxiPiR7Yyh1LndoYXQpfTwvYj4ke3Uubm90ZT9gPHNtYWxsPiR7Yyh1Lm5vdGUpfTwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDwvbGk+YCkuam9pbigiIil9PC9vbD5gOiIiO3JldHVybltlZSgpLGA8ZGl2PgogICAgICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgICAke2Uuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFFlKGUuc3RheSkpfTwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0iZ2FwIj48Yj4ke2MoTnVtYmVyKGUuaW5UcmlwPz8wKStOdW1iZXIoZS5ib29rZWQ/PzApKX0vJHtjKGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7YyhlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChpLHUpPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke3UrMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7YyhpLmxhYmVsKX0ke2kuZGF0ZT9gPHNtYWxsPiDCtyAke2MobWsoU3RyaW5nKGkuZGF0ZSkpKX08L3NtYWxsPmA6IiJ9PC9kaXY+CiAgICAgICAgICAke2kubm90ZT9gPGRpdiBjbGFzcz0iZGF5bm90ZSI+JHtjKGkubm90ZSl9PC9kaXY+YDoiIn0KICAgICAgICAgICR7YShpKX0KICAgICAgICAgICR7KGkuaXRlbXM/P1tdKS5tYXAobD0+bC5raW5kPT09ImhvdGVsIj9yKGwpOnMobCkpLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKGk9PmAke2MoaS5uYW1lKX06ICR7YyhpLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxtaz1lPT5uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKS50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7d2Vla2RheToic2hvcnQiLGRheToibnVtZXJpYyIsbW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pLEVlPShlLHQ9ITEpPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47Y29uc3Qgbj10JiZlLnZpZXc9PT0ibWVtYmVyIiYmWD97Li4uZSxtZW1iZXI6WH06ZTtBXyhuKSxuLnRvb2xOYW1lcyYmKEdjPW4udG9vbE5hbWVzKSwobi5ib29raW5nTW9kZT09PSJwYXktYXQtaG90ZWwifHxuLmJvb2tpbmdNb2RlPT09ImhvbGQiKSYmKEhlPW4uYm9va2luZ01vZGUpLHR5cGVvZiBuLnRvb2xOYW1lcz09Im9iamVjdCImJihjcz1uLnNhbmRib3g9PT0hMCxtdD1uLnBob25lUmVxdWlyZWQ9PT0hMCksbi5icmFuZCYmKGJlPVN0cmluZyhuLmJyYW5kKSksbi5sb2dvVXJsJiYoYnM9U3RyaW5nKG4ubG9nb1VybCkpLHR5cGVvZiBuLmRlbW89PSJib29sZWFuIiYmKFRmPW4uZGVtbyksbi5kZW1vTm90ZSYmKElmPVN0cmluZyhuLmRlbW9Ob3RlKSksdHlwZW9mIG4ucm9vbXNfd2FudGVkPT0ibnVtYmVyIj9ZPW4ucm9vbXNfd2FudGVkOihuLnZpZXc9PT0iaG90ZWxzInx8bi52aWV3PT09ImRlc3RpbmF0aW9ucyJ8fG4udmlldz09PSJuby1ob3RlbHMiKSYmbi5zdGF5Py5jaGVja0luJiYhZ3QmJihZPU1hdGgubWF4KDEsTnVtYmVyKG4uYXNrPy5yb29tcz8/MSl8fDEpKSx0fHwobi52aWV3PT09Im1lbWJlciImJm4ubWVtYmVyPy50aWVyPy5uYW1lP1g9bi5tZW1iZXI6bi5tZW1iZXI/LnRpZXI/Lm5hbWUmJihYPVg/LnByb2dyYW1tZT09PW4ubWVtYmVyLnByb2dyYW1tZSYmWD8udGllcj8ubmFtZT09PW4ubWVtYmVyLnRpZXIubmFtZT97Li4uWCwuLi5uLm1lbWJlcixwcmVmZXJlbmNlczpuLm1lbWJlci5wcmVmZXJlbmNlc306bi5tZW1iZXIpLChuLnZpZXc9PT0ic2lnbmVkLW91dCJ8fG4uc2lnbmVkSW49PT0hMSkmJihYPW51bGwpKSxuLnN0YXk/LmNoZWNrSW4mJiFlbiYmIWd0JiYoVD17Y2hlY2tJbjpuLnN0YXkuY2hlY2tJbixjaGVja091dDpuLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOm4uc3RheS5ndWVzdHM/PzJ9KSwhUWMmJihuLnZpZXc9PT0idHJpcCJ8fG4udmlldz09PSJuZWVkcy1kYXRlcyIpJiYoU3Q9bi5saW5lcz8/W10pLChuLnZpZXc9PT0iYm9va2luZyJ8fG4udmlldz09PSJlbXB0eS10cmlwIikmJihTdD1bXSxhbj0wKSxVZT1TdHJpbmcobi52aWV3Pz8iIiksUGYoKTtjb25zdCBvPXBlKCJicmFuZCIpO2JzPyhvLnNyYz1icyxvLmhpZGRlbj0hMSxwZSgidGl0bGUiKS5oaWRkZW49ITApOihvLmhpZGRlbj0hMCxwZSgidGl0bGUiKS5oaWRkZW49ITEscGUoInRpdGxlIikudGV4dENvbnRlbnQ9YmV8fCJIb3RlbHMiKSxwZSgic3ViIikudGV4dENvbnRlbnQ9dmsobiksX2soKSx5aygpO2NvbnN0IHI9e2hvdGVsczpLXyxkZXN0aW5hdGlvbnM6RF8sIm5vLWhvdGVscyI6V18saG90ZWw6QnUsIm5vLXJvb21zIjpCdSwiaG90ZWwtbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGF0IGhvdGVsIGlzIG5vdCBpbiB0aGlzIGNvbm5lY3Rvci48L2Rpdj4nLGV4dHJhczpZXyx0cmlwOmVrLCJuZWVkcy1kYXRlcyI6YmssYm9va2luZzphaywibmVlZHMtZ3Vlc3QiOm9rLG1lbWJlcjpyaywibWVtYmVyLW5vdC1mb3VuZCI6c2ssInNpZ25lZC1vdXQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlNpZ25lZCBvdXQuIFJhdGVzIGFyZSB0aGUgcHVibGljIG9uZXMgYWdhaW4uPC9kaXY+PGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPjwvZGl2PicsImVtcHR5LXRyaXAiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRyaXAgeWV0LjwvZGl2PicsYm9va2luZ3M6cGssImNhbmNlbGxhdGlvbi1wcmV2aWV3IjpWdSxjYW5jZWxsZWQ6VnUsImNoYW5nZS1wcmV2aWV3IjpKdSxjaGFuZ2VkOkp1LCJib29raW5nLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZyBoZXJlIG1hdGNoZXMgdGhhdCBjb2RlLjwvZGl2PicsY29tcGFyaXNvbjpoaywibm90aGluZy10by1jb21wYXJlIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5Ob25lIG9mIHRob3NlIGFyZSBob3RlbHMgdGhpcyBjb25uZWN0b3Iga25vd3MuPC9kaXY+JyxpdGluZXJhcnk6ZmssImVtcHR5LWl0aW5lcmFyeSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+QW4gaXRpbmVyYXJ5IG5lZWRzIGF0IGxlYXN0IG9uZSBkYXkuPC9kaXY+Jyxwb2xpY3k6eXMscG9saWNpZXM6eXMsInBvbGljeS1taXNzaW5nIjp5cyxlcnJvcjpjaywiZmluZC1ib29raW5nIjooKT0+W2VlKCksJzxkaXYgY2xhc3M9Im5vdGUiPkEgYm9va2luZyBtYWRlIGluIGFub3RoZXIgY29udmVyc2F0aW9uIGlzIGZvdW5kIHdpdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgaXQgd2FzIG1hZGUgd2l0aCAtIGJvdGgsIGFzIHRoZXkgYXJlIG9uIHRoZSBjb25maXJtYXRpb24uPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9ybSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICAgICAgIDxsYWJlbD5Db25maXJtYXRpb24gY29kZTxpbnB1dCBpZD0iZmNvZGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iU0wt4oCmIj48L2xhYmVsPgogICAgICAgICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJmbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIG9uZSBvbiB0aGUgYm9va2luZyI+PC9sYWJlbD4KICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibG9va3VwLWJvb2tpbmciPkZpbmQgaXQ8L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YF0uam9pbigiIiksIm5vLW1lbWJlciI6KCk9PmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9ib2R5IGlzIHNpZ25lZCBpbiwgc28gdGhlcmUgaXMgbm90aGluZyBzYXZlZCB0byBmb3JnZXQuPC9kaXY+JHtEbyghMCl9YCwibWVtYmVyLXNpZ24taW4iOigpPT5bZWUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+JyxEbyghMCldLmpvaW4oIiIpfTsoVWU9PT0iaG90ZWwifHxVZT09PSJuby1yb29tcyJ8fFVlPT09Im5lZWRzLWRhdGVzIikmJm4uaG90ZWw/LmlkPyhZdD1TdHJpbmcobi5ob3RlbC5pZCksbi5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5wcygwLCF1cyksMCkpOihZdD0iIix0dSgpKSxxPW47Y29uc3Qgcz1yW1VlXTtwZSgiY29udGVudCIpLmlubmVySFRNTD0ocz9zKG4pOmA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhuLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7bi5kZXRhaWw/YDxicj4ke2Mobi5kZXRhaWwpfWA6IiJ9PC9kaXY+YCkrZ2sobiksVWU9PT0iaG90ZWxzIiYmIWxuKCkmJihYYz1ZYygpLGRzKCkhPT1xbyYmRWUobix0KSl9LGdrPWU9Pntjb25zdCB0PSEhQWUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy5tZXNzYWdlLG49KGUuc3VnZ2VzdGlvbnM/P1tdKS5tYXAoKG8scik9Pm8/LmFza3x8bz8uYXNrcz8ubGVuZ3RoP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LGJrPWU9PltlZSgpLGUuaG90ZWw/TGYoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLE9mKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSx2az1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/UWUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIix5az0oKT0+e2NvbnN0IGU9cGUoIm1lbWJlcmNoaXAiKTtYPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1gudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoWC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixbWC5uYW1lLFgucHJvZ3JhbW1lXS5maWx0ZXIodD0+dHlwZW9mIHQ9PSJzdHJpbmciJiZ0KS5qb2luKCIgwrcgIikpKTooZS5oaWRkZW49IWZ0KCJzaWduSW4iKXx8VWU9PT0ibWVtYmVyLW5vdC1mb3VuZCIsZS50ZXh0Q29udGVudD0iTWVtYmVyIHNpZ24gaW4iLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsImFzay1zaWduLWluIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpfSxfaz0oKT0+e2NvbnN0IGU9cGUoImhlYWR0cmlwIiksdD1RYz9hbjphbnx8U3QubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxVZT09PSJ0cmlwIixwZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSxraz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO1Q9e2NoZWNrSW46ZT8udmFsdWU/P1QuY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/VC5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz9ULmd1ZXN0cyl8fDJ9fSxUbz0oZT17fSk9PlQuY2hlY2tJbiYmVC5jaGVja091dD97Y2hlY2tJbjpULmNoZWNrSW4sY2hlY2tPdXQ6VC5jaGVja091dCxndWVzdHM6VC5ndWVzdHMsLi4uZX06ZTtsZXQgUnMsZW49ITE7Y29uc3QgdHU9KCk9PntjbGVhclRpbWVvdXQoUnMpLGVuPSExfSxwcz0oZT0wLHQ9ITEpPT57WXQmJihjbGVhclRpbWVvdXQoUnMpLGVuPSEwLFJzPXNldFRpbWVvdXQoKCk9PntpZighWXQpe2VuPSExO3JldHVybn1pZihWdCl7cHMoMTUwLHQpO3JldHVybn1lbj0hMSxNKCJnZXRIb3RlbCIse2hvdGVsOll0LHJvb21zOlksLi4uVG8oKX0sdD97bm90ZTpaX306e30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBuaWdodHMuIikpfSxlKSl9LFI9ZT0+e3BlKCJjb250ZW50IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZSl9PC9kaXY+YCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlPT57Y29uc3QgdD1lLnRhcmdldD8uY2xvc2VzdCgiW2RhdGEtaG90ZWxdLFtkYXRhLWFjdF0sW2RhdGEtcG9saWN5XSxbZGF0YS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2FuY2VsXSxbZGF0YS1jb25maXJtLWNoYW5nZV0sW2RhdGEtZXh0cmFzXSxbZGF0YS1yb29tcy1uXSxbZGF0YS1hc2tdLFtkYXRhLWJvb2tpbmctZXh0cmFzXSxbZGF0YS1ib29raW5nLWV4dHJhXSxbZGF0YS1zdWdnZXN0XSxbZGF0YS1wbGFjZV0sW2RhdGEtcGxhY2UtYWxsXSxbZGF0YS1zb3J0XSxbZGF0YS1saXN0LXJvb21zXSxbZGF0YS1maWx0ZXJdLFtkYXRhLXBhbmVsXSxbZGF0YS1yZWdpb25dIik7aWYoIXQpcmV0dXJuO2NvbnN0IG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXNrIik7aWYobiE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09InRydWUiO3Quc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLFN0cmluZyhrKSk7Y29uc3Qgej10a1tuXTtrJiZ6JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYXNrW2RhdGEtYXNrPSIke3p9Il1gKT8uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLEJmKCk7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtbGlzdC1yb29tcyIpO2lmKG8hPT1udWxsKXtZPU1hdGgubWluKHF1LE1hdGgubWF4KDEsWStOdW1iZXIobykpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJscm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcoWSkpLExvKDQ1MCk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKHIhPT1udWxsKXtraygpLFk9TWF0aC5taW4ocXUsTWF0aC5tYXgoMSxZK051bWJlcihyKSkpO2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJuIik7ayYmKGsudGV4dENvbnRlbnQ9U3RyaW5nKFkpKTtjb25zdCB6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTt6JiYoei50ZXh0Q29udGVudD1scygpKSxwcyg0NTApO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYocyE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsej10LmNsYXNzTGlzdC5jb250YWlucygiYWRkIikmJiF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP1k6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksSz10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9OlRvKCk7TSgiYWRkVG9UcmlwIix7aG90ZWw6ayxyb29tOnMscm9vbXM6eiwuLi5LfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1leHRyYSIpO2lmKGEhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWRheSIpO00oImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOmEscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksLi4uaz97ZGF5Omt9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlIik7aWYoaSE9PW51bGwpe2NvbnN0IGs9cT8uYXNrPy5zb3J0LHo9cT8udmlldz09PSJob3RlbHMiP3E/LmFzaz8ucXVlcnk6dm9pZCAwO1pzKCk7Y29uc3QgSz1xPy52aWV3PT09ImRlc3RpbmF0aW9ucyJ8fCEhcT8uc3RheT8uY2hlY2tJbjtNKCJsaXN0SG90ZWxzIix7Li4uaT97Y2l0eTppfTp7fSwuLi5rP3tzb3J0Omt9Ont9LC4uLmkmJno/e3F1ZXJ5Onp9Ont9LC4uLnE/LnZpZXc9PT0iaG90ZWxzIj96byhxPy5hc2spOnt9LC4uLks/WHQoKTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCB1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWZpbHRlciIpO2lmKHUhPT1udWxsKXtjb25zdCBrPXE/LmFzaz8/e30sej16byhrKTtpZih1LnN0YXJ0c1dpdGgoImJyYW5kOiIpKXtjb25zdCByZT11LnNsaWNlKDYpO3ouYnJhbmQ9ei5icmFuZD09PXJlP3ZvaWQgMDpyZX1lbHNlIGlmKHUuc3RhcnRzV2l0aCgiZmFjaWxpdHk6Iikpe2NvbnN0IHJlPXUuc2xpY2UoOSksUmU9ei5mYWNpbGl0aWVzPz9bXTt6LmZhY2lsaXRpZXM9UmUuaW5jbHVkZXMocmUpP1JlLmZpbHRlcihZZT0+WWUhPT1yZSk6Wy4uLlJlLHJlXX1lbHNlKHU9PT0iZnJlZUNhbmNlbGxhdGlvbiJ8fHU9PT0iYnJlYWtmYXN0IikmJih6W3VdPSF6W3VdKTtjb25zdCBLPXpvKHopO00oImxpc3RIb3RlbHMiLHsuLi5VdShrKSwuLi5LfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBmaWx0ZXIgdGhlIGxpc3QuIikpO3JldHVybn1jb25zdCBsPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXNvcnQiKTtpZihsIT09bnVsbCl7eGU9amY7Y29uc3R7c29ydDprLC4uLnp9PXE/LmFzaz8/e307TSgibGlzdEhvdGVscyIsey4uLnosLi4ubCE9PSJncm91cCI/e3NvcnQ6bH06e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHJlb3JkZXIgdGhlIGxpc3QuIikpO3JldHVybn1jb25zdCBkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlLWFsbCIpO2lmKGQhPT1udWxsKXtNKCJsaXN0SG90ZWxzIix7Y2l0eTpkLGFsbDohMCwuLi5YdCgpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWNvbnN0IG09dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYXMiKTtpZihtIT09bnVsbCl7TSgibGlzdEV4dHJhcyIscHQobSkpLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IGI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYSIpO2lmKGIhPT1udWxsKXtNKCJwcmV2aWV3Q2hhbmdlIix7Li4ucHQodC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZyIpPz8iIiksZXh0cmE6YixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCB2PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHYhPT1udWxsKXtNKCJsaXN0RXh0cmFzIix7aG90ZWw6diwuLi5UbygpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgXz10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZihfIT09bnVsbCl7TSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzpffSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZih3IT09bnVsbCl7TSgicHJldmlld0NhbmNlbGxhdGlvbiIscHQodykpLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0ICQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZigkIT09bnVsbCl7TSgiY2FuY2VsQm9va2luZyIsey4uLnB0KCQpLGNvbmZpcm1lZDohMH0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgY2FuY2VsIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IE49dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jaGFuZ2UiKTtpZihOIT09bnVsbCl7Y29uc3Qgaz1xPy50bz8/e30sej1xPy5mcm9tPz97fSxLPXE/LmFkZE9uLHJlPWsuY2hlY2tJbiYmKGsuY2hlY2tJbiE9PXouY2hlY2tJbnx8ay5jaGVja091dCE9PXouY2hlY2tPdXQpO00oImNoYW5nZUJvb2tpbmciLHsuLi5wdChOKSxjb25maXJtZWQ6ITAsLi4ucmU/e2NoZWNrSW46ay5jaGVja0luLGNoZWNrT3V0OmsuY2hlY2tPdXR9Ont9LC4uLks/LmlkP3tleHRyYTpLLmlkLHF1YW50aXR5Ok51bWJlcihLLnRvKX06e30sLi4uay5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKGsucm9vbXMpIT09TnVtYmVyKHoucm9vbXMpP3tyb29tczpOdW1iZXIoay5yb29tcyl9Ont9LC4uLmsucm9vbU5hbWUmJmsucm9vbU5hbWUhPT16LnJvb21OYW1lP3tyb29tOmsucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgST10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZihJPT09ImJhY2siKXtLdSgpO3JldHVybn1jb25zdCBHPUk9PT0iYm9va2luZ3MiPyJib29raW5ncyI6dC5oYXNBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/YGhvdGVsOiR7dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKX1gOiIiO2lmKEcmJmhlLmxlbmd0aCYmc24oaGUuYXQoLTEpPy5wYXlsb2FkKT09PUcpe0t1KCk7cmV0dXJufWNvbnN0IG9lPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJlZ2lvbiIpO2lmKG9lIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpIT09InRydWUiO2Zvcihjb25zdCB6IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJlZ2lvbl0iKSl6LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKGsmJno9PT10KSk7Zm9yKGNvbnN0IHogb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmVnaW9uLWJvZHldIikpei5oaWRkZW49IWt8fHouZ2V0QXR0cmlidXRlKCJkYXRhLXJlZ2lvbi1ib2R5IikhPT1vZTtyZXR1cm59aWYoST09PSJtb3JlLWNvdW50cmllcyIpe2Zvcihjb25zdCBrIG9mKHQuY2xvc2VzdCgiW2RhdGEtcmVnaW9uLWJvZHldIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuZGVzdFtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5jbG9zZXN0KCIucGxhY2VzIik/LnJlbW92ZSgpO3JldHVybn1pZihJPT09Im1vcmUtcGxhY2VzIil7Zm9yKGNvbnN0IGsgb2YodC5jbG9zZXN0KCIucGxhY2VzIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuY2hpcC5wbGFjZVtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5yZW1vdmUoKTtyZXR1cm59Y29uc3QgSj10LmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpO2lmKEohPT1udWxsKXt4ZT14ZT09PUo/IiI6Sjtmb3IoY29uc3QgayBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbC1ib2R5XSIpKWsuaGlkZGVuPWsuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsLWJvZHkiKSE9PXhlO2Zvcihjb25zdCBrIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsXSIpKWsuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoay5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKT09PXhlKSk7cmV0dXJufWlmKEk9PT0iY2xlYXItZmlsdGVycyIpe00oImxpc3RIb3RlbHMiLFV1KHE/LmFzaykpLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgY2xlYXIgdGhlIGZpbHRlcnMuIikpO3JldHVybn1pZihJPT09ImFsbC1ob3RlbHMiKXtacygpLE0oImxpc3RIb3RlbHMiLHthbGw6ITAsLi4uWHQoKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJwcmljZS1saXN0Iil7TG8oMCk7cmV0dXJufWlmKEk9PT0iZmluZC1ib29raW5nIil7Y29uc3Qgaz17dmlldzoiZmluZC1ib29raW5nIn07U28oayksRWUoayksdHQoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJsb29rdXAtYm9va2luZyIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm1haWwiKT8udmFsdWUudHJpbSgpPz8iIjtpZigha3x8IXouaW5jbHVkZXMoIkAiKSl7UigiQm90aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCB0aGUgYm9va2luZyB3YXMgbWFkZSB3aXRoLCBwbGVhc2UuIik7cmV0dXJufU0oImxpc3RCb29raW5ncyIse2Jvb2tpbmc6ayxlbWFpbDp6fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb29rIHRoYXQgdXAuIikpO3JldHVybn1pZihJPT09ImZpbmQiKXtGZigpO3JldHVybn1pZihJPT09InBhZ2UtbmV4dCJ8fEk9PT0icGFnZS1wcmV2Iil7Y29uc3Qgaz1xO2lmKCFrfHxrLnZpZXchPT0iaG90ZWxzIilyZXR1cm47Y29uc3Qgej1kcygpLEs9TnVtYmVyKGsub2Zmc2V0Pz8wKSxyZT1NYXRoLm1pbih6LChrLmhvdGVscz8/W10pLmxlbmd0aCk7TSgibGlzdEhvdGVscyIsey4uLmsuYXNrPz97fSxvZmZzZXQ6ST09PSJwYWdlLW5leHQiP0srcmU6TWF0aC5tYXgoMCxLLXopLGxpbWl0Onp9KS50aGVuKHR0KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJmdWxsc2NyZWVuIil7QWUucmVxdWVzdERpc3BsYXlNb2RlKHttb2RlOiJmdWxsc2NyZWVuIn0pLnRoZW4oaz0+e3VuPVN0cmluZyhrPy5tb2RlPz91bik7Y29uc3Qgej1xO2lmKCF6KXJldHVybjtjb25zdCBLPU51bWJlcih6LnRvdGFsPz8wKTtsbigpJiZ6LnZpZXc9PT0iaG90ZWxzIiYmKE51bWJlcih6Lm9mZnNldD8/MCk+MHx8KHouaG90ZWxzPz9bXSkubGVuZ3RoPE1hdGgubWluKDEyLEspKT9NKCJsaXN0SG90ZWxzIix7Li4uei5hc2s/P3t9LGxpbWl0OjEyfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpOkVlKHopfSkuY2F0Y2goKCk9PlIoIlRoaXMgYXBwIGNhbm5vdCBvcGVuIGZ1bGwgc2NyZWVuIGhlcmUuIikpO3JldHVybn1pZihJPT09Im1vcmUtaG90ZWxzIil7Y29uc3Qgaz1xO2lmKCFrfHxrLnZpZXchPT0iaG90ZWxzIilyZXR1cm47TSgibGlzdEhvdGVscyIsey4uLmsuYXNrPz97fSxvZmZzZXQ6TnVtYmVyKGsub2Zmc2V0Pz8wKSsoay5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MTJ9LHtmb2xkOno9Pno/LnZpZXc9PT0iaG90ZWxzIj97Li4ueixob3RlbHM6Wy4uLmsuaG90ZWxzPz9bXSwuLi56LmhvdGVscz8/W11dLHNob3duOihrLmhvdGVscz8/W10pLmxlbmd0aCsoei5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0Ok51bWJlcihrLm9mZnNldD8/MCkscGxhY2VzOmsucGxhY2VzLC4uLmsud2lkZW5lZD97d2lkZW5lZDprLndpZGVuZWR9Ont9fTp6fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJob21lIil7TSgibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoKEk9PT0ibWVtYmVyInx8ST09PSJmaW5kLWJvb2tpbmcifHxJPT09ImFzay1zaWduLWluIikmJlZ0KXJldHVybjtpZihJPT09Im1lbWJlciIpe2lmKCFYKXJldHVybjtjb25zdCBrPXt2aWV3OiJtZW1iZXIiLG1lbWJlcjpYfTtTbyhrKSxFZShrKSx0dCgpO3JldHVybn1pZihJPT09ImFzay1zaWduLWluIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2lnbmluIik7aWYoaylrLmhpZGRlbj0hMTtlbHNle2NvbnN0IHo9e3ZpZXc6Im1lbWJlci1zaWduLWluIn07U28oeiksRWUoeiksdHQoKX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09InNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwheil7UigiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufU0oInNpZ25JbiIse251bWJlcjprLHN1cm5hbWU6en0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKEk9PT0iZm9yZ2V0LXByZWZzIil7TSgiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgSD10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYoSCE9PW51bGwpe2NvbnN0IGs9KHE/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKEgpXTtrPy5hc2s/LnRvb2w/TShTdHJpbmcoay5hc2sudG9vbCksay5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6QXJyYXkuaXNBcnJheShrPy5hc2tzKSYmay5hc2tzLmxlbmd0aD8oYXN5bmMoKT0+e2Zvcihjb25zdFt6LEtdb2Ygay5hc2tzLmVudHJpZXMoKSlhd2FpdCBNKFN0cmluZyhLLnRvb2wpLEsuYXJncz8/e30se3B1c2g6ej09PTB9KX0pKCkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBwdXQgYWxsIG9mIHRoZW0gaW4gdGhlIHRyaXAganVzdCBub3cuIikpOms/LnNheSYmQWUuc2VuZE1lc3NhZ2Uoe3JvbGU6InVzZXIiLGNvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OlN0cmluZyhrLnNheSl9XX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgc2VuZCB0aGF0IHRvIHRoZSBjaGF0LiIpKTtyZXR1cm59aWYoST09PSJzaWduLW91dCIpe1g9bnVsbCxNKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKEk9PT0iYXNrLWJvb2siKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpO2smJihrLmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0iYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ21haWwiKT8udmFsdWUudHJpbSgpPz8iIixLPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncGhvbmUiKT8udmFsdWUudHJpbSgpPz8iIixyZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25vdGUiKT8udmFsdWUudHJpbSgpPz8iIixSZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3RpbWUiKT8udmFsdWUudHJpbSgpPz8iIixZZT1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAoS2Y9PktmLmRhdGFzZXQuYXNrPz8iIiksbnU9ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWQ7aWYoUGU9e25hbWU6ayxlbWFpbDp6LC4uLm10P3twaG9uZTpLfTp7fSxub3RlczpyZSxhcnJpdmluZ0F0OlJlLHJlcXVlc3RzOlllLHJlbWVtYmVyOm51fSwha3x8IXouaW5jbHVkZXMoIkAiKSl7UihrPydUaGF0IGVtYWlsIGhhcyBubyAiQCIgaW4gaXQgLSB0aGUgY29uZmlybWF0aW9uIG5lZWRzIGFuIGFkZHJlc3MgaXQgY2FuIHJlYWNoLic6IlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwg4oCUIHRoZSBib29raW5nIGlzIGZvdW5kIGFnYWluIGJ5IHRoZSBlbWFpbCBhbmQgaXRzIGNvZGUuIik7cmV0dXJufWlmKG10JiZLLnJlcGxhY2UoL1xEL2csIiIpLmxlbmd0aDw2KXtSKCJUaGUgYm9va2luZyBuZWVkcyBhIHBob25lIG51bWJlciwgc28gdGhlIGhvdGVsIGNhbiByZWFjaCB5b3UuIik7cmV0dXJufU0oInJlcXVlc3RCb29raW5nIix7bmFtZTprLGVtYWlsOnosLi4ubXQ/e3Bob25lOkt9Ont9LC4uLnJlP3tub3RlczpyZX06e30sLi4uUmU/e2Fycml2aW5nQXQ6UmV9Ont9LC4uLlllLmxlbmd0aD97cmVxdWVzdHM6WWV9Ont9LC4uLm51P3tyZW1lbWJlclJlcXVlc3RzOiEwfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKEk9PT0iYm9va2luZ3MiKXtNKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKEk9PT0idHJpcCIpe00oInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgZ2U9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihnZSl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLHo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTtrJiZ6JiYoVC5jaGVja0luPWssVC5jaGVja091dD16KSxNKCJnZXRIb3RlbCIse2hvdGVsOmdlLC4uLlRvKCksLi4uVC5jaGVja0luJiZZPjE/e3Jvb21zOll9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfX0pO2NvbnN0IEJmPSgpPT57aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpKXJldHVybjtjb25zdCBlPXQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpPy52YWx1ZT8/IiI7UGU9e25hbWU6ZSgiZ25hbWUiKSxlbWFpbDplKCJnbWFpbCIpLC4uLm10P3twaG9uZTplKCJncGhvbmUiKX06e30sbm90ZXM6ZSgiZ25vdGUiKSxhcnJpdmluZ0F0OmUoImd0aW1lIikscmVxdWVzdHM6Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKHQ9PnQuZGF0YXNldC5hc2s/PyIiKSxyZW1lbWJlcjohIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZH19O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixlPT57Y29uc3QgdD1lLnRhcmdldD8uaWQ/PyIiO1siZ25hbWUiLCJnbWFpbCIsImdwaG9uZSIsImdub3RlIiwiZ3RpbWUiLCJncmVtZW1iZXIiXS5pbmNsdWRlcyh0KSYmQmYoKX0pO2NvbnN0IEt1PSgpPT57Zm9yKDtoZS5hdCgtMSk/LnBheWxvYWQ/LnZpZXc9PT0ibWVtYmVyIiYmIVg7KWhlPWhlLnNsaWNlKDAsLTEpO2NvbnN0IGU9aGUuYXQoLTEpO2lmKCFlfHxWdCl7UGYoKTtyZXR1cm59aGU9aGUuc2xpY2UoMCwtMSksam8rPTEsdHUoKSxIZigpO2NvbnN0IHQ9ZS52ZXJzaW9uPT09Tm8/dm9pZCAwOlBfKGUucGF5bG9hZCk7dD8ocT1lLnBheWxvYWQsTSh0LmtleSx0LmFyZ3Mse3B1c2g6ITF9KS5jYXRjaCgoKT0+RWUoZS5wYXlsb2FkLCEwKSkuZmluYWxseSh0dCkpOihFZShlLnBheWxvYWQsITApLHR0KCkpfSxGZj0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndoZXJlIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWUpe1IoIldoZXJlIHRvPyBBIGNpdHksIGEgY291bnRyeSBvciBhIGhvdGVsLiIpO3JldHVybn1acygpO2NvbnN0IG49KHE/LnJlZ2lvbnM/P1tdKS5mbGF0TWFwKG89PihvLmNvdW50cmllcz8/W10pLmZsYXRNYXAocj0+W3IubmFtZSwuLi4oci5jaXRpZXM/P1tdKS5tYXAocz0+cy5uYW1lKV0pKS5maW5kKG89Pm8udG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKSk7TSgibGlzdEhvdGVscyIsey4uLm4/e2NpdHk6bn06e3F1ZXJ5OmV9LC4uLlh0KCl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHNlYXJjaCBqdXN0IG5vdy4iKSl9LFpzPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGNvIik7ZT8udmFsdWUmJihULmNoZWNrSW49ZS52YWx1ZSksdD8udmFsdWUmJihULmNoZWNrT3V0PXQudmFsdWUpLGU/LnZhbHVlJiYodXM9ITApfTtsZXQgTnMsZ3Q9ITE7Y29uc3QgSGY9KCk9PntjbGVhclRpbWVvdXQoTnMpLGd0PSExfSx3az1lPT5lPy52aWV3PT09ImhvdGVscyJ8fGU/LnZpZXc9PT0ibm8taG90ZWxzIiYmISFlPy5hc2ssTG89KGU9MCk9PntjbGVhclRpbWVvdXQoTnMpLGd0PSEwLE5zPXNldFRpbWVvdXQoKCk9PntpZighd2socSkpe2d0PSExO3JldHVybn1pZihWdCl7TG8oMTUwKTtyZXR1cm59Z3Q9ITEsTSgibGlzdEhvdGVscyIsey4uLlVfKHE/LmFzayksLi4uWHQoKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgcHJpY2UgdGhvc2UgbmlnaHRzLiIpKX0sZSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGU9PntpZihlLnRhcmdldD8uaWQ9PT0id2hlcmUiJiZlLmtleT09PSJFbnRlciImJiFlLmlzQ29tcG9zaW5nKXtlLnByZXZlbnREZWZhdWx0KCksRmYoKTtyZXR1cm59Y29uc3QgdD1lLnRhcmdldDshdHx8dC5nZXRBdHRyaWJ1dGUoInJvbGUiKSE9PSJidXR0b24ifHxlLmtleSE9PSJFbnRlciImJmUua2V5IT09IiAifHwoZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xpY2soKSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGU9Pntjb25zdCB0PWUudGFyZ2V0O3Q/LnR5cGU9PT0iZGF0ZSImJih1cz0hMCk7Y29uc3Qgbz17ZGNpOlsiZGNpIiwiZGNvIl0sZGNvOlsiZGNpIiwiZGNvIl0sbGNpOlsibGNpIiwibGNvIl0sbGNvOlsibGNpIiwibGNvIl19W3Q/LmlkPz8iIl07aWYobyl7Y29uc3QgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzBdKSx1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9bMV0pO2lmKCFpfHwhdSlyZXR1cm47aWYodC5pZD09PW9bMF0mJmkudmFsdWUpe2NvbnN0IGw9S2UoaS52YWx1ZSwxKTt1Lm1pbj1sLCghdS52YWx1ZXx8dS52YWx1ZTw9aS52YWx1ZSkmJih1LnZhbHVlPWwpfVQuY2hlY2tJbj1pLnZhbHVlfHxULmNoZWNrSW4sVC5jaGVja091dD11LnZhbHVlfHxULmNoZWNrT3V0LG9bMF09PT0ibGNpIiYmTG8oMzAwKTtyZXR1cm59aWYodD8uaWQhPT0iY2kiJiZ0Py5pZCE9PSJjbyIpcmV0dXJuO2NvbnN0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIikscz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKTtpZighcnx8IXMpcmV0dXJuO2lmKHQuaWQ9PT0iY2kiJiZyLnZhbHVlKXtjb25zdCBpPUtlKHIudmFsdWUsMSk7cy5taW49aSwoIXMudmFsdWV8fHMudmFsdWU8PXIudmFsdWUpJiYocy52YWx1ZT1pKX1ULmNoZWNrSW49ci52YWx1ZXx8VC5jaGVja0luLFQuY2hlY2tPdXQ9cy52YWx1ZXx8VC5jaGVja091dDtjb25zdCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTthJiYoYS50ZXh0Q29udGVudD1scygpKSxwcygpfSk7Y29uc3QgVmY9KGUsdCk9Pnt0cnl7eGYodCk7Y29uc3Qgbj1lP0pTT04uc3RyaW5naWZ5KGUpOiIiO2lmKG4mJm49PT1FZiYmSlNPTi5zdHJpbmdpZnkocSk9PT1BZilyZXR1cm47ZT8uc3RheT8uY2hlY2tJbiYmKHVzPSEwKSxoZT1bXSxqbys9MSx0dSgpLEhmKCkseGU9amYsRWUoZSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcigiW2NhcmRdIHJlbmRlciBmYWlsZWQiLG4pLHBlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhpcyBjYXJkIGNvdWxkIG5vdCBiZSBkcmF3bi4gQXNrIGFnYWluIGluIHRoZSBjaGF0LjwvZGl2Pid9fTtBZS5vbnRvb2xyZXN1bHQ9ZT0+VmYoZT8uc3RydWN0dXJlZENvbnRlbnQsZT8uX21ldGEpO2NvbnN0IEpmPWU9PntBcnJheS5pc0FycmF5KGU/LmF2YWlsYWJsZURpc3BsYXlNb2RlcykmJihEZj1lLmF2YWlsYWJsZURpc3BsYXlNb2Rlcy5tYXAoU3RyaW5nKSksdHlwZW9mIGU/LmRpc3BsYXlNb2RlPT0ic3RyaW5nIiYmZS5kaXNwbGF5TW9kZSE9PXVuJiYodW49ZS5kaXNwbGF5TW9kZSxxPy52aWV3PT09ImhvdGVscyImJkVlKHEpKX07bGV0IFd1O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57Y2xlYXJUaW1lb3V0KFd1KSxXdT1zZXRUaW1lb3V0KCgpPT57cT8udmlldyE9PSJob3RlbHMifHxsbigpfHwoWGM9WWMoKSxkcygpIT09cW8mJkVlKHEpKX0sMTUwKX0pO0FlLm9uaG9zdGNvbnRleHRjaGFuZ2VkPWU9PntTZihlLHpmKSxKZihlKX07QWUuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPUFlLmdldEhvc3RDb250ZXh0KCk7U2YoZSx6ZiksSmYoZSk7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZWZih0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57cGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVsLC5zdGF5IC5ndWVzdHN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS5mbGV4LWRhdGVze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjJweDtzY3JvbGxiYXItd2lkdGg6dGhpbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uZmR7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7bWluLXdpZHRoOjc4cHg7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udDppbmhlcml0O3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcn0uZmQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmZkLWRheXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW07Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6bm93cmFwfS5mZC1wcmljZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjY1MDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5mZC5vbntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtjdXJzb3I6ZGVmYXVsdH0uZmQub24gLmZkLWRheXtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO29wYWNpdHk6Ljg1fS5mZC5iZXN0e2JvcmRlci1jb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5mZC5iZXN0IC5mZC1wcmljZSwuZmQuYmVzdCAuZmQtZGF5e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmZkLm91dCAuZmQtcHJpY2V7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC13ZWlnaHQ6NTAwfS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5sZWdze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ubGVne2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6OXB4IDExcHh9LmxlZy53YXN7b3BhY2l0eTouNzJ9LmxlZy53YXMgLmxlZ3Z7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ubGVna3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5sZWd2e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY0MDttYXJnaW4tdG9wOjJweH0ubGVnbXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6MnB4fS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0ucGFnZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4fS5wYWdlciAubntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6dmFyKC0tYmcpfS5ub3Rle2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS41fS5mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHg7bWFyZ2luLXRvcDoxMHB4fS5mb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5mb3JtIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjhweCA5cHh9LmZvcm0gLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uY29uZntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweCAxMnB4fS5jb25mIC5jb2Rle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjcyMDtsZXR0ZXItc3BhY2luZzouMDZlbTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbmYgLndoZXJle2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwfS5jb25mIC53aGVue2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnVucGFpZHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ud2Fybm5vdGV7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzo5cHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udGlsZS5vdmVye29wYWNpdHk6LjgyfS5hc2tlZC1saW5le2ZvbnQtc3R5bGU6aXRhbGljfS5hc2tlZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYXNrZWQgYntmb250LXdlaWdodDo3MjA7Y29sb3I6dmFyKC0tZmcpfS5hc2tlZC5mbGFne2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLXdhcm4pfS5hc2tlZC5mbGFnIGJ7Y29sb3I6dmFyKC0td2Fybil9LmFza3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5hc2tzLXR7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcC5hc2t7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHh9LmNoaXAuYXNrW2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgYWN0aW9uIiAidGh1bWIgcHJpY2UgYWN0aW9uIn0ucm93LndpdGh0aHVtYiAudGh1bWJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDthbGlnbi1zZWxmOnN0YXJ0fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0uY21wLXdyYXB7b3ZlcmZsb3cteDphdXRvO21hcmdpbi1pbmxpbmU6LTJweDtwYWRkaW5nOjJweH0uY21we2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDc2cHgsOTZweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMTJweCwxZnIpKTthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6OHB4fS5jbXAuZm91cntncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDU2cHgsNzJweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCg5NnB4LDFmcikpfS5jbXAtY29ybmVye2dyaWQtY29sdW1uOjE7Z3JpZC1yb3c6MSAvIHNwYW4gdmFyKC0taGVhZC1yb3dzLCA1KX0uY21wLWhlYWR7ZGlzcGxheTpncmlkO2dyaWQtcm93OjEgLyBzcGFuIHZhcigtLWhlYWQtcm93cywgNSk7Z3JpZC10ZW1wbGF0ZS1yb3dzOnN1YmdyaWQ7cm93LWdhcDo2cHg7YWxpZ24tY29udGVudDpzdGFydDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjA7cGFkZGluZy1ib3R0b206MTJweH0uY21wLWhlYWQ+LmNvbC1uYW1lLC5jbXAtaGVhZD4uY29sLXByaWNlLC5jbXAtaGVhZD4ud2h5LC5jbXAtaGVhZD4ucGN7bWFyZ2luLWlubGluZToxMXB4fS5jbXAtaGVhZD4uY29sLW5hbWV7bWFyZ2luLXRvcDo0cHh9LndoeS5ub25le2JvcmRlcjowO3BhZGRpbmc6MH0ucGlja21hcmsubm9uZXt2aXNpYmlsaXR5OmhpZGRlbn0uY21wIC5re21hcmdpbi10b3A6MH0uY21wLWhlYWQucGlja3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQpfS5jbXAtaGVhZCAudC1zaG90e2FzcGVjdC1yYXRpbzoxNiAvIDk7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmNvbC1uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uY29sLXByaWNle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbC1wcmljZSBzbWFsbHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNvbC1wcmljZSBzbWFsbC5zdWJ7ZGlzcGxheTpibG9ja30ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubW9tZW50c3tsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjJweCAwIDA7cGFkZGluZzowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweH0ubW9tZW50cyBsaXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjg0cHggMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lm1vbWVudHMgLndoZW57b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5tb21lbnRzIC53aGF0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNH0ubW9tZW50cyAud2hhdCBie2ZvbnQtd2VpZ2h0OjYyMH0ubW9tZW50cyAud2hhdCBzbWFsbHtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLXN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczo5NnB4IDFmcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOnBvaW50ZXJ9LnBsYW4tc3RheSAucHMtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6ODRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5wbGFuLXN0YXkgLnBzLXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5wbGFuLXN0YXkgLnBzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDozcHg7cGFkZGluZzo5cHggMTBweCA5cHggMDttaW4td2lkdGg6MH0ucGxhbi1zdGF5IC5uYW1le2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LnBsYW4tc3RheSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1zdGF5IC5wcy1wcmljZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wbGFuLW5pZ2h0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItdG9wOjFweCBkYXNoZWQgdmFyKC0tbGluZSk7cGFkZGluZy10b3A6NnB4O2N1cnNvcjpwb2ludGVyfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19LnN1Z2dlc3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWFyZ2luLXRvcDoxNHB4fS5zdWdnZXN0IC5jaGlwe2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweCAxMXB4O2NvbG9yOnZhcigtLWZnKX0uc3VnZ2VzdCAuY2hpcDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uc3VnZ2VzdCAuY2hpcDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb3JtIGxhYmVsLnJlbWVtYmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Zm9udC13ZWlnaHQ6NDAwO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowfS5mb3JtIGxhYmVsLnJlbWVtYmVyIGlucHV0e21hcmdpbjoycHggMCAwfS5wbGFjZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXAucGxhY2V7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4IDEwcHg7Y29sb3I6dmFyKC0tZmcpfS5jaGlwLnBsYWNlIHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY2hpcC5wbGFjZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uY2hpcC5wbGFjZS50YWJ7Zm9udC13ZWlnaHQ6NjAwfS5jaGlwLnBsYWNlLnRhYlthcmlhLWV4cGFuZGVkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmNoaXAucGxhY2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uc3VnZ2VzdCAuY2hpcC5zYXkgc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZpbmRlcntkaXNwbGF5OmZsZXg7Z2FwOjhweH0uZmluZGVyIGlucHV0e2ZsZXg6MTttaW4td2lkdGg6MDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo5cHggMTJweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyl9LmZpbmRlciBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5yZWdpb257ZGlzcGxheTpncmlkO2dhcDoxMHB4fS5jb3VudHJ5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6NnB4fS5jb3VudHJ5bmFtZSBzbWFsbHtmb250LXdlaWdodDo1MDA7bGV0dGVyLXNwYWNpbmc6MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3R7ZGlzcGxheTpncmlkO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZGVzdDpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MH0uZGVzdC1jb3VudHJ5e2p1c3RpZnktc2VsZjpzdGFydDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246bGVmdH0uZGVzdC1jb3VudHJ5IHNtYWxse2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZGVzdC1jb3VudHJ5IC5ue2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdC1jb3VudHJ5OmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmRlc3QtY291bnRyeTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5maW5kZXIgLmdve2ZsZXg6bm9uZTtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtc2l6ZToxM3B4fS5zb3J0cy1re2FsaWduLXNlbGY6Y2VudGVyO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXJpZ2h0OjJweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0uc2VhcmNoe2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc2VhcmNoIC5zdGF5e3BhZGRpbmc6MDtiYWNrZ3JvdW5kOm5vbmV9LnNlYXJjaCAud2hlcmV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnNlYXJjaCAud2hlcmUgaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxMXB4fS5zZWFyY2ggLndoZXJlIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnNlYXJjaCAuc3RheSAuZ297cGFkZGluZzo5cHggMTRweDtmb250LXNpemU6MTNweH0udC10YWdze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4O21hcmdpbi10b3A6NHB4fS50LWZyb20udC1ub25le2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweH0uc3RheSAuZ28ucXVpZXR7cGFkZGluZzo4cHggMTJweDtmb250LXNpemU6MTIuNXB4fS5maWx0ZXItcGFuZWx7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5mZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS50LWZyb20gLnQtc3Vie2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxcHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV0gc21hbGx7Y29sb3I6aW5oZXJpdH0uY2hpcC50b29se2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC50b29sW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
|
|
5
|
+
export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgR2Y9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLFFmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxzdT17fSxZZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9UWYoZCxvKSxkIGluIHN1KXJldHVybjtzdVtkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1pLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCAkPWlbd107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOkdmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBYZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBlbShlKXtyZXR1cm4gZX1mdW5jdGlvbiBCbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIHRtKGUpe31mdW5jdGlvbiBubShlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIG9tKGUpe31mdW5jdGlvbiB3cyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiAkcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+THMobikpLmpvaW4odCl9ZnVuY3Rpb24geG8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIHJte2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIG5ldyBybShlKX1mdW5jdGlvbiBxcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBCZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gUXUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgaXU9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gWXUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1pdSlyZXR1cm4gbz09PXZvaWQgMCYmKG89aXUsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHNtKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gdXQoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBIbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBOZShlKXtyZXR1cm4gSG8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gWHUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiB1dCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBlbChlLHQsbil7dCBpbiBlP3V0KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gb3QoZSx0LG4sbyl7Y29uc3Qgcj1OZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD9YdShlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTplbChlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiBpbShlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/WHUoZSxuLCgpPT50W25dKTplbChlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBhbShlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gY20oZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gdW0oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIGxtKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gdGwoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIG5sKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgRHM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IG9sPXBuKCgpPT57aWYocGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gVmUoZSl7aWYodnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHZ0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIFZlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gZG0oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgcG09ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LFBvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSkscmw9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBRKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBobShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBMcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBzbChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IGlsPXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxhbD17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gY2woZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gb3QocyxlLFZvKGUsdCkpLFEoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBWbyhlLHQpe2NvbnN0IG49TmUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiB1bChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoVm8oZSx0KSksYT17fTtyZXR1cm4gb3QoYSxlLFJlZmxlY3Qub3duS2V5cyhOZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLFEoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBsbChlLHQpe2lmKCFWZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1OZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gUShlLHVlKGUuX3pvZC5kZWYse3NoYXBlOmRsKGUsdCl9KSl9ZnVuY3Rpb24gZGwoZSx0KXtjb25zdCBuPXt9O3JldHVybiBvdChuLGUsUmVmbGVjdC5vd25LZXlzKE5lKGUpKSksaW0obix0KSxufWZ1bmN0aW9uIHBsKGUsdCl7aWYoIVZlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBRKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6ZGwoZSx0KX0pKX1mdW5jdGlvbiBobChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtvdChuLGUsUmVmbGVjdC5vd25LZXlzKE5lKGUpKSksb3Qobix0LFJlZmxlY3Qub3duS2V5cyhOZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBRKGUsbyl9ZnVuY3Rpb24gU3MoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KFZvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiBvdCh1LHQsUmVmbGVjdC5vd25LZXlzKE5lKHQpKSxlJiYoKGwsZCk9PmkmJiFpLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiBmbChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoVm8odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIG90KHIsdCxSZWZsZWN0Lm93bktleXMoTmUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIG1lKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbWwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB3ZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIHB0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIHpzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiB6ZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOnB0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9wdChzPy4oZSkpPz9wdCh0Py5lcnJvcj8uKGUpKT8/cHQobi5jdXN0b21FcnJvcj8uKGUpKT8/cHQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGlbdV09ZVt1XSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gSm8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGZtPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIEtvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWZtLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gV28oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIGdsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24geXQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBtbShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gYmwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIHZsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gZ20oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gYmwodCtuKX1mdW5jdGlvbiBibShlKXtyZXR1cm4gdmwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIHZtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiB5bShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBfbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIHlsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6a20oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBqZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBHbyhlLHQsbil7cmV0dXJuIGplKGUsdCxuLCExKX1mdW5jdGlvbiBobihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gamUodGhpcyxuLG8odGhpcykpfSxzZXQocil7amUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGttKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpqZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe2plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiB3bShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGZzLExlPSExO2NvbnN0ICRtPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7TGU9ITB9fTtmdW5jdGlvbiBPKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmZnMhPT1lLl96b2Qpe2ZzPXZvaWQgMDtyZXR1cm59ZnM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LCRtKTtjb25zdCByPUxlO0xlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIExlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksTGU9TGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxMZT1MZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gX2woZSx0LG4sbyl7Y29uc3Qgcj13bShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IGtsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gVXMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtrbF09ITAsdH1jb25zdCBCcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6YWwsQ09OU1RBTlRfQ0FUQ0g6a2wsQ2xhc3M6X20sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6aWwsYWJvcnRlZDptZSxhbGxvd3NFdmFsOm9sLGFzc2VydDpvbSxhc3NlcnRFcXVhbDpYZixhc3NlcnRJczp0bSxhc3NlcnROZXZlcjpubSxhc3NlcnROb3RFcXVhbDplbSxhc3NpZ25Qcm9wOnV0LGF0dGFjaFNjaGVtYTp6cyxiYXNlNjRUb1VpbnQ4QXJyYXk6YmwsYmFzZTY0dXJsVG9VaW50OEFycmF5OmdtLGNhY2hlZDpwbixjYXB0dXJlU3RhY2tUcmFjZTpEcyxjbGVhbkVudW06bW0sY2xlYW5SZWdleDpCZSxjbG9uZTpRLGNsb25lRGVmOmFtLGNvZGVQb2ludExlbmd0aDpLbyxjb25zdGFudENhdGNoOlVzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6aG0sZGVmaW5lTGF6eTpZdSxkZWZpbmVMYXp5SW50ZXJuYWw6TyxkZXJpdmVkOmhuLGVzYzp0bCxlc2NhcGVSZWdleDpaZSxleHBsaWNpdGx5QWJvcnRlZDptbCxleHRlbmQ6bGwsZmluYWxpemVJc3N1ZTp6ZSxmbG9hdFNhZmVSZW1haW5kZXI6UXUsZ2V0RWxlbWVudEF0UGF0aDpjbSxnZXRFbnVtVmFsdWVzOndzLGdldExlbmd0aGFibGVPcmlnaW46V28sZ2V0UGFyc2VkVHlwZTpwbSxnZXRTaXphYmxlT3JpZ2luOkpvLGhleFRvVWludDhBcnJheTp2bSxoaWRlOkdvLGluc3RhbGxMYXp5UHJvcDpfbCxpc09iamVjdDp2dCxpc1BsYWluT2JqZWN0OlZlLGlzc3VlOnl0LGpvaW5WYWx1ZXM6JHMsanNvblN0cmluZ2lmeVJlcGxhY2VyOnhvLG1lbWJlcnM6eWwsbWVyZ2U6aGwsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6cXMsbnVtS2V5czpkbSxvYmplY3RDbG9uZTpzbSxvbWl0OnVsLG9wdGlvbmFsS2V5czpzbCxvd246amUscGFyc2VkVHlwZTpnbCxwYXJ0aWFsOlNzLHBpY2s6Y2wscHJlZml4SXNzdWVzOndlLHByaW1pdGl2ZVR5cGVzOnJsLHByb21pc2VBbGxPYmplY3Q6dW0scHJvcGVydHlLZXlUeXBlczpQbyxyYW5kb21TdHJpbmc6bG0scmF3U2hhcGU6SG8scmVxdWlyZWQ6Zmwsc2FmZUV4dGVuZDpwbCxzaGFsbG93Q2xvbmU6Rm8sc2x1Z2lmeTpubCxzdHJpbmdpZnlQcmltaXRpdmU6THMsdG9ab2Q6Qm8sdWludDhBcnJheVRvQmFzZTY0OnZsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpibSx1aW50OEFycmF5VG9IZXg6eW0sdW53cmFwTWVzc2FnZTpwdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgYXU7Y29uc3QgSHM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLG1zPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IGN1PSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIFNtKGUpe2NvbnN0IHQ9Y3U7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBjdT1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7bXMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixtcyl9ZmluYWxseXttcy52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxpKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBaPXc7Zm9yKDtaJiZaIT09JDspWj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoWik7Y29uc3QgST1aPz93O2kuaGFzKEkpfHwoaS5hZGQoSSkseWwoSSxhKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBifHwoYlt3XT1fW3ddLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P1NtKGQpOnRoaXM7dSh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBGcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIEhlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFFvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShhdT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhhdS5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IHBlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIG5lKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKHBlLGUpLHBlfWZ1bmN0aW9uIHptKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZix4bywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIFRtKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgSW09e2dldDp6bSxzZXQ6VG0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LGdzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sdXU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksd2w9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIsZ3MudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIixncyksZ3MudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixJbSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7dXUuaGFzKG4pfHwodXUuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LCRsPXAoIiRab2RFcnJvciIsd2wpLF9lPXAoIiRab2RFcnJvciIsd2wsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiB4bShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIFlvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/eG0obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIFhvKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IHU9bixsPTA7Zm9yKDtsPGkubGVuZ3RoOyl7Y29uc3QgZD1pW2xdLG09bD09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7bSYmdS5fZXJyb3JzLnB1c2godChhKSksbCsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBiPXVbZF07bSYmYi5fZXJyb3JzLnB1c2godChhKSksdT1iLGwrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBWcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAodT0+byh7aXNzdWVzOnV9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCB1PVsuLi5zLC4uLmkucGF0aF07aWYodS5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCBsPW4sZD0wO2Zvcig7ZDx1Lmxlbmd0aDspe2NvbnN0IG09dVtkXSxiPWQ9PT11Lmxlbmd0aC0xO3R5cGVvZiBtPT0ic3RyaW5nIj8obC5wcm9wZXJ0aWVzPz8obC5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobC5wcm9wZXJ0aWVzLG0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm9wZXJ0aWVzLG0se3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbD1sLnByb3BlcnRpZXNbbV0pOihsLml0ZW1zPz8obC5pdGVtcz1bXSksKGE9bC5pdGVtcylbbV0/PyhhW21dPXtlcnJvcnM6W119KSxsPWwuaXRlbXNbbV0pLGImJmwuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gU2woZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIEpzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke1NsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGVyKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgZm49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBIZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHU9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKGw9PnplKGwsYSxuZSgpKSkpO3Rocm93IERzKHUscz8uY2FsbGVlPz90KSx1fXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0sVHM9Zm4oX2UpLG1uPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCB1PW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcChsPT56ZShsLGEsbmUoKSkpKTt0aHJvdyBEcyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LElzPW1uKF9lKSxnbj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBIZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP1RsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0semw9Z24oX2UpO2Z1bmN0aW9uIFRsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+emUocixuLG5lKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCBibj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP1RsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sUG09Ym4oX2UpLENtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSxFbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLHRyPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09Q20pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBBbShlLHQsbil9KTtmdW5jdGlvbiBBbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1tFbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBIZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBucj1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LEtzPWU9Pntjb25zdCB0PWZuKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLGVyKG4sYSkpfTtyZXR1cm4gbn0sT209S3MoX2UpLFdzPWU9Pntjb25zdCB0PWZuKGUpLG49KG8scixzLGEpPT50KG8scixzLGVyKG4sYSkpO3JldHVybiBufSxSbT1XcyhfZSksR3M9ZT0+e2NvbnN0IHQ9bW4oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxlcihuLGEpKX07cmV0dXJuIG59LE5tPUdzKF9lKSxRcz1lPT57Y29uc3QgdD1tbihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLGVyKG4sYSkpO3JldHVybiBufSxabT1RcyhfZSksWXM9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gZ24oZSkodCxuLHIpfSxqbT1ZcyhfZSksWHM9ZT0+KHQsbixvKT0+Z24oZSkodCxuLG8pLE1tPVhzKF9lKSxlaT1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGJuKGUpKHQsbixyKX0scW09ZWkoX2UpLHRpPWU9PmFzeW5jKHQsbixvKT0+Ym4oZSkodCxuLG8pLERtPXRpKF9lKSxJbD0vXltjQ11bMC05YS16XXs2LH0kLyx4bD0vXlswLTlhLXpdKyQvLFBsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLENsPS9eWzAtOWEtdkEtVl17MjB9JC8sRWw9L15bQS1aYS16MC05XXsyN30kLyxBbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gT2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IFJsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLExtPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sTmw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLF90PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyxVbT1fdCg0KSxCbT1fdCg2KSxIbT1fdCg3KSxabD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxGbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxWbT0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxqbD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxKbT1qbCxLbT0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxXbT0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIE1sKCl7cmV0dXJuIG5ldyBSZWdFeHAoV20sInUiKX1jb25zdCBxbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sRGw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxMbD1lPT57Y29uc3QgdD1aZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxVbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sQmw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sR209L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sUW09L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLEhsPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxGbD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sbmk9L15odHRwcz8kLyxWbD0vXlwrWzEtOV1cZHs2LDE0fSQvLG9pPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxKbD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyxyaT0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxLbD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gWW0oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IFdsPVltKEtsKTtmdW5jdGlvbiB4cyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIEdsKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHt4cyhlKX0kYCl9ZnVuY3Rpb24gUWwoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke3hzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7eHMoe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7S2x9VCg/OiR7b30pJGApfWNvbnN0IFlsPS9eW1xzXFNdezAsfSQvLFhsPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LGVkPS9eLT9cZCtuPyQvLHRkPS9eLT9cZCskLyxvcj0vXi0/XGQrKD86XC5cZCspPyQvLG5kPS9eKD86dHJ1ZXxmYWxzZSkkL2ksb2Q9L15udWxsJC9pLHJkPS9edW5kZWZpbmVkJC9pLHNkPS9eW15BLVpdKiQvLGlkPS9eW15hLXpdKiQvLGFkPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24gdm4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIHluKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBYbT0vXlswLTlhLWZBLUZdezMyfSQvLGVnPXZuKDIyLCI9PSIpLHRnPXluKDIyKSxuZz0vXlswLTlhLWZBLUZdezQwfSQvLG9nPXZuKDI3LCI9Iikscmc9eW4oMjcpLHNnPS9eWzAtOWEtZkEtRl17NjR9JC8saWc9dm4oNDMsIj0iKSxhZz15big0MyksY2c9L15bMC05YS1mQS1GXXs5Nn0kLyx1Zz12big2NCwiIiksbGc9eW4oNjQpLGRnPS9eWzAtOWEtZkEtRl17MTI4fSQvLHBnPXZuKDg2LCI9PSIpLGhnPXluKDg2KSxycj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOllsLGJhc2U2NDpHbSxiYXNlNjR1cmw6UW0sYmlnaW50OmVkLGJvb2xlYW46bmQsYnJvd3NlckVtYWlsOkttLGNpZHJ2NDpVbCxjaWRydjY6QmwsY3JlZGl0Q2FyZDpvaSxjdWlkOklsLGN1aWQyOnhsLGN1cnJlbmN5Q29kZTpKbCxkYXRlOldsLGRhdGV0aW1lOlFsLGRvbWFpbjpGbCxkdXJhdGlvbjpSbCxlMTY0OlZsLGVtYWlsOlpsLGVtb2ppOk1sLGV4dGVuZGVkRHVyYXRpb246TG0sZ3VpZDpObCxoZXg6YWQsaG9zdG5hbWU6SGwsaHRtbDVFbWFpbDpGbSxodHRwUHJvdG9jb2w6bmksaWJhbjpyaSxpZG5FbWFpbDpKbSxpbnRlZ2VyOnRkLGlwdjQ6cWwsaXB2NjpEbCxrc3VpZDpFbCxsb3dlcmNhc2U6c2QsbWFjOkxsLG1kNV9iYXNlNjQ6ZWcsbWQ1X2Jhc2U2NHVybDp0ZyxtZDVfaGV4OlhtLG5hbm9pZDpBbCxuYW5vaWRPZkxlbmd0aDpPbCxudWxsOm9kLG51bWJlcjpvcixyZmM1MzIyRW1haWw6Vm0sc2hhMV9iYXNlNjQ6b2csc2hhMV9iYXNlNjR1cmw6cmcsc2hhMV9oZXg6bmcsc2hhMjU2X2Jhc2U2NDppZyxzaGEyNTZfYmFzZTY0dXJsOmFnLHNoYTI1Nl9oZXg6c2csc2hhMzg0X2Jhc2U2NDp1ZyxzaGEzODRfYmFzZTY0dXJsOmxnLHNoYTM4NF9oZXg6Y2csc2hhNTEyX2Jhc2U2NDpwZyxzaGE1MTJfYmFzZTY0dXJsOmhnLHNoYTUxMl9oZXg6ZGcsc3RyaW5nOlhsLHRpbWU6R2wsdWxpZDpQbCx1bmRlZmluZWQ6cmQsdW5pY29kZUVtYWlsOmpsLHVwcGVyY2FzZTppZCx1dWlkOl90LHV1aWQ0OlVtLHV1aWQ2OkJtLHV1aWQ3OkhtLHhpZDpDbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxXPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxzaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFxcyh0KSYmdC5zaXplIT09dm9pZCAwfSxpaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFxcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LENvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LGFpPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49Q29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkNvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGNpPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49Q29bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkNvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksY2Q9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6UXUobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx1ZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Vy5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPWlsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGxkPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdFtuLG9dPWFsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksZGQ9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPXNpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkpvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHBkPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1zaSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpKbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGhkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1zaSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Sm8ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxmZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Vy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1paSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9LbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPVdvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG1kPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtXLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWlpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9LbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPVdvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksZ2Q9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1cuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49aWkpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP0tvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPVdvKHIpLHU9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi51P3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxfbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztXLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSxiZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pntfbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx2ZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXNkKSxfbi5pbml0KGUsdCl9KSx5ZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWlkKSxfbi5pbml0KGUsdCl9KSxfZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPVplKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxrZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e1cuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7WmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx3ZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntXLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtaZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBFbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLndlKG4sZS5pc3N1ZXMpKX1jb25zdCAkZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntXLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5FbyhyLG4sdC5wcm9wZXJ0eSkpO0VvKG8sbix0LnByb3BlcnR5KX19KSxTZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e1cuaW5pdChlLHQpLEdvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTt1IGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaCh1LnRoZW4obD0+RW8obCxvLGEpKSkpOkVvKHUsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksemQ9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Vy5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxUZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Vy5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgSWR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCB4ZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LFA9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPXhkO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLHUsbCk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9bWUoaSksbTtmb3IoY29uc3QgYiBvZiB1KXtpZihiLl96b2QuZGVmLndoZW4pe2lmKG1sKGkpfHwhYi5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWIuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmbD8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgSGU7aWYobXx8XyBpbnN0YW5jZW9mIFByb21pc2UpbT0obT8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKHpzKGkuaXNzdWVzLHYsZSksZHx8KGQ9bWUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO3pzKGkuaXNzdWVzLHYsZSksZHx8KGQ9bWUoaSx2KSl9fXJldHVybiBtP20udGhlbigoKT0+aSk6aX0sYT0oaSx1LGwpPT57aWYobWUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyh1LHIsbCk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgSGU7cmV0dXJuIGQudGhlbihtPT5lLl96b2QucGFyc2UobSxsKSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLGwpfTtlLl96b2QucnVuPShpLHUpPT57aWYodS5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSx1KTtpZih1LmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLnUsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4obT0+YShtLGksdSkpOmEoZCxpLHUpfWNvbnN0IGw9ZS5fem9kLnBhcnNlKGksdSk7aWYobCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKHUuYXN5bmM9PT0hMSl0aHJvdyBuZXcgSGU7cmV0dXJuIGwudGhlbihkPT5zKGQscix1KSl9cmV0dXJuIHMobCxyLHUpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBHbyh0aGlzLCJ+c3RhbmRhcmQiLHVpKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7amUodGhpcywifnN0YW5kYXJkIixlKX19KSxQZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PnplKG4sdCxuZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBmZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gUGQoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIHVpKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gUGQobyxuKX1jYXRjaHt9cmV0dXJuIGZnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IGtuPXAoIiRab2RTdHJpbmciLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9ZbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEg9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pntfbi5pbml0KGUsdCksa24uaW5pdChlLHQpfSksQ2Q9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU5sKSxILmluaXQoZSx0KX0pLEVkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49X3QobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPV90KCkpO0guaW5pdChlLHQpfSksQWQ9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1abCksSC5pbml0KGUsdCl9KSxsaT0xLG5uPTI7ZnVuY3Rpb24gZGkoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBPZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP2RpKGUpfHxubjpSZChlLHQpfWZ1bmN0aW9uIFJkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1uaS5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gbGk7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/bm59cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIG5ufX1jb25zdCBtZz0vW1x0XG5ccl0vZztmdW5jdGlvbiBQcyhlKXtyZXR1cm4gZS5yZXBsYWNlKG1nLCIiKX1mdW5jdGlvbiBOZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBaZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBqZD1wKCIkWm9kVVJMIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1PZChvLHQpO2lmKHI9PT1saSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1ubil7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9UHMobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFOZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhWmQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6UHMobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksTWQ9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1NbCgpKSxILmluaXQoZSx0KX0pLHFkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9BbDpPbCh0Lmxlbmd0aCkpLEguaW5pdChlLHQpfSksRGQ9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUlsKSxILmluaXQoZSx0KX0pLExkPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eGwpLEguaW5pdChlLHQpfSksVWQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVBsKSxILmluaXQoZSx0KX0pLEJkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUNsKSxILmluaXQoZSx0KX0pLEhkPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RWwpLEguaW5pdChlLHQpfSksRmQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1RbCh0KSksSC5pbml0KGUsdCl9KSxWZD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49V2wpLEguaW5pdChlLHQpfSksSmQ9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUdsKHQpKSxILmluaXQoZSx0KX0pLEtkPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49UmwpLEguaW5pdChlLHQpfSksV2Q9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXFsKSxILmluaXQoZSx0KX0pLGdnPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBwaShlKXtyZXR1cm4gZ2cudGVzdChlKT9kaShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IEdkPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1EbCksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntwaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxRZD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1MbCh0LmRlbGltaXRlcikpLEguaW5pdChlLHQpfSksWWQ9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VWwpLEguaW5pdChlLHQpfSk7ZnVuY3Rpb24gWGQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOnBpKG4pfWNvbnN0IGVwPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUJsKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1hkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gaGkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCB0cD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sbnA9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dHApLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aGkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxmaT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gb3AoZSl7aWYoIWZpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gaGkobil9Y29uc3QgcnA9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZmkpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57b3Aobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxzcD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VmwpLEguaW5pdChlLHQpfSksYmc9L1stIF0vZztmdW5jdGlvbiB2ZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBpcChlKXtyZXR1cm4gb2kudGVzdChlKT92ZyhlLnJlcGxhY2UoYmcsIiIpKTohMX1jb25zdCBhcD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49b2kpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aXAobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIHlnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGNwKGUpe3JldHVybiByaS50ZXN0KGUpP3lnKGUpOiExfWNvbnN0IHVwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1yaSksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntjcChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBscChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IGRwPXAoIiRab2RKV1QiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntscChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHBwPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbWk9cCgiJFpvZE51bWJlciIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1vcixlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxocD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3VkLmluaXQoZSx0KSxtaS5pbml0KGUsdCl9KSxnaT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1uZCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGJpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49ZWQsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxmcD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2xkLmluaXQoZSx0KSxiaS5pbml0KGUsdCl9KSxtcD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxncD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXJkLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGJwPXAoIiRab2ROdWxsIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPW9kLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx2cD1wKCIkWm9kQW55IiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSkseXA9cCgiJFpvZFVua25vd24iLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxfcD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxrcD1wKCIkWm9kVm9pZCIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHdwPXAoIiRab2REYXRlIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gbHUoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi53ZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0ICRwPXAoIiRab2RBcnJheSIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPXBlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCB1PTA7dTxzLmxlbmd0aDt1Kyspe2NvbnN0IGw9c1t1XSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4obT0+bHUobSxvLHUpKSk7ZWxzZSBpZihsdShkLG8sdSksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmbWUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gQW8oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLndlKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgX2c9W107ZnVuY3Rpb24gU3AoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOl9nLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1zbChlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIHpwKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sdT1yLmtleVNldCxsPXIuY2F0Y2hhbGwuX3pvZCxkPWwuZGVmLnR5cGUsbT1sLm9wdGluLGI9bC5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihtZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKHUuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IHc9bC5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTt3IGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2gody50aGVuKCQ9PkFvKCQsbixfLHQsbSxiKSkpOkFvKHcsbixfLHQsbSxiKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IFRwPXAoIiRab2RPYmplY3QiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGw9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLGwucmF3PWQsZH07bC5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6bH0pfWNvbnN0IHI9cG4oKCk9PlNwKHQpKTtPKGUsInByb3BWYWx1ZXMiLGw9Pntjb25zdCBkPWwuZGVmLnNoYXBlLG09e307Zm9yKGNvbnN0IGIgaW4gZCl7Y29uc3Qgdj1kW2JdLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGIpfHx1dChtLGIsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpbVtiXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmbVtiXS5hZGQodm9pZCAwKX19cmV0dXJuIG19KTtjb25zdCBzPXZ0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCB1PXBlLm1lbW9pemVyO3U/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGwsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBtPWwudmFsdWU7aWYoIXMobSkpcmV0dXJuIGwuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bSxpbnN0OmV9KSxsO2wudmFsdWU9dT91LmFsbG9jKGUsbCx7fSxkKTp7fTtjb25zdCBiPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IHc9bC5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGkuYWxsS2V5cyl7aWYoXyYmbC5pc3N1ZXMubGVuZ3RoIT09dyl7aWYobWUobCx3KSlicmVhazt3PWwuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgWj12WyRdLEk9Wi5fem9kLm9wdGluLEc9Wi5fem9kLm9wdG91dCxvZT1aLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2IucHVzaChvZS50aGVuKEo9PkFvKEosbCwkLG0sSSxHKSkpOkFvKG9lLGwsJCxtLEksRyl9cmV0dXJuIGE/enAoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLElwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57VHAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89cG4oKCk9PlNwKHQpKSxyPXBlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSx3PV8uc3ltYm9sS2V5cywkPW5ldyBJZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6d30pLFo9Sj0+YHNoYXBlWyR7Sn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Sn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLEk9KEosRik9PmAKICAgICAgICAgIGxldCAke0p9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Sn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Sn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7Rn0sIC4uLmlzcy5wYXRoXSA6IFske0Z9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0p9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0p9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBHPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKUdbSl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEogb2YgXy5hbGxLZXlzKXtpZihKPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgRj1HW0pdLGJlPXR5cGVvZiBKPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihKKX1dYDp0bChKKSxrPWAke2JlfSBpbiBpbnB1dGAsej12W0pdLEs9ej8uX3pvZD8ub3B0aW4scmU9SyE9PXZvaWQgMCxSZT16Py5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7Rn0gPSAke1ooYmUpfTtgKSxyZSYmUmUpe2NvbnN0IFllPUs9PT0ib3B0aW9uYWwiP2Ake0Z9X3ByZXNlbnRgOmAke0Z9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtGfV9wcmVzZW50YDskLndyaXRlKGAKICAgICAgICBjb25zdCAke0Z9X3ByZXNlbnQgPSAke2t9OwogICAgICAgIGlmICghJHtGfS5pc3N1ZXMubGVuZ3RoIHx8ICR7Rn1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7Rn0uaXNzdWVzLmxlbmd0aCkgeyR7SShGLGJlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtZZX0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7YmV9XSA9ICR7Rn0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSByZT8oJC53cml0ZShgCiAgICAgICAgaWYgKCR7Rn0uaXNzdWVzLmxlbmd0aCkgeyR7SShGLGJlKX0KICAgICAgICB9CiAgICAgIGApLEs9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHtiZX1dID0gJHtGfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtGfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7a30pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2JlfV0gPSAke0Z9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOiQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7Rn1fcHJlc2VudCA9ICR7a307CiAgICAgICAgaWYgKCR7Rn0uaXNzdWVzLmxlbmd0aCkgeyR7SShGLGJlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0Z9X3ByZXNlbnQgJiYgISR7Rn0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7YmV9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7Rn1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7YmV9XSA9ICR7Rn0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuICQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksJC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksJC5jb21waWxlKCl9O2xldCBhO2NvbnN0IGk9dnQsdT0hcGUuaml0bGVzcyxkPXUmJm9sLnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgYjtlLl96b2QucGFyc2U9KHYsXyk9PntiPz8oYj1vLnZhbHVlKTtjb25zdCB3PXYudmFsdWU7cmV0dXJuIGkodyk/dSYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGF8fChhPXModC5zaGFwZSkpLHY9YSh2LF8pLG0/enAoW10sdyx2LF8sYixlLF8/LmFib3J0RWFybHk9PT0hMCk6dik6bih2LF8pOih2Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OncsaW5zdDplfSksdil9fSk7ZnVuY3Rpb24gZHUoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFtZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGE9PnplKGEsbyxuZSgpKSkpfSksdCl9Y29uc3Qgc3I9cCgiJFpvZFVuaW9uIiwoZSx0KT0+e1AuaW5pdChlLHQpLE8oZSwib3B0aW4iLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIik/ImRlZmF1bHRlZCI6by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbiE9PXZvaWQgMCk/Im9wdGlvbmFsIjp2b2lkIDApLE8oZSwib3B0b3V0IixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpPyJvcHRpb25hbCI6dm9pZCAwKSxPKGUsInZhbHVlcyIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnZhbHVlcykpcmV0dXJuIG5ldyBTZXQoby5kZWYub3B0aW9ucy5mbGF0TWFwKHI9PkFycmF5LmZyb20oci5fem9kLnZhbHVlcykpKX0pLE8oZSwicGF0dGVybiIsbz0+e2lmKG8uZGVmLm9wdGlvbnMuZXZlcnkocj0+ci5fem9kLnBhdHRlcm4pKXtjb25zdCByPW8uZGVmLm9wdGlvbnMubWFwKHM9PnMuX3pvZC5wYXR0ZXJuKTtyZXR1cm4gbmV3IFJlZ0V4cChgXigke3IubWFwKHM9PkJlKHMuc291cmNlKSkuam9pbigifCIpfSkkYCl9fSk7Y29uc3Qgbj10Lm9wdGlvbnMubGVuZ3RoPT09MT90Lm9wdGlvbnNbMF0uX3pvZC5ydW46bnVsbDtlLl96b2QucGFyc2U9KG8scik9PntpZihuKXJldHVybiBuKG8scik7bGV0IHM9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgaSBvZiB0Lm9wdGlvbnMpe2NvbnN0IHU9aS5fem9kLnJ1bih7dmFsdWU6by52YWx1ZSxpc3N1ZXM6W119LHIpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaCh1KSxzPSEwO2Vsc2V7aWYodS5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdTthLnB1c2godSl9fXJldHVybiBzP1Byb21pc2UuYWxsKGEpLnRoZW4oaT0+ZHUoaSxvLGUscikpOmR1KGEsbyxlLHIpfX0pO2Z1bmN0aW9uIHB1KGUsdCxuLG8pe2NvbnN0IHI9W107Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspZVtzXS5pc3N1ZXMubGVuZ3RoPT09MCYmci5wdXNoKHMpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9ZVtyWzBdXS52YWx1ZSx0KTooci5sZW5ndGg9PT0wP3QuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoYT0+emUoYSxvLG5lKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0IHhwPXAoIiRab2RYb3IiLChlLHQpPT57c3IuaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgdC5vcHRpb25zKXtjb25zdCB1PWkuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTt1IGluc3RhbmNlb2YgUHJvbWlzZT8oYS5wdXNoKHUpLHM9ITApOmEucHVzaCh1KX1yZXR1cm4gcz9Qcm9taXNlLmFsbChhKS50aGVuKGk9PnB1KGksbyxlLHIpKTpwdShhLG8sZSxyKX19KTtmdW5jdGlvbiB2aShlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89UHAobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHAoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCBDcD1wKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLHNyLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTtPKGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBhPTA7Zm9yKGNvbnN0IGkgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgdT1pLl96b2QucHJvcFZhbHVlcztpZighdXx8T2JqZWN0LmtleXModSkubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGkpfSJgKTt1W3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmYSsrO2Zvcihjb25zdFtsLGRdb2YgT2JqZWN0LmVudHJpZXModSkpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGwpfHx1dChzLGwsbmV3IFNldCk7Zm9yKGNvbnN0IG0gb2YgZClzW2xdLmFkZChtKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmE+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgYT1IbyhyLl96b2QuZGVmKTtpZihhJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPXBuKCgpPT5QcCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO2lmKCF2dChhKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDphLGluc3Q6ZX0pLHI7Y29uc3QgaT1hPy5bdC5kaXNjcmltaW5hdG9yXSx1PW8udmFsdWUuZ2V0KGkpO3JldHVybiB1JiYoaSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT91Ll96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIobD0+by52YWx1ZS5nZXQobCkhPT1udWxsKSxpbnB1dDphLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksRXA9cCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxhPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGEgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGFdKS50aGVuKChbdSxsXSk9Pmh1KG4sdSxsKSk6aHUobixzLGEpfX0pO2Z1bmN0aW9uIE9vKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoVmUoZSkmJlZlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBhPU9vKGVbc10sdFtzXSk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWEuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxhPU9vKHIscyk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmEubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goYS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uIGh1KGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGE9KGwsZCk9PntsZXQgbTtpZihsLmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhbC5wYXRoPy5sZW5ndGgpcj8/KHI9bCksbT1sLmtleXM7ZWxzZSBpZihsLmNvZGU9PT0iaW52YWxpZF9rZXkiJiZsLm9yaWdpbj09PSJyZWNvcmQiJiZsLnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGI9U3RyaW5nKGwucGF0aFswXSk7cy5oYXMoYil8fHMuc2V0KGIsbCksbT1bYl19ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgYiBvZiBtKW8uaGFzKGIpfHxvLnNldChiLHt9KSxvLmdldChiKVtkXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IGwgb2YgdC5pc3N1ZXMpYShsLCJsIil8fGUuaXNzdWVzLnB1c2gobCk7Zm9yKGNvbnN0IGwgb2Ygbi5pc3N1ZXMpYShsLCJyIil8fGUuaXNzdWVzLnB1c2gobCk7Y29uc3QgaT1bLi4ub10uZmlsdGVyKChbLGxdKT0+bC5sJiZsLnIpLm1hcCgoW2xdKT0+bCk7aWYoaS5sZW5ndGgpe2NvbnN0IGw9cj9pLmZpbHRlcihkPT5yLmtleXMuaW5jbHVkZXMoZCkpOltdO2wubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6bH0pO2Zvcihjb25zdCBkIG9mIGkpIWwuaW5jbHVkZXMoZCkmJnMuaGFzKGQpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGQpKX1jb25zdCB1PU9vKHQudmFsdWUsbi52YWx1ZSk7aWYoIXUudmFsaWQpe2lmKG1lKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkodS5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9dS5kYXRhLGV9Y29uc3QgeWk9cCgiJFpvZFR1cGxlIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPXBlLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBhPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmEsaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGk9W10sdT1mdShuLCJvcHRpbiIpLGw9ZnUobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoYS5sZW5ndGg8dSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnUsaW5jbHVzaXZlOiEwLGlucHV0OmEsaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjthLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6YSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBkPW5ldyBBcnJheShuLmxlbmd0aCksbT10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGI9ITE7Zm9yKGxldCB2PTA7djxuLmxlbmd0aDt2Kyspe2NvbnN0IF89blt2XS5fem9kLnJ1bih7dmFsdWU6YVt2XSxpc3N1ZXM6W119LHMpO18gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChfLnRoZW4odz0+e2Rbdl09d30pKTooZFt2XT1fLG0mJiFiJiZfLmlzc3Vlcy5sZW5ndGgmJihiPW1lKF8pKSl9aWYodC5yZXN0JiYhYil7bGV0IHY9bi5sZW5ndGgtMTtjb25zdCBfPWEuc2xpY2Uobi5sZW5ndGgpO2xldCB3PXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBfKXtpZihtJiZyLmlzc3Vlcy5sZW5ndGghPT13KXtpZihtZShyLHcpKWJyZWFrO3c9ci5pc3N1ZXMubGVuZ3RofXYrKztjb25zdCBaPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO1ogaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChaLnRoZW4oST0+bXUoSSxyLHYpKSk6bXUoWixyLHYpfX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+Z3UoZCxyLG4sYSxsKSk6Z3UoZCxyLG4sYSxsKX19KTtmdW5jdGlvbiBmdShlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIG11KGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ud2UobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBndShlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBhPWVbc10saT1zPG8ubGVuZ3RoO2lmKCFpJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGEuaXNzdWVzLmxlbmd0aCl7aWYoIWkmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi53ZShzLGEuaXNzdWVzKSl9dC52YWx1ZVtzXT1hLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IEFwPXAoIiRab2RSZWNvcmQiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1wZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFWZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgYT1bXSxpPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihpJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgdT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGkpaWYodHlwZW9mIGQ9PSJzdHJpbmcifHx0eXBlb2YgZD09Im51bWJlciJ8fHR5cGVvZiBkPT0ic3ltYm9sIil7aWYodS5hZGQodHlwZW9mIGQ9PSJudW1iZXIiP2QudG9TdHJpbmcoKTpkKSxkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgbT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTtpZihtIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihtLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOm0uaXNzdWVzLm1hcChfPT56ZShfLHIsbmUoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1tLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLndlKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi53ZShkLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1sZXQgbDtmb3IoY29uc3QgZCBpbiBzKWlmKCF1LmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgbD1sPz9bXSxsLnB1c2goZCk7bCYmbC5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6bCxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCB1O2Zvcihjb25zdCBsIG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYobD09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsbCkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIGw9PSJzdHJpbmciJiZvci50ZXN0KGwpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIobCksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVtsXT1zW2xdOmk/KHU9dT8/W10sdS5wdXNoKGwpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+emUoXyxyLG5lKCkpKSxpbnB1dDpsLHBhdGg6W2xdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGI9ZC52YWx1ZTtpZihiPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tsXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh2LnRoZW4oXz0+e18uaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi53ZShsLF8uaXNzdWVzKSksby52YWx1ZVtiXT1fLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ud2UobCx2Lmlzc3VlcykpLG8udmFsdWVbYl09di52YWx1ZSl9dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfXJldHVybiBhLmxlbmd0aD9Qcm9taXNlLmFsbChhKS50aGVuKCgpPT5vKTpvfX0pLE9wPXAoIiRab2RNYXAiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1wZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJtYXAiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGE9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBNYXAscik6bmV3IE1hcDtjb25zdCBpPXI/LmFib3J0RWFybHk7bGV0IHU9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdFtsLGRdb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYobWUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBtPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpLGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmQsaXNzdWVzOltdfSxyKTttIGluc3RhbmNlb2YgUHJvbWlzZXx8YiBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKFByb21pc2UuYWxsKFttLGJdKS50aGVuKChbdixfXSk9PntidSh2LF8sbyxsLHMsZSxyKX0pKTpidShtLGIsbyxsLHMsZSxyKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBidShlLHQsbixvLHIscyxhKXtlLmlzc3Vlcy5sZW5ndGgmJihQby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ud2UobyxlLmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46Im1hcCIsaW5wdXQ6cixpbnN0OnMsaXNzdWVzOmUuaXNzdWVzLm1hcChpPT56ZShpLGEsbmUoKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFBvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi53ZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChpPT56ZShpLGEsbmUoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgUnA9cCgiJFpvZFNldCIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPXBlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgYT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGk9cj8uYWJvcnRFYXJseTtsZXQgdT1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IGwgb2Ygcyl7aWYoaSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYobWUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/YS5wdXNoKGQudGhlbihtPT52dShtLG8pKSk6dnUoZCxvKX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiB2dShlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgTnA9cCgiJFpvZEVudW0iLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj13cyh0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sTyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz13cyhyLmRlZi5lbnRyaWVzKS5maWx0ZXIoYT0+UG8uaGFzKHR5cGVvZiBhKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChhPT5aZShhLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO3JldHVybiBvLmhhcyhhKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6YSxpbnN0OmV9KSxyfX0pLFpwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLE8oZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP1plKHMpOnM/WmUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLGpwPXAoIiRab2RGaWxlIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxNcD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLHBlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFFvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGE9PihuLnZhbHVlPWEsbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBIZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24geXUoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBfaT1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57UC5pbml0KGUsdCksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsTyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLE8oZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7QmUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT55dShuLHMpKTp5dShuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLHFwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e19pLmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLERwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9PntQLmluaXQoZSx0KSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtCZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksTHA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+X3Uocyx0KSk6X3Uocix0KX19KTtmdW5jdGlvbiBfdShlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBVcD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksQnA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1AuaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5rdShzLGUpKTprdShyLGUpfX0pO2Z1bmN0aW9uIGt1KGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBIcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFFvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiB3dShlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PnplKHIsbyxuZSgpKSl9LGlucHV0OmUudmFsdWV9KSxlKTooZS52YWx1ZT10LnZhbHVlLHQubWVtbyYmKGUubWVtbz0hMCksZSl9Y29uc3QgRnA9cCgiJFpvZENhdGNoIiwoZSx0KT0+e1AuaW5pdChlLHQpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksTyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pnd1KG4scyx0LG8pKTp3dShuLHIsdCxvKX19KSxWcD1wKCIkWm9kTmFOIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KCh0eXBlb2Ygbi52YWx1ZSE9Im51bWJlciJ8fCFOdW1iZXIuaXNOYU4obi52YWx1ZSkpJiZuLmlzc3Vlcy5wdXNoKHtpbnB1dDpuLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoibmFuIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbil9KSxraT1wKCIkWm9kUGlwZSIsKGUsdCk9PntQLmluaXQoZSx0KSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLE8oZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLE8oZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLE8oZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PmJvKGEsdC5pbixvKSk6Ym8ocyx0LmluLG8pfWNvbnN0IHI9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+Ym8ocyx0Lm91dCxvKSk6Ym8ocix0Lm91dCxvKX19KTtmdW5jdGlvbiBibyhlLHQsbil7cmV0dXJuIGUuaXNzdWVzLnNvbWUobz0+by5jb2RlIT09InVucmVjb2duaXplZF9rZXlzIik/KGUuYWJvcnRlZD0hMCxlKTp0Ll96b2QucnVuKHt2YWx1ZTplLnZhbHVlLGlzc3VlczplLmlzc3Vlc30sbil9Y29uc3Qgd2k9cCgiJFpvZENvZGVjIiwoZSx0KT0+e1AuaW5pdChlLHQpLE8oZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksTyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksTyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKChvLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcz10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT52byhhLHQsbykpOnZvKHMsdCxvKX1lbHNle2NvbnN0IHM9dC5vdXQuX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGE9PnZvKGEsdCxvKSk6dm8ocyx0LG8pfX19KTtmdW5jdGlvbiB2byhlLHQsbil7aWYoZS5pc3N1ZXMubGVuZ3RoKXJldHVybiBlLmFib3J0ZWQ9ITAsZTtpZigobi5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHI9dC50cmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnlvKGUscyx0Lm91dCxuKSk6eW8oZSxyLHQub3V0LG4pfWVsc2V7Y29uc3Qgcj10LnJldmVyc2VUcmFuc2Zvcm0oZS52YWx1ZSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnlvKGUscyx0LmluLG4pKTp5byhlLHIsdC5pbixuKX19ZnVuY3Rpb24geW8oZSx0LG4sbyl7cmV0dXJuIGUuaXNzdWVzLmxlbmd0aD8oZS5hYm9ydGVkPSEwLGUpOm4uX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOmUuaXNzdWVzfSxvKX1jb25zdCBKcD1wKCIkWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntraS5pbml0KGUsdCl9KSxLcD1wKCIkWm9kUmVhZG9ubHkiLChlLHQpPT57UC5pbml0KGUsdCksTyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKSxPKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKSxPKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbigkdSk6JHUocil9fSk7ZnVuY3Rpb24gJHUoZSl7cmV0dXJuIGUubWVtb3x8KGUudmFsdWU9T2JqZWN0LmZyZWV6ZShlLnZhbHVlKSksZX1mdW5jdGlvbiBrZyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7bGV0IG49dC5wYXR0ZXJuLG89ISF0LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLHIscztmb3IoY29uc3QgaSBvZiB0LmNoZWNrcz8/W10pe2NvbnN0IHU9aS5fem9kLmRlZjt1LnBhdHRlcm4mJihuPXUucGF0dGVybiksb3x8KG89ISF1LmZvcm1hdD8uaW5jbHVkZXMoImludCIpKTtjb25zdCBsPXUubWluaW11bT8/dS5sZW5ndGgsZD11Lm1heGltdW0/P3UubGVuZ3RoO2whPT12b2lkIDAmJihyPT09dm9pZCAwfHxsPnIpJiYocj1sKSxkIT09dm9pZCAwJiYocz09PXZvaWQgMHx8ZDxzKSYmKHM9ZCl9aWYobilyZXR1cm4gbi5zb3VyY2U7aWYociE9PXZvaWQgMCYmcyE9PXZvaWQgMCYmcj5zKXJldHVybiIoPyEpIjtpZihyIT09dm9pZCAwfHxzIT09dm9pZCAwKXJldHVybiBYbCh7bWluaW11bTpyLG1heGltdW06c30pLnNvdXJjZTtjb25zdCBhPWUuX3pvZC5wYXR0ZXJuO3JldHVybihvJiZhPT09b3I/dGQ6YSk/LnNvdXJjZX1mdW5jdGlvbiBDcyhlKXtjb25zdCB0PWUuX3pvZC5kZWYsbj1lLl96b2QucGF0dGVybj8uc291cmNlLG89dC5pbm5lclR5cGU/P2UuX3pvZC5pbm5lclR5cGU7aWYobyl7Y29uc3Qgcj1vLl96b2QucGF0dGVybj8uc291cmNlLHM9Q3Mobyk7cmV0dXJuIG4mJnImJnMmJnMhPT1yP24ucmVwbGFjZShCZShyKSwoKT0+QmUocykpOm59aWYodC5vcHRpb25zKXtjb25zdCByPXQub3B0aW9ucy5tYXAoQ3MpO2lmKHIuZXZlcnkoQm9vbGVhbikpcmV0dXJuYF4oJHtyLm1hcChzPT5CZShzKSkuam9pbigifCIpfSkkYH1yZXR1cm4ga2coZSl9Y29uc3QgV3A9cCgiJFpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQucGFydHMpaWYodHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCl7Y29uc3Qgcj1DcyhvKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5vLl96b2QudHJhaXRzXS5zaGlmdCgpfWApO24ucHVzaChCZShyKSl9ZWxzZSBpZihvPT09bnVsbHx8cmwuaGFzKHR5cGVvZiBvKSluLnB1c2goWmUoYCR7b31gKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke299YCk7ZS5fem9kLnBhdHRlcm49bmV3IFJlZ0V4cChgXiR7bi5qb2luKCIiKX0kYCksZS5fem9kLnBhcnNlPShvLHIpPT50eXBlb2Ygby52YWx1ZSE9InN0cmluZyI/KG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvKTooZS5fem9kLnBhdHRlcm4ubGFzdEluZGV4PTAsZS5fem9kLnBhdHRlcm4udGVzdChvLnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdD8/InRlbXBsYXRlX2xpdGVyYWwiLHBhdHRlcm46ZS5fem9kLnBhdHRlcm4uc291cmNlfSksbyl9KSxHcD1wKCIkWm9kRnVuY3Rpb24iLChlLHQpPT4oUC5pbml0KGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9kZWYiLHt2YWx1ZTp0fSksZS5fem9kLmRlZj10LGUuaW1wbGVtZW50PW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/VHMoZS5fZGVmLmlucHV0LG8pOm8scz1SZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9UcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5pbXBsZW1lbnRBc3luYz1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmMgZnVuY3Rpb24oLi4ubyl7Y29uc3Qgcj1lLl9kZWYuaW5wdXQ/YXdhaXQgSXMoZS5fZGVmLmlucHV0LG8pOm8scz1hd2FpdCBSZWZsZWN0LmFwcGx5KG4sdGhpcyxyKTtyZXR1cm4gZS5fZGVmLm91dHB1dD9hd2FpdCBJcyhlLl9kZWYub3V0cHV0LHMpOnN9LCJfem9kIix7dmFsdWU6ZS5fem9kLGVudW1lcmFibGU6ITF9KX0sZS5fem9kLnBhcnNlPShuLG8pPT50eXBlb2Ygbi52YWx1ZSE9ImZ1bmN0aW9uIj8obi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoiZnVuY3Rpb24iLGlucHV0Om4udmFsdWUsaW5zdDplfSksbik6KGUuX2RlZi5vdXRwdXQmJmUuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZT09PSJwcm9taXNlIj9uLnZhbHVlPWUuaW1wbGVtZW50QXN5bmMobi52YWx1ZSk6bi52YWx1ZT1lLmltcGxlbWVudChuLnZhbHVlKSxuKSxlLmlucHV0PSguLi5uKT0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuWzBdKT9uZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5ldyB5aSh7dHlwZToidHVwbGUiLGl0ZW1zOm5bMF0scmVzdDpuWzFdfSksb3V0cHV0OmUuX2RlZi5vdXRwdXR9KTpuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0Om5bMF0sb3V0cHV0OmUuX2RlZi5vdXRwdXR9KX0sZS5vdXRwdXQ9bj0+e2NvbnN0IG89ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDplLl9kZWYuaW5wdXQsb3V0cHV0Om59KX0sZSkpLFFwPXAoIiRab2RQcm9taXNlIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUpLnRoZW4ocj0+dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSl9KSwkaT1wKCIkWm9kTGF6eSIsKGUsdCk9PntQLmluaXQoZSx0KSxZdShlLl96b2QsImlubmVyVHlwZSIsKCk9Pntjb25zdCBuPXQ7cmV0dXJuIG4uX2NhY2hlZElubmVyfHwobi5fY2FjaGVkSW5uZXI9dC5nZXR0ZXIoKSksbi5fY2FjaGVkSW5uZXJ9KSxPKGUsInBhdHRlcm4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKSxPKGUsInByb3BWYWx1ZXMiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKSxPKGUsIm9wdGluIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4/P3ZvaWQgMCksTyhlLCJvcHRvdXQiLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQ/P3ZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5lLl96b2QuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxZcD1wKCIkWm9kQ3VzdG9tIiwoZSx0KT0+e1cuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+bixlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89bi52YWx1ZSxyPXQuZm4obyk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHIudGhlbihzPT5TdShzLG4sbyxlKSk7U3UocixuLG8sZSl9fSk7ZnVuY3Rpb24gU3UoZSx0LG4sbyl7aWYoIWUpe2NvbnN0IHI9e2NvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om8scGF0aDpbLi4uby5fem9kLmRlZi5wYXRoPz9bXV0sY29udGludWU6IW8uX3pvZC5kZWYuYWJvcnR9O28uX3pvZC5kZWYucGFyYW1zJiYoci5wYXJhbXM9by5fem9kLmRlZi5wYXJhbXMpLHQuaXNzdWVzLnB1c2goeXQocikpfX1jbGFzcyBYcCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwYXJzZSBhIHJlZmVyZW5jZSBjeWNsZSB0aGF0IGNsb3NlcyB0aHJvdWdoIGEgdHJhbnNmb3JtIiksdGhpcy5uYW1lPSJab2RDeWNsaWNFcnJvciJ9fWNvbnN0IEVzPSJ+bWVtbyIsenU9W107ZnVuY3Rpb24gZWgoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCJ9ZnVuY3Rpb24gYnMoZSl7cmV0dXJuIGUubWFwKHQ9PnQucGF0aD97Li4udCxwYXRoOnQucGF0aC5zbGljZSgpfTp7Li4udH0pfWNvbnN0IHRoPW5ldyBXZWFrTWFwLGZ0PTAsU289MSxHdD0yO2Z1bmN0aW9uIFF0KGUsdCxuKXtjb25zdCBvPXRoLmdldChlKTtpZihvIT09dm9pZCAwKXJldHVybiBvP0d0OmZ0O2lmKHQuaGFzKGUpKXJldHVybiBHdDt0LmFkZChlKTtsZXQgcj1mdDtjb25zdCBzPWQ9PntpZihyIT09R3QmJmQ/Ll96b2Qpe2NvbnN0IG09UXQoZCx0LG4pO20+ciYmKHI9bSl9fSxhPShkLG0pPT57bGV0IGI9ZnQ7Zm9yKGNvbnN0IHYgb2YgUmVmbGVjdC5vd25LZXlzKGQpKXtjb25zdCBfPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx2KTtpZighXy5lbnVtZXJhYmxlKWNvbnRpbnVlO2NvbnN0IHc9Xy5nZXQ/U286Xy52YWx1ZT8uX3pvZD9RdChfLnZhbHVlLHQsbik6ZnQ7dz5iJiYoYj13KX1yZXR1cm4gYn0saT1kPT57ZD5yJiYocj1kKX0sdT1lLl96b2QuZGVmO3N3aXRjaCh1LnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgZD1Ibyh1KTtpKGQ/YShkKTpTbykscyh1LmNhdGNoYWxsKTticmVha31jYXNlImFycmF5IjpzKHUuZWxlbWVudCk7YnJlYWs7Y2FzZSJ0dXBsZSI6Zm9yKGNvbnN0IGQgb2YgdS5pdGVtcylzKGQpO3ModS5yZXN0KTticmVhaztjYXNlInJlY29yZCI6Y2FzZSJtYXAiOnModS5rZXlUeXBlKSxzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInNldCI6cyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJ1bmlvbiI6Zm9yKGNvbnN0IGQgb2YgdS5vcHRpb25zKXMoZCk7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOnModS5sZWZ0KSxzKHUucmlnaHQpO2JyZWFrO2Nhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOnModS5pbm5lclR5cGUpO2JyZWFrO2Nhc2UicGlwZSI6cyh1LmluKSxzKHUub3V0KTticmVhaztjYXNlImZ1bmN0aW9uIjpzKHUuaW5wdXQpLHModS5vdXRwdXQpO2JyZWFrO2Nhc2UibGF6eSI6e2NvbnN0IGQ9dS5fY2FjaGVkSW5uZXI/PyhuP2UuX3pvZC5pbm5lclR5cGU6dm9pZCAwKTtpKGQ/UXQoZCx0LCExKTpTbyk7YnJlYWt9Y2FzZSJ0ZW1wbGF0ZV9saXRlcmFsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiaW50IjpjYXNlImJvb2xlYW4iOmNhc2UiYmlnaW50IjpjYXNlInN5bWJvbCI6Y2FzZSJ1bmRlZmluZWQiOmNhc2UibnVsbCI6Y2FzZSJ2b2lkIjpjYXNlIm5ldmVyIjpjYXNlImFueSI6Y2FzZSJ1bmtub3duIjpjYXNlImRhdGUiOmNhc2UibmFuIjpjYXNlImVudW0iOmNhc2UibGl0ZXJhbCI6Y2FzZSJmaWxlIjpjYXNlInRyYW5zZm9ybSI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6Zm9yKGNvbnN0IGQgaW4gdSl7Y29uc3QgbT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsZCk7aWYoIW18fG0uZ2V0KWNvbnRpbnVlO2NvbnN0IGI9bS52YWx1ZTtpZighKCFifHx0eXBlb2YgYiE9Im9iamVjdCIpKXtpZihiLl96b2QpcyhiKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYikpZm9yKGNvbnN0IHYgb2YgYilzKHYpfX19cmV0dXJuIHQuZGVsZXRlKGUpLHdnKGUscil9ZnVuY3Rpb24gd2coZSx0KXtyZXR1cm4gdCE9PVNvJiZ0aC5zZXQoZSx0PT09R3QpLHR9ZnVuY3Rpb24gJGcoZSl7cmV0dXJuIFF0KGUsbmV3IFNldCwhMCkhPT1mdH1mdW5jdGlvbiBTZyhlLHQpe2xldCBuPWUuYnVja2V0cy5nZXQodCk7cmV0dXJuIG58fChuPW5ldyBXZWFrTWFwLGUuYnVja2V0cy5zZXQodCxuKSksbn1sZXQgX287Y29uc3Qga289W10semc9e2FsbG9jKGUsdCxuKXtjb25zdCBvPV9vO2lmKCFvKXJldHVybiBuO19vPXZvaWQgMDtjb25zdCByPXt2YWx1ZTpuLGlzc3VlczpudWxsfTtyZXR1cm4gby5zZXQodC52YWx1ZSxyKSxrby5wdXNoKHIpLG59LGd1YXJkKGUpe3ZhciB0Oyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IG49ZS5fem9kLnBhcnNlLG89KHIscyk9PntpZihzLmRpcmVjdGlvbiE9PSJiYWNrd2FyZCImJm5oKHMsci52YWx1ZSkpdGhyb3cgbmV3IFhwO3JldHVybiBuKHIscyl9O2UuX3pvZC5wYXJzZT1vLGUuX3pvZC5ydW49PT1uJiYoZS5fem9kLnJ1bj1vKX0pfSxhdHRhY2goZSl7dmFyIHQ7bGV0IG4sbz0hMSxyLHM7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3QgYT1lLl96b2QucGFyc2UsaT0odSxsKT0+e2lmKG49PT12b2lkIDApe2NvbnN0IFo9UXQoZSxuZXcgU2V0LCExKTtpZihaPT09ZnQpcmV0dXJuIGUuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKSxhKHUsbCk7Wj09PUd0fHxvP249ITA6bz0hMH1jb25zdCBkPXUudmFsdWU7aWYoIWVoKGQpKXJldHVybiBhKHUsbCk7bGV0IG09bFtFc107bXx8KG09e2J1Y2tldHM6bmV3IFdlYWtNYXAsYmFja0VkZ2VzOnZvaWQgMH0sbFtFc109bSk7bGV0IGI7cj09PWw/Yj1zOihiPVNnKG0sZSkscj1sLHM9Yik7Y29uc3Qgdj1iLmdldChkKTtpZih2KXJldHVybiB1LnZhbHVlPXYudmFsdWUsdi5pc3N1ZXM/di5pc3N1ZXMubGVuZ3RoJiZ1Lmlzc3Vlcy5wdXNoKC4uLmJzKHYuaXNzdWVzKSk6KHUubWVtbz0hMCxtLmJhY2tFZGdlcz8/KG0uYmFja0VkZ2VzPW5ldyBXZWFrU2V0KSxtLmJhY2tFZGdlcy5hZGQodi52YWx1ZSkpLHU7X289Yjtjb25zdCBfPWtvLmxlbmd0aCx3PWEodSxsKTtfbz12b2lkIDA7Y29uc3QgJD1rby5sZW5ndGg+Xz9rby5wb3AoKTp2b2lkIDA7cmV0dXJuIHcgaW5zdGFuY2VvZiBQcm9taXNlP3cudGhlbihaPT4oJCYmKCQuaXNzdWVzPVouaXNzdWVzLmxlbmd0aD9icyhaLmlzc3Vlcyk6enUpLFopKTooJCYmKCQuaXNzdWVzPXcuaXNzdWVzLmxlbmd0aD9icyh3Lmlzc3Vlcyk6enUpLHcpfTtlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSl9KX19O2Z1bmN0aW9uIGlyKCl7cmV0dXJuIHpnfWZ1bmN0aW9uIG5oKGUsdCl7Y29uc3Qgbj1lW0VzXT8uYmFja0VkZ2VzO3JldHVybiBuIT09dm9pZCAwJiZlaCh0KSYmbi5oYXModCl9Y29uc3QgVGc9KCk9Pntjb25zdCBlPXtzdHJpbmc6e3VuaXQ6ImNoYXJhY3RlcnMiLHZlcmI6InRvIGhhdmUifSxmaWxlOnt1bml0OiJieXRlcyIsdmVyYjoidG8gaGF2ZSJ9LGFycmF5Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LHNldDp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxtYXA6e3VuaXQ6ImVudHJpZXMiLHZlcmI6InRvIGhhdmUifX07ZnVuY3Rpb24gdChzKXtyZXR1cm4gZVtzXT8/bnVsbH1jb25zdCBuPXtyZWdleDoiaW5wdXQiLGVtYWlsOiJlbWFpbCBhZGRyZXNzIix1cmw6IlVSTCIsZW1vamk6ImVtb2ppIix1dWlkOiJVVUlEIix1dWlkdjQ6IlVVSUR2NCIsdXVpZHY2OiJVVUlEdjYiLG5hbm9pZDoibmFub2lkIixndWlkOiJHVUlEIixjdWlkOiJjdWlkIixjdWlkMjoiY3VpZDIiLHVsaWQ6IlVMSUQiLHhpZDoiWElEIixrc3VpZDoiS1NVSUQiLGRhdGV0aW1lOiJJU08gZGF0ZXRpbWUiLGRhdGU6IklTTyBkYXRlIix0aW1lOiJJU08gdGltZSIsZHVyYXRpb246IklTTyBkdXJhdGlvbiIsaXB2NDoiSVB2NCBhZGRyZXNzIixpcHY2OiJJUHY2IGFkZHJlc3MiLG1hYzoiTUFDIGFkZHJlc3MiLGNpZHJ2NDoiSVB2NCByYW5nZSIsY2lkcnY2OiJJUHY2IHJhbmdlIixiYXNlNjQ6ImJhc2U2NC1lbmNvZGVkIHN0cmluZyIsYmFzZTY0dXJsOiJiYXNlNjR1cmwtZW5jb2RlZCBzdHJpbmciLGpzb25fc3RyaW5nOiJKU09OIHN0cmluZyIsZTE2NDoiRS4xNjQgbnVtYmVyIixjdXJyZW5jeV9jb2RlOiJjdXJyZW5jeSBjb2RlIixjcmVkaXRfY2FyZDoiY3JlZGl0IGNhcmQgbnVtYmVyIixpYmFuOiJJQkFOIixqd3Q6IkpXVCIsdGVtcGxhdGVfbGl0ZXJhbDoiaW5wdXQifSxvPXtuYW46Ik5hTiJ9O2Z1bmN0aW9uIHIocyxhKXtyZXR1cm4gcz09PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJiFOdW1iZXIuaXNGaW5pdGUoYSk/U3RyaW5nKGEpOm9bc10/P3N9cmV0dXJuIHM9Pntzd2l0Y2gocy5jb2RlKXtjYXNlImludmFsaWRfdHlwZSI6e2NvbnN0IGE9cihzLmV4cGVjdGVkKSxpPWdsKHMuaW5wdXQpLHU9cihpLHMuaW5wdXQpO3JldHVybmBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke2F9LCByZWNlaXZlZCAke3V9YH1jYXNlImludmFsaWRfdmFsdWUiOnJldHVybiBzLnZhbHVlcy5sZW5ndGg9PT0xP2BJbnZhbGlkIGlucHV0OiBleHBlY3RlZCAke0xzKHMudmFsdWVzWzBdKX1gOmBJbnZhbGlkIG9wdGlvbjogZXhwZWN0ZWQgb25lIG9mICR7JHMocy52YWx1ZXMsInwiKX1gO2Nhc2UidG9vX2JpZyI6e2NvbnN0IGE9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI8PSI6IjwiLGk9dChzLm9yaWdpbik7cmV0dXJuIGk/YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGhhdmUgJHthfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0Pz8iZWxlbWVudHMifWA6YFRvbyBiaWc6IGV4cGVjdGVkICR7cy5vcmlnaW4/PyJ2YWx1ZSJ9IHRvIGJlICR7YX0ke3MubWF4aW11bS50b1N0cmluZygpfWB9Y2FzZSJ0b29fc21hbGwiOntjb25zdCBhPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPj0iOiI+IixpPXQocy5vcmlnaW4pO3JldHVybiBpP2BUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGhhdmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9ICR7aS51bml0fWA6YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gYmUgJHthfSR7cy5taW5pbXVtLnRvU3RyaW5nKCl9YH1jYXNlImludmFsaWRfZm9ybWF0Ijp7Y29uc3QgYT1zO3JldHVybiBhLmZvcm1hdD09PSJzdGFydHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IHN0YXJ0IHdpdGggIiR7YS5wcmVmaXh9ImA6YS5mb3JtYXQ9PT0iZW5kc193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggIiR7YS5zdWZmaXh9ImA6YS5mb3JtYXQ9PT0iaW5jbHVkZXMiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBpbmNsdWRlICIke2EuaW5jbHVkZXN9ImA6YS5mb3JtYXQ9PT0icmVnZXgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7YS5wYXR0ZXJufWA6YEludmFsaWQgJHtuW2EuZm9ybWF0XT8/cy5mb3JtYXR9YH1jYXNlIm5vdF9tdWx0aXBsZV9vZiI6cmV0dXJuYEludmFsaWQgbnVtYmVyOiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtzLmRpdmlzb3J9YDtjYXNlInVucmVjb2duaXplZF9rZXlzIjpyZXR1cm5gVW5yZWNvZ25pemVkIGtleSR7cy5rZXlzLmxlbmd0aD4xPyJzIjoiIn06ICR7JHMocy5rZXlzLCIsICIpfWA7Y2FzZSJpbnZhbGlkX2tleSI6cmV0dXJuYEludmFsaWQga2V5IGluICR7cy5vcmlnaW59YDtjYXNlImludmFsaWRfdW5pb24iOnJldHVybiBzLm9wdGlvbnMmJkFycmF5LmlzQXJyYXkocy5vcHRpb25zKSYmcy5vcHRpb25zLmxlbmd0aD4wP2BJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7cy5vcHRpb25zLm1hcChpPT5gJyR7aX0nYCkuam9pbigiIHwgIil9YDpzLmluY2x1c2l2ZT09PSExPyJJbnZhbGlkIGlucHV0OiBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVkIjoiSW52YWxpZCBpbnB1dCI7Y2FzZSJpbnZhbGlkX2VsZW1lbnQiOnJldHVybmBJbnZhbGlkIHZhbHVlIGluICR7cy5vcmlnaW59YDtkZWZhdWx0OnJldHVybiJJbnZhbGlkIGlucHV0In19fTtmdW5jdGlvbiBvaCgpe3JldHVybntsb2NhbGVFcnJvcjpUZygpfX1jb25zdCBTaT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW46b2h9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFR1O2NvbnN0IHppPVN5bWJvbCgiWm9kT3V0cHV0IiksVGk9U3ltYm9sKCJab2RJbnB1dCIpO2NsYXNzIHJoe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXB9YWRkKHQsLi4ubil7Y29uc3Qgbz1uWzBdO3JldHVybiB0aGlzLl9tYXAuc2V0KHQsbyksbyYmdHlwZW9mIG89PSJvYmplY3QiJiYiaWQiaW4gbyYmdGhpcy5faWRtYXAuc2V0KG8uaWQsdCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcCx0aGlzfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIG4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmImlkImluIG4mJnRoaXMuX2lkbWFwLmRlbGV0ZShuLmlkKSx0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXN9Z2V0KHQpe2NvbnN0IG49dC5fem9kLnBhcmVudDtpZihuKXtjb25zdCBvPXsuLi50aGlzLmdldChuKT8/e319O2RlbGV0ZSBvLmlkO2NvbnN0IHI9ey4uLm8sLi4udGhpcy5fbWFwLmdldCh0KX07cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD9yOnZvaWQgMH1yZXR1cm4gdGhpcy5fbWFwLmdldCh0KX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9fWZ1bmN0aW9uIGFyKCl7cmV0dXJuIG5ldyByaH0oVHU9Z2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnk/PyhUdS5fX3pvZF9nbG9iYWxSZWdpc3RyeT1hcigpKTtjb25zdCAkZT1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5LElpPSgpPT57dGhyb3cgbmV3IEVycm9yKCJ6b2QgY29tcGlsZSgpIGlzIG5vdCBidW5kbGVkIGludG8gY2FyZHMgLSBzZWUgcGFja2FnZXMvaW50ZXJuYWwvY2FyZC1raXQvdml0ZS1zbGltLm1qcyIpfTtjbGFzcyB4aSBleHRlbmRzIEVycm9ye31jbGFzcyBQaSBleHRlbmRzIEVycm9ye31jbGFzcyBDaSBleHRlbmRzIEVycm9ye31jb25zdCBFaT1JaSxBaT1JaSxJZz1JaTtmdW5jdGlvbiBjcihlKXtyZXR1cm4gZS5jaGVja3MmJihlLmNoZWNrcz1bLi4uZS5jaGVja3NdKSxlfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIG5ldyBlKGNyKHt0eXBlOiJzdHJpbmciLC4uLnkodCl9KSl9ZnVuY3Rpb24gaWgoZSx0KXtyZXR1cm4gbmV3IGUoY3Ioe3R5cGU6InN0cmluZyIsY29lcmNlOiEwLC4uLnkodCl9KSl9ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbWFpbCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBSaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imd1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gamkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjYiLC4uLnkodCl9KX1mdW5jdGlvbiBNaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NyIsLi4ueSh0KX0pfWZ1bmN0aW9uIHVyKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1vamkiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gRGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJuYW5vaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gTGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZDIiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gQmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1bGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoieGlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoia3N1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gVmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBhaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im1hYyIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBLaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBXaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNpZHJ2NiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBHaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBRaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImJhc2U2NHVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBZaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImUxNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gY2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImliYW4iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gWGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJqd3QiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9Y29uc3QgZWE9e0FueTpudWxsLE1pbnV0ZTotMSxTZWNvbmQ6MCxNaWxsaXNlY29uZDozLE1pY3Jvc2Vjb25kOjZ9O2Z1bmN0aW9uIHRhKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZXRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixvZmZzZXQ6ITEsbG9jYWw6ITEscHJlY2lzaW9uOm51bGwsLi4ueSh0KX0pfWZ1bmN0aW9uIG5hKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZGF0ZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBvYShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InRpbWUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gcmEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkdXJhdGlvbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLC4uLnkodCl9KX1mdW5jdGlvbiBsaChlLHQpe3JldHVybiBuZXcgZShjcih7dHlwZToibnVtYmVyIixjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBkaChlLHQpe3JldHVybiBuZXcgZShjcih7dHlwZToibnVtYmVyIixjb2VyY2U6ITAsY2hlY2tzOltdLC4uLnkodCl9KSl9ZnVuY3Rpb24gcGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoic2FmZWludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIGhoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBmaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gbWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBnaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50MzIiLC4uLnkodCl9KX1mdW5jdGlvbiBiaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIHZoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIHloKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLC4uLnkodCl9KX1mdW5jdGlvbiBfaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50Iixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIGtoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gd2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDY0IiwuLi55KHQpfSl9ZnVuY3Rpb24gJGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN5bWJvbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIFNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmRlZmluZWQiLC4uLnkodCl9KX1mdW5jdGlvbiB6aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbCIsLi4ueSh0KX0pfWZ1bmN0aW9uIFRoKGUpe3JldHVybiBuZXcgZSh7dHlwZToiYW55In0pfWZ1bmN0aW9uIEloKGUpe3JldHVybiBuZXcgZSh7dHlwZToidW5rbm93biJ9KX1mdW5jdGlvbiB4aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmV2ZXIiLC4uLnkodCl9KX1mdW5jdGlvbiBQaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidm9pZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIENoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIiwuLi55KHQpfSl9ZnVuY3Rpb24gRWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gQWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5hbiIsLi4ueSh0KX0pfWZ1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIG5ldyBhaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIHZlKGUsdCl7cmV0dXJuIG5ldyBhaSh7Y2hlY2s6Imxlc3NfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIHFlKGUsdCl7cmV0dXJuIG5ldyBjaSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMX0pfWZ1bmN0aW9uIHllKGUsdCl7cmV0dXJuIG5ldyBjaSh7Y2hlY2s6ImdyZWF0ZXJfdGhhbiIsLi4ueSh0KSx2YWx1ZTplLGluY2x1c2l2ZTohMH0pfWZ1bmN0aW9uIGxyKGUpe3JldHVybiBxZSgwLGUpfWZ1bmN0aW9uIGRyKGUpe3JldHVybiBNZSgwLGUpfWZ1bmN0aW9uIHByKGUpe3JldHVybiB2ZSgwLGUpfWZ1bmN0aW9uIGhyKGUpe3JldHVybiB5ZSgwLGUpfWZ1bmN0aW9uIHJ0KGUsdCl7cmV0dXJuIG5ldyBjZCh7Y2hlY2s6Im11bHRpcGxlX29mIiwuLi55KHQpLHZhbHVlOmV9KX1mdW5jdGlvbiBsdChlLHQpe3JldHVybiBuZXcgZGQoe2NoZWNrOiJtYXhfc2l6ZSIsLi4ueSh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBuZXcgcGQoe2NoZWNrOiJtaW5fc2l6ZSIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBUdChlLHQpe3JldHVybiBuZXcgaGQoe2NoZWNrOiJzaXplX2VxdWFscyIsLi4ueSh0KSxzaXplOmV9KX1mdW5jdGlvbiBJdChlLHQpe3JldHVybiBuZXcgZmQoe2NoZWNrOiJtYXhfbGVuZ3RoIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEplKGUsdCl7cmV0dXJuIG5ldyBtZCh7Y2hlY2s6Im1pbl9sZW5ndGgiLC4uLnkodCksbWluaW11bTplfSl9ZnVuY3Rpb24geHQoZSx0KXtyZXR1cm4gbmV3IGdkKHtjaGVjazoibGVuZ3RoX2VxdWFscyIsLi4ueSh0KSxsZW5ndGg6ZX0pfWZ1bmN0aW9uIHduKGUsdCl7cmV0dXJuIG5ldyBiZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoicmVnZXgiLC4uLnkodCkscGF0dGVybjplfSl9ZnVuY3Rpb24gJG4oZSl7cmV0dXJuIG5ldyB2ZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoibG93ZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24gU24oZSl7cmV0dXJuIG5ldyB5ZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoidXBwZXJjYXNlIiwuLi55KGUpfSl9ZnVuY3Rpb24gem4oZSx0KXtyZXR1cm4gbmV3IF9kKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsLi4ueSh0KSxpbmNsdWRlczplfSl9ZnVuY3Rpb24gVG4oZSx0KXtyZXR1cm4gbmV3IGtkKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIsLi4ueSh0KSxwcmVmaXg6ZX0pfWZ1bmN0aW9uIEluKGUsdCl7cmV0dXJuIG5ldyB3ZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIiwuLi55KHQpLHN1ZmZpeDplfSl9ZnVuY3Rpb24gZnIoZSx0LG4pe3JldHVybiBuZXcgJGQoe2NoZWNrOiJwcm9wZXJ0eSIscHJvcGVydHk6ZSxzY2hlbWE6dCwuLi55KG4pfSl9ZnVuY3Rpb24geG4oZSx0KXtyZXR1cm4gbmV3IFNkKHtjaGVjazoicHJvcGVydGllcyIsc2hhcGU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm4gbmV3IHpkKHtjaGVjazoibWltZV90eXBlIixtaW1lOmUsLi4ueSh0KX0pfWZ1bmN0aW9uIE9lKGUpe3JldHVybiBuZXcgVGQoe2NoZWNrOiJvdmVyd3JpdGUiLHR4OmV9KX1mdW5jdGlvbiBDbihlKXtyZXR1cm4gT2UodD0+dC5ub3JtYWxpemUoZSkpfWZ1bmN0aW9uIEVuKCl7cmV0dXJuIE9lKGU9PmUudHJpbSgpKX1mdW5jdGlvbiBBbigpe3JldHVybiBPZShlPT5lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIE9uKCl7cmV0dXJuIE9lKGU9PmUudG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gUm4oKXtyZXR1cm4gT2UoZT0+bmwoZSkpfWZ1bmN0aW9uIE9oKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFycmF5IixlbGVtZW50OnQsLi4ueShuKX0pfWZ1bmN0aW9uIHhnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsaW5jbHVzaXZlOiExLC4uLnkobil9KX1mdW5jdGlvbiBDZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuaW9uIixvcHRpb25zOm4sZGlzY3JpbWluYXRvcjp0LC4uLnkobyl9KX1mdW5jdGlvbiBFZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6dCxyaWdodDpufSl9ZnVuY3Rpb24gQWcoZSx0LG4sbyl7Y29uc3Qgcj1uIGluc3RhbmNlb2YgUCxzPXI/bzpuLGE9cj9uOm51bGw7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0dXBsZSIsaXRlbXM6dCxyZXN0OmEsLi4ueShzKX0pfWZ1bmN0aW9uIE9nKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIFJnKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToibWFwIixrZXlUeXBlOnQsdmFsdWVUeXBlOm4sLi4ueShvKX0pfWZ1bmN0aW9uIE5nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InNldCIsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFpnKGUsdCxuKXtjb25zdCBvPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHI9PltyLHJdKSk6dDtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6bywuLi55KG4pfSl9ZnVuY3Rpb24gamcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczp0LC4uLnkobil9KX1mdW5jdGlvbiBNZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheSh0KT90Olt0XSwuLi55KG4pfSl9ZnVuY3Rpb24gUmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImZpbGUiLC4uLnkodCl9KX1mdW5jdGlvbiBxZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06dH0pfWZ1bmN0aW9uIERnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBMZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gVWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOnQsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKCk6Rm8obil9fSl9ZnVuY3Rpb24gQmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBIZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBGZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOnQsY2F0Y2hWYWx1ZTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOlVzKG4pfSl9ZnVuY3Rpb24gVmcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToicGlwZSIsaW46dCxvdXQ6bn0pfWZ1bmN0aW9uIEpnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBLZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czp0LC4uLnkobil9KX1mdW5jdGlvbiBXZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibGF6eSIsZ2V0dGVyOnR9KX1mdW5jdGlvbiBHZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBOaChlLHQsbil7Y29uc3Qgbz15KG4pO3JldHVybiBvLmFib3J0Pz8oby5hYm9ydD0hMCksbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5vfSl9ZnVuY3Rpb24gWmgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLnkobil9KX1mdW5jdGlvbiBqaChlLHQpe2NvbnN0IG49TWgobz0+KG8uYWRkSXNzdWU9cj0+e2lmKHR5cGVvZiByPT0ic3RyaW5nIilvLmlzc3Vlcy5wdXNoKHl0KHIsby52YWx1ZSxuLl96b2QuZGVmKSk7ZWxzZXtjb25zdCBzPXI7cy5mYXRhbCYmKHMuY29udGludWU9ITEpLHMuY29kZT8/KHMuY29kZT0iY3VzdG9tIiksImlucHV0ImluIHN8fChzLmlucHV0PW8udmFsdWUpLHMuaW5zdD8/KHMuaW5zdD1uKSxzLmNvbnRpbnVlPz8ocy5jb250aW51ZT0hbi5fem9kLmRlZi5hYm9ydCksby5pc3N1ZXMucHVzaCh5dChzKSl9fSxlKG8udmFsdWUsbykpLHQpO3JldHVybiBufWZ1bmN0aW9uIE1oKGUsdCl7Y29uc3Qgbj1uZXcgVyh7Y2hlY2s6ImN1c3RvbSIsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuY2hlY2s9ZSxufWZ1bmN0aW9uIHFoKGUpe2NvbnN0IHQ9bmV3IFcoe2NoZWNrOiJkZXNjcmliZSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz0kZS5nZXQobik/P3t9OyRlLmFkZChuLHsuLi5vLGRlc2NyaXB0aW9uOmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBEaChlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoibWV0YSJ9KTtyZXR1cm4gdC5fem9kLm9uYXR0YWNoPVtuPT57Y29uc3Qgbz0kZS5nZXQobik/P3t9OyRlLmFkZChuLHsuLi5vLC4uLmV9KX1dLHQuX3pvZC5jaGVjaz0oKT0+e30sdH1mdW5jdGlvbiBMaChlLHQpe2NvbnN0IG49eSh0KTtsZXQgbz1uLnRydXRoeT8/WyJ0cnVlIiwiMSIsInllcyIsIm9uIiwieSIsImVuYWJsZWQiXSxyPW4uZmFsc3k/P1siZmFsc2UiLCIwIiwibm8iLCJvZmYiLCJuIiwiZGlzYWJsZWQiXTtuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKG89by5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSxyPXIubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikpO2NvbnN0IHM9bmV3IFNldChvKSxhPW5ldyBTZXQociksaT1lLkNvZGVjPz93aSx1PWUuQm9vbGVhbj8/Z2ksbD1lLlN0cmluZz8/a24sZD1uZXcgbCh7dHlwZToic3RyaW5nIixlcnJvcjpuLmVycm9yfSksbT1uZXcgdSh7dHlwZToiYm9vbGVhbiIsZXJyb3I6bi5lcnJvcn0pLGI9bmV3IGkoe3R5cGU6InBpcGUiLGluOmQsb3V0Om0sdHJhbnNmb3JtOigodixfKT0+e2xldCB3PXY7cmV0dXJuIG4uY2FzZSE9PSJzZW5zaXRpdmUiJiYodz13LnRvTG93ZXJDYXNlKCkpLHMuaGFzKHcpPyEwOmEuaGFzKHcpPyExOihfLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIixleHBlY3RlZDoic3RyaW5nYm9vbCIsdmFsdWVzOlsuLi5zLC4uLmFdLGlucHV0Ol8udmFsdWUsaW5zdDpiLGNvbnRpbnVlOiExfSkse30pfSkscmV2ZXJzZVRyYW5zZm9ybTooKHYsXyk9PnY9PT0hMD9vWzBdfHwidHJ1ZSI6clswXXx8ImZhbHNlIiksZXJyb3I6bi5lcnJvcn0pO3JldHVybiBiLl96b2QuYmFnLnRydXRoeT1vLGIuX3pvZC5iYWcuZmFsc3k9cixiLl96b2QuYmFnLmNhc2U9bi5jYXNlPz8iaW5zZW5zaXRpdmUiLGJ9ZnVuY3Rpb24gUHQoZSx0LG4sbz17fSl7Y29uc3Qgcj15KG8pLHM9e2NoZWNrOiJzdHJpbmdfZm9ybWF0Iix0eXBlOiJzdHJpbmciLGZvcm1hdDp0LGZuOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246aT0+bi50ZXN0KGkpLC4uLnJ9O3JldHVybiBuIGluc3RhbmNlb2YgUmVnRXhwJiYocy5wYXR0ZXJuPW4pLG5ldyBlKHMpfWNvbnN0IFFnPSgpPT4oe30pLFlnPSgpPT4oe30pLFhnPSgpPT4oe30pLGViPSgpPT4oe30pLHRiPSgpPT4oe30pLFVoPSgpPT4oKT0+KHt9KSxBcz0oKT0+KCk9Pih7fSksbmI9KCk9Pih7fSksU2U9KCk9Pih7fSksb2I9KCk9Pih7fSkscmI9KCk9Pih7fSksc2I9KCk9Pih7fSksaWI9KCk9Pih7fSksYWI9KCk9Pih7fSksY2I9KCk9Pih7fSksdWI9KCk9Pih7fSksbGI9KCk9Pih7fSksZGI9KCk9Pih7fSkscGI9KCk9Pih7fSksaGI9KCk9Pih7fSksZmI9KCk9Pih7fSksbWI9KCk9Pih7fSksZ2I9KCk9Pih7fSksYmI9KCk9Pih7fSksdmI9KCk9Pih7fSkseWI9KCk9Pih7fSksX2I9KCk9Pih7fSksa2I9KCk9Pih7fSksd2I9KCk9Pih7fSksJGI9KCk9Pih7fSksU2I9KCk9Pih7fSksemI9KCk9Pih7fSksVGI9KCk9Pih7fSksSWI9KCk9Pih7fSksQmg9KCk9Pih7fSkseGI9KCk9Pih7fSksUGI9KCk9Pih7fSksQ2I9KCk9Pih7fSksRWI9KCk9Pih7fSksQWI9KCk9Pih7fSksT2I9KCk9Pih7fSksUmI9KCk9Pih7fSksTmI9KCk9Pih7fSksWmI9KCk9Pih7fSksamI9KCk9Pih7fSksTWI9KCk9Pih7fSksSGg9KCk9Pih7fSkscWI9KCk9Pih7fSksc2E9KCk9Pih7fSk7Y2xhc3MgRGJ7fWNvbnN0IExiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxGaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJFpvZEFueTp2cCwkWm9kQXJyYXk6JHAsJFpvZEFzeW5jRXJyb3I6SGUsJFpvZEJhc2U2NDpucCwkWm9kQmFzZTY0VVJMOnJwLCRab2RCaWdJbnQ6YmksJFpvZEJpZ0ludEZvcm1hdDpmcCwkWm9kQm9vbGVhbjpnaSwkWm9kQ0lEUnY0OllkLCRab2RDSURSdjY6ZXAsJFpvZENVSUQ6RGQsJFpvZENVSUQyOkxkLCRab2RDYXRjaDpGcCwkWm9kQ2hlY2s6VywkWm9kQ2hlY2tCaWdJbnRGb3JtYXQ6bGQsJFpvZENoZWNrRW5kc1dpdGg6d2QsJFpvZENoZWNrR3JlYXRlclRoYW46Y2ksJFpvZENoZWNrSW5jbHVkZXM6X2QsJFpvZENoZWNrTGVuZ3RoRXF1YWxzOmdkLCRab2RDaGVja0xlc3NUaGFuOmFpLCRab2RDaGVja0xvd2VyQ2FzZTp2ZCwkWm9kQ2hlY2tNYXhMZW5ndGg6ZmQsJFpvZENoZWNrTWF4U2l6ZTpkZCwkWm9kQ2hlY2tNaW1lVHlwZTp6ZCwkWm9kQ2hlY2tNaW5MZW5ndGg6bWQsJFpvZENoZWNrTWluU2l6ZTpwZCwkWm9kQ2hlY2tNdWx0aXBsZU9mOmNkLCRab2RDaGVja051bWJlckZvcm1hdDp1ZCwkWm9kQ2hlY2tPdmVyd3JpdGU6VGQsJFpvZENoZWNrUHJvcGVydGllczpTZCwkWm9kQ2hlY2tQcm9wZXJ0eTokZCwkWm9kQ2hlY2tSZWdleDpiZCwkWm9kQ2hlY2tTaXplRXF1YWxzOmhkLCRab2RDaGVja1N0YXJ0c1dpdGg6a2QsJFpvZENoZWNrU3RyaW5nRm9ybWF0Ol9uLCRab2RDaGVja1VwcGVyQ2FzZTp5ZCwkWm9kQ29kZWM6d2ksJFpvZENyZWRpdENhcmQ6YXAsJFpvZEN1c3RvbTpZcCwkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OnBwLCRab2RDeWNsaWNFcnJvcjpYcCwkWm9kRGF0ZTp3cCwkWm9kRGVmYXVsdDpMcCwkWm9kRGlzY3JpbWluYXRlZFVuaW9uOkNwLCRab2RFMTY0OnNwLCRab2RFbWFpbDpBZCwkWm9kRW1vamk6TWQsJFpvZEVuY29kZUVycm9yOlFvLCRab2RFbnVtOk5wLCRab2RFcnJvcjokbCwkWm9kRXhhY3RPcHRpb25hbDpxcCwkWm9kRmlsZTpqcCwkWm9kRnVuY3Rpb246R3AsJFpvZEdVSUQ6Q2QsJFpvZElCQU46dXAsJFpvZElQdjQ6V2QsJFpvZElQdjY6R2QsJFpvZElTT0RhdGU6VmQsJFpvZElTT0RhdGVUaW1lOkZkLCRab2RJU09EdXJhdGlvbjpLZCwkWm9kSVNPVGltZTpKZCwkWm9kSW50ZXJzZWN0aW9uOkVwLCRab2RKV1Q6ZHAsJFpvZEtTVUlEOkhkLCRab2RMYXp5OiRpLCRab2RMaXRlcmFsOlpwLCRab2RNQUM6UWQsJFpvZE1hcDpPcCwkWm9kTmFOOlZwLCRab2ROYW5vSUQ6cWQsJFpvZE5ldmVyOl9wLCRab2ROb25PcHRpb25hbDpCcCwkWm9kTnVsbDpicCwkWm9kTnVsbGFibGU6RHAsJFpvZE51bWJlcjptaSwkWm9kTnVtYmVyRm9ybWF0OmhwLCRab2RPYmplY3Q6VHAsJFpvZE9iamVjdEpJVDpJcCwkWm9kT3B0aW9uYWw6X2ksJFpvZFBpcGU6a2ksJFpvZFByZWZhdWx0OlVwLCRab2RQcmVwcm9jZXNzOkpwLCRab2RQcm9taXNlOlFwLCRab2RSZWFkb25seTpLcCwkWm9kUmVhbEVycm9yOl9lLCRab2RSZWNvcmQ6QXAsJFpvZFJlZ2lzdHJ5OnJoLCRab2RTZXQ6UnAsJFpvZFN0cmluZzprbiwkWm9kU3RyaW5nRm9ybWF0OkgsJFpvZFN1Y2Nlc3M6SHAsJFpvZFN5bWJvbDptcCwkWm9kVGVtcGxhdGVMaXRlcmFsOldwLCRab2RUcmFuc2Zvcm06TXAsJFpvZFR1cGxlOnlpLCRab2RUeXBlOlAsJFpvZFVMSUQ6VWQsJFpvZFVSTDpqZCwkWm9kVVVJRDpFZCwkWm9kVW5kZWZpbmVkOmdwLCRab2RVbmlvbjpzciwkWm9kVW5rbm93bjp5cCwkWm9kVm9pZDprcCwkWm9kWElEOkJkLCRab2RYb3I6eHAsJGJyYW5kOkZzLCRjb25zdHJ1Y3RvcjpwLCRpbnB1dDpUaSwkb3V0cHV0OnppLERvYzpJZCxJTlZBTElEOnhpLEpTT05TY2hlbWE6TGIsSlNPTlNjaGVtYUdlbmVyYXRvcjpEYixORVZFUjpIcyxUaW1lUHJlY2lzaW9uOmVhLFVSTF9CQURfRk9STUFUOmxpLFVSTF9VTlBBUlNFQUJMRTpubixab2RDb21waWxlQXN5bmNFcnJvcjpQaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpDaSxfYW55OlRoLF9hcnJheTpPaCxfYmFzZTY0OkdpLF9iYXNlNjR1cmw6UWksX2JpZ2ludDp5aCxfYm9vbGVhbjpiaCxfY2F0Y2g6RmcsX2NoZWNrOk1oLF9jaWRydjQ6S2ksX2NpZHJ2NjpXaSxfY29lcmNlZEJpZ2ludDpfaCxfY29lcmNlZEJvb2xlYW46dmgsX2NvZXJjZWREYXRlOkVoLF9jb2VyY2VkTnVtYmVyOmRoLF9jb2VyY2VkU3RyaW5nOmloLF9jcmVkaXRDYXJkOmNoLF9jdWlkOkxpLF9jdWlkMjpVaSxfY3VzdG9tOk5oLF9kYXRlOkNoLF9kZWNvZGU6V3MsX2RlY29kZUFzeW5jOlFzLF9kZWZhdWx0OlVnLF9kaXNjcmltaW5hdGVkVW5pb246Q2csX2UxNjQ6WWksX2VtYWlsOk9pLF9lbW9qaTpxaSxfZW5jb2RlOktzLF9lbmNvZGVBc3luYzpHcyxfZW5kc1dpdGg6SW4sX2VudW06WmcsX2ZpbGU6UmgsX2Zsb2F0MzI6aGgsX2Zsb2F0NjQ6ZmgsX2d0OnFlLF9ndGU6eWUsX2d1aWQ6UmksX2liYW46dWgsX2luY2x1ZGVzOnpuLF9pbnQ6cGgsX2ludDMyOm1oLF9pbnQ2NDpraCxfaW50ZXJzZWN0aW9uOkVnLF9pcHY0OlZpLF9pcHY2OkppLF9pc29EYXRlOm5hLF9pc29EYXRlVGltZTp0YSxfaXNvRHVyYXRpb246cmEsX2lzb1RpbWU6b2EsX2p3dDpYaSxfa3N1aWQ6RmksX2xhenk6V2csX2xlbmd0aDp4dCxfbGl0ZXJhbDpNZyxfbG93ZXJjYXNlOiRuLF9sdDpNZSxfbHRlOnZlLF9tYWM6YWgsX21hcDpSZyxfbWF4OnZlLF9tYXhMZW5ndGg6SXQsX21heFNpemU6bHQsX21pbWU6UG4sX21pbjp5ZSxfbWluTGVuZ3RoOkplLF9taW5TaXplOkRlLF9tdWx0aXBsZU9mOnJ0LF9uYW46QWgsX25hbm9pZDpEaSxfbmF0aXZlRW51bTpqZyxfbmVnYXRpdmU6ZHIsX25ldmVyOnhoLF9ub25uZWdhdGl2ZTpocixfbm9ub3B0aW9uYWw6QmcsX25vbnBvc2l0aXZlOnByLF9ub3JtYWxpemU6Q24sX251bGw6emgsX251bGxhYmxlOkxnLF9udW1iZXI6bGgsX29wdGlvbmFsOkRnLF9vdmVyd3JpdGU6T2UsX3BhcnNlOmZuLF9wYXJzZUFzeW5jOm1uLF9waXBlOlZnLF9wb3NpdGl2ZTpscixfcHJvbWlzZTpHZyxfcHJvcGVydGllczp4bixfcHJvcGVydHk6ZnIsX3JlYWRvbmx5OkpnLF9yZWNvcmQ6T2csX3JlZmluZTpaaCxfcmVnZXg6d24sX3NhZmVEZWNvZGU6WHMsX3NhZmVEZWNvZGVBc3luYzp0aSxfc2FmZUVuY29kZTpZcyxfc2FmZUVuY29kZUFzeW5jOmVpLF9zYWZlUGFyc2U6Z24sX3NhZmVQYXJzZUFzeW5jOmJuLF9zZXQ6TmcsX3NpemU6VHQsX3NsdWdpZnk6Um4sX3N0YXJ0c1dpdGg6VG4sX3N0cmluZzpzaCxfc3RyaW5nRm9ybWF0OlB0LF9zdHJpbmdib29sOkxoLF9zdWNjZXNzOkhnLF9zdXBlclJlZmluZTpqaCxfc3ltYm9sOiRoLF90ZW1wbGF0ZUxpdGVyYWw6S2csX3RvTG93ZXJDYXNlOkFuLF90b1VwcGVyQ2FzZTpPbixfdHJhbnNmb3JtOnFnLF90cmltOkVuLF90dXBsZTpBZyxfdWludDMyOmdoLF91aW50NjQ6d2gsX3VsaWQ6QmksX3VuZGVmaW5lZDpTaCxfdW5pb246eGcsX3Vua25vd246SWgsX3VwcGVyY2FzZTpTbixfdXJsOnVyLF91dWlkOk5pLF91dWlkdjQ6WmksX3V1aWR2NjpqaSxfdXVpZHY3Ok1pLF92b2lkOlBoLF94aWQ6SGksX3hvcjpQZyxiYXNlNjRDaGFyc2V0OnRwLGJhc2U2NHVybENoYXJzZXQ6ZmksY2FuUGFyc2VVUkw6ZGksY2xvbmU6USxjb21waWxlOkVpLGNvbXBpbGVGbjpJZyxjb25maWc6bmUsY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOkFzLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpVaCxkZWNvZGU6Um0sZGVjb2RlQXN5bmM6Wm0sZGVzY3JpYmU6cWgsZW5jb2RlOk9tLGVuY29kZUFzeW5jOk5tLGV4dHJhY3REZWZzOmViLGZpbmFsaXplOnRiLGZsYXR0ZW5FcnJvcjpZbyxmb3JtYXRFcnJvcjpYbyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOnZpLGdsb2JhbENvbmZpZzpwZSxnbG9iYWxSZWdpc3RyeTokZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6WWcsaW5pdGlhbGl6ZUNvbnRleHQ6UWcsaXNCYWNrRWRnZTpuaCxpc1JlY3Vyc2l2ZVNjaGVtYTokZyxpc1ZhbGlkQmFzZTY0OmhpLGlzVmFsaWRCYXNlNjRVUkw6b3AsaXNWYWxpZENJRFJ2NjpYZCxpc1ZhbGlkQ3JlZGl0Q2FyZDppcCxpc1ZhbGlkSUJBTjpjcCxpc1ZhbGlkSVB2NjpwaSxpc1ZhbGlkSldUOmxwLGxvY2FsZXM6U2ksbWVtb2l6ZXI6aXIsbWVyZ2VWYWx1ZXM6T28sbWV0YTpEaCxwYXJzZTpUcyxwYXJzZUFzeW5jOklzLHBhcnNlVVJMT2JqZWN0OlJkLHByZXR0aWZ5RXJyb3I6SnMscHJvY2VzczpuYixwcm9jZXNzU2NoZW1hOlhnLHJlZ2V4ZXM6cnIscmVnaXN0cnk6YXIsc2FmZURlY29kZTpNbSxzYWZlRGVjb2RlQXN5bmM6RG0sc2FmZUVuY29kZTpqbSxzYWZlRW5jb2RlQXN5bmM6cW0sc2FmZVBhcnNlOnpsLHNhZmVQYXJzZUFzeW5jOlBtLHN0YW5kYXJkUHJvcHM6dWksc3RyaXBUYWJBbmROZXdsaW5lOlBzLHRvRG90UGF0aDpTbCx0b0pTT05TY2hlbWE6c2EsdG9ab2Q6Qm8sdHJlZWlmeUVycm9yOlZzLHVybEhvc3RuYW1lT2s6TmQsdXJsUHJvdG9jb2xPazpaZCx1dGlsOkJzLHZhbGlkYXRlOnRyLHZhbGlkYXRlQXN5bmM6bnIsdmFsaWRhdGVVUkw6T2QsdmVyc2lvbjp4ZCx3aXRoUGFyc2VyOkFpfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEl1PVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiBpYShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooYSxpKT0+e2NvbnN0IHU9dFthLl96b2QuZGVmLnR5cGVdO3JldHVybiB1P3UoYSxpKTphfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihhKXtjb25zdCBpPW8uZ2V0KGEpO2lmKGk9PT1JdSlyZXR1cm4gbmV3ICRpKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGEpfSk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtvLnNldChhLEl1KTtjb25zdCB1PXMoYSksbD1uKHUsdSE9PWEpO3JldHVybiBvLnNldChhLGwpLGx9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPWEuX3pvZC5kZWY7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPWkuc2hhcGUsZD1PYmplY3Qua2V5cyhsKTtsZXQgbT0hMTtjb25zdCBiPXt9O2Zvcihjb25zdCBfIG9mIGQpe2NvbnN0IHc9cihsW19dKTt3IT09bFtfXSYmKG09ITApLGJbX109d31sZXQgdj1pLmNhdGNoYWxsO3JldHVybiBpLmNhdGNoYWxsJiYodj1yKGkuY2F0Y2hhbGwpLHYhPT1pLmNhdGNoYWxsJiYobT0hMCkpLG0/UShhLHsuLi5pLHNoYXBlOmIsY2F0Y2hhbGw6dn0pOmF9Y2FzZSJhcnJheSI6e2NvbnN0IGw9cihpLmVsZW1lbnQpO3JldHVybiBsPT09aS5lbGVtZW50P2E6UShhLHsuLi5pLGVsZW1lbnQ6bH0pfWNhc2UidHVwbGUiOntjb25zdCBsPWkuaXRlbXM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgdiBvZiBsKXtjb25zdCBfPXIodik7XyE9PXYmJihkPSEwKSxtLnB1c2goXyl9bGV0IGI9aS5yZXN0O3JldHVybiBpLnJlc3QmJihiPXIoaS5yZXN0KSxiIT09aS5yZXN0JiYoZD0hMCkpLGQ/UShhLHsuLi5pLGl0ZW1zOm0scmVzdDpifSk6YX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCBsPXIoaS5rZXlUeXBlKSxkPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS5rZXlUeXBlJiZkPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksa2V5VHlwZTpsLHZhbHVlVHlwZTpkfSl9Y2FzZSJzZXQiOntjb25zdCBsPXIoaS52YWx1ZVR5cGUpO3JldHVybiBsPT09aS52YWx1ZVR5cGU/YTpRKGEsey4uLmksdmFsdWVUeXBlOmx9KX1jYXNlInVuaW9uIjp7Y29uc3QgbD1pLm9wdGlvbnM7bGV0IGQ9ITE7Y29uc3QgbT1bXTtmb3IoY29uc3QgYiBvZiBsKXtjb25zdCB2PXIoYik7diE9PWImJihkPSEwKSxtLnB1c2godil9cmV0dXJuIGQ/UShhLHsuLi5pLG9wdGlvbnM6bX0pOmF9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCBsPXIoaS5sZWZ0KSxkPXIoaS5yaWdodCk7cmV0dXJuIGw9PT1pLmxlZnQmJmQ9PT1pLnJpZ2h0P2E6UShhLHsuLi5pLGxlZnQ6bCxyaWdodDpkfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IGw9cihpLmlubmVyVHlwZSk7cmV0dXJuIGw9PT1pLmlubmVyVHlwZT9hOlEoYSx7Li4uaSxpbm5lclR5cGU6bH0pfWNhc2UicGlwZSI6e2NvbnN0IGw9cihpLmluKSxkPXIoaS5vdXQpO3JldHVybiBsPT09aS5pbiYmZD09PWkub3V0P2E6UShhLHsuLi5pLGluOmwsb3V0OmR9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgbD1yKGkuaW5wdXQpLGQ9cihpLm91dHB1dCk7cmV0dXJuIGw9PT1pLmlucHV0JiZkPT09aS5vdXRwdXQ/YTpRKGEsey4uLmksaW5wdXQ6bCxvdXRwdXQ6ZH0pfWNhc2UibGF6eSI6e2NvbnN0IGw9aS5nZXR0ZXIse19jYWNoZWRJbm5lcjpkLC4uLm19PWk7cmV0dXJuIFEoYSx7Li4ubSxnZXR0ZXI6KCk9PnIobCgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiBhfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBhYShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBWaChlLHQpe3JldHVybiBhYShlKT96bChlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIFViKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihhYShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIEJiKGUpe2lmKGFhKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IEhiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDpJbixndDpxZSxndGU6eWUsaW5jbHVkZXM6em4sbGVuZ3RoOnh0LGxvd2VyY2FzZTokbixsdDpNZSxsdGU6dmUsbWF4TGVuZ3RoOkl0LG1heFNpemU6bHQsbWltZTpQbixtaW5MZW5ndGg6SmUsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOnJ0LG5lZ2F0aXZlOmRyLG5vbm5lZ2F0aXZlOmhyLG5vbnBvc2l0aXZlOnByLG5vcm1hbGl6ZTpDbixvdmVyd3JpdGU6T2UscG9zaXRpdmU6bHIscHJvcGVydGllczp4bixwcm9wZXJ0eTpmcixyZWdleDp3bixzaXplOlR0LHNsdWdpZnk6Um4sc3RhcnRzV2l0aDpUbix0b0xvd2VyQ2FzZTpBbix0b1VwcGVyQ2FzZTpPbix0cmltOkVuLHVwcGVyY2FzZTpTbn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx4dT1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiB3byhlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IEpoPShlLHQpPT57JGwuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3h1LmhhcyhuKXx8KHh1LmFkZChuKSx3byhuLCJmb3JtYXQiLG89PnI9PlhvKG8scikpLHdvKG4sImZsYXR0ZW4iLG89PnI9PllvKG8scikpLHdvKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMseG8sMil9KSx3byhuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3Vlcyx4bywyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxLaD1wKCJab2RFcnJvciIsSmgpLGdlPXAoIlpvZEVycm9yIixKaCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLGNhPWZuKGdlKSx1YT1tbihnZSksbGE9Z24oZ2UpLGRhPWJuKGdlKSxwYT1LcyhnZSksaGE9V3MoZ2UpLGZhPUdzKGdlKSxtYT1RcyhnZSksZ2E9WXMoZ2UpLGJhPVhzKGdlKSx2YT1laShnZSkseWE9dGkoZ2UpO2Z1bmN0aW9uIEZiKCl7cGUubG9jYWxlRXJyb3J8fG5lKG9oKCkpfWZ1bmN0aW9uIGR0KCl7cGUubWVtb2l6ZXJ8fG5lKHttZW1vaXplcjppcigpfSl9Y29uc3QgRT1wKCJab2RUeXBlIiwoZSx0KT0+KEZiKCksUC5pbml0KGUsdCksZS5kZWY9dCxlLnR5cGU9dC50eXBlLGUpLHtjaGVjayguLi5lKXtjb25zdCB0PXRoaXMuZGVmO3JldHVybiB0aGlzLmNsb25lKHVlKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBRKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhucyhlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhvcyhlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKE9lKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gVih0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBacih0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gd3QodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gVih3dCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBVcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiB4KHRoaXMpfSxvcihlKXtyZXR1cm4gQShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gTHQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBybih0aGlzLHJvKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gcXIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIExyKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBGcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBybih0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBXcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuICRlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuICRlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gJGUuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBHbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi51aSh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpBcygpLG91dHB1dDpBcygpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtqZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGNhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgdWEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBsYSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIGRhKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtqZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiB0cih0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gbnIodGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBwYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gaGEodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgZmEodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgbWEodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gZ2EodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIGJhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIHZhKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIHlhKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBVaCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gJGUuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxObj1wKCJfWm9kU3RyaW5nIiwoZSx0KT0+e2tuLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+b2IoKX0saG4oe2Zvcm1hdDplPT5TZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+U2UoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5TZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayh3biguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHpuKC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhUbiguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEluKC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEplKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEl0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHh0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soSmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjaygkbihlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhTbihlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhFbigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKENuKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhBbigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhPbigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKFJuKCkpfX0pKSxDdD1wKCJab2RTdHJpbmciLChlLHQpPT57a24uaW5pdChlLHQpLE5uLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKE9pKFpuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKHVyKE50LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKFhpKFluLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2socWkoTW4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFJpKGpuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhOaShDZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhaaShDZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhqaShDZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShDZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhEaShxbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTGkoRG4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhVaShMbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soQmkoVW4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soR2koV24sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soUWkoR24sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soSGkoQm4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhGaShIbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soVmkoRm4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKEppKFZuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKEtpKEpuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFdpKEtuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhZaShRbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKHRhKEV0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhuYShBdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2sob2EoT3QsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhyYShSdCxlKSl9fSk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gc2goQ3QsZSl9Y29uc3QgVT1wKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57SC5pbml0KGUsdCksTm4uaW5pdChlLHQpfSksRXQ9cCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57RmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksQXQ9cCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntWZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxPdD1wKCJab2RJU09UaW1lIiwoZSx0KT0+e0pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLFJ0PXAoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e0tkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLFpuPXAoIlpvZEVtYWlsIiwoZSx0KT0+e0FkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIF9hKGUpe3JldHVybiBPaShabixlKX1jb25zdCBqbj1wKCJab2RHVUlEIiwoZSx0KT0+e0NkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGthKGUpe3JldHVybiBSaShqbixlKX1jb25zdCBDZT1wKCJab2RVVUlEIiwoZSx0KT0+e0VkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHdhKGUpe3JldHVybiBOaShDZSxlKX1mdW5jdGlvbiAkYShlKXtyZXR1cm4gWmkoQ2UsZSl9ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIGppKENlLGUpfWZ1bmN0aW9uIHphKGUpe3JldHVybiBNaShDZSxlKX1jb25zdCBOdD1wKCJab2RVUkwiLChlLHQpPT57amQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIHVyKE50LGUpfWZ1bmN0aW9uIElhKGUpe3JldHVybiB1cihOdCx7cHJvdG9jb2w6bmksaG9zdG5hbWU6RmwsLi4ueShlKX0pfWNvbnN0IE1uPXAoIlpvZEVtb2ppIiwoZSx0KT0+e01kLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBxaShNbixlKX1jb25zdCBxbj1wKCJab2ROYW5vSUQiLChlLHQpPT57cWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUGEoZSl7cmV0dXJuIERpKHFuLGUpfWNvbnN0IERuPXAoIlpvZENVSUQiLChlLHQpPT57RGQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIExpKERuLGUpfWNvbnN0IExuPXAoIlpvZENVSUQyIiwoZSx0KT0+e0xkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBVaShMbixlKX1jb25zdCBVbj1wKCJab2RVTElEIiwoZSx0KT0+e1VkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFhKGUpe3JldHVybiBCaShVbixlKX1jb25zdCBCbj1wKCJab2RYSUQiLChlLHQpPT57QmQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gT2EoZSl7cmV0dXJuIEhpKEJuLGUpfWNvbnN0IEhuPXAoIlpvZEtTVUlEIiwoZSx0KT0+e0hkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBGaShIbixlKX1jb25zdCBGbj1wKCJab2RJUHY0IiwoZSx0KT0+e1dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE5hKGUpe3JldHVybiBWaShGbixlKX1jb25zdCBtcj1wKCJab2RNQUMiLChlLHQpPT57UWQuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gWmEoZSl7cmV0dXJuIGFoKG1yLGUpfWNvbnN0IFZuPXAoIlpvZElQdjYiLChlLHQpPT57R2QuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gamEoZSl7cmV0dXJuIEppKFZuLGUpfWNvbnN0IEpuPXAoIlpvZENJRFJ2NCIsKGUsdCk9PntZZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBNYShlKXtyZXR1cm4gS2koSm4sZSl9Y29uc3QgS249cCgiWm9kQ0lEUnY2IiwoZSx0KT0+e2VwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHFhKGUpe3JldHVybiBXaShLbixlKX1jb25zdCBXbj1wKCJab2RCYXNlNjQiLChlLHQpPT57bnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gRGEoZSl7cmV0dXJuIEdpKFduLGUpfWNvbnN0IEduPXAoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntycC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBMYShlKXtyZXR1cm4gUWkoR24sZSl9Y29uc3QgUW49cCgiWm9kRTE2NCIsKGUsdCk9PntzcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBVYShlKXtyZXR1cm4gWWkoUW4sZSl9Y29uc3QgZ3I9cCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PnthcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBCYShlKXtyZXR1cm4gY2goZ3IsZSl9Y29uc3QgYnI9cCgiWm9kSUJBTiIsKGUsdCk9Pnt1cC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBIYShlKXtyZXR1cm4gdWgoYnIsZSl9Y29uc3QgWW49cCgiWm9kSldUIiwoZSx0KT0+e2RwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEZhKGUpe3JldHVybiBYaShZbixlKX1jb25zdCBXZT1wKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57cHAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVmEoZSx0LG49e30pe3JldHVybiBQdChXZSxlLHQsbil9ZnVuY3Rpb24gSmEoZSl7cmV0dXJuIFB0KFdlLCJob3N0bmFtZSIsSGwsZSl9ZnVuY3Rpb24gS2EoZSl7cmV0dXJuIFB0KFdlLCJoZXgiLGFkLGUpfWZ1bmN0aW9uIFdhKGUpe3JldHVybiBQdChXZSwiY3VycmVuY3lfY29kZSIsSmwsZSl9ZnVuY3Rpb24gR2EoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPXJyW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIFB0KFdlLG8scix0KX1jb25zdCBadD1wKCJab2ROdW1iZXIiLChlLHQpPT57bWkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5yYigpLGUuaXNGaW5pdGU9ITB9LGhuKHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09U2UoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1TZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1TZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PlNlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhxZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeWUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHllKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKE1lKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhvbihlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sob24oZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhxZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeWUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKE1lKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh2ZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHJ0KGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socnQoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBDKGUpe3JldHVybiBsaChadCxlKX1jb25zdCBHZT1wKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57aHAuaW5pdChlLHQpLFp0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIG9uKGUpe3JldHVybiBwaChHZSxlKX1mdW5jdGlvbiBRYShlKXtyZXR1cm4gaGgoR2UsZSl9ZnVuY3Rpb24gWWEoZSl7cmV0dXJuIGZoKEdlLGUpfWZ1bmN0aW9uIFhhKGUpe3JldHVybiBtaChHZSxlKX1mdW5jdGlvbiBlYyhlKXtyZXR1cm4gZ2goR2UsZSl9Y29uc3QganQ9cCgiWm9kQm9vbGVhbiIsKGUsdCk9PntnaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnNiKCl9KTtmdW5jdGlvbiBMKGUpe3JldHVybiBiaChqdCxlKX1jb25zdCBNdD1wKCJab2RCaWdJbnQiLChlLHQpPT57YmkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pYigpfSxobih7bWluVmFsdWU6ZT0+U2UoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PlNlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+U2UoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh5ZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeWUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soTWUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2socWUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soTWUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeWUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHJ0KGUsdCkpfX0pKTtmdW5jdGlvbiB0YyhlKXtyZXR1cm4geWgoTXQsZSl9Y29uc3QgWG49cCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2ZwLmluaXQoZSx0KSxNdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBuYyhlKXtyZXR1cm4ga2goWG4sZSl9ZnVuY3Rpb24gb2MoZSl7cmV0dXJuIHdoKFhuLGUpfWNvbnN0IHZyPXAoIlpvZFN5bWJvbCIsKGUsdCk9PnttcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmFiKCl9KTtmdW5jdGlvbiByYyhlKXtyZXR1cm4gJGgodnIsZSl9Y29uc3QgeXI9cCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e2dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dWIoKX0pO2Z1bmN0aW9uIGt0KGUpe3JldHVybiBTaCh5cixlKX1jb25zdCBfcj1wKCJab2ROdWxsIiwoZSx0KT0+e2JwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Y2IoKX0pO2Z1bmN0aW9uIGVvKGUpe3JldHVybiB6aChfcixlKX1jb25zdCBrcj1wKCJab2RBbnkiLChlLHQpPT57dnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5wYigpfSk7ZnVuY3Rpb24gdG8oKXtyZXR1cm4gVGgoa3IpfWNvbnN0IHdyPXAoIlpvZFVua25vd24iLChlLHQpPT57eXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oYigpfSk7ZnVuY3Rpb24gRCgpe3JldHVybiBJaCh3cil9Y29uc3QgJHI9cCgiWm9kTmV2ZXIiLChlLHQpPT57X3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kYigpfSk7ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIHhoKCRyLGUpfWNvbnN0IFNyPXAoIlpvZFZvaWQiLChlLHQpPT57a3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5sYigpfSk7ZnVuY3Rpb24gc2MoZSl7cmV0dXJuIFBoKFNyLGUpfWNvbnN0IG5vPXAoIlpvZERhdGUiLChlLHQpPT57d3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5mYigpLGUubWluPShuLG8pPT5lLmNoZWNrKHllKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKHZlKG4sbykpfSxobih7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1TZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09U2UoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBpYyhlKXtyZXR1cm4gQ2gobm8sZSl9Y29uc3QgenI9cCgiWm9kQXJyYXkiLChlLHQpPT57ZHQoKSwkcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRiKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKEplKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhKZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soSXQoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHh0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gT2goenIsZSx0KX1mdW5jdGlvbiBhYyhlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIGllKE9iamVjdC5rZXlzKHQpKX1jb25zdCBxdD1wKCJab2RPYmplY3QiLChlLHQpPT57ZHQoKSxJcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkliKCksX2woZSwic2hhcGUiLG49Pm4uX3pvZC5kZWYuc2hhcGUsITEpfSx7a2V5b2YoKXtyZXR1cm4gaWUoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkQoKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpEKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOnN0KCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIGxsKHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIHBsKHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBobCh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBjbCh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiB1bCh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBTcyhVdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIFNzKHNvLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBmbChpbyx0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLnkodCl9O3JldHVybiBuZXcgcXQobil9ZnVuY3Rpb24gY2MoZSx0KXtyZXR1cm4gbmV3IHF0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6c3QoKSwuLi55KHQpfSl9ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4gbmV3IHF0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6RCgpLC4uLnkodCl9KX1jb25zdCBEdD1wKCJab2RVbmlvbiIsKGUsdCk9Pntzci5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkJoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIEEoZSx0KXtyZXR1cm4gbmV3IER0KHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLC4uLnkodCl9KX1jb25zdCBUcj1wKCJab2RYb3IiLChlLHQpPT57RHQuaW5pdChlLHQpLHhwLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QmgoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gdWMoZSx0KXtyZXR1cm4gbmV3IFRyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczplLGluY2x1c2l2ZTohMSwuLi55KHQpfSl9Y29uc3QgSXI9cCgiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e0R0LmluaXQoZSx0KSxDcC5pbml0KGUsdCl9KTtmdW5jdGlvbiBvbyhlLHQsbil7cmV0dXJuIG5ldyBJcih7dHlwZToidW5pb24iLG9wdGlvbnM6dCxkaXNjcmltaW5hdG9yOmUsLi4ueShuKX0pfWNvbnN0IHhyPXAoIlpvZEludGVyc2VjdGlvbiIsKGUsdCk9PntFcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhiKCl9KTtmdW5jdGlvbiBMdChlLHQpe3JldHVybiBuZXcgeHIoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDplLHJpZ2h0OnR9KX1jb25zdCBQcj1wKCJab2RUdXBsZSIsKGUsdCk9PntkdCgpLHlpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGIoKX0se3Jlc3QoZSl7cmV0dXJuIHRoaXMuY2xvbmUoey4uLnRoaXMuX3pvZC5kZWYscmVzdDplfSl9LHBhcnRpYWwoKXtjb25zdCBlPXRoaXMuX3pvZC5kZWY7aWYoZS5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5wYXJ0aWFsKCkgY2Fubm90IGJlIHVzZWQgb24gdHVwbGUgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7cmV0dXJuIHRoaXMuY2xvbmUoey4uLmUsaXRlbXM6ZS5pdGVtcy5tYXAodD0+bmV3IFV0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnR9KSl9KX19KTtmdW5jdGlvbiBDcihlLHQsbil7Y29uc3Qgbz10IGluc3RhbmNlb2YgUCxyPW8/bjp0LHM9bz90Om51bGw7cmV0dXJuIG5ldyBQcih7dHlwZToidHVwbGUiLGl0ZW1zOmUscmVzdDpzLC4uLnkocil9KX1jb25zdCBpdD1wKCJab2RSZWNvcmQiLChlLHQpPT57ZHQoKSxBcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkNiKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZX0pO2Z1bmN0aW9uIE4oZSx0LG4pe3JldHVybiF0fHwhdC5fem9kP25ldyBpdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmgoKSx2YWx1ZVR5cGU6ZSwuLi55KHQpfSk6bmV3IGl0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gbGMoZSx0LG4pe3JldHVybiBuZXcgaXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobikscGFydGlhbDohMH0pfWZ1bmN0aW9uIGRjKGUsdCxuKXtyZXR1cm4gbmV3IGl0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCxtb2RlOiJsb29zZSIsLi4ueShuKX0pfWNvbnN0IEVyPXAoIlpvZE1hcCIsKGUsdCk9PntkdCgpLE9wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2IoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlLGUubWluPSguLi5uKT0+ZS5jaGVjayhEZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKERlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhsdCguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhUdCguLi5uKSl9KTtmdW5jdGlvbiBwYyhlLHQsbil7cmV0dXJuIG5ldyBFcih7dHlwZToibWFwIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWNvbnN0IEFyPXAoIlpvZFNldCIsKGUsdCk9PntkdCgpLFJwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emIoKSxlLm1pbj0oLi4ubik9PmUuY2hlY2soRGUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhEZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2sobHQoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soVHQoLi4ubikpfSk7ZnVuY3Rpb24gaGMoZSx0KXtyZXR1cm4gbmV3IEFyKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTplLC4uLnkodCl9KX1jb25zdCBhdD1wKCJab2RFbnVtIiwoZSx0KT0+e05wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG8scixzKT0+bWIoKSxlLmVudW09dC5lbnRyaWVzLGUub3B0aW9ucz1bLi4uZS5fem9kLnZhbHVlc107Y29uc3Qgbj1uZXcgU2V0KE9iamVjdC5rZXlzKHQuZW50cmllcykpO2UuZXh0cmFjdD0obyxyKT0+e2NvbnN0IHM9e307Zm9yKGNvbnN0IGEgb2YgbylpZihuLmhhcyhhKSlzW2FdPXQuZW50cmllc1thXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7YX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IGF0KHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfSxlLmV4Y2x1ZGU9KG8scik9Pntjb25zdCBzPXsuLi50LmVudHJpZXN9O2Zvcihjb25zdCBhIG9mIG8paWYobi5oYXMoYSkpZGVsZXRlIHNbYV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2F9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBhdCh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX19KTtmdW5jdGlvbiBpZShlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgYXQoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi55KHQpfSl9ZnVuY3Rpb24gZmMoZSx0KXtyZXR1cm4gbmV3IGF0KHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4ueSh0KX0pfWNvbnN0IE9yPXAoIlpvZExpdGVyYWwiLChlLHQpPT57WnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5nYigpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBPcih7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4ueSh0KX0pfWNvbnN0IFJyPXAoIlpvZEZpbGUiLChlLHQpPT57anAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT55YigpLGUubWluPShuLG8pPT5lLmNoZWNrKERlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGx0KG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhQbihBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIG1jKGUpe3JldHVybiBSaChScixlKX1jb25zdCBOcj1wKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57ZHQoKSxNcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRiKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBRbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKHl0KHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBhPXM7YS5mYXRhbCYmKGEuY29udGludWU9ITEpLGEuY29kZT8/KGEuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGF8fChhLmlucHV0PW4udmFsdWUpLGEuaW5zdD8/KGEuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKHl0KGEpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gcm8oZSl7cmV0dXJuIG5ldyBOcih7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IFV0PXAoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e19pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SGgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBWKGUpe3JldHVybiBuZXcgVXQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IHNvPXAoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57cXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IaCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFpyKGUpe3JldHVybiBuZXcgc28oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IGpyPXAoIlpvZE51bGxhYmxlIiwoZSx0KT0+e0RwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB3dChlKXtyZXR1cm4gbmV3IGpyKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBnYyhlKXtyZXR1cm4gVih3dChlKSl9Y29uc3QgTXI9cCgiWm9kRGVmYXVsdCIsKGUsdCk9PntMcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk9iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIHFyKGUsdCl7cmV0dXJuIG5ldyBNcih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6Rm8odCl9fSl9Y29uc3QgRHI9cCgiWm9kUHJlZmF1bHQiLChlLHQpPT57VXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIExyKGUsdCl7cmV0dXJuIG5ldyBEcih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOkZvKHQpfX0pfWNvbnN0IGlvPXAoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e0JwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBVcihlLHQpe3JldHVybiBuZXcgaW8oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgQnI9cCgiWm9kU3VjY2VzcyIsKGUsdCk9PntIcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gYmMoZSl7cmV0dXJuIG5ldyBCcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBIcj1wKCJab2RDYXRjaCIsKGUsdCk9PntGcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk5iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBGcihlLHQpe3JldHVybiBuZXcgSHIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6VXModCl9KX1jb25zdCBWcj1wKCJab2ROYU4iLChlLHQpPT57VnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5iYigpfSk7ZnVuY3Rpb24gdmMoZSl7cmV0dXJuIEFoKFZyLGUpfWNvbnN0IEJ0PXAoIlpvZFBpcGUiLChlLHQpPT57a2kuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aYigpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIHJuKGUsdCl7cmV0dXJuIG5ldyBCdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IEh0PXAoIlpvZENvZGVjIiwoZSx0KT0+e0J0LmluaXQoZSx0KSx3aS5pbml0KGUsdCl9KTtmdW5jdGlvbiB5YyhlLHQsbil7cmV0dXJuIG5ldyBIdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIF9jKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IEh0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBKcj1wKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e0J0LmluaXQoZSx0KSxKcC5pbml0KGUsdCl9KSxLcj1wKCJab2RSZWFkb25seSIsKGUsdCk9PntLcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmpiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gV3IoZSl7cmV0dXJuIG5ldyBLcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgR3I9cCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e1dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmIoKX0pO2Z1bmN0aW9uIGtjKGUsdCl7cmV0dXJuIG5ldyBHcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi55KHQpfSl9Y29uc3QgUXI9cCgiWm9kTGF6eSIsKGUsdCk9PnskaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnFiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBZcihlKXtyZXR1cm4gbmV3IFFyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IFhyPXAoIlpvZFByb21pc2UiLChlLHQpPT57UXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5NYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHdjKGUpe3JldHVybiBuZXcgWHIoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgZXM9cCgiWm9kRnVuY3Rpb24iLChlLHQpPT57R3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT53YigpfSk7ZnVuY3Rpb24gJHQoZSl7cmV0dXJuIG5ldyBlcyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP0NyKGU/LmlucHV0KTplPy5pbnB1dD8/eChEKCkpLG91dHB1dDplPy5vdXRwdXQ/P0QoKX0pfWNvbnN0IEZ0PXAoIlpvZEN1c3RvbSIsKGUsdCk9PntZcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtiKCl9KTtmdW5jdGlvbiAkYyhlKXtjb25zdCB0PW5ldyBXKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIHRzKGUsdCl7cmV0dXJuIE5oKEZ0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIG5zKGUsdD17fSl7cmV0dXJuIFpoKEZ0LGUsdCl9ZnVuY3Rpb24gb3MoZSx0KXtyZXR1cm4gamgoZSx0KX1jb25zdCBTYz1xaCx6Yz1EaCxycz1wKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e0Z0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4bihlLHQpKX19KTtmdW5jdGlvbiBUYyhlLHQ9e30pe2NvbnN0IG49bmV3IHJzKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLnkodCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgSWM9KC4uLmUpPT5MaCh7Q29kZWM6SHQsQm9vbGVhbjpqdCxTdHJpbmc6Q3R9LC4uLmUpO2Z1bmN0aW9uIHhjKGUpe2NvbnN0IHQ9WXIoKCk9PkEoW2goZSksQygpLEwoKSxlbygpLHgodCksTihoKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gYW8oZSx0KXtyZXR1cm4gbmV3IEpyKHt0eXBlOiJwaXBlIixpbjpybyhlKSxvdXQ6dH0pfWNvbnN0IFZiPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6a3IsWm9kQXJyYXk6enIsWm9kQmFzZTY0OlduLFpvZEJhc2U2NFVSTDpHbixab2RCaWdJbnQ6TXQsWm9kQmlnSW50Rm9ybWF0OlhuLFpvZEJvb2xlYW46anQsWm9kQ0lEUnY0OkpuLFpvZENJRFJ2NjpLbixab2RDVUlEOkRuLFpvZENVSUQyOkxuLFpvZENhdGNoOkhyLFpvZENvZGVjOkh0LFpvZENyZWRpdENhcmQ6Z3IsWm9kQ3VzdG9tOkZ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpXZSxab2REYXRlOm5vLFpvZERlZmF1bHQ6TXIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOklyLFpvZEUxNjQ6UW4sWm9kRW1haWw6Wm4sWm9kRW1vamk6TW4sWm9kRW51bTphdCxab2RFeGFjdE9wdGlvbmFsOnNvLFpvZEZpbGU6UnIsWm9kRnVuY3Rpb246ZXMsWm9kR1VJRDpqbixab2RJQkFOOmJyLFpvZElQdjQ6Rm4sWm9kSVB2NjpWbixab2RJU09EYXRlOkF0LFpvZElTT0RhdGVUaW1lOkV0LFpvZElTT0R1cmF0aW9uOlJ0LFpvZElTT1RpbWU6T3QsWm9kSW5zdGFuY2VPZjpycyxab2RJbnRlcnNlY3Rpb246eHIsWm9kSldUOlluLFpvZEtTVUlEOkhuLFpvZExhenk6UXIsWm9kTGl0ZXJhbDpPcixab2RNQUM6bXIsWm9kTWFwOkVyLFpvZE5hTjpWcixab2ROYW5vSUQ6cW4sWm9kTmV2ZXI6JHIsWm9kTm9uT3B0aW9uYWw6aW8sWm9kTnVsbDpfcixab2ROdWxsYWJsZTpqcixab2ROdW1iZXI6WnQsWm9kTnVtYmVyRm9ybWF0OkdlLFpvZE9iamVjdDpxdCxab2RPcHRpb25hbDpVdCxab2RQaXBlOkJ0LFpvZFByZWZhdWx0OkRyLFpvZFByZXByb2Nlc3M6SnIsWm9kUHJvbWlzZTpYcixab2RSZWFkb25seTpLcixab2RSZWNvcmQ6aXQsWm9kU2V0OkFyLFpvZFN0cmluZzpDdCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOkJyLFpvZFN5bWJvbDp2cixab2RUZW1wbGF0ZUxpdGVyYWw6R3IsWm9kVHJhbnNmb3JtOk5yLFpvZFR1cGxlOlByLFpvZFR5cGU6RSxab2RVTElEOlVuLFpvZFVSTDpOdCxab2RVVUlEOkNlLFpvZFVuZGVmaW5lZDp5cixab2RVbmlvbjpEdCxab2RVbmtub3duOndyLFpvZFZvaWQ6U3IsWm9kWElEOkJuLFpvZFhvcjpUcixfWm9kU3RyaW5nOk5uLF9kZWZhdWx0OnFyLF9mdW5jdGlvbjokdCxhbnk6dG8sYXJyYXk6eCxiYXNlNjQ6RGEsYmFzZTY0dXJsOkxhLGJpZ2ludDp0Yyxib29sZWFuOkwsY2F0Y2g6RnIsY2hlY2s6JGMsY2lkcnY0Ok1hLGNpZHJ2NjpxYSxjb2RlYzp5YyxjcmVkaXRDYXJkOkJhLGN1aWQ6Q2EsY3VpZDI6RWEsY3VycmVuY3lDb2RlOldhLGN1c3RvbTp0cyxkYXRlOmljLGRlc2NyaWJlOlNjLGRpc2NyaW1pbmF0ZWRVbmlvbjpvbyxlMTY0OlVhLGVtYWlsOl9hLGVtb2ppOnhhLGVudW06aWUsZXhhY3RPcHRpb25hbDpacixmaWxlOm1jLGZsb2F0MzI6UWEsZmxvYXQ2NDpZYSxmdW5jdGlvbjokdCxndWlkOmthLGhhc2g6R2EsaGV4OkthLGhvc3RuYW1lOkphLGh0dHBVcmw6SWEsaWJhbjpIYSxpbnN0YW5jZW9mOlRjLGludDpvbixpbnQzMjpYYSxpbnQ2NDpuYyxpbnRlcnNlY3Rpb246THQsaW52ZXJ0Q29kZWM6X2MsaXB2NDpOYSxpcHY2OmphLGpzb246eGMsand0OkZhLGtleW9mOmFjLGtzdWlkOlJhLGxhenk6WXIsbGl0ZXJhbDpmLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOmRjLG1hYzpaYSxtYXA6cGMsbWV0YTp6YyxuYW46dmMsbmFub2lkOlBhLG5hdGl2ZUVudW06ZmMsbmV2ZXI6c3Qsbm9ub3B0aW9uYWw6VXIsbnVsbDplbyxudWxsYWJsZTp3dCxudWxsaXNoOmdjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYscGFydGlhbFJlY29yZDpsYyxwaXBlOnJuLHByZWZhdWx0OkxyLHByZXByb2Nlc3M6YW8scHJvbWlzZTp3YyxyZWFkb25seTpXcixyZWNvcmQ6TixyZWZpbmU6bnMsc2V0OmhjLHN0cmljdE9iamVjdDpjYyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6VmEsc3RyaW5nYm9vbDpJYyxzdWNjZXNzOmJjLHN1cGVyUmVmaW5lOm9zLHN5bWJvbDpyYyx0ZW1wbGF0ZUxpdGVyYWw6a2MsdHJhbnNmb3JtOnJvLHR1cGxlOkNyLHVpbnQzMjplYyx1aW50NjQ6b2MsdWxpZDpBYSx1bmRlZmluZWQ6a3QsdW5pb246QSx1bmtub3duOkQsdXJsOlRhLHV1aWQ6d2EsdXVpZHY0OiRhLHV1aWR2NjpTYSx1dWlkdjc6emEsdm9pZDpzYyx4aWQ6T2EseG9yOnVjfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFdoPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBHaChlKXtuZSh7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIFFoKCl7cmV0dXJuIG5lKCkuY3VzdG9tRXJyb3J9dmFyIFJvO1JvfHwoUm89e30pO2Z1bmN0aW9uIFloKGUpe3JldHVybiB0YShFdCxlKX1mdW5jdGlvbiBKYihlKXtyZXR1cm4gbmEoQXQsZSl9ZnVuY3Rpb24gS2IoZSl7cmV0dXJuIG9hKE90LGUpfWZ1bmN0aW9uIFdiKGUpe3JldHVybiByYShSdCxlKX1jb25zdCBQYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpBdCxab2RJU09EYXRlVGltZTpFdCxab2RJU09EdXJhdGlvbjpSdCxab2RJU09UaW1lOk90LGRhdGU6SmIsZGF0ZXRpbWU6WWgsZHVyYXRpb246V2IsdGltZTpLYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxTPXsuLi5WYiwuLi5IYixpc286UGN9LEdiPW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIFFiKGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIFB1KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIFliKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gWGIoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpZYihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIGV2KGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBhIG9mIHMpe2NvbnN0IGk9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGEpO2kuc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6aS5lcnJvci5pc3N1ZXMsaW5wdXQ6YSxwYXRoOlthXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gT3MoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgaT1PcyhhLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChpKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgYT1PcyhlW3NdLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2F9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCB0dj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLG52PW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBZdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShZdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT50di5oYXModCk/WXQobik6IW52Lmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoWXQpKX1mdW5jdGlvbiBDdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gb3YoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7Y29uc3QgaT1PcyhyW2FdLG5ldyBTZXQpO2lmKGk9PT1udWxsKWNvbnRpbnVlO2NvbnN0IHU9cy5nZXQoaSk7aWYodT09PXZvaWQgMCl7cy5zZXQoaSxhKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7YX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7dX1gLGlucHV0OnIscGF0aDpbYV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGE9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBpPTA7Zm9yKGNvbnN0IHUgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZSh1KS5zdWNjZXNzJiYrK2k+PWEpYnJlYWs7aTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7Q3Uocyl9OyBmb3VuZCAke2l9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmaT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtDdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiBFdShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP1MuYW55KCk6bGUoZSx0KX1jb25zdCBydj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIFhoKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIFMubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPVhiKHIsdCksYT1sZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsYSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxhfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiBTLm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIFMubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGE9PnR5cGVvZiBhPT0ic3RyaW5nIikpcmV0dXJuIFMuZW51bShyKTtjb25zdCBzPXIubWFwKGE9PlMubGl0ZXJhbChhKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTpTLnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIFMubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBhPXsuLi5lLHR5cGU6c307cmV0dXJuIFhoKGEsdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP1MubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTpTLnVuaW9uKHIpfWlmKCFuKXJldHVybiBTLmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPVMuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKFMuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayhTLnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayhTLnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayhTLmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2soUy5yZWdleChydikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayhTLmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2soUy5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayhTLmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2soUy5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2soUy5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2soUy5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2soUy5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayhTLmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKFMuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKFMuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2soUy5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKFMuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKFMuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayhTLmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2soUy5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2soUy5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayhTLmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKFMudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKFMueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKFMua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP1MubnVtYmVyKCkuaW50KCk6Uy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPVMuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289Uy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxhPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGk9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP2xlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLGJdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IHY9bGUoYix0KTt1dChyLG0sYS5oYXMobSk/djp2Lm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyxiPU9iamVjdC5rZXlzKG0pLHY9W107Zm9yKGNvbnN0IHcgb2YgYil7Y29uc3QgJD1sZShtW3ddLHQpLFo9Uy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKHcpKTt2LnB1c2goUy5sb29zZVJlY29yZChaLCQpKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2goUy5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLnYpLF8ubGVuZ3RoPT09MClvPVMub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCB3PVMuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCAkPTI7JDxfLmxlbmd0aDskKyspdz1TLmludGVyc2VjdGlvbih3LF9bJF0pO289d31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IHc9T2JqZWN0LmtleXMociksJD1iLm1hcChJPT5uZXcgUmVnRXhwKEkpKSxaPW87bz1vLmNoZWNrKEk9PntpZighVmUoSS52YWx1ZSkpcmV0dXJuO2NvbnN0IEc9W107Zm9yKGNvbnN0IG9lIG9mIE9iamVjdC5rZXlzKEkudmFsdWUpKXcuaW5jbHVkZXMob2UpfHwkLnNvbWUoSj0+Si50ZXN0KG9lKSl8fEcucHVzaChvZSk7Ry5sZW5ndGgmJkkuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkcsaW5wdXQ6SS52YWx1ZSxpbnN0Olp9KX0pfX1lbHNle2NvbnN0IG09Uy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289bS5zdHJpY3QoKTppP289bS5jYXRjaGFsbChpKTpvPW0ucGFzc3Rocm91Z2goKX1jb25zdCB1PWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsbD10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGQ9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZih1fHxsIT09dm9pZCAwfHxkIT09dm9pZCAwKXtsZXQgbTtpZih1KXtjb25zdCBiPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lczttPWxlKGIsdCl9bz1ldihvLHtrZXlTY2hlbWE6bSxtaW5Qcm9wZXJ0aWVzOmwsbWF4UHJvcGVydGllczpkfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9ci5tYXAobT0+bGUobSx0KSksdT1QdShpLGEpLGw9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6RXUocyx0KSxkPVMudHVwbGUodSk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgYT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGk9cy5tYXAobT0+bGUobSx0KSksdT1QdShpLGEpLGw9RXUoZS5hZGRpdGlvbmFsSXRlbXMsdCksZD1TLnR1cGxlKHUpO289bD9kLnJlc3QobCk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGE9bGUocyx0KTtsZXQgaT1TLmFycmF5KGEpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGk9aS5tYXgoZS5tYXhJdGVtcykpLG89aX1lbHNlIG89Uy5hcnJheShTLmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89b3Yobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/bGUoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIGxlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9TLmFueSgpOlMubmV2ZXIoKTtsZXQgbj1YaChlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgaT1lLmFueU9mLm1hcChsPT5sZShsLHQpKSx1PVMudW5pb24oaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBpPWUub25lT2YubWFwKGw9PmxlKGwsdCkpLHU9Uy54b3IoaSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sdSk6dX1pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjpTLmFueSgpO2Vsc2V7bGV0IGk9bz9uOmxlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgdT1vPzA6MTtmb3IobGV0IGw9dTtsPGUuYWxsT2YubGVuZ3RoO2wrKylpPVMuaW50ZXJzZWN0aW9uKGksbGUoZS5hbGxPZltsXSx0KSk7bj1pfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49Uy5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj1TLnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBpIG9mIHMpaSBpbiBlJiYocltpXT1lW2ldKTtjb25zdCBhPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgaSBvZiBhKWkgaW4gZSYmKHJbaV09ZVtpXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYhWXQoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBpIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbaV0hPT12b2lkIDAmJihyW2ldPWVbaV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIVl0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgaSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVtpXSE9PXZvaWQgMCYmKHJbaV09ZVtpXSl9Zm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoZSkpR2IuaGFzKGkpfHx1dChyLGksZVtpXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gZWYoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89UWIobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/PyRlfTtyZXR1cm4gbGUobixzKX1mdW5jdGlvbiB0ZihlKXtyZXR1cm4gaWEoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90OkEobi5vcHRpb25zKX19KX1mdW5jdGlvbiBzdihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBRKGUsdWUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gbmYoZSl7cmV0dXJuIHN2KGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBpdihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT9uZihlKTplLmlufWZ1bmN0aW9uIG9mKGUpe3JldHVybiBpYShlLHtwaXBlOnQ9Pml2KHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/Vih0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGlhKGUse3BpcGU6dD0+bmYodC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGF2KGUpe3JldHVybiBpaChDdCxlKX1mdW5jdGlvbiBjdihlKXtyZXR1cm4gZGgoWnQsZSl9ZnVuY3Rpb24gdXYoZSl7cmV0dXJuIHZoKGp0LGUpfWZ1bmN0aW9uIGx2KGUpe3JldHVybiBfaChNdCxlKX1mdW5jdGlvbiBkdihlKXtyZXR1cm4gRWgobm8sZSl9Y29uc3Qgc2Y9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDpsdixib29sZWFuOnV2LGRhdGU6ZHYsbnVtYmVyOmN2LHN0cmluZzphdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxBdT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOkZzLCRpbnB1dDpUaSwkb3V0cHV0OnppLElOVkFMSUQ6eGksTkVWRVI6SHMsVGltZVByZWNpc2lvbjplYSxab2RBbnk6a3IsWm9kQXJyYXk6enIsWm9kQmFzZTY0OlduLFpvZEJhc2U2NFVSTDpHbixab2RCaWdJbnQ6TXQsWm9kQmlnSW50Rm9ybWF0OlhuLFpvZEJvb2xlYW46anQsWm9kQ0lEUnY0OkpuLFpvZENJRFJ2NjpLbixab2RDVUlEOkRuLFpvZENVSUQyOkxuLFpvZENhdGNoOkhyLFpvZENvZGVjOkh0LFpvZENvbXBpbGVBc3luY0Vycm9yOlBpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOkNpLFpvZENyZWRpdENhcmQ6Z3IsWm9kQ3VzdG9tOkZ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpXZSxab2REYXRlOm5vLFpvZERlZmF1bHQ6TXIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOklyLFpvZEUxNjQ6UW4sWm9kRW1haWw6Wm4sWm9kRW1vamk6TW4sWm9kRW51bTphdCxab2RFcnJvcjpLaCxab2RFeGFjdE9wdGlvbmFsOnNvLFpvZEZpbGU6UnIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBSb30sWm9kRnVuY3Rpb246ZXMsWm9kR1VJRDpqbixab2RJQkFOOmJyLFpvZElQdjQ6Rm4sWm9kSVB2NjpWbixab2RJU09EYXRlOkF0LFpvZElTT0RhdGVUaW1lOkV0LFpvZElTT0R1cmF0aW9uOlJ0LFpvZElTT1RpbWU6T3QsWm9kSW5zdGFuY2VPZjpycyxab2RJbnRlcnNlY3Rpb246eHIsWm9kSXNzdWVDb2RlOldoLFpvZEpXVDpZbixab2RLU1VJRDpIbixab2RMYXp5OlFyLFpvZExpdGVyYWw6T3IsWm9kTUFDOm1yLFpvZE1hcDpFcixab2ROYU46VnIsWm9kTmFub0lEOnFuLFpvZE5ldmVyOiRyLFpvZE5vbk9wdGlvbmFsOmlvLFpvZE51bGw6X3IsWm9kTnVsbGFibGU6anIsWm9kTnVtYmVyOlp0LFpvZE51bWJlckZvcm1hdDpHZSxab2RPYmplY3Q6cXQsWm9kT3B0aW9uYWw6VXQsWm9kUGlwZTpCdCxab2RQcmVmYXVsdDpEcixab2RQcmVwcm9jZXNzOkpyLFpvZFByb21pc2U6WHIsWm9kUmVhZG9ubHk6S3IsWm9kUmVhbEVycm9yOmdlLFpvZFJlY29yZDppdCxab2RTZXQ6QXIsWm9kU3RyaW5nOkN0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6QnIsWm9kU3ltYm9sOnZyLFpvZFRlbXBsYXRlTGl0ZXJhbDpHcixab2RUcmFuc2Zvcm06TnIsWm9kVHVwbGU6UHIsWm9kVHlwZTpFLFpvZFVMSUQ6VW4sWm9kVVJMOk50LFpvZFVVSUQ6Q2UsWm9kVW5kZWZpbmVkOnlyLFpvZFVuaW9uOkR0LFpvZFVua25vd246d3IsWm9kVm9pZDpTcixab2RYSUQ6Qm4sWm9kWG9yOlRyLF9ab2RTdHJpbmc6Tm4sX2RlZmF1bHQ6cXIsX2Z1bmN0aW9uOiR0LGFueTp0byxhcnJheTp4LGJhc2U2NDpEYSxiYXNlNjR1cmw6TGEsYmlnaW50OnRjLGJvb2xlYW46TCxjYXRjaDpGcixjaGVjazokYyxjaWRydjQ6TWEsY2lkcnY2OnFhLGNsb25lOlEsY29kZWM6eWMsY29lcmNlOnNmLGNvbXBpbGU6RWksY29uZmlnOm5lLGNvcmU6RmgsY3JlZGl0Q2FyZDpCYSxjdWlkOkNhLGN1aWQyOkVhLGN1cnJlbmN5Q29kZTpXYSxjdXN0b206dHMsZGF0ZTppYyxkZWNvZGU6aGEsZGVjb2RlQXN5bmM6bWEsZGVlcFBhcnRpYWw6dGYsZGVzY3JpYmU6U2MsZGlzY3JpbWluYXRlZFVuaW9uOm9vLGUxNjQ6VWEsZW1haWw6X2EsZW1vamk6eGEsZW5jb2RlOnBhLGVuY29kZUFzeW5jOmZhLGVuZHNXaXRoOkluLGVudW06aWUsZXhhY3RPcHRpb25hbDpacixmaWxlOm1jLGZsYXR0ZW5FcnJvcjpZbyxmbG9hdDMyOlFhLGZsb2F0NjQ6WWEsZm9ybWF0RXJyb3I6WG8sZnJvbUpTT05TY2hlbWE6ZWYsZnVuY3Rpb246JHQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjp2aSxnZXRFcnJvck1hcDpRaCxnbG9iYWxSZWdpc3RyeTokZSxndDpxZSxndGU6eWUsZ3VpZDprYSxoYXNoOkdhLGhleDpLYSxob3N0bmFtZTpKYSxodHRwVXJsOklhLGliYW46SGEsaW5jbHVkZXM6em4saW5wdXQ6b2YsaW5zdGFuY2VvZjpUYyxpbnQ6b24saW50MzI6WGEsaW50NjQ6bmMsaW50ZXJzZWN0aW9uOkx0LGludmVydENvZGVjOl9jLGlwdjQ6TmEsaXB2NjpqYSxpc286UGMsanNvbjp4Yyxqd3Q6RmEsa2V5b2Y6YWMsa3N1aWQ6UmEsbGF6eTpZcixsZW5ndGg6eHQsbGl0ZXJhbDpmLGxvY2FsZXM6U2ksbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6ZGMsbG93ZXJjYXNlOiRuLGx0Ok1lLGx0ZTp2ZSxtYWM6WmEsbWFwOnBjLG1heExlbmd0aDpJdCxtYXhTaXplOmx0LG1lbW9pemVyOmlyLG1ldGE6emMsbWltZTpQbixtaW5MZW5ndGg6SmUsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOnJ0LG5hbjp2YyxuYW5vaWQ6UGEsbmF0aXZlRW51bTpmYyxuZWdhdGl2ZTpkcixuZXZlcjpzdCxub25uZWdhdGl2ZTpocixub25vcHRpb25hbDpVcixub25wb3NpdGl2ZTpwcixub3JtYWxpemU6Q24sbnVsbDplbyxudWxsYWJsZTp3dCxudWxsaXNoOmdjLG51bWJlcjpDLG9iamVjdDpnLG9wdGlvbmFsOlYsb3V0cHV0OnJmLG92ZXJ3cml0ZTpPZSxwYXJzZTpjYSxwYXJzZUFzeW5jOnVhLHBhcnRpYWxSZWNvcmQ6bGMscGlwZTpybixwb3NpdGl2ZTpscixwcmVmYXVsdDpMcixwcmVwcm9jZXNzOmFvLHByZXR0aWZ5RXJyb3I6SnMscHJvbWlzZTp3Yyxwcm9wZXJ0aWVzOnhuLHByb3BlcnR5OmZyLHJlYWRvbmx5OldyLHJlY29yZDpOLHJlZmluZTpucyxyZWdleDp3bixyZWdleGVzOnJyLHJlZ2lzdHJ5OmFyLHNhZmVEZWNvZGU6YmEsc2FmZURlY29kZUFzeW5jOnlhLHNhZmVFbmNvZGU6Z2Esc2FmZUVuY29kZUFzeW5jOnZhLHNhZmVQYXJzZTpsYSxzYWZlUGFyc2VBc3luYzpkYSxzZXQ6aGMsc2V0RXJyb3JNYXA6R2gsc2l6ZTpUdCxzbHVnaWZ5OlJuLHN0YXJ0c1dpdGg6VG4sc3RyaWN0T2JqZWN0OmNjLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpWYSxzdHJpbmdib29sOkljLHN1Y2Nlc3M6YmMsc3VwZXJSZWZpbmU6b3Msc3ltYm9sOnJjLHRlbXBsYXRlTGl0ZXJhbDprYyx0b0pTT05TY2hlbWE6c2EsdG9Mb3dlckNhc2U6QW4sdG9VcHBlckNhc2U6T24sdG9ab2Q6Qm8sdHJhbnNmb3JtOnJvLHRyZWVpZnlFcnJvcjpWcyx0cmltOkVuLHR1cGxlOkNyLHVpbnQzMjplYyx1aW50NjQ6b2MsdWxpZDpBYSx1bmRlZmluZWQ6a3QsdW5pb246QSx1bmtub3duOkQsdXBwZXJjYXNlOlNuLHVybDpUYSx1dGlsOkJzLHV1aWQ6d2EsdXVpZHY0OiRhLHV1aWR2NjpTYSx1dWlkdjc6emEsdmFsaWRhdGU6dHIsdmFsaWRhdGVBc3luYzpucix2b2lkOnNjLHdpdGhQYXJzZXI6QWkseGlkOk9hLHhvcjp1Y30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxwdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOkZzLCRpbnB1dDpUaSwkb3V0cHV0OnppLElOVkFMSUQ6eGksTkVWRVI6SHMsVGltZVByZWNpc2lvbjplYSxab2RBbnk6a3IsWm9kQXJyYXk6enIsWm9kQmFzZTY0OlduLFpvZEJhc2U2NFVSTDpHbixab2RCaWdJbnQ6TXQsWm9kQmlnSW50Rm9ybWF0OlhuLFpvZEJvb2xlYW46anQsWm9kQ0lEUnY0OkpuLFpvZENJRFJ2NjpLbixab2RDVUlEOkRuLFpvZENVSUQyOkxuLFpvZENhdGNoOkhyLFpvZENvZGVjOkh0LFpvZENvbXBpbGVBc3luY0Vycm9yOlBpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOkNpLFpvZENyZWRpdENhcmQ6Z3IsWm9kQ3VzdG9tOkZ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpXZSxab2REYXRlOm5vLFpvZERlZmF1bHQ6TXIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOklyLFpvZEUxNjQ6UW4sWm9kRW1haWw6Wm4sWm9kRW1vamk6TW4sWm9kRW51bTphdCxab2RFcnJvcjpLaCxab2RFeGFjdE9wdGlvbmFsOnNvLFpvZEZpbGU6UnIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBSb30sWm9kRnVuY3Rpb246ZXMsWm9kR1VJRDpqbixab2RJQkFOOmJyLFpvZElQdjQ6Rm4sWm9kSVB2NjpWbixab2RJU09EYXRlOkF0LFpvZElTT0RhdGVUaW1lOkV0LFpvZElTT0R1cmF0aW9uOlJ0LFpvZElTT1RpbWU6T3QsWm9kSW5zdGFuY2VPZjpycyxab2RJbnRlcnNlY3Rpb246eHIsWm9kSXNzdWVDb2RlOldoLFpvZEpXVDpZbixab2RLU1VJRDpIbixab2RMYXp5OlFyLFpvZExpdGVyYWw6T3IsWm9kTUFDOm1yLFpvZE1hcDpFcixab2ROYU46VnIsWm9kTmFub0lEOnFuLFpvZE5ldmVyOiRyLFpvZE5vbk9wdGlvbmFsOmlvLFpvZE51bGw6X3IsWm9kTnVsbGFibGU6anIsWm9kTnVtYmVyOlp0LFpvZE51bWJlckZvcm1hdDpHZSxab2RPYmplY3Q6cXQsWm9kT3B0aW9uYWw6VXQsWm9kUGlwZTpCdCxab2RQcmVmYXVsdDpEcixab2RQcmVwcm9jZXNzOkpyLFpvZFByb21pc2U6WHIsWm9kUmVhZG9ubHk6S3IsWm9kUmVhbEVycm9yOmdlLFpvZFJlY29yZDppdCxab2RTZXQ6QXIsWm9kU3RyaW5nOkN0LFpvZFN0cmluZ0Zvcm1hdDpVLFpvZFN1Y2Nlc3M6QnIsWm9kU3ltYm9sOnZyLFpvZFRlbXBsYXRlTGl0ZXJhbDpHcixab2RUcmFuc2Zvcm06TnIsWm9kVHVwbGU6UHIsWm9kVHlwZTpFLFpvZFVMSUQ6VW4sWm9kVVJMOk50LFpvZFVVSUQ6Q2UsWm9kVW5kZWZpbmVkOnlyLFpvZFVuaW9uOkR0LFpvZFVua25vd246d3IsWm9kVm9pZDpTcixab2RYSUQ6Qm4sWm9kWG9yOlRyLF9ab2RTdHJpbmc6Tm4sX2RlZmF1bHQ6cXIsX2Z1bmN0aW9uOiR0LGFueTp0byxhcnJheTp4LGJhc2U2NDpEYSxiYXNlNjR1cmw6TGEsYmlnaW50OnRjLGJvb2xlYW46TCxjYXRjaDpGcixjaGVjazokYyxjaWRydjQ6TWEsY2lkcnY2OnFhLGNsb25lOlEsY29kZWM6eWMsY29lcmNlOnNmLGNvbXBpbGU6RWksY29uZmlnOm5lLGNvcmU6RmgsY3JlZGl0Q2FyZDpCYSxjdWlkOkNhLGN1aWQyOkVhLGN1cnJlbmN5Q29kZTpXYSxjdXN0b206dHMsZGF0ZTppYyxkZWNvZGU6aGEsZGVjb2RlQXN5bmM6bWEsZGVlcFBhcnRpYWw6dGYsZGVmYXVsdDpBdSxkZXNjcmliZTpTYyxkaXNjcmltaW5hdGVkVW5pb246b28sZTE2NDpVYSxlbWFpbDpfYSxlbW9qaTp4YSxlbmNvZGU6cGEsZW5jb2RlQXN5bmM6ZmEsZW5kc1dpdGg6SW4sZW51bTppZSxleGFjdE9wdGlvbmFsOlpyLGZpbGU6bWMsZmxhdHRlbkVycm9yOllvLGZsb2F0MzI6UWEsZmxvYXQ2NDpZYSxmb3JtYXRFcnJvcjpYbyxmcm9tSlNPTlNjaGVtYTplZixmdW5jdGlvbjokdCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOnZpLGdldEVycm9yTWFwOlFoLGdsb2JhbFJlZ2lzdHJ5OiRlLGd0OnFlLGd0ZTp5ZSxndWlkOmthLGhhc2g6R2EsaGV4OkthLGhvc3RuYW1lOkphLGh0dHBVcmw6SWEsaWJhbjpIYSxpbmNsdWRlczp6bixpbnB1dDpvZixpbnN0YW5jZW9mOlRjLGludDpvbixpbnQzMjpYYSxpbnQ2NDpuYyxpbnRlcnNlY3Rpb246THQsaW52ZXJ0Q29kZWM6X2MsaXB2NDpOYSxpcHY2OmphLGlzbzpQYyxqc29uOnhjLGp3dDpGYSxrZXlvZjphYyxrc3VpZDpSYSxsYXp5OllyLGxlbmd0aDp4dCxsaXRlcmFsOmYsbG9jYWxlczpTaSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDpkYyxsb3dlcmNhc2U6JG4sbHQ6TWUsbHRlOnZlLG1hYzpaYSxtYXA6cGMsbWF4TGVuZ3RoOkl0LG1heFNpemU6bHQsbWVtb2l6ZXI6aXIsbWV0YTp6YyxtaW1lOlBuLG1pbkxlbmd0aDpKZSxtaW5TaXplOkRlLG11bHRpcGxlT2Y6cnQsbmFuOnZjLG5hbm9pZDpQYSxuYXRpdmVFbnVtOmZjLG5lZ2F0aXZlOmRyLG5ldmVyOnN0LG5vbm5lZ2F0aXZlOmhyLG5vbm9wdGlvbmFsOlVyLG5vbnBvc2l0aXZlOnByLG5vcm1hbGl6ZTpDbixudWxsOmVvLG51bGxhYmxlOnd0LG51bGxpc2g6Z2MsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6VixvdXRwdXQ6cmYsb3ZlcndyaXRlOk9lLHBhcnNlOmNhLHBhcnNlQXN5bmM6dWEscGFydGlhbFJlY29yZDpsYyxwaXBlOnJuLHBvc2l0aXZlOmxyLHByZWZhdWx0OkxyLHByZXByb2Nlc3M6YW8scHJldHRpZnlFcnJvcjpKcyxwcm9taXNlOndjLHByb3BlcnRpZXM6eG4scHJvcGVydHk6ZnIscmVhZG9ubHk6V3IscmVjb3JkOk4scmVmaW5lOm5zLHJlZ2V4OnduLHJlZ2V4ZXM6cnIscmVnaXN0cnk6YXIsc2FmZURlY29kZTpiYSxzYWZlRGVjb2RlQXN5bmM6eWEsc2FmZUVuY29kZTpnYSxzYWZlRW5jb2RlQXN5bmM6dmEsc2FmZVBhcnNlOmxhLHNhZmVQYXJzZUFzeW5jOmRhLHNldDpoYyxzZXRFcnJvck1hcDpHaCxzaXplOlR0LHNsdWdpZnk6Um4sc3RhcnRzV2l0aDpUbixzdHJpY3RPYmplY3Q6Y2Msc3RyaW5nOmgsc3RyaW5nRm9ybWF0OlZhLHN0cmluZ2Jvb2w6SWMsc3VjY2VzczpiYyxzdXBlclJlZmluZTpvcyxzeW1ib2w6cmMsdGVtcGxhdGVMaXRlcmFsOmtjLHRvSlNPTlNjaGVtYTpzYSx0b0xvd2VyQ2FzZTpBbix0b1VwcGVyQ2FzZTpPbix0b1pvZDpCbyx0cmFuc2Zvcm06cm8sdHJlZWlmeUVycm9yOlZzLHRyaW06RW4sdHVwbGU6Q3IsdWludDMyOmVjLHVpbnQ2NDpvYyx1bGlkOkFhLHVuZGVmaW5lZDprdCx1bmlvbjpBLHVua25vd246RCx1cHBlcmNhc2U6U24sdXJsOlRhLHV0aWw6QnMsdXVpZDp3YSx1dWlkdjQ6JGEsdXVpZHY2OlNhLHV1aWR2Nzp6YSx2YWxpZGF0ZTp0cix2YWxpZGF0ZUFzeW5jOm5yLHZvaWQ6c2Msd2l0aFBhcnNlcjpBaSx4aWQ6T2EseG9yOnVjLHo6QXV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksZXQ9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsc3M9IjIuMCIsdGU9dHMoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSksYWY9QShbaCgpLEMoKS5pbnQoKV0pLGNmPWgoKTtzZSh7dHRsOkMoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpDKCkub3B0aW9uYWwoKX0pO2NvbnN0IGh2PWcoe3R0bDpDKCkub3B0aW9uYWwoKX0pLGZ2PWcoe3Rhc2tJZDpoKCl9KSxDYz1zZSh7cHJvZ3Jlc3NUb2tlbjphZi5vcHRpb25hbCgpLFtldF06ZnYub3B0aW9uYWwoKX0pLGtlPWcoe19tZXRhOkNjLm9wdGlvbmFsKCl9KSxjbz1rZS5leHRlbmQoe3Rhc2s6aHYub3B0aW9uYWwoKX0pLG12PWU9PmNvLnNhZmVQYXJzZShlKS5zdWNjZXNzLGFlPWcoe21ldGhvZDpoKCkscGFyYW1zOmtlLmxvb3NlKCkub3B0aW9uYWwoKX0pLFRlPWcoe19tZXRhOkNjLm9wdGlvbmFsKCl9KSxJZT1nKHttZXRob2Q6aCgpLHBhcmFtczpUZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxjZT1zZSh7X21ldGE6Q2Mub3B0aW9uYWwoKX0pLHVvPUEoW2goKSxDKCkuaW50KCldKSx1Zj1nKHtqc29ucnBjOmYoc3MpLGlkOnVvLC4uLmFlLnNoYXBlfSkuc3RyaWN0KCksT3U9ZT0+dWYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsbGY9Zyh7anNvbnJwYzpmKHNzKSwuLi5JZS5zaGFwZX0pLnN0cmljdCgpLGd2PWU9PmxmLnNhZmVQYXJzZShlKS5zdWNjZXNzLEVjPWcoe2pzb25ycGM6ZihzcyksaWQ6dW8scmVzdWx0OmNlfSkuc3RyaWN0KCksJG89ZT0+RWMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3M7dmFyIEI7KGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0aW9uQ2xvc2VkPS0zMmUzXT0iQ29ubmVjdGlvbkNsb3NlZCIsZVtlLlJlcXVlc3RUaW1lb3V0PS0zMjAwMV09IlJlcXVlc3RUaW1lb3V0IixlW2UuUGFyc2VFcnJvcj0tMzI3MDBdPSJQYXJzZUVycm9yIixlW2UuSW52YWxpZFJlcXVlc3Q9LTMyNjAwXT0iSW52YWxpZFJlcXVlc3QiLGVbZS5NZXRob2ROb3RGb3VuZD0tMzI2MDFdPSJNZXRob2ROb3RGb3VuZCIsZVtlLkludmFsaWRQYXJhbXM9LTMyNjAyXT0iSW52YWxpZFBhcmFtcyIsZVtlLkludGVybmFsRXJyb3I9LTMyNjAzXT0iSW50ZXJuYWxFcnJvciIsZVtlLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQ9LTMyMDQyXT0iVXJsRWxpY2l0YXRpb25SZXF1aXJlZCJ9KShCfHwoQj17fSkpO2NvbnN0IEFjPWcoe2pzb25ycGM6ZihzcyksaWQ6dW8ub3B0aW9uYWwoKSxlcnJvcjpnKHtjb2RlOkMoKS5pbnQoKSxtZXNzYWdlOmgoKSxkYXRhOkQoKS5vcHRpb25hbCgpfSl9KS5zdHJpY3QoKSxidj1lPT5BYy5zYWZlUGFyc2UoZSkuc3VjY2Vzcyx2dj1BKFt1ZixsZixFYyxBY10pO0EoW0VjLEFjXSk7Y29uc3QgT2M9Y2Uuc3RyaWN0KCkseXY9VGUuZXh0ZW5kKHtyZXF1ZXN0SWQ6dW8ub3B0aW9uYWwoKSxyZWFzb246aCgpLm9wdGlvbmFsKCl9KSxSYz1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczp5dn0pLF92PWcoe3NyYzpoKCksbWltZVR5cGU6aCgpLm9wdGlvbmFsKCksc2l6ZXM6eChoKCkpLm9wdGlvbmFsKCksdGhlbWU6aWUoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLGxvPWcoe2ljb25zOngoX3YpLm9wdGlvbmFsKCl9KSxTdD1nKHtuYW1lOmgoKSx0aXRsZTpoKCkub3B0aW9uYWwoKX0pLGlzPVN0LmV4dGVuZCh7Li4uU3Quc2hhcGUsLi4ubG8uc2hhcGUsdmVyc2lvbjpoKCksd2Vic2l0ZVVybDpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKX0pLGt2PUx0KGcoe2FwcGx5RGVmYXVsdHM6TCgpLm9wdGlvbmFsKCl9KSxOKGgoKSxEKCkpKSx3dj1hbyhlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLEx0KGcoe2Zvcm06a3Yub3B0aW9uYWwoKSx1cmw6dGUub3B0aW9uYWwoKX0pLE4oaCgpLEQoKSkub3B0aW9uYWwoKSkpLCR2PXNlKHtsaXN0OnRlLm9wdGlvbmFsKCksY2FuY2VsOnRlLm9wdGlvbmFsKCkscmVxdWVzdHM6c2Uoe3NhbXBsaW5nOnNlKHtjcmVhdGVNZXNzYWdlOnRlLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnNlKHtjcmVhdGU6dGUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksU3Y9c2Uoe2xpc3Q6dGUub3B0aW9uYWwoKSxjYW5jZWw6dGUub3B0aW9uYWwoKSxyZXF1ZXN0czpzZSh7dG9vbHM6c2Uoe2NhbGw6dGUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksenY9Zyh7ZXhwZXJpbWVudGFsOk4oaCgpLHRlKS5vcHRpb25hbCgpLHNhbXBsaW5nOmcoe2NvbnRleHQ6dGUub3B0aW9uYWwoKSx0b29sczp0ZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjp3di5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczokdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6TihoKCksdGUpLm9wdGlvbmFsKCl9KSxUdj1rZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOnp2LGNsaWVudEluZm86aXN9KSxJdj1hZS5leHRlbmQoe21ldGhvZDpmKCJpbml0aWFsaXplIikscGFyYW1zOlR2fSkseHY9Zyh7ZXhwZXJpbWVudGFsOk4oaCgpLHRlKS5vcHRpb25hbCgpLGxvZ2dpbmc6dGUub3B0aW9uYWwoKSxjb21wbGV0aW9uczp0ZS5vcHRpb25hbCgpLHByb21wdHM6Zyh7bGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczpnKHtzdWJzY3JpYmU6TCgpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6TCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpTdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6TihoKCksdGUpLm9wdGlvbmFsKCl9KSxQdj1jZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOnh2LHNlcnZlckluZm86aXMsaW5zdHJ1Y3Rpb25zOmgoKS5vcHRpb25hbCgpfSksQ3Y9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSksYXM9YWUuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczprZS5vcHRpb25hbCgpfSksRXY9Zyh7cHJvZ3Jlc3M6QygpLHRvdGFsOlYoQygpKSxtZXNzYWdlOlYoaCgpKX0pLEF2PWcoey4uLlRlLnNoYXBlLC4uLkV2LnNoYXBlLHByb2dyZXNzVG9rZW46YWZ9KSxOYz1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOkF2fSksT3Y9a2UuZXh0ZW5kKHtjdXJzb3I6Y2Yub3B0aW9uYWwoKX0pLHBvPWFlLmV4dGVuZCh7cGFyYW1zOk92Lm9wdGlvbmFsKCl9KSxobz1jZS5leHRlbmQoe25leHRDdXJzb3I6Y2Yub3B0aW9uYWwoKX0pLFJ2PWllKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLGZvPWcoe3Rhc2tJZDpoKCksc3RhdHVzOlJ2LHR0bDpBKFtDKCksZW8oKV0pLGNyZWF0ZWRBdDpoKCksbGFzdFVwZGF0ZWRBdDpoKCkscG9sbEludGVydmFsOlYoQygpKSxzdGF0dXNNZXNzYWdlOlYoaCgpKX0pLFpjPWNlLmV4dGVuZCh7dGFzazpmb30pLE52PVRlLm1lcmdlKGZvKSxObz1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpOdn0pLGpjPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2dldCIpLHBhcmFtczprZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLE1jPWNlLm1lcmdlKGZvKSxxYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6a2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KTtjZS5sb29zZSgpO2NvbnN0IERjPXBvLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2xpc3QiKX0pLExjPWhvLmV4dGVuZCh7dGFza3M6eChmbyl9KSxVYz1hZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6a2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxadj1jZS5tZXJnZShmbyksZGY9Zyh7dXJpOmgoKSxtaW1lVHlwZTpWKGgoKSksX21ldGE6TihoKCksRCgpKS5vcHRpb25hbCgpfSkscGY9ZGYuZXh0ZW5kKHt0ZXh0OmgoKX0pLEJjPWgoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksaGY9ZGYuZXh0ZW5kKHtibG9iOkJjfSksbW89aWUoWyJ1c2VyIiwiYXNzaXN0YW50Il0pLFZ0PWcoe2F1ZGllbmNlOngobW8pLm9wdGlvbmFsKCkscHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxsYXN0TW9kaWZpZWQ6WWgoe29mZnNldDohMH0pLm9wdGlvbmFsKCl9KSxmZj1nKHsuLi5TdC5zaGFwZSwuLi5sby5zaGFwZSx1cmk6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxtaW1lVHlwZTpWKGgoKSksc2l6ZTpWKEMoKSksYW5ub3RhdGlvbnM6VnQub3B0aW9uYWwoKSxfbWV0YTpWKHNlKHt9KSl9KSxqdj1nKHsuLi5TdC5zaGFwZSwuLi5sby5zaGFwZSx1cmlUZW1wbGF0ZTpoKCksZGVzY3JpcHRpb246VihoKCkpLG1pbWVUeXBlOlYoaCgpKSxhbm5vdGF0aW9uczpWdC5vcHRpb25hbCgpLF9tZXRhOlYoc2Uoe30pKX0pLE12PXBvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxtZj1oby5leHRlbmQoe3Jlc291cmNlczp4KGZmKX0pLHF2PXBvLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksRHY9aG8uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczp4KGp2KX0pLEhjPWtlLmV4dGVuZCh7dXJpOmgoKX0pLEx2PUhjLFV2PWFlLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOkx2fSksZ2Y9Y2UuZXh0ZW5kKHtjb250ZW50czp4KEEoW3BmLGhmXSkpfSksQnY9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlRlLm9wdGlvbmFsKCl9KSxIdj1IYyxGdj1hZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOkh2fSksVnY9SGMsSnY9YWUuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOlZ2fSksS3Y9VGUuZXh0ZW5kKHt1cmk6aCgpfSksV3Y9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpLdn0pLEd2PWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOlYoaCgpKSxyZXF1aXJlZDpWKEwoKSl9KSxRdj1nKHsuLi5TdC5zaGFwZSwuLi5sby5zaGFwZSxkZXNjcmlwdGlvbjpWKGgoKSksYXJndW1lbnRzOlYoeChHdikpLF9tZXRhOlYoc2Uoe30pKX0pLFl2PXBvLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksWHY9aG8uZXh0ZW5kKHtwcm9tcHRzOngoUXYpfSksZXk9a2UuZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6TihoKCksaCgpKS5vcHRpb25hbCgpfSksdHk9YWUuZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9nZXQiKSxwYXJhbXM6ZXl9KSxGYz1nKHt0eXBlOmYoInRleHQiKSx0ZXh0OmgoKSxhbm5vdGF0aW9uczpWdC5vcHRpb25hbCgpLF9tZXRhOk4oaCgpLEQoKSkub3B0aW9uYWwoKX0pLFZjPWcoe3R5cGU6ZigiaW1hZ2UiKSxkYXRhOkJjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpWdC5vcHRpb25hbCgpLF9tZXRhOk4oaCgpLEQoKSkub3B0aW9uYWwoKX0pLEpjPWcoe3R5cGU6ZigiYXVkaW8iKSxkYXRhOkJjLG1pbWVUeXBlOmgoKSxhbm5vdGF0aW9uczpWdC5vcHRpb25hbCgpLF9tZXRhOk4oaCgpLEQoKSkub3B0aW9uYWwoKX0pLG55PWcoe3R5cGU6ZigidG9vbF91c2UiKSxuYW1lOmgoKSxpZDpoKCksaW5wdXQ6TihoKCksRCgpKSxfbWV0YTpOKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxiZj1nKHt0eXBlOmYoInJlc291cmNlIikscmVzb3VyY2U6QShbcGYsaGZdKSxhbm5vdGF0aW9uczpWdC5vcHRpb25hbCgpLF9tZXRhOk4oaCgpLEQoKSkub3B0aW9uYWwoKX0pLHZmPWZmLmV4dGVuZCh7dHlwZTpmKCJyZXNvdXJjZV9saW5rIil9KSxnbz1BKFtGYyxWYyxKYyx2ZixiZl0pLG95PWcoe3JvbGU6bW8sY29udGVudDpnb30pLHJ5PWNlLmV4dGVuZCh7ZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWVzc2FnZXM6eChveSl9KSxzeT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlRlLm9wdGlvbmFsKCl9KSxpeT1nKHt0aXRsZTpoKCkub3B0aW9uYWwoKSxyZWFkT25seUhpbnQ6TCgpLm9wdGlvbmFsKCksZGVzdHJ1Y3RpdmVIaW50OkwoKS5vcHRpb25hbCgpLGlkZW1wb3RlbnRIaW50OkwoKS5vcHRpb25hbCgpLG9wZW5Xb3JsZEhpbnQ6TCgpLm9wdGlvbmFsKCl9KSxheT1nKHt0YXNrU3VwcG9ydDppZShbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLEtjPWcoey4uLlN0LnNoYXBlLC4uLmxvLnNoYXBlLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpOKGgoKSx0ZSkub3B0aW9uYWwoKSxyZXF1aXJlZDp4KGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpOKGgoKSx0ZSkub3B0aW9uYWwoKSxyZXF1aXJlZDp4KGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKEQoKSkub3B0aW9uYWwoKSxhbm5vdGF0aW9uczppeS5vcHRpb25hbCgpLGV4ZWN1dGlvbjpheS5vcHRpb25hbCgpLF9tZXRhOk4oaCgpLEQoKSkub3B0aW9uYWwoKX0pLHlmPXBvLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2xpc3QiKX0pLGN5PWhvLmV4dGVuZCh7dG9vbHM6eChLYyl9KSxjcz1jZS5leHRlbmQoe2NvbnRlbnQ6eChnbykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6TihoKCksRCgpKS5vcHRpb25hbCgpLGlzRXJyb3I6TCgpLm9wdGlvbmFsKCl9KTtjcy5vcihjZS5leHRlbmQoe3Rvb2xSZXN1bHQ6RCgpfSkpO2NvbnN0IHV5PWNvLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOk4oaCgpLEQoKSkub3B0aW9uYWwoKX0pLF9mPWFlLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2NhbGwiKSxwYXJhbXM6dXl9KSxseT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSk7Zyh7YXV0b1JlZnJlc2g6TCgpLmRlZmF1bHQoITApLGRlYm91bmNlTXM6QygpLmludCgpLm5vbm5lZ2F0aXZlKCkuZGVmYXVsdCgzMDApfSk7Y29uc3Qga2Y9aWUoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLGR5PWtlLmV4dGVuZCh7bGV2ZWw6a2Z9KSxweT1hZS5leHRlbmQoe21ldGhvZDpmKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOmR5fSksaHk9VGUuZXh0ZW5kKHtsZXZlbDprZixsb2dnZXI6aCgpLm9wdGlvbmFsKCksZGF0YTpEKCl9KSxmeT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6aHl9KSxteT1nKHtuYW1lOmgoKS5vcHRpb25hbCgpfSksZ3k9Zyh7aGludHM6eChteSkub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLGJ5PWcoe21vZGU6aWUoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSx2eT1nKHt0eXBlOmYoInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmgoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDp4KGdvKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpMKCkub3B0aW9uYWwoKSxfbWV0YTpOKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSx5eT1vbygidHlwZSIsW0ZjLFZjLEpjXSksWm89b28oInR5cGUiLFtGYyxWYyxKYyxueSx2eV0pLF95PWcoe3JvbGU6bW8sY29udGVudDpBKFtabyx4KFpvKV0pLF9tZXRhOk4oaCgpLEQoKSkub3B0aW9uYWwoKX0pLGt5PWNvLmV4dGVuZCh7bWVzc2FnZXM6eChfeSksbW9kZWxQcmVmZXJlbmNlczpneS5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpoKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDppZShbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOkMoKS5vcHRpb25hbCgpLG1heFRva2VuczpDKCkuaW50KCksc3RvcFNlcXVlbmNlczp4KGgoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTp0ZS5vcHRpb25hbCgpLHRvb2xzOngoS2MpLm9wdGlvbmFsKCksdG9vbENob2ljZTpieS5vcHRpb25hbCgpfSksd3k9YWUuZXh0ZW5kKHttZXRob2Q6Zigic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIpLHBhcmFtczpreX0pLHdmPWNlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246VihpZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoaCgpKSkscm9sZTptbyxjb250ZW50Onl5fSksJGY9Y2UuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpWKGllKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoaCgpKSkscm9sZTptbyxjb250ZW50OkEoW1pvLHgoWm8pXSl9KSwkeT1nKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxkZWZhdWx0OkwoKS5vcHRpb25hbCgpfSksU3k9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6QygpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOkMoKS5vcHRpb25hbCgpLGZvcm1hdDppZShbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSx6eT1nKHt0eXBlOmllKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5pbXVtOkMoKS5vcHRpb25hbCgpLG1heGltdW06QygpLm9wdGlvbmFsKCksZGVmYXVsdDpDKCkub3B0aW9uYWwoKX0pLFR5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTp4KGgoKSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLEl5PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksb25lT2Y6eChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSx4eT1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06eChoKCkpLGVudW1OYW1lczp4KGgoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksUHk9QShbVHksSXldKSxDeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpmKCJzdHJpbmciKSxlbnVtOngoaCgpKX0pLGRlZmF1bHQ6eChoKCkpLm9wdGlvbmFsKCl9KSxFeT1nKHt0eXBlOmYoImFycmF5IiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluSXRlbXM6QygpLm9wdGlvbmFsKCksbWF4SXRlbXM6QygpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6eChnKHtjb25zdDpoKCksdGl0bGU6aCgpfSkpfSksZGVmYXVsdDp4KGgoKSkub3B0aW9uYWwoKX0pLEF5PUEoW0N5LEV5XSksT3k9QShbeHksUHksQXldKSxSeT1BKFtPeSwkeSxTeSx6eV0pLE55PWNvLmV4dGVuZCh7bW9kZTpmKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmgoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOk4oaCgpLFJ5KSxyZXF1aXJlZDp4KGgoKSkub3B0aW9uYWwoKX0pfSksWnk9Y28uZXh0ZW5kKHttb2RlOmYoInVybCIpLG1lc3NhZ2U6aCgpLGVsaWNpdGF0aW9uSWQ6aCgpLHVybDpoKCkudXJsKCl9KSxqeT1BKFtOeSxaeV0pLE15PWFlLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpqeX0pLHF5PVRlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpoKCl9KSxEeT1JZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOnF5fSksTHk9Y2UuZXh0ZW5kKHthY3Rpb246aWUoWyJhY2NlcHQiLCJkZWNsaW5lIiwiY2FuY2VsIl0pLGNvbnRlbnQ6YW8oZT0+ZT09PW51bGw/dm9pZCAwOmUsTihoKCksQShbaCgpLEMoKSxMKCkseChoKCkpXSkpLm9wdGlvbmFsKCkpfSksVXk9Zyh7dHlwZTpmKCJyZWYvcmVzb3VyY2UiKSx1cmk6aCgpfSksQnk9Zyh7dHlwZTpmKCJyZWYvcHJvbXB0IiksbmFtZTpoKCl9KSxIeT1rZS5leHRlbmQoe3JlZjpBKFtCeSxVeV0pLGFyZ3VtZW50Omcoe25hbWU6aCgpLHZhbHVlOmgoKX0pLGNvbnRleHQ6Zyh7YXJndW1lbnRzOk4oaCgpLGgoKSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxGeT1hZS5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOkh5fSksVnk9Y2UuZXh0ZW5kKHtjb21wbGV0aW9uOnNlKHt2YWx1ZXM6eChoKCkpLm1heCgxMDApLHRvdGFsOlYoQygpLmludCgpKSxoYXNNb3JlOlYoTCgpKX0pfSksSnk9Zyh7dXJpOmgoKS5zdGFydHNXaXRoKCJmaWxlOi8vIiksbmFtZTpoKCkub3B0aW9uYWwoKSxfbWV0YTpOKGgoKSxEKCkpLm9wdGlvbmFsKCl9KSxLeT1hZS5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOmtlLm9wdGlvbmFsKCl9KSxXeT1jZS5leHRlbmQoe3Jvb3RzOngoSnkpfSksR3k9SWUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6VGUub3B0aW9uYWwoKX0pO0EoW2FzLEl2LEZ5LHB5LHR5LFl2LE12LHF2LFV2LEZ2LEp2LF9mLHlmLGpjLHFjLERjLFVjXSk7QShbUmMsTmMsQ3YsR3ksTm9dKTtBKFtPYyx3ZiwkZixMeSxXeSxNYyxMYyxaY10pO0EoW2FzLHd5LE15LEt5LGpjLHFjLERjLFVjXSk7QShbUmMsTmMsZnksV3YsQnYsbHksc3ksTm8sRHldKTtBKFtPYyxQdixWeSxyeSxYdixtZixEdixnZixjcyxjeSxNYyxMYyxaY10pO2NsYXNzIGogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PUIuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgUXkoci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBqKHQsbixvKX19Y2xhc3MgUXkgZXh0ZW5kcyBqe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihCLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gUnUoZSl7Y29uc3Qgbj1VYihlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89QmIobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBOdShlLHQpe2NvbnN0IG49VmgoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBZeT02ZTQ7Y2xhc3MgWHl7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoUmMsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKE5jLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihhcyxuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGpjLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHFjLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgaTtmb3IoO2k9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoaS50eXBlPT09InJlc3BvbnNlInx8aS50eXBlPT09ImVycm9yIil7Y29uc3QgdT1pLm1lc3NhZ2UsbD11LmlkLGQ9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobCk7aWYoZClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShsKSxpLnR5cGU9PT0icmVzcG9uc2UiKWQodSk7ZWxzZXtjb25zdCBtPXUsYj1uZXcgaihtLmVycm9yLmNvZGUsbS5lcnJvci5tZXNzYWdlLG0uZXJyb3IuZGF0YSk7ZChiKX1lbHNle2NvbnN0IG09aS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7bX0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7bH1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGkubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFhKXRocm93IG5ldyBqKEIuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighWGUoYS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoWGUoYS5zdGF0dXMpKXtjb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uaSxfbWV0YTp7Li4uaS5fbWV0YSxbZXRdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihEYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFVjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKEIuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKFhlKHIuc3RhdHVzKSl0aHJvdyBuZXcgaihCLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBqKEIuSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIGo/cjpuZXcgaihCLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLGouZnJvbUVycm9yKEIuUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGEpPT57cj8uKHMsYSksJG8ocyl8fGJ2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6T3Uocyk/dGhpcy5fb25yZXF1ZXN0KHMsYSk6Z3Yocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49ai5mcm9tRXJyb3IoQi5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bZXRdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgZD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOkIuTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHttfWApKSk6cj8uc2VuZChkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpO3JldHVybn1jb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGEpO2NvbnN0IGk9bXYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLHU9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLGw9e3NpZ25hbDphLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihtLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGQsbSl9LHNlbmRSZXF1ZXN0OmFzeW5jKGQsbSxiKT0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGooQi5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCB2PXsuLi5iLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIXYucmVsYXRlZFRhc2smJih2LnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IF89di5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiBfJiZ1JiZhd2FpdCB1LnVwZGF0ZVRhc2tTdGF0dXMoXywiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QoZCxtLHYpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6dSx0YXNrUmVxdWVzdGVkVHRsOmk/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LGwpKS50aGVuKGFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtyZXN1bHQ6ZCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0sYXN5bmMgZD0+e2lmKGEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihkLmNvZGUpP2QuY29kZTpCLkludGVybmFsRXJyb3IsbWVzc2FnZTpkLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4uZC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpkLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSkuY2F0Y2goZD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2R9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWEmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgYT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxpPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihpJiZhJiZpLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaCh1KXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxhKHUpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksJG8odCkpbyh0KTtlbHNle2NvbnN0IGE9bmV3IGoodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oYSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKCRvKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgYT10LnJlc3VsdDtpZihhLnRhc2smJnR5cGVvZiBhLnRhc2s9PSJvYmplY3QiKXtjb25zdCBpPWEudGFzazt0eXBlb2YgaS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGkudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksJG8odCkpcih0KTtlbHNle2NvbnN0IGE9ai5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoYSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChhKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6YSBpbnN0YW5jZW9mIGo/YTpuZXcgaihCLkludGVybmFsRXJyb3IsU3RyaW5nKGEpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBhPWF3YWl0IHRoaXMucmVxdWVzdCh0LFpjLG8pO2lmKGEudGFzaylzPWEudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6YS50YXNrfTtlbHNlIHRocm93IG5ldyBqKEIuSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGk9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazppfSxYZShpLnN0YXR1cykpe2kuc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06aS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooQi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9Omkuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IGooQi5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGkuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IHU9aS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLHUpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGEpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjphIGluc3RhbmNlb2Ygaj9hOm5ldyBqKEIuSW50ZXJuYWxFcnJvcixTdHJpbmcoYSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmEsdGFzazppLHJlbGF0ZWRUYXNrOnV9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgobCxkKT0+e2NvbnN0IG09ST0+e2QoSSl9O2lmKCF0aGlzLl90cmFuc3BvcnQpe20obmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksaSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goSSl7bShJKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGI9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLHY9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpifTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoYixvLm9ucHJvZ3Jlc3MpLHYucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmJ9fSksaSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyx0YXNrOml9KSx1JiYodi5wYXJhbXM9ey4uLnYucGFyYW1zLF9tZXRhOnsuLi52LnBhcmFtcz8uX21ldGF8fHt9LFtldF06dX19KTtjb25zdCBfPUk9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShiKSx0aGlzLl9jbGVhbnVwVGltZW91dChiKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6YixyZWFzb246U3RyaW5nKEkpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBHPUkgaW5zdGFuY2VvZiBqP0k6bmV3IGooQi5SZXF1ZXN0VGltZW91dCxTdHJpbmcoSSkpO2QoRyl9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGIsST0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZChJKTt0cnl7Y29uc3QgRz1WaChuLEkucmVzdWx0KTtHLnN1Y2Nlc3M/bChHLmRhdGEpOmQoRy5lcnJvcil9Y2F0Y2goRyl7ZChHKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntfKG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IHc9bz8udGltZW91dD8/WXksJD0oKT0+XyhqLmZyb21FcnJvcihCLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6d30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoYix3LG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBaPXU/LnRhc2tJZDtpZihaKXtjb25zdCBJPUc9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChiKTtvZT9vZShHKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Yn1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGIsSSksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKFose3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6dix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEc9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEcpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZCh2LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YX0pLmNhdGNoKEk9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChiKSxkKEkpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxNYyxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sTGMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sWnYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBpPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbZXRdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTppLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGk9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihpPXsuLi5pLHBhcmFtczp7Li4uaS5wYXJhbXMsX21ldGE6ey4uLmkucGFyYW1zPy5fbWV0YXx8e30sW2V0XTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoaSxuKS5jYXRjaCh1PT50aGlzLl9vbmVycm9yKHUpKX0pO3JldHVybn1sZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbZXRdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGEsbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPVJ1KHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGE9TnUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oYSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPVJ1KHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPU51KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZPdShyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxhPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2E/KGEobmV3IGooQi5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgaihCLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgYT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoYSkscyhuZXcgaihCLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxhKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxhLG4pO2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoaSl7Y29uc3QgdT1Oby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOml9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxYZShpLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxhKT0+e2NvbnN0IGk9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWkpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihYZShpLnN0YXR1cykpdGhyb3cgbmV3IGooQi5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2kuc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGEsbik7Y29uc3QgdT1hd2FpdCBvLmdldFRhc2socixuKTtpZih1KXtjb25zdCBsPU5vLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6dX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLFhlKHUuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIFp1KGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBlXyhlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBhPW5bcl07WnUoYSkmJlp1KHMpP25bcl09ey4uLmEsLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIHRfIGV4dGVuZHMgWHl7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8sYT0+e2xldCBpPWEucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsaSkscy5vbkhhbmRsZXI/LihpKTtmb3IobGV0IHUgb2ZbLi4ucy5saXN0ZW5lcnNdKXUoaSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIG5fPSIyMDI2LTAxLTI2IixvXz0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIHJfe2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj12di5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PW9fJiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgc189QShbZigibGlnaHQiKSxmKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksc249QShbZigiaW5saW5lIiksZigiZnVsbHNjcmVlbiIpLGYoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLGlfPUEoW2YoIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksZigiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGYoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksZigiLS1jb2xvci10ZXh0LWdob3N0IiksZigiLS1jb2xvci10ZXh0LWluZm8iKSxmKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksZigiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxmKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGYoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGYoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxmKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxmKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGYoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxmKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxmKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksZigiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGYoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksZigiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxmKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksZigiLS1jb2xvci1yaW5nLWludmVyc2UiKSxmKCItLWNvbG9yLXJpbmctaW5mbyIpLGYoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxmKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGYoIi0tY29sb3ItcmluZy13YXJuaW5nIiksZigiLS1mb250LXNhbnMiKSxmKCItLWZvbnQtbW9ubyIpLGYoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksZigiLS1mb250LXdlaWdodC1tZWRpdW0iKSxmKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksZigiLS1mb250LXdlaWdodC1ib2xkIiksZigiLS1mb250LXRleHQteHMtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxmKCItLWZvbnQtdGV4dC1tZC1zaXplIiksZigiLS1mb250LXRleHQtbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksZigiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksZigiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGYoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGYoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGYoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGYoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGYoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGYoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksZigiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGYoIi0tc2hhZG93LWhhaXJsaW5lIiksZigiLS1zaGFkb3ctc20iKSxmKCItLXNoYWRvdy1tZCIpLGYoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLGFfPU4oaV8uZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksQShbaCgpLGt0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7Zyh7bWV0aG9kOmYoInVpL29wZW4tbGluayIpLHBhcmFtczpnKHt1cmw6aCgpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIGNfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLHVfPWcoe2lzRXJyb3I6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxsXz1nKHtpc0Vycm9yOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOmcoe30pfSk7dmFyIFdjPWcoe2Nvbm5lY3REb21haW5zOngoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczp4KGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6eChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6eChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLEdjPWcoe2NhbWVyYTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOmcoe3dpZHRoOkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBkXz1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOmcoe2FyZ3VtZW50czpOKGgoKSxEKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSkscF89Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOmcoe2FyZ3VtZW50czpOKGgoKSxEKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLGhfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOmcoe3JlYXNvbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxmXz1nKHtmb250czpoKCkub3B0aW9uYWwoKX0pLG1fPWcoe3ZhcmlhYmxlczphXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOmZfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxnXz1nKHttZXRob2Q6ZigidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6Zyh7fSl9KTtOKGgoKSxEKCkpO3ZhciBqdT1nKHt0ZXh0Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczpnKHt9KS5vcHRpb25hbCgpfSk7dmFyIGJfPWcoe2V4cGVyaW1lbnRhbDpOKGgoKSxOKGgoKSx0bygpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOmcoe2xpc3RDaGFuZ2VkOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94Omcoe3Blcm1pc3Npb25zOkdjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDpXYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpqdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6anUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzpnKHt0b29sczpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSx2Xz1nKHtleHBlcmltZW50YWw6TihoKCksTihoKCksdG8oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczpnKHtsaXN0Q2hhbmdlZDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOngoc24pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTtnKHtjc3A6V2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOkdjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6TCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTtnKHttZXRob2Q6ZigidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6Zyh7bW9kZTpzbi5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciB5Xz1nKHttb2RlOnNuLmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxfXz1BKFtmKCJtb2RlbCIpLGYoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO2coe3Jlc291cmNlVXJpOmgoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6eChfXykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpzdCgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6c3QoKS5vcHRpb25hbCgpfSk7Zyh7bWltZVR5cGVzOngoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7Zyh7bWV0aG9kOmYoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6Zyh7Y29udGVudHM6eChBKFtiZix2Zl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL21lc3NhZ2UiKSxwYXJhbXM6Zyh7cm9sZTpmKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OngoZ28pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6Zyh7aHRtbDpoKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDpXYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOkdjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIGtfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOmNzLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksU2Y9Zyh7dG9vbEluZm86Zyh7aWQ6dW8ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOktjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOnNfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6bV8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOnNuLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6eChzbikub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkEoW2coe2hlaWdodDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksZyh7bWF4SGVpZ2h0OkEoW0MoKSxrdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEEoW2coe3dpZHRoOkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLGcoe21heFdpZHRoOkEoW0MoKSxrdCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06QShbZigid2ViIiksZigiZGVza3RvcCIpLGYoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczpnKHt0b3VjaDpMKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkwoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czpnKHt0b3A6QygpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpDKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOkMoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpDKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLHdfPWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOlNmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO2coe21ldGhvZDpmKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczpnKHtjb250ZW50OngoZ28pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpOKGgoKSxEKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO2coe21ldGhvZDpmKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOmcoe2FwcEluZm86aXMuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOnZfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciAkXz1nKHtwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOmlzLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6Yl8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6U2YuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksU189e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIE11KGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oU18pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IFlmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5wdiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBxdShlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGE9cy5wYXRoPy5tYXAoaT0+dHlwZW9mIGk9PSJvYmplY3QiP2kua2V5OmkpLmpvaW4oIi4iKTtyZXR1cm4gYT9gJHthfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gel8oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gVF8oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIElfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgUWMgZXh0ZW5kcyB0X3tfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6ZF8sdG9vbGlucHV0cGFydGlhbDpwXyx0b29scmVzdWx0OmtfLHRvb2xjYW5jZWxsZWQ6aF8saG9zdGNvbnRleHRjaGFuZ2VkOndffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFRYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8bmUoe2ppdGxlc3M6ITB9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGFzLHI9Pihjb25zb2xlLmxvZygiUmVjZWl2ZWQgcGluZzoiLHIucGFyYW1zKSx7fSkpLHRoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHZvaWQgMCl9cmVnaXN0ZXJDYXBhYmlsaXRpZXModCl7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBjYXBhYmlsaXRpZXMgYWZ0ZXIgdHJhbnNwb3J0IGlzIGVzdGFibGlzaGVkIik7dGhpcy5fY2FwYWJpbGl0aWVzPWVfKHRoaXMuX2NhcGFiaWxpdGllcyx0KX1yZWdpc3RlclRvb2wodCxuLG8pe2lmKHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XSl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGApO2xldCByPXRoaXMscz0oKT0+e3IuX2luaXRpYWxpemVkU2VudCYmci5fY2FwYWJpbGl0aWVzLnRvb2xzPy5saXN0Q2hhbmdlZCYmci5zZW5kVG9vbExpc3RDaGFuZ2VkKCl9LGE9bi5pbnB1dFNjaGVtYSE9PXZvaWQgMCxpPXt0aXRsZTpuLnRpdGxlLGRlc2NyaXB0aW9uOm4uZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6bi5pbnB1dFNjaGVtYSxvdXRwdXRTY2hlbWE6bi5vdXRwdXRTY2hlbWEsYW5ub3RhdGlvbnM6bi5hbm5vdGF0aW9ucyxfbWV0YTpuLl9tZXRhLGVuYWJsZWQ6ITAsZW5hYmxlKCl7dGhpcy5lbmFibGVkPSEwLHMoKX0sZGlzYWJsZSgpe3RoaXMuZW5hYmxlZD0hMSxzKCl9LHVwZGF0ZSh1KXtPYmplY3QuYXNzaWduKHRoaXMsdSkscygpfSxyZW1vdmUoKXtyLl9yZWdpc3RlcmVkVG9vbHNbdF09PT1pJiYoZGVsZXRlIHIuX3JlZ2lzdGVyZWRUb29sc1t0XSxzKCkpfSxoYW5kbGVyOmFzeW5jKHUsbCk9PntpZighaS5lbmFibGVkKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgZGlzYWJsZWRgKTtsZXQgZDtpZihhKXtsZXQgbT1pLmlucHV0U2NoZW1hLGI9bT9hd2FpdCBxdShtLHU/P3t9LGBJbnZhbGlkIGlucHV0IGZvciB0b29sICR7dH06IGApOnU/P3t9O2Q9YXdhaXQgbyhiLGwpfWVsc2UgZD1hd2FpdCBvKGwpO3JldHVybiBpLm91dHB1dFNjaGVtYSYmIWQuaXNFcnJvciYmKGQuc3RydWN0dXJlZENvbnRlbnQ9YXdhaXQgcXUoaS5vdXRwdXRTY2hlbWEsZC5zdHJ1Y3R1cmVkQ29udGVudCxgSW52YWxpZCBvdXRwdXQgZm9yIHRvb2wgJHt0fTogYCkpLGR9fTtyZXR1cm4gdGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdPWksIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyYmIXRoaXMudHJhbnNwb3J0JiZ0aGlzLnJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHt0b29sczp7bGlzdENoYW5nZWQ6ITB9fSksdGhpcy5lbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpLHMoKSxpfV90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMTtlbnN1cmVUb29sSGFuZGxlcnNJbml0aWFsaXplZCgpe3RoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkfHwodGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vbmNhbGx0b29sPWFzeW5jKHQsbik9PntsZXQgbz10aGlzLl9yZWdpc3RlcmVkVG9vbHNbdC5uYW1lXTtpZighbyl0aHJvdyBFcnJvcihgVG9vbCAke3QubmFtZX0gbm90IGZvdW5kYCk7cmV0dXJuIG8uaGFuZGxlcih0LmFyZ3VtZW50cyxuKX0sdGhpcy5vbmxpc3R0b29scz1hc3luYyh0LG4pPT4oe3Rvb2xzOmF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHRoaXMuX3JlZ2lzdGVyZWRUb29scykuZmlsdGVyKChbbyxyXSk9PnIuZW5hYmxlZCkubWFwKGFzeW5jKFtvLHJdKT0+e2xldCBzPXtuYW1lOm8sdGl0bGU6ci50aXRsZSxkZXNjcmlwdGlvbjpyLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOnIuaW5wdXRTY2hlbWE/YXdhaXQgTXUoci5pbnB1dFNjaGVtYSwiaW5wdXQiKTp7dHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnt9fX07cmV0dXJuIHIub3V0cHV0U2NoZW1hJiYocy5vdXRwdXRTY2hlbWE9YXdhaXQgTXUoci5vdXRwdXRTY2hlbWEsIm91dHB1dCIpKSxyLmFubm90YXRpb25zJiYocy5hbm5vdGF0aW9ucz1yLmFubm90YXRpb25zKSxyLl9tZXRhJiYocy5fbWV0YT1yLl9tZXRhKSxzfSkpfSkpfWFzeW5jIHNlbmRUb29sTGlzdENoYW5nZWQodD17fSl7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRUb29sTGlzdENoYW5nZWQiKSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIscGFyYW1zOnR9KX1nZXRIb3N0Q2FwYWJpbGl0aWVzKCl7cmV0dXJuIHRoaXMuX2hvc3RDYXBhYmlsaXRpZXN9Z2V0SG9zdFZlcnNpb24oKXtyZXR1cm4gdGhpcy5faG9zdEluZm99Z2V0SG9zdENvbnRleHQoKXtyZXR1cm4gdGhpcy5faG9zdENvbnRleHR9Z2V0IG9udG9vbGlucHV0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiKX1zZXQgb250b29saW5wdXQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIsdCl9Z2V0IG9udG9vbGlucHV0cGFydGlhbCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIpfXNldCBvbnRvb2xpbnB1dHBhcnRpYWwodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiLHQpfWdldCBvbnRvb2xyZXN1bHQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiKX1zZXQgb250b29scmVzdWx0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iix0KX1nZXQgb250b29sY2FuY2VsbGVkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIil9c2V0IG9udG9vbGNhbmNlbGxlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIsdCl9Z2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiKX1zZXQgb25ob3N0Y29udGV4dGNoYW5nZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdCl9X29udGVhcmRvd247Z2V0IG9udGVhcmRvd24oKXtyZXR1cm4gdGhpcy5fb250ZWFyZG93bn1zZXQgb250ZWFyZG93bih0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9udGVhcmRvd24iLHRoaXMuX29udGVhcmRvd24sdCksdGhpcy5fb250ZWFyZG93bj10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKGdfLChuLG8pPT57aWYoIXRoaXMuX29udGVhcmRvd24pdGhyb3cgRXJyb3IoIk5vIG9udGVhcmRvd24gaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb250ZWFyZG93bihuLnBhcmFtcyxvKX0pfV9vbmNhbGx0b29sO2dldCBvbmNhbGx0b29sKCl7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2x9c2V0IG9uY2FsbHRvb2wodCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmNhbGx0b29sIix0aGlzLl9vbmNhbGx0b29sLHQpLHRoaXMuX29uY2FsbHRvb2w9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihfZiwobixvKT0+e2lmKCF0aGlzLl9vbmNhbGx0b29sKXRocm93IEVycm9yKCJObyBvbmNhbGx0b29sIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29uY2FsbHRvb2wobi5wYXJhbXMsbyl9KX1fb25saXN0dG9vbHM7Z2V0IG9ubGlzdHRvb2xzKCl7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzfXNldCBvbmxpc3R0b29scyh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9ubGlzdHRvb2xzIix0aGlzLl9vbmxpc3R0b29scyx0KSx0aGlzLl9vbmxpc3R0b29scz10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKHlmLChuLG8pPT57aWYoIXRoaXMuX29ubGlzdHRvb2xzKXRocm93IEVycm9yKCJObyBvbmxpc3R0b29scyBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmxpc3R0b29scyhuLnBhcmFtcyxvKX0pfWFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodCl7c3dpdGNoKHQpe2Nhc2Uic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSI6aWYoIXRoaXMuX2hvc3RDYXBhYmlsaXRpZXM/LnNhbXBsaW5nKXRocm93IEVycm9yKGBIb3N0IGRvZXMgbm90IHN1cHBvcnQgc2FtcGxpbmcgKHJlcXVpcmVkIGZvciAke3R9KWApO2JyZWFrfX1hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkodCl7c3dpdGNoKHQpe2Nhc2UidG9vbHMvY2FsbCI6Y2FzZSJ0b29scy9saXN0IjppZighdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzKXRocm93IEVycm9yKGBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhcGFiaWxpdHkgKHJlcXVpcmVkIGZvciAke3R9KWApO3JldHVybjtjYXNlInBpbmciOmNhc2UidWkvcmVzb3VyY2UtdGVhcmRvd24iOnJldHVybjtkZWZhdWx0OnRocm93IEVycm9yKGBObyBoYW5kbGVyIGZvciBtZXRob2QgJHt0fSByZWdpc3RlcmVkYCl9fWFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodCl7fWFzc2VydFRhc2tDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFzayBoYW5kbGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBNQ1AgQXBwcyIpfWFzeW5jIGNhbGxTZXJ2ZXJUb29sKHQsbil7aWYodGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNhbGxTZXJ2ZXJUb29sIiksdHlwZW9mIHQ9PSJzdHJpbmciKXRocm93IEVycm9yKGBjYWxsU2VydmVyVG9vbCgpIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgYnV0IHJlY2VpdmVkIGEgc3RyaW5nICgiJHt0fSIpLiBEaWQgeW91IG1lYW46IGNhbGxTZXJ2ZXJUb29sKHsgbmFtZTogIiR7dH0iLCBhcmd1bWVudHM6IHsgLi4uIH0gfSk/YCk7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0b29scy9jYWxsIixwYXJhbXM6dH0sY3Mse29ucHJvZ3Jlc3M6KCk9Pnt9LHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6ITAsLi4ubn0pfWFzeW5jIHJlYWRTZXJ2ZXJSZXNvdXJjZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVhZFNlcnZlclJlc291cmNlIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9yZWFkIixwYXJhbXM6dH0sZ2Ysbil9YXN5bmMgbGlzdFNlcnZlclJlc291cmNlcyh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgibGlzdFNlcnZlclJlc291cmNlcyIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvbGlzdCIscGFyYW1zOnR9LG1mLG4pfWFzeW5jIGNyZWF0ZVNhbXBsaW5nTWVzc2FnZSh0LG4pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjcmVhdGVTYW1wbGluZ01lc3NhZ2UiKTtsZXQgbz10LnRvb2xzPyRmOndmO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoic2FtcGxpbmcvY3JlYXRlTWVzc2FnZSIscGFyYW1zOnR9LG8sbil9c2VuZE1lc3NhZ2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInNlbmRNZXNzYWdlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL21lc3NhZ2UiLHBhcmFtczp0fSxsXyxuKX1zZW5kTG9nKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJub3RpZmljYXRpb25zL21lc3NhZ2UiLHBhcmFtczp0fSl9dXBkYXRlTW9kZWxDb250ZXh0KHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJ1cGRhdGVNb2RlbENvbnRleHQiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiLHBhcmFtczp0fSxPYyxuKX1vcGVuTGluayh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgib3BlbkxpbmsiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvb3Blbi1saW5rIixwYXJhbXM6dH0sY18sbil9c2VuZE9wZW5MaW5rPXRoaXMub3Blbkxpbms7ZG93bmxvYWRGaWxlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJkb3dubG9hZEZpbGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvZG93bmxvYWQtZmlsZSIscGFyYW1zOnR9LHVfLG4pfXJlcXVlc3RUZWFyZG93bih0PXt9KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIixwYXJhbXM6dH0pfXJlcXVlc3REaXNwbGF5TW9kZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgicmVxdWVzdERpc3BsYXlNb2RlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIixwYXJhbXM6dH0seV8sbil9c2VuZFNpemVDaGFuZ2VkKHQpe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIscGFyYW1zOnR9KX1zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpe2xldCB0PSExLG49MCxvPTAscj0oKT0+e3R8fCh0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3Q9ITE7bGV0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9YS5zdHlsZS5oZWlnaHQ7YS5zdHlsZS5oZWlnaHQ9Im1heC1jb250ZW50IjtsZXQgdT1NYXRoLmNlaWwoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO2Euc3R5bGUuaGVpZ2h0PWk7bGV0IGw9TWF0aC5jZWlsKHdpbmRvdy5pbm5lcldpZHRoKTsobCE9PW58fHUhPT1vKSYmKG49bCxvPXUsdGhpcy5zZW5kU2l6ZUNoYW5nZWQoe3dpZHRoOmwsaGVpZ2h0OnV9KSl9KSl9O3IoKTtsZXQgcz1uZXcgUmVzaXplT2JzZXJ2ZXIocik7cmV0dXJuIHMub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHMub2JzZXJ2ZShkb2N1bWVudC5ib2R5KSwoKT0+cy5kaXNjb25uZWN0KCl9YXN5bmMgY29ubmVjdCh0PW5ldyByXyh3aW5kb3cucGFyZW50LHdpbmRvdy5wYXJlbnQpLG4pe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJBcHAgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyBhZ2Fpbi4iKTt0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITEsYXdhaXQgc3VwZXIuY29ubmVjdCh0KTt0cnl7bGV0IG89YXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2luaXRpYWxpemUiLHBhcmFtczp7YXBwQ2FwYWJpbGl0aWVzOnRoaXMuX2NhcGFiaWxpdGllcyxhcHBJbmZvOnRoaXMuX2FwcEluZm8scHJvdG9jb2xWZXJzaW9uOm5ffX0sJF8sbik7aWYobz09PXZvaWQgMCl0aHJvdyBFcnJvcihgU2VydmVyIHNlbnQgaW52YWxpZCBpbml0aWFsaXplIHJlc3VsdDogJHtvfWApO3RoaXMuX2hvc3RDYXBhYmlsaXRpZXM9by5ob3N0Q2FwYWJpbGl0aWVzLHRoaXMuX2hvc3RJbmZvPW8uaG9zdEluZm8sdGhpcy5faG9zdENvbnRleHQ9by5ob3N0Q29udGV4dCxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIn0pLHRoaXMuX2luaXRpYWxpemVkU2VudD0hMCx0aGlzLm9wdGlvbnM/LmF1dG9SZXNpemUmJnRoaXMuc2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKX1jYXRjaChvKXt0aHJvdyB0aGlzLmNsb3NlKCksb319fWxldCBEdT0iIjtjb25zdCB6Zj0oZSx0LG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT0+e2lmKCFlKXJldHVybjsoZS50aGVtZT09PSJsaWdodCJ8fGUudGhlbWU9PT0iZGFyayIpJiZ0LmFwcGx5RG9jdW1lbnRUaGVtZShlLnRoZW1lKTtjb25zdCBvPWUuc3R5bGVzPy52YXJpYWJsZXM7byYmdHlwZW9mIG89PSJvYmplY3QiJiZ0LmFwcGx5SG9zdFN0eWxlVmFyaWFibGVzKG8pO2NvbnN0IHI9ZS5zdHlsZXM/LmNzcz8uZm9udHM7dHlwZW9mIHI9PSJzdHJpbmciJiZyJiZyIT09RHUmJih0LmFwcGx5SG9zdEZvbnRzKHIpLER1PXIpO2NvbnN0IHM9ZS5zYWZlQXJlYUluc2V0cztpZihzKWZvcihjb25zdCBhIG9mWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSl7Y29uc3QgaT1OdW1iZXIoc1thXT8/MCk7bi5zdHlsZS5zZXRQcm9wZXJ0eShgLS1pbnNldC0ke2F9YCxgJHtOdW1iZXIuaXNGaW5pdGUoaSkmJmk+MD9pOjB9cHhgKX19LFRmPWU9PmUucmVwbGFjZSgvWyY8PiInXS9nLHQ9Pih7IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0pW3RdKSx4Xz0nPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTAgMy41IDUuNSA4IDEwIDEyLjUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+JyxQXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNNiAzLjUgMTAuNSA4IDYgMTIuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4nLENfPSc8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0zLjUgNiA4IDEwLjUgMTIuNSA2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPicsRV89Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTkuNSAyLjVoNHY0TTYuNSAxMy41aC00di00TTEzLjUgMi41IDkgN00yLjUgMTMuNSA3IDkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+JyxBXz1lPT57Y29uc3QgdD1NYXRoLm1heCgwLE1hdGguZmxvb3IoZS50b3RhbCkpLG49TWF0aC5tYXgoMCxNYXRoLmZsb29yKGUuZnJvbSkpLG89TWF0aC5tYXgoMCxNYXRoLmZsb29yKGUuY291bnQpKSxyPW4+MCxzPW4rbzx0O2lmKCFyJiYhcylyZXR1cm4iIjtjb25zdCBhPWUubm91bj9gICR7VGYoZS5ub3VuKX1gOiIiLGk9bz9gJHtuKzF94oCTJHtuK299IG9mICR7dH1gOmAwIG9mICR7dH1gO3JldHVybmA8bmF2IGNsYXNzPSJjay1wYWdlciIgYXJpYS1sYWJlbD0iUGFnZXMiPjxidXR0b24gY2xhc3M9ImNrLXBhZ2VyLWJ0biIgdHlwZT0iYnV0dG9uIiAke2UucHJldn0ke3I/IiI6IiBkaXNhYmxlZCJ9IGFyaWEtbGFiZWw9IlByZXZpb3VzJHthfSI+JHt4X308c3Bhbj5QcmV2aW91czwvc3Bhbj48L2J1dHRvbj48c3BhbiBjbGFzcz0iY2stcGFnZXItbiI+JHtpfTwvc3Bhbj48YnV0dG9uIGNsYXNzPSJjay1wYWdlci1idG4iIHR5cGU9ImJ1dHRvbiIgJHtlLm5leHR9JHtzPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJOZXh0JHthfSI+PHNwYW4+TmV4dDwvc3Bhbj4ke1BffTwvYnV0dG9uPjwvbmF2PiR7ZS5hbGw/YDxidXR0b24gY2xhc3M9ImNrLXBhZ2VyLWFsbCIgdHlwZT0iYnV0dG9uIiAke2UuYWxsfT48c3Bhbj5WaWV3IGFsbCAke3R9PC9zcGFuPiR7RV99PC9idXR0b24+YDoiIn1gfSxPXz0oZSx0KT0+YDxidXR0b24gY2xhc3M9ImNrLXBhZ2VyLWFsbCIgdHlwZT0iYnV0dG9uIiAke3R9PjxzcGFuIGRhdGEtbGFiZWw+JHtUZihlKX08L3NwYW4+JHtDX308L2J1dHRvbj5gLEFlPW5ldyBRYyh7bmFtZToiaG90ZWwtc3RvcmVmcm9udCIsdmVyc2lvbjoiMS4wLjAifSx7b3BlbkxpbmtzOnt9LGF2YWlsYWJsZURpc3BsYXlNb2RlczpbImlubGluZSIsImZ1bGxzY3JlZW4iXX0pLElmPXthcHBseURvY3VtZW50VGhlbWU6el8sYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6VF8sYXBwbHlIb3N0Rm9udHM6SV99LGhlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGM9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IGRlPSIiLHZzPSIiLFljPXt9LGN0PSExLHhmPSIiLFQ9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LFk9MTtjb25zdCBMdT01O2xldCBYPW51bGwsenQ9W10sVWU9IiIsZmU9W10scT1udWxsLGpvPTA7Y29uc3QgUl89bmV3IFNldChbImZvcmdldFByZWZlcmVuY2VzIiwiYWRkVG9UcmlwIiwiY2xlYXJUcmlwIiwicmVxdWVzdEJvb2tpbmciLCJjYW5jZWxCb29raW5nIiwiY2hhbmdlQm9va2luZyIsInNpZ25JbiIsInNpZ25PdXQiXSksYW49ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtyZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9gaG90ZWw6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BleHRyYXM6Ym9va2luZzoke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YGV4dHJhczoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyJ8fHQ9PT0icG9saWN5LW1pc3NpbmciP2Bwb2xpY3k6JHtlLmhvdGVsPy5pZD8/IiJ9OiR7ZS50b3BpYz8/IiJ9YDp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij9gY2FuY2VsOiR7ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iY2hhbmdlLXByZXZpZXciP2BjaGFuZ2U6JHtlLmNvbmZpcm1hdGlvbkNvZGU/P2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImRlc3RpbmF0aW9ucyI/YGRlc3RpbmF0aW9uczoke2Uuc2NvcGU/Lm5hbWU/PyIifWA6dD09PSJob3RlbHMifHx0PT09Im5vLWhvdGVscyI/YGhvdGVsczoke2UuYXNrPy5jaXR5Pz8iIn06JHtlLmFzaz8ucXVlcnk/P2UucXVlcnk/PyIifWA6dH0sem89ZT0+eyFxfHxaXy5oYXMoU3RyaW5nKHEudmlldykpfHxhbihlKSE9PWFuKHEpJiYoZmU9Wy4uLmZlLHtwYXlsb2FkOnEsbGFiZWw6al8ocSksdmVyc2lvbjpqb31dLnNsaWNlKC02KSl9LE5fPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbHMifHx0PT09ImRlc3RpbmF0aW9ucyJ8fHQ9PT0ibm8taG90ZWxzIiYmZS5hc2spJiZlLmFzaylyZXR1cm57a2V5OiJsaXN0SG90ZWxzIixhcmdzOnsuLi5lLmFza319O2lmKHQ9PT0iY29tcGFyaXNvbiImJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5zKSlyZXR1cm57a2V5OiJjb21wYXJlIixhcmdzOnsuLi5uLC4uLmUudGl0bGU/e3RpdGxlOmUudGl0bGV9Ont9LC4uLmUucmVjb21tZW5kZWQ/e3JlY29tbWVuZGVkOmUucmVjb21tZW5kZWR9Ont9LGVudHJpZXM6ZS5jb2x1bW5zLm1hcChvPT4oe2hvdGVsOm8uaG90ZWw/LmlkLC4uLm8uYmVzdEZvcj97YmVzdEZvcjpvLmJlc3RGb3J9Ont9LC4uLm8ucHJvcz8ubGVuZ3RoP3twcm9zOm8ucHJvc306e30sLi4uby5jb25zPy5sZW5ndGg/e2NvbnM6by5jb25zfTp7fX0pKX19O2lmKCh0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyIpJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJnZXRIb3RlbCIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5uLC4uLmUucm9vbXNfd2FudGVkP3tyb29tczplLnJvb21zX3dhbnRlZH06e319fTtpZih0PT09ImV4dHJhcyImJmUuZm9yQm9va2luZylyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOmh0KFN0cmluZyhlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZSkpfTtpZih0PT09ImV4dHJhcyImJmUuaG90ZWw/LmlkKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubn19O2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm57a2V5OiJpdGluZXJhcnkiLGFyZ3M6e3RpdGxlOmUudGl0bGUsLi4ubixkYXlzOihlLmRheXM/P1tdKS5tYXAobz0+KHtsYWJlbDpvLmxhYmVsLC4uLm8ubm90ZT97bm90ZTpvLm5vdGV9Ont9LGl0ZW1zOihvLml0ZW1zPz9bXSkubWFwKHI9PnIuaWQpfSkpfX19LFV1PWU9PntmZT1mZS5maWx0ZXIodD0+IWUuaW5jbHVkZXMoU3RyaW5nKHQucGF5bG9hZD8udmlldykpKX0sWl89bmV3IFNldChbImZpbmQtYm9va2luZyIsImJvb2tpbmciLCJjYW5jZWxsZWQiLCJjaGFuZ2VkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiLCJtZW1iZXItc2lnbi1pbiIsIm1lbWJlci1ub3QtZm91bmQiXSksal89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJuby1ob3RlbHMiKXJldHVybiJ0aGUgc2VhcmNoIjtpZih0PT09ImRlc3RpbmF0aW9ucyIpcmV0dXJuIGUuc2NvcGU/Lm5hbWU/U3RyaW5nKGUuc2NvcGUubmFtZSk6ImFsbCBkZXN0aW5hdGlvbnMiO2lmKHQ9PT0iaG90ZWxzIil7aWYoZS5hc2s/LmNpdHkpcmV0dXJuIFN0cmluZyhlLmFzay5jaXR5KTtjb25zdCBuPVsuLi5uZXcgU2V0KChlLmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby5jaXR5KSkpXTtyZXR1cm4gbi5sZW5ndGg9PT0xP1N0cmluZyhuWzBdKTpgJHtlLnRvdGFsPz8wfSBob3RlbHNgfXJldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIik6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/InRoZSBjYW5jZWxsYXRpb24iOnQ9PT0iY2hhbmdlLXByZXZpZXciPyJ0aGUgY2hhbmdlIjp0PT09Im1lbWJlciI/InlvdXIgbWVtYmVyc2hpcCI6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gYWRkLW9ucyBmb3IgJHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmAke1N0cmluZyhlLmhvdGVsPy5uYW1lPz8idGhlIGhvdGVsIil9IGFkZC1vbnNgOnQ9PT0idHJpcCI/InRoZSB0cmlwIjp0PT09ImJvb2tpbmdzIj8ieW91ciBib29raW5ncyI6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzIj8idGhlIHBvbGljaWVzIjoiYmFjayJ9LFBmPSgpPT57Y29uc3QgZT1oZSgiYmFja2J0biIpLHQ9ZmUuYXQoLTEpO2UuaGlkZGVuPSF0LHQmJihlLnRleHRDb250ZW50PWDigLkgJHt0LmxhYmVsfWApfTtsZXQgWHQ9IiIsUnM9IiIsY249MCxYYz0hMTtjb25zdCBDZj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKFJzPXQudHJpcElkKSxjbj1OdW1iZXIodC5jb3VudD8/MCksQXJyYXkuaXNBcnJheSh0LmxpbmVzKSYmKHp0PXQubGluZXMsWGM9ITApKX0sTV89ZT0+UnM/ey4uLmUsdHJpcDpSc306ZSxFZj1uZXcgTWFwLHFfPWU9Pntjb25zdCB0PVtlPy5ib29raW5nLC4uLkFycmF5LmlzQXJyYXkoZT8uYm9va2luZ3MpP2UuYm9va2luZ3M6W11dO2Zvcihjb25zdCBuIG9mIHQpbj8uY29uZmlybWF0aW9uQ29kZSYmbj8uZ3Vlc3Q/LmVtYWlsJiZFZi5zZXQoU3RyaW5nKG4uY29uZmlybWF0aW9uQ29kZSkudG9VcHBlckNhc2UoKSxTdHJpbmcobi5ndWVzdC5lbWFpbCkpfSxodD1lPT57Y29uc3QgdD1FZi5nZXQoZS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gdD97Ym9va2luZzplLGVtYWlsOnR9Ontib29raW5nOmV9fSxEXz1lPT5ZY1tlXT8/IiIsbXQ9ZT0+ISFZY1tlXTtsZXQgRmU9ImhvbGQiLHVzPSExLGd0PSExLEp0PSExO2NvbnN0IEJ1PWU9PntKdD1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfTtsZXQgTW89MCxBZj0iIixPZj0iIjtjb25zdCB0dD0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlYWQiKTtpZighZSlyZXR1cm47Y29uc3QgdD0oKT0+ZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KTt0KCksc2V0VGltZW91dCh0LDE4MCl9LE09KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89RF8oZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihKdClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO0J1KCEwKTtjb25zdCByPU1vO3JldHVybiBBZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpNXyh0KX0pLmZpbmFsbHkoKCk9PkJ1KCExKSkudGhlbihzPT57Q2Yocz8uX21ldGEpO2NvbnN0IGE9cz8uc3RydWN0dXJlZENvbnRlbnQsaT1hJiZuLmZvbGQ/bi5mb2xkKGEpOmEsdT1SXy5oYXMoZSkmJmkmJmkudmlldyE9PSJlcnJvciI7aWYocj09PU1vJiZpKXtBZj1hP0pTT04uc3RyaW5naWZ5KGEpOiIiLE9mPUpTT04uc3RyaW5naWZ5KGkpO2NvbnN0IGw9YW4oaSkhPT1hbihxKTtuLnB1c2ghPT0hMSYmem8oaSksdSYmKGpvKz0xKSxpLnZpZXc9PT0iYm9va2luZyImJihVdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLHhlPW51bGwpLChpLnZpZXc9PT0iY2FuY2VsbGVkInx8aS52aWV3PT09ImNoYW5nZWQiKSYmVXUoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLEVlKGkpLGwmJnR0KCl9ZWxzZSB1JiYoam8rPTEpO3JldHVybiBMXyhzLG4ubm90ZSksc30pfSxMXz0oZSx0KT0+e2NvbnN0IG49KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG89Pm8/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyFufHwhQWUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fEFlLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6dD9gJHt0fSAke1N0cmluZyhuKX1gOlN0cmluZyhuKX1dfSkuY2F0Y2goKCk9Pnt9KX07bGV0IGxzPSExO2NvbnN0IFVfPSIoVGhlIGNhcmQgcHJpY2VkIGl0cyBvd24gZGVmYXVsdCBkYXRlcywgdG9uaWdodCwgdG8gc2hvdyB0aGUgcm9vbXM7IHRoZSBndWVzdCBoYXMgbm90IGNob3NlbiB0aGVtLikiLEt0PWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LFd0PWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxCXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLEhfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7Ql99JHtjKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHtjKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLGVlPSgpPT5jdD9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke2MoeGZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIix1bj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sTnM9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLFFlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake3VuKGUuY2hlY2tJbil9IOKAkyAke3VuKGUuY2hlY2tPdXQpfSDCtyAke05zKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHtOcyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixGXz0oZSx0LG4pPT57Y29uc3Qgbz16dC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0sVl89KGUsdCk9Pntjb25zdCBuPXp0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxxbz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHtjKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHtjKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7YyhuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxSZj0oZSx0KT0+e2NvbnN0IG49dHx8TmYoKTtyZXR1cm4oIVQuY2hlY2tJbnx8VC5jaGVja0luPG4pJiYoVC5jaGVja0luPW4pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9S2UoVC5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7YyhuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKEtlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7YyhkcygpKX08L3NwYW4+CiAgPC9kaXY+YH0sZHM9KCk9Pntjb25zdCBlPVQuY2hlY2tJbiYmVC5jaGVja091dD9OcyhULmNoZWNrSW4sVC5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPVk+MT9gJHtZfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sS2U9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxOZj0oKT0+bmV3IERhdGUoRGF0ZS5ub3coKS1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqNmU0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLFpmPWU9Pntjb25zdCB0PVsuLi5lPy50b2RheT9bZS50b2RheS5taW4sZS50b2RheS5tYXhdOltdLC4uLihlPy5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8udG9kYXlUaGVyZT8/IiIpKV0uZmlsdGVyKG89Pi9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KG8pKS5zb3J0KCksbj1OZigpO3JldHVybnttaW46W3RbMF0/P24sbl0uc29ydCgpWzBdPz9uLHN0YXJ0OnQuYXQoLTEpPz9ufX0sSl89ZT0+e2NvbnN0e21pbjp0LHN0YXJ0Om59PVpmKGUpOyghVC5jaGVja0lufHxULmNoZWNrSW48dCkmJihULmNoZWNrSW49biksKCFULmNoZWNrT3V0fHxULmNoZWNrT3V0PD1ULmNoZWNrSW4pJiYoVC5jaGVja091dD1LZShULmNoZWNrSW4sMSkpO2NvbnN0IG89YDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7Yyh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHtjKFQuY2hlY2tPdXQpfSIgbWluPSIke2MoS2UoVC5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke2Uuc2NvcGU/IiI6JzxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kIj5TZWFyY2g8L2J1dHRvbj4nfQogICAgICA8L2Rpdj5gLHI9YDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgIDxsYWJlbCBjbGFzcz0id2hlcmUiPldoZXJlIHRvPGlucHV0IGlkPSJ3aGVyZSIgdHlwZT0ic2VhcmNoIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwiIGFyaWEtbGFiZWw9IldoZXJlIHRvIj48L2xhYmVsPgogICAgICAke299CiAgICA8L2Rpdj5gLHM9bD0+YDxkaXYgY2xhc3M9InBsYWNlcyI+JHtsLm1hcCgoZCxtKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKGQubmFtZSl9IiR7bT49bnQ/IiBoaWRkZW4iOiIifT4ke2MoZC5uYW1lKX0gPHNtYWxsPiR7YyhkLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfSR7bC5sZW5ndGg+bnQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHtsLmxlbmd0aC1udH0gbW9yZTwvYnV0dG9uPmA6IiJ9PC9kaXY+YCxhPWUuc2NvcGU7aWYoYSlyZXR1cm5bZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhhLm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLnRvdGFsKX0gJHtjKGUudm9jYWI/Lm5vdW5QbHVyYWw/PyJob3RlbHMiKX0gaW4gJHtjKChhLmNpdGllcz8/W10pLmxlbmd0aCl9IGNpdGllczwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InNlYXJjaCI+JHtvfTwvZGl2PmAscyhhLmNpdGllcz8/W10pLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlLWFsbD0iJHtjKGEubmFtZSl9Ij5BbGwgJHtjKGUudG90YWwpfSBpbiAke2MoYS5uYW1lKX08L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBpPWUucmVnaW9ucz8/W10sdT1pLmZsYXRNYXAobD0+bC5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKGw9PmwuY2l0aWVzPz9bXSkubWFwKChsLGQpPT4oe2M6bCxpOmR9KSkuc29ydCgobCxkKT0+TnVtYmVyKGQuYy5jb3VudCktTnVtYmVyKGwuYy5jb3VudCl8fGwuaS1kLmkpLnNsaWNlKDAsbnQpLm1hcCgoe2M6bH0pPT5sKTtyZXR1cm5bZWUoKSxyLHUubGVuZ3RoP2A8ZGl2IGNsYXNzPSJyZWdpb24iPjxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj5Ub3AgY2l0aWVzPC9kaXY+JHtzKHUpfTwvZGl2PmA6IiIsaS5sZW5ndGg/YDxkaXYgY2xhc3M9InJlZ2lvbiI+PGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPkJ5IHJlZ2lvbjwvZGl2PjxkaXYgY2xhc3M9InBsYWNlcyI+JHtpLm1hcCgobCxkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UgdGFiIiB0eXBlPSJidXR0b24iIGRhdGEtcmVnaW9uPSIke2R9IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+JHtjKGwubmFtZSl9IDxzbWFsbD4ke2MobC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj48L2Rpdj5gOiIiLC4uLmkubWFwKChsLGQpPT5gCiAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiIgZGF0YS1yZWdpb24tYm9keT0iJHtkfSIgaGlkZGVuPgogICAgICAgICR7KGwuY291bnRyaWVzPz9bXSkubWFwKChtLGIpPT57Y29uc3Qgdj1tLmNpdGllcz8/W10sXz12Lmxlbmd0aD09PTE/dlswXTp2b2lkIDA7cmV0dXJuYAogICAgICAgICAgPGRpdiBjbGFzcz0iZGVzdCIke2I+PXlzPyIgaGlkZGVuIjoiIn0+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3QtY291bnRyeSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2MobS5uYW1lKX0iPiR7YyhtLm5hbWUpfSR7XyYmXy5uYW1lIT09bS5uYW1lP2A8c21hbGw+IMK3ICR7YyhfLm5hbWUpfTwvc21hbGw+YDoiIn0gPHNtYWxsIGNsYXNzPSJuIj4ke2MobS5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj4KICAgICAgICAgICAgJHt2Lmxlbmd0aD4xP3Modik6IiJ9CiAgICAgICAgICA8L2Rpdj5gfSkuam9pbigiIil9CiAgICAgICAgJHsobC5jb3VudHJpZXM/P1tdKS5sZW5ndGg+eXM/YDxkaXYgY2xhc3M9InBsYWNlcyI+PGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1jb3VudHJpZXMiPiskeyhsLmNvdW50cmllcz8/W10pLmxlbmd0aC15c30gbW9yZSBjb3VudHJpZXM8L2J1dHRvbj48L2Rpdj5gOiIifQogICAgICA8L2Rpdj5gKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYWxsLWhvdGVscyI+QnJvd3NlIGFsbCAke2MoZS50b3RhbCl9PC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5GaW5kIGEgYm9va2luZzwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxudD04LHlzPTYsamY9ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O3JldHVybiB0P2A8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2ModC50b3RhbCl9PHNtYWxsIGNsYXNzPSJ0LXN1YiI+JHtOdW1iZXIodC5yb29tcyk+MT9gJHtjKHQucm9vbXMpfSByb29tcyDDlyBgOiIifSR7Yyh0Lm5pZ2h0cyl9ICR7TnVtYmVyKHQubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn0gwrcgdGF4ZXMgaW48L3NtYWxsPjwvc3Bhbj5gOmUubm9Sb29tc0ZvclN0YXk/YDxzcGFuIGNsYXNzPSJ0LWZyb20gdC1ub25lIj4key9zbGVlcHMvLnRlc3QoU3RyaW5nKGUubm9Sb29tc0ZvclN0YXkpKT9gTm8gcm9vbSBzbGVlcHMgJHtjKFQuZ3Vlc3RzKX1gOiJObyByb29tIGZvciB0aGVzZSBkYXRlcyJ9PC9zcGFuPmA6YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7ZS5mcm9tTmlnaHRseT9gJHtjKGUuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+YH0sS189ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O2lmKCF0KXJldHVybiIiO2NvbnN0IG49W3QuZnJlZUNhbmNlbGxhdGlvbj8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uPC9zcGFuPic6IiIsTnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJdLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/YDxzcGFuIGNsYXNzPSJ0LXRhZ3MiPiR7bi5qb2luKCIiKX08L3NwYW4+YDoiIn0sZW49KCk9PlQuY2hlY2tJbiYmVC5jaGVja091dD97Y2hlY2tJbjpULmNoZWNrSW4sY2hlY2tPdXQ6VC5jaGVja091dCxndWVzdHM6VC5ndWVzdHMsLi4uWT4xP3tyb29tczpZfTp7fX06e30sV189ZT0+e2NvbnN0e2NoZWNrSW46dCxjaGVja091dDpuLGd1ZXN0czpvLHJvb21zOnIsLi4uc309ZT8/e307cmV0dXJuIHN9LEdfPShlLHQpPT57Y29uc3R7bWluOm4sc3RhcnQ6b309WmYodCk7cmV0dXJuKCFULmNoZWNrSW58fFQuY2hlY2tJbjxuKSYmKFQuY2hlY2tJbj1vKSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PUtlKFQuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY2kiIHZhbHVlPSIke2MoVC5jaGVja0luKX0iIG1pbj0iJHtjKG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKEtlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0ibHJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICAke2U/YDxzcGFuIGNsYXNzPSJuaWdodHMiPiR7YyhkcygpKX08L3NwYW4+YDonPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InByaWNlLWxpc3QiPlNob3cgcHJpY2VzPC9idXR0b24+J30KICA8L2Rpdj5gfTtsZXQgUGU9ImRhdGVzIjtjb25zdCBNZj0iZGF0ZXMiLFRvPWU9Pntjb25zdCB0PWU/P3t9O3JldHVybnsuLi50LmJyYW5kP3ticmFuZDp0LmJyYW5kfTp7fSwuLi5BcnJheS5pc0FycmF5KHQuZmFjaWxpdGllcykmJnQuZmFjaWxpdGllcy5sZW5ndGg/e2ZhY2lsaXRpZXM6dC5mYWNpbGl0aWVzfTp7fSwuLi50LmZyZWVDYW5jZWxsYXRpb24/e2ZyZWVDYW5jZWxsYXRpb246ITB9Ont9LC4uLnQuYnJlYWtmYXN0P3ticmVha2Zhc3Q6ITB9Ont9fX0sSHU9ZT0+e2NvbnN0e2JyYW5kOnQsZmFjaWxpdGllczpuLGZyZWVDYW5jZWxsYXRpb246byxicmVha2Zhc3Q6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sUV89ZT0+e2NvbnN0IHQ9VG8oZSk7cmV0dXJuKHQuYnJhbmQ/MTowKSsodC5mYWNpbGl0aWVzPy5sZW5ndGg/PzApKyh0LmZyZWVDYW5jZWxsYXRpb24/MTowKSsodC5icmVha2Zhc3Q/MTowKX0sWV89ZT0+e2NvbnN0IHQ9ZS5yZWZpbmU7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj0ocixzLGEsaSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXI9IiR7YyhyKX0iIGFyaWEtcHJlc3NlZD0iJHtpPyJ0cnVlIjoiZmFsc2UifSI+JHtjKHMpfSA8c21hbGw+JHtjKGEpfTwvc21hbGw+PC9idXR0b24+YCxvPShyLHMpPT5zLmxlbmd0aD9gPGRpdiBjbGFzcz0iZmdyb3VwIj48c3BhbiBjbGFzcz0ic29ydHMtayI+JHtjKHIpfTwvc3Bhbj4ke3Muam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bbygiQnJhbmQiLCh0LmJyYW5kcz8/W10pLm1hcChyPT5uKGBicmFuZDoke3IubmFtZX1gLHIubmFtZSxyLmNvdW50LHIub24pKSksbygiSGFzIiwodC5mYWNpbGl0aWVzPz9bXSkubWFwKHI9Pm4oYGZhY2lsaXR5OiR7ci5rZXl9YCxyLmxhYmVsLHIuY291bnQsci5vbikpKSxvKCJSb29tIiwodC5yb29tPz9bXSkubWFwKHI9Pm4oci5rZXksci5sYWJlbCxyLmNvdW50LHIub24pKSldLmpvaW4oIiIpfSxYXz0oZSx0KT0+e2NvbnN0IG49cj0+TnVtYmVyKHIuc2xpY2UoOCwxMCkpLG89cj0+bmV3IERhdGUoYCR7cn1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse21vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KTtyZXR1cm4gbyhlKT09PW8odCk/YCR7bihlKX3igJMke24odCl9ICR7byh0KX1gOmAke24oZSl9ICR7byhlKX0g4oCTICR7bih0KX0gJHtvKHQpfWB9LHFmPShlLHQsbik9Pntjb25zdCBvPSEhZS5zdGF5Py5jaGVja0luLHI9UV8oZS5hc2spLHM9WV8oZSksYT1EZi5maW5kKChbbF0pPT5sPT09bik/LlsxXT8/IkRlZmF1bHQiLGk9bz9gJHtYXyhlLnN0YXkuY2hlY2tJbixlLnN0YXkuY2hlY2tPdXQpfSR7WT4xP2AgwrcgJHtZfSByb29tc2A6IiJ9YDoiQWRkIGRhdGVzIix1PShsLGQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSB0b29sIiB0eXBlPSJidXR0b24iIGRhdGEtcGFuZWw9IiR7bH0iIGFyaWEtZXhwYW5kZWQ9IiR7UGU9PT1sPyJ0cnVlIjoiZmFsc2UifSI+JHtkfTwvYnV0dG9uPmA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icGxhY2VzIHRvb2xiYXIiPgogICAgICAke3UoImRhdGVzIixjKGkpKX0KICAgICAgJHt0P3UoInNvcnQiLG49PT0iZ3JvdXAiPyJTb3J0IjpjKGEpKToiIn0KICAgICAgJHtzfHxyP3UoImZpbHRlcnMiLGBGaWx0ZXJzJHtyP2AgwrcgJHtyfWA6IiJ9YCk6IiJ9CiAgICAgICR7cj8nPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImNsZWFyLWZpbHRlcnMiPkNsZWFyPC9idXR0b24+JzoiIn0KICAgIDwvZGl2PgogICAgPGRpdiBkYXRhLXBhbmVsLWJvZHk9ImRhdGVzIiR7UGU9PT0iZGF0ZXMiPyIiOiIgaGlkZGVuIn0+JHtHXyhvLGUpfTwvZGl2PgogICAgJHt0P2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0ic29ydCIke1BlPT09InNvcnQiPyIiOiIgaGlkZGVuIn0+JHt0fTwvZGl2PmA6IiJ9CiAgICAke3M/YDxkaXYgY2xhc3M9ImZpbHRlci1wYW5lbCIgZGF0YS1wYW5lbC1ib2R5PSJmaWx0ZXJzIiR7UGU9PT0iZmlsdGVycyI/IiI6IiBoaWRkZW4ifT4ke3N9PC9kaXY+YDoiIn1gfSxEZj1bWyJncm91cCIsIkRlZmF1bHQiXSxbInByaWNlLWxvdyIsIkxvd2VzdCBwcmljZSJdLFsicHJpY2UtaGlnaCIsIkhpZ2hlc3QgcHJpY2UiXSxbInJhdGluZyIsIlJhdGluZyJdXSxlaz0zO2xldCBsbj0iaW5saW5lIixMZj1bXTtjb25zdCBkbj0oKT0+bG49PT0iZnVsbHNjcmVlbiIsZXU9KCk9Pntjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjb250ZW50IC50aWxlcyIpO2lmKGU/Lm9mZnNldFdpZHRoKXtjb25zdCBzPWdldENvbXB1dGVkU3R5bGUoZSkuZ3JpZFRlbXBsYXRlQ29sdW1ucy5zcGxpdCgiICIpLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7aWYocz4wKXJldHVybiBzfWNvbnN0IHQ9aGUoImNvbnRlbnQiKS5jbGllbnRXaWR0aHx8d2luZG93LmlubmVyV2lkdGh8fDAsbj10PD00NjAsbz1uPzE1MDoxOTYscj1uPzg6MTA7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5mbG9vcigodCtyKS8obytyKSkpfHwyfTtsZXQgdHU9MDtjb25zdCBwcz0oKT0+TWF0aC5tYXgoMiwodHV8fGV1KCkpKmVrKTtsZXQgRG89MDtjb25zdCB0az1lPT57RG89cHMoKTtjb25zdCB0PWRuKCk/ZS5ob3RlbHM/P1tdOihlLmhvdGVscz8/W10pLnNsaWNlKDAsRG8pLG49Wy4uLm5ldyBTZXQodC5tYXAodz0+U3RyaW5nKHcuY2l0eSkpKV0sbz13PT57Y29uc3QgJD10LmZpbmQoWj0+Wi5jaXR5PT09dyk/LmNvdW50cnk7cmV0dXJuICQmJiFTdHJpbmcoJCkuc3RhcnRzV2l0aCh3KT9TdHJpbmcoJCk6IiJ9LHI9Wy4uLm5ldyBTZXQodC5tYXAodz0+U3RyaW5nKHcuY291bnRyeT8/IiIpKSldLHM9ci5sZW5ndGg+MSxhPXc9PmAKICAgIDxkaXYgY2xhc3M9ImNpdHlncm91cCI+CiAgICAgICR7bi5sZW5ndGg+MT9gPGRpdiBjbGFzcz0iY2l0eW5hbWUiPiR7Yyh3KX0keyFzJiZvKHcpP2A8c21hbGw+IMK3ICR7YyhvKHcpKX08L3NtYWxsPmA6IiJ9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0idGlsZXMiPgogICAgICAgICR7dC5maWx0ZXIoJD0+JC5jaXR5PT09dykubWFwKCQ9PmAKICAgICAgICAgIDxidXR0b24gY2xhc3M9InRpbGUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKCQuaWQpfSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXNob3QiIHN0eWxlPSIke0t0KFN0cmluZygkLmlkKSl9Ij4KICAgICAgICAgICAgICAkeyQuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2MoJC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoV3QoU3RyaW5nKCQubmFtZSkpKX08L3NwYW4+CiAgICAgICAgICAgICAgJHskLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKCQuYnJhbmQpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7YygkLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHtjKG4ubGVuZ3RoPjE/JC5hcmVhPz8kLmNpdHk6WyQuYXJlYSwkLmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgICAgICR7amYoJCl9CiAgICAgICAgICAgICAgICAke0hfKCQucmF0aW5nKX0KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgJHtLXygkKX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxpPU51bWJlcihlLnRvdGFsPz90Lmxlbmd0aCksdT1OdW1iZXIoZS5vZmZzZXQ/PzApLGw9aS11LXQubGVuZ3RoLGQ9ZS5wbGFjZXM/P1tdO2UuYXNrPy5jaXR5O2NvbnN0IG09ZC5sZW5ndGg/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2QubWFwKCh3LCQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2Mody5wbGFjZSl9IiR7JD49bnQ/IiBoaWRkZW4iOiIifT4ke2Mody5sYWJlbCl9IDxzbWFsbD4ke2Mody5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke2QubGVuZ3RoPm50P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7ZC5sZW5ndGgtbnR9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiLGI9U3RyaW5nKGUuc29ydD8/Imdyb3VwIiksdj0hKChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MSksXz10Lmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJPcmRlciI+JHtEZi5maWx0ZXIoKFt3XSk9PnZ8fCF3LnN0YXJ0c1dpdGgoInByaWNlIikpLm1hcCgoW3csJF0pPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtc29ydD0iJHt3fSIgYXJpYS1wcmVzc2VkPSIke3c9PT1iPyJ0cnVlIjoiZmFsc2UifSI+JHskfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW2VlKCksbSxxZihlLF8sYiksZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7YyhlLndpZGVuZWQuZnJvbSl9LiBUaGVzZSBhcmUgJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiIsYDxkaXY+JHtzP3IubWFwKHc9PmA8ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+JHtjKHcpfTwvZGl2PiR7bi5maWx0ZXIoJD0+dC5zb21lKFo9PlouY2l0eT09PSQmJlN0cmluZyhaLmNvdW50cnk/PyIiKT09PXcpKS5tYXAoYSkuam9pbigiIil9YCkuam9pbigiIik6bi5tYXAoYSkuam9pbigiIil9PC9kaXY+YCwoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlF1b3RlZCBpbiAke2MoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSDigJQgbm8gcmF0ZSBpcyBhcHBsaWVkIGhlcmUsIHNvIHRoaXMgaXMgbm90IGEgcHJpY2Ugb3JkZXIuIE9uZSBjaXR5IG9yIG9uZSBjb3VudHJ5IGdpdmVzIG9uZSBjdXJyZW5jeS48L2Rpdj5gOiIiLGUub3ZlckJ1ZGdldD9gPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUub3ZlckJ1ZGdldCl9IG1vcmUgbWF0Y2hlZCBhbmQgY2FtZSBpbiBvdmVyIHRoZSBwcmljZSBjZWlsaW5nLjwvZGl2PmA6IiIsZG4oKT9sPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt1P2Ake3UrMX3igJMke3UrdC5sZW5ndGh9YDp0Lmxlbmd0aH0gb2YgJHtpfS48L2Rpdj4KICAgICAgICAgICAke09fKGBTaG93ICR7TWF0aC5taW4oMTIsbCl9IG1vcmVgLCdkYXRhLWFjdD0ibW9yZS1ob3RlbHMiJyl9YDoiIjpBXyh7ZnJvbTp1LGNvdW50OnQubGVuZ3RoLHRvdGFsOk51bWJlcihpKSxwcmV2OidkYXRhLWFjdD0icGFnZS1wcmV2IicsbmV4dDonZGF0YS1hY3Q9InBhZ2UtbmV4dCInLGFsbDpMZi5pbmNsdWRlcygiZnVsbHNjcmVlbiIpPydkYXRhLWFjdD0iZnVsbHNjcmVlbiInOm51bGwsbm91bjoiaG90ZWxzIn0pXS5qb2luKCIiKX0sbms9ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXSxuPWUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfSwgc28gdGhpcyBsb29rZWQgaW4gJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiI7cmV0dXJuIGUuYmVmb3JlRmlsdGVycz8oUGU9ImZpbHRlcnMiLFtlZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj4ke2MoZS53aHk/P2BOb25lIG9mIHRoZSAke2UuYmVmb3JlRmlsdGVyc30gaGVyZSBoYXMgYWxsIG9mIHRob3NlIHRvZ2V0aGVyLmApfTwvZGl2PmAscWYoZSwiIixTdHJpbmcoZS5hc2s/LnNvcnQ/PyJncm91cCIpKV0uam9pbigiIikpOnQubGVuZ3RoP1tlZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7Yyh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobz0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7S3QoU3RyaW5nKG8uaWQpKX0iPgogICAgICAgICAgJHtvLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKG8uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoV3QoU3RyaW5nKG8ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtjKG8ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7Yyhbby5hcmVhLG8uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICR7amYobyl9CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YCR7bn08ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKGUud2h5Pz9gTm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZS5xdWVyeX0iYDoiIn0uIFRyeSBhIGNpdHkuYCl9PC9kaXY+YH0sVWY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke0t0KFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKFd0KFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke2MoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHtjKGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7YyhlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHtjKHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsb2s9KGUsdCxuKT0+e2NvbnN0IG89Rl8oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtLdChgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2ModC5pbWFnZVVybCl9IiBhbHQ9IiI+YDpjKFd0KFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25Mb2NhbD9gIHVudGlsICR7Yyh0LmZyZWVDYW5jZWxsYXRpb25Mb2NhbCl9YDoiIn08L3NwYW4+YDonPHNwYW4gY2xhc3M9ImJhZGdlIHdhcm4iPk5vbi1yZWZ1bmRhYmxlPC9zcGFuPid9CiAgICAgICAgICAke051bWJlcih0LnJvb21zTGVmdCk8PTM/YDxzcGFuIGNsYXNzPSJiYWRnZSI+JHtjKHQucm9vbXNMZWZ0KX0gbGVmdDwvc3Bhbj5gOiIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICR7dC5wdWJsaWNTdGF5VG90YWw/YDxkaXYgY2xhc3M9InAtd2FzIj4ke2ModC5wdWJsaWNSb29tc1RvdGFsPz90LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2ModC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2ModC5uaWdodGx5KX0gLyBuaWdodCArIHRheCR7WT4xP2AgwrcgJHtZfSByb29tc2A6IiJ9IMK3IHRvdGFsIHRheGVzIGluPC9kaXY+CiAgICAgICAgJHt0Lm1lbWJlclJhdGU/YDxkaXYgY2xhc3M9InAtbWVtYmVyIj4ke2ModC5tZW1iZXJSYXRlLnRpZXIpfSByYXRlPC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtxbyhgZGF0YS1hZGQtcm9vbT0iJHtjKHQuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaWQpfSJgLG8sU3RyaW5nKHQubmFtZSksWSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxyaz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhlKX0iIGRhdGEtY2k9IiR7YyhuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7Yyh1bihTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtjKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtjKHVuKFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/YyhuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsRnU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/VDtyZXR1cm5bZWUoKSxVZih0KSxSZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxyayhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+b2sodCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7Yyh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7YyhyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPiR7YyhyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sc2s9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Moby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2ModC5uYW1lKX0gwrcgJHtjKFFlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcj09PSJwZXJzb24tbmlnaHQiPyJwZXJzb24gcGVyIG5pZ2h0IjpyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtxbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2ModC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcj09PSJwZXJzb24tbmlnaHQiPyJwZXJzb24gcGVyIG5pZ2h0IjpyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke3FvKGBkYXRhLWFkZC1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSJgLFZfKFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0saWs9ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2MoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtjKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2MoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtjKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9IiR7ZS5kYXk/YCBkYXRhLWRheT0iJHtjKGUuZGF5KX0iYDoiIn1gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke1FlKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHtjKGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke3FvKHQsTnVtYmVyKGUua2luZD09PSJleHRyYSI/ZS5vcmRlcmVkPz9lLnF1YW50aXR5Pz8xOmUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxWdT0oZSx0KT0+YDxkaXYgY2xhc3M9InN1bXMiPgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+Um9vbXMgYW5kIGFkZC1vbnM8L3NwYW4+PHNwYW4+JHtjKGUuc3VidG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlRheGVzIGFuZCBmZWVzPC9zcGFuPjxzcGFuPiR7YyhlLnRheGVzQW5kRmVlcyl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSBnb29kIj48c3Bhbj4ke2MoZS5tZW1iZXJTYXZpbmcudGllcil9IG1lbWJlciByYXRlPC9zcGFuPjxzcGFuPuKIkiAke2MoZS5tZW1iZXJTYXZpbmcuc2F2ZWQpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtjKHQpfTwvc3Bhbj48c3Bhbj4ke2MoZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+UG9pbnRzIHRoaXMgZWFybnM8L3NwYW4+PHNwYW4+JHtjKE51bWJlcihlLm1lbWJlclNhdmluZy5wb2ludHMpLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgPC9kaXY+YCxhaz1lPT57Y29uc3QgdD1lLmxpbmVzPz9bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW2VlKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+QnJvd3NlICR7YyhkZSl9IGhvdGVsczwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltlZSgpLG4ubWFwKG89PmAKICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJkYXkiPiR7Yyh1bihvKSl9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0icm93cyI+JHt0LmZpbHRlcihyPT5TdHJpbmcoci5kYXk/PyIiKT09PW8pLm1hcChpaykuam9pbigiIil9PC9kaXY+YCkuam9pbigiIiksKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobz0+YCR7YyhvLnRpdGxlKX06ICR7YyhvLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsLi4uQXJyYXkuaXNBcnJheShlLmdyb3VwcykmJmUuZ3JvdXBzLmxlbmd0aD4xP1tgPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VkIGluICR7YygoZS5jdXJyZW5jaWVzPz9bXSkuam9pbigiIGFuZCAiKSl9LCBzZXBhcmF0ZWx5LiBOb3RoaW5nIGhlcmUgY29udmVydHMgb25lIGludG8gdGhlIG90aGVyOyBlYWNoIGhvdGVsIGlzIGJvb2tlZCBhbmQgcGFpZCBpbiBpdHMgb3duLjwvZGl2PmAsLi4uZS5ncm91cHMubWFwKG89PlZ1KG8sby5nb2VzV2l0aEFTdGF5P2BJbiAke28uY3VycmVuY3l9LCBnb2VzIHdpdGggYSBzdGF5IC0gbm90IGluIHRoZSB0b3RhbGA6YFRvdGFsIGluICR7by5jdXJyZW5jeX1gKSldOltWdShlLCJUb3RhbCIpXSwuLi5BcnJheS5pc0FycmF5KGUubmVlZHNSb29tKSYmZS5uZWVkc1Jvb20ubGVuZ3RoP2UubmVlZHNSb29tLm1hcChvPT5gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgICAgPGI+R29lcyB3aXRoIGEgc3RheTwvYj4KICAgICAgICAgICAgIDxzcGFuPiR7Yygoby5leHRyYXM/P1tdKS5qb2luKCIgYW5kICIpKX0gaXMgJHtjKG8uaG90ZWxOYW1lKX0ncyBzZXJ2aWNlIGZvciBpdHMgZ3Vlc3RzLCBzbyBpdCBpcyBib29rZWQgd2l0aCBhIHJvb20gdGhlcmUgLSBvciBhZGRlZCB0byBhIGJvb2tpbmcgeW91IGFscmVhZHkgaGF2ZS48L3NwYW4+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaG90ZWxJZCl9Ij5Sb29tcyBhdCAke2Moby5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8L2Rpdj5gKTpbYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stYm9vayI+JHtGZT09PSJwYXktYXQtaG90ZWwiPyJCb29rIjoiUmVxdWVzdCBib29raW5nIn08L2J1dHRvbj48L2Rpdj5gLHVzP2A8ZGl2IGNsYXNzPSJub3RlIj5UaGlzIGlzIGEgdGVzdCBlbnZpcm9ubWVudC4gQm9va2luZyBoZXJlIG1ha2VzIGEgc2ltdWxhdGVkIGJvb2tpbmcsIG5vdCBhICR7YyhkZSl9IHJlc2VydmF0aW9uLCBhbmQgbm90aGluZyBpcyBwYWlkLjwvZGl2PmA6RmU9PT0icGF5LWF0LWhvdGVsIj9gPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIEJvb2tpbmcgbWFrZXMgYSByZXNlcnZhdGlvbiB3aXRoICR7YyhkZSl9LCBwYWlkIGF0IHRoZSBob3RlbCwgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmA6Y3Q/YDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBUaGlzIGlzIGEgZGVtb25zdHJhdGlvbjogcmVxdWVzdGluZyBhIGJvb2tpbmcgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUsIGJ1dCAke2MoZGUpfSBkb2VzIG5vdCByZWNlaXZlIGl0IGFuZCBubyByb29tIGlzIGhlbGQuPC9kaXY+YDpgPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFJlcXVlc3RpbmcgYSBib29raW5nIGFza3MgJHtjKGRlKX0gdG8gaG9sZCB0aGUgcm9vbXMgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmAsQmYoKV0sWHx8IW10KCJzaWduSW4iKT8iIjpgPGRpdiBjbGFzcz0ibm90ZSI+QSAke2MoZGUpfSBDaXJjbGUgbWVtYmVyPyA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPlNpZ24gaW4gZm9yIHRoZSBtZW1iZXIgcmF0ZTwvYnV0dG9uPi48L2Rpdj4ke0xvKCl9YF0uam9pbigiIil9LG51PVt7aWQ6ImtpbmctYmVkIixsYWJlbDoiS2luZyBiZWQifSx7aWQ6InR3aW4tYmVkcyIsbGFiZWw6IlR3aW4gYmVkcyJ9LHtpZDoiaGlnaC1mbG9vciIsbGFiZWw6IkhpZ2ggZmxvb3IifSx7aWQ6Imxvdy1mbG9vciIsbGFiZWw6IkxvdyBmbG9vciJ9LHtpZDoicXVpZXQtcm9vbSIsbGFiZWw6IlF1aWV0IHJvb20ifSx7aWQ6ImNvbm5lY3Rpbmctcm9vbXMiLGxhYmVsOiJDb25uZWN0aW5nIHJvb21zIn0se2lkOiJlYXJseS1jaGVjay1pbiIsbGFiZWw6IkVhcmx5IGNoZWNrLWluIn0se2lkOiJsYXRlLWFycml2YWwiLGxhYmVsOiJMYXRlIGFycml2YWwifSx7aWQ6ImFjY2Vzc2libGUtcm9vbSIsbGFiZWw6IkFjY2Vzc2libGUgcm9vbSJ9XSxjaz17ImtpbmctYmVkIjoidHdpbi1iZWRzIiwidHdpbi1iZWRzIjoia2luZy1iZWQiLCJoaWdoLWZsb29yIjoibG93LWZsb29yIiwibG93LWZsb29yIjoiaGlnaC1mbG9vciJ9O2xldCB4ZT1udWxsO2NvbnN0IEJmPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIiB2YWx1ZT0iJHtjKHhlPy5uYW1lPz8iIil9Ij48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiIgdmFsdWU9IiR7Yyh4ZT8uZW1haWw/PyIiKX0iPjwvbGFiZWw+CiAgICA8L2Rpdj4ke2d0P2AKICAgIDxsYWJlbD5QaG9uZTxpbnB1dCBpZD0iZ3Bob25lIiB0eXBlPSJ0ZWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBob3RlbCB0byByZWFjaCB5b3UiIHZhbHVlPSIke2MoeGU/LnBob25lPz8iIil9Ij48L2xhYmVsPmA6IiJ9CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke251Lm1hcCh0PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7Yyh0LmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoeGU/eGUucmVxdWVzdHM6WD8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyh0LmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7Yyh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7Yyh4ZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHtjKHhlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke2MoZGUpfSBtZWV0cyB3aGF0IGl0IGNhbiBvbiB0aGUgZGF5OyBub25lIG9mIGl0IGlzIGhlbGQuPC9kaXY+CiAgICAgICR7WD9gPGxhYmVsIGNsYXNzPSJyZW1lbWJlciI+PGlucHV0IGlkPSJncmVtZW1iZXIiIHR5cGU9ImNoZWNrYm94IiR7eGU/LnJlbWVtYmVyPyIgY2hlY2tlZCI6IiJ9PiBSZW1lbWJlciB0aGUgYmVkLCBmbG9vciBhbmQgcm9vbSByZXF1ZXN0cyBvbiBteSAke2MoWC5wcm9ncmFtbWU/PyJtZW1iZXJzaGlwIil9IGZvciBuZXh0IHRpbWU8L2xhYmVsPmA6IiJ9CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj4ke0ZlPT09InBheS1hdC1ob3RlbCI/IkJvb2sgdGhlc2Ugcm9vbXMiOmN0PyJSZXF1ZXN0IGJvb2tpbmciOiJIb2xkIHRoZXNlIHJvb21zIn08L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dXM/IkEgdGVzdCBib29raW5nOiBub3RoaW5nIGlzIGhlbGQgYW5kIG5vdGhpbmcgaXMgcGFpZC4iOkZlPT09InBheS1hdC1ob3RlbCI/Ik5vIGNhcmQgaXMgdGFrZW4gaGVyZSBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcGF5IGF0IHRoZSBob3RlbC4iOmN0PyJObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFRoaXMgaXMgYSBkZW1vbnN0cmF0aW9uOiBubyByb29tIGlzIGhlbGQuIjoiTm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uIn08L2Rpdj4KICA8L2Rpdj5gLHVrPWU9PmUubGVuZ3RoPjE/YCR7ZS5zbGljZSgwLC0xKS5qb2luKCIsICIpfSBhbmQgJHtlLmF0KC0xKX1gOmVbMF0/PyIiLGxrPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke2ModWsoZS5taXNzaW5nPz9bXSl8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsQmYoITApXS5qb2luKCIiKSxkaz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW2VlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgICR7dC5uYW1lP2A8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+YDonPGRpdiBjbGFzcz0id2hlcmUiPlNpZ25lZCBpbjwvZGl2Pid9CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgJHt0eXBlb2YgdC5wb2ludHM9PSJudW1iZXIiP2A8ZGl2IGNsYXNzPSJ3aGVuIj4ke2ModC5wb2ludHMudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHtjKE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke2ModC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLCh0LnByZWZlcmVuY2VzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgPGI+U2F2ZWQgZm9yIHlvdXIgbmV4dCBzdGF5czwvYj4KICAgICAgICAgICA8c3Bhbj4ke2ModC5wcmVmZXJlbmNlcy5tYXAobj0+bnUuZmluZChvPT5vLmlkPT09bik/LmxhYmVsPz9uKS5qb2luKCIsICIpKX0gLSB0aWNrZWQgb24gdGhlIGJvb2tpbmcgZm9ybSwgYW5kIGFza2VkIGZvciBvbmx5IHdoZW4geW91IGJvb2sgd2l0aCB0aGVtLjwvc3Bhbj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZm9yZ2V0LXByZWZzIj5Gb3JnZXQgdGhlbTwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0scGs9KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLExvKCEwKV0uam9pbigiIiksTG89KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxoaz1lPT57Y29uc3QgdD1lLnJlcXVlc3RlZD8/W107cmV0dXJuIHQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCR7ZS5hY2Nlc3NpYmlsaXR5PyIgZmxhZyI6IiJ9Ij4KICAgIDxiPlJlcXVlc3RlZCwgbm90IGhlbGQ8L2I+CiAgICAke3QubWFwKG49PmA8c3Bhbj4ke2Mobil9PC9zcGFuPmApLmpvaW4oIiIpfQogIDwvZGl2PmA6IiJ9LF9zPWU9PmUuaG9sZFVudGlsTG9jYWw/YCR7ZS5ob2xkVW50aWxMb2NhbH0gKGhvdGVsIHRpbWUpYDpgJHtTdHJpbmcoZS5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpfSBVVENgLGZrPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5ib29raW5ncykmJmUuYm9va2luZ3MubGVuZ3RoP2UuYm9va2luZ3M6W2UuYm9va2luZz8/e31dLG49dC5sZW5ndGg+MSxvPShyLHMsYSk9PltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHIuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtjKFFlKHIuc3RheSkpfSDCtyAke2Moci5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgICAgPC9kaXY+YCxuJiZGZT09PSJob2xkIj9gPGRpdiBjbGFzcz0ibm90ZSI+JHtjdD8iRGVtb25zdHJhdGlvbiBob2xkIGxhcHNlcyBhdCI6IkhlbGQgdW50aWwifSAke2MoX3MocikpfS48L2Rpdj5gOiIiLEZlPT09InBheS1hdC1ob3RlbCImJnIuc3RhdHVzPT09InJlcXVlc3RlZCI/YDxkaXYgY2xhc3M9Im5vdGUiPldhaXRpbmcgZm9yICR7YyhkZSl9IHRvIGNvbmZpcm0gdGhpcyBib29raW5nIOKAlCB0aGF0IHRha2VzIHVwIHRvIGVpZ2h0IG1pbnV0ZXMuIE15IGJvb2tpbmdzIHNob3dzIHdoZW4gaXQgaGFzLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7YyhzKX08L3NwYW4+PC9kaXY+YCxoayhhKSxgPGRpdiBjbGFzcz0icm93cyI+JHsoci5xdW90ZT8ubGluZXM/P1tdKS5tYXAoZ2spLmpvaW4oIiIpfTwvZGl2PmAsbj9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAke210KCJsaXN0RXh0cmFzIik/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPmA6IiJ9CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtjKHIuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bZWUoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwga2VlcHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyAke210KCJjaGFuZ2VCb29raW5nIik/ImNoYW5nZWQgb3IgY2FuY2VsbGVkIjoiY2FuY2VsbGVkIn0gb24gaXRzIG93bi48L2Rpdj5gOiIiLHVzP2A8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+QSB0ZXN0IGJvb2tpbmcuPC9iPgogICAgICAgPHNwYW4+TWFkZSBpbiBhIHNpbXVsYXRlZCBjb3B5IG9mICR7YyhkZSl9J3Mgc3lzdGVtOiBub3QgYSAke2MoZGUpfSByZXNlcnZhdGlvbiwgbm8gcm9vbSBpcyBoZWxkLCBhbmQgbm90aGluZyBpcyBwYWlkLjwvc3Bhbj4KICAgICA8L2Rpdj5gOkZlPT09InBheS1hdC1ob3RlbCI/YDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJFYWNoIGlzIjoiVGhpcyBpcyJ9ICR7YyhkZSl9J3Mgb3duIHJlc2VydmF0aW9uLCBwYWlkIGF0IHRoZSBob3RlbC4gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmA6Y3Q/YDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+VGhpcyBpcyBhIGRlbW9uc3RyYXRpb24gYm9va2luZzogJHtjKGRlKX0gaGFzIG5vdCByZWNlaXZlZCBpdCBhbmQgbm8gcm9vbSBpcyBoZWxkLiAke24/IkVhY2ggZGVtb25zdHJhdGlvbiBob2xkIGxhcHNlcyBhdCB0aGUgdGltZSB1bmRlciBpdHMgY29kZS4iOmBUaGUgZGVtb25zdHJhdGlvbiBob2xkIGxhcHNlcyBhdCAke2MoX3ModFswXSkpfS5gfTwvc3Bhbj4KICAgICA8L2Rpdj5gOmA8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPiR7bj8iVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsIHRoZSB0aW1lIHVuZGVyIGVhY2ggY29kZS4iOmBUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgJHtjKF9zKHRbMF0pKX0uYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAocj0+bj9vKHIsU3RyaW5nKHIudG90YWw/PyIiKSxyKTpvKHIsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmAke210KCJsaXN0RXh0cmFzIik/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj5gOiIifQogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2ModFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+YH0KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sbWs9ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLmRldGFpbD8/ZS53aHk/PyJUaGF0IGNvdWxkIG5vdCBiZSBkb25lLiIpfTwvZGl2PmAsY24+MD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiPlZpZXcgdGhlIHRyaXA8L2J1dHRvbj48L2Rpdj4nOiIiXS5qb2luKCIiKSxnaz1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhlLmtpbmQ9PT0icm9vbSI/UWUoZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAsYms9e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIixmYWlsZWQ6ImJhZCIsdW5jb25maXJtZWQ6Indhcm4ifSx2az1lPT57Y29uc3QgdD1lLnJlcXVlc3RzPy5raW5kcz8/W107aWYoIXQubGVuZ3RoKXJldHVybiIiO2NvbnN0IG49dC5tYXAobz0+bnUuZmluZChyPT5yLmlkPT09byk/LmxhYmVsPz9vKTtyZXR1cm5gPGRpdiBjbGFzcz0ibWV0YSBhc2tlZC1saW5lIj5Bc2tlZCBmb3IgJHtjKG4uam9pbigiLCAiKS50b0xvd2VyQ2FzZSgpKX08L2Rpdj5gfSx5az1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXSxuPWUubm90Rm91bmQ/YDxkaXYgY2xhc3M9ImVyciI+JHtjKGUudG9vTWFueT9lLm5vdEZvdW5kTGluZTpgTm8gYm9va2luZyBtYXRjaGVzICR7ZS5ub3RGb3VuZH0gd2l0aCB0aGF0IGVtYWlsLiBCb3RoIGhhdmUgdG8gYmUgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi5gKX08L2Rpdj5gOiIiO3JldHVybiBlLm5vdEZvdW5kJiZ0Lmxlbmd0aD09PTA/YCR7bn0KICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQtYm9va2luZyI+VHJ5IGFnYWluPC9idXR0b24+PC9kaXY+YDp0Lmxlbmd0aD09PTA/JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5ncyBpbiB0aGlzIGNvbnZlcnNhdGlvbiB5ZXQuPC9kaXY+JzpbZWUoKSxuLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QubWFwKG89PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhvLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moby5jb25maXJtYXRpb25Db2RlKX0gwrcgJHtjKFFlKG8uc3RheSkpfTwvZGl2PgogICAgICAgICAgJHt2ayhvKX0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+PHNwYW4gY2xhc3M9ImJhZGdlICR7YmtbU3RyaW5nKG8uc3RhdHVzKV0/PyIifSI+JHtjKG8uc3RhdHVzKX08L3NwYW4+PC9kaXY+CiAgICAgICAgICAke28uc3RhdHVzPT09InVuY29uZmlybWVkIj9gPGRpdiBjbGFzcz0ibWV0YSI+Tm90IGtub3duIHlldCB3aGV0aGVyICR7YyhkZSl9IG1hZGUgdGhpcyBib29raW5nIOKAlCBhIHBlcnNvbiBpcyBjb25maXJtaW5nIGl0LjwvZGl2PmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhvLnF1b3RlPy50b3RhbD8/IiIpfTwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtvLnN0YXR1cz09PSJyZXF1ZXN0ZWQifHxvLnN0YXR1cz09PSJjb25maXJtZWQiP2Ake210KCJsaXN0RXh0cmFzIik/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPmA6IiJ9CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2Moby5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbDwvYnV0dG9uPmA6IiJ9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpfSxKdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2FuY2VsbGVkIixuPWUuYm9va2luZz8/e307cmV0dXJuW2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2FuY2VsbGVkIjoiQ2FuY2VsbGluZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGVlKCksYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtjKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sS3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNoYW5nZWQiLG49ZS5ib29raW5nPz97fSxvPWUuZnJvbT8/e30scj1lLnRvLHM9ISFyJiYoci5jaGVja0luIT09by5jaGVja0lufHxyLmNoZWNrT3V0IT09by5jaGVja091dHx8TnVtYmVyKHIucm9vbXMpIT09TnVtYmVyKG8ucm9vbXMpfHxyLnJvb21OYW1lIT09by5yb29tTmFtZSksYT0oaSx1LGwpPT51P2A8ZGl2IGNsYXNzPSJsZWcke2w/IiB3YXMiOiIifSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnayI+JHtjKGkpfTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ3YiPiR7Yyh1LmNoZWNrSW4pfSDihpIgJHtjKHUuY2hlY2tPdXQpfSDCtyAke2ModS5uaWdodHMpfSAke051bWJlcih1Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnbSI+JHtjKHUucm9vbU5hbWUpfSR7TnVtYmVyKHUucm9vbXMpPjE/YCDCtyAke2ModS5yb29tcyl9IHJvb21zYDoiIn0gwrcgJHtjKHUudG90YWwpfTwvZGl2PgogICAgICAgICA8L2Rpdj5gOiIiO3JldHVybltlZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2hhbmdlZCI6IkNoYW5naW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsZS5ob3RlbE5hbWU/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLmhvdGVsTmFtZSl9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibGVncyI+JHthKHQ/IldhcyI6Ik5vdyIsZS5mcm9tLHMpfSR7YSh0PyJOb3ciOiJXb3VsZCBiZSIsZS50bywhMSl9PC9kaXY+YCxlLmFkZE9uP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPiR7YyhlLmFkZE9uLm5hbWUpfTwvc3Bhbj48c3Bhbj4ke2MoZS5hZGRPbi5mcm9tKX0g4oaSICR7YyhlLmFkZE9uLnRvKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixlLmRpZmZlcmVuY2U/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtlLnJlZnVuZER1ZT90PyJUaGUgZGVzayBvd2VzIjoiV291bGQgY29tZSBiYWNrIjp0PyJUaGUgZGVzayBhc2tzIGZvciI6IldvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5kaWZmZXJlbmNlKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUucnVsZSl9PC9kaXY+YCx0Pyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+PC9kaXY+JzplLmNoYW5nZWFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5MZWF2ZSBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNoYW5nZT0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij4ke2UuYWRkT24mJmUuZnJvbT8uY2hlY2tJbj09PWUudG8/LmNoZWNrSW4mJmUuZnJvbT8uY2hlY2tPdXQ9PT1lLnRvPy5jaGVja091dD8iVXBkYXRlIHRoZSBib29raW5nIjoiTW92ZSB0aGUgYm9va2luZyJ9PC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIil9LGtzPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS52aWV3PT09InBvbGljeSI/YDxoND4ke2MoZS50aXRsZSl9PC9oND4ke2MoZS50ZXh0KX1gOihlLnRvcGljcz8/W10pLm1hcChvPT5gPGg0PiR7YyhvLnRpdGxlKX08L2g0PiR7YyhvLnRleHQpfWApLmpvaW4oIiIpO3JldHVybltgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7Yyh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgdGhlIGhvdGVsIHB1Ymxpc2hlczwvZGl2PjwvZGl2PmAsZS52aWV3PT09InBvbGljeS1taXNzaW5nIj9gPGRpdiBjbGFzcz0iZW1wdHkiPiR7Yyh0Lm5hbWUpfSBkb2VzIG5vdCBwdWJsaXNoIGFueXRoaW5nIGFib3V0IHRoYXQgaGVyZS48L2Rpdj5gOmA8ZGl2IGNsYXNzPSJwcm9zZSI+JHtufTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPkJhY2sgdG8gJHtjKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LF9rPWU9Pntjb25zdCB0PWUuY29sdW1ucz8/W10sbj1lLnJvd0xhYmVscz8/W10sbz10LnNvbWUocz0+cy5yZWNvbW1lbmRlZCkscj1zPT5gCiAgICA8ZGl2IGNsYXNzPSJjbXAtaGVhZCR7cy5yZWNvbW1lbmRlZD8iIHBpY2siOiIifSR7bz8iIG1hcmtlZCI6IiJ9Ij4KICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJwaWNrbWFyayR7cy5yZWNvbW1lbmRlZD8iIjoiIG5vbmUifSI+JHtzLnJlY29tbWVuZGVkPyJSZWNvbW1lbmRlZCI6IiJ9PC9kaXY+YDoiIn0KICAgICAgPGJ1dHRvbiBjbGFzcz0idC1zaG90IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhzLmhvdGVsLmlkKX0iIHN0eWxlPSIke0t0KFN0cmluZyhzLmhvdGVsLmlkKSl9Ij4KICAgICAgICAke3MuaG90ZWwuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Mocy5ob3RlbC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoV3QoU3RyaW5nKHMuaG90ZWwubmFtZSkpKX08L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtjKHMuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHtzLnByaWNlP2Ake2Mocy5wcmljZS5zdGF5VG90YWwpfTxzbWFsbCBjbGFzcz0ic3ViIj50b3RhbCDCtyAke2Mocy5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPmA6cy5mcm9tP2A8c21hbGw+RnJvbSA8L3NtYWxsPiR7YyhzLmZyb20pfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0id2h5JHtzLmJlc3RGb3I/IiI6IiBub25lIn0iPiR7cy5iZXN0Rm9yP2Mocy5iZXN0Rm9yKToiIn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGMiPiR7Wy4uLihzLnByb3M/P1tdKS5tYXAoYT0+YDxkaXYgY2xhc3M9InBybyI+PHNwYW4gY2xhc3M9Im0iPis8L3NwYW4+PHNwYW4+JHtjKGEpfTwvc3Bhbj48L2Rpdj5gKSwuLi4ocy5jb25zPz9bXSkubWFwKGE9PmA8ZGl2IGNsYXNzPSJjb24iPjxzcGFuIGNsYXNzPSJtIj7iiJI8L3NwYW4+PHNwYW4+JHtjKGEpfTwvc3Bhbj48L2Rpdj5gKV0uam9pbigiIil9PC9kaXY+CiAgICA8L2Rpdj5gO3JldHVybltlZSgpLGUudGl0bGU/YDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PmA6IiIsZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoUWUoZS5zdGF5KSl9PC9kaXY+YDoiIixBcnJheS5pc0FycmF5KGUuY3VycmVuY2llcykmJmUuY3VycmVuY2llcy5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VzIGFyZSBpbiBlYWNoIGhvdGVsJ3Mgb3duIGN1cnJlbmN5ICgke2MoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSkuIFRoZXkgYXJlIG5vdCBjb252ZXJ0ZWQsIHNvIHRoZSBjb2x1bW5zIGFyZSBub3QgYSBwcmljZSByYW5raW5nLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImNtcC13cmFwIj48ZGl2IGNsYXNzPSJjbXAke3QubGVuZ3RoPj00PyIgZm91ciI6IiJ9IiBzdHlsZT0iLS1jb2xzOiR7dC5sZW5ndGh9Oy0taGVhZC1yb3dzOiR7bz82OjV9Ij4KICAgICAgIDxkaXYgY2xhc3M9ImNtcC1jb3JuZXIiPjwvZGl2PgogICAgICAgJHt0Lm1hcChyKS5qb2luKCIiKX0KICAgICAgICR7bi5tYXAoKHMsYSk9PmA8ZGl2IGNsYXNzPSJrIj4ke2Mocyl9PC9kaXY+JHt0Lm1hcChpPT5gPGRpdiBjbGFzcz0idiR7YSUyPyIgYWx0IjoiIn0iPiR7YyhpLnJvd3M/LlthXT8udmFsdWU/PyLigJQiKX08L2Rpdj5gKS5qb2luKCIiKX1gKS5qb2luKCIiKX0KICAgICA8L2Rpdj48L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKHM9PmAke2Mocy5uYW1lKX06ICR7YyhzLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPk9wZW4gYSAke2MoZS52b2NhYj8ubm91bj8/ImhvdGVsIil9IHRvIHNlZSBpdHMgcm9vbXMke2Uuc3RheT8uY2hlY2tJbj8iIGZvciB0aGVzZSBuaWdodHMiOiIifS48L2Rpdj5gXS5qb2luKCIiKX0sa2s9ZT0+e2NvbnN0IHQ9ZS5kYXlzPz9bXSxuPWk9PmA8c3BhbiBjbGFzcz0iaW5zdGF0ZSAke2kuYm9va2VkfHxpLmluVHJpcD8ieWVzIjoibm8ifSI+JHtpLmJvb2tlZD9gQm9va2VkIMK3ICR7YyhpLmJvb2tlZCl9YDppLmluVHJpcD8iSW4gdGhlIHRyaXAiOiJQbGFuIG9ubHkifTwvc3Bhbj5gLG89aT0+YCBkYXRhLWhvdGVsPSIke2MoaS5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIiR7aS5jaGVja0luP2AgZGF0YS1jaT0iJHtjKGkuY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoaS5jaGVja091dCl9ImA6IiJ9YCxyPWk9PmkuY2hlY2tvdXQ/YDxkaXYgY2xhc3M9InBsYW4tbmlnaHQiJHtvKGkpfT48c3Bhbj5DaGVjayBvdXQgwrcgJHtjKGkubmFtZSl9PC9zcGFuPjwvZGl2PmA6TnVtYmVyKGkubmlnaHQ/PzEpPjE/YDxkaXYgY2xhc3M9InBsYW4tbmlnaHQiJHtvKGkpfT4KICAgICAgICAgICA8c3Bhbj5OaWdodCAke2MoaS5uaWdodCl9IG9mICR7YyhpLm5pZ2h0cyl9IMK3ICR7YyhpLm5hbWUpfTwvc3Bhbj4ke24oaSl9CiAgICAgICAgIDwvZGl2PmA6YDxkaXYgY2xhc3M9InBsYW4tc3RheSIke28oaSl9PgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcy1zaG90IiBzdHlsZT0iJHtLdChTdHJpbmcoaS5pZCkpfSI+JHtpLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGkuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6YDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhXdChTdHJpbmcoaS5uYW1lKSkpfTwvc3Bhbj5gfTwvc3Bhbj4KICAgICAgICAgICA8c3BhbiBjbGFzcz0icHMtYm9keSI+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldGEiPiR7YyhbaS5kZXRhaWwsaS5uaWdodHM/YCR7aS5uaWdodHN9ICR7aS5uaWdodHM9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IGhlcmVgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAke2kucHJpY2U/YDxzcGFuIGNsYXNzPSJwcy1wcmljZSI+JHtjKGkucHJpY2UpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICAgJHtuKGkpfQogICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgPC9kaXY+YCxzPWk9PmAKICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKFtpLmRldGFpbCxpLnByaWNlXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgICR7bihpKX0KICAgIDwvZGl2PmAsYT1pPT4oaS5wbGFuPz9bXSkubGVuZ3RoP2A8b2wgY2xhc3M9Im1vbWVudHMiPiR7aS5wbGFuLm1hcCh1PT5gPGxpPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGVuIj4ke2ModS50aW1lPz8iIil9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGF0Ij48Yj4ke2ModS53aGF0KX08L2I+JHt1Lm5vdGU/YDxzbWFsbD4ke2ModS5ub3RlKX08L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICA8L2xpPmApLmpvaW4oIiIpfTwvb2w+YDoiIjtyZXR1cm5bZWUoKSxgPGRpdj4KICAgICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgJHtlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhRZShlLnN0YXkpKX08L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9ImdhcCI+PGI+JHtjKE51bWJlcihlLmluVHJpcD8/MCkrTnVtYmVyKGUuYm9va2VkPz8wKSl9LyR7YyhlLnBsYW5uZWQpfTwvYj48c3Bhbj4ke2MoZS5nYXA/PyIiKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0iZGF5cyI+JHt0Lm1hcCgoaSx1KT0+YAogICAgICA8ZGl2IGNsYXNzPSJkYXlyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImRheW51bSI+PGI+JHt1KzF9PC9iPjxpPjwvaT48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXlib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRheWxhYmVsIj4ke2MoaS5sYWJlbCl9JHtpLmRhdGU/YDxzbWFsbD4gwrcgJHtjKHdrKFN0cmluZyhpLmRhdGUpKSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtpLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7YyhpLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAke2EoaSl9CiAgICAgICAgICAkeyhpLml0ZW1zPz9bXSkubWFwKGw9Pmwua2luZD09PSJob3RlbCI/cihsKTpzKGwpKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChpPT5gJHtjKGkubmFtZSl9OiAke2MoaS53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sd2s9ZT0+bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KSxFZT0oZSx0PSExKT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2NvbnN0IG49dCYmZS52aWV3PT09Im1lbWJlciImJlg/ey4uLmUsbWVtYmVyOlh9OmU7cV8obiksbi50b29sTmFtZXMmJihZYz1uLnRvb2xOYW1lcyksKG4uYm9va2luZ01vZGU9PT0icGF5LWF0LWhvdGVsInx8bi5ib29raW5nTW9kZT09PSJob2xkIikmJihGZT1uLmJvb2tpbmdNb2RlKSx0eXBlb2Ygbi50b29sTmFtZXM9PSJvYmplY3QiJiYodXM9bi5zYW5kYm94PT09ITAsZ3Q9bi5waG9uZVJlcXVpcmVkPT09ITApLG4uYnJhbmQmJihkZT1TdHJpbmcobi5icmFuZCkpLG4ubG9nb1VybCYmKHZzPVN0cmluZyhuLmxvZ29VcmwpKSx0eXBlb2Ygbi5kZW1vPT0iYm9vbGVhbiImJihjdD1uLmRlbW8pLG4uZGVtb05vdGUmJih4Zj1TdHJpbmcobi5kZW1vTm90ZSkpLHR5cGVvZiBuLnJvb21zX3dhbnRlZD09Im51bWJlciI/WT1uLnJvb21zX3dhbnRlZDoobi52aWV3PT09ImhvdGVscyJ8fG4udmlldz09PSJkZXN0aW5hdGlvbnMifHxuLnZpZXc9PT0ibm8taG90ZWxzIikmJm4uc3RheT8uY2hlY2tJbiYmIWJ0JiYoWT1NYXRoLm1heCgxLE51bWJlcihuLmFzaz8ucm9vbXM/PzEpfHwxKSksdHx8KG4udmlldz09PSJtZW1iZXIiJiZuLm1lbWJlcj8udGllcj8ubmFtZT9YPW4ubWVtYmVyOm4ubWVtYmVyPy50aWVyPy5uYW1lJiYoWD1YPy5wcm9ncmFtbWU9PT1uLm1lbWJlci5wcm9ncmFtbWUmJlg/LnRpZXI/Lm5hbWU9PT1uLm1lbWJlci50aWVyLm5hbWU/ey4uLlgsLi4ubi5tZW1iZXIscHJlZmVyZW5jZXM6bi5tZW1iZXIucHJlZmVyZW5jZXN9Om4ubWVtYmVyKSwobi52aWV3PT09InNpZ25lZC1vdXQifHxuLnNpZ25lZEluPT09ITEpJiYoWD1udWxsKSksbi5zdGF5Py5jaGVja0luJiYhdG4mJiFidCYmKFQ9e2NoZWNrSW46bi5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6bi5zdGF5LmNoZWNrT3V0LGd1ZXN0czpuLnN0YXkuZ3Vlc3RzPz8yfSksIVhjJiYobi52aWV3PT09InRyaXAifHxuLnZpZXc9PT0ibmVlZHMtZGF0ZXMiKSYmKHp0PW4ubGluZXM/P1tdKSwobi52aWV3PT09ImJvb2tpbmcifHxuLnZpZXc9PT0iZW1wdHktdHJpcCIpJiYoenQ9W10sY249MCksVWU9U3RyaW5nKG4udmlldz8/IiIpLFBmKCk7Y29uc3Qgbz1oZSgiYnJhbmQiKTt2cz8oby5zcmM9dnMsby5oaWRkZW49ITEsaGUoInRpdGxlIikuaGlkZGVuPSEwKTooby5oaWRkZW49ITAsaGUoInRpdGxlIikuaGlkZGVuPSExLGhlKCJ0aXRsZSIpLnRleHRDb250ZW50PWRlfHwiSG90ZWxzIiksaGUoInN1YiIpLnRleHRDb250ZW50PXprKG4pLElrKCksVGsoKTtjb25zdCByPXtob3RlbHM6dGssZGVzdGluYXRpb25zOkpfLCJuby1ob3RlbHMiOm5rLGhvdGVsOkZ1LCJuby1yb29tcyI6RnUsImhvdGVsLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhhdCBob3RlbCBpcyBub3QgaW4gdGhpcyBjb25uZWN0b3IuPC9kaXY+JyxleHRyYXM6c2ssdHJpcDphaywibmVlZHMtZGF0ZXMiOlNrLGJvb2tpbmc6ZmssIm5lZWRzLWd1ZXN0IjpsayxtZW1iZXI6ZGssIm1lbWJlci1ub3QtZm91bmQiOnBrLCJzaWduZWQtb3V0IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5TaWduZWQgb3V0LiBSYXRlcyBhcmUgdGhlIHB1YmxpYyBvbmVzIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj48L2Rpdj4nLCJlbXB0eS10cmlwIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGVyZSBpcyBub3RoaW5nIGluIHRoZSB0cmlwIHlldC48L2Rpdj4nLGJvb2tpbmdzOnlrLCJjYW5jZWxsYXRpb24tcHJldmlldyI6SnUsY2FuY2VsbGVkOkp1LCJjaGFuZ2UtcHJldmlldyI6S3UsY2hhbmdlZDpLdSwiYm9va2luZy1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmcgaGVyZSBtYXRjaGVzIHRoYXQgY29kZS48L2Rpdj4nLGNvbXBhcmlzb246X2ssIm5vdGhpbmctdG8tY29tcGFyZSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9uZSBvZiB0aG9zZSBhcmUgaG90ZWxzIHRoaXMgY29ubmVjdG9yIGtub3dzLjwvZGl2PicsaXRpbmVyYXJ5OmtrLCJlbXB0eS1pdGluZXJhcnkiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPkFuIGl0aW5lcmFyeSBuZWVkcyBhdCBsZWFzdCBvbmUgZGF5LjwvZGl2PicscG9saWN5OmtzLHBvbGljaWVzOmtzLCJwb2xpY3ktbWlzc2luZyI6a3MsZXJyb3I6bWssImZpbmQtYm9va2luZyI6KCk9PltlZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5BIGJvb2tpbmcgbWFkZSBpbiBhbm90aGVyIGNvbnZlcnNhdGlvbiBpcyBmb3VuZCB3aXRoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIGl0IHdhcyBtYWRlIHdpdGggLSBib3RoLCBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvcm0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgICAgICA8bGFiZWw+Q29uZmlybWF0aW9uIGNvZGU8aW5wdXQgaWQ9ImZjb2RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlNMLeKApiI+PC9sYWJlbD4KICAgICAgICAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZm1haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBvbmUgb24gdGhlIGJvb2tpbmciPjwvbGFiZWw+CiAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Imxvb2t1cC1ib29raW5nIj5GaW5kIGl0PC9idXR0b24+CiAgICAgICAgIDwvZGl2PmBdLmpvaW4oIiIpLCJuby1tZW1iZXIiOigpPT5gPGRpdiBjbGFzcz0iZW1wdHkiPk5vYm9keSBpcyBzaWduZWQgaW4sIHNvIHRoZXJlIGlzIG5vdGhpbmcgc2F2ZWQgdG8gZm9yZ2V0LjwvZGl2PiR7TG8oITApfWAsIm1lbWJlci1zaWduLWluIjooKT0+W2VlKCksJzxkaXYgY2xhc3M9Im5vdGUiPlNpZ24gaW4gd2l0aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIHByaW50ZWQgb24gdGhlIGNhcmQgdG8gc2VlIHRoZSBtZW1iZXIgcmF0ZSBvbiBldmVyeSBwcmljZSBoZXJlLjwvZGl2PicsTG8oITApXS5qb2luKCIiKX07KFVlPT09ImhvdGVsInx8VWU9PT0ibm8tcm9vbXMifHxVZT09PSJuZWVkcy1kYXRlcyIpJiZuLmhvdGVsPy5pZD8oWHQ9U3RyaW5nKG4uaG90ZWwuaWQpLG4ubmVlZHNEYXRlcyYmc2V0VGltZW91dCgoKT0+aHMoMCwhbHMpLDApKTooWHQ9IiIsb3UoKSkscT1uO2NvbnN0IHM9cltVZV07aGUoImNvbnRlbnQiKS5pbm5lckhUTUw9KHM/cyhuKTpgPGRpdiBjbGFzcz0iZXJyIj4ke2Mobi5lcnJvcj8/IlNvbWV0aGluZyBjYW1lIGJhY2sgdGhhdCB0aGlzIGNhcmQgZG9lcyBub3Qga25vdyBob3cgdG8gZHJhdy4iKX0ke24uZGV0YWlsP2A8YnI+JHtjKG4uZGV0YWlsKX1gOiIifTwvZGl2PmApKyRrKG4pLFVlPT09ImhvdGVscyImJiFkbigpJiYodHU9ZXUoKSxwcygpIT09RG8mJkVlKG4sdCkpfSwkaz1lPT57Y29uc3QgdD0hIUFlLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8ubWVzc2FnZSxuPShlLnN1Z2dlc3Rpb25zPz9bXSkubWFwKChvLHIpPT5vPy5hc2t8fG8/LmFza3M/Lmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX08L2J1dHRvbj5gOm8/LnNheSYmdD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBzYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zdWdnZXN0PSIke3J9Ij4ke2Moby5sYWJlbCl9IDxzbWFsbD7CtyBpbiB0aGUgY2hhdDwvc21hbGw+PC9idXR0b24+YDoiIikuam9pbigiIik7cmV0dXJuIG4/YDxkaXYgY2xhc3M9InN1Z2dlc3QiPiR7bn08L2Rpdj5gOiIifSxTaz1lPT5bZWUoKSxlLmhvdGVsP1VmKGUuaG90ZWwpOiIiLGA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLndoeT8/IldoaWNoIG5pZ2h0cz8gQSByb29tIG5lZWRzIGEgY2hlY2staW4gYW5kIGEgY2hlY2stb3V0IGRhdGUuIil9PC9kaXY+YCxSZihTdHJpbmcoZS5ob3RlbD8uaWQ/PyIiKSxlLmhvdGVsPy50b2RheVRoZXJlKV0uam9pbigiIiksems9ZT0+ZS52aWV3PT09ImhvdGVscyI/YCR7ZS50b3RhbD8/MH0gJHtOdW1iZXIoZS50b3RhbCk9PT0xPyJob3RlbCI6ImhvdGVscyJ9YDplLnZpZXc9PT0iaG90ZWwifHxlLnZpZXc9PT0ibm8tcm9vbXMiP1FlKGUuc3RheSk6ZS52aWV3PT09InRyaXAiPyhlLmxpbmVzPz9bXSkubGVuZ3RoP1N0cmluZyhlLnRvdGFsPz8iIik6IiI6ZS52aWV3PT09ImNvbXBhcmlzb24iP2AkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA6ZS52aWV3PT09Iml0aW5lcmFyeSI/TnVtYmVyKGUuYm9va2VkKT4wP2Ake2UuYm9va2VkfS8ke2UucGxhbm5lZH0gYm9va2VkYDpgJHtlLmluVHJpcH0vJHtlLnBsYW5uZWR9IGluIHRoZSB0cmlwYDplLnZpZXc9PT0iYm9va2luZ3MiP2Ake2UuY291bnQ/PzB9IGJvb2tpbmcke051bWJlcihlLmNvdW50KT09PTE/IiI6InMifWA6IiIsVGs9KCk9Pntjb25zdCBlPWhlKCJtZW1iZXJjaGlwIik7WD8oZS5oaWRkZW49ITEsZS50ZXh0Q29udGVudD1gJHtYLnRpZXI/Lm5hbWU/PyJNZW1iZXIifSDCtyAke01hdGgucm91bmQoKFgudGllcj8uZGlzY291bnQ/PzApKjEwMCl9JSBvZmZgLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsIm1lbWJlciIpLGUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsW1gubmFtZSxYLnByb2dyYW1tZV0uZmlsdGVyKHQ9PnR5cGVvZiB0PT0ic3RyaW5nIiYmdCkuam9pbigiIMK3ICIpKSk6KGUuaGlkZGVuPSFtdCgic2lnbkluIil8fFVlPT09Im1lbWJlci1ub3QtZm91bmQiLGUudGV4dENvbnRlbnQ9Ik1lbWJlciBzaWduIGluIixlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJhc2stc2lnbi1pbiIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKX0sSWs9KCk9Pntjb25zdCBlPWhlKCJoZWFkdHJpcCIpLHQ9WGM/Y246Y258fHp0Lmxlbmd0aDtlLmhpZGRlbj10PT09MHx8VWU9PT0idHJpcCIsaGUoImhlYWR0cmlwbiIpLnRleHRDb250ZW50PVN0cmluZyh0KX0seGs9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3UiKTtUPXtjaGVja0luOmU/LnZhbHVlPz9ULmNoZWNrSW4sY2hlY2tPdXQ6dD8udmFsdWU/P1QuY2hlY2tPdXQsZ3Vlc3RzOk51bWJlcihuPy52YWx1ZT8/VC5ndWVzdHMpfHwyfX0sSW89KGU9e30pPT5ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/e2NoZWNrSW46VC5jaGVja0luLGNoZWNrT3V0OlQuY2hlY2tPdXQsZ3Vlc3RzOlQuZ3Vlc3RzLC4uLmV9OmU7bGV0IFpzLHRuPSExO2NvbnN0IG91PSgpPT57Y2xlYXJUaW1lb3V0KFpzKSx0bj0hMX0saHM9KGU9MCx0PSExKT0+e1h0JiYoY2xlYXJUaW1lb3V0KFpzKSx0bj0hMCxacz1zZXRUaW1lb3V0KCgpPT57aWYoIVh0KXt0bj0hMTtyZXR1cm59aWYoSnQpe2hzKDE1MCx0KTtyZXR1cm59dG49ITEsTSgiZ2V0SG90ZWwiLHtob3RlbDpYdCxyb29tczpZLC4uLklvKCl9LHQ/e25vdGU6VV99Ont9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxSPWU9PntoZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSxbZGF0YS1ib29raW5nLWV4dHJhc10sW2RhdGEtYm9va2luZy1leHRyYV0sW2RhdGEtc3VnZ2VzdF0sW2RhdGEtcGxhY2VdLFtkYXRhLXBsYWNlLWFsbF0sW2RhdGEtc29ydF0sW2RhdGEtbGlzdC1yb29tc10sW2RhdGEtZmlsdGVyXSxbZGF0YS1wYW5lbF0sW2RhdGEtcmVnaW9uXSIpO2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFzayIpO2lmKG4hPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJ0cnVlIjt0LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIixTdHJpbmcoaykpO2NvbnN0IHo9Y2tbbl07ayYmeiYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmFza1tkYXRhLWFzaz0iJHt6fSJdYCk/LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSxIZigpO3JldHVybn1jb25zdCBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWxpc3Qtcm9vbXMiKTtpZihvIT09bnVsbCl7WT1NYXRoLm1pbihMdSxNYXRoLm1heCgxLFkrTnVtYmVyKG8pKSk7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibHJuIik7ayYmKGsudGV4dENvbnRlbnQ9U3RyaW5nKFkpKSxVbyg0NTApO3JldHVybn1jb25zdCByPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJvb21zLW4iKTtpZihyIT09bnVsbCl7eGsoKSxZPU1hdGgubWluKEx1LE1hdGgubWF4KDEsWStOdW1iZXIocikpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO2smJihrLnRleHRDb250ZW50PVN0cmluZyhZKSk7Y29uc3Qgej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7eiYmKHoudGV4dENvbnRlbnQ9ZHMoKSksaHMoNDUwKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtcm9vbSIpO2lmKHMhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHo9dC5jbGFzc0xpc3QuY29udGFpbnMoImFkZCIpJiYhdC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT9ZOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLEs9dC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT97Y2hlY2tJbjp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpPz8iIixjaGVja091dDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpPz8iIixndWVzdHM6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWd1Iik/PzIpfTpJbygpO00oImFkZFRvVHJpcCIse2hvdGVsOmsscm9vbTpzLHJvb21zOnosLi4uS30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihhIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1kYXkiKTtNKCJhZGRUb1RyaXAiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixleHRyYTphLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLC4uLms/e2RheTprfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZSIpO2lmKGkhPT1udWxsKXtjb25zdCBrPXE/LmFzaz8uc29ydCx6PXE/LnZpZXc9PT0iaG90ZWxzIj9xPy5hc2s/LnF1ZXJ5OnZvaWQgMDtqcygpO2NvbnN0IEs9cT8udmlldz09PSJkZXN0aW5hdGlvbnMifHwhIXE/LnN0YXk/LmNoZWNrSW47TSgibGlzdEhvdGVscyIsey4uLmk/e2NpdHk6aX06e30sLi4uaz97c29ydDprfTp7fSwuLi5pJiZ6P3txdWVyeTp6fTp7fSwuLi5xPy52aWV3PT09ImhvdGVscyI/VG8ocT8uYXNrKTp7fSwuLi5LP2VuKCk6e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgdT10LmdldEF0dHJpYnV0ZSgiZGF0YS1maWx0ZXIiKTtpZih1IT09bnVsbCl7Y29uc3Qgaz1xPy5hc2s/P3t9LHo9VG8oayk7aWYodS5zdGFydHNXaXRoKCJicmFuZDoiKSl7Y29uc3QgcmU9dS5zbGljZSg2KTt6LmJyYW5kPXouYnJhbmQ9PT1yZT92b2lkIDA6cmV9ZWxzZSBpZih1LnN0YXJ0c1dpdGgoImZhY2lsaXR5OiIpKXtjb25zdCByZT11LnNsaWNlKDkpLFJlPXouZmFjaWxpdGllcz8/W107ei5mYWNpbGl0aWVzPVJlLmluY2x1ZGVzKHJlKT9SZS5maWx0ZXIoWWU9PlllIT09cmUpOlsuLi5SZSxyZV19ZWxzZSh1PT09ImZyZWVDYW5jZWxsYXRpb24ifHx1PT09ImJyZWFrZmFzdCIpJiYoelt1XT0helt1XSk7Y29uc3QgSz1Ubyh6KTtNKCJsaXN0SG90ZWxzIix7Li4uSHUoayksLi4uS30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgZmlsdGVyIHRoZSBsaXN0LiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1zb3J0Iik7aWYobCE9PW51bGwpe1BlPU1mO2NvbnN0e3NvcnQ6aywuLi56fT1xPy5hc2s/P3t9O00oImxpc3RIb3RlbHMiLHsuLi56LC4uLmwhPT0iZ3JvdXAiP3tzb3J0Omx9Ont9fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCByZW9yZGVyIHRoZSBsaXN0LiIpKTtyZXR1cm59Y29uc3QgZD10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZS1hbGwiKTtpZihkIT09bnVsbCl7TSgibGlzdEhvdGVscyIse2NpdHk6ZCxhbGw6ITAsLi4uZW4oKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCBtPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmFzIik7aWYobSE9PW51bGwpe00oImxpc3RFeHRyYXMiLGh0KG0pKS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBiPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmctZXh0cmEiKTtpZihiIT09bnVsbCl7TSgicHJldmlld0NoYW5nZSIsey4uLmh0KHQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIpLGV4dHJhOmIscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHdvcmsgb3V0IHRoYXQgY2hhbmdlLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1leHRyYXMiKTtpZih2IT09bnVsbCl7TSgibGlzdEV4dHJhcyIse2hvdGVsOnYsLi4uSW8oKX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IF89dC5nZXRBdHRyaWJ1dGUoImRhdGEtcG9saWN5Iik7aWYoXyE9PW51bGwpe00oInBvbGljaWVzIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsdG9waWM6X30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGF0IHBvbGljeS4iKSk7cmV0dXJufWNvbnN0IHc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2FuY2VsIik7aWYodyE9PW51bGwpe00oInByZXZpZXdDYW5jZWxsYXRpb24iLGh0KHcpKS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHdvcmsgb3V0IHRoZSBmZWUuIikpO3JldHVybn1jb25zdCAkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2FuY2VsIik7aWYoJCE9PW51bGwpe00oImNhbmNlbEJvb2tpbmciLHsuLi5odCgkKSxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBaPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoWiE9PW51bGwpe2NvbnN0IGs9cT8udG8/P3t9LHo9cT8uZnJvbT8/e30sSz1xPy5hZGRPbixyZT1rLmNoZWNrSW4mJihrLmNoZWNrSW4hPT16LmNoZWNrSW58fGsuY2hlY2tPdXQhPT16LmNoZWNrT3V0KTtNKCJjaGFuZ2VCb29raW5nIix7Li4uaHQoWiksY29uZmlybWVkOiEwLC4uLnJlP3tjaGVja0luOmsuY2hlY2tJbixjaGVja091dDprLmNoZWNrT3V0fTp7fSwuLi5LPy5pZD97ZXh0cmE6Sy5pZCxxdWFudGl0eTpOdW1iZXIoSy50byl9Ont9LC4uLmsucm9vbXMhPT12b2lkIDAmJk51bWJlcihrLnJvb21zKSE9PU51bWJlcih6LnJvb21zKT97cm9vbXM6TnVtYmVyKGsucm9vbXMpfTp7fSwuLi5rLnJvb21OYW1lJiZrLnJvb21OYW1lIT09ei5yb29tTmFtZT97cm9vbTprLnJvb21OYW1lfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgY2hhbmdlIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IEk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWN0Iik7aWYoST09PSJiYWNrIil7V3UoKTtyZXR1cm59Y29uc3QgRz1JPT09ImJvb2tpbmdzIj8iYm9va2luZ3MiOnQuaGFzQXR0cmlidXRlKCJkYXRhLWhvdGVsIikmJiF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP2Bob3RlbDoke3QuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIil9YDoiIjtpZihHJiZmZS5sZW5ndGgmJmFuKGZlLmF0KC0xKT8ucGF5bG9hZCk9PT1HKXtXdSgpO3JldHVybn1jb25zdCBvZT10LmdldEF0dHJpYnV0ZSgiZGF0YS1yZWdpb24iKTtpZihvZSE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKSE9PSJ0cnVlIjtmb3IoY29uc3QgeiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yZWdpb25dIikpei5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLFN0cmluZyhrJiZ6PT09dCkpO2Zvcihjb25zdCB6IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJlZ2lvbi1ib2R5XSIpKXouaGlkZGVuPSFrfHx6LmdldEF0dHJpYnV0ZSgiZGF0YS1yZWdpb24tYm9keSIpIT09b2U7cmV0dXJufWlmKEk9PT0ibW9yZS1jb3VudHJpZXMiKXtmb3IoY29uc3QgayBvZih0LmNsb3Nlc3QoIltkYXRhLXJlZ2lvbi1ib2R5XSIpPz9kb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbCgiLmRlc3RbaGlkZGVuXSIpKWsuaGlkZGVuPSExO3QuY2xvc2VzdCgiLnBsYWNlcyIpPy5yZW1vdmUoKTtyZXR1cm59aWYoST09PSJtb3JlLXBsYWNlcyIpe2Zvcihjb25zdCBrIG9mKHQuY2xvc2VzdCgiLnBsYWNlcyIpPz9kb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbCgiLmNoaXAucGxhY2VbaGlkZGVuXSIpKWsuaGlkZGVuPSExO3QucmVtb3ZlKCk7cmV0dXJufWNvbnN0IEo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKTtpZihKIT09bnVsbCl7UGU9UGU9PT1KPyIiOko7Zm9yKGNvbnN0IGsgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcGFuZWwtYm9keV0iKSlrLmhpZGRlbj1rLmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbC1ib2R5IikhPT1QZTtmb3IoY29uc3QgayBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbF0iKSlrLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKGsuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsIik9PT1QZSkpO3JldHVybn1pZihJPT09ImNsZWFyLWZpbHRlcnMiKXtNKCJsaXN0SG90ZWxzIixIdShxPy5hc2spKS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGNsZWFyIHRoZSBmaWx0ZXJzLiIpKTtyZXR1cm59aWYoST09PSJhbGwtaG90ZWxzIil7anMoKSxNKCJsaXN0SG90ZWxzIix7YWxsOiEwLC4uLmVuKCl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKEk9PT0icHJpY2UtbGlzdCIpe1VvKDApO3JldHVybn1pZihJPT09ImZpbmQtYm9va2luZyIpe2NvbnN0IGs9e3ZpZXc6ImZpbmQtYm9va2luZyJ9O3pvKGspLEVlKGspLHR0KCksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0ibG9va3VwLWJvb2tpbmciKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy52YWx1ZS50cmltKCk/PyIiLHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCF6LmluY2x1ZGVzKCJAIikpe1IoIkJvdGggdGhlIGNvbmZpcm1hdGlvbiBjb2RlIGFuZCB0aGUgZW1haWwgdGhlIGJvb2tpbmcgd2FzIG1hZGUgd2l0aCwgcGxlYXNlLiIpO3JldHVybn1NKCJsaXN0Qm9va2luZ3MiLHtib29raW5nOmssZW1haWw6en0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9vayB0aGF0IHVwLiIpKTtyZXR1cm59aWYoST09PSJmaW5kIil7RmYoKTtyZXR1cm59aWYoST09PSJwYWdlLW5leHQifHxJPT09InBhZ2UtcHJldiIpe2NvbnN0IGs9cTtpZigha3x8ay52aWV3IT09ImhvdGVscyIpcmV0dXJuO2NvbnN0IHo9cHMoKSxLPU51bWJlcihrLm9mZnNldD8/MCkscmU9TWF0aC5taW4oeiwoay5ob3RlbHM/P1tdKS5sZW5ndGgpO00oImxpc3RIb3RlbHMiLHsuLi5rLmFzaz8/e30sb2Zmc2V0Okk9PT0icGFnZS1uZXh0Ij9LK3JlOk1hdGgubWF4KDAsSy16KSxsaW1pdDp6fSkudGhlbih0dCkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWlmKEk9PT0iZnVsbHNjcmVlbiIpe0FlLnJlcXVlc3REaXNwbGF5TW9kZSh7bW9kZToiZnVsbHNjcmVlbiJ9KS50aGVuKGs9Pntsbj1TdHJpbmcoaz8ubW9kZT8/bG4pO2NvbnN0IHo9cTtpZigheilyZXR1cm47Y29uc3QgSz1OdW1iZXIoei50b3RhbD8/MCk7ZG4oKSYmei52aWV3PT09ImhvdGVscyImJihOdW1iZXIoei5vZmZzZXQ/PzApPjB8fCh6LmhvdGVscz8/W10pLmxlbmd0aDxNYXRoLm1pbigxMixLKSk/TSgibGlzdEhvdGVscyIsey4uLnouYXNrPz97fSxsaW1pdDoxMn0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTpFZSh6KX0pLmNhdGNoKCgpPT5SKCJUaGlzIGFwcCBjYW5ub3Qgb3BlbiBmdWxsIHNjcmVlbiBoZXJlLiIpKTtyZXR1cm59aWYoST09PSJtb3JlLWhvdGVscyIpe2NvbnN0IGs9cTtpZigha3x8ay52aWV3IT09ImhvdGVscyIpcmV0dXJuO00oImxpc3RIb3RlbHMiLHsuLi5rLmFzaz8/e30sb2Zmc2V0Ok51bWJlcihrLm9mZnNldD8/MCkrKGsuaG90ZWxzPz9bXSkubGVuZ3RoLGxpbWl0OjEyfSx7Zm9sZDp6PT56Py52aWV3PT09ImhvdGVscyI/ey4uLnosaG90ZWxzOlsuLi5rLmhvdGVscz8/W10sLi4uei5ob3RlbHM/P1tdXSxzaG93bjooay5ob3RlbHM/P1tdKS5sZW5ndGgrKHouaG90ZWxzPz9bXSkubGVuZ3RoLG9mZnNldDpOdW1iZXIoay5vZmZzZXQ/PzApLHBsYWNlczprLnBsYWNlcywuLi5rLndpZGVuZWQ/e3dpZGVuZWQ6ay53aWRlbmVkfTp7fX06en0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCBtb3JlIGhvdGVscy4iKSk7cmV0dXJufWlmKEk9PT0iaG9tZSIpe00oImxpc3RIb3RlbHMiLHt9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKChJPT09Im1lbWJlciJ8fEk9PT0iZmluZC1ib29raW5nInx8ST09PSJhc2stc2lnbi1pbiIpJiZKdClyZXR1cm47aWYoST09PSJtZW1iZXIiKXtpZighWClyZXR1cm47Y29uc3Qgaz17dmlldzoibWVtYmVyIixtZW1iZXI6WH07em8oayksRWUoayksdHQoKTtyZXR1cm59aWYoST09PSJhc2stc2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNpZ25pbiIpO2lmKGspay5oaWRkZW49ITE7ZWxzZXtjb25zdCB6PXt2aWV3OiJtZW1iZXItc2lnbi1pbiJ9O3pvKHopLEVlKHopLHR0KCl9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJzaWduLWluIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy52YWx1ZS50cmltKCk/PyIiLHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1zdXIiKT8udmFsdWUudHJpbSgpPz8iIjtpZigha3x8IXope1IoIkJvdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBvbiBpdCwgcGxlYXNlLiIpO3JldHVybn1NKCJzaWduSW4iLHtudW1iZXI6ayxzdXJuYW1lOnp9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHNpZ24gaW4uIikpO3JldHVybn1pZihJPT09ImZvcmdldC1wcmVmcyIpe00oImZvcmdldFByZWZlcmVuY2VzIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBmb3JnZXQgdGhlbS4iKSk7cmV0dXJufWNvbnN0IEY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc3VnZ2VzdCIpO2lmKEYhPT1udWxsKXtjb25zdCBrPShxPy5zdWdnZXN0aW9ucz8/W10pW051bWJlcihGKV07az8uYXNrPy50b29sP00oU3RyaW5nKGsuYXNrLnRvb2wpLGsuYXNrLmFyZ3M/P3t9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGRvIHRoYXQganVzdCBub3cuIikpOkFycmF5LmlzQXJyYXkoaz8uYXNrcykmJmsuYXNrcy5sZW5ndGg/KGFzeW5jKCk9Pntmb3IoY29uc3RbeixLXW9mIGsuYXNrcy5lbnRyaWVzKCkpYXdhaXQgTShTdHJpbmcoSy50b29sKSxLLmFyZ3M/P3t9LHtwdXNoOno9PT0wfSl9KSgpLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgcHV0IGFsbCBvZiB0aGVtIGluIHRoZSB0cmlwIGp1c3Qgbm93LiIpKTprPy5zYXkmJkFlLnNlbmRNZXNzYWdlKHtyb2xlOiJ1c2VyIixjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDpTdHJpbmcoay5zYXkpfV19KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHNlbmQgdGhhdCB0byB0aGUgY2hhdC4iKSk7cmV0dXJufWlmKEk9PT0ic2lnbi1vdXQiKXtYPW51bGwsTSgic2lnbk91dCIse30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3Qgc2lnbiBvdXQuIikpO3JldHVybn1pZihJPT09ImFzay1ib29rIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3Vlc3QiKTtrJiYoay5oaWRkZW49ITEpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09ImJvb2siKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy52YWx1ZS50cmltKCk/PyIiLHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiIsSz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3Bob25lIik/LnZhbHVlLnRyaW0oKT8/IiIscmU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiIsUmU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd0aW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsWWU9Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKFdmPT5XZi5kYXRhc2V0LmFzaz8/IiIpLHJ1PSEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkO2lmKHhlPXtuYW1lOmssZW1haWw6eiwuLi5ndD97cGhvbmU6S306e30sbm90ZXM6cmUsYXJyaXZpbmdBdDpSZSxyZXF1ZXN0czpZZSxyZW1lbWJlcjpydX0sIWt8fCF6LmluY2x1ZGVzKCJAIikpe1Ioaz8nVGhhdCBlbWFpbCBoYXMgbm8gIkAiIGluIGl0IC0gdGhlIGNvbmZpcm1hdGlvbiBuZWVkcyBhbiBhZGRyZXNzIGl0IGNhbiByZWFjaC4nOiJUaGUgYm9va2luZyBuZWVkcyBhIG5hbWUgYW5kIGFuIGVtYWlsIOKAlCB0aGUgYm9va2luZyBpcyBmb3VuZCBhZ2FpbiBieSB0aGUgZW1haWwgYW5kIGl0cyBjb2RlLiIpO3JldHVybn1pZihndCYmSy5yZXBsYWNlKC9cRC9nLCIiKS5sZW5ndGg8Nil7UigiVGhlIGJvb2tpbmcgbmVlZHMgYSBwaG9uZSBudW1iZXIsIHNvIHRoZSBob3RlbCBjYW4gcmVhY2ggeW91LiIpO3JldHVybn1NKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6ayxlbWFpbDp6LC4uLmd0P3twaG9uZTpLfTp7fSwuLi5yZT97bm90ZXM6cmV9Ont9LC4uLlJlP3thcnJpdmluZ0F0OlJlfTp7fSwuLi5ZZS5sZW5ndGg/e3JlcXVlc3RzOlllfTp7fSwuLi5ydT97cmVtZW1iZXJSZXF1ZXN0czohMH06e319KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IGFzayBmb3IgdGhvc2Ugcm9vbXMuIikpO3JldHVybn1pZihJPT09ImJvb2tpbmdzIil7TSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZihJPT09InRyaXAiKXtNKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGJlPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik7aWYoYmUpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKSx6PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik7ayYmeiYmKFQuY2hlY2tJbj1rLFQuY2hlY2tPdXQ9eiksTSgiZ2V0SG90ZWwiLHtob3RlbDpiZSwuLi5JbygpLC4uLlQuY2hlY2tJbiYmWT4xP3tyb29tczpZfTp7fX0pLmNhdGNoKCgpPT5SKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtjb25zdCBIZj0oKT0+e2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKSlyZXR1cm47Y29uc3QgZT10PT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KT8udmFsdWU/PyIiO3hlPXtuYW1lOmUoImduYW1lIiksZW1haWw6ZSgiZ21haWwiKSwuLi5ndD97cGhvbmU6ZSgiZ3Bob25lIil9Ont9LG5vdGVzOmUoImdub3RlIiksYXJyaXZpbmdBdDplKCJndGltZSIpLHJlcXVlc3RzOlsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcCh0PT50LmRhdGFzZXQuYXNrPz8iIikscmVtZW1iZXI6ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWR9fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmlkPz8iIjtbImduYW1lIiwiZ21haWwiLCJncGhvbmUiLCJnbm90ZSIsImd0aW1lIiwiZ3JlbWVtYmVyIl0uaW5jbHVkZXModCkmJkhmKCl9KTtjb25zdCBXdT0oKT0+e2Zvcig7ZmUuYXQoLTEpPy5wYXlsb2FkPy52aWV3PT09Im1lbWJlciImJiFYOylmZT1mZS5zbGljZSgwLC0xKTtjb25zdCBlPWZlLmF0KC0xKTtpZighZXx8SnQpe1BmKCk7cmV0dXJufWZlPWZlLnNsaWNlKDAsLTEpLE1vKz0xLG91KCksVmYoKTtjb25zdCB0PWUudmVyc2lvbj09PWpvP3ZvaWQgMDpOXyhlLnBheWxvYWQpO3Q/KHE9ZS5wYXlsb2FkLE0odC5rZXksdC5hcmdzLHtwdXNoOiExfSkuY2F0Y2goKCk9PkVlKGUucGF5bG9hZCwhMCkpLmZpbmFsbHkodHQpKTooRWUoZS5wYXlsb2FkLCEwKSx0dCgpKX0sRmY9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aGVyZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFlKXtSKCJXaGVyZSB0bz8gQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbC4iKTtyZXR1cm59anMoKTtjb25zdCBuPShxPy5yZWdpb25zPz9bXSkuZmxhdE1hcChvPT4oby5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKHI9PltyLm5hbWUsLi4uKHIuY2l0aWVzPz9bXSkubWFwKHM9PnMubmFtZSldKSkuZmluZChvPT5vLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpO00oImxpc3RIb3RlbHMiLHsuLi5uP3tjaXR5Om59OntxdWVyeTplfSwuLi5lbigpfSkuY2F0Y2goKCk9PlIoIkNvdWxkIG5vdCBzZWFyY2gganVzdCBub3cuIikpfSxqcz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjbyIpO2U/LnZhbHVlJiYoVC5jaGVja0luPWUudmFsdWUpLHQ/LnZhbHVlJiYoVC5jaGVja091dD10LnZhbHVlKSxlPy52YWx1ZSYmKGxzPSEwKX07bGV0IE1zLGJ0PSExO2NvbnN0IFZmPSgpPT57Y2xlYXJUaW1lb3V0KE1zKSxidD0hMX0sUGs9ZT0+ZT8udmlldz09PSJob3RlbHMifHxlPy52aWV3PT09Im5vLWhvdGVscyImJiEhZT8uYXNrLFVvPShlPTApPT57Y2xlYXJUaW1lb3V0KE1zKSxidD0hMCxNcz1zZXRUaW1lb3V0KCgpPT57aWYoIVBrKHEpKXtidD0hMTtyZXR1cm59aWYoSnQpe1VvKDE1MCk7cmV0dXJufWJ0PSExLE0oImxpc3RIb3RlbHMiLHsuLi5XXyhxPy5hc2spLC4uLmVuKCl9KS5jYXRjaCgoKT0+UigiQ291bGQgbm90IHByaWNlIHRob3NlIG5pZ2h0cy4iKSl9LGUpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57aWYoZS50YXJnZXQ/LmlkPT09IndoZXJlIiYmZS5rZXk9PT0iRW50ZXIiJiYhZS5pc0NvbXBvc2luZyl7ZS5wcmV2ZW50RGVmYXVsdCgpLEZmKCk7cmV0dXJufWNvbnN0IHQ9ZS50YXJnZXQ7IXR8fHQuZ2V0QXR0cmlidXRlKCJyb2xlIikhPT0iYnV0dG9uInx8ZS5rZXkhPT0iRW50ZXIiJiZlLmtleSE9PSIgInx8KGUucHJldmVudERlZmF1bHQoKSx0LmNsaWNrKCkpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDt0Py50eXBlPT09ImRhdGUiJiYobHM9ITApO2NvbnN0IG89e2RjaTpbImRjaSIsImRjbyJdLGRjbzpbImRjaSIsImRjbyJdLGxjaTpbImxjaSIsImxjbyJdLGxjbzpbImxjaSIsImxjbyJdfVt0Py5pZD8/IiJdO2lmKG8pe2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1swXSksdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzFdKTtpZighaXx8IXUpcmV0dXJuO2lmKHQuaWQ9PT1vWzBdJiZpLnZhbHVlKXtjb25zdCBsPUtlKGkudmFsdWUsMSk7dS5taW49bCwoIXUudmFsdWV8fHUudmFsdWU8PWkudmFsdWUpJiYodS52YWx1ZT1sKX1ULmNoZWNrSW49aS52YWx1ZXx8VC5jaGVja0luLFQuY2hlY2tPdXQ9dS52YWx1ZXx8VC5jaGVja091dCxvWzBdPT09ImxjaSImJlVvKDMwMCk7cmV0dXJufWlmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIXJ8fCFzKXJldHVybjtpZih0LmlkPT09ImNpIiYmci52YWx1ZSl7Y29uc3QgaT1LZShyLnZhbHVlLDEpO3MubWluPWksKCFzLnZhbHVlfHxzLnZhbHVlPD1yLnZhbHVlKSYmKHMudmFsdWU9aSl9VC5jaGVja0luPXIudmFsdWV8fFQuY2hlY2tJbixULmNoZWNrT3V0PXMudmFsdWV8fFQuY2hlY2tPdXQ7Y29uc3QgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7YSYmKGEudGV4dENvbnRlbnQ9ZHMoKSksaHMoKX0pO2NvbnN0IEpmPShlLHQpPT57dHJ5e0NmKHQpO2NvbnN0IG49ZT9KU09OLnN0cmluZ2lmeShlKToiIjtpZihuJiZuPT09QWYmJkpTT04uc3RyaW5naWZ5KHEpPT09T2YpcmV0dXJuO2U/LnN0YXk/LmNoZWNrSW4mJihscz0hMCksZmU9W10sTW8rPTEsb3UoKSxWZigpLFBlPU1mLEVlKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxoZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07QWUub250b29scmVzdWx0PWU9PkpmKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtjb25zdCBLZj1lPT57QXJyYXkuaXNBcnJheShlPy5hdmFpbGFibGVEaXNwbGF5TW9kZXMpJiYoTGY9ZS5hdmFpbGFibGVEaXNwbGF5TW9kZXMubWFwKFN0cmluZykpLHR5cGVvZiBlPy5kaXNwbGF5TW9kZT09InN0cmluZyImJmUuZGlzcGxheU1vZGUhPT1sbiYmKGxuPWUuZGlzcGxheU1vZGUscT8udmlldz09PSJob3RlbHMiJiZFZShxKSl9O2xldCBHdTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e2NsZWFyVGltZW91dChHdSksR3U9c2V0VGltZW91dCgoKT0+e3E/LnZpZXchPT0iaG90ZWxzInx8ZG4oKXx8KHR1PWV1KCkscHMoKSE9PURvJiZFZShxKSl9LDE1MCl9KTtBZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT57emYoZSxJZiksS2YoZSl9O0FlLmNvbm5lY3QoKS50aGVuKCgpPT57Y29uc3QgZT1BZS5nZXRIb3N0Q29udGV4dCgpO3pmKGUsSWYpLEtmKGUpO2NvbnN0IHQ9ZT8udG9vbEluZm8/LnJlc3VsdD8uc3RydWN0dXJlZENvbnRlbnQ7dCYmSmYodCxlPy50b29sSW5mbz8ucmVzdWx0Py5fbWV0YSl9KS5jYXRjaCgoKT0+e2hlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+Q291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGhvc3QuPC9kaXY+J30pOzwvc2NyaXB0PgogICAgPHN0eWxlIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4+OnJvb3R7LS1raXQtYmc6ICNmZmZmZmY7LS1raXQtYmctc29mdDogI2Y2ZjdmOTstLWtpdC1mZzogIzFhMWYyYjstLWtpdC1mZy1zb2Z0OiAjNjI2YjdhOy0ta2l0LWZnLWZhaW50OiAjOGE5M2ExOy0ta2l0LWxpbmU6ICNlM2U3ZWQ7LS1raXQtYWNjZW50OiAjMWExZjJiOy0ta2l0LWFjY2VudC1mZzogI2ZmZmZmZjstLWtpdC1saW5rOiAjMjU2M2ViOy0ta2l0LWdvb2Q6ICMxYTdmNWE7LS1raXQtZ29vZC1iZzogI2RkZjNlNDstLWtpdC1iYWQ6ICNiMzI2MWU7LS1raXQtYmFkLWJnOiAjZmJlNmU0Oy0ta2l0LXdhcm46ICM4YTVhMDA7LS1raXQtd2Fybi1iZzogI2ZkZjBkNTstLWtpdC1yaW5nOiAjMjU2M2VifVtkYXRhLXRoZW1lPWRhcmtdey0ta2l0LWJnOiAjMWQxZjIzOy0ta2l0LWJnLXNvZnQ6ICMyNjI5MmU7LS1raXQtZmc6ICNlY2VlZjE7LS1raXQtZmctc29mdDogI2E0YWJiNjstLWtpdC1mZy1mYWludDogIzdjODQ5MTstLWtpdC1saW5lOiAjMzYzYTQxOy0ta2l0LWFjY2VudDogI2VjZWVmMTstLWtpdC1hY2NlbnQtZmc6ICMxZDFmMjM7LS1raXQtbGluazogIzdhYTdmZjstLWtpdC1nb29kOiAjNmZkM2EyOy0ta2l0LWdvb2QtYmc6ICMxZjNhMmQ7LS1raXQtYmFkOiAjZmY4YTgwOy0ta2l0LWJhZC1iZzogIzNkMjMyMjstLWtpdC13YXJuOiAjZjJjNDZiOy0ta2l0LXdhcm4tYmc6ICMzYTMwMjA7LS1raXQtcmluZzogIzdhYTdmZn06cm9vdHstLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnksIHZhcigtLWtpdC1iZykpOy0tYmctc29mdDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnksIHZhcigtLWtpdC1iZy1zb2Z0KSk7LS1mZzogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5LCB2YXIoLS1raXQtZmcpKTstLWZnLXNvZnQ6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtZmctc29mdCkpOy0tZmctZmFpbnQ6IHZhcigtLWNvbG9yLXRleHQtdGVydGlhcnksIHZhcigtLWtpdC1mZy1mYWludCkpOy0tbGluZTogdmFyKC0tY29sb3ItYm9yZGVyLXByaW1hcnksIHZhcigtLWtpdC1saW5lKSk7LS1hY2NlbnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudCkpOy0tYWNjZW50LWZnOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQtZmcpKTstLWxpbms6IHZhcigtLWNvbG9yLXRleHQtaW5mbywgdmFyKC0ta2l0LWxpbmspKTstLWdvb2Q6IHZhcigtLWNvbG9yLXRleHQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QpKTstLWdvb2QtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QtYmcpKTstLWJhZDogdmFyKC0tY29sb3ItdGV4dC1kYW5nZXIsIHZhcigtLWtpdC1iYWQpKTstLWJhZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIsIHZhcigtLWtpdC1iYWQtYmcpKTstLXdhcm46IHZhcigtLWNvbG9yLXRleHQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4pKTstLXdhcm4tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4tYmcpKTstLXJpbmc6IHZhcigtLWNvbG9yLXJpbmctcHJpbWFyeSwgdmFyKC0ta2l0LXJpbmcpKTstLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sZywgMTRweCk7LS1yYWRpdXMtc206IHZhcigtLWJvcmRlci1yYWRpdXMtc20sIDlweCk7LS1mb250OiB2YXIoLS1mb250LXNhbnMsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBzYW5zLXNlcmlmKTstLW1vbm86IHZhcigtLWZvbnQtbW9ubywgdWktbW9ub3NwYWNlLCAiU0YgTW9ubyIsIE1lbmxvLCBtb25vc3BhY2UpOy0tc2hhZG93OiB2YXIoLS1zaGFkb3ctc20sIDAgMXB4IDJweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCksIDAgMnB4IDVweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCkpfSp7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uY2FyZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3gtc2hhZG93OnZhcigtLXNoYWRvdyk7bWF4LXdpZHRoOjU2MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0taW5zZXQtbGVmdCwgMHB4KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWluc2V0LXJpZ2h0LCAwcHgpfS5oZWFke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjE0cHggMThweCAwfS5oZWFkIC50aXRsZXtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC50aXRsZVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0jY29udGVudHtwYWRkaW5nOjEwcHggMThweCAxOHB4fS5yZWZyZXNoe21hcmdpbi1sZWZ0OjhweDthbGlnbi1zZWxmOmNlbnRlcjtmbGV4Om5vbmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O3BhZGRpbmc6MDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjEycyxjb2xvciAuMTJzfS5yZWZyZXNoOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLWZnKTtib3JkZXItY29sb3I6dmFyKC0tZmctc29mdCl9LnJlZnJlc2g6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNn0ucmVmcmVzaFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ucmVmcmVzaCBzdmd7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtkaXNwbGF5OmJsb2NrfS5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpraXQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMga2l0LXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uZW1wdHl7cGFkZGluZzoxOHB4IDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHh9LmhpbnR7bWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vdGV7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nOjAgMCAxMHB4fS5tb25ve2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctZmFpbnQpfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcH0uYmFkZ2Uub2t7Y29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uYmFkZ2Uud2FybiwuYmFkZ2UudG9kb3tjb2xvcjp2YXIoLS13YXJuKTtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpfS5iYWRnZS5lcnJ7Y29sb3I6dmFyKC0tYmFkKTtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyl9LmJ1eXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ0cHg7cGFkZGluZzoxMXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NTA7Y3Vyc29yOnBvaW50ZXJ9LmJ1eTpkaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1jb2xvcjp2YXIoLS1saW5lKTtjb2xvcjp2YXIoLS1mZy1mYWludCk7Y3Vyc29yOmRlZmF1bHR9LmJ1eS5hbHQsLmdob3N0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSl9Lmdob3N0e2ZsZXg6MTttaW4taGVpZ2h0OjQwcHg7cGFkZGluZzo5cHggMTBweDtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXJ9Lmxpbmt7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6NnB4IDAgMDtjb2xvcjp2YXIoLS1saW5rKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnF0eXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHh9LnF0eSBidXR0b257d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0ucXR5IHNwYW57bWluLXdpZHRoOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTB9LmNrLXBhZ2Vye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4IDEycHg7bWFyZ2luLXRvcDoxNHB4fS5jay1wYWdlci1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6NHB4O21pbi13aWR0aDoxMTJweDtoZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30uY2stcGFnZXItYnRuIHN2ZywuY2stcGFnZXItYWxsIHN2Z3t3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2ZsZXg6bm9uZX0uY2stcGFnZXItYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0uY2stcGFnZXItYnRuOmFjdGl2ZTpub3QoOmRpc2FibGVkKXt0cmFuc2Zvcm06dHJhbnNsYXRlWSguNXB4KX0uY2stcGFnZXItYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWZnLWZhaW50KTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O29wYWNpdHk6LjY7Y3Vyc29yOmRlZmF1bHR9LmNrLXBhZ2VyLW57bWluLXdpZHRoOjhjaDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jay1wYWdlci1hbGx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3dpZHRoOmZpdC1jb250ZW50O2hlaWdodDozMnB4O21hcmdpbjo2cHggYXV0byAwO3BhZGRpbmc6MCAxMnB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDpub25lO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LmNrLXBhZ2VyLWFsbDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uY2stcGFnZXItYWxsOmZpcnN0LWNoaWxkLC5ncmlkKy5jay1wYWdlci1hbGx7bWFyZ2luLXRvcDoxNHB4fWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0uY2stcGFnZXItYnRue21pbi13aWR0aDoxMDRweDtoZWlnaHQ6NDBweH0uY2stcGFnZXItYWxse2hlaWdodDozNnB4fS5xdHkgYnV0dG9ue3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7Zm9udC1zaXplOjE5cHh9LnJlZnJlc2h7d2lkdGg6MzRweDtoZWlnaHQ6MzRweH0uaGludCwubm90ZSwuZW1wdHl7Zm9udC1zaXplOjEzcHh9fUBtZWRpYShwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOm5vbmV9Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSNjb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHh9LmhlYWR7bWluLWhlaWdodDoyOHB4fS5ob21le2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MH0uaG9tZTpob3ZlcntvcGFjaXR5Oi43Mn0uaGVhZCAuYnJhbmR7bWF4LWhlaWdodDozNHB4O21heC13aWR0aDoxNTBweDtvYmplY3QtZml0OmNvbnRhaW59LmhlYWQgLnRpdGxle2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTVweDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmJhY2tidG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDExcHggNHB4IDhweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDttYXgtd2lkdGg6NDIlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2N1cnNvcjpwb2ludGVyfS5iYWNrYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmcpfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uY2FyZC5idXN5e29wYWNpdHk6LjYyfS5jYXJkLmJ1c3kgYnV0dG9uLC5jYXJkLmJ1c3kgaW5wdXQsLmNhcmQuYnVzeSBzZWxlY3R7cG9pbnRlci1ldmVudHM6bm9uZX0ubWVtYmVyY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5tZW1iZXJjaGlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lmxpbmt5e2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2NvbG9yOnZhcigtLWxpbmspO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LnAtd2Fze2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucC1tZW1iZXJ7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uc3VtLmdvb2Qgc3BhbjpsYXN0LWNoaWxke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmRlbW97ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LmRlbW8gYntmb250LXdlaWdodDo3MDB9LmNpdHlncm91cCsuY2l0eWdyb3Vwe21hcmdpbi10b3A6MTRweH0uY2l0eW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tYm90dG9tOjhweH0uY2l0eW5hbWUgc21hbGx7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwO29wYWNpdHk6Ljc1fS50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE5NnB4LDFmcikpO2dhcDoxMHB4fS50aWxle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tYmcpO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7cGFkZGluZzowfS50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1mZy1mYWludCl9LnQtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTthc3BlY3QtcmF0aW86MTYgLyAxMDtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnQtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnQtbWFya3tmb250LXNpemU6MzBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07b3BhY2l0eTouOTI7dGV4dC1zaGFkb3c6MCAxcHggMTJweCByZ2IoMCAwIDAgLyAyMiUpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udC1zaG90IGltZywuaGVybyBpbWd7ei1pbmRleDoxfS50LWJyYW5ke3otaW5kZXg6Mjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgxMTJweCwxZnIpIG1pbm1heCgxMTJweCwxZnIpIGF1dG8gMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbCwuc3RheSAuZ3Vlc3Rze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0uZmxleC1kYXRlc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZzoycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmZke2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O21pbi13aWR0aDo3OHB4O3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9LmZkOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mZC1kYXl7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtO2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOm5vd3JhcH0uZmQtcHJpY2V7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2NTA7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZmQub257YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Y3Vyc29yOmRlZmF1bHR9LmZkLm9uIC5mZC1kYXl7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtvcGFjaXR5Oi44NX0uZmQuYmVzdHtib3JkZXItY29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uZmQuYmVzdCAuZmQtcHJpY2UsLmZkLmJlc3QgLmZkLWRheXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5mZC5vdXQgLmZkLXByaWNle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtd2VpZ2h0OjUwMH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6dmFyKC0tYmcpfS5ub3Rle2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS41fS5mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHg7bWFyZ2luLXRvcDoxMHB4fS5mb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5mb3JtIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjhweCA5cHh9LmZvcm0gLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uY29uZntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweCAxMnB4fS5jb25mIC5jb2Rle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjcyMDtsZXR0ZXItc3BhY2luZzouMDZlbTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbmYgLndoZXJle2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwfS5jb25mIC53aGVue2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnVucGFpZHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ud2Fybm5vdGV7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzo5cHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udGlsZS5vdmVye29wYWNpdHk6LjgyfS5hc2tlZC1saW5le2ZvbnQtc3R5bGU6aXRhbGljfS5hc2tlZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYXNrZWQgYntmb250LXdlaWdodDo3MjA7Y29sb3I6dmFyKC0tZmcpfS5hc2tlZC5mbGFne2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLXdhcm4pfS5hc2tlZC5mbGFnIGJ7Y29sb3I6dmFyKC0td2Fybil9LmFza3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5hc2tzLXR7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcC5hc2t7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHh9LmNoaXAuYXNrW2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgYWN0aW9uIiAidGh1bWIgcHJpY2UgYWN0aW9uIn0ucm93LndpdGh0aHVtYiAudGh1bWJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDthbGlnbi1zZWxmOnN0YXJ0fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0uY21wLXdyYXB7b3ZlcmZsb3cteDphdXRvO21hcmdpbi1pbmxpbmU6LTJweDtwYWRkaW5nOjJweH0uY21we2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDc2cHgsOTZweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMTJweCwxZnIpKTthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6OHB4fS5jbXAuZm91cntncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDU2cHgsNzJweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCg5NnB4LDFmcikpfS5jbXAtY29ybmVye2dyaWQtY29sdW1uOjE7Z3JpZC1yb3c6MSAvIHNwYW4gdmFyKC0taGVhZC1yb3dzLCA1KX0uY21wLWhlYWR7ZGlzcGxheTpncmlkO2dyaWQtcm93OjEgLyBzcGFuIHZhcigtLWhlYWQtcm93cywgNSk7Z3JpZC10ZW1wbGF0ZS1yb3dzOnN1YmdyaWQ7cm93LWdhcDo2cHg7YWxpZ24tY29udGVudDpzdGFydDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjA7cGFkZGluZy1ib3R0b206MTJweH0uY21wLWhlYWQ+LmNvbC1uYW1lLC5jbXAtaGVhZD4uY29sLXByaWNlLC5jbXAtaGVhZD4ud2h5LC5jbXAtaGVhZD4ucGN7bWFyZ2luLWlubGluZToxMXB4fS5jbXAtaGVhZD4uY29sLW5hbWV7bWFyZ2luLXRvcDo0cHh9LndoeS5ub25le2JvcmRlcjowO3BhZGRpbmc6MH0ucGlja21hcmsubm9uZXt2aXNpYmlsaXR5OmhpZGRlbn0uY21wIC5re21hcmdpbi10b3A6MH0uY21wLWhlYWQucGlja3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQpfS5jbXAtaGVhZCAudC1zaG90e2FzcGVjdC1yYXRpbzoxNiAvIDk7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmNvbC1uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uY29sLXByaWNle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbC1wcmljZSBzbWFsbHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNvbC1wcmljZSBzbWFsbC5zdWJ7ZGlzcGxheTpibG9ja30ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubW9tZW50c3tsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjJweCAwIDA7cGFkZGluZzowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweH0ubW9tZW50cyBsaXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjg0cHggMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lm1vbWVudHMgLndoZW57b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5tb21lbnRzIC53aGF0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNH0ubW9tZW50cyAud2hhdCBie2ZvbnQtd2VpZ2h0OjYyMH0ubW9tZW50cyAud2hhdCBzbWFsbHtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLXN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczo5NnB4IDFmcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOnBvaW50ZXJ9LnBsYW4tc3RheSAucHMtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6ODRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5wbGFuLXN0YXkgLnBzLXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5wbGFuLXN0YXkgLnBzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDozcHg7cGFkZGluZzo5cHggMTBweCA5cHggMDttaW4td2lkdGg6MH0ucGxhbi1zdGF5IC5uYW1le2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LnBsYW4tc3RheSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1zdGF5IC5wcy1wcmljZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wbGFuLW5pZ2h0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItdG9wOjFweCBkYXNoZWQgdmFyKC0tbGluZSk7cGFkZGluZy10b3A6NnB4O2N1cnNvcjpwb2ludGVyfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19LnN1Z2dlc3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWFyZ2luLXRvcDoxNHB4fS5zdWdnZXN0IC5jaGlwe2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweCAxMXB4O2NvbG9yOnZhcigtLWZnKX0uc3VnZ2VzdCAuY2hpcDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uc3VnZ2VzdCAuY2hpcDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb3JtIGxhYmVsLnJlbWVtYmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Zm9udC13ZWlnaHQ6NDAwO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowfS5mb3JtIGxhYmVsLnJlbWVtYmVyIGlucHV0e21hcmdpbjoycHggMCAwfS5wbGFjZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXAucGxhY2V7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4IDEwcHg7Y29sb3I6dmFyKC0tZmcpfS5jaGlwLnBsYWNlIHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY2hpcC5wbGFjZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uY2hpcC5wbGFjZS50YWJ7Zm9udC13ZWlnaHQ6NjAwfS5jaGlwLnBsYWNlLnRhYlthcmlhLWV4cGFuZGVkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmNoaXAucGxhY2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uc3VnZ2VzdCAuY2hpcC5zYXkgc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZpbmRlcntkaXNwbGF5OmZsZXg7Z2FwOjhweH0uZmluZGVyIGlucHV0e2ZsZXg6MTttaW4td2lkdGg6MDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo5cHggMTJweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyl9LmZpbmRlciBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5yZWdpb257ZGlzcGxheTpncmlkO2dhcDoxMHB4fS5jb3VudHJ5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6NnB4fS5jb3VudHJ5bmFtZSBzbWFsbHtmb250LXdlaWdodDo1MDA7bGV0dGVyLXNwYWNpbmc6MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3R7ZGlzcGxheTpncmlkO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZGVzdDpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MH0uZGVzdC1jb3VudHJ5e2p1c3RpZnktc2VsZjpzdGFydDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246bGVmdH0uZGVzdC1jb3VudHJ5IHNtYWxse2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZGVzdC1jb3VudHJ5IC5ue2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdC1jb3VudHJ5OmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmRlc3QtY291bnRyeTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5maW5kZXIgLmdve2ZsZXg6bm9uZTtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtc2l6ZToxM3B4fS5zb3J0cy1re2FsaWduLXNlbGY6Y2VudGVyO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXJpZ2h0OjJweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0uc2VhcmNoe2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc2VhcmNoIC5zdGF5e3BhZGRpbmc6MDtiYWNrZ3JvdW5kOm5vbmV9LnNlYXJjaCAud2hlcmV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnNlYXJjaCAud2hlcmUgaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxMXB4fS5zZWFyY2ggLndoZXJlIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnNlYXJjaCAuc3RheSAuZ297cGFkZGluZzo5cHggMTRweDtmb250LXNpemU6MTNweH0udC10YWdze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4O21hcmdpbi10b3A6NHB4fS50LWZyb20udC1ub25le2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweH0uc3RheSAuZ28ucXVpZXR7cGFkZGluZzo4cHggMTJweDtmb250LXNpemU6MTIuNXB4fS5maWx0ZXItcGFuZWx7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5mZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS50LWZyb20gLnQtc3Vie2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxcHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV0gc21hbGx7Y29sb3I6aW5oZXJpdH0uY2hpcC50b29se2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC50b29sW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+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 = 'f3eef32efeac05656919cfe87bcefa621e47cb16849b8f12add95b741f9bc904';
|
|
8
8
|
//# sourceMappingURL=card.generated.js.map
|