@curless/hotel-storefront 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  // The hotel booking MCP App card - a single self-contained HTML (Vite +
3
3
  // vite-plugin-singlefile, with the MCP Apps SDK bundled), base64-embedded so it
4
4
  // is bundler-safe. Regenerate after changing the widget UI.
5
- export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgSmY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLEtmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxfYz17fSxXZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKHA9PlByb21pc2UucmVzb2x2ZShwKS50aGVuKGc9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmd9KSxnPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpnfSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9S2YobCxvKSxsIGluIF9jKXJldHVybjtfY1tsXT0hMDtjb25zdCBwPWwuZW5kc1dpdGgoIi5jc3MiKSxnPXA/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09bCYmKCFwfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke2d9YCkpcmV0dXJuO2NvbnN0IHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKHkucmVsPXA/InN0eWxlc2hlZXQiOkpmLHB8fCh5LmFzPSJzY3JpcHQiKSx5LmNyb3NzT3JpZ2luPSIiLHkuaHJlZj1sLHUmJnkuc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5KSxwKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e3kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaykseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBHZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBZZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBzbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIFFmKGUpe31mdW5jdGlvbiBYZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIGVoKGUpe31mdW5jdGlvbiBOcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBqcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+dHMobikpLmpvaW4odCl9ZnVuY3Rpb24gR24oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIHRoe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIG5ldyB0aChlKX1mdW5jdGlvbiBYcihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBFZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gc3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgeWM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gaXUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT15YylyZXR1cm4gbz09PXZvaWQgMCYmKG89eWMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIG5oKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gQmUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBpbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBTZShlKXtyZXR1cm4gaW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gYXUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBCZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBjdShlLHQsbil7dCBpbiBlP0JlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gRGUoZSx0LG4sbyl7Y29uc3Qgcj1TZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9hdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpjdShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBvaChlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/YXUoZSxuLCgpPT50W25dKTpjdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBYKC4uLmUpe2NvbnN0IHQ9e307Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKTtPYmplY3QuYXNzaWduKHQsbyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LHQpfWZ1bmN0aW9uIHJoKGUpe3JldHVybiBYKGUuX3pvZC5kZWYpfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIHQ/dC5yZWR1Y2UoKG4sbyk9Pm4/LltvXSxlKTplfWZ1bmN0aW9uIGloKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSksbj10Lm1hcChvPT5lW29dKTtyZXR1cm4gUHJvbWlzZS5hbGwobikudGhlbihvPT57Y29uc3Qgcj17fTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKylyW3Rbc11dPW9bc107cmV0dXJuIHJ9KX1mdW5jdGlvbiBhaChlPTEwKXtjb25zdCB0PSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7bGV0IG49IiI7Zm9yKGxldCBvPTA7bzxlO28rKyluKz10W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp0Lmxlbmd0aCldO3JldHVybiBufWZ1bmN0aW9uIHV1KGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX1mdW5jdGlvbiBsdShlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC9bXlx3XHMtXS9nLCIiKS5yZXBsYWNlKC9bXHNfLV0rL2csIi0iKS5yZXBsYWNlKC9eLSt8LSskL2csIiIpfWNvbnN0IGVzPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTooLi4uZSk9Pnt9O2Z1bmN0aW9uIFFlKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiYhQXJyYXkuaXNBcnJheShlKX1jb25zdCBkdT1OdCgoKT0+e2lmKG5lLmppdGxlc3N8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoIkNsb3VkZmxhcmUiKSlyZXR1cm4hMTt0cnl7Y29uc3QgZT1GdW5jdGlvbjtyZXR1cm4gbmV3IGUoIiIpLCEwfWNhdGNoe3JldHVybiExfX0pO2Z1bmN0aW9uIENlKGUpe2lmKFFlKGUpPT09ITEpcmV0dXJuITE7Y29uc3QgdD1lLmNvbnN0cnVjdG9yO2lmKHQ9PT12b2lkIDB8fHR5cGVvZiB0IT0iZnVuY3Rpb24iKXJldHVybiEwO2NvbnN0IG49dC5wcm90b3R5cGU7cmV0dXJuIShRZShuKT09PSExfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwiaXNQcm90b3R5cGVPZiIpPT09ITEpfWZ1bmN0aW9uIGFvKGUpe3JldHVybiBDZShlKT97Li4uZX06QXJyYXkuaXNBcnJheShlKT9bLi4uZV06ZSBpbnN0YW5jZW9mIE1hcD9uZXcgTWFwKGUpOmUgaW5zdGFuY2VvZiBTZXQ/bmV3IFNldChlKTplfWZ1bmN0aW9uIGNoKGUpe2xldCB0PTA7Zm9yKGNvbnN0IG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdCsrO3JldHVybiB0fWNvbnN0IHVoPWU9Pntjb25zdCB0PXR5cGVvZiBlO3N3aXRjaCh0KXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuInVuZGVmaW5lZCI7Y2FzZSJzdHJpbmciOnJldHVybiJzdHJpbmciO2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UiZnVuY3Rpb24iOnJldHVybiJmdW5jdGlvbiI7Y2FzZSJiaWdpbnQiOnJldHVybiJiaWdpbnQiO2Nhc2Uic3ltYm9sIjpyZXR1cm4ic3ltYm9sIjtjYXNlIm9iamVjdCI6cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjplPT09bnVsbD8ibnVsbCI6ZS50aGVuJiZ0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iJiZlLmNhdGNoJiZ0eXBlb2YgZS5jYXRjaD09ImZ1bmN0aW9uIj8icHJvbWlzZSI6dHlwZW9mIE1hcDwidSImJmUgaW5zdGFuY2VvZiBNYXA/Im1hcCI6dHlwZW9mIFNldDwidSImJmUgaW5zdGFuY2VvZiBTZXQ/InNldCI6dHlwZW9mIERhdGU8InUiJiZlIGluc3RhbmNlb2YgRGF0ZT8iZGF0ZSI6dHlwZW9mIEZpbGU8InUiJiZlIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6Im9iamVjdCI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlOiAke3R9YCl9fSxZbj1uZXcgU2V0KFsic3RyaW5nIiwibnVtYmVyIiwic3ltYm9sIl0pLHB1PW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJiaWdpbnQiLCJib29sZWFuIiwic3ltYm9sIiwidW5kZWZpbmVkIl0pO2Z1bmN0aW9uICRlKGUpe3JldHVybiBlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9ZnVuY3Rpb24gSChlLHQsbil7Y29uc3Qgbz1uZXcgZS5fem9kLmNvbnN0cih0Pz9lLl96b2QuZGVmKTtyZXR1cm4oIXR8fG4/LnBhcmVudCkmJihvLl96b2QucGFyZW50PWUpLG99ZnVuY3Rpb24gXyhlKXtjb25zdCB0PWU7aWYoIXQpcmV0dXJue307aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybntlcnJvcjooKT0+dH07aWYodD8ubWVzc2FnZSE9PXZvaWQgMCl7aWYodD8uZXJyb3IhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGBtZXNzYWdlYCBhbmQgYGVycm9yYCBwYXJhbXMiKTt0LmVycm9yPXQubWVzc2FnZX1yZXR1cm4gZGVsZXRlIHQubWVzc2FnZSx0eXBlb2YgdC5lcnJvcj09InN0cmluZyI/ey4uLnQsZXJyb3I6KCk9PnQuZXJyb3J9OnR9ZnVuY3Rpb24gbGgoZSl7bGV0IHQ7cmV0dXJuIG5ldyBQcm94eSh7fSx7Z2V0KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldCh0LG8scil9LHNldChuLG8scixzKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LnNldCh0LG8scixzKX0saGFzKG4sbyl7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5oYXModCxvKX0sZGVsZXRlUHJvcGVydHkobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHQsbyl9LG93bktleXMobil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5vd25LZXlzKHQpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG8pfSxkZWZpbmVQcm9wZXJ0eShuLG8scil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8scil9fSl9ZnVuY3Rpb24gdHMoZSl7cmV0dXJuIHR5cGVvZiBlPT0iYmlnaW50Ij9lLnRvU3RyaW5nKCkrIm4iOnR5cGVvZiBlPT0ic3RyaW5nIj9gIiR7ZX0iYDpgJHtlfWB9ZnVuY3Rpb24gZnUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcih0PT5lW3RdLl96b2Qub3B0aW4hPT12b2lkIDAmJmVbdF0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKX1jb25zdCBodT17c2FmZWludDpbTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdLGludDMyOlstMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3XSx1aW50MzI6WzAsNDI5NDk2NzI5NV0sZmxvYXQzMjpbLTM0MDI4MjM0NjYzODUyODg2ZTIyLDM0MDI4MjM0NjYzODUyODg2ZTIyXSxmbG9hdDY0OlstTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUFYX1ZBTFVFXX0sbXU9e2ludDY0OltCaWdJbnQoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IiksQmlnSW50KCI5MjIzMzcyMDM2ODU0Nzc1ODA3IildLHVpbnQ2NDpbQmlnSW50KDApLEJpZ0ludCgiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKV19O2Z1bmN0aW9uIGd1KGUsdCl7Y29uc3Qgbj1lLl96b2QuZGVmLG89bi5jaGVja3M7aWYobyYmby5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoIi5waWNrKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO2NvbnN0IHM9e307cmV0dXJuIERlKHMsZSxjbyhlLHQpKSxIKGUsWChuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBjbyhlLHQpe2NvbnN0IG49U2UoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiB2dShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoY28oZSx0KSksaT17fTtyZXR1cm4gRGUoaSxlLFJlZmxlY3Qub3duS2V5cyhTZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEgoZSxYKG4se3NoYXBlOmksY2hlY2tzOltdfSkpfWZ1bmN0aW9uIGJ1KGUsdCl7aWYoIUNlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBleHRlbmQ6IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0Iik7Y29uc3Qgbj1lLl96b2QuZGVmLmNoZWNrcztpZihuJiZuLmxlbmd0aD4wKXtjb25zdCByPVNlKGUpO2Zvcihjb25zdCBzIG9mIFJlZmxlY3Qub3duS2V5cyh0KSlpZihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIscykhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgb3ZlcndyaXRlIGtleXMgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIGAuc2FmZUV4dGVuZCgpYCBpbnN0ZWFkLiIpfXJldHVybiBIKGUsWChlLl96b2QuZGVmLHtzaGFwZTpfdShlLHQpfSkpfWZ1bmN0aW9uIF91KGUsdCl7Y29uc3Qgbj17fTtyZXR1cm4gRGUobixlLFJlZmxlY3Qub3duS2V5cyhTZShlKSkpLG9oKG4sdCksbn1mdW5jdGlvbiB5dShlLHQpe2lmKCFDZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gc2FmZUV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3QiKTtyZXR1cm4gSChlLFgoZS5fem9kLmRlZix7c2hhcGU6X3UoZSx0KX0pKX1mdW5jdGlvbiB3dShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtEZShuLGUsUmVmbGVjdC5vd25LZXlzKFNlKGUpKSksRGUobix0LFJlZmxlY3Qub3duS2V5cyhTZSh0KSkpO2NvbnN0IG89WChlLl96b2QuZGVmLHtzaGFwZTpuLGdldCBjYXRjaGFsbCgpe3JldHVybiB0Ll96b2QuZGVmLmNhdGNoYWxsfSxjaGVja3M6dC5fem9kLmRlZi5jaGVja3M/P1tdfSk7cmV0dXJuIEgoZSxvKX1mdW5jdGlvbiBNcihlLHQsbixvPSJwYXJ0aWFsIil7Y29uc3Qgcz10Ll96b2QuZGVmLmNoZWNrcztpZihzJiZzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihgLiR7b30oKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzYCk7Y29uc3QgYT1uP25ldyBTZXQoY28odCxuKSk6dm9pZCAwLGM9e307cmV0dXJuIERlKGMsdCxSZWZsZWN0Lm93bktleXMoU2UodCkpLGUmJigodSxsKT0+YSYmIWEuaGFzKGwpP3U6bmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dX0pKSksSCh0LFgodC5fem9kLmRlZix7c2hhcGU6YyxjaGVja3M6W119KSl9ZnVuY3Rpb24ga3UoZSx0LG4pe2NvbnN0IG89bj9uZXcgU2V0KGNvKHQsbikpOnZvaWQgMCxyPXt9O3JldHVybiBEZShyLHQsUmVmbGVjdC5vd25LZXlzKFNlKHQpKSwocyxpKT0+byYmIW8uaGFzKGkpP3M6bmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6c30pKSxIKHQsWCh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIHJlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gU3UoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBkZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIFdlKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIERyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBoZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOldlKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9XZShzPy4oZSkpPz9XZSh0Py5lcnJvcj8uKGUpKT8/V2Uobi5jdXN0b21FcnJvcj8uKGUpKT8/V2Uobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gdW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGRoPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIGxvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWRoLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gcG8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uICR1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gWGUoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBwaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24genUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFR1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gZmgoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4genUodCtuKX1mdW5jdGlvbiBoaChlKXtyZXR1cm4gVHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIG1oKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBnaChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyB2aHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIFB1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6YmgoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiB6ZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBmbyhlLHQsbil7cmV0dXJuIHplKGUsdCxuLCExKX1mdW5jdGlvbiBqdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gemUodGhpcyxuLG8odGhpcykpfSxzZXQocil7emUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGJoKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjp6ZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe3plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBfaChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IEVyLHhlPSExO2NvbnN0IHloPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7eGU9ITB9fTtmdW5jdGlvbiB4KGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmRXIhPT1lLl96b2Qpe0VyPXZvaWQgMDtyZXR1cm59RXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHloKTtjb25zdCByPXhlO3hlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIHhlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSkseGU9eGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSx4ZT14ZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gSXUoZSx0LG4sbyl7Y29uc3Qgcj1faChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IHh1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gbnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFt4dV09ITAsdH1jb25zdCBvcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6bXUsQ09OU1RBTlRfQ0FUQ0g6eHUsQ2xhc3M6dmgsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6aHUsYWJvcnRlZDpyZSxhbGxvd3NFdmFsOmR1LGFzc2VydDplaCxhc3NlcnRFcXVhbDpHZixhc3NlcnRJczpRZixhc3NlcnROZXZlcjpYZixhc3NlcnROb3RFcXVhbDpZZixhc3NpZ25Qcm9wOkJlLGF0dGFjaFNjaGVtYTpEcixiYXNlNjRUb1VpbnQ4QXJyYXk6enUsYmFzZTY0dXJsVG9VaW50OEFycmF5OmZoLGNhY2hlZDpOdCxjYXB0dXJlU3RhY2tUcmFjZTplcyxjbGVhbkVudW06cGgsY2xlYW5SZWdleDpFZSxjbG9uZTpILGNsb25lRGVmOnJoLGNvZGVQb2ludExlbmd0aDpsbyxjb25zdGFudENhdGNoOm5zLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6bGgsZGVmaW5lTGF6eTppdSxkZWZpbmVMYXp5SW50ZXJuYWw6eCxkZXJpdmVkOmp0LGVzYzp1dSxlc2NhcGVSZWdleDokZSxleHBsaWNpdGx5QWJvcnRlZDpTdSxleHRlbmQ6YnUsZmluYWxpemVJc3N1ZTpoZSxmbG9hdFNhZmVSZW1haW5kZXI6c3UsZ2V0RWxlbWVudEF0UGF0aDpzaCxnZXRFbnVtVmFsdWVzOk5yLGdldExlbmd0aGFibGVPcmlnaW46cG8sZ2V0UGFyc2VkVHlwZTp1aCxnZXRTaXphYmxlT3JpZ2luOnVvLGhleFRvVWludDhBcnJheTptaCxoaWRlOmZvLGluc3RhbGxMYXp5UHJvcDpJdSxpc09iamVjdDpRZSxpc1BsYWluT2JqZWN0OkNlLGlzc3VlOlhlLGpvaW5WYWx1ZXM6anIsanNvblN0cmluZ2lmeVJlcGxhY2VyOkduLG1lbWJlcnM6UHUsbWVyZ2U6d3UsbWVyZ2VEZWZzOlgsbm9ybWFsaXplUGFyYW1zOl8sbnVsbGlzaDpYcixudW1LZXlzOmNoLG9iamVjdENsb25lOm5oLG9taXQ6dnUsb3B0aW9uYWxLZXlzOmZ1LG93bjp6ZSxwYXJzZWRUeXBlOiR1LHBhcnRpYWw6TXIscGljazpndSxwcmVmaXhJc3N1ZXM6ZGUscHJpbWl0aXZlVHlwZXM6cHUscHJvbWlzZUFsbE9iamVjdDppaCxwcm9wZXJ0eUtleVR5cGVzOlluLHJhbmRvbVN0cmluZzphaCxyYXdTaGFwZTppbyxyZXF1aXJlZDprdSxzYWZlRXh0ZW5kOnl1LHNoYWxsb3dDbG9uZTphbyxzbHVnaWZ5Omx1LHN0cmluZ2lmeVByaW1pdGl2ZTp0cyx0b1pvZDpzbyx1aW50OEFycmF5VG9CYXNlNjQ6VHUsdWludDhBcnJheVRvQmFzZTY0dXJsOmhoLHVpbnQ4QXJyYXlUb0hleDpnaCx1bndyYXBNZXNzYWdlOldlfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciB3Yztjb25zdCBycz1PYmplY3QuZnJlZXplKHtzdGF0dXM6ImFib3J0ZWQifSksUnI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfTtsZXQga2M9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yOm51bGw7ZnVuY3Rpb24gd2goZSl7Y29uc3QgdD1rYztpZih0KXtjb25zdCBuPXQuc3RhY2tUcmFjZUxpbWl0O2lmKHR5cGVvZiBuPT0ibnVtYmVyIil7dHJ5e3Quc3RhY2tUcmFjZUxpbWl0PTB9Y2F0Y2h7cmV0dXJuIGtjPW51bGwsbmV3IGV9dHJ5e3JldHVybiBuZXcgZX1maW5hbGx5e3Quc3RhY2tUcmFjZUxpbWl0PW59fX1yZXR1cm4gbmV3IGV9ZnVuY3Rpb24gZChlLHQsbixvKXtjb25zdCByPXt9O2Z1bmN0aW9uIHMoZyl7dGhpcy5kZWY9Zyx0aGlzLmNvbnN0cj1wLHRoaXMudHJhaXRzPW5ldyBTZXR9cy5wcm90b3R5cGU9cjtjb25zdCBpPW4sYT1pJiZuZXcgV2Vha1NldDtmdW5jdGlvbiBjKGcsYil7aWYoZy5fem9kKXtpZihnLl96b2QudHJhaXRzLmhhcyhlKSlyZXR1cm59ZWxzZXtSci52YWx1ZT1uZXcgcyhiKTt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsIl96b2QiLFJyKX1maW5hbGx5e1JyLnZhbHVlPXZvaWQgMH19aWYoZy5fem9kLnRyYWl0cy5hZGQoZSksdChnLGIpLGEpe2NvbnN0IGs9T2JqZWN0LmdldFByb3RvdHlwZU9mKGcpLCQ9Zy5fem9kLmNvbnN0ci5wcm90b3R5cGU7bGV0IGo9aztmb3IoO2omJmohPT0kOylqPU9iamVjdC5nZXRQcm90b3R5cGVPZihqKTtjb25zdCBSPWo/P2s7YS5oYXMoUil8fChhLmFkZChSKSxQdShSLGkpKX1jb25zdCB5PXAucHJvdG90eXBlO2Zvcihjb25zdCBrIGluIHkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksaykmJihrIGluIGd8fChnW2tdPXlba10uYmluZChnKSkpfWNvbnN0IHU9bz8uUGFyZW50Pz9PYmplY3Q7Y2xhc3MgbCBleHRlbmRzIHV7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJuYW1lIix7dmFsdWU6ZX0pO2Z1bmN0aW9uIHAoZyl7Y29uc3QgYj1vPy5QYXJlbnQ/d2gobCk6dGhpcztjKGIsZyk7Y29uc3QgeT1iLl96b2QuZGVmZXJyZWQ7aWYoeSl7Zm9yKGNvbnN0ICQgb2YgeSkkKCk7Yi5fem9kLmRlZmVycmVkPXZvaWQgMH1jb25zdCBrPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnPy5wb3N0UHJvY2Vzc29yO3JldHVybiBrJiZrKGIpLGJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbml0Iix7dmFsdWU6Y30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6Zz0+bz8uUGFyZW50JiZnIGluc3RhbmNlb2Ygby5QYXJlbnQ/ITA6Zz8uX3pvZD8udHJhaXRzPy5oYXMoZSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwibmFtZSIse3ZhbHVlOmV9KSxwfWNvbnN0IHNzPVN5bWJvbCgiem9kX2JyYW5kIik7Y2xhc3MgUmUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFbmNvdW50ZXJlZCBQcm9taXNlIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZS4gVXNlIC5wYXJzZUFzeW5jKCkgaW5zdGVhZC4iKX19Y2xhc3MgaG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcihgRW5jb3VudGVyZWQgdW5pZGlyZWN0aW9uYWwgdHJhbnNmb3JtIGR1cmluZyBlbmNvZGU6ICR7dH1gKSx0aGlzLm5hbWU9IlpvZEVuY29kZUVycm9yIn19KHdjPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbENvbmZpZz8/KHdjLl9fem9kX2dsb2JhbENvbmZpZz17fSk7Y29uc3QgbmU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxDb25maWc7ZnVuY3Rpb24gSihlKXtyZXR1cm4gZSYmT2JqZWN0LmFzc2lnbihuZSxlKSxuZX1mdW5jdGlvbiBraCgpe2NvbnN0IGU9dGhpcy5fem9kO3JldHVybiBlLm1lc3NhZ2U/PyhlLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoZS5kZWYsR24sMikpLGUubWVzc2FnZX1mdW5jdGlvbiBTaChlKXt0aGlzLl96b2QubWVzc2FnZT1lfWNvbnN0ICRoPXtnZXQ6a2gsc2V0OlNoLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxDcj17dmFsdWU6dm9pZCAwLGVudW1lcmFibGU6ITF9LFNjPW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pLEV1PShlLHQpPT57ZS5uYW1lPSIkWm9kRXJyb3IiLENyLnZhbHVlPXQsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzc3VlcyIsQ3IpLENyLnZhbHVlPXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWVzc2FnZSIsJGgpO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO1NjLmhhcyhuKXx8KFNjLmFkZChuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPSgpPT50aGlzLm1lc3NhZ2U7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSkpfSxSdT1kKCIkWm9kRXJyb3IiLEV1KSx1ZT1kKCIkWm9kRXJyb3IiLEV1LHZvaWQgMCx7UGFyZW50OkVycm9yfSk7ZnVuY3Rpb24gemgoZSx0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KXx8KHQ9PT0iX19wcm90b19fIj9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuKCksd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTplW3RdPW4oKSksZVt0XX1mdW5jdGlvbiBtbyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXt9LG89W107Zm9yKGNvbnN0IHIgb2YgZS5pc3N1ZXMpci5wYXRoLmxlbmd0aD4wP3poKG4sci5wYXRoWzBdLCgpPT5bXSkucHVzaCh0KHIpKTpvLnB1c2godChyKSk7cmV0dXJue2Zvcm1FcnJvcnM6byxmaWVsZEVycm9yczpufX1mdW5jdGlvbiBnbyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtfZXJyb3JzOltdfSxvPShyLHM9W10pPT57Zm9yKGNvbnN0IGkgb2Ygci5pc3N1ZXMpaWYoaS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZpLmVycm9ycy5sZW5ndGgpaS5lcnJvcnMubWFwKGE9Pm8oe2lzc3VlczphfSxbLi4ucywuLi5pLnBhdGhdKSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2V7Y29uc3QgYT1bLi4ucywuLi5pLnBhdGhdO2lmKGEubGVuZ3RoPT09MCluLl9lcnJvcnMucHVzaCh0KGkpKTtlbHNle2xldCBjPW4sdT0wO2Zvcig7dTxhLmxlbmd0aDspe2NvbnN0IGw9YVt1XSxwPXU9PT1hLmxlbmd0aC0xO2lmKGw9PT0iX2Vycm9ycyIpe3AmJmMuX2Vycm9ycy5wdXNoKHQoaSkpLHUrKztjb250aW51ZX1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxsKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6e19lcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgZz1jW2xdO3AmJmcuX2Vycm9ycy5wdXNoKHQoaSkpLGM9Zyx1Kyt9fX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gaXMoZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17ZXJyb3JzOltdfSxvPShyLHM9W10pPT57dmFyIGk7Zm9yKGNvbnN0IGEgb2Ygci5pc3N1ZXMpaWYoYS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZhLmVycm9ycy5sZW5ndGgpYS5lcnJvcnMubWFwKGM9Pm8oe2lzc3VlczpjfSxbLi4ucywuLi5hLnBhdGhdKSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2V7Y29uc3QgYz1bLi4ucywuLi5hLnBhdGhdO2lmKGMubGVuZ3RoPT09MCl7bi5lcnJvcnMucHVzaCh0KGEpKTtjb250aW51ZX1sZXQgdT1uLGw9MDtmb3IoO2w8Yy5sZW5ndGg7KXtjb25zdCBwPWNbbF0sZz1sPT09Yy5sZW5ndGgtMTt0eXBlb2YgcD09InN0cmluZyI/KHUucHJvcGVydGllcz8/KHUucHJvcGVydGllcz17fSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUucHJvcGVydGllcyxwKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHUucHJvcGVydGllcyxwLHt2YWx1ZTp7ZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHU9dS5wcm9wZXJ0aWVzW3BdKToodS5pdGVtcz8/KHUuaXRlbXM9W10pLChpPXUuaXRlbXMpW3BdPz8oaVtwXT17ZXJyb3JzOltdfSksdT11Lml0ZW1zW3BdKSxnJiZ1LmVycm9ycy5wdXNoKHQoYSkpLGwrK319fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIEN1KGUpe2NvbnN0IHQ9W10sbj1lLm1hcChvPT50eXBlb2Ygbz09Im9iamVjdCI/by5rZXk6byk7Zm9yKGNvbnN0IG8gb2Ygbil0eXBlb2Ygbz09Im51bWJlciI/dC5wdXNoKGBbJHtvfV1gKTp0eXBlb2Ygbz09InN5bWJvbCI/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShTdHJpbmcobykpfV1gKTovW15cdyRdLy50ZXN0KG8pP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkobyl9XWApOih0Lmxlbmd0aCYmdC5wdXNoKCIuIiksdC5wdXNoKG8pKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBhcyhlKXtjb25zdCB0PVtdLG49Wy4uLmUuaXNzdWVzXS5zb3J0KChvLHIpPT4oby5wYXRoPz9bXSkubGVuZ3RoLShyLnBhdGg/P1tdKS5sZW5ndGgpO2Zvcihjb25zdCBvIG9mIG4pdC5wdXNoKGDinJYgJHtvLm1lc3NhZ2V9YCksby5wYXRoPy5sZW5ndGgmJnQucHVzaChgICDihpIgYXQgJHtDdShvLnBhdGgpfWApO3JldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiB2byhlLHQpe3JldHVybntjYWxsZWU6dD8uY2FsbGVlPz9lLEVycjp0Py5FcnJ9fWNvbnN0IE10PWU9Pntjb25zdCB0PShuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMX06e2FzeW5jOiExfSxhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgUmU7aWYoYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcCh1PT5oZSh1LGksSigpKSkpO3Rocm93IGVzKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0scXI9TXQodWUpLER0PWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSYmKGE9YXdhaXQgYSksYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcCh1PT5oZSh1LGksSigpKSkpO3Rocm93IGVzKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sTHI9RHQodWUpLHF0PWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITF9Onthc3luYzohMX0scz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7aWYocyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg/T3UoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxadT1xdCh1ZSk7ZnVuY3Rpb24gT3UoZSx0LG4pe2xldCBvO3JldHVybntzdWNjZXNzOiExLGdldCBlcnJvcigpe3JldHVybiBvfHwobz1uZXcgZSh0Lm1hcChyPT5oZShyLG4sSigpKSkpLHQ9dm9pZCAwLG49dm9pZCAwKSxvfSxzZXQgZXJyb3Iocil7bz1yLHQ9dm9pZCAwLG49dm9pZCAwfX19Y29uc3QgTHQ9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBzPXQuX3pvZC5ydW4oe3ZhbHVlOm4saXNzdWVzOltdfSxyKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2UmJihzPWF3YWl0IHMpLHMuaXNzdWVzLmxlbmd0aD9PdShlLHMuaXNzdWVzLHIpOntzdWNjZXNzOiEwLGRhdGE6cy52YWx1ZX19LFRoPUx0KHVlKSxQaD1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5pbnZhbGlkIiksSWg9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuZmFsbGJhY2siKSxibz0oKGUsdCxuKT0+e2NvbnN0IG89ZS5fem9kLmJhZy52YWxpZGF0b3I7aWYobyE9PXZvaWQgMCl7aWYobyh0KSE9PVBoKXJldHVybiEwO2lmKG8uZGVmaW5pdGU9PT0hMCYmbj09PXZvaWQgMClyZXR1cm4hMX1yZXR1cm4geGgoZSx0LG4pfSk7ZnVuY3Rpb24geGgoZSx0LG4pe2NvbnN0IG89bj97Li4ubixhc3luYzohMSxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITEsYWJvcnRFYXJseTohMH0scj1lLl96b2QuYmFnLmZhbGxiYWNrUnVuO2xldCBzO2lmKHI/KG9bSWhdPSEwLHM9cih7dmFsdWU6dCxpc3N1ZXM6W119LG8pKTpzPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSxzIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgUmU7cmV0dXJuIHMuaXNzdWVzLmxlbmd0aD09PTB9Y29uc3QgX289YXN5bmMoZSx0LG4pPT57Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiEwLGFib3J0RWFybHk6ITB9Onthc3luYzohMCxhYm9ydEVhcmx5OiEwfTtsZXQgcj1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlJiYocj1hd2FpdCByKSxyLmlzc3Vlcy5sZW5ndGg9PT0wfSxjcz1lPT57Y29uc3QgdD1NdChlKSxuPShvLHIscyxpKT0+e2NvbnN0IGE9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gdChvLHIsYSx2byhuLGkpKX07cmV0dXJuIG59LEVoPWNzKHVlKSx1cz1lPT57Y29uc3QgdD1NdChlKSxuPShvLHIscyxpKT0+dChvLHIscyx2byhuLGkpKTtyZXR1cm4gbn0sUmg9dXModWUpLGxzPWU9Pntjb25zdCB0PUR0KGUpLG49YXN5bmMobyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGF3YWl0IHQobyxyLGEsdm8obixpKSl9O3JldHVybiBufSxDaD1scyh1ZSksZHM9ZT0+e2NvbnN0IHQ9RHQoZSksbj1hc3luYyhvLHIscyxpKT0+YXdhaXQgdChvLHIscyx2byhuLGkpKTtyZXR1cm4gbn0sWmg9ZHModWUpLHBzPWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHF0KGUpKHQsbixyKX0sT2g9cHModWUpLGZzPWU9Pih0LG4sbyk9PnF0KGUpKHQsbixvKSxBaD1mcyh1ZSksaHM9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBMdChlKSh0LG4scil9LE5oPWhzKHVlKSxtcz1lPT5hc3luYyh0LG4sbyk9Pkx0KGUpKHQsbixvKSxqaD1tcyh1ZSksQXU9L15bY0NdWzAtOWEtel17Nix9JC8sTnU9L15bMC05YS16XSskLyxqdT0vXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kLyxNdT0vXlswLTlhLXZBLVZdezIwfSQvLER1PS9eW0EtWmEtejAtOV17Mjd9JC8scXU9L15bYS16QS1aMC05Xy1dezIxfSQvO2Z1bmN0aW9uIEx1KGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW2EtekEtWjAtOV8tXXske2V9fSRgKX1jb25zdCBVdT0vXlAoPzooXGQrVyl8KD8hLipXKSg/PVxkfFRcZCkoXGQrWSk/KFxkK00pPyhcZCtEKT8oVCg/PVxkKShcZCtIKT8oXGQrTSk/KFxkKyhbLixdXGQrKT9TKT8pPykkLyxNaD0vXlstK10/UCg/ISQpKD86KD86Wy0rXT9cZCtZKXwoPzpbLStdP1xkK1suLF1cZCtZJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzooPzpbLStdP1xkK1cpfCg/OlstK10/XGQrWy4sXVxkK1ckKSk/KD86KD86Wy0rXT9cZCtEKXwoPzpbLStdP1xkK1suLF1cZCtEJCkpPyg/OlQoPz1bXGQrLV0pKD86KD86Wy0rXT9cZCtIKXwoPzpbLStdP1xkK1suLF1cZCtIJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzpbLStdP1xkKyg/OlsuLF1cZCspP1MpPyk/PyQvLEh1PS9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSkkLyxldD1lPT5lP25ldyBSZWdFeHAoYF4oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tJHtlfVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9KSRgKTovXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMS04XVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC8sRGg9ZXQoNCkscWg9ZXQoNiksTGg9ZXQoNyksRnU9L14oPzpbQS1aYS16MC05XycrXC1dK1wuKSpbQS1aYS16MC05XycrXC1dKltBLVphLXowLTlfKy1dQCg/OltBLVphLXowLTldW0EtWmEtejAtOVwtXSpcLikrW0EtWmEtel17Mix9JC8sVWg9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sSGg9L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVpcLTAtOV0rXC4pK1thLXpBLVpdezIsfSkpJC8sQnU9L15bXlxzQCJdezEsNjR9QFteXHNAXXsxLDI1NX0kL3UsRmg9QnUsQmg9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sVmg9Il4oPz1bXFxzXFxTXSpbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7UmVnaW9uYWxfSW5kaWNhdG9yfVxcdTIwRTNdKVtcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtFbW9qaV9Db21wb25lbnR9XSskIjtmdW5jdGlvbiBWdSgpe3JldHVybiBuZXcgUmVnRXhwKFZoLCJ1Iil9Y29uc3QgSnU9L14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvLEt1PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpJC8sV3U9ZT0+e2NvbnN0IHQ9JGUoZT8/IjoiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXig/OlswLTlBLUZdezJ9JHt0fSl7NX1bMC05QS1GXXsyfSR8Xig/OlswLTlhLWZdezJ9JHt0fSl7NX1bMC05YS1mXXsyfSRgKX0sR3U9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwvKFswLTldfFsxLTJdWzAtOV18M1swLTJdKSQvLFl1PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvLEpoPS9eJHxeKD86WzAtOWEtekEtWisvXXs0fSkqKD86KD86WzAtOWEtekEtWisvXXsyfT09KXwoPzpbMC05YS16QS1aKy9dezN9PSkpPyQvLEtoPS9eKD86W0EtWmEtejAtOV8tXXs0fSkqKD86W0EtWmEtejAtOV8tXXsyLDN9KT8kLyxRdT0vXig/PS57MSwyNTN9XC4/JClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86Wy0wLTlhLXpBLVpdezAsNjF9WzAtOWEtekEtWl0pPykqXC4/JC8sWHU9L14oPz0uezEsMjUzfSQpKFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pP1wuKStbYS16QS1aXXsyLDYzfSQvLGdzPS9eaHR0cHM/JC8sZWw9L15cK1sxLTldXGR7NiwxNH0kLyx2cz0vXlxkKD86WyAtXT9cZCl7MTEsMTh9JC8sdGw9L14oPzpBRUR8QUZOfEFMTHxBTUR8QU9BfEFSU3xBVUR8QVdHfEFaTnxCQU18QkJEfEJEVHxCSER8QklGfEJNRHxCTkR8Qk9CfEJPVnxCUkx8QlNEfEJUTnxCV1B8QllOfEJaRHxDQUR8Q0RGfENIRXxDSEZ8Q0hXfENMRnxDTFB8Q05ZfENPUHxDT1V8Q1JDfENVUHxDVkV8Q1pLfERKRnxES0t8RE9QfERaRHxFR1B8RVJOfEVUQnxFVVJ8RkpEfEZLUHxHQlB8R0VMfEdIU3xHSVB8R01EfEdORnxHVFF8R1lEfEhLRHxITkx8SFRHfEhVRnxJRFJ8SUxTfElOUnxJUUR8SVJSfElTS3xKTUR8Sk9EfEpQWXxLRVN8S0dTfEtIUnxLTUZ8S1BXfEtSV3xLV0R8S1lEfEtaVHxMQUt8TEJQfExLUnxMUkR8TFNMfExZRHxNQUR8TURMfE1HQXxNS0R8TU1LfE1OVHxNT1B8TVJVfE1VUnxNVlJ8TVdLfE1YTnxNWFZ8TVlSfE1aTnxOQUR8TkdOfE5JT3xOT0t8TlBSfE5aRHxPTVJ8UEFCfFBFTnxQR0t8UEhQfFBLUnxQTE58UFlHfFFBUnxST058UlNEfFJVQnxSV0Z8U0FSfFNCRHxTQ1J8U0RHfFNFS3xTR0R8U0hQfFNMRXxTT1N8U1JEfFNTUHxTVE58U1ZDfFNZUHxTWkx8VEhCfFRKU3xUTVR8VE5EfFRPUHxUUll8VFREfFRXRHxUWlN8VUFIfFVHWHxVU0R8VVNOfFVZSXxVWVV8VVlXfFVaU3xWRUR8VkVTfFZORHxWVVZ8V1NUfFhBRHxYQUZ8WEFHfFhBVXxYQkF8WEJCfFhCQ3xYQkR8WENEfFhDR3xYRFJ8WE9GfFhQRHxYUEZ8WFBUfFhTVXxYVFN8WFVBfFhYWHxZRVJ8WkFSfFpNV3xaV0cpJC8sYnM9L15bQS1aXXsyfSg/ITAwfDAxfDk5KVxkezJ9W0EtWjAtOV17MTEsMzB9JC8sbmw9Iig/Oig/OlxcZFxcZFsyNDY4XVswNDhdfFxcZFxcZFsxMzU3OV1bMjZdfFxcZFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcZHs0fS0oPzooPzowWzEzNTc4XXwxWzAyXSktKD86MFsxLTldfFsxMl1cXGR8M1swMV0pfCg/OjBbNDY5XXwxMSktKD86MFsxLTldfFsxMl1cXGR8MzApfCg/OjAyKS0oPzowWzEtOV18MVxcZHwyWzAtOF0pKSkiO2Z1bmN0aW9uIFdoKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtlfSRgKX1jb25zdCBvbD1XaChubCk7ZnVuY3Rpb24gVXIoZSl7Y29uc3QgdD0iKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkIjtyZXR1cm4gdHlwZW9mIGUucHJlY2lzaW9uPT0ibnVtYmVyIj9lLnByZWNpc2lvbj09PS0xP2Ake3R9YDplLnByZWNpc2lvbj09PTA/YCR7dH06WzAtNV1cXGRgOmAke3R9OlswLTVdXFxkXFwuXFxkeyR7ZS5wcmVjaXNpb259fWA6ZS5zZWNvbmRzP2Ake3R9OlswLTVdXFxkKD86XFwuXFxkKyk/YDpgJHt0fSg/OjpbMC01XVxcZCg/OlxcLlxcZCspPyk/YH1mdW5jdGlvbiBybChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7VXIoZSl9JGApfWZ1bmN0aW9uIHNsKGUpe2NvbnN0IHQ9WyJaIl07ZS5vZmZzZXQmJnQucHVzaCgiKFsrLV0oPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQpIik7Y29uc3Qgbj1gJHtVcih7cHJlY2lzaW9uOmUucHJlY2lzaW9uLHNlY29uZHM6ITB9KX0oPzoke3Quam9pbigifCIpfSlgLG89ZS5sb2NhbD9gJHtufXwke1VyKHtwcmVjaXNpb246ZS5wcmVjaXNpb259KX1gOm47cmV0dXJuIG5ldyBSZWdFeHAoYF4ke25sfVQoPzoke299KSRgKX1jb25zdCBpbD0vXltcc1xTXXswLH0kLyxhbD1lPT57Y29uc3QgdD1lP2BbXFxzXFxTXXske2U/Lm1pbmltdW0/PzB9LCR7ZT8ubWF4aW11bT8/IiJ9fWA6IltcXHNcXFNdKiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke3R9JGApfSxjbD0vXi0/XGQrbj8kLyx1bD0vXi0/XGQrJC8seW89L14tP1xkKyg/OlwuXGQrKT8kLyxsbD0vXig/OnRydWV8ZmFsc2UpJC9pLGRsPS9ebnVsbCQvaSxwbD0vXnVuZGVmaW5lZCQvaSxmbD0vXlteQS1aXSokLyxobD0vXlteYS16XSokLyxtbD0vXlswLTlhLWZBLUZdKiQvO2Z1bmN0aW9uIFV0KGUsdCl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Ky9deyR7ZX19JHt0fSRgKX1mdW5jdGlvbiBIdChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTlfLV17JHtlfX0kYCl9Y29uc3QgR2g9L15bMC05YS1mQS1GXXszMn0kLyxZaD1VdCgyMiwiPT0iKSxRaD1IdCgyMiksWGg9L15bMC05YS1mQS1GXXs0MH0kLyxlbT1VdCgyNywiPSIpLHRtPUh0KDI3KSxubT0vXlswLTlhLWZBLUZdezY0fSQvLG9tPVV0KDQzLCI9Iikscm09SHQoNDMpLHNtPS9eWzAtOWEtZkEtRl17OTZ9JC8saW09VXQoNjQsIiIpLGFtPUh0KDY0KSxjbT0vXlswLTlhLWZBLUZdezEyOH0kLyx1bT1VdCg4NiwiPT0iKSxsbT1IdCg4Niksd289T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFueVN0cmluZzppbCxiYXNlNjQ6SmgsYmFzZTY0dXJsOktoLGJpZ2ludDpjbCxib29sZWFuOmxsLGJyb3dzZXJFbWFpbDpCaCxjaWRydjQ6R3UsY2lkcnY2Oll1LGNyZWRpdENhcmQ6dnMsY3VpZDpBdSxjdWlkMjpOdSxjdXJyZW5jeUNvZGU6dGwsZGF0ZTpvbCxkYXRldGltZTpzbCxkb21haW46WHUsZHVyYXRpb246VXUsZTE2NDplbCxlbWFpbDpGdSxlbW9qaTpWdSxleHRlbmRlZER1cmF0aW9uOk1oLGd1aWQ6SHUsaGV4Om1sLGhvc3RuYW1lOlF1LGh0bWw1RW1haWw6VWgsaHR0cFByb3RvY29sOmdzLGliYW46YnMsaWRuRW1haWw6RmgsaW50ZWdlcjp1bCxpcHY0Okp1LGlwdjY6S3Usa3N1aWQ6RHUsbG93ZXJjYXNlOmZsLG1hYzpXdSxtZDVfYmFzZTY0OlloLG1kNV9iYXNlNjR1cmw6UWgsbWQ1X2hleDpHaCxuYW5vaWQ6cXUsbmFub2lkT2ZMZW5ndGg6THUsbnVsbDpkbCxudW1iZXI6eW8scmZjNTMyMkVtYWlsOkhoLHNoYTFfYmFzZTY0OmVtLHNoYTFfYmFzZTY0dXJsOnRtLHNoYTFfaGV4OlhoLHNoYTI1Nl9iYXNlNjQ6b20sc2hhMjU2X2Jhc2U2NHVybDpybSxzaGEyNTZfaGV4Om5tLHNoYTM4NF9iYXNlNjQ6aW0sc2hhMzg0X2Jhc2U2NHVybDphbSxzaGEzODRfaGV4OnNtLHNoYTUxMl9iYXNlNjQ6dW0sc2hhNTEyX2Jhc2U2NHVybDpsbSxzaGE1MTJfaGV4OmNtLHN0cmluZzphbCx0aW1lOnJsLHVsaWQ6anUsdW5kZWZpbmVkOnBsLHVuaWNvZGVFbWFpbDpCdSx1cHBlcmNhc2U6aGwsdXVpZDpldCx1dWlkNDpEaCx1dWlkNjpxaCx1dWlkNzpMaCx4aWQ6TXV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVT1kKCIkWm9kQ2hlY2siLChlLHQpPT57dmFyIG47ZS5fem9kPz8oZS5fem9kPXt9KSxlLl96b2QuZGVmPXQsKG49ZS5fem9kKS5vbmF0dGFjaD8/KG4ub25hdHRhY2g9W10pfSksX3M9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hWHIodCkmJnQuc2l6ZSE9PXZvaWQgMH0seXM9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hWHIodCkmJnQubGVuZ3RoIT09dm9pZCAwfSxRbj17bnVtYmVyOiJudW1iZXIiLGJpZ2ludDoiYmlnaW50IixvYmplY3Q6ImRhdGUifSx3cz1kKCIkWm9kQ2hlY2tMZXNzVGhhbiIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPVFuW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPD10LnZhbHVlOm8udmFsdWU8dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpRblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX2JpZyIsbWF4aW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxrcz1kKCIkWm9kQ2hlY2tHcmVhdGVyVGhhbiIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPVFuW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPj10LnZhbHVlOm8udmFsdWU+dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpRblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGdsPWQoIiRab2RDaGVja011bHRpcGxlT2YiLChlLHQpPT57VS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntpZih0eXBlb2Ygbi52YWx1ZSE9dHlwZW9mIHQudmFsdWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbWl4IG51bWJlciBhbmQgYmlnaW50IGluIG11bHRpcGxlX29mIGNoZWNrLiIpOyh0eXBlb2Ygbi52YWx1ZT09ImJpZ2ludCI/dC52YWx1ZSE9PUJpZ0ludCgwKSYmbi52YWx1ZSV0LnZhbHVlPT09QmlnSW50KDApOnN1KG4udmFsdWUsdC52YWx1ZSk9PT0wKXx8bi5pc3N1ZXMucHVzaCh7b3JpZ2luOnR5cGVvZiBuLnZhbHVlLGNvZGU6Im5vdF9tdWx0aXBsZV9vZiIsZGl2aXNvcjp0LnZhbHVlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksdmw9ZCgiJFpvZENoZWNrTnVtYmVyRm9ybWF0IiwoZSx0KT0+e1UuaW5pdChlLHQpLHQuZm9ybWF0PXQuZm9ybWF0fHwiZmxvYXQ2NCI7Y29uc3Qgbj10LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLG89bj8iaW50IjoibnVtYmVyIixbcixzXT1odVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPWk9Pntjb25zdCBhPWkudmFsdWU7aWYobil7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpe2kuaXNzdWVzLnB1c2goe2V4cGVjdGVkOm8sZm9ybWF0OnQuZm9ybWF0LGNvZGU6ImludmFsaWRfdHlwZSIsY29udGludWU6ITEsaW5wdXQ6YSxpbnN0OmV9KTtyZXR1cm59aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGEpKXthPjA/aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk6aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59fWE8ciYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnIsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLGE+cyYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpzLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxibD1kKCIkWm9kQ2hlY2tCaWdJbnRGb3JtYXQiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3RbbixvXT1tdVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPXI9Pntjb25zdCBzPXIudmFsdWU7czxuJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06bixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSkscz5vJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm8saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLF9sPWQoIiRab2RDaGVja01heFNpemUiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1fcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPD10Lm1heGltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjp1byhyKSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5bD1kKCIkWm9kQ2hlY2tNaW5TaXplIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49X3MpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZT49dC5taW5pbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46dW8ociksY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx3bD1kKCIkWm9kQ2hlY2tTaXplRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49X3MpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5zaXplO2lmKHM9PT10LnNpemUpcmV0dXJuO2NvbnN0IGk9cz50LnNpemU7by5pc3N1ZXMucHVzaCh7b3JpZ2luOnVvKHIpLC4uLmk/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5zaXplfTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQuc2l6ZX0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksa2w9ZCgiJFpvZENoZWNrTWF4TGVuZ3RoIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49eXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz50Lm1heGltdW0/bG8ocik6cyk8PXQubWF4aW11bSlyZXR1cm47Y29uc3QgYT1wbyhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxTbD1kKCIkWm9kQ2hlY2tNaW5MZW5ndGgiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj15cyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lm1pbmltdW0mJnM8dC5taW5pbXVtKjI/bG8ocik6cyk+PXQubWluaW11bSlyZXR1cm47Y29uc3QgYT1wbyhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLCRsPWQoIiRab2RDaGVja0xlbmd0aEVxdWFscyIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPXlzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoLGk9dHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lmxlbmd0aCYmczw9dC5sZW5ndGgqMj9sbyhyKTpzO2lmKGk9PT10Lmxlbmd0aClyZXR1cm47Y29uc3QgYT1wbyhyKSxjPWk+dC5sZW5ndGg7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsLi4uYz97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0Lmxlbmd0aH06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lmxlbmd0aH0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRnQ9ZCgiJFpvZENoZWNrU3RyaW5nRm9ybWF0IiwoZSx0KT0+e3ZhciBuLG87VS5pbml0KGUsdCksdC5wYXR0ZXJuPyhuPWUuX3pvZCkuY2hlY2s/PyhuLmNoZWNrPXI9Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KHIudmFsdWUpJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpyLnZhbHVlLC4uLnQucGF0dGVybj97cGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKX06e30saW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9KToobz1lLl96b2QpLmNoZWNrPz8oby5jaGVjaz0oKT0+e30pfSksemw9ZCgiJFpvZENoZWNrUmVnZXgiLChlLHQpPT57RnQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChuLnZhbHVlKSYmbi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IixpbnB1dDpuLnZhbHVlLHBhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCksaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVGw9ZCgiJFpvZENoZWNrTG93ZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1mbCksRnQuaW5pdChlLHQpfSksUGw9ZCgiJFpvZENoZWNrVXBwZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1obCksRnQuaW5pdChlLHQpfSksSWw9ZCgiJFpvZENoZWNrSW5jbHVkZXMiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj0kZSh0LmluY2x1ZGVzKSxvPW5ldyBSZWdFeHAodHlwZW9mIHQucG9zaXRpb249PSJudW1iZXIiP2BeLnske3QucG9zaXRpb259LH0ke259YDpuKTt0LnBhdHRlcm49byxlLl96b2QuY2hlY2s9cj0+e3IudmFsdWUuaW5jbHVkZXModC5pbmNsdWRlcyx0LnBvc2l0aW9uKXx8ci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIixpbmNsdWRlczp0LmluY2x1ZGVzLGlucHV0OnIudmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSkseGw9ZCgiJFpvZENoZWNrU3RhcnRzV2l0aCIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYF4keyRlKHQucHJlZml4KX0uKmApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuc3RhcnRzV2l0aCh0LnByZWZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIscHJlZml4OnQucHJlZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRWw9ZCgiJFpvZENoZWNrRW5kc1dpdGgiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGAuKiR7JGUodC5zdWZmaXgpfSRgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLmVuZHNXaXRoKHQuc3VmZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsc3VmZml4OnQuc3VmZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gWG4oZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5kZShuLGUuaXNzdWVzKSl9Y29uc3QgUmw9ZCgiJFpvZENoZWNrUHJvcGVydHkiLChlLHQpPT57VS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPXQuc2NoZW1hLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlW3QucHJvcGVydHldLGlzc3VlczpbXX0se30pO2lmKG8gaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiBvLnRoZW4ocj0+WG4ocixuLHQucHJvcGVydHkpKTtYbihvLG4sdC5wcm9wZXJ0eSl9fSksQ2w9ZCgiJFpvZENoZWNrUHJvcGVydGllcyIsKGUsdCk9PntVLmluaXQoZSx0KSxmbyhlLFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbiooKXt5aWVsZCBlfSk7bGV0IG47ZS5fem9kLmNoZWNrPW89PntpZihvLnZhbHVlPT1udWxsKXtvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om8udmFsdWUsaW5zdDplfSk7cmV0dXJufW4/PyhuPVJlZmxlY3Qub3duS2V5cyh0LnNoYXBlKS5tYXAoaT0+W2ksdC5zaGFwZVtpXV0pKTtjb25zdCByPW8udmFsdWU7bGV0IHM7Zm9yKGNvbnN0W2ksYV1vZiBuKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOnJbaV0saXNzdWVzOltdfSx7fSk7YyBpbnN0YW5jZW9mIFByb21pc2U/KHM/PyhzPVtdKSxzLnB1c2goYy50aGVuKHU9PlhuKHUsbyxpKSkpKTpYbihjLG8saSl9aWYocylyZXR1cm4gUHJvbWlzZS5hbGwocykudGhlbigoKT0+e30pfX0pLFpsPWQoIiRab2RDaGVja01pbWVUeXBlIiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0Lm1pbWUpO2UuX3pvZC5jaGVjaz1vPT57bi5oYXMoby52YWx1ZS50eXBlKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQubWltZSxpbnB1dDpvLnZhbHVlLnR5cGUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksT2w9ZCgiJFpvZENoZWNrT3ZlcndyaXRlIiwoZSx0KT0+e1UuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57bi52YWx1ZT10LnR4KG4udmFsdWUpfX0pO2NsYXNzIEFse2NvbnN0cnVjdG9yKHQ9W10sbj17fSl7dGhpcy5jb250ZW50PVtdLHRoaXMuaW5kZW50PTAsdGhpcy5hcmdzPXQsdGhpcy5jbG9zZWQ9bn1pbmRlbnRlZCh0KXt0aGlzLmluZGVudCs9MTt0cnl7dCh0aGlzKX1maW5hbGx5e3RoaXMuaW5kZW50LT0xfX13cml0ZSh0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil7dCh0aGlzLHtleGVjdXRpb246InN5bmMifSksdCh0aGlzLHtleGVjdXRpb246ImFzeW5jIn0pO3JldHVybn1jb25zdCBvPXQuc3BsaXQoYApgKS5maWx0ZXIoaT0+aSkscj1NYXRoLm1pbiguLi5vLm1hcChpPT5pLmxlbmd0aC1pLnRyaW1TdGFydCgpLmxlbmd0aCkpLHM9by5tYXAoaT0+aS5zbGljZShyKSkubWFwKGk9PiIgIi5yZXBlYXQodGhpcy5pbmRlbnQqMikraSk7Zm9yKGNvbnN0IGkgb2Ygcyl0aGlzLmNvbnRlbnQucHVzaChpKX1jb21waWxlKCl7Y29uc3QgdD1GdW5jdGlvbixuPXRoaXM/LmNvbnRlbnQ/P1siIl07cmV0dXJuIG5ldyB0KC4uLk9iamVjdC5rZXlzKHRoaXMuY2xvc2VkKSxgcmV0dXJuIGZ1bmN0aW9uICgke3RoaXMuYXJncy5qb2luKCIsICIpfSkgewoke24uam9pbihgCmApfQp9O2ApKC4uLk9iamVjdC52YWx1ZXModGhpcy5jbG9zZWQpKX19Y29uc3QgTmw9e21ham9yOjQsbWlub3I6NixwYXRjaDo1fSx6PWQoIiRab2RUeXBlIiwoZSx0KT0+e3ZhciBuO2U/PyhlPXt9KSxlLl96b2QuZGVmPXQsZS5fem9kLmJhZz1lLl96b2QuYmFnfHx7fSxlLl96b2QudmVyc2lvbj1ObDtjb25zdCBvPWUuX3pvZC5kZWYuY2hlY2tzLHI9ZS5fem9kLnRyYWl0cy5oYXMoIiRab2RDaGVjayIpP1tlLC4uLm8/P1tdXTpvPy5sZW5ndGg/Wy4uLm9dOltdO2Zvcihjb25zdCBzIG9mIHIpZm9yKGNvbnN0IGkgb2Ygcy5fem9kLm9uYXR0YWNoKWkoZSk7aWYoci5sZW5ndGg9PT0wKShuPWUuX3pvZCkuZGVmZXJyZWQ/PyhuLmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQ/LnB1c2goKCk9PntlLl96b2QucnVuPWUuX3pvZC5wYXJzZX0pO2Vsc2V7Y29uc3Qgcz0oYSxjLHUpPT57aWYoYS5tZW1vKXJldHVybiBhO2xldCBsPXJlKGEpLHA7Zm9yKGNvbnN0IGcgb2YgYyl7aWYoZy5fem9kLmRlZi53aGVuKXtpZihTdShhKXx8IWcuX3pvZC5kZWYud2hlbihhKSljb250aW51ZX1lbHNlIGlmKGwpY29udGludWU7Y29uc3QgYj1hLmlzc3Vlcy5sZW5ndGgseT1nLl96b2QuY2hlY2soYSk7aWYoeSBpbnN0YW5jZW9mIFByb21pc2UmJnU/LmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO2lmKHB8fHkgaW5zdGFuY2VvZiBQcm9taXNlKXA9KHA/P1Byb21pc2UucmVzb2x2ZSgpKS50aGVuKGFzeW5jKCk9Pnthd2FpdCB5LGEuaXNzdWVzLmxlbmd0aCE9PWImJihEcihhLmlzc3VlcyxiLGUpLGx8fChsPXJlKGEsYikpKX0pO2Vsc2V7aWYoYS5pc3N1ZXMubGVuZ3RoPT09Yiljb250aW51ZTtEcihhLmlzc3VlcyxiLGUpLGx8fChsPXJlKGEsYikpfX1yZXR1cm4gcD9wLnRoZW4oKCk9PmEpOmF9LGk9KGEsYyx1KT0+e2lmKHJlKGEpKXJldHVybiBhLmFib3J0ZWQ9ITAsYTtjb25zdCBsPXMoYyxyLHUpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKXtpZih1LmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO3JldHVybiBsLnRoZW4ocD0+ZS5fem9kLnBhcnNlKHAsdSkpfXJldHVybiBlLl96b2QucGFyc2UobCx1KX07ZS5fem9kLnJ1bj0oYSxjKT0+e2lmKGMuc2tpcENoZWNrcylyZXR1cm4gZS5fem9kLnBhcnNlKGEsYyk7aWYoYy5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBsPWUuX3pvZC5wYXJzZSh7dmFsdWU6YS52YWx1ZSxpc3N1ZXM6W119LHsuLi5jLHNraXBDaGVja3M6ITB9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKHA9PmkocCxhLGMpKTppKGwsYSxjKX1jb25zdCB1PWUuX3pvZC5wYXJzZShhLGMpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKXtpZihjLmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO3JldHVybiB1LnRoZW4obD0+cyhsLHIsYykpfXJldHVybiBzKHUscixjKX19fSx7Z2V0In5zdGFuZGFyZCIoKXtyZXR1cm4gZm8odGhpcywifnN0YW5kYXJkIixTcyh0aGlzKSl9LHNldCJ+c3RhbmRhcmQiKGUpe3plKHRoaXMsIn5zdGFuZGFyZCIsZSl9fSksamw9KGUsdCk9PmUuaXNzdWVzLmxlbmd0aD97aXNzdWVzOmUuaXNzdWVzLm1hcChuPT5oZShuLHQsSigpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBkbShlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gamwoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIFNzKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gamwobyxuKX1jYXRjaHt9cmV0dXJuIGRtKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IEJ0PWQoIiRab2RTdHJpbmciLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9pbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEQ9ZCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntGdC5pbml0KGUsdCksQnQuaW5pdChlLHQpfSksTWw9ZCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUh1KSxELmluaXQoZSx0KX0pLERsPWQoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZXQobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWV0KCkpO0QuaW5pdChlLHQpfSkscWw9ZCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1GdSksRC5pbml0KGUsdCl9KSwkcz0xLFJ0PTI7ZnVuY3Rpb24genMoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBMbChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP3pzKGUpfHxSdDpVbChlLHQpfWZ1bmN0aW9uIFVsKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1ncy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gJHM7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/UnR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIFJ0fX1jb25zdCBwbT0vW1x0XG5ccl0vZztmdW5jdGlvbiBIcihlKXtyZXR1cm4gZS5yZXBsYWNlKHBtLCIiKX1mdW5jdGlvbiBIbChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBGbChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBCbD1kKCIkWm9kVVJMIiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1MbChvLHQpO2lmKHI9PT0kcyl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1SdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9SHIobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFIbChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhRmwocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6SHIobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksVmw9ZCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1WdSgpKSxELmluaXQoZSx0KX0pLEpsPWQoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9xdTpMdSh0Lmxlbmd0aCkpLEQuaW5pdChlLHQpfSksS2w9ZCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUF1KSxELmluaXQoZSx0KX0pLFdsPWQoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TnUpLEQuaW5pdChlLHQpfSksR2w9ZCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWp1KSxELmluaXQoZSx0KX0pLFlsPWQoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU11KSxELmluaXQoZSx0KX0pLFFsPWQoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RHUpLEQuaW5pdChlLHQpfSksWGw9ZCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1zbCh0KSksRC5pbml0KGUsdCl9KSxlZD1kKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49b2wpLEQuaW5pdChlLHQpfSksdGQ9ZCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJsKHQpKSxELmluaXQoZSx0KX0pLG5kPWQoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VXUpLEQuaW5pdChlLHQpfSksb2Q9ZCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUp1KSxELmluaXQoZSx0KX0pLGZtPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBUcyhlKXtyZXR1cm4gZm0udGVzdChlKT96cyhgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IHJkPWQoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1LdSksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntUcyhuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxzZD1kKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1XdSh0LmRlbGltaXRlcikpLEQuaW5pdChlLHQpfSksaWQ9ZCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49R3UpLEQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOlRzKG4pfWNvbnN0IGNkPWQoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVl1KSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2FkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gUHMoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCB1ZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sbGQ9ZCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dWQpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57UHMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxJcz0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gZGQoZSl7aWYoIUlzLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gUHMobil9Y29uc3QgcGQ9ZCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SXMpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57ZGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxmZD1kKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZWwpLEQuaW5pdChlLHQpfSksaG09L1stIF0vZztmdW5jdGlvbiBtbShlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBoZChlKXtyZXR1cm4gdnMudGVzdChlKT9tbShlLnJlcGxhY2UoaG0sIiIpKTohMX1jb25zdCBtZD1kKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dnMpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGdtKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGdkKGUpe3JldHVybiBicy50ZXN0KGUpP2dtKGUpOiExfWNvbnN0IHZkPWQoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1icyksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntnZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBiZChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IF9kPWQoIiRab2RKV1QiLChlLHQpPT57RC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntiZChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHlkPWQoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57RC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSkseHM9ZCgiJFpvZE51bWJlciIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj15byxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSx3ZD1kKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3ZsLmluaXQoZSx0KSx4cy5pbml0KGUsdCl9KSxFcz1kKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1sbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLFJzPWQoIiRab2RCaWdJbnQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49Y2wsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxrZD1kKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2JsLmluaXQoZSx0KSxScy5pbml0KGUsdCl9KSxTZD1kKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSwkZD1kKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXBsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHpkPWQoIiRab2ROdWxsIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPWRsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxUZD1kKCIkWm9kQW55IiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksUGQ9ZCgiJFpvZFVua25vd24iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxJZD1kKCIkWm9kTmV2ZXIiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSx4ZD1kKCIkWm9kVm9pZCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLEVkPWQoIiRab2REYXRlIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gJGMoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5kZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IFJkPWQoIiRab2RBcnJheSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPW5lLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgaT1bXSxhPXI/LmFib3J0RWFybHk7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspe2NvbnN0IHU9c1tjXSxsPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaChsLnRoZW4ocD0+JGMocCxvLGMpKSk7ZWxzZSBpZigkYyhsLG8sYyksYSYmbC5pc3N1ZXMubGVuZ3RoIT09MCYmcmUobCkpYnJlYWt9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gZW8oZSx0LG4sbyxyLHMpe2NvbnN0IGk9biBpbiBvLGE9cz09PSJvcHRpb25hbCI7aWYoISghaSYmYSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmEmJiFpKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLmRlKG4sZS5pc3N1ZXMpKX1pZighaSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGl8fHI9PT0iZGVmYXVsdGVkIiYmIWEpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3Qgdm09W107ZnVuY3Rpb24gQ2QoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOnZtLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgaSBvZiByKWlmKCFlLnNoYXBlPy5baV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoaSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1mdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIFpkKGUsdCxuLG8scixzLGkpe2NvbnN0IGE9W10sYz1yLmtleVNldCx1PXIuY2F0Y2hhbGwuX3pvZCxsPXUuZGVmLnR5cGUscD11Lm9wdGluLGc9dS5vcHRvdXQ7bGV0IGI9MDtmb3IoY29uc3QgeSBpbiB0KXtpZihpJiZuLmlzc3Vlcy5sZW5ndGghPT1iKXtpZihyZShuLGIpKWJyZWFrO2I9bi5pc3N1ZXMubGVuZ3RofWlmKGMuaGFzKHkpKWNvbnRpbnVlO2lmKHk9PT0iX19wcm90b19fIil7bD09PSJuZXZlciImJmEucHVzaCh5KTtjb250aW51ZX1pZihsPT09Im5ldmVyIil7YS5wdXNoKHkpO2NvbnRpbnVlfWNvbnN0IGs9dS5ydW4oe3ZhbHVlOnRbeV0saXNzdWVzOltdfSxvKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2goay50aGVuKCQ9PmVvKCQsbix5LHQscCxnKSkpOmVvKGssbix5LHQscCxnKX1yZXR1cm4gYS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmEsaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IE9kPWQoIiRab2RPYmplY3QiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IHU9KCk9Pntjb25zdCBsPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6bH0pLHUucmF3PWwsbH07dS5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6dX0pfWNvbnN0IHI9TnQoKCk9PkNkKHQpKTt4KGUsInByb3BWYWx1ZXMiLHU9Pntjb25zdCBsPXUuZGVmLnNoYXBlLHA9e307Zm9yKGNvbnN0IGcgaW4gbCl7Y29uc3QgYj1sW2ddLl96b2Q7aWYoYi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLGcpfHxCZShwLGcsbmV3IFNldCk7Zm9yKGNvbnN0IHkgb2YgYi52YWx1ZXMpcFtnXS5hZGQoeSk7Yi5vcHRpbiE9PXZvaWQgMCYmcFtnXS5hZGQodm9pZCAwKX19cmV0dXJuIHB9KTtjb25zdCBzPVFlLGk9dC5jYXRjaGFsbDtsZXQgYTtjb25zdCBjPW5lLm1lbW9pemVyO2M/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHUsbCk9PnthPz8oYT1yLnZhbHVlKTtjb25zdCBwPXUudmFsdWU7aWYoIXMocCkpcmV0dXJuIHUuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cCxpbnN0OmV9KSx1O3UudmFsdWU9Yz9jLmFsbG9jKGUsdSx7fSxsKTp7fTtjb25zdCBnPVtdLGI9YS5zaGFwZSx5PWw/LmFib3J0RWFybHk7bGV0IGs9dS5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGEuYWxsS2V5cyl7aWYoeSYmdS5pc3N1ZXMubGVuZ3RoIT09ayl7aWYocmUodSxrKSlicmVhaztrPXUuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgaj1iWyRdLFI9ai5fem9kLm9wdGluLEY9ai5fem9kLm9wdG91dCxvZT1qLl96b2QucnVuKHt2YWx1ZTpwWyRdLGlzc3VlczpbXX0sbCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2cucHVzaChvZS50aGVuKEI9PmVvKEIsdSwkLHAsUixGKSkpOmVvKG9lLHUsJCxwLFIsRil9cmV0dXJuIGk/WmQoZyxwLHUsbCxyLnZhbHVlLGUseT09PSEwKTpnLmxlbmd0aD9Qcm9taXNlLmFsbChnKS50aGVuKCgpPT51KTp1fX0pLEFkPWQoIiRab2RPYmplY3RKSVQiLChlLHQpPT57T2QuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89TnQoKCk9PkNkKHQpKSxyPW5lLm1lbW9pemVyLHM9Yj0+e2NvbnN0IHk9by52YWx1ZSxrPXkuc3ltYm9sS2V5cywkPW5ldyBBbChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6YixpbnN0OmUsbWVtbzpyLHN5bXM6a30pLGo9Qj0+YHNoYXBlWyR7Qn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Qn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFI9KEIsTCk9PmAKICAgICAgICAgIGxldCAke0J9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Qn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Qn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7TH0sIC4uLmlzcy5wYXRoXSA6IFske0x9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0J9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0J9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBGPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEIgb2YgeS5hbGxLZXlzKUZbQl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEIgb2YgeS5hbGxLZXlzKXtpZihCPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTD1GW0JdLHllPXR5cGVvZiBCPT0ic3ltYm9sIj9gc3ltc1ske2suaW5kZXhPZihCKX1dYDp1dShCKSxJcj1gJHt5ZX0gaW4gaW5wdXRgLHZjPWJbQl0seHI9dmM/Ll96b2Q/Lm9wdGluLGJjPXhyIT09dm9pZCAwLEJmPXZjPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7TH0gPSAke2ooeWUpfTtgKSxiYyYmQmYpe2NvbnN0IFZmPXhyPT09Im9wdGlvbmFsIj9gJHtMfV9wcmVzZW50YDpgJHtMfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7TH1fcHJlc2VudGA7JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtMfV9wcmVzZW50ID0gJHtJcn07CiAgICAgICAgaWYgKCEke0x9Lmlzc3Vlcy5sZW5ndGggfHwgJHtMfV9wcmVzZW50KSB7CiAgICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke1ZmfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBgKX1lbHNlIGJjPygkLndyaXRlKGAKICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgIH0KICAgICAgYCkseHI9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtMfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7SXJ9KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICB9CiAgICAgIGApKTokLndyaXRlKGAKICAgICAgICBjb25zdCAke0x9X3ByZXNlbnQgPSAke0lyfTsKICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgIH0KICAgICAgICBpZiAoISR7TH1fcHJlc2VudCAmJiAhJHtMfS5pc3N1ZXMubGVuZ3RoKSB7CiAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHsKICAgICAgICAgICAgY29kZTogImludmFsaWRfdHlwZSIsCiAgICAgICAgICAgIGV4cGVjdGVkOiAibm9ub3B0aW9uYWwiLAogICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLAogICAgICAgICAgICBwYXRoOiBbJHt5ZX1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHtMfV9wcmVzZW50KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICB9CgogICAgICBgKX1yZXR1cm4gJC53cml0ZSgicGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsiKSwkLndyaXRlKCJyZXR1cm4gcGF5bG9hZDsiKSwkLmNvbXBpbGUoKX07bGV0IGk7Y29uc3QgYT1RZSxjPSFuZS5qaXRsZXNzLGw9YyYmZHUudmFsdWUscD10LmNhdGNoYWxsO2xldCBnO2UuX3pvZC5wYXJzZT0oYix5KT0+e2c/PyhnPW8udmFsdWUpO2NvbnN0IGs9Yi52YWx1ZTtyZXR1cm4gYShrKT9jJiZsJiZ5Py5hc3luYz09PSExJiZ5LmppdGxlc3MhPT0hMD8oaXx8KGk9cyh0LnNoYXBlKSksYj1pKGIseSkscD9aZChbXSxrLGIseSxnLGUseT8uYWJvcnRFYXJseT09PSEwKTpiKTpuKGIseSk6KGIuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ayxpbnN0OmV9KSxiKX19KTtmdW5jdGlvbiB6YyhlLHQsbixvKXtmb3IoY29uc3QgcyBvZiBlKWlmKHMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHQudmFsdWU9cy52YWx1ZSx0O2NvbnN0IHI9ZS5maWx0ZXIocz0+IXJlKHMpKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPXJbMF0udmFsdWUsclswXSk6KHQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+aGUoaSxvLEooKSkpKX0pLHQpfWNvbnN0IGtvPWQoIiRab2RVbmlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluPT09ImRlZmF1bHRlZCIpPyJkZWZhdWx0ZWQiOm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW4hPT12b2lkIDApPyJvcHRpb25hbCI6dm9pZCAwKSx4KGUsIm9wdG91dCIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKT8ib3B0aW9uYWwiOnZvaWQgMCkseChlLCJ2YWx1ZXMiLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC52YWx1ZXMpKXJldHVybiBuZXcgU2V0KG8uZGVmLm9wdGlvbnMuZmxhdE1hcChyPT5BcnJheS5mcm9tKHIuX3pvZC52YWx1ZXMpKSl9KSx4KGUsInBhdHRlcm4iLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC5wYXR0ZXJuKSl7Y29uc3Qgcj1vLmRlZi5vcHRpb25zLm1hcChzPT5zLl96b2QucGF0dGVybik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtyLm1hcChzPT5FZShzLnNvdXJjZSkpLmpvaW4oInwiKX0pJGApfX0pO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtpZihjIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goYykscz0hMDtlbHNle2lmKGMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIGM7aS5wdXNoKGMpfX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9PnpjKGEsbyxlLHIpKTp6YyhpLG8sZSxyKX19KTtmdW5jdGlvbiBUYyhlLHQsbixvKXtjb25zdCByPVtdO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWVbc10uaXNzdWVzLmxlbmd0aD09PTAmJnIucHVzaChzKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPWVbclswXV0udmFsdWUsdCk6KHIubGVuZ3RoPT09MD90Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmhlKGksbyxKKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0IE5kPWQoIiRab2RYb3IiLChlLHQpPT57a28uaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtjIGluc3RhbmNlb2YgUHJvbWlzZT8oaS5wdXNoKGMpLHM9ITApOmkucHVzaChjKX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9PlRjKGEsbyxlLHIpKTpUYyhpLG8sZSxyKX19KTtmdW5jdGlvbiBDcyhlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89amQobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gamQoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCBNZD1kKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLGtvLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTt4KGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBpPTA7Zm9yKGNvbnN0IGEgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucHJvcFZhbHVlcztpZighY3x8T2JqZWN0LmtleXMoYykubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGEpfSJgKTtjW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmaSsrO2Zvcihjb25zdFt1LGxdb2YgT2JqZWN0LmVudHJpZXMoYykpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLHUpfHxCZShzLHUsbmV3IFNldCk7Zm9yKGNvbnN0IHAgb2YgbClzW3VdLmFkZChwKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmk+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgaT1pbyhyLl96b2QuZGVmKTtpZihpJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPU50KCgpPT5qZCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFRZShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDppLGluc3Q6ZX0pLHI7Y29uc3QgYT1pPy5bdC5kaXNjcmltaW5hdG9yXSxjPW8udmFsdWUuZ2V0KGEpO3JldHVybiBjJiYoYSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT9jLl96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIodT0+by52YWx1ZS5nZXQodSkhPT1udWxsKSxpbnB1dDppLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksRGQ9ZCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxpPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGkgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGldKS50aGVuKChbYyx1XSk9PlBjKG4sYyx1KSk6UGMobixzLGkpfX0pO2Z1bmN0aW9uIHRvKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoQ2UoZSkmJkNlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBpPXRvKGVbc10sdFtzXSk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWkuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxpPXRvKHIscyk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goaS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uIFBjKGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGk9KHUsbCk9PntsZXQgcDtpZih1LmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhdS5wYXRoPy5sZW5ndGgpcj8/KHI9dSkscD11LmtleXM7ZWxzZSBpZih1LmNvZGU9PT0iaW52YWxpZF9rZXkiJiZ1Lm9yaWdpbj09PSJyZWNvcmQiJiZ1LnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGc9U3RyaW5nKHUucGF0aFswXSk7cy5oYXMoZyl8fHMuc2V0KGcsdSkscD1bZ119ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgZyBvZiBwKW8uaGFzKGcpfHxvLnNldChnLHt9KSxvLmdldChnKVtsXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IHUgb2YgdC5pc3N1ZXMpaSh1LCJsIil8fGUuaXNzdWVzLnB1c2godSk7Zm9yKGNvbnN0IHUgb2Ygbi5pc3N1ZXMpaSh1LCJyIil8fGUuaXNzdWVzLnB1c2godSk7Y29uc3QgYT1bLi4ub10uZmlsdGVyKChbLHVdKT0+dS5sJiZ1LnIpLm1hcCgoW3VdKT0+dSk7aWYoYS5sZW5ndGgpe2NvbnN0IHU9cj9hLmZpbHRlcihsPT5yLmtleXMuaW5jbHVkZXMobCkpOltdO3UubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6dX0pO2Zvcihjb25zdCBsIG9mIGEpIXUuaW5jbHVkZXMobCkmJnMuaGFzKGwpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGwpKX1jb25zdCBjPXRvKHQudmFsdWUsbi52YWx1ZSk7aWYoIWMudmFsaWQpe2lmKHJlKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkoYy5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9Yy5kYXRhLGV9Y29uc3QgWnM9ZCgiJFpvZFR1cGxlIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPW5lLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmksaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGE9W10sYz1JYyhuLCJvcHRpbiIpLHU9SWMobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoaS5sZW5ndGg8YylyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOmMsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjtpLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBsPW5ldyBBcnJheShuLmxlbmd0aCkscD10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGc9ITE7Zm9yKGxldCBiPTA7YjxuLmxlbmd0aDtiKyspe2NvbnN0IHk9bltiXS5fem9kLnJ1bih7dmFsdWU6aVtiXSxpc3N1ZXM6W119LHMpO3kgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh5LnRoZW4oaz0+e2xbYl09a30pKToobFtiXT15LHAmJiFnJiZ5Lmlzc3Vlcy5sZW5ndGgmJihnPXJlKHkpKSl9aWYodC5yZXN0JiYhZyl7bGV0IGI9bi5sZW5ndGgtMTtjb25zdCB5PWkuc2xpY2Uobi5sZW5ndGgpO2xldCBrPXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiB5KXtpZihwJiZyLmlzc3Vlcy5sZW5ndGghPT1rKXtpZihyZShyLGspKWJyZWFrO2s9ci5pc3N1ZXMubGVuZ3RofWIrKztjb25zdCBqPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO2ogaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChqLnRoZW4oUj0+eGMoUixyLGIpKSk6eGMoaixyLGIpfX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+RWMobCxyLG4saSx1KSk6RWMobCxyLG4saSx1KX19KTtmdW5jdGlvbiBJYyhlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIHhjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZGUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBFYyhlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBpPWVbc10sYT1zPG8ubGVuZ3RoO2lmKCFhJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGkuaXNzdWVzLmxlbmd0aCl7aWYoIWEmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi5kZShzLGkuaXNzdWVzKSl9dC52YWx1ZVtzXT1pLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IHFkPWQoIiRab2RSZWNvcmQiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFDZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXSxhPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihhJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgYz1uZXcgU2V0O2Zvcihjb25zdCBsIG9mIGEpaWYodHlwZW9mIGw9PSJzdHJpbmcifHx0eXBlb2YgbD09Im51bWJlciJ8fHR5cGVvZiBsPT0ic3ltYm9sIil7aWYoYy5hZGQodHlwZW9mIGw9PSJudW1iZXIiP2wudG9TdHJpbmcoKTpsKSxsPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgcD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihwIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihwLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOnAuaXNzdWVzLm1hcCh5PT5oZSh5LHIsSigpKSksaW5wdXQ6bCxwYXRoOltsXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPXAudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbbF0saXNzdWVzOltdfSxyKTtiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goYi50aGVuKHk9Pnt5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uZGUobCx5Lmlzc3VlcykpLG8udmFsdWVbZ109eS52YWx1ZX0pKTooYi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKGwsYi5pc3N1ZXMpKSxvLnZhbHVlW2ddPWIudmFsdWUpfWxldCB1O2Zvcihjb25zdCBsIGluIHMpaWYoIWMuaGFzKGwpKWlmKHQubW9kZT09PSJsb29zZSIpe2lmKGw9PT0iX19wcm90b19fIiljb250aW51ZTtvLnZhbHVlW2xdPXNbbF19ZWxzZSB1PXU/P1tdLHUucHVzaChsKTt1JiZ1Lmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czp1LGNvbnRpbnVlOiEwfSl9ZWxzZXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307bGV0IGM7Zm9yKGNvbnN0IHUgb2YgUmVmbGVjdC5vd25LZXlzKHMpKXtpZih1PT09Il9fcHJvdG9fXyJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocyx1KSljb250aW51ZTtsZXQgbD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZih0eXBlb2YgdT09InN0cmluZyImJnlvLnRlc3QodSkmJmwuaXNzdWVzLmxlbmd0aCl7Y29uc3QgeT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOk51bWJlcih1KSxpc3N1ZXM6W119LHIpO2lmKHkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO3kuaXNzdWVzLmxlbmd0aD09PTAmJihsPXkpfWlmKGwuaXNzdWVzLmxlbmd0aCl7dC5tb2RlPT09Imxvb3NlIj9vLnZhbHVlW3VdPXNbdV06YT8oYz1jPz9bXSxjLnB1c2godSkpOm8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmwuaXNzdWVzLm1hcCh5PT5oZSh5LHIsSigpKSksaW5wdXQ6dSxwYXRoOlt1XSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPWwudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbdV0saXNzdWVzOltdfSxyKTtiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goYi50aGVuKHk9Pnt5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uZGUodSx5Lmlzc3VlcykpLG8udmFsdWVbZ109eS52YWx1ZX0pKTooYi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKHUsYi5pc3N1ZXMpKSxvLnZhbHVlW2ddPWIudmFsdWUpfWMmJmMubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOmMsY29udGludWU6ITB9KX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KSxMZD1kKCIkWm9kTWFwIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBNYXApKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibWFwIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgTWFwLHIpOm5ldyBNYXA7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3RbdSxsXW9mIHMpe2lmKGEmJm8uaXNzdWVzLmxlbmd0aCE9PWMpe2lmKHJlKG8sYykpYnJlYWs7Yz1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgcD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKSxnPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7cCBpbnN0YW5jZW9mIFByb21pc2V8fGcgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChQcm9taXNlLmFsbChbcCxnXSkudGhlbigoW2IseV0pPT57UmMoYix5LG8sdSxzLGUscil9KSk6UmMocCxnLG8sdSxzLGUscil9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gUmMoZSx0LG4sbyxyLHMsaSl7ZS5pc3N1ZXMubGVuZ3RoJiYoWW4uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLmRlKG8sZS5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJtYXAiLGlucHV0OnIsaW5zdDpzLGlzc3VlczplLmlzc3Vlcy5tYXAoYT0+aGUoYSxpLEooKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFluLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5kZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChhPT5oZShhLGksSigpKSl9KSksbi52YWx1ZS5zZXQoZS52YWx1ZSx0LnZhbHVlKX1jb25zdCBVZD1kKCIkWm9kU2V0IiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtpbnB1dDpzLGluc3Q6ZSxleHBlY3RlZDoic2V0Iixjb2RlOiJpbnZhbGlkX3R5cGUifSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgU2V0LHIpOm5ldyBTZXQ7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgdSBvZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihyZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGw9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtsIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2gobC50aGVuKHA9PkNjKHAsbykpKTpDYyhsLG8pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIENjKGUsdCl7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmUuaXNzdWVzKSx0LnZhbHVlLmFkZChlLnZhbHVlKX1jb25zdCBIZD1kKCIkWm9kRW51bSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPU5yKHQuZW50cmllcyksbz1uZXcgU2V0KG4pO2UuX3pvZC52YWx1ZXM9byx4KGUsInBhdHRlcm4iLHI9Pntjb25zdCBzPU5yKHIuZGVmLmVudHJpZXMpLmZpbHRlcihpPT5Zbi5oYXModHlwZW9mIGkpKTtyZXR1cm4gbmV3IFJlZ0V4cChzLmxlbmd0aD9gXigke3MubWFwKGk9PiRlKGkudG9TdHJpbmcoKSkpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7cmV0dXJuIG8uaGFzKGkpfHxyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6bixpbnB1dDppLGluc3Q6ZX0pLHJ9fSksRmQ9ZCgiJFpvZExpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQudmFsdWVzKTtlLl96b2QudmFsdWVzPW4seChlLCJwYXR0ZXJuIixvPT57Y29uc3Qgcj1vLmRlZi52YWx1ZXM7cmV0dXJuIG5ldyBSZWdFeHAoci5sZW5ndGg/YF4oJHtyLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/JGUocyk6cz8kZShzLnRvU3RyaW5nKCkpOlN0cmluZyhzKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtyZXR1cm4gbi5oYXMocyl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0LnZhbHVlcyxpbnB1dDpzLGluc3Q6ZX0pLG99fSksQmQ9ZCgiJFpvZEZpbGUiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiByIGluc3RhbmNlb2YgRmlsZXx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImZpbGUiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLFZkPWQoIiRab2RUcmFuc2Zvcm0iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJvcHRpb25hbCIsbmUubWVtb2l6ZXI/Lmd1YXJkKGUpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgaG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7aWYoby5hc3luYylyZXR1cm4ociBpbnN0YW5jZW9mIFByb21pc2U/cjpQcm9taXNlLnJlc29sdmUocikpLnRoZW4oaT0+KG4udmFsdWU9aSxuKSk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO3JldHVybiBuLnZhbHVlPXIsbn19KTtmdW5jdGlvbiBaYyhlLHQpe3JldHVybiBlLnZhbHVlPXQuaXNzdWVzLmxlbmd0aD92b2lkIDA6dC52YWx1ZSxlfWNvbnN0IE9zPWQoIiRab2RPcHRpb25hbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLGUuX3pvZC5vcHRvdXQ9Im9wdGlvbmFsIix4KGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm8sdm9pZCAwXSk6dm9pZCAwfSkseChlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtFZShvLnNvdXJjZSl9KT8kYCk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYobi52YWx1ZT09PXZvaWQgMCl7aWYodC5pbm5lclR5cGUuX3pvZC5vcHRpbiE9PSJkZWZhdWx0ZWQiKXJldHVybiBuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PlpjKG4scykpOlpjKG4scil9cmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9fSksSmQ9ZCgiJFpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57T3MuaW5pdChlLHQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLHgoZSwicGF0dGVybiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybiksZS5fem9kLnBhcnNlPShuLG8pPT50LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksS2Q9ZCgiJFpvZE51bGxhYmxlIiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSx4KGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke0VlKG8uc291cmNlKX18bnVsbCkkYCk6dm9pZCAwfSkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcz9uZXcgU2V0KFsuLi5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsbnVsbF0pOnZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5uLnZhbHVlPT09bnVsbD9uOnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxXZD1kKCIkWm9kRGVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2lmKG4udmFsdWU9PT12b2lkIDApcmV0dXJuIG4udmFsdWU9dC5kZWZhdWx0VmFsdWUsbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5PYyhzLHQpKTpPYyhyLHQpfX0pO2Z1bmN0aW9uIE9jKGUsdCl7cmV0dXJuIGUudmFsdWU9PT12b2lkIDAmJihlLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSxlfWNvbnN0IEdkPWQoIiRab2RQcmVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT4oby5kaXJlY3Rpb249PT0iYmFja3dhcmQifHxuLnZhbHVlPT09dm9pZCAwJiYobi52YWx1ZT10LmRlZmF1bHRWYWx1ZSksdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKSl9KSxZZD1kKCIkWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vXS5maWx0ZXIocj0+ciE9PXZvaWQgMCkpOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkFjKHMsZSkpOkFjKHIsZSl9fSk7ZnVuY3Rpb24gQWMoZSx0KXtyZXR1cm4hZS5pc3N1ZXMubGVuZ3RoJiZlLnZhbHVlPT09dm9pZCAwJiZlLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6ZS52YWx1ZSxpbnN0OnR9KSxlfWNvbnN0IFFkPWQoIiRab2RTdWNjZXNzIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgaG8oIlpvZFN1Y2Nlc3MiKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLmlzc3Vlcy5sZW5ndGg9PT0wLG4pKToobi52YWx1ZT1yLmlzc3Vlcy5sZW5ndGg9PT0wLG4pfX0pO2Z1bmN0aW9uIE5jKGUsdCxuLG8pe3JldHVybiB0Lmlzc3Vlcy5sZW5ndGg/KGUudmFsdWU9bi5jYXRjaFZhbHVlKHsuLi50LHZhbHVlOmUudmFsdWUsZXJyb3I6e2lzc3Vlczp0Lmlzc3Vlcy5tYXAocj0+aGUocixvLEooKSkpfSxpbnB1dDplLnZhbHVlfSksZSk6KGUudmFsdWU9dC52YWx1ZSx0Lm1lbW8mJihlLm1lbW89ITApLGUpfWNvbnN0IFhkPWQoIiRab2RDYXRjaCIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLHgoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5OYyhuLHMsdCxvKSk6TmMobixyLHQsbyl9fSksZXA9ZCgiJFpvZE5hTiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PigodHlwZW9mIG4udmFsdWUhPSJudW1iZXIifHwhTnVtYmVyLmlzTmFOKG4udmFsdWUpKSYmbi5pc3N1ZXMucHVzaCh7aW5wdXQ6bi52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6Im5hbiIsY29kZToiaW52YWxpZF90eXBlIn0pLG4pfSksQXM9ZCgiJFpvZFBpcGUiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSx4KGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5MbihpLHQuaW4sbykpOkxuKHMsdC5pbixvKX1jb25zdCByPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkxuKHMsdC5vdXQsbykpOkxuKHIsdC5vdXQsbyl9fSk7ZnVuY3Rpb24gTG4oZSx0LG4pe3JldHVybiBlLmlzc3Vlcy5zb21lKG89Pm8uY29kZSE9PSJ1bnJlY29nbml6ZWRfa2V5cyIpPyhlLmFib3J0ZWQ9ITAsZSk6dC5fem9kLnJ1bih7dmFsdWU6ZS52YWx1ZSxpc3N1ZXM6ZS5pc3N1ZXN9LG4pfWNvbnN0IE5zPWQoIiRab2RDb2RlYyIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLHgoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZigoby5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHM9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+VW4oaSx0LG8pKTpVbihzLHQsbyl9ZWxzZXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5VbihpLHQsbykpOlVuKHMsdCxvKX19fSk7ZnVuY3Rpb24gVW4oZSx0LG4pe2lmKGUuaXNzdWVzLmxlbmd0aClyZXR1cm4gZS5hYm9ydGVkPSEwLGU7aWYoKG4uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCByPXQudHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5IbihlLHMsdC5vdXQsbikpOkhuKGUscix0Lm91dCxuKX1lbHNle2NvbnN0IHI9dC5yZXZlcnNlVHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5IbihlLHMsdC5pbixuKSk6SG4oZSxyLHQuaW4sbil9fWZ1bmN0aW9uIEhuKGUsdCxuLG8pe3JldHVybiBlLmlzc3Vlcy5sZW5ndGg/KGUuYWJvcnRlZD0hMCxlKTpuLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczplLmlzc3Vlc30sbyl9Y29uc3QgdHA9ZCgiJFpvZFByZXByb2Nlc3MiLChlLHQpPT57QXMuaW5pdChlLHQpfSksbnA9ZCgiJFpvZFJlYWRvbmx5IiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcykseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbikseChlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4oamMpOmpjKHIpfX0pO2Z1bmN0aW9uIGpjKGUpe3JldHVybiBlLm1lbW98fChlLnZhbHVlPU9iamVjdC5mcmVlemUoZS52YWx1ZSkpLGV9ZnVuY3Rpb24gYm0oZSl7Y29uc3QgdD1lLl96b2QuZGVmO2xldCBuPXQucGF0dGVybixvPSEhdC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxyLHM7Zm9yKGNvbnN0IGEgb2YgdC5jaGVja3M/P1tdKXtjb25zdCBjPWEuX3pvZC5kZWY7Yy5wYXR0ZXJuJiYobj1jLnBhdHRlcm4pLG98fChvPSEhYy5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSk7Y29uc3QgdT1jLm1pbmltdW0/P2MubGVuZ3RoLGw9Yy5tYXhpbXVtPz9jLmxlbmd0aDt1IT09dm9pZCAwJiYocj09PXZvaWQgMHx8dT5yKSYmKHI9dSksbCE9PXZvaWQgMCYmKHM9PT12b2lkIDB8fGw8cykmJihzPWwpfWlmKG4pcmV0dXJuIG4uc291cmNlO2lmKHIhPT12b2lkIDAmJnMhPT12b2lkIDAmJnI+cylyZXR1cm4iKD8hKSI7aWYociE9PXZvaWQgMHx8cyE9PXZvaWQgMClyZXR1cm4gYWwoe21pbmltdW06cixtYXhpbXVtOnN9KS5zb3VyY2U7Y29uc3QgaT1lLl96b2QucGF0dGVybjtyZXR1cm4obyYmaT09PXlvP3VsOmkpPy5zb3VyY2V9ZnVuY3Rpb24gRnIoZSl7Y29uc3QgdD1lLl96b2QuZGVmLG49ZS5fem9kLnBhdHRlcm4/LnNvdXJjZSxvPXQuaW5uZXJUeXBlPz9lLl96b2QuaW5uZXJUeXBlO2lmKG8pe2NvbnN0IHI9by5fem9kLnBhdHRlcm4/LnNvdXJjZSxzPUZyKG8pO3JldHVybiBuJiZyJiZzJiZzIT09cj9uLnJlcGxhY2UoRWUociksKCk9PkVlKHMpKTpufWlmKHQub3B0aW9ucyl7Y29uc3Qgcj10Lm9wdGlvbnMubWFwKEZyKTtpZihyLmV2ZXJ5KEJvb2xlYW4pKXJldHVybmBeKCR7ci5tYXAocz0+RWUocykpLmpvaW4oInwiKX0pJGB9cmV0dXJuIGJtKGUpfWNvbnN0IG9wPWQoIiRab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0LnBhcnRzKWlmKHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwpe2NvbnN0IHI9RnIobyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydCwgbm8gcGF0dGVybiBmb3VuZDogJHtbLi4uby5fem9kLnRyYWl0c10uc2hpZnQoKX1gKTtuLnB1c2goRWUocikpfWVsc2UgaWYobz09PW51bGx8fHB1Lmhhcyh0eXBlb2Ygbykpbi5wdXNoKCRlKGAke299YCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtvfWApO2UuX3pvZC5wYXR0ZXJuPW5ldyBSZWdFeHAoYF4ke24uam9pbigiIil9JGApLGUuX3pvZC5wYXJzZT0obyxyKT0+dHlwZW9mIG8udmFsdWUhPSJzdHJpbmciPyhvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbyk6KGUuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleD0wLGUuX3pvZC5wYXR0ZXJuLnRlc3Qoby52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQ/PyJ0ZW1wbGF0ZV9saXRlcmFsIixwYXR0ZXJuOmUuX3pvZC5wYXR0ZXJuLnNvdXJjZX0pLG8pfSkscnA9ZCgiJFpvZEZ1bmN0aW9uIiwoZSx0KT0+KHouaW5pdChlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfZGVmIix7dmFsdWU6dH0pLGUuX3pvZC5kZWY9dCxlLmltcGxlbWVudD1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P3FyKGUuX2RlZi5pbnB1dCxvKTpvLHM9UmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/cXIoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuaW1wbGVtZW50QXN5bmM9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jIGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P2F3YWl0IExyKGUuX2RlZi5pbnB1dCxvKTpvLHM9YXdhaXQgUmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/YXdhaXQgTHIoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuX3pvZC5wYXJzZT0obixvKT0+dHlwZW9mIG4udmFsdWUhPSJmdW5jdGlvbiI/KG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ImZ1bmN0aW9uIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pOihlLl9kZWYub3V0cHV0JiZlLl9kZWYub3V0cHV0Ll96b2QuZGVmLnR5cGU9PT0icHJvbWlzZSI/bi52YWx1ZT1lLmltcGxlbWVudEFzeW5jKG4udmFsdWUpOm4udmFsdWU9ZS5pbXBsZW1lbnQobi52YWx1ZSksbiksZS5pbnB1dD0oLi4ubik9Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIEFycmF5LmlzQXJyYXkoblswXSk/bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuZXcgWnMoe3R5cGU6InR1cGxlIixpdGVtczpuWzBdLHJlc3Q6blsxXX0pLG91dHB1dDplLl9kZWYub3V0cHV0fSk6bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuWzBdLG91dHB1dDplLl9kZWYub3V0cHV0fSl9LGUub3V0cHV0PW49Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6ZS5fZGVmLmlucHV0LG91dHB1dDpufSl9LGUpKSxzcD1kKCIkWm9kUHJvbWlzZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PlByb21pc2UucmVzb2x2ZShuLnZhbHVlKS50aGVuKHI9PnQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbykpfSksanM9ZCgiJFpvZExhenkiLChlLHQpPT57ei5pbml0KGUsdCksaXUoZS5fem9kLCJpbm5lclR5cGUiLCgpPT57Y29uc3Qgbj10O3JldHVybiBuLl9jYWNoZWRJbm5lcnx8KG4uX2NhY2hlZElubmVyPXQuZ2V0dGVyKCkpLG4uX2NhY2hlZElubmVyfSkseChlLCJwYXR0ZXJuIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucGF0dGVybikseChlLCJwcm9wVmFsdWVzIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucHJvcFZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluPz92b2lkIDApLHgoZSwib3B0b3V0IixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0Pz92b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+ZS5fem9kLmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksaXA9ZCgiJFpvZEN1c3RvbSIsKGUsdCk9PntVLmluaXQoZSx0KSx6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pm4sZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPW4udmFsdWUscj10LmZuKG8pO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiByLnRoZW4ocz0+TWMocyxuLG8sZSkpO01jKHIsbixvLGUpfX0pO2Z1bmN0aW9uIE1jKGUsdCxuLG8pe2lmKCFlKXtjb25zdCByPXtjb2RlOiJjdXN0b20iLGlucHV0Om4saW5zdDpvLHBhdGg6Wy4uLm8uX3pvZC5kZWYucGF0aD8/W11dLGNvbnRpbnVlOiFvLl96b2QuZGVmLmFib3J0fTtvLl96b2QuZGVmLnBhcmFtcyYmKHIucGFyYW1zPW8uX3pvZC5kZWYucGFyYW1zKSx0Lmlzc3Vlcy5wdXNoKFhlKHIpKX19Y2xhc3MgYXAgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW5ub3QgcGFyc2UgYSByZWZlcmVuY2UgY3ljbGUgdGhhdCBjbG9zZXMgdGhyb3VnaCBhIHRyYW5zZm9ybSIpLHRoaXMubmFtZT0iWm9kQ3ljbGljRXJyb3IifX1jb25zdCBCcj0ifm1lbW8iLERjPVtdO2Z1bmN0aW9uIGNwKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIFpyKGUpe3JldHVybiBlLm1hcCh0PT50LnBhdGg/ey4uLnQscGF0aDp0LnBhdGguc2xpY2UoKX06ey4uLnR9KX1jb25zdCB1cD1uZXcgV2Vha01hcCxHZT0wLEtuPTEsUHQ9MjtmdW5jdGlvbiBJdChlLHQsbil7Y29uc3Qgbz11cC5nZXQoZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gbz9QdDpHZTtpZih0LmhhcyhlKSlyZXR1cm4gUHQ7dC5hZGQoZSk7bGV0IHI9R2U7Y29uc3Qgcz1sPT57aWYociE9PVB0JiZsPy5fem9kKXtjb25zdCBwPUl0KGwsdCxuKTtwPnImJihyPXApfX0saT0obCxwKT0+e2xldCBnPUdlO2Zvcihjb25zdCBiIG9mIFJlZmxlY3Qub3duS2V5cyhsKSl7Y29uc3QgeT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsYik7aWYoIXkuZW51bWVyYWJsZSljb250aW51ZTtjb25zdCBrPXkuZ2V0P0tuOnkudmFsdWU/Ll96b2Q/SXQoeS52YWx1ZSx0LG4pOkdlO2s+ZyYmKGc9ayl9cmV0dXJuIGd9LGE9bD0+e2w+ciYmKHI9bCl9LGM9ZS5fem9kLmRlZjtzd2l0Y2goYy50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9aW8oYyk7YShsP2kobCk6S24pLHMoYy5jYXRjaGFsbCk7YnJlYWt9Y2FzZSJhcnJheSI6cyhjLmVsZW1lbnQpO2JyZWFrO2Nhc2UidHVwbGUiOmZvcihjb25zdCBsIG9mIGMuaXRlbXMpcyhsKTtzKGMucmVzdCk7YnJlYWs7Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjpzKGMua2V5VHlwZSkscyhjLnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJzZXQiOnMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2UidW5pb24iOmZvcihjb25zdCBsIG9mIGMub3B0aW9ucylzKGwpO2JyZWFrO2Nhc2UiaW50ZXJzZWN0aW9uIjpzKGMubGVmdCkscyhjLnJpZ2h0KTticmVhaztjYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjpzKGMuaW5uZXJUeXBlKTticmVhaztjYXNlInBpcGUiOnMoYy5pbikscyhjLm91dCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cyhjLmlucHV0KSxzKGMub3V0cHV0KTticmVhaztjYXNlImxhenkiOntjb25zdCBsPWMuX2NhY2hlZElubmVyPz8obj9lLl96b2QuaW5uZXJUeXBlOnZvaWQgMCk7YShsP0l0KGwsdCwhMSk6S24pO2JyZWFrfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpicmVhaztkZWZhdWx0OmZvcihjb25zdCBsIGluIGMpe2NvbnN0IHA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGwpO2lmKCFwfHxwLmdldCljb250aW51ZTtjb25zdCBnPXAudmFsdWU7aWYoISghZ3x8dHlwZW9mIGchPSJvYmplY3QiKSl7aWYoZy5fem9kKXMoZyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGcpKWZvcihjb25zdCBiIG9mIGcpcyhiKX19fXJldHVybiB0LmRlbGV0ZShlKSxfbShlLHIpfWZ1bmN0aW9uIF9tKGUsdCl7cmV0dXJuIHQhPT1LbiYmdXAuc2V0KGUsdD09PVB0KSx0fWZ1bmN0aW9uIHltKGUpe3JldHVybiBJdChlLG5ldyBTZXQsITApIT09R2V9ZnVuY3Rpb24gd20oZSx0KXtsZXQgbj1lLmJ1Y2tldHMuZ2V0KHQpO3JldHVybiBufHwobj1uZXcgV2Vha01hcCxlLmJ1Y2tldHMuc2V0KHQsbikpLG59bGV0IEZuO2NvbnN0IEJuPVtdLGttPXthbGxvYyhlLHQsbil7Y29uc3Qgbz1GbjtpZighbylyZXR1cm4gbjtGbj12b2lkIDA7Y29uc3Qgcj17dmFsdWU6bixpc3N1ZXM6bnVsbH07cmV0dXJuIG8uc2V0KHQudmFsdWUsciksQm4ucHVzaChyKSxufSxndWFyZChlKXt2YXIgdDsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBuPWUuX3pvZC5wYXJzZSxvPShyLHMpPT57aWYocy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiJiZscChzLHIudmFsdWUpKXRocm93IG5ldyBhcDtyZXR1cm4gbihyLHMpfTtlLl96b2QucGFyc2U9byxlLl96b2QucnVuPT09biYmKGUuX3pvZC5ydW49byl9KX0sYXR0YWNoKGUpe3ZhciB0O2xldCBuLG89ITEscixzOyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IGk9ZS5fem9kLnBhcnNlLGE9KGMsdSk9PntpZihuPT09dm9pZCAwKXtjb25zdCBqPUl0KGUsbmV3IFNldCwhMSk7aWYoaj09PUdlKXJldHVybiBlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSksaShjLHUpO2o9PT1QdHx8bz9uPSEwOm89ITB9Y29uc3QgbD1jLnZhbHVlO2lmKCFjcChsKSlyZXR1cm4gaShjLHUpO2xldCBwPXVbQnJdO3B8fChwPXtidWNrZXRzOm5ldyBXZWFrTWFwLGJhY2tFZGdlczp2b2lkIDB9LHVbQnJdPXApO2xldCBnO3I9PT11P2c9czooZz13bShwLGUpLHI9dSxzPWcpO2NvbnN0IGI9Zy5nZXQobCk7aWYoYilyZXR1cm4gYy52YWx1ZT1iLnZhbHVlLGIuaXNzdWVzP2IuaXNzdWVzLmxlbmd0aCYmYy5pc3N1ZXMucHVzaCguLi5acihiLmlzc3VlcykpOihjLm1lbW89ITAscC5iYWNrRWRnZXM/PyhwLmJhY2tFZGdlcz1uZXcgV2Vha1NldCkscC5iYWNrRWRnZXMuYWRkKGIudmFsdWUpKSxjO0ZuPWc7Y29uc3QgeT1Cbi5sZW5ndGgsaz1pKGMsdSk7Rm49dm9pZCAwO2NvbnN0ICQ9Qm4ubGVuZ3RoPnk/Qm4ucG9wKCk6dm9pZCAwO3JldHVybiBrIGluc3RhbmNlb2YgUHJvbWlzZT9rLnRoZW4oaj0+KCQmJigkLmlzc3Vlcz1qLmlzc3Vlcy5sZW5ndGg/WnIoai5pc3N1ZXMpOkRjKSxqKSk6KCQmJigkLmlzc3Vlcz1rLmlzc3Vlcy5sZW5ndGg/WnIoay5pc3N1ZXMpOkRjKSxrKX07ZS5fem9kLnBhcnNlPWEsZS5fem9kLnJ1bj09PWkmJihlLl96b2QucnVuPWEpfSl9fTtmdW5jdGlvbiBTbygpe3JldHVybiBrbX1mdW5jdGlvbiBscChlLHQpe2NvbnN0IG49ZVtCcl0/LmJhY2tFZGdlcztyZXR1cm4gbiE9PXZvaWQgMCYmY3AodCkmJm4uaGFzKHQpfWNvbnN0IFNtPSgpPT57Y29uc3QgZT17c3RyaW5nOnt1bml0OiJjaGFyYWN0ZXJzIix2ZXJiOiJ0byBoYXZlIn0sZmlsZTp7dW5pdDoiYnl0ZXMiLHZlcmI6InRvIGhhdmUifSxhcnJheTp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxzZXQ6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sbWFwOnt1bml0OiJlbnRyaWVzIix2ZXJiOiJ0byBoYXZlIn19O2Z1bmN0aW9uIHQocyl7cmV0dXJuIGVbc10/P251bGx9Y29uc3Qgbj17cmVnZXg6ImlucHV0IixlbWFpbDoiZW1haWwgYWRkcmVzcyIsdXJsOiJVUkwiLGVtb2ppOiJlbW9qaSIsdXVpZDoiVVVJRCIsdXVpZHY0OiJVVUlEdjQiLHV1aWR2NjoiVVVJRHY2IixuYW5vaWQ6Im5hbm9pZCIsZ3VpZDoiR1VJRCIsY3VpZDoiY3VpZCIsY3VpZDI6ImN1aWQyIix1bGlkOiJVTElEIix4aWQ6IlhJRCIsa3N1aWQ6IktTVUlEIixkYXRldGltZToiSVNPIGRhdGV0aW1lIixkYXRlOiJJU08gZGF0ZSIsdGltZToiSVNPIHRpbWUiLGR1cmF0aW9uOiJJU08gZHVyYXRpb24iLGlwdjQ6IklQdjQgYWRkcmVzcyIsaXB2NjoiSVB2NiBhZGRyZXNzIixtYWM6Ik1BQyBhZGRyZXNzIixjaWRydjQ6IklQdjQgcmFuZ2UiLGNpZHJ2NjoiSVB2NiByYW5nZSIsYmFzZTY0OiJiYXNlNjQtZW5jb2RlZCBzdHJpbmciLGJhc2U2NHVybDoiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nIixqc29uX3N0cmluZzoiSlNPTiBzdHJpbmciLGUxNjQ6IkUuMTY0IG51bWJlciIsY3VycmVuY3lfY29kZToiY3VycmVuY3kgY29kZSIsY3JlZGl0X2NhcmQ6ImNyZWRpdCBjYXJkIG51bWJlciIsaWJhbjoiSUJBTiIsand0OiJKV1QiLHRlbXBsYXRlX2xpdGVyYWw6ImlucHV0In0sbz17bmFuOiJOYU4ifTtmdW5jdGlvbiByKHMsaSl7cmV0dXJuIHM9PT0ibnVtYmVyIiYmdHlwZW9mIGk9PSJudW1iZXIiJiYhTnVtYmVyLmlzRmluaXRlKGkpP1N0cmluZyhpKTpvW3NdPz9zfXJldHVybiBzPT57c3dpdGNoKHMuY29kZSl7Y2FzZSJpbnZhbGlkX3R5cGUiOntjb25zdCBpPXIocy5leHBlY3RlZCksYT0kdShzLmlucHV0KSxjPXIoYSxzLmlucHV0KTtyZXR1cm5gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtpfSwgcmVjZWl2ZWQgJHtjfWB9Y2FzZSJpbnZhbGlkX3ZhbHVlIjpyZXR1cm4gcy52YWx1ZXMubGVuZ3RoPT09MT9gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHt0cyhzLnZhbHVlc1swXSl9YDpgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke2pyKHMudmFsdWVzLCJ8Iil9YDtjYXNlInRvb19iaWciOntjb25zdCBpPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPD0iOiI8IixhPXQocy5vcmlnaW4pO3JldHVybiBhP2BUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBoYXZlICR7aX0ke3MubWF4aW11bS50b1N0cmluZygpfSAke2EudW5pdD8/ImVsZW1lbnRzIn1gOmBUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBiZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX1gfWNhc2UidG9vX3NtYWxsIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ij49IjoiPiIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBoYXZlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfSAke2EudW5pdH1gOmBUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGJlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfWB9Y2FzZSJpbnZhbGlkX2Zvcm1hdCI6e2NvbnN0IGk9cztyZXR1cm4gaS5mb3JtYXQ9PT0ic3RhcnRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBzdGFydCB3aXRoICIke2kucHJlZml4fSJgOmkuZm9ybWF0PT09ImVuZHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGVuZCB3aXRoICIke2kuc3VmZml4fSJgOmkuZm9ybWF0PT09ImluY2x1ZGVzIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgaW5jbHVkZSAiJHtpLmluY2x1ZGVzfSJgOmkuZm9ybWF0PT09InJlZ2V4Ij9gSW52YWxpZCBzdHJpbmc6IG11c3QgbWF0Y2ggcGF0dGVybiAke2kucGF0dGVybn1gOmBJbnZhbGlkICR7bltpLmZvcm1hdF0/P3MuZm9ybWF0fWB9Y2FzZSJub3RfbXVsdGlwbGVfb2YiOnJldHVybmBJbnZhbGlkIG51bWJlcjogbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7cy5kaXZpc29yfWA7Y2FzZSJ1bnJlY29nbml6ZWRfa2V5cyI6cmV0dXJuYFVucmVjb2duaXplZCBrZXkke3Mua2V5cy5sZW5ndGg+MT8icyI6IiJ9OiAke2pyKHMua2V5cywiLCAiKX1gO2Nhc2UiaW52YWxpZF9rZXkiOnJldHVybmBJbnZhbGlkIGtleSBpbiAke3Mub3JpZ2lufWA7Y2FzZSJpbnZhbGlkX3VuaW9uIjpyZXR1cm4gcy5vcHRpb25zJiZBcnJheS5pc0FycmF5KHMub3B0aW9ucykmJnMub3B0aW9ucy5sZW5ndGg+MD9gSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3Mub3B0aW9ucy5tYXAoYT0+YCcke2F9J2ApLmpvaW4oIiB8ICIpfWA6cy5pbmNsdXNpdmU9PT0hMT8iSW52YWxpZCBpbnB1dDogbW9yZSB0aGFuIG9uZSBvcHRpb24gbWF0Y2hlZCI6IkludmFsaWQgaW5wdXQiO2Nhc2UiaW52YWxpZF9lbGVtZW50IjpyZXR1cm5gSW52YWxpZCB2YWx1ZSBpbiAke3Mub3JpZ2lufWA7ZGVmYXVsdDpyZXR1cm4iSW52YWxpZCBpbnB1dCJ9fX07ZnVuY3Rpb24gZHAoKXtyZXR1cm57bG9jYWxlRXJyb3I6U20oKX19Y29uc3QgTXM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuOmRwfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBxYztjb25zdCBEcz1TeW1ib2woIlpvZE91dHB1dCIpLHFzPVN5bWJvbCgiWm9kSW5wdXQiKTtjbGFzcyBwcHtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwfWFkZCh0LC4uLm4pe2NvbnN0IG89blswXTtyZXR1cm4gdGhpcy5fbWFwLnNldCh0LG8pLG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmImlkImluIG8mJnRoaXMuX2lkbWFwLnNldChvLmlkLHQpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXAsdGhpc31yZW1vdmUodCl7Y29uc3Qgbj10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBuJiZ0eXBlb2Ygbj09Im9iamVjdCImJiJpZCJpbiBuJiZ0aGlzLl9pZG1hcC5kZWxldGUobi5pZCksdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzfWdldCh0KXtjb25zdCBuPXQuX3pvZC5wYXJlbnQ7aWYobil7Y29uc3Qgbz17Li4udGhpcy5nZXQobik/P3t9fTtkZWxldGUgby5pZDtjb25zdCByPXsuLi5vLC4uLnRoaXMuX21hcC5nZXQodCl9O3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg/cjp2b2lkIDB9cmV0dXJuIHRoaXMuX21hcC5nZXQodCl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfX1mdW5jdGlvbiAkbygpe3JldHVybiBuZXcgcHB9KHFjPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbFJlZ2lzdHJ5Pz8ocWMuX196b2RfZ2xvYmFsUmVnaXN0cnk9JG8oKSk7Y29uc3QgcGU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxSZWdpc3RyeSxMcz0oKT0+e3Rocm93IG5ldyBFcnJvcigiem9kIGNvbXBpbGUoKSBpcyBub3QgYnVuZGxlZCBpbnRvIGNhcmRzIC0gc2VlIHBhY2thZ2VzL2ludGVybmFsL2NhcmQta2l0L3ZpdGUtc2xpbS5tanMiKX07Y2xhc3MgVXMgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgSHMgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgRnMgZXh0ZW5kcyBFcnJvcnt9Y29uc3QgQnM9THMsVnM9THMsJG09THM7ZnVuY3Rpb24gem8oZSl7cmV0dXJuIGUuY2hlY2tzJiYoZS5jaGVja3M9Wy4uLmUuY2hlY2tzXSksZX1mdW5jdGlvbiBmcChlLHQpe3JldHVybiBuZXcgZSh6byh7dHlwZToic3RyaW5nIiwuLi5fKHQpfSkpfWZ1bmN0aW9uIGhwKGUsdCl7cmV0dXJuIG5ldyBlKHpvKHt0eXBlOiJzdHJpbmciLGNvZXJjZTohMCwuLi5fKHQpfSkpfWZ1bmN0aW9uIEpzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1haWwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gS3MoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJndWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFdzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBHcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFlzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY2IiwuLi5fKHQpfSl9ZnVuY3Rpb24gUXMoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjciLC4uLl8odCl9KX1mdW5jdGlvbiBUbyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBYcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtb2ppIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibmFub2lkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBuaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQyIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIG9pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidWxpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiByaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InhpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBzaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImtzdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGlpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBhaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJtYWMiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gY2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gZGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjR1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gcGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlMTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3JlZGl0X2NhcmQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gdnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpYmFuIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiand0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWNvbnN0IGhpPXtBbnk6bnVsbCxNaW51dGU6LTEsU2Vjb25kOjAsTWlsbGlzZWNvbmQ6MyxNaWNyb3NlY29uZDo2fTtmdW5jdGlvbiBtaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGV0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsb2Zmc2V0OiExLGxvY2FsOiExLHByZWNpc2lvbjpudWxsLC4uLl8odCl9KX1mdW5jdGlvbiBnaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gdmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIscHJlY2lzaW9uOm51bGwsLi4uXyh0KX0pfWZ1bmN0aW9uIGJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZHVyYXRpb24iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gYnAoZSx0KXtyZXR1cm4gbmV3IGUoem8oe3R5cGU6Im51bWJlciIsY2hlY2tzOltdLC4uLl8odCl9KSl9ZnVuY3Rpb24gX3AoZSx0KXtyZXR1cm4gbmV3IGUoem8oe3R5cGU6Im51bWJlciIsY29lcmNlOiEwLGNoZWNrczpbXSwuLi5fKHQpfSkpfWZ1bmN0aW9uIHlwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InNhZmVpbnQiLC4uLl8odCl9KX1mdW5jdGlvbiB3cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFNwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24gJHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24genAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLC4uLl8odCl9KX1mdW5jdGlvbiBUcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiBQcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IiwuLi5fKHQpfSl9ZnVuY3Rpb24gSXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiB4cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIEVwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzeW1ib2wiLC4uLl8odCl9KX1mdW5jdGlvbiBDcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidW5kZWZpbmVkIiwuLi5fKHQpfSl9ZnVuY3Rpb24gWnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGwiLC4uLl8odCl9KX1mdW5jdGlvbiBPcChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFueSJ9KX1mdW5jdGlvbiBBcChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVua25vd24ifSl9ZnVuY3Rpb24gTnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5ldmVyIiwuLi5fKHQpfSl9ZnVuY3Rpb24ganAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InZvaWQiLC4uLl8odCl9KX1mdW5jdGlvbiBNcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsLi4uXyh0KX0pfWZ1bmN0aW9uIERwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIixjb2VyY2U6ITAsLi4uXyh0KX0pfWZ1bmN0aW9uIHFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuYW4iLC4uLl8odCl9KX1mdW5jdGlvbiBUZShlLHQpe3JldHVybiBuZXcgd3Moe2NoZWNrOiJsZXNzX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBhZShlLHQpe3JldHVybiBuZXcgd3Moe2NoZWNrOiJsZXNzX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBQZShlLHQpe3JldHVybiBuZXcga3Moe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBjZShlLHQpe3JldHVybiBuZXcga3Moe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBQbyhlKXtyZXR1cm4gUGUoMCxlKX1mdW5jdGlvbiBJbyhlKXtyZXR1cm4gVGUoMCxlKX1mdW5jdGlvbiB4byhlKXtyZXR1cm4gYWUoMCxlKX1mdW5jdGlvbiBFbyhlKXtyZXR1cm4gY2UoMCxlKX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBuZXcgZ2woe2NoZWNrOiJtdWx0aXBsZV9vZiIsLi4uXyh0KSx2YWx1ZTplfSl9ZnVuY3Rpb24gVmUoZSx0KXtyZXR1cm4gbmV3IF9sKHtjaGVjazoibWF4X3NpemUiLC4uLl8odCksbWF4aW11bTplfSl9ZnVuY3Rpb24gSWUoZSx0KXtyZXR1cm4gbmV3IHlsKHtjaGVjazoibWluX3NpemUiLC4uLl8odCksbWluaW11bTplfSl9ZnVuY3Rpb24gc3QoZSx0KXtyZXR1cm4gbmV3IHdsKHtjaGVjazoic2l6ZV9lcXVhbHMiLC4uLl8odCksc2l6ZTplfSl9ZnVuY3Rpb24gaXQoZSx0KXtyZXR1cm4gbmV3IGtsKHtjaGVjazoibWF4X2xlbmd0aCIsLi4uXyh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBaZShlLHQpe3JldHVybiBuZXcgU2woe2NoZWNrOiJtaW5fbGVuZ3RoIiwuLi5fKHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGF0KGUsdCl7cmV0dXJuIG5ldyAkbCh7Y2hlY2s6Imxlbmd0aF9lcXVhbHMiLC4uLl8odCksbGVuZ3RoOmV9KX1mdW5jdGlvbiBWdChlLHQpe3JldHVybiBuZXcgemwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IiwuLi5fKHQpLHBhdHRlcm46ZX0pfWZ1bmN0aW9uIEp0KGUpe3JldHVybiBuZXcgVGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6Imxvd2VyY2FzZSIsLi4uXyhlKX0pfWZ1bmN0aW9uIEt0KGUpe3JldHVybiBuZXcgUGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InVwcGVyY2FzZSIsLi4uXyhlKX0pfWZ1bmN0aW9uIFd0KGUsdCl7cmV0dXJuIG5ldyBJbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLC4uLl8odCksaW5jbHVkZXM6ZX0pfWZ1bmN0aW9uIEd0KGUsdCl7cmV0dXJuIG5ldyB4bCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLC4uLl8odCkscHJlZml4OmV9KX1mdW5jdGlvbiBZdChlLHQpe3JldHVybiBuZXcgRWwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsLi4uXyh0KSxzdWZmaXg6ZX0pfWZ1bmN0aW9uIFJvKGUsdCxuKXtyZXR1cm4gbmV3IFJsKHtjaGVjazoicHJvcGVydHkiLHByb3BlcnR5OmUsc2NoZW1hOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIFF0KGUsdCl7cmV0dXJuIG5ldyBDbCh7Y2hlY2s6InByb3BlcnRpZXMiLHNoYXBlOmUsLi4uXyh0KX0pfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIG5ldyBabCh7Y2hlY2s6Im1pbWVfdHlwZSIsbWltZTplLC4uLl8odCl9KX1mdW5jdGlvbiB3ZShlKXtyZXR1cm4gbmV3IE9sKHtjaGVjazoib3ZlcndyaXRlIix0eDplfSl9ZnVuY3Rpb24gZW4oZSl7cmV0dXJuIHdlKHQ9PnQubm9ybWFsaXplKGUpKX1mdW5jdGlvbiB0bigpe3JldHVybiB3ZShlPT5lLnRyaW0oKSl9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gd2UoZT0+ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBvbigpe3JldHVybiB3ZShlPT5lLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIHJuKCl7cmV0dXJuIHdlKGU9Pmx1KGUpKX1mdW5jdGlvbiBMcChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJhcnJheSIsZWxlbWVudDp0LC4uLl8obil9KX1mdW5jdGlvbiB6bShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LC4uLl8obil9KX1mdW5jdGlvbiBUbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGluY2x1c2l2ZTohMSwuLi5fKG4pfSl9ZnVuY3Rpb24gUG0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczpuLGRpc2NyaW1pbmF0b3I6dCwuLi5fKG8pfSl9ZnVuY3Rpb24gSW0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OnQscmlnaHQ6bn0pfWZ1bmN0aW9uIHhtKGUsdCxuLG8pe2NvbnN0IHI9biBpbnN0YW5jZW9mIHoscz1yP286bixpPXI/bjpudWxsO3JldHVybiBuZXcgZSh7dHlwZToidHVwbGUiLGl0ZW1zOnQscmVzdDppLC4uLl8ocyl9KX1mdW5jdGlvbiBFbShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLl8obyl9KX1mdW5jdGlvbiBSbShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im1hcCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLl8obyl9KX1mdW5jdGlvbiBDbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiBabShlLHQsbil7Y29uc3Qgbz1BcnJheS5pc0FycmF5KHQpP09iamVjdC5mcm9tRW50cmllcyh0Lm1hcChyPT5bcixyXSkpOnQ7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm8sLi4uXyhuKX0pfWZ1bmN0aW9uIE9tKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gQW0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkodCk/dDpbdF0sLi4uXyhuKX0pfWZ1bmN0aW9uIFVwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJmaWxlIiwuLi5fKHQpfSl9ZnVuY3Rpb24gTm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOnR9KX1mdW5jdGlvbiBqbShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gTW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIERtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTp0LGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/bigpOmFvKG4pfX0pfWZ1bmN0aW9uIHFtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gTG0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gVW0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY2F0Y2giLGlubmVyVHlwZTp0LGNhdGNoVmFsdWU6dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpucyhuKX0pfWZ1bmN0aW9uIEhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InBpcGUiLGluOnQsb3V0Om59KX1mdW5jdGlvbiBGbShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gQm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gVm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxhenkiLGdldHRlcjp0fSl9ZnVuY3Rpb24gSm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gSHAoZSx0LG4pe2NvbnN0IG89XyhuKTtyZXR1cm4gby5hYm9ydD8/KG8uYWJvcnQ9ITApLG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ub30pfWZ1bmN0aW9uIEZwKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5fKG4pfSl9ZnVuY3Rpb24gQnAoZSx0KXtjb25zdCBuPVZwKG89PihvLmFkZElzc3VlPXI9PntpZih0eXBlb2Ygcj09InN0cmluZyIpby5pc3N1ZXMucHVzaChYZShyLG8udmFsdWUsbi5fem9kLmRlZikpO2Vsc2V7Y29uc3Qgcz1yO3MuZmF0YWwmJihzLmNvbnRpbnVlPSExKSxzLmNvZGU/PyhzLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBzfHwocy5pbnB1dD1vLnZhbHVlKSxzLmluc3Q/PyhzLmluc3Q9bikscy5jb250aW51ZT8/KHMuY29udGludWU9IW4uX3pvZC5kZWYuYWJvcnQpLG8uaXNzdWVzLnB1c2goWGUocykpfX0sZShvLnZhbHVlLG8pKSx0KTtyZXR1cm4gbn1mdW5jdGlvbiBWcChlLHQpe2NvbnN0IG49bmV3IFUoe2NoZWNrOiJjdXN0b20iLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmNoZWNrPWUsbn1mdW5jdGlvbiBKcChlKXtjb25zdCB0PW5ldyBVKHtjaGVjazoiZGVzY3JpYmUifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89cGUuZ2V0KG4pPz97fTtwZS5hZGQobix7Li4ubyxkZXNjcmlwdGlvbjplfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gS3AoZSl7Y29uc3QgdD1uZXcgVSh7Y2hlY2s6Im1ldGEifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89cGUuZ2V0KG4pPz97fTtwZS5hZGQobix7Li4ubywuLi5lfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gV3AoZSx0KXtjb25zdCBuPV8odCk7bGV0IG89bi50cnV0aHk/P1sidHJ1ZSIsIjEiLCJ5ZXMiLCJvbiIsInkiLCJlbmFibGVkIl0scj1uLmZhbHN5Pz9bImZhbHNlIiwiMCIsIm5vIiwib2ZmIiwibiIsImRpc2FibGVkIl07bi5jYXNlIT09InNlbnNpdGl2ZSImJihvPW8ubWFwKGI9PnR5cGVvZiBiPT0ic3RyaW5nIj9iLnRvTG93ZXJDYXNlKCk6Yikscj1yLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpKTtjb25zdCBzPW5ldyBTZXQobyksaT1uZXcgU2V0KHIpLGE9ZS5Db2RlYz8/TnMsYz1lLkJvb2xlYW4/P0VzLHU9ZS5TdHJpbmc/P0J0LGw9bmV3IHUoe3R5cGU6InN0cmluZyIsZXJyb3I6bi5lcnJvcn0pLHA9bmV3IGMoe3R5cGU6ImJvb2xlYW4iLGVycm9yOm4uZXJyb3J9KSxnPW5ldyBhKHt0eXBlOiJwaXBlIixpbjpsLG91dDpwLHRyYW5zZm9ybTooKGIseSk9PntsZXQgaz1iO3JldHVybiBuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKGs9ay50b0xvd2VyQ2FzZSgpKSxzLmhhcyhrKT8hMDppLmhhcyhrKT8hMTooeS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsZXhwZWN0ZWQ6InN0cmluZ2Jvb2wiLHZhbHVlczpbLi4ucywuLi5pXSxpbnB1dDp5LnZhbHVlLGluc3Q6Zyxjb250aW51ZTohMX0pLHt9KX0pLHJldmVyc2VUcmFuc2Zvcm06KChiLHkpPT5iPT09ITA/b1swXXx8InRydWUiOnJbMF18fCJmYWxzZSIpLGVycm9yOm4uZXJyb3J9KTtyZXR1cm4gZy5fem9kLmJhZy50cnV0aHk9byxnLl96b2QuYmFnLmZhbHN5PXIsZy5fem9kLmJhZy5jYXNlPW4uY2FzZT8/Imluc2Vuc2l0aXZlIixnfWZ1bmN0aW9uIGN0KGUsdCxuLG89e30pe2NvbnN0IHI9XyhvKSxzPXtjaGVjazoic3RyaW5nX2Zvcm1hdCIsdHlwZToic3RyaW5nIixmb3JtYXQ6dCxmbjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmE9Pm4udGVzdChhKSwuLi5yfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlZ0V4cCYmKHMucGF0dGVybj1uKSxuZXcgZShzKX1jb25zdCBLbT0oKT0+KHt9KSxXbT0oKT0+KHt9KSxHbT0oKT0+KHt9KSxZbT0oKT0+KHt9KSxRbT0oKT0+KHt9KSxHcD0oKT0+KCk9Pih7fSksVnI9KCk9PigpPT4oe30pLFhtPSgpPT4oe30pLGZlPSgpPT4oe30pLGVnPSgpPT4oe30pLHRnPSgpPT4oe30pLG5nPSgpPT4oe30pLG9nPSgpPT4oe30pLHJnPSgpPT4oe30pLHNnPSgpPT4oe30pLGlnPSgpPT4oe30pLGFnPSgpPT4oe30pLGNnPSgpPT4oe30pLHVnPSgpPT4oe30pLGxnPSgpPT4oe30pLGRnPSgpPT4oe30pLHBnPSgpPT4oe30pLGZnPSgpPT4oe30pLGhnPSgpPT4oe30pLG1nPSgpPT4oe30pLGdnPSgpPT4oe30pLHZnPSgpPT4oe30pLGJnPSgpPT4oe30pLF9nPSgpPT4oe30pLHlnPSgpPT4oe30pLHdnPSgpPT4oe30pLGtnPSgpPT4oe30pLFNnPSgpPT4oe30pLCRnPSgpPT4oe30pLFlwPSgpPT4oe30pLHpnPSgpPT4oe30pLFRnPSgpPT4oe30pLFBnPSgpPT4oe30pLElnPSgpPT4oe30pLHhnPSgpPT4oe30pLEVnPSgpPT4oe30pLFJnPSgpPT4oe30pLENnPSgpPT4oe30pLFpnPSgpPT4oe30pLE9nPSgpPT4oe30pLEFnPSgpPT4oe30pLFFwPSgpPT4oe30pLE5nPSgpPT4oe30pLF9pPSgpPT4oe30pO2NsYXNzIGpne31jb25zdCBNZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGx9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksWHA9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRab2RBbnk6VGQsJFpvZEFycmF5OlJkLCRab2RBc3luY0Vycm9yOlJlLCRab2RCYXNlNjQ6bGQsJFpvZEJhc2U2NFVSTDpwZCwkWm9kQmlnSW50OlJzLCRab2RCaWdJbnRGb3JtYXQ6a2QsJFpvZEJvb2xlYW46RXMsJFpvZENJRFJ2NDppZCwkWm9kQ0lEUnY2OmNkLCRab2RDVUlEOktsLCRab2RDVUlEMjpXbCwkWm9kQ2F0Y2g6WGQsJFpvZENoZWNrOlUsJFpvZENoZWNrQmlnSW50Rm9ybWF0OmJsLCRab2RDaGVja0VuZHNXaXRoOkVsLCRab2RDaGVja0dyZWF0ZXJUaGFuOmtzLCRab2RDaGVja0luY2x1ZGVzOklsLCRab2RDaGVja0xlbmd0aEVxdWFsczokbCwkWm9kQ2hlY2tMZXNzVGhhbjp3cywkWm9kQ2hlY2tMb3dlckNhc2U6VGwsJFpvZENoZWNrTWF4TGVuZ3RoOmtsLCRab2RDaGVja01heFNpemU6X2wsJFpvZENoZWNrTWltZVR5cGU6WmwsJFpvZENoZWNrTWluTGVuZ3RoOlNsLCRab2RDaGVja01pblNpemU6eWwsJFpvZENoZWNrTXVsdGlwbGVPZjpnbCwkWm9kQ2hlY2tOdW1iZXJGb3JtYXQ6dmwsJFpvZENoZWNrT3ZlcndyaXRlOk9sLCRab2RDaGVja1Byb3BlcnRpZXM6Q2wsJFpvZENoZWNrUHJvcGVydHk6UmwsJFpvZENoZWNrUmVnZXg6emwsJFpvZENoZWNrU2l6ZUVxdWFsczp3bCwkWm9kQ2hlY2tTdGFydHNXaXRoOnhsLCRab2RDaGVja1N0cmluZ0Zvcm1hdDpGdCwkWm9kQ2hlY2tVcHBlckNhc2U6UGwsJFpvZENvZGVjOk5zLCRab2RDcmVkaXRDYXJkOm1kLCRab2RDdXN0b206aXAsJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDp5ZCwkWm9kQ3ljbGljRXJyb3I6YXAsJFpvZERhdGU6RWQsJFpvZERlZmF1bHQ6V2QsJFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpNZCwkWm9kRTE2NDpmZCwkWm9kRW1haWw6cWwsJFpvZEVtb2ppOlZsLCRab2RFbmNvZGVFcnJvcjpobywkWm9kRW51bTpIZCwkWm9kRXJyb3I6UnUsJFpvZEV4YWN0T3B0aW9uYWw6SmQsJFpvZEZpbGU6QmQsJFpvZEZ1bmN0aW9uOnJwLCRab2RHVUlEOk1sLCRab2RJQkFOOnZkLCRab2RJUHY0Om9kLCRab2RJUHY2OnJkLCRab2RJU09EYXRlOmVkLCRab2RJU09EYXRlVGltZTpYbCwkWm9kSVNPRHVyYXRpb246bmQsJFpvZElTT1RpbWU6dGQsJFpvZEludGVyc2VjdGlvbjpEZCwkWm9kSldUOl9kLCRab2RLU1VJRDpRbCwkWm9kTGF6eTpqcywkWm9kTGl0ZXJhbDpGZCwkWm9kTUFDOnNkLCRab2RNYXA6TGQsJFpvZE5hTjplcCwkWm9kTmFub0lEOkpsLCRab2ROZXZlcjpJZCwkWm9kTm9uT3B0aW9uYWw6WWQsJFpvZE51bGw6emQsJFpvZE51bGxhYmxlOktkLCRab2ROdW1iZXI6eHMsJFpvZE51bWJlckZvcm1hdDp3ZCwkWm9kT2JqZWN0Ok9kLCRab2RPYmplY3RKSVQ6QWQsJFpvZE9wdGlvbmFsOk9zLCRab2RQaXBlOkFzLCRab2RQcmVmYXVsdDpHZCwkWm9kUHJlcHJvY2Vzczp0cCwkWm9kUHJvbWlzZTpzcCwkWm9kUmVhZG9ubHk6bnAsJFpvZFJlYWxFcnJvcjp1ZSwkWm9kUmVjb3JkOnFkLCRab2RSZWdpc3RyeTpwcCwkWm9kU2V0OlVkLCRab2RTdHJpbmc6QnQsJFpvZFN0cmluZ0Zvcm1hdDpELCRab2RTdWNjZXNzOlFkLCRab2RTeW1ib2w6U2QsJFpvZFRlbXBsYXRlTGl0ZXJhbDpvcCwkWm9kVHJhbnNmb3JtOlZkLCRab2RUdXBsZTpacywkWm9kVHlwZTp6LCRab2RVTElEOkdsLCRab2RVUkw6QmwsJFpvZFVVSUQ6RGwsJFpvZFVuZGVmaW5lZDokZCwkWm9kVW5pb246a28sJFpvZFVua25vd246UGQsJFpvZFZvaWQ6eGQsJFpvZFhJRDpZbCwkWm9kWG9yOk5kLCRicmFuZDpzcywkY29uc3RydWN0b3I6ZCwkaW5wdXQ6cXMsJG91dHB1dDpEcyxEb2M6QWwsSU5WQUxJRDpVcyxKU09OU2NoZW1hOk1nLEpTT05TY2hlbWFHZW5lcmF0b3I6amcsTkVWRVI6cnMsVGltZVByZWNpc2lvbjpoaSxVUkxfQkFEX0ZPUk1BVDokcyxVUkxfVU5QQVJTRUFCTEU6UnQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6SHMsWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6RnMsX2FueTpPcCxfYXJyYXk6THAsX2Jhc2U2NDpsaSxfYmFzZTY0dXJsOmRpLF9iaWdpbnQ6UHAsX2Jvb2xlYW46enAsX2NhdGNoOlVtLF9jaGVjazpWcCxfY2lkcnY0OmNpLF9jaWRydjY6dWksX2NvZXJjZWRCaWdpbnQ6SXAsX2NvZXJjZWRCb29sZWFuOlRwLF9jb2VyY2VkRGF0ZTpEcCxfY29lcmNlZE51bWJlcjpfcCxfY29lcmNlZFN0cmluZzpocCxfY3JlZGl0Q2FyZDpncCxfY3VpZDp0aSxfY3VpZDI6bmksX2N1c3RvbTpIcCxfZGF0ZTpNcCxfZGVjb2RlOnVzLF9kZWNvZGVBc3luYzpkcyxfZGVmYXVsdDpEbSxfZGlzY3JpbWluYXRlZFVuaW9uOlBtLF9lMTY0OnBpLF9lbWFpbDpKcyxfZW1vamk6WHMsX2VuY29kZTpjcyxfZW5jb2RlQXN5bmM6bHMsX2VuZHNXaXRoOll0LF9lbnVtOlptLF9maWxlOlVwLF9mbG9hdDMyOndwLF9mbG9hdDY0OmtwLF9ndDpQZSxfZ3RlOmNlLF9ndWlkOktzLF9pYmFuOnZwLF9pbmNsdWRlczpXdCxfaW50OnlwLF9pbnQzMjpTcCxfaW50NjQ6eHAsX2ludGVyc2VjdGlvbjpJbSxfaXB2NDppaSxfaXB2NjphaSxfaXNvRGF0ZTpnaSxfaXNvRGF0ZVRpbWU6bWksX2lzb0R1cmF0aW9uOmJpLF9pc29UaW1lOnZpLF9qd3Q6ZmksX2tzdWlkOnNpLF9sYXp5OlZtLF9sZW5ndGg6YXQsX2xpdGVyYWw6QW0sX2xvd2VyY2FzZTpKdCxfbHQ6VGUsX2x0ZTphZSxfbWFjOm1wLF9tYXA6Um0sX21heDphZSxfbWF4TGVuZ3RoOml0LF9tYXhTaXplOlZlLF9taW1lOlh0LF9taW46Y2UsX21pbkxlbmd0aDpaZSxfbWluU2l6ZTpJZSxfbXVsdGlwbGVPZjpxZSxfbmFuOnFwLF9uYW5vaWQ6ZWksX25hdGl2ZUVudW06T20sX25lZ2F0aXZlOklvLF9uZXZlcjpOcCxfbm9ubmVnYXRpdmU6RW8sX25vbm9wdGlvbmFsOnFtLF9ub25wb3NpdGl2ZTp4byxfbm9ybWFsaXplOmVuLF9udWxsOlpwLF9udWxsYWJsZTpNbSxfbnVtYmVyOmJwLF9vcHRpb25hbDpqbSxfb3ZlcndyaXRlOndlLF9wYXJzZTpNdCxfcGFyc2VBc3luYzpEdCxfcGlwZTpIbSxfcG9zaXRpdmU6UG8sX3Byb21pc2U6Sm0sX3Byb3BlcnRpZXM6UXQsX3Byb3BlcnR5OlJvLF9yZWFkb25seTpGbSxfcmVjb3JkOkVtLF9yZWZpbmU6RnAsX3JlZ2V4OlZ0LF9zYWZlRGVjb2RlOmZzLF9zYWZlRGVjb2RlQXN5bmM6bXMsX3NhZmVFbmNvZGU6cHMsX3NhZmVFbmNvZGVBc3luYzpocyxfc2FmZVBhcnNlOnF0LF9zYWZlUGFyc2VBc3luYzpMdCxfc2V0OkNtLF9zaXplOnN0LF9zbHVnaWZ5OnJuLF9zdGFydHNXaXRoOkd0LF9zdHJpbmc6ZnAsX3N0cmluZ0Zvcm1hdDpjdCxfc3RyaW5nYm9vbDpXcCxfc3VjY2VzczpMbSxfc3VwZXJSZWZpbmU6QnAsX3N5bWJvbDpScCxfdGVtcGxhdGVMaXRlcmFsOkJtLF90b0xvd2VyQ2FzZTpubixfdG9VcHBlckNhc2U6b24sX3RyYW5zZm9ybTpObSxfdHJpbTp0bixfdHVwbGU6eG0sX3VpbnQzMjokcCxfdWludDY0OkVwLF91bGlkOm9pLF91bmRlZmluZWQ6Q3AsX3VuaW9uOnptLF91bmtub3duOkFwLF91cHBlcmNhc2U6S3QsX3VybDpUbyxfdXVpZDpXcyxfdXVpZHY0OkdzLF91dWlkdjY6WXMsX3V1aWR2NzpRcyxfdm9pZDpqcCxfeGlkOnJpLF94b3I6VG0sYmFzZTY0Q2hhcnNldDp1ZCxiYXNlNjR1cmxDaGFyc2V0OklzLGNhblBhcnNlVVJMOnpzLGNsb25lOkgsY29tcGlsZTpCcyxjb21waWxlRm46JG0sY29uZmlnOkosY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOlZyLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpHcCxkZWNvZGU6UmgsZGVjb2RlQXN5bmM6WmgsZGVzY3JpYmU6SnAsZW5jb2RlOkVoLGVuY29kZUFzeW5jOkNoLGV4dHJhY3REZWZzOlltLGZpbmFsaXplOlFtLGZsYXR0ZW5FcnJvcjptbyxmb3JtYXRFcnJvcjpnbyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkNzLGdsb2JhbENvbmZpZzpuZSxnbG9iYWxSZWdpc3RyeTpwZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6V20saW5pdGlhbGl6ZUNvbnRleHQ6S20saXNCYWNrRWRnZTpscCxpc1JlY3Vyc2l2ZVNjaGVtYTp5bSxpc1ZhbGlkQmFzZTY0OlBzLGlzVmFsaWRCYXNlNjRVUkw6ZGQsaXNWYWxpZENJRFJ2NjphZCxpc1ZhbGlkQ3JlZGl0Q2FyZDpoZCxpc1ZhbGlkSUJBTjpnZCxpc1ZhbGlkSVB2NjpUcyxpc1ZhbGlkSldUOmJkLGxvY2FsZXM6TXMsbWVtb2l6ZXI6U28sbWVyZ2VWYWx1ZXM6dG8sbWV0YTpLcCxwYXJzZTpxcixwYXJzZUFzeW5jOkxyLHBhcnNlVVJMT2JqZWN0OlVsLHByZXR0aWZ5RXJyb3I6YXMscHJvY2VzczpYbSxwcm9jZXNzU2NoZW1hOkdtLHJlZ2V4ZXM6d28scmVnaXN0cnk6JG8sc2FmZURlY29kZTpBaCxzYWZlRGVjb2RlQXN5bmM6amgsc2FmZUVuY29kZTpPaCxzYWZlRW5jb2RlQXN5bmM6Tmgsc2FmZVBhcnNlOlp1LHNhZmVQYXJzZUFzeW5jOlRoLHN0YW5kYXJkUHJvcHM6U3Msc3RyaXBUYWJBbmROZXdsaW5lOkhyLHRvRG90UGF0aDpDdSx0b0pTT05TY2hlbWE6X2ksdG9ab2Q6c28sdHJlZWlmeUVycm9yOmlzLHVybEhvc3RuYW1lT2s6SGwsdXJsUHJvdG9jb2xPazpGbCx1dGlsOm9zLHZhbGlkYXRlOmJvLHZhbGlkYXRlQXN5bmM6X28sdmFsaWRhdGVVUkw6TGwsdmVyc2lvbjpObCx3aXRoUGFyc2VyOlZzfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLExjPVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiB5aShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooaSxhKT0+e2NvbnN0IGM9dFtpLl96b2QuZGVmLnR5cGVdO3JldHVybiBjP2MoaSxhKTppfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihpKXtjb25zdCBhPW8uZ2V0KGkpO2lmKGE9PT1MYylyZXR1cm4gbmV3IGpzKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGkpfSk7aWYoYSE9PXZvaWQgMClyZXR1cm4gYTtvLnNldChpLExjKTtjb25zdCBjPXMoaSksdT1uKGMsYyE9PWkpO3JldHVybiBvLnNldChpLHUpLHV9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPWkuX3pvZC5kZWY7c3dpdGNoKGEudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCB1PWEuc2hhcGUsbD1PYmplY3Qua2V5cyh1KTtsZXQgcD0hMTtjb25zdCBnPXt9O2Zvcihjb25zdCB5IG9mIGwpe2NvbnN0IGs9cih1W3ldKTtrIT09dVt5XSYmKHA9ITApLGdbeV09a31sZXQgYj1hLmNhdGNoYWxsO3JldHVybiBhLmNhdGNoYWxsJiYoYj1yKGEuY2F0Y2hhbGwpLGIhPT1hLmNhdGNoYWxsJiYocD0hMCkpLHA/SChpLHsuLi5hLHNoYXBlOmcsY2F0Y2hhbGw6Yn0pOml9Y2FzZSJhcnJheSI6e2NvbnN0IHU9cihhLmVsZW1lbnQpO3JldHVybiB1PT09YS5lbGVtZW50P2k6SChpLHsuLi5hLGVsZW1lbnQ6dX0pfWNhc2UidHVwbGUiOntjb25zdCB1PWEuaXRlbXM7bGV0IGw9ITE7Y29uc3QgcD1bXTtmb3IoY29uc3QgYiBvZiB1KXtjb25zdCB5PXIoYik7eSE9PWImJihsPSEwKSxwLnB1c2goeSl9bGV0IGc9YS5yZXN0O3JldHVybiBhLnJlc3QmJihnPXIoYS5yZXN0KSxnIT09YS5yZXN0JiYobD0hMCkpLGw/SChpLHsuLi5hLGl0ZW1zOnAscmVzdDpnfSk6aX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCB1PXIoYS5rZXlUeXBlKSxsPXIoYS52YWx1ZVR5cGUpO3JldHVybiB1PT09YS5rZXlUeXBlJiZsPT09YS52YWx1ZVR5cGU/aTpIKGksey4uLmEsa2V5VHlwZTp1LHZhbHVlVHlwZTpsfSl9Y2FzZSJzZXQiOntjb25zdCB1PXIoYS52YWx1ZVR5cGUpO3JldHVybiB1PT09YS52YWx1ZVR5cGU/aTpIKGksey4uLmEsdmFsdWVUeXBlOnV9KX1jYXNlInVuaW9uIjp7Y29uc3QgdT1hLm9wdGlvbnM7bGV0IGw9ITE7Y29uc3QgcD1bXTtmb3IoY29uc3QgZyBvZiB1KXtjb25zdCBiPXIoZyk7YiE9PWcmJihsPSEwKSxwLnB1c2goYil9cmV0dXJuIGw/SChpLHsuLi5hLG9wdGlvbnM6cH0pOml9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCB1PXIoYS5sZWZ0KSxsPXIoYS5yaWdodCk7cmV0dXJuIHU9PT1hLmxlZnQmJmw9PT1hLnJpZ2h0P2k6SChpLHsuLi5hLGxlZnQ6dSxyaWdodDpsfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IHU9cihhLmlubmVyVHlwZSk7cmV0dXJuIHU9PT1hLmlubmVyVHlwZT9pOkgoaSx7Li4uYSxpbm5lclR5cGU6dX0pfWNhc2UicGlwZSI6e2NvbnN0IHU9cihhLmluKSxsPXIoYS5vdXQpO3JldHVybiB1PT09YS5pbiYmbD09PWEub3V0P2k6SChpLHsuLi5hLGluOnUsb3V0Omx9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgdT1yKGEuaW5wdXQpLGw9cihhLm91dHB1dCk7cmV0dXJuIHU9PT1hLmlucHV0JiZsPT09YS5vdXRwdXQ/aTpIKGksey4uLmEsaW5wdXQ6dSxvdXRwdXQ6bH0pfWNhc2UibGF6eSI6e2NvbnN0IHU9YS5nZXR0ZXIse19jYWNoZWRJbm5lcjpsLC4uLnB9PWE7cmV0dXJuIEgoaSx7Li4ucCxnZXR0ZXI6KCk9PnIodSgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gaTtkZWZhdWx0OnJldHVybiBpfX1yZXR1cm4gcihlKX1mdW5jdGlvbiB3aShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBlZihlLHQpe3JldHVybiB3aShlKT9adShlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIERnKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZih3aShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIHFnKGUpe2lmKHdpKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IExnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDpZdCxndDpQZSxndGU6Y2UsaW5jbHVkZXM6V3QsbGVuZ3RoOmF0LGxvd2VyY2FzZTpKdCxsdDpUZSxsdGU6YWUsbWF4TGVuZ3RoOml0LG1heFNpemU6VmUsbWltZTpYdCxtaW5MZW5ndGg6WmUsbWluU2l6ZTpJZSxtdWx0aXBsZU9mOnFlLG5lZ2F0aXZlOklvLG5vbm5lZ2F0aXZlOkVvLG5vbnBvc2l0aXZlOnhvLG5vcm1hbGl6ZTplbixvdmVyd3JpdGU6d2UscG9zaXRpdmU6UG8scHJvcGVydGllczpRdCxwcm9wZXJ0eTpSbyxyZWdleDpWdCxzaXplOnN0LHNsdWdpZnk6cm4sc3RhcnRzV2l0aDpHdCx0b0xvd2VyQ2FzZTpubix0b1VwcGVyQ2FzZTpvbix0cmltOnRuLHVwcGVyY2FzZTpLdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxVYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiBWbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IHRmPShlLHQpPT57UnUuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO1VjLmhhcyhuKXx8KFVjLmFkZChuKSxWbihuLCJmb3JtYXQiLG89PnI9PmdvKG8scikpLFZuKG4sImZsYXR0ZW4iLG89PnI9Pm1vKG8scikpLFZuKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsR24sMil9KSxWbihuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxHbiwyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxuZj1kKCJab2RFcnJvciIsdGYpLHNlPWQoIlpvZEVycm9yIix0Zix2b2lkIDAse1BhcmVudDpFcnJvcn0pLGtpPU10KHNlKSxTaT1EdChzZSksJGk9cXQoc2UpLHppPUx0KHNlKSxUaT1jcyhzZSksUGk9dXMoc2UpLElpPWxzKHNlKSx4aT1kcyhzZSksRWk9cHMoc2UpLFJpPWZzKHNlKSxDaT1ocyhzZSksWmk9bXMoc2UpO2Z1bmN0aW9uIFVnKCl7bmUubG9jYWxlRXJyb3J8fEooZHAoKSl9ZnVuY3Rpb24gSmUoKXtuZS5tZW1vaXplcnx8Sih7bWVtb2l6ZXI6U28oKX0pfWNvbnN0IFA9ZCgiWm9kVHlwZSIsKGUsdCk9PihVZygpLHouaW5pdChlLHQpLGUuZGVmPXQsZS50eXBlPXQudHlwZSxlKSx7Y2hlY2soLi4uZSl7Y29uc3QgdD10aGlzLmRlZjtyZXR1cm4gdGhpcy5jbG9uZShYKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBIKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhfcihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh5cihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKHdlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gcSh0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBYbyh0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gbnQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gcShudCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBzcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBTKHRoaXMpfSxvcihlKXtyZXR1cm4gSShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4geXQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBadCh0aGlzLHhuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gbnIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIHJyKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBjcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBadCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBwcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHBlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHBlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gcGUuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBmbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5Tcyh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpWcigpLG91dHB1dDpWcigpfX0pfSxzZXQifnN0YW5kYXJkIihlKXt6ZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGtpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgU2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiAkaSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIHppKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXt6ZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBibyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gX28odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBUaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gUGkodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgSWkodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgeGkodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gRWkodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIFJpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIENpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIFppKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBHcCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gcGUuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxzbj1kKCJfWm9kU3RyaW5nIiwoZSx0KT0+e0J0LmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZWcoKX0sanQoe2Zvcm1hdDplPT5mZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+ZmUoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5mZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhWdCguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFd0KC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhHdCguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFl0KC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFplKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGl0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGF0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soWmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhKdChlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhLdChlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayh0bigpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGVuKC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhubigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhvbigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKHJuKCkpfX0pKSx1dD1kKCJab2RTdHJpbmciLChlLHQpPT57QnQuaW5pdChlLHQpLHNuLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKEpzKGFuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKFRvKGh0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKGZpKFNuLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soWHModW4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKEtzKGNuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhXcyh2ZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhHcyh2ZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhZcyh2ZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhRcyh2ZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhlaShsbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sodGkoZG4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhuaShwbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sob2koZm4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2sobGkoeW4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soZGkod24sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2socmkoaG4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhzaShtbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soaWkoZ24sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKGFpKHZuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKGNpKGJuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHVpKF9uLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhwaShrbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKG1pKGx0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhnaShkdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmkocHQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhiaShmdCxlKSl9fSk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnAodXQsZSl9Y29uc3QgTj1kKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57RC5pbml0KGUsdCksc24uaW5pdChlLHQpfSksbHQ9ZCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57WGwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSksZHQ9ZCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntlZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KSxwdD1kKCJab2RJU09UaW1lIiwoZSx0KT0+e3RkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pLGZ0PWQoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e25kLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pLGFuPWQoIlpvZEVtYWlsIiwoZSx0KT0+e3FsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE9pKGUpe3JldHVybiBKcyhhbixlKX1jb25zdCBjbj1kKCJab2RHVUlEIiwoZSx0KT0+e01sLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFpKGUpe3JldHVybiBLcyhjbixlKX1jb25zdCB2ZT1kKCJab2RVVUlEIiwoZSx0KT0+e0RsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE5pKGUpe3JldHVybiBXcyh2ZSxlKX1mdW5jdGlvbiBqaShlKXtyZXR1cm4gR3ModmUsZSl9ZnVuY3Rpb24gTWkoZSl7cmV0dXJuIFlzKHZlLGUpfWZ1bmN0aW9uIERpKGUpe3JldHVybiBRcyh2ZSxlKX1jb25zdCBodD1kKCJab2RVUkwiLChlLHQpPT57QmwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gcWkoZSl7cmV0dXJuIFRvKGh0LGUpfWZ1bmN0aW9uIExpKGUpe3JldHVybiBUbyhodCx7cHJvdG9jb2w6Z3MsaG9zdG5hbWU6WHUsLi4uXyhlKX0pfWNvbnN0IHVuPWQoIlpvZEVtb2ppIiwoZSx0KT0+e1ZsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFVpKGUpe3JldHVybiBYcyh1bixlKX1jb25zdCBsbj1kKCJab2ROYW5vSUQiLChlLHQpPT57SmwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gSGkoZSl7cmV0dXJuIGVpKGxuLGUpfWNvbnN0IGRuPWQoIlpvZENVSUQiLChlLHQpPT57S2wuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gRmkoZSl7cmV0dXJuIHRpKGRuLGUpfWNvbnN0IHBuPWQoIlpvZENVSUQyIiwoZSx0KT0+e1dsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEJpKGUpe3JldHVybiBuaShwbixlKX1jb25zdCBmbj1kKCJab2RVTElEIiwoZSx0KT0+e0dsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFZpKGUpe3JldHVybiBvaShmbixlKX1jb25zdCBobj1kKCJab2RYSUQiLChlLHQpPT57WWwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gSmkoZSl7cmV0dXJuIHJpKGhuLGUpfWNvbnN0IG1uPWQoIlpvZEtTVUlEIiwoZSx0KT0+e1FsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEtpKGUpe3JldHVybiBzaShtbixlKX1jb25zdCBnbj1kKCJab2RJUHY0IiwoZSx0KT0+e29kLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFdpKGUpe3JldHVybiBpaShnbixlKX1jb25zdCBDbz1kKCJab2RNQUMiLChlLHQpPT57c2QuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gR2koZSl7cmV0dXJuIG1wKENvLGUpfWNvbnN0IHZuPWQoIlpvZElQdjYiLChlLHQpPT57cmQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gWWkoZSl7cmV0dXJuIGFpKHZuLGUpfWNvbnN0IGJuPWQoIlpvZENJRFJ2NCIsKGUsdCk9PntpZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBRaShlKXtyZXR1cm4gY2koYm4sZSl9Y29uc3QgX249ZCgiWm9kQ0lEUnY2IiwoZSx0KT0+e2NkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFhpKGUpe3JldHVybiB1aShfbixlKX1jb25zdCB5bj1kKCJab2RCYXNlNjQiLChlLHQpPT57bGQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIGxpKHluLGUpfWNvbnN0IHduPWQoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntwZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiB0YShlKXtyZXR1cm4gZGkod24sZSl9Y29uc3Qga249ZCgiWm9kRTE2NCIsKGUsdCk9PntmZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBuYShlKXtyZXR1cm4gcGkoa24sZSl9Y29uc3QgWm89ZCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PnttZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBvYShlKXtyZXR1cm4gZ3AoWm8sZSl9Y29uc3QgT289ZCgiWm9kSUJBTiIsKGUsdCk9Pnt2ZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiByYShlKXtyZXR1cm4gdnAoT28sZSl9Y29uc3QgU249ZCgiWm9kSldUIiwoZSx0KT0+e19kLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHNhKGUpe3JldHVybiBmaShTbixlKX1jb25zdCBPZT1kKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57eWQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gaWEoZSx0LG49e30pe3JldHVybiBjdChPZSxlLHQsbil9ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIGN0KE9lLCJob3N0bmFtZSIsUXUsZSl9ZnVuY3Rpb24gY2EoZSl7cmV0dXJuIGN0KE9lLCJoZXgiLG1sLGUpfWZ1bmN0aW9uIHVhKGUpe3JldHVybiBjdChPZSwiY3VycmVuY3lfY29kZSIsdGwsZSl9ZnVuY3Rpb24gbGEoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPXdvW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIGN0KE9lLG8scix0KX1jb25zdCBtdD1kKCJab2ROdW1iZXIiLChlLHQpPT57eHMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT50ZygpLGUuaXNGaW5pdGU9ITB9LGp0KHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09ZmUoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1mZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1mZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PmZlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhQZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soY2UoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKGNlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFRlKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhhZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYWUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhDdChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soQ3QoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhQZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2UoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKFRlKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhhZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHFlKGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBUKGUpe3JldHVybiBicChtdCxlKX1jb25zdCBBZT1kKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57d2QuaW5pdChlLHQpLG10LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEN0KGUpe3JldHVybiB5cChBZSxlKX1mdW5jdGlvbiBkYShlKXtyZXR1cm4gd3AoQWUsZSl9ZnVuY3Rpb24gcGEoZSl7cmV0dXJuIGtwKEFlLGUpfWZ1bmN0aW9uIGZhKGUpe3JldHVybiBTcChBZSxlKX1mdW5jdGlvbiBoYShlKXtyZXR1cm4gJHAoQWUsZSl9Y29uc3QgZ3Q9ZCgiWm9kQm9vbGVhbiIsKGUsdCk9PntFcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm5nKCl9KTtmdW5jdGlvbiBBKGUpe3JldHVybiB6cChndCxlKX1jb25zdCB2dD1kKCJab2RCaWdJbnQiLChlLHQpPT57UnMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5vZygpfSxqdCh7bWluVmFsdWU6ZT0+ZmUoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PmZlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+ZmUoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhjZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soY2UoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soVGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGFlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhhZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2UoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHFlKGUsdCkpfX0pKTtmdW5jdGlvbiBtYShlKXtyZXR1cm4gUHAodnQsZSl9Y29uc3QgJG49ZCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2tkLmluaXQoZSx0KSx2dC5pbml0KGUsdCl9KTtmdW5jdGlvbiBnYShlKXtyZXR1cm4geHAoJG4sZSl9ZnVuY3Rpb24gdmEoZSl7cmV0dXJuIEVwKCRuLGUpfWNvbnN0IEFvPWQoIlpvZFN5bWJvbCIsKGUsdCk9PntTZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnJnKCl9KTtmdW5jdGlvbiBiYShlKXtyZXR1cm4gUnAoQW8sZSl9Y29uc3QgTm89ZCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+eyRkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+aWcoKX0pO2Z1bmN0aW9uIHR0KGUpe3JldHVybiBDcChObyxlKX1jb25zdCBqbz1kKCJab2ROdWxsIiwoZSx0KT0+e3pkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+c2coKX0pO2Z1bmN0aW9uIHpuKGUpe3JldHVybiBacChqbyxlKX1jb25zdCBNbz1kKCJab2RBbnkiLChlLHQpPT57VGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT51ZygpfSk7ZnVuY3Rpb24gVG4oKXtyZXR1cm4gT3AoTW8pfWNvbnN0IERvPWQoIlpvZFVua25vd24iLChlLHQpPT57UGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5sZygpfSk7ZnVuY3Rpb24gWigpe3JldHVybiBBcChEbyl9Y29uc3QgcW89ZCgiWm9kTmV2ZXIiLChlLHQpPT57SWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jZygpfSk7ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIE5wKHFvLGUpfWNvbnN0IExvPWQoIlpvZFZvaWQiLChlLHQpPT57eGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5hZygpfSk7ZnVuY3Rpb24gX2EoZSl7cmV0dXJuIGpwKExvLGUpfWNvbnN0IFBuPWQoIlpvZERhdGUiLChlLHQpPT57RWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kZygpLGUubWluPShuLG8pPT5lLmNoZWNrKGNlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGFlKG4sbykpfSxqdCh7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1mZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09ZmUoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiB5YShlKXtyZXR1cm4gTXAoUG4sZSl9Y29uc3QgVW89ZCgiWm9kQXJyYXkiLChlLHQpPT57SmUoKSxSZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNnKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFplKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhaZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soaXQoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGF0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFMoZSx0KXtyZXR1cm4gTHAoVW8sZSx0KX1mdW5jdGlvbiB3YShlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIEcoT2JqZWN0LmtleXModCkpfWNvbnN0IGJ0PWQoIlpvZE9iamVjdCIsKGUsdCk9PntKZSgpLEFkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGcoKSxJdShlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiBHKE9iamVjdC5rZXlzKHRoaXMuX3pvZC5kZWYuc2hhcGUpKX0sY2F0Y2hhbGwoZSl7cmV0dXJuIHRoaXMuY2xvbmUoWCh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKFgodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WigpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKFgodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WigpfSkpfSxzdHJpY3QoKXtyZXR1cm4gdGhpcy5jbG9uZShYKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkxlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoWCh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gYnUodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4geXUodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIHd1KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIGd1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIHZ1KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIE1yKHd0LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gTXIoRW4sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIGt1KFJuLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gdihlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4uXyh0KX07cmV0dXJuIG5ldyBidChuKX1mdW5jdGlvbiBrYShlLHQpe3JldHVybiBuZXcgYnQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpMZSgpLC4uLl8odCl9KX1mdW5jdGlvbiBXKGUsdCl7cmV0dXJuIG5ldyBidCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOlooKSwuLi5fKHQpfSl9Y29uc3QgX3Q9ZCgiWm9kVW5pb24iLChlLHQpPT57a28uaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZcCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBJKGUsdCl7cmV0dXJuIG5ldyBfdCh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSwuLi5fKHQpfSl9Y29uc3QgSG89ZCgiWm9kWG9yIiwoZSx0KT0+e190LmluaXQoZSx0KSxOZC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PllwKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIFNhKGUsdCl7cmV0dXJuIG5ldyBIbyh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSxpbmNsdXNpdmU6ITEsLi4uXyh0KX0pfWNvbnN0IEZvPWQoIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9PntfdC5pbml0KGUsdCksTWQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSW4oZSx0LG4pe3JldHVybiBuZXcgRm8oe3R5cGU6InVuaW9uIixvcHRpb25zOnQsZGlzY3JpbWluYXRvcjplLC4uLl8obil9KX1jb25zdCBCbz1kKCJab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57RGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT56ZygpfSk7ZnVuY3Rpb24geXQoZSx0KXtyZXR1cm4gbmV3IEJvKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6ZSxyaWdodDp0fSl9Y29uc3QgVm89ZCgiWm9kVHVwbGUiLChlLHQpPT57SmUoKSxacy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRnKCl9LHtyZXN0KGUpe3JldHVybiB0aGlzLmNsb25lKHsuLi50aGlzLl96b2QuZGVmLHJlc3Q6ZX0pfSxwYXJ0aWFsKCl7Y29uc3QgZT10aGlzLl96b2QuZGVmO2lmKGUuY2hlY2tzPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIHR1cGxlIHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO3JldHVybiB0aGlzLmNsb25lKHsuLi5lLGl0ZW1zOmUuaXRlbXMubWFwKHQ9Pm5ldyB3dCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSkpfSl9fSk7ZnVuY3Rpb24gSm8oZSx0LG4pe2NvbnN0IG89dCBpbnN0YW5jZW9mIHoscj1vP246dCxzPW8/dDpudWxsO3JldHVybiBuZXcgVm8oe3R5cGU6InR1cGxlIixpdGVtczplLHJlc3Q6cywuLi5fKHIpfSl9Y29uc3QgVWU9ZCgiWm9kUmVjb3JkIiwoZSx0KT0+e0plKCkscWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGV9KTtmdW5jdGlvbiBFKGUsdCxuKXtyZXR1cm4hdHx8IXQuX3pvZD9uZXcgVWUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTpmKCksdmFsdWVUeXBlOmUsLi4uXyh0KX0pOm5ldyBVZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uICRhKGUsdCxuKXtyZXR1cm4gbmV3IFVlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pLHBhcnRpYWw6ITB9KX1mdW5jdGlvbiB6YShlLHQsbil7cmV0dXJuIG5ldyBVZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsbW9kZToibG9vc2UiLC4uLl8obil9KX1jb25zdCBLbz1kKCJab2RNYXAiLChlLHQpPT57SmUoKSxMZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndnKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZSxlLm1pbj0oLi4ubik9PmUuY2hlY2soSWUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhJZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soVmUoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soc3QoLi4ubikpfSk7ZnVuY3Rpb24gVGEoZSx0LG4pe3JldHVybiBuZXcgS28oe3R5cGU6Im1hcCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obil9KX1jb25zdCBXbz1kKCJab2RTZXQiLChlLHQpPT57SmUoKSxVZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtnKCksZS5taW49KC4uLm4pPT5lLmNoZWNrKEllKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soSWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKFZlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKHN0KC4uLm4pKX0pO2Z1bmN0aW9uIFBhKGUsdCl7cmV0dXJuIG5ldyBXbyh7dHlwZToic2V0Iix2YWx1ZVR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgSGU9ZCgiWm9kRW51bSIsKGUsdCk9PntIZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShvLHIscyk9PnBnKCksZS5lbnVtPXQuZW50cmllcyxlLm9wdGlvbnM9Wy4uLmUuX3pvZC52YWx1ZXNdO2NvbnN0IG49bmV3IFNldChPYmplY3Qua2V5cyh0LmVudHJpZXMpKTtlLmV4dHJhY3Q9KG8scik9Pntjb25zdCBzPXt9O2Zvcihjb25zdCBpIG9mIG8paWYobi5oYXMoaSkpc1tpXT10LmVudHJpZXNbaV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2l9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBIZSh7Li4udCxjaGVja3M6W10sLi4uXyhyKSxlbnRyaWVzOnN9KX0sZS5leGNsdWRlPShvLHIpPT57Y29uc3Qgcz17Li4udC5lbnRyaWVzfTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKWRlbGV0ZSBzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgSGUoey4uLnQsY2hlY2tzOltdLC4uLl8ociksZW50cmllczpzfSl9fSk7ZnVuY3Rpb24gRyhlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgSGUoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi5fKHQpfSl9ZnVuY3Rpb24gSWEoZSx0KXtyZXR1cm4gbmV3IEhlKHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4uXyh0KX0pfWNvbnN0IEdvPWQoIlpvZExpdGVyYWwiLChlLHQpPT57RmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5mZygpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBoKGUsdCl7cmV0dXJuIG5ldyBHbyh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4uXyh0KX0pfWNvbnN0IFlvPWQoIlpvZEZpbGUiLChlLHQpPT57QmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5nZygpLGUubWluPShuLG8pPT5lLmNoZWNrKEllKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKFZlKG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhYdChBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBVcChZbyxlKX1jb25zdCBRbz1kKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57SmUoKSxWZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnlnKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBobyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKFhlKHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBpPXM7aS5mYXRhbCYmKGkuY29udGludWU9ITEpLGkuY29kZT8/KGkuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGl8fChpLmlucHV0PW4udmFsdWUpLGkuaW5zdD8/KGkuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKFhlKGkpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24geG4oZSl7cmV0dXJuIG5ldyBRbyh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IHd0PWQoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e09zLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UXAoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBxKGUpe3JldHVybiBuZXcgd3Qoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEVuPWQoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57SmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RcCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFhvKGUpe3JldHVybiBuZXcgRW4oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IGVyPWQoIlpvZE51bGxhYmxlIiwoZSx0KT0+e0tkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBudChlKXtyZXR1cm4gbmV3IGVyKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBFYShlKXtyZXR1cm4gcShudChlKSl9Y29uc3QgdHI9ZCgiWm9kRGVmYXVsdCIsKGUsdCk9PntXZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIG5yKGUsdCl7cmV0dXJuIG5ldyB0cih7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6YW8odCl9fSl9Y29uc3Qgb3I9ZCgiWm9kUHJlZmF1bHQiLChlLHQpPT57R2QuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHJyKGUsdCl7cmV0dXJuIG5ldyBvcih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOmFvKHQpfX0pfWNvbnN0IFJuPWQoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1lkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eGcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBzcihlLHQpe3JldHVybiBuZXcgUm4oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgaXI9ZCgiWm9kU3VjY2VzcyIsKGUsdCk9PntRZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gUmEoZSl7cmV0dXJuIG5ldyBpcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBhcj1kKCJab2RDYXRjaCIsKGUsdCk9PntYZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkNnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBjcihlLHQpe3JldHVybiBuZXcgYXIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bnModCl9KX1jb25zdCB1cj1kKCJab2ROYU4iLChlLHQpPT57ZXAuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oZygpfSk7ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIHFwKHVyLGUpfWNvbnN0IGt0PWQoIlpvZFBpcGUiLChlLHQpPT57QXMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aZygpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIFp0KGUsdCl7cmV0dXJuIG5ldyBrdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IFN0PWQoIlpvZENvZGVjIiwoZSx0KT0+e2t0LmluaXQoZSx0KSxOcy5pbml0KGUsdCl9KTtmdW5jdGlvbiBaYShlLHQsbil7cmV0dXJuIG5ldyBTdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIE9hKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IFN0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBscj1kKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e2t0LmluaXQoZSx0KSx0cC5pbml0KGUsdCl9KSxkcj1kKCJab2RSZWFkb25seSIsKGUsdCk9PntucC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk9nKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gcHIoZSl7cmV0dXJuIG5ldyBkcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgZnI9ZCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e29wLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWcoKX0pO2Z1bmN0aW9uIEFhKGUsdCl7cmV0dXJuIG5ldyBmcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi5fKHQpfSl9Y29uc3QgaHI9ZCgiWm9kTGF6eSIsKGUsdCk9Pntqcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk5nKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBtcihlKXtyZXR1cm4gbmV3IGhyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IGdyPWQoIlpvZFByb21pc2UiLChlLHQpPT57c3AuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5BZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE5hKGUpe3JldHVybiBuZXcgZ3Ioe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgdnI9ZCgiWm9kRnVuY3Rpb24iLChlLHQpPT57cnAuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5fZygpfSk7ZnVuY3Rpb24gb3QoZSl7cmV0dXJuIG5ldyB2cih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP0pvKGU/LmlucHV0KTplPy5pbnB1dD8/UyhaKCkpLG91dHB1dDplPy5vdXRwdXQ/P1ooKX0pfWNvbnN0ICR0PWQoIlpvZEN1c3RvbSIsKGUsdCk9PntpcC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmJnKCl9KTtmdW5jdGlvbiBqYShlKXtjb25zdCB0PW5ldyBVKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIGJyKGUsdCl7cmV0dXJuIEhwKCR0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIF9yKGUsdD17fSl7cmV0dXJuIEZwKCR0LGUsdCl9ZnVuY3Rpb24geXIoZSx0KXtyZXR1cm4gQnAoZSx0KX1jb25zdCBNYT1KcCxEYT1LcCx3cj1kKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+eyR0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhRdChlLHQpKX19KTtmdW5jdGlvbiBxYShlLHQ9e30pe2NvbnN0IG49bmV3IHdyKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgTGE9KC4uLmUpPT5XcCh7Q29kZWM6U3QsQm9vbGVhbjpndCxTdHJpbmc6dXR9LC4uLmUpO2Z1bmN0aW9uIFVhKGUpe2NvbnN0IHQ9bXIoKCk9PkkoW2YoZSksVCgpLEEoKSx6bigpLFModCksRShmKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gQ24oZSx0KXtyZXR1cm4gbmV3IGxyKHt0eXBlOiJwaXBlIixpbjp4bihlKSxvdXQ6dH0pfWNvbnN0IEhnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6TW8sWm9kQXJyYXk6VW8sWm9kQmFzZTY0OnluLFpvZEJhc2U2NFVSTDp3bixab2RCaWdJbnQ6dnQsWm9kQmlnSW50Rm9ybWF0OiRuLFpvZEJvb2xlYW46Z3QsWm9kQ0lEUnY0OmJuLFpvZENJRFJ2Njpfbixab2RDVUlEOmRuLFpvZENVSUQyOnBuLFpvZENhdGNoOmFyLFpvZENvZGVjOlN0LFpvZENyZWRpdENhcmQ6Wm8sWm9kQ3VzdG9tOiR0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpPZSxab2REYXRlOlBuLFpvZERlZmF1bHQ6dHIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOkZvLFpvZEUxNjQ6a24sWm9kRW1haWw6YW4sWm9kRW1vamk6dW4sWm9kRW51bTpIZSxab2RFeGFjdE9wdGlvbmFsOkVuLFpvZEZpbGU6WW8sWm9kRnVuY3Rpb246dnIsWm9kR1VJRDpjbixab2RJQkFOOk9vLFpvZElQdjQ6Z24sWm9kSVB2Njp2bixab2RJU09EYXRlOmR0LFpvZElTT0RhdGVUaW1lOmx0LFpvZElTT0R1cmF0aW9uOmZ0LFpvZElTT1RpbWU6cHQsWm9kSW5zdGFuY2VPZjp3cixab2RJbnRlcnNlY3Rpb246Qm8sWm9kSldUOlNuLFpvZEtTVUlEOm1uLFpvZExhenk6aHIsWm9kTGl0ZXJhbDpHbyxab2RNQUM6Q28sWm9kTWFwOktvLFpvZE5hTjp1cixab2ROYW5vSUQ6bG4sWm9kTmV2ZXI6cW8sWm9kTm9uT3B0aW9uYWw6Um4sWm9kTnVsbDpqbyxab2ROdWxsYWJsZTplcixab2ROdW1iZXI6bXQsWm9kTnVtYmVyRm9ybWF0OkFlLFpvZE9iamVjdDpidCxab2RPcHRpb25hbDp3dCxab2RQaXBlOmt0LFpvZFByZWZhdWx0Om9yLFpvZFByZXByb2Nlc3M6bHIsWm9kUHJvbWlzZTpncixab2RSZWFkb25seTpkcixab2RSZWNvcmQ6VWUsWm9kU2V0OldvLFpvZFN0cmluZzp1dCxab2RTdHJpbmdGb3JtYXQ6Tixab2RTdWNjZXNzOmlyLFpvZFN5bWJvbDpBbyxab2RUZW1wbGF0ZUxpdGVyYWw6ZnIsWm9kVHJhbnNmb3JtOlFvLFpvZFR1cGxlOlZvLFpvZFR5cGU6UCxab2RVTElEOmZuLFpvZFVSTDpodCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpObyxab2RVbmlvbjpfdCxab2RVbmtub3duOkRvLFpvZFZvaWQ6TG8sWm9kWElEOmhuLFpvZFhvcjpIbyxfWm9kU3RyaW5nOnNuLF9kZWZhdWx0Om5yLF9mdW5jdGlvbjpvdCxhbnk6VG4sYXJyYXk6UyxiYXNlNjQ6ZWEsYmFzZTY0dXJsOnRhLGJpZ2ludDptYSxib29sZWFuOkEsY2F0Y2g6Y3IsY2hlY2s6amEsY2lkcnY0OlFpLGNpZHJ2NjpYaSxjb2RlYzpaYSxjcmVkaXRDYXJkOm9hLGN1aWQ6RmksY3VpZDI6QmksY3VycmVuY3lDb2RlOnVhLGN1c3RvbTpicixkYXRlOnlhLGRlc2NyaWJlOk1hLGRpc2NyaW1pbmF0ZWRVbmlvbjpJbixlMTY0Om5hLGVtYWlsOk9pLGVtb2ppOlVpLGVudW06RyxleGFjdE9wdGlvbmFsOlhvLGZpbGU6eGEsZmxvYXQzMjpkYSxmbG9hdDY0OnBhLGZ1bmN0aW9uOm90LGd1aWQ6QWksaGFzaDpsYSxoZXg6Y2EsaG9zdG5hbWU6YWEsaHR0cFVybDpMaSxpYmFuOnJhLGluc3RhbmNlb2Y6cWEsaW50OkN0LGludDMyOmZhLGludDY0OmdhLGludGVyc2VjdGlvbjp5dCxpbnZlcnRDb2RlYzpPYSxpcHY0OldpLGlwdjY6WWksanNvbjpVYSxqd3Q6c2Esa2V5b2Y6d2Esa3N1aWQ6S2ksbGF6eTptcixsaXRlcmFsOmgsbG9vc2VPYmplY3Q6Vyxsb29zZVJlY29yZDp6YSxtYWM6R2ksbWFwOlRhLG1ldGE6RGEsbmFuOkNhLG5hbm9pZDpIaSxuYXRpdmVFbnVtOklhLG5ldmVyOkxlLG5vbm9wdGlvbmFsOnNyLG51bGw6em4sbnVsbGFibGU6bnQsbnVsbGlzaDpFYSxudW1iZXI6VCxvYmplY3Q6dixvcHRpb25hbDpxLHBhcnRpYWxSZWNvcmQ6JGEscGlwZTpadCxwcmVmYXVsdDpycixwcmVwcm9jZXNzOkNuLHByb21pc2U6TmEscmVhZG9ubHk6cHIscmVjb3JkOkUscmVmaW5lOl9yLHNldDpQYSxzdHJpY3RPYmplY3Q6a2Esc3RyaW5nOmYsc3RyaW5nRm9ybWF0OmlhLHN0cmluZ2Jvb2w6TGEsc3VjY2VzczpSYSxzdXBlclJlZmluZTp5cixzeW1ib2w6YmEsdGVtcGxhdGVMaXRlcmFsOkFhLHRyYW5zZm9ybTp4bix0dXBsZTpKbyx1aW50MzI6aGEsdWludDY0OnZhLHVsaWQ6VmksdW5kZWZpbmVkOnR0LHVuaW9uOkksdW5rbm93bjpaLHVybDpxaSx1dWlkOk5pLHV1aWR2NDpqaSx1dWlkdjY6TWksdXVpZHY3OkRpLHZvaWQ6X2EseGlkOkppLHhvcjpTYX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxvZj17aW52YWxpZF90eXBlOiJpbnZhbGlkX3R5cGUiLHRvb19iaWc6InRvb19iaWciLHRvb19zbWFsbDoidG9vX3NtYWxsIixpbnZhbGlkX2Zvcm1hdDoiaW52YWxpZF9mb3JtYXQiLG5vdF9tdWx0aXBsZV9vZjoibm90X211bHRpcGxlX29mIix1bnJlY29nbml6ZWRfa2V5czoidW5yZWNvZ25pemVkX2tleXMiLGludmFsaWRfdW5pb246ImludmFsaWRfdW5pb24iLGludmFsaWRfa2V5OiJpbnZhbGlkX2tleSIsaW52YWxpZF9lbGVtZW50OiJpbnZhbGlkX2VsZW1lbnQiLGludmFsaWRfdmFsdWU6ImludmFsaWRfdmFsdWUiLGN1c3RvbToiY3VzdG9tIn07ZnVuY3Rpb24gcmYoZSl7Sih7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIHNmKCl7cmV0dXJuIEooKS5jdXN0b21FcnJvcn12YXIgbm87bm98fChubz17fSk7ZnVuY3Rpb24gYWYoZSl7cmV0dXJuIG1pKGx0LGUpfWZ1bmN0aW9uIEZnKGUpe3JldHVybiBnaShkdCxlKX1mdW5jdGlvbiBCZyhlKXtyZXR1cm4gdmkocHQsZSl9ZnVuY3Rpb24gVmcoZSl7cmV0dXJuIGJpKGZ0LGUpfWNvbnN0IEhhPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RJU09EYXRlOmR0LFpvZElTT0RhdGVUaW1lOmx0LFpvZElTT0R1cmF0aW9uOmZ0LFpvZElTT1RpbWU6cHQsZGF0ZTpGZyxkYXRldGltZTphZixkdXJhdGlvbjpWZyx0aW1lOkJnfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHc9ey4uLkhnLC4uLkxnLGlzbzpIYX0sSmc9bmV3IFNldChbIiRzY2hlbWEiLCIkcmVmIiwiJGRlZnMiLCJkZWZpbml0aW9ucyIsIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIiwidHlwZSIsImVudW0iLCJjb25zdCIsImFueU9mIiwib25lT2YiLCJhbGxPZiIsIm5vdCIsInByb3BlcnRpZXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVzIiwibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiLCJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwibWluSXRlbXMiLCJtYXhJdGVtcyIsInVuaXF1ZUl0ZW1zIiwiY29udGFpbnMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIiwibWluTGVuZ3RoIiwibWF4TGVuZ3RoIiwicGF0dGVybiIsImZvcm1hdCIsIm1pbmltdW0iLCJtYXhpbXVtIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtdWx0aXBsZU9mIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiaWYiLCJ0aGVuIiwiZWxzZSIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbnRSZXF1aXJlZCIsIm51bGxhYmxlIiwicmVhZE9ubHkiXSk7ZnVuY3Rpb24gS2coZSx0KXtjb25zdCBuPWUuJHNjaGVtYTtyZXR1cm4gbj09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI/ImRyYWZ0LTIwMjAtMTIiOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIj8iZHJhZnQtNyI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiPyJkcmFmdC00Ijp0Pz8iZHJhZnQtMjAyMC0xMiJ9ZnVuY3Rpb24gSGMoZSx0KXtyZXR1cm4gZS5tYXAoKG4sbyk9Pm88dD9uOm4ub3B0aW9uYWwoKSl9ZnVuY3Rpb24gV2coZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBHZyhlLHQpe2lmKCFlLnN0YXJ0c1dpdGgoIiMiKSl0aHJvdyBuZXcgRXJyb3IoIkV4dGVybmFsICRyZWYgaXMgbm90IHN1cHBvcnRlZCwgb25seSBsb2NhbCByZWZzICgjLy4uLikgYXJlIGFsbG93ZWQiKTtjb25zdCBuPWUuc2xpY2UoMSkuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0LnJvb3RTY2hlbWE7Y29uc3Qgbz10LnZlcnNpb249PT0iZHJhZnQtMjAyMC0xMiI/IiRkZWZzIjoiZGVmaW5pdGlvbnMiO2lmKG5bMF09PT1vKXtjb25zdCByPW5bMV09PT12b2lkIDA/dm9pZCAwOldnKG5bMV0pO2lmKCFyfHwhdC5kZWZzW3JdKXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiB0LmRlZnNbcl19dGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCl9ZnVuY3Rpb24gWWcoZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZih0eXBlb2YgciE9Im9iamVjdCJ8fHI9PT1udWxsfHxBcnJheS5pc0FycmF5KHIpKXJldHVybjtjb25zdCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpO2lmKHQubWluUHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluUHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIHNtYWxsOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA+PSR7dC5taW5Qcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQubWF4UHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heFByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBiaWc6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlIDw9JHt0Lm1heFByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5rZXlTY2hlbWEpZm9yKGNvbnN0IGkgb2Ygcyl7Y29uc3QgYT10LmtleVNjaGVtYS5zYWZlUGFyc2UoaSk7YS5zdWNjZXNzfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczphLmVycm9yLmlzc3VlcyxpbnB1dDppLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fSkucGlwZShlKX1mdW5jdGlvbiBKcihlLHQpe2lmKGU9PT1udWxsKXJldHVybiJ6Ijtjb25zdCBuPXR5cGVvZiBlO2lmKG4hPT0ib2JqZWN0Iil7aWYobj09PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1TdHJpbmcoZSk7cmV0dXJuYCR7blswXX0ke28ubGVuZ3RofToke299YH1pZih0LmhhcyhlKSlyZXR1cm4gbnVsbDt0LmFkZChlKTt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcz1bXTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBhPUpyKGksdCk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7cy5wdXNoKGEpfXJldHVybmBhJHtzLmxlbmd0aH06WyR7cy5qb2luKCIsIil9XWB9Y29uc3Qgbz1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1bXTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBpPUpyKGVbc10sdCk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7ci5wdXNoKGAke3MubGVuZ3RofToke3N9PSR7aX1gKX1yZXR1cm5gbyR7ci5sZW5ndGh9Onske3Iuam9pbigiLCIpfX1gfWZpbmFsbHl7dC5kZWxldGUoZSl9fWNvbnN0IFFnPW5ldyBTZXQoWyJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb250YWlucyIsInByb3BlcnR5TmFtZXMiLCJub3QiLCJpZiIsInRoZW4iLCJlbHNlIiwiYWxsT2YiLCJhbnlPZiIsIm9uZU9mIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImNvbnRlbnRTY2hlbWEiXSksWGc9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbmNpZXMiLCIkZGVmcyIsImRlZmluaXRpb25zIl0pO2Z1bmN0aW9uIHh0KGUpe3JldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKHh0KTp0eXBlb2YgZS4kcmVmPT0ic3RyaW5nIj8hMDpPYmplY3QuZW50cmllcyhlKS5zb21lKChbdCxuXSk9PlFnLmhhcyh0KT94dChuKTohWGcuaGFzKHQpfHx0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsPyExOk9iamVjdC52YWx1ZXMobikuc29tZSh4dCkpfWZ1bmN0aW9uIEZjKGUpe3JldHVybiBlPT09MT8iZWxlbWVudCI6ImVsZW1lbnRzIn1mdW5jdGlvbiBldihlLHQpe3JldHVybiB3LnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHQudW5pcXVlSXRlbXM9PT0hMCl7Y29uc3Qgcz1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPUpyKHJbaV0sbmV3IFNldCk7aWYoYT09PW51bGwpY29udGludWU7Y29uc3QgYz1zLmdldChhKTtpZihjPT09dm9pZCAwKXtzLnNldChhLGkpO2NvbnRpbnVlfW8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgaXRlbXMgbXVzdCBiZSB1bmlxdWU6IGVsZW1lbnQgYXQgaW5kZXggJHtpfSBkdXBsaWNhdGVzIHRoZSBvbmUgYXQgaW5kZXggJHtjfWAsaW5wdXQ6cixwYXRoOltpXSxjb250aW51ZTohMH0pfX1pZih0LmNvbnRhaW5zU2NoZW1hKXtjb25zdCBzPXQubWluQ29udGFpbnM/PzEsaT10Lm1heENvbnRhaW5zIT09dm9pZCAwP3QubWF4Q29udGFpbnMrMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGE9MDtmb3IoY29uc3QgYyBvZiByKWlmKHQuY29udGFpbnNTY2hlbWEuc2FmZVBhcnNlKGMpLnN1Y2Nlc3MmJisrYT49aSlicmVhazthPHMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7c30gbWF0Y2hpbmcgJHtGYyhzKX07IGZvdW5kICR7YX1gLGlucHV0OnIsY29udGludWU6ITB9KSx0Lm1heENvbnRhaW5zIT09dm9pZCAwJiZhPnQubWF4Q29udGFpbnMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IG1vc3QgJHt0Lm1heENvbnRhaW5zfSBtYXRjaGluZyAke0ZjKHQubWF4Q29udGFpbnMpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pfX19KS5waXBlKGUpfWZ1bmN0aW9uIEJjKGUsdCl7aWYoZSE9PSExKXJldHVybiBlPT09dm9pZCAwfHxlPT09ITA/dy5hbnkoKTp0ZShlLHQpfWNvbnN0IHR2PS9eKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZDpbMC01XVxkKD86XC5cZCspPyg/Olp8WystXSg/OlswMV1cZHwyWzAtM10pOlswLTVdXGQpJC87ZnVuY3Rpb24gY2YoZSx0KXtpZihlLm5vdCE9PXZvaWQgMCl7aWYodHlwZW9mIGUubm90PT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZS5ub3QpLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpcyBub3Qgc3VwcG9ydGVkIGluIFpvZCAoZXhjZXB0IHsgbm90OiB7fSB9IGZvciBuZXZlcikiKX1pZihlLnVuZXZhbHVhdGVkSXRlbXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLnVuZXZhbHVhdGVkUHJvcGVydGllcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkUHJvcGVydGllcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5pZiE9PXZvaWQgMHx8ZS50aGVuIT09dm9pZCAwfHxlLmVsc2UhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb25kaXRpb25hbCBzY2hlbWFzIChpZi90aGVuL2Vsc2UpIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS5kZXBlbmRlbnRTY2hlbWFzIT09dm9pZCAwfHxlLmRlcGVuZGVudFJlcXVpcmVkIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLiRyZWYpe2NvbnN0IHI9ZS4kcmVmO2lmKHQucmVmcy5oYXMocikpcmV0dXJuIHQucmVmcy5nZXQocik7aWYodC5wcm9jZXNzaW5nLmhhcyhyKSlyZXR1cm4gdy5sYXp5KCgpPT57aWYoIXQucmVmcy5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3J9YCk7cmV0dXJuIHQucmVmcy5nZXQocil9KTt0LnByb2Nlc3NpbmcuYWRkKHIpO2NvbnN0IHM9R2cocix0KSxpPXRlKHMsdCk7cmV0dXJuIHQucmVmcy5zZXQocixpKSx0LnByb2Nlc3NpbmcuZGVsZXRlKHIpLGl9aWYoZS5lbnVtIT09dm9pZCAwKXtjb25zdCByPWUuZW51bTtpZih0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiZlLm51bGxhYmxlPT09ITAmJnIubGVuZ3RoPT09MSYmclswXT09PW51bGwpcmV0dXJuIHcubnVsbCgpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gdy5uZXZlcigpO2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gdy5saXRlcmFsKHJbMF0pO2lmKHIuZXZlcnkoaT0+dHlwZW9mIGk9PSJzdHJpbmciKSlyZXR1cm4gdy5lbnVtKHIpO2NvbnN0IHM9ci5tYXAoaT0+dy5saXRlcmFsKGkpKTtyZXR1cm4gcy5sZW5ndGg8Mj9zWzBdOncudW5pb24oW3NbMF0sc1sxXSwuLi5zLnNsaWNlKDIpXSl9aWYoZS5jb25zdCE9PXZvaWQgMClyZXR1cm4gdy5saXRlcmFsKGUuY29uc3QpO2NvbnN0IG49ZS50eXBlO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IHI9bi5tYXAocz0+e2NvbnN0IGk9ey4uLmUsdHlwZTpzfTtyZXR1cm4gY2YoaSx0KX0pO3JldHVybiByLmxlbmd0aD09PTA/dy5uZXZlcigpOnIubGVuZ3RoPT09MT9yWzBdOncudW5pb24ocil9aWYoIW4pcmV0dXJuIHcuYW55KCk7bGV0IG87c3dpdGNoKG4pe2Nhc2Uic3RyaW5nIjp7bGV0IHI9dy5zdHJpbmcoKTtpZihlLmZvcm1hdCl7Y29uc3Qgcz1lLmZvcm1hdDtzPT09ImVtYWlsIj9yPXIuY2hlY2sody5lbWFpbCgpKTpzPT09InVyaSJ8fHM9PT0idXJpLXJlZmVyZW5jZSI/cj1yLmNoZWNrKHcudXJsKCkpOnM9PT0idXVpZCJ8fHM9PT0iZ3VpZCI/cj1yLmNoZWNrKHcudXVpZCgpKTpzPT09ImRhdGUtdGltZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGV0aW1lKHtvZmZzZXQ6ITB9KSk6cz09PSJkYXRlIj9yPXIuY2hlY2sody5pc28uZGF0ZSgpKTpzPT09InRpbWUiP3I9ci5jaGVjayh3LnJlZ2V4KHR2KSk6cz09PSJkdXJhdGlvbiI/cj1yLmNoZWNrKHcuaXNvLmR1cmF0aW9uKCkpOnM9PT0iaG9zdG5hbWUiP3I9ci5jaGVjayh3Lmhvc3RuYW1lKCkpOnM9PT0iaXB2NCI/cj1yLmNoZWNrKHcuaXB2NCgpKTpzPT09ImlwdjYiP3I9ci5jaGVjayh3LmlwdjYoKSk6cz09PSJtYWMiP3I9ci5jaGVjayh3Lm1hYygpKTpzPT09ImNpZHIiP3I9ci5jaGVjayh3LmNpZHJ2NCgpKTpzPT09ImNpZHItdjYiP3I9ci5jaGVjayh3LmNpZHJ2NigpKTpzPT09ImJhc2U2NCI/cj1yLmNoZWNrKHcuYmFzZTY0KCkpOnM9PT0iYmFzZTY0dXJsIj9yPXIuY2hlY2sody5iYXNlNjR1cmwoKSk6cz09PSJlMTY0Ij9yPXIuY2hlY2sody5lMTY0KCkpOnM9PT0iY3JlZGl0X2NhcmQiP3I9ci5jaGVjayh3LmNyZWRpdENhcmQoKSk6cz09PSJpYmFuIj9yPXIuY2hlY2sody5pYmFuKCkpOnM9PT0iand0Ij9yPXIuY2hlY2sody5qd3QoKSk6cz09PSJlbW9qaSI/cj1yLmNoZWNrKHcuZW1vamkoKSk6cz09PSJuYW5vaWQiP3I9ci5jaGVjayh3Lm5hbm9pZCgpKTpzPT09ImN1aWQiP3I9ci5jaGVjayh3LmN1aWQoKSk6cz09PSJjdWlkMiI/cj1yLmNoZWNrKHcuY3VpZDIoKSk6cz09PSJ1bGlkIj9yPXIuY2hlY2sody51bGlkKCkpOnM9PT0ieGlkIj9yPXIuY2hlY2sody54aWQoKSk6cz09PSJrc3VpZCImJihyPXIuY2hlY2sody5rc3VpZCgpKSl9dHlwZW9mIGUubWluTGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5taW4oZS5taW5MZW5ndGgpKSx0eXBlb2YgZS5tYXhMZW5ndGg9PSJudW1iZXIiJiYocj1yLm1heChlLm1heExlbmd0aCkpLGUucGF0dGVybiYmKHI9ci5yZWdleChuZXcgUmVnRXhwKGUucGF0dGVybikpKSxvPXI7YnJlYWt9Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6e2xldCByPW49PT0iaW50ZWdlciI/dy5udW1iZXIoKS5pbnQoKTp3Lm51bWJlcigpO3R5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1pbmltdW0hPT0hMCYmKHI9ci5taW4oZS5taW5pbXVtKSksdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWF4aW11bSE9PSEwJiYocj1yLm1heChlLm1heGltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNaW5pbXVtPT0ibnVtYmVyIj9yPXIuZ3QoZS5leGNsdXNpdmVNaW5pbXVtKTplLmV4Y2x1c2l2ZU1pbmltdW09PT0hMCYmdHlwZW9mIGUubWluaW11bT09Im51bWJlciImJihyPXIuZ3QoZS5taW5pbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWF4aW11bT09Im51bWJlciI/cj1yLmx0KGUuZXhjbHVzaXZlTWF4aW11bSk6ZS5leGNsdXNpdmVNYXhpbXVtPT09ITAmJnR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiYocj1yLmx0KGUubWF4aW11bSkpLHR5cGVvZiBlLm11bHRpcGxlT2Y9PSJudW1iZXIiJiYocj1yLm11bHRpcGxlT2YoZS5tdWx0aXBsZU9mKSksbz1yO2JyZWFrfWNhc2UiYm9vbGVhbiI6e289dy5ib29sZWFuKCk7YnJlYWt9Y2FzZSJudWxsIjp7bz13Lm51bGwoKTticmVha31jYXNlIm9iamVjdCI6e2NvbnN0IHI9e30scz1lLnByb3BlcnRpZXN8fHt9LGk9bmV3IFNldChlLnJlcXVpcmVkfHxbXSksYT10eXBlb2YgZS5hZGRpdGlvbmFsUHJvcGVydGllcz09Im9iamVjdCI/dGUoZS5hZGRpdGlvbmFsUHJvcGVydGllcyx0KTp2b2lkIDA7Zm9yKGNvbnN0W3AsZ11vZiBPYmplY3QuZW50cmllcyhzKSl7Y29uc3QgYj10ZShnLHQpO0JlKHIscCxpLmhhcyhwKT9iOmIub3B0aW9uYWwoKSl9aWYoZS5wYXR0ZXJuUHJvcGVydGllcyl7Y29uc3QgcD1lLnBhdHRlcm5Qcm9wZXJ0aWVzLGc9T2JqZWN0LmtleXMocCksYj1bXTtmb3IoY29uc3QgayBvZiBnKXtjb25zdCAkPXRlKHBba10sdCksaj13LnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAoaykpO2IucHVzaCh3Lmxvb3NlUmVjb3JkKGosJCkpfWNvbnN0IHk9W107aWYoT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnkucHVzaCh3Lm9iamVjdChyKS5wYXNzdGhyb3VnaCgpKSx5LnB1c2goLi4uYikseS5sZW5ndGg9PT0wKW89dy5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCk7ZWxzZSBpZih5Lmxlbmd0aD09PTEpbz15WzBdO2Vsc2V7bGV0IGs9dy5pbnRlcnNlY3Rpb24oeVswXSx5WzFdKTtmb3IobGV0ICQ9MjskPHkubGVuZ3RoOyQrKylrPXcuaW50ZXJzZWN0aW9uKGsseVskXSk7bz1rfWlmKGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSl7Y29uc3Qgaz1PYmplY3Qua2V5cyhyKSwkPWcubWFwKFI9Pm5ldyBSZWdFeHAoUikpLGo9bztvPW8uY2hlY2soUj0+e2lmKCFDZShSLnZhbHVlKSlyZXR1cm47Y29uc3QgRj1bXTtmb3IoY29uc3Qgb2Ugb2YgT2JqZWN0LmtleXMoUi52YWx1ZSkpay5pbmNsdWRlcyhvZSl8fCQuc29tZShCPT5CLnRlc3Qob2UpKXx8Ri5wdXNoKG9lKTtGLmxlbmd0aCYmUi5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6RixpbnB1dDpSLnZhbHVlLGluc3Q6an0pfSl9fWVsc2V7Y29uc3QgcD13Lm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1wLnN0cmljdCgpOmE/bz1wLmNhdGNoYWxsKGEpOm89cC5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCx1PXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsbD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fHUhPT12b2lkIDB8fGwhPT12b2lkIDApe2xldCBwO2lmKGMpe2NvbnN0IGc9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO3A9dGUoZyx0KX1vPVlnKG8se2tleVNjaGVtYTpwLG1pblByb3BlcnRpZXM6dSxtYXhQcm9wZXJ0aWVzOmx9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChwPT50ZShwLHQpKSxjPUhjKGEsaSksdT1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpCYyhzLHQpLGw9dy50dXBsZShjKTtvPXU/bC5yZXN0KHUpOmwsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChwPT50ZShwLHQpKSxjPUhjKGEsaSksdT1CYyhlLmFkZGl0aW9uYWxJdGVtcyx0KSxsPXcudHVwbGUoYyk7bz11P2wucmVzdCh1KTpsLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT10ZShzLHQpO2xldCBhPXcuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz13LmFycmF5KHcuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1ldihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD90ZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gdGUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP3cuYW55KCk6dy5uZXZlcigpO2xldCBuPWNmKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKHU9PnRlKHUsdCkpLGM9dy51bmlvbihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAodT0+dGUodSx0KSksYz13LnhvcihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOncuYW55KCk7ZWxzZXtsZXQgYT1vP246dGUoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgdT1jO3U8ZS5hbGxPZi5sZW5ndGg7dSsrKWE9dy5pbnRlcnNlY3Rpb24oYSx0ZShlLmFsbE9mW3VdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj13Lm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPXcucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiF4dChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYheHQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSlKZy5oYXMoYSl8fEJlKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiB1ZihlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/dy5hbnkoKTp3Lm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1LZyhuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/cGV9O3JldHVybiB0ZShuLHMpfWZ1bmN0aW9uIGxmKGUpe3JldHVybiB5aShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6SShuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIG52KGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEgoZSxYKG4se2NoZWNrczpbLi4ubi5jaGVja3M/P1tdLC4uLnRdfSkse3BhcmVudDohMH0pfWZ1bmN0aW9uIGRmKGUpe3JldHVybiBudihlLm91dCxlLmNoZWNrcyl9ZnVuY3Rpb24gb3YoZSl7cmV0dXJuIGUuaW4uX3pvZC50cmFpdHMuaGFzKCIkWm9kVHJhbnNmb3JtIik/ZGYoZSk6ZS5pbn1mdW5jdGlvbiBwZihlKXtyZXR1cm4geWkoZSx7cGlwZTp0PT5vdih0Ll96b2QuZGVmKSxkZWZhdWx0Oih0LG4pPT5uP3EodC5fem9kLmRlZi5pbm5lclR5cGUpOnQsY2F0Y2g6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGZmKGUpe3JldHVybiB5aShlLHtwaXBlOnQ9PmRmKHQuX3pvZC5kZWYpLHByZWZhdWx0Oih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBydihlKXtyZXR1cm4gaHAodXQsZSl9ZnVuY3Rpb24gc3YoZSl7cmV0dXJuIF9wKG10LGUpfWZ1bmN0aW9uIGl2KGUpe3JldHVybiBUcChndCxlKX1mdW5jdGlvbiBhdihlKXtyZXR1cm4gSXAodnQsZSl9ZnVuY3Rpb24gY3YoZSl7cmV0dXJuIERwKFBuLGUpfWNvbnN0IGhmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiaWdpbnQ6YXYsYm9vbGVhbjppdixkYXRlOmN2LG51bWJlcjpzdixzdHJpbmc6cnZ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVmM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpzcywkaW5wdXQ6cXMsJG91dHB1dDpEcyxJTlZBTElEOlVzLE5FVkVSOnJzLFRpbWVQcmVjaXNpb246aGksWm9kQW55Ok1vLFpvZEFycmF5OlVvLFpvZEJhc2U2NDp5bixab2RCYXNlNjRVUkw6d24sWm9kQmlnSW50OnZ0LFpvZEJpZ0ludEZvcm1hdDokbixab2RCb29sZWFuOmd0LFpvZENJRFJ2NDpibixab2RDSURSdjY6X24sWm9kQ1VJRDpkbixab2RDVUlEMjpwbixab2RDYXRjaDphcixab2RDb2RlYzpTdCxab2RDb21waWxlQXN5bmNFcnJvcjpIcyxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpGcyxab2RDcmVkaXRDYXJkOlpvLFpvZEN1c3RvbTokdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6T2UsWm9kRGF0ZTpQbixab2REZWZhdWx0OnRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpGbyxab2RFMTY0OmtuLFpvZEVtYWlsOmFuLFpvZEVtb2ppOnVuLFpvZEVudW06SGUsWm9kRXJyb3I6bmYsWm9kRXhhY3RPcHRpb25hbDpFbixab2RGaWxlOllvLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gbm99LFpvZEZ1bmN0aW9uOnZyLFpvZEdVSUQ6Y24sWm9kSUJBTjpPbyxab2RJUHY0OmduLFpvZElQdjY6dm4sWm9kSVNPRGF0ZTpkdCxab2RJU09EYXRlVGltZTpsdCxab2RJU09EdXJhdGlvbjpmdCxab2RJU09UaW1lOnB0LFpvZEluc3RhbmNlT2Y6d3IsWm9kSW50ZXJzZWN0aW9uOkJvLFpvZElzc3VlQ29kZTpvZixab2RKV1Q6U24sWm9kS1NVSUQ6bW4sWm9kTGF6eTpocixab2RMaXRlcmFsOkdvLFpvZE1BQzpDbyxab2RNYXA6S28sWm9kTmFOOnVyLFpvZE5hbm9JRDpsbixab2ROZXZlcjpxbyxab2ROb25PcHRpb25hbDpSbixab2ROdWxsOmpvLFpvZE51bGxhYmxlOmVyLFpvZE51bWJlcjptdCxab2ROdW1iZXJGb3JtYXQ6QWUsWm9kT2JqZWN0OmJ0LFpvZE9wdGlvbmFsOnd0LFpvZFBpcGU6a3QsWm9kUHJlZmF1bHQ6b3IsWm9kUHJlcHJvY2Vzczpscixab2RQcm9taXNlOmdyLFpvZFJlYWRvbmx5OmRyLFpvZFJlYWxFcnJvcjpzZSxab2RSZWNvcmQ6VWUsWm9kU2V0OldvLFpvZFN0cmluZzp1dCxab2RTdHJpbmdGb3JtYXQ6Tixab2RTdWNjZXNzOmlyLFpvZFN5bWJvbDpBbyxab2RUZW1wbGF0ZUxpdGVyYWw6ZnIsWm9kVHJhbnNmb3JtOlFvLFpvZFR1cGxlOlZvLFpvZFR5cGU6UCxab2RVTElEOmZuLFpvZFVSTDpodCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpObyxab2RVbmlvbjpfdCxab2RVbmtub3duOkRvLFpvZFZvaWQ6TG8sWm9kWElEOmhuLFpvZFhvcjpIbyxfWm9kU3RyaW5nOnNuLF9kZWZhdWx0Om5yLF9mdW5jdGlvbjpvdCxhbnk6VG4sYXJyYXk6UyxiYXNlNjQ6ZWEsYmFzZTY0dXJsOnRhLGJpZ2ludDptYSxib29sZWFuOkEsY2F0Y2g6Y3IsY2hlY2s6amEsY2lkcnY0OlFpLGNpZHJ2NjpYaSxjbG9uZTpILGNvZGVjOlphLGNvZXJjZTpoZixjb21waWxlOkJzLGNvbmZpZzpKLGNvcmU6WHAsY3JlZGl0Q2FyZDpvYSxjdWlkOkZpLGN1aWQyOkJpLGN1cnJlbmN5Q29kZTp1YSxjdXN0b206YnIsZGF0ZTp5YSxkZWNvZGU6UGksZGVjb2RlQXN5bmM6eGksZGVlcFBhcnRpYWw6bGYsZGVzY3JpYmU6TWEsZGlzY3JpbWluYXRlZFVuaW9uOkluLGUxNjQ6bmEsZW1haWw6T2ksZW1vamk6VWksZW5jb2RlOlRpLGVuY29kZUFzeW5jOklpLGVuZHNXaXRoOll0LGVudW06RyxleGFjdE9wdGlvbmFsOlhvLGZpbGU6eGEsZmxhdHRlbkVycm9yOm1vLGZsb2F0MzI6ZGEsZmxvYXQ2NDpwYSxmb3JtYXRFcnJvcjpnbyxmcm9tSlNPTlNjaGVtYTp1ZixmdW5jdGlvbjpvdCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkNzLGdldEVycm9yTWFwOnNmLGdsb2JhbFJlZ2lzdHJ5OnBlLGd0OlBlLGd0ZTpjZSxndWlkOkFpLGhhc2g6bGEsaGV4OmNhLGhvc3RuYW1lOmFhLGh0dHBVcmw6TGksaWJhbjpyYSxpbmNsdWRlczpXdCxpbnB1dDpwZixpbnN0YW5jZW9mOnFhLGludDpDdCxpbnQzMjpmYSxpbnQ2NDpnYSxpbnRlcnNlY3Rpb246eXQsaW52ZXJ0Q29kZWM6T2EsaXB2NDpXaSxpcHY2OllpLGlzbzpIYSxqc29uOlVhLGp3dDpzYSxrZXlvZjp3YSxrc3VpZDpLaSxsYXp5Om1yLGxlbmd0aDphdCxsaXRlcmFsOmgsbG9jYWxlczpNcyxsb29zZU9iamVjdDpXLGxvb3NlUmVjb3JkOnphLGxvd2VyY2FzZTpKdCxsdDpUZSxsdGU6YWUsbWFjOkdpLG1hcDpUYSxtYXhMZW5ndGg6aXQsbWF4U2l6ZTpWZSxtZW1vaXplcjpTbyxtZXRhOkRhLG1pbWU6WHQsbWluTGVuZ3RoOlplLG1pblNpemU6SWUsbXVsdGlwbGVPZjpxZSxuYW46Q2EsbmFub2lkOkhpLG5hdGl2ZUVudW06SWEsbmVnYXRpdmU6SW8sbmV2ZXI6TGUsbm9ubmVnYXRpdmU6RW8sbm9ub3B0aW9uYWw6c3Isbm9ucG9zaXRpdmU6eG8sbm9ybWFsaXplOmVuLG51bGw6em4sbnVsbGFibGU6bnQsbnVsbGlzaDpFYSxudW1iZXI6VCxvYmplY3Q6dixvcHRpb25hbDpxLG91dHB1dDpmZixvdmVyd3JpdGU6d2UscGFyc2U6a2kscGFyc2VBc3luYzpTaSxwYXJ0aWFsUmVjb3JkOiRhLHBpcGU6WnQscG9zaXRpdmU6UG8scHJlZmF1bHQ6cnIscHJlcHJvY2VzczpDbixwcmV0dGlmeUVycm9yOmFzLHByb21pc2U6TmEscHJvcGVydGllczpRdCxwcm9wZXJ0eTpSbyxyZWFkb25seTpwcixyZWNvcmQ6RSxyZWZpbmU6X3IscmVnZXg6VnQscmVnZXhlczp3byxyZWdpc3RyeTokbyxzYWZlRGVjb2RlOlJpLHNhZmVEZWNvZGVBc3luYzpaaSxzYWZlRW5jb2RlOkVpLHNhZmVFbmNvZGVBc3luYzpDaSxzYWZlUGFyc2U6JGksc2FmZVBhcnNlQXN5bmM6emksc2V0OlBhLHNldEVycm9yTWFwOnJmLHNpemU6c3Qsc2x1Z2lmeTpybixzdGFydHNXaXRoOkd0LHN0cmljdE9iamVjdDprYSxzdHJpbmc6ZixzdHJpbmdGb3JtYXQ6aWEsc3RyaW5nYm9vbDpMYSxzdWNjZXNzOlJhLHN1cGVyUmVmaW5lOnlyLHN5bWJvbDpiYSx0ZW1wbGF0ZUxpdGVyYWw6QWEsdG9KU09OU2NoZW1hOl9pLHRvTG93ZXJDYXNlOm5uLHRvVXBwZXJDYXNlOm9uLHRvWm9kOnNvLHRyYW5zZm9ybTp4bix0cmVlaWZ5RXJyb3I6aXMsdHJpbTp0bix0dXBsZTpKbyx1aW50MzI6aGEsdWludDY0OnZhLHVsaWQ6VmksdW5kZWZpbmVkOnR0LHVuaW9uOkksdW5rbm93bjpaLHVwcGVyY2FzZTpLdCx1cmw6cWksdXRpbDpvcyx1dWlkOk5pLHV1aWR2NDpqaSx1dWlkdjY6TWksdXVpZHY3OkRpLHZhbGlkYXRlOmJvLHZhbGlkYXRlQXN5bmM6X28sdm9pZDpfYSx3aXRoUGFyc2VyOlZzLHhpZDpKaSx4b3I6U2F9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksdXY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpzcywkaW5wdXQ6cXMsJG91dHB1dDpEcyxJTlZBTElEOlVzLE5FVkVSOnJzLFRpbWVQcmVjaXNpb246aGksWm9kQW55Ok1vLFpvZEFycmF5OlVvLFpvZEJhc2U2NDp5bixab2RCYXNlNjRVUkw6d24sWm9kQmlnSW50OnZ0LFpvZEJpZ0ludEZvcm1hdDokbixab2RCb29sZWFuOmd0LFpvZENJRFJ2NDpibixab2RDSURSdjY6X24sWm9kQ1VJRDpkbixab2RDVUlEMjpwbixab2RDYXRjaDphcixab2RDb2RlYzpTdCxab2RDb21waWxlQXN5bmNFcnJvcjpIcyxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpGcyxab2RDcmVkaXRDYXJkOlpvLFpvZEN1c3RvbTokdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6T2UsWm9kRGF0ZTpQbixab2REZWZhdWx0OnRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpGbyxab2RFMTY0OmtuLFpvZEVtYWlsOmFuLFpvZEVtb2ppOnVuLFpvZEVudW06SGUsWm9kRXJyb3I6bmYsWm9kRXhhY3RPcHRpb25hbDpFbixab2RGaWxlOllvLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gbm99LFpvZEZ1bmN0aW9uOnZyLFpvZEdVSUQ6Y24sWm9kSUJBTjpPbyxab2RJUHY0OmduLFpvZElQdjY6dm4sWm9kSVNPRGF0ZTpkdCxab2RJU09EYXRlVGltZTpsdCxab2RJU09EdXJhdGlvbjpmdCxab2RJU09UaW1lOnB0LFpvZEluc3RhbmNlT2Y6d3IsWm9kSW50ZXJzZWN0aW9uOkJvLFpvZElzc3VlQ29kZTpvZixab2RKV1Q6U24sWm9kS1NVSUQ6bW4sWm9kTGF6eTpocixab2RMaXRlcmFsOkdvLFpvZE1BQzpDbyxab2RNYXA6S28sWm9kTmFOOnVyLFpvZE5hbm9JRDpsbixab2ROZXZlcjpxbyxab2ROb25PcHRpb25hbDpSbixab2ROdWxsOmpvLFpvZE51bGxhYmxlOmVyLFpvZE51bWJlcjptdCxab2ROdW1iZXJGb3JtYXQ6QWUsWm9kT2JqZWN0OmJ0LFpvZE9wdGlvbmFsOnd0LFpvZFBpcGU6a3QsWm9kUHJlZmF1bHQ6b3IsWm9kUHJlcHJvY2Vzczpscixab2RQcm9taXNlOmdyLFpvZFJlYWRvbmx5OmRyLFpvZFJlYWxFcnJvcjpzZSxab2RSZWNvcmQ6VWUsWm9kU2V0OldvLFpvZFN0cmluZzp1dCxab2RTdHJpbmdGb3JtYXQ6Tixab2RTdWNjZXNzOmlyLFpvZFN5bWJvbDpBbyxab2RUZW1wbGF0ZUxpdGVyYWw6ZnIsWm9kVHJhbnNmb3JtOlFvLFpvZFR1cGxlOlZvLFpvZFR5cGU6UCxab2RVTElEOmZuLFpvZFVSTDpodCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpObyxab2RVbmlvbjpfdCxab2RVbmtub3duOkRvLFpvZFZvaWQ6TG8sWm9kWElEOmhuLFpvZFhvcjpIbyxfWm9kU3RyaW5nOnNuLF9kZWZhdWx0Om5yLF9mdW5jdGlvbjpvdCxhbnk6VG4sYXJyYXk6UyxiYXNlNjQ6ZWEsYmFzZTY0dXJsOnRhLGJpZ2ludDptYSxib29sZWFuOkEsY2F0Y2g6Y3IsY2hlY2s6amEsY2lkcnY0OlFpLGNpZHJ2NjpYaSxjbG9uZTpILGNvZGVjOlphLGNvZXJjZTpoZixjb21waWxlOkJzLGNvbmZpZzpKLGNvcmU6WHAsY3JlZGl0Q2FyZDpvYSxjdWlkOkZpLGN1aWQyOkJpLGN1cnJlbmN5Q29kZTp1YSxjdXN0b206YnIsZGF0ZTp5YSxkZWNvZGU6UGksZGVjb2RlQXN5bmM6eGksZGVlcFBhcnRpYWw6bGYsZGVmYXVsdDpWYyxkZXNjcmliZTpNYSxkaXNjcmltaW5hdGVkVW5pb246SW4sZTE2NDpuYSxlbWFpbDpPaSxlbW9qaTpVaSxlbmNvZGU6VGksZW5jb2RlQXN5bmM6SWksZW5kc1dpdGg6WXQsZW51bTpHLGV4YWN0T3B0aW9uYWw6WG8sZmlsZTp4YSxmbGF0dGVuRXJyb3I6bW8sZmxvYXQzMjpkYSxmbG9hdDY0OnBhLGZvcm1hdEVycm9yOmdvLGZyb21KU09OU2NoZW1hOnVmLGZ1bmN0aW9uOm90LGdldERpc2NyaW1pbmF0ZWRPcHRpb246Q3MsZ2V0RXJyb3JNYXA6c2YsZ2xvYmFsUmVnaXN0cnk6cGUsZ3Q6UGUsZ3RlOmNlLGd1aWQ6QWksaGFzaDpsYSxoZXg6Y2EsaG9zdG5hbWU6YWEsaHR0cFVybDpMaSxpYmFuOnJhLGluY2x1ZGVzOld0LGlucHV0OnBmLGluc3RhbmNlb2Y6cWEsaW50OkN0LGludDMyOmZhLGludDY0OmdhLGludGVyc2VjdGlvbjp5dCxpbnZlcnRDb2RlYzpPYSxpcHY0OldpLGlwdjY6WWksaXNvOkhhLGpzb246VWEsand0OnNhLGtleW9mOndhLGtzdWlkOktpLGxhenk6bXIsbGVuZ3RoOmF0LGxpdGVyYWw6aCxsb2NhbGVzOk1zLGxvb3NlT2JqZWN0OlcsbG9vc2VSZWNvcmQ6emEsbG93ZXJjYXNlOkp0LGx0OlRlLGx0ZTphZSxtYWM6R2ksbWFwOlRhLG1heExlbmd0aDppdCxtYXhTaXplOlZlLG1lbW9pemVyOlNvLG1ldGE6RGEsbWltZTpYdCxtaW5MZW5ndGg6WmUsbWluU2l6ZTpJZSxtdWx0aXBsZU9mOnFlLG5hbjpDYSxuYW5vaWQ6SGksbmF0aXZlRW51bTpJYSxuZWdhdGl2ZTpJbyxuZXZlcjpMZSxub25uZWdhdGl2ZTpFbyxub25vcHRpb25hbDpzcixub25wb3NpdGl2ZTp4byxub3JtYWxpemU6ZW4sbnVsbDp6bixudWxsYWJsZTpudCxudWxsaXNoOkVhLG51bWJlcjpULG9iamVjdDp2LG9wdGlvbmFsOnEsb3V0cHV0OmZmLG92ZXJ3cml0ZTp3ZSxwYXJzZTpraSxwYXJzZUFzeW5jOlNpLHBhcnRpYWxSZWNvcmQ6JGEscGlwZTpadCxwb3NpdGl2ZTpQbyxwcmVmYXVsdDpycixwcmVwcm9jZXNzOkNuLHByZXR0aWZ5RXJyb3I6YXMscHJvbWlzZTpOYSxwcm9wZXJ0aWVzOlF0LHByb3BlcnR5OlJvLHJlYWRvbmx5OnByLHJlY29yZDpFLHJlZmluZTpfcixyZWdleDpWdCxyZWdleGVzOndvLHJlZ2lzdHJ5OiRvLHNhZmVEZWNvZGU6Umksc2FmZURlY29kZUFzeW5jOlppLHNhZmVFbmNvZGU6RWksc2FmZUVuY29kZUFzeW5jOkNpLHNhZmVQYXJzZTokaSxzYWZlUGFyc2VBc3luYzp6aSxzZXQ6UGEsc2V0RXJyb3JNYXA6cmYsc2l6ZTpzdCxzbHVnaWZ5OnJuLHN0YXJ0c1dpdGg6R3Qsc3RyaWN0T2JqZWN0OmthLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDppYSxzdHJpbmdib29sOkxhLHN1Y2Nlc3M6UmEsc3VwZXJSZWZpbmU6eXIsc3ltYm9sOmJhLHRlbXBsYXRlTGl0ZXJhbDpBYSx0b0pTT05TY2hlbWE6X2ksdG9Mb3dlckNhc2U6bm4sdG9VcHBlckNhc2U6b24sdG9ab2Q6c28sdHJhbnNmb3JtOnhuLHRyZWVpZnlFcnJvcjppcyx0cmltOnRuLHR1cGxlOkpvLHVpbnQzMjpoYSx1aW50NjQ6dmEsdWxpZDpWaSx1bmRlZmluZWQ6dHQsdW5pb246SSx1bmtub3duOlosdXBwZXJjYXNlOkt0LHVybDpxaSx1dGlsOm9zLHV1aWQ6TmksdXVpZHY0OmppLHV1aWR2NjpNaSx1dWlkdjc6RGksdmFsaWRhdGU6Ym8sdmFsaWRhdGVBc3luYzpfbyx2b2lkOl9hLHdpdGhQYXJzZXI6VnMseGlkOkppLHhvcjpTYSx6OlZjfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGplPSJpby5tb2RlbGNvbnRleHRwcm90b2NvbC9yZWxhdGVkLXRhc2siLGtyPSIyLjAiLFY9YnIoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSksbWY9SShbZigpLFQoKS5pbnQoKV0pLGdmPWYoKTtXKHt0dGw6VCgpLm9wdGlvbmFsKCkscG9sbEludGVydmFsOlQoKS5vcHRpb25hbCgpfSk7Y29uc3QgbHY9dih7dHRsOlQoKS5vcHRpb25hbCgpfSksZHY9dih7dGFza0lkOmYoKX0pLEZhPVcoe3Byb2dyZXNzVG9rZW46bWYub3B0aW9uYWwoKSxbamVdOmR2Lm9wdGlvbmFsKCl9KSxsZT12KHtfbWV0YTpGYS5vcHRpb25hbCgpfSksWm49bGUuZXh0ZW5kKHt0YXNrOmx2Lm9wdGlvbmFsKCl9KSxwdj1lPT5abi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxZPXYoe21ldGhvZDpmKCkscGFyYW1zOmxlLmxvb3NlKCkub3B0aW9uYWwoKX0pLG1lPXYoe19tZXRhOkZhLm9wdGlvbmFsKCl9KSxnZT12KHttZXRob2Q6ZigpLHBhcmFtczptZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxRPVcoe19tZXRhOkZhLm9wdGlvbmFsKCl9KSxPbj1JKFtmKCksVCgpLmludCgpXSksdmY9dih7anNvbnJwYzpoKGtyKSxpZDpPbiwuLi5ZLnNoYXBlfSkuc3RyaWN0KCksSmM9ZT0+dmYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsYmY9dih7anNvbnJwYzpoKGtyKSwuLi5nZS5zaGFwZX0pLnN0cmljdCgpLGZ2PWU9PmJmLnNhZmVQYXJzZShlKS5zdWNjZXNzLEJhPXYoe2pzb25ycGM6aChrciksaWQ6T24scmVzdWx0OlF9KS5zdHJpY3QoKSxKbj1lPT5CYS5zYWZlUGFyc2UoZSkuc3VjY2Vzczt2YXIgTTsoZnVuY3Rpb24oZSl7ZVtlLkNvbm5lY3Rpb25DbG9zZWQ9LTMyZTNdPSJDb25uZWN0aW9uQ2xvc2VkIixlW2UuUmVxdWVzdFRpbWVvdXQ9LTMyMDAxXT0iUmVxdWVzdFRpbWVvdXQiLGVbZS5QYXJzZUVycm9yPS0zMjcwMF09IlBhcnNlRXJyb3IiLGVbZS5JbnZhbGlkUmVxdWVzdD0tMzI2MDBdPSJJbnZhbGlkUmVxdWVzdCIsZVtlLk1ldGhvZE5vdEZvdW5kPS0zMjYwMV09Ik1ldGhvZE5vdEZvdW5kIixlW2UuSW52YWxpZFBhcmFtcz0tMzI2MDJdPSJJbnZhbGlkUGFyYW1zIixlW2UuSW50ZXJuYWxFcnJvcj0tMzI2MDNdPSJJbnRlcm5hbEVycm9yIixlW2UuVXJsRWxpY2l0YXRpb25SZXF1aXJlZD0tMzIwNDJdPSJVcmxFbGljaXRhdGlvblJlcXVpcmVkIn0pKE18fChNPXt9KSk7Y29uc3QgVmE9dih7anNvbnJwYzpoKGtyKSxpZDpPbi5vcHRpb25hbCgpLGVycm9yOnYoe2NvZGU6VCgpLmludCgpLG1lc3NhZ2U6ZigpLGRhdGE6WigpLm9wdGlvbmFsKCl9KX0pLnN0cmljdCgpLGh2PWU9PlZhLnNhZmVQYXJzZShlKS5zdWNjZXNzLG12PUkoW3ZmLGJmLEJhLFZhXSk7SShbQmEsVmFdKTtjb25zdCBKYT1RLnN0cmljdCgpLGd2PW1lLmV4dGVuZCh7cmVxdWVzdElkOk9uLm9wdGlvbmFsKCkscmVhc29uOmYoKS5vcHRpb25hbCgpfSksS2E9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6Z3Z9KSx2dj12KHtzcmM6ZigpLG1pbWVUeXBlOmYoKS5vcHRpb25hbCgpLHNpemVzOlMoZigpKS5vcHRpb25hbCgpLHRoZW1lOkcoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLEFuPXYoe2ljb25zOlModnYpLm9wdGlvbmFsKCl9KSxydD12KHtuYW1lOmYoKSx0aXRsZTpmKCkub3B0aW9uYWwoKX0pLFNyPXJ0LmV4dGVuZCh7Li4ucnQuc2hhcGUsLi4uQW4uc2hhcGUsdmVyc2lvbjpmKCksd2Vic2l0ZVVybDpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKX0pLGJ2PXl0KHYoe2FwcGx5RGVmYXVsdHM6QSgpLm9wdGlvbmFsKCl9KSxFKGYoKSxaKCkpKSxfdj1DbihlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLHl0KHYoe2Zvcm06YnYub3B0aW9uYWwoKSx1cmw6Vi5vcHRpb25hbCgpfSksRShmKCksWigpKS5vcHRpb25hbCgpKSkseXY9Vyh7bGlzdDpWLm9wdGlvbmFsKCksY2FuY2VsOlYub3B0aW9uYWwoKSxyZXF1ZXN0czpXKHtzYW1wbGluZzpXKHtjcmVhdGVNZXNzYWdlOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246Vyh7Y3JlYXRlOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksd3Y9Vyh7bGlzdDpWLm9wdGlvbmFsKCksY2FuY2VsOlYub3B0aW9uYWwoKSxyZXF1ZXN0czpXKHt0b29sczpXKHtjYWxsOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksa3Y9dih7ZXhwZXJpbWVudGFsOkUoZigpLFYpLm9wdGlvbmFsKCksc2FtcGxpbmc6dih7Y29udGV4dDpWLm9wdGlvbmFsKCksdG9vbHM6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpfdi5vcHRpb25hbCgpLHJvb3RzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczp5di5vcHRpb25hbCgpLGV4dGVuc2lvbnM6RShmKCksVikub3B0aW9uYWwoKX0pLFN2PWxlLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6a3YsY2xpZW50SW5mbzpTcn0pLCR2PVkuZXh0ZW5kKHttZXRob2Q6aCgiaW5pdGlhbGl6ZSIpLHBhcmFtczpTdn0pLHp2PXYoe2V4cGVyaW1lbnRhbDpFKGYoKSxWKS5vcHRpb25hbCgpLGxvZ2dpbmc6Vi5vcHRpb25hbCgpLGNvbXBsZXRpb25zOlYub3B0aW9uYWwoKSxwcm9tcHRzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6dih7c3Vic2NyaWJlOkEoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczp2KHtsaXN0Q2hhbmdlZDpBKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6d3Yub3B0aW9uYWwoKSxleHRlbnNpb25zOkUoZigpLFYpLm9wdGlvbmFsKCl9KSxUdj1RLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6enYsc2VydmVySW5mbzpTcixpbnN0cnVjdGlvbnM6ZigpLm9wdGlvbmFsKCl9KSxQdj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOm1lLm9wdGlvbmFsKCl9KSwkcj1ZLmV4dGVuZCh7bWV0aG9kOmgoInBpbmciKSxwYXJhbXM6bGUub3B0aW9uYWwoKX0pLEl2PXYoe3Byb2dyZXNzOlQoKSx0b3RhbDpxKFQoKSksbWVzc2FnZTpxKGYoKSl9KSx4dj12KHsuLi5tZS5zaGFwZSwuLi5Jdi5zaGFwZSxwcm9ncmVzc1Rva2VuOm1mfSksV2E9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczp4dn0pLEV2PWxlLmV4dGVuZCh7Y3Vyc29yOmdmLm9wdGlvbmFsKCl9KSxObj1ZLmV4dGVuZCh7cGFyYW1zOkV2Lm9wdGlvbmFsKCl9KSxqbj1RLmV4dGVuZCh7bmV4dEN1cnNvcjpnZi5vcHRpb25hbCgpfSksUnY9RyhbIndvcmtpbmciLCJpbnB1dF9yZXF1aXJlZCIsImNvbXBsZXRlZCIsImZhaWxlZCIsImNhbmNlbGxlZCJdKSxNbj12KHt0YXNrSWQ6ZigpLHN0YXR1czpSdix0dGw6SShbVCgpLHpuKCldKSxjcmVhdGVkQXQ6ZigpLGxhc3RVcGRhdGVkQXQ6ZigpLHBvbGxJbnRlcnZhbDpxKFQoKSksc3RhdHVzTWVzc2FnZTpxKGYoKSl9KSxHYT1RLmV4dGVuZCh7dGFzazpNbn0pLEN2PW1lLm1lcmdlKE1uKSxvbz1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpDdn0pLFlhPVkuZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvZ2V0IikscGFyYW1zOmxlLmV4dGVuZCh7dGFza0lkOmYoKX0pfSksUWE9US5tZXJnZShNbiksWGE9WS5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6bGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KTtRLmxvb3NlKCk7Y29uc3QgZWM9Tm4uZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvbGlzdCIpfSksdGM9am4uZXh0ZW5kKHt0YXNrczpTKE1uKX0pLG5jPVkuZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvY2FuY2VsIikscGFyYW1zOmxlLmV4dGVuZCh7dGFza0lkOmYoKX0pfSksWnY9US5tZXJnZShNbiksX2Y9dih7dXJpOmYoKSxtaW1lVHlwZTpxKGYoKSksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSkseWY9X2YuZXh0ZW5kKHt0ZXh0OmYoKX0pLG9jPWYoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksd2Y9X2YuZXh0ZW5kKHtibG9iOm9jfSksRG49RyhbInVzZXIiLCJhc3Npc3RhbnQiXSksenQ9dih7YXVkaWVuY2U6UyhEbikub3B0aW9uYWwoKSxwcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDphZih7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLGtmPXYoey4uLnJ0LnNoYXBlLC4uLkFuLnNoYXBlLHVyaTpmKCksZGVzY3JpcHRpb246cShmKCkpLG1pbWVUeXBlOnEoZigpKSxzaXplOnEoVCgpKSxhbm5vdGF0aW9uczp6dC5vcHRpb25hbCgpLF9tZXRhOnEoVyh7fSkpfSksT3Y9dih7Li4ucnQuc2hhcGUsLi4uQW4uc2hhcGUsdXJpVGVtcGxhdGU6ZigpLGRlc2NyaXB0aW9uOnEoZigpKSxtaW1lVHlwZTpxKGYoKSksYW5ub3RhdGlvbnM6enQub3B0aW9uYWwoKSxfbWV0YTpxKFcoe30pKX0pLEF2PU5uLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy9saXN0Iil9KSxTZj1qbi5leHRlbmQoe3Jlc291cmNlczpTKGtmKX0pLE52PU5uLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksanY9am4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpTKE92KX0pLHJjPWxlLmV4dGVuZCh7dXJpOmYoKX0pLE12PXJjLER2PVkuZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL3JlYWQiKSxwYXJhbXM6TXZ9KSwkZj1RLmV4dGVuZCh7Y29udGVudHM6UyhJKFt5Zix3Zl0pKX0pLHF2PWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczptZS5vcHRpb25hbCgpfSksTHY9cmMsVXY9WS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOkx2fSksSHY9cmMsRnY9WS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvdW5zdWJzY3JpYmUiKSxwYXJhbXM6SHZ9KSxCdj1tZS5leHRlbmQoe3VyaTpmKCl9KSxWdj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Jlc291cmNlcy91cGRhdGVkIikscGFyYW1zOkJ2fSksSnY9dih7bmFtZTpmKCksZGVzY3JpcHRpb246cShmKCkpLHJlcXVpcmVkOnEoQSgpKX0pLEt2PXYoey4uLnJ0LnNoYXBlLC4uLkFuLnNoYXBlLGRlc2NyaXB0aW9uOnEoZigpKSxhcmd1bWVudHM6cShTKEp2KSksX21ldGE6cShXKHt9KSl9KSxXdj1Obi5leHRlbmQoe21ldGhvZDpoKCJwcm9tcHRzL2xpc3QiKX0pLEd2PWpuLmV4dGVuZCh7cHJvbXB0czpTKEt2KX0pLFl2PWxlLmV4dGVuZCh7bmFtZTpmKCksYXJndW1lbnRzOkUoZigpLGYoKSkub3B0aW9uYWwoKX0pLFF2PVkuZXh0ZW5kKHttZXRob2Q6aCgicHJvbXB0cy9nZXQiKSxwYXJhbXM6WXZ9KSxzYz12KHt0eXBlOmgoInRleHQiKSx0ZXh0OmYoKSxhbm5vdGF0aW9uczp6dC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLGljPXYoe3R5cGU6aCgiaW1hZ2UiKSxkYXRhOm9jLG1pbWVUeXBlOmYoKSxhbm5vdGF0aW9uczp6dC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLGFjPXYoe3R5cGU6aCgiYXVkaW8iKSxkYXRhOm9jLG1pbWVUeXBlOmYoKSxhbm5vdGF0aW9uczp6dC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLFh2PXYoe3R5cGU6aCgidG9vbF91c2UiKSxuYW1lOmYoKSxpZDpmKCksaW5wdXQ6RShmKCksWigpKSxfbWV0YTpFKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSx6Zj12KHt0eXBlOmgoInJlc291cmNlIikscmVzb3VyY2U6SShbeWYsd2ZdKSxhbm5vdGF0aW9uczp6dC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLFRmPWtmLmV4dGVuZCh7dHlwZTpoKCJyZXNvdXJjZV9saW5rIil9KSxxbj1JKFtzYyxpYyxhYyxUZix6Zl0pLGViPXYoe3JvbGU6RG4sY29udGVudDpxbn0pLHRiPVEuZXh0ZW5kKHtkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtZXNzYWdlczpTKGViKX0pLG5iPWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6bWUub3B0aW9uYWwoKX0pLG9iPXYoe3RpdGxlOmYoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpBKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6QSgpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6QSgpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpBKCkub3B0aW9uYWwoKX0pLHJiPXYoe3Rhc2tTdXBwb3J0OkcoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSxjYz12KHsuLi5ydC5zaGFwZSwuLi5Bbi5zaGFwZSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTp2KHt0eXBlOmgoIm9iamVjdCIpLHByb3BlcnRpZXM6RShmKCksVikub3B0aW9uYWwoKSxyZXF1aXJlZDpTKGYoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKFooKSksb3V0cHV0U2NoZW1hOnYoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpFKGYoKSxWKS5vcHRpb25hbCgpLHJlcXVpcmVkOlMoZigpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOm9iLm9wdGlvbmFsKCksZXhlY3V0aW9uOnJiLm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksUGY9Tm4uZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvbGlzdCIpfSksc2I9am4uZXh0ZW5kKHt0b29sczpTKGNjKX0pLHpyPVEuZXh0ZW5kKHtjb250ZW50OlMocW4pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OkUoZigpLFooKSkub3B0aW9uYWwoKSxpc0Vycm9yOkEoKS5vcHRpb25hbCgpfSk7enIub3IoUS5leHRlbmQoe3Rvb2xSZXN1bHQ6WigpfSkpO2NvbnN0IGliPVpuLmV4dGVuZCh7bmFtZTpmKCksYXJndW1lbnRzOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLElmPVkuZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvY2FsbCIpLHBhcmFtczppYn0pLGFiPWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOm1lLm9wdGlvbmFsKCl9KTt2KHthdXRvUmVmcmVzaDpBKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpUKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCB4Zj1HKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxjYj1sZS5leHRlbmQoe2xldmVsOnhmfSksdWI9WS5leHRlbmQoe21ldGhvZDpoKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOmNifSksbGI9bWUuZXh0ZW5kKHtsZXZlbDp4Zixsb2dnZXI6ZigpLm9wdGlvbmFsKCksZGF0YTpaKCl9KSxkYj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6bGJ9KSxwYj12KHtuYW1lOmYoKS5vcHRpb25hbCgpfSksZmI9dih7aGludHM6UyhwYikub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OlQoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLGhiPXYoe21vZGU6RyhbImF1dG8iLCJyZXF1aXJlZCIsIm5vbmUiXSkub3B0aW9uYWwoKX0pLG1iPXYoe3R5cGU6aCgidG9vbF9yZXN1bHQiKSx0b29sVXNlSWQ6ZigpLmRlc2NyaWJlKCJUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRvb2wgY2FsbC4iKSxjb250ZW50OlMocW4pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OnYoe30pLmxvb3NlKCkub3B0aW9uYWwoKSxpc0Vycm9yOkEoKS5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLGdiPUluKCJ0eXBlIixbc2MsaWMsYWNdKSxybz1JbigidHlwZSIsW3NjLGljLGFjLFh2LG1iXSksdmI9dih7cm9sZTpEbixjb250ZW50OkkoW3JvLFMocm8pXSksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksYmI9Wm4uZXh0ZW5kKHttZXNzYWdlczpTKHZiKSxtb2RlbFByZWZlcmVuY2VzOmZiLm9wdGlvbmFsKCksc3lzdGVtUHJvbXB0OmYoKS5vcHRpb25hbCgpLGluY2x1ZGVDb250ZXh0OkcoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpUKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6VCgpLmludCgpLHN0b3BTZXF1ZW5jZXM6UyhmKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6Vi5vcHRpb25hbCgpLHRvb2xzOlMoY2MpLm9wdGlvbmFsKCksdG9vbENob2ljZTpoYi5vcHRpb25hbCgpfSksX2I9WS5leHRlbmQoe21ldGhvZDpoKCJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIikscGFyYW1zOmJifSksRWY9US5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOnEoRyhbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoZigpKSkscm9sZTpEbixjb250ZW50OmdifSksUmY9US5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOnEoRyhbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiLCJ0b29sVXNlIl0pLm9yKGYoKSkpLHJvbGU6RG4sY29udGVudDpJKFtybyxTKHJvKV0pfSkseWI9dih7dHlwZTpoKCJib29sZWFuIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZGVmYXVsdDpBKCkub3B0aW9uYWwoKX0pLHdiPXYoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluTGVuZ3RoOlQoKS5vcHRpb25hbCgpLG1heExlbmd0aDpUKCkub3B0aW9uYWwoKSxmb3JtYXQ6RyhbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSxrYj12KHt0eXBlOkcoWyJudW1iZXIiLCJpbnRlZ2VyIl0pLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbmltdW06VCgpLm9wdGlvbmFsKCksbWF4aW11bTpUKCkub3B0aW9uYWwoKSxkZWZhdWx0OlQoKS5vcHRpb25hbCgpfSksU2I9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxlbnVtOlMoZigpKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksJGI9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxvbmVPZjpTKHYoe2NvbnN0OmYoKSx0aXRsZTpmKCl9KSksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLHpiPXYoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZW51bTpTKGYoKSksZW51bU5hbWVzOlMoZigpKS5vcHRpb25hbCgpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSxUYj1JKFtTYiwkYl0pLFBiPXYoe3R5cGU6aCgiYXJyYXkiKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5JdGVtczpUKCkub3B0aW9uYWwoKSxtYXhJdGVtczpUKCkub3B0aW9uYWwoKSxpdGVtczp2KHt0eXBlOmgoInN0cmluZyIpLGVudW06UyhmKCkpfSksZGVmYXVsdDpTKGYoKSkub3B0aW9uYWwoKX0pLEliPXYoe3R5cGU6aCgiYXJyYXkiKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5JdGVtczpUKCkub3B0aW9uYWwoKSxtYXhJdGVtczpUKCkub3B0aW9uYWwoKSxpdGVtczp2KHthbnlPZjpTKHYoe2NvbnN0OmYoKSx0aXRsZTpmKCl9KSl9KSxkZWZhdWx0OlMoZigpKS5vcHRpb25hbCgpfSkseGI9SShbUGIsSWJdKSxFYj1JKFt6YixUYix4Yl0pLFJiPUkoW0ViLHliLHdiLGtiXSksQ2I9Wm4uZXh0ZW5kKHttb2RlOmgoImZvcm0iKS5vcHRpb25hbCgpLG1lc3NhZ2U6ZigpLHJlcXVlc3RlZFNjaGVtYTp2KHt0eXBlOmgoIm9iamVjdCIpLHByb3BlcnRpZXM6RShmKCksUmIpLHJlcXVpcmVkOlMoZigpKS5vcHRpb25hbCgpfSl9KSxaYj1abi5leHRlbmQoe21vZGU6aCgidXJsIiksbWVzc2FnZTpmKCksZWxpY2l0YXRpb25JZDpmKCksdXJsOmYoKS51cmwoKX0pLE9iPUkoW0NiLFpiXSksQWI9WS5leHRlbmQoe21ldGhvZDpoKCJlbGljaXRhdGlvbi9jcmVhdGUiKSxwYXJhbXM6T2J9KSxOYj1tZS5leHRlbmQoe2VsaWNpdGF0aW9uSWQ6ZigpfSksamI9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9lbGljaXRhdGlvbi9jb21wbGV0ZSIpLHBhcmFtczpOYn0pLE1iPVEuZXh0ZW5kKHthY3Rpb246RyhbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDpDbihlPT5lPT09bnVsbD92b2lkIDA6ZSxFKGYoKSxJKFtmKCksVCgpLEEoKSxTKGYoKSldKSkub3B0aW9uYWwoKSl9KSxEYj12KHt0eXBlOmgoInJlZi9yZXNvdXJjZSIpLHVyaTpmKCl9KSxxYj12KHt0eXBlOmgoInJlZi9wcm9tcHQiKSxuYW1lOmYoKX0pLExiPWxlLmV4dGVuZCh7cmVmOkkoW3FiLERiXSksYXJndW1lbnQ6dih7bmFtZTpmKCksdmFsdWU6ZigpfSksY29udGV4dDp2KHthcmd1bWVudHM6RShmKCksZigpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLFViPVkuZXh0ZW5kKHttZXRob2Q6aCgiY29tcGxldGlvbi9jb21wbGV0ZSIpLHBhcmFtczpMYn0pLEhiPVEuZXh0ZW5kKHtjb21wbGV0aW9uOlcoe3ZhbHVlczpTKGYoKSkubWF4KDEwMCksdG90YWw6cShUKCkuaW50KCkpLGhhc01vcmU6cShBKCkpfSl9KSxGYj12KHt1cmk6ZigpLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKSxuYW1lOmYoKS5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLEJiPVkuZXh0ZW5kKHttZXRob2Q6aCgicm9vdHMvbGlzdCIpLHBhcmFtczpsZS5vcHRpb25hbCgpfSksVmI9US5leHRlbmQoe3Jvb3RzOlMoRmIpfSksSmI9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6bWUub3B0aW9uYWwoKX0pO0koWyRyLCR2LFViLHViLFF2LFd2LEF2LE52LER2LFV2LEZ2LElmLFBmLFlhLFhhLGVjLG5jXSk7SShbS2EsV2EsUHYsSmIsb29dKTtJKFtKYSxFZixSZixNYixWYixRYSx0YyxHYV0pO0koWyRyLF9iLEFiLEJiLFlhLFhhLGVjLG5jXSk7SShbS2EsV2EsZGIsVnYscXYsYWIsbmIsb28samJdKTtJKFtKYSxUdixIYix0YixHdixTZixqdiwkZix6cixzYixRYSx0YyxHYV0pO2NsYXNzIEMgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PU0uVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgS2Ioci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBDKHQsbixvKX19Y2xhc3MgS2IgZXh0ZW5kcyBDe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihNLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gS2MoZSl7Y29uc3Qgbj1EZyhlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89cWcobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBXYyhlLHQpe2NvbnN0IG49ZWYoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBXYj02ZTQ7Y2xhc3MgR2J7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoS2Esbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKFdhLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcigkcixuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFlhLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFhhLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgYTtmb3IoO2E9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoYS50eXBlPT09InJlc3BvbnNlInx8YS50eXBlPT09ImVycm9yIil7Y29uc3QgYz1hLm1lc3NhZ2UsdT1jLmlkLGw9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQodSk7aWYobClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZSh1KSxhLnR5cGU9PT0icmVzcG9uc2UiKWwoYyk7ZWxzZXtjb25zdCBwPWMsZz1uZXcgQyhwLmVycm9yLmNvZGUscC5lcnJvci5tZXNzYWdlLHAuZXJyb3IuZGF0YSk7bChnKX1lbHNle2NvbnN0IHA9YS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7cH0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7dX1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGEubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFpKXRocm93IG5ldyBDKE0uSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighTmUoaS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoTmUoaS5zdGF0dXMpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uYSxfbWV0YTp7Li4uYS5fbWV0YSxbamVdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihlYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKG5jLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBDKE0uSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKE5lKHIuc3RhdHVzKSl0aHJvdyBuZXcgQyhNLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBDKE0uSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIEM/cjpuZXcgQyhNLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLEMuZnJvbUVycm9yKE0uUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGkpPT57cj8uKHMsaSksSm4ocyl8fGh2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6SmMocyk/dGhpcy5fb25yZXF1ZXN0KHMsaSk6ZnYocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49Qy5mcm9tRXJyb3IoTS5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bamVdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgbD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOk0uTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpsLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKHA9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHtwfWApKSk6cj8uc2VuZChsKS5jYXRjaChwPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7cH1gKSkpO3JldHVybn1jb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGkpO2NvbnN0IGE9cHYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLGM9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLHU9e3NpZ25hbDppLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBwPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihwLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwscCl9LHNlbmRSZXF1ZXN0OmFzeW5jKGwscCxnKT0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEMoTS5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCBiPXsuLi5nLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIWIucmVsYXRlZFRhc2smJihiLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IHk9Yi5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiB5JiZjJiZhd2FpdCBjLnVwZGF0ZVRhc2tTdGF0dXMoeSwiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QobCxwLGIpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6Yyx0YXNrUmVxdWVzdGVkVHRsOmE/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57YSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LHUpKS50aGVuKGFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBwPXtyZXN1bHQ6bCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOnAsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChwKX0sYXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IHA9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihsLmNvZGUpP2wuY29kZTpNLkludGVybmFsRXJyb3IsbWVzc2FnZTpsLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4ubC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpsLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6cCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKHApfSkuY2F0Y2gobD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2x9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWkmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgaT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxhPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihhJiZpJiZhLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaChjKXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxpKGMpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksSm4odCkpbyh0KTtlbHNle2NvbnN0IGk9bmV3IEModC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oaSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKEpuKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgaT10LnJlc3VsdDtpZihpLnRhc2smJnR5cGVvZiBpLnRhc2s9PSJvYmplY3QiKXtjb25zdCBhPWkudGFzazt0eXBlb2YgYS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGEudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksSm4odCkpcih0KTtlbHNle2NvbnN0IGk9Qy5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoaSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIEM/aTpuZXcgQyhNLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBpPWF3YWl0IHRoaXMucmVxdWVzdCh0LEdhLG8pO2lmKGkudGFzaylzPWkudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6aS50YXNrfTtlbHNlIHRocm93IG5ldyBDKE0uSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGE9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazphfSxOZShhLnN0YXR1cykpe2Euc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06YS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IEMoTS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9OmEuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IEMoTS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGEuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IGM9YS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UodT0+c2V0VGltZW91dCh1LGMpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2YgQz9pOm5ldyBDKE0uSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmksdGFzazphLHJlbGF0ZWRUYXNrOmN9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgodSxsKT0+e2NvbnN0IHA9Uj0+e2woUil9O2lmKCF0aGlzLl90cmFuc3BvcnQpe3AobmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksYSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goUil7cChSKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGc9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLGI9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpnfTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoZyxvLm9ucHJvZ3Jlc3MpLGIucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmd9fSksYSYmKGIucGFyYW1zPXsuLi5iLnBhcmFtcyx0YXNrOmF9KSxjJiYoYi5wYXJhbXM9ey4uLmIucGFyYW1zLF9tZXRhOnsuLi5iLnBhcmFtcz8uX21ldGF8fHt9LFtqZV06Y319KTtjb25zdCB5PVI9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShnKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShnKSx0aGlzLl9jbGVhbnVwVGltZW91dChnKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6ZyxyZWFzb246U3RyaW5nKFIpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBGPVIgaW5zdGFuY2VvZiBDP1I6bmV3IEMoTS5SZXF1ZXN0VGltZW91dCxTdHJpbmcoUikpO2woRil9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGcsUj0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKFIgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbChSKTt0cnl7Y29uc3QgRj1lZihuLFIucmVzdWx0KTtGLnN1Y2Nlc3M/dShGLmRhdGEpOmwoRi5lcnJvcil9Y2F0Y2goRil7bChGKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9Pnt5KG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IGs9bz8udGltZW91dD8/V2IsJD0oKT0+eShDLmZyb21FcnJvcihNLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6a30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoZyxrLG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBqPWM/LnRhc2tJZDtpZihqKXtjb25zdCBSPUY9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChnKTtvZT9vZShGKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Z31gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGcsUiksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKGose3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6Yix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEY9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChnKSxsKEYpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZChiLHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKFI9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChnKSxsKFIpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxRYSxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sdGMsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sWnYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBhPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbamVdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTphLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW2plXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYSxuKS5jYXRjaChjPT50aGlzLl9vbmVycm9yKGMpKX0pO3JldHVybn1sZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbamVdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPUtjKHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGk9V2ModCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oaSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPUtjKHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPVdjKHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZKYyhyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxpPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2k/KGkobmV3IEMoTS5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgQyhNLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgaT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoaSkscyhuZXcgQyhNLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxpKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxpLG4pO2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoYSl7Y29uc3QgYz1vby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmF9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihjKSxOZShhLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxpKT0+e2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWEpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihOZShhLnN0YXR1cykpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2Euc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGksbik7Y29uc3QgYz1hd2FpdCBvLmdldFRhc2socixuKTtpZihjKXtjb25zdCB1PW9vLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6Y30pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKHUpLE5lKGMuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIEdjKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBZYihlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBpPW5bcl07R2MoaSkmJkdjKHMpP25bcl09ey4uLmksLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIFFiIGV4dGVuZHMgR2J7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8saT0+e2xldCBhPWkucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsYSkscy5vbkhhbmRsZXI/LihhKTtmb3IobGV0IGMgb2ZbLi4ucy5saXN0ZW5lcnNdKWMoYSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIFhiPSIyMDI2LTAxLTI2IixlXz0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIHRfe2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1tdi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PWVfJiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgbl89SShbaCgibGlnaHQiKSxoKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksT3Q9SShbaCgiaW5saW5lIiksaCgiZnVsbHNjcmVlbiIpLGgoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLG9fPUkoW2goIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxoKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGgoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksaCgiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGgoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksaCgiLS1jb2xvci10ZXh0LWdob3N0IiksaCgiLS1jb2xvci10ZXh0LWluZm8iKSxoKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksaCgiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxoKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGgoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGgoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxoKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxoKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxoKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGgoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxoKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxoKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksaCgiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGgoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksaCgiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxoKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksaCgiLS1jb2xvci1yaW5nLWludmVyc2UiKSxoKCItLWNvbG9yLXJpbmctaW5mbyIpLGgoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxoKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGgoIi0tY29sb3ItcmluZy13YXJuaW5nIiksaCgiLS1mb250LXNhbnMiKSxoKCItLWZvbnQtbW9ubyIpLGgoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksaCgiLS1mb250LXdlaWdodC1tZWRpdW0iKSxoKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksaCgiLS1mb250LXdlaWdodC1ib2xkIiksaCgiLS1mb250LXRleHQteHMtc2l6ZSIpLGgoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxoKCItLWZvbnQtdGV4dC1tZC1zaXplIiksaCgiLS1mb250LXRleHQtbGctc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksaCgiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksaCgiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGgoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGgoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGgoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGgoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGgoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGgoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGgoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksaCgiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGgoIi0tc2hhZG93LWhhaXJsaW5lIiksaCgiLS1zaGFkb3ctc20iKSxoKCItLXNoYWRvdy1tZCIpLGgoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLHJfPUUob18uZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksSShbZigpLHR0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7dih7bWV0aG9kOmgoInVpL29wZW4tbGluayIpLHBhcmFtczp2KHt1cmw6ZigpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIHNfPXYoe2lzRXJyb3I6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLGlfPXYoe2lzRXJyb3I6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxhXz12KHtpc0Vycm9yOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTt2KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOnYoe30pfSk7dmFyIHVjPXYoe2Nvbm5lY3REb21haW5zOlMoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpTKGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLGxjPXYoe2NhbWVyYTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOnYoe3dpZHRoOlQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpUKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBjXz12KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOnYoe2FyZ3VtZW50czpFKGYoKSxaKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksdV89dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOnYoe2FyZ3VtZW50czpFKGYoKSxaKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLGxfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOnYoe3JlYXNvbjpmKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxkXz12KHtmb250czpmKCkub3B0aW9uYWwoKX0pLHBfPXYoe3ZhcmlhYmxlczpyXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOmRfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxmXz12KHttZXRob2Q6aCgidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6dih7fSl9KTtFKGYoKSxaKCkpO3ZhciBZYz12KHt0ZXh0OnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50OnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczp2KHt9KS5vcHRpb25hbCgpfSk7dmFyIGhfPXYoe2V4cGVyaW1lbnRhbDpFKGYoKSxFKGYoKSxUbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczp2KHtsaXN0Q2hhbmdlZDpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94OnYoe3Blcm1pc3Npb25zOmxjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDp1Yy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpZYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6WWMub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzp2KHt0b29sczp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxtXz12KHtleHBlcmltZW50YWw6RShmKCksRShmKCksVG4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczp2KHtsaXN0Q2hhbmdlZDpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlMoT3QpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOnYoe30pLm9wdGlvbmFsKCl9KTt2KHtjc3A6dWMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOmxjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTt2KHttZXRob2Q6aCgidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6dih7bW9kZTpPdC5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBnXz12KHttb2RlOk90LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSx2Xz1JKFtoKCJtb2RlbCIpLGgoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO3Yoe3Jlc291cmNlVXJpOmYoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6Uyh2Xykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpMZSgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6TGUoKS5vcHRpb25hbCgpfSk7dih7bWltZVR5cGVzOlMoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7dih7bWV0aG9kOmgoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6dih7Y29udGVudHM6UyhJKFt6ZixUZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7dih7bWV0aG9kOmgoInVpL21lc3NhZ2UiKSxwYXJhbXM6dih7cm9sZTpoKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlMocW4pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6dih7aHRtbDpmKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDp1Yy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOmxjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIGJfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOnpyLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksQ2Y9dih7dG9vbEluZm86dih7aWQ6T24ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOmNjLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOm5fLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6cF8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOk90Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UyhPdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkkoW3Yoe2hlaWdodDpUKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksdih7bWF4SGVpZ2h0OkkoW1QoKSx0dCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEkoW3Yoe3dpZHRoOlQoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLHYoe21heFdpZHRoOkkoW1QoKSx0dCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpmKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06SShbaCgid2ViIiksaCgiZGVza3RvcCIpLGgoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczp2KHt0b3VjaDpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czp2KHt0b3A6VCgpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpUKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOlQoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpUKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLF9fPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOkNmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO3Yoe21ldGhvZDpoKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczp2KHtjb250ZW50OlMocW4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpFKGYoKSxaKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO3Yoe21ldGhvZDpoKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOnYoe2FwcEluZm86U3IuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOm1fLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpmKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciB5Xz12KHtwcm90b2NvbFZlcnNpb246ZigpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOlNyLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6aF8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6Q2YuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksd189e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIFFjKGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0od18pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IFdmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT51diksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBYYyhlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGk9cy5wYXRoPy5tYXAoYT0+dHlwZW9mIGE9PSJvYmplY3QiP2Eua2V5OmEpLmpvaW4oIi4iKTtyZXR1cm4gaT9gJHtpfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24ga18oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gU18oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uICRfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgZGMgZXh0ZW5kcyBRYntfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6Y18sdG9vbGlucHV0cGFydGlhbDp1Xyx0b29scmVzdWx0OmJfLHRvb2xjYW5jZWxsZWQ6bF8saG9zdGNvbnRleHRjaGFuZ2VkOl9ffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCFkYy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8Sih7aml0bGVzczohMH0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoJHIscj0+KGNvbnNvbGUubG9nKCJSZWNlaXZlZCBwaW5nOiIsci5wYXJhbXMpLHt9KSksdGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdm9pZCAwKX1yZWdpc3RlckNhcGFiaWxpdGllcyh0KXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhZnRlciB0cmFuc3BvcnQgaXMgZXN0YWJsaXNoZWQiKTt0aGlzLl9jYXBhYmlsaXRpZXM9WWIodGhpcy5fY2FwYWJpbGl0aWVzLHQpfXJlZ2lzdGVyVG9vbCh0LG4sbyl7aWYodGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7bGV0IHI9dGhpcyxzPSgpPT57ci5faW5pdGlhbGl6ZWRTZW50JiZyLl9jYXBhYmlsaXRpZXMudG9vbHM/Lmxpc3RDaGFuZ2VkJiZyLnNlbmRUb29sTGlzdENoYW5nZWQoKX0saT1uLmlucHV0U2NoZW1hIT09dm9pZCAwLGE9e3RpdGxlOm4udGl0bGUsZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpuLmlucHV0U2NoZW1hLG91dHB1dFNjaGVtYTpuLm91dHB1dFNjaGVtYSxhbm5vdGF0aW9uczpuLmFubm90YXRpb25zLF9tZXRhOm4uX21ldGEsZW5hYmxlZDohMCxlbmFibGUoKXt0aGlzLmVuYWJsZWQ9ITAscygpfSxkaXNhYmxlKCl7dGhpcy5lbmFibGVkPSExLHMoKX0sdXBkYXRlKGMpe09iamVjdC5hc3NpZ24odGhpcyxjKSxzKCl9LHJlbW92ZSgpe3IuX3JlZ2lzdGVyZWRUb29sc1t0XT09PWEmJihkZWxldGUgci5fcmVnaXN0ZXJlZFRvb2xzW3RdLHMoKSl9LGhhbmRsZXI6YXN5bmMoYyx1KT0+e2lmKCFhLmVuYWJsZWQpdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBkaXNhYmxlZGApO2xldCBsO2lmKGkpe2xldCBwPWEuaW5wdXRTY2hlbWEsZz1wP2F3YWl0IFhjKHAsYz8/e30sYEludmFsaWQgaW5wdXQgZm9yIHRvb2wgJHt0fTogYCk6Yz8/e307bD1hd2FpdCBvKGcsdSl9ZWxzZSBsPWF3YWl0IG8odSk7cmV0dXJuIGEub3V0cHV0U2NoZW1hJiYhbC5pc0Vycm9yJiYobC5zdHJ1Y3R1cmVkQ29udGVudD1hd2FpdCBYYyhhLm91dHB1dFNjaGVtYSxsLnN0cnVjdHVyZWRDb250ZW50LGBJbnZhbGlkIG91dHB1dCBmb3IgdG9vbCAke3R9OiBgKSksbH19O3JldHVybiB0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF09YSwhdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzJiYhdGhpcy50cmFuc3BvcnQmJnRoaXMucmVnaXN0ZXJDYXBhYmlsaXRpZXMoe3Rvb2xzOntsaXN0Q2hhbmdlZDohMH19KSx0aGlzLmVuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCkscygpLGF9X3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSExO2Vuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCl7dGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWR8fCh0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMCx0aGlzLm9uY2FsbHRvb2w9YXN5bmModCxuKT0+e2xldCBvPXRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0Lm5hbWVdO2lmKCFvKXRocm93IEVycm9yKGBUb29sICR7dC5uYW1lfSBub3QgZm91bmRgKTtyZXR1cm4gby5oYW5kbGVyKHQuYXJndW1lbnRzLG4pfSx0aGlzLm9ubGlzdHRvb2xzPWFzeW5jKHQsbik9Pih7dG9vbHM6YXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModGhpcy5fcmVnaXN0ZXJlZFRvb2xzKS5maWx0ZXIoKFtvLHJdKT0+ci5lbmFibGVkKS5tYXAoYXN5bmMoW28scl0pPT57bGV0IHM9e25hbWU6byx0aXRsZTpyLnRpdGxlLGRlc2NyaXB0aW9uOnIuZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6ci5pbnB1dFNjaGVtYT9hd2FpdCBRYyhyLmlucHV0U2NoZW1hLCJpbnB1dCIpOnt0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e319fTtyZXR1cm4gci5vdXRwdXRTY2hlbWEmJihzLm91dHB1dFNjaGVtYT1hd2FpdCBRYyhyLm91dHB1dFNjaGVtYSwib3V0cHV0IikpLHIuYW5ub3RhdGlvbnMmJihzLmFubm90YXRpb25zPXIuYW5ub3RhdGlvbnMpLHIuX21ldGEmJihzLl9tZXRhPXIuX21ldGEpLHN9KSl9KSl9YXN5bmMgc2VuZFRvb2xMaXN0Q2hhbmdlZCh0PXt9KXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZFRvb2xMaXN0Q2hhbmdlZCIpLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIixwYXJhbXM6dH0pfWdldEhvc3RDYXBhYmlsaXRpZXMoKXtyZXR1cm4gdGhpcy5faG9zdENhcGFiaWxpdGllc31nZXRIb3N0VmVyc2lvbigpe3JldHVybiB0aGlzLl9ob3N0SW5mb31nZXRIb3N0Q29udGV4dCgpe3JldHVybiB0aGlzLl9ob3N0Q29udGV4dH1nZXQgb250b29saW5wdXQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIpfXNldCBvbnRvb2xpbnB1dCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iix0KX1nZXQgb250b29saW5wdXRwYXJ0aWFsKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIil9c2V0IG9udG9vbGlucHV0cGFydGlhbCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIsdCl9Z2V0IG9udG9vbHJlc3VsdCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIpfXNldCBvbnRvb2xyZXN1bHQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiLHQpfWdldCBvbnRvb2xjYW5jZWxsZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiKX1zZXQgb250b29sY2FuY2VsbGVkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIix0KX1nZXQgb25ob3N0Y29udGV4dGNoYW5nZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIpfXNldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix0KX1fb250ZWFyZG93bjtnZXQgb250ZWFyZG93bigpe3JldHVybiB0aGlzLl9vbnRlYXJkb3dufXNldCBvbnRlYXJkb3duKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib250ZWFyZG93biIsdGhpcy5fb250ZWFyZG93bix0KSx0aGlzLl9vbnRlYXJkb3duPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoZl8sKG4sbyk9PntpZighdGhpcy5fb250ZWFyZG93bil0aHJvdyBFcnJvcigiTm8gb250ZWFyZG93biBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbnRlYXJkb3duKG4ucGFyYW1zLG8pfSl9X29uY2FsbHRvb2w7Z2V0IG9uY2FsbHRvb2woKXtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbH1zZXQgb25jYWxsdG9vbCh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9uY2FsbHRvb2wiLHRoaXMuX29uY2FsbHRvb2wsdCksdGhpcy5fb25jYWxsdG9vbD10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKElmLChuLG8pPT57aWYoIXRoaXMuX29uY2FsbHRvb2wpdGhyb3cgRXJyb3IoIk5vIG9uY2FsbHRvb2wgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbChuLnBhcmFtcyxvKX0pfV9vbmxpc3R0b29scztnZXQgb25saXN0dG9vbHMoKXtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHN9c2V0IG9ubGlzdHRvb2xzKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25saXN0dG9vbHMiLHRoaXMuX29ubGlzdHRvb2xzLHQpLHRoaXMuX29ubGlzdHRvb2xzPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoUGYsKG4sbyk9PntpZighdGhpcy5fb25saXN0dG9vbHMpdGhyb3cgRXJyb3IoIk5vIG9ubGlzdHRvb2xzIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzKG4ucGFyYW1zLG8pfSl9YXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0KXtzd2l0Y2godCl7Y2FzZSJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIjppZighdGhpcy5faG9zdENhcGFiaWxpdGllcz8uc2FtcGxpbmcpdGhyb3cgRXJyb3IoYEhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZyAocmVxdWlyZWQgZm9yICR7dH0pYCk7YnJlYWt9fWFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eSh0KXtzd2l0Y2godCl7Y2FzZSJ0b29scy9jYWxsIjpjYXNlInRvb2xzL2xpc3QiOmlmKCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMpdGhyb3cgRXJyb3IoYENsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHRvb2wgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7dH0pYCk7cmV0dXJuO2Nhc2UicGluZyI6Y2FzZSJ1aS9yZXNvdXJjZS10ZWFyZG93biI6cmV0dXJuO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYE5vIGhhbmRsZXIgZm9yIG1ldGhvZCAke3R9IHJlZ2lzdGVyZWRgKX19YXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0KXt9YXNzZXJ0VGFza0NhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrIGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXN5bmMgY2FsbFNlcnZlclRvb2wodCxuKXtpZih0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY2FsbFNlcnZlclRvb2wiKSx0eXBlb2YgdD09InN0cmluZyIpdGhyb3cgRXJyb3IoYGNhbGxTZXJ2ZXJUb29sKCkgZXhwZWN0cyBhbiBvYmplY3QgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBidXQgcmVjZWl2ZWQgYSBzdHJpbmcgKCIke3R9IikuIERpZCB5b3UgbWVhbjogY2FsbFNlcnZlclRvb2woeyBuYW1lOiAiJHt0fSIsIGFyZ3VtZW50czogeyAuLi4gfSB9KT9gKTtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRvb2xzL2NhbGwiLHBhcmFtczp0fSx6cix7b25wcm9ncmVzczooKT0+e30scmVzZXRUaW1lb3V0T25Qcm9ncmVzczohMCwuLi5ufSl9YXN5bmMgcmVhZFNlcnZlclJlc291cmNlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZWFkU2VydmVyUmVzb3VyY2UiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL3JlYWQiLHBhcmFtczp0fSwkZixuKX1hc3luYyBsaXN0U2VydmVyUmVzb3VyY2VzKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJsaXN0U2VydmVyUmVzb3VyY2VzIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9saXN0IixwYXJhbXM6dH0sU2Ysbil9YXN5bmMgY3JlYXRlU2FtcGxpbmdNZXNzYWdlKHQsbil7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNyZWF0ZVNhbXBsaW5nTWVzc2FnZSIpO2xldCBvPXQudG9vbHM/UmY6RWY7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIixwYXJhbXM6dH0sbyxuKX1zZW5kTWVzc2FnZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZE1lc3NhZ2UiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvbWVzc2FnZSIscGFyYW1zOnR9LGFfLG4pfXNlbmRMb2codCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvbWVzc2FnZSIscGFyYW1zOnR9KX11cGRhdGVNb2RlbENvbnRleHQodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInVwZGF0ZU1vZGVsQ29udGV4dCIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIscGFyYW1zOnR9LEphLG4pfW9wZW5MaW5rKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJvcGVuTGluayIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9vcGVuLWxpbmsiLHBhcmFtczp0fSxzXyxuKX1zZW5kT3Blbkxpbms9dGhpcy5vcGVuTGluaztkb3dubG9hZEZpbGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImRvd25sb2FkRmlsZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9kb3dubG9hZC1maWxlIixwYXJhbXM6dH0saV8sbil9cmVxdWVzdFRlYXJkb3duKHQ9e30pe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iLHBhcmFtczp0fSl9cmVxdWVzdERpc3BsYXlNb2RlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZXF1ZXN0RGlzcGxheU1vZGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiLHBhcmFtczp0fSxnXyxuKX1zZW5kU2l6ZUNoYW5nZWQodCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIixwYXJhbXM6dH0pfXNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl7bGV0IHQ9ITEsbj0wLG89MCxyPSgpPT57dHx8KHQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dD0hMTtsZXQgaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1pLnN0eWxlLmhlaWdodDtpLnN0eWxlLmhlaWdodD0ibWF4LWNvbnRlbnQiO2xldCBjPU1hdGguY2VpbChpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7aS5zdHlsZS5oZWlnaHQ9YTtsZXQgdT1NYXRoLmNlaWwod2luZG93LmlubmVyV2lkdGgpOyh1IT09bnx8YyE9PW8pJiYobj11LG89Yyx0aGlzLnNlbmRTaXplQ2hhbmdlZCh7d2lkdGg6dSxoZWlnaHQ6Y30pKX0pKX07cigpO2xldCBzPW5ldyBSZXNpemVPYnNlcnZlcihyKTtyZXR1cm4gcy5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5vYnNlcnZlKGRvY3VtZW50LmJvZHkpLCgpPT5zLmRpc2Nvbm5lY3QoKX1hc3luYyBjb25uZWN0KHQ9bmV3IHRfKHdpbmRvdy5wYXJlbnQsd2luZG93LnBhcmVudCksbil7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkFwcCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIGFnYWluLiIpO3RoaXMuX2luaXRpYWxpemVkU2VudD0hMSxhd2FpdCBzdXBlci5jb25uZWN0KHQpO3RyeXtsZXQgbz1hd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvaW5pdGlhbGl6ZSIscGFyYW1zOnthcHBDYXBhYmlsaXRpZXM6dGhpcy5fY2FwYWJpbGl0aWVzLGFwcEluZm86dGhpcy5fYXBwSW5mbyxwcm90b2NvbFZlcnNpb246WGJ9fSx5XyxuKTtpZihvPT09dm9pZCAwKXRocm93IEVycm9yKGBTZXJ2ZXIgc2VudCBpbnZhbGlkIGluaXRpYWxpemUgcmVzdWx0OiAke299YCk7dGhpcy5faG9zdENhcGFiaWxpdGllcz1vLmhvc3RDYXBhYmlsaXRpZXMsdGhpcy5faG9zdEluZm89by5ob3N0SW5mbyx0aGlzLl9ob3N0Q29udGV4dD1vLmhvc3RDb250ZXh0LGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQifSksdGhpcy5faW5pdGlhbGl6ZWRTZW50PSEwLHRoaXMub3B0aW9ucz8uYXV0b1Jlc2l6ZSYmdGhpcy5zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpfWNhdGNoKG8pe3Rocm93IHRoaXMuY2xvc2UoKSxvfX19bGV0IGV1PSIiO2NvbnN0IFpmPShlLHQsbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT57aWYoIWUpcmV0dXJuOyhlLnRoZW1lPT09ImxpZ2h0Inx8ZS50aGVtZT09PSJkYXJrIikmJnQuYXBwbHlEb2N1bWVudFRoZW1lKGUudGhlbWUpO2NvbnN0IG89ZS5zdHlsZXM/LnZhcmlhYmxlcztvJiZ0eXBlb2Ygbz09Im9iamVjdCImJnQuYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXMobyk7Y29uc3Qgcj1lLnN0eWxlcz8uY3NzPy5mb250czt0eXBlb2Ygcj09InN0cmluZyImJnImJnIhPT1ldSYmKHQuYXBwbHlIb3N0Rm9udHMociksZXU9cik7Y29uc3Qgcz1lLnNhZmVBcmVhSW5zZXRzO2lmKHMpZm9yKGNvbnN0IGkgb2ZbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdKXtjb25zdCBhPU51bWJlcihzW2ldPz8wKTtuLnN0eWxlLnNldFByb3BlcnR5KGAtLWluc2V0LSR7aX1gLGAke051bWJlci5pc0Zpbml0ZShhKSYmYT4wP2E6MH1weGApfX0sRmU9bmV3IGRjKHtuYW1lOiJob3RlbC1zdG9yZWZyb250Iix2ZXJzaW9uOiIxLjAuMCJ9LHtvcGVuTGlua3M6e319KSxPZj17YXBwbHlEb2N1bWVudFRoZW1lOmtfLGFwcGx5SG9zdFN0eWxlVmFyaWFibGVzOlNfLGFwcGx5SG9zdEZvbnRzOiRffSxpZT1lPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxtPWU9PlN0cmluZyhlPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLHQ9PnQ9PT0iJiI/IiZhbXA7Ijp0PT09IjwiPyImbHQ7Ijp0PT09Ij4iPyImZ3Q7Ijp0PT09JyInPyImcXVvdDsiOiImIzM5OyIpO2xldCBFdD0iIixPcj0iIixBZj17fSxOZj0hMSxqZj0iIixPPXtjaGVja0luOiIiLGNoZWNrT3V0OiIiLGd1ZXN0czoyfSxiZT0xO2NvbnN0IHpfPTU7bGV0IGtlPW51bGwsQXQ9W10sWWU9IiIsTWU9W10sVHQ9bnVsbDtjb25zdCBUXz1uZXcgU2V0KFsiYm9va2luZyIsImNhbmNlbGxlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0Il0pLFBfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0iaG90ZWxzInx8dD09PSJuby1ob3RlbHMiKXtjb25zdCBuPVsuLi5uZXcgU2V0KChlLmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby5jaXR5KSkpXTtyZXR1cm4gbi5sZW5ndGg9PT0xP1N0cmluZyhuWzBdKTpgJHtlLnRvdGFsPz8wfSBob3RlbHNgfXJldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyI/U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKTp0PT09ImV4dHJhcyI/YCR7U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKX0gYWRkLW9uc2A6dD09PSJ0cmlwIj8idGhlIHRyaXAiOnQ9PT0iYm9va2luZ3MiPyJ5b3VyIGJvb2tpbmdzIjp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMiPyJ0aGUgcG9saWNpZXMiOiJiYWNrIn0sSV89KCk9Pntjb25zdCBlPWllKCJiYWNrYnRuIiksdD1NZS5hdCgtMSk7ZS5oaWRkZW49IXQsdCYmKGUudGV4dENvbnRlbnQ9YOKAuSAke3QubGFiZWx9YCl9O2xldCBLcj0iIixXcj0iIixwYz0wO2NvbnN0IE1mPWU9Pntjb25zdCB0PWU/LlsiY3VybGVzcy90cmlwIl07dCYmKHR5cGVvZiB0LnRyaXBJZD09InN0cmluZyImJnQudHJpcElkJiYoV3I9dC50cmlwSWQpLHBjPU51bWJlcih0LmNvdW50Pz8wKSl9LHhfPWU9PldyP3suLi5lLHRyaXA6V3J9OmUsRV89ZT0+QWZbZV0/PyIiO2xldCBEZj0hMTtjb25zdCB0dT1lPT57RGY9ZSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY2FyZCIpPy5jbGFzc0xpc3QudG9nZ2xlKCJidXN5IixlKX0sZWU9KGUsdD17fSk9Pntjb25zdCBuPUVfKGUpO3JldHVybiBuP0RmP1Byb21pc2UucmVzb2x2ZShudWxsKToodHUoITApLEZlLmNhbGxTZXJ2ZXJUb29sKHtuYW1lOm4sYXJndW1lbnRzOnhfKHQpfSkuZmluYWxseSgoKT0+dHUoITEpKS50aGVuKG89PntNZihvPy5fbWV0YSk7Y29uc3Qgcj1vPy5zdHJ1Y3R1cmVkQ29udGVudDtyZXR1cm4gciYmVHQmJiFUXy5oYXMoU3RyaW5nKFR0LnZpZXcpKSYmKE1lPVsuLi5NZSx7cGF5bG9hZDpUdCxsYWJlbDpQXyhUdCl9XS5zbGljZSgtNikpLHImJm1jKHIpLFJfKG8pLG99KSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBubyB0b29sIGZvciAke2V9YCkpfSxSXz1lPT57Y29uc3QgdD0oZT8uY29udGVudD8/W10pLmZpbmQobj0+bj8udHlwZT09PSJ0ZXh0Iik/LnRleHQ7IXR8fCFGZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/LnVwZGF0ZU1vZGVsQ29udGV4dHx8RmUudXBkYXRlTW9kZWxDb250ZXh0KHtjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDpTdHJpbmcodCl9XX0pLmNhdGNoKCgpPT57fSl9LFRyPWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LFByPWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxDXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLFpfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7Q199JHttKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHttKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLF9lPSgpPT5OZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke20oamZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixHcj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sWXI9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLEtlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake0dyKGUuY2hlY2tJbil9IOKAkyAke0dyKGUuY2hlY2tPdXQpfSDCtyAke1lyKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHtZcihlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixPXz0oZSx0LG4pPT57Y29uc3Qgbz1BdC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0sQV89KGUsdCk9Pntjb25zdCBuPUF0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxmYz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHttKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHttKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7bShuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxxZj0oZSx0KT0+e2NvbnN0IG49dHx8Tl8oKTtyZXR1cm4oIU8uY2hlY2tJbnx8Ty5jaGVja0luPG4pJiYoTy5jaGVja0luPW4pLCghTy5jaGVja091dHx8Ty5jaGVja091dDw9Ty5jaGVja0luKSYmKE8uY2hlY2tPdXQ9UXIoTy5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHttKE8uY2hlY2tJbil9IiBtaW49IiR7bShuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7bShPLmNoZWNrT3V0KX0iIG1pbj0iJHttKFFyKE8uY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGxhYmVsIGNsYXNzPSJndWVzdHMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7bShiZSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9sYWJlbD4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7bShoYygpKX08L3NwYW4+CiAgPC9kaXY+YH0saGM9KCk9Pntjb25zdCBlPU8uY2hlY2tJbiYmTy5jaGVja091dD9ZcihPLmNoZWNrSW4sTy5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPWJlPjE/YCR7YmV9IHJvb21zYDoiIjtyZXR1cm5bdCxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpfSxRcj0oZSx0KT0+bmV3IERhdGUoRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSt0Kjg2NGU1KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLE5fPSgpPT5uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksal89ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAoYT0+U3RyaW5nKGEuY2l0eSkpKV0sbz1hPT57Y29uc3QgYz10LmZpbmQodT0+dS5jaXR5PT09YSk/LmNvdW50cnk7cmV0dXJuIGMmJiFTdHJpbmcoYykuc3RhcnRzV2l0aChhKT9TdHJpbmcoYyk6IiJ9LHI9YT0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHttKGEpfSR7byhhKT9gPHNtYWxsPiDCtyAke20obyhhKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKGM9PmMuY2l0eT09PWEpLm1hcChjPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bShjLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtUcihTdHJpbmcoYy5pZCkpfSI+CiAgICAgICAgICAgICAgJHtjLmltYWdlVXJsP2A8aW1nIHNyYz0iJHttKGMuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHttKFByKFN0cmluZyhjLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7Yy5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7bShjLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke20oYy5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7bShuLmxlbmd0aD4xP2MuYXJlYT8/Yy5jaXR5OltjLmFyZWEsYy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2MuZnJvbU5pZ2h0bHk/YCR7bShjLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJHtaXyhjLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLHM9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxpPXMtdC5sZW5ndGg7cmV0dXJuW19lKCksYDxkaXY+JHtuLm1hcChyKS5qb2luKCIiKX08L2Rpdj5gLGk+MD9gPGRpdiBjbGFzcz0ibm90ZSI+U2hvd2luZyAke3QubGVuZ3RofSBvZiAke3N9LiBOYW1lIGEgY2l0eSBvciBhIGNvdW50cnkgdG8gc2VlIHRoZSByZXN0LjwvZGl2PmA6IiJdLmpvaW4oIiIpfSxMZj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7VHIoU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHttKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke20oUHIoU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke20oZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke20oW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7bShlLnJhdGluZy52YWx1ZSl94piFICgke20oZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHttKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke20odCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxNXz0oZSx0LG4pPT57Y29uc3Qgbz1PXyhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke1RyKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7bSh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOm0oUHIoU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20odC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke20ocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHttKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7bSh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHttKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7bSh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7bSh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHtiZT4xP2AgwrcgJHtiZX0gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7bSh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2ZjKGBkYXRhLWFkZC1yb29tPSIke20odC5pZCl9IiBkYXRhLWhvdGVsPSIke20oZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSxiZSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxudT1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUucm9vbXM/P1tdLG89ZS5zdGF5Pz9PO3JldHVybltfZSgpLExmKHQpLHFmKFN0cmluZyh0LmlkKSx0LnRvZGF5VGhlcmUpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke20oZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9Pk1fKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke20odC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke20oci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke20odC5pZCl9Ij4ke20oci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LERfPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdO3JldHVybltfZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChvPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20oby5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bShvLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke20oby5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke20oby5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtmYyhgZGF0YS1hZGQtZXh0cmE9IiR7bShvLmlkKX0iIGRhdGEtaG90ZWw9IiR7bSh0LmlkKX0iYCxBXyhTdHJpbmcodC5pZCksU3RyaW5nKG8uaWQpKSxTdHJpbmcoby5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bSh0LmlkKX0iPkJhY2sgdG8gJHttKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LHFfPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHttKGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke20oZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7bShlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHttKGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHttKGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7bShlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7bShlLmhvdGVsSWQpfSJgO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bShlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke20oZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke0tlKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHttKGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHttKGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2ZjKHQsTnVtYmVyKGUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxMXz1lPT57Y29uc3QgdD1lLmxpbmVzPz9bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW19lKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+QnJvd3NlICR7bShFdCl9IGhvdGVsczwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltfZSgpLG4ubWFwKG89PmAKICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJkYXkiPiR7bShHcihvKSl9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0icm93cyI+JHt0LmZpbHRlcihyPT5TdHJpbmcoci5kYXk/PyIiKT09PW8pLm1hcChxXykuam9pbigiIil9PC9kaXY+YCkuam9pbigiIiksKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobz0+YCR7bShvLnRpdGxlKX06ICR7bShvLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke20oZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke20oZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSBnb29kIj48c3Bhbj4ke20oZS5tZW1iZXJTYXZpbmcudGllcil9IG1lbWJlciByYXRlPC9zcGFuPjxzcGFuPuKIkiAke20oZS5tZW1iZXJTYXZpbmcuc2F2ZWQpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj5Ub3RhbDwvc3Bhbj48c3Bhbj4ke20oZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyB0cmlwIGVhcm5zPC9zcGFuPjxzcGFuPiR7bShOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCwnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke20oRXQpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxVZigpLGtlPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7bShFdCl9IENpcmNsZSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7SGYoKX1gXS5qb2luKCIiKX0sVWY9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIj48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8bGFiZWw+QW55dGhpbmcgdGhlIGhvdGVsIHNob3VsZCBrbm93PGlucHV0IGlkPSJnbm90ZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBIGxhdGUgYXJyaXZhbCwgYSBoaWdoIGZsb29yIOKAlCBvcHRpb25hbCI+PC9sYWJlbD4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj5Ib2xkIHRoZXNlIHJvb21zPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4KICA8L2Rpdj5gLFVfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke20oKGUubWlzc2luZz8/W10pLmpvaW4oIiBhbmQgIil8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsVWYoITApLCc8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4nXS5qb2luKCIiKSxIXz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW19lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHttKHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke20odC5uYW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiIHN0eWxlPSJmb250LXNpemU6MjBweCI+JHttKHQudGllcj8ubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke20oTnVtYmVyKHQucG9pbnRzPz8wKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9IHBvaW50czwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHttKE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke20odC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sRl89KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLEhmKCEwKV0uam9pbigiIiksSGY9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxCXz1lPT57Y29uc3QgdD1lLmJvb2tpbmc/P3t9O3JldHVybltfZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke20odC5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke20odC5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHttKEtlKHQuc3RheSkpfSDCtyAke20odC5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+VGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7bShTdHJpbmcodC5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpKX0gVVRDLiBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibW9uZXktb3V0Ij48c3Bhbj5Ub3RhbCBmb3IgdGhlIHN0YXk8L3NwYW4+PHNwYW4+JHttKGUudG90YWwpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4keyh0LnF1b3RlPy5saW5lcz8/W10pLm1hcChWXykuam9pbigiIil9PC9kaXY+YCxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHttKHQuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LFZfPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bShlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHttKGUua2luZD09PSJyb29tIj9LZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke20oZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxKXz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQifSxLXz1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXTtyZXR1cm4gdC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W19lKCksYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHttKG4uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke20oS2Uobi5zdGF5KSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJiYWRnZXMiPjxzcGFuIGNsYXNzPSJiYWRnZSAke0pfW1N0cmluZyhuLnN0YXR1cyldPz8iIn0iPiR7bShuLnN0YXR1cyl9PC9zcGFuPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke20obi5xdW90ZT8udG90YWw/PyIiKX08L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7bi5zdGF0dXM9PT0icmVxdWVzdGVkInx8bi5zdGF0dXM9PT0iY29uZmlybWVkIj9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsPC9idXR0b24+YDoiIn08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIil9LG91PWU9Pntjb25zdCB0PWUudmlldz09PSJjYW5jZWxsZWQiLG49ZS5ib29raW5nPz97fTtyZXR1cm5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDYW5jZWxsZWQiOiJDYW5jZWxsaW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHttKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHttKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHttKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sQXI9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7bShlLnRpdGxlKX08L2g0PiR7bShlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHttKG8udGl0bGUpfTwvaDQ+JHttKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHttKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHttKHQuaWQpfSI+QmFjayB0byAke20odC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sV189ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHttKHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7VHIoU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7bShyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7bShQcihTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHttKHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7bShyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke20oci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7bShyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7bShyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke20ocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke20ocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW19lKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke20oZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7bShLZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7bShlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHttKHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke20oaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHttKHIubmFtZSl9OiAke20oci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5UYXAgYSBwaWN0dXJlIHRvIHNlZSB0aGF0ICR7bShlLnZvY2FiPy5ub3VuPz8iaG90ZWwiKX0ncyByb29tcy48L2Rpdj5gXS5qb2luKCIiKX0sR189ZT0+e2NvbnN0IHQ9ZS5kYXlzPz9bXTtyZXR1cm5bX2UoKSxgPGRpdj4KICAgICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKGUudGl0bGUpfTwvZGl2PgogICAgICAgJHtlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7bShLZShlLnN0YXkpKX08L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9ImdhcCI+PGI+JHttKGUuaW5UcmlwKX0vJHttKGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7bShlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChuLG8pPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke28rMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7bShuLmxhYmVsKX08L2Rpdj4KICAgICAgICAgICR7bi5ub3RlP2A8ZGl2IGNsYXNzPSJkYXlub3RlIj4ke20obi5ub3RlKX08L2Rpdj5gOiIifQogICAgICAgICAgJHsobi5pdGVtcz8/W10pLm1hcChyPT5gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSIke3Iua2luZD09PSJob3RlbCI/YCBkYXRhLWhvdGVsPSIke20oci5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwImA6IiJ9PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20oci5uYW1lKX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bShbci5kZXRhaWwsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmluVHJpcD8ieWVzIjoibm8ifSI+JHtyLmluVHJpcD8iSW4gdGhlIHRyaXAiOiJQbGFuIG9ubHkifTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+YCkuam9pbigiIil9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobj0+YCR7bShuLm5hbWUpfTogJHttKG4ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIl0uam9pbigiIil9LG1jPWU9PntpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybjtlLnRvb2xOYW1lcyYmKEFmPWUudG9vbE5hbWVzKSxlLmJyYW5kJiYoRXQ9U3RyaW5nKGUuYnJhbmQpKSxlLmxvZ29VcmwmJihPcj1TdHJpbmcoZS5sb2dvVXJsKSksdHlwZW9mIGUuZGVtbz09ImJvb2xlYW4iJiYoTmY9ZS5kZW1vKSxlLmRlbW9Ob3RlJiYoamY9U3RyaW5nKGUuZGVtb05vdGUpKSx0eXBlb2YgZS5yb29tc193YW50ZWQ9PSJudW1iZXIiJiYoYmU9ZS5yb29tc193YW50ZWQpLGUubWVtYmVyPy50aWVyPy5uYW1lJiYoa2U9ZS5tZW1iZXIpLGUudmlldz09PSJzaWduZWQtb3V0IiYmKGtlPW51bGwpLGUuc3RheT8uY2hlY2tJbiYmKE89e2NoZWNrSW46ZS5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6ZS5zdGF5LmNoZWNrT3V0LGd1ZXN0czplLnN0YXkuZ3Vlc3RzPz8yfSksKGUudmlldz09PSJ0cmlwInx8ZS52aWV3PT09Im5lZWRzLWRhdGVzIikmJihBdD1lLmxpbmVzPz9bXSksKGUudmlldz09PSJib29raW5nInx8ZS52aWV3PT09ImVtcHR5LXRyaXAiKSYmKEF0PVtdLHBjPTApLFllPVN0cmluZyhlLnZpZXc/PyIiKSxJXygpO2NvbnN0IHQ9aWUoImJyYW5kIik7T3I/KHQuc3JjPU9yLHQuaGlkZGVuPSExLGllKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KHQuaGlkZGVuPSEwLGllKCJ0aXRsZSIpLmhpZGRlbj0hMSxpZSgidGl0bGUiKS50ZXh0Q29udGVudD1FdHx8IkhvdGVscyIpLGllKCJzdWIiKS50ZXh0Q29udGVudD1RXyhlKSxleSgpLFhfKCk7Y29uc3Qgbj17aG90ZWxzOmpfLCJuby1ob3RlbHMiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vdGhpbmcgbWF0Y2hlZC4gVHJ5IGEgY2l0eS48L2Rpdj4nLGhvdGVsOm51LCJuby1yb29tcyI6bnUsImhvdGVsLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhhdCBob3RlbCBpcyBub3QgaW4gdGhpcyBjb25uZWN0b3IuPC9kaXY+JyxleHRyYXM6RF8sdHJpcDpMXywibmVlZHMtZGF0ZXMiOllfLGJvb2tpbmc6Ql8sIm5lZWRzLWd1ZXN0IjpVXyxtZW1iZXI6SF8sIm1lbWJlci1ub3QtZm91bmQiOkZfLCJzaWduZWQtb3V0IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5TaWduZWQgb3V0LiBSYXRlcyBhcmUgdGhlIHB1YmxpYyBvbmVzIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj48L2Rpdj4nLCJlbXB0eS10cmlwIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGVyZSBpcyBub3RoaW5nIGluIHRoZSB0cmlwIHlldC48L2Rpdj4nLGJvb2tpbmdzOktfLCJjYW5jZWxsYXRpb24tcHJldmlldyI6b3UsY2FuY2VsbGVkOm91LCJib29raW5nLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZyBoZXJlIG1hdGNoZXMgdGhhdCBjb2RlLjwvZGl2PicsY29tcGFyaXNvbjpXXywibm90aGluZy10by1jb21wYXJlIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5Ob25lIG9mIHRob3NlIGFyZSBob3RlbHMgdGhpcyBjb25uZWN0b3Iga25vd3MuPC9kaXY+JyxpdGluZXJhcnk6R18sImVtcHR5LWl0aW5lcmFyeSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+QW4gaXRpbmVyYXJ5IG5lZWRzIGF0IGxlYXN0IG9uZSBkYXkuPC9kaXY+Jyxwb2xpY3k6QXIscG9saWNpZXM6QXIsInBvbGljeS1taXNzaW5nIjpBcn07KFllPT09ImhvdGVsInx8WWU9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQmJihLcj1TdHJpbmcoZS5ob3RlbC5pZCksZS5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5nYygpLDApKSxUdD1lO2NvbnN0IG89bltZZV07aWUoImNvbnRlbnQiKS5pbm5lckhUTUw9bz9vKGUpOmA8ZGl2IGNsYXNzPSJlcnIiPiR7bShlLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7ZS5kZXRhaWw/YDxicj4ke20oZS5kZXRhaWwpfWA6IiJ9PC9kaXY+YH0sWV89ZT0+W19lKCksZS5ob3RlbD9MZihlLmhvdGVsKToiIixgPGRpdiBjbGFzcz0iZXJyIj4ke20oZS53aHk/PyJXaGljaCBuaWdodHM/IEEgcm9vbSBuZWVkcyBhIGNoZWNrLWluIGFuZCBhIGNoZWNrLW91dCBkYXRlLiIpfTwvZGl2PmAscWYoU3RyaW5nKGUuaG90ZWw/LmlkPz8iIiksZS5ob3RlbD8udG9kYXlUaGVyZSldLmpvaW4oIiIpLFFfPWU9PmUudmlldz09PSJob3RlbHMiP2Ake2UudG90YWw/PzB9ICR7TnVtYmVyKGUudG90YWwpPT09MT8iaG90ZWwiOiJob3RlbHMifWA6ZS52aWV3PT09ImhvdGVsInx8ZS52aWV3PT09Im5vLXJvb21zIj9LZShlLnN0YXkpOmUudmlldz09PSJ0cmlwIj8oZS5saW5lcz8/W10pLmxlbmd0aD9TdHJpbmcoZS50b3RhbD8/IiIpOiIiOmUudmlldz09PSJjb21wYXJpc29uIj9gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgOmUudmlldz09PSJpdGluZXJhcnkiP2Ake2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixYXz0oKT0+e2NvbnN0IGU9aWUoIm1lbWJlcmNoaXAiKTtrZT8oZS5oaWRkZW49ITEsZS50ZXh0Q29udGVudD1gJHtrZS50aWVyPy5uYW1lPz8iTWVtYmVyIn0gwrcgJHtNYXRoLnJvdW5kKChrZS50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixgJHtrZS5uYW1lfSDCtyAke2tlLnByb2dyYW1tZX1gKSk6KGUuaGlkZGVuPVllPT09Im1lbWJlci1ub3QtZm91bmQiLGUudGV4dENvbnRlbnQ9Ik1lbWJlciBzaWduIGluIixlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJhc2stc2lnbi1pbiIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKX0sZXk9KCk9Pntjb25zdCBlPWllKCJoZWFkdHJpcCIpLHQ9cGN8fEF0Lmxlbmd0aDtlLmhpZGRlbj10PT09MHx8WWU9PT0idHJpcCIsaWUoImhlYWR0cmlwbiIpLnRleHRDb250ZW50PVN0cmluZyh0KX0sdHk9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3UiKTtPPXtjaGVja0luOmU/LnZhbHVlPz9PLmNoZWNrSW4sY2hlY2tPdXQ6dD8udmFsdWU/P08uY2hlY2tPdXQsZ3Vlc3RzOk51bWJlcihuPy52YWx1ZT8/Ty5ndWVzdHMpfHwyfX0sV249KGU9e30pPT5PLmNoZWNrSW4mJk8uY2hlY2tPdXQ/e2NoZWNrSW46Ty5jaGVja0luLGNoZWNrT3V0Ok8uY2hlY2tPdXQsZ3Vlc3RzOk8uZ3Vlc3RzLC4uLmV9OmU7bGV0IHJ1O2NvbnN0IGdjPShlPTApPT57S3ImJihjbGVhclRpbWVvdXQocnUpLHJ1PXNldFRpbWVvdXQoKCk9PntlZSgiZ2V0SG90ZWwiLHtob3RlbDpLcixyb29tczpiZSwuLi5XbigpfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHRob3NlIG5pZ2h0cy4iKSl9LGUpKX0sSz1lPT57aWUoImNvbnRlbnQiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGA8ZGl2IGNsYXNzPSJlcnIiPiR7bShlKX08L2Rpdj5gKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1ob3RlbF0sW2RhdGEtYWN0XSxbZGF0YS1wb2xpY3ldLFtkYXRhLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jYW5jZWxdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYobiE9PW51bGwpe3R5KCksYmU9TWF0aC5taW4oel8sTWF0aC5tYXgoMSxiZStOdW1iZXIobikpKTtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO3AmJihwLnRleHRDb250ZW50PVN0cmluZyhiZSkpO2NvbnN0IGc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO2cmJihnLnRleHRDb250ZW50PWhjKCkpLGdjKDQ1MCk7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihvIT09bnVsbCl7Y29uc3QgcD10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixnPU51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLGI9dC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT97Y2hlY2tJbjp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpPz8iIixjaGVja091dDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpPz8iIixndWVzdHM6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWd1Iik/PzIpfTpXbigpO2VlKCJhZGRUb1RyaXAiLHtob3RlbDpwLHJvb206byxyb29tczpnLC4uLmJ9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLWV4dHJhIik7aWYociE9PW51bGwpe2VlKCJhZGRUb1RyaXAiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixleHRyYTpyLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHMhPT1udWxsKXtlZSgibGlzdEV4dHJhcyIse2hvdGVsOnMsLi4uV24oKX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcG9saWN5Iik7aWYoaSE9PW51bGwpe2VlKCJwb2xpY2llcyIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHRvcGljOml9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhhdCBwb2xpY3kuIikpO3JldHVybn1jb25zdCBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNhbmNlbCIpO2lmKGEhPT1udWxsKXtlZSgicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6YX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0IGM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZihjIT09bnVsbCl7ZWUoImNhbmNlbEJvb2tpbmciLHtib29raW5nOmMsY29uZmlybWVkOiEwfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBjYW5jZWwgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgdT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZih1PT09ImJhY2siKXtjb25zdCBwPU1lLmF0KC0xKTtpZighcClyZXR1cm47TWU9TWUuc2xpY2UoMCwtMSksbWMocC5wYXlsb2FkKTtyZXR1cm59aWYodT09PSJob21lIil7ZWUoImxpc3RIb3RlbHMiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKHU9PT0ibWVtYmVyIil7ZWUoInNpZ25JbiIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgcmVhZCB0aGUgbWVtYmVyc2hpcC4iKSk7cmV0dXJufWlmKHU9PT0iYXNrLXNpZ24taW4iKXtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtwJiYocC5oaWRkZW49ITEpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKHU9PT0ic2lnbi1pbiIpe2NvbnN0IHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIixnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIXB8fCFnKXtLKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59ZWUoInNpZ25JbiIse251bWJlcjpwLHN1cm5hbWU6Z30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKHU9PT0ic2lnbi1vdXQiKXtrZT1udWxsLGVlKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKHU9PT0iYXNrLWJvb2siKXtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpO3AmJihwLmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKHU9PT0iYm9vayIpe2NvbnN0IHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ21haWwiKT8udmFsdWUudHJpbSgpPz8iIixiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFwfHwhZyl7SygiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufWVlKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6cCxlbWFpbDpnLC4uLmI/e25vdGVzOmJ9Ont9fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBhc2sgZm9yIHRob3NlIHJvb21zLiIpKTtyZXR1cm59aWYodT09PSJib29raW5ncyIpe2VlKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKHU9PT0idHJpcCIpe2VlKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtsJiZlZSgiZ2V0SG90ZWwiLHtob3RlbDpsLC4uLlduKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhhdCBob3RlbC4iKSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGU9Pntjb25zdCB0PWUudGFyZ2V0O2lmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIW58fCFvKXJldHVybjtpZih0LmlkPT09ImNpIiYmbi52YWx1ZSl7Y29uc3Qgcz1RcihuLnZhbHVlLDEpO28ubWluPXMsKCFvLnZhbHVlfHxvLnZhbHVlPD1uLnZhbHVlKSYmKG8udmFsdWU9cyl9Ty5jaGVja0luPW4udmFsdWV8fE8uY2hlY2tJbixPLmNoZWNrT3V0PW8udmFsdWV8fE8uY2hlY2tPdXQ7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7ciYmKHIudGV4dENvbnRlbnQ9aGMoKSksZ2MoKX0pO2NvbnN0IEZmPShlLHQpPT57dHJ5e01mKHQpLE1lPVtdLG1jKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxpZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07RmUub250b29scmVzdWx0PWU9PkZmKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtGZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT5aZihlLE9mKTtGZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9RmUuZ2V0SG9zdENvbnRleHQoKTtaZihlLE9mKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJkZmKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PntpZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0jY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMnB4fS5oZWFke21pbi1oZWlnaHQ6MjhweH0uaG9tZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjB9LmhvbWU6aG92ZXJ7b3BhY2l0eTouNzJ9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5iYWNrYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMXB4IDRweCA4cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LXdpZHRoOjQyJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjdXJzb3I6cG9pbnRlcn0uYmFja2J0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uaGVhZCAuc3Vie2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWlubGluZS1zdGFydDphdXRvO3RleHQtYWxpZ246ZW5kfS5oZWFkdHJpcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo1cHggMTFweCA1cHggOXB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0uaGVhZHRyaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uaGVhZCAuc3ViKy5oZWFkdHJpcHttYXJnaW4taW5saW5lLXN0YXJ0OjB9LmNhcmQuYnVzeXtvcGFjaXR5Oi42Mn0uY2FyZC5idXN5IGJ1dHRvbiwuY2FyZC5idXN5IGlucHV0LC5jYXJkLmJ1c3kgc2VsZWN0e3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1lbWJlcmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEwcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjIwO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0ubWVtYmVyY2hpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5saW5reXtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO2ZvbnQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1saW5rKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5wLXdhc3tmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnAtbWVtYmVye2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LnN1bS5nb29kIHNwYW46bGFzdC1jaGlsZHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5kZW1ve2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQ1fS5kZW1vIGJ7Zm9udC13ZWlnaHQ6NzAwfS5jaXR5Z3JvdXArLmNpdHlncm91cHttYXJnaW4tdG9wOjE0cHh9LmNpdHluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLWJvdHRvbTo4cHh9LmNpdHluYW1lIHNtYWxse2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtvcGFjaXR5Oi43NX0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9LnQtc2hvdCBpbWcsLmhlcm8gaW1ne3otaW5kZXg6MX0udC1icmFuZHt6LWluZGV4OjI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtYmxvY2stc3RhcnQ6OHB4O2luc2V0LWlubGluZS1zdGFydDo4cHg7YmFja2dyb3VuZDojMDAwMDAwNjE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbX0udC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nOjEwcHggMTFweCAxMXB4fS50LW5hbWV7Zm9udC13ZWlnaHQ6NjQwO2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS4zO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjI7bGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDoyLjZlbX0udC13aGVyZXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udC1mb290e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6OHB4O21hcmdpbi10b3A6MnB4fS50LWZyb217Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwfS50LWZyb20gc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMXB4fS5yYXRle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJhdGUgc3Zne2NvbG9yOiNlOGEzM2R9Lmhlcm97cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MjEgLyA4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0uaGVybyAudC1tYXJre2ZvbnQtc2l6ZTo0MHB4fS5oLW5hbWV7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjgwO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07bGluZS1oZWlnaHQ6MS4yNX0uaC13aGVyZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4fS5oLXN1bXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7YmFja2dyb3VuZDp2YXIoLS1iZyl9LnN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMTEycHgsMWZyKSBtaW5tYXgoMTEycHgsMWZyKSBhdXRvIDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmVuZDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnN0YXkgbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MX0uY21wLWhlYWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZzoxMHB4IDExcHggMTJweH0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWQiPgogICAgICAgIDwhLS0gVGhlIGdyb3VwJ3Mgd29yZG1hcmsgYXJyaXZlcyBXSVRIIFRIRSBEQVRBIGFzIGBsb2dvVXJsYC4gTm90aGluZyBpcwogICAgICAgICAgICAgYmFrZWQgaW4gaGVyZTogYSBsb2dvIGNvbXBpbGVkIGludG8gdGhlIGNhcmQgaXMgdGhlIGZpcnN0IGJyYW5kJ3MsCiAgICAgICAgICAgICBhbmQgZXZlcnkgaG90ZWwgZ3JvdXAgYWZ0ZXIgdGhlbSB3b3VsZCB3ZWFyIGl0LiAtLT4KICAgICAgICA8IS0tIFRoZSB3YXkgYmFjaywgb24gZXZlcnkgdmlldy4gV2l0aG91dCBpdCB0aGUgdHJpcCwgdGhlIGJvb2tpbmdzIGxpc3QKICAgICAgICAgICAgIGFuZCBhIGNhbmNlbGxlZCBib29raW5nIGFyZSBhbGwgcGxhY2VzIGEgZ3Vlc3QgY2FuIHJlYWNoIGFuZCBub3QKICAgICAgICAgICAgIGxlYXZlIChyb2JpbiwgMjAyNi0wOS0xOCkuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhvbWUiIGlkPSJob21lIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIiBhcmlhLWxhYmVsPSJCYWNrIHRvIHRoZSBob3RlbHMiPgogICAgICAgICAgPGltZyBjbGFzcz0iYnJhbmQiIGlkPSJicmFuZCIgYWx0PSIiIGhpZGRlbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSIgaWQ9InRpdGxlIj48L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgICAgPCEtLSBPbmUgc3RlcCBiYWNrIElOU0lERSB0aGUgY2FyZC4gVGhlIGJyYW5kIGFib3ZlIGdvZXMgaG9tZSwgd2hpY2ggaXMgYQogICAgICAgICAgICAgZGlmZmVyZW50IGFuc3dlcjsgdGhpcyBjb21lcyBiYWNrIHRvIHRoZSBvbmUgdGhleSB3ZXJlIHJlYWRpbmcgLSB0aGUKICAgICAgICAgICAgIHRocmVlIGhvdGVscyB0aGV5IHdlcmUgY29tcGFyaW5nIHdoZW4gdGhleSB0YXBwZWQgb25lIChyb2JpbiwKICAgICAgICAgICAgIDIwMjYtMDktMjEpLiBIaWRkZW4gdW5sZXNzIHRoZXJlIGlzIHNvbWV3aGVyZSB0byBnbyBiYWNrIHRvLCBhbmQKICAgICAgICAgICAgIGNsZWFyZWQgd2hlbmV2ZXIgdGhlIGNvbnZlcnNhdGlvbiBzZW5kcyBhIG5ldyBhbnN3ZXIuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJhY2tidG4iIGlkPSJiYWNrYnRuIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJiYWNrIiBoaWRkZW4+PC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9InN1YiIgaWQ9InN1YiI+PC9zcGFuPgogICAgICAgIDwhLS0gVGhlIHRpZXIsIG9yIHRoZSB3YXkgaW4uIEEgbWVtYmVyIHJhdGUgaXMgYSBmYWN0IGFib3V0IGV2ZXJ5IHByaWNlCiAgICAgICAgICAgICBvbiB0aGUgY2FyZCwgc28gaXQgYmVsb25ncyBpbiB0aGUgaGVhZGVyIHJhdGhlciB0aGFuIG9uIG9uZSB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW1iZXJjaGlwIiBpZD0ibWVtYmVyY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPjwvYnV0dG9uPgogICAgICAgIDwhLS0gVGhlIHRyaXAsIGZyb20gdGhlIHRvcC4gVGhlIHNob3BwaW5nIGNhcmQgbGVhcm5lZCBvbiAyMDI2LTA5LTE3IHRoYXQKICAgICAgICAgICAgIGEgZm9vdGVyLW9ubHkgY2FydCBtZWFucyBzY3JvbGxpbmcgcGFzdCB0d2VudHkgdGlsZXMgdG8gcmVhY2ggaXQuCiAgICAgICAgICAgICBTaG93biBvbmNlIHRoZSB0cmlwIGhhcyBzb21ldGhpbmcgaW4gaXQsIGhpZGRlbiBvbiB0aGUgdHJpcCB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkdHJpcCIgaWQ9ImhlYWR0cmlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIiBoaWRkZW4gYXJpYS1sYWJlbD0iVmlldyB0aGUgdHJpcCI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIKICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQgOC41aDE2djExYTEuNSAxLjUgMCAwIDEtMS41IDEuNWgtMTNBMS41IDEuNSAwIDAgMSA0IDE5LjV6IiAvPgogICAgICAgICAgICA8cGF0aCBkPSJNOSA4LjVWNmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyLjUiIC8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDxzcGFuIGlkPSJoZWFkdHJpcG4iPjA8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250ZW50Ij48ZGl2IGNsYXNzPSJlbXB0eSI+TG9hZGluZ+KApjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==', 'base64').toString('utf8');
5
+ export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgS2Y9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLFdmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxfYz17fSxHZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKGc9PlByb21pc2UucmVzb2x2ZShnKS50aGVuKHA9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnB9KSxwPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpwfSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9V2YobCxvKSxsIGluIF9jKXJldHVybjtfY1tsXT0hMDtjb25zdCBnPWwuZW5kc1dpdGgoIi5jc3MiKSxwPWc/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09bCYmKCFnfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke3B9YCkpcmV0dXJuO2NvbnN0IHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKHkucmVsPWc/InN0eWxlc2hlZXQiOktmLGd8fCh5LmFzPSJzY3JpcHQiKSx5LmNyb3NzT3JpZ2luPSIiLHkuaHJlZj1sLHUmJnkuc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5KSxnKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e3kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaykseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBZZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBRZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBzbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIFhmKGUpe31mdW5jdGlvbiBlaChlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIHRoKGUpe31mdW5jdGlvbiBOcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBqcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+dHMobikpLmpvaW4odCl9ZnVuY3Rpb24gR24oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIG5oe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIG5ldyBuaChlKX1mdW5jdGlvbiBYcihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBFZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gaXUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgeWM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gYXUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT15YylyZXR1cm4gbz09PXZvaWQgMCYmKG89eWMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIG9oKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gQmUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBpbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBTZShlKXtyZXR1cm4gaW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gY3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBCZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB1dShlLHQsbil7dCBpbiBlP0JlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gRGUoZSx0LG4sbyl7Y29uc3Qgcj1TZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9jdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTp1dShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiByaChlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/Y3UoZSxuLCgpPT50W25dKTp1dShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBlZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBzaChlKXtyZXR1cm4gZWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gaWgoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gYWgoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIGNoKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gbHUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIGR1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgZXM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IHB1PU50KCgpPT57aWYobmUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gUmUoZSl7aWYoWGUoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKFhlKG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gYW8oZSl7cmV0dXJuIFJlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gdWgoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgbGg9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LFluPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksZnU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBIKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiBfKGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBkaChlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiB0cyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBodShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IG11PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxndT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gdnUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gRGUocyxlLGNvKGUsdCkpLEgoZSxlZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBjbyhlLHQpe2NvbnN0IG49U2UoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBidShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoY28oZSx0KSksaT17fTtyZXR1cm4gRGUoaSxlLFJlZmxlY3Qub3duS2V5cyhTZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEgoZSxlZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBfdShlLHQpe2lmKCFSZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1TZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gSChlLGVlKGUuX3pvZC5kZWYse3NoYXBlOnl1KGUsdCl9KSl9ZnVuY3Rpb24geXUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBEZShuLGUsUmVmbGVjdC5vd25LZXlzKFNlKGUpKSkscmgobix0KSxufWZ1bmN0aW9uIHd1KGUsdCl7aWYoIVJlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBIKGUsZWUoZS5fem9kLmRlZix7c2hhcGU6eXUoZSx0KX0pKX1mdW5jdGlvbiBrdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtEZShuLGUsUmVmbGVjdC5vd25LZXlzKFNlKGUpKSksRGUobix0LFJlZmxlY3Qub3duS2V5cyhTZSh0KSkpO2NvbnN0IG89ZWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBIKGUsbyl9ZnVuY3Rpb24gTXIoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KGNvKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBEZShjLHQsUmVmbGVjdC5vd25LZXlzKFNlKHQpKSxlJiYoKHUsbCk9PmEmJiFhLmhhcyhsKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLEgodCxlZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBTdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoY28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIERlKHIsdCxSZWZsZWN0Lm93bktleXMoU2UodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEgodCxlZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIHJlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gJHUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBkZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIFdlKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIERyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBoZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOldlKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9XZShzPy4oZSkpPz9XZSh0Py5lcnJvcj8uKGUpKT8/V2Uobi5jdXN0b21FcnJvcj8uKGUpKT8/V2Uobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gdW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IHBoPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIGxvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIXBoLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gcG8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIHp1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gZXQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBmaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gVHUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFB1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gaGgoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gVHUodCtuKX1mdW5jdGlvbiBtaChlKXtyZXR1cm4gUHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGdoKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiB2aChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBiaHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIEl1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6X2goZSxuLG8udmFsdWUpfX1mdW5jdGlvbiB6ZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBmbyhlLHQsbil7cmV0dXJuIHplKGUsdCxuLCExKX1mdW5jdGlvbiBqdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gemUodGhpcyxuLG8odGhpcykpfSxzZXQocil7emUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIF9oKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjp6ZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe3plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiB5aChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IEVyLHhlPSExO2NvbnN0IHdoPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7eGU9ITB9fTtmdW5jdGlvbiB4KGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmRXIhPT1lLl96b2Qpe0VyPXZvaWQgMDtyZXR1cm59RXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHdoKTtjb25zdCByPXhlO3hlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIHhlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSkseGU9eGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSx4ZT14ZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24geHUoZSx0LG4sbyl7Y29uc3Qgcj15aChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IEV1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gbnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtFdV09ITAsdH1jb25zdCBvcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6Z3UsQ09OU1RBTlRfQ0FUQ0g6RXUsQ2xhc3M6YmgsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6bXUsYWJvcnRlZDpyZSxhbGxvd3NFdmFsOnB1LGFzc2VydDp0aCxhc3NlcnRFcXVhbDpZZixhc3NlcnRJczpYZixhc3NlcnROZXZlcjplaCxhc3NlcnROb3RFcXVhbDpRZixhc3NpZ25Qcm9wOkJlLGF0dGFjaFNjaGVtYTpEcixiYXNlNjRUb1VpbnQ4QXJyYXk6VHUsYmFzZTY0dXJsVG9VaW50OEFycmF5OmhoLGNhY2hlZDpOdCxjYXB0dXJlU3RhY2tUcmFjZTplcyxjbGVhbkVudW06ZmgsY2xlYW5SZWdleDpFZSxjbG9uZTpILGNsb25lRGVmOnNoLGNvZGVQb2ludExlbmd0aDpsbyxjb25zdGFudENhdGNoOm5zLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6ZGgsZGVmaW5lTGF6eTphdSxkZWZpbmVMYXp5SW50ZXJuYWw6eCxkZXJpdmVkOmp0LGVzYzpsdSxlc2NhcGVSZWdleDokZSxleHBsaWNpdGx5QWJvcnRlZDokdSxleHRlbmQ6X3UsZmluYWxpemVJc3N1ZTpoZSxmbG9hdFNhZmVSZW1haW5kZXI6aXUsZ2V0RWxlbWVudEF0UGF0aDppaCxnZXRFbnVtVmFsdWVzOk5yLGdldExlbmd0aGFibGVPcmlnaW46cG8sZ2V0UGFyc2VkVHlwZTpsaCxnZXRTaXphYmxlT3JpZ2luOnVvLGhleFRvVWludDhBcnJheTpnaCxoaWRlOmZvLGluc3RhbGxMYXp5UHJvcDp4dSxpc09iamVjdDpYZSxpc1BsYWluT2JqZWN0OlJlLGlzc3VlOmV0LGpvaW5WYWx1ZXM6anIsanNvblN0cmluZ2lmeVJlcGxhY2VyOkduLG1lbWJlcnM6SXUsbWVyZ2U6a3UsbWVyZ2VEZWZzOmVlLG5vcm1hbGl6ZVBhcmFtczpfLG51bGxpc2g6WHIsbnVtS2V5czp1aCxvYmplY3RDbG9uZTpvaCxvbWl0OmJ1LG9wdGlvbmFsS2V5czpodSxvd246emUscGFyc2VkVHlwZTp6dSxwYXJ0aWFsOk1yLHBpY2s6dnUscHJlZml4SXNzdWVzOmRlLHByaW1pdGl2ZVR5cGVzOmZ1LHByb21pc2VBbGxPYmplY3Q6YWgscHJvcGVydHlLZXlUeXBlczpZbixyYW5kb21TdHJpbmc6Y2gscmF3U2hhcGU6aW8scmVxdWlyZWQ6U3Usc2FmZUV4dGVuZDp3dSxzaGFsbG93Q2xvbmU6YW8sc2x1Z2lmeTpkdSxzdHJpbmdpZnlQcmltaXRpdmU6dHMsdG9ab2Q6c28sdWludDhBcnJheVRvQmFzZTY0OlB1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDptaCx1aW50OEFycmF5VG9IZXg6dmgsdW53cmFwTWVzc2FnZTpXZX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgd2M7Y29uc3QgcnM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLENyPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IGtjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIGtoKGUpe2NvbnN0IHQ9a2M7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBrYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIGQoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKHApe3RoaXMuZGVmPXAsdGhpcy5jb25zdHI9Zyx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyhwLGIpe2lmKHAuX3pvZCl7aWYocC5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7Q3IudmFsdWU9bmV3IHMoYik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJfem9kIixDcil9ZmluYWxseXtDci52YWx1ZT12b2lkIDB9fWlmKHAuX3pvZC50cmFpdHMuYWRkKGUpLHQocCxiKSxhKXtjb25zdCBrPU9iamVjdC5nZXRQcm90b3R5cGVPZihwKSwkPXAuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBqPWs7Zm9yKDtqJiZqIT09JDspaj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoaik7Y29uc3QgQz1qPz9rO2EuaGFzKEMpfHwoYS5hZGQoQyksSXUoQyxpKSl9Y29uc3QgeT1nLnByb3RvdHlwZTtmb3IoY29uc3QgayBpbiB5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LGspJiYoayBpbiBwfHwocFtrXT15W2tdLmJpbmQocCkpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGwgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkobCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBnKHApe2NvbnN0IGI9bz8uUGFyZW50P2toKGwpOnRoaXM7YyhiLHApO2NvbnN0IHk9Yi5fem9kLmRlZmVycmVkO2lmKHkpe2Zvcihjb25zdCAkIG9mIHkpJCgpO2IuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgaz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gayYmayhiKSxifXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZywiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOnA9Pm8/LlBhcmVudCYmcCBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOnA/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsIm5hbWUiLHt2YWx1ZTplfSksZ31jb25zdCBzcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIENlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIGhvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fSh3Yz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/Pyh3Yy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IG5lPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIEooZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24obmUsZSksbmV9ZnVuY3Rpb24gU2goKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLEduLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gJGgoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCB6aD17Z2V0OlNoLHNldDokaCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sUnI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxTYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxDdT0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixSci52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLFJyKSxSci52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLHpoKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtTYy5oYXMobil8fChTYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0sUnU9ZCgiJFpvZEVycm9yIixDdSksdWU9ZCgiJFpvZEVycm9yIixDdSx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIFRoKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gbW8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9UaChuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gZ28oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgYz1uLHU9MDtmb3IoO3U8YS5sZW5ndGg7KXtjb25zdCBsPWFbdV0sZz11PT09YS5sZW5ndGgtMTtpZihsPT09Il9lcnJvcnMiKXtnJiZjLl9lcnJvcnMucHVzaCh0KGkpKSx1Kys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IHA9Y1tsXTtnJiZwLl9lcnJvcnMucHVzaCh0KGkpKSxjPXAsdSsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIGlzKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcChjPT5vKHtpc3N1ZXM6Y30sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IGM9Wy4uLnMsLi4uYS5wYXRoXTtpZihjLmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IHU9bixsPTA7Zm9yKDtsPGMubGVuZ3RoOyl7Y29uc3QgZz1jW2xdLHA9bD09PWMubGVuZ3RoLTE7dHlwZW9mIGc9PSJzdHJpbmciPyh1LnByb3BlcnRpZXM/Pyh1LnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LnByb3BlcnRpZXMsZyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3BlcnRpZXMsZyx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx1PXUucHJvcGVydGllc1tnXSk6KHUuaXRlbXM/Pyh1Lml0ZW1zPVtdKSwoaT11Lml0ZW1zKVtnXT8/KGlbZ109e2Vycm9yczpbXX0pLHU9dS5pdGVtc1tnXSkscCYmdS5lcnJvcnMucHVzaCh0KGEpKSxsKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBPdShlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gYXMoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7T3Uoby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gdm8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBNdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IENlO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+aGUodSxpLEooKSkpKTt0aHJvdyBlcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LHFyPU10KHVlKSxEdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+aGUodSxpLEooKSkpKTt0aHJvdyBlcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LExyPUR0KHVlKSxxdD1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBDZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP0F1KGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sWnU9cXQodWUpO2Z1bmN0aW9uIEF1KGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+aGUocixuLEooKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IEx0PWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/QXUoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxQaD1MdCh1ZSksSWg9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLHhoPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksYm89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1JaClyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIEVoKGUsdCxuKX0pO2Z1bmN0aW9uIEVoKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW3hoXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IENlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IF9vPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sY3M9ZT0+e2NvbnN0IHQ9TXQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEsdm8obixpKSl9O3JldHVybiBufSxDaD1jcyh1ZSksdXM9ZT0+e2NvbnN0IHQ9TXQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMsdm8obixpKSk7cmV0dXJuIG59LFJoPXVzKHVlKSxscz1lPT57Y29uc3QgdD1EdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLHZvKG4saSkpfTtyZXR1cm4gbn0sT2g9bHModWUpLGRzPWU9Pntjb25zdCB0PUR0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMsdm8obixpKSk7cmV0dXJuIG59LFpoPWRzKHVlKSxwcz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBxdChlKSh0LG4scil9LEFoPXBzKHVlKSxmcz1lPT4odCxuLG8pPT5xdChlKSh0LG4sbyksTmg9ZnModWUpLGhzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gTHQoZSkodCxuLHIpfSxqaD1ocyh1ZSksbXM9ZT0+YXN5bmModCxuLG8pPT5MdChlKSh0LG4sbyksTWg9bXModWUpLE51PS9eW2NDXVswLTlhLXpdezYsfSQvLGp1PS9eWzAtOWEtel0rJC8sTXU9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sRHU9L15bMC05YS12QS1WXXsyMH0kLyxxdT0vXltBLVphLXowLTldezI3fSQvLEx1PS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBVdShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3QgSHU9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sRGg9L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxGdT0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8sdHQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLHFoPXR0KDQpLExoPXR0KDYpLFVoPXR0KDcpLEJ1PS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLEhoPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLEZoPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLFZ1PS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LEJoPVZ1LFZoPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLEpoPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24gSnUoKXtyZXR1cm4gbmV3IFJlZ0V4cChKaCwidSIpfWNvbnN0IEt1PS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxXdT0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLEd1PWU9Pntjb25zdCB0PSRlKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LFl1PS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxRdT0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyxLaD0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyxXaD0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8sWHU9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLGVsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxncz0vXmh0dHBzPyQvLHRsPS9eXCtbMS05XVxkezYsMTR9JC8sdnM9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLG5sPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLGJzPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLG9sPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiBHaChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3Qgcmw9R2gob2wpO2Z1bmN0aW9uIFVyKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24gc2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke1VyKGUpfSRgKX1mdW5jdGlvbiBpbChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7VXIoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHtVcih7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHtvbH1UKD86JHtvfSkkYCl9Y29uc3QgYWw9L15bXHNcU117MCx9JC8sY2w9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0sdWw9L14tP1xkK24/JC8sbGw9L14tP1xkKyQvLHlvPS9eLT9cZCsoPzpcLlxkKyk/JC8sZGw9L14oPzp0cnVlfGZhbHNlKSQvaSxwbD0vXm51bGwkL2ksZmw9L151bmRlZmluZWQkL2ksaGw9L15bXkEtWl0qJC8sbWw9L15bXmEtel0qJC8sZ2w9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBVdChlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gSHQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IFloPS9eWzAtOWEtZkEtRl17MzJ9JC8sUWg9VXQoMjIsIj09IiksWGg9SHQoMjIpLGVtPS9eWzAtOWEtZkEtRl17NDB9JC8sdG09VXQoMjcsIj0iKSxubT1IdCgyNyksb209L15bMC05YS1mQS1GXXs2NH0kLyxybT1VdCg0MywiPSIpLHNtPUh0KDQzKSxpbT0vXlswLTlhLWZBLUZdezk2fSQvLGFtPVV0KDY0LCIiKSxjbT1IdCg2NCksdW09L15bMC05YS1mQS1GXXsxMjh9JC8sbG09VXQoODYsIj09IiksZG09SHQoODYpLHdvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6YWwsYmFzZTY0OktoLGJhc2U2NHVybDpXaCxiaWdpbnQ6dWwsYm9vbGVhbjpkbCxicm93c2VyRW1haWw6VmgsY2lkcnY0Oll1LGNpZHJ2NjpRdSxjcmVkaXRDYXJkOnZzLGN1aWQ6TnUsY3VpZDI6anUsY3VycmVuY3lDb2RlOm5sLGRhdGU6cmwsZGF0ZXRpbWU6aWwsZG9tYWluOmVsLGR1cmF0aW9uOkh1LGUxNjQ6dGwsZW1haWw6QnUsZW1vamk6SnUsZXh0ZW5kZWREdXJhdGlvbjpEaCxndWlkOkZ1LGhleDpnbCxob3N0bmFtZTpYdSxodG1sNUVtYWlsOkhoLGh0dHBQcm90b2NvbDpncyxpYmFuOmJzLGlkbkVtYWlsOkJoLGludGVnZXI6bGwsaXB2NDpLdSxpcHY2Old1LGtzdWlkOnF1LGxvd2VyY2FzZTpobCxtYWM6R3UsbWQ1X2Jhc2U2NDpRaCxtZDVfYmFzZTY0dXJsOlhoLG1kNV9oZXg6WWgsbmFub2lkOkx1LG5hbm9pZE9mTGVuZ3RoOlV1LG51bGw6cGwsbnVtYmVyOnlvLHJmYzUzMjJFbWFpbDpGaCxzaGExX2Jhc2U2NDp0bSxzaGExX2Jhc2U2NHVybDpubSxzaGExX2hleDplbSxzaGEyNTZfYmFzZTY0OnJtLHNoYTI1Nl9iYXNlNjR1cmw6c20sc2hhMjU2X2hleDpvbSxzaGEzODRfYmFzZTY0OmFtLHNoYTM4NF9iYXNlNjR1cmw6Y20sc2hhMzg0X2hleDppbSxzaGE1MTJfYmFzZTY0OmxtLHNoYTUxMl9iYXNlNjR1cmw6ZG0sc2hhNTEyX2hleDp1bSxzdHJpbmc6Y2wsdGltZTpzbCx1bGlkOk11LHVuZGVmaW5lZDpmbCx1bmljb2RlRW1haWw6VnUsdXBwZXJjYXNlOm1sLHV1aWQ6dHQsdXVpZDQ6cWgsdXVpZDY6TGgsdXVpZDc6VWgseGlkOkR1fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFU9ZCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLF9zPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIVhyKHQpJiZ0LnNpemUhPT12b2lkIDB9LHlzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIVhyKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0sUW49e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sd3M9ZCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1Rblt0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46UW5bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksa3M9ZCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1Rblt0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46UW5bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx2bD1kKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e1UuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTppdShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGJsPWQoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntVLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109bXVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksX2w9ZCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0W24sb109Z3VbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5bD1kKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49X3MpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46dW8ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksd2w9ZCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPV9zKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnVvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksa2w9ZCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPV9zKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjp1byhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFNsPWQoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPXlzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtP2xvKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9cG8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksJGw9ZCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49eXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyP2xvKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9cG8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx6bD1kKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj15cyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/bG8ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9cG8ociksYz1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLmM/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEZ0PWQoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO1UuaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLFRsPWQoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e0Z0LmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFBsPWQoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aGwpLEZ0LmluaXQoZSx0KX0pLElsPWQoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bWwpLEZ0LmluaXQoZSx0KX0pLHhsPWQoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0IG49JGUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEVsPWQoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHskZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLENsPWQoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLiokeyRlKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIFhuKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZGUobixlLmlzc3VlcykpfWNvbnN0IFJsPWQoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e1UuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PlhuKHIsbix0LnByb3BlcnR5KSk7WG4obyxuLHQucHJvcGVydHkpfX0pLE9sPWQoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57VS5pbml0KGUsdCksZm8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKGMudGhlbih1PT5Ybih1LG8saSkpKSk6WG4oYyxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxabD1kKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEFsPWQoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntVLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBObHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IGpsPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0sej1kKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249amw7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsYyx1KT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgbD1yZShhKSxnO2Zvcihjb25zdCBwIG9mIGMpe2lmKHAuX3pvZC5kZWYud2hlbil7aWYoJHUoYSl8fCFwLl96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihsKWNvbnRpbnVlO2NvbnN0IGI9YS5pc3N1ZXMubGVuZ3RoLHk9cC5fem9kLmNoZWNrKGEpO2lmKHkgaW5zdGFuY2VvZiBQcm9taXNlJiZ1Py5hc3luYz09PSExKXRocm93IG5ldyBDZTtpZihnfHx5IGluc3RhbmNlb2YgUHJvbWlzZSlnPShnPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgeSxhLmlzc3Vlcy5sZW5ndGghPT1iJiYoRHIoYS5pc3N1ZXMsYixlKSxsfHwobD1yZShhLGIpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PWIpY29udGludWU7RHIoYS5pc3N1ZXMsYixlKSxsfHwobD1yZShhLGIpKX19cmV0dXJuIGc/Zy50aGVuKCgpPT5hKTphfSxpPShhLGMsdSk9PntpZihyZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgbD1zKGMscix1KTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBDZTtyZXR1cm4gbC50aGVuKGc9PmUuX3pvZC5wYXJzZShnLHUpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGwsdSl9O2UuX3pvZC5ydW49KGEsYyk9PntpZihjLnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLGMpO2lmKGMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgbD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4uYyxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGwgaW5zdGFuY2VvZiBQcm9taXNlP2wudGhlbihnPT5pKGcsYSxjKSk6aShsLGEsYyl9Y29uc3QgdT1lLl96b2QucGFyc2UoYSxjKTtpZih1IGluc3RhbmNlb2YgUHJvbWlzZSl7aWYoYy5hc3luYz09PSExKXRocm93IG5ldyBDZTtyZXR1cm4gdS50aGVuKGw9PnMobCxyLGMpKX1yZXR1cm4gcyh1LHIsYyl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIGZvKHRoaXMsIn5zdGFuZGFyZCIsU3ModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXt6ZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLE1sPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+aGUobix0LEooKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gcG0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIE1sKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBTcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIE1sKG8sbil9Y2F0Y2h7fXJldHVybiBwbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBCdD1kKCIkWm9kU3RyaW5nIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/YWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxEPWQoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57RnQuaW5pdChlLHQpLEJ0LmluaXQoZSx0KX0pLERsPWQoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1GdSksRC5pbml0KGUsdCl9KSxxbD1kKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXR0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj10dCgpKTtELmluaXQoZSx0KX0pLExsPWQoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QnUpLEQuaW5pdChlLHQpfSksJHM9MSxDdD0yO2Z1bmN0aW9uIHpzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gVWwoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT96cyhlKXx8Q3Q6SGwoZSx0KX1mdW5jdGlvbiBIbChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09Z3Muc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuICRzO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P0N0fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBDdH19Y29uc3QgZm09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gSHIoZSl7cmV0dXJuIGUucmVwbGFjZShmbSwiIil9ZnVuY3Rpb24gRmwoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gQmwoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgVmw9ZCgiJFpvZFVSTCIsKGUsdCk9PntELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9VWwobyx0KTtpZihyPT09JHMpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09Q3Qpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPUhyKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhRmwocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIUJsKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOkhyKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLEpsPWQoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SnUoKSksRC5pbml0KGUsdCl9KSxLbD1kKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/THU6VXUodC5sZW5ndGgpKSxELmluaXQoZSx0KX0pLFdsPWQoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1OdSksRC5pbml0KGUsdCl9KSxHbD1kKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWp1KSxELmluaXQoZSx0KX0pLFlsPWQoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1NdSksRC5pbml0KGUsdCl9KSxRbD1kKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1EdSksRC5pbml0KGUsdCl9KSxYbD1kKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXF1KSxELmluaXQoZSx0KX0pLGVkPWQoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aWwodCkpLEQuaW5pdChlLHQpfSksdGQ9ZCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJsKSxELmluaXQoZSx0KX0pLG5kPWQoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1zbCh0KSksRC5pbml0KGUsdCl9KSxvZD1kKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUh1KSxELmluaXQoZSx0KX0pLHJkPWQoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1LdSksRC5pbml0KGUsdCl9KSxobT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gVHMoZSl7cmV0dXJuIGhtLnRlc3QoZSk/enMoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBzZD1kKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49V3UpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57VHMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksaWQ9ZCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49R3UodC5kZWxpbWl0ZXIpKSxELmluaXQoZSx0KX0pLGFkPWQoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVl1KSxELmluaXQoZSx0KX0pO2Z1bmN0aW9uIGNkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpUcyhuKX1jb25zdCB1ZD1kKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1RdSksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntjZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIFBzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgbGQ9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLGRkPWQoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWxkKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1BzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSXM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIHBkKGUpe2lmKCFJcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIFBzKG4pfWNvbnN0IGZkPWQoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUlzKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3BkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksaGQ9ZCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXRsKSxELmluaXQoZSx0KX0pLG1tPS9bLSBdL2c7ZnVuY3Rpb24gZ20oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gbWQoZSl7cmV0dXJuIHZzLnRlc3QoZSk/Z20oZS5yZXBsYWNlKG1tLCIiKSk6ITF9Y29uc3QgZ2Q9ZCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXZzKSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e21kKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiB2bShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiB2ZChlKXtyZXR1cm4gYnMudGVzdChlKT92bShlKTohMX1jb25zdCBiZD1kKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YnMpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dmQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gX2QoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCB5ZD1kKCIkWm9kSldUIiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57X2Qobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx3ZD1kKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHhzPWQoIiRab2ROdW1iZXIiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49eW8sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksa2Q9ZCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntibC5pbml0KGUsdCkseHMuaW5pdChlLHQpfSksRXM9ZCgiJFpvZEJvb2xlYW4iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49ZGwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxDcz1kKCIkWm9kQmlnSW50IiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXVsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSksU2Q9ZCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntfbC5pbml0KGUsdCksQ3MuaW5pdChlLHQpfSksJGQ9ZCgiJFpvZFN5bWJvbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksemQ9ZCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1mbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxUZD1kKCIkWm9kTnVsbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1wbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksUGQ9ZCgiJFpvZEFueSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLElkPWQoIiRab2RVbmtub3duIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSkseGQ9ZCgiJFpvZE5ldmVyIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksRWQ9ZCgiJFpvZFZvaWQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxDZD1kKCIkWm9kRGF0ZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uICRjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZGUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBSZD1kKCIkWm9kQXJyYXkiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7YysrKXtjb25zdCB1PXNbY10sbD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2gobC50aGVuKGc9PiRjKGcsbyxjKSkpO2Vsc2UgaWYoJGMobCxvLGMpLGEmJmwuaXNzdWVzLmxlbmd0aCE9PTAmJnJlKGwpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGVvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi5kZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IGJtPVtdO2Z1bmN0aW9uIE9kKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpibSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9aHUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBaZChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLGM9ci5rZXlTZXQsdT1yLmNhdGNoYWxsLl96b2QsbD11LmRlZi50eXBlLGc9dS5vcHRpbixwPXUub3B0b3V0O2xldCBiPTA7Zm9yKGNvbnN0IHkgaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09Yil7aWYocmUobixiKSlicmVhaztiPW4uaXNzdWVzLmxlbmd0aH1pZihjLmhhcyh5KSljb250aW51ZTtpZih5PT09Il9fcHJvdG9fXyIpe2w9PT0ibmV2ZXIiJiZhLnB1c2goeSk7Y29udGludWV9aWYobD09PSJuZXZlciIpe2EucHVzaCh5KTtjb250aW51ZX1jb25zdCBrPXUucnVuKHt2YWx1ZTp0W3ldLGlzc3VlczpbXX0sbyk7ayBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKGsudGhlbigkPT5lbygkLG4seSx0LGcscCkpKTplbyhrLG4seSx0LGcscCl9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBBZD1kKCIkWm9kT2JqZWN0IiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCB1PSgpPT57Y29uc3QgbD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmx9KSx1LnJhdz1sLGx9O3UucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0OnV9KX1jb25zdCByPU50KCgpPT5PZCh0KSk7eChlLCJwcm9wVmFsdWVzIix1PT57Y29uc3QgbD11LmRlZi5zaGFwZSxnPXt9O2Zvcihjb25zdCBwIGluIGwpe2NvbnN0IGI9bFtwXS5fem9kO2lmKGIudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZyxwKXx8QmUoZyxwLG5ldyBTZXQpO2Zvcihjb25zdCB5IG9mIGIudmFsdWVzKWdbcF0uYWRkKHkpO2Iub3B0aW4hPT12b2lkIDAmJmdbcF0uYWRkKHZvaWQgMCl9fXJldHVybiBnfSk7Y29uc3Qgcz1YZSxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgYz1uZS5tZW1vaXplcjtjPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPSh1LGwpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgZz11LnZhbHVlO2lmKCFzKGcpKXJldHVybiB1Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OmcsaW5zdDplfSksdTt1LnZhbHVlPWM/Yy5hbGxvYyhlLHUse30sbCk6e307Y29uc3QgcD1bXSxiPWEuc2hhcGUseT1sPy5hYm9ydEVhcmx5O2xldCBrPXUuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBhLmFsbEtleXMpe2lmKHkmJnUuaXNzdWVzLmxlbmd0aCE9PWspe2lmKHJlKHUsaykpYnJlYWs7az11Lmlzc3Vlcy5sZW5ndGh9aWYoJD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGo9YlskXSxDPWouX3pvZC5vcHRpbixGPWouX3pvZC5vcHRvdXQsb2U9ai5fem9kLnJ1bih7dmFsdWU6Z1skXSxpc3N1ZXM6W119LGwpO29lIGluc3RhbmNlb2YgUHJvbWlzZT9wLnB1c2gob2UudGhlbihCPT5lbyhCLHUsJCxnLEMsRikpKTplbyhvZSx1LCQsZyxDLEYpfXJldHVybiBpP1pkKHAsZyx1LGwsci52YWx1ZSxlLHk9PT0hMCk6cC5sZW5ndGg/UHJvbWlzZS5hbGwocCkudGhlbigoKT0+dSk6dX19KSxOZD1kKCIkWm9kT2JqZWN0SklUIiwoZSx0KT0+e0FkLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZSxvPU50KCgpPT5PZCh0KSkscj1uZS5tZW1vaXplcixzPWI9Pntjb25zdCB5PW8udmFsdWUsaz15LnN5bWJvbEtleXMsJD1uZXcgTmwoWyJwYXlsb2FkIiwiY3R4Il0se3NoYXBlOmIsaW5zdDplLG1lbW86cixzeW1zOmt9KSxqPUI9PmBzaGFwZVske0J9XS5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dFske0J9XSwgaXNzdWVzOiBbXSB9LCBjdHgpYCxDPShCLEwpPT5gCiAgICAgICAgICBsZXQgJHtCfV9hYiA9IGZhbHNlOwogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAke0J9Lmlzc3Vlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjb25zdCBpc3MgPSAke0J9Lmlzc3Vlc1tpXTsKICAgICAgICAgICAgaXNzLnBhdGggPSBpc3MucGF0aCA/IFske0x9LCAuLi5pc3MucGF0aF0gOiBbJHtMfV07CiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goaXNzKTsKICAgICAgICAgICAgaWYgKGlzcy5jb250aW51ZSAhPT0gdHJ1ZSkgJHtCfV9hYiA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoJHtCfV9hYiAmJiBjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9YDskLndyaXRlKCJjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7Iik7Y29uc3QgRj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBvZT0wO2Zvcihjb25zdCBCIG9mIHkuYWxsS2V5cylGW0JdPWBrZXlfJHtvZSsrfWA7JC53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBCIG9mIHkuYWxsS2V5cyl7aWYoQj09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IEw9RltCXSx5ZT10eXBlb2YgQj09InN5bWJvbCI/YHN5bXNbJHtrLmluZGV4T2YoQil9XWA6bHUoQiksSXI9YCR7eWV9IGluIGlucHV0YCx2Yz1iW0JdLHhyPXZjPy5fem9kPy5vcHRpbixiYz14ciE9PXZvaWQgMCxWZj12Yz8uX3pvZD8ub3B0b3V0PT09Im9wdGlvbmFsIjtpZigkLndyaXRlKGBjb25zdCAke0x9ID0gJHtqKHllKX07YCksYmMmJlZmKXtjb25zdCBKZj14cj09PSJvcHRpb25hbCI/YCR7TH1fcHJlc2VudGA6YCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0x9X3ByZXNlbnRgOyQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7TH1fcHJlc2VudCA9ICR7SXJ9OwogICAgICAgIGlmICghJHtMfS5pc3N1ZXMubGVuZ3RoIHx8ICR7TH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7QyhMLHllKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtKZn0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7eWV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBiYz8oJC53cml0ZShgCiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7QyhMLHllKX0KICAgICAgICB9CiAgICAgIGApLHhyPT09ImRlZmF1bHRlZCI/JC53cml0ZShgbmV3UmVzdWx0WyR7eWV9XSA9ICR7TH0udmFsdWU7YCk6JC53cml0ZShgCiAgICAgICAgaWYgKCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0lyfSkgewogICAgICAgICAgbmV3UmVzdWx0WyR7eWV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtMfV9wcmVzZW50ID0gJHtJcn07CiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7QyhMLHllKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0x9X3ByZXNlbnQgJiYgISR7TH0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7eWV9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7TH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7eWV9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuICQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksJC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksJC5jb21waWxlKCl9O2xldCBpO2NvbnN0IGE9WGUsYz0hbmUuaml0bGVzcyxsPWMmJnB1LnZhbHVlLGc9dC5jYXRjaGFsbDtsZXQgcDtlLl96b2QucGFyc2U9KGIseSk9PntwPz8ocD1vLnZhbHVlKTtjb25zdCBrPWIudmFsdWU7cmV0dXJuIGEoayk/YyYmbCYmeT8uYXN5bmM9PT0hMSYmeS5qaXRsZXNzIT09ITA/KGl8fChpPXModC5zaGFwZSkpLGI9aShiLHkpLGc/WmQoW10sayxiLHkscCxlLHk/LmFib3J0RWFybHk9PT0hMCk6Yik6bihiLHkpOihiLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OmssaW5zdDplfSksYil9fSk7ZnVuY3Rpb24gemMoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFyZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmhlKGksbyxKKCkpKSl9KSx0KX1jb25zdCBrbz1kKCIkWm9kVW5pb24iLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCkseChlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLHgoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSkseChlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+RWUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2kucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT56YyhhLG8sZSxyKSk6emMoaSxvLGUscil9fSk7ZnVuY3Rpb24gVGMoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT5oZShpLG8sSigpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBqZD1kKCIkWm9kWG9yIiwoZSx0KT0+e2tvLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7YyBpbnN0YW5jZW9mIFByb21pc2U/KGkucHVzaChjKSxzPSEwKTppLnB1c2goYyl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5UYyhhLG8sZSxyKSk6VGMoaSxvLGUscil9fSk7ZnVuY3Rpb24gUnMoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPU1kKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIE1kKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgRGQ9ZCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxrby5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7eChlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgaT0wO2Zvcihjb25zdCBhIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGM9YS5fem9kLnByb3BWYWx1ZXM7aWYoIWN8fE9iamVjdC5rZXlzKGMpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihhKX0iYCk7Y1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmkrKztmb3IoY29uc3RbdSxsXW9mIE9iamVjdC5lbnRyaWVzKGMpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8QmUocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBnIG9mIGwpc1t1XS5hZGQoZyl9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZpPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGk9aW8oci5fem9kLmRlZik7aWYoaSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1OdCgoKT0+TWQodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighWGUoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6aSxpbnN0OmV9KSxyO2NvbnN0IGE9aT8uW3QuZGlzY3JpbWluYXRvcl0sYz1vLnZhbHVlLmdldChhKTtyZXR1cm4gYyYmKGEhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/Yy5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6aSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLHFkPWQoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksaT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxpIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxpXSkudGhlbigoW2MsdV0pPT5QYyhuLGMsdSkpOlBjKG4scyxpKX19KTtmdW5jdGlvbiB0byhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKFJlKGUpJiZSZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaT10byhlW3NdLHRbc10pO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5pLm1lcmdlRXJyb3JQYXRoXX07cltzXT1pLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10saT10byhyLHMpO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5pLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGkuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBQYyhlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxpPSh1LGwpPT57bGV0IGc7aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLGc9dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCBwPVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKHApfHxzLnNldChwLHUpLGc9W3BdfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IHAgb2YgZylvLmhhcyhwKXx8by5zZXQocCx7fSksby5nZXQocClbbF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWkodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWkodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGE9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGEubGVuZ3RoKXtjb25zdCB1PXI/YS5maWx0ZXIobD0+ci5rZXlzLmluY2x1ZGVzKGwpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgbCBvZiBhKSF1LmluY2x1ZGVzKGwpJiZzLmhhcyhsKSYmZS5pc3N1ZXMucHVzaChzLmdldChsKSl9Y29uc3QgYz10byh0LnZhbHVlLG4udmFsdWUpO2lmKCFjLnZhbGlkKXtpZihyZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGMubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWMuZGF0YSxlfWNvbnN0IE9zPWQoIiRab2RUdXBsZSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1uZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBhPVtdLGM9SWMobiwib3B0aW4iKSx1PUljKG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGkubGVuZ3RoPGMpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpjLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7aS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgbD1uZXcgQXJyYXkobi5sZW5ndGgpLGc9dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCBwPSExO2ZvcihsZXQgYj0wO2I8bi5sZW5ndGg7YisrKXtjb25zdCB5PW5bYl0uX3pvZC5ydW4oe3ZhbHVlOmlbYl0saXNzdWVzOltdfSxzKTt5IGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goeS50aGVuKGs9PntsW2JdPWt9KSk6KGxbYl09eSxnJiYhcCYmeS5pc3N1ZXMubGVuZ3RoJiYocD1yZSh5KSkpfWlmKHQucmVzdCYmIXApe2xldCBiPW4ubGVuZ3RoLTE7Y29uc3QgeT1pLnNsaWNlKG4ubGVuZ3RoKTtsZXQgaz1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0ICQgb2YgeSl7aWYoZyYmci5pc3N1ZXMubGVuZ3RoIT09ayl7aWYocmUocixrKSlicmVhaztrPXIuaXNzdWVzLmxlbmd0aH1iKys7Y29uc3Qgaj10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOiQsaXNzdWVzOltdfSxzKTtqIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goai50aGVuKEM9PnhjKEMscixiKSkpOnhjKGoscixiKX19cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PkVjKGwscixuLGksdSkpOkVjKGwscixuLGksdSl9fSk7ZnVuY3Rpb24gSWMoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiB4YyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmRlKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gRWMoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgaT1lW3NdLGE9czxvLmxlbmd0aDtpZighYSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihpLmlzc3Vlcy5sZW5ndGgpe2lmKCFhJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4uZGUocyxpLmlzc3VlcykpfXQudmFsdWVbc109aS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBMZD1kKCIkWm9kUmVjb3JkIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighUmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W10sYT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoYSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGM9bmV3IFNldDtmb3IoY29uc3QgbCBvZiBhKWlmKHR5cGVvZiBsPT0ic3RyaW5nInx8dHlwZW9mIGw9PSJudW1iZXIifHx0eXBlb2YgbD09InN5bWJvbCIpe2lmKGMuYWRkKHR5cGVvZiBsPT0ibnVtYmVyIj9sLnRvU3RyaW5nKCk6bCksbD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGc9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYoZy5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpnLmlzc3Vlcy5tYXAoeT0+aGUoeSxyLEooKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgcD1nLnZhbHVlO2lmKHA9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbih5PT57eS5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKGwseS5pc3N1ZXMpKSxvLnZhbHVlW3BdPXkudmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5kZShsLGIuaXNzdWVzKSksby52YWx1ZVtwXT1iLnZhbHVlKX1sZXQgdTtmb3IoY29uc3QgbCBpbiBzKWlmKCFjLmhhcyhsKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihsPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtsXT1zW2xdfWVsc2UgdT11Pz9bXSx1LnB1c2gobCk7dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCBjO2Zvcihjb25zdCB1IG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYodT09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsdSkpY29udGludWU7bGV0IGw9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7aWYobCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIHU9PSJzdHJpbmciJiZ5by50ZXN0KHUpJiZsLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IHk9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIodSksaXNzdWVzOltdfSxyKTtpZih5IGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTt5Lmlzc3Vlcy5sZW5ndGg9PT0wJiYobD15KX1pZihsLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVt1XT1zW3VdOmE/KGM9Yz8/W10sYy5wdXNoKHUpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpsLmlzc3Vlcy5tYXAoeT0+aGUoeSxyLEooKSkpLGlucHV0OnUscGF0aDpbdV0saW5zdDplfSk7Y29udGludWV9Y29uc3QgcD1sLnZhbHVlO2lmKHA9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW3VdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbih5PT57eS5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKHUseS5pc3N1ZXMpKSxvLnZhbHVlW3BdPXkudmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5kZSh1LGIuaXNzdWVzKSksby52YWx1ZVtwXT1iLnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSksVWQ9ZCgiJFpvZE1hcCIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPW5lLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W3UsbF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihyZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGc9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scikscD10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO2cgaW5zdGFuY2VvZiBQcm9taXNlfHxwIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW2cscF0pLnRoZW4oKFtiLHldKT0+e0NjKGIseSxvLHUscyxlLHIpfSkpOkNjKGcscCxvLHUscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIENjKGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKFluLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5kZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PmhlKGEsaSxKKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihZbi5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4uZGUobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoYT0+aGUoYSxpLEooKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgSGQ9ZCgiJFpvZFNldCIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPW5lLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IHUgb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09Yyl7aWYocmUobyxjKSlicmVhaztjPW8uaXNzdWVzLmxlbmd0aH1jb25zdCBsPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7bCBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGwudGhlbihnPT5SYyhnLG8pKSk6UmMobCxvKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBSYyhlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgRmQ9ZCgiJFpvZEVudW0iLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1Ocih0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8seChlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1OcihyLmRlZi5lbnRyaWVzKS5maWx0ZXIoaT0+WW4uaGFzKHR5cGVvZiBpKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChpPT4kZShpLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO3JldHVybiBvLmhhcyhpKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6aSxpbnN0OmV9KSxyfX0pLEJkPWQoIiRab2RMaXRlcmFsIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLHgoZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciPyRlKHMpOnM/JGUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLFZkPWQoIiRab2RGaWxlIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxKZD1kKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLG5lLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IGhvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGk9PihuLnZhbHVlPWksbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBDZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gT2MoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBacz1kKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIseChlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLHgoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7RWUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5PYyhuLHMpKTpPYyhuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLEtkPWQoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e1pzLmluaXQoZSx0KSx4KGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSx4KGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLFdkPWQoIiRab2ROdWxsYWJsZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbikseChlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCkseChlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtFZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksR2Q9ZCgiJFpvZERlZmF1bHQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+WmMocyx0KSk6WmMocix0KX19KTtmdW5jdGlvbiBaYyhlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBZZD1kKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksUWQ9ZCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5BYyhzLGUpKTpBYyhyLGUpfX0pO2Z1bmN0aW9uIEFjKGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBYZD1kKCIkWm9kU3VjY2VzcyIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IGhvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBOYyhlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PmhlKHIsbyxKKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBlcD1kKCIkWm9kQ2F0Y2giLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSx4KGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+TmMobixzLHQsbykpOk5jKG4scix0LG8pfX0pLHRwPWQoIiRab2ROYU4iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLEFzPWQoIiRab2RQaXBlIiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbikseChlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCkseChlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+TG4oaSx0LmluLG8pKTpMbihzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5MbihzLHQub3V0LG8pKTpMbihyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIExuKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBOcz1kKCIkWm9kQ29kZWMiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSx4KGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PlVuKGksdCxvKSk6VW4ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+VW4oaSx0LG8pKTpVbihzLHQsbyl9fX0pO2Z1bmN0aW9uIFVuKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+SG4oZSxzLHQub3V0LG4pKTpIbihlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+SG4oZSxzLHQuaW4sbikpOkhuKGUscix0LmluLG4pfX1mdW5jdGlvbiBIbihlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IG5wPWQoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e0FzLmluaXQoZSx0KX0pLG9wPWQoIiRab2RSZWFkb25seSIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLHgoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKGpjKTpqYyhyKX19KTtmdW5jdGlvbiBqYyhlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIF9tKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1hLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IHU9Yy5taW5pbXVtPz9jLmxlbmd0aCxsPWMubWF4aW11bT8/Yy5sZW5ndGg7dSE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fHU+cikmJihyPXUpLGwhPT12b2lkIDAmJihzPT09dm9pZCAwfHxsPHMpJiYocz1sKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIGNsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT15bz9sbDppKT8uc291cmNlfWZ1bmN0aW9uIEZyKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz1GcihvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKEVlKHIpLCgpPT5FZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcChGcik7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PkVlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBfbShlKX1jb25zdCBycD1kKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPUZyKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKEVlKHIpKX1lbHNlIGlmKG89PT1udWxsfHxmdS5oYXModHlwZW9mIG8pKW4ucHVzaCgkZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLHNwPWQoIiRab2RGdW5jdGlvbiIsKGUsdCk9Pih6LmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9xcihlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P3FyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBMcihlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IExyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IE9zKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksaXA9ZCgiJFpvZFByb21pc2UiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLGpzPWQoIiRab2RMYXp5IiwoZSx0KT0+e3ouaW5pdChlLHQpLGF1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLHgoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLHgoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSx4KGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGFwPWQoIiRab2RDdXN0b20iLChlLHQpPT57VS5pbml0KGUsdCksei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9Pk1jKHMsbixvLGUpKTtNYyhyLG4sbyxlKX19KTtmdW5jdGlvbiBNYyhlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChldChyKSl9fWNsYXNzIGNwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgQnI9In5tZW1vIixEYz1bXTtmdW5jdGlvbiB1cChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBPcihlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgbHA9bmV3IFdlYWtNYXAsR2U9MCxLbj0xLFB0PTI7ZnVuY3Rpb24gSXQoZSx0LG4pe2NvbnN0IG89bHAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/UHQ6R2U7aWYodC5oYXMoZSkpcmV0dXJuIFB0O3QuYWRkKGUpO2xldCByPUdlO2NvbnN0IHM9bD0+e2lmKHIhPT1QdCYmbD8uX3pvZCl7Y29uc3QgZz1JdChsLHQsbik7Zz5yJiYocj1nKX19LGk9KGwsZyk9PntsZXQgcD1HZTtmb3IoY29uc3QgYiBvZiBSZWZsZWN0Lm93bktleXMobCkpe2NvbnN0IHk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGIpO2lmKCF5LmVudW1lcmFibGUpY29udGludWU7Y29uc3Qgaz15LmdldD9Lbjp5LnZhbHVlPy5fem9kP0l0KHkudmFsdWUsdCxuKTpHZTtrPnAmJihwPWspfXJldHVybiBwfSxhPWw9PntsPnImJihyPWwpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPWlvKGMpO2EobD9pKGwpOktuKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgbCBvZiBjLml0ZW1zKXMobCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgbCBvZiBjLm9wdGlvbnMpcyhsKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgbD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EobD9JdChsLHQsITEpOktuKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgbCBpbiBjKXtjb25zdCBnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxsKTtpZighZ3x8Zy5nZXQpY29udGludWU7Y29uc3QgcD1nLnZhbHVlO2lmKCEoIXB8fHR5cGVvZiBwIT0ib2JqZWN0Iikpe2lmKHAuX3pvZClzKHApO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShwKSlmb3IoY29uc3QgYiBvZiBwKXMoYil9fX1yZXR1cm4gdC5kZWxldGUoZSkseW0oZSxyKX1mdW5jdGlvbiB5bShlLHQpe3JldHVybiB0IT09S24mJmxwLnNldChlLHQ9PT1QdCksdH1mdW5jdGlvbiB3bShlKXtyZXR1cm4gSXQoZSxuZXcgU2V0LCEwKSE9PUdlfWZ1bmN0aW9uIGttKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBGbjtjb25zdCBCbj1bXSxTbT17YWxsb2MoZSx0LG4pe2NvbnN0IG89Rm47aWYoIW8pcmV0dXJuIG47Rm49dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLEJuLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmZHAocyxyLnZhbHVlKSl0aHJvdyBuZXcgY3A7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShjLHUpPT57aWYobj09PXZvaWQgMCl7Y29uc3Qgaj1JdChlLG5ldyBTZXQsITEpO2lmKGo9PT1HZSlyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkoYyx1KTtqPT09UHR8fG8/bj0hMDpvPSEwfWNvbnN0IGw9Yy52YWx1ZTtpZighdXAobCkpcmV0dXJuIGkoYyx1KTtsZXQgZz11W0JyXTtnfHwoZz17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSx1W0JyXT1nKTtsZXQgcDtyPT09dT9wPXM6KHA9a20oZyxlKSxyPXUscz1wKTtjb25zdCBiPXAuZ2V0KGwpO2lmKGIpcmV0dXJuIGMudmFsdWU9Yi52YWx1ZSxiLmlzc3Vlcz9iLmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uT3IoYi5pc3N1ZXMpKTooYy5tZW1vPSEwLGcuYmFja0VkZ2VzPz8oZy5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLGcuYmFja0VkZ2VzLmFkZChiLnZhbHVlKSksYztGbj1wO2NvbnN0IHk9Qm4ubGVuZ3RoLGs9aShjLHUpO0ZuPXZvaWQgMDtjb25zdCAkPUJuLmxlbmd0aD55P0JuLnBvcCgpOnZvaWQgMDtyZXR1cm4gayBpbnN0YW5jZW9mIFByb21pc2U/ay50aGVuKGo9PigkJiYoJC5pc3N1ZXM9ai5pc3N1ZXMubGVuZ3RoP09yKGouaXNzdWVzKTpEYyksaikpOigkJiYoJC5pc3N1ZXM9ay5pc3N1ZXMubGVuZ3RoP09yKGsuaXNzdWVzKTpEYyksayl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gU28oKXtyZXR1cm4gU219ZnVuY3Rpb24gZHAoZSx0KXtjb25zdCBuPWVbQnJdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJnVwKHQpJiZuLmhhcyh0KX1jb25zdCAkbT0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9enUocy5pbnB1dCksYz1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7dHMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtqcihzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtqcihzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIHBwKCl7cmV0dXJue2xvY2FsZUVycm9yOiRtKCl9fWNvbnN0IE1zPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpwcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgcWM7Y29uc3QgRHM9U3ltYm9sKCJab2RPdXRwdXQiKSxxcz1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgZnB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gJG8oKXtyZXR1cm4gbmV3IGZwfShxYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KHFjLl9fem9kX2dsb2JhbFJlZ2lzdHJ5PSRvKCkpO2NvbnN0IHBlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksTHM9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIFVzIGV4dGVuZHMgRXJyb3J7fWNsYXNzIEhzIGV4dGVuZHMgRXJyb3J7fWNsYXNzIEZzIGV4dGVuZHMgRXJyb3J7fWNvbnN0IEJzPUxzLFZzPUxzLHptPUxzO2Z1bmN0aW9uIHpvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gaHAoZSx0KXtyZXR1cm4gbmV3IGUoem8oe3R5cGU6InN0cmluZyIsLi4uXyh0KX0pKX1mdW5jdGlvbiBtcChlLHQpe3JldHVybiBuZXcgZSh6byh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4uXyh0KX0pKX1mdW5jdGlvbiBKcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIEtzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBXcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gR3MoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLl8odCl9KX1mdW5jdGlvbiBZcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4uXyh0KX0pfWZ1bmN0aW9uIFFzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi5fKHQpfSl9ZnVuY3Rpb24gVG8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gWHMoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBlaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiB0aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBvaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gcmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gc2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBpaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gYWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGxpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHBpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiB2cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBmaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1jb25zdCBoaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gbWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi5fKHQpfSl9ZnVuY3Rpb24gZ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4uXyh0KX0pfWZ1bmN0aW9uIHZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLl8odCl9KX1mdW5jdGlvbiBiaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4uXyh0KX0pfWZ1bmN0aW9uIF9wKGUsdCl7cmV0dXJuIG5ldyBlKHpvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi5fKHQpfSkpfWZ1bmN0aW9uIHlwKGUsdCl7cmV0dXJuIG5ldyBlKHpvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4uXyh0KX0pKX1mdW5jdGlvbiB3cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi5fKHQpfSl9ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIFNwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLl8odCl9KX1mdW5jdGlvbiAkcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIHpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4uXyh0KX0pfWZ1bmN0aW9uIFRwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi5fKHQpfSl9ZnVuY3Rpb24gUHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gSXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4uXyh0KX0pfWZ1bmN0aW9uIHhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi5fKHQpfSl9ZnVuY3Rpb24gRXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBDcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLl8odCl9KX1mdW5jdGlvbiBScChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi5fKHQpfSl9ZnVuY3Rpb24gT3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi5fKHQpfSl9ZnVuY3Rpb24gQXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gTnAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIGpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4uXyh0KX0pfWZ1bmN0aW9uIE1wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi5fKHQpfSl9ZnVuY3Rpb24gRHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLl8odCl9KX1mdW5jdGlvbiBxcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiBMcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi5fKHQpfSl9ZnVuY3Rpb24gVGUoZSx0KXtyZXR1cm4gbmV3IHdzKHtjaGVjazoibGVzc190aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gYWUoZSx0KXtyZXR1cm4gbmV3IHdzKHtjaGVjazoibGVzc190aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gUGUoZSx0KXtyZXR1cm4gbmV3IGtzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gY2UoZSx0KXtyZXR1cm4gbmV3IGtzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi5fKHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gUG8oZSl7cmV0dXJuIFBlKDAsZSl9ZnVuY3Rpb24gSW8oZSl7cmV0dXJuIFRlKDAsZSl9ZnVuY3Rpb24geG8oZSl7cmV0dXJuIGFlKDAsZSl9ZnVuY3Rpb24gRW8oZSl7cmV0dXJuIGNlKDAsZSl9ZnVuY3Rpb24gcWUoZSx0KXtyZXR1cm4gbmV3IHZsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLl8odCksdmFsdWU6ZX0pfWZ1bmN0aW9uIFZlKGUsdCl7cmV0dXJuIG5ldyB5bCh7Y2hlY2s6Im1heF9zaXplIiwuLi5fKHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEllKGUsdCl7cmV0dXJuIG5ldyB3bCh7Y2hlY2s6Im1pbl9zaXplIiwuLi5fKHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGl0KGUsdCl7cmV0dXJuIG5ldyBrbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi5fKHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGF0KGUsdCl7cmV0dXJuIG5ldyBTbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLl8odCksbWF4aW11bTplfSl9ZnVuY3Rpb24gT2UoZSx0KXtyZXR1cm4gbmV3ICRsKHtjaGVjazoibWluX2xlbmd0aCIsLi4uXyh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBjdChlLHQpe3JldHVybiBuZXcgemwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi5fKHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gVnQoZSx0KXtyZXR1cm4gbmV3IFRsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4uXyh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBKdChlKXtyZXR1cm4gbmV3IFBsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLl8oZSl9KX1mdW5jdGlvbiBLdChlKXtyZXR1cm4gbmV3IElsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLl8oZSl9KX1mdW5jdGlvbiBXdChlLHQpe3JldHVybiBuZXcgeGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi5fKHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBHdChlLHQpe3JldHVybiBuZXcgRWwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi5fKHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gbmV3IENsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLl8odCksc3VmZml4OmV9KX1mdW5jdGlvbiBDbyhlLHQsbil7cmV0dXJuIG5ldyBSbCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLl8obil9KX1mdW5jdGlvbiBRdChlLHQpe3JldHVybiBuZXcgT2woe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLl8odCl9KX1mdW5jdGlvbiBYdChlLHQpe3JldHVybiBuZXcgWmwoe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi5fKHQpfSl9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIG5ldyBBbCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIGVuKGUpe3JldHVybiB3ZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gdG4oKXtyZXR1cm4gd2UoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIG5uKCl7cmV0dXJuIHdlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gb24oKXtyZXR1cm4gd2UoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBybigpe3JldHVybiB3ZShlPT5kdShlKSl9ZnVuY3Rpb24gVXAoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gVG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gUG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4uXyhuKX0pfWZ1bmN0aW9uIEltKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4uXyhvKX0pfWZ1bmN0aW9uIHhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBFbShlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiB6LHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi5fKHMpfSl9ZnVuY3Rpb24gQ20oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi5fKG8pfSl9ZnVuY3Rpb24gUm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi5fKG8pfSl9ZnVuY3Rpb24gT20oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gWm0oZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLl8obil9KX1mdW5jdGlvbiBBbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIE5tKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLl8obil9KX1mdW5jdGlvbiBIcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4uXyh0KX0pfWZ1bmN0aW9uIGptKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gTW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIERtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBxbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTphbyhuKX19KX1mdW5jdGlvbiBMbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIFVtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIEhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246bnMobil9KX1mdW5jdGlvbiBGbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gQm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFZtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIEptKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIEttKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIEZwKGUsdCxuKXtjb25zdCBvPV8obik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBCcChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIFZwKGUsdCl7Y29uc3Qgbj1KcChvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2goZXQocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKGV0KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gSnAoZSx0KXtjb25zdCBuPW5ldyBVKHtjaGVjazoiY3VzdG9tIiwuLi5fKHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gS3AoZSl7Y29uc3QgdD1uZXcgVSh7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPXBlLmdldChuKT8/e307cGUuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIFdwKGUpe2NvbnN0IHQ9bmV3IFUoe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPXBlLmdldChuKT8/e307cGUuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIEdwKGUsdCl7Y29uc3Qgbj1fKHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpLHI9ci5tYXAoYj0+dHlwZW9mIGI9PSJzdHJpbmciP2IudG9Mb3dlckNhc2UoKTpiKSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P05zLGM9ZS5Cb29sZWFuPz9Fcyx1PWUuU3RyaW5nPz9CdCxsPW5ldyB1KHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxnPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSkscD1uZXcgYSh7dHlwZToicGlwZSIsaW46bCxvdXQ6Zyx0cmFuc2Zvcm06KChiLHkpPT57bGV0IGs9YjtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJihrPWsudG9Mb3dlckNhc2UoKSkscy5oYXMoayk/ITA6aS5oYXMoayk/ITE6KHkuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6eS52YWx1ZSxpbnN0OnAsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigoYix5KT0+Yj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIHAuX3pvZC5iYWcudHJ1dGh5PW8scC5fem9kLmJhZy5mYWxzeT1yLHAuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIscH1mdW5jdGlvbiB1dChlLHQsbixvPXt9KXtjb25zdCByPV8obykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgV209KCk9Pih7fSksR209KCk9Pih7fSksWW09KCk9Pih7fSksUW09KCk9Pih7fSksWG09KCk9Pih7fSksWXA9KCk9PigpPT4oe30pLFZyPSgpPT4oKT0+KHt9KSxlZz0oKT0+KHt9KSxmZT0oKT0+KHt9KSx0Zz0oKT0+KHt9KSxuZz0oKT0+KHt9KSxvZz0oKT0+KHt9KSxyZz0oKT0+KHt9KSxzZz0oKT0+KHt9KSxpZz0oKT0+KHt9KSxhZz0oKT0+KHt9KSxjZz0oKT0+KHt9KSx1Zz0oKT0+KHt9KSxsZz0oKT0+KHt9KSxkZz0oKT0+KHt9KSxwZz0oKT0+KHt9KSxmZz0oKT0+KHt9KSxoZz0oKT0+KHt9KSxtZz0oKT0+KHt9KSxnZz0oKT0+KHt9KSx2Zz0oKT0+KHt9KSxiZz0oKT0+KHt9KSxfZz0oKT0+KHt9KSx5Zz0oKT0+KHt9KSx3Zz0oKT0+KHt9KSxrZz0oKT0+KHt9KSxTZz0oKT0+KHt9KSwkZz0oKT0+KHt9KSx6Zz0oKT0+KHt9KSxRcD0oKT0+KHt9KSxUZz0oKT0+KHt9KSxQZz0oKT0+KHt9KSxJZz0oKT0+KHt9KSx4Zz0oKT0+KHt9KSxFZz0oKT0+KHt9KSxDZz0oKT0+KHt9KSxSZz0oKT0+KHt9KSxPZz0oKT0+KHt9KSxaZz0oKT0+KHt9KSxBZz0oKT0+KHt9KSxOZz0oKT0+KHt9KSxYcD0oKT0+KHt9KSxqZz0oKT0+KHt9KSxfaT0oKT0+KHt9KTtjbGFzcyBNZ3t9Y29uc3QgRGc9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGVmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OlBkLCRab2RBcnJheTpSZCwkWm9kQXN5bmNFcnJvcjpDZSwkWm9kQmFzZTY0OmRkLCRab2RCYXNlNjRVUkw6ZmQsJFpvZEJpZ0ludDpDcywkWm9kQmlnSW50Rm9ybWF0OlNkLCRab2RCb29sZWFuOkVzLCRab2RDSURSdjQ6YWQsJFpvZENJRFJ2Njp1ZCwkWm9kQ1VJRDpXbCwkWm9kQ1VJRDI6R2wsJFpvZENhdGNoOmVwLCRab2RDaGVjazpVLCRab2RDaGVja0JpZ0ludEZvcm1hdDpfbCwkWm9kQ2hlY2tFbmRzV2l0aDpDbCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjprcywkWm9kQ2hlY2tJbmNsdWRlczp4bCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6emwsJFpvZENoZWNrTGVzc1RoYW46d3MsJFpvZENoZWNrTG93ZXJDYXNlOlBsLCRab2RDaGVja01heExlbmd0aDpTbCwkWm9kQ2hlY2tNYXhTaXplOnlsLCRab2RDaGVja01pbWVUeXBlOlpsLCRab2RDaGVja01pbkxlbmd0aDokbCwkWm9kQ2hlY2tNaW5TaXplOndsLCRab2RDaGVja011bHRpcGxlT2Y6dmwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OmJsLCRab2RDaGVja092ZXJ3cml0ZTpBbCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOk9sLCRab2RDaGVja1Byb3BlcnR5OlJsLCRab2RDaGVja1JlZ2V4OlRsLCRab2RDaGVja1NpemVFcXVhbHM6a2wsJFpvZENoZWNrU3RhcnRzV2l0aDpFbCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6RnQsJFpvZENoZWNrVXBwZXJDYXNlOklsLCRab2RDb2RlYzpOcywkWm9kQ3JlZGl0Q2FyZDpnZCwkWm9kQ3VzdG9tOmFwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6d2QsJFpvZEN5Y2xpY0Vycm9yOmNwLCRab2REYXRlOkNkLCRab2REZWZhdWx0OkdkLCRab2REaXNjcmltaW5hdGVkVW5pb246RGQsJFpvZEUxNjQ6aGQsJFpvZEVtYWlsOkxsLCRab2RFbW9qaTpKbCwkWm9kRW5jb2RlRXJyb3I6aG8sJFpvZEVudW06RmQsJFpvZEVycm9yOlJ1LCRab2RFeGFjdE9wdGlvbmFsOktkLCRab2RGaWxlOlZkLCRab2RGdW5jdGlvbjpzcCwkWm9kR1VJRDpEbCwkWm9kSUJBTjpiZCwkWm9kSVB2NDpyZCwkWm9kSVB2NjpzZCwkWm9kSVNPRGF0ZTp0ZCwkWm9kSVNPRGF0ZVRpbWU6ZWQsJFpvZElTT0R1cmF0aW9uOm9kLCRab2RJU09UaW1lOm5kLCRab2RJbnRlcnNlY3Rpb246cWQsJFpvZEpXVDp5ZCwkWm9kS1NVSUQ6WGwsJFpvZExhenk6anMsJFpvZExpdGVyYWw6QmQsJFpvZE1BQzppZCwkWm9kTWFwOlVkLCRab2ROYU46dHAsJFpvZE5hbm9JRDpLbCwkWm9kTmV2ZXI6eGQsJFpvZE5vbk9wdGlvbmFsOlFkLCRab2ROdWxsOlRkLCRab2ROdWxsYWJsZTpXZCwkWm9kTnVtYmVyOnhzLCRab2ROdW1iZXJGb3JtYXQ6a2QsJFpvZE9iamVjdDpBZCwkWm9kT2JqZWN0SklUOk5kLCRab2RPcHRpb25hbDpacywkWm9kUGlwZTpBcywkWm9kUHJlZmF1bHQ6WWQsJFpvZFByZXByb2Nlc3M6bnAsJFpvZFByb21pc2U6aXAsJFpvZFJlYWRvbmx5Om9wLCRab2RSZWFsRXJyb3I6dWUsJFpvZFJlY29yZDpMZCwkWm9kUmVnaXN0cnk6ZnAsJFpvZFNldDpIZCwkWm9kU3RyaW5nOkJ0LCRab2RTdHJpbmdGb3JtYXQ6RCwkWm9kU3VjY2VzczpYZCwkWm9kU3ltYm9sOiRkLCRab2RUZW1wbGF0ZUxpdGVyYWw6cnAsJFpvZFRyYW5zZm9ybTpKZCwkWm9kVHVwbGU6T3MsJFpvZFR5cGU6eiwkWm9kVUxJRDpZbCwkWm9kVVJMOlZsLCRab2RVVUlEOnFsLCRab2RVbmRlZmluZWQ6emQsJFpvZFVuaW9uOmtvLCRab2RVbmtub3duOklkLCRab2RWb2lkOkVkLCRab2RYSUQ6UWwsJFpvZFhvcjpqZCwkYnJhbmQ6c3MsJGNvbnN0cnVjdG9yOmQsJGlucHV0OnFzLCRvdXRwdXQ6RHMsRG9jOk5sLElOVkFMSUQ6VXMsSlNPTlNjaGVtYTpEZyxKU09OU2NoZW1hR2VuZXJhdG9yOk1nLE5FVkVSOnJzLFRpbWVQcmVjaXNpb246aGksVVJMX0JBRF9GT1JNQVQ6JHMsVVJMX1VOUEFSU0VBQkxFOkN0LFpvZENvbXBpbGVBc3luY0Vycm9yOkhzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOkZzLF9hbnk6QXAsX2FycmF5OlVwLF9iYXNlNjQ6bGksX2Jhc2U2NHVybDpkaSxfYmlnaW50OklwLF9ib29sZWFuOlRwLF9jYXRjaDpIbSxfY2hlY2s6SnAsX2NpZHJ2NDpjaSxfY2lkcnY2OnVpLF9jb2VyY2VkQmlnaW50OnhwLF9jb2VyY2VkQm9vbGVhbjpQcCxfY29lcmNlZERhdGU6cXAsX2NvZXJjZWROdW1iZXI6eXAsX2NvZXJjZWRTdHJpbmc6bXAsX2NyZWRpdENhcmQ6dnAsX2N1aWQ6dGksX2N1aWQyOm5pLF9jdXN0b206RnAsX2RhdGU6RHAsX2RlY29kZTp1cyxfZGVjb2RlQXN5bmM6ZHMsX2RlZmF1bHQ6cW0sX2Rpc2NyaW1pbmF0ZWRVbmlvbjpJbSxfZTE2NDpwaSxfZW1haWw6SnMsX2Vtb2ppOlhzLF9lbmNvZGU6Y3MsX2VuY29kZUFzeW5jOmxzLF9lbmRzV2l0aDpZdCxfZW51bTpabSxfZmlsZTpIcCxfZmxvYXQzMjprcCxfZmxvYXQ2NDpTcCxfZ3Q6UGUsX2d0ZTpjZSxfZ3VpZDpLcyxfaWJhbjpicCxfaW5jbHVkZXM6V3QsX2ludDp3cCxfaW50MzI6JHAsX2ludDY0OkVwLF9pbnRlcnNlY3Rpb246eG0sX2lwdjQ6aWksX2lwdjY6YWksX2lzb0RhdGU6Z2ksX2lzb0RhdGVUaW1lOm1pLF9pc29EdXJhdGlvbjpiaSxfaXNvVGltZTp2aSxfand0OmZpLF9rc3VpZDpzaSxfbGF6eTpKbSxfbGVuZ3RoOmN0LF9saXRlcmFsOk5tLF9sb3dlcmNhc2U6SnQsX2x0OlRlLF9sdGU6YWUsX21hYzpncCxfbWFwOlJtLF9tYXg6YWUsX21heExlbmd0aDphdCxfbWF4U2l6ZTpWZSxfbWltZTpYdCxfbWluOmNlLF9taW5MZW5ndGg6T2UsX21pblNpemU6SWUsX211bHRpcGxlT2Y6cWUsX25hbjpMcCxfbmFub2lkOmVpLF9uYXRpdmVFbnVtOkFtLF9uZWdhdGl2ZTpJbyxfbmV2ZXI6anAsX25vbm5lZ2F0aXZlOkVvLF9ub25vcHRpb25hbDpMbSxfbm9ucG9zaXRpdmU6eG8sX25vcm1hbGl6ZTplbixfbnVsbDpacCxfbnVsbGFibGU6RG0sX251bWJlcjpfcCxfb3B0aW9uYWw6TW0sX292ZXJ3cml0ZTp3ZSxfcGFyc2U6TXQsX3BhcnNlQXN5bmM6RHQsX3BpcGU6Rm0sX3Bvc2l0aXZlOlBvLF9wcm9taXNlOkttLF9wcm9wZXJ0aWVzOlF0LF9wcm9wZXJ0eTpDbyxfcmVhZG9ubHk6Qm0sX3JlY29yZDpDbSxfcmVmaW5lOkJwLF9yZWdleDpWdCxfc2FmZURlY29kZTpmcyxfc2FmZURlY29kZUFzeW5jOm1zLF9zYWZlRW5jb2RlOnBzLF9zYWZlRW5jb2RlQXN5bmM6aHMsX3NhZmVQYXJzZTpxdCxfc2FmZVBhcnNlQXN5bmM6THQsX3NldDpPbSxfc2l6ZTppdCxfc2x1Z2lmeTpybixfc3RhcnRzV2l0aDpHdCxfc3RyaW5nOmhwLF9zdHJpbmdGb3JtYXQ6dXQsX3N0cmluZ2Jvb2w6R3AsX3N1Y2Nlc3M6VW0sX3N1cGVyUmVmaW5lOlZwLF9zeW1ib2w6UnAsX3RlbXBsYXRlTGl0ZXJhbDpWbSxfdG9Mb3dlckNhc2U6bm4sX3RvVXBwZXJDYXNlOm9uLF90cmFuc2Zvcm06am0sX3RyaW06dG4sX3R1cGxlOkVtLF91aW50MzI6enAsX3VpbnQ2NDpDcCxfdWxpZDpvaSxfdW5kZWZpbmVkOk9wLF91bmlvbjpUbSxfdW5rbm93bjpOcCxfdXBwZXJjYXNlOkt0LF91cmw6VG8sX3V1aWQ6V3MsX3V1aWR2NDpHcyxfdXVpZHY2OllzLF91dWlkdjc6UXMsX3ZvaWQ6TXAsX3hpZDpyaSxfeG9yOlBtLGJhc2U2NENoYXJzZXQ6bGQsYmFzZTY0dXJsQ2hhcnNldDpJcyxjYW5QYXJzZVVSTDp6cyxjbG9uZTpILGNvbXBpbGU6QnMsY29tcGlsZUZuOnptLGNvbmZpZzpKLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDpWcixjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6WXAsZGVjb2RlOlJoLGRlY29kZUFzeW5jOlpoLGRlc2NyaWJlOktwLGVuY29kZTpDaCxlbmNvZGVBc3luYzpPaCxleHRyYWN0RGVmczpRbSxmaW5hbGl6ZTpYbSxmbGF0dGVuRXJyb3I6bW8sZm9ybWF0RXJyb3I6Z28sZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpScyxnbG9iYWxDb25maWc6bmUsZ2xvYmFsUmVnaXN0cnk6cGUsaGFuZGxlVW5yZXByZXNlbnRhYmxlOkdtLGluaXRpYWxpemVDb250ZXh0OldtLGlzQmFja0VkZ2U6ZHAsaXNSZWN1cnNpdmVTY2hlbWE6d20saXNWYWxpZEJhc2U2NDpQcyxpc1ZhbGlkQmFzZTY0VVJMOnBkLGlzVmFsaWRDSURSdjY6Y2QsaXNWYWxpZENyZWRpdENhcmQ6bWQsaXNWYWxpZElCQU46dmQsaXNWYWxpZElQdjY6VHMsaXNWYWxpZEpXVDpfZCxsb2NhbGVzOk1zLG1lbW9pemVyOlNvLG1lcmdlVmFsdWVzOnRvLG1ldGE6V3AscGFyc2U6cXIscGFyc2VBc3luYzpMcixwYXJzZVVSTE9iamVjdDpIbCxwcmV0dGlmeUVycm9yOmFzLHByb2Nlc3M6ZWcscHJvY2Vzc1NjaGVtYTpZbSxyZWdleGVzOndvLHJlZ2lzdHJ5OiRvLHNhZmVEZWNvZGU6Tmgsc2FmZURlY29kZUFzeW5jOk1oLHNhZmVFbmNvZGU6QWgsc2FmZUVuY29kZUFzeW5jOmpoLHNhZmVQYXJzZTpadSxzYWZlUGFyc2VBc3luYzpQaCxzdGFuZGFyZFByb3BzOlNzLHN0cmlwVGFiQW5kTmV3bGluZTpIcix0b0RvdFBhdGg6T3UsdG9KU09OU2NoZW1hOl9pLHRvWm9kOnNvLHRyZWVpZnlFcnJvcjppcyx1cmxIb3N0bmFtZU9rOkZsLHVybFByb3RvY29sT2s6QmwsdXRpbDpvcyx2YWxpZGF0ZTpibyx2YWxpZGF0ZUFzeW5jOl9vLHZhbGlkYXRlVVJMOlVsLHZlcnNpb246amwsd2l0aFBhcnNlcjpWc30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxMYz1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24geWkoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGksYSk9Pntjb25zdCBjPXRbaS5fem9kLmRlZi50eXBlXTtyZXR1cm4gYz9jKGksYSk6aX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoaSl7Y29uc3QgYT1vLmdldChpKTtpZihhPT09TGMpcmV0dXJuIG5ldyBqcyh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChpKX0pO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7by5zZXQoaSxMYyk7Y29uc3QgYz1zKGkpLHU9bihjLGMhPT1pKTtyZXR1cm4gby5zZXQoaSx1KSx1fWZ1bmN0aW9uIHMoaSl7Y29uc3QgYT1pLl96b2QuZGVmO3N3aXRjaChhLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1hLnNoYXBlLGw9T2JqZWN0LmtleXModSk7bGV0IGc9ITE7Y29uc3QgcD17fTtmb3IoY29uc3QgeSBvZiBsKXtjb25zdCBrPXIodVt5XSk7ayE9PXVbeV0mJihnPSEwKSxwW3ldPWt9bGV0IGI9YS5jYXRjaGFsbDtyZXR1cm4gYS5jYXRjaGFsbCYmKGI9cihhLmNhdGNoYWxsKSxiIT09YS5jYXRjaGFsbCYmKGc9ITApKSxnP0goaSx7Li4uYSxzaGFwZTpwLGNhdGNoYWxsOmJ9KTppfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoYS5lbGVtZW50KTtyZXR1cm4gdT09PWEuZWxlbWVudD9pOkgoaSx7Li4uYSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1hLml0ZW1zO2xldCBsPSExO2NvbnN0IGc9W107Zm9yKGNvbnN0IGIgb2YgdSl7Y29uc3QgeT1yKGIpO3khPT1iJiYobD0hMCksZy5wdXNoKHkpfWxldCBwPWEucmVzdDtyZXR1cm4gYS5yZXN0JiYocD1yKGEucmVzdCkscCE9PWEucmVzdCYmKGw9ITApKSxsP0goaSx7Li4uYSxpdGVtczpnLHJlc3Q6cH0pOml9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGEua2V5VHlwZSksbD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEua2V5VHlwZSYmbD09PWEudmFsdWVUeXBlP2k6SChpLHsuLi5hLGtleVR5cGU6dSx2YWx1ZVR5cGU6bH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEudmFsdWVUeXBlP2k6SChpLHsuLi5hLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9YS5vcHRpb25zO2xldCBsPSExO2NvbnN0IGc9W107Zm9yKGNvbnN0IHAgb2YgdSl7Y29uc3QgYj1yKHApO2IhPT1wJiYobD0hMCksZy5wdXNoKGIpfXJldHVybiBsP0goaSx7Li4uYSxvcHRpb25zOmd9KTppfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGEubGVmdCksbD1yKGEucmlnaHQpO3JldHVybiB1PT09YS5sZWZ0JiZsPT09YS5yaWdodD9pOkgoaSx7Li4uYSxsZWZ0OnUscmlnaHQ6bH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoYS5pbm5lclR5cGUpO3JldHVybiB1PT09YS5pbm5lclR5cGU/aTpIKGksey4uLmEsaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoYS5pbiksbD1yKGEub3V0KTtyZXR1cm4gdT09PWEuaW4mJmw9PT1hLm91dD9pOkgoaSx7Li4uYSxpbjp1LG91dDpsfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihhLmlucHV0KSxsPXIoYS5vdXRwdXQpO3JldHVybiB1PT09YS5pbnB1dCYmbD09PWEub3V0cHV0P2k6SChpLHsuLi5hLGlucHV0OnUsb3V0cHV0Omx9KX1jYXNlImxhenkiOntjb25zdCB1PWEuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6bCwuLi5nfT1hO3JldHVybiBIKGksey4uLmcsZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gd2koZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gdGYoZSx0KXtyZXR1cm4gd2koZSk/WnUoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiBxZyhlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYod2koZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiBMZyhlKXtpZih3aShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCBVZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6WXQsZ3Q6UGUsZ3RlOmNlLGluY2x1ZGVzOld0LGxlbmd0aDpjdCxsb3dlcmNhc2U6SnQsbHQ6VGUsbHRlOmFlLG1heExlbmd0aDphdCxtYXhTaXplOlZlLG1pbWU6WHQsbWluTGVuZ3RoOk9lLG1pblNpemU6SWUsbXVsdGlwbGVPZjpxZSxuZWdhdGl2ZTpJbyxub25uZWdhdGl2ZTpFbyxub25wb3NpdGl2ZTp4byxub3JtYWxpemU6ZW4sb3ZlcndyaXRlOndlLHBvc2l0aXZlOlBvLHByb3BlcnRpZXM6UXQscHJvcGVydHk6Q28scmVnZXg6VnQsc2l6ZTppdCxzbHVnaWZ5OnJuLHN0YXJ0c1dpdGg6R3QsdG9Mb3dlckNhc2U6bm4sdG9VcHBlckNhc2U6b24sdHJpbTp0bix1cHBlcmNhc2U6S3R9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVWM9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gVm4oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCBuZj0oZSx0KT0+e1J1LmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtVYy5oYXMobil8fChVYy5hZGQobiksVm4obiwiZm9ybWF0IixvPT5yPT5nbyhvLHIpKSxWbihuLCJmbGF0dGVuIixvPT5yPT5tbyhvLHIpKSxWbihuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLEduLDIpfSksVm4obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsR24sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0sb2Y9ZCgiWm9kRXJyb3IiLG5mKSxzZT1kKCJab2RFcnJvciIsbmYsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxraT1NdChzZSksU2k9RHQoc2UpLCRpPXF0KHNlKSx6aT1MdChzZSksVGk9Y3Moc2UpLFBpPXVzKHNlKSxJaT1scyhzZSkseGk9ZHMoc2UpLEVpPXBzKHNlKSxDaT1mcyhzZSksUmk9aHMoc2UpLE9pPW1zKHNlKTtmdW5jdGlvbiBIZygpe25lLmxvY2FsZUVycm9yfHxKKHBwKCkpfWZ1bmN0aW9uIEplKCl7bmUubWVtb2l6ZXJ8fEooe21lbW9pemVyOlNvKCl9KX1jb25zdCBQPWQoIlpvZFR5cGUiLChlLHQpPT4oSGcoKSx6LmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUoZWUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEgodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKF9yKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHlyKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2UoZSkpfSxvcHRpb25hbCgpe3JldHVybiBxKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIFhvKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBvdCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBxKG90KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIHNyKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIFModGhpcyl9LG9yKGUpe3JldHVybiBJKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiB3dCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIE90KHRoaXMseG4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBucih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gcnIodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIGNyKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIE90KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIHByKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gcGUuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gcGUuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBwZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIGZvKHRoaXMsIn5zdGFuZGFyZCIsey4uLlNzKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OlZyKCksb3V0cHV0OlZyKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe3plKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4ga2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBTaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuICRpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gemkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe3plKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIGJvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBfbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIFRpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBQaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBJaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCB4aSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBFaSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gQ2kodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gUmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gT2kodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIFlwKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBwZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHNuPWQoIl9ab2RTdHJpbmciLChlLHQpPT57QnQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT50ZygpfSxqdCh7Zm9ybWF0OmU9PmZlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT5mZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PmZlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFZ0KC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soV3QoLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEd0KC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soWXQoLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soT2UoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soYXQoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soY3QoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhPZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKEp0KGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKEt0KGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKHRuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soZW4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKG5uKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKG9uKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2socm4oKSl9fSkpLGx0PWQoIlpvZFN0cmluZyIsKGUsdCk9PntCdC5pbml0KGUsdCksc24uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soSnMoYW4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soVG8obXQsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soZmkoU24sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhYcyh1bixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soS3MoY24sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFdzKGJlLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKEdzKGJlLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFlzKGJlLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKFFzKGJlLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKGVpKGxuLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh0aShkbixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKG5pKHBuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhvaShmbixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhsaSh5bixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhkaSh3bixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhyaShobixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHNpKG1uLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhpaShnbixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWkodm4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2koYm4sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2sodWkoX24sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHBpKGtuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWkoZHQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKGdpKHB0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayh2aShmdCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKGJpKGh0LGUpKX19KTtmdW5jdGlvbiBmKGUpe3JldHVybiBocChsdCxlKX1jb25zdCBOPWQoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntELmluaXQoZSx0KSxzbi5pbml0KGUsdCl9KSxkdD1kKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PntlZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KSxwdD1kKCJab2RJU09EYXRlIiwoZSx0KT0+e3RkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pLGZ0PWQoIlpvZElTT1RpbWUiLChlLHQpPT57bmQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSksaHQ9ZCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57b2QuaW5pdChlLHQpLE4uaW5pdChlLHQpfSksYW49ZCgiWm9kRW1haWwiLChlLHQpPT57TGwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gWmkoZSl7cmV0dXJuIEpzKGFuLGUpfWNvbnN0IGNuPWQoIlpvZEdVSUQiLChlLHQpPT57RGwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gQWkoZSl7cmV0dXJuIEtzKGNuLGUpfWNvbnN0IGJlPWQoIlpvZFVVSUQiLChlLHQpPT57cWwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gTmkoZSl7cmV0dXJuIFdzKGJlLGUpfWZ1bmN0aW9uIGppKGUpe3JldHVybiBHcyhiZSxlKX1mdW5jdGlvbiBNaShlKXtyZXR1cm4gWXMoYmUsZSl9ZnVuY3Rpb24gRGkoZSl7cmV0dXJuIFFzKGJlLGUpfWNvbnN0IG10PWQoIlpvZFVSTCIsKGUsdCk9PntWbC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBxaShlKXtyZXR1cm4gVG8obXQsZSl9ZnVuY3Rpb24gTGkoZSl7cmV0dXJuIFRvKG10LHtwcm90b2NvbDpncyxob3N0bmFtZTplbCwuLi5fKGUpfSl9Y29uc3QgdW49ZCgiWm9kRW1vamkiLChlLHQpPT57SmwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIFhzKHVuLGUpfWNvbnN0IGxuPWQoIlpvZE5hbm9JRCIsKGUsdCk9PntLbC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBIaShlKXtyZXR1cm4gZWkobG4sZSl9Y29uc3QgZG49ZCgiWm9kQ1VJRCIsKGUsdCk9PntXbC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBGaShlKXtyZXR1cm4gdGkoZG4sZSl9Y29uc3QgcG49ZCgiWm9kQ1VJRDIiLChlLHQpPT57R2wuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gQmkoZSl7cmV0dXJuIG5pKHBuLGUpfWNvbnN0IGZuPWQoIlpvZFVMSUQiLChlLHQpPT57WWwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gVmkoZSl7cmV0dXJuIG9pKGZuLGUpfWNvbnN0IGhuPWQoIlpvZFhJRCIsKGUsdCk9PntRbC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBKaShlKXtyZXR1cm4gcmkoaG4sZSl9Y29uc3QgbW49ZCgiWm9kS1NVSUQiLChlLHQpPT57WGwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIHNpKG1uLGUpfWNvbnN0IGduPWQoIlpvZElQdjQiLChlLHQpPT57cmQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2koZSl7cmV0dXJuIGlpKGduLGUpfWNvbnN0IFJvPWQoIlpvZE1BQyIsKGUsdCk9PntpZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBHaShlKXtyZXR1cm4gZ3AoUm8sZSl9Y29uc3Qgdm49ZCgiWm9kSVB2NiIsKGUsdCk9PntzZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBZaShlKXtyZXR1cm4gYWkodm4sZSl9Y29uc3QgYm49ZCgiWm9kQ0lEUnY0IiwoZSx0KT0+e2FkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFFpKGUpe3JldHVybiBjaShibixlKX1jb25zdCBfbj1kKCJab2RDSURSdjYiLChlLHQpPT57dWQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIHVpKF9uLGUpfWNvbnN0IHluPWQoIlpvZEJhc2U2NCIsKGUsdCk9PntkZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBlYShlKXtyZXR1cm4gbGkoeW4sZSl9Y29uc3Qgd249ZCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e2ZkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHRhKGUpe3JldHVybiBkaSh3bixlKX1jb25zdCBrbj1kKCJab2RFMTY0IiwoZSx0KT0+e2hkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG5hKGUpe3JldHVybiBwaShrbixlKX1jb25zdCBPbz1kKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e2dkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG9hKGUpe3JldHVybiB2cChPbyxlKX1jb25zdCBabz1kKCJab2RJQkFOIiwoZSx0KT0+e2JkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHJhKGUpe3JldHVybiBicChabyxlKX1jb25zdCBTbj1kKCJab2RKV1QiLChlLHQpPT57eWQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGZpKFNuLGUpfWNvbnN0IFplPWQoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt3ZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBpYShlLHQsbj17fSl7cmV0dXJuIHV0KFplLGUsdCxuKX1mdW5jdGlvbiBhYShlKXtyZXR1cm4gdXQoWmUsImhvc3RuYW1lIixYdSxlKX1mdW5jdGlvbiBjYShlKXtyZXR1cm4gdXQoWmUsImhleCIsZ2wsZSl9ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIHV0KFplLCJjdXJyZW5jeV9jb2RlIixubCxlKX1mdW5jdGlvbiBsYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9d29bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gdXQoWmUsbyxyLHQpfWNvbnN0IGd0PWQoIlpvZE51bWJlciIsKGUsdCk9Pnt4cy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm5nKCksZS5pc0Zpbml0ZT0hMH0sanQoe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT1mZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PWZlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PWZlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+ZmUoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFBlKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhjZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soY2UoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soVGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGFlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhhZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKFJ0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhSdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKFBlKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhjZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGFlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhxZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIFQoZSl7cmV0dXJuIF9wKGd0LGUpfWNvbnN0IEFlPWQoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntrZC5pbml0KGUsdCksZ3QuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUnQoZSl7cmV0dXJuIHdwKEFlLGUpfWZ1bmN0aW9uIGRhKGUpe3JldHVybiBrcChBZSxlKX1mdW5jdGlvbiBwYShlKXtyZXR1cm4gU3AoQWUsZSl9ZnVuY3Rpb24gZmEoZSl7cmV0dXJuICRwKEFlLGUpfWZ1bmN0aW9uIGhhKGUpe3JldHVybiB6cChBZSxlKX1jb25zdCB2dD1kKCJab2RCb29sZWFuIiwoZSx0KT0+e0VzLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+b2coKX0pO2Z1bmN0aW9uIEEoZSl7cmV0dXJuIFRwKHZ0LGUpfWNvbnN0IGJ0PWQoIlpvZEJpZ0ludCIsKGUsdCk9PntDcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnJnKCl9LGp0KHttaW5WYWx1ZTplPT5mZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+ZmUoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT5mZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGNlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhjZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhQZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhUZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYWUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGFlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhQZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhUZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhhZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhjZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9fSkpO2Z1bmN0aW9uIG1hKGUpe3JldHVybiBJcChidCxlKX1jb25zdCAkbj1kKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57U2QuaW5pdChlLHQpLGJ0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIGdhKGUpe3JldHVybiBFcCgkbixlKX1mdW5jdGlvbiB2YShlKXtyZXR1cm4gQ3AoJG4sZSl9Y29uc3QgQW89ZCgiWm9kU3ltYm9sIiwoZSx0KT0+eyRkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+c2coKX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBScChBbyxlKX1jb25zdCBObz1kKCJab2RVbmRlZmluZWQiLChlLHQpPT57emQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5hZygpfSk7ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIE9wKE5vLGUpfWNvbnN0IGpvPWQoIlpvZE51bGwiLChlLHQpPT57VGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pZygpfSk7ZnVuY3Rpb24gem4oZSl7cmV0dXJuIFpwKGpvLGUpfWNvbnN0IE1vPWQoIlpvZEFueSIsKGUsdCk9PntQZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmxnKCl9KTtmdW5jdGlvbiBUbigpe3JldHVybiBBcChNbyl9Y29uc3QgRG89ZCgiWm9kVW5rbm93biIsKGUsdCk9PntJZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmRnKCl9KTtmdW5jdGlvbiBaKCl7cmV0dXJuIE5wKERvKX1jb25zdCBxbz1kKCJab2ROZXZlciIsKGUsdCk9Pnt4ZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnVnKCl9KTtmdW5jdGlvbiBMZShlKXtyZXR1cm4ganAocW8sZSl9Y29uc3QgTG89ZCgiWm9kVm9pZCIsKGUsdCk9PntFZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmNnKCl9KTtmdW5jdGlvbiBfYShlKXtyZXR1cm4gTXAoTG8sZSl9Y29uc3QgUG49ZCgiWm9kRGF0ZSIsKGUsdCk9PntDZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnBnKCksZS5taW49KG4sbyk9PmUuY2hlY2soY2UobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2soYWUobixvKSl9LGp0KHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PWZlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT1mZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIHlhKGUpe3JldHVybiBEcChQbixlKX1jb25zdCBVbz1kKCJab2RBcnJheSIsKGUsdCk9PntKZSgpLFJkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGcoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soT2UoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKE9lKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhhdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soY3QoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24gUyhlLHQpe3JldHVybiBVcChVbyxlLHQpfWZ1bmN0aW9uIHdhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gRyhPYmplY3Qua2V5cyh0KSl9Y29uc3QgX3Q9ZCgiWm9kT2JqZWN0IiwoZSx0KT0+e0plKCksTmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT56ZygpLHh1KGUsInNoYXBlIixuPT5uLl96b2QuZGVmLnNoYXBlLCExKX0se2tleW9mKCl7cmV0dXJuIEcoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZShlZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKGVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlooKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZShlZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpaKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKGVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkxlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoZWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIF91KHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIHd1KHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBrdSh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiB2dSh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBidSh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBNcihrdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIE1yKEVuLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBTdShDbix0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIHYoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLl8odCl9O3JldHVybiBuZXcgX3Qobil9ZnVuY3Rpb24ga2EoZSx0KXtyZXR1cm4gbmV3IF90KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6TGUoKSwuLi5fKHQpfSl9ZnVuY3Rpb24gVyhlLHQpe3JldHVybiBuZXcgX3Qoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpaKCksLi4uXyh0KX0pfWNvbnN0IHl0PWQoIlpvZFVuaW9uIiwoZSx0KT0+e2tvLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UXAoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gSShlLHQpe3JldHVybiBuZXcgeXQoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4uXyh0KX0pfWNvbnN0IEhvPWQoIlpvZFhvciIsKGUsdCk9Pnt5dC5pbml0KGUsdCksamQuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RcCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBTYShlLHQpe3JldHVybiBuZXcgSG8oe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLl8odCl9KX1jb25zdCBGbz1kKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57eXQuaW5pdChlLHQpLERkLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEluKGUsdCxuKXtyZXR1cm4gbmV3IEZvKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi5fKG4pfSl9Y29uc3QgQm89ZCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3FkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VGcoKX0pO2Z1bmN0aW9uIHd0KGUsdCl7cmV0dXJuIG5ldyBCbyh7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IFZvPWQoIlpvZFR1cGxlIiwoZSx0KT0+e0plKCksT3MuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QZygpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcga3Qoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIEpvKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiB6LHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IFZvKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4uXyhyKX0pfWNvbnN0IFVlPWQoIlpvZFJlY29yZCIsKGUsdCk9PntKZSgpLExkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWcoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gRShlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IFVlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZigpLHZhbHVlVHlwZTplLC4uLl8odCl9KTpuZXcgVWUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiAkYShlLHQsbil7cmV0dXJuIG5ldyBVZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gemEoZSx0LG4pe3JldHVybiBuZXcgVWUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi5fKG4pfSl9Y29uc3QgS289ZCgiWm9kTWFwIiwoZSx0KT0+e0plKCksVWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5rZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKEllKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soSWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKFZlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKGl0KC4uLm4pKX0pO2Z1bmN0aW9uIFRhKGUsdCxuKXtyZXR1cm4gbmV3IEtvKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pfSl9Y29uc3QgV289ZCgiWm9kU2V0IiwoZSx0KT0+e0plKCksSGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5TZygpLGUubWluPSguLi5uKT0+ZS5jaGVjayhJZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKEllKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhWZSguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhpdCguLi5uKSl9KTtmdW5jdGlvbiBQYShlLHQpe3JldHVybiBuZXcgV28oe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4uXyh0KX0pfWNvbnN0IEhlPWQoIlpvZEVudW0iLChlLHQpPT57RmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5mZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgSGUoey4uLnQsY2hlY2tzOltdLC4uLl8ociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IEhlKHsuLi50LGNoZWNrczpbXSwuLi5fKHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIEcoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IEhlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4uXyh0KX0pfWZ1bmN0aW9uIElhKGUsdCl7cmV0dXJuIG5ldyBIZSh7dHlwZToiZW51bSIsZW50cmllczplLC4uLl8odCl9KX1jb25zdCBHbz1kKCJab2RMaXRlcmFsIiwoZSx0KT0+e0JkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+aGcoKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gaChlLHQpe3JldHVybiBuZXcgR28oe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLl8odCl9KX1jb25zdCBZbz1kKCJab2RGaWxlIiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmcoKSxlLm1pbj0obixvKT0+ZS5jaGVjayhJZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhWZShuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soWHQoQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiB4YShlKXtyZXR1cm4gSHAoWW8sZSl9Y29uc3QgUW89ZCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e0plKCksSmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT53ZygpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgaG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaChldChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgaT1zO2kuZmF0YWwmJihpLmNvbnRpbnVlPSExKSxpLmNvZGU/PyhpLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBpfHwoaS5pbnB1dD1uLnZhbHVlKSxpLmluc3Q/PyhpLmluc3Q9ZSksbi5pc3N1ZXMucHVzaChldChpKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIHhuKGUpe3JldHVybiBuZXcgUW8oe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBrdD1kKCJab2RPcHRpb25hbCIsKGUsdCk9Pntacy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhwKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gcShlKXtyZXR1cm4gbmV3IGt0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBFbj1kKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e0tkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WHAoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBYbyhlKXtyZXR1cm4gbmV3IEVuKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBlcj1kKCJab2ROdWxsYWJsZSIsKGUsdCk9PntXZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gb3QoZSl7cmV0dXJuIG5ldyBlcih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIHEob3QoZSkpfWNvbnN0IHRyPWQoIlpvZERlZmF1bHQiLChlLHQpPT57R2QuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiBucihlLHQpe3JldHVybiBuZXcgdHIoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOmFvKHQpfX0pfWNvbnN0IG9yPWQoIlpvZFByZWZhdWx0IiwoZSx0KT0+e1lkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UmcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBycihlLHQpe3JldHVybiBuZXcgb3Ioe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTphbyh0KX19KX1jb25zdCBDbj1kKCJab2ROb25PcHRpb25hbCIsKGUsdCk9PntRZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gc3IoZSx0KXtyZXR1cm4gbmV3IENuKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4uXyh0KX0pfWNvbnN0IGlyPWQoIlpvZFN1Y2Nlc3MiLChlLHQpPT57WGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5iZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBuZXcgaXIoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3QgYXI9ZCgiWm9kQ2F0Y2giLChlLHQpPT57ZXAuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gY3IoZSx0KXtyZXR1cm4gbmV3IGFyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90Om5zKHQpfSl9Y29uc3QgdXI9ZCgiWm9kTmFOIiwoZSx0KT0+e3RwLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWcoKX0pO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBMcCh1cixlKX1jb25zdCBTdD1kKCJab2RQaXBlIiwoZSx0KT0+e0FzLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WmcoKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBPdChlLHQpe3JldHVybiBuZXcgU3Qoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCAkdD1kKCJab2RDb2RlYyIsKGUsdCk9PntTdC5pbml0KGUsdCksTnMuaW5pdChlLHQpfSk7ZnVuY3Rpb24gT2EoZSx0LG4pe3JldHVybiBuZXcgJHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiBaYShlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyAkdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3QgbHI9ZCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntTdC5pbml0KGUsdCksbnAuaW5pdChlLHQpfSksZHI9ZCgiWm9kUmVhZG9ubHkiLChlLHQpPT57b3AuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5BZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHByKGUpe3JldHVybiBuZXcgZHIoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0IGZyPWQoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PntycC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdnKCl9KTtmdW5jdGlvbiBBYShlLHQpe3JldHVybiBuZXcgZnIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4uXyh0KX0pfWNvbnN0IGhyPWQoIlpvZExhenkiLChlLHQpPT57anMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24gbXIoZSl7cmV0dXJuIG5ldyBocih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCBncj1kKCJab2RQcm9taXNlIiwoZSx0KT0+e2lwLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TmcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gbmV3IGdyKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IHZyPWQoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e3NwLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eWcoKX0pO2Z1bmN0aW9uIHJ0KGUpe3JldHVybiBuZXcgdnIoe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9KbyhlPy5pbnB1dCk6ZT8uaW5wdXQ/P1MoWigpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9aKCl9KX1jb25zdCB6dD1kKCJab2RDdXN0b20iLChlLHQpPT57YXAuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5fZygpfSk7ZnVuY3Rpb24gamEoZSl7Y29uc3QgdD1uZXcgVSh7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBicihlLHQpe3JldHVybiBGcCh6dCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiBfcihlLHQ9e30pe3JldHVybiBCcCh6dCxlLHQpfWZ1bmN0aW9uIHlyKGUsdCl7cmV0dXJuIFZwKGUsdCl9Y29uc3QgTWE9S3AsRGE9V3Asd3I9ZCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9Pnt6dC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUXQoZSx0KSl9fSk7ZnVuY3Rpb24gcWEoZSx0PXt9KXtjb25zdCBuPW5ldyB3cih7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi5fKHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IExhPSguLi5lKT0+R3Aoe0NvZGVjOiR0LEJvb2xlYW46dnQsU3RyaW5nOmx0fSwuLi5lKTtmdW5jdGlvbiBVYShlKXtjb25zdCB0PW1yKCgpPT5JKFtmKGUpLFQoKSxBKCksem4oKSxTKHQpLEUoZigpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIFJuKGUsdCl7cmV0dXJuIG5ldyBscih7dHlwZToicGlwZSIsaW46eG4oZSksb3V0OnR9KX1jb25zdCBGZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55Ok1vLFpvZEFycmF5OlVvLFpvZEJhc2U2NDp5bixab2RCYXNlNjRVUkw6d24sWm9kQmlnSW50OmJ0LFpvZEJpZ0ludEZvcm1hdDokbixab2RCb29sZWFuOnZ0LFpvZENJRFJ2NDpibixab2RDSURSdjY6X24sWm9kQ1VJRDpkbixab2RDVUlEMjpwbixab2RDYXRjaDphcixab2RDb2RlYzokdCxab2RDcmVkaXRDYXJkOk9vLFpvZEN1c3RvbTp6dCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6WmUsWm9kRGF0ZTpQbixab2REZWZhdWx0OnRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpGbyxab2RFMTY0OmtuLFpvZEVtYWlsOmFuLFpvZEVtb2ppOnVuLFpvZEVudW06SGUsWm9kRXhhY3RPcHRpb25hbDpFbixab2RGaWxlOllvLFpvZEZ1bmN0aW9uOnZyLFpvZEdVSUQ6Y24sWm9kSUJBTjpabyxab2RJUHY0OmduLFpvZElQdjY6dm4sWm9kSVNPRGF0ZTpwdCxab2RJU09EYXRlVGltZTpkdCxab2RJU09EdXJhdGlvbjpodCxab2RJU09UaW1lOmZ0LFpvZEluc3RhbmNlT2Y6d3IsWm9kSW50ZXJzZWN0aW9uOkJvLFpvZEpXVDpTbixab2RLU1VJRDptbixab2RMYXp5OmhyLFpvZExpdGVyYWw6R28sWm9kTUFDOlJvLFpvZE1hcDpLbyxab2ROYU46dXIsWm9kTmFub0lEOmxuLFpvZE5ldmVyOnFvLFpvZE5vbk9wdGlvbmFsOkNuLFpvZE51bGw6am8sWm9kTnVsbGFibGU6ZXIsWm9kTnVtYmVyOmd0LFpvZE51bWJlckZvcm1hdDpBZSxab2RPYmplY3Q6X3QsWm9kT3B0aW9uYWw6a3QsWm9kUGlwZTpTdCxab2RQcmVmYXVsdDpvcixab2RQcmVwcm9jZXNzOmxyLFpvZFByb21pc2U6Z3IsWm9kUmVhZG9ubHk6ZHIsWm9kUmVjb3JkOlVlLFpvZFNldDpXbyxab2RTdHJpbmc6bHQsWm9kU3RyaW5nRm9ybWF0Ok4sWm9kU3VjY2Vzczppcixab2RTeW1ib2w6QW8sWm9kVGVtcGxhdGVMaXRlcmFsOmZyLFpvZFRyYW5zZm9ybTpRbyxab2RUdXBsZTpWbyxab2RUeXBlOlAsWm9kVUxJRDpmbixab2RVUkw6bXQsWm9kVVVJRDpiZSxab2RVbmRlZmluZWQ6Tm8sWm9kVW5pb246eXQsWm9kVW5rbm93bjpEbyxab2RWb2lkOkxvLFpvZFhJRDpobixab2RYb3I6SG8sX1pvZFN0cmluZzpzbixfZGVmYXVsdDpucixfZnVuY3Rpb246cnQsYW55OlRuLGFycmF5OlMsYmFzZTY0OmVhLGJhc2U2NHVybDp0YSxiaWdpbnQ6bWEsYm9vbGVhbjpBLGNhdGNoOmNyLGNoZWNrOmphLGNpZHJ2NDpRaSxjaWRydjY6WGksY29kZWM6T2EsY3JlZGl0Q2FyZDpvYSxjdWlkOkZpLGN1aWQyOkJpLGN1cnJlbmN5Q29kZTp1YSxjdXN0b206YnIsZGF0ZTp5YSxkZXNjcmliZTpNYSxkaXNjcmltaW5hdGVkVW5pb246SW4sZTE2NDpuYSxlbWFpbDpaaSxlbW9qaTpVaSxlbnVtOkcsZXhhY3RPcHRpb25hbDpYbyxmaWxlOnhhLGZsb2F0MzI6ZGEsZmxvYXQ2NDpwYSxmdW5jdGlvbjpydCxndWlkOkFpLGhhc2g6bGEsaGV4OmNhLGhvc3RuYW1lOmFhLGh0dHBVcmw6TGksaWJhbjpyYSxpbnN0YW5jZW9mOnFhLGludDpSdCxpbnQzMjpmYSxpbnQ2NDpnYSxpbnRlcnNlY3Rpb246d3QsaW52ZXJ0Q29kZWM6WmEsaXB2NDpXaSxpcHY2OllpLGpzb246VWEsand0OnNhLGtleW9mOndhLGtzdWlkOktpLGxhenk6bXIsbGl0ZXJhbDpoLGxvb3NlT2JqZWN0OlcsbG9vc2VSZWNvcmQ6emEsbWFjOkdpLG1hcDpUYSxtZXRhOkRhLG5hbjpSYSxuYW5vaWQ6SGksbmF0aXZlRW51bTpJYSxuZXZlcjpMZSxub25vcHRpb25hbDpzcixudWxsOnpuLG51bGxhYmxlOm90LG51bGxpc2g6RWEsbnVtYmVyOlQsb2JqZWN0OnYsb3B0aW9uYWw6cSxwYXJ0aWFsUmVjb3JkOiRhLHBpcGU6T3QscHJlZmF1bHQ6cnIscHJlcHJvY2VzczpSbixwcm9taXNlOk5hLHJlYWRvbmx5OnByLHJlY29yZDpFLHJlZmluZTpfcixzZXQ6UGEsc3RyaWN0T2JqZWN0OmthLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDppYSxzdHJpbmdib29sOkxhLHN1Y2Nlc3M6Q2Esc3VwZXJSZWZpbmU6eXIsc3ltYm9sOmJhLHRlbXBsYXRlTGl0ZXJhbDpBYSx0cmFuc2Zvcm06eG4sdHVwbGU6Sm8sdWludDMyOmhhLHVpbnQ2NDp2YSx1bGlkOlZpLHVuZGVmaW5lZDpudCx1bmlvbjpJLHVua25vd246Wix1cmw6cWksdXVpZDpOaSx1dWlkdjQ6amksdXVpZHY2Ok1pLHV1aWR2NzpEaSx2b2lkOl9hLHhpZDpKaSx4b3I6U2F9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkscmY9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIHNmKGUpe0ooe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiBhZigpe3JldHVybiBKKCkuY3VzdG9tRXJyb3J9dmFyIG5vO25vfHwobm89e30pO2Z1bmN0aW9uIGNmKGUpe3JldHVybiBtaShkdCxlKX1mdW5jdGlvbiBCZyhlKXtyZXR1cm4gZ2kocHQsZSl9ZnVuY3Rpb24gVmcoZSl7cmV0dXJuIHZpKGZ0LGUpfWZ1bmN0aW9uIEpnKGUpe3JldHVybiBiaShodCxlKX1jb25zdCBIYT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpwdCxab2RJU09EYXRlVGltZTpkdCxab2RJU09EdXJhdGlvbjpodCxab2RJU09UaW1lOmZ0LGRhdGU6QmcsZGF0ZXRpbWU6Y2YsZHVyYXRpb246SmcsdGltZTpWZ30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx3PXsuLi5GZywuLi5VZyxpc286SGF9LEtnPW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIFdnKGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIEhjKGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIEdnKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gWWcoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpHZyhuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIFFnKGUsdCl7cmV0dXJuIHcudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBpIG9mIHMpe2NvbnN0IGE9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGkpO2Euc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6YS5lcnJvci5pc3N1ZXMsaW5wdXQ6aSxwYXRoOltpXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gSnIoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgYT1KcihpLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChhKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgaT1KcihlW3NdLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2l9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBYZz1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLGV2PW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiB4dChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZSh4dCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5YZy5oYXModCk/eHQobik6IWV2Lmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoeHQpKX1mdW5jdGlvbiBGYyhlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gdHYoZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7Y29uc3QgYT1KcihyW2ldLG5ldyBTZXQpO2lmKGE9PT1udWxsKWNvbnRpbnVlO2NvbnN0IGM9cy5nZXQoYSk7aWYoYz09PXZvaWQgMCl7cy5zZXQoYSxpKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7aX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7Y31gLGlucHV0OnIscGF0aDpbaV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGk9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBhPTA7Zm9yKGNvbnN0IGMgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZShjKS5zdWNjZXNzJiYrK2E+PWkpYnJlYWs7YTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7RmMocyl9OyBmb3VuZCAke2F9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmYT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtGYyh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiBCYyhlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP3cuYW55KCk6dGUoZSx0KX1jb25zdCBudj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIHVmKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiB3Lm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIHcubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPVlnKHIsdCksaT10ZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsaSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxpfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiB3Lm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIHcubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIHcuZW51bShyKTtjb25zdCBzPXIubWFwKGk9PncubGl0ZXJhbChpKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTp3LnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIHcubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBpPXsuLi5lLHR5cGU6c307cmV0dXJuIHVmKGksdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP3cubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTp3LnVuaW9uKHIpfWlmKCFuKXJldHVybiB3LmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPXcuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKHcuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayh3LnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayh3LnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayh3Lmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2sody5yZWdleChudikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayh3Lmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2sody5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayh3LmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2sody5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2sody5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2sody5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2sody5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayh3LmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKHcuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKHcuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2sody5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKHcuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKHcuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayh3LmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2sody5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2sody5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayh3LmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKHcudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKHcueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKHcua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP3cubnVtYmVyKCkuaW50KCk6dy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPXcuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289dy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxpPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGE9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP3RlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFtnLHBdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IGI9dGUocCx0KTtCZShyLGcsaS5oYXMoZyk/YjpiLm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IGc9ZS5wYXR0ZXJuUHJvcGVydGllcyxwPU9iamVjdC5rZXlzKGcpLGI9W107Zm9yKGNvbnN0IGsgb2YgcCl7Y29uc3QgJD10ZShnW2tdLHQpLGo9dy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKGspKTtiLnB1c2gody5sb29zZVJlY29yZChqLCQpKX1jb25zdCB5PVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ5LnB1c2gody5vYmplY3QocikucGFzc3Rocm91Z2goKSkseS5wdXNoKC4uLmIpLHkubGVuZ3RoPT09MClvPXcub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoeS5sZW5ndGg9PT0xKW89eVswXTtlbHNle2xldCBrPXcuaW50ZXJzZWN0aW9uKHlbMF0seVsxXSk7Zm9yKGxldCAkPTI7JDx5Lmxlbmd0aDskKyspaz13LmludGVyc2VjdGlvbihrLHlbJF0pO289a31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IGs9T2JqZWN0LmtleXMociksJD1wLm1hcChDPT5uZXcgUmVnRXhwKEMpKSxqPW87bz1vLmNoZWNrKEM9PntpZighUmUoQy52YWx1ZSkpcmV0dXJuO2NvbnN0IEY9W107Zm9yKGNvbnN0IG9lIG9mIE9iamVjdC5rZXlzKEMudmFsdWUpKWsuaW5jbHVkZXMob2UpfHwkLnNvbWUoQj0+Qi50ZXN0KG9lKSl8fEYucHVzaChvZSk7Ri5sZW5ndGgmJkMuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkYsaW5wdXQ6Qy52YWx1ZSxpbnN0Omp9KX0pfX1lbHNle2NvbnN0IGc9dy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289Zy5zdHJpY3QoKTphP289Zy5jYXRjaGFsbChhKTpvPWcucGFzc3Rocm91Z2goKX1jb25zdCBjPWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsdT10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGw9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZihjfHx1IT09dm9pZCAwfHxsIT09dm9pZCAwKXtsZXQgZztpZihjKXtjb25zdCBwPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lcztnPXRlKHAsdCl9bz1RZyhvLHtrZXlTY2hlbWE6ZyxtaW5Qcm9wZXJ0aWVzOnUsbWF4UHJvcGVydGllczpsfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgaT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGE9ci5tYXAoZz0+dGUoZyx0KSksYz1IYyhhLGkpLHU9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6QmMocyx0KSxsPXcudHVwbGUoYyk7bz11P2wucmVzdCh1KTpsLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgaT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGE9cy5tYXAoZz0+dGUoZyx0KSksYz1IYyhhLGkpLHU9QmMoZS5hZGRpdGlvbmFsSXRlbXMsdCksbD13LnR1cGxlKGMpO289dT9sLnJlc3QodSk6bCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2sody5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2sody5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGk9dGUocyx0KTtsZXQgYT13LmFycmF5KGkpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGE9YS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGE9YS5tYXgoZS5tYXhJdGVtcykpLG89YX1lbHNlIG89dy5hcnJheSh3LmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89dHYobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/dGUoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIHRlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT93LmFueSgpOncubmV2ZXIoKTtsZXQgbj11ZihlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgYT1lLmFueU9mLm1hcCh1PT50ZSh1LHQpKSxjPXcudW5pb24oYSk7bj1vP3cuaW50ZXJzZWN0aW9uKG4sYyk6Y31pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBhPWUub25lT2YubWFwKHU9PnRlKHUsdCkpLGM9dy54b3IoYSk7bj1vP3cuaW50ZXJzZWN0aW9uKG4sYyk6Y31pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjp3LmFueSgpO2Vsc2V7bGV0IGE9bz9uOnRlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgYz1vPzA6MTtmb3IobGV0IHU9Yzt1PGUuYWxsT2YubGVuZ3RoO3UrKylhPXcuaW50ZXJzZWN0aW9uKGEsdGUoZS5hbGxPZlt1XSx0KSk7bj1hfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49dy5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj13LnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBhIG9mIHMpYSBpbiBlJiYoclthXT1lW2FdKTtjb25zdCBpPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgYSBvZiBpKWEgaW4gZSYmKHJbYV09ZVthXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYheHQoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBhIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbYV0hPT12b2lkIDAmJihyW2FdPWVbYV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIXh0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgYSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9Zm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXMoZSkpS2cuaGFzKGEpfHxCZShyLGEsZVthXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gbGYoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP3cuYW55KCk6dy5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89V2cobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/P3BlfTtyZXR1cm4gdGUobixzKX1mdW5jdGlvbiBkZihlKXtyZXR1cm4geWkoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90Okkobi5vcHRpb25zKX19KX1mdW5jdGlvbiBvdihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBIKGUsZWUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gcGYoZSl7cmV0dXJuIG92KGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBydihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT9wZihlKTplLmlufWZ1bmN0aW9uIGZmKGUpe3JldHVybiB5aShlLHtwaXBlOnQ9PnJ2KHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/cSh0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gaGYoZSl7cmV0dXJuIHlpKGUse3BpcGU6dD0+cGYodC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHN2KGUpe3JldHVybiBtcChsdCxlKX1mdW5jdGlvbiBpdihlKXtyZXR1cm4geXAoZ3QsZSl9ZnVuY3Rpb24gYXYoZSl7cmV0dXJuIFBwKHZ0LGUpfWZ1bmN0aW9uIGN2KGUpe3JldHVybiB4cChidCxlKX1mdW5jdGlvbiB1dihlKXtyZXR1cm4gcXAoUG4sZSl9Y29uc3QgbWY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDpjdixib29sZWFuOmF2LGRhdGU6dXYsbnVtYmVyOml2LHN0cmluZzpzdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxWYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOnNzLCRpbnB1dDpxcywkb3V0cHV0OkRzLElOVkFMSUQ6VXMsTkVWRVI6cnMsVGltZVByZWNpc2lvbjpoaSxab2RBbnk6TW8sWm9kQXJyYXk6VW8sWm9kQmFzZTY0OnluLFpvZEJhc2U2NFVSTDp3bixab2RCaWdJbnQ6YnQsWm9kQmlnSW50Rm9ybWF0OiRuLFpvZEJvb2xlYW46dnQsWm9kQ0lEUnY0OmJuLFpvZENJRFJ2Njpfbixab2RDVUlEOmRuLFpvZENVSUQyOnBuLFpvZENhdGNoOmFyLFpvZENvZGVjOiR0LFpvZENvbXBpbGVBc3luY0Vycm9yOkhzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOkZzLFpvZENyZWRpdENhcmQ6T28sWm9kQ3VzdG9tOnp0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpaZSxab2REYXRlOlBuLFpvZERlZmF1bHQ6dHIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOkZvLFpvZEUxNjQ6a24sWm9kRW1haWw6YW4sWm9kRW1vamk6dW4sWm9kRW51bTpIZSxab2RFcnJvcjpvZixab2RFeGFjdE9wdGlvbmFsOkVuLFpvZEZpbGU6WW8sZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBub30sWm9kRnVuY3Rpb246dnIsWm9kR1VJRDpjbixab2RJQkFOOlpvLFpvZElQdjQ6Z24sWm9kSVB2Njp2bixab2RJU09EYXRlOnB0LFpvZElTT0RhdGVUaW1lOmR0LFpvZElTT0R1cmF0aW9uOmh0LFpvZElTT1RpbWU6ZnQsWm9kSW5zdGFuY2VPZjp3cixab2RJbnRlcnNlY3Rpb246Qm8sWm9kSXNzdWVDb2RlOnJmLFpvZEpXVDpTbixab2RLU1VJRDptbixab2RMYXp5OmhyLFpvZExpdGVyYWw6R28sWm9kTUFDOlJvLFpvZE1hcDpLbyxab2ROYU46dXIsWm9kTmFub0lEOmxuLFpvZE5ldmVyOnFvLFpvZE5vbk9wdGlvbmFsOkNuLFpvZE51bGw6am8sWm9kTnVsbGFibGU6ZXIsWm9kTnVtYmVyOmd0LFpvZE51bWJlckZvcm1hdDpBZSxab2RPYmplY3Q6X3QsWm9kT3B0aW9uYWw6a3QsWm9kUGlwZTpTdCxab2RQcmVmYXVsdDpvcixab2RQcmVwcm9jZXNzOmxyLFpvZFByb21pc2U6Z3IsWm9kUmVhZG9ubHk6ZHIsWm9kUmVhbEVycm9yOnNlLFpvZFJlY29yZDpVZSxab2RTZXQ6V28sWm9kU3RyaW5nOmx0LFpvZFN0cmluZ0Zvcm1hdDpOLFpvZFN1Y2Nlc3M6aXIsWm9kU3ltYm9sOkFvLFpvZFRlbXBsYXRlTGl0ZXJhbDpmcixab2RUcmFuc2Zvcm06UW8sWm9kVHVwbGU6Vm8sWm9kVHlwZTpQLFpvZFVMSUQ6Zm4sWm9kVVJMOm10LFpvZFVVSUQ6YmUsWm9kVW5kZWZpbmVkOk5vLFpvZFVuaW9uOnl0LFpvZFVua25vd246RG8sWm9kVm9pZDpMbyxab2RYSUQ6aG4sWm9kWG9yOkhvLF9ab2RTdHJpbmc6c24sX2RlZmF1bHQ6bnIsX2Z1bmN0aW9uOnJ0LGFueTpUbixhcnJheTpTLGJhc2U2NDplYSxiYXNlNjR1cmw6dGEsYmlnaW50Om1hLGJvb2xlYW46QSxjYXRjaDpjcixjaGVjazpqYSxjaWRydjQ6UWksY2lkcnY2OlhpLGNsb25lOkgsY29kZWM6T2EsY29lcmNlOm1mLGNvbXBpbGU6QnMsY29uZmlnOkosY29yZTplZixjcmVkaXRDYXJkOm9hLGN1aWQ6RmksY3VpZDI6QmksY3VycmVuY3lDb2RlOnVhLGN1c3RvbTpicixkYXRlOnlhLGRlY29kZTpQaSxkZWNvZGVBc3luYzp4aSxkZWVwUGFydGlhbDpkZixkZXNjcmliZTpNYSxkaXNjcmltaW5hdGVkVW5pb246SW4sZTE2NDpuYSxlbWFpbDpaaSxlbW9qaTpVaSxlbmNvZGU6VGksZW5jb2RlQXN5bmM6SWksZW5kc1dpdGg6WXQsZW51bTpHLGV4YWN0T3B0aW9uYWw6WG8sZmlsZTp4YSxmbGF0dGVuRXJyb3I6bW8sZmxvYXQzMjpkYSxmbG9hdDY0OnBhLGZvcm1hdEVycm9yOmdvLGZyb21KU09OU2NoZW1hOmxmLGZ1bmN0aW9uOnJ0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246UnMsZ2V0RXJyb3JNYXA6YWYsZ2xvYmFsUmVnaXN0cnk6cGUsZ3Q6UGUsZ3RlOmNlLGd1aWQ6QWksaGFzaDpsYSxoZXg6Y2EsaG9zdG5hbWU6YWEsaHR0cFVybDpMaSxpYmFuOnJhLGluY2x1ZGVzOld0LGlucHV0OmZmLGluc3RhbmNlb2Y6cWEsaW50OlJ0LGludDMyOmZhLGludDY0OmdhLGludGVyc2VjdGlvbjp3dCxpbnZlcnRDb2RlYzpaYSxpcHY0OldpLGlwdjY6WWksaXNvOkhhLGpzb246VWEsand0OnNhLGtleW9mOndhLGtzdWlkOktpLGxhenk6bXIsbGVuZ3RoOmN0LGxpdGVyYWw6aCxsb2NhbGVzOk1zLGxvb3NlT2JqZWN0OlcsbG9vc2VSZWNvcmQ6emEsbG93ZXJjYXNlOkp0LGx0OlRlLGx0ZTphZSxtYWM6R2ksbWFwOlRhLG1heExlbmd0aDphdCxtYXhTaXplOlZlLG1lbW9pemVyOlNvLG1ldGE6RGEsbWltZTpYdCxtaW5MZW5ndGg6T2UsbWluU2l6ZTpJZSxtdWx0aXBsZU9mOnFlLG5hbjpSYSxuYW5vaWQ6SGksbmF0aXZlRW51bTpJYSxuZWdhdGl2ZTpJbyxuZXZlcjpMZSxub25uZWdhdGl2ZTpFbyxub25vcHRpb25hbDpzcixub25wb3NpdGl2ZTp4byxub3JtYWxpemU6ZW4sbnVsbDp6bixudWxsYWJsZTpvdCxudWxsaXNoOkVhLG51bWJlcjpULG9iamVjdDp2LG9wdGlvbmFsOnEsb3V0cHV0OmhmLG92ZXJ3cml0ZTp3ZSxwYXJzZTpraSxwYXJzZUFzeW5jOlNpLHBhcnRpYWxSZWNvcmQ6JGEscGlwZTpPdCxwb3NpdGl2ZTpQbyxwcmVmYXVsdDpycixwcmVwcm9jZXNzOlJuLHByZXR0aWZ5RXJyb3I6YXMscHJvbWlzZTpOYSxwcm9wZXJ0aWVzOlF0LHByb3BlcnR5OkNvLHJlYWRvbmx5OnByLHJlY29yZDpFLHJlZmluZTpfcixyZWdleDpWdCxyZWdleGVzOndvLHJlZ2lzdHJ5OiRvLHNhZmVEZWNvZGU6Q2ksc2FmZURlY29kZUFzeW5jOk9pLHNhZmVFbmNvZGU6RWksc2FmZUVuY29kZUFzeW5jOlJpLHNhZmVQYXJzZTokaSxzYWZlUGFyc2VBc3luYzp6aSxzZXQ6UGEsc2V0RXJyb3JNYXA6c2Ysc2l6ZTppdCxzbHVnaWZ5OnJuLHN0YXJ0c1dpdGg6R3Qsc3RyaWN0T2JqZWN0OmthLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDppYSxzdHJpbmdib29sOkxhLHN1Y2Nlc3M6Q2Esc3VwZXJSZWZpbmU6eXIsc3ltYm9sOmJhLHRlbXBsYXRlTGl0ZXJhbDpBYSx0b0pTT05TY2hlbWE6X2ksdG9Mb3dlckNhc2U6bm4sdG9VcHBlckNhc2U6b24sdG9ab2Q6c28sdHJhbnNmb3JtOnhuLHRyZWVpZnlFcnJvcjppcyx0cmltOnRuLHR1cGxlOkpvLHVpbnQzMjpoYSx1aW50NjQ6dmEsdWxpZDpWaSx1bmRlZmluZWQ6bnQsdW5pb246SSx1bmtub3duOlosdXBwZXJjYXNlOkt0LHVybDpxaSx1dGlsOm9zLHV1aWQ6TmksdXVpZHY0OmppLHV1aWR2NjpNaSx1dWlkdjc6RGksdmFsaWRhdGU6Ym8sdmFsaWRhdGVBc3luYzpfbyx2b2lkOl9hLHdpdGhQYXJzZXI6VnMseGlkOkppLHhvcjpTYX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxsdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOnNzLCRpbnB1dDpxcywkb3V0cHV0OkRzLElOVkFMSUQ6VXMsTkVWRVI6cnMsVGltZVByZWNpc2lvbjpoaSxab2RBbnk6TW8sWm9kQXJyYXk6VW8sWm9kQmFzZTY0OnluLFpvZEJhc2U2NFVSTDp3bixab2RCaWdJbnQ6YnQsWm9kQmlnSW50Rm9ybWF0OiRuLFpvZEJvb2xlYW46dnQsWm9kQ0lEUnY0OmJuLFpvZENJRFJ2Njpfbixab2RDVUlEOmRuLFpvZENVSUQyOnBuLFpvZENhdGNoOmFyLFpvZENvZGVjOiR0LFpvZENvbXBpbGVBc3luY0Vycm9yOkhzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOkZzLFpvZENyZWRpdENhcmQ6T28sWm9kQ3VzdG9tOnp0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpaZSxab2REYXRlOlBuLFpvZERlZmF1bHQ6dHIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOkZvLFpvZEUxNjQ6a24sWm9kRW1haWw6YW4sWm9kRW1vamk6dW4sWm9kRW51bTpIZSxab2RFcnJvcjpvZixab2RFeGFjdE9wdGlvbmFsOkVuLFpvZEZpbGU6WW8sZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBub30sWm9kRnVuY3Rpb246dnIsWm9kR1VJRDpjbixab2RJQkFOOlpvLFpvZElQdjQ6Z24sWm9kSVB2Njp2bixab2RJU09EYXRlOnB0LFpvZElTT0RhdGVUaW1lOmR0LFpvZElTT0R1cmF0aW9uOmh0LFpvZElTT1RpbWU6ZnQsWm9kSW5zdGFuY2VPZjp3cixab2RJbnRlcnNlY3Rpb246Qm8sWm9kSXNzdWVDb2RlOnJmLFpvZEpXVDpTbixab2RLU1VJRDptbixab2RMYXp5OmhyLFpvZExpdGVyYWw6R28sWm9kTUFDOlJvLFpvZE1hcDpLbyxab2ROYU46dXIsWm9kTmFub0lEOmxuLFpvZE5ldmVyOnFvLFpvZE5vbk9wdGlvbmFsOkNuLFpvZE51bGw6am8sWm9kTnVsbGFibGU6ZXIsWm9kTnVtYmVyOmd0LFpvZE51bWJlckZvcm1hdDpBZSxab2RPYmplY3Q6X3QsWm9kT3B0aW9uYWw6a3QsWm9kUGlwZTpTdCxab2RQcmVmYXVsdDpvcixab2RQcmVwcm9jZXNzOmxyLFpvZFByb21pc2U6Z3IsWm9kUmVhZG9ubHk6ZHIsWm9kUmVhbEVycm9yOnNlLFpvZFJlY29yZDpVZSxab2RTZXQ6V28sWm9kU3RyaW5nOmx0LFpvZFN0cmluZ0Zvcm1hdDpOLFpvZFN1Y2Nlc3M6aXIsWm9kU3ltYm9sOkFvLFpvZFRlbXBsYXRlTGl0ZXJhbDpmcixab2RUcmFuc2Zvcm06UW8sWm9kVHVwbGU6Vm8sWm9kVHlwZTpQLFpvZFVMSUQ6Zm4sWm9kVVJMOm10LFpvZFVVSUQ6YmUsWm9kVW5kZWZpbmVkOk5vLFpvZFVuaW9uOnl0LFpvZFVua25vd246RG8sWm9kVm9pZDpMbyxab2RYSUQ6aG4sWm9kWG9yOkhvLF9ab2RTdHJpbmc6c24sX2RlZmF1bHQ6bnIsX2Z1bmN0aW9uOnJ0LGFueTpUbixhcnJheTpTLGJhc2U2NDplYSxiYXNlNjR1cmw6dGEsYmlnaW50Om1hLGJvb2xlYW46QSxjYXRjaDpjcixjaGVjazpqYSxjaWRydjQ6UWksY2lkcnY2OlhpLGNsb25lOkgsY29kZWM6T2EsY29lcmNlOm1mLGNvbXBpbGU6QnMsY29uZmlnOkosY29yZTplZixjcmVkaXRDYXJkOm9hLGN1aWQ6RmksY3VpZDI6QmksY3VycmVuY3lDb2RlOnVhLGN1c3RvbTpicixkYXRlOnlhLGRlY29kZTpQaSxkZWNvZGVBc3luYzp4aSxkZWVwUGFydGlhbDpkZixkZWZhdWx0OlZjLGRlc2NyaWJlOk1hLGRpc2NyaW1pbmF0ZWRVbmlvbjpJbixlMTY0Om5hLGVtYWlsOlppLGVtb2ppOlVpLGVuY29kZTpUaSxlbmNvZGVBc3luYzpJaSxlbmRzV2l0aDpZdCxlbnVtOkcsZXhhY3RPcHRpb25hbDpYbyxmaWxlOnhhLGZsYXR0ZW5FcnJvcjptbyxmbG9hdDMyOmRhLGZsb2F0NjQ6cGEsZm9ybWF0RXJyb3I6Z28sZnJvbUpTT05TY2hlbWE6bGYsZnVuY3Rpb246cnQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpScyxnZXRFcnJvck1hcDphZixnbG9iYWxSZWdpc3RyeTpwZSxndDpQZSxndGU6Y2UsZ3VpZDpBaSxoYXNoOmxhLGhleDpjYSxob3N0bmFtZTphYSxodHRwVXJsOkxpLGliYW46cmEsaW5jbHVkZXM6V3QsaW5wdXQ6ZmYsaW5zdGFuY2VvZjpxYSxpbnQ6UnQsaW50MzI6ZmEsaW50NjQ6Z2EsaW50ZXJzZWN0aW9uOnd0LGludmVydENvZGVjOlphLGlwdjQ6V2ksaXB2NjpZaSxpc286SGEsanNvbjpVYSxqd3Q6c2Esa2V5b2Y6d2Esa3N1aWQ6S2ksbGF6eTptcixsZW5ndGg6Y3QsbGl0ZXJhbDpoLGxvY2FsZXM6TXMsbG9vc2VPYmplY3Q6Vyxsb29zZVJlY29yZDp6YSxsb3dlcmNhc2U6SnQsbHQ6VGUsbHRlOmFlLG1hYzpHaSxtYXA6VGEsbWF4TGVuZ3RoOmF0LG1heFNpemU6VmUsbWVtb2l6ZXI6U28sbWV0YTpEYSxtaW1lOlh0LG1pbkxlbmd0aDpPZSxtaW5TaXplOkllLG11bHRpcGxlT2Y6cWUsbmFuOlJhLG5hbm9pZDpIaSxuYXRpdmVFbnVtOklhLG5lZ2F0aXZlOklvLG5ldmVyOkxlLG5vbm5lZ2F0aXZlOkVvLG5vbm9wdGlvbmFsOnNyLG5vbnBvc2l0aXZlOnhvLG5vcm1hbGl6ZTplbixudWxsOnpuLG51bGxhYmxlOm90LG51bGxpc2g6RWEsbnVtYmVyOlQsb2JqZWN0OnYsb3B0aW9uYWw6cSxvdXRwdXQ6aGYsb3ZlcndyaXRlOndlLHBhcnNlOmtpLHBhcnNlQXN5bmM6U2kscGFydGlhbFJlY29yZDokYSxwaXBlOk90LHBvc2l0aXZlOlBvLHByZWZhdWx0OnJyLHByZXByb2Nlc3M6Um4scHJldHRpZnlFcnJvcjphcyxwcm9taXNlOk5hLHByb3BlcnRpZXM6UXQscHJvcGVydHk6Q28scmVhZG9ubHk6cHIscmVjb3JkOkUscmVmaW5lOl9yLHJlZ2V4OlZ0LHJlZ2V4ZXM6d28scmVnaXN0cnk6JG8sc2FmZURlY29kZTpDaSxzYWZlRGVjb2RlQXN5bmM6T2ksc2FmZUVuY29kZTpFaSxzYWZlRW5jb2RlQXN5bmM6Umksc2FmZVBhcnNlOiRpLHNhZmVQYXJzZUFzeW5jOnppLHNldDpQYSxzZXRFcnJvck1hcDpzZixzaXplOml0LHNsdWdpZnk6cm4sc3RhcnRzV2l0aDpHdCxzdHJpY3RPYmplY3Q6a2Esc3RyaW5nOmYsc3RyaW5nRm9ybWF0OmlhLHN0cmluZ2Jvb2w6TGEsc3VjY2VzczpDYSxzdXBlclJlZmluZTp5cixzeW1ib2w6YmEsdGVtcGxhdGVMaXRlcmFsOkFhLHRvSlNPTlNjaGVtYTpfaSx0b0xvd2VyQ2FzZTpubix0b1VwcGVyQ2FzZTpvbix0b1pvZDpzbyx0cmFuc2Zvcm06eG4sdHJlZWlmeUVycm9yOmlzLHRyaW06dG4sdHVwbGU6Sm8sdWludDMyOmhhLHVpbnQ2NDp2YSx1bGlkOlZpLHVuZGVmaW5lZDpudCx1bmlvbjpJLHVua25vd246Wix1cHBlcmNhc2U6S3QsdXJsOnFpLHV0aWw6b3MsdXVpZDpOaSx1dWlkdjQ6amksdXVpZHY2Ok1pLHV1aWR2NzpEaSx2YWxpZGF0ZTpibyx2YWxpZGF0ZUFzeW5jOl9vLHZvaWQ6X2Esd2l0aFBhcnNlcjpWcyx4aWQ6SmkseG9yOlNhLHo6VmN9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksamU9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsa3I9IjIuMCIsVj1icihlPT5lIT09bnVsbCYmKHR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpKSxnZj1JKFtmKCksVCgpLmludCgpXSksdmY9ZigpO1coe3R0bDpUKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6VCgpLm9wdGlvbmFsKCl9KTtjb25zdCBkdj12KHt0dGw6VCgpLm9wdGlvbmFsKCl9KSxwdj12KHt0YXNrSWQ6ZigpfSksRmE9Vyh7cHJvZ3Jlc3NUb2tlbjpnZi5vcHRpb25hbCgpLFtqZV06cHYub3B0aW9uYWwoKX0pLGxlPXYoe19tZXRhOkZhLm9wdGlvbmFsKCl9KSxPbj1sZS5leHRlbmQoe3Rhc2s6ZHYub3B0aW9uYWwoKX0pLGZ2PWU9Pk9uLnNhZmVQYXJzZShlKS5zdWNjZXNzLFk9dih7bWV0aG9kOmYoKSxwYXJhbXM6bGUubG9vc2UoKS5vcHRpb25hbCgpfSksZ2U9dih7X21ldGE6RmEub3B0aW9uYWwoKX0pLHZlPXYoe21ldGhvZDpmKCkscGFyYW1zOmdlLmxvb3NlKCkub3B0aW9uYWwoKX0pLFE9Vyh7X21ldGE6RmEub3B0aW9uYWwoKX0pLFpuPUkoW2YoKSxUKCkuaW50KCldKSxiZj12KHtqc29ucnBjOmgoa3IpLGlkOlpuLC4uLlkuc2hhcGV9KS5zdHJpY3QoKSxKYz1lPT5iZi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxfZj12KHtqc29ucnBjOmgoa3IpLC4uLnZlLnNoYXBlfSkuc3RyaWN0KCksaHY9ZT0+X2Yuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsQmE9dih7anNvbnJwYzpoKGtyKSxpZDpabixyZXN1bHQ6UX0pLnN0cmljdCgpLEpuPWU9PkJhLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBNOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoTXx8KE09e30pKTtjb25zdCBWYT12KHtqc29ucnBjOmgoa3IpLGlkOlpuLm9wdGlvbmFsKCksZXJyb3I6dih7Y29kZTpUKCkuaW50KCksbWVzc2FnZTpmKCksZGF0YTpaKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksbXY9ZT0+VmEuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsZ3Y9SShbYmYsX2YsQmEsVmFdKTtJKFtCYSxWYV0pO2NvbnN0IEphPVEuc3RyaWN0KCksdnY9Z2UuZXh0ZW5kKHtyZXF1ZXN0SWQ6Wm4ub3B0aW9uYWwoKSxyZWFzb246ZigpLm9wdGlvbmFsKCl9KSxLYT12ZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczp2dn0pLGJ2PXYoe3NyYzpmKCksbWltZVR5cGU6ZigpLm9wdGlvbmFsKCksc2l6ZXM6UyhmKCkpLm9wdGlvbmFsKCksdGhlbWU6RyhbImxpZ2h0IiwiZGFyayJdKS5vcHRpb25hbCgpfSksQW49dih7aWNvbnM6Uyhidikub3B0aW9uYWwoKX0pLHN0PXYoe25hbWU6ZigpLHRpdGxlOmYoKS5vcHRpb25hbCgpfSksU3I9c3QuZXh0ZW5kKHsuLi5zdC5zaGFwZSwuLi5Bbi5zaGFwZSx2ZXJzaW9uOmYoKSx3ZWJzaXRlVXJsOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpfSksX3Y9d3Qodih7YXBwbHlEZWZhdWx0czpBKCkub3B0aW9uYWwoKX0pLEUoZigpLFooKSkpLHl2PVJuKGU9PmUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSkmJk9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTA/e2Zvcm06e319OmUsd3Qodih7Zm9ybTpfdi5vcHRpb25hbCgpLHVybDpWLm9wdGlvbmFsKCl9KSxFKGYoKSxaKCkpLm9wdGlvbmFsKCkpKSx3dj1XKHtsaXN0OlYub3B0aW9uYWwoKSxjYW5jZWw6Vi5vcHRpb25hbCgpLHJlcXVlc3RzOlcoe3NhbXBsaW5nOlcoe2NyZWF0ZU1lc3NhZ2U6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpXKHtjcmVhdGU6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxrdj1XKHtsaXN0OlYub3B0aW9uYWwoKSxjYW5jZWw6Vi5vcHRpb25hbCgpLHJlcXVlc3RzOlcoe3Rvb2xzOlcoe2NhbGw6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxTdj12KHtleHBlcmltZW50YWw6RShmKCksVikub3B0aW9uYWwoKSxzYW1wbGluZzp2KHtjb250ZXh0OlYub3B0aW9uYWwoKSx0b29sczpWLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOnl2Lm9wdGlvbmFsKCkscm9vdHM6dih7bGlzdENoYW5nZWQ6QSgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOnd2Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpFKGYoKSxWKS5vcHRpb25hbCgpfSksJHY9bGUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246ZigpLGNhcGFiaWxpdGllczpTdixjbGllbnRJbmZvOlNyfSksenY9WS5leHRlbmQoe21ldGhvZDpoKCJpbml0aWFsaXplIikscGFyYW1zOiR2fSksVHY9dih7ZXhwZXJpbWVudGFsOkUoZigpLFYpLm9wdGlvbmFsKCksbG9nZ2luZzpWLm9wdGlvbmFsKCksY29tcGxldGlvbnM6Vi5vcHRpb25hbCgpLHByb21wdHM6dih7bGlzdENoYW5nZWQ6QSgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczp2KHtzdWJzY3JpYmU6QSgpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6QSgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczprdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6RShmKCksVikub3B0aW9uYWwoKX0pLFB2PVEuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246ZigpLGNhcGFiaWxpdGllczpUdixzZXJ2ZXJJbmZvOlNyLGluc3RydWN0aW9uczpmKCkub3B0aW9uYWwoKX0pLEl2PXZlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6Z2Uub3B0aW9uYWwoKX0pLCRyPVkuZXh0ZW5kKHttZXRob2Q6aCgicGluZyIpLHBhcmFtczpsZS5vcHRpb25hbCgpfSkseHY9dih7cHJvZ3Jlc3M6VCgpLHRvdGFsOnEoVCgpKSxtZXNzYWdlOnEoZigpKX0pLEV2PXYoey4uLmdlLnNoYXBlLC4uLnh2LnNoYXBlLHByb2dyZXNzVG9rZW46Z2Z9KSxXYT12ZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOkV2fSksQ3Y9bGUuZXh0ZW5kKHtjdXJzb3I6dmYub3B0aW9uYWwoKX0pLE5uPVkuZXh0ZW5kKHtwYXJhbXM6Q3Yub3B0aW9uYWwoKX0pLGpuPVEuZXh0ZW5kKHtuZXh0Q3Vyc29yOnZmLm9wdGlvbmFsKCl9KSxSdj1HKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLE1uPXYoe3Rhc2tJZDpmKCksc3RhdHVzOlJ2LHR0bDpJKFtUKCksem4oKV0pLGNyZWF0ZWRBdDpmKCksbGFzdFVwZGF0ZWRBdDpmKCkscG9sbEludGVydmFsOnEoVCgpKSxzdGF0dXNNZXNzYWdlOnEoZigpKX0pLEdhPVEuZXh0ZW5kKHt0YXNrOk1ufSksT3Y9Z2UubWVyZ2UoTW4pLG9vPXZlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIikscGFyYW1zOk92fSksWWE9WS5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9nZXQiKSxwYXJhbXM6bGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KSxRYT1RLm1lcmdlKE1uKSxYYT1ZLmV4dGVuZCh7bWV0aG9kOmgoInRhc2tzL3Jlc3VsdCIpLHBhcmFtczpsZS5leHRlbmQoe3Rhc2tJZDpmKCl9KX0pO1EubG9vc2UoKTtjb25zdCBlYz1Obi5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9saXN0Iil9KSx0Yz1qbi5leHRlbmQoe3Rhc2tzOlMoTW4pfSksbmM9WS5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6bGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KSxadj1RLm1lcmdlKE1uKSx5Zj12KHt1cmk6ZigpLG1pbWVUeXBlOnEoZigpKSxfbWV0YTpFKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSx3Zj15Zi5leHRlbmQoe3RleHQ6ZigpfSksb2M9ZigpLnJlZmluZShlPT57dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX0se21lc3NhZ2U6IkludmFsaWQgQmFzZTY0IHN0cmluZyJ9KSxrZj15Zi5leHRlbmQoe2Jsb2I6b2N9KSxEbj1HKFsidXNlciIsImFzc2lzdGFudCJdKSxUdD12KHthdWRpZW5jZTpTKERuKS5vcHRpb25hbCgpLHByaW9yaXR5OlQoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksbGFzdE1vZGlmaWVkOmNmKHtvZmZzZXQ6ITB9KS5vcHRpb25hbCgpfSksU2Y9dih7Li4uc3Quc2hhcGUsLi4uQW4uc2hhcGUsdXJpOmYoKSxkZXNjcmlwdGlvbjpxKGYoKSksbWltZVR5cGU6cShmKCkpLHNpemU6cShUKCkpLGFubm90YXRpb25zOlR0Lm9wdGlvbmFsKCksX21ldGE6cShXKHt9KSl9KSxBdj12KHsuLi5zdC5zaGFwZSwuLi5Bbi5zaGFwZSx1cmlUZW1wbGF0ZTpmKCksZGVzY3JpcHRpb246cShmKCkpLG1pbWVUeXBlOnEoZigpKSxhbm5vdGF0aW9uczpUdC5vcHRpb25hbCgpLF9tZXRhOnEoVyh7fSkpfSksTnY9Tm4uZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL2xpc3QiKX0pLCRmPWpuLmV4dGVuZCh7cmVzb3VyY2VzOlMoU2YpfSksanY9Tm4uZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL3RlbXBsYXRlcy9saXN0Iil9KSxNdj1qbi5leHRlbmQoe3Jlc291cmNlVGVtcGxhdGVzOlMoQXYpfSkscmM9bGUuZXh0ZW5kKHt1cmk6ZigpfSksRHY9cmMscXY9WS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvcmVhZCIpLHBhcmFtczpEdn0pLHpmPVEuZXh0ZW5kKHtjb250ZW50czpTKEkoW3dmLGtmXSkpfSksTHY9dmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOmdlLm9wdGlvbmFsKCl9KSxVdj1yYyxIdj1ZLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy9zdWJzY3JpYmUiKSxwYXJhbXM6VXZ9KSxGdj1yYyxCdj1ZLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy91bnN1YnNjcmliZSIpLHBhcmFtczpGdn0pLFZ2PWdlLmV4dGVuZCh7dXJpOmYoKX0pLEp2PXZlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWQiKSxwYXJhbXM6VnZ9KSxLdj12KHtuYW1lOmYoKSxkZXNjcmlwdGlvbjpxKGYoKSkscmVxdWlyZWQ6cShBKCkpfSksV3Y9dih7Li4uc3Quc2hhcGUsLi4uQW4uc2hhcGUsZGVzY3JpcHRpb246cShmKCkpLGFyZ3VtZW50czpxKFMoS3YpKSxfbWV0YTpxKFcoe30pKX0pLEd2PU5uLmV4dGVuZCh7bWV0aG9kOmgoInByb21wdHMvbGlzdCIpfSksWXY9am4uZXh0ZW5kKHtwcm9tcHRzOlMoV3YpfSksUXY9bGUuZXh0ZW5kKHtuYW1lOmYoKSxhcmd1bWVudHM6RShmKCksZigpKS5vcHRpb25hbCgpfSksWHY9WS5leHRlbmQoe21ldGhvZDpoKCJwcm9tcHRzL2dldCIpLHBhcmFtczpRdn0pLHNjPXYoe3R5cGU6aCgidGV4dCIpLHRleHQ6ZigpLGFubm90YXRpb25zOlR0Lm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksaWM9dih7dHlwZTpoKCJpbWFnZSIpLGRhdGE6b2MsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOlR0Lm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksYWM9dih7dHlwZTpoKCJhdWRpbyIpLGRhdGE6b2MsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOlR0Lm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksZWI9dih7dHlwZTpoKCJ0b29sX3VzZSIpLG5hbWU6ZigpLGlkOmYoKSxpbnB1dDpFKGYoKSxaKCkpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLFRmPXYoe3R5cGU6aCgicmVzb3VyY2UiKSxyZXNvdXJjZTpJKFt3ZixrZl0pLGFubm90YXRpb25zOlR0Lm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksUGY9U2YuZXh0ZW5kKHt0eXBlOmgoInJlc291cmNlX2xpbmsiKX0pLHFuPUkoW3NjLGljLGFjLFBmLFRmXSksdGI9dih7cm9sZTpEbixjb250ZW50OnFufSksbmI9US5leHRlbmQoe2Rlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1lc3NhZ2VzOlModGIpfSksb2I9dmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9wcm9tcHRzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpnZS5vcHRpb25hbCgpfSkscmI9dih7dGl0bGU6ZigpLm9wdGlvbmFsKCkscmVhZE9ubHlIaW50OkEoKS5vcHRpb25hbCgpLGRlc3RydWN0aXZlSGludDpBKCkub3B0aW9uYWwoKSxpZGVtcG90ZW50SGludDpBKCkub3B0aW9uYWwoKSxvcGVuV29ybGRIaW50OkEoKS5vcHRpb25hbCgpfSksc2I9dih7dGFza1N1cHBvcnQ6RyhbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLGNjPXYoey4uLnN0LnNoYXBlLC4uLkFuLnNoYXBlLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOnYoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpFKGYoKSxWKS5vcHRpb25hbCgpLHJlcXVpcmVkOlMoZigpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKSxvdXRwdXRTY2hlbWE6dih7dHlwZTpoKCJvYmplY3QiKSxwcm9wZXJ0aWVzOkUoZigpLFYpLm9wdGlvbmFsKCkscmVxdWlyZWQ6UyhmKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChaKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6cmIub3B0aW9uYWwoKSxleGVjdXRpb246c2Iub3B0aW9uYWwoKSxfbWV0YTpFKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxJZj1Obi5leHRlbmQoe21ldGhvZDpoKCJ0b29scy9saXN0Iil9KSxpYj1qbi5leHRlbmQoe3Rvb2xzOlMoY2MpfSksenI9US5leHRlbmQoe2NvbnRlbnQ6UyhxbikuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6RShmKCksWigpKS5vcHRpb25hbCgpLGlzRXJyb3I6QSgpLm9wdGlvbmFsKCl9KTt6ci5vcihRLmV4dGVuZCh7dG9vbFJlc3VsdDpaKCl9KSk7Y29uc3QgYWI9T24uZXh0ZW5kKHtuYW1lOmYoKSxhcmd1bWVudHM6RShmKCksWigpKS5vcHRpb25hbCgpfSkseGY9WS5leHRlbmQoe21ldGhvZDpoKCJ0b29scy9jYWxsIikscGFyYW1zOmFifSksY2I9dmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6Z2Uub3B0aW9uYWwoKX0pO3Yoe2F1dG9SZWZyZXNoOkEoKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOlQoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IEVmPUcoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLHViPWxlLmV4dGVuZCh7bGV2ZWw6RWZ9KSxsYj1ZLmV4dGVuZCh7bWV0aG9kOmgoImxvZ2dpbmcvc2V0TGV2ZWwiKSxwYXJhbXM6dWJ9KSxkYj1nZS5leHRlbmQoe2xldmVsOkVmLGxvZ2dlcjpmKCkub3B0aW9uYWwoKSxkYXRhOlooKX0pLHBiPXZlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvbWVzc2FnZSIpLHBhcmFtczpkYn0pLGZiPXYoe25hbWU6ZigpLm9wdGlvbmFsKCl9KSxoYj12KHtoaW50czpTKGZiKS5vcHRpb25hbCgpLGNvc3RQcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLHNwZWVkUHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxpbnRlbGxpZ2VuY2VQcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpfSksbWI9dih7bW9kZTpHKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksZ2I9dih7dHlwZTpoKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpmKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6UyhxbikuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6dih7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6QSgpLm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksdmI9SW4oInR5cGUiLFtzYyxpYyxhY10pLHJvPUluKCJ0eXBlIixbc2MsaWMsYWMsZWIsZ2JdKSxiYj12KHtyb2xlOkRuLGNvbnRlbnQ6SShbcm8sUyhybyldKSxfbWV0YTpFKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxfYj1Pbi5leHRlbmQoe21lc3NhZ2VzOlMoYmIpLG1vZGVsUHJlZmVyZW5jZXM6aGIub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6ZigpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6RyhbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOlQoKS5vcHRpb25hbCgpLG1heFRva2VuczpUKCkuaW50KCksc3RvcFNlcXVlbmNlczpTKGYoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTpWLm9wdGlvbmFsKCksdG9vbHM6UyhjYykub3B0aW9uYWwoKSx0b29sQ2hvaWNlOm1iLm9wdGlvbmFsKCl9KSx5Yj1ZLmV4dGVuZCh7bWV0aG9kOmgoInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6X2J9KSxDZj1RLmV4dGVuZCh7bW9kZWw6ZigpLHN0b3BSZWFzb246cShHKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyJdKS5vcihmKCkpKSxyb2xlOkRuLGNvbnRlbnQ6dmJ9KSxSZj1RLmV4dGVuZCh7bW9kZWw6ZigpLHN0b3BSZWFzb246cShHKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoZigpKSkscm9sZTpEbixjb250ZW50OkkoW3JvLFMocm8pXSl9KSx3Yj12KHt0eXBlOmgoImJvb2xlYW4iKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxkZWZhdWx0OkEoKS5vcHRpb25hbCgpfSksa2I9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6VCgpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOlQoKS5vcHRpb25hbCgpLGZvcm1hdDpHKFsiZW1haWwiLCJ1cmkiLCJkYXRlIiwiZGF0ZS10aW1lIl0pLm9wdGlvbmFsKCksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLFNiPXYoe3R5cGU6RyhbIm51bWJlciIsImludGVnZXIiXSksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluaW11bTpUKCkub3B0aW9uYWwoKSxtYXhpbXVtOlQoKS5vcHRpb25hbCgpLGRlZmF1bHQ6VCgpLm9wdGlvbmFsKCl9KSwkYj12KHt0eXBlOmgoInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGVudW06UyhmKCkpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSx6Yj12KHt0eXBlOmgoInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG9uZU9mOlModih7Y29uc3Q6ZigpLHRpdGxlOmYoKX0pKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksVGI9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxlbnVtOlMoZigpKSxlbnVtTmFtZXM6UyhmKCkpLm9wdGlvbmFsKCksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLFBiPUkoWyRiLHpiXSksSWI9dih7dHlwZTpoKCJhcnJheSIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOlQoKS5vcHRpb25hbCgpLG1heEl0ZW1zOlQoKS5vcHRpb25hbCgpLGl0ZW1zOnYoe3R5cGU6aCgic3RyaW5nIiksZW51bTpTKGYoKSl9KSxkZWZhdWx0OlMoZigpKS5vcHRpb25hbCgpfSkseGI9dih7dHlwZTpoKCJhcnJheSIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOlQoKS5vcHRpb25hbCgpLG1heEl0ZW1zOlQoKS5vcHRpb25hbCgpLGl0ZW1zOnYoe2FueU9mOlModih7Y29uc3Q6ZigpLHRpdGxlOmYoKX0pKX0pLGRlZmF1bHQ6UyhmKCkpLm9wdGlvbmFsKCl9KSxFYj1JKFtJYix4Yl0pLENiPUkoW1RiLFBiLEViXSksUmI9SShbQ2Isd2Isa2IsU2JdKSxPYj1Pbi5leHRlbmQoe21vZGU6aCgiZm9ybSIpLm9wdGlvbmFsKCksbWVzc2FnZTpmKCkscmVxdWVzdGVkU2NoZW1hOnYoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpFKGYoKSxSYikscmVxdWlyZWQ6UyhmKCkpLm9wdGlvbmFsKCl9KX0pLFpiPU9uLmV4dGVuZCh7bW9kZTpoKCJ1cmwiKSxtZXNzYWdlOmYoKSxlbGljaXRhdGlvbklkOmYoKSx1cmw6ZigpLnVybCgpfSksQWI9SShbT2IsWmJdKSxOYj1ZLmV4dGVuZCh7bWV0aG9kOmgoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpBYn0pLGpiPWdlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpmKCl9KSxNYj12ZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOmpifSksRGI9US5leHRlbmQoe2FjdGlvbjpHKFsiYWNjZXB0IiwiZGVjbGluZSIsImNhbmNlbCJdKSxjb250ZW50OlJuKGU9PmU9PT1udWxsP3ZvaWQgMDplLEUoZigpLEkoW2YoKSxUKCksQSgpLFMoZigpKV0pKS5vcHRpb25hbCgpKX0pLHFiPXYoe3R5cGU6aCgicmVmL3Jlc291cmNlIiksdXJpOmYoKX0pLExiPXYoe3R5cGU6aCgicmVmL3Byb21wdCIpLG5hbWU6ZigpfSksVWI9bGUuZXh0ZW5kKHtyZWY6SShbTGIscWJdKSxhcmd1bWVudDp2KHtuYW1lOmYoKSx2YWx1ZTpmKCl9KSxjb250ZXh0OnYoe2FyZ3VtZW50czpFKGYoKSxmKCkpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksSGI9WS5leHRlbmQoe21ldGhvZDpoKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOlVifSksRmI9US5leHRlbmQoe2NvbXBsZXRpb246Vyh7dmFsdWVzOlMoZigpKS5tYXgoMTAwKSx0b3RhbDpxKFQoKS5pbnQoKSksaGFzTW9yZTpxKEEoKSl9KX0pLEJiPXYoe3VyaTpmKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6ZigpLm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksVmI9WS5leHRlbmQoe21ldGhvZDpoKCJyb290cy9saXN0IikscGFyYW1zOmxlLm9wdGlvbmFsKCl9KSxKYj1RLmV4dGVuZCh7cm9vdHM6UyhCYil9KSxLYj12ZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Jvb3RzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpnZS5vcHRpb25hbCgpfSk7SShbJHIsenYsSGIsbGIsWHYsR3YsTnYsanYscXYsSHYsQnYseGYsSWYsWWEsWGEsZWMsbmNdKTtJKFtLYSxXYSxJdixLYixvb10pO0koW0phLENmLFJmLERiLEpiLFFhLHRjLEdhXSk7SShbJHIseWIsTmIsVmIsWWEsWGEsZWMsbmNdKTtJKFtLYSxXYSxwYixKdixMdixjYixvYixvbyxNYl0pO0koW0phLFB2LEZiLG5iLFl2LCRmLE12LHpmLHpyLGliLFFhLHRjLEdhXSk7Y2xhc3MgUiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbixvKXtzdXBlcihgTUNQIGVycm9yICR7dH06ICR7bn1gKSx0aGlzLmNvZGU9dCx0aGlzLmRhdGE9byx0aGlzLm5hbWU9Ik1jcEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQsbixvKXtpZih0PT09TS5VcmxFbGljaXRhdGlvblJlcXVpcmVkJiZvKXtjb25zdCByPW87aWYoci5lbGljaXRhdGlvbnMpcmV0dXJuIG5ldyBXYihyLmVsaWNpdGF0aW9ucyxuKX1yZXR1cm4gbmV3IFIodCxuLG8pfX1jbGFzcyBXYiBleHRlbmRzIFJ7Y29uc3RydWN0b3IodCxuPWBVUkwgZWxpY2l0YXRpb24ke3QubGVuZ3RoPjE/InMiOiIifSByZXF1aXJlZGApe3N1cGVyKE0uVXJsRWxpY2l0YXRpb25SZXF1aXJlZCxuLHtlbGljaXRhdGlvbnM6dH0pfWdldCBlbGljaXRhdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRhPy5lbGljaXRhdGlvbnM/P1tdfX1mdW5jdGlvbiBOZShlKXtyZXR1cm4gZT09PSJjb21wbGV0ZWQifHxlPT09ImZhaWxlZCJ8fGU9PT0iY2FuY2VsbGVkIn1uZXcgU2V0KCJBQkNERUZHSElKS0xNTk9QUVJTVFVWWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnh5ejAxMjM0NTY3ODkiKTtmdW5jdGlvbiBLYyhlKXtjb25zdCBuPXFnKGUpPy5tZXRob2Q7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgaXMgbWlzc2luZyBhIG1ldGhvZCBsaXRlcmFsIik7Y29uc3Qgbz1MZyhuKTtpZih0eXBlb2YgbyE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgbWV0aG9kIGxpdGVyYWwgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBvfWZ1bmN0aW9uIFdjKGUsdCl7Y29uc3Qgbj10ZihlLHQpO2lmKCFuLnN1Y2Nlc3MpdGhyb3cgbi5lcnJvcjtyZXR1cm4gbi5kYXRhfWNvbnN0IEdiPTZlNDtjbGFzcyBZYntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9vcHRpb25zPXQsdGhpcy5fcmVxdWVzdE1lc3NhZ2VJZD0wLHRoaXMuX3JlcXVlc3RIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycz1uZXcgTWFwLHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl90aW1lb3V0SW5mbz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zPW5ldyBTZXQsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zPW5ldyBNYXAsdGhpcy5fcmVxdWVzdFJlc29sdmVycz1uZXcgTWFwLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihLYSxuPT57dGhpcy5fb25jYW5jZWwobil9KSx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoV2Esbj0+e3RoaXMuX29ucHJvZ3Jlc3Mobil9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKCRyLG49Pih7fSkpLHRoaXMuX3Rhc2tTdG9yZT10Py50YXNrU3RvcmUsdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT10Py50YXNrTWVzc2FnZVF1ZXVlLHRoaXMuX3Rhc2tTdG9yZSYmKHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoWWEsYXN5bmMobixvKT0+e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybnsuLi5yfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoWGEsYXN5bmMobixvKT0+e2NvbnN0IHI9YXN5bmMoKT0+e2NvbnN0IHM9bi5wYXJhbXMudGFza0lkO2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2xldCBhO2Zvcig7YT1hd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmRlcXVldWUocyxvLnNlc3Npb25JZCk7KXtpZihhLnR5cGU9PT0icmVzcG9uc2UifHxhLnR5cGU9PT0iZXJyb3IiKXtjb25zdCBjPWEubWVzc2FnZSx1PWMuaWQsbD10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldCh1KTtpZihsKWlmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKHUpLGEudHlwZT09PSJyZXNwb25zZSIpbChjKTtlbHNle2NvbnN0IGc9YyxwPW5ldyBSKGcuZXJyb3IuY29kZSxnLmVycm9yLm1lc3NhZ2UsZy5lcnJvci5kYXRhKTtsKHApfWVsc2V7Y29uc3QgZz1hLnR5cGU9PT0icmVzcG9uc2UiPyJSZXNwb25zZSI6IkVycm9yIjt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgJHtnfSBoYW5kbGVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHt1fWApKX1jb250aW51ZX1hd2FpdCB0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYS5tZXNzYWdlLHtyZWxhdGVkUmVxdWVzdElkOm8ucmVxdWVzdElkfSl9fWNvbnN0IGk9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2socyxvLnNlc3Npb25JZCk7aWYoIWkpdGhyb3cgbmV3IFIoTS5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtzfWApO2lmKCFOZShpLnN0YXR1cykpcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRGb3JUYXNrVXBkYXRlKHMsby5zaWduYWwpLGF3YWl0IHIoKTtpZihOZShpLnN0YXR1cykpe2NvbnN0IGE9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2tSZXN1bHQocyxvLnNlc3Npb25JZCk7cmV0dXJuIHRoaXMuX2NsZWFyVGFza1F1ZXVlKHMpLHsuLi5hLF9tZXRhOnsuLi5hLl9tZXRhLFtqZV06e3Rhc2tJZDpzfX19fXJldHVybiBhd2FpdCByKCl9O3JldHVybiBhd2FpdCByKCl9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGVjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3R7dGFza3M6cixuZXh0Q3Vyc29yOnN9PWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5saXN0VGFza3Mobi5wYXJhbXM/LmN1cnNvcixvLnNlc3Npb25JZCk7cmV0dXJue3Rhc2tzOnIsbmV4dEN1cnNvcjpzLF9tZXRhOnt9fX1jYXRjaChyKXt0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYEZhaWxlZCB0byBsaXN0IHRhc2tzOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIobmMsYXN5bmMobixvKT0+e3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IFIoTS5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtuLnBhcmFtcy50YXNrSWR9YCk7aWYoTmUoci5zdGF0dXMpKXRocm93IG5ldyBSKE0uSW52YWxpZFBhcmFtcyxgQ2Fubm90IGNhbmNlbCB0YXNrIGluIHRlcm1pbmFsIHN0YXR1czogJHtyLnN0YXR1c31gKTthd2FpdCB0aGlzLl90YXNrU3RvcmUudXBkYXRlVGFza1N0YXR1cyhuLnBhcmFtcy50YXNrSWQsImNhbmNlbGxlZCIsIkNsaWVudCBjYW5jZWxsZWQgdGFzayBleGVjdXRpb24uIixvLnNlc3Npb25JZCksdGhpcy5fY2xlYXJUYXNrUXVldWUobi5wYXJhbXMudGFza0lkKTtjb25zdCBzPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXMpdGhyb3cgbmV3IFIoTS5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZCBhZnRlciBjYW5jZWxsYXRpb246ICR7bi5wYXJhbXMudGFza0lkfWApO3JldHVybntfbWV0YTp7fSwuLi5zfX1jYXRjaChyKXt0aHJvdyByIGluc3RhbmNlb2YgUj9yOm5ldyBSKE0uSW52YWxpZFJlcXVlc3QsYEZhaWxlZCB0byBjYW5jZWwgdGFzazogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSl9YXN5bmMgX29uY2FuY2VsKHQpe2lmKCF0LnBhcmFtcy5yZXF1ZXN0SWQpcmV0dXJuO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5wYXJhbXMucmVxdWVzdElkKT8uYWJvcnQodC5wYXJhbXMucmVhc29uKX1fc2V0dXBUaW1lb3V0KHQsbixvLHIscz0hMSl7dGhpcy5fdGltZW91dEluZm8uc2V0KHQse3RpbWVvdXRJZDpzZXRUaW1lb3V0KHIsbiksc3RhcnRUaW1lOkRhdGUubm93KCksdGltZW91dDpuLG1heFRvdGFsVGltZW91dDpvLHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6cyxvblRpbWVvdXQ6cn0pfV9yZXNldFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7aWYoIW4pcmV0dXJuITE7Y29uc3Qgbz1EYXRlLm5vdygpLW4uc3RhcnRUaW1lO2lmKG4ubWF4VG90YWxUaW1lb3V0JiZvPj1uLm1heFRvdGFsVGltZW91dCl0aHJvdyB0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCksUi5mcm9tRXJyb3IoTS5SZXF1ZXN0VGltZW91dCwiTWF4aW11bSB0b3RhbCB0aW1lb3V0IGV4Y2VlZGVkIix7bWF4VG90YWxUaW1lb3V0Om4ubWF4VG90YWxUaW1lb3V0LHRvdGFsRWxhcHNlZDpvfSk7cmV0dXJuIGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksbi50aW1lb3V0SWQ9c2V0VGltZW91dChuLm9uVGltZW91dCxuLnRpbWVvdXQpLCEwfV9jbGVhbnVwVGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtuJiYoY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSx0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCkpfWFzeW5jIGNvbm5lY3QodCl7aWYodGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiQWxyZWFkeSBjb25uZWN0ZWQgdG8gYSB0cmFuc3BvcnQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyB0byBhIG5ldyB0cmFuc3BvcnQsIG9yIHVzZSBhIHNlcGFyYXRlIFByb3RvY29sIGluc3RhbmNlIHBlciBjb25uZWN0aW9uLiIpO3RoaXMuX3RyYW5zcG9ydD10O2NvbnN0IG49dGhpcy50cmFuc3BvcnQ/Lm9uY2xvc2U7dGhpcy5fdHJhbnNwb3J0Lm9uY2xvc2U9KCk9PntuPy4oKSx0aGlzLl9vbmNsb3NlKCl9O2NvbnN0IG89dGhpcy50cmFuc3BvcnQ/Lm9uZXJyb3I7dGhpcy5fdHJhbnNwb3J0Lm9uZXJyb3I9cz0+e28/LihzKSx0aGlzLl9vbmVycm9yKHMpfTtjb25zdCByPXRoaXMuX3RyYW5zcG9ydD8ub25tZXNzYWdlO3RoaXMuX3RyYW5zcG9ydC5vbm1lc3NhZ2U9KHMsaSk9PntyPy4ocyxpKSxKbihzKXx8bXYocyk/dGhpcy5fb25yZXNwb25zZShzKTpKYyhzKT90aGlzLl9vbnJlcXVlc3QocyxpKTpodihzKT90aGlzLl9vbm5vdGlmaWNhdGlvbihzKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5rbm93biBtZXNzYWdlIHR5cGU6ICR7SlNPTi5zdHJpbmdpZnkocyl9YCkpfSxhd2FpdCB0aGlzLl90cmFuc3BvcnQuc3RhcnQoKX1fb25jbG9zZSgpe2NvbnN0IHQ9dGhpcy5fcmVzcG9uc2VIYW5kbGVyczt0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5jbGVhcigpLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5jbGVhcigpLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fdGltZW91dEluZm8udmFsdWVzKCkpY2xlYXJUaW1lb3V0KG8udGltZW91dElkKTt0aGlzLl90aW1lb3V0SW5mby5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy52YWx1ZXMoKSlvLmFib3J0KCk7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmNsZWFyKCk7Y29uc3Qgbj1SLmZyb21FcnJvcihNLkNvbm5lY3Rpb25DbG9zZWQsIkNvbm5lY3Rpb24gY2xvc2VkIik7dGhpcy5fdHJhbnNwb3J0PXZvaWQgMCx0aGlzLm9uY2xvc2U/LigpO2Zvcihjb25zdCBvIG9mIHQudmFsdWVzKCkpbyhuKX1fb25lcnJvcih0KXt0aGlzLm9uZXJyb3I/Lih0KX1fb25ub3RpZmljYXRpb24odCl7Y29uc3Qgbj10aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrTm90aWZpY2F0aW9uSGFuZGxlcjtuIT09dm9pZCAwJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uKHQpKS5jYXRjaChvPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5jYXVnaHQgZXJyb3IgaW4gbm90aWZpY2F0aW9uIGhhbmRsZXI6ICR7b31gKSkpfV9vbnJlcXVlc3QodCxuKXtjb25zdCBvPXRoaXMuX3JlcXVlc3RIYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrUmVxdWVzdEhhbmRsZXIscj10aGlzLl90cmFuc3BvcnQscz10LnBhcmFtcz8uX21ldGE/LltqZV0/LnRhc2tJZDtpZihvPT09dm9pZCAwKXtjb25zdCBsPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TS5NZXRob2ROb3RGb3VuZCxtZXNzYWdlOiJNZXRob2Qgbm90IGZvdW5kIn19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/dGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmwsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCkuY2F0Y2goZz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBlbnF1ZXVlIGVycm9yIHJlc3BvbnNlOiAke2d9YCkpKTpyPy5zZW5kKGwpLmNhdGNoKGc9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBhbiBlcnJvciByZXNwb25zZTogJHtnfWApKSk7cmV0dXJufWNvbnN0IGk9bmV3IEFib3J0Q29udHJvbGxlcjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuc2V0KHQuaWQsaSk7Y29uc3QgYT1mdih0LnBhcmFtcyk/dC5wYXJhbXMudGFzazp2b2lkIDAsYz10aGlzLl90YXNrU3RvcmU/dGhpcy5yZXF1ZXN0VGFza1N0b3JlKHQscj8uc2Vzc2lvbklkKTp2b2lkIDAsdT17c2lnbmFsOmkuc2lnbmFsLHNlc3Npb25JZDpyPy5zZXNzaW9uSWQsX21ldGE6dC5wYXJhbXM/Ll9tZXRhLHNlbmROb3RpZmljYXRpb246YXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IGc9e3JlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmKGcucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24obCxnKX0sc2VuZFJlcXVlc3Q6YXN5bmMobCxnLHApPT57aWYoaS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgUihNLkNvbm5lY3Rpb25DbG9zZWQsIlJlcXVlc3Qgd2FzIGNhbmNlbGxlZCIpO2NvbnN0IGI9ey4uLnAscmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYhYi5yZWxhdGVkVGFzayYmKGIucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSk7Y29uc3QgeT1iLnJlbGF0ZWRUYXNrPy50YXNrSWQ/P3M7cmV0dXJuIHkmJmMmJmF3YWl0IGMudXBkYXRlVGFza1N0YXR1cyh5LCJpbnB1dF9yZXF1aXJlZCIpLGF3YWl0IHRoaXMucmVxdWVzdChsLGcsYil9LGF1dGhJbmZvOm4/LmF1dGhJbmZvLHJlcXVlc3RJZDp0LmlkLHJlcXVlc3RJbmZvOm4/LnJlcXVlc3RJbmZvLHRhc2tJZDpzLHRhc2tTdG9yZTpjLHRhc2tSZXF1ZXN0ZWRUdGw6YT8udHRsLGNsb3NlU1NFU3RyZWFtOm4/LmNsb3NlU1NFU3RyZWFtLGNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbTpuPy5jbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW19O1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnthJiZ0aGlzLmFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9KS50aGVuKCgpPT5vKHQsdSkpLnRoZW4oYXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IGc9e3Jlc3VsdDpsLGpzb25ycGM6IjIuMCIsaWQ6dC5pZH07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToicmVzcG9uc2UiLG1lc3NhZ2U6Zyx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKGcpfSxhc3luYyBsPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgZz17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOk51bWJlci5pc1NhZmVJbnRlZ2VyKGwuY29kZSk/bC5jb2RlOk0uSW50ZXJuYWxFcnJvcixtZXNzYWdlOmwubWVzc2FnZT8/IkludGVybmFsIGVycm9yIiwuLi5sLmRhdGEhPT12b2lkIDAmJntkYXRhOmwuZGF0YX19fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpnLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQoZyl9KS5jYXRjaChsPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgcmVzcG9uc2U6ICR7bH1gKSkpLmZpbmFsbHkoKCk9Pnt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQuaWQpPT09aSYmdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmRlbGV0ZSh0LmlkKX0pfV9vbnByb2dyZXNzKHQpe2NvbnN0e3Byb2dyZXNzVG9rZW46biwuLi5vfT10LnBhcmFtcyxyPU51bWJlcihuKSxzPXRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZ2V0KHIpO2lmKCFzKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSBwcm9ncmVzcyBub3RpZmljYXRpb24gZm9yIGFuIHVua25vd24gdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn1jb25zdCBpPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KHIpLGE9dGhpcy5fdGltZW91dEluZm8uZ2V0KHIpO2lmKGEmJmkmJmEucmVzZXRUaW1lb3V0T25Qcm9ncmVzcyl0cnl7dGhpcy5fcmVzZXRUaW1lb3V0KHIpfWNhdGNoKGMpe3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX2NsZWFudXBUaW1lb3V0KHIpLGkoYyk7cmV0dXJufXMobyl9X29ucmVzcG9uc2UodCl7Y29uc3Qgbj1OdW1iZXIodC5pZCksbz10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChuKTtpZihvKXtpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShuKSxKbih0KSlvKHQpO2Vsc2V7Y29uc3QgaT1uZXcgUih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7byhpKX1yZXR1cm59Y29uc3Qgcj10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChuKTtpZihyPT09dm9pZCAwKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSByZXNwb25zZSBmb3IgYW4gdW5rbm93biBtZXNzYWdlIElEOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUobiksdGhpcy5fY2xlYW51cFRpbWVvdXQobik7bGV0IHM9ITE7aWYoSm4odCkmJnQucmVzdWx0JiZ0eXBlb2YgdC5yZXN1bHQ9PSJvYmplY3QiKXtjb25zdCBpPXQucmVzdWx0O2lmKGkudGFzayYmdHlwZW9mIGkudGFzaz09Im9iamVjdCIpe2NvbnN0IGE9aS50YXNrO3R5cGVvZiBhLnRhc2tJZD09InN0cmluZyImJihzPSEwLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5zZXQoYS50YXNrSWQsbikpfX1pZihzfHx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShuKSxKbih0KSlyKHQpO2Vsc2V7Y29uc3QgaT1SLmZyb21FcnJvcih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7cihpKX19Z2V0IHRyYW5zcG9ydCgpe3JldHVybiB0aGlzLl90cmFuc3BvcnR9YXN5bmMgY2xvc2UoKXthd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCl9YXN5bmMqcmVxdWVzdFN0cmVhbSh0LG4sbyl7Y29uc3R7dGFzazpyfT1vPz97fTtpZighcil7dHJ5e3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMucmVxdWVzdCh0LG4sbyl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2YgUj9pOm5ldyBSKE0uSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX1yZXR1cm59bGV0IHM7dHJ5e2NvbnN0IGk9YXdhaXQgdGhpcy5yZXF1ZXN0KHQsR2Esbyk7aWYoaS50YXNrKXM9aS50YXNrLnRhc2tJZCx5aWVsZHt0eXBlOiJ0YXNrQ3JlYXRlZCIsdGFzazppLnRhc2t9O2Vsc2UgdGhyb3cgbmV3IFIoTS5JbnRlcm5hbEVycm9yLCJUYXNrIGNyZWF0aW9uIGRpZCBub3QgcmV0dXJuIGEgdGFzayIpO2Zvcig7Oyl7Y29uc3QgYT1hd2FpdCB0aGlzLmdldFRhc2soe3Rhc2tJZDpzfSxvKTtpZih5aWVsZHt0eXBlOiJ0YXNrU3RhdHVzIix0YXNrOmF9LE5lKGEuc3RhdHVzKSl7YS5zdGF0dXM9PT0iY29tcGxldGVkIj95aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTphLnN0YXR1cz09PSJmYWlsZWQiP3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgUihNLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSBmYWlsZWRgKX06YS5zdGF0dXM9PT0iY2FuY2VsbGVkIiYmKHlpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgUihNLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSB3YXMgY2FuY2VsbGVkYCl9KTtyZXR1cm59aWYoYS5zdGF0dXM9PT0iaW5wdXRfcmVxdWlyZWQiKXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTtyZXR1cm59Y29uc3QgYz1hLnBvbGxJbnRlcnZhbD8/dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzthd2FpdCBuZXcgUHJvbWlzZSh1PT5zZXRUaW1lb3V0KHUsYykpLG8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBSP2k6bmV3IFIoTS5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fX1yZXF1ZXN0KHQsbixvKXtjb25zdHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aSx0YXNrOmEscmVsYXRlZFRhc2s6Y309bz8/e307cmV0dXJuIG5ldyBQcm9taXNlKCh1LGwpPT57Y29uc3QgZz1DPT57bChDKX07aWYoIXRoaXMuX3RyYW5zcG9ydCl7ZyhuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKSk7cmV0dXJufWlmKHRoaXMuX29wdGlvbnM/LmVuZm9yY2VTdHJpY3RDYXBhYmlsaXRpZXM9PT0hMCl0cnl7dGhpcy5hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQubWV0aG9kKSxhJiZ0aGlzLmFzc2VydFRhc2tDYXBhYmlsaXR5KHQubWV0aG9kKX1jYXRjaChDKXtnKEMpO3JldHVybn1vPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCk7Y29uc3QgcD10aGlzLl9yZXF1ZXN0TWVzc2FnZUlkKyssYj17Li4udCxqc29ucnBjOiIyLjAiLGlkOnB9O28/Lm9ucHJvZ3Jlc3MmJih0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLnNldChwLG8ub25wcm9ncmVzcyksYi5wYXJhbXM9ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LHByb2dyZXNzVG9rZW46cH19KSxhJiYoYi5wYXJhbXM9ey4uLmIucGFyYW1zLHRhc2s6YX0pLGMmJihiLnBhcmFtcz17Li4uYi5wYXJhbXMsX21ldGE6ey4uLmIucGFyYW1zPy5fbWV0YXx8e30sW2plXTpjfX0pO2NvbnN0IHk9Qz0+e3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKHApLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKHApLHRoaXMuX2NsZWFudXBUaW1lb3V0KHApLHRoaXMuX3RyYW5zcG9ydD8uc2VuZCh7anNvbnJwYzoiMi4wIixtZXRob2Q6Im5vdGlmaWNhdGlvbnMvY2FuY2VsbGVkIixwYXJhbXM6e3JlcXVlc3RJZDpwLHJlYXNvbjpTdHJpbmcoQyl9fSx7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOml9KS5jYXRjaChvZT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGNhbmNlbGxhdGlvbjogJHtvZX1gKSkpO2NvbnN0IEY9QyBpbnN0YW5jZW9mIFI/QzpuZXcgUihNLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhDKSk7bChGKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQocCxDPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoQyBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBsKEMpO3RyeXtjb25zdCBGPXRmKG4sQy5yZXN1bHQpO0Yuc3VjY2Vzcz91KEYuZGF0YSk6bChGLmVycm9yKX1jYXRjaChGKXtsKEYpfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e3kobz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3Qgaz1vPy50aW1lb3V0Pz9HYiwkPSgpPT55KFIuZnJvbUVycm9yKE0uUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDprfSkpO3RoaXMuX3NldHVwVGltZW91dChwLGssbz8ubWF4VG90YWxUaW1lb3V0LCQsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IGo9Yz8udGFza0lkO2lmKGope2NvbnN0IEM9Rj0+e2NvbnN0IG9lPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KHApO29lP29lKEYpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHtwfWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQocCxDKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uoaix7dHlwZToicmVxdWVzdCIsbWVzc2FnZTpiLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goRj0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHApLGwoRil9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGIse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goQz0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHApLGwoQyl9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LFFhLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSx0YyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSxadixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtqZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbamVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKGM9PnRoaXMuX29uZXJyb3IoYykpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtqZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89S2ModCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1XYyh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89S2ModCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9V2ModCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJkpjKHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgUihNLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBSKE0uSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBSKE0uSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCBjPW9vLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGMpLE5lKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKE5lKGEuc3RhdHVzKSl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCBjPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGMpe2NvbnN0IHU9b28ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczpjfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24odSksTmUoYy5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gR2MoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIFFiKGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTtHYyhpKSYmR2Mocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgWGIgZXh0ZW5kcyBZYntfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgYyBvZlsuLi5zLmxpc3RlbmVyc10pYyhhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgZV89IjIwMjYtMDEtMjYiLHRfPSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3Mgbl97ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPWd2LnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09dF8mJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciBvXz1JKFtoKCJsaWdodCIpLGgoImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxadD1JKFtoKCJpbmxpbmUiKSxoKCJmdWxsc2NyZWVuIiksaCgicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIikscl89SShbaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksaCgiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxoKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksaCgiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksaCgiLS1jb2xvci10ZXh0LWludmVyc2UiKSxoKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxoKCItLWNvbG9yLXRleHQtaW5mbyIpLGgoIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxoKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLGgoIi0tY29sb3ItdGV4dC13YXJuaW5nIiksaCgiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksaCgiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksaCgiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLGgoIi0tY29sb3ItYm9yZGVyLWdob3N0IiksaCgiLS1jb2xvci1ib3JkZXItaW5mbyIpLGgoIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLGgoIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxoKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksaCgiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxoKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLGgoIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxoKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLGgoIi0tY29sb3ItcmluZy1pbmZvIiksaCgiLS1jb2xvci1yaW5nLWRhbmdlciIpLGgoIi0tY29sb3ItcmluZy1zdWNjZXNzIiksaCgiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxoKCItLWZvbnQtc2FucyIpLGgoIi0tZm9udC1tb25vIiksaCgiLS1mb250LXdlaWdodC1ub3JtYWwiKSxoKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLGgoIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxoKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxoKCItLWZvbnQtdGV4dC14cy1zaXplIiksaCgiLS1mb250LXRleHQtc20tc2l6ZSIpLGgoIi0tZm9udC10ZXh0LW1kLXNpemUiKSxoKCItLWZvbnQtdGV4dC1sZy1zaXplIiksaCgiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksaCgiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksaCgiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLGgoIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksaCgiLS1ib3JkZXItcmFkaXVzLXhzIiksaCgiLS1ib3JkZXItcmFkaXVzLXNtIiksaCgiLS1ib3JkZXItcmFkaXVzLW1kIiksaCgiLS1ib3JkZXItcmFkaXVzLWxnIiksaCgiLS1ib3JkZXItcmFkaXVzLXhsIiksaCgiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxoKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksaCgiLS1zaGFkb3ctaGFpcmxpbmUiKSxoKCItLXNoYWRvdy1zbSIpLGgoIi0tc2hhZG93LW1kIiksaCgiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIiksc189RShyXy5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxJKFtmKCksbnQoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTt2KHttZXRob2Q6aCgidWkvb3Blbi1saW5rIikscGFyYW1zOnYoe3VybDpmKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgaV89dih7aXNFcnJvcjpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksYV89dih7aXNFcnJvcjpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLGNfPXYoe2lzRXJyb3I6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6dih7fSl9KTt2YXIgdWM9dih7Y29ubmVjdERvbWFpbnM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOlMoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczpTKGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczpTKGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksbGM9dih7Y2FtZXJhOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTt2KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6dih7d2lkdGg6VCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OlQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyIHVfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6dih7YXJndW1lbnRzOkUoZigpLFooKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSxsXz12KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6dih7YXJndW1lbnRzOkUoZigpLFooKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksZF89dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6dih7cmVhc29uOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLHBfPXYoe2ZvbnRzOmYoKS5vcHRpb25hbCgpfSksZl89dih7dmFyaWFibGVzOnNfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6cF8ub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLGhfPXYoe21ldGhvZDpoKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczp2KHt9KX0pO0UoZigpLFooKSk7dmFyIFljPXYoe3RleHQ6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTt2KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOnYoe30pLm9wdGlvbmFsKCl9KTt2YXIgbV89dih7ZXhwZXJpbWVudGFsOkUoZigpLEUoZigpLFRuKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6dih7bGlzdENoYW5nZWQ6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6dih7cGVybWlzc2lvbnM6bGMub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOnVjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0OlljLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTpZYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOnYoe3Rvb2xzOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLGdfPXYoe2V4cGVyaW1lbnRhbDpFKGYoKSxFKGYoKSxUbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UyhadCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6dih7fSkub3B0aW9uYWwoKX0pO3Yoe2NzcDp1Yy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6bGMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpmKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpBKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO3Yoe21ldGhvZDpoKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczp2KHttb2RlOlp0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIHZfPXYoe21vZGU6WnQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLGJfPUkoW2goIm1vZGVsIiksaCgiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7dih7cmVzb3VyY2VVcmk6ZigpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTpTKGJfKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOkxlKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpMZSgpLm9wdGlvbmFsKCl9KTt2KHttaW1lVHlwZXM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTt2KHttZXRob2Q6aCgidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczp2KHtjb250ZW50czpTKEkoW1RmLFBmXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTt2KHttZXRob2Q6aCgidWkvbWVzc2FnZSIpLHBhcmFtczp2KHtyb2xlOmgoInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6UyhxbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczp2KHtodG1sOmYoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOnVjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6bGMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgX189dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6enIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxPZj12KHt0b29sSW5mbzp2KHtpZDpabi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6Y2MuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6b18ub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczpmXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6WnQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2RlczpTKFp0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6SShbdih7aGVpZ2h0OlQoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSx2KHttYXhIZWlnaHQ6SShbVCgpLG50KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoSShbdih7d2lkdGg6VCgpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksdih7bWF4V2lkdGg6SShbVCgpLG50KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpJKFtoKCJ3ZWIiKSxoKCJkZXNrdG9wIiksaCgibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOnYoe3RvdWNoOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOnYoe3RvcDpUKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OlQoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206VCgpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OlQoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCkseV89dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6T2YuZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7dih7bWV0aG9kOmgoInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOnYoe2NvbnRlbnQ6Uyhxbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50OkUoZigpLFooKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7dih7bWV0aG9kOmgoInVpL2luaXRpYWxpemUiKSxwYXJhbXM6dih7YXBwSW5mbzpTci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6Z18uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmYoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIHdfPXYoe3Byb3RvY29sVmVyc2lvbjpmKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86U3IuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczptXy5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDpPZi5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxrXz17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gUWMoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShrXyk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgR2YoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmx2KSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIFhjKGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBTXyhlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiAkXyhlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gel8oZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyBkYyBleHRlbmRzIFhie19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDp1Xyx0b29saW5wdXRwYXJ0aWFsOmxfLHRvb2xyZXN1bHQ6X18sdG9vbGNhbmNlbGxlZDpkXyxob3N0Y29udGV4dGNoYW5nZWQ6eV99O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIWRjLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxKKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcigkcixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1RYih0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUoYyl7T2JqZWN0LmFzc2lnbih0aGlzLGMpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhjLHUpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGw7aWYoaSl7bGV0IGc9YS5pbnB1dFNjaGVtYSxwPWc/YXdhaXQgWGMoZyxjPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpjPz97fTtsPWF3YWl0IG8ocCx1KX1lbHNlIGw9YXdhaXQgbyh1KTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFsLmlzRXJyb3ImJihsLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IFhjKGEub3V0cHV0U2NoZW1hLGwuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxsfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IFFjKHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IFFjKHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihoXywobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoeGYsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihJZiwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LHpyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LHpmLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSwkZixuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9SZjpDZjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sY18sbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sSmEsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LGlfLG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSxhXyxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LHZfLG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGM9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxjIT09bykmJihuPXUsbz1jLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpjfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgbl8od2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjplX319LHdfLG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgZXU9IiI7Y29uc3QgWmY9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PWV1JiYodC5hcHBseUhvc3RGb250cyhyKSxldT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxGZT1uZXcgZGMoe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLEFmPXthcHBseURvY3VtZW50VGhlbWU6U18sYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6JF8sYXBwbHlIb3N0Rm9udHM6el99LGllPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLG09ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IEV0PSIiLFpyPSIiLE5mPXt9LGpmPSExLE1mPSIiLE89e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LF9lPTE7Y29uc3QgVF89NTtsZXQga2U9bnVsbCxBdD1bXSxZZT0iIixNZT1bXSxRZT1udWxsO2NvbnN0IFBfPW5ldyBTZXQoWyJib29raW5nIiwiY2FuY2VsbGVkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiXSksSV89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJob3RlbHMifHx0PT09Im5vLWhvdGVscyIpe2NvbnN0IG49Wy4uLm5ldyBTZXQoKGUuaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLmNpdHkpKSldO3JldHVybiBuLmxlbmd0aD09PTE/U3RyaW5nKG5bMF0pOmAke2UudG90YWw/PzB9IGhvdGVsc2B9cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iZXh0cmFzIj9gJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSx4Xz0oKT0+e2NvbnN0IGU9aWUoImJhY2tidG4iKSx0PU1lLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IEtyPSIiLFdyPSIiLHBjPTA7Y29uc3QgRGY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihXcj10LnRyaXBJZCkscGM9TnVtYmVyKHQuY291bnQ/PzApKX0sRV89ZT0+V3I/ey4uLmUsdHJpcDpXcn06ZSxDXz1lPT5OZltlXT8/IiI7bGV0IHFmPSExO2NvbnN0IHR1PWU9PntxZj1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfSxYPShlLHQ9e30pPT57Y29uc3Qgbj1DXyhlKTtyZXR1cm4gbj9xZj9Qcm9taXNlLnJlc29sdmUobnVsbCk6KHR1KCEwKSxGZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpuLGFyZ3VtZW50czpFXyh0KX0pLmZpbmFsbHkoKCk9PnR1KCExKSkudGhlbihvPT57RGYobz8uX21ldGEpO2NvbnN0IHI9bz8uc3RydWN0dXJlZENvbnRlbnQ7cmV0dXJuIHImJlFlJiYhUF8uaGFzKFN0cmluZyhRZS52aWV3KSkmJihNZT1bLi4uTWUse3BheWxvYWQ6UWUsbGFiZWw6SV8oUWUpfV0uc2xpY2UoLTYpKSxyJiZtYyhyKSxSXyhvKSxvfSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKX0sUl89ZT0+e2NvbnN0IHQ9KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG49Pm4/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyF0fHwhRmUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fEZlLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHQpfV19KS5jYXRjaCgoKT0+e30pfSxUcj1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxQcj1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksT189Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+JyxaXz1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke09ffSR7bShlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7bShlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixtZT0oKT0+amY/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHttKE1mfHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsR3I9ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LFlyPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxLZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtHcihlLmNoZWNrSW4pfSDigJMgJHtHcihlLmNoZWNrT3V0KX0gwrcgJHtZcihlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7WXIoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsQV89KGUsdCxuKT0+e2NvbnN0IG89QXQuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LE5fPShlLHQpPT57Y29uc3Qgbj1BdC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sZmM9KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7bShuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7bShuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke20obil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsTGY9KGUsdCk9Pntjb25zdCBuPXR8fGpfKCk7cmV0dXJuKCFPLmNoZWNrSW58fE8uY2hlY2tJbjxuKSYmKE8uY2hlY2tJbj1uKSwoIU8uY2hlY2tPdXR8fE8uY2hlY2tPdXQ8PU8uY2hlY2tJbikmJihPLmNoZWNrT3V0PVFyKE8uY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7bShPLmNoZWNrSW4pfSIgbWluPSIke20obil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke20oTy5jaGVja091dCl9IiBtaW49IiR7bShRcihPLmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxsYWJlbCBjbGFzcz0iZ3Vlc3RzIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke20oX2UpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvbGFiZWw+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke20oaGMoKSl9PC9zcGFuPgogIDwvZGl2PmB9LGhjPSgpPT57Y29uc3QgZT1PLmNoZWNrSW4mJk8uY2hlY2tPdXQ/WXIoTy5jaGVja0luLE8uY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj1fZT4xP2Ake19lfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sUXI9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxqXz0oKT0+bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLE1fPWU9Pntjb25zdCB0PWUuaG90ZWxzPz9bXSxuPVsuLi5uZXcgU2V0KHQubWFwKGE9PlN0cmluZyhhLmNpdHkpKSldLG89YT0+e2NvbnN0IGM9dC5maW5kKHU9PnUuY2l0eT09PWEpPy5jb3VudHJ5O3JldHVybiBjJiYhU3RyaW5nKGMpLnN0YXJ0c1dpdGgoYSk/U3RyaW5nKGMpOiIifSxyPWE9PmAKICAgIDxkaXYgY2xhc3M9ImNpdHlncm91cCI+CiAgICAgICR7bi5sZW5ndGg+MT9gPGRpdiBjbGFzcz0iY2l0eW5hbWUiPiR7bShhKX0ke28oYSk/YDxzbWFsbD4gwrcgJHttKG8oYSkpfTwvc21hbGw+YDoiIn08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJ0aWxlcyI+CiAgICAgICAgJHt0LmZpbHRlcihjPT5jLmNpdHk9PT1hKS5tYXAoYz0+YAogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke20oYy5pZCl9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7VHIoU3RyaW5nKGMuaWQpKX0iPgogICAgICAgICAgICAgICR7Yy5pbWFnZVVybD9gPGltZyBzcmM9IiR7bShjLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7bShQcihTdHJpbmcoYy5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICAgICAgICAke2MuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke20oYy5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHttKGMubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXdoZXJlIj4ke20obi5sZW5ndGg+MT9jLmFyZWE/P2MuY2l0eTpbYy5hcmVhLGMuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZvb3QiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtjLmZyb21OaWdodGx5P2Ake20oYy5mcm9tTmlnaHRseSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvc3Bhbj4KICAgICAgICAgICAgICAgICR7Wl8oYy5yYXRpbmcpfQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxzPU51bWJlcihlLnRvdGFsPz90Lmxlbmd0aCksaT1zLXQubGVuZ3RoO3JldHVyblttZSgpLGA8ZGl2PiR7bi5tYXAocikuam9pbigiIil9PC9kaXY+YCxpPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt0Lmxlbmd0aH0gb2YgJHtzfS4gTmFtZSBhIGNpdHkgb3IgYSBjb3VudHJ5IHRvIHNlZSB0aGUgcmVzdC48L2Rpdj5gOiIiXS5qb2luKCIiKX0sVWY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke1RyKFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7bShlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHttKFByKFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHttKGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7bShlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHttKFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke20oZS5yYXRpbmcudmFsdWUpfeKYhSAoJHttKGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7bShlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHttKHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsRF89KGUsdCxuKT0+e2NvbnN0IG89QV8oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtUcihgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke20odC5pbWFnZVVybCl9IiBhbHQ9IiI+YDptKFByKFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHttKHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHttKHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7bShTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke20odC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7bSh0LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke20odC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke20odC5uaWdodGx5KX0gLyBuaWdodCR7X2U+MT9gIMK3ICR7X2V9IHJvb21zYDoiIn0gwrcgaW5jbC4gdGF4PC9kaXY+CiAgICAgICAgJHt0Lm1lbWJlclJhdGU/YDxkaXYgY2xhc3M9InAtbWVtYmVyIj4ke20odC5tZW1iZXJSYXRlLnRpZXIpfSByYXRlPC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtmYyhgZGF0YS1hZGQtcm9vbT0iJHttKHQuaWQpfSIgZGF0YS1ob3RlbD0iJHttKGUuaWQpfSJgLG8sU3RyaW5nKHQubmFtZSksX2UpfTwvZGl2PgogICAgPC9kaXY+YH0sbnU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/TztyZXR1cm5bbWUoKSxVZih0KSxMZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxlLm5lZWRzRGF0ZXM/JzxkaXYgY2xhc3M9ImVtcHR5Ij5Mb29raW5nIHVwIHJvb21z4oCmPC9kaXY+JzplLm5vUm9vbXM/YDxkaXYgY2xhc3M9ImVyciI+JHttKGUubm9Sb29tcyl9PC9kaXY+YDpgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5EXyh0LHIsbykpLmpvaW4oIiIpfTwvZGl2PmAsKGUuZXh0cmFzPz9bXSkubGVuZ3RoP2A8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWV4dHJhcz0iJHttKHQuaWQpfSI+QWRkLW9ucyBhbmQgZXhwZXJpZW5jZXM8L2J1dHRvbj5gOiIiLChlLnBvbGljaWVzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJjaGlwcyI+JHtlLnBvbGljaWVzLm1hcChyPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBvbGljeT0iJHttKHIudG9waWMpfSIgZGF0YS1ob3RlbD0iJHttKHQuaWQpfSI+JHttKHIudGl0bGUpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxxXz1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUuZXh0cmFzPz9bXTtyZXR1cm5bbWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7bSh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgaXQgb2ZmZXJzIGJlc2lkZSB0aGUgcm9vbTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHttKG8ubmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke20oby5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHttKG8ucHJpY2UpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij5wZXIgJHttKG8ucGVyKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7ZmMoYGRhdGEtYWRkLWV4dHJhPSIke20oby5pZCl9IiBkYXRhLWhvdGVsPSIke20odC5pZCl9ImAsTl8oU3RyaW5nKHQuaWQpLFN0cmluZyhvLmlkKSksU3RyaW5nKG8ubmFtZSkpfTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke20odC5pZCl9Ij5CYWNrIHRvICR7bSh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxMXz1lPT57Y29uc3QgdD1lLmtpbmQ9PT0icm9vbSI/YGRhdGEtYWRkLXJvb209IiR7bShlLnJvb21SZWYpfSIgZGF0YS1ob3RlbD0iJHttKGUuaG90ZWxJZCl9IiBkYXRhLWNpPSIke20oZS5zdGF5Py5jaGVja0luKX0iIGRhdGEtY289IiR7bShlLnN0YXk/LmNoZWNrT3V0KX0iIGRhdGEtZ3U9IiR7bShlLnN0YXk/Lmd1ZXN0cyl9ImA6YGRhdGEtYWRkLWV4dHJhPSIke20oZS5leHRyYVJlZj8/ZS50aXRsZSl9IiBkYXRhLWhvdGVsPSIke20oZS5ob3RlbElkKX0iYDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20oZS50aXRsZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHttKGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtLZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7bShlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7bShlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtmYyh0LE51bWJlcihlLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0sVV89ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVyblttZSgpLCc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlIHRyaXAgaXMgZW1wdHkuPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkJyb3dzZSAke20oRXQpfSBob3RlbHM8L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBuPVsuLi5uZXcgU2V0KHQubWFwKG89PlN0cmluZyhvLmRheT8/IiIpKSldLnNvcnQoKTtyZXR1cm5bbWUoKSxuLm1hcChvPT5gCiAgICAgICR7bz9gPGRpdiBjbGFzcz0iZGF5Ij4ke20oR3IobykpfTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InJvd3MiPiR7dC5maWx0ZXIocj0+U3RyaW5nKHIuZGF5Pz8iIik9PT1vKS5tYXAoTF8pLmpvaW4oIiIpfTwvZGl2PmApLmpvaW4oIiIpLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG89PmAke20oby50aXRsZSl9OiAke20oby53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+Um9vbXMgYW5kIGFkZC1vbnM8L3NwYW4+PHNwYW4+JHttKGUuc3VidG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+VGF4ZXMgYW5kIGZlZXM8L3NwYW4+PHNwYW4+JHttKGUudGF4ZXNBbmRGZWVzKX08L3NwYW4+PC9kaXY+CiAgICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHttKGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHttKGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+VG90YWw8L3NwYW4+PHNwYW4+JHttKGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+UG9pbnRzIHRoaXMgdHJpcCBlYXJuczwvc3Bhbj48c3Bhbj4ke20oTnVtYmVyKGUubWVtYmVyU2F2aW5nLnBvaW50cykudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsJzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stYm9vayI+UmVxdWVzdCBib29raW5nPC9idXR0b24+PC9kaXY+JyxgPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFJlcXVlc3RpbmcgYSBib29raW5nIGFza3MgJHttKEV0KX0gdG8gaG9sZCB0aGUgcm9vbXMgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmAsSGYoKSxrZT8iIjpgPGRpdiBjbGFzcz0ibm90ZSI+QSAke20oRXQpfSBDaXJjbGUgbWVtYmVyPyA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPlNpZ24gaW4gZm9yIHRoZSBtZW1iZXIgcmF0ZTwvYnV0dG9uPi48L2Rpdj4ke0ZmKCl9YF0uam9pbigiIil9LEhmPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIj48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGxhYmVsPkFueXRoaW5nIHRoZSBob3RlbCBzaG91bGQga25vdzxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQSBsYXRlIGFycml2YWwsIGEgaGlnaCBmbG9vciDigJQgb3B0aW9uYWwiPjwvbGFiZWw+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9vayI+SG9sZCB0aGVzZSByb29tczwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+CiAgPC9kaXY+YCxIXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+VGhlIGJvb2tpbmcgbmVlZHMgJHttKChlLm1pc3Npbmc/P1tdKS5qb2luKCIgYW5kICIpfHwiYSBuYW1lIGFuZCBhbiBlbWFpbCIpfS48L2Rpdj5gLEhmKCEwKSwnPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+J10uam9pbigiIiksRl89ZT0+e2NvbnN0IHQ9ZS5tZW1iZXI/P3t9O3JldHVyblttZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7bSh0LnByb2dyYW1tZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHttKHQubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7bSh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHttKE51bWJlcih0LnBvaW50cz8/MCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPjxiPiR7bShNYXRoLnJvdW5kKCh0LnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApKX0lIG9mZjwvYj48c3Bhbj5Sb29tIHJhdGVzIGFuZCB0cmlwIHRvdGFscyBub3cgc2hvdyB0aGUgJHttKHQudGllcj8ubmFtZSl9IG1lbWJlciByYXRlLiBOb3RoaW5nIGlzIGNoYXJnZWQgYnkgc2lnbmluZyBpbi48L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1vdXQiPlNpZ24gb3V0PC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LEJfPSgpPT5bJzxkaXYgY2xhc3M9ImVyciI+Tm8gbWVtYmVyc2hpcCBtYXRjaGVzIHRoYXQgbnVtYmVyIGFuZCBzdXJuYW1lLiBDaGVjayBib3RoIGFzIHRoZXkgYXJlIHByaW50ZWQg4oCUIG5vdGhpbmcgZWxzZSBpcyBuZWVkZWQsIHRoaXMgY29ubmVjdG9yIG5ldmVyIGFza3MgZm9yIGEgcGFzc3dvcmQuPC9kaXY+JyxGZighMCldLmpvaW4oIiIpLEZmPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJzaWduaW4iJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+TWVtYmVyc2hpcCBudW1iZXI8aW5wdXQgaWQ9Im1udW0iIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgaXMgcHJpbnRlZCI+PC9sYWJlbD4KICAgICAgPGxhYmVsPlN1cm5hbWU8aW5wdXQgaWQ9Im1zdXIiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIHN1cm5hbWUgb24gaXQiPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLWluIj5TaWduIGluPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBwYXNzd29yZCBpcyBhc2tlZCBmb3IgYW5kIG5vbmUgaXMgc3RvcmVkLiBTaWduaW5nIGluIHNob3dzIHRoZSBtZW1iZXIgcmF0ZTsgbm90aGluZyBpcyBjaGFyZ2VkLjwvZGl2PgogIDwvZGl2PmAsVl89ZT0+e2NvbnN0IHQ9ZS5ib29raW5nPz97fTtyZXR1cm5bbWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHttKHQuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHttKHQuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7bShLZSh0LnN0YXkpKX0gwrcgJHttKHQuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke20oU3RyaW5nKHQuaG9sZFVudGlsPz8iIikuc2xpY2UoMCwxNikucmVwbGFjZSgiVCIsIiAiKSl9IFVUQy4gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7bShlLnRvdGFsKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHsodC5xdW90ZT8ubGluZXM/P1tdKS5tYXAoSl8pLmpvaW4oIiIpfTwvZGl2PmAsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7bSh0LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxKXz1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20oZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bShlLmtpbmQ9PT0icm9vbSI/S2UoZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHttKGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAsS189e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIn0sV189ZT0+e2NvbnN0IHQ9ZS5ib29raW5ncz8/W107cmV0dXJuIHQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOlttZSgpLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QubWFwKG49PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bShuLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke20obi5jb25maXJtYXRpb25Db2RlKX0gwrcgJHttKEtlKG4uc3RheSkpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtLX1tTdHJpbmcobi5zdGF0dXMpXT8/IiJ9Ij4ke20obi5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHttKG4ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke24uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG4uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke20obi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbDwvYnV0dG9uPmA6IiJ9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpfSxvdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2FuY2VsbGVkIixuPWUuYm9va2luZz8/e307cmV0dXJuW2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2FuY2VsbGVkIjoiQ2FuY2VsbGluZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke20obi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHt0PyJUaGUgaG90ZWwgY2hhcmdlcyI6IkNhbmNlbGxpbmcgd291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7bShlLmZlZSl9PC9zcGFuPjwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9Im5vdGUiPiR7bShlLnJ1bGUpfTwvZGl2PmAsdD8iIjplLmNhbmNlbGxhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+S2VlcCBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gZGFuZ2VyIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jYW5jZWw9IiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoZSBib29raW5nPC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDonPGRpdiBjbGFzcz0ibm90ZSI+VGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGNhbmNlbCBvbiB0aGlzIGJvb2tpbmcuPC9kaXY+J10uam9pbigiIil9LHJ1PWU9Pntjb25zdCB0PWUudmlldz09PSJjaGFuZ2VkIixuPWUuYm9va2luZz8/e30sbz0ocixzLGkpPT5zP2A8ZGl2IGNsYXNzPSJsZWcke2k/IiB3YXMiOiIifSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnayI+JHttKHIpfTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ3YiPiR7bShzLmNoZWNrSW4pfSDihpIgJHttKHMuY2hlY2tPdXQpfSDCtyAke20ocy5uaWdodHMpfSAke051bWJlcihzLm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnbSI+JHttKHMucm9vbU5hbWUpfSR7TnVtYmVyKHMucm9vbXMpPjE/YCDCtyAke20ocy5yb29tcyl9IHJvb21zYDoiIn0gwrcgJHttKHMudG90YWwpfTwvZGl2PgogICAgICAgICA8L2Rpdj5gOiIiO3JldHVyblttZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2hhbmdlZCI6IkNoYW5naW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsZS5ob3RlbE5hbWU/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7bShlLmhvdGVsTmFtZSl9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibGVncyI+JHtvKHQ/IldhcyI6Ik5vdyIsZS5mcm9tLCEwKX0ke28odD8iTm93IjoiV291bGQgYmUiLGUudG8sITEpfTwvZGl2PmAsZS5kaWZmZXJlbmNlP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7ZS5yZWZ1bmREdWU/dD8iVGhlIGRlc2sgb3dlcyI6IldvdWxkIGNvbWUgYmFjayI6dD8iVGhlIGRlc2sgYXNrcyBmb3IiOiJXb3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHttKGUuZGlmZmVyZW5jZSl9PC9zcGFuPjwvZGl2PjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPiR7bShlLnJ1bGUpfTwvZGl2PmAsdD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPjwvZGl2Pic6ZS5jaGFuZ2VhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TGVhdmUgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jaGFuZ2U9IiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfSI+TW92ZSB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpfSxBcj1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUudmlldz09PSJwb2xpY3kiP2A8aDQ+JHttKGUudGl0bGUpfTwvaDQ+JHttKGUudGV4dCl9YDooZS50b3BpY3M/P1tdKS5tYXAobz0+YDxoND4ke20oby50aXRsZSl9PC9oND4ke20oby50ZXh0KX1gKS5qb2luKCIiKTtyZXR1cm5bYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke20odC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IHRoZSBob3RlbCBwdWJsaXNoZXM8L2Rpdj48L2Rpdj5gLGUudmlldz09PSJwb2xpY3ktbWlzc2luZyI/YDxkaXYgY2xhc3M9ImVtcHR5Ij4ke20odC5uYW1lKX0gZG9lcyBub3QgcHVibGlzaCBhbnl0aGluZyBhYm91dCB0aGF0IGhlcmUuPC9kaXY+YDpgPGRpdiBjbGFzcz0icHJvc2UiPiR7bn08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke20odC5pZCl9Ij5CYWNrIHRvICR7bSh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxHXz1lPT57Y29uc3QgdD1lLmNvbHVtbnM/P1tdLG49ZS5yb3dMYWJlbHM/P1tdLG89cj0+YAogICAgPGRpdiBjbGFzcz0iY21wLWhlYWQke3IucmVjb21tZW5kZWQ/IiBwaWNrIjoiIn0iPgogICAgICAke3IucmVjb21tZW5kZWQ/JzxkaXYgY2xhc3M9InBpY2ttYXJrIj5SZWNvbW1lbmRlZDwvZGl2Pic6IiJ9CiAgICAgIDxidXR0b24gY2xhc3M9InQtc2hvdCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke20oci5ob3RlbC5pZCl9IiBzdHlsZT0iJHtUcihTdHJpbmcoci5ob3RlbC5pZCkpfSI+CiAgICAgICAgJHtyLmhvdGVsLmltYWdlVXJsP2A8aW1nIHNyYz0iJHttKHIuaG90ZWwuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHttKFByKFN0cmluZyhyLmhvdGVsLm5hbWUpKSl9PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sLWJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC1uYW1lIj4ke20oci5ob3RlbC5uYW1lKX08L2Rpdj4KICAgICAgICAke3IucHJpY2U/YDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHttKHIucHJpY2Uuc3RheVRvdGFsKX08c21hbGw+IHRvdGFsIMK3ICR7bShyLnByaWNlLm5pZ2h0bHkpfS9uaWdodDwvc21hbGw+PC9kaXY+YDpyLmZyb20/YDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHttKHIuZnJvbSl9PHNtYWxsPiAvIG5pZ2h0IGZyb208L3NtYWxsPjwvZGl2PmA6IiJ9CiAgICAgICAgJHtyLmJlc3RGb3I/YDxkaXYgY2xhc3M9IndoeSI+JHttKHIuYmVzdEZvcil9PC9kaXY+YDoiIn0KICAgICAgICAkeyhyLnByb3M/P1tdKS5sZW5ndGh8fChyLmNvbnM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9InBjIj4ke1suLi4oci5wcm9zPz9bXSkubWFwKHM9PmA8ZGl2IGNsYXNzPSJwcm8iPjxzcGFuIGNsYXNzPSJtIj4rPC9zcGFuPjxzcGFuPiR7bShzKX08L3NwYW4+PC9kaXY+YCksLi4uKHIuY29ucz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0iY29uIj48c3BhbiBjbGFzcz0ibSI+4oiSPC9zcGFuPjxzcGFuPiR7bShzKX08L3NwYW4+PC9kaXY+YCldLmpvaW4oIiIpfTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YDtyZXR1cm5bbWUoKSxlLnRpdGxlP2A8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7bShlLnRpdGxlKX08L2Rpdj5gOiIiLGUuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHttKEtlKGUuc3RheSkpfTwvZGl2PmA6IiIsQXJyYXkuaXNBcnJheShlLmN1cnJlbmNpZXMpJiZlLmN1cnJlbmNpZXMubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlcyBhcmUgaW4gZWFjaCBob3RlbCdzIG93biBjdXJyZW5jeSAoJHttKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0pLiBUaGV5IGFyZSBub3QgY29udmVydGVkLCBzbyB0aGUgY29sdW1ucyBhcmUgbm90IGEgcHJpY2UgcmFua2luZy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJjbXAtd3JhcCI+PGRpdiBjbGFzcz0iY21wIiBzdHlsZT0iLS1jb2xzOiR7dC5sZW5ndGh9Ij4KICAgICAgIDxkaXYgY2xhc3M9ImNtcC1jb3JuZXIiPjwvZGl2PgogICAgICAgJHt0Lm1hcChvKS5qb2luKCIiKX0KICAgICAgICR7bi5tYXAoKHIscyk9PmA8ZGl2IGNsYXNzPSJrIj4ke20ocil9PC9kaXY+JHt0Lm1hcChpPT5gPGRpdiBjbGFzcz0idiR7cyUyPyIgYWx0IjoiIn0iPiR7bShpLnJvd3M/LltzXT8udmFsdWU/PyLigJQiKX08L2Rpdj5gKS5qb2luKCIiKX1gKS5qb2luKCIiKX0KICAgICA8L2Rpdj48L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKHI9PmAke20oci5uYW1lKX06ICR7bShyLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPlRhcCBhIHBpY3R1cmUgdG8gc2VlIHRoYXQgJHttKGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSdzIHJvb21zLjwvZGl2PmBdLmpvaW4oIiIpfSxZXz1lPT57Y29uc3QgdD1lLmRheXM/P1tdO3JldHVyblttZSgpLGA8ZGl2PgogICAgICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke20oZS50aXRsZSl9PC9kaXY+CiAgICAgICAke2Uuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHttKEtlKGUuc3RheSkpfTwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0iZ2FwIj48Yj4ke20oZS5pblRyaXApfS8ke20oZS5wbGFubmVkKX08L2I+PHNwYW4+JHttKGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKG4sbyk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bysxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHttKG4ubGFiZWwpfSR7bi5kYXRlP2A8c21hbGw+IMK3ICR7bShTdHJpbmcobi5kYXRlKS5zbGljZSg1KSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtuLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7bShuLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAkeyhuLml0ZW1zPz9bXSkubWFwKHI9PmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIiR7ci5raW5kPT09ImhvdGVsIj9gIGRhdGEtaG90ZWw9IiR7bShyLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtyLmNoZWNrSW4/YCBkYXRhLWNpPSIke20oci5jaGVja0luKX0iIGRhdGEtY289IiR7bShyLmNoZWNrT3V0KX0iYDoiIn1gOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHttKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke20oW3IuZGV0YWlsLHIubmlnaHRzP2Ake3IubmlnaHRzfSAke3IubmlnaHRzPT09MT8ibmlnaHQiOiJuaWdodHMifSBoZXJlYDoiIixyLnByaWNlXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5zdGF0ZSAke3IuaW5UcmlwPyJ5ZXMiOiJubyJ9Ij4ke3IuaW5UcmlwPyJJbiB0aGUgdHJpcCI6IlBsYW4gb25seSJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChuPT5gJHttKG4ubmFtZSl9OiAke20obi53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sbWM9ZT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2UudG9vbE5hbWVzJiYoTmY9ZS50b29sTmFtZXMpLGUuYnJhbmQmJihFdD1TdHJpbmcoZS5icmFuZCkpLGUubG9nb1VybCYmKFpyPVN0cmluZyhlLmxvZ29VcmwpKSx0eXBlb2YgZS5kZW1vPT0iYm9vbGVhbiImJihqZj1lLmRlbW8pLGUuZGVtb05vdGUmJihNZj1TdHJpbmcoZS5kZW1vTm90ZSkpLHR5cGVvZiBlLnJvb21zX3dhbnRlZD09Im51bWJlciImJihfZT1lLnJvb21zX3dhbnRlZCksZS5tZW1iZXI/LnRpZXI/Lm5hbWUmJihrZT1lLm1lbWJlciksZS52aWV3PT09InNpZ25lZC1vdXQiJiYoa2U9bnVsbCksZS5zdGF5Py5jaGVja0luJiYoTz17Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9KSwoZS52aWV3PT09InRyaXAifHxlLnZpZXc9PT0ibmVlZHMtZGF0ZXMiKSYmKEF0PWUubGluZXM/P1tdKSwoZS52aWV3PT09ImJvb2tpbmcifHxlLnZpZXc9PT0iZW1wdHktdHJpcCIpJiYoQXQ9W10scGM9MCksWWU9U3RyaW5nKGUudmlldz8/IiIpLHhfKCk7Y29uc3QgdD1pZSgiYnJhbmQiKTtacj8odC5zcmM9WnIsdC5oaWRkZW49ITEsaWUoInRpdGxlIikuaGlkZGVuPSEwKToodC5oaWRkZW49ITAsaWUoInRpdGxlIikuaGlkZGVuPSExLGllKCJ0aXRsZSIpLnRleHRDb250ZW50PUV0fHwiSG90ZWxzIiksaWUoInN1YiIpLnRleHRDb250ZW50PVhfKGUpLHR5KCksZXkoKTtjb25zdCBuPXtob3RlbHM6TV8sIm5vLWhvdGVscyI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm90aGluZyBtYXRjaGVkLiBUcnkgYSBjaXR5LjwvZGl2PicsaG90ZWw6bnUsIm5vLXJvb21zIjpudSwiaG90ZWwtbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGF0IGhvdGVsIGlzIG5vdCBpbiB0aGlzIGNvbm5lY3Rvci48L2Rpdj4nLGV4dHJhczpxXyx0cmlwOlVfLCJuZWVkcy1kYXRlcyI6UV8sYm9va2luZzpWXywibmVlZHMtZ3Vlc3QiOkhfLG1lbWJlcjpGXywibWVtYmVyLW5vdC1mb3VuZCI6Ql8sInNpZ25lZC1vdXQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlNpZ25lZCBvdXQuIFJhdGVzIGFyZSB0aGUgcHVibGljIG9uZXMgYWdhaW4uPC9kaXY+PGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPjwvZGl2PicsImVtcHR5LXRyaXAiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRyaXAgeWV0LjwvZGl2PicsYm9va2luZ3M6V18sImNhbmNlbGxhdGlvbi1wcmV2aWV3IjpvdSxjYW5jZWxsZWQ6b3UsImNoYW5nZS1wcmV2aWV3IjpydSxjaGFuZ2VkOnJ1LCJib29raW5nLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZyBoZXJlIG1hdGNoZXMgdGhhdCBjb2RlLjwvZGl2PicsY29tcGFyaXNvbjpHXywibm90aGluZy10by1jb21wYXJlIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5Ob25lIG9mIHRob3NlIGFyZSBob3RlbHMgdGhpcyBjb25uZWN0b3Iga25vd3MuPC9kaXY+JyxpdGluZXJhcnk6WV8sImVtcHR5LWl0aW5lcmFyeSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+QW4gaXRpbmVyYXJ5IG5lZWRzIGF0IGxlYXN0IG9uZSBkYXkuPC9kaXY+Jyxwb2xpY3k6QXIscG9saWNpZXM6QXIsInBvbGljeS1taXNzaW5nIjpBcn07KFllPT09ImhvdGVsInx8WWU9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQmJihLcj1TdHJpbmcoZS5ob3RlbC5pZCksZS5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5nYygpLDApKSxRZT1lO2NvbnN0IG89bltZZV07aWUoImNvbnRlbnQiKS5pbm5lckhUTUw9bz9vKGUpOmA8ZGl2IGNsYXNzPSJlcnIiPiR7bShlLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7ZS5kZXRhaWw/YDxicj4ke20oZS5kZXRhaWwpfWA6IiJ9PC9kaXY+YH0sUV89ZT0+W21lKCksZS5ob3RlbD9VZihlLmhvdGVsKToiIixgPGRpdiBjbGFzcz0iZXJyIj4ke20oZS53aHk/PyJXaGljaCBuaWdodHM/IEEgcm9vbSBuZWVkcyBhIGNoZWNrLWluIGFuZCBhIGNoZWNrLW91dCBkYXRlLiIpfTwvZGl2PmAsTGYoU3RyaW5nKGUuaG90ZWw/LmlkPz8iIiksZS5ob3RlbD8udG9kYXlUaGVyZSldLmpvaW4oIiIpLFhfPWU9PmUudmlldz09PSJob3RlbHMiP2Ake2UudG90YWw/PzB9ICR7TnVtYmVyKGUudG90YWwpPT09MT8iaG90ZWwiOiJob3RlbHMifWA6ZS52aWV3PT09ImhvdGVsInx8ZS52aWV3PT09Im5vLXJvb21zIj9LZShlLnN0YXkpOmUudmlldz09PSJ0cmlwIj8oZS5saW5lcz8/W10pLmxlbmd0aD9TdHJpbmcoZS50b3RhbD8/IiIpOiIiOmUudmlldz09PSJjb21wYXJpc29uIj9gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgOmUudmlldz09PSJpdGluZXJhcnkiP2Ake2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixleT0oKT0+e2NvbnN0IGU9aWUoIm1lbWJlcmNoaXAiKTtrZT8oZS5oaWRkZW49ITEsZS50ZXh0Q29udGVudD1gJHtrZS50aWVyPy5uYW1lPz8iTWVtYmVyIn0gwrcgJHtNYXRoLnJvdW5kKChrZS50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixgJHtrZS5uYW1lfSDCtyAke2tlLnByb2dyYW1tZX1gKSk6KGUuaGlkZGVuPVllPT09Im1lbWJlci1ub3QtZm91bmQiLGUudGV4dENvbnRlbnQ9Ik1lbWJlciBzaWduIGluIixlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJhc2stc2lnbi1pbiIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKX0sdHk9KCk9Pntjb25zdCBlPWllKCJoZWFkdHJpcCIpLHQ9cGN8fEF0Lmxlbmd0aDtlLmhpZGRlbj10PT09MHx8WWU9PT0idHJpcCIsaWUoImhlYWR0cmlwbiIpLnRleHRDb250ZW50PVN0cmluZyh0KX0sbnk9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3UiKTtPPXtjaGVja0luOmU/LnZhbHVlPz9PLmNoZWNrSW4sY2hlY2tPdXQ6dD8udmFsdWU/P08uY2hlY2tPdXQsZ3Vlc3RzOk51bWJlcihuPy52YWx1ZT8/Ty5ndWVzdHMpfHwyfX0sV249KGU9e30pPT5PLmNoZWNrSW4mJk8uY2hlY2tPdXQ/e2NoZWNrSW46Ty5jaGVja0luLGNoZWNrT3V0Ok8uY2hlY2tPdXQsZ3Vlc3RzOk8uZ3Vlc3RzLC4uLmV9OmU7bGV0IHN1O2NvbnN0IGdjPShlPTApPT57S3ImJihjbGVhclRpbWVvdXQoc3UpLHN1PXNldFRpbWVvdXQoKCk9PntYKCJnZXRIb3RlbCIse2hvdGVsOktyLHJvb21zOl9lLC4uLlduKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxLPWU9PntpZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHttKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYobiE9PW51bGwpe255KCksX2U9TWF0aC5taW4oVF8sTWF0aC5tYXgoMSxfZStOdW1iZXIobikpKTtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO3AmJihwLnRleHRDb250ZW50PVN0cmluZyhfZSkpO2NvbnN0IGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO2ImJihiLnRleHRDb250ZW50PWhjKCkpLGdjKDQ1MCk7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihvIT09bnVsbCl7Y29uc3QgcD10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixiPU51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLHk9dC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT97Y2hlY2tJbjp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpPz8iIixjaGVja091dDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpPz8iIixndWVzdHM6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWd1Iik/PzIpfTpXbigpO1goImFkZFRvVHJpcCIse2hvdGVsOnAscm9vbTpvLHJvb21zOmIsLi4ueX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihyIT09bnVsbCl7WCgiYWRkVG9UcmlwIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZXh0cmE6cixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1leHRyYXMiKTtpZihzIT09bnVsbCl7WCgibGlzdEV4dHJhcyIse2hvdGVsOnMsLi4uV24oKX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcG9saWN5Iik7aWYoaSE9PW51bGwpe1goInBvbGljaWVzIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsdG9waWM6aX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGF0IHBvbGljeS4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2FuY2VsIik7aWYoYSE9PW51bGwpe1goInByZXZpZXdDYW5jZWxsYXRpb24iLHtib29raW5nOmF9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IHdvcmsgb3V0IHRoZSBmZWUuIikpO3JldHVybn1jb25zdCBjPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2FuY2VsIik7aWYoYyE9PW51bGwpe1goImNhbmNlbEJvb2tpbmciLHtib29raW5nOmMsY29uZmlybWVkOiEwfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBjYW5jZWwgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgdT10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNoYW5nZSIpO2lmKHUhPT1udWxsKXtjb25zdCBwPVFlPy50bz8/e307WCgiY2hhbmdlQm9va2luZyIse2Jvb2tpbmc6dSxjb25maXJtZWQ6ITAsLi4ucC5jaGVja0luP3tjaGVja0luOnAuY2hlY2tJbixjaGVja091dDpwLmNoZWNrT3V0fTp7fSwuLi5OdW1iZXIocC5yb29tcyk+MT97cm9vbXM6TnVtYmVyKHAucm9vbXMpfTp7fSwuLi5wLnJvb21OYW1lP3tyb29tOnAucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZihsPT09ImJhY2siKXtjb25zdCBwPU1lLmF0KC0xKTtpZighcClyZXR1cm47TWU9TWUuc2xpY2UoMCwtMSksbWMocC5wYXlsb2FkKTtyZXR1cm59aWYobD09PSJob21lIil7WCgibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYobD09PSJtZW1iZXIiKXtYKCJzaWduSW4iLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IHJlYWQgdGhlIG1lbWJlcnNoaXAuIikpO3JldHVybn1pZihsPT09ImFzay1zaWduLWluIil7Y29uc3QgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2lnbmluIik7cCYmKHAuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZihsPT09InNpZ24taW4iKXtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFwfHwhYil7SygiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufVgoInNpZ25JbiIse251bWJlcjpwLHN1cm5hbWU6Yn0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKGw9PT0ic2lnbi1vdXQiKXtrZT1udWxsLFgoInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYobD09PSJhc2stYm9vayIpe2NvbnN0IHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7cCYmKHAuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYobD09PSJib29rIil7Y29uc3QgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIixiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLHk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIXB8fCFiKXtLKCJUaGUgYm9va2luZyBuZWVkcyBhIG5hbWUgYW5kIGFuIGVtYWlsIHRvIHNlbmQgdGhlIGNvbmZpcm1hdGlvbiB0by4iKTtyZXR1cm59WCgicmVxdWVzdEJvb2tpbmciLHtuYW1lOnAsZW1haWw6YiwuLi55P3tub3Rlczp5fTp7fX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKGw9PT0iYm9va2luZ3MiKXtYKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKGw9PT0idHJpcCIpe1goInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgZz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpO2lmKGcpe2NvbnN0IHA9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKSxiPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik7cCYmYiYmKE8uY2hlY2tJbj1wLE8uY2hlY2tPdXQ9YiksWCgiZ2V0SG90ZWwiLHtob3RlbDpnLC4uLlduKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhhdCBob3RlbC4iKSl9fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDtpZih0Py5pZCE9PSJjaSImJnQ/LmlkIT09ImNvIilyZXR1cm47Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSxvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpO2lmKCFufHwhbylyZXR1cm47aWYodC5pZD09PSJjaSImJm4udmFsdWUpe2NvbnN0IHM9UXIobi52YWx1ZSwxKTtvLm1pbj1zLCghby52YWx1ZXx8by52YWx1ZTw9bi52YWx1ZSkmJihvLnZhbHVlPXMpfU8uY2hlY2tJbj1uLnZhbHVlfHxPLmNoZWNrSW4sTy5jaGVja091dD1vLnZhbHVlfHxPLmNoZWNrT3V0O2NvbnN0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO3ImJihyLnRleHRDb250ZW50PWhjKCkpLGdjKCl9KTtjb25zdCBCZj0oZSx0KT0+e3RyeXtEZih0KSxNZT1bXSxtYyhlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbiksaWUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O0ZlLm9udG9vbHJlc3VsdD1lPT5CZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7RmUub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+WmYoZSxBZik7RmUuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPUZlLmdldEhvc3RDb250ZXh0KCk7WmYoZSxBZik7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZCZih0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57aWUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6dmFyKC0tYmcpfS5ub3Rle2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS41fS5mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHg7bWFyZ2luLXRvcDoxMHB4fS5mb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5mb3JtIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjhweCA5cHh9LmZvcm0gLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uY29uZntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweCAxMnB4fS5jb25mIC5jb2Rle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjcyMDtsZXR0ZXItc3BhY2luZzouMDZlbTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbmYgLndoZXJle2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwfS5jb25mIC53aGVue2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnVucGFpZHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgYWN0aW9uIiAidGh1bWIgcHJpY2UgYWN0aW9uIn0ucm93LndpdGh0aHVtYiAudGh1bWJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDthbGlnbi1zZWxmOnN0YXJ0fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0uY21wLXdyYXB7b3ZlcmZsb3cteDphdXRvO21hcmdpbi1pbmxpbmU6LTJweDtwYWRkaW5nOjJweH0uY21we2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDc2cHgsOTZweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMTJweCwxZnIpKTthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6OHB4fS5jbXAtY29ybmVye2dyaWQtY29sdW1uOjF9LmNtcC1oZWFke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO21pbi13aWR0aDowfS5jbXAtaGVhZC5waWNre2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjY2VudCl9LmNtcC1oZWFkIC50LXNob3R7YXNwZWN0LXJhdGlvOjE2IC8gOTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJX0uY29sLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmc6MTBweCAxMXB4IDEycHh9LmNvbC1uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uY29sLXByaWNle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbC1wcmljZSBzbWFsbHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LndoeXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItaW5saW5lLXN0YXJ0OjJweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nLWlubGluZS1zdGFydDo4cHh9LnBje2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweDtmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDV9LnBjIGRpdntkaXNwbGF5OmZsZXg7Z2FwOjVweH0ucGMgLm17ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo3MDB9LnBjIC5wcm8gLm17Y29sb3I6dmFyKC0tZ29vZCl9LnBjIC5jb24gLm17Y29sb3I6dmFyKC0tZmctc29mdCl9LmNtcCAuaywuY21wIC52e2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NTtwYWRkaW5nOjZweCA4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY21wIC5re2dyaWQtY29sdW1uOjE7Y29sb3I6dmFyKC0tZmctc29mdCk7cG9zaXRpb246c3RpY2t5O2luc2V0LWlubGluZS1zdGFydDowO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5jbXAgLnZ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jbXAgLnYuYWx0LC5jbXAgLms6aGFzKCsudi5hbHQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czo2cHh9LnBpY2ttYXJre2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjNweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fS5kYXlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoyOHB4IDFmcjtnYXA6MTBweH0uZGF5bnVte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHh9LmRheW51bSBie2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5bnVtIGl7ZmxleDoxO3dpZHRoOjFweDtiYWNrZ3JvdW5kOnZhcigtLWxpbmUpfS5kYXlyb3c6bGFzdC1jaGlsZCAuZGF5bnVtIGl7ZGlzcGxheTpub25lfS5kYXlib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxNHB4O21pbi13aWR0aDowfS5kYXlsYWJlbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmRheW5vdGV7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4taXRlbXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHh9LnBsYW4taXRlbSAubmFtZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnBsYW4taXRlbSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uaW5zdGF0ZXtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lmluc3RhdGUueWVze2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uaW5zdGF0ZS5ub3tiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXB7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2FwIGJ7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtd2VpZ2h0OjcwMH1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsuY21we2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNjhweCw4NHB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDEwOHB4LDFmcikpfX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+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 = '055b1dba29065be6109367edd121b7facbfb726054e29847cc72ca2c1198664e';
7
+ export const HOTEL_CARD_SOURCE_SHA = 'b542b4b090a05a7b44783f9190ddc0fb3c3873dd531d0f943bdd2786f1bbeed8';
8
8
  //# sourceMappingURL=card.generated.js.map