{"format":"rivetin-package-v1","manifest":{"manifestVersion":1,"id":"rivetin-context-menu","version":"0.5.9","name":{"zh-CN":"资源右键菜单","en-US":"Resource context menus"},"description":{"zh-CN":"资源列表多级右键菜单与虚拟机原生配置快捷入口，复用 CloudTower 官方菜单、对话框和确认流程。","en-US":"Cascading resource-row menus and VM shortcuts reuse CloudTower native menus, dialogs and confirmation flows."},"author":"Rivetin contributors","license":"MIT","repository":"https://github.com/sephirothchang/rivetin","homepage":"https://github.com/sephirothchang/rivetin/tree/main/plugins/rivetin-context-menu","compatibility":{"schemaVersion":2,"frameworkApi":1,"frameworkMinVersion":"0.2.0","frameworkMaxVersionExclusive":"0.3.0","towerBuilds":["4.9.0"],"smtx":"none","tower":"CloudTower 4.9.0 public DOM; framework 0.2 candidate, live validation pending."},"frontend":{"format":"rivetin-global-v1","entry":"web/plugin.js"},"permissions":["ui.context-menu"],"locales":["zh-CN","en-US"],"configuration":{"version":1,"schema":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"integer","enum":[1]},"enabled":{"type":"boolean"},"nativeActions":{"type":"boolean"},"resourceTypes":{"type":"array","maxItems":15,"items":{"type":"string","maxLength":20,"enum":["organization","datacenter","cluster","host","vm","vmVolume","disk","nic","vmGroup","vmPlacementGroup","vmNetwork","systemNetwork","vmSnapshot","snapshotPlan","vds"]}}},"required":["version","enabled","nativeActions","resourceTypes"]},"defaults":{"version":1,"enabled":true,"nativeActions":true,"resourceTypes":["organization","datacenter","cluster","host","vm","vmVolume","disk","nic","vmGroup","vmPlacementGroup","vmNetwork","systemNetwork","vmSnapshot","snapshotPlan","vds"]}},"lifecycle":{"reset":"defaults","uninstall":"retain-config"},"releaseNotes":{"zh-CN":"修复A/B/A后原生入口恢复，并严格限定单次准确原生reset边；外部排队导航和重复边仍使操作失效，不凭当前URL相等继续。保留退休、代次和身份守卫及自身失败提示。0.5.8本地候选未通过独审、未部署，0.5.9待真实环境测试。","en-US":"Recover native entries after A/B/A using a single exact native reset edge. Queued external navigation and duplicate edges still cancel; current URL equality cannot establish ownership. Preserve retirement, generation and identity checks and visible failure diagnostics. The 0.5.8 local candidate was rejected and never deployed; 0.5.9 awaits real-environment testing."}},"files":[{"path":"web/plugin.js","sha256":"e8e185e9a5c524c928324c5db23ae844d023d7bdaae673980b61cb787523b878","data":"KCgpPT57InVzZSBzdHJpY3QiO2NvbnN0IGU9e2Q6KHQsbik9Pntmb3IodmFyIHIgaW4gbillLm8obixyKSYmIWUubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDpuW3JdfSl9LG86KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLHI6ZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9fTtsZXQgdD17fTtlLnIodCksZS5kKHQse2RlZmF1bHQ6KCk9PnplfSk7Y29uc3Qgbj0icml2ZXRpbi1jb250ZXh0LW1lbnUiLHI9WyJvcmdhbml6YXRpb24iLCJkYXRhY2VudGVyIiwiY2x1c3RlciIsImhvc3QiLCJ2bSIsInZtVm9sdW1lIiwiZGlzayIsIm5pYyIsInZtR3JvdXAiLCJ2bVBsYWNlbWVudEdyb3VwIiwidm1OZXR3b3JrIiwic3lzdGVtTmV0d29yayIsInZtU25hcHNob3QiLCJzbmFwc2hvdFBsYW4iLCJ2ZHMiXTtmdW5jdGlvbiBvKGUpe2lmKCFlfHwiZW5hYmxlZCxuYXRpdmVBY3Rpb25zLHJlc291cmNlVHlwZXMsdmVyc2lvbiIhPT1PYmplY3Qua2V5cyhlKS5zb3J0KCkuam9pbigpfHwxIT09ZS52ZXJzaW9ufHwiYm9vbGVhbiIhPXR5cGVvZiBlLmVuYWJsZWR8fCJib29sZWFuIiE9dHlwZW9mIGUubmF0aXZlQWN0aW9uc3x8IUFycmF5LmlzQXJyYXkoZS5yZXNvdXJjZVR5cGVzKXx8ZS5yZXNvdXJjZVR5cGVzLmxlbmd0aD5yLmxlbmd0aHx8ZS5yZXNvdXJjZVR5cGVzLnNvbWUoZT0+IXIuaW5jbHVkZXMoZSkpfHxuZXcgU2V0KGUucmVzb3VyY2VUeXBlcykuc2l6ZSE9PWUucmVzb3VyY2VUeXBlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJTlZBTElEX1NFVFRJTkdTIik7cmV0dXJuey4uLmUscmVzb3VyY2VUeXBlczpbLi4uZS5yZXNvdXJjZVR5cGVzXX19Y29uc3QgaT17aWQ6bixkZWZhdWx0czplPT52b2lkIDA9PT1lP3t2ZXJzaW9uOjEsZW5hYmxlZDohMCxuYXRpdmVBY3Rpb25zOiEwLHJlc291cmNlVHlwZXM6Wy4uLnJdfTpvKGUpLHZhbGlkYXRlOm8sZXF1YWw6KGUsdCk9PkpTT04uc3RyaW5naWZ5KGUpPT09SlNPTi5zdHJpbmdpZnkodCksc2VlZDplPT5lfSxhPSJyaXZldGluLnBlcnNvbmFsLnYxIixzPS9ecml2ZXRpbi1bYS16MC05XSsoPzotW2EtejAtOV0rKSokLyxsPWU9PiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg8PTEwMCYmcy50ZXN0KGUpLGM9Ii9hcGkvcml2ZXRpbi92MSI7ZnVuY3Rpb24gZChlKXt0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUubG9jYWxTdG9yYWdlPy5nZXRJdGVtKCJ0b2tlbiIpfHwibnVsbCIpPy52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQubGVuZ3RoPDgxOTImJiEvW1xyXG5dLy50ZXN0KHQpKXJldHVybntBdXRob3JpemF0aW9uOnR9fWNhdGNoe31yZXR1cm57fX1mdW5jdGlvbiB1KGUsdCl7aWYoIWV8fCFOdW1iZXIuaXNTYWZlSW50ZWdlcihlLnJldmlzaW9uKXx8ZS5yZXZpc2lvbjwwfHxudWxsIT09ZS51cGRhdGVkQXQmJiJzdHJpbmciIT10eXBlb2YgZS51cGRhdGVkQXQpdGhyb3cgbmV3IEVycm9yKCJJTlZBTElEX0NPTkZJR19SRVNQT05TRSIpO3JldHVybnsuLi5lLHNldHRpbmdzOnQoZS5zZXR0aW5ncyl9fWZ1bmN0aW9uIG0oZSx0LG49Ii9hcGkvcml2ZXRpbi92MS9jb25maWciKXtjb25zdHtkZWZhdWx0czpyLHZhbGlkYXRlOm99PXQsaT1mdW5jdGlvbihlKXtpZighbChlKSl0aHJvdyBuZXcgRXJyb3IoIklOVkFMSURfUExVR0lOX0lEIik7cmV0dXJuIGV9KHQuaWQpLGE9bmV3IFVSTChuLGUubG9jYXRpb24ub3JpZ2luKTtpZihhLm9yaWdpbiE9PWUubG9jYXRpb24ub3JpZ2luKXRocm93IG5ldyBFcnJvcigiQ09ORklHVVJBVElPTl9PUklHSU5fTUlTTUFUQ0giKTtpZigiL2FwaS9yaXZldGluL3YxL2NvbmZpZyIhPT1hLnBhdGhuYW1lfHxhLnNlYXJjaCl0aHJvdyBuZXcgRXJyb3IoIklOVkFMSURfQ09ORklHVVJBVElPTl9FTkRQT0lOVCIpO2NvbnN0IHM9ZnVuY3Rpb24oZSl7Y29uc3QgdD1hc3luYyh0LG49IkdFVCIscix7c2lnbmFsOm99PXt9KT0+e2lmKCJzdHJpbmciIT10eXBlb2YgdHx8IXQuc3RhcnRzV2l0aCgiLyIpfHx0LnN0YXJ0c1dpdGgoIi8vIikpdGhyb3cgbmV3IEVycm9yKCJJTlZBTElEX0FQSV9ST1VURSIpO2NvbnN0IGk9bmV3IFVSTCh0LCJodHRwOi8vcml2ZXRpbi5pbnZhbGlkIikuc2VhcmNoUGFyYW1zLmdldCgicGx1Z2luSWQiKTtpZihudWxsIT09aSYmIWwoaSl8fHImJiJvYmplY3QiPT10eXBlb2YgciYmT2JqZWN0Lmhhc093bihyLCJwbHVnaW5JZCIpJiYhbChyLnBsdWdpbklkKSl0aHJvdyBuZXcgRXJyb3IoIklOVkFMSURfUExVR0lOX0lEIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFlLnJlc3BvbnNlLm9rKXtjb25zdCB0PW5ldyBFcnJvcigvXltBLVpdW0EtWjAtOV9dezAsOTl9JC8udGVzdChlLnZhbHVlPy5lcnJvcnx8IiIpP2UudmFsdWUuZXJyb3I6NDA0PT09ZS5yZXNwb25zZS5zdGF0dXM/Ik5PVF9GT1VORCI6IlJFUVVFU1RfRkFJTEVEIik7dGhyb3cgdC5jb2RlPXQubWVzc2FnZSx0LnN0YXR1cz1lLnJlc3BvbnNlLnN0YXR1cyx0fXJldHVybiBlLnZhbHVlfShhd2FpdCBhc3luYyBmdW5jdGlvbih0LG49IkdFVCIscixvKXtjb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXIsYT1zZXRUaW1lb3V0KCgpPT5pLmFib3J0KCksOGUzKSxzPSgpPT5pLmFib3J0KCk7bz8uYWJvcnRlZCYmaS5hYm9ydCgpLG8/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixzLHtvbmNlOiEwfSk7dHJ5e2NvbnN0IG89YXdhaXQgZS5mZXRjaCh0LHttZXRob2Q6bixjcmVkZW50aWFsczoic2FtZS1vcmlnaW4iLGNhY2hlOiJuby1zdG9yZSIscmVkaXJlY3Q6ImVycm9yIixzaWduYWw6aS5zaWduYWwsaGVhZGVyczp7Li4uZChlKSwuLi52b2lkIDAhPT1yP3siQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9Ont9fSwuLi52b2lkIDAhPT1yP3tib2R5OiJzdHJpbmciPT10eXBlb2Ygcj9yOkpTT04uc3RyaW5naWZ5KHIpfTp7fX0pO2xldCBhO3RyeXthPWF3YWl0IG8uanNvbigpfWNhdGNoe2lmKDQwND09PW8uc3RhdHVzKXJldHVybntyZXNwb25zZTpvLHZhbHVlOm51bGx9O3Rocm93IG5ldyBFcnJvcigiSU5WQUxJRF9BUElfUkVTUE9OU0UiKX1yZXR1cm57cmVzcG9uc2U6byx2YWx1ZTphfX1maW5hbGx5e2NsZWFyVGltZW91dChhKSxvPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscyl9fShjK3QsbixyLG8pKX07cmV0dXJuIHQuYXNzZXRVcmw9YXN5bmMoZSx0KT0+e2lmKCFsKGUuaWQpKXRocm93IG5ldyBFcnJvcigiSU5WQUxJRF9QTFVHSU5fSUQiKTtyZXR1cm5gJHtjfS9hc3NldHMvJHtlLmlkfS8ke2UucGFja2FnZUlkfS8ke3R9YH0sdH0oZSk7YXN5bmMgZnVuY3Rpb24gbShlLHQpe2NvbnN0IG49YXdhaXQgcygiL2NvbmZpZyIsZSx0P3twbHVnaW5JZDppLHNldHRpbmdzOnR9OnZvaWQgMCk7aWYoMSE9PW4/LnZlcnNpb258fCFuLnBsdWdpbnN8fEFycmF5LmlzQXJyYXkobi5wbHVnaW5zKSl0aHJvdyBuZXcgRXJyb3IoIklOVkFMSURfQ09ORklHX1JFU1BPTlNFIik7aWYobi5lcnJvcnM/LltpXSl0aHJvdyBuZXcgRXJyb3IoIkNPTkZJR1VSQVRJT05fVU5BVkFJTEFCTEUiKTtyZXR1cm4gdShPYmplY3QuaGFzT3duKG4ucGx1Z2lucyxpKT9uLnBsdWdpbnNbaV06e3JldmlzaW9uOjAsdXBkYXRlZEF0Om51bGwsc2V0dGluZ3M6cigpfSxvKX1yZXR1cm57bG9hZDooKT0+bSgiR0VUIiksc2F2ZTplPT5tKCJQVVQiLGUpfX1uZXcgV2Vha01hcDtjb25zdCBwPXtkYXRhY2VudGVyczoiZGF0YWNlbnRlciIsY2x1c3RlcnM6ImNsdXN0ZXIiLGhvc3RzOiJob3N0Iix2bXM6InZtIiwidm0tdm9sdW1lcyI6InZtVm9sdW1lIixkaXNrczoiZGlzayJ9LGY9e3Ztczoidm0iLGhvc3RzOiJob3N0IixkaXNrczoiZGlzayIsdm1Wb2x1bWVzOiJ2bVZvbHVtZSJ9LGg9ZT0+InN0cmluZyI9PXR5cGVvZiBlJiYvXltBLVphLXowLTlfLV17MSwxMjh9JC8udGVzdChlKSxnPShlLHQpPT5Cb29sZWFuKGUmJnQmJmUudHlwZT09PXQudHlwZSYmZS5pZD09PXQuaWQpO2Z1bmN0aW9uIHYoZSx0LG49ITEpe3RyeXtjb25zdCBvPW5ldyBVUkwoZSx0KTtpZihvLm9yaWdpbiE9PXR8fCIvIiE9PW8ucGF0aG5hbWV8fG8uc2VhcmNofHxvLnVzZXJuYW1lfHxvLnBhc3N3b3JkfHwhWyJodHRwOiIsImh0dHBzOiJdLmluY2x1ZGVzKG8ucHJvdG9jb2wpKXJldHVybiBudWxsO2NvbnN0W2ksYT0iIl09by5oYXNoLnNsaWNlKDEpLnNwbGl0KCI/Iikscz0vXlwvKGRhdGFjZW50ZXJzfGNsdXN0ZXJzfGhvc3RzfHZtc3x2bS12b2x1bWVzfGRpc2tzKVwvKFtBLVphLXowLTlfLV17MSwxMjh9KVwvPyQvLmV4ZWMoaSksbD1uZXcgVVJMU2VhcmNoUGFyYW1zKGEpO2lmKCFuJiZsLmhhcygic2lkZWJhciIpJiYvXlwvKG92ZXJ2aWV3fGRhdGFjZW50ZXJzfGNsdXN0ZXJzfGhvc3RzfHZtc3x2bS12b2x1bWVzfGRpc2tzKShcL1tBLVphLXowLTlfLV17MSwxMjh9KT9cLz8kLy50ZXN0KGkpKXtjb25zdCBlPUpTT04ucGFyc2UobC5nZXQoInNpZGViYXIiKSk7cmV0dXJuIHIuaW5jbHVkZXMoZT8udHlwZSkmJiJvcmdhbml6YXRpb24iIT09ZS50eXBlJiZoKGUuaWQpP3t0eXBlOmUudHlwZSxpZDplLmlkLGhyZWY6by5ocmVmfTpudWxsfXJldHVybiBzPyhuJiZsLmhhcygic2lkZWJhciIpJiYobC5kZWxldGUoInNpZGViYXIiKSxvLmhhc2g9aSsobC5zaXplP2A/JHtsfWA6IiIpKSx7dHlwZTpwW3NbMV1dLGlkOnNbMl0saHJlZjpvLmhyZWZ9KTpudWxsfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBiKGUpe3JldHVybiB2KGUubG9jYXRpb24uaHJlZixlLmxvY2F0aW9uLm9yaWdpbil9Y29uc3Qgdz1lPT4oZT8udGV4dENvbnRlbnR8fCIiKS50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKS5zbGljZSgwLDIwMCkseT1lPT5TdHJpbmcoZXx8IiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW1xzXy1dKy9nLCIiKSxrPVsi5ZCN56ewIiwibmFtZSJdLHg9W1sibmljIixbayxbIm1hY+WcsOWdgCIsIm1hYyBhZGRyZXNzIl0sWyJyZG1hIl0sWyLnvZHlj6PnlKjpgJQiLCJuaWMgdXNhZ2UiLCJuaWMgcHVycG9zZSJdXV0sWyJ2bUdyb3VwIixbayxbIue7hOebruW9lSIsImdyb3VwIGRpcmVjdG9yeSJdLFsi6Jma5ouf5py65pWw6YePIiwidm0gY291bnQiXV1dLFsidm1QbGFjZW1lbnRHcm91cCIsW2ssWyLnirbmgIEiLCJzdGF0dXMiXSxbIuiZmuaLn+acuuaVsCIsInZtIGNvdW50Il0sWyLmj4/ov7AiLCJkZXNjcmlwdGlvbiJdLFsi5Yib5bu65pe26Ze0IiwiY3JlYXRlZCBhdCIsImNyZWF0aW9uIHRpbWUiXV1dLFsidm1OZXR3b3JrIixbayxbInZsYW7nsbvlnosiLCJ2bGFuIHR5cGUiXSxbInZsYW4gaWQiXSxbIuaJgOWxnuiZmuaLn+WIhuW4g+W8j+S6pOaNouacuiIsIuaJgOWxnuWIhuW4g+W8j+iZmuaLn+S6pOaNouacuiIsImRpc3RyaWJ1dGVkIHZpcnR1YWwgc3dpdGNoIiwidmlydHVhbCBkaXN0cmlidXRlZCBzd2l0Y2giXV1dLFsic3lzdGVtTmV0d29yayIsW2ssWyLnsbvlnosiLCJ0eXBlIl0sWyLlrZDnvZHmjqnnoIEiLCJzdWJuZXQgbWFzayJdLFsi572R5YWzIiwiZ2F0ZXdheSJdLFsiaXDlnLDlnYAiLCJpcCBhZGRyZXNzIl1dXSxbInZtU25hcHNob3QiLFtrLFsi5rqQ6Jma5ouf5py6Iiwic291cmNlIHZtIl0sWyLni6zljaDniannkIblrrnph48iLCJleGNsdXNpdmUgcGh5c2ljYWwgY2FwYWNpdHkiXSxbIuW/q+eFp+aXtumXtCIsInNuYXBzaG90IHRpbWUiXSxbIuWFs+iBlOW/q+eFp+iuoeWIkiIsImFzc29jaWF0ZWQgc25hcHNob3QgcGxhbiJdXV0sWyJ2bVNuYXBzaG90IixbayxbIueLrOWNoOeJqeeQhuWuuemHjyIsImV4Y2x1c2l2ZSBwaHlzaWNhbCBjYXBhY2l0eSIsInNpemUiXSxbImxvY2FsX2NyZWF0ZWRfYXQiLCLlv6vnhafml7bpl7QiLCJzbmFwc2hvdCB0aW1lIl0sWyJzbmFwc2hvdF9ncm91cCIsIuWFs+iBlOW/q+eFp+iuoeWIkiIsImFzc29jaWF0ZWQgc25hcHNob3QgcGxhbiJdXV0sWyJzbmFwc2hvdFBsYW4iLFtrLFsi5LiK5qyh5b+r54Wn5Lu75Yqh57uT5p6cIiwibGFzdCBzbmFwc2hvdCB0YXNrIHJlc3VsdCJdLFsi5b+r54Wn5a+56LGh5pWwIiwic25hcHNob3Qgb2JqZWN0IGNvdW50Il0sWyLlj6/nlKjlv6vnhafnu4QiLCJhdmFpbGFibGUgc25hcHNob3QgZ3JvdXBzIl1dXSxbInZkcyIsW2ssWyLlhbPogZTkuLvmnLrmlbAiLCJhc3NvY2lhdGVkIGhvc3QgY291bnQiXSxbIue9keWPo+e7keWumuaooeW8jyIsIm5pYyBib25kaW5nIG1vZGUiXSxbIue9keWPo+i/numAmuaAp+ajgOa1iyIsIm5pYyBjb25uZWN0aXZpdHkgY2hlY2siXV1dXTtmdW5jdGlvbiBFKGUpe2NvbnN0IHQ9ZS5jbG9zZXN0KCIuZnJhbWUiKTtpZih0KXJldHVybiB0O2NvbnN0IG49ZS5jbG9zZXN0KCIuZHJhd2VyLWNvbnRlbnQtaW5uZXIiKSxyPW4/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZXRhaWwtc2lkZWJhci1oZWFkZXIgLmZyYW1lIik7cmV0dXJuIDE9PT1yPy5sZW5ndGg/clswXTpudWxsfWZ1bmN0aW9uIEEoZSx0KXtpZighZT8uY2xvc2VzdHx8ZS5jbG9zZXN0KCdpbnB1dCx0ZXh0YXJlYSxzZWxlY3QsW2NvbnRlbnRlZGl0YWJsZV06bm90KFtjb250ZW50ZWRpdGFibGU9ImZhbHNlIl0pLFtyb2xlPSJtZW51Il0sW3JvbGU9ImRpYWxvZyJdLC5hbnQtbW9kYWwsLmFudC1kcm9wZG93biwuYzg5LXBsdWdpbi1yb290LFtkYXRhLXJpdmV0aW4tY29udGV4dC1tZW51XSxbZGF0YS1yaXZldGluLW9iamVjdC1tZW51XSxbZGF0YS1yaXZldGluLXJlc291cmNlLW1lbnVdJykpcmV0dXJuIG51bGw7Y29uc3Qgbj1mdW5jdGlvbihlLHQpe2Zvcihjb25zdFtuLHJdb2ZbWyIuaG9zdC1pbmZvIiwiaG9zdCJdLFsiLmNsdXN0ZXItaW5mbyIsImNsdXN0ZXIiXSxbIi5kYXRhY2VudGVyLWluZm8iLCJkYXRhY2VudGVyIl1dKXtjb25zdCBvPWUuY2xvc2VzdChuKTtpZighbyljb250aW51ZTtjb25zdCBpPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXRlc3QiKXx8by5xdWVyeVNlbGVjdG9yKCIucmVzcG9uc2UtYXJlYVtkYXRhLXRlc3RdIik/LmdldEF0dHJpYnV0ZSgiZGF0YS10ZXN0IiksYT1vLnF1ZXJ5U2VsZWN0b3IoIi5uYW1lIik7cmV0dXJuIGEmJncoYSk/aChpKSYmaSE9PXcoYSk/e3R5cGU6cixpZDppLG5hbWU6dyhhKSxlbGVtZW50Om8sc2VsZWN0OmEsaHJlZjpuZXcgVVJMKGAjLyR7ImNsdXN0ZXIiPT09cj8iY2x1c3RlcnMiOiJob3N0Ij09PXI/Imhvc3RzIjoiZGF0YWNlbnRlcnMifS8ke2l9P3ZpZXc9JTIyZGV0YWlsJTIyYCx0LmxvY2F0aW9uLm9yaWdpbikuaHJlZn06ImRhdGFjZW50ZXIiIT09cj9udWxsOnt0eXBlOnIsaWQ6bnVsbCxuYW1lOncoYSksZWxlbWVudDpvLHNlbGVjdDphLGhyZWY6bnVsbH06bnVsbH1jb25zdCBuPWUuY2xvc2VzdCgiLm9yZ2FuaXphdGlvbi1pbmZvLC5yZXNvdXJjZS10b3BvLWNvbnRlbnQgLmluZnJhLWFyZWEiKTtyZXR1cm4gbj97dHlwZToib3JnYW5pemF0aW9uIixpZDoiY3VycmVudCIsbmFtZTp3KG4ucXVlcnlTZWxlY3RvcigiLm5hbWUiKXx8biksZWxlbWVudDpuLHNlbGVjdDpudWxsLGhyZWY6bmV3IFVSTCgiIy9vdmVydmlldyIsdC5sb2NhdGlvbi5vcmlnaW4pLmhyZWZ9Om51bGx9KGUsdCk7aWYobilyZXR1cm4gbjtjb25zdCByPWUuY2xvc2VzdCgiLmFudC1jb2xsYXBzZS1pdGVtLC5uaWMtaXRlbSIpLG89ZS5jbG9zZXN0KCIuZGlzay1pdGVtIiksaT1iKHQpO2lmKCJ2bSI9PT1pPy50eXBlJiYob3x8cj8ucXVlcnlTZWxlY3RvcignW2RhdGEtdGVzdGlkPSJOaWMyNEdyYWRpZW50Qmx1ZUljb24iXScpKSl7Y29uc3QgZT1vfHxyLHQ9ZS5xdWVyeVNlbGVjdG9yKCIuYW50LWNvbGxhcHNlLWhlYWRlciIpLG49RShlKSxhPXcobj8ucXVlcnlTZWxlY3RvcigiLnRpdGxlLXdyYXBwZXIgLmhlYWRlci10aXRsZSIpKTtpZihuJiZhKXJldHVybnsuLi5pLG5hbWU6dyhlLnF1ZXJ5U2VsZWN0b3IoIi5uYW1lIil8fHR8fGUpLHBhcmVudE5hbWU6YSxwYXJlbnRWbUlkOmkuaWQsaW50ZXJuYWw6bz8idm1EaXNrIjoibmljIixlbGVtZW50OmUsc2VsZWN0Om51bGx9fWNvbnN0IGE9ZS5jbG9zZXN0KCJ0cltkYXRhLXJvdy1rZXldIikscz1hPy5xdWVyeVNlbGVjdG9yKCd0ZFt1bmlxdWU9Im5hbWUiXSx0ZC5jZWxsX25hbWUsdGRbdW5pcXVlPSJwYXRoIl0sdGQuY2VsbF9wYXRoJyksbD1hP2Z1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lLmNsb3Nlc3QoInRhYmxlIikscj0iLmFudC10YWJsZS1jb250YWluZXIsLmFudC10YWJsZS13cmFwcGVyLC5hbnQtdGFibGUiLG89bj8uY2xvc2VzdChyKSxpPWUuY2xvc2VzdCgiLmRyYXdlci1jb250ZW50LWlubmVyIik7bGV0IGE9Wy4uLm4/LnF1ZXJ5U2VsZWN0b3JBbGwoInRoZWFkIHRoIil8fFtdXS5maWx0ZXIoZT0+ZS5jbG9zZXN0KCJ0YWJsZSIpPT09bik7IWEubGVuZ3RoJiZvJiYoYT1bLi4uby5xdWVyeVNlbGVjdG9yQWxsKCJ0aGVhZCB0aCIpXS5maWx0ZXIoZT0+ZS5jbG9zZXN0KHIpPT09bykpLGE9YS5maWx0ZXIoZT0+UyhlLHQpJiZlLmNsb3Nlc3QoIi5kcmF3ZXItY29udGVudC1pbm5lciIpPT09aSYmIWUuY2xvc2VzdCgnW2hpZGRlbl0sW2FyaWEtaGlkZGVuPSJ0cnVlIl0nKSk7Y29uc3Qgcz1uZXcgU2V0KGEuZmxhdE1hcChlPT5bdyhlKSxlLmdldEF0dHJpYnV0ZSgidW5pcXVlIiksLi4uWy4uLmUuY2xhc3NMaXN0XS5maWx0ZXIoZT0+ZS5zdGFydHNXaXRoKCJjZWxsXyIpKS5tYXAoZT0+ZS5zbGljZSg1KSldKS5maWx0ZXIoQm9vbGVhbikubWFwKHkpKSxsPWU9PmUuc29tZShlPT5zLmhhcyh5KGUpKSksYz1uZXcgU2V0KHguZmlsdGVyKChbLGVdKT0+ZS5ldmVyeShsKSkubWFwKChbZV0pPT5lKSksZD1sKFsi5b+r54Wn5pe26Ze0Iiwic25hcHNob3QgdGltZSIsInNuYXBzaG90X2dyb3VwIl0pO3JldHVybnt0eXBlOjE9PT1jLnNpemU/Wy4uLmNdWzBdOm51bGwsY29uZmxpY3Q6Yy5zaXplPjEsc25hcHNob3RNYXJrZXI6ZH19KGEsdCk6bnVsbCxjPWUuY2xvc2VzdCgiYVtocmVmXSIpO2lmKGMpe2NvbnN0IGU9dihjLmhyZWYsdC5sb2NhdGlvbi5vcmlnaW4pO2lmKHM/LmNvbnRhaW5zKGMpJiZsPy5jb25mbGljdClyZXR1cm4gbnVsbDtpZihzPy5jb250YWlucyhjKSYmbD8uc25hcHNob3RNYXJrZXImJiFsLnR5cGUpcmV0dXJuIG51bGw7aWYoZSYmcz8uY29udGFpbnMoYykmJmw/LnR5cGUmJihlLnR5cGUhPT1sLnR5cGV8fGUuaWQhPT1hLmdldEF0dHJpYnV0ZSgiZGF0YS1yb3cta2V5IikpKXJldHVybiBudWxsO2lmKGUmJncoYykpcmV0dXJuey4uLmUsbmFtZTp3KGMpLGVsZW1lbnQ6YyxzZWxlY3Q6Y307aWYoIXM/LmNvbnRhaW5zKGMpfHwhbD8udHlwZSlyZXR1cm4gbnVsbH1pZihhJiZzKXtjb25zdCBuPWUuY2xvc2VzdCgidGQiKSxyPW4/LmdldEF0dHJpYnV0ZSgidW5pcXVlIik7aWYoZS5jbG9zZXN0KCJidXR0b24iKSYmIVsibmFtZSIsInBhdGgiLCJfYWN0aW9uXyJdLmluY2x1ZGVzKHIpKXJldHVybiBudWxsO2NvbnN0IG89YS5nZXRBdHRyaWJ1dGUoImRhdGEtcm93LWtleSIpO2lmKCFoKG8pKXJldHVybiBudWxsO2NvbnN0IGM9Wy4uLnMucXVlcnlTZWxlY3RvckFsbCgiYVtocmVmXSIpXS5tYXAoZT0+KHsuLi52KGUuaHJlZix0LmxvY2F0aW9uLm9yaWdpbiksYTplfSkpLmZpbHRlcihlPT5lLnR5cGUmJmUuaWQ9PT1vKSxkPWZ1bmN0aW9uKGUsdCxuKXtpZihuLmNvbmZsaWN0KXJldHVybiBudWxsO2lmKGUuY2xvc2VzdCgiLmRyYXdlci1jb250ZW50LWlubmVyIikmJiJ2bSI9PT1iKHQpPy50eXBlJiZbImRpc2siLCJuaWMiXS5pbmNsdWRlcyhuLnR5cGUpKXJldHVybiBudWxsO2lmKG4udHlwZSlyZXR1cm4gbi50eXBlO2lmKG4uc25hcHNob3RNYXJrZXIpcmV0dXJuIG51bGw7aWYoZS5jbG9zZXN0KCIuZHJhd2VyLWNvbnRlbnQtaW5uZXIiKSYmInZtIj09PWIodCk/LnR5cGUpcmV0dXJuIG51bGw7bGV0IHI7dHJ5e3I9ZltKU09OLnBhcnNlKG5ldyBVUkxTZWFyY2hQYXJhbXModC5sb2NhdGlvbi5oYXNoLnNwbGl0KCI/IilbMV0pLmdldCgidmlldyIpKV19Y2F0Y2h7fXJldHVybiByfHwocj17Ii92bXMiOiJ2bSIsIi9ob3N0cyI6Imhvc3QiLCIvdm0tdm9sdW1lcyI6InZtVm9sdW1lIiwiL2Rpc2tzIjoiZGlzayJ9W3QubG9jYXRpb24uaGFzaC5zbGljZSgxKS5zcGxpdCgiPyIpWzBdLnJlcGxhY2UoL1wvJC8sIiIpXSkscnx8bnVsbH0oYSx0LGwpO2xldCB1PWwuY29uZmxpY3Q/bnVsbDoxPT09Yy5sZW5ndGg/Y1swXS50eXBlOmQ7cmV0dXJuIGwudHlwZSYmdSE9PWwudHlwZT9udWxsOnUmJncocyk/e3R5cGU6dSxpZDpvLG5hbWU6dyhzKSwuLi4idm1TbmFwc2hvdCI9PT11JiYidm0iPT09aT8udHlwZSYmYS5jbG9zZXN0KCIuZHJhd2VyLWNvbnRlbnQtaW5uZXIiKT97cGFyZW50Vm1JZDppLmlkfTp7fSxlbGVtZW50OmEsc2VsZWN0OjE9PT1jLmxlbmd0aD9jWzBdLmE6cyxocmVmOjE9PT1jLmxlbmd0aD9jWzBdLmhyZWY6bnVsbH06bnVsbH1jb25zdCBkPWUuY2xvc2VzdCgiLnRpdGxlLXdyYXBwZXIgLmhlYWRlci10aXRsZSwudGl0bGUtd3JhcHBlciAudGl0bGUtY29udGVudCwudGl0bGUtd3JhcHBlciAudGl0bGUtdGV4dCIpLHU9ZD8uY2xvc2VzdCgiLmZyYW1lIik/aTp2KHQubG9jYXRpb24uaHJlZix0LmxvY2F0aW9uLm9yaWdpbiwhMCk7cmV0dXJuIGQmJnUmJncoZCk/ey4uLnUsbmFtZTp3KGQpLGVsZW1lbnQ6ZCxzZWxlY3Q6bnVsbH06bnVsbH1mdW5jdGlvbiBTKGUsdCl7aWYoIWU/LmlzQ29ubmVjdGVkfHxlLmNsb3Nlc3QoJ1toaWRkZW5dLFthcmlhLWhpZGRlbj0idHJ1ZSJdLC5hbnQtZHJvcGRvd24taGlkZGVuLC5fX2hpZGRlbicpKXJldHVybiExO2NvbnN0IG49dC5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiJub25lIiE9PW4uZGlzcGxheSYmImhpZGRlbiIhPT1uLnZpc2liaWxpdHkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg+MH1jb25zdCBDPW5ldyBTZXQoWyLmm7TlpJoiLCLmm7TlpJrmk43kvZwiLCLmm7TlpJrpgInpobkiLCJtb3JlIiwibW9yZSBhY3Rpb25zIiwibW9yZSBvcHRpb25zIiwi4ouvIiwi4oCmIiwiLi4uIl0pLFY9J1tkaXNhYmxlZF0sW2FyaWEtZGlzYWJsZWQ9InRydWUiXSxbaW5lcnRdLC5hbnQtZHJvcGRvd24tZGlzYWJsZWQsLmFudC1idG4tZGlzYWJsZWQsLmlzLWRpc2FibGVkLC5hbnQtYnRuLWxvYWRpbmcnLE49ZT0+Wy4uLmUucXVlcnlTZWxlY3RvckFsbCgndGRbdW5pcXVlPSJuYW1lIl0sdGRbdW5pcXVlPSJwYXRoIl0sdGQuY2VsbF9uYW1lLHRkLmNlbGxfcGF0aCcpXS5maW5kKHQ9PnQuY2xvc2VzdCgidHIiKT09PWUpO2Z1bmN0aW9uIFQoZSx0LG49ITEpe2lmKCFTKGUsdCl8fCFuJiZlLmNsb3Nlc3QoVikpcmV0dXJuITE7Y29uc3Qgcj1bZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKSxlLmdldEF0dHJpYnV0ZSgidGl0bGUiKSxlLnRleHRDb250ZW50XS5tYXAoZT0+KGV8fCIiKS50cmltKCkudG9Mb3dlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiByLmxlbmd0aD9yLmV2ZXJ5KGU9PkMuaGFzKGUpKTpCb29sZWFuKGUucXVlcnlTZWxlY3RvcignW2RhdGEtdGVzdGlkPSJNb3JlRWxsaXBzaXMzMTZCb2xkQmx1ZUljb24iXSxpbWdbYWx0PSIxLW1vcmUtZWxsaXBzaXMtMy0xNi1ib2xkLWJsdWUiXScpKX1mdW5jdGlvbiBJKGUsdCl7aWYoIWU/LmlkfHxlLmludGVybmFsKXJldHVybiExO2NvbnN0IG49Wy4uLnQuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgidHJbZGF0YS1yb3cta2V5XSIpXS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoImRhdGEtcm93LWtleSIpPT09ZS5pZCYmUyhuLHQpKTtpZigxIT09bi5sZW5ndGgpcmV0dXJuITE7Y29uc3Qgcj1uWzBdLG89TihyKTtpZighb3x8IWcoQShvLHQpLGUpKXJldHVybiExO2NvbnN0IGk9Wy4uLnIucXVlcnlTZWxlY3RvckFsbCgndGRbdW5pcXVlPSJfYWN0aW9uXyJdIC5tZW51LWJ1dHRvbi5hbnQtZHJvcGRvd24tdHJpZ2dlcicpXS5maWx0ZXIoZT0+ZS5jbG9zZXN0KCJ0ciIpPT09ciYmVChlLHQsITApKTtyZXR1cm4hKDEhPT1pLmxlbmd0aHx8IVQoaVswXSx0KSkmJmlbMF19ZnVuY3Rpb24gUChlLHQpe2ZvcihsZXQgbj1lO247bj1uLnBhcmVudEVsZW1lbnQpe2lmKG4uaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8InRydWUiPT09bi5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpcmV0dXJuITE7Y29uc3QgZT10LmdldENvbXB1dGVkU3R5bGUobik7aWYoIm5vbmUiPT09ZS5kaXNwbGF5fHxbImhpZGRlbiIsImNvbGxhcHNlIl0uaW5jbHVkZXMoZS52aXNpYmlsaXR5KSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBSKGUsdCl7Y29uc3Qgbj1lLmRvY3VtZW50LHI9dD8uY2xvc2VzdD8uKCIuZHJhd2VyLWNvbnRlbnQtaW5uZXIiKTtpZihyKXJldHVybiByLm93bmVyRG9jdW1lbnQ9PT1uJiZyLmlzQ29ubmVjdGVkJiZQKHIsZSk/cjpudWxsO2NvbnN0IG89Wy4uLm4ucXVlcnlTZWxlY3RvckFsbCgiLmRyYXdlci1jb250ZW50LWlubmVyIildLmZpbHRlcih0PT5QKHQsZSkpO3JldHVybiBvLmxlbmd0aD4xP251bGw6b1swXXx8bi5ib2R5fWNvbnN0IE89e29yZ2FuaXphdGlvbjpbIkNsb3VkVG93ZXIg5a6e5L6LIiwiQ2xvdWRUb3dlciBpbnN0YW5jZSJdLGRhdGFjZW50ZXI6WyLmlbDmja7kuK3lv4MiLCJEYXRhY2VudGVyIl0sY2x1c3RlcjpbIumbhue+pCIsIkNsdXN0ZXIiXSxob3N0Olsi5Li75py6IiwiSG9zdCJdLHZtOlsi6Jma5ouf5py6IiwiVmlydHVhbCBtYWNoaW5lIl0sdm1Wb2x1bWU6WyLomZrmi5/ljbciLCJWaXJ0dWFsIHZvbHVtZSJdLGRpc2s6WyLnoaznm5giLCJEaXNrIl19LE09J1xuW2RhdGEtcml2ZXRpbi1jb250ZXh0LW1lbnVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MjE0NzQ4MzAwMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjgwcHg7bWF4LXdpZHRoOmNhbGMoMTAwdncgLSAxNnB4KTttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSAxNnB4KTtvdmVyZmxvdzphdXRvO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMTQyNjQwO2JvcmRlcjoxcHggc29saWQgI2RkZTVlZjtib3JkZXItcmFkaXVzOjhweDtib3gtc2hhZG93OjAgOHB4IDMwcHggIzE4MmI0YzMwO3BhZGRpbmc6NnB4O2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIiwiTWljcm9zb2Z0IFlhSGVpIixzYW5zLXNlcmlmfVxuW2RhdGEtcml2ZXRpbi1jb250ZXh0LW1lbnVdIC5ydmNtLWhlYWRpbmd7cGFkZGluZzo5cHggMTBweCAxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlOWVkZjM7bWFyZ2luLWJvdHRvbTo1cHg7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtmb250LXdlaWdodDo2MDB9XG5bZGF0YS1yaXZldGluLWNvbnRleHQtbWVudV0gLnJ2Y20ta2luZHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM3NDgzOWE7Zm9udC13ZWlnaHQ6NDAwO21hcmdpbi1ib3R0b206MnB4fVxuW2RhdGEtcml2ZXRpbi1jb250ZXh0LW1lbnVdIGJ1dHRvbntmb250OmluaGVyaXQ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtjb2xvcjppbmhlcml0O2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyfVxuW2RhdGEtcml2ZXRpbi1jb250ZXh0LW1lbnVdIGJ1dHRvbjpob3ZlcixbZGF0YS1yaXZldGluLWNvbnRleHQtbWVudV0gYnV0dG9uOmZvY3VzLXZpc2libGV7YmFja2dyb3VuZDojZWFmNGZmO2NvbG9yOiMwNjZjZGI7b3V0bGluZTpub25lfVxuW2RhdGEtcml2ZXRpbi1jb250ZXh0LW1lbnVdIGJ1dHRvbjpkaXNhYmxlZHtjb2xvcjojYTRhZmJmO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQ6bm9uZX1cbltkYXRhLXJpdmV0aW4tY29udGV4dC1tZW51XSBidXR0b24ucnZjbS1kYW5nZXJ7Y29sb3I6I2Q2MmM0M31cbltkYXRhLXJpdmV0aW4tY29udGV4dC1tZW51XSAucnZjbS1nbHlwaHt3aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2YTg0YTM7Zm9udC1zaXplOjE2cHh9XG5bZGF0YS1yaXZldGluLWNvbnRleHQtbWVudV0gLnJ2Y20tc2VwYXJhdG9ye2hlaWdodDoxcHg7YmFja2dyb3VuZDojZTllZGYzO21hcmdpbjo1cHggNHB4fVxuW2RhdGEtcml2ZXRpbi1jb250ZXh0LW1lbnVdIC5ydmNtLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izc0ODM5YTtwYWRkaW5nOjhweCAxMHB4fVxuJztmdW5jdGlvbiBMKHt3aW46ZSxzdG9yZTp0LGhpc3Rvcnk6bixnZXRMb2NhbGU6cj0oKT0+InpoLUNOIixvbkVycm9yOm89KCk9Pnt9LG9uUmVzb3VyY2VNZW51Omk9KCk9PiExLG9uRGlzbWlzczphPSgpPT57fX0pe2NvbnN0IHM9ZS5kb2N1bWVudCxsPXMuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsLnRleHRDb250ZW50PU0scy5oZWFkLmFwcGVuZChsKTtsZXQgYz1udWxsLGQ9bnVsbCx1PSExLG09bnVsbCxwPW51bGwsZj1udWxsO2NvbnN0IGg9bmV3IFdlYWtTZXQ7bGV0IHY9MDtjb25zdCB5PSgpPT57Y29uc3QgdD1iKGUpO3JldHVybiB0P2Ake3QudHlwZX06JHt0LmlkfWA6IiJ9O2xldCBrPXkoKSx4PSExO2NvbnN0IEM9KGUsdCk9PiJlbi1VUyI9PT1yKCk/dDplO2Z1bmN0aW9uIFYodD0hMSl7YSgpLHA9bnVsbCxudWxsIT09ZiYmZS5jbGVhclRpbWVvdXQoZiksZj1udWxsLGM/LnJlbW92ZSgpLGM9bnVsbCxkPW51bGwsdCYmbT8uaXNDb25uZWN0ZWQmJm0uZm9jdXM/LigpfWZ1bmN0aW9uIE4oKXtvKEMoIuWPs+mUruiPnOWNleaTjeS9nOacquWujOaIkO+8jOivt+S7jiBDbG91ZFRvd2VyIOWOn+eUn+eVjOmdoumHjeivleOAgiIsIlRoZSBhY3Rpb24gY291bGQgbm90IGJlIGNvbXBsZXRlZC4gUmV0cnkgaW4gdGhlIG5hdGl2ZSBDbG91ZFRvd2VyIGludGVyZmFjZS4iKSl9ZnVuY3Rpb24gVChlKXtjb25zdCBuPXQuZ2V0KCk7cmV0dXJuIHQuc3RhdHVzKCkubG9hZGVkJiZuLmVuYWJsZWQmJm4ucmVzb3VyY2VUeXBlcy5pbmNsdWRlcyhlLnR5cGUpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIXUmJlQoZSkmJmUuZWxlbWVudC5pc0Nvbm5lY3RlZH1hc3luYyBmdW5jdGlvbiBMKHQpe3RyeXtpZighZS5uYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQpdGhyb3cgbmV3IEVycm9yKCJDTElQQk9BUkRfVU5BVkFJTEFCTEUiKTthd2FpdCBlLm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHQpfWNhdGNoe04oKX19ZnVuY3Rpb24gRCh0KXtnKHQsYihlKSl8fChVKCksdC5zZWxlY3Q/LmlzQ29ubmVjdGVkJiZTKHQuc2VsZWN0LGUpP3Quc2VsZWN0LmNsaWNrKCk6Im9yZ2FuaXphdGlvbiI9PT10LnR5cGU/ZS5sb2NhdGlvbi5oYXNoPSIvb3ZlcnZpZXciOnQuaHJlZiYmKGUubG9jYXRpb24uaGFzaD1uZXcgVVJMKHQuaHJlZikuaGFzaCksaz15KCkpfWZ1bmN0aW9uIFUoKXt2Kys7Zm9yKGNvbnN0IGUgb2Ygcy5xdWVyeVNlbGVjdG9yQWxsKCIuZnJhbWUgLnRvb2xiYXIgYnV0dG9uLC5mcmFtZSAudG9vbGJhciAubW9yZS1pY29uLC5kcmF3ZXItY29udGVudC1pbm5lciAuZGV0YWlsLXRhYnMgLnRhYi1pdGVtLC5mcmFtZSAuZGV0YWlsLXRhYnMgLnRhYi1pdGVtLC5hY3Rpb25zLXdyYXBwZXIgYnV0dG9uLC5hY3Rpb25zLXdyYXBwZXIgLm1vcmUtaWNvbiwuZHJhd2VyLWNvbnRlbnQtaW5uZXIgLmFudC1jb2xsYXBzZS1oZWFkZXIsLmRyYXdlci1jb250ZW50LWlubmVyIGJ1dHRvbi5lZGl0LWljb24sLmZyYW1lIC5hbnQtY29sbGFwc2UtaGVhZGVyLC5mcmFtZSBidXR0b24uZWRpdC1pY29uIikpaC5hZGQoZSl9ZnVuY3Rpb24gcSgpe2NvbnN0IGU9eSgpO2UhPT1rJiYoVSgpLGs9ZSl9Y29uc3QgQj10PT4ocSgpLGZ1bmN0aW9uKGUsdCl7aWYoIWcoZSxiKHQpKSlyZXR1cm5bXTtpZihlLmludGVybmFsKXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJ2bSIhPT1lLnR5cGV8fCFbInZtRGlzayIsIm5pYyJdLmluY2x1ZGVzKGUuaW50ZXJuYWwpKXJldHVybltdO2lmKCFlLmVsZW1lbnQuaXNDb25uZWN0ZWR8fCFTKGUuZWxlbWVudCx0KSlyZXR1cm5bXTtjb25zdCBuPUUoZS5lbGVtZW50KTtpZighbnx8dyhuLnF1ZXJ5U2VsZWN0b3IoIi50aXRsZS13cmFwcGVyIC5oZWFkZXItdGl0bGUiKSkhPT1lLnBhcmVudE5hbWUpcmV0dXJuW107Y29uc3Qgcj1bXSxvPWUuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuYW50LWNvbGxhcHNlLWhlYWRlciIpO28mJlMobyx0KSYmWyJ0cnVlIiwiZmFsc2UiXS5pbmNsdWRlcyhvLmdldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpKSYmci5wdXNoKHtidXR0b246byxraW5kOiJpbnRlcm5hbC10b2dnbGUiLG93bmVyRnJhbWU6bixsYWJlbDoidHJ1ZSI9PT1vLmdldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpPyLmlLbotbfor6bmg4UiOiLlsZXlvIDor6bmg4UiLGVuZ2xpc2g6InRydWUiPT09by5nZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKT8iQ29sbGFwc2UgZGV0YWlscyI6IkV4cGFuZCBkZXRhaWxzIixkaXNhYmxlZDpCb29sZWFuKG8uY2xvc2VzdCgnW2Rpc2FibGVkXSxbYXJpYS1kaXNhYmxlZD0idHJ1ZSJdLFtpbmVydF0sLmFudC1jb2xsYXBzZS1pdGVtLWRpc2FibGVkJykpfSk7bGV0IGk9ZS5lbGVtZW50O2NvbnN0IGE9ZS5lbGVtZW50LmNsb3Nlc3QoIi5kcmF3ZXItY29udGVudC1pbm5lciIpfHxuO2ZvcihsZXQgbj0wO248NiYmaSYmaSE9PWE7bisrLGk9aS5wYXJlbnRFbGVtZW50KXtjb25zdCBuPWkuZmlyc3RFbGVtZW50Q2hpbGQ7aWYoIW58fG4uY29udGFpbnMoZS5lbGVtZW50KXx8IVsuLi5pLmNoaWxkcmVuXS5zbGljZSgxKS5zb21lKHQ9PnQuY29udGFpbnMoZS5lbGVtZW50KSkpY29udGludWU7Y29uc3Qgbz1bLi4ubi5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24uZWRpdC1pY29uIildO2lmKDE9PT1vLmxlbmd0aCl7Y29uc3QgaT1vWzBdLGE9dyhuKS5yZXBsYWNlKHcoaSksIiIpLnRyaW0oKTtpZighKCJ2bURpc2siPT09ZS5pbnRlcm5hbD9bIuejgeebmCIsIkRpc2tzIl06WyLnvZHnu5zorr7lpIciLCJOZXR3b3JrIGRldmljZXMiLCJOZXR3b3JrIGFkYXB0ZXJzIl0pLmluY2x1ZGVzKGEpKWNvbnRpbnVlO1MoaSx0KSYmci5wdXNoKHtidXR0b246aSxsYWJlbDoidm1EaXNrIj09PWUuaW50ZXJuYWw/Iue8lui+keejgeebmOmFjee9ruKApiI6Iue8lui+kee9kee7nOmFjee9ruKApiIsZW5nbGlzaDoidm1EaXNrIj09PWUuaW50ZXJuYWw/IkVkaXQgZGlzayBjb25maWd1cmF0aW9u4oCmIjoiRWRpdCBuZXR3b3JrIGNvbmZpZ3VyYXRpb27igKYiLGRpc2FibGVkOmkuZGlzYWJsZWR8fCJ0cnVlIj09PWkuZ2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIil9KTticmVha319cmV0dXJuIHJ9KGUsdCk7Y29uc3Qgbj1bLi4udC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZnJhbWUiKV0uZmlsdGVyKG49Pntjb25zdCByPW4ucXVlcnlTZWxlY3RvcigiLnRpdGxlLXdyYXBwZXIgLmhlYWRlci10aXRsZSIpO3JldHVybiByJiZ3KHIpPT09ZS5uYW1lJiZTKG4sdCl9KTtsZXQgcj0xPT09bi5sZW5ndGg/blswXTpudWxsLG89cj8ucXVlcnlTZWxlY3RvcigiLnRvb2xiYXIiKTtpZighciYmIW5ldyBVUkxTZWFyY2hQYXJhbXModC5sb2NhdGlvbi5oYXNoLnNwbGl0KCI/IilbMV0pLmhhcygic2lkZWJhciIpKXtjb25zdCBuPVsuLi50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi50aXRsZS13cmFwcGVyIC50aXRsZS1jb250ZW50LC50aXRsZS13cmFwcGVyIC50aXRsZS10ZXh0IildLmZpbHRlcihuPT53KG4pPT09ZS5uYW1lJiZTKG4sdCkpOzE9PT1uLmxlbmd0aCYmKHI9blswXS5jbG9zZXN0KCIudGl0bGUtd3JhcHBlciIpLnBhcmVudEVsZW1lbnQsbz1yLnF1ZXJ5U2VsZWN0b3IoIi5hY3Rpb25zLXdyYXBwZXIiKSl9aWYoIW8pcmV0dXJuW107Y29uc3QgaT17UmVzdGFydE5ldzE2R3JhZGllbnRHcmF5SWNvbjpbIumHjeWQryIsIlJlc3RhcnQiXSxTdXNwZW5kZWRQYXVzZTE2R3JhZGllbnRPcmFuZ2VJY29uOlsi5pqC5YGcIiwiU3VzcGVuZCJdLE1vcmVFbGxpcHNpczMxNkJvbGRCbHVlSWNvbjpbIuabtOWkmuaTjeS9nOKApiIsIk1vcmUgYWN0aW9uc+KApiJdLE1vcmVFbGxpcHNpczMxNkJvbGRTZWNvbmRhcnlJY29uOlsi5pu05aSa5pON5L2c4oCmIiwiTW9yZSBhY3Rpb25z4oCmIl19LGE9Wy4uLm8ucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uLC5tb3JlLWljb24uYW50LWRyb3Bkb3duLXRyaWdnZXIiKV0uZmlsdGVyKGU9PlMoZSx0KSkuc2xpY2UoMCwzMCkuZmxhdE1hcChlPT57Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXRlc3RpZF0iKT8uZ2V0QXR0cmlidXRlKCJkYXRhLXRlc3RpZCIpLG49ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8ZS5nZXRBdHRyaWJ1dGUoInRpdGxlIil8fHcoZSkscj1pW3RdO3JldHVybiBufHxyP1t7YnV0dG9uOmUsbGFiZWw6bnx8clswXSxlbmdsaXNoOm4/bnVsbDpyWzFdLGRpc2FibGVkOmUuZGlzYWJsZWR8fCJ0cnVlIj09PWUuZ2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIil8fEJvb2xlYW4oZS5jbG9zZXN0KCdbYXJpYS1kaXNhYmxlZD0idHJ1ZSJdJykpLGRhbmdlcjplLmNsYXNzTGlzdC5jb250YWlucygiYW50LWJ0bi1kYW5nZXJvdXMiKXx8L14o5Yig6ZmkfOWNuOi9vXznp7voh7Plm57mlLbnq5l8RGVsZXRlfFVubW91bnR8TW92ZSB0byByZWN5Y2xlIGJpbikkL2kudGVzdChuKX1dOltdfSkscz1yLmNsb3Nlc3QoIi5kcmF3ZXItY29udGVudC1pbm5lciIpfHxyO2Zvcihjb25zdCBlIG9mIHMucXVlcnlTZWxlY3RvckFsbCgiLmRldGFpbC10YWJzIC50YWItaXRlbSIpKXcoZSkmJlMoZSx0KSYmYS5wdXNoKHtidXR0b246ZSxsYWJlbDp3KGUpLGRpc2FibGVkOiJ0cnVlIj09PWUuZ2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIiksZGFuZ2VyOiExfSk7cmV0dXJuIGF9KHQsZSkuZmlsdGVyKGU9PiJpbnRlcm5hbC10b2dnbGUiPT09ZS5raW5kfHx4JiYhaC5oYXMoZS5idXR0b24pKSk7ZnVuY3Rpb24gXyhuLG8saSxhPXt9KXtpZighUChuKSYmKCFhLmxvYWRpbmd8fHV8fCFUKG4pfHwhcCkpcmV0dXJuIHZvaWQgVigpO2M/LnJlbW92ZSgpLGM9cy5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLnNldEF0dHJpYnV0ZSgiZGF0YS1yaXZldGluLWNvbnRleHQtbWVudSIsIiIpLGMuc2V0QXR0cmlidXRlKCJyb2xlIiwibWVudSIpO2NvbnN0IGw9YyxtPWUubG9jYXRpb24uaHJlZixoPXY7Yy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+ZS5zdG9wUHJvcGFnYXRpb24oKSksYy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57ZS5zdG9wUHJvcGFnYXRpb24oKSxHKGUpfSksYy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLEMoIui1hOa6kOWPs+mUruiPnOWNlSIsIlJlc291cmNlIGNvbnRleHQgbWVudSIpKSxjLmRhdGFzZXQuY29udGV4dEhyZWY9ZS5sb2NhdGlvbi5ocmVmLGQ9bjtjb25zdCB3PXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7dy5jbGFzc05hbWU9InJ2Y20taGVhZGluZyI7Y29uc3QgeT1zLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmdW5jdGlvbiBrKGUsdCxyLG89ITEsaT0hMSl7Y29uc3QgYT1zLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO2EudHlwZT0iYnV0dG9uIixhLnNldEF0dHJpYnV0ZSgicm9sZSIsIm1lbnVpdGVtIiksYS5kaXNhYmxlZD1vLGkmJihhLmNsYXNzTmFtZT0icnZjbS1kYW5nZXIiKTtjb25zdCBkPXMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2QuY2xhc3NOYW1lPSJydmNtLWdseXBoIixkLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksZC50ZXh0Q29udGVudD10LGEuYXBwZW5kKGQscy5jcmVhdGVUZXh0Tm9kZShlKSksYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntpZihjPT09bClpZihQKG4pKXtWKCk7dHJ5e2NvbnN0IGU9cigpO2U/LmNhdGNoPy4oTil9Y2F0Y2h7TigpfX1lbHNlIFYoKX0pLGMuYXBwZW5kKGEpfXkuY2xhc3NOYW1lPSJydmNtLWtpbmQiLHkudGV4dENvbnRlbnQ9bi5pbnRlcm5hbD9DKCJ2bURpc2siPT09bi5pbnRlcm5hbD8i6Jma5ouf56OB55uYIjoi572R5Y2hIiwidm1EaXNrIj09PW4uaW50ZXJuYWw/IlZpcnR1YWwgZGlzayI6Ik5ldHdvcmsgYWRhcHRlciIpOkMoLi4uT1tuLnR5cGVdfHxbIui1hOa6kCIsIlJlc291cmNlIl0pLHcuYXBwZW5kKHkscy5jcmVhdGVUZXh0Tm9kZShuLm5hbWUpKSxjLmFwcGVuZCh3KSxrKEMoIuaJk+W8gOivpuaDhSIsIk9wZW4gZGV0YWlscyIpLCLihpciLCgpPT5EKG4pLCFuLnNlbGVjdCYmIW4uaHJlZiYmIm9yZ2FuaXphdGlvbiIhPT1uLnR5cGUmJiFnKG4sYihlKSkpLGsoQygi5aSN5Yi25ZCN56ewIiwiQ29weSBuYW1lIiksIuKniSIsKCk9Pkwobi5uYW1lKSksbi5pbnRlcm5hbHx8ayhDKCLlpI3liLblr7nosaEgSUQiLCJDb3B5IHJlc291cmNlIElEIiksIiMiLCgpPT5MKG4uaWQpLCJvcmdhbml6YXRpb24iPT09bi50eXBlfHwhbi5pZCk7Y29uc3QgRT1nKG4sYihlKSk/ZS5sb2NhdGlvbi5ocmVmOm4uaHJlZjtFJiYoayhDKCLlnKjmlrDmoIfnrb7pobXmiZPlvIAiLCJPcGVuIGluIG5ldyB0YWIiKSwi4oaXIiwoKT0+ZS5vcGVuKEUsIl9ibGFuayIsIm5vb3BlbmVyLG5vcmVmZXJyZXIiKSksayhDKCLlpI3liLbpk77mjqUiLCJDb3B5IGxpbmsiKSwi4oaXIiwoKT0+TChFKSkpO2NvbnN0IEk9dC5nZXQoKS5uYXRpdmVBY3Rpb25zP0Iobik6W107aWYoSS5sZW5ndGgpe2NvbnN0IHQ9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0icnZjbS1zZXBhcmF0b3IiLHQuc2V0QXR0cmlidXRlKCJyb2xlIiwic2VwYXJhdG9yIiksYy5hcHBlbmQodCk7Zm9yKGNvbnN0IHQgb2YgSSlrKCJlbi1VUyI9PT1yKCkmJnQuZW5nbGlzaD90LmVuZ2xpc2g6dC5sYWJlbCwi4oC6IiwoKT0+e2NvbnN0IHI9QihuKS5maW5kKGU9PmUuYnV0dG9uPT09dC5idXR0b24mJmUubGFiZWw9PT10LmxhYmVsKTtpZihyJiYhci5kaXNhYmxlZCl7aWYoImludGVybmFsLXRvZ2dsZSI9PT10LmtpbmQpe2NvbnN0IG89QShuLmVsZW1lbnQsZSk7aWYoZS5sb2NhdGlvbi5ocmVmIT09bXx8diE9PWh8fCFnKG8sbil8fG8uZWxlbWVudCE9PW4uZWxlbWVudHx8by5pbnRlcm5hbCE9PW4uaW50ZXJuYWx8fG8ubmFtZSE9PW4ubmFtZXx8by5wYXJlbnROYW1lIT09bi5wYXJlbnROYW1lfHxyLm93bmVyRnJhbWUhPT10Lm93bmVyRnJhbWUpcmV0dXJuIHZvaWQgTigpfXIuYnV0dG9uLmNsaWNrKCl9ZWxzZSBOKCl9LHQuZGlzYWJsZWQsdC5kYW5nZXIpfWVsc2UgaWYodC5nZXQoKS5uYXRpdmVBY3Rpb25zKXt4JiZuLmlkJiYib3JnYW5pemF0aW9uIiE9PW4udHlwZSYmIW4uaW50ZXJuYWwmJihuLnNlbGVjdHx8bi5ocmVmKSYmayhDKCLmmL7npLrlj6/nlKjmk43kvZzigKYiLCJMb2FkIGF2YWlsYWJsZSBhY3Rpb25z4oCmIiksIuKAuiIsKCk9PmZ1bmN0aW9uKHQsbixyKXtjb25zdCBvPXtyZXNvdXJjZTp0LHg6bix5OnIsaW5pdGlhbEhyZWY6ZS5sb2NhdGlvbi5ocmVmLGRlYWRsaW5lOkRhdGUubm93KCkrNWUzfTtwPW87dHJ5e0QodCl9Y2F0Y2h7cmV0dXJuIFYoKSx2b2lkIE4oKX1fKHQsbixyLHtsb2FkaW5nOiEwfSksZj1lLnNldFRpbWVvdXQoZnVuY3Rpb24gaSgpe2lmKGY9bnVsbCx1fHxwIT09bylyZXR1cm47aWYoIVQodCl8fGUubG9jYXRpb24uaHJlZiE9PW8uaW5pdGlhbEhyZWYmJiFnKHQsYihlKSkpcmV0dXJuIHZvaWQgVigpO2NvbnN0IGE9ZnVuY3Rpb24odCl7aWYodC5lbGVtZW50LmlzQ29ubmVjdGVkKXJldHVybiB0O2lmKCFnKHQsYihlKSkpcmV0dXJuIG51bGw7Y29uc3Qgbj1bLi4ucy5xdWVyeVNlbGVjdG9yQWxsKCIuZnJhbWUgLnRpdGxlLXdyYXBwZXIgLmhlYWRlci10aXRsZSwudGl0bGUtd3JhcHBlciAudGl0bGUtY29udGVudCwudGl0bGUtd3JhcHBlciAudGl0bGUtdGV4dCIpXS5maWx0ZXIobj0+KG4udGV4dENvbnRlbnR8fCIiKS50cmltKCk9PT10Lm5hbWUmJlMobixlKSk7cmV0dXJuIDE9PT1uLmxlbmd0aD97Li4udCxlbGVtZW50Om5bMF0sc2VsZWN0Om51bGx9Om51bGx9KHQpO3JldHVybiBhJiZnKGEsYihlKSkmJkIoYSkubGVuZ3RoPyhwPW51bGwsdm9pZCBfKGEsbixyKSk6RGF0ZS5ub3coKT49by5kZWFkbGluZT8ocD1udWxsLHZvaWQoYT9fKGEsbixyLHt1bmF2YWlsYWJsZTohMH0pOlYoKSkpOnZvaWQoZj1lLnNldFRpbWVvdXQoaSwxMDApKX0sMCl9KG4sbyxpKSxCb29sZWFuKGEubG9hZGluZykpO2NvbnN0IHQ9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0icnZjbS1oaW50Iix0LnNldEF0dHJpYnV0ZSgicm9sZSIsInN0YXR1cyIpLHQudGV4dENvbnRlbnQ9eD9hLmxvYWRpbmc/Qygi5q2j5Zyo6K+75Y+W5q2k5a+56LGh55qE5Y+v55So5pON5L2c4oCmIiwiTG9hZGluZyBhdmFpbGFibGUgYWN0aW9ucyBmb3IgdGhpcyByZXNvdXJjZeKApiIpOmEudW5hdmFpbGFibGU/Qygi5b2T5YmN5rKh5pyJ5Y+v56Gu6K6k55qE5pON5L2c5YWl5Y+j77yM6K+35L2/55So5Y6f55Sf6K+m5oOF6aG16Z2i44CCIiwiTm8gdmVyaWZpZWQgYWN0aW9ucyBhcmUgYXZhaWxhYmxlLiBVc2UgdGhlIG5hdGl2ZSBkZXRhaWwgcGFnZS4iKTpDKCLpgInmi6nigJzmmL7npLrlj6/nlKjmk43kvZzigJ3kvJrlrprkvY3mraTlr7nosaHvvIzlho3or7vlj5bljp/nlJ/mk43kvZzjgIIiLCJMb2FkIGF2YWlsYWJsZSBhY3Rpb25zIG9wZW5zIHRoaXMgcmVzb3VyY2XigJlzIGRldGFpbHMgYW5kIHJlYWRzIGl0cyBuYXRpdmUgY29udHJvbHMuIik6Qygi5peg5rOV56Gu6K6k5a6/5Li75a+86Iiq54q25oCB77yM6K+35L2/55So5Y6f55Sf6K+m5oOF6aG16Z2i5pON5L2c44CCIiwiSG9zdCBuYXZpZ2F0aW9uIGNhbm5vdCBiZSB2ZXJpZmllZC4gVXNlIHRoZSBuYXRpdmUgZGV0YWlsIHBhZ2UgZm9yIGFjdGlvbnMuIiksYy5hcHBlbmQodCl9Y29uc3QgTT1SKGUsbi5lbGVtZW50KTtpZighTSlyZXR1cm4gdm9pZCBWKCk7TSE9PXMuYm9keSYmKGMuc3R5bGUubGVmdD0iMHB4IixjLnN0eWxlLnRvcD0iMHB4IiksTS5hcHBlbmQoYyk7Y29uc3QgVT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHE9ZnVuY3Rpb24oZSx0LG4scixvLGkpe3JldHVybnt4Ok1hdGgubWF4KDgsTWF0aC5taW4oZSxvLW4tOCkpLHk6TWF0aC5tYXgoOCxNYXRoLm1pbih0LGktci04KSl9fShvLGksVS53aWR0aCxVLmhlaWdodCxlLmlubmVyV2lkdGgsZS5pbm5lckhlaWdodCk7Yy5zdHlsZS5sZWZ0PXEueC0oTT09PXMuYm9keT8wOlUubGVmdCkrInB4IixjLnN0eWxlLnRvcD1xLnktKE09PT1zLmJvZHk/MDpVLnRvcCkrInB4IixjLnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbjpub3QoOmRpc2FibGVkKSIpPy5mb2N1cygpfWZ1bmN0aW9uIHoobixyPSExKXtpZihuLmRlZmF1bHRQcmV2ZW50ZWR8fCFyJiZuLnNoaWZ0S2V5KXJldHVybjtxKCk7Y29uc3Qgbz1BKG4udGFyZ2V0LGUpO2lmKCFvfHwhVChvKSlyZXR1cm4gdm9pZCBWKCk7bi5wcmV2ZW50RGVmYXVsdCgpLFYoKSxtPXMuYWN0aXZlRWxlbWVudDtjb25zdCBhPW8uZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPXI/YS5sZWZ0KzE2Om4uY2xpZW50WCxjPXI/YS5ib3R0b206bi5jbGllbnRZO2kobyxsLGMpfHx0LmdldCgpLm5hdGl2ZUFjdGlvbnMmJmZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1JKGUsdCk7cmV0dXJuISFuJiYobi5jbGljaygpLCEwKX0obyxlKXx8XyhvLGwsYyl9ZnVuY3Rpb24gJCh0KXtpZihjPy5jb250YWlucyh0LnRhcmdldCkpcmV0dXJuO3EoKTtjb25zdCBuPUEodC50YXJnZXQsZSk7IW4/LmlkfHxuLmludGVybmFsfHxnKG4sYihlKSl8fFUoKSxjJiZWKCl9ZnVuY3Rpb24gRyhlKXtpZigiQ29udGV4dE1lbnUiPT09ZS5rZXl8fGUuc2hpZnRLZXkmJiJGMTAiPT09ZS5rZXkpeihlLCEwKTtlbHNlIGlmKGMpe2lmKCJFc2NhcGUiPT09ZS5rZXkpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIFYoITApO2lmKCJUYWIiIT09ZS5rZXkpe2lmKFsiQXJyb3dEb3duIiwiQXJyb3dVcCIsIkhvbWUiLCJFbmQiXS5pbmNsdWRlcyhlLmtleSkpe2UucHJldmVudERlZmF1bHQoKTtjb25zdCB0PVsuLi5jLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbjpub3QoOmRpc2FibGVkKSIpXSxuPXQuaW5kZXhPZihzLmFjdGl2ZUVsZW1lbnQpLHI9IkhvbWUiPT09ZS5rZXk/MDoiRW5kIj09PWUua2V5P3QubGVuZ3RoLTE6KG4rKCJBcnJvd0Rvd24iPT09ZS5rZXk/MTotMSkrdC5sZW5ndGgpJXQubGVuZ3RoO3Rbcl0/LmZvY3VzKCl9fWVsc2UgVigpfX1mdW5jdGlvbiBqKGUpe2MmJiFjLmNvbnRhaW5zKGUudGFyZ2V0KSYmVigpfWNvbnN0IEY9ZT0+eihlKSxIPSgpPT5WKCksVz0oKT0+e1UoKSxrPXkoKSxwJiZnKHAucmVzb3VyY2UsYihlKSl8fFYoKX07cy5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsRikscy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsJCwhMCkscy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixHKSxzLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsaiwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEgpLGUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsSCksZS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixXKSxlLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixXKTtjb25zdCBKPXQuc3Vic2NyaWJlKCgpPT57IWN8fFAoZCkmJnQuZ2V0KCkubmF0aXZlQWN0aW9uc3x8VigpfSksSz1uZXcgZS5NdXRhdGlvbk9ic2VydmVyKCgpPT57cSgpLHA/VChwLnJlc291cmNlKSYmKGUubG9jYXRpb24uaHJlZj09PXAuaW5pdGlhbEhyZWZ8fGcocC5yZXNvdXJjZSxiKGUpKSl8fFYoKTpjJiYoIVAoZCl8fGMuZGF0YXNldC5jb250ZXh0SHJlZiYmYy5kYXRhc2V0LmNvbnRleHRIcmVmIT09ZS5sb2NhdGlvbi5ocmVmKSYmVigpfSk7Sy5vYnNlcnZlKHMuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxVKCk7Y29uc3QgWj0iZnVuY3Rpb24iPT10eXBlb2Ygbj8ubGlzdGVuP24ubGlzdGVuKFcpOm51bGw7cmV0dXJuIHg9ImZ1bmN0aW9uIj09dHlwZW9mIFosKCk9Pnt1fHwodT0hMCxWKCksSy5kaXNjb25uZWN0KCksSigpLCJmdW5jdGlvbiI9PXR5cGVvZiBaJiZaKCksbC5yZW1vdmUoKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixGKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwkLCEwKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEcpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixqLCEwKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixIKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLFcpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLFcpKX19Y29uc3QgRD0oZSx0KT0+KHsiemgtQ04iOmUsImVuLVVTIjp0fSksVT0oZSx0LG4scik9Pih7aWQ6ZSxsYWJlbHM6RCh0LG4pLGl0ZW1zOnJ9KTtmdW5jdGlvbiBxKGUsdCxuLHIsbyxpPSJ3YXJuaW5nIixhPXt9KXtyZXR1cm57aWQ6YHZtLiR7ZX1gLGxhYmVsczpEKHQsbiksb3BlcmF0aW9uOnIsZm9ybTpvLGRhbmdlcjppLG11dGF0aW9uOiEwLHRhcmdldFR5cGU6InZtIixyZWN5Y2xlOiJvdXQiLC4uLmF9fWNvbnN0IEI9e3N0YXR1c2VzOlsiU1RPUFBFRCJdfSxfPXtzdGF0dXNlczpbIlJVTk5JTkciLCJTVE9QUEVEIl19LHo9e3N0YXR1c2VzOlsiUlVOTklORyJdfSwkPXt1bnN1cHBvcnRlZFJlYXNvbjpEKCLlt7LlnKjljp/nlJ/kvqfmoI/op4Llr5/liLDmraTlhaXlj6PvvIzkvYblhazlvIDmk43kvZzkuI7ooajljZXlpZHnuqblsJrmnKrmoLjlrp7jgIIiLCJPYnNlcnZlZCBpbiB0aGUgbmF0aXZlIHNpZGViYXIsIGJ1dCBpdHMgcHVibGljIG9wZXJhdGlvbiBhbmQgZm9ybSBjb250cmFjdCBhcmUgbm90IHZlcmlmaWVkLiIpLGJpbmRpbmdTb3VyY2U6InRvd2VyLTQuOS1yZWFkb25seS1zaWRlYmFyLW9ic2VydmF0aW9uIn0sRz0oZSx0LG4pPT4oe29wZXJhdGlvbklkOmUsbWV0aG9kOiJQT1NUIixwYXRoOmAvdjIvYXBpLyR7dH1gLHNjaGVtYTpufSksaj1mdW5jdGlvbiBlKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihPYmplY3QudmFsdWVzKHQpLmZvckVhY2goZSksT2JqZWN0LmZyZWV6ZSh0KSksdH0oW1UoInZtLnBvd2VyIiwi55S15rqQIiwiUG93ZXIiLFtxKCJwb3dlci5zdGFydCIsIuW8gOacuiIsIlBvd2VyIG9uIixHKCJTdGFydFZtIiwic3RhcnQtdm0iLCJWbVN0YXJ0UGFyYW1zIiksInBvd2VyLWNvbmZpcm0iLCJ3YXJuaW5nIixCKSxxKCJwb3dlci5zaHV0ZG93biIsIuWFs+mXreWuouaIt+acuiIsIlNodXQgZG93biBndWVzdCIsRygiU2h1dERvd25WbSIsInNodXRkb3duLXZtIiwiVm1PcGVyYXRlUGFyYW1zIiksImd1ZXN0LXNodXRkb3duLWNvbmZpcm0iLCJ3YXJuaW5nIix6KSxxKCJwb3dlci5wb3dlcm9mZiIsIuW8uuWItuaWreeUtSIsIkZvcmNlIHBvd2VyIG9mZiIsRygiUG93ZXJvZmZWbSIsInBvd2Vyb2ZmLXZtIiwiVm1PcGVyYXRlUGFyYW1zIiksImZvcmNlLXBvd2Vyb2ZmLWNvbmZpcm0iLCJkYW5nZXIiLHtzdGF0dXNlczpbIlJVTk5JTkciLCJTVVNQRU5ERUQiXX0pLHEoInBvd2VyLnJlc3RhcnQiLCLph43lkK/lrqLmiLfmnLoiLCJSZXN0YXJ0IGd1ZXN0IixHKCJSZXN0YXJ0Vm0iLCJyZXN0YXJ0LXZtIiwiVm1PcGVyYXRlUGFyYW1zIiksImd1ZXN0LXJlc3RhcnQtY29uZmlybSIsIndhcm5pbmciLHopLHEoInBvd2VyLmZvcmNlUmVzdGFydCIsIuW8uuWItumHjeWQryIsIkZvcmNlIHJlc3RhcnQiLEcoIkZvcmNlUmVzdGFydFZtIiwiZm9yY2UtcmVzdGFydC12bSIsIlZtT3BlcmF0ZVBhcmFtcyIpLCJmb3JjZS1yZXN0YXJ0LWNvbmZpcm0iLCJkYW5nZXIiLHopLHEoInBvd2VyLnN1c3BlbmQiLCLmmoLlgZwiLCJTdXNwZW5kIixHKCJTdXNwZW5kVm0iLCJzdXNwZW5kLXZtIiwiVm1PcGVyYXRlUGFyYW1zIiksInN1c3BlbmQtY29uZmlybSIsIndhcm5pbmciLHopLHEoInBvd2VyLnJlc3VtZSIsIuaBouWkjei/kOihjCIsIlJlc3VtZSIsRygiUmVzdW1lVm0iLCJyZXN1bWUtdm0iLCJWbU9wZXJhdGVQYXJhbXMiKSwicmVzdW1lLWNvbmZpcm0iLCJ3YXJuaW5nIix7c3RhdHVzZXM6WyJTVVNQRU5ERUQiXX0pXSksVSgidm0uY29uc29sZSIsIuaOp+WItuWPsOS4juWuouaIt+acuiIsIkNvbnNvbGUgYW5kIGd1ZXN0IixbcSgiY29uc29sZS5vcGVuIiwi5omT5byA5o6n5Yi25Y+wIiwiT3BlbiBjb25zb2xlIixHKCJHZXRWbVZuY0luZm8iLCJnZXQtdm0tdm5jLWluZm8iLCJHZXRWbVZuY0luZm9QYXJhbXMiKSwibmF0aXZlLWNvbnNvbGUiLCJub25lIix7bXV0YXRpb246ITEsLi4uen0pLHEoImd1ZXN0Lmluc3RhbGxUb29scyIsIuWuieijhSBWTSBUb29scyIsIkluc3RhbGwgVk0gVG9vbHMiLEcoIkluc3RhbGxWbXRvb2xzIiwiaW5zdGFsbC12bXRvb2xzIiwiSW5zdGFsbFZtdG9vbHNQYXJhbXMiKSwidm0tdG9vbHMtY29uZmlybSIsIndhcm5pbmciLF8pLHEoImd1ZXN0LnRvb2xzSW1hZ2UubW91bnQiLCLmjILovb3omZrmi5/mnLrlt6XlhbfmmKDlg48iLCJNb3VudCBWTSB0b29scyBpbWFnZSIsbnVsbCwidm0tdG9vbHMtaW1hZ2UtbW91bnQiLCJ3YXJuaW5nIiwkKSxxKCJndWVzdC50b29sc0ltYWdlLnVubW91bnQiLCLljbjovb3omZrmi5/mnLrlt6XlhbfmmKDlg48iLCJVbm1vdW50IFZNIHRvb2xzIGltYWdlIixudWxsLCJ2bS10b29scy1pbWFnZS11bm1vdW50Iiwid2FybmluZyIsJCkscSgibmV0d29yay5saW5rcyIsIuafpeeci+e9kee7nOmTvui3ryIsIlZpZXcgbmV0d29yayBsaW5rcyIsbnVsbCwidm0tbmV0d29yay1saW5rcyIsIm5vbmUiLHttdXRhdGlvbjohMSwuLi4kfSkscSgiZ3Vlc3QuaG9zdE9wdGlvbnMiLCLphY3nva7lrqLmiLfmnLrnvZHnu5zkuI7kuLvmnLrlkI0iLCJDb25maWd1cmUgZ3Vlc3QgbmV0d29yayBhbmQgaG9zdG5hbWUiLEcoIlVwZGF0ZVZtSG9zdE9wdGlvbnMiLCJ1cGRhdGUtdm0taG9zdC1vcHRpb25zIiwiVm1VcGRhdGVIb3N0T3B0aW9uc1BhcmFtcyIpLCJndWVzdC1ob3N0LW9wdGlvbnMiLCJ3YXJuaW5nIix7Li4ueixyZXF1aXJlc0d1ZXN0QWdlbnQ6ITB9KSxxKCJndWVzdC5yZXNldFBhc3N3b3JkIiwi6YeN572u5a6i5oi35py65a+G56CBIiwiUmVzZXQgZ3Vlc3QgcGFzc3dvcmQiLEcoIlJlc2V0Vm1HdWVzdE9zUGFzc3dvcmQiLCJyZXNldC12bS1ndWVzdC1vcy1wYXNzd29yZCIsIlZtUmVzZXRHdWVzdE9zUGFzc3dvcmRQYXJhbXMiKSwiZ3Vlc3QtcGFzc3dvcmQiLCJkYW5nZXIiLHsuLi56LHJlcXVpcmVzR3Vlc3RBZ2VudDohMH0pXSksVSgidm0uaGFyZHdhcmUiLCLln7rmnKzkv6Hmga/kuI7noazku7YiLCJHZW5lcmFsIGFuZCBoYXJkd2FyZSIsW3EoImdlbmVyYWwuZWRpdCIsIue8lui+keWfuuacrOS/oeaBryIsIkVkaXQgYmFzaWMgaW5mb3JtYXRpb24iLEcoIlVwZGF0ZVZtIiwidXBkYXRlLXZtLWJhc2ljLWluZm8iLCJWbVVwZGF0ZVBhcmFtcyIpLCJ2bS1nZW5lcmFsIikscSgiaGFyZHdhcmUuY3B1Iiwi6YWN572uIENQVSIsIkNvbmZpZ3VyZSBDUFUiLEcoIlVwZGF0ZVZtIiwidXBkYXRlLXZtLWJhc2ljLWluZm8iLCJWbVVwZGF0ZVBhcmFtcyIpLCJ2bS1jcHUiLCJ3YXJuaW5nIixCKSxxKCJoYXJkd2FyZS5tZW1vcnkiLCLphY3nva7lhoXlrZgiLCJDb25maWd1cmUgbWVtb3J5IixHKCJVcGRhdGVWbSIsInVwZGF0ZS12bS1iYXNpYy1pbmZvIiwiVm1VcGRhdGVQYXJhbXMiKSwidm0tbWVtb3J5Iiwid2FybmluZyIsQikscSgiaGFyZHdhcmUuZGlzay5hZGQiLCLmt7vliqDno4Hnm5giLCJBZGQgZGlzayIsRygiQWRkVm1EaXNrIiwiYWRkLXZtLWRpc2siLCJWbUFkZERpc2tQYXJhbXMiKSwidm0tZGlzay1hZGQiLCJ3YXJuaW5nIix7Li4uQixzZWxlY3Rpb25UeXBlOiJ2bVZvbHVtZSJ9KSxxKCJoYXJkd2FyZS5kaXNrLmVkaXQiLCLnvJbovpHno4Hnm5giLCJFZGl0IGRpc2siLEcoIlVwZGF0ZVZtRGlzayIsInVwZGF0ZS12bS1kaXNrIiwiVm1VcGRhdGVEaXNrUGFyYW1zIiksInZtLWRpc2stZWRpdCIsIndhcm5pbmciLHsuLi5CLHNlbGVjdGlvblR5cGU6InZtRGlzayJ9KSxxKCJoYXJkd2FyZS5kaXNrLmV4cGFuZCIsIuaJqeWuueejgeebmCIsIkV4cGFuZCBkaXNrIixHKCJFeHBhbmRWbURpc2siLCJleHBhbmQtdm0tZGlzayIsIlZtRXhwYW5kVm1EaXNrUGFyYW1zIiksInZtLWRpc2stZXhwYW5kIiwid2FybmluZyIsey4uLkIsdGFyZ2V0VHlwZToidm1EaXNrIn0pLHEoImhhcmR3YXJlLmRpc2suY2FjaGUiLCLorr7nva7no4Hnm5jluLjpqbvnvJPlrZgiLCJTZXQgZGlzayBjYWNoZSByZXNpZGVuY3kiLEcoIlNldFZtRGlza1Jlc2lkZW50SW5DYWNoZSIsInNldC12bS1kaXNrLXJlc2lkZW50LWluLWNhY2hlIiwiVm1TZXRWbURpc2tSZXNpZGVudEluQ2FjaGVQYXJhbXMiKSwidm0tZGlzay1jYWNoZSIsIndhcm5pbmciLHsuLi5fLHRhcmdldFR5cGU6InZtRGlzayJ9KSxxKCJoYXJkd2FyZS5kaXNrLnJlbW92ZSIsIuWNuOi9veejgeebmCIsIkRldGFjaCBkaXNrIixHKCJSZW1vdmVWbURpc2siLCJyZW1vdmUtdm0tZGlzayIsIlZtUmVtb3ZlRGlza1BhcmFtcyIpLCJ2bS1kaXNrLWRldGFjaCIsImRhbmdlciIsey4uLkIsc2VsZWN0aW9uVHlwZToidm1EaXNrIn0pLHEoImhhcmR3YXJlLm5pYy5hZGQiLCLmt7vliqDnvZHljaEiLCJBZGQgTklDIixHKCJBZGRWbU5pYyIsImFkZC12bS1uaWMiLCJWbUFkZE5pY1BhcmFtcyIpLCJ2bS1uaWMtYWRkIiwid2FybmluZyIsQikscSgiaGFyZHdhcmUubmljLmVkaXQiLCLnvJbovpHnvZHljaEiLCJFZGl0IE5JQyIsRygiVXBkYXRlVm1OaWNBZHZhbmNlSW5mbyIsInVwZGF0ZS12bS1uaWMtYWR2YW5jZS1pbmZvIiwiVm1VcGRhdGVOaWNBZHZhbmNlSW5mb1BhcmFtcyIpLCJ2bS1uaWMtZWRpdCIsIndhcm5pbmciLHsuLi5CLHNlbGVjdGlvblR5cGU6InZtTmljIn0pLHEoImhhcmR3YXJlLm5pYy5yZW1vdmUiLCLnp7vpmaTnvZHljaEiLCJSZW1vdmUgTklDIixHKCJSZW1vdmVWbU5pY0J5V2hlcmUiLCJyZW1vdmUtdm0tbmljLWJ5LXdoZXJlIiwiVm1SZW1vdmVOaWNCeVdoZXJlUGFyYW1zIiksInZtLW5pYy1yZW1vdmUiLCJkYW5nZXIiLHsuLi5CLHNlbGVjdGlvblR5cGU6InZtTmljIn0pLHEoImhhcmR3YXJlLm5pYy5xb3MiLCLphY3nva7nvZHljaEgUW9TIiwiQ29uZmlndXJlIE5JQyBRb1MiLEcoIlVwZGF0ZVZtTmljUW9zT3B0aW9uIiwidXBkYXRlLXZtLW5pYy1xb3Mtb3B0aW9uIiwiVm1VcGRhdGVOaWNRb3NPcHRpb25zUGFyYW1zIiksInZtLW5pYy1xb3MiLCJ3YXJuaW5nIix7Li4uXyxzZWxlY3Rpb25UeXBlOiJ2bU5pYyJ9KSxxKCJoYXJkd2FyZS5jZHJvbS5hZGQiLCLmt7vliqAgQ0QtUk9NIiwiQWRkIENELVJPTSIsRygiQWRkVm1DZFJvbSIsImFkZC12bS1jZC1yb20iLCJWbUFkZENkUm9tUGFyYW1zIiksInZtLWNkcm9tLWFkZCIsIndhcm5pbmciLEIpLHEoImhhcmR3YXJlLmNkcm9tLm1vdW50Iiwi6KOF6L295oiW5pu05o2iIElTTyIsIk1vdW50IG9yIHJlcGxhY2UgSVNPIixHKCJVcGRhdGVWbURpc2siLCJ1cGRhdGUtdm0tZGlzayIsIlZtVXBkYXRlRGlza1BhcmFtcyIpLCJ2bS1jZHJvbS1pc28iLCJ3YXJuaW5nIix7Li4uXyxzZWxlY3Rpb25UeXBlOiJ2bURpc2sifSkscSgiaGFyZHdhcmUuY2Ryb20uZWplY3QiLCLlvLnlh7ogSVNPIiwiRWplY3QgSVNPIixHKCJFamVjdElzb0Zyb21WbUNkUm9tIiwiZWplY3QtaXNvLWZyb20tdm0tY2Qtcm9tIiwiVm1FamVjdENkUm9tUGFyYW1zIiksInZtLWNkcm9tLWVqZWN0Iiwid2FybmluZyIsey4uLl8sdGFyZ2V0VHlwZToidm1EaXNrIn0pLHEoImhhcmR3YXJlLmNkcm9tLnRvZ2dsZSIsIuWQr+eUqOaIluemgeeUqCBDRC1ST00iLCJFbmFibGUgb3IgZGlzYWJsZSBDRC1ST00iLEcoIlRvZ2dsZVZtQ2RSb21EaXNhYmxlIiwidG9nZ2xlLXZtLWNkLXJvbS1kaXNhYmxlIiwiVm1Ub2dnbGVDZFJvbURpc2FibGVQYXJhbXMiKSwidm0tY2Ryb20tZW5hYmxlZCIsIndhcm5pbmciLHsuLi5fLHRhcmdldFR5cGU6InZtRGlzayJ9KSxxKCJoYXJkd2FyZS5jZHJvbS5yZW1vdmUiLCLnp7vpmaQgQ0QtUk9NIiwiUmVtb3ZlIENELVJPTSIsRygiUmVtb3ZlVm1DZFJvbSIsInJlbW92ZS12bS1jZC1yb20iLCJWbVJlbW92ZUNkUm9tUGFyYW1zIiksInZtLWNkcm9tLXJlbW92ZSIsImRhbmdlciIsey4uLkIsc2VsZWN0aW9uVHlwZToidm1EaXNrIn0pLHEoImhhcmR3YXJlLmdwdS5hZGQiLCLmt7vliqAgR1BVIiwiQWRkIEdQVSIsRygiQWRkVm1HcHVEZXZpY2UiLCJhZGQtdm0tZ3B1LWRldmljZSIsIlZtQWRkR3B1RGV2aWNlUGFyYW1zIiksInZtLWdwdS1hZGQiLCJ3YXJuaW5nIix7Li4uQixzZWxlY3Rpb25UeXBlOiJncHVEZXZpY2UifSkscSgiaGFyZHdhcmUuZ3B1LnJlbW92ZSIsIuenu+mZpCBHUFUiLCJSZW1vdmUgR1BVIixHKCJSZW1vdmVWbUdwdURldmljZSIsInJlbW92ZS12bS1ncHUtZGV2aWNlIiwiVm1SZW1vdmVHcHVEZXZpY2VQYXJhbXMiKSwidm0tZ3B1LXJlbW92ZSIsImRhbmdlciIsey4uLkIsc2VsZWN0aW9uVHlwZToiZ3B1RGV2aWNlIn0pLHEoImhhcmR3YXJlLnBjaU5pYy5hZGQiLCLmt7vliqDnm7TpgJrnvZHljaEiLCJBZGQgcGFzc3Rocm91Z2ggTklDIixHKCJBZGRWbVBjaU5pYyIsImFkZC12bS1wY2ktbmljIiwiVm1PcGVyYXRlUGNpTmljUGFyYW1zIiksInZtLXBjaS1uaWMtYWRkIiwid2FybmluZyIsey4uLkIsc2VsZWN0aW9uVHlwZToibmljIn0pLHEoImhhcmR3YXJlLnBjaU5pYy5yZW1vdmUiLCLnp7vpmaTnm7TpgJrnvZHljaEiLCJSZW1vdmUgcGFzc3Rocm91Z2ggTklDIixHKCJSZW1vdmVWbVBjaU5pYyIsInJlbW92ZS12bS1wY2ktbmljIiwiVm1PcGVyYXRlUGNpTmljUGFyYW1zIiksInZtLXBjaS1uaWMtcmVtb3ZlIiwiZGFuZ2VyIix7Li4uQixzZWxlY3Rpb25UeXBlOiJuaWMifSkscSgiaGFyZHdhcmUudXNiLm1vdW50Iiwi5oyC6L2955u06YCaIFVTQiIsIk1vdW50IFVTQiBkZXZpY2UiLEcoIk1vdW50VXNiRGV2aWNlIiwibW91bnQtdXNiLWRldmljZSIsIlVzYkRldmljZU1vdW50UGFyYW1zIiksInZtLXVzYi1tb3VudCIsIndhcm5pbmciLHsuLi5CLHRhcmdldFR5cGU6InVzYkRldmljZSJ9KSxxKCJoYXJkd2FyZS51c2IudW5tb3VudCIsIuWNuOi9veebtOmAmiBVU0IiLCJVbm1vdW50IFVTQiBkZXZpY2UiLEcoIlVubW91bnRVc2JEZXZpY2UiLCJ1bm1vdW50LXVzYi1kZXZpY2UiLCJVc2JEZXZpY2VVbm1vdW50UGFyYW1zIiksInZtLXVzYi11bm1vdW50IiwiZGFuZ2VyIix7Li4uQix0YXJnZXRUeXBlOiJ1c2JEZXZpY2UifSkscSgiaGFyZHdhcmUuYWR2YW5jZWQiLCJDUFUg5Z6L5Y+344CB5pi+56S65LiO5pe26ZKf6YCJ6aG5IiwiQ1BVIG1vZGVsLCB2aWRlbyBhbmQgY2xvY2sgb3B0aW9ucyIsRygiVXBkYXRlVm1BZHZhbmNlZE9wdGlvbnMiLCJ1cGRhdGUtdm0tYWR2YW5jZWQtb3B0aW9ucyIsIlZtVXBkYXRlQWR2YW5jZWRPcHRpb25zUGFyYW1zIiksInZtLWFkdmFuY2VkIiwid2FybmluZyIsQikscSgiaGFyZHdhcmUuYm9vdE9yZGVyIiwi5ZCv5Yqo6aG65bqPIiwiQm9vdCBvcmRlciIsbnVsbCwidm0tYm9vdC1vcmRlciIsIndhcm5pbmciLEIpLHEoImhhcmR3YXJlLmZpcm13YXJlIiwi5ZCv5Yqo5Zu65Lu2IiwiQm9vdCBmaXJtd2FyZSIsbnVsbCwidm0tZmlybXdhcmUiLCJ3YXJuaW5nIixCKSxxKCJoYXJkd2FyZS50cG0iLCLomZrmi5/lj6/kv6HlubPlj7DmqKHlnZciLCJWaXJ0dWFsIFRQTSIsbnVsbCwidm0tdHBtIiwid2FybmluZyIsQildKSxVKCJ2bS5zbmFwc2hvdHMiLCLlv6vnhafjgIHlhYvpmobkuI7lr7zlh7oiLCJTbmFwc2hvdHMsIGNsb25pbmcgYW5kIGV4cG9ydCIsW3EoInNuYXBzaG90cy5saXN0Iiwi5p+l55yL5b+r54WnIiwiQnJvd3NlIHNuYXBzaG90cyIsRygiR2V0Vm1TbmFwc2hvdHMiLCJnZXQtdm0tc25hcHNob3RzIiwiR2V0Vm1TbmFwc2hvdHNSZXF1ZXN0Qm9keSIpLCJ2bS1zbmFwc2hvdC1icm93c2VyIiwibm9uZSIse211dGF0aW9uOiExLHJlY3ljbGU6ImFueSJ9KSxxKCJzbmFwc2hvdHMuY3JlYXRlIiwi5Yib5bu65b+r54WnIiwiQ3JlYXRlIHNuYXBzaG90IixHKCJDcmVhdGVWbVNuYXBzaG90IiwiY3JlYXRlLXZtLXNuYXBzaG90IiwiVm1TbmFwc2hvdENyZWF0aW9uUGFyYW1zIiksInZtLXNuYXBzaG90LWNyZWF0ZSIsIndhcm5pbmciLF8pLHEoInNuYXBzaG90cy5yZXN0b3JlIiwi5Zue5rua5b2T5YmN6Jma5ouf5py6IiwiUm9sbCBiYWNrIHRoaXMgVk0iLEcoIlJvbGxiYWNrVm0iLCJyb2xsYmFjay12bSIsIlZtUm9sbGJhY2tQYXJhbXMiKSwidm0tc25hcHNob3Qtcm9sbGJhY2siLCJkYW5nZXIiLHsuLi5CLHNlbGVjdGlvblR5cGU6InZtU25hcHNob3QifSkscSgic25hcHNob3RzLnJlYnVpbGQiLCLku47lv6vnhafph43lu7romZrmi5/mnLoiLCJSZWJ1aWxkIFZNIGZyb20gc25hcHNob3QiLEcoIlJlYnVpbGRWbSIsInJlYnVpbGQtdm0tZnJvbS1zbmFwc2hvdCIsIlZtUmVidWlsZFBhcmFtc1tdIiksInZtLXNuYXBzaG90LXJlYnVpbGQiLCJ3YXJuaW5nIix7Li4uXyxzZWxlY3Rpb25UeXBlOiJ2bVNuYXBzaG90In0pLHEoInNuYXBzaG90cy5kZWxldGUiLCLliKDpmaTlv6vnhaciLCJEZWxldGUgc25hcHNob3QiLEcoIkRlbGV0ZVZtU25hcHNob3QiLCJkZWxldGUtdm0tc25hcHNob3QiLCJWbVNuYXBzaG90RGVsZXRpb25QYXJhbXMiKSwidm0tc25hcHNob3QtZGVsZXRlIiwiZGFuZ2VyIix7Li4uXyx0YXJnZXRUeXBlOiJ2bVNuYXBzaG90In0pLHEoImNsb25lIiwi5YWL6ZqG6Jma5ouf5py6IiwiQ2xvbmUgVk0iLEcoIkNsb25lVm0iLCJjbG9uZS12bSIsIlZtQ2xvbmVQYXJhbXNbXSIpLCJ2bS1jbG9uZSIsIndhcm5pbmciLF8pLHEoInRlbXBsYXRlLmNyZWF0ZSIsIuWIm+W7uuiZmuaLn+acuuaooeadvyIsIkNyZWF0ZSBWTSB0ZW1wbGF0ZSIsbnVsbCwidm0tdGVtcGxhdGUtY3JlYXRlIiwid2FybmluZyIsJCkscSgiZXhwb3J0Iiwi5a+85Ye66Jma5ouf5py6IiwiRXhwb3J0IFZNIixHKCJFeHBvcnRWbSIsImV4cG9ydC12bSIsIlZtRXhwb3J0UGFyYW1zIiksInZtLWV4cG9ydCIsIndhcm5pbmciLEIpLHEoImJhY2t1cCIsIuWkh+S7veS4juWuueeBviIsIkJhY2t1cCBhbmQgZGlzYXN0ZXIgcmVjb3ZlcnkiLG51bGwsInZtLWJhY2t1cCIsIndhcm5pbmciKV0pLFUoInZtLm1pZ3JhdGlvbiIsIui/geenuyIsIk1pZ3JhdGlvbiIsW3EoIm1pZ3JhdGlvbi53aXRoaW5DbHVzdGVyIiwi6ZuG576k5YaF6L+B56e7IiwiTWlncmF0ZSB3aXRoaW4gY2x1c3RlciIsRygiTWlncmF0ZVZtIiwibWlncmF0ZS12bSIsIlZtTWlncmF0ZVBhcmFtcyIpLCJ2bS1taWdyYXRlLWhvc3QiLCJ3YXJuaW5nIixCKSxxKCJtaWdyYXRpb24uYWNyb3NzQ2x1c3RlciIsIui3qOmbhue+pOi/geenuyIsIk1pZ3JhdGUgYWNyb3NzIGNsdXN0ZXJzIixHKCJNaWdyYXRlVm1BY3Jvc3NDbHVzdGVyIiwibWlncmF0ZS12bS1hY3Jvc3MtY2x1c3RlciIsIlZtTWlncmF0ZUFjcm9zc0NsdXN0ZXJQYXJhbXMiKSwidm0tbWlncmF0ZS1jbHVzdGVyIiwid2FybmluZyIsXykscSgibWlncmF0aW9uLmN1dG92ZXIiLCLliIfmjaLov4Hnp7vkuK3nmoTomZrmi5/mnLoiLCJDdXQgb3ZlciBtaWdyYXRpbmcgVk0iLEcoIlN0b3BWbUluQ3V0b3Zlck1pZ3JhdGlvbiIsInN0b3Atdm0taW4tY3V0b3Zlci1taWdyYXRpb24iLCJTdG9wVm1JbkN1dG92ZXJNaWdyYXRpb25QYXJhbXMiKSwidm0tbWlncmF0aW9uLWN1dG92ZXIiLCJkYW5nZXIiLHsuLi56LG1pZ3JhdGlvbkNvbnRyb2w6ImN1dG92ZXIifSkscSgibWlncmF0aW9uLmFib3J0Iiwi5Lit5q2i6Leo6ZuG576k6L+B56e7IiwiQWJvcnQgY3Jvc3MtY2x1c3RlciBtaWdyYXRpb24iLEcoIkFib3J0TWlncmF0ZVZtQWNyb3NzQ2x1c3RlciIsImFib3J0LW1pZ3JhdGUtdm0tYWNyb3NzLWNsdXN0ZXIiLCJBYm9ydE1pZ3JhdGVWbUFjcm9zc0NsdXN0ZXJQYXJhbXMiKSwidm0tbWlncmF0aW9uLWFib3J0IiwiZGFuZ2VyIix7Li4uXyxtaWdyYXRpb25Db250cm9sOiJhYm9ydCJ9KV0pLFUoInZtLm1hbmFnZW1lbnQiLCLpq5jlj6/nlKjjgIHlvZLlsZ7kuI7moIfnrb4iLCJBdmFpbGFiaWxpdHksIG93bmVyc2hpcCBhbmQgbGFiZWxzIixbcSgiYXZhaWxhYmlsaXR5LmhhIiwi6YWN572u6auY5Y+v55So5LiO5LyY5YWI57qnIiwiQ29uZmlndXJlIEhBIGFuZCBwcmlvcml0eSIsRygiVXBkYXRlVm0iLCJ1cGRhdGUtdm0tYmFzaWMtaW5mbyIsIlZtVXBkYXRlUGFyYW1zIiksInZtLWhhIiwid2FybmluZyIsXykscSgicGxhY2VtZW50R3JvdXAiLCLomZrmi5/mnLrmlL7nva7nu4QiLCJWTSBwbGFjZW1lbnQgZ3JvdXBzIixudWxsLCJ2bS1wbGFjZW1lbnQtZ3JvdXAiLCJ3YXJuaW5nIiwkKSxxKCJob3N0QXV0b3N0YXJ0Iiwi6ZqP5Li75py65byA5py6IiwiU3RhcnQgd2l0aCBob3N0IixudWxsLCJ2bS1ob3N0LWF1dG9zdGFydCIsIndhcm5pbmciLCQpLHEoInZtR3JvdXAiLCLomZrmi5/mnLrnu4QiLCJWTSBncm91cHMiLG51bGwsInZtLWdyb3VwIiwid2FybmluZyIsJCkscSgib3duZXJzaGlwIiwi5L+u5pS56Jma5ouf5py65omA5pyJ6ICFIiwiQ2hhbmdlIFZNIG93bmVyIixHKCJVcGRhdGVWbU93bmVyIiwidXBkYXRlLXZtLW93bmVyIiwiVm1VcGRhdGVPd25lclBhcmFtcyIpLCJ2bS1vd25lciIpLHEoImZvbGRlci5hZGQiLCLnp7vlhaXmlofku7blpLkiLCJNb3ZlIGludG8gZm9sZGVyIixHKCJBZGRWbVRvRm9sZGVyIiwiYWRkLXZtLXRvLWZvbGRlciIsIlZtQWRkRm9sZGVyUGFyYW1zIiksInZtLWZvbGRlci1hZGQiKSxxKCJmb2xkZXIucmVtb3ZlIiwi56e75Ye65paH5Lu25aS5IiwiUmVtb3ZlIGZyb20gZm9sZGVyIixHKCJSZW1vdmVWbVRvRm9sZGVyIiwicmVtb3ZlLXZtLWZyb20tZm9sZGVyIiwiVm1BZGRGb2xkZXJQYXJhbXMiKSwidm0tZm9sZGVyLXJlbW92ZSIsIndhcm5pbmciLHtyZXF1aXJlc0ZvbGRlcjohMH0pLHEoImlvUG9saWN5Iiwi6YWN572u56OB55uYIEkvTyDnrZbnlaUiLCJDb25maWd1cmUgZGlzayBJL08gcG9saWN5IixHKCJVcGRhdGVWbUlvUG9saWN5IiwidXBkYXRlLXZtLWlvLXBvbGljeSIsIlZtVXBkYXRlSW9Qb2xpY3lQYXJhbXMiKSwidm0taW8tcG9saWN5IikscSgibGFiZWxzIiwi57yW6L6R5qCH562+IiwiRWRpdCBsYWJlbHMiLG51bGwsInZtLWxhYmVscyIpLHEoInByb3RlY3Rpb24iLCLphY3nva7omZrmi5/mnLrkv53miqQiLCJDb25maWd1cmUgVk0gcHJvdGVjdGlvbiIsbnVsbCwidm0tcHJvdGVjdGlvbiIpXSksVSgidm0ucmVjeWNsZSIsIuWbnuaUtuS4juWIoOmZpCIsIlJlY3ljbGUgYW5kIGRlbGV0ZSIsW3EoInJlY3ljbGUubW92ZSIsIuenu+WFpeWbnuaUtuermSIsIk1vdmUgdG8gcmVjeWNsZSBiaW4iLEcoIk1vdmVWbVRvUmVjeWNsZUJpbiIsIm1vdmUtdm0tdG8tcmVjeWNsZSIsIlZtT3BlcmF0ZVBhcmFtcyIpLCJ2bS1yZWN5Y2xlLWNvbmZpcm0iLCJkYW5nZXIiLEIpLHEoInJlY3ljbGUucmVjb3ZlciIsIuS7juWbnuaUtuermeaBouWkjSIsIlJlY292ZXIgZnJvbSByZWN5Y2xlIGJpbiIsRygiUmVjb3ZlclZtRnJvbVJlY3ljbGVCaW4iLCJyZWNvdmVyLXZtLWZyb20tcmVjeWNsZSIsIlZtT3BlcmF0ZVBhcmFtcyIpLCJ2bS1yZWNvdmVyLWNvbmZpcm0iLCJ3YXJuaW5nIix7Li4uQixyZWN5Y2xlOiJpbiJ9KSxxKCJkZWxldGUiLCLmsLjkuYXliKDpmaTomZrmi5/mnLoiLCJQZXJtYW5lbnRseSBkZWxldGUgVk0iLEcoIkRlbGV0ZVZtIiwiZGVsZXRlLXZtIiwiVm1EZWxldGVQYXJhbXMiKSwidm0tZGVsZXRlLWNvbmZpcm0iLCJkYW5nZXIiLHsuLi5CLHJlY3ljbGU6ImluIn0pXSldKSxGPXt1bnN1cHBvcnRlZDpEKCLlvZPliY3mk43kvZzmj5DkvpvlmajmsqHmnInms6jlhozmraTmk43kvZzvvIzlt7LpmLvmraLmiafooYzjgILor7fph43mlrDmiZPlvIDoj5zljZXlubbmo4Dmn6Xmj5Lku7bniYjmnKzjgIIiLCJUaGUgY3VycmVudCBhY3Rpb24gcHJvdmlkZXIgaGFzIG5vIHJlZ2lzdHJhdGlvbiBmb3IgdGhpcyBvcGVyYXRpb24uIEV4ZWN1dGlvbiB3YXMgYmxvY2tlZC4gUmVvcGVuIHRoZSBtZW51IGFuZCBjaGVjayB0aGUgcGx1Z2luIHZlcnNpb24uIikscHJlZmxpZ2h0OkQoIuWwmuacquWPluW+l+atpOiZmuaLn+acuueahOWPr+mdoOacgOaWsOeKtuaAgeOAgiIsIkEgcmVsaWFibGUgY3VycmVudCBWTSBzbmFwc2hvdCBpcyByZXF1aXJlZC4iKSxtaXNtYXRjaDpEKCLlr7nosaEgSUQg5LiO54q25oCB5b+r54Wn5LiN5LiA6Ie077yM6K+36YeN5paw6K+75Y+W44CCIiwiVGhlIHJlc291cmNlIElEIGRvZXMgbm90IG1hdGNoIHRoZSBzbmFwc2hvdC4gUmVmcmVzaCBpdC4iKSxzdGF0ZVVua25vd246RCgi6Jma5ouf5py654q25oCB5pyq55+l77yM5pqC5LiN5Y+v5pON5L2c44CCIiwiVGhlIFZNIHN0YXRlIGlzIHVua25vd247IHRoZSBhY3Rpb24gaXMgdW5hdmFpbGFibGUuIiksYnVzeTpEKCLomZrmi5/mnLrlrZjlnKjov5vooYzkuK3nmoTlj5jmm7TvvIzor7fnrYnlvoXlkI7ph43mlrDor7vlj5bjgIIiLCJUaGUgVk0gaGFzIGEgcGVuZGluZyBjaGFuZ2UuIFdhaXQgYW5kIHJlZnJlc2guIikscHJvdGVjdGVkOkQoIuiZmuaLn+acuuW3suS/neaKpO+8jOaaguS4jeaPkOS+m+S/ruaUueaTjeS9nOOAgiIsIlRoZSBWTSBpcyBwcm90ZWN0ZWQ7IGNoYW5nZXMgYXJlIHVuYXZhaWxhYmxlLiIpLGludGVybmFsOkQoIuezu+e7n+WGhemDqOiZmuaLn+acuuS4jeaPkOS+m+atpOS/ruaUueaTjeS9nOOAgiIsIlRoaXMgY2hhbmdlIGlzIHVuYXZhaWxhYmxlIGZvciBhbiBpbnRlcm5hbCBWTS4iKSxyZWN5Y2xlZDpEKCLlr7nosaHlt7LlnKjlm57mlLbnq5nkuK3vvIzmraTmk43kvZzkuI3lj6/nlKjjgIIiLCJUaGlzIGFjdGlvbiBpcyB1bmF2YWlsYWJsZSB3aGlsZSB0aGUgVk0gaXMgaW4gdGhlIHJlY3ljbGUgYmluLiIpLG5vdFJlY3ljbGVkOkQoIuatpOaTjeS9nOS7hemAgueUqOS6juWbnuaUtuermeS4reeahOiZmuaLn+acuuOAgiIsIlRoaXMgYWN0aW9uIHJlcXVpcmVzIGEgVk0gaW4gdGhlIHJlY3ljbGUgYmluLiIpLHN0YXRlOkQoIuW9k+WJjeeUtea6kOeKtuaAgeS4jea7oei2s+atpOaTjeS9nOeahOS/neWuiOWJjee9ruadoeS7tuOAgiIsIlRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIGRvZXMgbm90IG1lZXQgdGhpcyBhY3Rpb27igJlzIGNvbnNlcnZhdGl2ZSBwcmVjb25kaXRpb25zLiIpLG1pZ3JhdGlvblVua25vd246RCgi5pyq5Y+W5b6X5LiO5q2k6Jma5ouf5py657uR5a6a55qE44CB5q2j5Zyo5omn6KGM55qE6Leo6ZuG576k6L+B56e75Lu75Yqh6K+B5o2u44CCIiwiQSB2ZXJpZmllZCBleGVjdXRpbmcgY3Jvc3MtY2x1c3RlciBtaWdyYXRpb24gdGFzayBib3VuZCB0byB0aGlzIFZNIGlzIHJlcXVpcmVkLiIpLG1pZ3JhdGlvblBoYXNlOkQoIuWwmuacquehruiupOi/geenu+WkhOS6juWFgeiuuOatpOaOp+WItuaTjeS9nOeahOmYtuauteOAgiIsIlRoZSBtaWdyYXRpb24gcGhhc2UgaGFzIG5vdCBiZWVuIHZlcmlmaWVkIGFzIGVsaWdpYmxlIGZvciB0aGlzIGNvbnRyb2wuIiksbWlncmF0aW9uQWN0aXZlOkQoIuatpOiZmuaLn+acuueahOi/geenu+S7u+WKoeWwmuacque7k+adn++8jOaaguS4jeaPkOS+m+WFtuS7luS/ruaUueOAgiIsIlRoaXMgVk0gaGFzIGFuIHVuZmluaXNoZWQgbWlncmF0aW9uIHRhc2s7IG90aGVyIGNoYW5nZXMgYXJlIHVuYXZhaWxhYmxlLiIpLGd1ZXN0QWdlbnQ6RCgi5q2k5a6i5oi35py65pON5L2c6ZyA6KaB5bey56Gu6K6k6L+Q6KGM55qEIFZNIFRvb2xz44CCIiwiVGhpcyBndWVzdCBvcGVyYXRpb24gcmVxdWlyZXMgVk0gVG9vbHMgdmVyaWZpZWQgYXMgcnVubmluZy4iKSxmb2xkZXI6RCgi5pyq56Gu6K6k5q2k6Jma5ouf5py65omA5bGe55qE5pyJ5pWI5paH5Lu25aS544CCIiwiQSB2YWxpZCBmb2xkZXIgY29udGFpbmluZyB0aGlzIFZNIGhhcyBub3QgYmVlbiB2ZXJpZmllZC4iKSxwZXJtaXNzaW9uVW5rbm93bjpEKCLlsJrmnKrlj5blvpfmraTmk43kvZznmoTmnYPlqIHmnYPpmZDnu5PmnpzjgIIiLCJBdXRob3JpdGF0aXZlIGF1dGhvcml6YXRpb24gZm9yIHRoaXMgYWN0aW9uIGlzIHVuYXZhaWxhYmxlLiIpLGRlbmllZDpEKCLlvZPliY3otKbmiLfml6DmnYPmiafooYzmraTmk43kvZzjgIIiLCJUaGUgY3VycmVudCBhY2NvdW50IGlzIG5vdCBhdXRob3JpemVkIGZvciB0aGlzIGFjdGlvbi4iKX0sSD1lPT4ic3RyaW5nIj09dHlwZW9mIGUmJi9eW0EtWmEtejAtOV8tXXsxLDEyOH0kLy50ZXN0KGUpLFc9ZT0+ImVuLVVTIj09PWU/ImVuLVVTIjoiemgtQ04iO2Z1bmN0aW9uIEooZSl7Y29uc3QgdD1lLm1pZ3JhdGlvbjtyZXR1cm4hMD09PXQ/LnZlcmlmaWVkJiZ0LnZtSWQ9PT1lLmlkJiZIKHQudGFza0lkKSYmdC50YXNrSWQhPT1lLmlkJiYiQ1JPU1NfQ0xVU1RFUiI9PT10LmtpbmR9Y29uc3QgSz17InByb3ZpZGVyLXVuYXZhaWxhYmxlIjpbIuWPs+mUruiPnOWNlee7hOS7tuacquiDveWIneWni+WMluOAguivt+WIt+aWsOmhtemdou+8m+iLpeS7jeWksei0pe+8jOivt+WcqOaPkuS7tuS4reW/g+mHjeaWsOWQr+eUqOacrOaPkuS7tuOAgiIsIlRoZSBjb250ZXh0LW1lbnUgY29tcG9uZW50IGNvdWxkIG5vdCBpbml0aWFsaXplLiBSZWxvYWQgdGhlIHBhZ2U7IGlmIGl0IHN0aWxsIGZhaWxzLCByZS1lbmFibGUgdGhpcyBwbHVnaW4gaW4gdGhlIHBsdWdpbiBjZW50ZXIuIl0sImFjdGlvbi11bmtub3duIjpbIuW9k+WJjeiPnOWNleS4reeahOaTjeS9nOagh+ivhuS4jeWcqOacrOeJiOacrOazqOWGjOihqOS4reOAguivt+WFs+mXreiPnOWNleWQjumHjeaWsOWPs+mUruOAgiIsIlRoaXMgYWN0aW9uIElEIGlzIGFic2VudCBmcm9tIHRoaXMgdmVyc2lvbuKAmXMgcmVnaXN0cnkuIENsb3NlIHRoZSBtZW51IGFuZCByaWdodC1jbGljayBhZ2Fpbi4iXSwicGx1Z2luLWRpc2FibGVkIjpbIuaPkuS7tuaIluatpOi1hOa6kOexu+Wei+eahOWPs+mUruaTjeS9nOW3suiiq+WFs+mXreOAguivt+ajgOafpeaPkuS7tuiuvue9ruOAgiIsIlRoZSBwbHVnaW4gb3IgY29udGV4dCBhY3Rpb25zIGZvciB0aGlzIHJlc291cmNlIHR5cGUgYXJlIGRpc2FibGVkLiBDaGVjayBwbHVnaW4gc2V0dGluZ3MuIl0sInNvdXJjZS1yZXRpcmVkIjpbIuWOn+eUn+mdouadv+aIluaOp+S7tueahOWvueixoeW9kuWxnuW3suWkseaViO+8jOacquaJp+ihjOeCueWHu+OAguivt+mHjeaWsOaJk+W8gOWvueixoeivpuaDheWQjumHjeivleOAgiIsIlRoZSBuYXRpdmUgcGFuZWwgb3IgY29udHJvbCBsb3N0IGl0cyByZXNvdXJjZSBvd25lcnNoaXAuIE5vIGNsaWNrIHdhcyBwZXJmb3JtZWQuIFJlb3BlbiB0aGUgcmVzb3VyY2UgZGV0YWlscyBiZWZvcmUgcmV0cnlpbmcuIl0sInNvdXJjZS1jaGFuZ2VkIjpbIumhtemdouOAgeWvueixoeihjOaIluWvueixoeagh+ivhuW3suWPmOWMlu+8jOW3suWPlua2iOaTjeS9nOOAguivt+mHjeaWsOWPs+mUruebruagh+WvueixoeOAgiIsIlRoZSBwYWdlLCByZXNvdXJjZSByb3cgb3IgaWRlbnRpdHkgY2hhbmdlZC4gVGhlIGFjdGlvbiB3YXMgY2FuY2VsbGVkLiBSaWdodC1jbGljayB0aGUgdGFyZ2V0IGFnYWluLiJdLCJwcm9vZi1leHBpcmVkIjpbIuiPnOWNleeahOWvueixoeagoemqjOW3sui/h+acn++8jOS4jeiDvee7p+e7reS9v+eUqOaXp+iPnOWNleOAguivt+mHjeaWsOWPs+mUruebruagh+WvueixoeOAgiIsIlRoZSBtZW514oCZcyByZXNvdXJjZSB2ZXJpZmljYXRpb24gZXhwaXJlZC4gUmlnaHQtY2xpY2sgdGhlIHRhcmdldCBhZ2FpbiBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbGQgbWVudS4iXSwiYmxvY2tlZC1ieS1kaWFsb2ciOlsi6aG16Z2i5bey5pyJ5YW25LuW5Y6f55Sf5a+56K+d5qGG5oiW6I+c5Y2V44CC6K+35YWI5YWz6Zet6K+l56qX5Y+j77yM5YaN6YeN5paw5Y+z6ZSu44CCIiwiQW5vdGhlciBuYXRpdmUgZGlhbG9nIG9yIG1lbnUgaXMgb3Blbi4gQ2xvc2UgaXQgYmVmb3JlIHJpZ2h0LWNsaWNraW5nIGFnYWluLiJdLCJuYXZpZ2F0aW9uLXVuYXZhaWxhYmxlIjpbIuacquaJvuWIsOiDveWkn+ehruiupOWvueixoei6q+S7veeahOivpuaDheWFpeWPo++8jOacquaJp+ihjOWvvOiIquOAguivt+WIt+aWsOWIl+ihqOWQjumHjeivleOAgiIsIk5vIGRldGFpbCBlbnRyeSBjb3VsZCBiZSBib3VuZCB0byB0aGlzIHJlc291cmNlLiBObyBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQuIFJlZnJlc2ggdGhlIGxpc3QgYW5kIHJldHJ5LiJdLCJ0YXJnZXQtdGltZW91dCI6WyLnrYnlvoXlrpjmlrnlr7nosaHnlYzpnaLotoXml7bvvIzmnKrngrnlh7vlkI7nu63mk43kvZzjgILor7fnoa7orqTor6bmg4Xog73lpJ/mraPluLjmiZPlvIDlkI7ph43or5XjgIIiLCJXYWl0aW5nIGZvciB0aGUgbmF0aXZlIHJlc291cmNlIHZpZXcgdGltZWQgb3V0LiBObyBsYXRlciBhY3Rpb24gd2FzIGNsaWNrZWQuIENoZWNrIHRoYXQgZGV0YWlscyBvcGVuIG5vcm1hbGx5LCB0aGVuIHJldHJ5LiJdLCJ0YXJnZXQtbWlzbWF0Y2giOlsi5peg5rOV56Gu6K6k5a6Y5pa56Z2i5p2/5LiO5Y+z6ZSu55uu5qCH55qE6Lqr5Lu95LiA6Ie077yM5oiW5b2T5YmN6Z2i5p2/5LiN5ZSv5LiA77yM5bey5YGc5q2i5pON5L2c44CC6K+35YWz6Zet5YW25LuW6K+m5oOF5ZCO6YeN6K+V44CCIiwiVGhlIG5hdGl2ZSBwYW5lbCBjb3VsZCBub3QgYmUgdW5pcXVlbHkgYm91bmQgdG8gdGhlIHRhcmdldC4gQ2xvc2Ugb3RoZXIgZGV0YWlscyBhbmQgcmV0cnkuIl0sInRyaWdnZXItbWlzc2luZyI6WyLlvZPliY3lr7nosaHooYzmsqHmnInlj6/or4bliKvnmoTlrpjmlrnigJzmm7TlpJrmk43kvZzigJ3mjInpkq7vvIzmnKrlsZXlvIDoj5zljZXjgILor7fmo4Dmn6XliJfooajmmK/lkKblt7LliqDovb3lrozmiJDjgIIiLCJUaGlzIHJvdyBoYXMgbm8gcmVjb2duaXphYmxlIG5hdGl2ZSBNb3JlIGFjdGlvbnMgdHJpZ2dlci4gTm8gbWVudSB3YXMgb3BlbmVkLiBDaGVjayB0aGF0IHRoZSBsaXN0IGZpbmlzaGVkIGxvYWRpbmcuIl0sInRyaWdnZXItYW1iaWd1b3VzIjpbIuW9k+WJjeWvueixoeihjOWtmOWcqOWkmuS4quWPr+iDveeahOWumOaWueiPnOWNleaMiemSru+8jOaXoOazleWuieWFqOmAieaLqeOAguivt+WIt+aWsOWIl+ihqOWQjumHjeivleOAgiIsIk1vcmUgdGhhbiBvbmUgbmF0aXZlIG1lbnUgdHJpZ2dlciBtYXRjaGVzIHRoaXMgcm93LiBSZWZyZXNoIHRoZSBsaXN0IGJlZm9yZSByZXRyeWluZy4iXSwicG9wdXAtdW5wcm92ZW4iOlsi5a6Y5pa56I+c5Y2V5Ye6546w5LqG77yM5L2G5peg5rOV56Gu6K6k5a6D5bGe5LqO5pys5qyh54K55Ye755qE5a+56LGh77yM5bey5YGc5q2i5ZCO57ut54K55Ye744CC6K+35YWz6Zet5YW25LuW6I+c5Y2V5ZCO6YeN6K+V44CCIiwiQSBuYXRpdmUgbWVudSBhcHBlYXJlZCwgYnV0IGl0cyBvd25lcnNoaXAgY291bGQgbm90IGJlIHZlcmlmaWVkLiBObyBmdXJ0aGVyIGl0ZW0gd2FzIGNsaWNrZWQuIENsb3NlIG90aGVyIG1lbnVzIGFuZCByZXRyeS4iXSwicG9wdXAtdGltZW91dCI6WyLngrnlh7vlrpjmlrnoj5zljZXmjInpkq7lkI7vvIznrYnlvoXoj5zljZXmiZPlvIDotoXml7bjgILor7fku47ljp/nlJ/nlYzpnaLnoa7orqTor6XmjInpkq7mmK/lkKblk43lupTjgIIiLCJUaGUgbmF0aXZlIG1lbnUgZGlkIG5vdCBvcGVuIGJlZm9yZSB0aGUgdGltZW91dC4gQ2hlY2sgd2hldGhlciBpdHMgdHJpZ2dlciByZXNwb25kcyBpbiB0aGUgbmF0aXZlIGludGVyZmFjZS4iXSwiZW50cnktbWlzc2luZyI6WyLlvZPliY3lrpjmlrnnlYzpnaLmsqHmnInmib7liLDkuI7mraTmk43kvZzljLnphY3nmoTlhaXlj6PjgILor7fmoLjlr7nlr7nosaHnirbmgIHkuI4gQ2xvdWRUb3dlciDniYjmnKzvvJvlpoLljp/nlJ/lhaXlj6PlrZjlnKjvvIzor7flsIbmraTplJnor6/miqXlkYrnu5nmj5Lku7bnu7TmiqTogIXjgIIiLCJObyBtYXRjaGluZyBhY3Rpb24gZW50cnkgd2FzIGZvdW5kIGluIHRoZSBjdXJyZW50IG5hdGl2ZSBVSS4gQ2hlY2sgdGhlIHJlc291cmNlIHN0YXRlIGFuZCBDbG91ZFRvd2VyIHZlcnNpb247IGlmIHRoZSBuYXRpdmUgZW50cnkgZXhpc3RzLCByZXBvcnQgdGhpcyBlcnJvciB0byB0aGUgcGx1Z2luIG1haW50YWluZXIuIl0sImVudHJ5LWRpc2FibGVkIjpbIkNsb3VkVG93ZXIg5b2T5YmN56aB55So5LqG5q2k5Y6f55Sf5YWl5Y+j77yM5o+S5Lu25pyq54K55Ye744CC6K+35p+l55yL5a6Y5pa555WM6Z2i5pi+56S655qE56aB55So6K+05piO44CCIiwiQ2xvdWRUb3dlciBjdXJyZW50bHkgZGlzYWJsZXMgdGhpcyBuYXRpdmUgZW50cnkuIEl0IHdhcyBub3QgY2xpY2tlZC4gQ2hlY2sgdGhlIGV4cGxhbmF0aW9uIHNob3duIGJ5IHRoZSBuYXRpdmUgVUkuIl0sImVudHJ5LWFtYmlndW91cyI6WyLlrpjmlrnnlYzpnaLkuK3mnInlpJrkuKrljLnphY3nmoTmk43kvZzlhaXlj6PvvIzml6Dms5XlronlhajpgInmi6nvvIzmnKrmiafooYzngrnlh7vjgILor7flhbPpl63ph43lpI3pnaLmnb/lkI7ph43or5XjgIIiLCJTZXZlcmFsIG5hdGl2ZSBhY3Rpb24gZW50cmllcyBtYXRjaC4gTm9uZSB3YXMgY2xpY2tlZC4gQ2xvc2UgZHVwbGljYXRlIHBhbmVscyBhbmQgcmV0cnkuIl0sIm1lbnUtZW1wdHkiOlsi5a6Y5pa56I+c5Y2V5bey5omT5byA77yM5L2G5rKh5pyJ5Y+v6K+75Y+W55qE6I+c5Y2V6aG544CC6K+356Gu6K6k6K+l5a+56LGh5Zyo5Y6f55Sf55WM6Z2i5Lit5pyJ5Y+v55So5pON5L2c44CCIiwiVGhlIG5hdGl2ZSBtZW51IG9wZW5lZCBidXQgY29udGFpbnMgbm8gcmVhZGFibGUgaXRlbXMuIENoZWNrIHdoZXRoZXIgdGhpcyBvYmplY3QgaGFzIGFjdGlvbnMgaW4gdGhlIG5hdGl2ZSBVSS4iXSwibWVudS1hbWJpZ3VvdXMiOlsi5a6Y5pa56I+c5Y2V57uT5p6E5oiW5pON5L2c6aG55LiN5ZSv5LiA77yM5peg5rOV56Gu5a6a5ZSv5LiA55uu5qCH77yM5pyq54K55Ye744CC6K+355u05o6l5L2/55So5Y6f55Sf6I+c5Y2V44CCIiwiVGhlIG5hdGl2ZSBtZW51IHN0cnVjdHVyZSBvciBhY3Rpb24gaXRlbXMgYXJlIGFtYmlndW91cy4gTm8gaXRlbSB3YXMgY2xpY2tlZC4gVXNlIHRoZSBuYXRpdmUgbWVudSBkaXJlY3RseS4iXSwibWVudS1jaGFuZ2VkIjpbIuWumOaWueiPnOWNleeahOWxgue6p+OAgeagh+etvuaIlueKtuaAgeW3suWPmOWMlu+8jOW3suWPlua2iOaXp+aTjeS9nOOAguivt+mHjeaWsOWPs+mUruivu+WPluacgOaWsOiPnOWNleOAgiIsIlRoZSBuYXRpdmUgbWVudSBoaWVyYXJjaHksIGxhYmVscyBvciBzdGF0ZSBjaGFuZ2VkLiBSaWdodC1jbGljayBhZ2FpbiB0byByZWFkIHRoZSBjdXJyZW50IG1lbnUuIl0sImRlcHRoLWxpbWl0IjpbIuWumOaWueiPnOWNleeahOWxgue6p+aIluadoeebruaVsOmHj+i2hei/h+WuieWFqOivu+WPluS4iumZkO+8jOacque7p+e7reWxleW8gOOAguivt+S9v+eUqOWOn+eUn+iPnOWNleWujOaIkOatpOaTjeS9nOOAgiIsIlRoZSBuYXRpdmUgbWVudSBleGNlZWRzIHRoZSBzYWZlIGRlcHRoIG9yIGl0ZW0tY291bnQgbGltaXQuIFVzZSB0aGUgbmF0aXZlIG1lbnUgZm9yIHRoaXMgb3BlcmF0aW9uLiJdLCJzdXJmYWNlLXRpbWVvdXQiOlsi5bey54K55Ye75a6Y5pa55YWl5Y+j77yM5L2G5pyq5Zyo5pe26ZmQ5YaF56Gu6K6k6aKE5pyf5a+56K+d5qGG5oiW6aG1562+44CC6K+35YWI5qOA5p+l6aG16Z2i5piv5ZCm5bey5omT5byA56qX5Y+j77yM6YG/5YWN6YeN5aSN5pON5L2c44CCIiwiVGhlIG5hdGl2ZSBlbnRyeSB3YXMgY2xpY2tlZCwgYnV0IGl0cyBleHBlY3RlZCBkaWFsb2cgb3IgdGFiIHdhcyBub3QgY29uZmlybWVkIGluIHRpbWUuIENoZWNrIGZvciBhbiBvcGVuIHdpbmRvdyBiZWZvcmUgcmV0cnlpbmcuIl0sImFjdGl2YXRpb24tZXhwaXJlZCI6WyLmtY/op4jlmajnmoTnlKjmiLfngrnlh7vmv4DmtLvlt7Lov4fmnJ/vvIzmnKrlsJ3or5XmiZPlvIDmjqfliLblj7Dnqpflj6PjgILor7flnKjnm67moIfor6bmg4XkuK3ph43mlrDngrnlh7vigJzmiZPlvIDnu4jnq6/igJ3jgIIiLCJCcm93c2VyIHVzZXIgYWN0aXZhdGlvbiBleHBpcmVkLiBObyBjb25zb2xlIHdpbmRvdyB3YXMgcmVxdWVzdGVkLiBDbGljayBPcGVuIGNvbnNvbGUgYWdhaW4gaW4gdGhlIHRhcmdldOKAmXMgZGV0YWlscy4iXSxjYW5jZWxsZWQ6WyLmk43kvZzlt7Llj5bmtojvvIzmnKrnu6fnu63ngrnlh7vljp/nlJ/lhaXlj6PjgIIiLCJUaGUgYWN0aW9uIHdhcyBjYW5jZWxsZWQuIE5vIGZ1cnRoZXIgbmF0aXZlIGVudHJ5IHdhcyBjbGlja2VkLiJdLHVuZXhwZWN0ZWQ6WyLoj5zljZXlpITnkIblj5HnlJ/lvILluLjvvIzml6Dms5Xnoa7orqTlvZPliY3mk43kvZzmmK/lkKblt7LkuqTmjqXjgILor7flhYjmo4Dmn6XpobXpnaLlkozlrpjmlrnku7vliqHvvIzlho3lhrPlrprmmK/lkKbph43or5XjgIIiLCJBbiB1bmV4cGVjdGVkIG1lbnUgZXJyb3IgcHJldmVudHMgY29uZmlybWF0aW9uIG9mIHRoZSBoYW5kb2ZmLiBDaGVjayB0aGUgcGFnZSBhbmQgbmF0aXZlIHRhc2tzIGJlZm9yZSByZXRyeWluZy4iXX07ZnVuY3Rpb24gWihlLHQ9InpoLUNOIil7Y29uc3Qgbj0ic3RyaW5nIj09dHlwZW9mIGUmJk9iamVjdC5oYXNPd24oSyxlKT9lOiJ1bmV4cGVjdGVkIjtyZXR1cm5gJHtLW25dWyJlbi1VUyI9PT10PzE6MF19ICgke259KWB9Y29uc3QgUT0iW2RhdGEtcml2ZXRpbi1vYmplY3QtbWVudV0iLFg9YCR7UX17cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3JpZ2h0OmF1dG87Ym90dG9tOmF1dG87bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7ei1pbmRleDoyMTQ3NDgzMDAwO3dpZHRoOjMxMHB4O21heC13aWR0aDpjYWxjKDEwMHZ3IC0gMTZweCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiMxNDI2NDA7Zm9udDppbmhlcml0O2xpbmUtaGVpZ2h0OjEuNTtvdmVyZmxvdzp2aXNpYmxlfVxuJHtRfTo6YmFja2Ryb3B7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtwb2ludGVyLWV2ZW50czpub25lfVxuJHtRfSAucnZtLW1haW4sJHtRfSAucnZtLXN1Ym1lbnV7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGU1ZWY7Ym9yZGVyLXJhZGl1czo4cHg7Ym94LXNoYWRvdzowIDhweCAzMHB4ICMxODJiNGMzMDtwYWRkaW5nOjZweDttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSAxNnB4KTtvdmVyZmxvdzphdXRvfVxuJHtRfSAucnZtLXN1Ym1lbnV7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3dpZHRoOjMxMHB4O21heC13aWR0aDpjYWxjKDEwMHZ3IC0gMTZweCk7ei1pbmRleDoxfVxuJHtRfSAucnZtLWhlYWRpbmd7cGFkZGluZzo5cHggMTBweDtmb250LXdlaWdodDo2MDA7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTllZGYzfVxuJHtRfSAucnZtLXN0YXR1c3twYWRkaW5nOjhweCAxMHB4O2NvbG9yOiM3NDgzOWE7Zm9udC1zaXplOjEycHg7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX1cbiR7UX0gYnV0dG9ue2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Zm9udDppbmhlcml0O2N1cnNvcjpwb2ludGVyfVxuJHtRfSBidXR0b246aG92ZXIsJHtRfSBidXR0b246Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kOiNlYWY0ZmY7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7Y29sb3I6IzA2NmNkYn1cbiR7UX0gYnV0dG9uOmRpc2FibGVke2NvbG9yOiM2ODc4OGY7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZDpub25lO29wYWNpdHk6MX1cbiR7UX0gLnJ2bS1kYW5nZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6I2Q2MmM0M31cbiR7UX0gLnJ2bS1yZWFzb257ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3JtYWw7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM3NDgzOWE7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX1cbiR7UX0gLnJ2bS1ncm91cHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxNnB4fVxuJHtRfSAucnZtLWdyb3VwW2FyaWEtZXhwYW5kZWQ9InRydWUiXXtiYWNrZ3JvdW5kOiNlYWY0ZmY7Y29sb3I6IzA2NmNkYn1cbiR7UX0gLnJ2bS1ncm91cC1hcnJvd3tmb250LXNpemU6MjBweDtsaW5lLWhlaWdodDoxO2NvbG9yOiM4Nzk1YTh9XG4ke1F9IC5ydm0tc2hvcnRjdXRze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDUsbWlubWF4KDAsMWZyKSk7Z2FwOjRweDtwYWRkaW5nOjVweCAwIDhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTllZGYzfVxuJHtRfSAucnZtLXNob3J0Y3V0e3BhZGRpbmc6OHB4IDJweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7YmFja2dyb3VuZDp2YXIoLS1ydm0tdGludCk7Y29sb3I6dmFyKC0tcnZtLWNvbG9yKX1cbiR7UX0gLnJ2bS1zaG9ydGN1dDpob3Zlciwke1F9IC5ydm0tc2hvcnRjdXQ6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kOnZhcigtLXJ2bS10aW50KTtjb2xvcjp2YXIoLS1ydm0tY29sb3IpO291dGxpbmU6MnB4IHNvbGlkIHZhcigtLXJ2bS1jb2xvcik7b3V0bGluZS1vZmZzZXQ6LTJweH1cbiR7UX0gLnJ2bS1zaG9ydGN1dDpkaXNhYmxlZHtiYWNrZ3JvdW5kOiNmM2Y1Zjg7Y29sb3I6IzY4Nzg4ZjtvdXRsaW5lOjA7b3BhY2l0eToxfVxuJHtRfSAucnZtLWNvcHl7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U5ZWRmMzttYXJnaW4tdG9wOjVweDtib3JkZXItcmFkaXVzOjA7Y29sb3I6IzA4NmZkNjtmb250LXNpemU6MTJweH1cbltkYXRhLXJpdmV0aW4tbmF0aXZlLWZlZWRiYWNrXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjIxNDc0ODMwMDE7bGVmdDoxNnB4O2JvdHRvbToxNnB4O21heC13aWR0aDptaW4oNTIwcHgsY2FsYygxMDB2dyAtIDMycHgpKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxNHB4IDQycHggMTRweCAxNnB4O2JvcmRlcjoxcHggc29saWQgI2U3Yzk4ZTtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiNmZmY5ZWQ7Y29sb3I6IzY4NDYwMDtib3gtc2hhZG93OjAgNnB4IDI0cHggIzE4MmI0YzI0O2ZvbnQ6MTRweC8xLjUgc2Fucy1zZXJpZjtvdmVyZmxvdy13cmFwOmFueXdoZXJlfVxuW2RhdGEtcml2ZXRpbi1uYXRpdmUtZmVlZGJhY2tdIGJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo4cHg7dG9wOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDoyMHB4IHNhbnMtc2VyaWY7Y3Vyc29yOnBvaW50ZXJ9XG5gLFk9ZT0+T2JqZWN0LmZyZWV6ZSh7dHlwZToidm0iLGlkOmUuaWQsbmFtZTpTdHJpbmcoZS5uYW1lfHwiIikuc2xpY2UoMCwyMDApfSksZWU9ZT0+SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSk7ZnVuY3Rpb24gdGUoe2FuY2hvcjplLHdpZHRoOnQsaGVpZ2h0Om4sdmlld3BvcnRXaWR0aDpyLHZpZXdwb3J0SGVpZ2h0Om99KXtjb25zdCBpPWUucmlnaHQsYT1lLmxlZnQtdCxzPWkrdDw9ci04PyJyaWdodCI6YT49OD8ibGVmdCI6ci1lLnJpZ2h0Pj1lLmxlZnQ/InJpZ2h0IjoibGVmdCI7cmV0dXJue3NpZGU6cyxsZWZ0Ok1hdGgubWF4KDgsTWF0aC5taW4oInJpZ2h0Ij09PXM/aTphLHItdC04KSksdG9wOk1hdGgubWF4KDgsTWF0aC5taW4oZS50b3Asby1uLTgpKX19ZnVuY3Rpb24gbmUoe3dpbjplLHByb3ZpZGVyOnQsZ2V0TG9jYWxlOm49KCk9PiJ6aC1DTiIsaXNFbmFibGVkOnI9KCk9PiEwLG9uRXJyb3I6bz0oKT0+e319KXtjb25zdCBpPWUuZG9jdW1lbnQsYT1pLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50ZXh0Q29udGVudD1YLGkuaGVhZC5hcHBlbmQoYSk7Y29uc3Qgcz0iZnVuY3Rpb24iPT10eXBlb2YgdD8ucmVhZCYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/Lm9wZW47bGV0IGw9bnVsbCxjPSExLGQ9MCx1PW51bGwsbT1udWxsO2NvbnN0IHA9KGUsdCk9PiJlbi1VUyI9PT1uKCk/dDplLGY9KCk9PlooInByb3ZpZGVyLXVuYXZhaWxhYmxlIixuKCkpO2Z1bmN0aW9uIGgoKXtlLmNsZWFyVGltZW91dChtKSxtPW51bGwsdT8ucmVtb3ZlKCksdT1udWxsfWZ1bmN0aW9uIHYodCl7aWYoYylyZXR1cm47aCgpLHU9aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx1LmRhdGFzZXQucml2ZXRpbk5hdGl2ZUZlZWRiYWNrPSIiLHUuc2V0QXR0cmlidXRlKCJyb2xlIiwiYWxlcnQiKSx1LmFwcGVuZChpLmNyZWF0ZVRleHROb2RlKHQpKTtjb25zdCBuPWkuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7bi50eXBlPSJidXR0b24iLG4udGV4dENvbnRlbnQ9IsOXIixuLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIscCgi5YWz6Zet5o+Q56S6IiwiRGlzbWlzcyBub3RpY2UiKSksbi5vbmNsaWNrPWU9PntlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxoKCl9LHUuYXBwZW5kKG4pLGkuYm9keS5hcHBlbmQodSksbT1lLnNldFRpbWVvdXQoaCwzZTQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIWMmJnIodC5yZXNvdXJjZSkmJnQuc291cmNlLmlzQ29ubmVjdGVkJiYoIXQubW91bnRlZHx8dC5tZW51LmlzQ29ubmVjdGVkJiZSKGUsdC5zb3VyY2UpPT09dC5jb250YWluZXIpJiZnKEEodC5zb3VyY2UsZSksdC5yZXNvdXJjZSkmJmUubG9jYXRpb24uaHJlZj09PXQuaHJlZn1mdW5jdGlvbiB3KCl7Y29uc3QgdD1sO2lmKHQpe2lmKGw9bnVsbCx0Lm9ic2VydmVyPy5kaXNjb25uZWN0KCksZS5jbGVhckludGVydmFsKHQuZ3VhcmQpLE4odCksdC5jb3B5JiYoZS5jbGVhclRpbWVvdXQodC5jb3B5LnRpbWVyKSx0LmNvcHk9bnVsbCksdC53b3JrJiYoZS5jbGVhclRpbWVvdXQodC53b3JrLnRpbWVyKSx0LndvcmsuY29udHJvbGxlci5hYm9ydCgpLHQud29yaz1udWxsKSx0LnRvcExheWVyKXRyeXt0Lm1lbnUuaGlkZVBvcG92ZXIoKX1jYXRjaHt9dC5tZW51LnJlbW92ZSgpfX1mdW5jdGlvbiB5KHQsbil7cmV0dXJuIShsIT09dHx8dC53b3JrIT09bnx8bi5jb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkfHwoYih0KT9lLnBlcmZvcm1hbmNlLm5vdygpPj1uLmRlYWRsaW5lJiYoayh0LG4pLDEpOih3KCksMSkpKX1mdW5jdGlvbiBrKGUsbil7aWYobCE9PWV8fGUud29yayE9PW4pcmV0dXJuO2NvbnN0IHI9cCgi5pON5L2c56Gu6K6k6LaF5pe277yM5bey5Y+W5raI44CC6K+36YeN5paw5omT5byA6I+c5Y2V44CCIiwiQWN0aW9uIHZlcmlmaWNhdGlvbiB0aW1lZCBvdXQgYW5kIHdhcyBjYW5jZWxsZWQuIE9wZW4gdGhlIG1lbnUgYWdhaW4uIik7dygpLCJuYXRpdmUtdWkiPT09dD8ua2luZCYmdihyKSxvKHIpfWZ1bmN0aW9uIHgoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/LnRyZWU/dC50cmVlKHtyZXNvdXJjZTplLnJlc291cmNlLGRhdGE6ZS5uYXRpdmVEYXRhfHxlLmRhdGEsbG9jYWxlOm4oKX0pOmZ1bmN0aW9uKHtyZXNvdXJjZTplLHNuYXBzaG90OnQsY2FwYWJpbGl0aWVzOm49e30sbG9jYWxlOnI9InpoLUNOIn09e30pe2lmKCJ2bSIhPT1lPy50eXBlKXJldHVybltdO2NvbnN0IG89VyhyKTtyZXR1cm4gai5tYXAocj0+KHtpZDpyLmlkLGxhYmVsOnIubGFiZWxzW29dLGl0ZW1zOnIuaXRlbXMubWFwKHI9Pntjb25zdCBpPU9iamVjdC5oYXNPd24obnx8e30sci5pZCk/bltyLmlkXTp2b2lkIDAsYT1mdW5jdGlvbihlLHQsbixyKXtpZighZS5vcGVyYXRpb24pcmV0dXJuInVuc3VwcG9ydGVkIjtpZighSCh0LmlkKXx8IW58fCFIKG4uaWQpKXJldHVybiJwcmVmbGlnaHQiO2lmKHQuaWQhPT1uLmlkKXJldHVybiJtaXNtYXRjaCI7aWYoIVsiUlVOTklORyIsIlNUT1BQRUQiLCJTVVNQRU5ERUQiXS5pbmNsdWRlcyhuLnN0YXR1cykpcmV0dXJuInN0YXRlVW5rbm93biI7aWYoZS5taWdyYXRpb25Db250cm9sKXtjb25zdCB0PWZ1bmN0aW9uKGUsdCl7aWYoIUoodCl8fCJFWEVDVVRJTkciIT09dC5taWdyYXRpb24udGFza1N0YXR1cylyZXR1cm4ibWlncmF0aW9uVW5rbm93biI7Y29uc3Qgbj10Lm1pZ3JhdGlvbjtyZXR1cm4oImN1dG92ZXIiPT09ZS5taWdyYXRpb25Db250cm9sPyJBV0FJVElOR19DVVRPVkVSIj09PW4ucGhhc2U6WyJUUkFOU0ZFUlJJTkciLCJBV0FJVElOR19DVVRPVkVSIl0uaW5jbHVkZXMobi5waGFzZSkpJiYhMD09PW4uY29udHJvbHM/LltlLm1pZ3JhdGlvbkNvbnRyb2xdP251bGw6Im1pZ3JhdGlvblBoYXNlIn0oZSxuKTtpZih0KXJldHVybiB0fWNvbnN0IG89ZS5taWdyYXRpb25Db250cm9sJiYiVVBEQVRJTkciPT09bi5lbnRpdHlBc3luY1N0YXR1cyYmITA9PT1uLm1pZ3JhdGlvbj8ub3duc1ZtVXBkYXRlO3JldHVybiBuLmVudGl0eUFzeW5jU3RhdHVzJiYhb3x8ZS5tdXRhdGlvbiYmITA9PT1uLmhhc0FjdGl2ZVRhc2smJiFlLm1pZ3JhdGlvbkNvbnRyb2w/ImJ1c3kiOmUubXV0YXRpb24mJiFlLm1pZ3JhdGlvbkNvbnRyb2wmJkoobikmJlsiUEVORElORyIsIkVYRUNVVElORyIsIlBBVVNFRCJdLmluY2x1ZGVzKG4ubWlncmF0aW9uLnRhc2tTdGF0dXMpPyJtaWdyYXRpb25BY3RpdmUiOmUubXV0YXRpb24mJiEwPT09bi5wcm90ZWN0ZWQ/InByb3RlY3RlZCI6ZS5tdXRhdGlvbiYmITA9PT1uLmludGVybmFsPyJpbnRlcm5hbCI6Im91dCI9PT1lLnJlY3ljbGUmJiEwPT09bi5pbl9yZWN5Y2xlX2Jpbj8icmVjeWNsZWQiOiJpbiI9PT1lLnJlY3ljbGUmJiEwIT09bi5pbl9yZWN5Y2xlX2Jpbj8ibm90UmVjeWNsZWQiOmUuc3RhdHVzZXMmJiFlLnN0YXR1c2VzLmluY2x1ZGVzKG4uc3RhdHVzKT8ic3RhdGUiOmUucmVxdWlyZXNHdWVzdEFnZW50JiYiUlVOTklORyIhPT1uLnZtX3Rvb2xzX3N0YXR1cz8iZ3Vlc3RBZ2VudCI6ZS5yZXF1aXJlc0ZvbGRlciYmIUgobi5mb2xkZXI/LmlkKT8iZm9sZGVyIjohMT09PXI/LmFsbG93ZWQ/ImRlbmllZCI6ITAhPT1yPy5hbGxvd2VkPyJwZXJtaXNzaW9uVW5rbm93biI6bnVsbH0ocixlLHQsaSkscz1pPy5yZWFzb24sbD0idW5zdXBwb3J0ZWQiPT09YT9yLnVuc3VwcG9ydGVkUmVhc29uPy5bb106ImRlbmllZCI9PT1hJiYoInN0cmluZyI9PXR5cGVvZiBzP3M6cz8uW29dKSxjPUgoZS5pZCkmJmUuaWQ9PT10Py5pZD9lLmlkOm51bGw7cmV0dXJue2lkOnIuaWQsbGFiZWw6ci5sYWJlbHNbb10sZW5hYmxlZDohYSxyZWFzb246bHx8KGE/RlthXVtvXToiIikscmVhc29uQ29kZTphLGZvcm06ci5mb3JtLGRhbmdlcjpyLmRhbmdlcixtdXRhdGlvbjpyLm11dGF0aW9uLGJpbmRpbmdTb3VyY2U6ci5iaW5kaW5nU291cmNlfHxudWxsLG9wZXJhdGlvbjpyLm9wZXJhdGlvbj97Li4uci5vcGVyYXRpb259Om51bGwsdGFyZ2V0Ont0eXBlOnIudGFyZ2V0VHlwZSxpZDoidm0iPT09ci50YXJnZXRUeXBlP2M6bnVsbCxwYXJlbnRWbUlkOiJ2bSI9PT1yLnRhcmdldFR5cGU/bnVsbDpjfSxzZWxlY3Rpb246ci5zZWxlY3Rpb25UeXBlP3t0eXBlOnIuc2VsZWN0aW9uVHlwZSxpZHM6W10scGFyZW50Vm1JZDpjfTpudWxsfX0pfSkpfSh7cmVzb3VyY2U6ZS5yZXNvdXJjZSxzbmFwc2hvdDplLmRhdGE/LnNuYXBzaG90LGNhcGFiaWxpdGllczplLmRhdGE/LmNhcGFiaWxpdGllcyxsb2NhbGU6bigpfSl9ZnVuY3Rpb24gRShlLG4pe2UubmF0aXZlUHJvb2Y9Im5hdGl2ZS11aSI9PT10Py5raW5kP24/LnNuYXBzaG90Om51bGwsZS5uYXRpdmVEYXRhPSJuYXRpdmUtdWkiPT09dD8ua2luZD9uOm51bGwsZS5kYXRhPWVlKHtzbmFwc2hvdDpuPy5zbmFwc2hvdHx8bnVsbCxjYXBhYmlsaXRpZXM6bj8uY2FwYWJpbGl0aWVzfHx7fSxuYXRpdmU6bj8ubmF0aXZlfHxudWxsfSksZS5kYXRhLnNuYXBzaG90Py5pZCE9PWUucmVzb3VyY2UuaWQmJihlLm5vdGljZT1wKCLlr7nosaEgSUQg5LiO54q25oCB5b+r54Wn5LiN5LiA6Ie077yM6K+36YeN5paw6K+75Y+W44CCIiwiVGhlIHJlc291cmNlIElEIGRvZXMgbm90IG1hdGNoIHRoZSBzbmFwc2hvdC4iKSl9ZnVuY3Rpb24gUyh0LHIpe2lmKGwhPT10KXJldHVybjtpZighYih0KSlyZXR1cm4gdm9pZCB3KCk7dC53b3JrJiYoZS5jbGVhclRpbWVvdXQodC53b3JrLnRpbWVyKSx0LndvcmsuY29udHJvbGxlci5hYm9ydCgpKTtjb25zdCBpPXtjb250cm9sbGVyOm5ldyBlLkFib3J0Q29udHJvbGxlcix0aW1lcjpudWxsLGRlYWRsaW5lOmUucGVyZm9ybWFuY2Uubm93KCkrOGUzfTt0Lndvcms9aSxpLnRpbWVyPWUuc2V0VGltZW91dCgoKT0+e2w9PT10JiZ0Lndvcms9PT1pJiZrKHQsaSl9LDhlMyksKGFzeW5jKCk9Pnt0cnl7eSh0LGkpJiZhd2FpdCByKGkpfWNhdGNoe3kodCxpKSYmKHQubm90aWNlPVooInVuZXhwZWN0ZWQiLG4oKSksbyh0Lm5vdGljZSkpfWZpbmFsbHl7ZS5jbGVhclRpbWVvdXQoaS50aW1lciksbD09PXQmJnQud29yaz09PWkmJih0Lndvcms9bnVsbCx0LmxvYWRpbmc9ITEsdC5idXN5PSExLGIodCk/TSh0KTp3KCkpfX0pKCl9ZnVuY3Rpb24gQyhyLGkpe2w9PT1yJiZzJiYhci53b3JrJiZiKHIpJiYoci5idXN5PSEwLHIubm90aWNlPSJuYXRpdmUtdWkiPT09dD8ua2luZD9wKCLmraPlnKjlrprkvY3lrpjmlrnmk43kvZzlhaXlj6PigKYiLCJMb2NhdGluZyB0aGUgb2ZmaWNpYWwgYWN0aW9uIGVudHJ54oCmIik6cCgi5q2j5Zyo6YeN5paw56Gu6K6k54q25oCB5LiO5p2D6ZmQ4oCmIiwiUmVjaGVja2luZyBjdXJyZW50IHN0YXRlIGFuZCBhdXRob3JpemF0aW9u4oCmIiksTShyKSxTKHIsYXN5bmMgYT0+e2NvbnN0IHM9YXdhaXQgdC5yZWFkKHIucmVzb3VyY2Use3NpZ25hbDphLmNvbnRyb2xsZXIuc2lnbmFsfSk7aWYoIXkocixhKSlyZXR1cm47RShyLHMpO2NvbnN0IGw9eChyKS5mbGF0TWFwKGU9PmUuaXRlbXMpLmZpbmQoZT0+ZS5pZD09PWkpO2lmKCFsPy5lbmFibGVkfHxyLmRhdGEuc25hcHNob3Q/LmlkIT09ci5yZXNvdXJjZS5pZClyZXR1cm4gdm9pZChyLm5vdGljZT1sPy5yZWFzb258fHAoIuWvueixoeeKtuaAgeW3suWPmOWMlu+8jOaTjeS9nOW3suWPlua2iOOAgiIsIlRoZSByZXNvdXJjZSBzdGF0ZSBjaGFuZ2VkOyB0aGUgYWN0aW9uIHdhcyBjYW5jZWxsZWQuIikpO2lmKCF5KHIsYSkpcmV0dXJuO2lmKCEwPT09dC5oYW5kb2ZmQmVmb3JlT3Blbil7bGV0IHM7ci53b3JrPW51bGwsZS5jbGVhclRpbWVvdXQoYS50aW1lciksdygpO3RyeXtzPWF3YWl0IHQub3Blbih7cmVzb3VyY2U6ci5yZXNvdXJjZSxhY3Rpb25JZDppLGFjdGlvbjplZShsKSxzbmFwc2hvdDpyLm5hdGl2ZVByb29mfSx7c2lnbmFsOmEuY29udHJvbGxlci5zaWduYWx9KX1jYXRjaHtjb25zdCBlPVooInVuZXhwZWN0ZWQiLG4oKSk7cmV0dXJuIHYoZSksdm9pZCBvKGUpfWlmKCFbIm9wZW5lZCIsImhhbmRlZC1vZmYiLCJjYW5jZWxsZWQiXS5pbmNsdWRlcyhzPy5zdGF0dXMpKXtjb25zdCBlPVoocz8ucmVhc29uLG4oKSk7dihlKSxzPy5yZXBvcnRlZHx8byhlKX1yZXR1cm59Y29uc3QgYz1hd2FpdCB0Lm9wZW4oe3Jlc291cmNlOnIucmVzb3VyY2UsYWN0aW9uSWQ6aSxhY3Rpb246ZWUobCksc25hcHNob3Q6ZWUoci5kYXRhLnNuYXBzaG90KX0se3NpZ25hbDphLmNvbnRyb2xsZXIuc2lnbmFsfSk7eShyLGEpJiYoIm9wZW5lZCI9PT1jPy5zdGF0dXN8fCJjYW5jZWxsZWQiPT09Yz8uc3RhdHVzPyhyLndvcms9bnVsbCxlLmNsZWFyVGltZW91dChhLnRpbWVyKSx3KCkpOnIubm90aWNlPVooYz8ucmVhc29uLG4oKSkpfSkpfWZ1bmN0aW9uIFYodCl7aWYoIXQuc3VibWVudXx8IXQuZ3JvdXApcmV0dXJuO2NvbnN0IG49Wy4uLnQubWVudS5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1ncm91cC1pZF0iKV0uZmluZChlPT5lLmRhdGFzZXQuZ3JvdXBJZD09PXQuZ3JvdXApO2lmKCFuKXJldHVybiB2b2lkIEkodCk7dC5zdWJtZW51LnN0eWxlLmxlZnQ9IjBweCIsdC5zdWJtZW51LnN0eWxlLnRvcD0iMHB4Ijtjb25zdCByPXQuc3VibWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXRlKHthbmNob3I6bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodCx2aWV3cG9ydFdpZHRoOmUuaW5uZXJXaWR0aCx2aWV3cG9ydEhlaWdodDplLmlubmVySGVpZ2h0fSk7dC5zdWJtZW51LnN0eWxlLmxlZnQ9by5sZWZ0LXIubGVmdCsicHgiLHQuc3VibWVudS5zdHlsZS50b3A9by50b3Atci50b3ArInB4Iix0LnN1Ym1lbnUuZGF0YXNldC5zaWRlPW8uc2lkZX1mdW5jdGlvbiBOKHQpe251bGwhPT10LnN1Ym1lbnVUaW1lciYmZS5jbGVhclRpbWVvdXQodC5zdWJtZW51VGltZXIpLHQuc3VibWVudVRpbWVyPW51bGx9ZnVuY3Rpb24gVCh0LG4pe2w9PT10JiZ0Lmdyb3VwJiYobi5yZWxhdGVkVGFyZ2V0JiZ0Lm1lbnUuY29udGFpbnMobi5yZWxhdGVkVGFyZ2V0KXx8KE4odCksdC5zdWJtZW51VGltZXI9ZS5zZXRUaW1lb3V0KCgpPT57dC5zdWJtZW51VGltZXI9bnVsbCxsPT09dCYmSSh0KX0sMjAwKSkpfWZ1bmN0aW9uIEkoZSx0PSExKXtOKGUpO2NvbnN0IG49Wy4uLmUubWVudS5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1ncm91cC1pZF0iKV0uZmluZCh0PT50LmRhdGFzZXQuZ3JvdXBJZD09PWUuZ3JvdXApO2Uuc3VibWVudT8ucmVtb3ZlKCksZS5zdWJtZW51PW51bGwsZS5ncm91cD1udWxsO2Zvcihjb25zdCB0IG9mIGUubWVudS5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1ncm91cC1pZF0iKSl0LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIik7dCYmbj8uZm9jdXMoKX1mdW5jdGlvbiBQKGUsdCxuLHIpe2NvbnN0IG89aS5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtyZXR1cm4gby50eXBlPSJidXR0b24iLG8uc2V0QXR0cmlidXRlKCJyb2xlIiwibWVudWl0ZW0iKSxvLnRleHRDb250ZW50PXQsby5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdD0+e3Quc3RvcFByb3BhZ2F0aW9uKCksbD09PWUmJm8uaXNDb25uZWN0ZWQmJmUubWVudS5jb250YWlucyhvKSYmKGIoZSkmJiFvLmRpc2FibGVkP24oKTpiKGUpfHx3KCkpfSksci5hcHBlbmQobyksb31mdW5jdGlvbiBPKGUsdCxuPSExKXtpZihsIT09ZXx8IWIoZSkpcmV0dXJuIHZvaWQobD09PWUmJncoKSk7TihlKTtjb25zdCByPWUuZ3JvdXBzPy5maW5kKGU9PmUuaWQ9PT10KSxvPVsuLi5lLm1lbnUucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtZ3JvdXAtaWRdIildLmZpbmQoZT0+ZS5kYXRhc2V0Lmdyb3VwSWQ9PT10KTtpZihyJiZvKXtpZihlLmdyb3VwIT09dHx8IWUuc3VibWVudT8uaXNDb25uZWN0ZWQpe0koZSksZS5ncm91cD10O2NvbnN0IG49aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmNsYXNzTmFtZT0icnZtLXN1Ym1lbnUiLG4uc2V0QXR0cmlidXRlKCJkYXRhLXJpdmV0aW4tc3VibWVudSIsIiIpLG4uaWQ9by5nZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiKSxuLnNldEF0dHJpYnV0ZSgicm9sZSIsIm1lbnUiKSxuLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsci5sYWJlbCksbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsby5pZCksbi5kYXRhc2V0Lm1lbnVSZWdpb249InN1Ym1lbnUiLGUuc3VibWVudT1uO2Zvcihjb25zdCB0IG9mIHIuaXRlbXMpe2NvbnN0IHI9UChlLHQubGFiZWwsKCk9PkMoZSx0LmlkKSxuKTtyLmRhdGFzZXQuYWN0aW9uSWQ9dC5pZCxyLmRhdGFzZXQubWVudUtleT10LmlkLHIuZGlzYWJsZWQ9IXN8fGUubG9hZGluZ3x8ZS5idXN5fHwhdC5lbmFibGVkLCJkYW5nZXIiPT09dC5kYW5nZXImJihyLmNsYXNzTmFtZT0icnZtLWRhbmdlciIpO2NvbnN0IG89cz90LnJlYXNvbjpmKCk7aWYodC5ndWlkZSYmKHIudGl0bGU9dC5ndWlkZSksbyl7Y29uc3QgZT1pLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtlLmNsYXNzTmFtZT0icnZtLXJlYXNvbiIsZS50ZXh0Q29udGVudD1vLHIuYXBwZW5kKGUpLHIudGl0bGU9b319bi5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCgpPT5OKGUpKSxuLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCgpPT5OKGUpKSxlLm1lbnUuYXBwZW5kKG4pLG8uc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpfVYoZSksbiYmZS5zdWJtZW51LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbjpub3QoOmRpc2FibGVkKSIpPy5mb2N1cygpfX1mdW5jdGlvbiBNKHIpe2lmKGwhPT1yKXJldHVybjtjb25zdCBvPXIubWVudS5jb250YWlucyhpLmFjdGl2ZUVsZW1lbnQpLGE9aS5hY3RpdmVFbGVtZW50Py5kYXRhc2V0Lm1lbnVLZXksYz1yLmdyb3VwO04ociksci5zdWJtZW51PW51bGwsci5tZW51LnJlcGxhY2VDaGlsZHJlbigpO2NvbnN0IGQ9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTmFtZT0icnZtLW1haW4iLHIubWVudS5hcHBlbmQoZCksZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCgpPT57Y29uc3QgZT1bLi4uUy5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1ncm91cC1pZF0iKV0uZmluZChlPT5lLmRhdGFzZXQuZ3JvdXBJZD09PXIuZ3JvdXApO2lmKCFlKXJldHVybjtjb25zdCB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuYm90dG9tPD1uLnRvcHx8dC50b3A+PW4uYm90dG9tP0kocik6VihyKX0pO2NvbnN0IHU9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTmFtZT0icnZtLWhlYWRpbmciLHUudGV4dENvbnRlbnQ9ci5yZXNvdXJjZS5uYW1lfHxyLnJlc291cmNlLmlkLGQuYXBwZW5kKHUpO2NvbnN0IG09aS5jcmVhdGVFbGVtZW50KCJkaXYiKTttLmNsYXNzTmFtZT0icnZtLXN0YXR1cyIsbS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJzdGF0dXMiKSxtLnRleHRDb250ZW50PXIubm90aWNlfHwocz8ibmF0aXZlLXVpIj09PXQ/LmtpbmQ/cCgi6YWN572u5ZKM56Gu6K6k5bCG5ZyoIENsb3VkVG93ZXIg5a6Y5pa55Y6f55Sf55WM6Z2i5a6M5oiQ44CCIiwiQ29uZmlndXJhdGlvbiBhbmQgY29uZmlybWF0aW9uIHRha2UgcGxhY2UgaW4gQ2xvdWRUb3dlcuKAmXMgbmF0aXZlIFVJLiIpOnIubG9hZGluZz9wKCLmraPlnKjor7vlj5bnirbmgIHkuI7mnYPpmZDigKYiLCJSZWFkaW5nIGN1cnJlbnQgc3RhdGUgYW5kIGF1dGhvcml6YXRpb27igKYiKTpwKCLmiZPlvIDooajljZXliY3kvJrlho3mrKHnoa7orqTnirbmgIHkuI7mnYPpmZDjgIIiLCJTdGF0ZSBhbmQgYXV0aG9yaXphdGlvbiBhcmUgY2hlY2tlZCBhZ2FpbiBiZWZvcmUgb3BlbmluZyBhIGZvcm0uIik6ZigpKSxkLmFwcGVuZChtKTtjb25zdCBoPShlLHQsbj1kKT0+UChyLGUsdCxuKSxnPXgocik7ci5ncm91cHM9Zztjb25zdCB2PWcuZmxhdE1hcChlPT5lLml0ZW1zKSx3PXIuZGF0YT8uc25hcHNob3Q/LnN0YXR1cyx5PSJuYXRpdmUtdWkiPT09dD8ua2luZD8idm0ucG93ZXIubWVudSI6IlJVTk5JTkciPT09dz8idm0ucG93ZXIuc2h1dGRvd24iOiJTVE9QUEVEIj09PXc/InZtLnBvd2VyLnN0YXJ0IjpudWxsLGs9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLmNsYXNzTmFtZT0icnZtLXNob3J0Y3V0cyIsay5kYXRhc2V0Lm1lbnVSZWdpb249InNob3J0Y3V0cyIsay5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHAoIuW4uOeUqOaTjeS9nCIsIlF1aWNrIGFjdGlvbnMiKSksZC5hcHBlbmQoayk7Y29uc3QgRT0ibmF0aXZlLXVpIj09PXQ/LmtpbmQ/cCgi55S15rqQIiwiUG93ZXIiKToiUlVOTklORyI9PT13P3AoIuWFs+acuiIsIk9mZiIpOiJTVE9QUEVEIj09PXc/cCgi5byA5py6IiwiT24iKTpwKCLnlLXmupAiLCJQb3dlciIpLEE9W1siY29uc29sZSIsInZtLmNvbnNvbGUub3BlbiIscCgi57uI56uvIiwiQ29uc29sZSIpLHAoIuaJk+W8gOiZmuaLn+acuuaOp+WItuWPsCIsIk9wZW4gdmlydHVhbCBtYWNoaW5lIGNvbnNvbGUiKSwiIzA4NmZkNiIsIiNlYWY0ZmYiXSxbInBvd2VyIix5LEUsIm5hdGl2ZS11aSI9PT10Py5raW5kP3AoIuaJk+W8gOWumOaWueeUtea6kOaTjeS9nOWFpeWPoyIsIk9wZW4gb2ZmaWNpYWwgcG93ZXIgYWN0aW9ucyIpOiJSVU5OSU5HIj09PXc/cCgi5q2j5bi45YWz6Zet5a6i5oi35py65pON5L2c57O757ufIiwiU2h1dCBkb3duIHRoZSBndWVzdCBvcGVyYXRpbmcgc3lzdGVtIGdyYWNlZnVsbHkiKToiU1RPUFBFRCI9PT13P3AoIuWQr+WKqOiZmuaLn+acuiIsIlBvd2VyIG9uIHZpcnR1YWwgbWFjaGluZSIpOnAoIuW9k+WJjeeUtea6kOeKtuaAgeS4jeaUr+aMgeW/q+aNt+W8gOWFs+acuiIsIlRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIGRvZXMgbm90IHN1cHBvcnQgYSBxdWljayBwb3dlciBhY3Rpb24iKSwiU1RPUFBFRCI9PT13PyIjMTY4MDRhIjoiI2M2MzE0NiIsIlNUT1BQRUQiPT09dz8iI2U5ZjdlZiI6IiNmZmYwZjIiXSxbIm1pZ3JhdGlvbiIsInZtLm1pZ3JhdGlvbi53aXRoaW5DbHVzdGVyIixwKCLov4Hnp7siLCJNb3ZlIiksIm5hdGl2ZS11aSI9PT10Py5raW5kP3AoIuaJk+W8gOWumOaWuei/geenu+WQkeWvvOWFpeWPoyIsIk9wZW4gdGhlIG9mZmljaWFsIG1pZ3JhdGlvbiB3aXphcmQgZW50cnkiKTpwKCLlnKjlvZPliY3pm4bnvqTlhoXov4Hnp7vomZrmi5/mnLoiLCJNaWdyYXRlIHZpcnR1YWwgbWFjaGluZSB3aXRoaW4gdGhlIGN1cnJlbnQgY2x1c3RlciIpLCIjMDg3ZDg2IiwiI2U3ZjZmNyJdLFsiY2xvbmUiLCJ2bS5jbG9uZSIscCgi5YWL6ZqGIiwiQ2xvbmUiKSxwKCLlhYvpmobomZrmi5/mnLoiLCJDbG9uZSB2aXJ0dWFsIG1hY2hpbmUiKSwiIzc5NTBiNSIsIiNmMmVkZmEiXSxbImlzb2xhdGlvbiIsInZtLmlzb2xhdGlvbi5jb25maWd1cmUiLHAoIumalOemuyIsIklzb2xhdGUiKSxwKCLphY3nva7omZrmi5/mnLrpmpTnprsiLCJDb25maWd1cmUgdmlydHVhbCBtYWNoaW5lIGlzb2xhdGlvbiIpLCIjYTQ1ZjBkIiwiI2ZmZjRlNSJdXTtmb3IoY29uc3RbZSx0LG8saSxhLGxdb2YgQSl7Y29uc3QgYz12LmZpbmQoZT0+ZS5pZD09PXQpLGQ9cz9yLmxvYWRpbmc/cCgi5q2j5Zyo6K+75Y+W54q25oCB5LiO5p2D6ZmQIiwiUmVhZGluZyBzdGF0ZSBhbmQgYXV0aG9yaXphdGlvbiIpOnIuYnVzeT9wKCLmraPlnKjnoa7orqTlhbbku5bmk43kvZwiLCJBbm90aGVyIGFjdGlvbiBpcyBiZWluZyB2ZXJpZmllZCIpOmM/Yy5yZWFzb246InBvd2VyIj09PWU/aTpaKCJlbnRyeS1taXNzaW5nIixuKCkpOmYoKSx1PWgobywoKT0+QyhyLHQpLGspO3UuY2xhc3NOYW1lPSJydm0tc2hvcnRjdXQiLHUuZGF0YXNldC5zaG9ydGN1dElkPWUsdS5kYXRhc2V0LnNob3J0Y3V0QWN0aW9uSWQ9dHx8IiIsdS5kYXRhc2V0Lm1lbnVLZXk9YHNob3J0Y3V0OiR7ZX1gLHUuc3R5bGUuc2V0UHJvcGVydHkoIi0tcnZtLWNvbG9yIixhKSx1LnN0eWxlLnNldFByb3BlcnR5KCItLXJ2bS10aW50IixsKSx1LmRpc2FibGVkPSFzfHxyLmxvYWRpbmd8fHIuYnVzeXx8IWM/LmVuYWJsZWQsdS50aXRsZT1gJHtpfSR7dS5kaXNhYmxlZCYmZD9gIOKAlCAke2R9YDoiIn1gLHUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix1LnRpdGxlKX1jb25zdCBTPWkuY3JlYXRlRWxlbWVudCgiZGl2Iik7Uy5kYXRhc2V0Lm1lbnVSZWdpb249ImRpcmVjdG9yeSIsZC5hcHBlbmQoUyk7Zm9yKGNvbnN0IGUgb2YgZyl7Y29uc3QgdD1oKGUubGFiZWwsKCk9Pk8ocixlLmlkLCEwKSxTKTt0LmNsYXNzTmFtZT0icnZtLWdyb3VwIjtjb25zdCBuPWkuY3JlYXRlRWxlbWVudCgic3BhbiIpO24uY2xhc3NOYW1lPSJydm0tZ3JvdXAtYXJyb3ciLG4uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxuLnRleHRDb250ZW50PSLigLoiLHQuYXBwZW5kKG4pLHQuaWQ9YCR7ci5tZW51SWR9LSR7ZS5pZH1gLHQuZGF0YXNldC5ncm91cElkPWUuaWQsdC5kYXRhc2V0Lm1lbnVLZXk9ZS5pZCx0LnNldEF0dHJpYnV0ZSgiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLGAke3QuaWR9LXN1Ym1lbnVgKSx0LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsKCk9Pk8ocixlLmlkKSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwoKT0+TyhyLGUuaWQpKX1jb25zdCBUPWkuY3JlYXRlRWxlbWVudCgiZGl2Iik7VC5kYXRhc2V0Lm1lbnVSZWdpb249ImZvb3RlciIsZC5hcHBlbmQoVCk7Y29uc3QgUj1oKHAoIuWkjeWItuiZmuaLn+acuiBJRCIsIkNvcHkgVk0gSUQiKSwoKT0+ZnVuY3Rpb24odCl7aWYobCE9PXR8fCFiKHQpfHx0LmNvcHkpcmV0dXJuO2NvbnN0IG49KCk9PnAoIuaXoOazleWkjeWItuiZmuaLn+acuiBJRO+8jOivt+ajgOafpea1j+iniOWZqOWJqui0tOadv+adg+mZkOOAgiIsIlRoZSBWTSBJRCBjb3VsZCBub3QgYmUgY29waWVkLiBDaGVjayBicm93c2VyIGNsaXBib2FyZCBwZXJtaXNzaW9ucy4iKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZS5uYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQpcmV0dXJuIHQubm90aWNlPW4oKSx2b2lkIE0odCk7Y29uc3Qgcj17dGltZXI6bnVsbH07ZnVuY3Rpb24gbyhuKXtsPT09dCYmdC5jb3B5PT09ciYmYih0KSYmKGUuY2xlYXJUaW1lb3V0KHIudGltZXIpLHQuY29weT1udWxsLHQubm90aWNlPW4sTSh0KSl9dC5jb3B5PXIsci50aW1lcj1lLnNldFRpbWVvdXQoKCk9Pm8obigpKSw4ZTMpLE0odCk7dHJ5e1Byb21pc2UucmVzb2x2ZShlLm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHQucmVzb3VyY2UuaWQpKS50aGVuKCgpPT5vKHAoIuiZmuaLn+acuiBJRCDlt7LlpI3liLbjgIIiLCJWTSBJRCBjb3BpZWQuIikpLCgpPT5vKG4oKSkpfWNhdGNoe28obigpKX19KHIpLFQpO1IuY2xhc3NOYW1lPSJydm0tY29weSIsUi5kYXRhc2V0LmNvcHlWbUlkPSIiLFIuZGF0YXNldC5tZW51S2V5PSJjb3B5IixSLmRpc2FibGVkPSEhci5jb3B5LFIudGl0bGU9cCgi5aSN5Yi25b2T5YmN6Jma5ouf5py655qE5ZSv5LiAIElEIiwiQ29weSB0aGUgdW5pcXVlIElEIG9mIHRoaXMgdmlydHVhbCBtYWNoaW5lIiksUi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLFIudGl0bGUpLGZ1bmN0aW9uKHQpe3QubWVudS5zdHlsZS5sZWZ0PSIwcHgiLHQubWVudS5zdHlsZS50b3A9IjBweCI7Y29uc3Qgbj10Lm1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1NYXRoLm1heCg4LE1hdGgubWluKHQueCxlLmlubmVyV2lkdGgtbi53aWR0aC04KSksbz1NYXRoLm1heCg4LE1hdGgubWluKHQueSxlLmlubmVySGVpZ2h0LW4uaGVpZ2h0LTgpKTt0Lm1lbnUuc3R5bGUubGVmdD1yLW4ubGVmdCsicHgiLHQubWVudS5zdHlsZS50b3A9by1uLnRvcCsicHgiLFYodCl9KHIpLGMmJk8ocixjKSxvJiYoWy4uLnIubWVudS5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b246bm90KDpkaXNhYmxlZCkiKV0uZmluZChlPT5lLmRhdGFzZXQubWVudUtleT09PWEpfHxyLm1lbnUucXVlcnlTZWxlY3RvcigiYnV0dG9uOm5vdCg6ZGlzYWJsZWQpIikpPy5mb2N1cygpfWZ1bmN0aW9uIEwoZSl7bCYmIWwubWVudS5jb250YWlucyhlLnRhcmdldCkmJncoKX1mdW5jdGlvbiBEKGUpe2NvbnN0IHQ9bDtpZighdClyZXR1cm47aWYoIkVzY2FwZSI9PT1lLmtleSlyZXR1cm4gdC5tZW51LmNvbnRhaW5zKGUudGFyZ2V0KSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSx2b2lkKHQuc3VibWVudT8uY29udGFpbnMoZS50YXJnZXQpP0kodCwhMCk6dygpKTtpZighdC5tZW51LmNvbnRhaW5zKGUudGFyZ2V0KSlyZXR1cm47aWYoIlRhYiI9PT1lLmtleSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1bLi4udC5tZW51LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbjpub3QoOmRpc2FibGVkKSIpXSxyPW4uaW5kZXhPZihpLmFjdGl2ZUVsZW1lbnQpO3JldHVybiB2b2lkIG5bKHIrKGUuc2hpZnRLZXk/LTE6MSkrbi5sZW5ndGgpJW4ubGVuZ3RoXT8uZm9jdXMoKX1pZihbIkFycm93TGVmdCIsIkJhY2tzcGFjZSJdLmluY2x1ZGVzKGUua2V5KSYmdC5ncm91cClyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdm9pZCBJKHQsITApO2NvbnN0IG49Wy4uLihpLmFjdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoIltkYXRhLW1lbnUtcmVnaW9uXSIpfHx0Lm1lbnUpLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbjpub3QoOmRpc2FibGVkKSIpXTtpZihbIkFycm93RG93biIsIkFycm93VXAiLCJIb21lIiwiRW5kIl0uaW5jbHVkZXMoZS5rZXkpKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCB0PW4uaW5kZXhPZihpLmFjdGl2ZUVsZW1lbnQpLHI9IkhvbWUiPT09ZS5rZXk/MDoiRW5kIj09PWUua2V5P24ubGVuZ3RoLTE6KHQrKCJBcnJvd0Rvd24iPT09ZS5rZXk/MTotMSkrbi5sZW5ndGgpJW4ubGVuZ3RoO25bcl0/LmZvY3VzKCl9ZWxzZShbIkVudGVyIiwiICJdLmluY2x1ZGVzKGUua2V5KXx8IkFycm93UmlnaHQiPT09ZS5rZXkmJmkuYWN0aXZlRWxlbWVudD8uZGF0YXNldC5ncm91cElkKSYmaS5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KFEpPT09dC5tZW51JiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksaS5hY3RpdmVFbGVtZW50LmNsaWNrKCkpfXJldHVybiBpLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixMLCEwKSxpLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEQsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdyksZS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdyksZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix3KSx7b3BlbjpmdW5jdGlvbihuLG8sYSl7aWYoY3x8InZtIiE9PW4/LnR5cGV8fG4uaW50ZXJuYWx8fCEvXltBLVphLXowLTlfLV17MSwxMjh9JC8udGVzdChuLmlkfHwiIil8fCFuLmVsZW1lbnQ/LmlzQ29ubmVjdGVkfHwhcihuKSlyZXR1cm4hMTt3KCksaCgpO3RyeXt0Py5iaW5kU291cmNlPy4obil9Y2F0Y2h7cmV0dXJuITF9Y29uc3QgdT1SKGUsbi5lbGVtZW50KTtpZighdSlyZXR1cm4hMTtjb25zdCBtPWkuY3JlYXRlRWxlbWVudCgiZGl2Iik7bS5zZXRBdHRyaWJ1dGUoImRhdGEtcml2ZXRpbi1vYmplY3QtbWVudSIsIiIpLG0uc2V0QXR0cmlidXRlKCJyb2xlIiwibWVudSIpLG0uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixwKCLomZrmi5/mnLrlr7nosaHmk43kvZwiLCJWaXJ0dWFsIG1hY2hpbmUgYWN0aW9ucyIpKTtjb25zdCBmPXtyZXNvdXJjZTpZKG4pLHNvdXJjZTpuLmVsZW1lbnQsbWVudTptLGNvbnRhaW5lcjp1LG1lbnVJZDoicnZtLW1lbnUtIisgKytkLHN1Ym1lbnU6bnVsbCxzdWJtZW51VGltZXI6bnVsbCxtb3VudGVkOiExLGhyZWY6ZS5sb2NhdGlvbi5ocmVmLHg6TnVtYmVyLmlzRmluaXRlKG8pP286OCx5Ok51bWJlci5pc0Zpbml0ZShhKT9hOjgsZ3JvdXA6bnVsbCxkYXRhOm51bGwsbm90aWNlOiIiLGxvYWRpbmc6cyxidXN5OiExLHdvcms6bnVsbH07aWYoIWIoZikpcmV0dXJuITE7aWYobD1mLG0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9PmUuc3RvcFByb3BhZ2F0aW9uKCkpLG0uYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLGU9PmUuc3RvcFByb3BhZ2F0aW9uKCkpLG0uYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIixlPT5UKGYsZSkpLG0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsZT0+VChmLGUpKSxtLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsKCk9Pk4oZikpLG0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsKCk9Pk4oZikpLHUuYXBwZW5kKG0pLGYubW91bnRlZD0hMCwiZnVuY3Rpb24iPT10eXBlb2YgbS5zaG93UG9wb3ZlciYmImZ1bmN0aW9uIj09dHlwZW9mIG0uaGlkZVBvcG92ZXIpdHJ5e20uc2V0QXR0cmlidXRlKCJwb3BvdmVyIiwibWFudWFsIiksbS5zaG93UG9wb3ZlcigpLG0ubWF0Y2hlcygiOnBvcG92ZXItb3BlbiIpP2YudG9wTGF5ZXI9ITA6bS5yZW1vdmVBdHRyaWJ1dGUoInBvcG92ZXIiKX1jYXRjaHttLnJlbW92ZUF0dHJpYnV0ZSgicG9wb3ZlciIpfXJldHVybiBtLmlzQ29ubmVjdGVkPyhtLmFkZEV2ZW50TGlzdGVuZXIoInRvZ2dsZSIsZT0+eyJjbG9zZWQiPT09ZS5uZXdTdGF0ZSYmZi50b3BMYXllciYmbD09PWYmJncoKX0pLGYub2JzZXJ2ZXI9bmV3IGUuTXV0YXRpb25PYnNlcnZlcigoKT0+e2whPT1mfHxiKGYpfHx3KCl9KSxmLm9ic2VydmVyLm9ic2VydmUoaS5ib2R5LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMCxhdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRhdGEtcm93LWtleSIsImhyZWYiLCJoaWRkZW4iLCJhcmlhLWhpZGRlbiIsInN0eWxlIiwiY2xhc3MiXX0pLGYuZ3VhcmQ9ZS5zZXRJbnRlcnZhbCgoKT0+e2whPT1mfHxiKGYpfHx3KCl9LDEwMCksTShmKSxmdW5jdGlvbihlKXtlLm1lbnUucXVlcnlTZWxlY3RvcignW2RhdGEtbWVudS1yZWdpb249ImRpcmVjdG9yeSJdIGJ1dHRvbjpub3QoOmRpc2FibGVkKScpPy5mb2N1cygpfShmKSxzJiZTKGYsYXN5bmMgZT0+e2NvbnN0IG49YXdhaXQgdC5yZWFkKGYucmVzb3VyY2Use3NpZ25hbDplLmNvbnRyb2xsZXIuc2lnbmFsfSk7eShmLGUpJiZFKGYsbil9KSwhMCk6KHcoKSwhMSl9LGNsb3NlOncsc3RvcCgpe2N8fCh3KCksaCgpLGM9ITAsYS5yZW1vdmUoKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixMLCEwKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEQsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix3KSl9fX1jb25zdCByZT1lPT4oZXx8IiIpLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpLG9lPShlLHQsbixyPXt9KT0+KHtraW5kOmUsbGFiZWxzOnQscmVzdWx0Om4sLi4ucn0pLGllPXtiYXNpYzpvZSgic2VjdGlvbiIsWyLln7rmnKzkv6Hmga8iLCJCYXNpYyBpbmZvcm1hdGlvbiJdLCJkaWFsb2ciLHttb2RhbFRpdGxlczpbIue8lui+keiZmuaLn+acuiIsIkVkaXQgVk0iXX0pLGRpc2s6b2UoInNlY3Rpb24iLFsi56OB55uYIiwiRGlza3MiXSwiZGlhbG9nIix7bW9kYWxUaXRsZXM6WyLnvJbovpHno4Hnm5giLCJFZGl0IGRpc2tzIl19KSxuaWM6b2UoInNlY3Rpb24iLFsi572R57uc6K6+5aSHIiwiTmV0d29yayBkZXZpY2VzIl0sImRpYWxvZyIse21vZGFsVGl0bGVzOlsi57yW6L6R6Jma5ouf5py655qE572R57uc6K6+5aSHIiwiRWRpdCBuZXR3b3JrIGRldmljZXMiXX0pLG1pZ3JhdGlvbjpvZSgidG9vbGJhciIsWyLov4Hnp7siLCJNaWdyYXRlIl0sImRpYWxvZyIse2ljb25zOlsiTWlncmF0ZTE2R3JhZGllbnRCbHVlSWNvbiJdLG1vZGFsVGl0bGVzOlsi6L+B56e76Jma5ouf5py6IiwiTWlncmF0ZSBWTSJdfSksc25hcHNob3RzOm9lKCJ0YWIiLFsi5b+r54WnIiwiU25hcHNob3RzIl0sInRhYiIse3RhYlZpZXc6InNuYXBzaG90In0pLG1vbml0b3I6b2UoInRhYiIsWyLnm5HmjqciLCJNb25pdG9yIl0sImhhbmRvZmYiKSwibmV0d29yay1zZWN1cml0eSI6b2UoInRhYiIsWyLnvZHnu5zlronlhagiLCJOZXR3b3JrIHNlY3VyaXR5Il0sImhhbmRvZmYiKSxiYWNrdXA6b2UoInRhYiIsWyLlpIfku73kuI7lrrnngb4iLCJCYWNrdXAgYW5kIGRpc2FzdGVyIHJlY292ZXJ5Il0sImhhbmRvZmYiKSxldmVudHM6b2UoInRhYiIsWyLkuovku7YiLCJFdmVudHMiXSwiaGFuZG9mZiIpLGxhYmVsczpvZSgidGFiIixbIuagh+etviIsIkxhYmVscyJdLCJoYW5kb2ZmIiksInNuYXBzaG90LWNyZWF0ZSI6b2UoInNuYXBzaG90LWFjdGlvbiIsWyLliJvlu7rlv6vnhaciLCJDcmVhdGUgc25hcHNob3QiXSwiaGFuZG9mZiIse3RhYlZpZXc6InNuYXBzaG90In0pLGNvbnNvbGU6b2UoInRvb2xiYXIiLFsi5omT5byA57uI56uvIiwiT3BlbiBjb25zb2xlIiwiT3BlbiB0ZXJtaW5hbCJdLCJoYW5kb2ZmIix7aWNvbnM6WyJPcGVuVGVybWluYWwxNldoaXRlSWNvbiJdfSksc2h1dGRvd246b2UoInRvb2xiYXIiLFsi5YWz5py6IiwiU2h1dCBkb3duIl0sImhhbmRvZmYiLHtpY29uczpbIlBvd2Vyb2ZmVHVybk9uU2h1dERvd24xNkdyYWRpZW50UmVkSWNvbiJdfSkscmVzdGFydDpvZSgidG9vbGJhciIsW10sImhhbmRvZmYiLHtpY29uczpbIlJlc3RhcnROZXcxNkdyYWRpZW50R3JheUljb24iXX0pLHN1c3BlbmQ6b2UoInRvb2xiYXIiLFtdLCJoYW5kb2ZmIix7aWNvbnM6WyJTdXNwZW5kZWRQYXVzZTE2R3JhZGllbnRPcmFuZ2VJY29uIl19KSxjbG9uZTpvZSgidG9vbGJhciIsWyLlhYvpmoYiLCJDbG9uZSJdLCJoYW5kb2ZmIix7aWNvbnM6WyJDbG9uZTE2R3JhZGllbnRCbHVlSWNvbiJdfSksImVkaXQtbWVudSI6b2UoInRvb2xiYXIiLFsi57yW6L6RIiwiRWRpdCJdLCJoYW5kb2ZmIix7aWNvbnM6WyJFZGl0UGVuMTZCbHVlSWNvbiJdfSksIm1vcmUtbWVudSI6b2UoInRvb2xiYXIiLFtdLCJoYW5kb2ZmIix7aWNvbnM6WyJNb3JlRWxsaXBzaXMzMTZCb2xkQmx1ZUljb24iXX0pLCJwb3dlci1tZW51IjpvZSgicm93LW1lbnUiLFsi5pu05aSa5pON5L2cIiwiTW9yZSBhY3Rpb25zIl0sImhhbmRvZmYiKSxoYTpvZSgiZWRpdC1pdGVtIixbIue8lui+kemrmOWPr+eUqCIsIkVkaXQgSEEiXSwiZGlhbG9nIix7aWNvbnM6WyJFZGl0UGVuMjRHcmFkaWVudEJsdWVJY29uIl0sbW9kYWxUaXRsZXM6WyLnvJbovpHomZrmi5/mnLrpq5jlj6/nlKgiLCJFZGl0IFZNIEhBIl19KSxwbGFjZW1lbnQ6b2UoImVkaXQtaXRlbSIsWyLnvJbovpHomZrmi5/mnLrmlL7nva7nu4QiLCJFZGl0IFZNIHBsYWNlbWVudCBncm91cCJdLCJkaWFsb2ciLHtpY29uczpbIlZtUGxhY2VtZW50R3JvdXAyNEdyYWRpZW50Qmx1ZUljb24iXSxtb2RhbFRpdGxlczpbIue8lui+keiZmuaLn+acuuaUvue9rue7hCIsIkVkaXQgVk0gcGxhY2VtZW50IGdyb3VwIl19KSxhdXRvc3RhcnQ6b2UoImVkaXQtaXRlbSIsWyLnvJbovpHpmo/kuLvmnLrlvIDmnLoiLCJFZGl0IHN0YXJ0IHdpdGggaG9zdCJdLCJkaWFsb2ciLHtpY29uczpbIkVkaXRQZW4yNEdyYWRpZW50Qmx1ZUljb24iXSxtb2RhbFRpdGxlczpbIue8lui+keiZmuaLn+acuumaj+S4u+acuuW8gOacuiIsIkVkaXQgVk0gc3RhcnQgd2l0aCBob3N0Il19KSxvd25lcnNoaXA6b2UoImVkaXQtaXRlbSIsWyLnvJbovpHmiYDlsZ7nlKjmiLciLCJFZGl0IG93bmVyIl0sImRpYWxvZyIse2ljb25zOlsiVXNlckFjY291bnQyNEdyYWRpZW50Qmx1ZUljb24iXSxtb2RhbFRpdGxlczpbIue8lui+keaJgOWxnueUqOaItyIsIkVkaXQgb3duZXIiXX0pLGhvc3RuYW1lOm9lKCJlZGl0LWl0ZW0iLFsi57yW6L6R5Li75py65ZCNIiwiRWRpdCBob3N0bmFtZSJdLCJkaWFsb2ciLHtpY29uczpbIkVkaXRQZW4yNEdyYWRpZW50Qmx1ZUljb24iXSxtb2RhbFRpdGxlczpbIue8lui+keWuouaIt+acuuaTjeS9nOezu+e7n+eahOS4u+acuuWQjSIsIkVkaXQgZ3Vlc3QgT1MgaG9zdG5hbWUiXX0pLGRuczpvZSgiZWRpdC1pdGVtIixbIue8lui+kSBETlMg5pyN5Yqh5Zmo5Zyw5Z2AIiwiRWRpdCBETlMgc2VydmVyIGFkZHJlc3NlcyJdLCJkaWFsb2ciLHtpY29uczpbIkVkaXRQZW4yNEdyYWRpZW50Qmx1ZUljb24iXSxtb2RhbFRpdGxlczpbIue8lui+keWuouaIt+acuuaTjeS9nOezu+e7n+eahCBETlMg5pyN5Yqh5ZmoIiwiRWRpdCBndWVzdCBPUyBETlMgc2VydmVycyJdfSksdm1ncm91cDpvZSgiZWRpdC1pdGVtIixbIue8lui+keiZmuaLn+acuue7hCIsIkVkaXQgVk0gZ3JvdXAiXSwiaGFuZG9mZiIse2ljb25zOlsiVm1ncm91cEZvbGRlcjI0R3JhZGllbnRCbHVlSWNvbiJdfSksbnRwOm9lKCJlZGl0LWl0ZW0iLFsi6YeN572uIE5UUCDmnI3liqHlmagiLCJSZXNldCBOVFAgc2VydmVycyJdLCJoYW5kb2ZmIix7aWNvbnM6WyJFZGl0UGVuMjRHcmFkaWVudEJsdWVJY29uIl19KSxwYXNzd29yZDpvZSgiZWRpdC1pdGVtIixbIumHjee9ruaMh+Wumui0puaIt+eahOWvhueggSIsIlJlc2V0IGEgc3BlY2lmaWVkIGFjY291bnQgcGFzc3dvcmQiXSwiaGFuZG9mZiIse2ljb25zOlsiRWRpdFBlbjI0R3JhZGllbnRCbHVlSWNvbiJdfSksaXNvbGF0aW9uOm9lKCJtb3JlLWl0ZW0iLFsi6ZqU56a7IiwiSXNvbGF0ZSJdLCJoYW5kb2ZmIix7aWNvbnM6WyJJc29sYXRpb24xNkJsdWVJY29uIl19KSwibmV0d29yay1saW5rcyI6b2UoIm1vcmUtaXRlbSIsWyLmn6XnnIvnvZHnu5zpk77ot68iLCJWaWV3IG5ldHdvcmsgbGlua3MiXSwiaGFuZG9mZiIse2ljb25zOlsiTmV0d29ya1RvcG8xNkdyYWRpZW50Qmx1ZUljb24iXX0pLCJuZXR3b3JrLXRyYWZmaWMiOm9lKCJtb3JlLWl0ZW0iLFsi5p+l55yL572R57uc5rWB6YePIiwiVmlldyBuZXR3b3JrIHRyYWZmaWMiXSwiaGFuZG9mZiIse2ljb25zOlsiVHJhZmZpY1Zpc3VhbGl6YXRpb24xNkdyYWRpZW50Qmx1ZUljb24iXX0pLHRlbXBsYXRlOm9lKCJtb3JlLWl0ZW0iLFsi5Yib5bu66Jma5ouf5py65qih5p2/IiwiQ3JlYXRlIFZNIHRlbXBsYXRlIl0sImhhbmRvZmYiLHtpY29uczpbIlZtdGVtcGxhdGUyNEdyYWRpZW50Qmx1ZUljb24iXX0pLCJ0b29scy1lamVjdCI6b2UoIm1vcmUtaXRlbSIsWyLlvLnlh7romZrmi5/mnLrlt6XlhbfmmKDlg48iLCJFamVjdCBWTSB0b29scyBpbWFnZSJdLCJoYW5kb2ZmIix7aWNvbnM6WyJWbXRvb2xzMjRHcmFkaWVudEJsdWVJY29uIl19KSxyZWN5Y2xlOm9lKCJtb3JlLWl0ZW0iLFsi56e76Iez5Zue5pS256uZIiwiTW92ZSB0byByZWN5Y2xlIGJpbiJdLCJoYW5kb2ZmIix7aWNvbnM6WyJWbVJlY3ljbGVCaW5Nb3ZlVG9CaW4yNFJlZEljb24iXX0pfTshZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoT2JqZWN0LnZhbHVlcyh0KS5mb3JFYWNoKGUpLE9iamVjdC5mcmVlemUodCkpLHR9KGllKTtjb25zdCBhZT1uZXcgTWFwKFsuLi5bInZtLmdlbmVyYWwuZWRpdCIsInZtLmhhcmR3YXJlLmNwdSIsInZtLmhhcmR3YXJlLm1lbW9yeSJdLm1hcChlPT5bZSwiYmFzaWMiXSksLi4uWyJhZGQiLCJlZGl0IiwiZXhwYW5kIiwiY2FjaGUiLCJyZW1vdmUiXS5tYXAoZT0+W2B2bS5oYXJkd2FyZS5kaXNrLiR7ZX1gLCJkaXNrIl0pLC4uLlsiYWRkIiwiZWRpdCIsInJlbW92ZSIsInFvcyJdLm1hcChlPT5bYHZtLmhhcmR3YXJlLm5pYy4ke2V9YCwibmljIl0pLC4uLlsiY29uZmlndXJlIiwiYWRkIiwibW91bnQiLCJlamVjdCIsInRvZ2dsZSIsInJlbW92ZSJdLm1hcChlPT5bYHZtLmhhcmR3YXJlLmNkcm9tLiR7ZX1gLCJkaXNrIl0pLFsidm0ubWlncmF0aW9uLndpdGhpbkNsdXN0ZXIiLCJtaWdyYXRpb24iXSxbInZtLm1pZ3JhdGlvbi5hY3Jvc3NDbHVzdGVyIiwibWlncmF0aW9uIl0sWyJ2bS5zbmFwc2hvdHMubGlzdCIsInNuYXBzaG90cyJdLFsidm0uc25hcHNob3RzLmNyZWF0ZSIsInNuYXBzaG90LWNyZWF0ZSJdLFsidm0uY29uc29sZS5vcGVuIiwiY29uc29sZSJdLFsidm0ucG93ZXIubWVudSIsInBvd2VyLW1lbnUiXSxbInZtLnBvd2VyLnNodXRkb3duIiwic2h1dGRvd24iXSxbInZtLnBvd2VyLnJlc3RhcnQiLCJyZXN0YXJ0Il0sWyJ2bS5wb3dlci5zdXNwZW5kIiwic3VzcGVuZCJdLFsidm0uY2xvbmUiLCJjbG9uZSJdLFsidm0uaGFyZHdhcmUubWVudSIsImVkaXQtbWVudSJdLFsidm0ubWFuYWdlbWVudC5tZW51IiwibW9yZS1tZW51Il0sWyJ2bS5hdmFpbGFiaWxpdHkuaGEiLCJoYSJdLFsidm0ucGxhY2VtZW50R3JvdXAiLCJwbGFjZW1lbnQiXSxbInZtLmhvc3RBdXRvc3RhcnQiLCJhdXRvc3RhcnQiXSxbInZtLm93bmVyc2hpcCIsIm93bmVyc2hpcCJdLFsidm0udm1Hcm91cCIsInZtZ3JvdXAiXSxbInZtLmd1ZXN0Lmhvc3RuYW1lIiwiaG9zdG5hbWUiXSxbInZtLmd1ZXN0LmRucyIsImRucyJdLFsidm0uZ3Vlc3QucmVzZXROdHAiLCJudHAiXSxbInZtLmd1ZXN0LnJlc2V0UGFzc3dvcmQiLCJwYXNzd29yZCJdLFsidm0uZ3Vlc3QudG9vbHNJbWFnZS51bm1vdW50IiwidG9vbHMtZWplY3QiXSxbInZtLmlzb2xhdGlvbi5jb25maWd1cmUiLCJpc29sYXRpb24iXSxbInZtLm5ldHdvcmsubGlua3MiLCJuZXR3b3JrLWxpbmtzIl0sWyJ2bS5uZXR3b3JrLnRyYWZmaWMiLCJuZXR3b3JrLXRyYWZmaWMiXSxbInZtLnRlbXBsYXRlLmNyZWF0ZSIsInRlbXBsYXRlIl0sWyJ2bS5yZWN5Y2xlLm1vdmUiLCJyZWN5Y2xlIl0sWyJ2bS5tb25pdG9yLnZpZXciLCJtb25pdG9yIl0sWyJ2bS5uZXR3b3JrLnNlY3VyaXR5IiwibmV0d29yay1zZWN1cml0eSJdLFsidm0uYmFja3VwIiwiYmFja3VwIl0sWyJ2bS5ldmVudHMudmlldyIsImV2ZW50cyJdLFsidm0ubGFiZWxzLnZpZXciLCJsYWJlbHMiXV0pLHNlPSdbaGlkZGVuXSxbYXJpYS1oaWRkZW49InRydWUiXSxbZGlzYWJsZWRdLFthcmlhLWRpc2FibGVkPSJ0cnVlIl0sW2luZXJ0XSwuX19oaWRkZW4sLmFudC1kcm9wZG93bi1oaWRkZW4sLmlzLWRpc2FibGVkLC5hbnQtYnRuLWxvYWRpbmcsLmFudC1kcm9wZG93bi1kaXNhYmxlZCwuYW50LWJ0bi1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtc3VibWVudS1kaXNhYmxlZCc7ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIGFlLmdldChlKXx8bnVsbH1mdW5jdGlvbiBjZShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJk9iamVjdC5oYXNPd24oaWUsZSk/aWVbZV06bnVsbH1mdW5jdGlvbiBkZShlLHQsbj0hMSl7aWYoIWU/LmlzQ29ubmVjdGVkfHxlLm93bmVyRG9jdW1lbnQhPT10Py5kb2N1bWVudHx8ZS5jbG9zZXN0KG4/J1toaWRkZW5dLFthcmlhLWhpZGRlbj0idHJ1ZSJdLFtpbmVydF0sLl9faGlkZGVuLC5hbnQtZHJvcGRvd24taGlkZGVuJzpzZSkpcmV0dXJuITE7Zm9yKGxldCBuPWU7bjtuPW4ucGFyZW50RWxlbWVudCl7Y29uc3QgZT10LmdldENvbXB1dGVkU3R5bGUobik7aWYoIm5vbmUiPT09ZS5kaXNwbGF5fHxbImhpZGRlbiIsImNvbGxhcHNlIl0uaW5jbHVkZXMoZS52aXNpYmlsaXR5KSlyZXR1cm4hMX1yZXR1cm4gZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD4wfWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIHQuY29udGFpbnMoZSkmJiFlLmNsb3Nlc3QoJy5hbnQtbW9kYWwsW3JvbGU9ImRpYWxvZyJdLC5hbnQtZHJvcGRvd24sW2RhdGEtcml2ZXRpbi1vYmplY3QtbWVudV0sW2RhdGEtcml2ZXRpbi1jb250ZXh0LW1lbnVdJyl9ZnVuY3Rpb24gbWUoe3dpbjplLHBhbmU6dCxpbnRlbnQ6bixtZW51OnIsZGlhZ25vc3RpYzpvPSExfT17fSl7Y29uc3QgaT1jZShuKTtpZighaXx8IWRlKHQsZSxvKSlyZXR1cm4gbz8iZW50cnktbWlzc2luZyI6bnVsbDtjb25zdCBhPVtdLHM9dD0+ZGUodCxlLG8pLGw9ZT0+e2NvbnN0IHQ9W3JlKGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKSxyZShlLnRleHRDb250ZW50KV0uZmlsdGVyKEJvb2xlYW4pO3JldHVybihpLmxhYmVscy5sZW5ndGg/dC5sZW5ndGg+MCYmdC5ldmVyeShlPT5pLmxhYmVscy5pbmNsdWRlcyhlKSk6MD09PXQubGVuZ3RoKSYmKCFpLmljb25zfHxpLmljb25zLnNvbWUodD0+Wy4uLmUucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdGVzdGlkXSIpXS5zb21lKGU9PmUuZ2V0QXR0cmlidXRlKCJkYXRhLXRlc3RpZCIpPT09dCkpKX07aWYoInNlY3Rpb24iPT09aS5raW5kKWZvcihjb25zdCBlIG9mIHQucXVlcnlTZWxlY3RvckFsbCgiLmV4dHJhLWFjdGlvbiIpKXtjb25zdCBuPWUucGFyZW50RWxlbWVudDtpZighdWUoZSx0KXx8IXMoZSkpY29udGludWU7Y29uc3Qgcj1uLmNsb25lTm9kZSghMCk7Zm9yKGNvbnN0IGUgb2ZbLi4uci5jaGlsZHJlbl0pZS5tYXRjaGVzKCIuZXh0cmEtYWN0aW9uIikmJmUucmVtb3ZlKCk7aWYoaS5sYWJlbHMuaW5jbHVkZXMocmUoci50ZXh0Q29udGVudCkpKWZvcihjb25zdCB0IG9mIGUucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uLmVkaXQtaWNvbiIpKXQuY2xvc2VzdCgiLmV4dHJhLWFjdGlvbiIpPT09ZSYmcyh0KSYmYS5wdXNoKHQpfWVsc2UgaWYoInRvb2xiYXIiPT09aS5raW5kKWZvcihjb25zdCBlIG9mIHQucXVlcnlTZWxlY3RvckFsbCgiLnRvb2xiYXIgYnV0dG9uIikpdWUoZSx0KSYmcyhlKSYmbChlKSYmYS5wdXNoKGUpO2Vsc2UgaWYoImVkaXQtaXRlbSI9PT1pLmtpbmR8fCJtb3JlLWl0ZW0iPT09aS5raW5kKXtpZighZGUocixlLG8pfHwhci5tYXRjaGVzKCcuYW50LWRyb3Bkb3duLFtyb2xlPSJtZW51Il0nKXx8ci5jbG9zZXN0KCIuYW50LW1vZGFsLFtkYXRhLXJpdmV0aW4tb2JqZWN0LW1lbnVdLFtkYXRhLXJpdmV0aW4tY29udGV4dC1tZW51XSIpKXJldHVybiBvPyJlbnRyeS1taXNzaW5nIjpudWxsO2Zvcihjb25zdCBlIG9mIHIucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9Im1lbnVpdGVtIl0nKSl7Y29uc3QgdD1lLm1hdGNoZXMoIi5hbnQtZHJvcGRvd24tbWVudS1zdWJtZW51Iik/Wy4uLmUuY2hpbGRyZW5dLmZpbmQoZT0+ZS5tYXRjaGVzKCIuYW50LWRyb3Bkb3duLW1lbnUtc3VibWVudS10aXRsZSIpKTplO3QmJnModCkmJmwodCkmJmEucHVzaCh0KX19ZWxzZSBpZigidGFiIj09PWkua2luZClmb3IoY29uc3QgZSBvZiB0LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZXRhaWwtdGFicyAudGFiLWl0ZW0iKSl1ZShlLHQpJiZzKGUpJiZsKGUpJiZhLnB1c2goZSk7ZWxzZSBpZigic25hcHNob3QtYWN0aW9uIj09PWkua2luZClmb3IoY29uc3QgZSBvZiB0LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiIpKXVlKGUsdCkmJnMoZSkmJmwoZSkmJmEucHVzaChlKTtyZXR1cm4gbz9hLmxlbmd0aD4xPyJlbnRyeS1hbWJpZ3VvdXMiOjEhPT1hLmxlbmd0aHx8ZGUoYVswXSxlKT8iZW50cnktbWlzc2luZyI6ImVudHJ5LWRpc2FibGVkIjpmdW5jdGlvbihlKXtjb25zdCB0PVsuLi5uZXcgU2V0KGUpXTtyZXR1cm4gMT09PXQubGVuZ3RoP3RbMF06bnVsbH0oYSl9Y29uc3QgcGU9KGUsdCk9Pih7InpoLUNOIjplLCJlbi1VUyI6dH0pLGZlPShlLHQsbik9Pih7aWQ6YHZtLiR7ZX1gLGxhYmVsczpwZSh0LG4pfSksaGU9KGUsdCxuLHIpPT4oe2lkOmB2bS4ke2V9YCxsYWJlbHM6cGUodCxuKSxpdGVtczpyfSksZ2U9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoT2JqZWN0LnZhbHVlcyh0KS5mb3JFYWNoKGUpLE9iamVjdC5mcmVlemUodCkpLHR9KFtoZSgicG93ZXIiLCLnlLXmupAiLCJQb3dlciIsWy4uLltbIm1lbnUiLCLlrpjmlrnnlLXmupDoj5zljZUiLCJOYXRpdmUgcG93ZXIgbWVudSJdLFsic2h1dGRvd24iLCLlhbPmnLoiLCJTaHV0IGRvd24iXSxbInJlc3RhcnQiLCLph43lkK8iLCJSZXN0YXJ0Il0sWyJzdXNwZW5kIiwi5pqC5YGcIiwiU3VzcGVuZCJdXS5tYXAoKFtlLHQsbl0pPT5mZShgcG93ZXIuJHtlfWAsdCxuKSldKSxoZSgiY29uc29sZSIsIuaOp+WItuWPsOS4juWuouaIt+acuiIsIkNvbnNvbGUgYW5kIGd1ZXN0IixbZmUoImNvbnNvbGUub3BlbiIsIuaJk+W8gOe7iOerryIsIk9wZW4gY29uc29sZSIpLGZlKCJndWVzdC5ob3N0bmFtZSIsIue8lui+keS4u+acuuWQjSIsIkVkaXQgaG9zdG5hbWUiKSxmZSgiZ3Vlc3QuZG5zIiwi57yW6L6RIEROUyDmnI3liqHlmajlnLDlnYAiLCJFZGl0IEROUyBzZXJ2ZXIgYWRkcmVzc2VzIiksZmUoImd1ZXN0LnJlc2V0TnRwIiwi6YeN572uIE5UUCDmnI3liqHlmagiLCJSZXNldCBOVFAgc2VydmVycyIpLGZlKCJndWVzdC5yZXNldFBhc3N3b3JkIiwi6YeN572u5oyH5a6a6LSm5oi355qE5a+G56CBIiwiUmVzZXQgYSBzcGVjaWZpZWQgYWNjb3VudCBwYXNzd29yZCIpLGZlKCJndWVzdC50b29sc0ltYWdlLnVubW91bnQiLCLlvLnlh7romZrmi5/mnLrlt6XlhbfmmKDlg48iLCJFamVjdCBWTSB0b29scyBpbWFnZSIpXSksaGUoImhhcmR3YXJlIiwi5Z+65pys5L+h5oGv5LiO56Gs5Lu2IiwiR2VuZXJhbCBhbmQgaGFyZHdhcmUiLFtmZSgiZ2VuZXJhbC5lZGl0Iiwi57yW6L6R5Z+65pys5L+h5oGvIiwiRWRpdCBiYXNpYyBpbmZvcm1hdGlvbiIpLGZlKCJoYXJkd2FyZS5jcHUiLCLphY3nva4gQ1BVIiwiQ29uZmlndXJlIENQVSIpLGZlKCJoYXJkd2FyZS5tZW1vcnkiLCLphY3nva7lhoXlrZgiLCJDb25maWd1cmUgbWVtb3J5IiksLi4uW1siZGlzay5hZGQiLCLmt7vliqDno4Hnm5giLCJBZGQgZGlzayJdLFsiZGlzay5lZGl0Iiwi57yW6L6R56OB55uYIiwiRWRpdCBkaXNrIl0sWyJkaXNrLmV4cGFuZCIsIuaJqeWuueejgeebmCIsIkV4cGFuZCBkaXNrIl0sWyJkaXNrLmNhY2hlIiwi6YWN572u56OB55uY5bi46am757yT5a2YIiwiQ29uZmlndXJlIGRpc2sgY2FjaGUgcmVzaWRlbmN5Il0sWyJkaXNrLnJlbW92ZSIsIuWNuOi9veejgeebmCIsIkRldGFjaCBkaXNrIl0sWyJjZHJvbS5jb25maWd1cmUiLCLphY3nva4gQ0QtUk9NIOS4jiBJU08iLCJDb25maWd1cmUgQ0QtUk9NIGFuZCBJU08iXSxbIm5pYy5hZGQiLCLmt7vliqDnvZHljaEiLCJBZGQgTklDIl0sWyJuaWMuZWRpdCIsIue8lui+kee9keWNoSIsIkVkaXQgTklDIl0sWyJuaWMucmVtb3ZlIiwi56e76Zmk572R5Y2hIiwiUmVtb3ZlIE5JQyJdLFsibmljLnFvcyIsIumFjee9rue9keWNoSBRb1MiLCJDb25maWd1cmUgTklDIFFvUyJdXS5tYXAoKFtlLHQsbl0pPT5mZShgaGFyZHdhcmUuJHtlfWAsdCxuKSksZmUoImhhcmR3YXJlLm1lbnUiLCLlrozmlbTlrpjmlrnnvJbovpHoj5zljZUiLCJGdWxsIG5hdGl2ZSBFZGl0IG1lbnUiKV0pLGhlKCJzbmFwc2hvdHMiLCLlv6vnhafkuI7lhYvpmoYiLCJTbmFwc2hvdHMgYW5kIGNsb25pbmciLFtmZSgic25hcHNob3RzLmxpc3QiLCLmn6XnnIvlv6vnhaciLCJCcm93c2Ugc25hcHNob3RzIiksZmUoInNuYXBzaG90cy5jcmVhdGUiLCLliJvlu7rlv6vnhaciLCJDcmVhdGUgc25hcHNob3QiKSxmZSgiY2xvbmUiLCLlhYvpmobomZrmi5/mnLoiLCJDbG9uZSBWTSIpXSksaGUoIm1pZ3JhdGlvbiIsIui/geenuyIsIk1pZ3JhdGlvbiIsW2ZlKCJtaWdyYXRpb24ud2l0aGluQ2x1c3RlciIsIui/geenu+iZmuaLn+acuiIsIk1pZ3JhdGUgVk0iKSxmZSgibWlncmF0aW9uLmFjcm9zc0NsdXN0ZXIiLCLot6jpm4bnvqTov4Hnp7vlkJHlr7wiLCJDcm9zcy1jbHVzdGVyIG1pZ3JhdGlvbiB3aXphcmQiKV0pLGhlKCJuYXZpZ2F0aW9uIiwi55uR5o6n44CB5a6J5YWo5LiO6K6w5b2VIiwiTW9uaXRvcmluZywgc2VjdXJpdHkgYW5kIHJlY29yZHMiLFtmZSgibW9uaXRvci52aWV3Iiwi5p+l55yL55uR5o6nIiwiVmlldyBtb25pdG9yaW5nIiksZmUoIm5ldHdvcmsuc2VjdXJpdHkiLCLmn6XnnIvnvZHnu5zlronlhagiLCJWaWV3IG5ldHdvcmsgc2VjdXJpdHkiKSxmZSgiYmFja3VwIiwi5p+l55yL5aSH5Lu95LiO5a6554G+IiwiVmlldyBiYWNrdXAgYW5kIGRpc2FzdGVyIHJlY292ZXJ5IiksZmUoImV2ZW50cy52aWV3Iiwi5p+l55yL5LqL5Lu2IiwiVmlldyBldmVudHMiKSxmZSgibGFiZWxzLnZpZXciLCLmn6XnnIvmoIfnrb4iLCJWaWV3IGxhYmVscyIpXSksaGUoIm1hbmFnZW1lbnQiLCLpq5jlj6/nlKjjgIHlvZLlsZ7kuI7nrqHnkIYiLCJBdmFpbGFiaWxpdHksIG93bmVyc2hpcCBhbmQgbWFuYWdlbWVudCIsW2ZlKCJhdmFpbGFiaWxpdHkuaGEiLCLnvJbovpHpq5jlj6/nlKgiLCJFZGl0IEhBIiksZmUoInBsYWNlbWVudEdyb3VwIiwi57yW6L6R6Jma5ouf5py65pS+572u57uEIiwiRWRpdCBWTSBwbGFjZW1lbnQgZ3JvdXAiKSxmZSgiaG9zdEF1dG9zdGFydCIsIue8lui+kemaj+S4u+acuuW8gOacuiIsIkVkaXQgc3RhcnQgd2l0aCBob3N0IiksZmUoIm93bmVyc2hpcCIsIue8lui+keaJgOWxnueUqOaItyIsIkVkaXQgb3duZXIiKSxmZSgidm1Hcm91cCIsIue8lui+keiZmuaLn+acuue7hCIsIkVkaXQgVk0gZ3JvdXAiKSxmZSgiaXNvbGF0aW9uLmNvbmZpZ3VyZSIsIumalOemuyIsIklzb2xhdGUiKSxmZSgibmV0d29yay5saW5rcyIsIuafpeeci+e9kee7nOmTvui3ryIsIlZpZXcgbmV0d29yayBsaW5rcyIpLGZlKCJuZXR3b3JrLnRyYWZmaWMiLCLmn6XnnIvnvZHnu5zmtYHph48iLCJWaWV3IG5ldHdvcmsgdHJhZmZpYyIpLGZlKCJ0ZW1wbGF0ZS5jcmVhdGUiLCLliJvlu7romZrmi5/mnLrmqKHmnb8iLCJDcmVhdGUgVk0gdGVtcGxhdGUiKSxmZSgibWFuYWdlbWVudC5tZW51Iiwi5a6M5pW05a6Y5pa55pu05aSa6I+c5Y2VIiwiRnVsbCBuYXRpdmUgTW9yZSBtZW51IildKSxoZSgicmVjeWNsZSIsIuWbnuaUtuS4juWIoOmZpCIsIlJlY3ljbGUgYW5kIGRlbGV0ZSIsW2ZlKCJyZWN5Y2xlLm1vdmUiLCLnp7voh7Plm57mlLbnq5kiLCJNb3ZlIHRvIHJlY3ljbGUgYmluIildKV0pLHZlPWU9PlN0cmluZyhlfHwiIikudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksYmU9IltkaXNhYmxlZF0sW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0sLmlzLWRpc2FibGVkLC5hbnQtYnRuLWxvYWRpbmcsLmFudC1kcm9wZG93bi1kaXNhYmxlZCwuYW50LWJ0bi1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtc3VibWVudS1kaXNhYmxlZCI7ZnVuY3Rpb24gd2UoZSx0KXtpZighZT8uaXNDb25uZWN0ZWR8fGUub3duZXJEb2N1bWVudCE9PXQuZG9jdW1lbnR8fCFlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj1lO247bj1uLnBhcmVudEVsZW1lbnQpe2NvbnN0IGU9dC5nZXRDb21wdXRlZFN0eWxlKG4pO2lmKG4ubWF0Y2hlcygiW2hpZGRlbl0sW2FyaWEtaGlkZGVuPXRydWVdLFtpbmVydF0sLmFudC1kcm9wZG93bi1oaWRkZW4sLl9faGlkZGVuIil8fCJub25lIj09PWUuZGlzcGxheXx8WyJoaWRkZW4iLCJjb2xsYXBzZSJdLmluY2x1ZGVzKGUudmlzaWJpbGl0eSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24geWUoZSl7cmV0dXJuWy4uLmUuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmFudC1kcm9wZG93biwuYW50LWRyb3Bkb3duLW1lbnUtc3VibWVudS1wb3B1cCIpXS5maWx0ZXIodD0+d2UodCxlKSl9ZnVuY3Rpb24ga2UoZSx0LG4scj0hMSl7Y29uc3Qgbz0iZWRpdC1pdGVtIj09PW4/IkVkaXRQZW4xNkJsdWVJY29uIjoiTW9yZUVsbGlwc2lzMzE2Qm9sZEJsdWVJY29uIixpPSJlZGl0LWl0ZW0iPT09bj9bIue8lui+kSIsIkVkaXQiXTpbIuabtOWkmiIsIuabtOWkmuaTjeS9nCIsIk1vcmUiLCJNb3JlIGFjdGlvbnMiLCLii68iLCLigKYiXSxhPVsuLi50LnF1ZXJ5U2VsZWN0b3JBbGwoIi50b29sYmFyIGJ1dHRvbi5hbnQtZHJvcGRvd24tdHJpZ2dlciwudG9vbGJhciAubW9yZS1pY29uLmFudC1kcm9wZG93bi10cmlnZ2VyIildLmZpbHRlcih0PT57aWYoIXdlKHQsZSl8fCFyJiZ0LmNsb3Nlc3QoYmUpKXJldHVybiExO2lmKCF0LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXRlc3RpZD0iJHtvfSJdYCkpcmV0dXJuITE7Y29uc3Qgbj12ZSh0LnRleHRDb250ZW50KTtyZXR1cm4hbnx8aS5pbmNsdWRlcyhuKX0pO3JldHVybiByP2EubGVuZ3RoPjE/ImVudHJ5LWFtYmlndW91cyI6MT09PWEubGVuZ3RoJiZhWzBdLmNsb3Nlc3QoYmUpPyJlbnRyeS1kaXNhYmxlZCI6ImVudHJ5LW1pc3NpbmciOjE9PT1hLmxlbmd0aD9hWzBdOm51bGx9ZnVuY3Rpb24geGUoZSx0LG4pe2lmKCF3ZSh0LGUpKXJldHVybiBudWxsO2NvbnN0IHI9eWUoZSkuZmlsdGVyKGU9PiFuLmhhcyhlKSk7aWYoMSE9PXIubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IG89clswXSxpPVt0LmdldEF0dHJpYnV0ZSgiYXJpYS1jb250cm9scyIpLHQuZ2V0QXR0cmlidXRlKCJhcmlhLW93bnMiKV0uZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoZT0+ZS5zcGxpdCgvXHMrLykpO2lmKCF0LmNsYXNzTGlzdC5jb250YWlucygiYW50LWRyb3Bkb3duLW9wZW4iKSYmInRydWUiIT09dC5nZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKSlyZXR1cm4gbnVsbDtpZihpLmxlbmd0aClyZXR1cm4gby5pZCYmaS5pbmNsdWRlcyhvLmlkKT9vOm51bGw7Y29uc3QgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighKGEud2lkdGg+MCYmYS5oZWlnaHQ+MCYmcy53aWR0aD4wJiZzLmhlaWdodD4wKSlyZXR1cm4gbnVsbDtjb25zdCBsPU1hdGgubWF4KDAsYS5sZWZ0LXMucmlnaHQscy5sZWZ0LWEucmlnaHQpLGM9TWF0aC5tYXgoMCxhLnRvcC1zLmJvdHRvbSxzLnRvcC1hLmJvdHRvbSk7cmV0dXJuIGw8PTI0JiZjPD0yND9vOm51bGx9Y29uc3QgRWU9U3ltYm9sLmZvcigicml2ZXRpbi1jb250ZXh0LW1lbnUubmF0aXZlLXJldGlyZW1lbnQudjEiKTtmdW5jdGlvbiBBZShlKXtjb25zdCB0PWUuZG9jdW1lbnQ7T2JqZWN0Lmhhc093bih0LEVlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsRWUse3ZhbHVlOk9iamVjdC5mcmVlemUoe3BhbmVzOm5ldyBXZWFrU2V0LGNvbnRyb2xzOm5ldyBXZWFrU2V0fSl9KTtjb25zdCBuPXRbRWVdO2Z1bmN0aW9uIHIoe2luY2x1ZGVSb3dzOmU9ITB9PXt9KXtjb25zdCBuPVsuLi50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kcmF3ZXItY29udGVudC1pbm5lciIpXTtyZXR1cm57cGFuZXM6bixjb250cm9sczpbLi4ubi5mbGF0TWFwKGU9PlsuLi5lLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKV0pLC4uLnQucXVlcnlTZWxlY3RvckFsbCgiLmFudC1kcm9wZG93biwuYW50LWRyb3Bkb3duICosLmFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnUtcG9wdXAsLmFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnUtcG9wdXAgKiIpLC4uLmU/dC5xdWVyeVNlbGVjdG9yQWxsKCd0cltkYXRhLXJvdy1rZXldIHRkW3VuaXF1ZT0iX2FjdGlvbl8iXSAqLHRyW2RhdGEtcm93LWtleV0gdGQuY2VsbF9fYWN0aW9uXyAqJyk6W11dfX1yZXR1cm57c25hcHNob3Q6cixxdWFyYW50aW5lOmZ1bmN0aW9uKGU9cigpKXtmb3IoY29uc3QgdCBvZiBlLnBhbmVzKW4ucGFuZXMuYWRkKHQpO2Zvcihjb25zdCB0IG9mIGUuY29udHJvbHMpbi5jb250cm9scy5hZGQodCl9LHRydXN0ZWQ6ZnVuY3Rpb24oZSl7aWYoIWV8fGUub3duZXJEb2N1bWVudCE9PXQpcmV0dXJuITE7Zm9yKGxldCB0PWU7dDt0PXQucGFyZW50RWxlbWVudClpZihuLnBhbmVzLmhhcyh0KXx8bi5jb250cm9scy5oYXModCkpcmV0dXJuITE7cmV0dXJuITB9fX1jb25zdCBTZT1lPT4ic3RyaW5nIj09dHlwZW9mIGUmJi9eW0EtWmEtejAtOV8tXXsxLDEyOH0kLy50ZXN0KGUpLENlPW5ldyBTZXQoWyJvcmdhbml6YXRpb24iLCJkYXRhY2VudGVyIiwiY2x1c3RlciIsImhvc3QiLCJ2bSIsInZtVm9sdW1lIiwiZGlzayJdKSxWZT0nYnV0dG9uLGlucHV0LHRleHRhcmVhLHNlbGVjdCxbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT0iZmFsc2UiXSksW2Rpc2FibGVkXSxbYXJpYS1kaXNhYmxlZD0idHJ1ZSJdLFtpbmVydF0sLnRvb2xiYXIsLm9wZXJhdGlvbi1idXR0b24tY29udGVudCwuYWN0aW9ucy13cmFwcGVyLC5hbnQtZHJvcGRvd24tdHJpZ2dlcixbZGF0YS1yaXZldGluLWNvbnRleHQtbWVudV0sW2RhdGEtcml2ZXRpbi1vYmplY3QtbWVudV0sW2RhdGEtcml2ZXRpbi1hY3Rpb24tZm9ybV0nLE5lPSJbZGF0YS1yaXZldGluLWNvbnRleHQtbWVudV0sW2RhdGEtcml2ZXRpbi1vYmplY3QtbWVudV0sW2RhdGEtcml2ZXRpbi1hY3Rpb24tZm9ybV0iO2Z1bmN0aW9uIFRlKGUpe3JldHVybiBDZS5oYXMoZT8udHlwZSkmJlNlKGU/LmlkKT97dHlwZTplLnR5cGUsaWQ6ZS5pZCxuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5uYW1lP2UubmFtZS5zbGljZSgwLDIwMCk6IiJ9Om51bGx9Y29uc3QgSWU9ZT0+KGU/LnRleHRDb250ZW50fHwiIikudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIikuc2xpY2UoMCwzMDApLFBlPSIuYW50LWRyb3Bkb3duLC5hbnQtZHJvcGRvd24tbWVudS1zdWJtZW51LXBvcHVwIixSZT0nW2hpZGRlbl0sW2FyaWEtaGlkZGVuPSJ0cnVlIl0sW2luZXJ0XSwuX19oaWRkZW4sLmFudC1kcm9wZG93bi1oaWRkZW4sLmFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnUtaGlkZGVuLC5hbnQtZHJvcGRvd24tbWVudS1oaWRkZW4nLE9lPSdbZGlzYWJsZWRdLFthcmlhLWRpc2FibGVkPSJ0cnVlIl0sLmlzLWRpc2FibGVkLC5hbnQtYnRuLWxvYWRpbmcsLmFudC1kcm9wZG93bi1kaXNhYmxlZCwuYW50LWJ0bi1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtc3VibWVudS1kaXNhYmxlZCcsTWU9bmV3IFNldChbIuabtOWkmiIsIuabtOWkmuaTjeS9nCIsIuabtOWkmumAiemhuSIsIm1vcmUiLCJtb3JlIGFjdGlvbnMiLCJtb3JlIG9wdGlvbnMiLCLii68iLCLigKYiLCIuLi4iXSksTGU9J1tkYXRhLXRlc3RpZD0iTW9yZUVsbGlwc2lzMzE2Qm9sZEJsdWVJY29uIl0sW2RhdGEtdGVzdGlkPSJNb3JlRWxsaXBzaXMzMTZCb2xkU2Vjb25kYXJ5SWNvbiJdLGltZ1thbHQ9IjEtbW9yZS1lbGxpcHNpcy0zLTE2LWJvbGQtYmx1ZSJdJyxEZT1uZXcgU2V0KFsicGx1Z2luLWRpc2FibGVkIiwic291cmNlLWNoYW5nZWQiLCJzb3VyY2UtcmV0aXJlZCIsInRyaWdnZXItbWlzc2luZyIsInRyaWdnZXItYW1iaWd1b3VzIiwiYmxvY2tlZC1ieS1kaWFsb2ciLCJwb3B1cC11bnByb3ZlbiIsInBvcHVwLXRpbWVvdXQiLCJtZW51LWVtcHR5IiwibWVudS1hbWJpZ3VvdXMiLCJtZW51LWNoYW5nZWQiLCJlbnRyeS1kaXNhYmxlZCIsImRlcHRoLWxpbWl0IiwiY2FuY2VsbGVkIiwidW5leHBlY3RlZCJdKTtsZXQgVWU9MDtjb25zdCBxZT0iW2RhdGEtcml2ZXRpbi1yZXNvdXJjZS1tZW51XSIsQmU9YCR7cWV9e3Bvc2l0aW9uOmZpeGVkO2luc2V0OmF1dG87bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7b3ZlcmZsb3c6dmlzaWJsZTt6LWluZGV4OjIxNDc0ODMwMDA7Y29sb3I6IzE0MjY0MDtmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsIk1pY3Jvc29mdCBZYUhlaSIsc2Fucy1zZXJpZjt3aWR0aDoyODBweDttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDE2cHgpfVxuJHtxZX06OmJhY2tkcm9we2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZX1cbiR7cWV9IC5ycm0tcGFuZWx7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjI4MHB4O21heC13aWR0aDpjYWxjKDEwMHZ3IC0gMTZweCk7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gMTZweCk7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjZweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRlNWVmO2JvcmRlci1yYWRpdXM6OHB4O2JveC1zaGFkb3c6MCA4cHggMzBweCAjMTgyYjRjMzB9XG4ke3FlfSAucnJtLWNoaWxke3Bvc2l0aW9uOmZpeGVkfVxuJHtxZX0gLnJybS1oZWFkaW5ne3BhZGRpbmc6OXB4IDEwcHg7Zm9udC13ZWlnaHQ6NjAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlOWVkZjM7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX1cbiR7cWV9IC5ycm0tbm90aWNle3BhZGRpbmc6OHB4IDEwcHg7Y29sb3I6Izc0ODM5YTtmb250LXNpemU6MTJweH1cbiR7cWV9IGJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzo4cHggMTBweDtiYWNrZ3JvdW5kOm5vbmU7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2N1cnNvcjpwb2ludGVyfVxuJHtxZX0gYnV0dG9uOmhvdmVyLCR7cWV9IGJ1dHRvbjpmb2N1cy12aXNpYmxlLCR7cWV9IGJ1dHRvblthcmlhLWV4cGFuZGVkPXRydWVde2JhY2tncm91bmQ6I2VhZjRmZjtjb2xvcjojMDY2Y2RiO291dGxpbmU6MH1cbiR7cWV9IGJ1dHRvbjpkaXNhYmxlZHtjb2xvcjojODU5MmE3O2JhY2tncm91bmQ6bm9uZTtjdXJzb3I6ZGVmYXVsdH1cbiR7cWV9IGJ1dHRvbi5ycm0tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNkNjJjNDN9XG4ke3FlfSBbcm9sZT1zZXBhcmF0b3Jde2hlaWdodDoxcHg7YmFja2dyb3VuZDojZTllZGYzO21hcmdpbjo1cHggNHB4fWA7ZnVuY3Rpb24gX2Uoe3dpbjplLGlzRW5hYmxlZDp0PSgpPT4hMCxnZXRMb2NhbGU6bj0oKT0+InpoLUNOIixvbkVycm9yOnI9KCk9Pnt9LGFkYXB0ZXI6b309e30pe2NvbnN0IGk9ZS5kb2N1bWVudCxhPWkuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnRleHRDb250ZW50PUJlLGkuaGVhZC5hcHBlbmQoYSk7Y29uc3Qgcz1vfHxmdW5jdGlvbih7d2luOmUsaWRlbnRpZnk6dD1BLGlzRW5hYmxlZDpuPSgpPT4hMCxnZXRMb2NhbGU6cj0oKT0+InpoLUNOIix0aW1lb3V0TXM6bz0zZTMsbWF4RGVwdGg6aT00LG1heEl0ZW1zOmE9MjAwfT17fSl7aWYoIWU/LmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigiTkFUSVZFX1JPV19XSU5ET1dfUkVRVUlSRUQiKTtjb25zdCBzPWUuZG9jdW1lbnQsbD1BZShlKSxjPWwudHJ1c3RlZDtsZXQgZD1udWxsLHU9ITE7ZnVuY3Rpb24gbSh0KXtpZighdD8uaXNDb25uZWN0ZWR8fHQub3duZXJEb2N1bWVudCE9PXN8fHQuY2xvc2VzdChSZSkpcmV0dXJuITE7Zm9yKGxldCBuPXQ7bjtuPW4ucGFyZW50RWxlbWVudCl7Y29uc3QgdD1lLmdldENvbXB1dGVkU3R5bGUobik7aWYoIm5vbmUiPT09dC5kaXNwbGF5fHxbImhpZGRlbiIsImNvbGxhcHNlIl0uaW5jbHVkZXModC52aXNpYmlsaXR5KSlyZXR1cm4hMX1yZXR1cm4gdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD4wfWNvbnN0IHA9ZT0+bShlKSYmYyhlKSYmIWUuY2xvc2VzdChPZSk7ZnVuY3Rpb24gZigpe3JldHVyblsuLi5zLnF1ZXJ5U2VsZWN0b3JBbGwoUGUpXS5maWx0ZXIoZT0+IWUucGFyZW50RWxlbWVudD8uY2xvc2VzdChQZSkpfWZ1bmN0aW9uIGgoZSl7Y29uc3QgdD1bLi4uZS5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0ibWVudSJdJyldO2UubWF0Y2hlcygnW3JvbGU9Im1lbnUiXScpJiZ0LnVuc2hpZnQoZSk7Y29uc3Qgbj10LmZpbHRlcihlPT4hdC5zb21lKHQ9PnQhPT1lJiZ0LmNvbnRhaW5zKGUpKSk7cmV0dXJuIDE9PT1uLmxlbmd0aD9uWzBdOm51bGx9ZnVuY3Rpb24gZyhlKXtjb25zdCB0PWgoZSk7cmV0dXJuIHQ/Wy4uLnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9Im1lbnVpdGVtIl0nKV0uZmlsdGVyKGU9Pm0oZSkmJmUuY2xvc2VzdCgnW3JvbGU9Im1lbnUiXScpPT09dCYmIWUucGFyZW50RWxlbWVudD8uY2xvc2VzdCgnW3JvbGU9Im1lbnVpdGVtIl0nKSk6W119ZnVuY3Rpb24gdihlKXtjb25zdCB0PWUuY2xvbmVOb2RlKCEwKTtmb3IoY29uc3QgZSBvZiB0LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPSJtZW51Il0sc3ZnLFthcmlhLWhpZGRlbj0idHJ1ZSJdLC5hbnQtZHJvcGRvd24tbWVudS1zdWJtZW51LWFycm93JykpZS5yZW1vdmUoKTtyZXR1cm4gSWUodCl9ZnVuY3Rpb24gYihlKXtyZXR1cm4ibWVudSI9PT1lLmdldEF0dHJpYnV0ZSgiYXJpYS1oYXNwb3B1cCIpfHwidHJ1ZSI9PT1lLmdldEF0dHJpYnV0ZSgiYXJpYS1oYXNwb3B1cCIpfHxlLm1hdGNoZXMoJ2xpLmFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnVbcm9sZT0ibWVudWl0ZW0iXScpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIGUubWF0Y2hlcygiLmFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnUiKSYmZS5xdWVyeVNlbGVjdG9yKCI6c2NvcGUgPiAuYW50LWRyb3Bkb3duLW1lbnUtc3VibWVudS10aXRsZSIpfHxlfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGU/Lm1hdGNoZXMoJy5hbnQtZHJvcGRvd24tbWVudS1zdWJtZW51LXRpdGxlW3JvbGU9ImJ1dHRvbiJdW2FyaWEtaGFzcG9wdXA9InRydWUiXScpJiZlLnBhcmVudEVsZW1lbnQ/Lm1hdGNoZXMoJ2xpLmFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnVbcm9sZT0ibWVudWl0ZW0iXScpfWZ1bmN0aW9uIGsoZSx0PSExKXtjb25zdCBuPWUubWF0Y2hlcygiLmFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnUtdGl0bGUiKT9lLnBhcmVudEVsZW1lbnQ6ZTtyZXR1cm4idHJ1ZSI9PT1lLmdldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfHwodD9uPy5tYXRjaGVzKCdsaS5hbnQtZHJvcGRvd24tbWVudS1zdWJtZW51W3JvbGU9Im1lbnVpdGVtIl0nKSYmbi5jbGFzc0xpc3QuY29udGFpbnMoImFudC1kcm9wZG93bi1tZW51LXN1Ym1lbnUtb3BlbiIpOmUuY2xhc3NMaXN0LmNvbnRhaW5zKCJhbnQtZHJvcGRvd24tb3BlbiIpKX1mdW5jdGlvbiB4KGUsdCxuPSEwKXtjb25zdCByPWUuY2xvc2VzdCgndGRbdW5pcXVlPSJfYWN0aW9uXyJdLHRkLmNlbGxfX2FjdGlvbl8nKTtyZXR1cm4gcj8uY2xvc2VzdCgidHIiKT09PXQmJmUuY2xvc2VzdCgidHIiKT09PXQmJihlLm1hdGNoZXMoIi5tZW51LWJ1dHRvbi5hbnQtZHJvcGRvd24tdHJpZ2dlciIpfHxCb29sZWFuKGUucXVlcnlTZWxlY3RvcihMZSkpKSYmZnVuY3Rpb24oZSx0PSEwKXtpZighbShlKXx8dCYmIXAoZSkpcmV0dXJuITE7Y29uc3Qgbj1bZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKSxlLmdldEF0dHJpYnV0ZSgidGl0bGUiKSxJZShlKV0ubWFwKGU9PihlfHwiIikudHJpbSgpLnRvTG93ZXJDYXNlKCkpLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/bi5ldmVyeShlPT5NZS5oYXMoZSkpOkJvb2xlYW4oZS5xdWVyeVNlbGVjdG9yKExlKSl9KGUsbil9Y29uc3QgRT1lPT5Cb29sZWFuKGUuY2xvc2VzdCgnLmFudC1kcm9wZG93bi1tZW51LWl0ZW0tZGFuZ2VyLC5hbnQtYnRuLWRhbmdlcm91cyxbZGF0YS1kYW5nZXI9InRydWUiXScpfHxlLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRlc3RpZCQ9IlJlZEljb24iXScpKTtmdW5jdGlvbiBTKGUsdCl7Y29uc3Qgbj1bZS5nZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiKSxlLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIildLmZpbHRlcihCb29sZWFuKS5mbGF0TWFwKGU9PmUuc3BsaXQoL1xzKy8pKTtpZihuLmxlbmd0aClyZXR1cm4gbi5zb21lKGU9Pntjb25zdCBuPXMuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG49PT10fHx0LmNvbnRhaW5zKG4pfSk7aWYoZS5jb250YWlucyh0KSlyZXR1cm4hMDtjb25zdCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCEoci53aWR0aD4wJiZyLmhlaWdodD4wJiZvLndpZHRoPjAmJm8uaGVpZ2h0PjApKXJldHVybiExO2NvbnN0IGk9TWF0aC5tYXgoMCxyLmxlZnQtby5yaWdodCxvLmxlZnQtci5yaWdodCksYT1NYXRoLm1heCgwLHIudG9wLW8uYm90dG9tLG8udG9wLXIuYm90dG9tKTtyZXR1cm4gaTw9MjQmJmE8PTI0fXJldHVybntwcmVwYXJlOmFzeW5jIGZ1bmN0aW9uKEEse3NpZ25hbDpDLG9uRmFpbHVyZTpWfT17fSl7ZD8uY2xvc2UoKTtsZXQgTj1udWxsLFQ9ITE7Y29uc3QgST1lPT5EZS5oYXMoZSk/ZToidW5leHBlY3RlZCI7ZnVuY3Rpb24gUChlKXtjb25zdCB0PUkoZSk7aWYoIVQpe1Q9ITA7dHJ5e1Y/Lih0KX1jYXRjaHt9fXJldHVybiB0fWZ1bmN0aW9uIFIoZSl7cmV0dXJuIE58fD1JKGUpfWZ1bmN0aW9uIE8oZSl7dGhyb3cgUihlKSxuZXcgRXJyb3IoIk5BVElWRV9ST1dfUkVKRUNURUQiKX1mdW5jdGlvbiBNKGUpe3JldHVybiBQKGUpLG51bGx9aWYodXx8Qz8uYWJvcnRlZClyZXR1cm4gTSgiY2FuY2VsbGVkIik7aWYoIUF8fCJzdHJpbmciIT10eXBlb2YgQS50eXBlfHwhL15bQS1aYS16MC05Xy1dezEsMTI4fSQvLnRlc3QoQS5pZHx8IiIpKXJldHVybiBNKCJzb3VyY2UtY2hhbmdlZCIpO3RyeXtpZighMCE9PW4oQSkpcmV0dXJuIE0oInBsdWdpbi1kaXNhYmxlZCIpfWNhdGNoe3JldHVybiBNKCJ1bmV4cGVjdGVkIil9Y29uc3QgTD1BLmVsZW1lbnQsRD1MPy5jbG9zZXN0Py4oInRyW2RhdGEtcm93LWtleV0iKSxVPWUubG9jYXRpb24uaHJlZjtsZXQgcSxCLF89InByZXBhcmluZyIsej0hMSwkPSExLEc9bnVsbDtjb25zdCBqPVtdLEY9bmV3IE1hcCxIPW5ldyBNYXAsVz0rK1VlO2xldCBKPTAsSz1lLnBlcmZvcm1hbmNlLm5vdygpK01hdGgubWF4KDUwLE1hdGgubWluKDFlNCxvKSk7ZnVuY3Rpb24gWigpe2lmKCEoTD8uaXNDb25uZWN0ZWQmJkQ/LmlzQ29ubmVjdGVkJiZtKEwpJiZtKEQpJiZlLmxvY2F0aW9uLmhyZWY9PT1VJiZELmdldEF0dHJpYnV0ZSgiZGF0YS1yb3cta2V5Iik9PT1BLmlkKSlyZXR1cm4hMTt0cnl7Y29uc3Qgbj10KEwsZSk7cmV0dXJuIG4/LnR5cGU9PT1BLnR5cGUmJm4uaWQ9PT1BLmlkJiZMLmNsb3Nlc3QoInRyW2RhdGEtcm93LWtleV0iKT09PUR9Y2F0Y2h7cmV0dXJuITF9fWlmKCFaKCkpcmV0dXJuIE0oInNvdXJjZS1jaGFuZ2VkIik7Y29uc3QgUT1bLi4uRC5xdWVyeVNlbGVjdG9yQWxsKCIuYW50LWRyb3Bkb3duLXRyaWdnZXIiKV0uZmlsdGVyKGU9PngoZSxELCExKSk7aWYoMSE9PVEubGVuZ3RoKXJldHVybiBNKFEubGVuZ3RoPyJ0cmlnZ2VyLWFtYmlndW91cyI6InRyaWdnZXItbWlzc2luZyIpO2NvbnN0IFg9UVswXTtpZighYyhYKSlyZXR1cm4gTSgic291cmNlLXJldGlyZWQiKTtpZighcChYKSlyZXR1cm4gTSgiZW50cnktZGlzYWJsZWQiKTtmdW5jdGlvbiBZKCl7cmV0dXJuWy4uLkQucXVlcnlTZWxlY3RvckFsbCgiLmFudC1kcm9wZG93bi10cmlnZ2VyIildLmZpbHRlcihlPT54KGUsRCwhMSkpfWZ1bmN0aW9uIGVlKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiF6JiYhdSYmIUM/LmFib3J0ZWQmJlooKSYmITA9PT1uKEEpfWNhdGNoe3JldHVybiExfX0oKSYmWC5pc0Nvbm5lY3RlZCYmWC5jbG9zZXN0KCJ0cltkYXRhLXJvdy1rZXldIik9PT1EJiZ4KFgsRCkmJjE9PT1ZKCkubGVuZ3RofWZ1bmN0aW9uIHRlKCl7aWYoTilyZXR1cm4gTjtpZih6fHx1fHxDPy5hYm9ydGVkKXJldHVybiJjYW5jZWxsZWQiO3RyeXtpZighMCE9PW4oQSkpcmV0dXJuInBsdWdpbi1kaXNhYmxlZCJ9Y2F0Y2h7cmV0dXJuInVuZXhwZWN0ZWQifWlmKCFaKCl8fCFYLmlzQ29ubmVjdGVkfHxYLmNsb3Nlc3QoInRyW2RhdGEtcm93LWtleV0iKSE9PUQpcmV0dXJuInNvdXJjZS1jaGFuZ2VkIjtpZighYyhYKSlyZXR1cm4ic291cmNlLXJldGlyZWQiO2NvbnN0IGU9WSgpO3JldHVybiAxIT09ZS5sZW5ndGg/ZS5sZW5ndGg/InRyaWdnZXItYW1iaWd1b3VzIjoidHJpZ2dlci1taXNzaW5nIjpwKFgpPyJtZW51LWNoYW5nZWQiOiJlbnRyeS1kaXNhYmxlZCJ9ZnVuY3Rpb24gbmUoKXtyZXR1cm5bLi4ucy5xdWVyeVNlbGVjdG9yQWxsKCcuYW50LW1vZGFsLFtyb2xlPSJkaWFsb2ciXSxbcm9sZT0iYWxlcnRkaWFsb2ciXScpXS5zb21lKG0pfWZ1bmN0aW9uIHJlKCl7cmV0dXJuIW5lKCkmJmYoKS5maWx0ZXIobSkuZXZlcnkoZT0+ai5zb21lKHQ9PnQucG9wdXA9PT1lKSl9ZnVuY3Rpb24gb2UoKXtyZXR1cm4gai5ldmVyeShlPT5wKGUuY29udHJvbCkmJmMoZS5wb3B1cCkmJm0oZS5wb3B1cCkmJmsoZS5jb250cm9sLGUubmVzdGVkKSYmUyhlLmNvbnRyb2wsZS5wb3B1cCkpfWZ1bmN0aW9uIGllKHQsbixyPSExKXtjb25zdCBvPSgpPT4ocj9aKCkmJjE9PT1ZKCkubGVuZ3RoOmVlKCkpJiZmdW5jdGlvbihlKXtyZXR1cm4geShlLmNvbnRyb2wpJiZwKGUuY29udHJvbCkmJmUuY29udHJvbC5wYXJlbnRFbGVtZW50PT09ZS5pdGVtJiZlLmNvbnRyb2wuY2xvc2VzdCgnW3JvbGU9Im1lbnUiXScpPT09ZS5tZW51JiZqLnNvbWUodD0+dC5wb3B1cC5jb250YWlucyhlLmNvbnRyb2wpKX0odCk7Zm9yKGNvbnN0IHIgb2Ygbj9bIm1vdXNlb3ZlciIsIm1vdXNlZW50ZXIiXTpbIm1vdXNlb3V0IiwibW91c2VsZWF2ZSJdKXtpZighbygpKXJldHVybiExO3QuY29udHJvbC5kaXNwYXRjaEV2ZW50KG5ldyBlLk1vdXNlRXZlbnQocix7YnViYmxlczoibW91c2VvdmVyIj09PXJ8fCJtb3VzZW91dCI9PT1yLHJlbGF0ZWRUYXJnZXQ6bj9udWxsOnQubWVudSx2aWV3OmV9KSl9cmV0dXJuITB9ZnVuY3Rpb24gYWUoKXtxPy5kaXNjb25uZWN0KCksZS5jbGVhckludGVydmFsKEIpLEM/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixsZSk7Zm9yKGNvbnN0IGUgb2ZbInBvaW50ZXJkb3duIiwibW91c2Vkb3duIiwia2V5ZG93biIsImNvbnRleHRtZW51Il0pcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsZGUsITApO2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsY2UpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGNlKSxHPy4oKSxkPT09ZmUmJihkPW51bGwpfWZ1bmN0aW9uIHNlKGU9ImNhbmNlbGxlZCIpe2lmKHopcmV0dXJuO1IoZSk7Y29uc3QgdD0hJCYmWigpJiZYLmlzQ29ubmVjdGVkJiZ4KFgsRCkmJjE9PT1ZKCkubGVuZ3RoJiZqWzBdJiZjKGpbMF0ucG9wdXApJiZtKGpbMF0ucG9wdXApJiZrKFgpJiZTKFgsalswXS5wb3B1cCk7aWYoISQpZm9yKGNvbnN0IGUgb2ZbLi4uSC52YWx1ZXMoKV0ucmV2ZXJzZSgpKXRyeXtpZShlLCExLCEwKX1jYXRjaHt9aWYoSC5jbGVhcigpLHo9ITAsYWUoKSx0KXRyeXtYLmNsaWNrKCl9Y2F0Y2h7fSJpZGxlIj09PV98fCR8fFAoTil9ZnVuY3Rpb24gbGUoKXtzZSgiY2FuY2VsbGVkIil9ZnVuY3Rpb24gY2UoKXtlLmxvY2F0aW9uLmhyZWYhPT1VJiZsLnF1YXJhbnRpbmUoKSxzZSgic291cmNlLWNoYW5nZWQiKX1mdW5jdGlvbiBkZShlKXsiaWRsZSIhPT1fJiZlLmlzVHJ1c3RlZCYmc2UoImNhbmNlbGxlZCIpfWZ1bmN0aW9uIHVlKHQsbj0icG9wdXAtdGltZW91dCIpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG8saSxhPSExO2NvbnN0IHM9dD0+e2F8fChhPSEwLGUuY2xlYXJUaW1lb3V0KG8pLGUuY2xlYXJJbnRlcnZhbChpKSxHPT09bCYmKEc9bnVsbCkscih0KSl9LGw9KCk9PntpZighZWUoKSlyZXR1cm4gUih0ZSgpKSxzKG51bGwpO2lmKGUucGVyZm9ybWFuY2Uubm93KCk+PUspcmV0dXJuIFIoImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pLHMobnVsbCk7dHJ5e2NvbnN0IGU9dCgpO2UmJnMoZSl9Y2F0Y2h7UigidW5leHBlY3RlZCIpLHMobnVsbCl9fTtHPWwsbz1lLnNldFRpbWVvdXQobCxNYXRoLm1heCgwLEstZS5wZXJmb3JtYW5jZS5ub3coKSkpLGk9ZS5zZXRJbnRlcnZhbChsLDI1KSxsKCl9KX1hc3luYyBmdW5jdGlvbiBtZShlLHQpe2lmKCFlZSgpKXJldHVybiBSKHRlKCkpLG51bGw7aWYoIWMoZSkpcmV0dXJuIFIoInNvdXJjZS1yZXRpcmVkIiksbnVsbDtpZighcChlKSlyZXR1cm4gUigiZW50cnktZGlzYWJsZWQiKSxudWxsO2lmKCFyZSgpKXJldHVybiBSKCJibG9ja2VkLWJ5LWRpYWxvZyIpLG51bGw7aWYoayhlLHQpKXJldHVybiBSKCJwb3B1cC11bnByb3ZlbiIpLG51bGw7Y29uc3Qgbj1uZXcgTWFwKGYoKS5tYXAoZT0+W2UsbShlKV0pKTtsZXQgcj1udWxsLG89bnVsbCxpPW51bGw7aWYodCYmeShlKSl7aWYoaT17Y29udHJvbDplLGl0ZW06ZS5wYXJlbnRFbGVtZW50LG1lbnU6ZS5jbG9zZXN0KCdbcm9sZT0ibWVudSJdJyl9LEguc2V0KGUsaSksIWllKGksITApKXJldHVybiBSKGVlKCk/Im1lbnUtY2hhbmdlZCI6dGUoKSksbnVsbH1lbHNlIGUuY2xpY2soKTtjb25zdCBhPWF3YWl0IHVlKCgpPT57aWYobmUoKSlyZXR1cm4gbz0iYmxvY2tlZC1ieS1kaWFsb2ciLG51bGw7Y29uc3QgYT1mKCkuZmlsdGVyKGU9Pm0oZSkmJiFuLmdldChlKSk7cmV0dXJuIGEuc29tZShlPT4hYyhlKSk/KG89InNvdXJjZS1yZXRpcmVkIixSKCJzb3VyY2UtcmV0aXJlZCIpLG51bGwpOihhLmxlbmd0aCYmKG89InBvcHVwLXVucHJvdmVuIiksayhlLHQpJiYxPT09YS5sZW5ndGgmJlMoZSxhWzBdKT9mKCkuZmlsdGVyKG0pLnNvbWUoZT0+IWouc29tZSh0PT50LnBvcHVwPT09ZSkmJmUhPT1hWzBdKT9udWxsOnImJnIucG9wdXAhPT1hWzBdPyhvPSJtZW51LWNoYW5nZWQiLG51bGwpOihyfHwocj17Y29udHJvbDplLHBvcHVwOmFbMF0sbmVzdGVkOnQsaG92ZXI6aX0sai5wdXNoKHIpKSxoKGFbMF0pP2FbMF06KG89YVswXS5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0ibWVudSJdJykubGVuZ3RoPyJtZW51LWFtYmlndW91cyI6Im1lbnUtZW1wdHkiLG51bGwpKTpudWxsKX0sKCk9Pm98fCJwb3B1cC10aW1lb3V0Iik7cmV0dXJuIGEmJmVlKCk/cjpudWxsfWFzeW5jIGZ1bmN0aW9uIHBlKGUpe2lmKCEoZWUoKSYmai5pbmNsdWRlcyhlKSYmcChlLmNvbnRyb2wpJiZjKGUucG9wdXApJiZtKGUucG9wdXApJiZrKGUuY29udHJvbCxlLm5lc3RlZCkmJlMoZS5jb250cm9sLGUucG9wdXApKSlyZXR1cm4gUihlZSgpPyJtZW51LWNoYW5nZWQiOnRlKCkpLCExO2lmKGUuaG92ZXIpe2lmKCFpZShlLmhvdmVyLCExKSlyZXR1cm4gUihlZSgpPyJtZW51LWNoYW5nZWQiOnRlKCkpLCExfWVsc2UgZS5jb250cm9sLmNsaWNrKCk7Y29uc3QgdD1hd2FpdCB1ZSgoKT0+IW0oZS5wb3B1cCkmJiFrKGUuY29udHJvbCxlLm5lc3RlZCksIm1lbnUtY2hhbmdlZCIpO3JldHVybiB0JiYoai5zcGxpY2Uoai5pbmRleE9mKGUpLDEpLGUuaG92ZXImJkguZGVsZXRlKGUuY29udHJvbCkpLEJvb2xlYW4odCl9Y29uc3QgZmU9e3RyZWU6W10sZXhlY3V0ZTphc3luYyBmdW5jdGlvbih0KXtjb25zdCBuPUYuZ2V0KHQpLHI9ZT0+KHtzdGF0dXM6InVuc3VwcG9ydGVkIixyZWFzb246UChlKX0pO2lmKHp8fCJpZGxlIiE9PV8pcmV0dXJuIHIoTnx8ImNhbmNlbGxlZCIpO2lmKE49bnVsbCxUPSExLCFuKXJldHVybiByKCJtZW51LWNoYW5nZWQiKTtpZihuLmRpc2FibGVkKXJldHVybiByKG4ucmVhc29ufHwiZW50cnktZGlzYWJsZWQiKTtpZigibGVhZiIhPT1uLmtpbmQpcmV0dXJuIHIoIm1lbnUtY2hhbmdlZCIpO2lmKCFlZSgpKXJldHVybiBSKHRlKCkpLHNlKCkscihOKTtfPSJleGVjdXRpbmciLEs9ZS5wZXJmb3JtYW5jZS5ub3coKStNYXRoLm1heCg1MCxNYXRoLm1pbigxZTQsbykpO3RyeXtsZXQgZT1hd2FpdCBtZShYLCExKTtlfHxPKE58fCJwb3B1cC11bnByb3ZlbiIpO2ZvcihsZXQgdD0wO3Q8bi5wYXRoLmxlbmd0aDt0Kyspe2NvbnN0IHI9bi5wYXRoW3RdLG89ZyhlLnBvcHVwKS5maWx0ZXIoZT0+dihlKT09PXIubGFiZWwpOzEhPT1vLmxlbmd0aCYmTyhvLmxlbmd0aD8ibWVudS1hbWJpZ3VvdXMiOiJtZW51LWNoYW5nZWQiKTtjb25zdCBpPW9bMF0sYT1iKGkpPyJzdWJtZW51IjoibGVhZiI7aWYoYyhpKXx8Tygic291cmNlLXJldGlyZWQiKSxlZSgpfHxPKHRlKCkpLHAoaSl8fE8oImVudHJ5LWRpc2FibGVkIiksYT09PXIua2luZCYmRShpKT09PXIuZGFuZ2VyJiZyZSgpJiZvZSgpfHxPKG5lKCk/ImJsb2NrZWQtYnktZGlhbG9nIjoibWVudS1jaGFuZ2VkIiksInN1Ym1lbnUiIT09YSlyZXR1cm4gdCE9PW4ucGF0aC5sZW5ndGgtMSYmTygibWVudS1jaGFuZ2VkIiksJD0hMCx6PSEwLGFlKCksaS5jbGljaygpLHtzdGF0dXM6ImhhbmRlZC1vZmYiLHN1cmZhY2U6Im5hdGl2ZS1hY3Rpb24ifTtlPWF3YWl0IG1lKHcoaSksITApLGV8fE8oTnx8InBvcHVwLXVucHJvdmVuIil9fWNhdGNoe1IoInVuZXhwZWN0ZWQiKSxzZSgpfXJldHVybiByKE58fCJ1bmV4cGVjdGVkIil9LGNsb3NlOnNlfTtpZighZWUoKSlyZXR1cm4gTSh0ZSgpKTtpZighcmUoKSlyZXR1cm4gTSgiYmxvY2tlZC1ieS1kaWFsb2ciKTtkPWZlLHE9bmV3IGUuTXV0YXRpb25PYnNlcnZlcigoKT0+e2VlKCk/Rz8uKCk6c2UodGUoKSl9KSxxLm9ic2VydmUocy5ib2R5LHtzdWJ0cmVlOiEwLGNoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITB9KSxCPWUuc2V0SW50ZXJ2YWwoKCk9PntlZSgpfHxzZSh0ZSgpKX0sMTAwKSxDPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbGUse29uY2U6ITB9KTtmb3IoY29uc3QgZSBvZlsicG9pbnRlcmRvd24iLCJtb3VzZWRvd24iLCJrZXlkb3duIiwiY29udGV4dG1lbnUiXSlzLmFkZEV2ZW50TGlzdGVuZXIoZSxkZSwhMCk7ZS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixjZSksZS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsY2UpO3RyeXtjb25zdCBlPWF3YWl0IG1lKFgsITEpO3JldHVybiBlfHxPKE58fCJwb3B1cC11bnByb3ZlbiIpLGZlLnRyZWU9YXdhaXQgYXN5bmMgZnVuY3Rpb24gZSh0LG49W10sbz1uZXcgU2V0KXtlZSgpfHxPKHRlKCkpLG4ubGVuZ3RoPmkmJk8oImRlcHRoLWxpbWl0IikscmUoKSYmb2UoKSYmIW8uaGFzKHQucG9wdXApfHxPKG5lKCk/ImJsb2NrZWQtYnktZGlhbG9nIjoicG9wdXAtdW5wcm92ZW4iKTtjb25zdCBzPW5ldyBTZXQobykuYWRkKHQucG9wdXApLGw9Zyh0LnBvcHVwKSxkPWwubWFwKHYpLHU9W107Zm9yKGNvbnN0IHQgb2YgbCl7Yyh0KXx8Tygic291cmNlLXJldGlyZWQiKSxlZSgpfHxPKHRlKCkpLHJlKCkmJm9lKCl8fE8obmUoKT8iYmxvY2tlZC1ieS1kaWFsb2ciOiJtZW51LWNoYW5nZWQiKSwrK0o+YSYmTygiZGVwdGgtbGltaXQiKTtjb25zdCBvPXYodCk7aWYoIW8pY29udGludWU7Y29uc3QgbD1iKHQpPyJzdWJtZW51IjoibGVhZiIsbT0xIT09ZC5maWx0ZXIoZT0+ZT09PW8pLmxlbmd0aCxmPSFwKHQpfHwic3VibWVudSI9PT1sJiYhcCh3KHQpKXx8bSxoPUUodCksZz1gbmF0aXZlLXJvdy0ke1d9LSR7Sn1gLHk9T2JqZWN0LmZyZWV6ZSh7bGFiZWw6byxraW5kOmwsZGFuZ2VyOmh9KSxrPVsuLi5uLHldLHg9e2lkOmcsbGFiZWw6byxkaXNhYmxlZDpmLGRhbmdlcjpofTtpZihmJiYoeC5yZWFzb25Db2RlPW0/Im1lbnUtYW1iaWd1b3VzIjoiZW50cnktZGlzYWJsZWQiKSxtJiYoeC5yZWFzb249ImVuLVVTIj09PXIoKT8iQW1iaWd1b3VzIG5hdGl2ZSBtZW51IGVudHJ5LiI6IuWOn+eUn+iPnOWNlemhueS4jeWUr+S4gOOAgiIpLCJzdWJtZW51Ij09PWwpe2lmKHguY2hpbGRyZW49W10sIWYmJmsubGVuZ3RoPD1pKXtjb25zdCBuPWF3YWl0IG1lKHcodCksITApO258fE8oTnx8InBvcHVwLXVucHJvdmVuIikseC5jaGlsZHJlbj1hd2FpdCBlKG4sayxzKSxhd2FpdCBwZShuKXx8TyhOfHwibWVudS1jaGFuZ2VkIil9ZWxzZSBmfHwoeC5kaXNhYmxlZD0hMCx4LnJlYXNvbkNvZGU9ImRlcHRoLWxpbWl0Iix4LnJlYXNvbj0iZW4tVVMiPT09cigpPyJOYXRpdmUgbWVudSBkZXB0aCBsaW1pdC4iOiLljp/nlJ/oj5zljZXlsYLnuqfotoXov4fpmZDliLbjgIIiKTtGLnNldChnLHtwYXRoOmssZGlzYWJsZWQ6eC5kaXNhYmxlZCxyZWFzb246eC5yZWFzb25Db2RlLGtpbmQ6bH0pfWVsc2UgRi5zZXQoZyx7cGF0aDprLGRpc2FibGVkOmYscmVhc29uOngucmVhc29uQ29kZSxraW5kOmx9KTt1LnB1c2goT2JqZWN0LmZyZWV6ZSh4KSl9cmV0dXJuIE9iamVjdC5mcmVlemUodSl9KGUpLGZlLnRyZWUubGVuZ3RofHxPKCJtZW51LWVtcHR5IiksYXdhaXQgcGUoZSkmJmVlKCl8fE8oTnx8KGVlKCk/Im1lbnUtY2hhbmdlZCI6dGUoKSkpLF89ImlkbGUiLE9iamVjdC5mcmVlemUoZmUpfWNhdGNoe3JldHVybiBSKCJ1bmV4cGVjdGVkIiksc2UoKSxQKE4pLG51bGx9fSxzdG9wKCl7dT0hMCxkPy5jbG9zZSgpfX19KHt3aW46ZSxpZGVudGlmeTpBLGlzRW5hYmxlZDp0LGdldExvY2FsZTpufSk7bGV0IGw9bnVsbCxjPW51bGwsZD0hMTtmdW5jdGlvbiB1KG4pe3JldHVybiFkJiZsPT09biYmIW4uY29udHJvbGxlci5zaWduYWwuYWJvcnRlZCYmbi5ocmVmPT09ZS5sb2NhdGlvbi5ocmVmJiYoIW4ubW91bnRlZHx8bi5yb290LmlzQ29ubmVjdGVkJiZSKGUsbi5yZXNvdXJjZS5lbGVtZW50KT09PW4uY29udGFpbmVyKSYmbi5yZXNvdXJjZS5lbGVtZW50LmlzQ29ubmVjdGVkJiZ0KG4ucmVzb3VyY2UpJiZnKEEobi5yZXNvdXJjZS5lbGVtZW50LGUpLG4ucmVzb3VyY2UpfWZ1bmN0aW9uIG0odCl7aWYodC5vYnNlcnZlcj8uZGlzY29ubmVjdCgpLGUuY2xlYXJJbnRlcnZhbCh0Lmd1YXJkKSxlLmNsZWFyVGltZW91dCh0LmxlYXZlKSx0LnRvcExheWVyKXt0LnRvcExheWVyPSExO3RyeXt0LnJvb3QuaGlkZVBvcG92ZXIoKX1jYXRjaHt9fXQucm9vdC5yZW1vdmUoKX1mdW5jdGlvbiBwKGUpe2UubmF0aXZlQ2xvc2VkfHwoZS5uYXRpdmVDbG9zZWQ9ITAsZS5uYXRpdmU/LmNsb3NlKCkpfWZ1bmN0aW9uIGYoZSl7ZS5jb250cm9sbGVyLmFib3J0KCksbShlKSxwKGUpfWZ1bmN0aW9uIGgoKXtjb25zdCBlPWwsdD1jO2w9bnVsbCxjPW51bGwsZSYmZihlKSx0JiZ0IT09ZSYmZih0KX1mdW5jdGlvbiB2KGUpe3IoWihlLG4oKSkpfWZ1bmN0aW9uIGIoZSx0LG49ITEpe2Zvcihjb25zdCBuIG9mIGUubGV2ZWxzLnNwbGljZSh0KzEpKW4uYW5jaG9yPy5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLG4ucGFuZWwucmVtb3ZlKCk7biYmZS5sZXZlbHNbdF0/LmFuY2hvcj8uZm9jdXMoKX1mdW5jdGlvbiB3KHQscixvLGEpe28uZm9yRWFjaChvPT57aWYoby5zZXBhcmF0b3Ipe2NvbnN0IGU9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJzZXBhcmF0b3IiKSx2b2lkIHIuYXBwZW5kKGUpfWNvbnN0IHM9aS5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtzLnR5cGU9ImJ1dHRvbiIscy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJtZW51aXRlbSIpLHMudGV4dENvbnRlbnQ9by5sYWJlbCxzLmRpc2FibGVkPSEwPT09by5kaXNhYmxlZCxzLmRhdGFzZXQubmF0aXZlRW50cnlJZD1vLmlkLHMuZGlzYWJsZWQmJihzLnRpdGxlPVooby5yZWFzb25Db2RlfHwiZW50cnktZGlzYWJsZWQiLG4oKSkpLG8uZGFuZ2VyJiZzLmNsYXNzTGlzdC5hZGQoInJybS1kYW5nZXIiKTtjb25zdCBkPW8uY2hpbGRyZW47aWYoZD8ubGVuZ3RoKXtzLnNldEF0dHJpYnV0ZSgiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSxzLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIik7Y29uc3Qgbj1pLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtuLnRleHRDb250ZW50PSLigLoiLG4uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxzLmFwcGVuZChuKTtjb25zdCByPW49PntpZighdSh0KXx8cy5kaXNhYmxlZClyZXR1cm47aWYoZS5jbGVhclRpbWVvdXQodC5sZWF2ZSksdC5sZXZlbHNbYSsxXT8uYW5jaG9yPT09cylyZXR1cm4gdm9pZChuJiZ0LmxldmVsc1thKzFdLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbjpub3QoOmRpc2FibGVkKSIpPy5mb2N1cygpKTtiKHQsYSk7Y29uc3Qgcj1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuY2xhc3NOYW1lPSJycm0tcGFuZWwgcnJtLWNoaWxkIixyLnNldEF0dHJpYnV0ZSgicm9sZSIsIm1lbnUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsby5sYWJlbCksdC5yb290LmFwcGVuZChyKSx0LmxldmVscy5wdXNoKHtwYW5lbDpyLGFuY2hvcjpzfSkscy5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIiksdyh0LHIsZCxhKzEpLHIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlLnRvcD0iMHB4Ijtjb25zdCBsPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10ZSh7YW5jaG9yOnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHQsdmlld3BvcnRXaWR0aDplLmlubmVyV2lkdGgsdmlld3BvcnRIZWlnaHQ6ZS5pbm5lckhlaWdodH0pO3Iuc3R5bGUubGVmdD1jLmxlZnQtbC5sZWZ0KyJweCIsci5zdHlsZS50b3A9Yy50b3AtbC50b3ArInB4IixyLmRhdGFzZXQuc2lkZT1jLnNpZGUsbiYmci5xdWVyeVNlbGVjdG9yKCJidXR0b246bm90KDpkaXNhYmxlZCkiKT8uZm9jdXMoKX07cy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCgpPT5yKCExKSkscy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwoKT0+cighMSkpLHMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5yKCEwKSl9ZWxzZSBzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsKCk9PmIodCxhKSkscy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntzLmRpc2FibGVkfHxhc3luYyBmdW5jdGlvbihlLHQpe2lmKHUoZSkmJiFlLmJ1c3kpe2UuYnVzeT0hMCxsPW51bGwsYz1lLG0oZSk7dHJ5e2NvbnN0IG49YXdhaXQgZS5uYXRpdmUuZXhlY3V0ZSh0KTtjIT09ZXx8ZS5jb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkfHxbImhhbmRlZC1vZmYiLCJvcGVuZWQiLCJjYW5jZWxsZWQiXS5pbmNsdWRlcyhuPy5zdGF0dXMpfHwiY2FuY2VsbGVkIj09PW4/LnJlYXNvbnx8dihuPy5yZWFzb24pfWNhdGNoe2MhPT1lfHxlLmNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWR8fHYoInVuZXhwZWN0ZWQiKX1maW5hbGx5e2M9PT1lJiYoYz1udWxsKSxwKGUpLGUuY29udHJvbGxlci5hYm9ydCgpfX19KHQsby5pZCl9KTtyLmFwcGVuZChzKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwoKT0+Yih0LGEpKX1mdW5jdGlvbiB5KGUpe2wmJiFsLnJvb3QuY29udGFpbnMoZS50YXJnZXQpJiZoKCl9ZnVuY3Rpb24gayhlKXtjb25zdCB0PWw7aWYoIXR8fCF0LnJvb3QuY29udGFpbnMoZS50YXJnZXQpKXJldHVybjtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dC5sZXZlbHMuZmluZEluZGV4KHQ9PnQucGFuZWw9PT1lLnRhcmdldC5jbG9zZXN0KCIucnJtLXBhbmVsIikpO2lmKCJFc2NhcGUiIT09ZS5rZXkmJiJBcnJvd0xlZnQiIT09ZS5rZXkpe2lmKCJBcnJvd1JpZ2h0Ij09PWUua2V5KXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCgibWVudSI9PT1lLnRhcmdldC5nZXRBdHRyaWJ1dGUoImFyaWEtaGFzcG9wdXAiKSYmZS50YXJnZXQuY2xpY2soKSk7aWYoWyJBcnJvd0Rvd24iLCJBcnJvd1VwIiwiSG9tZSIsIkVuZCIsIlRhYiJdLmluY2x1ZGVzKGUua2V5KSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IHI9Wy4uLnQubGV2ZWxzW01hdGgubWF4KG4sMCldLnBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbjpub3QoOmRpc2FibGVkKSIpXSxvPXIuaW5kZXhPZihpLmFjdGl2ZUVsZW1lbnQpLGE9IkhvbWUiPT09ZS5rZXk/MDoiRW5kIj09PWUua2V5P3IubGVuZ3RoLTE6KG8rKCJBcnJvd1VwIj09PWUua2V5fHxlLnNoaWZ0S2V5Py0xOjEpK3IubGVuZ3RoKSVyLmxlbmd0aDtyW2FdPy5mb2N1cygpfX1lbHNlIGlmKGUucHJldmVudERlZmF1bHQoKSxuPjApe2NvbnN0IGU9dC5sZXZlbHNbbl0uYW5jaG9yO2IodCxuLTEpLGUuZm9jdXMoKX1lbHNlIGgoKX1yZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIseSwhMCksaS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixrLCEwKSxlLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGgpLGUuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGgpLGUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaCkse29wZW46ZnVuY3Rpb24ocixvLGEpe2lmKGR8fHIuaW50ZXJuYWx8fCFyLmVsZW1lbnQ/LmNsb3Nlc3QoInRyW2RhdGEtcm93LWtleV0iKXx8IXQocikpcmV0dXJuITE7aCgpO2NvbnN0IGM9UihlLHIuZWxlbWVudCk7aWYoIWMpcmV0dXJuITE7Y29uc3QgbT1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO20uc2V0QXR0cmlidXRlKCJkYXRhLXJpdmV0aW4tcmVzb3VyY2UtbWVudSIsIiIpLG0uc2V0QXR0cmlidXRlKCJyb2xlIiwibWVudSIpO2NvbnN0IHA9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLmNsYXNzTmFtZT0icnJtLXBhbmVsIixtLmFwcGVuZChwKTtjb25zdCBmPWkuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5jbGFzc05hbWU9InJybS1oZWFkaW5nIixmLnRleHRDb250ZW50PXIubmFtZSxwLmFwcGVuZChmKTtjb25zdCBnPWkuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zy5jbGFzc05hbWU9InJybS1ub3RpY2UiLGcuc2V0QXR0cmlidXRlKCJyb2xlIiwic3RhdHVzIiksZy50ZXh0Q29udGVudD0iZW4tVVMiPT09bigpPyJSZWFkaW5nIGF2YWlsYWJsZSBuYXRpdmUgYWN0aW9uc+KApiI6Iuato+WcqOivu+WPluWumOaWueWPr+eUqOaTjeS9nOKApiIscC5hcHBlbmQoZyk7Y29uc3QgeT17cmVzb3VyY2U6cixyb290Om0sY29udGFpbmVyOmMsbW91bnRlZDohMSxjb250cm9sbGVyOm5ldyBlLkFib3J0Q29udHJvbGxlcixocmVmOmUubG9jYXRpb24uaHJlZixsZXZlbHM6W3twYW5lbDpwfV0sbmF0aXZlOm51bGx9O3JldHVybiBsPXksKGFzeW5jKCk9Pnt0cnl7Y29uc3QgdD1hd2FpdCBzLnByZXBhcmUocix7c2lnbmFsOnkuY29udHJvbGxlci5zaWduYWwsb25GYWlsdXJlOmU9Pnt5LmZhaWx1cmU9ZX19KTtpZighdSh5KSlyZXR1cm4gdm9pZCB0Py5jbG9zZSgpO2lmKHkubmF0aXZlPXQsIXQ/LnRyZWU/Lmxlbmd0aCl7Y29uc3QgZT15LmZhaWx1cmV8fCJtZW51LWVtcHR5IjtyZXR1cm4gaCgpLHZvaWQoImNhbmNlbGxlZCIhPT1lJiZ2KGUpKX1pZighYy5pc0Nvbm5lY3RlZHx8UihlLHIuZWxlbWVudCkhPT1jKXJldHVybiB2b2lkIGgoKTtpZihwLnJlcGxhY2VDaGlsZHJlbihmKSx3KHkscCx0LnRyZWUsMCksYy5hcHBlbmQobSkseS5tb3VudGVkPSEwLG0uc3R5bGUubGVmdD0iMHB4IixtLnN0eWxlLnRvcD0iMHB4IiwiZnVuY3Rpb24iPT10eXBlb2YgbS5zaG93UG9wb3Zlcil0cnl7bS5zZXRBdHRyaWJ1dGUoInBvcG92ZXIiLCJtYW51YWwiKSxtLnNob3dQb3BvdmVyKCkseS50b3BMYXllcj1tLm1hdGNoZXMoIjpwb3BvdmVyLW9wZW4iKSx5LnRvcExheWVyfHxtLnJlbW92ZUF0dHJpYnV0ZSgicG9wb3ZlciIpfWNhdGNoe20ucmVtb3ZlQXR0cmlidXRlKCJwb3BvdmVyIil9IWZ1bmN0aW9uKHQsbixyKXt0LnN0eWxlLmxlZnQ9IjBweCIsdC5zdHlsZS50b3A9IjBweCI7Y29uc3Qgbz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Quc3R5bGUubGVmdD1NYXRoLm1heCg4LE1hdGgubWluKG4sZS5pbm5lcldpZHRoLW8ud2lkdGgtOCkpLW8ubGVmdCsicHgiLHQuc3R5bGUudG9wPU1hdGgubWF4KDgsTWF0aC5taW4ocixlLmlubmVySGVpZ2h0LW8uaGVpZ2h0LTgpKS1vLnRvcCsicHgifShtLG8sYSkscC5xdWVyeVNlbGVjdG9yKCJidXR0b246bm90KDpkaXNhYmxlZCkiKT8uZm9jdXMoKSx5Lm9ic2VydmVyPW5ldyBlLk11dGF0aW9uT2JzZXJ2ZXIoKCk9Pnt1KHkpfHxoKCl9KSx5Lm9ic2VydmVyLm9ic2VydmUoaS5ib2R5LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMCxhdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRhdGEtcm93LWtleSIsImNsYXNzIiwic3R5bGUiLCJoaWRkZW4iXX0pLHkuZ3VhcmQ9ZS5zZXRJbnRlcnZhbCgoKT0+e3UoeSl8fGgoKX0sMTAwKX1jYXRjaHtsPT09eSYmKGgoKSx2KCJ1bmV4cGVjdGVkIikpfX0pKCksbS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsZT0+ZS5zdG9wUHJvcGFnYXRpb24oKSksbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+ZS5zdG9wUHJvcGFnYXRpb24oKSksbS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCgpPT5lLmNsZWFyVGltZW91dCh5LmxlYXZlKSksbS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLHQ9PnttLmNvbnRhaW5zKHQucmVsYXRlZFRhcmdldCl8fCh5LmxlYXZlPWUuc2V0VGltZW91dCgoKT0+Yih5LDApLDIyMCkpfSksITB9LGNsb3NlOmgsc3RvcCgpe2R8fChkPSEwLGgoKSxzLnN0b3A/LigpLGEucmVtb3ZlKCksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIseSwhMCksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixrLCEwKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGgpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGgpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsaCkpfX19ZnVuY3Rpb24gemUoe1JlYWN0OmUsd2luOnQsaGlzdG9yeTpvLG9wdGlvbnM6cz17fSxnZXRMb2NhbGU6bD0oKT0+InpoLUNOIixhY3Rpb25Qcm92aWRlcjpjfSl7Y29uc3QgZD1lfHx0LlJpdmV0aW5TREsuUmVhY3QscD1kLmNyZWF0ZUVsZW1lbnQsZj1mdW5jdGlvbihlLHQsbil7Y29uc3R7ZGVmYXVsdHM6cixlcXVhbDpvLHNlZWQ6aSx2YWxpZGF0ZTpzfT1uLGw9ZnVuY3Rpb24oZSl7bGV0IHQ9e3Nob3dGbG9hdGluZ0J1dHRvbjohMH0sbj0hMDtjb25zdCByPW5ldyBTZXQsbz0oKT0+e2Zvcihjb25zdCBlIG9mIHIpZSh7Li4udH0pfTtmdW5jdGlvbiBpKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlfHwie30iKSxuPXQuZmxvYXRpbmdQb3NpdGlvbixyPW4mJlsieCIsInkiXS5ldmVyeShlPT5OdW1iZXIuaXNGaW5pdGUobltlXSkmJm5bZV0+PTAmJm5bZV08PTFlNSk/e3g6TWF0aC5yb3VuZChuLngpLHk6TWF0aC5yb3VuZChuLnkpfTpudWxsO3JldHVybntzaG93RmxvYXRpbmdCdXR0b246ITEhPT10LnNob3dGbG9hdGluZ0J1dHRvbixmbG9hdGluZ1Bvc2l0aW9uOnJ9fXRyeXt0PWkoZS5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShhKSl9Y2F0Y2h7bj0hMX1mdW5jdGlvbiBzKGUpe2lmKGUua2V5PT09YXx8bnVsbD09PWUua2V5KXRyeXt0PWkoZS5uZXdWYWx1ZSksbygpfWNhdGNoe319cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIscykse2dldDooKT0+KHsuLi50fSkscGVyc2lzdGVudDooKT0+bix1cGRhdGUocil7dD1pKEpTT04uc3RyaW5naWZ5KHsuLi50LC4uLnJ9KSk7dHJ5e2UubG9jYWxTdG9yYWdlLnNldEl0ZW0oYSxKU09OLnN0cmluZ2lmeSh0KSksbj0hMH1jYXRjaHtuPSExfXJldHVybiBvKCksey4uLnR9fSxzdWJzY3JpYmU6ZT0+KHIuYWRkKGUpLCgpPT5yLmRlbGV0ZShlKSksZGlzcG9zZSgpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIscyksci5jbGVhcigpfX19KGUpLGM9bmV3IFNldDtsZXQgZD1yKCksbT1yKCkscD1bXSxmPXtsb2FkZWQ6ITEsbG9hZGluZzohMSxzYXZpbmc6ITEsZXJyb3I6IiIscmV2aXNpb246MCx1cGRhdGVkQXQ6bnVsbH07Y29uc3QgaD1lPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKSxnPSgpPT4oey4uLmYsZGlydHk6IW8oZCxtKX0pLHY9KCk9Pih7Li4uaChkKSxzaG93RmxvYXRpbmdCdXR0b246bC5nZXQoKS5zaG93RmxvYXRpbmdCdXR0b259KSxiPSgpPT4oey4uLmgobSksc2hvd0Zsb2F0aW5nQnV0dG9uOmwuZ2V0KCkuc2hvd0Zsb2F0aW5nQnV0dG9ufSksdz0oKT0+e2Zvcihjb25zdCBlIG9mIGMpZSh2KCkpfSx5PWwuc3Vic2NyaWJlKHcpO2Z1bmN0aW9uIGsoKXtmLmxvYWRlZCYmKG09aShtLHApKX1yZXR1cm57Z2V0OnYsZ2V0RHJhZnQ6YixzdGF0dXM6ZyxwZXJzaXN0ZW50OmwucGVyc2lzdGVudCxzdWJzY3JpYmU6ZT0+KGMuYWRkKGUpLCgpPT5jLmRlbGV0ZShlKSksdXBkYXRlKGUpe2lmKGYuc2F2aW5nKXJldHVybiBiKCk7T2JqZWN0Lmhhc093bihlLCJzaG93RmxvYXRpbmdCdXR0b24iKSYmbC51cGRhdGUoe3Nob3dGbG9hdGluZ0J1dHRvbjplLnNob3dGbG9hdGluZ0J1dHRvbn0pO2NvbnN0IHQ9ey4uLmV9O3JldHVybiBkZWxldGUgdC5zaG93RmxvYXRpbmdCdXR0b24sT2JqZWN0LmtleXModCkubGVuZ3RoJiZmLmxvYWRlZCYmKG09cih7Li4ubSwuLi50fSkpLHcoKSxiKCl9LHNldENsdXN0ZXJzKGUpe3A9ZTt0cnl7aygpfWNhdGNoe2YuZXJyb3I9Iumbhue+pOaVsOmHj+i2hei/h+mFjee9ruWuuemHj++8jOacquiHquWKqOihpeWFqOinhOWImeOAgiJ9dygpfSxhc3luYyBsb2FkKCl7aWYoIWYubG9hZGluZyYmIWYuc2F2aW5nKXtmPXsuLi5mLGxvYWRpbmc6ITB9LHcoKTt0cnl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJCQUNLRU5EX1VOQVZBSUxBQkxFIik7IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9dShlLHMpLG49ZygpLmRpcnR5O2Q9dC5zZXR0aW5ncyxufHwobT1oKGQpKSxmPXsuLi5mLGxvYWRlZDohMCxyZXZpc2lvbjp0LnJldmlzaW9uLHVwZGF0ZWRBdDp0LnVwZGF0ZWRBdCxlcnJvcjoiIn0saygpfShhd2FpdCB0LmxvYWQoKSl9Y2F0Y2h7Zi5lcnJvcj0i5YWx5Lqr6YWN572u6K+75Y+W5aSx6LSl77yM6K+36YeN6K+V44CCIn1maW5hbGx5e2YubG9hZGluZz0hMSx3KCl9fX0sYXN5bmMgc2F2ZSgpe2lmKCFmLmxvYWRlZHx8IXR8fGYuc2F2aW5nKXJldHVybiExO2NvbnN0IGU9aChtKTtmPXsuLi5mLHNhdmluZzohMCxlcnJvcjoiIn0sdygpO3RyeXtsZXQgbjt0cnl7bj11KGF3YWl0IHQuc2F2ZShlKSxzKX1jYXRjaHtpZihuPXUoYXdhaXQgdC5sb2FkKCkscyksIW8obi5zZXR0aW5ncyxlKSl0aHJvdyBuZXcgRXJyb3IoIlNBVkVfTk9UX0NPTkZJUk1FRCIpfWlmKCFvKG4uc2V0dGluZ3MsZSkpdGhyb3cgbmV3IEVycm9yKCJTQVZFX05PVF9DT05GSVJNRUQiKTtyZXR1cm4gZD1uLnNldHRpbmdzLG09aChkKSxmPXsuLi5mLHJldmlzaW9uOm4ucmV2aXNpb24sdXBkYXRlZEF0Om4udXBkYXRlZEF0fSwhMH1jYXRjaHtyZXR1cm4gZi5lcnJvcj0i5pyq6IO956Gu6K6k5L+d5a2Y5oiQ5Yqf77yM5L+u5pS55bey5L+d55WZ77yM6K+36YeN6K+V44CCIiwhMX1maW5hbGx5e2Yuc2F2aW5nPSExLHcoKX19LGRpc2NhcmQoKXtmLnNhdmluZ3x8KG09aChkKSxmLmVycm9yPSIiLHcoKSl9LGRpc3Bvc2UoKXt5KCksbC5kaXNwb3NlKCksYy5jbGVhcigpfX19KHQscy5jb25maWd1cmF0aW9uQmFja2VuZD8uKCl8fG0odCxpKSxpKSxoPXtvcmdhbml6YXRpb246WyJDbG91ZFRvd2VyIOWunuS+iyIsIkNsb3VkVG93ZXIgaW5zdGFuY2UiXSxkYXRhY2VudGVyOlsi5pWw5o2u5Lit5b+DIiwiRGF0YWNlbnRlciJdLGNsdXN0ZXI6WyLpm4bnvqQiLCJDbHVzdGVyIl0saG9zdDpbIuS4u+acuiIsIkhvc3QiXSx2bTpbIuiZmuaLn+acuiIsIlZpcnR1YWwgbWFjaGluZSJdLHZtVm9sdW1lOlsi6Jma5ouf5Y23IiwiVmlydHVhbCB2b2x1bWUiXSxkaXNrOlsi56Gs55uYIiwiRGlzayJdLG5pYzpbIue9keWPoyIsIlBoeXNpY2FsIE5JQyJdLHZtR3JvdXA6WyLomZrmi5/mnLrnu4QiLCJWTSBncm91cCJdLHZtUGxhY2VtZW50R3JvdXA6WyLomZrmi5/mnLrmlL7nva7nu4QiLCJWTSBwbGFjZW1lbnQgZ3JvdXAiXSx2bU5ldHdvcms6WyLomZrmi5/nvZHnu5wiLCJWTSBuZXR3b3JrIl0sc3lzdGVtTmV0d29yazpbIuezu+e7n+e9kee7nCIsIlN5c3RlbSBuZXR3b3JrIl0sdm1TbmFwc2hvdDpbIuiZmuaLn+acuuW/q+eFpyIsIlZNIHNuYXBzaG90Il0sc25hcHNob3RQbGFuOlsi5b+r54Wn6K6h5YiSIiwiU25hcHNob3QgcGxhbiJdLHZkczpbIuWIhuW4g+W8j+iZmuaLn+S6pOaNouacuiIsIkRpc3RyaWJ1dGVkIHZpcnR1YWwgc3dpdGNoIl19O3JldHVybntpZDpuLHN0b3JlOmYsU2V0dGluZ3M6ZnVuY3Rpb24oe3ByZWZlcmVuY2VzOmUsbG9jYWxlOnR9KXtjb25zdCBuPShlLG4pPT4iZW4tVVMiPT09dD9uOmU7ZnVuY3Rpb24gbyhlLHQsbixyKXtyZXR1cm4gcCgiZGl2Iix7Y2xhc3NOYW1lOiJjODktc2V0dGluZyIsa2V5OmV9LHAoImRpdiIse2NsYXNzTmFtZToiYzg5LXNldHRpbmctcm93In0scCgibGFiZWwiLHtodG1sRm9yOmBydmNtLSR7ZX1gfSx0KSxwKCJpbnB1dCIse2lkOmBydmNtLSR7ZX1gLHR5cGU6ImNoZWNrYm94IixjaGVja2VkOm4sb25DaGFuZ2U6ZT0+cihlLnRhcmdldC5jaGVja2VkKX0pKSl9cmV0dXJuIHAoZC5GcmFnbWVudCxudWxsLHAoImgzIixudWxsLG4oIui1hOa6kOWPs+mUruiPnOWNlSIsIlJlc291cmNlIGNvbnRleHQgbWVudXMiKSkscCgicCIsbnVsbCxuKCLlj7PplK7otYTmupDmoJHoioLngrnjgIHliJfooajooYzmiJbor6bmg4XmoIfpopjvvIzmn6XnnIvlr7nosaHoj5zljZXjgIJTaGlmdCArIOWPs+mUruS/neeVmea1j+iniOWZqOiPnOWNleOAgiIsIlJpZ2h0LWNsaWNrIGEgcmVzb3VyY2UgdHJlZSBub2RlLCB0YWJsZSByb3cgb3IgZGV0YWlsIHRpdGxlLiBTaGlmdCArIHJpZ2h0LWNsaWNrIGtlZXBzIHRoZSBicm93c2VyIG1lbnUuIikpLHAoInAiLG51bGwsbigi6I+c5Y2V55So5LqO5a6a5L2N5a6Y5pa55pON5L2c5YWl5Y+j44CC5Y+C5pWw6YWN572u44CB5p2D6ZmQ5Yik5pat44CB56Gu6K6k5ZKM5Lu75Yqh5omn6KGM5Z2H55SxIENsb3VkVG93ZXIg5Y6f55Sf55WM6Z2i5a6M5oiQ44CCIiwiVGhlIG1lbnUgbG9jYXRlcyBvZmZpY2lhbCBhY3Rpb24gZW50cmllcy4gQ2xvdWRUb3dlcuKAmXMgbmF0aXZlIFVJIGhhbmRsZXMgY29uZmlndXJhdGlvbiwgcGVybWlzc2lvbnMsIGNvbmZpcm1hdGlvbiBhbmQgdGFzayBleGVjdXRpb24uIikpLG8oImVuYWJsZWQiLG4oIuWQr+eUqOi1hOa6kOWPs+mUruiPnOWNlSIsIkVuYWJsZSByZXNvdXJjZSBjb250ZXh0IG1lbnVzIiksZS5lbmFibGVkLGU9PmYudXBkYXRlKHtlbmFibGVkOmV9KSksbygibmF0aXZlIixuKCLmmL7npLrlr7nosaHmk43kvZwiLCJTaG93IG9iamVjdCBhY3Rpb25zIiksZS5uYXRpdmVBY3Rpb25zLGU9PmYudXBkYXRlKHtuYXRpdmVBY3Rpb25zOmV9KSkscCgiaDQiLG51bGwsbigi6LWE5rqQ57G75Z6LIiwiUmVzb3VyY2UgdHlwZXMiKSkscCgicCIsbnVsbCxuKCLljYfnuqfkv53nlZnlt7LmnInnmoTotYTmupDnsbvlnovpgInmi6nvvJvmlrDlop7nsbvlnovpnIDlnKjmraTli77pgInvvIzmiJbph43nva7kuLrpu5jorqTorr7nva7jgIIiLCJVcGdyYWRlcyBwcmVzZXJ2ZSBleGlzdGluZyByZXNvdXJjZSB0eXBlIHNlbGVjdGlvbnMuIFNlbGVjdCBuZXcgdHlwZXMgaGVyZSwgb3IgcmVzZXQgc2V0dGluZ3MgdG8gZGVmYXVsdHMuIikpLC4uLnIubWFwKHQ9Pm8odCxuKC4uLmhbdF0pLGUucmVzb3VyY2VUeXBlcy5pbmNsdWRlcyh0KSxuPT5mLnVwZGF0ZSh7cmVzb3VyY2VUeXBlczpyLmZpbHRlcihyPT5yPT09dD9uOmUucmVzb3VyY2VUeXBlcy5pbmNsdWRlcyhyKSl9KSkpLHAoInAiLG51bGwsbigi5Y+z6ZSu5Y+v55u05o6l6YCJ5oup5pON5L2c5YWl5Y+j77yM5b+F6KaB5pe25a6a5L2N5a6Y5pa56K+m5oOF77yM5peg6ZyA6aKE5YWI5omT5byA5L6n5qCP44CC5YW35L2T5pON5L2c5piv5ZCm5Y+v55So77yM5LulIENsb3VkVG93ZXIg5Y6f55Sf55WM6Z2i5Li65YeG44CCIiwiQ2hvb3NlIGFuIGVudHJ5IGRpcmVjdGx5IGZyb20gdGhlIGNvbnRleHQgbWVudS4gT2ZmaWNpYWwgZGV0YWlscyBhcmUgbG9jYXRlZCB3aGVuIG5lZWRlZCwgd2l0aG91dCBvcGVuaW5nIHRoZSBzaWRlYmFyIGZpcnN0LiBDbG91ZFRvd2Vy4oCZcyBuYXRpdmUgVUkgZGV0ZXJtaW5lcyB3aGljaCBvcGVyYXRpb25zIGFyZSBhdmFpbGFibGUuIikpKX0sYWN0aXZhdGUoZSl7Y29uc3Qgbj1lPT5mLnN0YXR1cygpLmxvYWRlZCYmZi5nZXQoKS5lbmFibGVkJiZmLmdldCgpLm5hdGl2ZUFjdGlvbnMmJmYuZ2V0KCkucmVzb3VyY2VUeXBlcy5pbmNsdWRlcyhlLnR5cGUpLGE9Y3x8ZnVuY3Rpb24oe3dpbjplLGhpc3Rvcnk6dCxnZXRMb2NhbGU6bj0oKT0+InpoLUNOIixpc0VuYWJsZWQ6cj0oKT0+ITAsb25FcnJvcjpvPSgpPT57fSx0aW1lb3V0TXM6aT01ZTN9PXt9KXtpZighZT8uZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJOQVRJVkVfVUlfV0lORE9XX1JFUVVJUkVEIik7Y29uc3QgYT1lLmRvY3VtZW50LHM9bmV3IFdlYWtNYXAse3NuYXBzaG90OmwscXVhcmFudGluZTpjLHRydXN0ZWQ6ZH09QWUoZSksdT0oKT0+e2NvbnN0IHQ9YihlKTtyZXR1cm4gdD9gJHt0LnR5cGV9OiR7dC5pZH1gOiIifTtsZXQgbT11KCkscD1udWxsLGY9bnVsbCxoPTAsdz0wLHk9bnVsbCxrPSExO2Z1bmN0aW9uIHgoZSx0PSExKXtjb25zdCByPXtzdGF0dXM6InVuc3VwcG9ydGVkIixyZWFzb246ZX07aWYodCl0cnl7byhaKGUsbigpKSksci5yZXBvcnRlZD0hMH1jYXRjaHt9cmV0dXJuIHJ9ZnVuY3Rpb24gRShlKXt0cnl7cmV0dXJuIWsmJiEwPT09cihlKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gQyh0KXtpZighdHx8dC5vd25lckRvY3VtZW50IT09YXx8IXQuaXNDb25uZWN0ZWR8fCFTKHQsZSkpcmV0dXJuITE7Zm9yKGxldCBuPXQ7bjtuPW4ucGFyZW50RWxlbWVudCl7Y29uc3QgdD1lLmdldENvbXB1dGVkU3R5bGUobik7aWYobi5oaWRkZW58fCJ0cnVlIj09PW4uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfHxuLmhhc0F0dHJpYnV0ZSgiaW5lcnQiKXx8Im5vbmUiPT09dC5kaXNwbGF5fHxbImhpZGRlbiIsImNvbGxhcHNlIl0uaW5jbHVkZXModC52aXNpYmlsaXR5KSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBWKGU9ITEpe2NvbnN0IHQ9dSgpO3QhPT1tJiYoZXx8YygpLG09dCl9Y29uc3QgUD0oe3BhbmU6ZSx0aXRsZTp0fSk9PmQoZSkmJmQodCksUj1iKGUpLE89bCh7aW5jbHVkZVJvd3M6ITF9KSxNPU8ucGFuZXMuZmlsdGVyKGU9PiJ2bSIhPT1SPy50eXBlfHxlLmdldEF0dHJpYnV0ZSgiZGF0YS1yZXNvdXJjZS1pZCIpIT09Ui5pZCk7Yyh7cGFuZXM6TSxjb250cm9sczpPLmNvbnRyb2xzLmZpbHRlcihlPT5NLmluY2x1ZGVzKGUuY2xvc2VzdCgiLmRyYXdlci1jb250ZW50LWlubmVyIikpKX0pO2NvbnN0IEw9ZT0+cCYmZyhwLnJlc291cmNlLGUpfHxmJiZnKGYucmVzb3VyY2UsZSkmJiFkKGYuc291cmNlKT8ic291cmNlLXJldGlyZWQiOm51bGw7ZnVuY3Rpb24gRCh0KXtyZXR1cm4ib3JnYW5pemF0aW9uIj09PXQudHlwZT8iY3VycmVudCI9PT10LmlkJiYvXiNcL292ZXJ2aWV3XC8/JC8udGVzdChlLmxvY2F0aW9uLmhhc2gpOmcodCxiKGUpKX1mdW5jdGlvbiBVKHQsbil7Y29uc3Qgcj10JiZ2KHQsZS5sb2NhdGlvbi5vcmlnaW4pO2lmKCFyfHwhZyhyLG4pKXJldHVybiBudWxsO2NvbnN0IG89bmV3IFVSTChyLmhyZWYpLFssaT0iIl09by5oYXNoLnNsaWNlKDEpLnNwbGl0KCI/IiksYT1uZXcgVVJMU2VhcmNoUGFyYW1zKGkpO2lmKFsuLi5hLmtleXMoKV0uc29tZShlPT4hWyJ2aWV3Iiwic2lkZWJhciJdLmluY2x1ZGVzKGUpKXx8Wy4uLm5ldyBTZXQoYS5rZXlzKCkpXS5zb21lKGU9PjEhPT1hLmdldEFsbChlKS5sZW5ndGgpKXJldHVybiBudWxsO3RyeXtpZihhLmhhcygidmlldyIpJiYhWyJkZXRhaWwiLCJvdmVydmlldyIsInZtcyIsImhvc3RzIiwiZGlza3MiLCJ2bVZvbHVtZXMiXS5pbmNsdWRlcyhKU09OLnBhcnNlKGEuZ2V0KCJ2aWV3IikpKSlyZXR1cm4gbnVsbDtpZihhLmhhcygic2lkZWJhciIpKXtjb25zdCBlPUpTT04ucGFyc2UoYS5nZXQoInNpZGViYXIiKSk7aWYoIWV8fE9iamVjdC5rZXlzKGUpLnNvbWUoZT0+IVsidHlwZSIsImlkIiwidmlldyJdLmluY2x1ZGVzKGUpKXx8ImRldGFpbCIhPT1lLnZpZXd8fCFnKGUsbikpcmV0dXJuIG51bGx9fWNhdGNoe3JldHVybiBudWxsfXJldHVybiBvLmhyZWZ9ZnVuY3Rpb24gcSh0LG4pe2lmKCFDKG4pfHxuLmNsb3Nlc3QoVmUpfHwhdC5lbGVtZW50Py5jb250YWlucyhuKSlyZXR1cm4gbnVsbDtpZighZyhBKG4sZSksdCkpcmV0dXJuIG51bGw7Y29uc3Qgcj1uLmNsb3Nlc3QoImFbaHJlZl0iKTtyZXR1cm4gciYmKHIuaGFzQXR0cmlidXRlKCJkb3dubG9hZCIpfHxyLnRhcmdldCYmIl9zZWxmIiE9PXIudGFyZ2V0fHwhVShyLmhyZWYsdCkpP251bGw6IkEiPT09bi50YWdOYW1lP24uaGFzQXR0cmlidXRlKCJkb3dubG9hZCIpfHxuLnRhcmdldCYmIl9zZWxmIiE9PW4udGFyZ2V0fHwhVShuLmhyZWYsdCk/bnVsbDpuOm4ubWF0Y2hlcygndGRbdW5pcXVlPSJuYW1lIl0sdGRbdW5pcXVlPSJwYXRoIl0sdGQuY2VsbF9uYW1lLHRkLmNlbGxfcGF0aCcpJiZuLmNsb3Nlc3QoInRyW2RhdGEtcm93LWtleV0iKT8uZ2V0QXR0cmlidXRlKCJkYXRhLXJvdy1rZXkiKT09PXQuaWR8fG4ubWF0Y2hlcygiLm5hbWUiKSYmbi5jbG9zZXN0KCIuaG9zdC1pbmZvLC5jbHVzdGVyLWluZm8sLmRhdGFjZW50ZXItaW5mbyIpP246bnVsbH1mdW5jdGlvbiBCKHQpe2lmKFYoKSwhKGYmJnQmJmcoZi5yZXNvdXJjZSx0KSYmRSh0KSYmZS5sb2NhdGlvbi5ocmVmPT09Zi5ocmVmJiZDKGYuc291cmNlKSkpcmV0dXJuIG51bGw7aWYoIWQoZi5zb3VyY2UpKXJldHVybiBudWxsO2NvbnN0IG49QShmLnNvdXJjZSxlKTtyZXR1cm4gbiYmZyhuLHQpJiZuLmludGVybmFsPT09Zi5pbnRlcm5hbCYmbi5zZWxlY3Q9PT1mLnNlbGVjdCYmbi5ocmVmPT09Zi5uYXZpZ2F0aW9uSHJlZj9uOm51bGx9ZnVuY3Rpb24gXyhlLHQpe3JldHVybiBCb29sZWFuKHQmJihEKGUpfHxxKHQsZi5zZWxlY3QpfHxVKGYubmF2aWdhdGlvbkhyZWYsZSkpKX1mdW5jdGlvbiB6KCl7aWYoeSl7Y29uc3QgZT15O3k9bnVsbCxlLmNhbmNlbGxlZD0hMCxlLndha2U/LigpLGUuZGlzcG9zZT8uKCl9fWZ1bmN0aW9uICQoKXt3KyssZj1udWxsLHooKX1mdW5jdGlvbiBHKHQpe2NvbnN0IG49eSxyPSJoYXNoY2hhbmdlIj09PXQ/LnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdC5vbGRVUkwmJiJzdHJpbmciPT10eXBlb2YgdC5uZXdVUkw7aWYobj8ucmVzZXRIcmVmJiZyJiZ0Lm9sZFVSTCE9PXQubmV3VVJMKXJldHVybiBuLnJlc2V0T2JzZXJ2ZWR8fHQub2xkVVJMIT09bi5yZXNldEVkZ2UuZnJvbXx8dC5uZXdVUkwhPT1uLnJlc2V0RWRnZS50b3x8ZS5sb2NhdGlvbi5ocmVmIT09bi5yZXNldEhyZWY/KGMoKSxWKCksdm9pZCAkKCkpOihWKCEwKSxuLnJlc2V0T2JzZXJ2ZWQ9ITAsdm9pZChuLnJlc2V0VGltZXI9ZS5zZXRUaW1lb3V0KCgpPT57SyhuKSYmZS5sb2NhdGlvbi5ocmVmPT09bi5yZXNldEhyZWYmJihuLnJlc2V0U2V0dGxlZD0hMCxuLndha2U/LigpKX0sMCkpKTtpZihyJiZ0Lm5ld1VSTCE9PWUubG9jYXRpb24uaHJlZil7Y29uc3Qgbj12KHQub2xkVVJMLGUubG9jYXRpb24ub3JpZ2luKSxyPXYodC5uZXdVUkwsZS5sb2NhdGlvbi5vcmlnaW4pLG89ZT0+ZT9gJHtlLnR5cGV9OiR7ZS5pZH1gOiIiO2lmKG8obikhPT1vKHIpKXJldHVybiBjKCksVigpLHZvaWQgJCgpfWlmKG4/LnJlc2V0SHJlZiE9PWUubG9jYXRpb24uaHJlZnx8cilpZihuPy5vd25lZEhyZWYhPT1lLmxvY2F0aW9uLmhyZWYpe2lmKG4/LmV4cGVjdGVkVmlldyYmIW4ub3duZWRIcmVmJiZIKG4pKXJldHVybiBWKCEwKSxuLm93bmVkSHJlZj1lLmxvY2F0aW9uLmhyZWYsdysrLHZvaWQoZj1udWxsKTtWKCksJCgpfWVsc2UgVighMCl9bGV0IGo9bnVsbDtpZigiZnVuY3Rpb24iPT10eXBlb2YgdD8ubGlzdGVuKXRyeXtjb25zdCBlPXQubGlzdGVuKEcpOyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoaj1lKX1jYXRjaHt9ZnVuY3Rpb24gRih0LG4pe2NvbnN0IHI9biYmcy5nZXQobik7cmV0dXJuIHImJiFyLnVzZWQmJmYmJnIuc2VyaWFsPT09Zi5zZXJpYWwmJnIuZ2VuZXJhdGlvbj09PXcmJnIuaHJlZj09PWUubG9jYXRpb24uaHJlZiYmZyhyLnJlc291cmNlLHQpP3I6bnVsbH1mdW5jdGlvbiBIKHQpe2lmKCFEKHQucmVzb3VyY2UpKXJldHVybiExO3RyeXtjb25zdCBuPW5ldyBVUkxTZWFyY2hQYXJhbXMoZS5sb2NhdGlvbi5oYXNoLnNwbGl0KCI/IilbMV0pO2lmKFsuLi5uLmtleXMoKV0uc29tZShlPT4hWyJ2aWV3Iiwic2lkZWJhciJdLmluY2x1ZGVzKGUpKXx8Wy4uLm5ldyBTZXQobi5rZXlzKCkpXS5zb21lKGU9PjEhPT1uLmdldEFsbChlKS5sZW5ndGgpKXJldHVybiExO2NvbnN0IHI9bi5oYXMoInNpZGViYXIiKT9KU09OLnBhcnNlKG4uZ2V0KCJzaWRlYmFyIikpOm51bGw7cmV0dXJuIShyJiZPYmplY3Qua2V5cyhyKS5zb21lKGU9PiFbInR5cGUiLCJ2aWV3IiwiaWQiXS5pbmNsdWRlcyhlKSl8fChyP3IudmlldzpKU09OLnBhcnNlKG4uZ2V0KCJ2aWV3Iil8fCciZGV0YWlsIicpKSE9PXQuZXhwZWN0ZWRWaWV3KX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gVygpe3JldHVyblsuLi5hLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kcmF3ZXItY29udGVudC1pbm5lciIpXS5maWx0ZXIoQykuZmxhdE1hcChlPT57Y29uc3QgdD1bLi4uZS5xdWVyeVNlbGVjdG9yQWxsKCIudGl0bGUtd3JhcHBlciAuaGVhZGVyLXRpdGxlIildLmZpbHRlcihDKTtyZXR1cm4gMT09PXQubGVuZ3RoP1t7cGFuZTplLHRpdGxlOnRbMF19XTpbXX0pfWZ1bmN0aW9uIEooKXtyZXR1cm5bLi4uYS5xdWVyeVNlbGVjdG9yQWxsKCcuYW50LW1vZGFsLFtyb2xlPSJkaWFsb2ciXSxbcm9sZT0iYWxlcnRkaWFsb2ciXSwuYW50LWRyb3Bkb3duJyldLnNvbWUoQyl9ZnVuY3Rpb24gSyhlKXtyZXR1cm4geT09PWUmJiFlLmNhbmNlbGxlZCYmIWUuc2lnbmFsPy5hYm9ydGVkJiZFKGUucmVzb3VyY2UpfWZ1bmN0aW9uIFEodCxuKXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvLGkscyxsPSExO2NvbnN0IGM9bj0+e2x8fChsPSEwLG8/LmRpc2Nvbm5lY3QoKSxlLmNsZWFyVGltZW91dChpKSxlLmNsZWFySW50ZXJ2YWwocyksdC5zaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixkKSx0Lndha2U9PT1kJiYodC53YWtlPW51bGwpLHIobikpfSxkPSgpPT57aWYoIUsodCl8fGUucGVyZm9ybWFuY2Uubm93KCk+PXQuZGVhZGxpbmUpcmV0dXJuIGMobnVsbCk7dHJ5e2NvbnN0IGU9bigpO2UmJmMoZSl9Y2F0Y2h7YyhudWxsKX19O3Qud2FrZT1kLG89bmV3IGUuTXV0YXRpb25PYnNlcnZlcihkKSxvLm9ic2VydmUoYS5ib2R5LHtzdWJ0cmVlOiEwLGNoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITB9KSxpPWUuc2V0VGltZW91dCgoKT0+YyhudWxsKSxNYXRoLm1heCgwLHQuZGVhZGxpbmUtZS5wZXJmb3JtYW5jZS5ub3coKSkpLHM9ZS5zZXRJbnRlcnZhbChkLDUwKSx0LnNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGQse29uY2U6ITB9KSxkKCl9KX1yZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixHKSxlLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixHKSx7a2luZDoibmF0aXZlLXVpIixoYW5kb2ZmQmVmb3JlT3BlbjohMCxiaW5kU291cmNlOmZ1bmN0aW9uKHQpe2lmKFYoKSwkKCksaCsrLHA9bnVsbCxrKXJldHVybiExO2NvbnN0IG49MT09PXQ/Lm5vZGVUeXBlP3Q6dD8uZWxlbWVudDtpZighQyhuKSlyZXR1cm4hMTtpZighZChuKSlyZXR1cm4gcD17cmVzb3VyY2U6VGUoQShuLGUpKX0sITE7Y29uc3Qgcj1BKG4sZSksbz1UZShyKTtyZXR1cm4hKCFvfHwhRShvKXx8dD8udHlwZSYmIWcodCxvKXx8KGY9e3NvdXJjZTpuLHJlc291cmNlOm8sc2VsZWN0OnIuc2VsZWN0LG5hdmlnYXRpb25IcmVmOnIuaHJlZixpbnRlcm5hbDpyLmludGVybmFsLGhyZWY6ZS5sb2NhdGlvbi5ocmVmLHNlcmlhbDpoLGdlbmVyYXRpb246d30sMCkpfSxyZWFkOmZ1bmN0aW9uKHQpe2NvbnN0IG49VGUodCkscj1CKG4pLG89T2JqZWN0LmZyZWV6ZSh7dHlwZTpuPy50eXBlfHx0Py50eXBlfHwiIixpZDpuPy5pZHx8IiIsbmFtZTpyPy5uYW1lfHwiIixzdGF0dXM6IlVOS05PV04ifSksaT1PYmplY3QuZnJlZXplKHtzbmFwc2hvdDpvLGNhcGFiaWxpdGllczpPYmplY3QuZnJlZXplKHt9KSxuYXRpdmU6T2JqZWN0LmZyZWV6ZSh7Y2FuTmF2aWdhdGU6Qm9vbGVhbihuJiZfKG4scikpLC4uLkwobik/e3JlYXNvbjpMKG4pfTp7fX0pfSksYT17c2VyaWFsOmY/LnNlcmlhbCxnZW5lcmF0aW9uOncsaHJlZjplLmxvY2F0aW9uLmhyZWYscmVzb3VyY2U6bix1c2VkOiExfTtyZXR1cm4gcy5zZXQoaSxhKSxzLnNldChvLGEpLGl9LHRyZWU6ZnVuY3Rpb24oe3Jlc291cmNlOmUsZGF0YTp0LGxvY2FsZTpyPW4oKX09e30pe2NvbnN0IG89VGUoZSk7cmV0dXJuIGZ1bmN0aW9uKHtyZXNvdXJjZTplLGRhdGE6dCxsb2NhbGU6bj0iemgtQ04ifT17fSl7aWYoInZtIiE9PWU/LnR5cGUpcmV0dXJuW107Y29uc3Qgcj0iZW4tVVMiPT09bj9uOiJ6aC1DTiIsbz0vXltBLVphLXowLTlfLV17MSwxMjh9JC8udGVzdChlLmlkfHwiIikmJiJ2bSI9PT10Py5zbmFwc2hvdD8udHlwZSYmdC5zbmFwc2hvdC5pZD09PWUuaWQmJiEwPT09dD8ubmF0aXZlPy5jYW5OYXZpZ2F0ZTtyZXR1cm4gZ2UubWFwKG49Pih7aWQ6bi5pZCxsYWJlbDpuLmxhYmVsc1tyXSxpdGVtczpuLml0ZW1zLmZpbHRlcihlPT5jZShsZShlLmlkKSkpLm1hcChuPT4oe2lkOm4uaWQsbGFiZWw6bi5sYWJlbHNbcl0sZ3VpZGU6IiIsZW5hYmxlZDpCb29sZWFuKG8pLG11dGF0aW9uOiExLG9wZXJhdGlvbjpudWxsLGRhbmdlcjoibm9uZSIscmVhc29uOm8/IiI6Wih0Py5uYXRpdmU/LnJlYXNvbnx8Im5hdmlnYXRpb24tdW5hdmFpbGFibGUiLHIpLHRhcmdldDp7dHlwZToidm0iLGlkOm8/ZS5pZDpudWxsfX0pKX0pKS5maWx0ZXIoZT0+ZS5pdGVtcy5sZW5ndGgpfSh7cmVzb3VyY2U6b3x8ZSxkYXRhOm8mJkYobyx0KSYmQihvKT90OntzbmFwc2hvdDp7dHlwZTpvPy50eXBlLGlkOm8/LmlkLHN0YXR1czoiVU5LTk9XTiJ9LGNhcGFiaWxpdGllczp7fSxuYXRpdmU6e2Nhbk5hdmlnYXRlOiExLHJlYXNvbjpMKG8pfHwibmF2aWdhdGlvbi11bmF2YWlsYWJsZSJ9fSxsb2NhbGU6cn0pfSxvcGVuOmFzeW5jIGZ1bmN0aW9uKHQ9e30se3NpZ25hbDpufT17fSl7Y29uc3Qgcj1UZSh0LnJlc291cmNlKSxvPXImJmZ1bmN0aW9uKGUsdCl7cmV0dXJuInZtIj09PXQ/LnR5cGUmJi9eW0EtWmEtejAtOV8tXXsxLDEyOH0kLy50ZXN0KHQuaWR8fCIiKSYmZ2UuZmxhdE1hcChlPT5lLml0ZW1zKS5maW5kKHQ9PnQuaWQ9PT1lKXx8bnVsbH0odC5hY3Rpb25JZCxyKSxzPXImJkYocix0LmRhdGEpP3QuZGF0YTp0LnNuYXBzaG90LHU9ciYmRihyLHMpLG09bGUodC5hY3Rpb25JZCk7aWYoIW98fCFtKXJldHVybiB4KCJhY3Rpb24tdW5rbm93biIpO2lmKCFFKHIpKXJldHVybiB4KCJwbHVnaW4tZGlzYWJsZWQiKTtpZihuPy5hYm9ydGVkKXJldHVybntzdGF0dXM6ImNhbmNlbGxlZCIscmVhc29uOiJjYW5jZWxsZWQifTtpZighdSlyZXR1cm4geChMKHIpfHwicHJvb2YtZXhwaXJlZCIpO2lmKCFCKHIpKXJldHVybiB4KEwocil8fCJzb3VyY2UtY2hhbmdlZCIpO3ooKTtjb25zdCBwPXtyZXNvdXJjZTpyLHByb29mOnUsc2lnbmFsOm4sY2FuY2VsbGVkOiExLGRlYWRsaW5lOmUucGVyZm9ybWFuY2Uubm93KCkrTWF0aC5taW4oOGUzLE1hdGgubWF4KDUwLGkpKSxleHBlY3RlZFZpZXc6bnVsbH07eT1wO2NvbnN0IGg9ZT0+e2UuaXNUcnVzdGVkJiZLKHApJiZ6KCl9LHY9WyJwb2ludGVyZG93biIsIm1vdXNlZG93biIsImtleWRvd24iLCJjb250ZXh0bWVudSJdO2Zvcihjb25zdCBlIG9mIHYpYS5hZGRFdmVudExpc3RlbmVyKGUsaCwhMCk7cC5kaXNwb3NlPSgpPT57ZS5jbGVhclRpbWVvdXQocC5yZXNldFRpbWVyKTtmb3IoY29uc3QgZSBvZiB2KWEucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGgsITApfTt0cnl7aWYoYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkseSE9PXB8fHAuY2FuY2VsbGVkfHxuPy5hYm9ydGVkfHwhRShyKXx8IUYocixzKSlyZXR1cm4geT09PXAmJih5PW51bGwpLHtzdGF0dXM6ImNhbmNlbGxlZCJ9O2xldCB0PUIocik7aWYoIXQpcmV0dXJuIHgoTChyKXx8InNvdXJjZS1jaGFuZ2VkIik7aWYoYS5xdWVyeVNlbGVjdG9yKE5lKXx8SigpKXJldHVybiB4KCJibG9ja2VkLWJ5LWRpYWxvZyIpO2lmKCFfKHIsdCkpcmV0dXJuIHgoIm5hdmlnYXRpb24tdW5hdmFpbGFibGUiKTt1LnVzZWQ9ITA7bGV0IG89VygpLGk9RChyKTtjb25zdCBoPWYuc291cmNlLHY9dC5uYW1lLGI9aC5jbG9zZXN0KCJ0cltkYXRhLXJvdy1rZXldIik7aWYoaSYmMT09PW8ubGVuZ3RoJiYhUChvWzBdKSl7Y29uc3Qgbj1mdW5jdGlvbih0KXtpZigidm0iIT09dC50eXBlKXJldHVybiBudWxsO2NvbnN0IG49bmV3IFVSTChlLmxvY2F0aW9uLmhyZWYpLFtyLG89IiJdPW4uaGFzaC5zbGljZSgxKS5zcGxpdCgiPyIpLGk9bmV3IFVSTFNlYXJjaFBhcmFtcyhvKTtpZihbLi4uaS5rZXlzKCldLnNvbWUoZT0+IVsidmlldyIsInNpZGViYXIiXS5pbmNsdWRlcyhlKSl8fFsuLi5uZXcgU2V0KGkua2V5cygpKV0uc29tZShlPT4xIT09aS5nZXRBbGwoZSkubGVuZ3RoKXx8IWkuaGFzKCJzaWRlYmFyIikpcmV0dXJuIG51bGw7dHJ5e2NvbnN0IGU9SlNPTi5wYXJzZShpLmdldCgic2lkZWJhciIpKSxvPWkuaGFzKCJ2aWV3Iik/SlNPTi5wYXJzZShpLmdldCgidmlldyIpKTpudWxsO3JldHVybiBlJiYhT2JqZWN0LmtleXMoZSkuc29tZShlPT4hWyJ0eXBlIiwiaWQiLCJ2aWV3Il0uaW5jbHVkZXMoZSkpJiYiZGV0YWlsIj09PWUudmlldyYmZyhlLHQpJiYoL15cL3Ztc1wvPyQvLnRlc3QocikmJihudWxsPT09b3x8InZtcyI9PT1vKXx8L15cLyg/OmNsdXN0ZXJzfGhvc3RzfGRhdGFjZW50ZXJzKVwvW0EtWmEtejAtOV8tXXsxLDEyOH1cLz8kLy50ZXN0KHIpJiYidm1zIj09PW8pPyhpLmRlbGV0ZSgic2lkZWJhciIpLG4uaGFzaD1yKyhpLnNpemU/YD8ke2l9YDoiIiksbi5ocmVmKTpudWxsfWNhdGNoe3JldHVybiBudWxsfX0ocikscz1xKHQsZi5zZWxlY3QpO2lmKG4mJnMmJiFvWzBdLnBhbmUuY29udGFpbnMoaCkpe2NvbnN0IGQ9Wy4uLmEucXVlcnlTZWxlY3RvckFsbCgiLmRyYXdlci1jb250ZW50LWlubmVyIildO2MobCh7aW5jbHVkZVJvd3M6ITF9KSkscC5yZXNldEVkZ2U9e2Zyb206ZS5sb2NhdGlvbi5ocmVmLHRvOm59LHAucmVzZXRIcmVmPW4scC5yZXNldE9ic2VydmVkPSExLHAucmVzZXRTZXR0bGVkPSExLGUubG9jYXRpb24uaGFzaD1uZXcgVVJMKG4pLmhhc2g7Y29uc3QgdT1hd2FpdCBRKHAsKCk9PnAucmVzZXRPYnNlcnZlZCYmcC5yZXNldFNldHRsZWQmJmUubG9jYXRpb24uaHJlZj09PW4mJiFKKCkmJmQuZXZlcnkoZT0+IWUuaXNDb25uZWN0ZWQpJiZnKEEoaCxlKSxyKSYmcShBKGgsZSkscykpO2lmKCFLKHApKXJldHVybntzdGF0dXM6ImNhbmNlbGxlZCJ9O2lmKCF1KXJldHVybiB5PW51bGwseCgic291cmNlLXJldGlyZWQiLCEwKTt0PUEoaCxlKSxvPVcoKSxpPSExLHAucmVzZXRIcmVmPW51bGx9fWlmKCFEKHIpKXtjb25zdCBuPXEodCxmLnNlbGVjdCksbz1VKGYubmF2aWdhdGlvbkhyZWYscik7aWYocC5leHBlY3RlZFZpZXc9ImRldGFpbCIsYyhsKHtpbmNsdWRlUm93czohMX0pKSxuKW4uY2xpY2soKTtlbHNle2lmKCFvKXJldHVybiB5PW51bGwseCgibmF2aWdhdGlvbi11bmF2YWlsYWJsZSIpO2UubG9jYXRpb24uaGFzaD1uZXcgVVJMKG8pLmhhc2h9fWNvbnN0IHc9YXdhaXQgUShwLCgpPT57aWYoIUQocil8fEooKSlyZXR1cm4gbnVsbDtjb25zdCBlPVcoKTtpZigxIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgdD1lWzBdLHtwYW5lOm4sdGl0bGU6YX09dDtpZighUCh0KSlyZXR1cm4gbnVsbDtpZihhLnRleHRDb250ZW50LnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpIT09dilyZXR1cm4gbnVsbDtjb25zdCBzPW4uZ2V0QXR0cmlidXRlKCJkYXRhLXJlc291cmNlLWlkIik7aWYocyYmcyE9PXIuaWQpcmV0dXJuIG51bGw7aWYoIWkmJiFzJiZvLnNvbWUoZT0+ZS5wYW5lPT09biYmZS50aXRsZT09PWEpKXJldHVybiBudWxsO2lmKGkmJiFuLmNvbnRhaW5zKGgpJiYhcyl7Y29uc3QgZT1oLmNsb3Nlc3QoInRyW2RhdGEtcm93LWtleV0iKTtpZighZXx8ZS5nZXRBdHRyaWJ1dGUoImRhdGEtcm93LWtleSIpIT09ci5pZHx8IWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUtcm93IikpcmV0dXJuIG51bGx9cmV0dXJuIHR9KTtpZighSyhwKSlyZXR1cm57c3RhdHVzOiJjYW5jZWxsZWQifTtpZighdylyZXR1cm4geT1udWxsLHgoSigpPyJibG9ja2VkLWJ5LWRpYWxvZyI6VygpLnNvbWUoZT0+IVAoZSkpPyJzb3VyY2UtcmV0aXJlZCI6VygpLmxlbmd0aD8idGFyZ2V0LW1pc21hdGNoIjoidGFyZ2V0LXRpbWVvdXQiLCEwKTtwLm93bmVkSHJlZj1lLmxvY2F0aW9uLmhyZWY7Y29uc3Qgaz0oKT0+e2NvbnN0IGU9VygpO3JldHVybiBEKHIpJiZDKHcucGFuZSkmJmQoaCkmJjE9PT1lLmxlbmd0aCYmUCh3KSYmZVswXS5wYW5lPT09dy5wYW5lJiZlWzBdLnRpdGxlPT09dy50aXRsZSYmKCFifHxiLmlzQ29ubmVjdGVkJiZiLmdldEF0dHJpYnV0ZSgiZGF0YS1yb3cta2V5Iik9PT1yLmlkKSYmdy50aXRsZS50ZXh0Q29udGVudC50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKT09PXYmJighdy5wYW5lLmhhc0F0dHJpYnV0ZSgiZGF0YS1yZXNvdXJjZS1pZCIpfHx3LnBhbmUuZ2V0QXR0cmlidXRlKCJkYXRhLXJlc291cmNlLWlkIik9PT1yLmlkKX0sVj0oKT0+SyhwKSYmaygpLFI9KHQsbixyLG8pPT57cC5wb3B1cENsZWFudXA9KCk9PntrKCkmJmQodCkmJmQobikmJkModCkmJm8oKSYmIXQuY2xvc2VzdCgnW2Rpc2FibGVkXSxbYXJpYS1kaXNhYmxlZD0idHJ1ZSJdLFtpbmVydF0sLmlzLWRpc2FibGVkLC5hbnQtYnRuLWxvYWRpbmcsLmFudC1kcm9wZG93bi1kaXNhYmxlZCwuYW50LWJ0bi1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZCwuYW50LWRyb3Bkb3duLW1lbnUtc3VibWVudS1kaXNhYmxlZCcpJiZlLmxvY2F0aW9uLmhyZWY9PT1yJiZDKG4pJiZ5ZShlKS5ldmVyeShlPT5lPT09bikmJiFbLi4uYS5xdWVyeVNlbGVjdG9yQWxsKCcuYW50LW1vZGFsLFtyb2xlPSJkaWFsb2ciXScpXS5zb21lKEMpJiYodC5jbGFzc0xpc3QuY29udGFpbnMoImFudC1kcm9wZG93bi1vcGVuIil8fCJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikpJiZ0LmNsaWNrKCl9fSxPPWNlKG0pO2lmKCJ0YWIiIT09Tz8ua2luZCYmIU8/LnRhYlZpZXcmJiJzbmFwc2hvdHMiIT09bSl7Y29uc3QgZT1bLi4udy5wYW5lLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZXRhaWwtdGFicyAudGFiLWl0ZW0iKV0uZmlsdGVyKEMpLmZpbHRlcihlPT5bIuivpuaDhSIsIkRldGFpbHMiXS5pbmNsdWRlcyhlLnRleHRDb250ZW50LnRyaW0oKSkpO2lmKDE9PT1lLmxlbmd0aCYmIWVbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKSYmInRydWUiIT09ZVswXS5nZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKSl7aWYoIVYoKSlyZXR1cm4geCgic291cmNlLWNoYW5nZWQiKTtpZihKKCkpcmV0dXJuIHgoImJsb2NrZWQtYnktZGlhbG9nIik7aWYoIWQoZVswXSkpcmV0dXJuIHgoInNvdXJjZS1yZXRpcmVkIiwhMCk7aWYoZVswXS5jbG9zZXN0KCdbZGlzYWJsZWRdLFthcmlhLWRpc2FibGVkPSJ0cnVlIl0sW2luZXJ0XSwuaXMtZGlzYWJsZWQsLmFudC1idG4tbG9hZGluZywuYW50LWRyb3Bkb3duLWRpc2FibGVkLC5hbnQtYnRuLWRpc2FibGVkLC5hbnQtZHJvcGRvd24tbWVudS1pdGVtLWRpc2FibGVkLC5hbnQtZHJvcGRvd24tbWVudS1zdWJtZW51LWRpc2FibGVkJykpcmV0dXJuIHgoImVudHJ5LWRpc2FibGVkIik7cC5leHBlY3RlZFZpZXc9ImRldGFpbCIscC5vd25lZEhyZWY9bnVsbCxlWzBdLmNsaWNrKCl9fWlmKCJyb3ctbWVudSI9PT1PPy5raW5kKXtjb25zdCBuPW5ldyBTZXQoeWUoZSkpO2lmKCFWKCkpcmV0dXJuIHgoInNvdXJjZS1jaGFuZ2VkIik7aWYoSigpKXJldHVybiB4KCJibG9ja2VkLWJ5LWRpYWxvZyIpO2NvbnN0IHI9ey4uLnQsZWxlbWVudDpifHxofSxvPUkocixlKTtpZighbylyZXR1cm4geChmdW5jdGlvbihlLHQpe2NvbnN0IG49Wy4uLnQuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgidHJbZGF0YS1yb3cta2V5XSIpXS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoImRhdGEtcm93LWtleSIpPT09ZT8uaWQmJlMobix0KSk7aWYoMSE9PW4ubGVuZ3RoKXJldHVybiJzb3VyY2UtY2hhbmdlZCI7Y29uc3Qgcj1uWzBdLG89TihyKTtpZighb3x8IWcoQShvLHQpLGUpKXJldHVybiJzb3VyY2UtY2hhbmdlZCI7Y29uc3QgaT1bLi4uci5xdWVyeVNlbGVjdG9yQWxsKCd0ZFt1bmlxdWU9Il9hY3Rpb25fIl0gLm1lbnUtYnV0dG9uLmFudC1kcm9wZG93bi10cmlnZ2VyJyldLmZpbHRlcihlPT5lLmNsb3Nlc3QoInRyIik9PT1yJiZUKGUsdCwhMCkpO3JldHVybiBpLmxlbmd0aD4xPyJ0cmlnZ2VyLWFtYmlndW91cyI6MSE9PWkubGVuZ3RofHxUKGlbMF0sdCk/InRyaWdnZXItbWlzc2luZyI6ImVudHJ5LWRpc2FibGVkIn0ocixlKSk7aWYoIWQobykpcmV0dXJuIHgoInNvdXJjZS1yZXRpcmVkIiwhMCk7by5jbGljaygpO2NvbnN0IGk9KCk9PkkocixlKT09PW8sYT1hd2FpdCBRKHAsKCk9Pntjb25zdCB0PVYoKSYmZChvKSYmaSgpJiZ4ZShlLG8sbik7cmV0dXJuIGQodCk/dDpudWxsfSk7cmV0dXJuIGEmJlIobyxhLGUubG9jYXRpb24uaHJlZixpKSxLKHApPyhhJiYocC5oYW5kZWRPZmY9ITApLHk9bnVsbCxhP3tzdGF0dXM6ImhhbmRlZC1vZmYiLHN1cmZhY2U6Im5hdGl2ZS1tZW51In06eCh5ZShlKS5zb21lKGU9PiFuLmhhcyhlKSk/InBvcHVwLXVucHJvdmVuIjoicG9wdXAtdGltZW91dCIpKTp7c3RhdHVzOiJjYW5jZWxsZWQifX1pZihPPy50YWJWaWV3JiYidGFiIiE9PU8ua2luZCl7Y29uc3QgdD0ic25hcHNob3QiPT09Ty50YWJWaWV3PyJzbmFwc2hvdHMiOk8udGFiVmlldyxuPW1lKHt3aW46ZSxwYW5lOncucGFuZSxpbnRlbnQ6dH0pO2lmKCFWKCkpcmV0dXJuIHgoInNvdXJjZS1jaGFuZ2VkIik7aWYoSigpKXJldHVybiB4KCJibG9ja2VkLWJ5LWRpYWxvZyIpO2lmKCFuKXJldHVybiB4KG1lKHt3aW46ZSxwYW5lOncucGFuZSxpbnRlbnQ6dCxkaWFnbm9zdGljOiEwfSkpO2lmKCFkKG4pKXJldHVybiB4KCJzb3VyY2UtcmV0aXJlZCIsITApO3AuZXhwZWN0ZWRWaWV3PU8udGFiVmlldyxwLm93bmVkSHJlZj1udWxsLG4uY2xpY2soKTtjb25zdCByPWF3YWl0IFEocCwoKT0+VigpJiZIKHApKTtpZighSyhwKSlyZXR1cm57c3RhdHVzOiJjYW5jZWxsZWQifTtpZighcilyZXR1cm4geCgic3VyZmFjZS10aW1lb3V0Iil9bGV0IE09bnVsbDtpZihbImVkaXQtaXRlbSIsIm1vcmUtaXRlbSJdLmluY2x1ZGVzKE8/LmtpbmQpKXtjb25zdCB0PWtlKGUsdy5wYW5lLE8ua2luZCksbj1uZXcgU2V0KHllKGUpKTtpZighVigpKXJldHVybiB4KCJzb3VyY2UtY2hhbmdlZCIpO2lmKEooKSlyZXR1cm4geCgiYmxvY2tlZC1ieS1kaWFsb2ciKTtpZighdClyZXR1cm4geChrZShlLHcucGFuZSxPLmtpbmQsITApKTtpZighZCh0KSlyZXR1cm4geCgic291cmNlLXJldGlyZWQiLCEwKTtjb25zdCByPWUubG9jYXRpb24uaHJlZjtpZih0LmNsaWNrKCksTT1hd2FpdCBRKHAsKCk9Pntjb25zdCByPVYoKSYmeGUoZSx0LG4pO3JldHVybiBkKHIpP3I6bnVsbH0pLE0mJlIodCxNLHIsKCk9PncucGFuZS5jb250YWlucyh0KSYma2UoZSx3LnBhbmUsTy5raW5kKT09PXQpLCFLKHApKXJldHVybntzdGF0dXM6ImNhbmNlbGxlZCJ9O2lmKCFNKXJldHVybiB4KHllKGUpLnNvbWUoZT0+IW4uaGFzKGUpKT8icG9wdXAtdW5wcm92ZW4iOiJwb3B1cC10aW1lb3V0Iil9Y29uc3Qgej0oKT0+TT9DKE0pJiZ5ZShlKS5ldmVyeShlPT5lPT09TSkmJiFbLi4uYS5xdWVyeVNlbGVjdG9yQWxsKCcuYW50LW1vZGFsLFtyb2xlPSJkaWFsb2ciXScpXS5zb21lKEMpOiFKKCksJD1hd2FpdCBRKHAsKCk9PlYoKSYmeigpJiZtZSh7d2luOmUscGFuZTp3LnBhbmUsaW50ZW50Om0sbWVudTpNfSkpO2lmKCFLKHApKXJldHVybntzdGF0dXM6ImNhbmNlbGxlZCJ9O2lmKCEoJCYmZCgkKSYmVigpJiZ6KCkmJm1lKHt3aW46ZSxwYW5lOncucGFuZSxpbnRlbnQ6bSxtZW51Ok19KT09PSQpKXJldHVybiB5PW51bGwseCgkJiYhZCgkKT8ic291cmNlLXJldGlyZWQiOmsoKT96KCk/bWUoe3dpbjplLHBhbmU6dy5wYW5lLGludGVudDptLG1lbnU6TSxkaWFnbm9zdGljOiEwfSk6ImJsb2NrZWQtYnktZGlhbG9nIjoic291cmNlLWNoYW5nZWQiLCEwKTtjb25zdCBHPW5ldyBTZXQoYS5xdWVyeVNlbGVjdG9yQWxsKCIuYW50LW1vZGFsIikpO3AuZXhwZWN0ZWRWaWV3PSJ0YWIiPT09Tz8ua2luZD9PLnRhYlZpZXc6InNuYXBzaG90cyI9PT1tPyJzbmFwc2hvdCI6bnVsbCxwLmV4cGVjdGVkVmlldyYmKHAub3duZWRIcmVmPW51bGwpO2NvbnN0IGo9ZS5sb2NhdGlvbi5ocmVmO2lmKCJjb25zb2xlIj09PW0mJmUubmF2aWdhdG9yLnVzZXJBY3RpdmF0aW9uJiYhZS5uYXZpZ2F0b3IudXNlckFjdGl2YXRpb24uaXNBY3RpdmUpcmV0dXJuIHgoImFjdGl2YXRpb24tZXhwaXJlZCIpO2lmKCQuY2xpY2soKSwiaGFuZG9mZiI9PT1PPy5yZXN1bHQpcmV0dXJuIHAuaGFuZGVkT2ZmPSEwLHk9bnVsbCx7c3RhdHVzOiJoYW5kZWQtb2ZmIixzdXJmYWNlOiJuYXRpdmUtYWN0aW9uIn07Y29uc3QgWj1hd2FpdCBRKHAsKCk9PiFWKCl8fCFwLmV4cGVjdGVkVmlldyYmZS5sb2NhdGlvbi5ocmVmIT09aj9udWxsOnAuZXhwZWN0ZWRWaWV3PyQuaXNDb25uZWN0ZWQmJigkLmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIil8fCJ0cnVlIj09PSQuZ2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIikpJiZIKHApPyQ6bnVsbDpmdW5jdGlvbih7d2luOmUsaW50ZW50OnQsYmVmb3JlOm59PXt9KXtjb25zdCByPWNlKHQpO2lmKCEoZT8uZG9jdW1lbnQmJnI/Lm1vZGFsVGl0bGVzJiYiZGlhbG9nIj09PXIucmVzdWx0JiZuIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gbnVsbDtjb25zdCBvPVsuLi5lLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5hbnQtbW9kYWwiKV0uZmlsdGVyKHQ9PiFuLmhhcyh0KSYmZGUodCxlKSk7aWYoMSE9PW8ubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IGk9b1swXSxhPVsuLi5pLnF1ZXJ5U2VsZWN0b3JBbGwoIi5hbnQtbW9kYWwtdGl0bGUiKV0uZmlsdGVyKHQ9PnQuY2xvc2VzdCgiLmFudC1tb2RhbCIpPT09aSYmZGUodCxlKSk7cmV0dXJuIDE9PT1hLmxlbmd0aCYmci5tb2RhbFRpdGxlcy5pbmNsdWRlcyhyZShhWzBdLnRleHRDb250ZW50KSk/aTpudWxsfSh7d2luOmUsaW50ZW50Om0sYmVmb3JlOkd9KSk7cmV0dXJuIEsocCk/KHk9bnVsbCxaP3tzdGF0dXM6Im9wZW5lZCIsc3VyZmFjZTpwLmV4cGVjdGVkVmlldz8idGFiIjoiZGlhbG9nIn06eCgic3VyZmFjZS10aW1lb3V0IiwhMCkpOntzdGF0dXM6ImNhbmNlbGxlZCJ9fWNhdGNoe3JldHVybiB5PW51bGwseCgidW5leHBlY3RlZCIsITApfWZpbmFsbHl7cC5oYW5kZWRPZmZ8fHAucG9wdXBDbGVhbnVwPy4oKSx5PT09cCYmKHk9bnVsbCkscC5kaXNwb3NlKCl9fSxjbG9zZTp6LHN0b3A6ZnVuY3Rpb24oKXtpZighayYmKGMoKSxrPSEwLCQoKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLEcpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLEcpLGopKXtjb25zdCBlPWo7aj1udWxsO3RyeXtlKCl9Y2F0Y2h7fX19fX0oe3dpbjp0LGhpc3Rvcnk6byxnZXRMb2NhbGU6bCxpc0VuYWJsZWQ6bixvbkVycm9yOmV9KSxzPW5lKHt3aW46dCxwcm92aWRlcjphLGdldExvY2FsZTpsLGlzRW5hYmxlZDpuLG9uRXJyb3I6ZX0pLGQ9X2Uoe3dpbjp0LGdldExvY2FsZTpsLGlzRW5hYmxlZDpuLG9uRXJyb3I6ZX0pLHU9TCh7d2luOnQsc3RvcmU6ZixoaXN0b3J5Om8sZ2V0TG9jYWxlOmwsb25FcnJvcjplLG9uUmVzb3VyY2VNZW51OihlLHQscik9PiEoZS5pbnRlcm5hbHx8IW4oZSkpJiYoInZtIj09PWUudHlwZT9zLm9wZW4oZSx0LHIpOmQub3BlbihlLHQscikpLG9uRGlzbWlzczooKT0+e3MuY2xvc2UoKSxkLmNsb3NlKCl9fSksbT0oKT0+e2NvbnN0IGU9Zi5nZXQoKTtyZXR1cm57bG9hZGVkOmYuc3RhdHVzKCkubG9hZGVkLHZlcnNpb246ZS52ZXJzaW9uLGVuYWJsZWQ6ZS5lbmFibGVkLG5hdGl2ZUFjdGlvbnM6ZS5uYXRpdmVBY3Rpb25zLHJlc291cmNlVHlwZXM6ci5maWx0ZXIodD0+ZS5yZXNvdXJjZVR5cGVzLmluY2x1ZGVzKHQpKX19O2xldCBwPW0oKTtjb25zdCBoPWYuc3Vic2NyaWJlKCgpPT57Y29uc3QgZT1tKCk7aS5lcXVhbChwLGUpfHwocD1lLGQuY2xvc2UoKSxzLmNsb3NlKCksYT8uY2xvc2U/LigpKX0pLHc9dC5zZXRJbnRlcnZhbCgoKT0+e2Yuc3RhdHVzKCkuZGlydHl8fCJ2aXNpYmxlIiE9PXQuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlfHxmLmxvYWQoKX0sMTVlMyk7cmV0dXJuKCk9Pnt0LmNsZWFySW50ZXJ2YWwodyksaCgpLHUoKSxzLnN0b3AoKSxkLnN0b3AoKSxhPy5zdG9wPy4oKX19fX0od2luZG93LlJpdmV0aW5QbHVnaW5zPXdpbmRvdy5SaXZldGluUGx1Z2luc3x8e30pWyJyaXZldGluLWNvbnRleHQtbWVudSJdPXR9KSgpOw=="},{"path":"LICENSE","sha256":"684bcbdab63a2fef35293d3a36b13e01a755dff694c18f0aa8367710c36e4d22","data":"TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAyNiBQbHVnaW5LaXQgY29udHJpYnV0b3JzCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo="}]}