1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-11-23 22:36:32 +02:00
Files
joplin/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js
renovate[bot] 0e135adbe2 Update dependency mermaid to v11.9.0 (#13708)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Laurent Cozic <laurent22@users.noreply.github.com>
2025-11-17 21:27:33 +00:00

1 line
3.4 MiB

module.exports = `InVzZSBzdHJpY3QiO3ZhciBfX2VzYnVpbGRfZXNtX21lcm1haWRfbm07KF9fZXNidWlsZF9lc21fbWVybWFpZF9ubXx8PXt9KS5tZXJtYWlkPSgoKT0+e3ZhciBhYmU9T2JqZWN0LmNyZWF0ZTt2YXIgX3k9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBzYmU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgb2JlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciBsYmU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGNiZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBvPSh0LGUpPT5feSh0LCJuYW1lIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KTt2YXIgTj0odCxlKT0+KCk9Pih0JiYoZT10KHQ9MCkpLGUpO3ZhciBQaT0odCxlKT0+KCk9PihlfHx0KChlPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxlKSxlLmV4cG9ydHMpLHVyPSh0LGUpPT57Zm9yKHZhciByIGluIGUpX3kodCxyLHtnZXQ6ZVtyXSxlbnVtZXJhYmxlOiEwfSl9LFY0PSh0LGUscixuKT0+e2lmKGUmJnR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIG9iZShlKSkhY2JlLmNhbGwodCxpKSYmaSE9PXImJl95KHQsaSx7Z2V0OigpPT5lW2ldLGVudW1lcmFibGU6IShuPXNiZShlLGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIHR9LENyPSh0LGUscik9PihWNCh0LGUsImRlZmF1bHQiKSxyJiZWNChyLGUsImRlZmF1bHQiKSksQWE9KHQsZSxyKT0+KHI9dCE9bnVsbD9hYmUobGJlKHQpKTp7fSxWNChlfHwhdHx8IXQuX19lc01vZHVsZT9feShyLCJkZWZhdWx0Iix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwfSk6cix0KSksdWJlPXQ9PlY0KF95KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0KTt2YXIgVTQ9UGkoKEhDLFdDKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2YgSEM9PSJvYmplY3QiJiZ0eXBlb2YgV0M8InUiP1dDLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0pKEhDLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PTFlMyxlPTZlNCxyPTM2ZTUsbj0ibWlsbGlzZWNvbmQiLGk9InNlY29uZCIsYT0ibWludXRlIixzPSJob3VyIixsPSJkYXkiLHU9IndlZWsiLGg9Im1vbnRoIixmPSJxdWFydGVyIixkPSJ5ZWFyIixwPSJkYXRlIixtPSJJbnZhbGlkIERhdGUiLGc9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8seT0vXFsoW15cXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLHY9e25hbWU6ImVuIix3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksbW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG9yZGluYWw6byhmdW5jdGlvbihrKXt2YXIgTD1bInRoIiwic3QiLCJuZCIsInJkIl0sQT1rJTEwMDtyZXR1cm4iWyIraysoTFsoQS0yMCklMTBdfHxMW0FdfHxMWzBdKSsiXSJ9LCJvcmRpbmFsIil9LHg9byhmdW5jdGlvbihrLEwsQSl7dmFyIEk9U3RyaW5nKGspO3JldHVybiFJfHxJLmxlbmd0aD49TD9rOiIiK0FycmF5KEwrMS1JLmxlbmd0aCkuam9pbihBKStrfSwibSIpLGI9e3M6eCx6Om8oZnVuY3Rpb24oayl7dmFyIEw9LWsudXRjT2Zmc2V0KCksQT1NYXRoLmFicyhMKSxJPU1hdGguZmxvb3IoQS82MCksTT1BJTYwO3JldHVybihMPD0wPyIrIjoiLSIpK3goSSwyLCIwIikrIjoiK3goTSwyLCIwIil9LCJ6IiksbTpvKGZ1bmN0aW9uIGsoTCxBKXtpZihMLmRhdGUoKTxBLmRhdGUoKSlyZXR1cm4tayhBLEwpO3ZhciBJPTEyKihBLnllYXIoKS1MLnllYXIoKSkrKEEubW9udGgoKS1MLm1vbnRoKCkpLE09TC5jbG9uZSgpLmFkZChJLGgpLFA9QS1NPDAsQj1MLmNsb25lKCkuYWRkKEkrKFA/LTE6MSksaCk7cmV0dXJuKygtKEkrKEEtTSkvKFA/TS1COkItTSkpfHwwKX0sInQiKSxhOm8oZnVuY3Rpb24oayl7cmV0dXJuIGs8MD9NYXRoLmNlaWwoayl8fDA6TWF0aC5mbG9vcihrKX0sImEiKSxwOm8oZnVuY3Rpb24oayl7cmV0dXJue006aCx5OmQsdzp1LGQ6bCxEOnAsaDpzLG06YSxzOmksbXM6bixROmZ9W2tdfHxTdHJpbmcoa3x8IiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCIiKX0sInAiKSx1Om8oZnVuY3Rpb24oayl7cmV0dXJuIGs9PT12b2lkIDB9LCJ1Iil9LFQ9ImVuIixTPXt9O1NbVF09djt2YXIgdz0iJGlzRGF5anNPYmplY3QiLEU9byhmdW5jdGlvbihrKXtyZXR1cm4gayBpbnN0YW5jZW9mIE98fCEoIWt8fCFrW3ddKX0sIlMiKSxfPW8oZnVuY3Rpb24gayhMLEEsSSl7dmFyIE07aWYoIUwpcmV0dXJuIFQ7aWYodHlwZW9mIEw9PSJzdHJpbmciKXt2YXIgUD1MLnRvTG93ZXJDYXNlKCk7U1tQXSYmKE09UCksQSYmKFNbUF09QSxNPVApO3ZhciBCPUwuc3BsaXQoIi0iKTtpZighTSYmQi5sZW5ndGg+MSlyZXR1cm4gayhCWzBdKX1lbHNle3ZhciBGPUwubmFtZTtTW0ZdPUwsTT1GfXJldHVybiFJJiZNJiYoVD1NKSxNfHwhSSYmVH0sInQiKSxDPW8oZnVuY3Rpb24oayxMKXtpZihFKGspKXJldHVybiBrLmNsb25lKCk7dmFyIEE9dHlwZW9mIEw9PSJvYmplY3QiP0w6e307cmV0dXJuIEEuZGF0ZT1rLEEuYXJncz1hcmd1bWVudHMsbmV3IE8oQSl9LCJPIiksRD1iO0QubD1fLEQuaT1FLEQudz1mdW5jdGlvbihrLEwpe3JldHVybiBDKGsse2xvY2FsZTpMLiRMLHV0YzpMLiR1LHg6TC4keCwkb2Zmc2V0OkwuJG9mZnNldH0pfTt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoQSl7dGhpcy4kTD1fKEEubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UoQSksdGhpcy4keD10aGlzLiR4fHxBLnh8fHt9LHRoaXNbd109ITB9byhrLCJNIik7dmFyIEw9ay5wcm90b3R5cGU7cmV0dXJuIEwucGFyc2U9ZnVuY3Rpb24oQSl7dGhpcy4kZD1mdW5jdGlvbihJKXt2YXIgTT1JLmRhdGUsUD1JLnV0YztpZihNPT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihELnUoTSkpcmV0dXJuIG5ldyBEYXRlO2lmKE0gaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShNKTtpZih0eXBlb2YgTT09InN0cmluZyImJiEvWiQvaS50ZXN0KE0pKXt2YXIgQj1NLm1hdGNoKGcpO2lmKEIpe3ZhciBGPUJbMl0tMXx8MCx6PShCWzddfHwiMCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBQP25ldyBEYXRlKERhdGUuVVRDKEJbMV0sRixCWzNdfHwxLEJbNF18fDAsQls1XXx8MCxCWzZdfHwwLHopKTpuZXcgRGF0ZShCWzFdLEYsQlszXXx8MSxCWzRdfHwwLEJbNV18fDAsQls2XXx8MCx6KX19cmV0dXJuIG5ldyBEYXRlKE0pfShBKSx0aGlzLmluaXQoKX0sTC5pbml0PWZ1bmN0aW9uKCl7dmFyIEE9dGhpcy4kZDt0aGlzLiR5PUEuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPUEuZ2V0TW9udGgoKSx0aGlzLiREPUEuZ2V0RGF0ZSgpLHRoaXMuJFc9QS5nZXREYXkoKSx0aGlzLiRIPUEuZ2V0SG91cnMoKSx0aGlzLiRtPUEuZ2V0TWludXRlcygpLHRoaXMuJHM9QS5nZXRTZWNvbmRzKCksdGhpcy4kbXM9QS5nZXRNaWxsaXNlY29uZHMoKX0sTC4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRH0sTC5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9TdHJpbmcoKSE9PW19LEwuaXNTYW1lPWZ1bmN0aW9uKEEsSSl7dmFyIE09QyhBKTtyZXR1cm4gdGhpcy5zdGFydE9mKEkpPD1NJiZNPD10aGlzLmVuZE9mKEkpfSxMLmlzQWZ0ZXI9ZnVuY3Rpb24oQSxJKXtyZXR1cm4gQyhBKTx0aGlzLnN0YXJ0T2YoSSl9LEwuaXNCZWZvcmU9ZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy5lbmRPZihJKTxDKEEpfSxMLiRnPWZ1bmN0aW9uKEEsSSxNKXtyZXR1cm4gRC51KEEpP3RoaXNbSV06dGhpcy5zZXQoTSxBKX0sTC51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sTC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxMLnN0YXJ0T2Y9ZnVuY3Rpb24oQSxJKXt2YXIgTT10aGlzLFA9ISFELnUoSSl8fEksQj1ELnAoQSksRj1vKGZ1bmN0aW9uKFosdWUpe3ZhciBRPUQudyhNLiR1P0RhdGUuVVRDKE0uJHksdWUsWik6bmV3IERhdGUoTS4keSx1ZSxaKSxNKTtyZXR1cm4gUD9ROlEuZW5kT2YobCl9LCJsIiksej1vKGZ1bmN0aW9uKFosdWUpe3JldHVybiBELncoTS50b0RhdGUoKVtaXS5hcHBseShNLnRvRGF0ZSgicyIpLChQP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UodWUpKSxNKX0sIiQiKSwkPXRoaXMuJFcsVT10aGlzLiRNLEs9dGhpcy4kRCxlZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKEIpe2Nhc2UgZDpyZXR1cm4gUD9GKDEsMCk6RigzMSwxMSk7Y2FzZSBoOnJldHVybiBQP0YoMSxVKTpGKDAsVSsxKTtjYXNlIHU6dmFyIFk9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLGNlPSgkPFk/JCs3OiQpLVk7cmV0dXJuIEYoUD9LLWNlOksrKDYtY2UpLFUpO2Nhc2UgbDpjYXNlIHA6cmV0dXJuIHooZWUrIkhvdXJzIiwwKTtjYXNlIHM6cmV0dXJuIHooZWUrIk1pbnV0ZXMiLDEpO2Nhc2UgYTpyZXR1cm4geihlZSsiU2Vjb25kcyIsMik7Y2FzZSBpOnJldHVybiB6KGVlKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LEwuZW5kT2Y9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuc3RhcnRPZihBLCExKX0sTC4kc2V0PWZ1bmN0aW9uKEEsSSl7dmFyIE0sUD1ELnAoQSksQj0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksRj0oTT17fSxNW2xdPUIrIkRhdGUiLE1bcF09QisiRGF0ZSIsTVtoXT1CKyJNb250aCIsTVtkXT1CKyJGdWxsWWVhciIsTVtzXT1CKyJIb3VycyIsTVthXT1CKyJNaW51dGVzIixNW2ldPUIrIlNlY29uZHMiLE1bbl09QisiTWlsbGlzZWNvbmRzIixNKVtQXSx6PVA9PT1sP3RoaXMuJEQrKEktdGhpcy4kVyk6STtpZihQPT09aHx8UD09PWQpe3ZhciAkPXRoaXMuY2xvbmUoKS5zZXQocCwxKTskLiRkW0ZdKHopLCQuaW5pdCgpLHRoaXMuJGQ9JC5zZXQocCxNYXRoLm1pbih0aGlzLiRELCQuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgRiYmdGhpcy4kZFtGXSh6KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sTC5zZXQ9ZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoQSxJKX0sTC5nZXQ9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXNbRC5wKEEpXSgpfSxMLmFkZD1mdW5jdGlvbihBLEkpe3ZhciBNLFA9dGhpcztBPU51bWJlcihBKTt2YXIgQj1ELnAoSSksRj1vKGZ1bmN0aW9uKFUpe3ZhciBLPUMoUCk7cmV0dXJuIEQudyhLLmRhdGUoSy5kYXRlKCkrTWF0aC5yb3VuZChVKkEpKSxQKX0sInkiKTtpZihCPT09aClyZXR1cm4gdGhpcy5zZXQoaCx0aGlzLiRNK0EpO2lmKEI9PT1kKXJldHVybiB0aGlzLnNldChkLHRoaXMuJHkrQSk7aWYoQj09PWwpcmV0dXJuIEYoMSk7aWYoQj09PXUpcmV0dXJuIEYoNyk7dmFyIHo9KE09e30sTVthXT1lLE1bc109cixNW2ldPXQsTSlbQl18fDEsJD10aGlzLiRkLmdldFRpbWUoKStBKno7cmV0dXJuIEQudygkLHRoaXMpfSxMLnN1YnRyYWN0PWZ1bmN0aW9uKEEsSSl7cmV0dXJuIHRoaXMuYWRkKC0xKkEsSSl9LEwuZm9ybWF0PWZ1bmN0aW9uKEEpe3ZhciBJPXRoaXMsTT10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE0uaW52YWxpZERhdGV8fG07dmFyIFA9QXx8IllZWVktTU0tRERUSEg6bW06c3NaIixCPUQueih0aGlzKSxGPXRoaXMuJEgsej10aGlzLiRtLCQ9dGhpcy4kTSxVPU0ud2Vla2RheXMsSz1NLm1vbnRocyxlZT1NLm1lcmlkaWVtLFk9byhmdW5jdGlvbih1ZSxRLGosbmUpe3JldHVybiB1ZSYmKHVlW1FdfHx1ZShJLFApKXx8altRXS5zbGljZSgwLG5lKX0sImgiKSxjZT1vKGZ1bmN0aW9uKHVlKXtyZXR1cm4gRC5zKEYlMTJ8fDEyLHVlLCIwIil9LCJkIiksWj1lZXx8ZnVuY3Rpb24odWUsUSxqKXt2YXIgbmU9dWU8MTI/IkFNIjoiUE0iO3JldHVybiBqP25lLnRvTG93ZXJDYXNlKCk6bmV9O3JldHVybiBQLnJlcGxhY2UoeSxmdW5jdGlvbih1ZSxRKXtyZXR1cm4gUXx8ZnVuY3Rpb24oail7c3dpdGNoKGope2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoSS4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIEQucyhJLiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiAkKzE7Y2FzZSJNTSI6cmV0dXJuIEQucygkKzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gWShNLm1vbnRoc1Nob3J0LCQsSywzKTtjYXNlIk1NTU0iOnJldHVybiBZKEssJCk7Y2FzZSJEIjpyZXR1cm4gSS4kRDtjYXNlIkREIjpyZXR1cm4gRC5zKEkuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyhJLiRXKTtjYXNlImRkIjpyZXR1cm4gWShNLndlZWtkYXlzTWluLEkuJFcsVSwyKTtjYXNlImRkZCI6cmV0dXJuIFkoTS53ZWVrZGF5c1Nob3J0LEkuJFcsVSwzKTtjYXNlImRkZGQiOnJldHVybiBVW0kuJFddO2Nhc2UiSCI6cmV0dXJuIFN0cmluZyhGKTtjYXNlIkhIIjpyZXR1cm4gRC5zKEYsMiwiMCIpO2Nhc2UiaCI6cmV0dXJuIGNlKDEpO2Nhc2UiaGgiOnJldHVybiBjZSgyKTtjYXNlImEiOnJldHVybiBaKEYseiwhMCk7Y2FzZSJBIjpyZXR1cm4gWihGLHosITEpO2Nhc2UibSI6cmV0dXJuIFN0cmluZyh6KTtjYXNlIm1tIjpyZXR1cm4gRC5zKHosMiwiMCIpO2Nhc2UicyI6cmV0dXJuIFN0cmluZyhJLiRzKTtjYXNlInNzIjpyZXR1cm4gRC5zKEkuJHMsMiwiMCIpO2Nhc2UiU1NTIjpyZXR1cm4gRC5zKEkuJG1zLDMsIjAiKTtjYXNlIloiOnJldHVybiBCfXJldHVybiBudWxsfSh1ZSl8fEIucmVwbGFjZSgiOiIsIiIpfSl9LEwudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LEwuZGlmZj1mdW5jdGlvbihBLEksTSl7dmFyIFAsQj10aGlzLEY9RC5wKEkpLHo9QyhBKSwkPSh6LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsVT10aGlzLXosSz1vKGZ1bmN0aW9uKCl7cmV0dXJuIEQubShCLHopfSwiRCIpO3N3aXRjaChGKXtjYXNlIGQ6UD1LKCkvMTI7YnJlYWs7Y2FzZSBoOlA9SygpO2JyZWFrO2Nhc2UgZjpQPUsoKS8zO2JyZWFrO2Nhc2UgdTpQPShVLSQpLzYwNDhlNTticmVhaztjYXNlIGw6UD0oVS0kKS84NjRlNTticmVhaztjYXNlIHM6UD1VL3I7YnJlYWs7Y2FzZSBhOlA9VS9lO2JyZWFrO2Nhc2UgaTpQPVUvdDticmVhaztkZWZhdWx0OlA9VX1yZXR1cm4gTT9QOkQuYShQKX0sTC5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGgpLiREfSxMLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gU1t0aGlzLiRMXX0sTC5sb2NhbGU9ZnVuY3Rpb24oQSxJKXtpZighQSlyZXR1cm4gdGhpcy4kTDt2YXIgTT10aGlzLmNsb25lKCksUD1fKEEsSSwhMCk7cmV0dXJuIFAmJihNLiRMPVApLE19LEwuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gRC53KHRoaXMuJGQsdGhpcyl9LEwudG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sTC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LEwudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxMLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sa30oKSxSPU8ucHJvdG90eXBlO3JldHVybiBDLnByb3RvdHlwZT1SLFtbIiRtcyIsbl0sWyIkcyIsaV0sWyIkbSIsYV0sWyIkSCIsc10sWyIkVyIsbF0sWyIkTSIsaF0sWyIkeSIsZF0sWyIkRCIscF1dLmZvckVhY2goZnVuY3Rpb24oayl7UltrWzFdXT1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy4kZyhMLGtbMF0sa1sxXSl9fSksQy5leHRlbmQ9ZnVuY3Rpb24oayxMKXtyZXR1cm4gay4kaXx8KGsoTCxPLEMpLGsuJGk9ITApLEN9LEMubG9jYWxlPV8sQy5pc0RheWpzPUUsQy51bml4PWZ1bmN0aW9uKGspe3JldHVybiBDKDFlMyprKX0sQy5lbj1TW1RdLEMuTHM9UyxDLnA9e30sQ30pfSk7dmFyIGYkLGl1LFgsRHksa28seXQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmJD1BYShVNCgpLDEpLGl1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFg9e3RyYWNlOm8oKC4uLnQpPT57fSwidHJhY2UiKSxkZWJ1ZzpvKCguLi50KT0+e30sImRlYnVnIiksaW5mbzpvKCguLi50KT0+e30sImluZm8iKSx3YXJuOm8oKC4uLnQpPT57fSwid2FybiIpLGVycm9yOm8oKC4uLnQpPT57fSwiZXJyb3IiKSxmYXRhbDpvKCguLi50KT0+e30sImZhdGFsIil9LER5PW8oZnVuY3Rpb24odD0iZmF0YWwiKXtsZXQgZT1pdS5mYXRhbDt0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpaW4gaXUmJihlPWl1W3RdKTp0eXBlb2YgdD09Im51bWJlciImJihlPXQpLFgudHJhY2U9KCk9Pnt9LFguZGVidWc9KCk9Pnt9LFguaW5mbz0oKT0+e30sWC53YXJuPSgpPT57fSxYLmVycm9yPSgpPT57fSxYLmZhdGFsPSgpPT57fSxlPD1pdS5mYXRhbCYmKFguZmF0YWw9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxrbygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszNW0iLGtvKCJGQVRBTCIpKSksZTw9aXUuZXJyb3ImJihYLmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsa28oIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzFtIixrbygiRVJST1IiKSkpLGU8PWl1Lndhcm4mJihYLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsa28oIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLGtvKCJXQVJOIikpKSxlPD1pdS5pbmZvJiYoWC5pbmZvPWNvbnNvbGUuaW5mbz9jb25zb2xlLmluZm8uYmluZChjb25zb2xlLGtvKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzRtIixrbygiSU5GTyIpKSksZTw9aXUuZGVidWcmJihYLmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsa28oIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMybSIsa28oIkRFQlVHIikpKSxlPD1pdS50cmFjZSYmKFgudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxrbygiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixrbygiVFJBQ0UiKSkpfSwic2V0TG9nTGV2ZWwiKSxrbz1vKHQ9PmAlYyR7KDAsZiQuZGVmYXVsdCkoKS5mb3JtYXQoInNzLlNTUyIpfSA6ICR7dH0gOiBgLCJmb3JtYXQiKX0pO3ZhciBoYmUsdTAscUMsZCQsSDQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoYmU9T2JqZWN0LmZyZWV6ZSh7bGVmdDowLHRvcDowLHdpZHRoOjE2LGhlaWdodDoxNn0pLHUwPU9iamVjdC5mcmVlemUoe3JvdGF0ZTowLHZGbGlwOiExLGhGbGlwOiExfSkscUM9T2JqZWN0LmZyZWV6ZSh7Li4uaGJlLC4uLnUwfSksZCQ9T2JqZWN0LmZyZWV6ZSh7Li4ucUMsYm9keToiIixoaWRkZW46ITF9KX0pO3ZhciBmYmUscCQsbSQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtINCgpO2ZiZT1PYmplY3QuZnJlZXplKHt3aWR0aDpudWxsLGhlaWdodDpudWxsfSkscCQ9T2JqZWN0LmZyZWV6ZSh7Li4uZmJlLC4uLnUwfSl9KTt2YXIgWUMsVzQsZyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZQz1vKCh0LGUscixuPSIiKT0+e2xldCBpPXQuc3BsaXQoIjoiKTtpZih0LnNsaWNlKDAsMSk9PT0iQCIpe2lmKGkubGVuZ3RoPDJ8fGkubGVuZ3RoPjMpcmV0dXJuIG51bGw7bj1pLnNoaWZ0KCkuc2xpY2UoMSl9aWYoaS5sZW5ndGg+M3x8IWkubGVuZ3RoKXJldHVybiBudWxsO2lmKGkubGVuZ3RoPjEpe2xldCBsPWkucG9wKCksdT1pLnBvcCgpLGg9e3Byb3ZpZGVyOmkubGVuZ3RoPjA/aVswXTpuLHByZWZpeDp1LG5hbWU6bH07cmV0dXJuIGUmJiFXNChoKT9udWxsOmh9bGV0IGE9aVswXSxzPWEuc3BsaXQoIi0iKTtpZihzLmxlbmd0aD4xKXtsZXQgbD17cHJvdmlkZXI6bixwcmVmaXg6cy5zaGlmdCgpLG5hbWU6cy5qb2luKCItIil9O3JldHVybiBlJiYhVzQobCk/bnVsbDpsfWlmKHImJm49PT0iIil7bGV0IGw9e3Byb3ZpZGVyOm4scHJlZml4OiIiLG5hbWU6YX07cmV0dXJuIGUmJiFXNChsLHIpP251bGw6bH1yZXR1cm4gbnVsbH0sInN0cmluZ1RvSWNvbiIpLFc0PW8oKHQsZSk9PnQ/ISEoKGUmJnQucHJlZml4PT09IiJ8fHQucHJlZml4KSYmdC5uYW1lKTohMSwidmFsaWRhdGVJY29uTmFtZSIpfSk7ZnVuY3Rpb24geSQodCxlKXtsZXQgcj17fTshdC5oRmxpcCE9IWUuaEZsaXAmJihyLmhGbGlwPSEwKSwhdC52RmxpcCE9IWUudkZsaXAmJihyLnZGbGlwPSEwKTtsZXQgbj0oKHQucm90YXRlfHwwKSsoZS5yb3RhdGV8fDApKSU0O3JldHVybiBuJiYoci5yb3RhdGU9bikscn12YXIgdiQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHkkLCJtZXJnZUljb25UcmFuc2Zvcm1hdGlvbnMiKX0pO2Z1bmN0aW9uIFhDKHQsZSl7bGV0IHI9eSQodCxlKTtmb3IobGV0IG4gaW4gZCQpbiBpbiB1MD9uIGluIHQmJiEobiBpbiByKSYmKHJbbl09dTBbbl0pOm4gaW4gZT9yW25dPWVbbl06biBpbiB0JiYocltuXT10W25dKTtyZXR1cm4gcn12YXIgeCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtINCgpO3YkKCk7byhYQywibWVyZ2VJY29uRGF0YSIpfSk7ZnVuY3Rpb24gYiQodCxlKXtsZXQgcj10Lmljb25zLG49dC5hbGlhc2VzfHxPYmplY3QuY3JlYXRlKG51bGwpLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBhKHMpe2lmKHJbc10pcmV0dXJuIGlbc109W107aWYoIShzIGluIGkpKXtpW3NdPW51bGw7bGV0IGw9bltzXSYmbltzXS5wYXJlbnQsdT1sJiZhKGwpO3UmJihpW3NdPVtsXS5jb25jYXQodSkpfXJldHVybiBpW3NdfXJldHVybiBvKGEsInJlc29sdmUiKSwoZXx8T2JqZWN0LmtleXMocikuY29uY2F0KE9iamVjdC5rZXlzKG4pKSkuZm9yRWFjaChhKSxpfXZhciBUJD1OKCgpPT57InVzZSBzdHJpY3QiO28oYiQsImdldEljb25zVHJlZSIpfSk7ZnVuY3Rpb24gdyQodCxlLHIpe2xldCBuPXQuaWNvbnMsaT10LmFsaWFzZXN8fE9iamVjdC5jcmVhdGUobnVsbCksYT17fTtmdW5jdGlvbiBzKGwpe2E9WEMobltsXXx8aVtsXSxhKX1yZXR1cm4gbyhzLCJwYXJzZSIpLHMoZSksci5mb3JFYWNoKHMpLFhDKHQsYSl9ZnVuY3Rpb24gakModCxlKXtpZih0Lmljb25zW2VdKXJldHVybiB3JCh0LGUsW10pO2xldCByPWIkKHQsW2VdKVtlXTtyZXR1cm4gcj93JCh0LGUscik6bnVsbH12YXIgayQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4JCgpO1QkKCk7byh3JCwiaW50ZXJuYWxHZXRJY29uRGF0YSIpO28oakMsImdldEljb25EYXRhIil9KTtmdW5jdGlvbiBLQyh0LGUscil7aWYoZT09PTEpcmV0dXJuIHQ7aWYocj1yfHwxMDAsdHlwZW9mIHQ9PSJudW1iZXIiKXJldHVybiBNYXRoLmNlaWwodCplKnIpL3I7aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0O2xldCBuPXQuc3BsaXQoZGJlKTtpZihuPT09bnVsbHx8IW4ubGVuZ3RoKXJldHVybiB0O2xldCBpPVtdLGE9bi5zaGlmdCgpLHM9cGJlLnRlc3QoYSk7Zm9yKDs7KXtpZihzKXtsZXQgbD1wYXJzZUZsb2F0KGEpO2lzTmFOKGwpP2kucHVzaChhKTppLnB1c2goTWF0aC5jZWlsKGwqZSpyKS9yKX1lbHNlIGkucHVzaChhKTtpZihhPW4uc2hpZnQoKSxhPT09dm9pZCAwKXJldHVybiBpLmpvaW4oIiIpO3M9IXN9fXZhciBkYmUscGJlLEUkPU4oKCk9PnsidXNlIHN0cmljdCI7ZGJlPS8oLT9bMC05Ll0qWzAtOV0rWzAtOS5dKikvZyxwYmU9L14tP1swLTkuXSpbMC05XStbMC05Ll0qJC9nO28oS0MsImNhbGN1bGF0ZVNpemUiKX0pO2Z1bmN0aW9uIG1iZSh0LGU9ImRlZnMiKXtsZXQgcj0iIixuPXQuaW5kZXhPZigiPCIrZSk7Zm9yKDtuPj0wOyl7bGV0IGk9dC5pbmRleE9mKCI+IixuKSxhPXQuaW5kZXhPZigiPC8iK2UpO2lmKGk9PT0tMXx8YT09PS0xKWJyZWFrO2xldCBzPXQuaW5kZXhPZigiPiIsYSk7aWYocz09PS0xKWJyZWFrO3IrPXQuc2xpY2UoaSsxLGEpLnRyaW0oKSx0PXQuc2xpY2UoMCxuKS50cmltKCkrdC5zbGljZShzKzEpfXJldHVybntkZWZzOnIsY29udGVudDp0fX1mdW5jdGlvbiBnYmUodCxlKXtyZXR1cm4gdD8iPGRlZnM+Iit0KyI8L2RlZnM+IitlOmV9ZnVuY3Rpb24gUyQodCxlLHIpe2xldCBuPW1iZSh0KTtyZXR1cm4gZ2JlKG4uZGVmcyxlK24uY29udGVudCtyKX12YXIgQyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG1iZSwic3BsaXRTVkdEZWZzIik7byhnYmUsIm1lcmdlRGVmc0FuZENvbnRlbnQiKTtvKFMkLCJ3cmFwU1ZHQ29udGVudCIpfSk7ZnVuY3Rpb24gUUModCxlKXtsZXQgcj17Li4ucUMsLi4udH0sbj17Li4ucCQsLi4uZX0saT17bGVmdDpyLmxlZnQsdG9wOnIudG9wLHdpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fSxhPXIuYm9keTtbcixuXS5mb3JFYWNoKHk9PntsZXQgdj1bXSx4PXkuaEZsaXAsYj15LnZGbGlwLFQ9eS5yb3RhdGU7eD9iP1QrPTI6KHYucHVzaCgidHJhbnNsYXRlKCIrKGkud2lkdGgraS5sZWZ0KS50b1N0cmluZygpKyIgIisoMC1pLnRvcCkudG9TdHJpbmcoKSsiKSIpLHYucHVzaCgic2NhbGUoLTEgMSkiKSxpLnRvcD1pLmxlZnQ9MCk6YiYmKHYucHVzaCgidHJhbnNsYXRlKCIrKDAtaS5sZWZ0KS50b1N0cmluZygpKyIgIisoaS5oZWlnaHQraS50b3ApLnRvU3RyaW5nKCkrIikiKSx2LnB1c2goInNjYWxlKDEgLTEpIiksaS50b3A9aS5sZWZ0PTApO2xldCBTO3N3aXRjaChUPDAmJihULT1NYXRoLmZsb29yKFQvNCkqNCksVD1UJTQsVCl7Y2FzZSAxOlM9aS5oZWlnaHQvMitpLnRvcCx2LnVuc2hpZnQoInJvdGF0ZSg5MCAiK1MudG9TdHJpbmcoKSsiICIrUy50b1N0cmluZygpKyIpIik7YnJlYWs7Y2FzZSAyOnYudW5zaGlmdCgicm90YXRlKDE4MCAiKyhpLndpZHRoLzIraS5sZWZ0KS50b1N0cmluZygpKyIgIisoaS5oZWlnaHQvMitpLnRvcCkudG9TdHJpbmcoKSsiKSIpO2JyZWFrO2Nhc2UgMzpTPWkud2lkdGgvMitpLmxlZnQsdi51bnNoaWZ0KCJyb3RhdGUoLTkwICIrUy50b1N0cmluZygpKyIgIitTLnRvU3RyaW5nKCkrIikiKTticmVha31UJTI9PT0xJiYoaS5sZWZ0IT09aS50b3AmJihTPWkubGVmdCxpLmxlZnQ9aS50b3AsaS50b3A9UyksaS53aWR0aCE9PWkuaGVpZ2h0JiYoUz1pLndpZHRoLGkud2lkdGg9aS5oZWlnaHQsaS5oZWlnaHQ9UykpLHYubGVuZ3RoJiYoYT1TJChhLCc8ZyB0cmFuc2Zvcm09Iicrdi5qb2luKCIgIikrJyI+JywiPC9nPiIpKX0pO2xldCBzPW4ud2lkdGgsbD1uLmhlaWdodCx1PWkud2lkdGgsaD1pLmhlaWdodCxmLGQ7cz09PW51bGw/KGQ9bD09PW51bGw/IjFlbSI6bD09PSJhdXRvIj9oOmwsZj1LQyhkLHUvaCkpOihmPXM9PT0iYXV0byI/dTpzLGQ9bD09PW51bGw/S0MoZixoL3UpOmw9PT0iYXV0byI/aDpsKTtsZXQgcD17fSxtPW8oKHksdik9Pnt5YmUodil8fChwW3ldPXYudG9TdHJpbmcoKSl9LCJzZXRBdHRyIik7bSgid2lkdGgiLGYpLG0oImhlaWdodCIsZCk7bGV0IGc9W2kubGVmdCxpLnRvcCx1LGhdO3JldHVybiBwLnZpZXdCb3g9Zy5qb2luKCIgIikse2F0dHJpYnV0ZXM6cCx2aWV3Qm94OmcsYm9keTphfX12YXIgeWJlLEEkPU4oKCk9PnsidXNlIHN0cmljdCI7SDQoKTttJCgpO0UkKCk7QyQoKTt5YmU9byh0PT50PT09InVuc2V0Inx8dD09PSJ1bmRlZmluZWQifHx0PT09Im5vbmUiLCJpc1Vuc2V0S2V5d29yZCIpO28oUUMsImljb25Ub1NWRyIpfSk7ZnVuY3Rpb24gWkModCxlPXhiZSl7bGV0IHI9W10sbjtmb3IoO249dmJlLmV4ZWModCk7KXIucHVzaChuWzFdKTtpZighci5sZW5ndGgpcmV0dXJuIHQ7bGV0IGk9InN1ZmZpeCIrKE1hdGgucmFuZG9tKCkqMTY3NzcyMTZ8RGF0ZS5ub3coKSkudG9TdHJpbmcoMTYpO3JldHVybiByLmZvckVhY2goYT0+e2xldCBzPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2UoYSk6ZSsoYmJlKyspLnRvU3RyaW5nKCksbD1hLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIik7dD10LnJlcGxhY2UobmV3IFJlZ0V4cCgnKFsjOyJdKSgnK2wrJykoWyIpXXxcXC5bYS16XSknLCJnIiksIiQxIitzK2krIiQzIil9KSx0PXQucmVwbGFjZShuZXcgUmVnRXhwKGksImciKSwiIiksdH12YXIgdmJlLHhiZSxiYmUsXyQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YmU9L1xzaWQ9IihcUyspIi9nLHhiZT0iSWNvbmlmeUlkIitEYXRlLm5vdygpLnRvU3RyaW5nKDE2KSsoTWF0aC5yYW5kb20oKSoxNjc3NzIxNnwwKS50b1N0cmluZygxNiksYmJlPTA7byhaQywicmVwbGFjZUlEcyIpfSk7ZnVuY3Rpb24gSkModCxlKXtsZXQgcj10LmluZGV4T2YoInhsaW5rOiIpPT09LTE/IiI6JyB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayInO2ZvcihsZXQgbiBpbiBlKXIrPSIgIituKyc9IicrZVtuXSsnIic7cmV0dXJuJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIicrcisiPiIrdCsiPC9zdmc+In12YXIgRCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEpDLCJpY29uVG9IVE1MIil9KTt2YXIgUiQ9UGkoKElhdCxMJCk9PnsidXNlIHN0cmljdCI7dmFyIGgwPTFlMyxmMD1oMCo2MCxkMD1mMCo2MCxlZD1kMCoyNCxUYmU9ZWQqNyx3YmU9ZWQqMzY1LjI1O0wkLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXR5cGVvZiB0O2lmKHI9PT0ic3RyaW5nIiYmdC5sZW5ndGg+MClyZXR1cm4ga2JlKHQpO2lmKHI9PT0ibnVtYmVyIiYmaXNGaW5pdGUodCkpcmV0dXJuIGUubG9uZz9TYmUodCk6RWJlKHQpO3Rocm93IG5ldyBFcnJvcigidmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0iK0pTT04uc3RyaW5naWZ5KHQpKX07ZnVuY3Rpb24ga2JlKHQpe2lmKHQ9U3RyaW5nKHQpLCEodC5sZW5ndGg+MTAwKSl7dmFyIGU9L14oLT8oPzpcZCspP1wuP1xkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHQpO2lmKGUpe3ZhciByPXBhcnNlRmxvYXQoZVsxXSksbj0oZVsyXXx8Im1zIikudG9Mb3dlckNhc2UoKTtzd2l0Y2gobil7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gcip3YmU7Y2FzZSJ3ZWVrcyI6Y2FzZSJ3ZWVrIjpjYXNlInciOnJldHVybiByKlRiZTtjYXNlImRheXMiOmNhc2UiZGF5IjpjYXNlImQiOnJldHVybiByKmVkO2Nhc2UiaG91cnMiOmNhc2UiaG91ciI6Y2FzZSJocnMiOmNhc2UiaHIiOmNhc2UiaCI6cmV0dXJuIHIqZDA7Y2FzZSJtaW51dGVzIjpjYXNlIm1pbnV0ZSI6Y2FzZSJtaW5zIjpjYXNlIm1pbiI6Y2FzZSJtIjpyZXR1cm4gcipmMDtjYXNlInNlY29uZHMiOmNhc2Uic2Vjb25kIjpjYXNlInNlY3MiOmNhc2Uic2VjIjpjYXNlInMiOnJldHVybiByKmgwO2Nhc2UibWlsbGlzZWNvbmRzIjpjYXNlIm1pbGxpc2Vjb25kIjpjYXNlIm1zZWNzIjpjYXNlIm1zZWMiOmNhc2UibXMiOnJldHVybiByO2RlZmF1bHQ6cmV0dXJufX19fW8oa2JlLCJwYXJzZSIpO2Z1bmN0aW9uIEViZSh0KXt2YXIgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49ZWQ/TWF0aC5yb3VuZCh0L2VkKSsiZCI6ZT49ZDA/TWF0aC5yb3VuZCh0L2QwKSsiaCI6ZT49ZjA/TWF0aC5yb3VuZCh0L2YwKSsibSI6ZT49aDA/TWF0aC5yb3VuZCh0L2gwKSsicyI6dCsibXMifW8oRWJlLCJmbXRTaG9ydCIpO2Z1bmN0aW9uIFNiZSh0KXt2YXIgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49ZWQ/cTQodCxlLGVkLCJkYXkiKTplPj1kMD9xNCh0LGUsZDAsImhvdXIiKTplPj1mMD9xNCh0LGUsZjAsIm1pbnV0ZSIpOmU+PWgwP3E0KHQsZSxoMCwic2Vjb25kIik6dCsiIG1zIn1vKFNiZSwiZm10TG9uZyIpO2Z1bmN0aW9uIHE0KHQsZSxyLG4pe3ZhciBpPWU+PXIqMS41O3JldHVybiBNYXRoLnJvdW5kKHQvcikrIiAiK24rKGk/InMiOiIiKX1vKHE0LCJwbHVyYWwiKX0pO3ZhciBNJD1QaSgoUGF0LE4kKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBDYmUodCl7ci5kZWJ1Zz1yLHIuZGVmYXVsdD1yLHIuY29lcmNlPXUsci5kaXNhYmxlPXMsci5lbmFibGU9aSxyLmVuYWJsZWQ9bCxyLmh1bWFuaXplPVIkKCksci5kZXN0cm95PWgsT2JqZWN0LmtleXModCkuZm9yRWFjaChmPT57cltmXT10W2ZdfSksci5uYW1lcz1bXSxyLnNraXBzPVtdLHIuZm9ybWF0dGVycz17fTtmdW5jdGlvbiBlKGYpe2xldCBkPTA7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZD0oZDw8NSktZCtmLmNoYXJDb2RlQXQocCksZHw9MDtyZXR1cm4gci5jb2xvcnNbTWF0aC5hYnMoZCklci5jb2xvcnMubGVuZ3RoXX1vKGUsInNlbGVjdENvbG9yIiksci5zZWxlY3RDb2xvcj1lO2Z1bmN0aW9uIHIoZil7bGV0IGQscD1udWxsLG0sZztmdW5jdGlvbiB5KC4uLnYpe2lmKCF5LmVuYWJsZWQpcmV0dXJuO2xldCB4PXksYj1OdW1iZXIobmV3IERhdGUpLFQ9Yi0oZHx8Yik7eC5kaWZmPVQseC5wcmV2PWQseC5jdXJyPWIsZD1iLHZbMF09ci5jb2VyY2UodlswXSksdHlwZW9mIHZbMF0hPSJzdHJpbmciJiZ2LnVuc2hpZnQoIiVPIik7bGV0IFM9MDt2WzBdPXZbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csKEUsXyk9PntpZihFPT09IiUlIilyZXR1cm4iJSI7UysrO2xldCBDPXIuZm9ybWF0dGVyc1tfXTtpZih0eXBlb2YgQz09ImZ1bmN0aW9uIil7bGV0IEQ9dltTXTtFPUMuY2FsbCh4LEQpLHYuc3BsaWNlKFMsMSksUy0tfXJldHVybiBFfSksci5mb3JtYXRBcmdzLmNhbGwoeCx2KSwoeC5sb2d8fHIubG9nKS5hcHBseSh4LHYpfXJldHVybiBvKHksImRlYnVnIikseS5uYW1lc3BhY2U9Zix5LnVzZUNvbG9ycz1yLnVzZUNvbG9ycygpLHkuY29sb3I9ci5zZWxlY3RDb2xvcihmKSx5LmV4dGVuZD1uLHkuZGVzdHJveT1yLmRlc3Ryb3ksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImVuYWJsZWQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6bygoKT0+cCE9PW51bGw/cDoobSE9PXIubmFtZXNwYWNlcyYmKG09ci5uYW1lc3BhY2VzLGc9ci5lbmFibGVkKGYpKSxnKSwiZ2V0Iiksc2V0Om8odj0+e3A9dn0sInNldCIpfSksdHlwZW9mIHIuaW5pdD09ImZ1bmN0aW9uIiYmci5pbml0KHkpLHl9byhyLCJjcmVhdGVEZWJ1ZyIpO2Z1bmN0aW9uIG4oZixkKXtsZXQgcD1yKHRoaXMubmFtZXNwYWNlKyh0eXBlb2YgZD4idSI/IjoiOmQpK2YpO3JldHVybiBwLmxvZz10aGlzLmxvZyxwfW8obiwiZXh0ZW5kIik7ZnVuY3Rpb24gaShmKXtyLnNhdmUoZiksci5uYW1lc3BhY2VzPWYsci5uYW1lcz1bXSxyLnNraXBzPVtdO2xldCBkPSh0eXBlb2YgZj09InN0cmluZyI/ZjoiIikudHJpbSgpLnJlcGxhY2UoIiAiLCIsIikuc3BsaXQoIiwiKS5maWx0ZXIoQm9vbGVhbik7Zm9yKGxldCBwIG9mIGQpcFswXT09PSItIj9yLnNraXBzLnB1c2gocC5zbGljZSgxKSk6ci5uYW1lcy5wdXNoKHApfW8oaSwiZW5hYmxlIik7ZnVuY3Rpb24gYShmLGQpe2xldCBwPTAsbT0wLGc9LTEseT0wO2Zvcig7cDxmLmxlbmd0aDspaWYobTxkLmxlbmd0aCYmKGRbbV09PT1mW3BdfHxkW21dPT09IioiKSlkW21dPT09IioiPyhnPW0seT1wLG0rKyk6KHArKyxtKyspO2Vsc2UgaWYoZyE9PS0xKW09ZysxLHkrKyxwPXk7ZWxzZSByZXR1cm4hMTtmb3IoO208ZC5sZW5ndGgmJmRbbV09PT0iKiI7KW0rKztyZXR1cm4gbT09PWQubGVuZ3RofW8oYSwibWF0Y2hlc1RlbXBsYXRlIik7ZnVuY3Rpb24gcygpe2xldCBmPVsuLi5yLm5hbWVzLC4uLnIuc2tpcHMubWFwKGQ9PiItIitkKV0uam9pbigiLCIpO3JldHVybiByLmVuYWJsZSgiIiksZn1vKHMsImRpc2FibGUiKTtmdW5jdGlvbiBsKGYpe2ZvcihsZXQgZCBvZiByLnNraXBzKWlmKGEoZixkKSlyZXR1cm4hMTtmb3IobGV0IGQgb2Ygci5uYW1lcylpZihhKGYsZCkpcmV0dXJuITA7cmV0dXJuITF9byhsLCJlbmFibGVkIik7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIEVycm9yP2Yuc3RhY2t8fGYubWVzc2FnZTpmfW8odSwiY29lcmNlIik7ZnVuY3Rpb24gaCgpe2NvbnNvbGUud2FybigiSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLiIpfXJldHVybiBvKGgsImRlc3Ryb3kiKSxyLmVuYWJsZShyLmxvYWQoKSkscn1vKENiZSwic2V0dXAiKTtOJC5leHBvcnRzPUNiZX0pO3ZhciBJJD1QaSgoanMsWTQpPT57InVzZSBzdHJpY3QiO2pzLmZvcm1hdEFyZ3M9X2JlO2pzLnNhdmU9RGJlO2pzLmxvYWQ9TGJlO2pzLnVzZUNvbG9ycz1BYmU7anMuc3RvcmFnZT1SYmUoKTtqcy5kZXN0cm95PSgoKT0+e2xldCB0PSExO3JldHVybigpPT57dHx8KHQ9ITAsY29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIikpfX0pKCk7anMuY29sb3JzPVsiIzAwMDBDQyIsIiMwMDAwRkYiLCIjMDAzM0NDIiwiIzAwMzNGRiIsIiMwMDY2Q0MiLCIjMDA2NkZGIiwiIzAwOTlDQyIsIiMwMDk5RkYiLCIjMDBDQzAwIiwiIzAwQ0MzMyIsIiMwMENDNjYiLCIjMDBDQzk5IiwiIzAwQ0NDQyIsIiMwMENDRkYiLCIjMzMwMENDIiwiIzMzMDBGRiIsIiMzMzMzQ0MiLCIjMzMzM0ZGIiwiIzMzNjZDQyIsIiMzMzY2RkYiLCIjMzM5OUNDIiwiIzMzOTlGRiIsIiMzM0NDMDAiLCIjMzNDQzMzIiwiIzMzQ0M2NiIsIiMzM0NDOTkiLCIjMzNDQ0NDIiwiIzMzQ0NGRiIsIiM2NjAwQ0MiLCIjNjYwMEZGIiwiIzY2MzNDQyIsIiM2NjMzRkYiLCIjNjZDQzAwIiwiIzY2Q0MzMyIsIiM5OTAwQ0MiLCIjOTkwMEZGIiwiIzk5MzNDQyIsIiM5OTMzRkYiLCIjOTlDQzAwIiwiIzk5Q0MzMyIsIiNDQzAwMDAiLCIjQ0MwMDMzIiwiI0NDMDA2NiIsIiNDQzAwOTkiLCIjQ0MwMENDIiwiI0NDMDBGRiIsIiNDQzMzMDAiLCIjQ0MzMzMzIiwiI0NDMzM2NiIsIiNDQzMzOTkiLCIjQ0MzM0NDIiwiI0NDMzNGRiIsIiNDQzY2MDAiLCIjQ0M2NjMzIiwiI0NDOTkwMCIsIiNDQzk5MzMiLCIjQ0NDQzAwIiwiI0NDQ0MzMyIsIiNGRjAwMDAiLCIjRkYwMDMzIiwiI0ZGMDA2NiIsIiNGRjAwOTkiLCIjRkYwMENDIiwiI0ZGMDBGRiIsIiNGRjMzMDAiLCIjRkYzMzMzIiwiI0ZGMzM2NiIsIiNGRjMzOTkiLCIjRkYzM0NDIiwiI0ZGMzNGRiIsIiNGRjY2MDAiLCIjRkY2NjMzIiwiI0ZGOTkwMCIsIiNGRjk5MzMiLCIjRkZDQzAwIiwiI0ZGQ0MzMyJdO2Z1bmN0aW9uIEFiZSgpe2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cucHJvY2VzcyYmKHdpbmRvdy5wcm9jZXNzLnR5cGU9PT0icmVuZGVyZXIifHx3aW5kb3cucHJvY2Vzcy5fX253anMpKXJldHVybiEwO2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXC8oXGQrKS8pKXJldHVybiExO2xldCB0O3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHx0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmKHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pKSYmcGFyc2VJbnQodFsxXSwxMCk+PTMxfHx0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFwvKFxkKykvKX1vKEFiZSwidXNlQ29sb3JzIik7ZnVuY3Rpb24gX2JlKHQpe2lmKHRbMF09KHRoaXMudXNlQ29sb3JzPyIlYyI6IiIpK3RoaXMubmFtZXNwYWNlKyh0aGlzLnVzZUNvbG9ycz8iICVjIjoiICIpK3RbMF0rKHRoaXMudXNlQ29sb3JzPyIlYyAiOiIgIikrIisiK1k0LmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSwhdGhpcy51c2VDb2xvcnMpcmV0dXJuO2xldCBlPSJjb2xvcjogIit0aGlzLmNvbG9yO3Quc3BsaWNlKDEsMCxlLCJjb2xvcjogaW5oZXJpdCIpO2xldCByPTAsbj0wO3RbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLGk9PntpIT09IiUlIiYmKHIrKyxpPT09IiVjIiYmKG49cikpfSksdC5zcGxpY2UobiwwLGUpfW8oX2JlLCJmb3JtYXRBcmdzIik7anMubG9nPWNvbnNvbGUuZGVidWd8fGNvbnNvbGUubG9nfHwoKCk9Pnt9KTtmdW5jdGlvbiBEYmUodCl7dHJ5e3Q/anMuc3RvcmFnZS5zZXRJdGVtKCJkZWJ1ZyIsdCk6anMuc3RvcmFnZS5yZW1vdmVJdGVtKCJkZWJ1ZyIpfWNhdGNoe319byhEYmUsInNhdmUiKTtmdW5jdGlvbiBMYmUoKXtsZXQgdDt0cnl7dD1qcy5zdG9yYWdlLmdldEl0ZW0oImRlYnVnIil9Y2F0Y2h7fXJldHVybiF0JiZ0eXBlb2YgcHJvY2VzczwidSImJiJlbnYiaW4gcHJvY2VzcyYmKHQ9cHJvY2Vzcy5lbnYuREVCVUcpLHR9byhMYmUsImxvYWQiKTtmdW5jdGlvbiBSYmUoKXt0cnl7cmV0dXJuIGxvY2FsU3RvcmFnZX1jYXRjaHt9fW8oUmJlLCJsb2NhbHN0b3JhZ2UiKTtZNC5leHBvcnRzPU0kKCkoanMpO3Zhcntmb3JtYXR0ZXJzOk5iZX09WTQuZXhwb3J0cztOYmUuaj1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWNhdGNoKGUpe3JldHVybiJbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogIitlLm1lc3NhZ2V9fX0pO3ZhciB6YXQsTyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtnJCgpO2skKCk7QSQoKTtfJCgpO0QkKCk7emF0PUFhKEkkKCksMSl9KTt2YXIgdDcsZTcsUCQsWDQsQiQsRiQsRXMsamw9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO08kKCk7dDc9e2JvZHk6JzxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjE2IDY0LjY3KSIgc3R5bGU9ImZpbGw6ICNmZmY7IGZvbnQtZmFtaWx5OiBBcmlhbE1ULCBBcmlhbDsgZm9udC1zaXplOiA2Ny43NXB4OyI+PHRzcGFuIHg9IjAiIHk9IjAiPj88L3RzcGFuPjwvdGV4dD48L2c+JyxoZWlnaHQ6ODAsd2lkdGg6ODB9LGU3PW5ldyBNYXAsUCQ9bmV3IE1hcCxYND1vKHQ9Pntmb3IobGV0IGUgb2YgdCl7aWYoIWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBhICJuYW1lIiBwcm9wZXJ0eSB3aXRoIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuJyk7aWYoWC5kZWJ1ZygiUmVnaXN0ZXJpbmcgaWNvbiBwYWNrOiIsZS5uYW1lKSwibG9hZGVyImluIGUpUCQuc2V0KGUubmFtZSxlLmxvYWRlcik7ZWxzZSBpZigiaWNvbnMiaW4gZSllNy5zZXQoZS5uYW1lLGUuaWNvbnMpO2Vsc2UgdGhyb3cgWC5lcnJvcigiSW52YWxpZCBpY29uIGxvYWRlcjoiLGUpLG5ldyBFcnJvcignSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGVpdGhlciAiaWNvbnMiIG9yICJsb2FkZXIiIHByb3BlcnR5LicpfX0sInJlZ2lzdGVySWNvblBhY2tzIiksQiQ9byhhc3luYyh0LGUpPT57bGV0IHI9WUModCwhMCxlIT09dm9pZCAwKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaWNvbiBuYW1lOiAke3R9YCk7bGV0IG49ci5wcmVmaXh8fGU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBJY29uIG5hbWUgbXVzdCBjb250YWluIGEgcHJlZml4OiAke3R9YCk7bGV0IGk9ZTcuZ2V0KG4pO2lmKCFpKXtsZXQgcz1QJC5nZXQobik7aWYoIXMpdGhyb3cgbmV3IEVycm9yKGBJY29uIHNldCBub3QgZm91bmQ6ICR7ci5wcmVmaXh9YCk7dHJ5e2k9ey4uLmF3YWl0IHMoKSxwcmVmaXg6bn0sZTcuc2V0KG4saSl9Y2F0Y2gobCl7dGhyb3cgWC5lcnJvcihsKSxuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIGljb24gc2V0OiAke3IucHJlZml4fWApfX1sZXQgYT1qQyhpLHIubmFtZSk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBJY29uIG5vdCBmb3VuZDogJHt0fWApO3JldHVybiBhfSwiZ2V0UmVnaXN0ZXJlZEljb25EYXRhIiksRiQ9byhhc3luYyB0PT57dHJ5e3JldHVybiBhd2FpdCBCJCh0KSwhMH1jYXRjaHtyZXR1cm4hMX19LCJpc0ljb25BdmFpbGFibGUiKSxFcz1vKGFzeW5jKHQsZSxyKT0+e2xldCBuO3RyeXtuPWF3YWl0IEIkKHQsZT8uZmFsbGJhY2tQcmVmaXgpfWNhdGNoKHMpe1guZXJyb3Iocyksbj10N31sZXQgaT1RQyhuLGUpO3JldHVybiBKQyhaQyhpLmJvZHkpLHsuLi5pLmF0dHJpYnV0ZXMsLi4ucn0pfSwiZ2V0SWNvblNWRyIpfSk7ZnVuY3Rpb24gajQodCl7Zm9yKHZhciBlPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dmFyIG49QXJyYXkuZnJvbSh0eXBlb2YgdD09InN0cmluZyI/W3RdOnQpO25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5yZXBsYWNlKC9ccj9cbihbXHQgXSopJC8sIiIpO3ZhciBpPW4ucmVkdWNlKGZ1bmN0aW9uKGwsdSl7dmFyIGg9dS5tYXRjaCgvXG4oW1x0IF0rfCg/IVxzKS4pL2cpO3JldHVybiBoP2wuY29uY2F0KGgubWFwKGZ1bmN0aW9uKGYpe3ZhciBkLHA7cmV0dXJuKHA9KGQ9Zi5tYXRjaCgvW1x0IF0vZykpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC5sZW5ndGgpIT09bnVsbCYmcCE9PXZvaWQgMD9wOjB9KSk6bH0sW10pO2lmKGkubGVuZ3RoKXt2YXIgYT1uZXcgUmVnRXhwKGAKWwkgXXtgK01hdGgubWluLmFwcGx5KE1hdGgsaSkrIn0iLCJnIik7bj1uLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKGEsYApgKX0pfW5bMF09blswXS5yZXBsYWNlKC9eXHI/XG4vLCIiKTt2YXIgcz1uWzBdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obCx1KXt2YXIgaD1zLm1hdGNoKC8oPzpefFxuKSggKikkLyksZj1oP2hbMV06IiIsZD1sO3R5cGVvZiBsPT0ic3RyaW5nIiYmbC5pbmNsdWRlcyhgCmApJiYoZD1TdHJpbmcobCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24ocCxtKXtyZXR1cm4gbT09PTA/cDoiIitmK3B9KS5qb2luKGAKYCkpLHMrPWQrblt1KzFdfSksc312YXIgcjc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGo0LCJkZWRlbnQiKX0pO3ZhciBLNCx0ZCwkJCxRND1OKCgpPT57InVzZSBzdHJpY3QiO0s0PS9eLXszfVxzKltcblxyXSguKj8pW1xuXHJdLXszfVxzKltcblxyXSsvcyx0ZD0vJXsyfXtccyooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksJCQ9L1xzKiUlLipcbi9nbX0pO3ZhciBwMCxuNz1OKCgpPT57InVzZSBzdHJpY3QiO3AwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVW5rbm93bkRpYWdyYW1FcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fX0pO3ZhciBhdSxtMCxMeSxpNyx6JCxyZD1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7UTQoKTtuNygpO2F1PXt9LG0wPW8oZnVuY3Rpb24odCxlKXt0PXQucmVwbGFjZShLNCwiIikucmVwbGFjZSh0ZCwiIikucmVwbGFjZSgkJCxgCmApO2ZvcihsZXRbcix7ZGV0ZWN0b3I6bn1db2YgT2JqZWN0LmVudHJpZXMoYXUpKWlmKG4odCxlKSlyZXR1cm4gcjt0aHJvdyBuZXcgcDAoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke3R9YCl9LCJkZXRlY3RUeXBlIiksTHk9bygoLi4udCk9Pntmb3IobGV0e2lkOmUsZGV0ZWN0b3I6cixsb2FkZXI6bn1vZiB0KWk3KGUscixuKX0sInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zIiksaTc9bygodCxlLHIpPT57YXVbdF0mJlgud2FybihgRGV0ZWN0b3Igd2l0aCBrZXkgJHt0fSBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRpbmcuYCksYXVbdF09e2RldGVjdG9yOmUsbG9hZGVyOnJ9LFguZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7dH0gYWRkZWQke3I/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LCJhZGREZXRlY3RvciIpLHokPW8odD0+YXVbdF0ubG9hZGVyLCJnZXREaWFncmFtTG9hZGVyIil9KTt2YXIgUnksRyQsYTc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtSeT1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oemUsTGUsSWUseGUpe2ZvcihJZT1JZXx8e30seGU9emUubGVuZ3RoO3hlLS07SWVbemVbeGVdXT1MZSk7cmV0dXJuIEllfSwibyIpLGU9WzEsMjRdLHI9WzEsMjVdLG49WzEsMjZdLGk9WzEsMjddLGE9WzEsMjhdLHM9WzEsNjNdLGw9WzEsNjRdLHU9WzEsNjVdLGg9WzEsNjZdLGY9WzEsNjddLGQ9WzEsNjhdLHA9WzEsNjldLG09WzEsMjldLGc9WzEsMzBdLHk9WzEsMzFdLHY9WzEsMzJdLHg9WzEsMzNdLGI9WzEsMzRdLFQ9WzEsMzVdLFM9WzEsMzZdLHc9WzEsMzddLEU9WzEsMzhdLF89WzEsMzldLEM9WzEsNDBdLEQ9WzEsNDFdLE89WzEsNDJdLFI9WzEsNDNdLGs9WzEsNDRdLEw9WzEsNDVdLEE9WzEsNDZdLEk9WzEsNDddLE09WzEsNDhdLFA9WzEsNTBdLEI9WzEsNTFdLEY9WzEsNTJdLHo9WzEsNTNdLCQ9WzEsNTRdLFU9WzEsNTVdLEs9WzEsNTZdLGVlPVsxLDU3XSxZPVsxLDU4XSxjZT1bMSw1OV0sWj1bMSw2MF0sdWU9WzE0LDQyXSxRPVsxNCwzNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0saj1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLG5lPVsxLDgyXSx0ZT1bMSw4M10saGU9WzEsODRdLGxlPVsxLDg1XSxKPVsxMiwxNCw0Ml0sU2U9WzEyLDE0LDMzLDQyXSxzZT1bMTIsMTQsMzMsNDIsNzYsNzcsNzksODBdLGFlPVsxMiwzM10sT2U9WzM0LDM2LDM3LDM4LDM5LDQwLDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSx5ZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKExlLEllLHhlLHEsZGUsaWUsb2Upe3ZhciBWPWllLmxlbmd0aC0xO3N3aXRjaChkZSl7Y2FzZSAzOnEuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpxLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDU6cS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2OnEuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6cS5zZXRDNFR5cGUoaWVbVi0zXSk7YnJlYWs7Y2FzZSAxOTpxLnNldFRpdGxlKGllW1ZdLnN1YnN0cmluZyg2KSksdGhpcy4kPWllW1ZdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOnEuc2V0QWNjRGVzY3JpcHRpb24oaWVbVl0uc3Vic3RyaW5nKDE1KSksdGhpcy4kPWllW1ZdLnN1YnN0cmluZygxNSk7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9aWVbVl0udHJpbSgpLHEuc2V0VGl0bGUodGhpcy4kKTticmVhaztjYXNlIDIyOmNhc2UgMjM6dGhpcy4kPWllW1ZdLnRyaW0oKSxxLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODppZVtWXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIikscS5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSAyOTppZVtWXS5zcGxpY2UoMiwwLCJTWVNURU0iKSxxLmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDMwOnEuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgMzE6aWVbVl0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIikscS5hZGRDb250YWluZXJCb3VuZGFyeSguLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgMzI6cS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDMzOnEuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgMzQ6cS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSAzNTpxLnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6cS5hZGRQZXJzb25PclN5c3RlbSgicGVyc29uIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDA6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfcGVyc29uIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDE6cS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDI6cS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX2RiIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDM6cS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDQ6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDU6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX2RiIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDY6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDc6cS5hZGRDb250YWluZXIoImNvbnRhaW5lciIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDQ4OnEuYWRkQ29udGFpbmVyKCJjb250YWluZXJfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA0OTpxLmFkZENvbnRhaW5lcigiY29udGFpbmVyX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNTA6cS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lciIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDUxOnEuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA1MjpxLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNTM6cS5hZGRDb21wb25lbnQoImNvbXBvbmVudCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDU0OnEuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA1NTpxLmFkZENvbXBvbmVudCgiY29tcG9uZW50X3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNTY6cS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDU3OnEuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA1ODpxLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNjA6cS5hZGRSZWwoInJlbCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDYxOnEuYWRkUmVsKCJiaXJlbCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDYyOnEuYWRkUmVsKCJyZWxfdSIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDYzOnEuYWRkUmVsKCJyZWxfZCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY0OnEuYWRkUmVsKCJyZWxfbCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY1OnEuYWRkUmVsKCJyZWxfciIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY2OnEuYWRkUmVsKCJyZWxfYiIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY3OmllW1ZdLnNwbGljZSgwLDEpLHEuYWRkUmVsKCJyZWwiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA2ODpxLnVwZGF0ZUVsU3R5bGUoInVwZGF0ZV9lbF9zdHlsZSIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY5OnEudXBkYXRlUmVsU3R5bGUoInVwZGF0ZV9yZWxfc3R5bGUiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA3MDpxLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9W2llW1ZdXTticmVhaztjYXNlIDcyOmllW1ZdLnVuc2hpZnQoaWVbVi0xXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9aWVbVl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IFRlPXt9O1RlW2llW1YtMV0udHJpbSgpXT1pZVtWXS50cmltKCksdGhpcy4kPVRlO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw3OlsxLDZdLDg6WzEsN10sOTpbMSw4XSwxMDo0LDExOlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMV0sMTc6WzEsMTJdLDE4OlsxLDEzXX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDddfSx7MTpbMiwzXX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezEyOlsxLDE0XX0sezEyOlsxLDE1XX0sezEyOlsxLDE2XX0sezEyOlsxLDE3XX0sezEyOlsxLDE4XX0sezEzOjE5LDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjcxLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjcyLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezE0OlsxLDc0XX0sdCh1ZSxbMiwxM10sezQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDIwOjc1LDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VCw1MTpTLDUyOncsNTM6RSw1NDpfLDU1OkMsNTY6RCw1NzpPLDU4OlIsNTk6ayw2MDpMLDYxOkEsNjI6SSw2MzpNLDY0OlAsNjU6Qiw2NjpGLDY3OnosNjg6JCw2OTpVLDcwOkssNzE6ZWUsNzI6WSw3MzpjZSw3NDpafSksdCh1ZSxbMiwxNF0pLHQoUSxbMiwxNl0sezEyOlsxLDc2XX0pLHQodWUsWzIsMzZdLHsxMjpbMSw3N119KSx0KGosWzIsMTldKSx0KGosWzIsMjBdKSx7MjU6WzEsNzhdfSx7Mjc6WzEsNzldfSx0KGosWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo4Niw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1Ojg3LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6ODgsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo4OSw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1OjkwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6OTEsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo5Miw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1OjkzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6OTQsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo5NSw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1Ojk2LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6OTcsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo5OCw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1Ojk5LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAxLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAyLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA0LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx0KEosWzIsNTldKSx7MzU6MTA1LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA2LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA3LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA4LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA5LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTEwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTExLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTEyLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTEzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTE0LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTE1LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDM6MjMsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VCw1MTpTLDUyOncsNTM6RSw1NDpfLDU1OkMsNTY6RCw1NzpPLDU4OlIsNTk6ayw2MDpMLDYxOkEsNjI6SSw2MzpNLDY0OlAsNjU6Qiw2NjpGLDY3OnosNjg6JCw2OTpVLDcwOkssNzE6ZWUsNzI6WSw3MzpjZSw3NDpafSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIxLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIyLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTI0LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTI1LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MTQ6WzEsMTI2XX0sezE0OlsxLDEyN119LHsxNDpbMSwxMjhdfSx7MTQ6WzEsMTI5XX0sezE6WzIsOF19LHQodWUsWzIsMTVdKSx0KFEsWzIsMTddLHsyMToyMiwxOToxMzAsMjI6ZSwyMzpyLDI0Om4sMjY6aSwyODphfSksdCh1ZSxbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmEsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDpULDUxOlMsNTI6dyw1MzpFLDU0Ol8sNTU6Qyw1NjpELDU3Ok8sNTg6Uiw1OTprLDYwOkwsNjE6QSw2MjpJLDYzOk0sNjQ6UCw2NTpCLDY2OkYsNjc6eiw2ODokLDY5OlUsNzA6Syw3MTplZSw3MjpZLDczOmNlLDc0Olp9KSx0KGosWzIsMjFdKSx0KGosWzIsMjJdKSx0KEosWzIsMzldKSx0KFNlLFsyLDcxXSx7NzU6ODEsMzU6MTMyLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSksdChzZSxbMiw3M10pLHs3ODpbMSwxMzNdfSx0KHNlLFsyLDc1XSksdChzZSxbMiw3Nl0pLHQoSixbMiw0MF0pLHQoSixbMiw0MV0pLHQoSixbMiw0Ml0pLHQoSixbMiw0M10pLHQoSixbMiw0NF0pLHQoSixbMiw0NV0pLHQoSixbMiw0Nl0pLHQoSixbMiw0N10pLHQoSixbMiw0OF0pLHQoSixbMiw0OV0pLHQoSixbMiw1MF0pLHQoSixbMiw1MV0pLHQoSixbMiw1Ml0pLHQoSixbMiw1M10pLHQoSixbMiw1NF0pLHQoSixbMiw1NV0pLHQoSixbMiw1Nl0pLHQoSixbMiw1N10pLHQoSixbMiw1OF0pLHQoSixbMiw2MF0pLHQoSixbMiw2MV0pLHQoSixbMiw2Ml0pLHQoSixbMiw2M10pLHQoSixbMiw2NF0pLHQoSixbMiw2NV0pLHQoSixbMiw2Nl0pLHQoSixbMiw2N10pLHQoSixbMiw2OF0pLHQoSixbMiw2OV0pLHQoSixbMiw3MF0pLHszMToxMzQsNDI6WzEsMTM1XX0sezEyOlsxLDEzNl19LHszMzpbMSwxMzddfSx0KGFlLFsyLDI4XSksdChhZSxbMiwyOV0pLHQoYWUsWzIsMzBdKSx0KGFlLFsyLDMxXSksdChhZSxbMiwzMl0pLHQoYWUsWzIsMzNdKSx0KGFlLFsyLDM0XSksezE6WzIsOV19LHsxOlsyLDEwXX0sezE6WzIsMTFdfSx7MTpbMiwxMl19LHQoUSxbMiwxOF0pLHQodWUsWzIsMzhdKSx0KFNlLFsyLDcyXSksdChzZSxbMiw3NF0pLHQoSixbMiwyNF0pLHQoSixbMiwzNV0pLHQoT2UsWzIsMjVdKSx0KE9lLFsyLDI2XSx7MTI6WzEsMTM4XX0pLHQoT2UsWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDddLDU6WzIsM10sNjpbMiw0XSw3OlsyLDVdLDg6WzIsNl0sNzQ6WzIsOF0sMTI2OlsyLDldLDEyNzpbMiwxMF0sMTI4OlsyLDExXSwxMjk6WzIsMTJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oTGUsSWUpe2lmKEllLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoTGUpO2Vsc2V7dmFyIHhlPW5ldyBFcnJvcihMZSk7dGhyb3cgeGUuaGFzaD1JZSx4ZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihMZSl7dmFyIEllPXRoaXMseGU9WzBdLHE9W10sZGU9W251bGxdLGllPVtdLG9lPXRoaXMudGFibGUsVj0iIixUZT0wLFc9MCxwZT0wLHZlPTIsUGU9MSxfZT1pZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxiZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFZlPXt5eTp7fX07Zm9yKHZhciBEZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LERlKSYmKFZlLnl5W0RlXT10aGlzLnl5W0RlXSk7YmUuc2V0SW5wdXQoTGUsVmUueXkpLFZlLnl5LmxleGVyPWJlLFZlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBiZS55eWxsb2M+InUiJiYoYmUueXlsbG9jPXt9KTt2YXIgcWU9YmUueXlsbG9jO2llLnB1c2gocWUpO3ZhciBhdD1iZS5vcHRpb25zJiZiZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgVmUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9VmUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUnQobnQpe3hlLmxlbmd0aD14ZS5sZW5ndGgtMipudCxkZS5sZW5ndGg9ZGUubGVuZ3RoLW50LGllLmxlbmd0aD1pZS5sZW5ndGgtbnR9byhSdCwicG9wU3RhY2siKTtmdW5jdGlvbiBzdCgpe3ZhciBudDtyZXR1cm4gbnQ9cS5wb3AoKXx8YmUubGV4KCl8fFBlLHR5cGVvZiBudCE9Im51bWJlciImJihudCBpbnN0YW5jZW9mIEFycmF5JiYocT1udCxudD1xLnBvcCgpKSxudD1JZS5zeW1ib2xzX1tudF18fG50KSxudH1vKHN0LCJsZXgiKTtmb3IodmFyIFVlLGN0LFdlLG90LFl0LFR0LE10PXt9LGJ0LHV0LFN0LGZ0Ozspe2lmKFdlPXhlW3hlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1dlXT9vdD10aGlzLmRlZmF1bHRBY3Rpb25zW1dlXTooKFVlPT09bnVsbHx8dHlwZW9mIFVlPiJ1IikmJihVZT1zdCgpKSxvdD1vZVtXZV0mJm9lW1dlXVtVZV0pLHR5cGVvZiBvdD4idSJ8fCFvdC5sZW5ndGh8fCFvdFswXSl7dmFyIHZ0PSIiO2Z0PVtdO2ZvcihidCBpbiBvZVtXZV0pdGhpcy50ZXJtaW5hbHNfW2J0XSYmYnQ+dmUmJmZ0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tidF0rIiciKTtiZS5zaG93UG9zaXRpb24/dnQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVGUrMSkrYDoKYCtiZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2Z0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bVWVdfHxVZSkrIiciOnZ0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFRlKzEpKyI6IFVuZXhwZWN0ZWQgIisoVWU9PVBlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1VlXXx8VWUpKyInIiksdGhpcy5wYXJzZUVycm9yKHZ0LHt0ZXh0OmJlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tVZV18fFVlLGxpbmU6YmUueXlsaW5lbm8sbG9jOnFlLGV4cGVjdGVkOmZ0fSl9aWYob3RbMF1pbnN0YW5jZW9mIEFycmF5JiZvdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1dlKyIsIHRva2VuOiAiK1VlKTtzd2l0Y2gob3RbMF0pe2Nhc2UgMTp4ZS5wdXNoKFVlKSxkZS5wdXNoKGJlLnl5dGV4dCksaWUucHVzaChiZS55eWxsb2MpLHhlLnB1c2gob3RbMV0pLFVlPW51bGwsY3Q/KFVlPWN0LGN0PW51bGwpOihXPWJlLnl5bGVuZyxWPWJlLnl5dGV4dCxUZT1iZS55eWxpbmVubyxxZT1iZS55eWxsb2MscGU+MCYmcGUtLSk7YnJlYWs7Y2FzZSAyOmlmKHV0PXRoaXMucHJvZHVjdGlvbnNfW290WzFdXVsxXSxNdC4kPWRlW2RlLmxlbmd0aC11dF0sTXQuXyQ9e2ZpcnN0X2xpbmU6aWVbaWUubGVuZ3RoLSh1dHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmllW2llLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmllW2llLmxlbmd0aC0odXR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aWVbaWUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxhdCYmKE10Ll8kLnJhbmdlPVtpZVtpZS5sZW5ndGgtKHV0fHwxKV0ucmFuZ2VbMF0saWVbaWUubGVuZ3RoLTFdLnJhbmdlWzFdXSksVHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE10LFtWLFcsVGUsVmUueXksb3RbMV0sZGUsaWVdLmNvbmNhdChfZSkpLHR5cGVvZiBUdDwidSIpcmV0dXJuIFR0O3V0JiYoeGU9eGUuc2xpY2UoMCwtMSp1dCoyKSxkZT1kZS5zbGljZSgwLC0xKnV0KSxpZT1pZS5zbGljZSgwLC0xKnV0KSkseGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tvdFsxXV1bMF0pLGRlLnB1c2goTXQuJCksaWUucHVzaChNdC5fJCksU3Q9b2VbeGVbeGUubGVuZ3RoLTJdXVt4ZVt4ZS5sZW5ndGgtMV1dLHhlLnB1c2goU3QpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxCZT1mdW5jdGlvbigpe3ZhciB6ZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEllLHhlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEllLHhlKTtlbHNlIHRocm93IG5ldyBFcnJvcihJZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihMZSxJZSl7cmV0dXJuIHRoaXMueXk9SWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUxlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIExlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1MZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9TGUsdGhpcy5tYXRjaGVkKz1MZTt2YXIgSWU9TGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksTGV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oTGUpe3ZhciBJZT1MZS5sZW5ndGgseGU9TGUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1MZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtSWUpLHRoaXMub2Zmc2V0LT1JZTt2YXIgcT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx4ZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXhlLmxlbmd0aC0xKTt2YXIgZGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhlPyh4ZS5sZW5ndGg9PT1xLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcVtxLmxlbmd0aC14ZS5sZW5ndGhdLmxlbmd0aC14ZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUllfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2RlWzBdLGRlWzBdK3RoaXMueXlsZW5nLUllXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oTGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShMZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIExlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oTGUubGVuZ3RoPjIwPyIuLi4iOiIiKStMZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBMZT10aGlzLm1hdGNoO3JldHVybiBMZS5sZW5ndGg8MjAmJihMZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtTGUubGVuZ3RoKSksKExlLnN1YnN0cigwLDIwKSsoTGUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgTGU9dGhpcy5wYXN0SW5wdXQoKSxJZT1uZXcgQXJyYXkoTGUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gTGUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0llKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihMZSxJZSl7dmFyIHhlLHEsZGU7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGRlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGRlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHE9TGVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHEmJih0aGlzLnl5bGluZW5vKz1xLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnE/cVtxLmxlbmd0aC0xXS5sZW5ndGgtcVtxLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0xlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUxlWzBdLHRoaXMubWF0Y2grPUxlWzBdLHRoaXMubWF0Y2hlcz1MZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShMZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9TGVbMF0seGU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseGUpcmV0dXJuIHhlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBpZSBpbiBkZSl0aGlzW2llXT1kZVtpZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIExlLEllLHhlLHE7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZGU9dGhpcy5fY3VycmVudFJ1bGVzKCksaWU9MDtpZTxkZS5sZW5ndGg7aWUrKylpZih4ZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2RlW2llXV0pLHhlJiYoIUllfHx4ZVswXS5sZW5ndGg+SWVbMF0ubGVuZ3RoKSl7aWYoSWU9eGUscT1pZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihMZT10aGlzLnRlc3RfbWF0Y2goeGUsZGVbaWVdKSxMZSE9PSExKXJldHVybiBMZTtpZih0aGlzLl9iYWNrdHJhY2spe0llPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEllPyhMZT10aGlzLnRlc3RfbWF0Y2goSWUsZGVbcV0pLExlIT09ITE/TGU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgSWU9dGhpcy5uZXh0KCk7cmV0dXJuIEllfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihJZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEllKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBJZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBJZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEllKXtyZXR1cm4gSWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhJZXx8MCksSWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tJZV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihJZSl7dGhpcy5iZWdpbihJZSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihJZSx4ZSxxLGRlKXt2YXIgaWU9ZGU7c3dpdGNoKHEpe2Nhc2UgMDpyZXR1cm4gNjtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDIyO2Nhc2UgNTpyZXR1cm4gMjM7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyNDticmVhaztjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI2O2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpjO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEyO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpyZXR1cm4gMTE7Y2FzZSAxODpyZXR1cm4gMTU7Y2FzZSAxOTpyZXR1cm4gMTY7Y2FzZSAyMDpyZXR1cm4gMTc7Y2FzZSAyMTpyZXR1cm4gMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uX2V4dCIpLDQ1O2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLDQ0O2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfcXVldWUiKSw1MTticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksNTA7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dCIpLDQ5O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9xdWV1ZSIpLDQ4O2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9kYiIpLDQ3O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLDQ2O2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oImJvdW5kYXJ5IiksMzc7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigiZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDM0O2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLDM2O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfcXVldWUiKSw1NzticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksNTY7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dCIpLDU1O2JyZWFrO2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9xdWV1ZSIpLDU0O2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9kYiIpLDUzO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLDUyO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9ib3VuZGFyeSIpLDM4O2JyZWFrO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfcXVldWUiKSw2MzticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X2RiIiksNjI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLDYxO2JyZWFrO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9xdWV1ZSIpLDYwO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLDU5O2JyZWFrO2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudCIpLDU4O2JyZWFrO2Nhc2UgNDY6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9sIiksNDA7YnJlYWs7Y2FzZSA0OTpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksNDE7YnJlYWs7Y2FzZSA1MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsIiksNjQ7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5iZWdpbigiYmlyZWwiKSw2NTticmVhaztjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2JyZWFrO2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NzticmVhaztjYXNlIDU1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2JyZWFrO2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7YnJlYWs7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODticmVhaztjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2JyZWFrO2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2IiKSw3MDticmVhaztjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfaW5kZXgiKSw3MTticmVhaztjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSw3MjticmVhaztjYXNlIDYzOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfcmVsX3N0eWxlIiksNzM7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSw3NDticmVhaztjYXNlIDY1OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDY2OnJldHVybiB0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKSwiQVRUUklCVVRFX0VNUFRZIjticmVhaztjYXNlIDY3OnRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpO2JyZWFrO2Nhc2UgNjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOmJyZWFrO2Nhc2UgNzE6cmV0dXJuIDgwO2Nhc2UgNzI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA3Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4iU1RSIjtjYXNlIDc1OnRoaXMuYmVnaW4oInN0cmluZ19rdiIpO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7YnJlYWs7Y2FzZSA3Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigic3RyaW5nX2t2X3ZhbHVlIik7YnJlYWs7Y2FzZSA3ODpyZXR1cm4iU1RSX1ZBTFVFIjtjYXNlIDc5OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4iU1RSIjtjYXNlIDgxOnJldHVybiJMQlJBQ0UiO2Nhc2UgODI6cmV0dXJuIlJCUkFDRSI7Y2FzZSA4MzpyZXR1cm4iU1BBQ0UiO2Nhc2UgODQ6cmV0dXJuIkVPTCI7Y2FzZSA4NTpyZXR1cm4gMTR9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86dGl0bGVcc1teI1xuO10rKS8sL14oPzphY2NEZXNjcmlwdGlvblxzW14jXG47XSspLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OkM0Q29udGV4dFxiKS8sL14oPzpDNENvbnRhaW5lclxiKS8sL14oPzpDNENvbXBvbmVudFxiKS8sL14oPzpDNER5bmFtaWNcYikvLC9eKD86QzREZXBsb3ltZW50XGIpLywvXig/OlBlcnNvbl9FeHRcYikvLC9eKD86UGVyc29uXGIpLywvXig/OlN5c3RlbVF1ZXVlX0V4dFxiKS8sL14oPzpTeXN0ZW1EYl9FeHRcYikvLC9eKD86U3lzdGVtX0V4dFxiKS8sL14oPzpTeXN0ZW1RdWV1ZVxiKS8sL14oPzpTeXN0ZW1EYlxiKS8sL14oPzpTeXN0ZW1cYikvLC9eKD86Qm91bmRhcnlcYikvLC9eKD86RW50ZXJwcmlzZV9Cb3VuZGFyeVxiKS8sL14oPzpTeXN0ZW1fQm91bmRhcnlcYikvLC9eKD86Q29udGFpbmVyUXVldWVfRXh0XGIpLywvXig/OkNvbnRhaW5lckRiX0V4dFxiKS8sL14oPzpDb250YWluZXJfRXh0XGIpLywvXig/OkNvbnRhaW5lclF1ZXVlXGIpLywvXig/OkNvbnRhaW5lckRiXGIpLywvXig/OkNvbnRhaW5lclxiKS8sL14oPzpDb250YWluZXJfQm91bmRhcnlcYikvLC9eKD86Q29tcG9uZW50UXVldWVfRXh0XGIpLywvXig/OkNvbXBvbmVudERiX0V4dFxiKS8sL14oPzpDb21wb25lbnRfRXh0XGIpLywvXig/OkNvbXBvbmVudFF1ZXVlXGIpLywvXig/OkNvbXBvbmVudERiXGIpLywvXig/OkNvbXBvbmVudFxiKS8sL14oPzpEZXBsb3ltZW50X05vZGVcYikvLC9eKD86Tm9kZVxiKS8sL14oPzpOb2RlX0xcYikvLC9eKD86Tm9kZV9SXGIpLywvXig/OlJlbFxiKS8sL14oPzpCaVJlbFxiKS8sL14oPzpSZWxfVXBcYikvLC9eKD86UmVsX1VcYikvLC9eKD86UmVsX0Rvd25cYikvLC9eKD86UmVsX0RcYikvLC9eKD86UmVsX0xlZnRcYikvLC9eKD86UmVsX0xcYikvLC9eKD86UmVsX1JpZ2h0XGIpLywvXig/OlJlbF9SXGIpLywvXig/OlJlbF9CYWNrXGIpLywvXig/OlJlbEluZGV4XGIpLywvXig/OlVwZGF0ZUVsZW1lbnRTdHlsZVxiKS8sL14oPzpVcGRhdGVSZWxTdHlsZVxiKS8sL14oPzpVcGRhdGVMYXlvdXRDb25maWdcYikvLC9eKD86JCkvLC9eKD86WyhdWyBdKlssXSkvLC9eKD86WyhdKS8sL14oPzpbKV0pLywvXig/OiwsKS8sL14oPzosKS8sL14oPzpbIF0qWyJdWyJdKS8sL14oPzpbIF0qWyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbIF0qW1wkXSkvLC9eKD86W149XSopLywvXig/Ols9XVsgXSpbIl0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlteLF0rKS8sL14oPzpceykvLC9eKD86XH0pLywvXig/Oltcc10rKS8sL14oPzpbXG5ccl0rKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X3ZhbHVlOntydWxlczpbNzgsNzldLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X2tleTp7cnVsZXM6Wzc3XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdjp7cnVsZXM6Wzc2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzczLDc0XSxpbmNsdXNpdmU6ITF9LGF0dHJpYnV0ZTp7cnVsZXM6WzY4LDY5LDcwLDcxLDcyLDc1LDgwXSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9sYXlvdXRfY29uZmlnOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX3JlbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9lbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9kOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3U6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfYmk6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9yOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGluZGV4OntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHJlbF9pbmRleDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHRfcXVldWU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxiaXJlbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGVudGVycHJpc2VfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxwZXJzb246e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDgxLDgyLDgzLDg0LDg1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHplfSgpO3llLmxleGVyPUJlO2Z1bmN0aW9uIEhlKCl7dGhpcy55eT17fX1yZXR1cm4gbyhIZSwiUGFyc2VyIiksSGUucHJvdG90eXBlPXllLHllLlBhcnNlcj1IZSxuZXcgSGV9KCk7UnkucGFyc2VyPVJ5O0ckPVJ5fSk7dmFyIHM3LFVuLGcwPU4oKCk9PnsidXNlIHN0cmljdCI7czc9bygodCxlLHtkZXB0aDpyPTIsY2xvYmJlcjpuPSExfT17fSk9PntsZXQgaT17ZGVwdGg6cixjbG9iYmVyOm59O3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYhQXJyYXkuaXNBcnJheSh0KT8oZS5mb3JFYWNoKGE9PnM3KHQsYSxpKSksdCk6QXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KT8oZS5mb3JFYWNoKGE9Pnt0LmluY2x1ZGVzKGEpfHx0LnB1c2goYSl9KSx0KTp0PT09dm9pZCAwfHxyPD0wP3QhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdHlwZW9mIGU9PSJvYmplY3QiP09iamVjdC5hc3NpZ24odCxlKTplOihlIT09dm9pZCAwJiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiBlPT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChhPT57dHlwZW9mIGVbYV09PSJvYmplY3QiJiYodFthXT09PXZvaWQgMHx8dHlwZW9mIHRbYV09PSJvYmplY3QiKT8odFthXT09PXZvaWQgMCYmKHRbYV09QXJyYXkuaXNBcnJheShlW2FdKT9bXTp7fSksdFthXT1zNyh0W2FdLGVbYV0se2RlcHRoOnItMSxjbG9iYmVyOm59KSk6KG58fHR5cGVvZiB0W2FdIT0ib2JqZWN0IiYmdHlwZW9mIGVbYV0hPSJvYmplY3QiKSYmKHRbYV09ZVthXSl9KSx0KX0sImFzc2lnbldpdGhEZXB0aCIpLFVuPXM3fSk7dmFyIFo0LFYkLFUkPU4oKCk9PnsidXNlIHN0cmljdCI7WjQ9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjpvKHQ9PnQ+PTI1NT8yNTU6dDwwPzA6dCwiciIpLGc6byh0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsImciKSxiOm8odD0+dD49MjU1PzI1NTp0PDA/MDp0LCJiIiksaDpvKHQ9PnQlMzYwLCJoIiksczpvKHQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCwicyIpLGw6byh0PT50Pj0xMDA/MTAwOnQ8MD8wOnQsImwiKSxhOm8odD0+dD49MT8xOnQ8MD8wOnQsImEiKX0sdG9MaW5lYXI6byh0PT57bGV0IGU9dC8yNTU7cmV0dXJuIHQ+LjAzOTI4P01hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCk6ZS8xMi45Mn0sInRvTGluZWFyIiksaHVlMnJnYjpvKCh0LGUscik9PihyPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPC4xNjY2NjY2NjY2NjY2NjY2Nj90KyhlLXQpKjYqcjpyPC41P2U6cjwuNjY2NjY2NjY2NjY2NjY2Nj90KyhlLXQpKiguNjY2NjY2NjY2NjY2NjY2Ni1yKSo2OnQpLCJodWUycmdiIiksaHNsMnJnYjpvKCh7aDp0LHM6ZSxsOnJ9LG4pPT57aWYoIWUpcmV0dXJuIHIqMi41NTt0Lz0zNjAsZS89MTAwLHIvPTEwMDtsZXQgaT1yPC41P3IqKDErZSk6citlLXIqZSxhPTIqci1pO3N3aXRjaChuKXtjYXNlInIiOnJldHVybiBaNC5odWUycmdiKGEsaSx0Ky4zMzMzMzMzMzMzMzMzMzMzKSoyNTU7Y2FzZSJnIjpyZXR1cm4gWjQuaHVlMnJnYihhLGksdCkqMjU1O2Nhc2UiYiI6cmV0dXJuIFo0Lmh1ZTJyZ2IoYSxpLHQtLjMzMzMzMzMzMzMzMzMzMzMpKjI1NX19LCJoc2wycmdiIikscmdiMmhzbDpvKCh7cjp0LGc6ZSxiOnJ9LG4pPT57dC89MjU1LGUvPTI1NSxyLz0yNTU7bGV0IGk9TWF0aC5tYXgodCxlLHIpLGE9TWF0aC5taW4odCxlLHIpLHM9KGkrYSkvMjtpZihuPT09ImwiKXJldHVybiBzKjEwMDtpZihpPT09YSlyZXR1cm4gMDtsZXQgbD1pLWEsdT1zPi41P2wvKDItaS1hKTpsLyhpK2EpO2lmKG49PT0icyIpcmV0dXJuIHUqMTAwO3N3aXRjaChpKXtjYXNlIHQ6cmV0dXJuKChlLXIpL2wrKGU8cj82OjApKSo2MDtjYXNlIGU6cmV0dXJuKChyLXQpL2wrMikqNjA7Y2FzZSByOnJldHVybigodC1lKS9sKzQpKjYwO2RlZmF1bHQ6cmV0dXJuLTF9fSwicmdiMmhzbCIpfSxWJD1aNH0pO3ZhciBNYmUsSCQsVyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNYmU9e2NsYW1wOm8oKHQsZSxyKT0+ZT5yP01hdGgubWluKGUsTWF0aC5tYXgocix0KSk6TWF0aC5taW4ocixNYXRoLm1heChlLHQpKSwiY2xhbXAiKSxyb3VuZDpvKHQ9Pk1hdGgucm91bmQodCoxZTEwKS8xZTEwLCJyb3VuZCIpfSxIJD1NYmV9KTt2YXIgSWJlLHEkLFkkPU4oKCk9PnsidXNlIHN0cmljdCI7SWJlPXtkZWMyaGV4Om8odD0+e2xldCBlPU1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpO3JldHVybiBlLmxlbmd0aD4xP2U6YDAke2V9YH0sImRlYzJoZXgiKX0scSQ9SWJlfSk7dmFyIE9iZSxqdCxLbD1OKCgpPT57InVzZSBzdHJpY3QiO1UkKCk7VyQoKTtZJCgpO09iZT17Y2hhbm5lbDpWJCxsYW5nOkgkLHVuaXQ6cSR9LGp0PU9iZX0pO3ZhciBzdSxCaSxOeT1OKCgpPT57InVzZSBzdHJpY3QiO0tsKCk7c3U9e307Zm9yKGxldCB0PTA7dDw9MjU1O3QrKylzdVt0XT1qdC51bml0LmRlYzJoZXgodCk7Qmk9e0FMTDowLFJHQjoxLEhTTDoyfX0pO3ZhciBvNyxYJCxqJD1OKCgpPT57InVzZSBzdHJpY3QiO055KCk7bzc9Y2xhc3N7c3RhdGlje28odGhpcywiVHlwZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy50eXBlPUJpLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChlKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1lfXJlc2V0KCl7dGhpcy50eXBlPUJpLkFMTH1pcyhlKXtyZXR1cm4gdGhpcy50eXBlPT09ZX19LFgkPW83fSk7dmFyIGw3LEskLFEkPU4oKCk9PnsidXNlIHN0cmljdCI7S2woKTtqJCgpO055KCk7bDc9Y2xhc3N7c3RhdGlje28odGhpcywiQ2hhbm5lbHMiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29sb3I9cix0aGlzLmNoYW5nZWQ9ITEsdGhpcy5kYXRhPWUsdGhpcy50eXBlPW5ldyBYJH1zZXQoZSxyKXtyZXR1cm4gdGhpcy5jb2xvcj1yLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9ZSx0aGlzLnR5cGUudHlwZT1CaS5BTEwsdGhpc31fZW5zdXJlSFNMKCl7bGV0IGU9dGhpcy5kYXRhLHtoOnIsczpuLGw6aX09ZTtyPT09dm9pZCAwJiYoZS5oPWp0LmNoYW5uZWwucmdiMmhzbChlLCJoIikpLG49PT12b2lkIDAmJihlLnM9anQuY2hhbm5lbC5yZ2IyaHNsKGUsInMiKSksaT09PXZvaWQgMCYmKGUubD1qdC5jaGFubmVsLnJnYjJoc2woZSwibCIpKX1fZW5zdXJlUkdCKCl7bGV0IGU9dGhpcy5kYXRhLHtyLGc6bixiOml9PWU7cj09PXZvaWQgMCYmKGUucj1qdC5jaGFubmVsLmhzbDJyZ2IoZSwiciIpKSxuPT09dm9pZCAwJiYoZS5nPWp0LmNoYW5uZWwuaHNsMnJnYihlLCJnIikpLGk9PT12b2lkIDAmJihlLmI9anQuY2hhbm5lbC5oc2wycmdiKGUsImIiKSl9Z2V0IHIoKXtsZXQgZT10aGlzLmRhdGEscj1lLnI7cmV0dXJuIXRoaXMudHlwZS5pcyhCaS5IU0wpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZUhTTCgpLGp0LmNoYW5uZWwuaHNsMnJnYihlLCJyIikpfWdldCBnKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5nO3JldHVybiF0aGlzLnR5cGUuaXMoQmkuSFNMKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVIU0woKSxqdC5jaGFubmVsLmhzbDJyZ2IoZSwiZyIpKX1nZXQgYigpe2xldCBlPXRoaXMuZGF0YSxyPWUuYjtyZXR1cm4hdGhpcy50eXBlLmlzKEJpLkhTTCkmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlSFNMKCksanQuY2hhbm5lbC5oc2wycmdiKGUsImIiKSl9Z2V0IGgoKXtsZXQgZT10aGlzLmRhdGEscj1lLmg7cmV0dXJuIXRoaXMudHlwZS5pcyhCaS5SR0IpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZVJHQigpLGp0LmNoYW5uZWwucmdiMmhzbChlLCJoIikpfWdldCBzKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5zO3JldHVybiF0aGlzLnR5cGUuaXMoQmkuUkdCKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVSR0IoKSxqdC5jaGFubmVsLnJnYjJoc2woZSwicyIpKX1nZXQgbCgpe2xldCBlPXRoaXMuZGF0YSxyPWUubDtyZXR1cm4hdGhpcy50eXBlLmlzKEJpLlJHQikmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlUkdCKCksanQuY2hhbm5lbC5yZ2IyaHNsKGUsImwiKSl9Z2V0IGEoKXtyZXR1cm4gdGhpcy5kYXRhLmF9c2V0IHIoZSl7dGhpcy50eXBlLnNldChCaS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucj1lfXNldCBnKGUpe3RoaXMudHlwZS5zZXQoQmkuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmc9ZX1zZXQgYihlKXt0aGlzLnR5cGUuc2V0KEJpLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5iPWV9c2V0IGgoZSl7dGhpcy50eXBlLnNldChCaS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuaD1lfXNldCBzKGUpe3RoaXMudHlwZS5zZXQoQmkuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnM9ZX1zZXQgbChlKXt0aGlzLnR5cGUuc2V0KEJpLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5sPWV9c2V0IGEoZSl7dGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5hPWV9fSxLJD1sN30pO3ZhciBQYmUsdWgsTXk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRJCgpO1BiZT1uZXcgSyQoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50IiksdWg9UGJlfSk7dmFyIFokLG5kLGM3PU4oKCk9PnsidXNlIHN0cmljdCI7TXkoKTtOeSgpO1okPXtyZTovXiMoKD86W2EtZjAtOV17Mn0pezIsNH18W2EtZjAtOV17M30pJC9pLHBhcnNlOm8odD0+e2lmKHQuY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybjtsZXQgZT10Lm1hdGNoKFokLnJlKTtpZighZSlyZXR1cm47bGV0IHI9ZVsxXSxuPXBhcnNlSW50KHIsMTYpLGk9ci5sZW5ndGgsYT1pJTQ9PT0wLHM9aT40LGw9cz8xOjE3LHU9cz84OjQsaD1hPzA6LTEsZj1zPzI1NToxNTtyZXR1cm4gdWguc2V0KHtyOihuPj51KihoKzMpJmYpKmwsZzoobj4+dSooaCsyKSZmKSpsLGI6KG4+PnUqKGgrMSkmZikqbCxhOmE/KG4mZikqbC8yNTU6MX0sdCl9LCJwYXJzZSIpLHN0cmluZ2lmeTpvKHQ9PntsZXR7cjplLGc6cixiOm4sYTppfT10O3JldHVybiBpPDE/YCMke3N1W01hdGgucm91bmQoZSldfSR7c3VbTWF0aC5yb3VuZChyKV19JHtzdVtNYXRoLnJvdW5kKG4pXX0ke3N1W01hdGgucm91bmQoaSoyNTUpXX1gOmAjJHtzdVtNYXRoLnJvdW5kKGUpXX0ke3N1W01hdGgucm91bmQocildfSR7c3VbTWF0aC5yb3VuZChuKV19YH0sInN0cmluZ2lmeSIpfSxuZD1aJH0pO3ZhciBKNCxJeSxKJD1OKCgpPT57InVzZSBzdHJpY3QiO0tsKCk7TXkoKTtKND17cmU6L15oc2xhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KD86ZGVnfGdyYWR8cmFkfHR1cm4pPylccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KCUpPykpP1xzKj9cKSQvaSxodWVSZTovXiguKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvaSxfaHVlMmRlZzpvKHQ9PntsZXQgZT10Lm1hdGNoKEo0Lmh1ZVJlKTtpZihlKXtsZXRbLHIsbl09ZTtzd2l0Y2gobil7Y2FzZSJncmFkIjpyZXR1cm4ganQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqLjkpO2Nhc2UicmFkIjpyZXR1cm4ganQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIGp0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHIpKjM2MCl9fXJldHVybiBqdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdCh0KSl9LCJfaHVlMmRlZyIpLHBhcnNlOm8odD0+e2xldCBlPXQuY2hhckNvZGVBdCgwKTtpZihlIT09MTA0JiZlIT09NzIpcmV0dXJuO2xldCByPXQubWF0Y2goSjQucmUpO2lmKCFyKXJldHVybjtsZXRbLG4saSxhLHMsbF09cjtyZXR1cm4gdWguc2V0KHtoOko0Ll9odWUyZGVnKG4pLHM6anQuY2hhbm5lbC5jbGFtcC5zKHBhcnNlRmxvYXQoaSkpLGw6anQuY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQoYSkpLGE6cz9qdC5jaGFubmVsLmNsYW1wLmEobD9wYXJzZUZsb2F0KHMpLzEwMDpwYXJzZUZsb2F0KHMpKToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtoOmUsczpyLGw6bixhOml9PXQ7cmV0dXJuIGk8MT9gaHNsYSgke2p0Lmxhbmcucm91bmQoZSl9LCAke2p0Lmxhbmcucm91bmQocil9JSwgJHtqdC5sYW5nLnJvdW5kKG4pfSUsICR7aX0pYDpgaHNsKCR7anQubGFuZy5yb3VuZChlKX0sICR7anQubGFuZy5yb3VuZChyKX0lLCAke2p0Lmxhbmcucm91bmQobil9JSlgfSwic3RyaW5naWZ5Iil9LEl5PUo0fSk7dmFyIGUzLHU3LGV6PU4oKCk9PnsidXNlIHN0cmljdCI7YzcoKTtlMz17Y29sb3JzOnthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW5hcXVhOiIjMDBmZmZmIixkYXJrYmx1ZToiIzAwMDA4YiIsZGFya2N5YW46IiMwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6IiNiODg2MGIiLGRhcmtncmF5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJra2hha2k6IiNiZGI3NmIiLGRhcmttYWdlbnRhOiIjOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiIzU1NmIyZiIsZGFya29yYW5nZToiI2ZmOGMwMCIsZGFya29yY2hpZDoiIzk5MzJjYyIsZGFya3JlZDoiIzhiMDAwMCIsZGFya3NhbG1vbjoiI2U5OTY3YSIsZGFya3NlYWdyZWVuOiIjOGZiYzhmIixkYXJrc2xhdGVibHVlOiIjNDgzZDhiIixkYXJrc2xhdGVncmF5OiIjMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIjMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIjMDBjZWQxIixkYXJrdmlvbGV0OiIjOTQwMGQzIixkZWVwcGluazoiI2ZmMTQ5MyIsZGVlcHNreWJsdWU6IiMwMGJmZmYiLGRpbWdyYXk6IiM2OTY5NjkiLGRpbWdyZXk6IiM2OTY5NjkiLGRvZGdlcmJsdWU6IiMxZTkwZmYiLGZpcmVicmljazoiI2IyMjIyMiIsZmxvcmFsd2hpdGU6IiNmZmZhZjAiLGZvcmVzdGdyZWVuOiIjMjI4YjIyIixmdWNoc2lhOiIjZmYwMGZmIixnYWluc2Jvcm86IiNkY2RjZGMiLGdob3N0d2hpdGU6IiNmOGY4ZmYiLGdvbGQ6IiNmZmQ3MDAiLGdvbGRlbnJvZDoiI2RhYTUyMCIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGdyZWVueWVsbG93OiIjYWRmZjJmIixncmV5OiIjODA4MDgwIixob25leWRldzoiI2YwZmZmMCIsaG90cGluazoiI2ZmNjliNCIsaW5kaWFucmVkOiIjY2Q1YzVjIixpbmRpZ286IiM0YjAwODIiLGl2b3J5OiIjZmZmZmYwIixraGFraToiI2YwZTY4YyIsbGF2ZW5kZXI6IiNlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6IiNmZmYwZjUiLGxhd25ncmVlbjoiIzdjZmMwMCIsbGVtb25jaGlmZm9uOiIjZmZmYWNkIixsaWdodGJsdWU6IiNhZGQ4ZTYiLGxpZ2h0Y29yYWw6IiNmMDgwODAiLGxpZ2h0Y3lhbjoiI2UwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IiNmYWZhZDIiLGxpZ2h0Z3JheToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRncmV5OiIjZDNkM2QzIixsaWdodHBpbms6IiNmZmI2YzEiLGxpZ2h0c2FsbW9uOiIjZmZhMDdhIixsaWdodHNlYWdyZWVuOiIjMjBiMmFhIixsaWdodHNreWJsdWU6IiM4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiIjNzc4ODk5IixsaWdodHNsYXRlZ3JleToiIzc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6IiNiMGM0ZGUiLGxpZ2h0eWVsbG93OiIjZmZmZmUwIixsaW1lOiIjMDBmZjAwIixsaW1lZ3JlZW46IiMzMmNkMzIiLGxpbmVuOiIjZmFmMGU2IixtYWdlbnRhOiIjZmYwMGZmIixtYXJvb246IiM4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLG1lZGl1bWJsdWU6IiMwMDAwY2QiLG1lZGl1bW9yY2hpZDoiI2JhNTVkMyIsbWVkaXVtcHVycGxlOiIjOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiIzNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiIjN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiIzAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiIjNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6IiNjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiIzE5MTk3MCIsbWludGNyZWFtOiIjZjVmZmZhIixtaXN0eXJvc2U6IiNmZmU0ZTEiLG1vY2Nhc2luOiIjZmZlNGI1IixuYXZham93aGl0ZToiI2ZmZGVhZCIsbmF2eToiIzAwMDA4MCIsb2xkbGFjZToiI2ZkZjVlNiIsb2xpdmU6IiM4MDgwMDAiLG9saXZlZHJhYjoiIzZiOGUyMyIsb3JhbmdlOiIjZmZhNTAwIixvcmFuZ2VyZWQ6IiNmZjQ1MDAiLG9yY2hpZDoiI2RhNzBkNiIscGFsZWdvbGRlbnJvZDoiI2VlZThhYSIscGFsZWdyZWVuOiIjOThmYjk4IixwYWxldHVycXVvaXNlOiIjYWZlZWVlIixwYWxldmlvbGV0cmVkOiIjZGI3MDkzIixwYXBheWF3aGlwOiIjZmZlZmQ1IixwZWFjaHB1ZmY6IiNmZmRhYjkiLHBlcnU6IiNjZDg1M2YiLHBpbms6IiNmZmMwY2IiLHBsdW06IiNkZGEwZGQiLHBvd2RlcmJsdWU6IiNiMGUwZTYiLHB1cnBsZToiIzgwMDA4MCIscmViZWNjYXB1cnBsZToiIzY2MzM5OSIscmVkOiIjZmYwMDAwIixyb3N5YnJvd246IiNiYzhmOGYiLHJveWFsYmx1ZToiIzQxNjllMSIsc2FkZGxlYnJvd246IiM4YjQ1MTMiLHNhbG1vbjoiI2ZhODA3MiIsc2FuZHlicm93bjoiI2Y0YTQ2MCIsc2VhZ3JlZW46IiMyZThiNTciLHNlYXNoZWxsOiIjZmZmNWVlIixzaWVubmE6IiNhMDUyMmQiLHNpbHZlcjoiI2MwYzBjMCIsc2t5Ymx1ZToiIzg3Y2VlYiIsc2xhdGVibHVlOiIjNmE1YWNkIixzbGF0ZWdyYXk6IiM3MDgwOTAiLHNsYXRlZ3JleToiIzcwODA5MCIsc25vdzoiI2ZmZmFmYSIsc3ByaW5nZ3JlZW46IiMwMGZmN2YiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LHBhcnNlOm8odD0+e3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBlPWUzLmNvbG9yc1t0XTtpZihlKXJldHVybiBuZC5wYXJzZShlKX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldCBlPW5kLnN0cmluZ2lmeSh0KTtmb3IobGV0IHIgaW4gZTMuY29sb3JzKWlmKGUzLmNvbG9yc1tyXT09PWUpcmV0dXJuIHJ9LCJzdHJpbmdpZnkiKX0sdTc9ZTN9KTt2YXIgdHosT3kscno9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO015KCk7dHo9e3JlOi9ecmdiYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSk/XHMqP1wpJC9pLHBhcnNlOm8odD0+e2xldCBlPXQuY2hhckNvZGVBdCgwKTtpZihlIT09MTE0JiZlIT09ODIpcmV0dXJuO2xldCByPXQubWF0Y2godHoucmUpO2lmKCFyKXJldHVybjtsZXRbLG4saSxhLHMsbCx1LGgsZl09cjtyZXR1cm4gdWguc2V0KHtyOmp0LmNoYW5uZWwuY2xhbXAucihpP3BhcnNlRmxvYXQobikqMi41NTpwYXJzZUZsb2F0KG4pKSxnOmp0LmNoYW5uZWwuY2xhbXAuZyhzP3BhcnNlRmxvYXQoYSkqMi41NTpwYXJzZUZsb2F0KGEpKSxiOmp0LmNoYW5uZWwuY2xhbXAuYih1P3BhcnNlRmxvYXQobCkqMi41NTpwYXJzZUZsb2F0KGwpKSxhOmg/anQuY2hhbm5lbC5jbGFtcC5hKGY/cGFyc2VGbG9hdChoKS8xMDA6cGFyc2VGbG9hdChoKSk6MX0sdCl9LCJwYXJzZSIpLHN0cmluZ2lmeTpvKHQ9PntsZXR7cjplLGc6cixiOm4sYTppfT10O3JldHVybiBpPDE/YHJnYmEoJHtqdC5sYW5nLnJvdW5kKGUpfSwgJHtqdC5sYW5nLnJvdW5kKHIpfSwgJHtqdC5sYW5nLnJvdW5kKG4pfSwgJHtqdC5sYW5nLnJvdW5kKGkpfSlgOmByZ2IoJHtqdC5sYW5nLnJvdW5kKGUpfSwgJHtqdC5sYW5nLnJvdW5kKHIpfSwgJHtqdC5sYW5nLnJvdW5kKG4pfSlgfSwic3RyaW5naWZ5Iil9LE95PXR6fSk7dmFyIEJiZSxGaSxvdT1OKCgpPT57InVzZSBzdHJpY3QiO2M3KCk7SiQoKTtleigpO3J6KCk7TnkoKTtCYmU9e2Zvcm1hdDp7a2V5d29yZDp1NyxoZXg6bmQscmdiOk95LHJnYmE6T3ksaHNsOkl5LGhzbGE6SXl9LHBhcnNlOm8odD0+e2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdDtsZXQgZT1uZC5wYXJzZSh0KXx8T3kucGFyc2UodCl8fEl5LnBhcnNlKHQpfHx1Ny5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJHt0fSJgKX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+IXQuY2hhbmdlZCYmdC5jb2xvcj90LmNvbG9yOnQudHlwZS5pcyhCaS5IU0wpfHx0LmRhdGEucj09PXZvaWQgMD9JeS5zdHJpbmdpZnkodCk6dC5hPDF8fCFOdW1iZXIuaXNJbnRlZ2VyKHQucil8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuZyl8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuYik/T3kuc3RyaW5naWZ5KHQpOm5kLnN0cmluZ2lmeSh0KSwic3RyaW5naWZ5Iil9LEZpPUJiZX0pO3ZhciBGYmUsdDMsaDc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO291KCk7RmJlPW8oKHQsZSk9PntsZXQgcj1GaS5wYXJzZSh0KTtmb3IobGV0IG4gaW4gZSlyW25dPWp0LmNoYW5uZWwuY2xhbXBbbl0oZVtuXSk7cmV0dXJuIEZpLnN0cmluZ2lmeShyKX0sImNoYW5nZSIpLHQzPUZiZX0pO3ZhciAkYmUsUWEsZjc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO015KCk7b3UoKTtoNygpOyRiZT1vKCh0LGUscj0wLG49MSk9PntpZih0eXBlb2YgdCE9Im51bWJlciIpcmV0dXJuIHQzKHQse2E6ZX0pO2xldCBpPXVoLnNldCh7cjpqdC5jaGFubmVsLmNsYW1wLnIodCksZzpqdC5jaGFubmVsLmNsYW1wLmcoZSksYjpqdC5jaGFubmVsLmNsYW1wLmIociksYTpqdC5jaGFubmVsLmNsYW1wLmEobil9KTtyZXR1cm4gRmkuc3RyaW5naWZ5KGkpfSwicmdiYSIpLFFhPSRiZX0pO3ZhciB6YmUsaWQsbno9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO291KCk7emJlPW8oKHQsZSk9Pmp0Lmxhbmcucm91bmQoRmkucGFyc2UodClbZV0pLCJjaGFubmVsIiksaWQ9emJlfSk7dmFyIEdiZSxpeixhej1OKCgpPT57InVzZSBzdHJpY3QiO0tsKCk7b3UoKTtHYmU9byh0PT57bGV0e3I6ZSxnOnIsYjpufT1GaS5wYXJzZSh0KSxpPS4yMTI2Kmp0LmNoYW5uZWwudG9MaW5lYXIoZSkrLjcxNTIqanQuY2hhbm5lbC50b0xpbmVhcihyKSsuMDcyMipqdC5jaGFubmVsLnRvTGluZWFyKG4pO3JldHVybiBqdC5sYW5nLnJvdW5kKGkpfSwibHVtaW5hbmNlIiksaXo9R2JlfSk7dmFyIFZiZSxzeixvej1OKCgpPT57InVzZSBzdHJpY3QiO2F6KCk7VmJlPW8odD0+aXoodCk+PS41LCJpc0xpZ2h0Iiksc3o9VmJlfSk7dmFyIFViZSxsYSxsej1OKCgpPT57InVzZSBzdHJpY3QiO296KCk7VWJlPW8odD0+IXN6KHQpLCJpc0RhcmsiKSxsYT1VYmV9KTt2YXIgSGJlLHIzLGQ3PU4oKCk9PnsidXNlIHN0cmljdCI7S2woKTtvdSgpO0hiZT1vKCh0LGUscik9PntsZXQgbj1GaS5wYXJzZSh0KSxpPW5bZV0sYT1qdC5jaGFubmVsLmNsYW1wW2VdKGkrcik7cmV0dXJuIGkhPT1hJiYobltlXT1hKSxGaS5zdHJpbmdpZnkobil9LCJhZGp1c3RDaGFubmVsIikscjM9SGJlfSk7dmFyIFdiZSxMdCxjej1OKCgpPT57InVzZSBzdHJpY3QiO2Q3KCk7V2JlPW8oKHQsZSk9PnIzKHQsImwiLGUpLCJsaWdodGVuIiksTHQ9V2JlfSk7dmFyIHFiZSxPdCx1ej1OKCgpPT57InVzZSBzdHJpY3QiO2Q3KCk7cWJlPW8oKHQsZSk9PnIzKHQsImwiLC1lKSwiZGFya2VuIiksT3Q9cWJlfSk7dmFyIFliZSxNZSxoej1OKCgpPT57InVzZSBzdHJpY3QiO291KCk7aDcoKTtZYmU9bygodCxlKT0+e2xldCByPUZpLnBhcnNlKHQpLG49e307Zm9yKGxldCBpIGluIGUpZVtpXSYmKG5baV09cltpXStlW2ldKTtyZXR1cm4gdDModCxuKX0sImFkanVzdCIpLE1lPVliZX0pO3ZhciBYYmUsZnosZHo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvdSgpO2Y3KCk7WGJlPW8oKHQsZSxyPTUwKT0+e2xldHtyOm4sZzppLGI6YSxhOnN9PUZpLnBhcnNlKHQpLHtyOmwsZzp1LGI6aCxhOmZ9PUZpLnBhcnNlKGUpLGQ9ci8xMDAscD1kKjItMSxtPXMtZix5PSgocCptPT09LTE/cDoocCttKS8oMStwKm0pKSsxKS8yLHY9MS15LHg9bip5K2wqdixiPWkqeSt1KnYsVD1hKnkraCp2LFM9cypkK2YqKDEtZCk7cmV0dXJuIFFhKHgsYixULFMpfSwibWl4IiksZno9WGJlfSk7dmFyIGpiZSx3dCxwej1OKCgpPT57InVzZSBzdHJpY3QiO291KCk7ZHooKTtqYmU9bygodCxlPTEwMCk9PntsZXQgcj1GaS5wYXJzZSh0KTtyZXR1cm4gci5yPTI1NS1yLnIsci5nPTI1NS1yLmcsci5iPTI1NS1yLmIsZnoocix0LGUpfSwiaW52ZXJ0Iiksd3Q9amJlfSk7dmFyIG16PU4oKCk9PnsidXNlIHN0cmljdCI7ZjcoKTtueigpO2x6KCk7Y3ooKTt1eigpO2h6KCk7cHooKX0pO3ZhciBLcz1OKCgpPT57InVzZSBzdHJpY3QiO216KCl9KTt2YXIgaGgsZmgsUHk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoaD0iI2ZmZmZmZiIsZmg9IiNmMmYyZjIifSk7dmFyIFNpLHkwPU4oKCk9PnsidXNlIHN0cmljdCI7S3MoKTtTaT1vKCh0LGUpPT5lP01lKHQse3M6LTQwLGw6MTB9KTpNZSh0LHtzOi00MCxsOi0xMH0pLCJta0JvcmRlciIpfSk7dmFyIG03LGd6LHl6PU4oKCk9PnsidXNlIHN0cmljdCI7S3MoKTtQeSgpO3kwKCk7bTc9Y2xhc3N7c3RhdGlje28odGhpcywiVGhlbWUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgifXVwZGF0ZUNvbG9ycygpe2lmKHRoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZWVlIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTEyMH0pLHRoaXMudGVydGlhcnlDb2xvcj10aGlzLnRlcnRpYXJ5Q29sb3J8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE4MCxsOjV9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcnx8U2kodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxTaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fFNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLm5vdGVCb3JkZXJDb2xvcnx8U2kodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fHd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9dGhpcy50ZXJ0aWFyeVRleHRDb2xvcnx8d3QodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcnx8d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmFycm93aGVhZENvbG9yPXRoaXMuYXJyb3doZWFkQ29sb3J8fHd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmJvcmRlcjI9dGhpcy5ib3JkZXIyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubm9kZUJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5tYWluQmtnPXRoaXMubWFpbkJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5jbHVzdGVyQmtnPXRoaXMuY2x1c3RlckJrZ3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmNsdXN0ZXJCb3JkZXJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5kZWZhdWx0TGlua0NvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50aXRsZUNvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmVkZ2VMYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP090KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fE90KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMTApLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj10aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3J8fHd0KHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPXRoaXMuZXhjbHVkZUJrZ0NvbG9yfHwiI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMudGFza0JrZ0NvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5hY3RpdmVUYXNrQmtnQ29sb3J8fEx0KHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy52ZXJ0TGluZUNvbG9yPXRoaXMudmVydExpbmVDb2xvcnx8Im5hdnkiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnBlcnNvbkJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5wZXJzb25Ca2d8fHRoaXMubWFpbkJrZyx0aGlzLmRhcmtNb2RlPyh0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8T3QodGhpcy5tYWluQmtnLDUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8T3QodGhpcy5tYWluQmtnLDEwKSk6KHRoaXMucm93T2RkPXRoaXMucm93T2RkfHxMdCh0aGlzLm1haW5Ca2csNzUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8THQodGhpcy5tYWluQmtnLDUpKSx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMCxsOjE1MH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmRhcmtNb2RlKWZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlIityXT1PdCh0aGlzWyJjU2NhbGUiK3JdLDc1KTtlbHNlIGZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlIityXT1PdCh0aGlzWyJjU2NhbGUiK3JdLDI1KTtmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZUludiIrcl09dGhpc1siY1NjYWxlSW52IityXXx8d3QodGhpc1siY1NjYWxlIityXSk7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK3JdPXRoaXNbImNTY2FsZVBlZXIiK3JdfHxMdCh0aGlzWyJjU2NhbGUiK3JdLDEwKTp0aGlzWyJjU2NhbGVQZWVyIityXT10aGlzWyJjU2NhbGVQZWVyIityXXx8T3QodGhpc1siY1NjYWxlIityXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrcl09dGhpc1siY1NjYWxlTGFiZWwiK3JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtsZXQgZT10aGlzLmRhcmtNb2RlPy00Oi0xO2ZvcihsZXQgcj0wO3I8NTtyKyspdGhpc1sic3VyZmFjZSIrcl09dGhpc1sic3VyZmFjZSIrcl18fE1lKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDplKig1K3IqMyl9KSx0aGlzWyJzdXJmYWNlUGVlciIrcl09dGhpc1sic3VyZmFjZVBlZXIiK3JdfHxNZSh0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6ZSooOCtyKjMpfSk7dGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXRoaXMuZmlsbFR5cGU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9dGhpcy5maWxsVHlwZTd8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTIwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnJhZGFyPXtheGlzQ29sb3I6dGhpcy5yYWRhcj8uYXhpc0NvbG9yfHx0aGlzLmxpbmVDb2xvcixheGlzU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uYXhpc1N0cm9rZVdpZHRofHwyLGF4aXNMYWJlbEZvbnRTaXplOnRoaXMucmFkYXI/LmF4aXNMYWJlbEZvbnRTaXplfHwxMixjdXJ2ZU9wYWNpdHk6dGhpcy5yYWRhcj8uY3VydmVPcGFjaXR5fHwuNSxjdXJ2ZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmN1cnZlU3Ryb2tlV2lkdGh8fDIsZ3JhdGljdWxlQ29sb3I6dGhpcy5yYWRhcj8uZ3JhdGljdWxlQ29sb3J8fCIjREVERURFIixncmF0aWN1bGVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5ncmF0aWN1bGVTdHJva2VXaWR0aHx8MSxncmF0aWN1bGVPcGFjaXR5OnRoaXMucmFkYXI/LmdyYXRpY3VsZU9wYWNpdHl8fC4zLGxlZ2VuZEJveFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kQm94U2l6ZXx8MTIsbGVnZW5kRm9udFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kRm9udFNpemV8fDEyfSx0aGlzLmFyY2hFZGdlQ29sb3I9dGhpcy5hcmNoRWRnZUNvbG9yfHwiIzc3NyIsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9dGhpcy5hcmNoRWRnZUFycm93Q29sb3J8fCIjNzc3Iix0aGlzLmFyY2hFZGdlV2lkdGg9dGhpcy5hcmNoRWRnZVdpZHRofHwiMyIsdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcj10aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yfHwiIzAwMCIsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD10aGlzLmFyY2hHcm91cEJvcmRlcldpZHRofHwiMnB4Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGxhKHRoaXMucXVhZHJhbnQxRmlsbCk/THQodGhpcy5xdWFkcmFudDFGaWxsKTpPdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0ZGRjRERCwjRkZEOEIxLCNGRkEwN0EsI0VDRUZGMSwjRDZEQkRGLCNDM0UwQTgsI0ZGQjZBNCwjRkZENzRELCM3MzhGQTcsI0ZGRkZGMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T3QodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9THQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9THQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9THQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9THQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9THQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9THQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9THQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9THQodGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1PdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1PdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1PdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1PdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1PdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1PdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1PdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1PdCh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHx3dCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxoaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxmaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LGd6PW8odD0+e2xldCBlPW5ldyBtNztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgZzcsdnoseHo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLcygpO3kwKCk7Zzc9Y2xhc3N7c3RhdGlje28odGhpcywiVGhlbWUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9THQodGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPVNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9d3QodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj13dCh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjMWYyMDIwIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5tYWluQ29udHJhc3RDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRhcmtUZXh0Q29sb3I9THQod3QoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iI2NjYyIsdGhpcy5ib3JkZXIyPVFhKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjRjlGRkZFIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9ImJsYWNrIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PdCgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPU90KHRoaXMuc2VjdGlvbkJrZ0NvbG9yLDEwKSx0aGlzLnRhc2tCb3JkZXJDb2xvcj1RYSgyNTUsMjU1LDI1NSw3MCksdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9UWEoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy52ZXJ0TGluZUNvbG9yPSIjMDBCRkZGIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5yb3dPZGQ9dGhpcy5yb3dPZGR8fEx0KHRoaXMubWFpbkJrZyw1KXx8IiNmZmZmZmYiLHRoaXMucm93RXZlbj10aGlzLnJvd0V2ZW58fE90KHRoaXMubWFpbkJrZywxMCksdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXVwZGF0ZUNvbG9ycygpe3RoaXMuc2Vjb25kQmtnPUx0KHRoaXMubWFpbkJrZywxNiksdGhpcy5saW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFycm93aGVhZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9THQodGhpcy5sYWJlbEJhY2tncm91bmQsMjUpLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5zaWduYWxDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IsdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmJhY2tncm91bmQsdGhpcy50YXNrQmtnQ29sb3I9THQodGhpcy5tYWluQmtnLDIzKSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy5kYXJrVGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLmdyaWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy5kYXJrVGV4dENvbG9yLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiMwYjAwMDAiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNGQxMDM3Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiIzNmNTI1OCIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM0ZjJmMWIiLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjNmUwYTBhIix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiIzNiMDA0OCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiM5OTVhMDEiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjMTU0NzA2Iix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiIzE2MTcyMiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzAwMjk2ZiIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzAxNjI5YyIsdGhpcy5jU2NhbGUxMj10aGlzLmNTY2FsZTEyfHwiIzAxMDAyOSIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHx3dCh0aGlzWyJjU2NhbGUiK2VdKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZVBlZXIiK2VdPXRoaXNbImNTY2FsZVBlZXIiK2VdfHxMdCh0aGlzWyJjU2NhbGUiK2VdLDEwKTtmb3IobGV0IGU9MDtlPDU7ZSsrKXRoaXNbInN1cmZhY2UiK2VdPXRoaXNbInN1cmZhY2UiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC0xMCtlKjQpfSksdGhpc1sic3VyZmFjZVBlZXIiK2VdPXRoaXNbInN1cmZhY2VQZWVyIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtNytlKjQpfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVMYWJlbCIrZV09dGhpc1siY1NjYWxlTGFiZWwiK2VdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbInBpZSIrZV09dGhpc1siY1NjYWxlIitlXTt0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGxhKHRoaXMucXVhZHJhbnQxRmlsbCk/THQodGhpcy5xdWFkcmFudDFGaWxsKTpPdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiIzM0OThkYiwjMmVjYzcxLCNlNzRjM2MsI2YxYzQwZiwjYmRjM2M3LCNmZmZmZmYsIzM0NDk1ZSwjOWI1OWI2LCMxYWJjOWMsI2U2N2UyMiJ9LHRoaXMucGFja2V0PXtzdGFydEJ5dGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsZW5kQnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixsYWJlbENvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcix0aXRsZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixibG9ja1N0cm9rZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixibG9ja0ZpbGxDb2xvcjp0aGlzLmJhY2tncm91bmR9LHRoaXMucmFkYXI9e2F4aXNDb2xvcjp0aGlzLnJhZGFyPy5heGlzQ29sb3J8fHRoaXMubGluZUNvbG9yLGF4aXNTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5heGlzU3Ryb2tlV2lkdGh8fDIsYXhpc0xhYmVsRm9udFNpemU6dGhpcy5yYWRhcj8uYXhpc0xhYmVsRm9udFNpemV8fDEyLGN1cnZlT3BhY2l0eTp0aGlzLnJhZGFyPy5jdXJ2ZU9wYWNpdHl8fC41LGN1cnZlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uY3VydmVTdHJva2VXaWR0aHx8MixncmF0aWN1bGVDb2xvcjp0aGlzLnJhZGFyPy5ncmF0aWN1bGVDb2xvcnx8IiNERURFREUiLGdyYXRpY3VsZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmdyYXRpY3VsZVN0cm9rZVdpZHRofHwxLGdyYXRpY3VsZU9wYWNpdHk6dGhpcy5yYWRhcj8uZ3JhdGljdWxlT3BhY2l0eXx8LjMsbGVnZW5kQm94U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRCb3hTaXplfHwxMixsZWdlbmRGb250U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRGb250U2l6ZXx8MTJ9LHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP090KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD1MdCh0aGlzLnNlY29uZGFyeUNvbG9yLDIwKSx0aGlzLmdpdDE9THQodGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLDIwKSx0aGlzLmdpdDI9THQodGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mz1MdCh0aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLDIwKSx0aGlzLmdpdDQ9THQodGhpcy5waWU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSwyMCksdGhpcy5naXQ1PUx0KHRoaXMucGllNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksMTApLHRoaXMuZ2l0Nj1MdCh0aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksMTApLHRoaXMuZ2l0Nz1MdCh0aGlzLnBpZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLDIwKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHx3dCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fEx0KHRoaXMuYmFja2dyb3VuZCwxMiksdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8THQodGhpcy5iYWNrZ3JvdW5kLDIpLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fCIjOTk5In1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LHZ6PW8odD0+e2xldCBlPW5ldyBnNztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgeTcsZGgsQnk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLcygpO3kwKCk7UHkoKTt5Nz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVNpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj13dCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9d3QodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj13dCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0icmdiYSgyMzIsMjMyLDIzMiwgMC44KSIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudmVydExpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9UWEoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnZlcnRMaW5lQ29sb3I9Im5hdnkiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFyY2hFZGdlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlV2lkdGg9IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD0iMnB4Iix0aGlzLnJvd09kZD0iY2FsY3VsYXRlZCIsdGhpcy5yb3dFdmVuPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIiLHRoaXMudXBkYXRlQ29sb3JzKCl9dXBkYXRlQ29sb3JzKCl7dGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXMuY1NjYWxlUGVlcjE9dGhpcy5jU2NhbGVQZWVyMXx8T3QodGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpcy5jU2NhbGVQZWVyMj10aGlzLmNTY2FsZVBlZXIyfHxPdCh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlIitlXT1PdCh0aGlzWyJjU2NhbGUiK2VdLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8T3QodGhpc1siY1NjYWxlIitlXSwyNSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fE1lKHRoaXNbImNTY2FsZSIrZV0se2g6MTgwfSk7Zm9yKGxldCBlPTA7ZTw1O2UrKyl0aGlzWyJzdXJmYWNlIitlXT10aGlzWyJzdXJmYWNlIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLGw6LSg1K2UqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsbDotKDcrZSo1KX0pO2lmKHRoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMubGFiZWxUZXh0Q29sb3IhPT0iY2FsY3VsYXRlZCIpe3RoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMz10aGlzLmNTY2FsZUxhYmVsM3x8d3QodGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVMYWJlbCIrZV09dGhpc1siY1NjYWxlTGFiZWwiK2VdfHx0aGlzLmxhYmVsVGV4dENvbG9yfXRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPUx0KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8THQodGhpcy5wcmltYXJ5Q29sb3IsNzUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8THQodGhpcy5wcmltYXJ5Q29sb3IsMSksdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8bGEodGhpcy5xdWFkcmFudDFGaWxsKT9MdCh0aGlzLnF1YWRyYW50MUZpbGwpOk90KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmFkYXI9e2F4aXNDb2xvcjp0aGlzLnJhZGFyPy5heGlzQ29sb3J8fHRoaXMubGluZUNvbG9yLGF4aXNTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5heGlzU3Ryb2tlV2lkdGh8fDIsYXhpc0xhYmVsRm9udFNpemU6dGhpcy5yYWRhcj8uYXhpc0xhYmVsRm9udFNpemV8fDEyLGN1cnZlT3BhY2l0eTp0aGlzLnJhZGFyPy5jdXJ2ZU9wYWNpdHl8fC41LGN1cnZlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uY3VydmVTdHJva2VXaWR0aHx8MixncmF0aWN1bGVDb2xvcjp0aGlzLnJhZGFyPy5ncmF0aWN1bGVDb2xvcnx8IiNERURFREUiLGdyYXRpY3VsZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmdyYXRpY3VsZVN0cm9rZVdpZHRofHwxLGdyYXRpY3VsZU9wYWNpdHk6dGhpcy5yYWRhcj8uZ3JhdGljdWxlT3BhY2l0eXx8LjMsbGVnZW5kQm94U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRCb3hTaXplfHwxMixsZWdlbmRGb250U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRGb250U2l6ZXx8MTJ9LHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjRUNFQ0ZGLCM4NDkzQTYsI0ZGQzNBMCwjRENEREUxLCNCOEU5OTQsI0QxQTM2RiwjQzNDREU2LCNGRkI2QzEsIzQ5NjA3OCwjRjhGM0UzIn0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1MdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1MdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1MdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1MdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1MdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1MdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1MdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1MdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPU90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPU90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPU90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPU90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PU90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PU90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PU90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PU90KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fE90KHd0KHRoaXMuZ2l0MCksMjUpLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGhoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGZofWNhbGN1bGF0ZShlKXtpZihPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKG49Pnt0aGlzW25dPT09ImNhbGN1bGF0ZWQiJiYodGhpc1tuXT12b2lkIDApfSksdHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LGRoPW8odD0+e2xldCBlPW5ldyB5NztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgdjcsYnosVHo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLcygpO1B5KCk7eTAoKTt2Nz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9THQoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPVNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiMzMzMiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9IiMzMzMiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSIjMzMzIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iIzMyNjkzMiIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iIzZlYWE0OSIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiM2ZWFhNDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMudmVydExpbmVDb2xvcj0iIzAwQkZGRiIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VXaWR0aD0iMyIsdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFyY2hHcm91cEJvcmRlcldpZHRoPSIycHgiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5hY3RvckJvcmRlcj1PdCh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fE90KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8T3QodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09T3QodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fE90KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxNZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBlPTA7ZTw1O2UrKyl0aGlzWyJzdXJmYWNlIitlXT10aGlzWyJzdXJmYWNlIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg1K2UqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8THQodGhpcy5tYWluQmtnLDc1KXx8IiNmZmZmZmYiLHRoaXMucm93RXZlbj10aGlzLnJvd0V2ZW58fEx0KHRoaXMubWFpbkJrZywyMCksdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxNZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fE1lKHRoaXMudGVydGlhcnlDb2xvcix7aDo0MCxsOi00MH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNTB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi01MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTUwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxsYSh0aGlzLnF1YWRyYW50MUZpbGwpP0x0KHRoaXMucXVhZHJhbnQxRmlsbCk6T3QodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5wYWNrZXQ9e3N0YXJ0Qnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixlbmRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGxhYmVsQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRpdGxlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrU3Ryb2tlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrRmlsbENvbG9yOnRoaXMubWFpbkJrZ30sdGhpcy5yYWRhcj17YXhpc0NvbG9yOnRoaXMucmFkYXI/LmF4aXNDb2xvcnx8dGhpcy5saW5lQ29sb3IsYXhpc1N0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmF4aXNTdHJva2VXaWR0aHx8MixheGlzTGFiZWxGb250U2l6ZTp0aGlzLnJhZGFyPy5heGlzTGFiZWxGb250U2l6ZXx8MTIsY3VydmVPcGFjaXR5OnRoaXMucmFkYXI/LmN1cnZlT3BhY2l0eXx8LjUsY3VydmVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5jdXJ2ZVN0cm9rZVdpZHRofHwyLGdyYXRpY3VsZUNvbG9yOnRoaXMucmFkYXI/LmdyYXRpY3VsZUNvbG9yfHwiI0RFREVERSIsZ3JhdGljdWxlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uZ3JhdGljdWxlU3Ryb2tlV2lkdGh8fDEsZ3JhdGljdWxlT3BhY2l0eTp0aGlzLnJhZGFyPy5ncmF0aWN1bGVPcGFjaXR5fHwuMyxsZWdlbmRCb3hTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEJveFNpemV8fDEyLGxlZ2VuZEZvbnRTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEZvbnRTaXplfHwxMn0sdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNDREU0OTgsI0ZGNkI2QiwjQTBEMkRCLCNEN0JERTIsI0YwRjBGMCwjRkZDM0EwLCM3RkQ4QkUsI0ZGOUE4QiwjRkFGM0UwLCNGRkYxNzYifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1MdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1MdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1MdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1MdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1MdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1MdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1MdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1MdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPU90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPU90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPU90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPU90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PU90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PU90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PU90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PU90KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fHd0KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8d3QodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHx3dCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fHd0KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8d3QodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHx3dCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fHd0KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8d3QodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8d3QodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8aGgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8Zmh9Y2FsY3VsYXRlKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59bGV0IHI9T2JqZWN0LmtleXMoZSk7ci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLHIuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSl9fSxiej1vKHQ9PntsZXQgZT1uZXcgdjc7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9LCJnZXRUaGVtZVZhcmlhYmxlcyIpfSk7dmFyIHg3LHd6LGt6PU4oKCk9PnsidXNlIHN0cmljdCI7S3MoKTt5MCgpO1B5KCk7eDc9Y2xhc3N7c3RhdGlje28odGhpcywiVGhlbWUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMucHJpbWFyeUNvbG9yPSIjZWVlIix0aGlzLmNvbnRyYXN0PSIjNzA3MDcwIix0aGlzLnNlY29uZGFyeUNvbG9yPUx0KHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYmFja2dyb3VuZD0iI2ZmZmZmZiIsdGhpcy50ZXJ0aWFyeUNvbG9yPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPVNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9d3QodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj13dCh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy52ZXJ0TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5yb3dPZGQ9dGhpcy5yb3dPZGR8fEx0KHRoaXMubWFpbkJrZyw3NSl8fCIjZmZmZmZmIix0aGlzLnJvd0V2ZW49dGhpcy5yb3dFdmVufHwiI2Y0ZjRmNCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1MdCh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPUx0KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHwiIzU1NSIsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiNGNEY0RjQiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNTU1Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiI0JCQiIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM3NzciLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjOTk5Iix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiI0RERCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiNGRkYiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjREREIix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiI0JCQiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzk5OSIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzc3NyI7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fHd0KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8THQodGhpc1siY1NjYWxlIitlXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fE90KHRoaXNbImNTY2FsZSIrZV0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx0aGlzLmNTY2FsZTEsdGhpcy5jU2NhbGVMYWJlbDI9dGhpcy5jU2NhbGVMYWJlbDJ8fHRoaXMuY1NjYWxlMTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDUrZSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitlXT10aGlzWyJzdXJmYWNlUGVlciIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLnNlY3Rpb25Ca2dDb2xvcj1MdCh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9THQodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9T3QodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1MdCh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9T3QodGhpcy5jcml0QmtnQ29sb3IsMTApLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy5jcml0QmtnQ29sb3IsdGhpcy52ZXJ0TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8IiMwMDAiLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmNGY0ZjQiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5zdGF0ZUJvcmRlcj10aGlzLnN0YXRlQm9yZGVyfHwiIzAwMCIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iIzIyMiIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJwaWUiK2VdPXRoaXNbImNTY2FsZSIrZV07dGhpcy5waWUxMj10aGlzLnBpZTAsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxsYSh0aGlzLnF1YWRyYW50MUZpbGwpP0x0KHRoaXMucXVhZHJhbnQxRmlsbCk6T3QodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNFRUUsIzZCQjhFNCwjOEFDQjg4LCNDN0FDRDYsI0U4RENDMiwjRkZCMkE4LCNGRkYzODAsIzdFOEQ5MSwjRkZEOEIxLCNGQUYzRTAifSx0aGlzLnJhZGFyPXtheGlzQ29sb3I6dGhpcy5yYWRhcj8uYXhpc0NvbG9yfHx0aGlzLmxpbmVDb2xvcixheGlzU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uYXhpc1N0cm9rZVdpZHRofHwyLGF4aXNMYWJlbEZvbnRTaXplOnRoaXMucmFkYXI/LmF4aXNMYWJlbEZvbnRTaXplfHwxMixjdXJ2ZU9wYWNpdHk6dGhpcy5yYWRhcj8uY3VydmVPcGFjaXR5fHwuNSxjdXJ2ZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmN1cnZlU3Ryb2tlV2lkdGh8fDIsZ3JhdGljdWxlQ29sb3I6dGhpcy5yYWRhcj8uZ3JhdGljdWxlQ29sb3J8fCIjREVERURFIixncmF0aWN1bGVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5ncmF0aWN1bGVTdHJva2VXaWR0aHx8MSxncmF0aWN1bGVPcGFjaXR5OnRoaXMucmFkYXI/LmdyYXRpY3VsZU9wYWNpdHl8fC4zLGxlZ2VuZEJveFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kQm94U2l6ZXx8MTIsbGVnZW5kRm9udFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kRm9udFNpemV8fDEyfSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9T3QodGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHx3dCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxoaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxmaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LHd6PW8odD0+e2xldCBlPW5ldyB4NztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgRW8sbjM9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5eigpO3h6KCk7QnkoKTtUeigpO2t6KCk7RW89e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOmd6fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczp2en0sZGVmYXVsdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZGh9LGZvcmVzdDp7Z2V0VGhlbWVWYXJpYWJsZXM6Ynp9LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOnd6fX19KTt2YXIgdWwsRXo9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1bD17Zmxvd2NoYXJ0Ont1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxzdWJHcmFwaFRpdGxlTWFyZ2luOnt0b3A6MCxib3R0b206MH0sZGlhZ3JhbVBhZGRpbmc6OCxodG1sTGFiZWxzOiEwLG5vZGVTcGFjaW5nOjUwLHJhbmtTcGFjaW5nOjUwLGN1cnZlOiJiYXNpcyIscGFkZGluZzoxNSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLHdyYXBwaW5nV2lkdGg6MjAwLGluaGVyaXREaXI6ITF9LHNlcXVlbmNlOnt1c2VNYXhXaWR0aDohMCxoaWRlVW51c2VkUGFydGljaXBhbnRzOiExLGFjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMH0sZ2FudHQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix0b3BBeGlzOiExLGRpc3BsYXlNb2RlOiIiLHdlZWtkYXk6InN1bmRheSJ9LGpvdXJuZXk6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLG1heExhYmVsV2lkdGg6MzYwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl0sdGl0bGVDb2xvcjoiIix0aXRsZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGl0bGVGb250U2l6ZToiNGV4In0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITEsaGlkZUVtcHR5TWVtYmVyc0JveDohMX0sc3RhdGU6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpdmlkZXJNYXJnaW46MTAsc2l6ZVVuaXQ6NSxwYWRkaW5nOjgsdGV4dEhlaWdodDoxMCx0aXRsZVNoaWZ0Oi0xNSxub3RlTWFyZ2luOjEwLGZvcmtXaWR0aDo3MCxmb3JrSGVpZ2h0OjcsbWluaVBhZGRpbmc6Mixmb250U2l6ZUZhY3Rvcjo1LjAyLGZvbnRTaXplOjI0LGxhYmVsSGVpZ2h0OjE2LGVkZ2VMZW5ndGhGYWN0b3I6IjIwIixjb21wb3NpdFRpdGxlU2l6ZTozNSxyYWRpdXM6NSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxlcjp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LG5vZGVTcGFjaW5nOjE0MCxyYW5rU3BhY2luZzo4MCxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd0RhdGFMYWJlbDohMSxzaG93VGl0bGU6ITAseEF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSx5QXhpczp7JHJlZjoiIy8kZGVmcy9YWUNoYXJ0QXhpc0NvbmZpZyIsc2hvd0xhYmVsOiEwLGxhYmVsRm9udFNpemU6MTQsbGFiZWxQYWRkaW5nOjUsc2hvd1RpdGxlOiEwLHRpdGxlRm9udFNpemU6MTYsdGl0bGVQYWRkaW5nOjUsc2hvd1RpY2s6ITAsdGlja0xlbmd0aDo1LHRpY2tXaWR0aDoyLHNob3dBeGlzTGluZTohMCxheGlzTGluZVdpZHRoOjJ9LGNoYXJ0T3JpZW50YXRpb246InZlcnRpY2FsIixwbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQ6NTB9LHJlcXVpcmVtZW50Ont1c2VNYXhXaWR0aDohMCxyZWN0X2ZpbGw6IiNmOWY5ZjkiLHRleHRfY29sb3I6IiMzMzMiLHJlY3RfYm9yZGVyX3NpemU6IjAuNXB4IixyZWN0X2JvcmRlcl9jb2xvcjoiI2JiYiIscmVjdF9taW5fd2lkdGg6MjAwLHJlY3RfbWluX2hlaWdodDoyMDAsZm9udFNpemU6MTQscmVjdF9wYWRkaW5nOjEwLGxpbmVfaGVpZ2h0OjIwfSxtaW5kbWFwOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjEwLG1heE5vZGVXaWR0aDoyMDB9LGthbmJhbjp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzo4LHNlY3Rpb25XaWR0aDoyMDAsdGlja2V0QmFzZVVybDoiIn0sdGltZWxpbmU6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl0sZGlzYWJsZU11bHRpY29sb3I6ITF9LGdpdEdyYXBoOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaWFncmFtUGFkZGluZzo4LG5vZGVMYWJlbDp7d2lkdGg6NzUsaGVpZ2h0OjEwMCx4Oi0yNSx5OjB9LG1haW5CcmFuY2hOYW1lOiJtYWluIixtYWluQnJhbmNoT3JkZXI6MCxzaG93Q29tbWl0TGFiZWw6ITAsc2hvd0JyYW5jaGVzOiEwLHJvdGF0ZUNvbW1pdExhYmVsOiEwLHBhcmFsbGVsQ29tbWl0czohMSxhcnJvd01hcmtlckFic29sdXRlOiExfSxjNDp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYzRTaGFwZU1hcmdpbjo1MCxjNFNoYXBlUGFkZGluZzoyMCx3aWR0aDoyMTYsaGVpZ2h0OjYwLGJveE1hcmdpbjoxMCxjNFNoYXBlSW5Sb3c6NCxuZXh0TGluZVBhZGRpbmdYOjAsYzRCb3VuZGFyeUluUm93OjIscGVyc29uRm9udFNpemU6MTQscGVyc29uRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHBlcnNvbkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfcGVyc29uRm9udFNpemU6MTQsZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHQ6Im5vcm1hbCIsc3lzdGVtRm9udFNpemU6MTQsc3lzdGVtRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHN5c3RlbUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfc3lzdGVtRm9udFNpemU6MTQsZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHQ6Im5vcm1hbCIsc3lzdGVtX2RiRm9udFNpemU6MTQsc3lzdGVtX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHN5c3RlbV9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemU6MTQsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsc3lzdGVtX3F1ZXVlRm9udFNpemU6MTQsc3lzdGVtX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHN5c3RlbV9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemU6MTQsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsYm91bmRhcnlGb250U2l6ZToxNCxib3VuZGFyeUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxib3VuZGFyeUZvbnRXZWlnaHQ6Im5vcm1hbCIsbWVzc2FnZUZvbnRTaXplOjEyLG1lc3NhZ2VGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6Im5vcm1hbCIsY29udGFpbmVyRm9udFNpemU6MTQsY29udGFpbmVyRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbnRhaW5lckZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemU6MTQsZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHQ6Im5vcm1hbCIsY29udGFpbmVyX2RiRm9udFNpemU6MTQsY29udGFpbmVyX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbnRhaW5lcl9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemU6MTQsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsY29udGFpbmVyX3F1ZXVlRm9udFNpemU6MTQsY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFNpemU6MTQsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsY29tcG9uZW50Rm9udFNpemU6MTQsY29tcG9uZW50Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbXBvbmVudEZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemU6MTQsZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHQ6Im5vcm1hbCIsY29tcG9uZW50X2RiRm9udFNpemU6MTQsY29tcG9uZW50X2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbXBvbmVudF9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemU6MTQsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsY29tcG9uZW50X3F1ZXVlRm9udFNpemU6MTQsY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFNpemU6MTQsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsd3JhcDohMCx3cmFwUGFkZGluZzoxMCxwZXJzb25fYmdfY29sb3I6IiMwODQyN0IiLHBlcnNvbl9ib3JkZXJfY29sb3I6IiMwNzNCNkYiLGV4dGVybmFsX3BlcnNvbl9iZ19jb2xvcjoiIzY4Njg2OCIsZXh0ZXJuYWxfcGVyc29uX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsc3lzdGVtX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fZGJfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9kYl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9xdWV1ZV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsZXh0ZXJuYWxfc3lzdGVtX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fZGJfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9kYl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsY29udGFpbmVyX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfZGJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9kYl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9xdWV1ZV9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsZXh0ZXJuYWxfY29udGFpbmVyX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfZGJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsY29tcG9uZW50X2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfZGJfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9kYl9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9xdWV1ZV9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsZXh0ZXJuYWxfY29tcG9uZW50X2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfZGJfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiJ9LHNhbmtleTp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NjAwLGhlaWdodDo0MDAsbGlua0NvbG9yOiJncmFkaWVudCIsbm9kZUFsaWdubWVudDoianVzdGlmeSIsc2hvd1ZhbHVlczohMCxwcmVmaXg6IiIsc3VmZml4OiIifSxibG9jazp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzo4fSxwYWNrZXQ6e3VzZU1heFdpZHRoOiEwLHJvd0hlaWdodDozMixiaXRXaWR0aDozMixiaXRzUGVyUm93OjMyLHNob3dCaXRzOiEwLHBhZGRpbmdYOjUscGFkZGluZ1k6NX0sYXJjaGl0ZWN0dXJlOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjQwLGljb25TaXplOjgwLGZvbnRTaXplOjE2fSxyYWRhcjp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NjAwLGhlaWdodDo2MDAsbWFyZ2luVG9wOjUwLG1hcmdpblJpZ2h0OjUwLG1hcmdpbkJvdHRvbTo1MCxtYXJnaW5MZWZ0OjUwLGF4aXNTY2FsZUZhY3RvcjoxLGF4aXNMYWJlbEZhY3RvcjoxLjA1LGN1cnZlVGVuc2lvbjouMTd9LHRoZW1lOiJkZWZhdWx0Iixsb29rOiJjbGFzc2ljIixoYW5kRHJhd25TZWVkOjAsbGF5b3V0OiJkYWdyZSIsbWF4VGV4dFNpemU6NWU0LG1heEVkZ2VzOjUwMCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSIsInN1cHByZXNzRXJyb3JSZW5kZXJpbmciLCJtYXhFZGdlcyJdLGxlZ2FjeU1hdGhNTDohMSxmb3JjZUxlZ2FjeU1hdGhNTDohMSxkZXRlcm1pbmlzdGljSWRzOiExLGZvbnRTaXplOjE2LG1hcmtkb3duQXV0b1dyYXA6ITAsc3VwcHJlc3NFcnJvclJlbmRlcmluZzohMX19KTt2YXIgU3osQ3osQXosb3IsX2E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuMygpO0V6KCk7U3o9ey4uLnVsLGRldGVybWluaXN0aWNJRFNlZWQ6dm9pZCAwLGVsazp7bWVyZ2VFZGdlczohMSxub2RlUGxhY2VtZW50U3RyYXRlZ3k6IkJSQU5ERVNfS09FUEYifSx0aGVtZUNTUzp2b2lkIDAsdGhlbWVWYXJpYWJsZXM6RW8uZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcygpLHNlcXVlbmNlOnsuLi51bC5zZXF1ZW5jZSxtZXNzYWdlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSwibWVzc2FnZUZvbnQiKSxub3RlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSwibm90ZUZvbnQiKSxhY3RvckZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYWN0b3JGb250V2VpZ2h0fX0sImFjdG9yRm9udCIpfSxjbGFzczp7aGlkZUVtcHR5TWVtYmVyc0JveDohMX0sZ2FudHQ6ey4uLnVsLmdhbnR0LHRpY2tJbnRlcnZhbDp2b2lkIDAsdXNlV2lkdGg6dm9pZCAwfSxjNDp7Li4udWwuYzQsdXNlV2lkdGg6dm9pZCAwLHBlcnNvbkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMucGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnBlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5wZXJzb25Gb250V2VpZ2h0fX0sInBlcnNvbkZvbnQiKSxmbG93Y2hhcnQ6ey4uLnVsLmZsb3djaGFydCxpbmhlcml0RGlyOiExfSxleHRlcm5hbF9wZXJzb25Gb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodH19LCJleHRlcm5hbF9wZXJzb25Gb250Iiksc3lzdGVtRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbUZvbnRXZWlnaHR9fSwic3lzdGVtRm9udCIpLGV4dGVybmFsX3N5c3RlbUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0fX0sImV4dGVybmFsX3N5c3RlbUZvbnQiKSxzeXN0ZW1fZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtX2RiRm9udFdlaWdodH19LCJzeXN0ZW1fZGJGb250IiksZXh0ZXJuYWxfc3lzdGVtX2RiRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfc3lzdGVtX2RiRm9udCIpLHN5c3RlbV9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sInN5c3RlbV9xdWV1ZUZvbnQiKSxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodH19LCJleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250IiksY29udGFpbmVyRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lckZvbnRXZWlnaHR9fSwiY29udGFpbmVyRm9udCIpLGV4dGVybmFsX2NvbnRhaW5lckZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbnRhaW5lckZvbnQiKSxjb250YWluZXJfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyX2RiRm9udFdlaWdodH19LCJjb250YWluZXJfZGJGb250IiksZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udCIpLGNvbnRhaW5lcl9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sImNvbnRhaW5lcl9xdWV1ZUZvbnQiKSxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodH19LCJleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250IiksY29tcG9uZW50Rm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudEZvbnRXZWlnaHR9fSwiY29tcG9uZW50Rm9udCIpLGV4dGVybmFsX2NvbXBvbmVudEZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbXBvbmVudEZvbnQiKSxjb21wb25lbnRfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50X2RiRm9udFdlaWdodH19LCJjb21wb25lbnRfZGJGb250IiksZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udCIpLGNvbXBvbmVudF9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sImNvbXBvbmVudF9xdWV1ZUZvbnQiKSxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodH19LCJleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250IiksYm91bmRhcnlGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmJvdW5kYXJ5Rm9udFdlaWdodH19LCJib3VuZGFyeUZvbnQiKSxtZXNzYWdlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSwibWVzc2FnZUZvbnQiKX0scGllOnsuLi51bC5waWUsdXNlV2lkdGg6OTg0fSx4eUNoYXJ0OnsuLi51bC54eUNoYXJ0LHVzZVdpZHRoOnZvaWQgMH0scmVxdWlyZW1lbnQ6ey4uLnVsLnJlcXVpcmVtZW50LHVzZVdpZHRoOnZvaWQgMH0scGFja2V0OnsuLi51bC5wYWNrZXR9LHJhZGFyOnsuLi51bC5yYWRhcn0sdHJlZW1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxkaWFncmFtUGFkZGluZzo4LHNob3dWYWx1ZXM6ITAsbm9kZVdpZHRoOjEwMCxub2RlSGVpZ2h0OjQwLGJvcmRlcldpZHRoOjEsdmFsdWVGb250U2l6ZToxMixsYWJlbEZvbnRTaXplOjE0LHZhbHVlRm9ybWF0OiIsIn19LEN6PW8oKHQsZT0iIik9Pk9iamVjdC5rZXlzKHQpLnJlZHVjZSgocixuKT0+QXJyYXkuaXNBcnJheSh0W25dKT9yOnR5cGVvZiB0W25dPT0ib2JqZWN0IiYmdFtuXSE9PW51bGw/Wy4uLnIsZStuLC4uLkN6KHRbbl0sIiIpXTpbLi4ucixlK25dLFtdKSwia2V5aWZ5IiksQXo9bmV3IFNldChDeihTeiwiIikpLG9yPVN6fSk7dmFyIHYwLEtiZSxiNz1OKCgpPT57InVzZSBzdHJpY3QiO19hKCk7eXQoKTt2MD1vKHQ9PntpZihYLmRlYnVnKCJzYW5pdGl6ZURpcmVjdGl2ZSBjYWxsZWQgd2l0aCIsdCksISh0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PW51bGwpKXtpZihBcnJheS5pc0FycmF5KHQpKXt0LmZvckVhY2goZT0+djAoZSkpO3JldHVybn1mb3IobGV0IGUgb2YgT2JqZWN0LmtleXModCkpe2lmKFguZGVidWcoIkNoZWNraW5nIGtleSIsZSksZS5zdGFydHNXaXRoKCJfXyIpfHxlLmluY2x1ZGVzKCJwcm90byIpfHxlLmluY2x1ZGVzKCJjb25zdHIiKXx8IUF6LmhhcyhlKXx8dFtlXT09bnVsbCl7WC5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLGUpLGRlbGV0ZSB0W2VdO2NvbnRpbnVlfWlmKHR5cGVvZiB0W2VdPT0ib2JqZWN0Iil7WC5kZWJ1Zygic2FuaXRpemluZyBvYmplY3QiLGUpLHYwKHRbZV0pO2NvbnRpbnVlfWxldCByPVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2ZvcihsZXQgbiBvZiByKWUuaW5jbHVkZXMobikmJihYLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLGUpLHRbZV09S2JlKHRbZV0pKX1pZih0LnRoZW1lVmFyaWFibGVzKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0LnRoZW1lVmFyaWFibGVzKSl7bGV0IHI9dC50aGVtZVZhcmlhYmxlc1tlXTtyPy5tYXRjaCYmIXIubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKHQudGhlbWVWYXJpYWJsZXNbZV09IiIpfVguZGVidWcoIkFmdGVyIHNhbml0aXphdGlvbiIsdCl9fSwic2FuaXRpemVEaXJlY3RpdmUiKSxLYmU9byh0PT57bGV0IGU9MCxyPTA7Zm9yKGxldCBuIG9mIHQpe2lmKGU8cilyZXR1cm4ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI7bj09PSJ7Ij9lKys6bj09PSJ9IiYmcisrfXJldHVybiBlIT09cj8ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI6dH0sInNhbml0aXplQ3NzIil9KTt2YXIgcGgsU3MsRHoseDAsRnksaTMsVDcsTHosUnosdzcsYTMsdHIsTnosTXosJHksUWJlLF96LFpiZSxJeixtaT1OKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7eXQoKTtuMygpO19hKCk7YjcoKTtwaD1PYmplY3QuZnJlZXplKG9yKSxTcz1Vbih7fSxwaCkseDA9W10sRnk9VW4oe30scGgpLGkzPW8oKHQsZSk9PntsZXQgcj1Vbih7fSx0KSxuPXt9O2ZvcihsZXQgaSBvZiBlKU56KGkpLG49VW4obixpKTtpZihyPVVuKHIsbiksbi50aGVtZSYmbi50aGVtZSBpbiBFbyl7bGV0IGk9VW4oe30sRHopLGE9VW4oaS50aGVtZVZhcmlhYmxlc3x8e30sbi50aGVtZVZhcmlhYmxlcyk7ci50aGVtZSYmci50aGVtZSBpbiBFbyYmKHIudGhlbWVWYXJpYWJsZXM9RW9bci50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoYSkpfXJldHVybiBGeT1yLEl6KEZ5KSxGeX0sInVwZGF0ZUN1cnJlbnRDb25maWciKSxUNz1vKHQ9PihTcz1Vbih7fSxwaCksU3M9VW4oU3MsdCksdC50aGVtZSYmRW9bdC50aGVtZV0mJihTcy50aGVtZVZhcmlhYmxlcz1Fb1t0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSksaTMoU3MseDApLFNzKSwic2V0U2l0ZUNvbmZpZyIpLEx6PW8odD0+e0R6PVVuKHt9LHQpfSwic2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplIiksUno9byh0PT4oU3M9VW4oU3MsdCksaTMoU3MseDApLFNzKSwidXBkYXRlU2l0ZUNvbmZpZyIpLHc3PW8oKCk9PlVuKHt9LFNzKSwiZ2V0U2l0ZUNvbmZpZyIpLGEzPW8odD0+KEl6KHQpLFVuKEZ5LHQpLHRyKCkpLCJzZXRDb25maWciKSx0cj1vKCgpPT5Vbih7fSxGeSksImdldENvbmZpZyIpLE56PW8odD0+e3QmJihbInNlY3VyZSIsLi4uU3Muc2VjdXJlPz9bXV0uZm9yRWFjaChlPT57T2JqZWN0Lmhhc093bih0LGUpJiYoWC5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke2V9YCx0W2VdKSxkZWxldGUgdFtlXSl9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9PntlLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSB0W2VdfSksT2JqZWN0LmtleXModCkuZm9yRWFjaChlPT57dHlwZW9mIHRbZV09PSJzdHJpbmciJiYodFtlXS5pbmNsdWRlcygiPCIpfHx0W2VdLmluY2x1ZGVzKCI+Iil8fHRbZV0uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIHRbZV0sdHlwZW9mIHRbZV09PSJvYmplY3QiJiZOeih0W2VdKX0pKX0sInNhbml0aXplIiksTXo9byh0PT57djAodCksdC5mb250RmFtaWx5JiYhdC50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXM9ey4uLnQudGhlbWVWYXJpYWJsZXMsZm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSx4MC5wdXNoKHQpLGkzKFNzLHgwKX0sImFkZERpcmVjdGl2ZSIpLCR5PW8oKHQ9U3MpPT57eDA9W10saTModCx4MCl9LCJyZXNldCIpLFFiZT17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxfej17fSxaYmU9byh0PT57X3pbdF18fChYLndhcm4oUWJlW3RdKSxfelt0XT0hMCl9LCJpc3N1ZVdhcm5pbmciKSxJej1vKHQ9Pnt0JiYodC5sYXp5TG9hZGVkRGlhZ3JhbXN8fHQubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZaYmUoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LCJjaGVja0NvbmZpZyIpfSk7ZnVuY3Rpb24gZXModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBSZWdFeHAmJihlLmxhc3RJbmRleD0wKTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShyPjE/ci0xOjApLGk9MTtpPHI7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIF83KHQsZSxuKX19ZnVuY3Rpb24gczRlKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiBENyh0LHIpfX1mdW5jdGlvbiBfcih0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpsMztPeiYmT3oodCxudWxsKTtsZXQgbj1lLmxlbmd0aDtmb3IoO24tLTspe2xldCBpPWVbbl07aWYodHlwZW9mIGk9PSJzdHJpbmciKXtsZXQgYT1yKGkpO2EhPT1pJiYoSmJlKGUpfHwoZVtuXT1hKSxpPWEpfXRbaV09ITB9cmV0dXJuIHR9ZnVuY3Rpb24gbzRlKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWhsKHQsZSl8fCh0W2VdPW51bGwpO3JldHVybiB0fWZ1bmN0aW9uIGFkKHQpe2xldCBlPVd6KG51bGwpO2ZvcihsZXRbcixuXW9mIEh6KHQpKWhsKHQscikmJihBcnJheS5pc0FycmF5KG4pP2Vbcl09bzRlKG4pOm4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmbi5jb25zdHJ1Y3Rvcj09PU9iamVjdD9lW3JdPWFkKG4pOmVbcl09bik7cmV0dXJuIGV9ZnVuY3Rpb24gVXkodCxlKXtmb3IoO3QhPT1udWxsOyl7bGV0IG49dDRlKHQsZSk7aWYobil7aWYobi5nZXQpcmV0dXJuIGVzKG4uZ2V0KTtpZih0eXBlb2Ygbi52YWx1ZT09ImZ1bmN0aW9uIilyZXR1cm4gZXMobi52YWx1ZSl9dD1lNGUodCl9ZnVuY3Rpb24gcigpe3JldHVybiBudWxsfXJldHVybiBvKHIsImZhbGxiYWNrVmFsdWUiKSxyfWZ1bmN0aW9uIFh6KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnY0ZSgpLGU9byhEdD0+WHooRHQpLCJET01QdXJpZnkiKTtpZihlLnZlcnNpb249IjMuMi41IixlLnJlbW92ZWQ9W10sIXR8fCF0LmRvY3VtZW50fHx0LmRvY3VtZW50Lm5vZGVUeXBlIT09SHkuZG9jdW1lbnR8fCF0LkVsZW1lbnQpcmV0dXJuIGUuaXNTdXBwb3J0ZWQ9ITEsZTtsZXR7ZG9jdW1lbnQ6cn09dCxuPXIsaT1uLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6YSxIVE1MVGVtcGxhdGVFbGVtZW50OnMsTm9kZTpsLEVsZW1lbnQ6dSxOb2RlRmlsdGVyOmgsTmFtZWROb2RlTWFwOmY9dC5OYW1lZE5vZGVNYXB8fHQuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpkLERPTVBhcnNlcjpwLHRydXN0ZWRUeXBlczptfT10LGc9dS5wcm90b3R5cGUseT1VeShnLCJjbG9uZU5vZGUiKSx2PVV5KGcsInJlbW92ZSIpLHg9VXkoZywibmV4dFNpYmxpbmciKSxiPVV5KGcsImNoaWxkTm9kZXMiKSxUPVV5KGcsInBhcmVudE5vZGUiKTtpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7bGV0IER0PXIuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtEdC5jb250ZW50JiZEdC5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihyPUR0LmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IFMsdz0iIix7aW1wbGVtZW50YXRpb246RSxjcmVhdGVOb2RlSXRlcmF0b3I6XyxjcmVhdGVEb2N1bWVudEZyYWdtZW50OkMsZ2V0RWxlbWVudHNCeVRhZ05hbWU6RH09cix7aW1wb3J0Tm9kZTpPfT1uLFI9VXooKTtlLmlzU3VwcG9ydGVkPXR5cGVvZiBIej09ImZ1bmN0aW9uIiYmdHlwZW9mIFQ9PSJmdW5jdGlvbiImJkUmJkUuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2xldHtNVVNUQUNIRV9FWFBSOmssRVJCX0VYUFI6TCxUTVBMSVRfRVhQUjpBLERBVEFfQVRUUjpJLEFSSUFfQVRUUjpNLElTX1NDUklQVF9PUl9EQVRBOlAsQVRUUl9XSElURVNQQUNFOkIsQ1VTVE9NX0VMRU1FTlQ6Rn09Vnose0lTX0FMTE9XRURfVVJJOnp9PVZ6LCQ9bnVsbCxVPV9yKHt9LFsuLi5GeiwuLi5FNywuLi5TNywuLi5DNywuLi4kel0pLEs9bnVsbCxlZT1fcih7fSxbLi4uenosLi4uQTcsLi4uR3osLi4ubzNdKSxZPU9iamVjdC5zZWFsKFd6KG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxjZT1udWxsLFo9bnVsbCx1ZT0hMCxRPSEwLGo9ITEsbmU9ITAsdGU9ITEsaGU9ITAsbGU9ITEsSj0hMSxTZT0hMSxzZT0hMSxhZT0hMSxPZT0hMSx5ZT0hMCxCZT0hMSxIZT0idXNlci1jb250ZW50LSIsemU9ITAsTGU9ITEsSWU9e30seGU9bnVsbCxxPV9yKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSksZGU9bnVsbCxpZT1fcih7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pLG9lPW51bGwsVj1fcih7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLFRlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixXPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscGU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHZlPXBlLFBlPSExLF9lPW51bGwsYmU9X3Ioe30sW1RlLFcscGVdLGs3KSxWZT1fcih7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksRGU9X3Ioe30sWyJhbm5vdGF0aW9uLXhtbCJdKSxxZT1fcih7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxhdD1udWxsLFJ0PVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0sc3Q9InRleHQvaHRtbCIsVWU9bnVsbCxjdD1udWxsLFdlPXIuY3JlYXRlRWxlbWVudCgiZm9ybSIpLG90PW8oZnVuY3Rpb24oQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIFJlZ0V4cHx8Q2UgaW5zdGFuY2VvZiBGdW5jdGlvbn0sImlzUmVnZXhPckZ1bmN0aW9uIiksWXQ9byhmdW5jdGlvbigpe2xldCBDZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307aWYoIShjdCYmY3Q9PT1DZSkpe2lmKCghQ2V8fHR5cGVvZiBDZSE9Im9iamVjdCIpJiYoQ2U9e30pLENlPWFkKENlKSxhdD1SdC5pbmRleE9mKENlLlBBUlNFUl9NRURJQV9UWVBFKT09PS0xP3N0OkNlLlBBUlNFUl9NRURJQV9UWVBFLFVlPWF0PT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCI/azc6bDMsJD1obChDZSwiQUxMT1dFRF9UQUdTIik/X3Ioe30sQ2UuQUxMT1dFRF9UQUdTLFVlKTpVLEs9aGwoQ2UsIkFMTE9XRURfQVRUUiIpP19yKHt9LENlLkFMTE9XRURfQVRUUixVZSk6ZWUsX2U9aGwoQ2UsIkFMTE9XRURfTkFNRVNQQUNFUyIpP19yKHt9LENlLkFMTE9XRURfTkFNRVNQQUNFUyxrNyk6YmUsb2U9aGwoQ2UsIkFERF9VUklfU0FGRV9BVFRSIik/X3IoYWQoViksQ2UuQUREX1VSSV9TQUZFX0FUVFIsVWUpOlYsZGU9aGwoQ2UsIkFERF9EQVRBX1VSSV9UQUdTIik/X3IoYWQoaWUpLENlLkFERF9EQVRBX1VSSV9UQUdTLFVlKTppZSx4ZT1obChDZSwiRk9SQklEX0NPTlRFTlRTIik/X3Ioe30sQ2UuRk9SQklEX0NPTlRFTlRTLFVlKTpxLGNlPWhsKENlLCJGT1JCSURfVEFHUyIpP19yKHt9LENlLkZPUkJJRF9UQUdTLFVlKTp7fSxaPWhsKENlLCJGT1JCSURfQVRUUiIpP19yKHt9LENlLkZPUkJJRF9BVFRSLFVlKTp7fSxJZT1obChDZSwiVVNFX1BST0ZJTEVTIik/Q2UuVVNFX1BST0ZJTEVTOiExLHVlPUNlLkFMTE9XX0FSSUFfQVRUUiE9PSExLFE9Q2UuQUxMT1dfREFUQV9BVFRSIT09ITEsaj1DZS5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsbmU9Q2UuQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsdGU9Q2UuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxoZT1DZS5TQUZFX0ZPUl9YTUwhPT0hMSxsZT1DZS5XSE9MRV9ET0NVTUVOVHx8ITEsc2U9Q2UuUkVUVVJOX0RPTXx8ITEsYWU9Q2UuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsT2U9Q2UuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsU2U9Q2UuRk9SQ0VfQk9EWXx8ITEseWU9Q2UuU0FOSVRJWkVfRE9NIT09ITEsQmU9Q2UuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLHplPUNlLktFRVBfQ09OVEVOVCE9PSExLExlPUNlLklOX1BMQUNFfHwhMSx6PUNlLkFMTE9XRURfVVJJX1JFR0VYUHx8cXosdmU9Q2UuTkFNRVNQQUNFfHxwZSxWZT1DZS5NQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFN8fFZlLERlPUNlLkhUTUxfSU5URUdSQVRJT05fUE9JTlRTfHxEZSxZPUNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxDZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmb3QoQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKFkudGFnTmFtZUNoZWNrPUNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJm90KENlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihZLmF0dHJpYnV0ZU5hbWVDaGVjaz1DZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLENlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZ0eXBlb2YgQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPT0iYm9vbGVhbiImJihZLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1DZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLHRlJiYoUT0hMSksYWUmJihzZT0hMCksSWUmJigkPV9yKHt9LCR6KSxLPVtdLEllLmh0bWw9PT0hMCYmKF9yKCQsRnopLF9yKEssenopKSxJZS5zdmc9PT0hMCYmKF9yKCQsRTcpLF9yKEssQTcpLF9yKEssbzMpKSxJZS5zdmdGaWx0ZXJzPT09ITAmJihfcigkLFM3KSxfcihLLEE3KSxfcihLLG8zKSksSWUubWF0aE1sPT09ITAmJihfcigkLEM3KSxfcihLLEd6KSxfcihLLG8zKSkpLENlLkFERF9UQUdTJiYoJD09PVUmJigkPWFkKCQpKSxfcigkLENlLkFERF9UQUdTLFVlKSksQ2UuQUREX0FUVFImJihLPT09ZWUmJihLPWFkKEspKSxfcihLLENlLkFERF9BVFRSLFVlKSksQ2UuQUREX1VSSV9TQUZFX0FUVFImJl9yKG9lLENlLkFERF9VUklfU0FGRV9BVFRSLFVlKSxDZS5GT1JCSURfQ09OVEVOVFMmJih4ZT09PXEmJih4ZT1hZCh4ZSkpLF9yKHhlLENlLkZPUkJJRF9DT05URU5UUyxVZSkpLHplJiYoJFsiI3RleHQiXT0hMCksbGUmJl9yKCQsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksJC50YWJsZSYmKF9yKCQsWyJ0Ym9keSJdKSxkZWxldGUgY2UudGJvZHkpLENlLlRSVVNURURfVFlQRVNfUE9MSUNZKXtpZih0eXBlb2YgQ2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlSFRNTCE9ImZ1bmN0aW9uIil0aHJvdyBWeSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgImNyZWF0ZUhUTUwiIGhvb2suJyk7aWYodHlwZW9mIENlLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTCE9ImZ1bmN0aW9uIil0aHJvdyBWeSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgImNyZWF0ZVNjcmlwdFVSTCIgaG9vay4nKTtTPUNlLlRSVVNURURfVFlQRVNfUE9MSUNZLHc9Uy5jcmVhdGVIVE1MKCIiKX1lbHNlIFM9PT12b2lkIDAmJihTPXg0ZShtLGkpKSxTIT09bnVsbCYmdHlwZW9mIHc9PSJzdHJpbmciJiYodz1TLmNyZWF0ZUhUTUwoIiIpKTtKYSYmSmEoQ2UpLGN0PUNlfX0sIl9wYXJzZUNvbmZpZyIpLFR0PV9yKHt9LFsuLi5FNywuLi5TNywuLi5sNGVdKSxNdD1fcih7fSxbLi4uQzcsLi4uYzRlXSksYnQ9byhmdW5jdGlvbihDZSl7bGV0IHR0PVQoQ2UpOyghdHR8fCF0dC50YWdOYW1lKSYmKHR0PXtuYW1lc3BhY2VVUkk6dmUsdGFnTmFtZToidGVtcGxhdGUifSk7bGV0IEN0PWwzKENlLnRhZ05hbWUpLGdyPWwzKHR0LnRhZ05hbWUpO3JldHVybiBfZVtDZS5uYW1lc3BhY2VVUkldP0NlLm5hbWVzcGFjZVVSST09PVc/dHQubmFtZXNwYWNlVVJJPT09cGU/Q3Q9PT0ic3ZnIjp0dC5uYW1lc3BhY2VVUkk9PT1UZT9DdD09PSJzdmciJiYoZ3I9PT0iYW5ub3RhdGlvbi14bWwifHxWZVtncl0pOiEhVHRbQ3RdOkNlLm5hbWVzcGFjZVVSST09PVRlP3R0Lm5hbWVzcGFjZVVSST09PXBlP0N0PT09Im1hdGgiOnR0Lm5hbWVzcGFjZVVSST09PVc/Q3Q9PT0ibWF0aCImJkRlW2dyXTohIU10W0N0XTpDZS5uYW1lc3BhY2VVUkk9PT1wZT90dC5uYW1lc3BhY2VVUkk9PT1XJiYhRGVbZ3JdfHx0dC5uYW1lc3BhY2VVUkk9PT1UZSYmIVZlW2dyXT8hMTohTXRbQ3RdJiYocWVbQ3RdfHwhVHRbQ3RdKTohIShhdD09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZfZVtDZS5uYW1lc3BhY2VVUkldKTohMX0sIl9jaGVja1ZhbGlkTmFtZXNwYWNlIiksdXQ9byhmdW5jdGlvbihDZSl7enkoZS5yZW1vdmVkLHtlbGVtZW50OkNlfSk7dHJ5e1QoQ2UpLnJlbW92ZUNoaWxkKENlKX1jYXRjaHt2KENlKX19LCJfZm9yY2VSZW1vdmUiKSxTdD1vKGZ1bmN0aW9uKENlLHR0KXt0cnl7enkoZS5yZW1vdmVkLHthdHRyaWJ1dGU6dHQuZ2V0QXR0cmlidXRlTm9kZShDZSksZnJvbTp0dH0pfWNhdGNoe3p5KGUucmVtb3ZlZCx7YXR0cmlidXRlOm51bGwsZnJvbTp0dH0pfWlmKHR0LnJlbW92ZUF0dHJpYnV0ZShDZSksQ2U9PT0iaXMiKWlmKHNlfHxhZSl0cnl7dXQodHQpfWNhdGNoe31lbHNlIHRyeXt0dC5zZXRBdHRyaWJ1dGUoQ2UsIiIpfWNhdGNoe319LCJfcmVtb3ZlQXR0cmlidXRlIiksZnQ9byhmdW5jdGlvbihDZSl7bGV0IHR0PW51bGwsQ3Q9bnVsbDtpZihTZSlDZT0iPHJlbW92ZT48L3JlbW92ZT4iK0NlO2Vsc2V7bGV0IHluPUJ6KENlLC9eW1xyXG5cdCBdKy8pO0N0PXluJiZ5blswXX1hdD09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZ2ZT09PXBlJiYoQ2U9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytDZSsiPC9ib2R5PjwvaHRtbD4iKTtsZXQgZ3I9Uz9TLmNyZWF0ZUhUTUwoQ2UpOkNlO2lmKHZlPT09cGUpdHJ5e3R0PW5ldyBwKCkucGFyc2VGcm9tU3RyaW5nKGdyLGF0KX1jYXRjaHt9aWYoIXR0fHwhdHQuZG9jdW1lbnRFbGVtZW50KXt0dD1FLmNyZWF0ZURvY3VtZW50KHZlLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e3R0LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9UGU/dzpncn1jYXRjaHt9fWxldCBybj10dC5ib2R5fHx0dC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIENlJiZDdCYmcm4uaW5zZXJ0QmVmb3JlKHIuY3JlYXRlVGV4dE5vZGUoQ3QpLHJuLmNoaWxkTm9kZXNbMF18fG51bGwpLHZlPT09cGU/RC5jYWxsKHR0LGxlPyJodG1sIjoiYm9keSIpWzBdOmxlP3R0LmRvY3VtZW50RWxlbWVudDpybn0sIl9pbml0RG9jdW1lbnQiKSx2dD1vKGZ1bmN0aW9uKENlKXtyZXR1cm4gXy5jYWxsKENlLm93bmVyRG9jdW1lbnR8fENlLENlLGguU0hPV19FTEVNRU5UfGguU0hPV19DT01NRU5UfGguU0hPV19URVhUfGguU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OfGguU0hPV19DREFUQV9TRUNUSU9OLG51bGwpfSwiX2NyZWF0ZU5vZGVJdGVyYXRvciIpLG50PW8oZnVuY3Rpb24oQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIGQmJih0eXBlb2YgQ2Uubm9kZU5hbWUhPSJzdHJpbmcifHx0eXBlb2YgQ2UudGV4dENvbnRlbnQhPSJzdHJpbmcifHx0eXBlb2YgQ2UucmVtb3ZlQ2hpbGQhPSJmdW5jdGlvbiJ8fCEoQ2UuYXR0cmlidXRlcyBpbnN0YW5jZW9mIGYpfHx0eXBlb2YgQ2UucmVtb3ZlQXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgQ2Uuc2V0QXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgQ2UubmFtZXNwYWNlVVJJIT0ic3RyaW5nInx8dHlwZW9mIENlLmluc2VydEJlZm9yZSE9ImZ1bmN0aW9uInx8dHlwZW9mIENlLmhhc0NoaWxkTm9kZXMhPSJmdW5jdGlvbiIpfSwiX2lzQ2xvYmJlcmVkIikscG49byhmdW5jdGlvbihDZSl7cmV0dXJuIHR5cGVvZiBsPT0iZnVuY3Rpb24iJiZDZSBpbnN0YW5jZW9mIGx9LCJfaXNOb2RlIik7ZnVuY3Rpb24ga3QoRHQsQ2UsdHQpe3MzKER0LEN0PT57Q3QuY2FsbChlLENlLHR0LGN0KX0pfW8oa3QsIl9leGVjdXRlSG9va3MiKTtsZXQgT249byhmdW5jdGlvbihDZSl7bGV0IHR0PW51bGw7aWYoa3QoUi5iZWZvcmVTYW5pdGl6ZUVsZW1lbnRzLENlLG51bGwpLG50KENlKSlyZXR1cm4gdXQoQ2UpLCEwO2xldCBDdD1VZShDZS5ub2RlTmFtZSk7aWYoa3QoUi51cG9uU2FuaXRpemVFbGVtZW50LENlLHt0YWdOYW1lOkN0LGFsbG93ZWRUYWdzOiR9KSxDZS5oYXNDaGlsZE5vZGVzKCkmJiFwbihDZS5maXJzdEVsZW1lbnRDaGlsZCkmJlphKC88Wy9cdyFdL2csQ2UuaW5uZXJIVE1MKSYmWmEoLzxbL1x3IV0vZyxDZS50ZXh0Q29udGVudCl8fENlLm5vZGVUeXBlPT09SHkucHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbnx8aGUmJkNlLm5vZGVUeXBlPT09SHkuY29tbWVudCYmWmEoLzxbL1x3XS9nLENlLmRhdGEpKXJldHVybiB1dChDZSksITA7aWYoISRbQ3RdfHxjZVtDdF0pe2lmKCFjZVtDdF0mJk1yKEN0KSYmKFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZaYShZLnRhZ05hbWVDaGVjayxDdCl8fFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlkudGFnTmFtZUNoZWNrKEN0KSkpcmV0dXJuITE7aWYoemUmJiF4ZVtDdF0pe2xldCBncj1UKENlKXx8Q2UucGFyZW50Tm9kZSxybj1iKENlKXx8Q2UuY2hpbGROb2RlcztpZihybiYmZ3Ipe2xldCB5bj1ybi5sZW5ndGg7Zm9yKGxldCBacj15bi0xO1pyPj0wOy0tWnIpe2xldCBPaT15KHJuW1pyXSwhMCk7T2kuX19yZW1vdmFsQ291bnQ9KENlLl9fcmVtb3ZhbENvdW50fHwwKSsxLGdyLmluc2VydEJlZm9yZShPaSx4KENlKSl9fX1yZXR1cm4gdXQoQ2UpLCEwfXJldHVybiBDZSBpbnN0YW5jZW9mIHUmJiFidChDZSl8fChDdD09PSJub3NjcmlwdCJ8fEN0PT09Im5vZW1iZWQifHxDdD09PSJub2ZyYW1lcyIpJiZaYSgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxDZS5pbm5lckhUTUwpPyh1dChDZSksITApOih0ZSYmQ2Uubm9kZVR5cGU9PT1IeS50ZXh0JiYodHQ9Q2UudGV4dENvbnRlbnQsczMoW2ssTCxBXSxncj0+e3R0PUd5KHR0LGdyLCIgIil9KSxDZS50ZXh0Q29udGVudCE9PXR0JiYoenkoZS5yZW1vdmVkLHtlbGVtZW50OkNlLmNsb25lTm9kZSgpfSksQ2UudGV4dENvbnRlbnQ9dHQpKSxrdChSLmFmdGVyU2FuaXRpemVFbGVtZW50cyxDZSxudWxsKSwhMSl9LCJfc2FuaXRpemVFbGVtZW50cyIpLHRuPW8oZnVuY3Rpb24oQ2UsdHQsQ3Qpe2lmKHllJiYodHQ9PT0iaWQifHx0dD09PSJuYW1lIikmJihDdCBpbiByfHxDdCBpbiBXZSkpcmV0dXJuITE7aWYoIShRJiYhWlt0dF0mJlphKEksdHQpKSl7aWYoISh1ZSYmWmEoTSx0dCkpKXtpZighS1t0dF18fFpbdHRdKXtpZighKE1yKENlKSYmKFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZaYShZLnRhZ05hbWVDaGVjayxDZSl8fFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlkudGFnTmFtZUNoZWNrKENlKSkmJihZLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmWmEoWS5hdHRyaWJ1dGVOYW1lQ2hlY2ssdHQpfHxZLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZZLmF0dHJpYnV0ZU5hbWVDaGVjayh0dCkpfHx0dD09PSJpcyImJlkuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoWS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlphKFkudGFnTmFtZUNoZWNrLEN0KXx8WS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmWS50YWdOYW1lQ2hlY2soQ3QpKSkpcmV0dXJuITF9ZWxzZSBpZighb2VbdHRdKXtpZighWmEoeixHeShDdCxCLCIiKSkpe2lmKCEoKHR0PT09InNyYyJ8fHR0PT09InhsaW5rOmhyZWYifHx0dD09PSJocmVmIikmJkNlIT09InNjcmlwdCImJmk0ZShDdCwiZGF0YToiKT09PTAmJmRlW0NlXSkpe2lmKCEoaiYmIVphKFAsR3koQ3QsQiwiIikpKSl7aWYoQ3QpcmV0dXJuITF9fX19fX1yZXR1cm4hMH0sIl9pc1ZhbGlkQXR0cmlidXRlIiksTXI9byhmdW5jdGlvbihDZSl7cmV0dXJuIENlIT09ImFubm90YXRpb24teG1sIiYmQnooQ2UsRil9LCJfaXNCYXNpY0N1c3RvbUVsZW1lbnQiKSxJcj1vKGZ1bmN0aW9uKENlKXtrdChSLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxDZSxudWxsKTtsZXR7YXR0cmlidXRlczp0dH09Q2U7aWYoIXR0fHxudChDZSkpcmV0dXJuO2xldCBDdD17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOkssZm9yY2VLZWVwQXR0cjp2b2lkIDB9LGdyPXR0Lmxlbmd0aDtmb3IoO2dyLS07KXtsZXQgcm49dHRbZ3JdLHtuYW1lOnluLG5hbWVzcGFjZVVSSTpacix2YWx1ZTpPaX09cm4sZWk9VWUoeW4pLFNuPXluPT09InZhbHVlIj9PaTphNGUoT2kpO2lmKEN0LmF0dHJOYW1lPWVpLEN0LmF0dHJWYWx1ZT1TbixDdC5rZWVwQXR0cj0hMCxDdC5mb3JjZUtlZXBBdHRyPXZvaWQgMCxrdChSLnVwb25TYW5pdGl6ZUF0dHJpYnV0ZSxDZSxDdCksU249Q3QuYXR0clZhbHVlLEJlJiYoZWk9PT0iaWQifHxlaT09PSJuYW1lIikmJihTdCh5bixDZSksU249SGUrU24pLGhlJiZaYSgvKCgtLSE/fF0pPil8PFwvKHN0eWxlfHRpdGxlKS9pLFNuKSl7U3QoeW4sQ2UpO2NvbnRpbnVlfWlmKEN0LmZvcmNlS2VlcEF0dHJ8fChTdCh5bixDZSksIUN0LmtlZXBBdHRyKSljb250aW51ZTtpZighbmUmJlphKC9cLz4vaSxTbikpe1N0KHluLENlKTtjb250aW51ZX10ZSYmczMoW2ssTCxBXSxldD0+e1NuPUd5KFNuLGV0LCIgIil9KTtsZXQgSHI9VWUoQ2Uubm9kZU5hbWUpO2lmKHRuKEhyLGVpLFNuKSl7aWYoUyYmdHlwZW9mIG09PSJvYmplY3QiJiZ0eXBlb2YgbS5nZXRBdHRyaWJ1dGVUeXBlPT0iZnVuY3Rpb24iJiYhWnIpc3dpdGNoKG0uZ2V0QXR0cmlidXRlVHlwZShIcixlaSkpe2Nhc2UiVHJ1c3RlZEhUTUwiOntTbj1TLmNyZWF0ZUhUTUwoU24pO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1NuPVMuY3JlYXRlU2NyaXB0VVJMKFNuKTticmVha319dHJ5e1pyP0NlLnNldEF0dHJpYnV0ZU5TKFpyLHluLFNuKTpDZS5zZXRBdHRyaWJ1dGUoeW4sU24pLG50KENlKT91dChDZSk6UHooZS5yZW1vdmVkKX1jYXRjaHt9fX1rdChSLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLENlLG51bGwpfSwiX3Nhbml0aXplQXR0cmlidXRlcyIpLFBuPW8oZnVuY3Rpb24gRHQoQ2Upe2xldCB0dD1udWxsLEN0PXZ0KENlKTtmb3Ioa3QoUi5iZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSxDZSxudWxsKTt0dD1DdC5uZXh0Tm9kZSgpOylrdChSLnVwb25TYW5pdGl6ZVNoYWRvd05vZGUsdHQsbnVsbCksT24odHQpLElyKHR0KSx0dC5jb250ZW50IGluc3RhbmNlb2YgYSYmRHQodHQuY29udGVudCk7a3QoUi5hZnRlclNhbml0aXplU2hhZG93RE9NLENlLG51bGwpfSwiX3Nhbml0aXplU2hhZG93RE9NIik7cmV0dXJuIGUuc2FuaXRpemU9ZnVuY3Rpb24oRHQpe2xldCBDZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sdHQ9bnVsbCxDdD1udWxsLGdyPW51bGwscm49bnVsbDtpZihQZT0hRHQsUGUmJihEdD0iPCEtLT4iKSx0eXBlb2YgRHQhPSJzdHJpbmciJiYhcG4oRHQpKWlmKHR5cGVvZiBEdC50b1N0cmluZz09ImZ1bmN0aW9uIil7aWYoRHQ9RHQudG9TdHJpbmcoKSx0eXBlb2YgRHQhPSJzdHJpbmciKXRocm93IFZ5KCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9ZWxzZSB0aHJvdyBWeSgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighZS5pc1N1cHBvcnRlZClyZXR1cm4gRHQ7aWYoSnx8WXQoQ2UpLGUucmVtb3ZlZD1bXSx0eXBlb2YgRHQ9PSJzdHJpbmciJiYoTGU9ITEpLExlKXtpZihEdC5ub2RlTmFtZSl7bGV0IE9pPVVlKER0Lm5vZGVOYW1lKTtpZighJFtPaV18fGNlW09pXSl0aHJvdyBWeSgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKER0IGluc3RhbmNlb2YgbCl0dD1mdCgiPCEtLS0tPiIpLEN0PXR0Lm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShEdCwhMCksQ3Qubm9kZVR5cGU9PT1IeS5lbGVtZW50JiZDdC5ub2RlTmFtZT09PSJCT0RZInx8Q3Qubm9kZU5hbWU9PT0iSFRNTCI/dHQ9Q3Q6dHQuYXBwZW5kQ2hpbGQoQ3QpO2Vsc2V7aWYoIXNlJiYhdGUmJiFsZSYmRHQuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIFMmJk9lP1MuY3JlYXRlSFRNTChEdCk6RHQ7aWYodHQ9ZnQoRHQpLCF0dClyZXR1cm4gc2U/bnVsbDpPZT93OiIifXR0JiZTZSYmdXQodHQuZmlyc3RDaGlsZCk7bGV0IHluPXZ0KExlP0R0OnR0KTtmb3IoO2dyPXluLm5leHROb2RlKCk7KU9uKGdyKSxJcihnciksZ3IuY29udGVudCBpbnN0YW5jZW9mIGEmJlBuKGdyLmNvbnRlbnQpO2lmKExlKXJldHVybiBEdDtpZihzZSl7aWYoYWUpZm9yKHJuPUMuY2FsbCh0dC5vd25lckRvY3VtZW50KTt0dC5maXJzdENoaWxkOylybi5hcHBlbmRDaGlsZCh0dC5maXJzdENoaWxkKTtlbHNlIHJuPXR0O3JldHVybihLLnNoYWRvd3Jvb3R8fEsuc2hhZG93cm9vdG1vZGUpJiYocm49Ty5jYWxsKG4scm4sITApKSxybn1sZXQgWnI9bGU/dHQub3V0ZXJIVE1MOnR0LmlubmVySFRNTDtyZXR1cm4gbGUmJiRbIiFkb2N0eXBlIl0mJnR0Lm93bmVyRG9jdW1lbnQmJnR0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmdHQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJlphKFl6LHR0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKFpyPSI8IURPQ1RZUEUgIit0dC5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZStgPgpgK1pyKSx0ZSYmczMoW2ssTCxBXSxPaT0+e1pyPUd5KFpyLE9pLCIgIil9KSxTJiZPZT9TLmNyZWF0ZUhUTUwoWnIpOlpyfSxlLnNldENvbmZpZz1mdW5jdGlvbigpe2xldCBEdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307WXQoRHQpLEo9ITB9LGUuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtjdD1udWxsLEo9ITF9LGUuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihEdCxDZSx0dCl7Y3R8fFl0KHt9KTtsZXQgQ3Q9VWUoRHQpLGdyPVVlKENlKTtyZXR1cm4gdG4oQ3QsZ3IsdHQpfSxlLmFkZEhvb2s9ZnVuY3Rpb24oRHQsQ2Upe3R5cGVvZiBDZT09ImZ1bmN0aW9uIiYmenkoUltEdF0sQ2UpfSxlLnJlbW92ZUhvb2s9ZnVuY3Rpb24oRHQsQ2Upe2lmKENlIT09dm9pZCAwKXtsZXQgdHQ9cjRlKFJbRHRdLENlKTtyZXR1cm4gdHQ9PT0tMT92b2lkIDA6bjRlKFJbRHRdLHR0LDEpWzBdfXJldHVybiBQeihSW0R0XSl9LGUucmVtb3ZlSG9va3M9ZnVuY3Rpb24oRHQpe1JbRHRdPVtdfSxlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7Uj1VeigpfSxlfXZhciBIeixPeixKYmUsZTRlLHQ0ZSxKYSxTbyxXeixfNyxENyxzMyxyNGUsUHosenksbjRlLGwzLGs3LEJ6LEd5LGk0ZSxhNGUsaGwsWmEsVnksRnosRTcsUzcsbDRlLEM3LGM0ZSwkeix6eixBNyxHeixvMyx1NGUsaDRlLGY0ZSxkNGUscDRlLHF6LG00ZSxnNGUsWXoseTRlLFZ6LEh5LHY0ZSx4NGUsVXosbWgsTDc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijsoe2VudHJpZXM6SHosc2V0UHJvdG90eXBlT2Y6T3osaXNGcm96ZW46SmJlLGdldFByb3RvdHlwZU9mOmU0ZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6dDRlfT1PYmplY3QpLHtmcmVlemU6SmEsc2VhbDpTbyxjcmVhdGU6V3p9PU9iamVjdCx7YXBwbHk6XzcsY29uc3RydWN0OkQ3fT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7SmF8fChKYT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiZnJlZXplIikpO1NvfHwoU289byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sInNlYWwiKSk7Xzd8fChfNz1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZS5hcHBseShyLG4pfSwiYXBwbHkiKSk7RDd8fChENz1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIG5ldyBlKC4uLnIpfSwiY29uc3RydWN0IikpO3MzPWVzKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxyNGU9ZXMoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSxQej1lcyhBcnJheS5wcm90b3R5cGUucG9wKSx6eT1lcyhBcnJheS5wcm90b3R5cGUucHVzaCksbjRlPWVzKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLGwzPWVzKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLGs3PWVzKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLEJ6PWVzKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLEd5PWVzKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksaTRlPWVzKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksYTRlPWVzKFN0cmluZy5wcm90b3R5cGUudHJpbSksaGw9ZXMoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksWmE9ZXMoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxWeT1zNGUoVHlwZUVycm9yKTtvKGVzLCJ1bmFwcGx5Iik7byhzNGUsInVuY29uc3RydWN0Iik7byhfciwiYWRkVG9TZXQiKTtvKG80ZSwiY2xlYW5BcnJheSIpO28oYWQsImNsb25lIik7byhVeSwibG9va3VwR2V0dGVyIik7Rno9SmEoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLEU3PUphKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxTNz1KYShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxsNGU9SmEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLEM3PUphKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiLCJtcHJlc2NyaXB0cyJdKSxjNGU9SmEoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLCR6PUphKFsiI3RleHQiXSkseno9SmEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxBNz1KYShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50IiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhYmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLEd6PUphKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLG8zPUphKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksdTRlPVNvKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksaDRlPVNvKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxmNGU9U28oL1wkXHtbXHdcV10qL2dtKSxkNGU9U28oL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdKyQvKSxwNGU9U28oL15hcmlhLVtcLVx3XSskLykscXo9U28oL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksbTRlPVNvKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxnNGU9U28oL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksWXo9U28oL15odG1sJC9pKSx5NGU9U28oL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpLFZ6PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjpwNGUsQVRUUl9XSElURVNQQUNFOmc0ZSxDVVNUT01fRUxFTUVOVDp5NGUsREFUQV9BVFRSOmQ0ZSxET0NUWVBFX05BTUU6WXosRVJCX0VYUFI6aDRlLElTX0FMTE9XRURfVVJJOnF6LElTX1NDUklQVF9PUl9EQVRBOm00ZSxNVVNUQUNIRV9FWFBSOnU0ZSxUTVBMSVRfRVhQUjpmNGV9KSxIeT17ZWxlbWVudDoxLGF0dHJpYnV0ZToyLHRleHQ6MyxjZGF0YVNlY3Rpb246NCxlbnRpdHlSZWZlcmVuY2U6NSxlbnRpdHlOb2RlOjYscHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbjo3LGNvbW1lbnQ6OCxkb2N1bWVudDo5LGRvY3VtZW50VHlwZToxMCxkb2N1bWVudEZyYWdtZW50OjExLG5vdGF0aW9uOjEyfSx2NGU9byhmdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvd30sImdldEdsb2JhbCIpLHg0ZT1vKGZ1bmN0aW9uKGUscil7aWYodHlwZW9mIGUhPSJvYmplY3QifHx0eXBlb2YgZS5jcmVhdGVQb2xpY3khPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IG49bnVsbCxpPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO3ImJnIuaGFzQXR0cmlidXRlKGkpJiYobj1yLmdldEF0dHJpYnV0ZShpKSk7bGV0IGE9ImRvbXB1cmlmeSIrKG4/IiMiK246IiIpO3RyeXtyZXR1cm4gZS5jcmVhdGVQb2xpY3koYSx7Y3JlYXRlSFRNTChzKXtyZXR1cm4gc30sY3JlYXRlU2NyaXB0VVJMKHMpe3JldHVybiBzfX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIithKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19LCJfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5IiksVXo9byhmdW5jdGlvbigpe3JldHVybnthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfX0sIl9jcmVhdGVIb29rc01hcCIpO28oWHosImNyZWF0ZURPTVB1cmlmeSIpO21oPVh6KCl9KTt2YXIgQ1Y9e307dXIoQ1Yse1BhcnNlRXJyb3I6KCk9PnB0LFNFVFRJTkdTX1NDSEVNQTooKT0+WHksX19kZWZpbmVGdW5jdGlvbjooKT0+TnQsX19kZWZpbmVNYWNybzooKT0+ZmUsX19kZWZpbmVTeW1ib2w6KCk9PkcsX19kb21UcmVlOigpPT5TVixfX3BhcnNlOigpPT5UVixfX3JlbmRlclRvRG9tVHJlZTooKT0+TzMsX19yZW5kZXJUb0hUTUxUcmVlOigpPT5rVixfX3NldEZvbnRNZXRyaWNzOigpPT5fRyxkZWZhdWx0OigpPT51NWUscmVuZGVyOigpPT54QSxyZW5kZXJUb1N0cmluZzooKT0+YlYsdmVyc2lvbjooKT0+RVZ9KTtmdW5jdGlvbiBDNGUodCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKFM0ZSxlPT5FNGVbZV0pfWZ1bmN0aW9uIEw0ZSh0KXtpZih0LmRlZmF1bHQpcmV0dXJuIHQuZGVmYXVsdDt2YXIgZT10LnR5cGUscj1BcnJheS5pc0FycmF5KGUpP2VbMF06ZTtpZih0eXBlb2YgciE9InN0cmluZyIpcmV0dXJuIHIuZW51bVswXTtzd2l0Y2gocil7Y2FzZSJib29sZWFuIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6cmV0dXJuIiI7Y2FzZSJudW1iZXIiOnJldHVybiAwO2Nhc2Uib2JqZWN0IjpyZXR1cm57fX19ZnVuY3Rpb24gQjRlKHQpe2Zvcih2YXIgZT0wO2U8SDcubGVuZ3RoO2UrKylmb3IodmFyIHI9SDdbZV0sbj0wO248ci5ibG9ja3MubGVuZ3RoO24rKyl7dmFyIGk9ci5ibG9ja3Nbbl07aWYodD49aVswXSYmdDw9aVsxXSlyZXR1cm4gci5uYW1lfXJldHVybiBudWxsfWZ1bmN0aW9uIEFHKHQpe2Zvcih2YXIgZT0wO2U8YjMubGVuZ3RoO2UrPTIpaWYodD49YjNbZV0mJnQ8PWIzW2UrMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gX0codCxlKXtKbFt0XT1lfWZ1bmN0aW9uIG5BKHQsZSxyKXtpZighSmxbZV0pdGhyb3cgbmV3IEVycm9yKCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiAiK2UrIi4iKTt2YXIgbj10LmNoYXJDb2RlQXQoMCksaT1KbFtlXVtuXTtpZighaSYmdFswXWluIEt6JiYobj1Lelt0WzBdXS5jaGFyQ29kZUF0KDApLGk9SmxbZV1bbl0pLCFpJiZyPT09InRleHQiJiZBRyhuKSYmKGk9SmxbZV1bNzddKSxpKXJldHVybntkZXB0aDppWzBdLGhlaWdodDppWzFdLGl0YWxpYzppWzJdLHNrZXc6aVszXSx3aWR0aDppWzRdfX1mdW5jdGlvbiBYNGUodCl7dmFyIGU7aWYodD49NT9lPTA6dD49Mz9lPTE6ZT0yLCFSN1tlXSl7dmFyIHI9UjdbZV09e2Nzc0VtUGVyTXU6YzMucXVhZFtlXS8xOH07Zm9yKHZhciBuIGluIGMzKWMzLmhhc093blByb3BlcnR5KG4pJiYocltuXT1jM1tuXVtlXSl9cmV0dXJuIFI3W2VdfWZ1bmN0aW9uIEp6KHQpe2lmKHQgaW5zdGFuY2VvZiBBcylyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHN5bWJvbE5vZGUgYnV0IGdvdCAiK1N0cmluZyh0KSsiLiIpfWZ1bmN0aW9uIEo0ZSh0KXtpZih0IGluc3RhbmNlb2YgbGQpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290ICIrU3RyaW5nKHQpKyIuIil9ZnVuY3Rpb24gRyh0LGUscixuLGksYSl7QW5bdF1baV09e2ZvbnQ6ZSxncm91cDpyLHJlcGxhY2U6bn0sYSYmbiYmKEFuW3RdW25dPUFuW3RdW2ldKX1mdW5jdGlvbiBOdCh0KXtmb3IodmFye3R5cGU6ZSxuYW1lczpyLHByb3BzOm4saGFuZGxlcjppLGh0bWxCdWlsZGVyOmEsbWF0aG1sQnVpbGRlcjpzfT10LGw9e3R5cGU6ZSxudW1BcmdzOm4ubnVtQXJncyxhcmdUeXBlczpuLmFyZ1R5cGVzLGFsbG93ZWRJbkFyZ3VtZW50OiEhbi5hbGxvd2VkSW5Bcmd1bWVudCxhbGxvd2VkSW5UZXh0OiEhbi5hbGxvd2VkSW5UZXh0LGFsbG93ZWRJbk1hdGg6bi5hbGxvd2VkSW5NYXRoPT09dm9pZCAwPyEwOm4uYWxsb3dlZEluTWF0aCxudW1PcHRpb25hbEFyZ3M6bi5udW1PcHRpb25hbEFyZ3N8fDAsaW5maXg6ISFuLmluZml4LHByaW1pdGl2ZTohIW4ucHJpbWl0aXZlLGhhbmRsZXI6aX0sdT0wO3U8ci5sZW5ndGg7Kyt1KUZHW3JbdV1dPWw7ZSYmKGEmJihFM1tlXT1hKSxzJiYoUzNbZV09cykpfWZ1bmN0aW9uIGNkKHQpe3Zhcnt0eXBlOmUsaHRtbEJ1aWxkZXI6cixtYXRobWxCdWlsZGVyOm59PXQ7TnQoe3R5cGU6ZSxuYW1lczpbXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKCl7dGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiIpfSxodG1sQnVpbGRlcjpyLG1hdGhtbEJ1aWxkZXI6bn0pfWZ1bmN0aW9uIGczKHQsZSl7dmFyIHI9ZnUoWyJiYXNlIl0sdCxlKSxuPWZ1KFsic3RydXQiXSk7cmV0dXJuIG4uc3R5bGUuaGVpZ2h0PUV0KHIuaGVpZ2h0K3IuZGVwdGgpLHIuZGVwdGgmJihuLnN0eWxlLnZlcnRpY2FsQWxpZ249RXQoLXIuZGVwdGgpKSxyLmNoaWxkcmVuLnVuc2hpZnQobikscn1mdW5jdGlvbiBqNyh0LGUpe3ZhciByPW51bGw7dC5sZW5ndGg9PT0xJiZ0WzBdLnR5cGU9PT0idGFnIiYmKHI9dFswXS50YWcsdD10WzBdLmJvZHkpO3ZhciBuPSRpKHQsZSwicm9vdCIpLGk7bi5sZW5ndGg9PT0yJiZuWzFdLmhhc0NsYXNzKCJ0YWciKSYmKGk9bi5wb3AoKSk7Zm9yKHZhciBhPVtdLHM9W10sbD0wO2w8bi5sZW5ndGg7bCsrKWlmKHMucHVzaChuW2xdKSxuW2xdLmhhc0NsYXNzKCJtYmluIil8fG5bbF0uaGFzQ2xhc3MoIm1yZWwiKXx8bltsXS5oYXNDbGFzcygiYWxsb3dicmVhayIpKXtmb3IodmFyIHU9ITE7bDxuLmxlbmd0aC0xJiZuW2wrMV0uaGFzQ2xhc3MoIm1zcGFjZSIpJiYhbltsKzFdLmhhc0NsYXNzKCJuZXdsaW5lIik7KWwrKyxzLnB1c2gobltsXSksbltsXS5oYXNDbGFzcygibm9icmVhayIpJiYodT0hMCk7dXx8KGEucHVzaChnMyhzLGUpKSxzPVtdKX1lbHNlIG5bbF0uaGFzQ2xhc3MoIm5ld2xpbmUiKSYmKHMucG9wKCkscy5sZW5ndGg+MCYmKGEucHVzaChnMyhzLGUpKSxzPVtdKSxhLnB1c2gobltsXSkpO3MubGVuZ3RoPjAmJmEucHVzaChnMyhzLGUpKTt2YXIgaDtyPyhoPWczKCRpKHIsZSwhMCkpLGguY2xhc3Nlcz1bInRhZyJdLGEucHVzaChoKSk6aSYmYS5wdXNoKGkpO3ZhciBmPWZ1KFsia2F0ZXgtaHRtbCJdLGEpO2lmKGYuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxoKXt2YXIgZD1oLmNoaWxkcmVuWzBdO2Quc3R5bGUuaGVpZ2h0PUV0KGYuaGVpZ2h0K2YuZGVwdGgpLGYuZGVwdGgmJihkLnN0eWxlLnZlcnRpY2FsQWxpZ249RXQoLWYuZGVwdGgpKX1yZXR1cm4gZn1mdW5jdGlvbiB6Ryh0KXtyZXR1cm4gbmV3IG9kKHQpfWZ1bmN0aW9uIEk3KHQpe2lmKCF0KXJldHVybiExO2lmKHQudHlwZT09PSJtaSImJnQuY2hpbGRyZW4ubGVuZ3RoPT09MSl7dmFyIGU9dC5jaGlsZHJlblswXTtyZXR1cm4gZSBpbnN0YW5jZW9mIEFvJiZlLnRleHQ9PT0iLiJ9ZWxzZSBpZih0LnR5cGU9PT0ibW8iJiZ0LmNoaWxkcmVuLmxlbmd0aD09PTEmJnQuZ2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiKT09PSJ0cnVlIiYmdC5nZXRBdHRyaWJ1dGUoImxzcGFjZSIpPT09IjBlbSImJnQuZ2V0QXR0cmlidXRlKCJyc3BhY2UiKT09PSIwZW0iKXt2YXIgcj10LmNoaWxkcmVuWzBdO3JldHVybiByIGluc3RhbmNlb2YgQW8mJnIudGV4dD09PSIsIn1lbHNlIHJldHVybiExfWZ1bmN0aW9uIGlHKHQsZSxyLG4saSl7dmFyIGE9X3ModCxyKSxzO2EubGVuZ3RoPT09MSYmYVswXWluc3RhbmNlb2YgdHMmJkp0LmNvbnRhaW5zKFsibXJvdyIsIm10YWJsZSJdLGFbMF0udHlwZSk/cz1hWzBdOnM9bmV3IGR0Lk1hdGhOb2RlKCJtcm93IixhKTt2YXIgbD1uZXcgZHQuTWF0aE5vZGUoImFubm90YXRpb24iLFtuZXcgZHQuVGV4dE5vZGUoZSldKTtsLnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJhcHBsaWNhdGlvbi94LXRleCIpO3ZhciB1PW5ldyBkdC5NYXRoTm9kZSgic2VtYW50aWNzIixbcyxsXSksaD1uZXcgZHQuTWF0aE5vZGUoIm1hdGgiLFt1XSk7aC5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIpLG4mJmguc2V0QXR0cmlidXRlKCJkaXNwbGF5IiwiYmxvY2siKTt2YXIgZj1pPyJrYXRleCI6ImthdGV4LW1hdGhtbCI7cmV0dXJuIEZlLm1ha2VTcGFuKFtmXSxbaF0pfWZ1bmN0aW9uIHhyKHQsZSl7aWYoIXR8fHQudHlwZSE9PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBub2RlIG9mIHR5cGUgIitlKyIsIGJ1dCBnb3QgIisodD8ibm9kZSBvZiB0eXBlICIrdC50eXBlOlN0cmluZyh0KSkpO3JldHVybiB0fWZ1bmN0aW9uIG9BKHQpe3ZhciBlPVIzKHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiBzeW1ib2wgZ3JvdXAgdHlwZSwgYnV0IGdvdCAiKyh0PyJub2RlIG9mIHR5cGUgIit0LnR5cGU6U3RyaW5nKHQpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gUjModCl7cmV0dXJuIHQmJih0LnR5cGU9PT0iYXRvbSJ8fHQzZS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKT90Om51bGx9ZnVuY3Rpb24gSEcodCxlKXt2YXIgcj0kaSh0LmJvZHksZSwhMCk7cmV0dXJuIFIzZShbdC5tY2xhc3NdLHIsZSl9ZnVuY3Rpb24gV0codCxlKXt2YXIgcixuPV9zKHQuYm9keSxlKTtyZXR1cm4gdC5tY2xhc3M9PT0ibWlubmVyIj9yPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsbik6dC5tY2xhc3M9PT0ibW9yZCI/dC5pc0NoYXJhY3RlckJveD8ocj1uWzBdLHIudHlwZT0ibWkiKTpyPW5ldyBkdC5NYXRoTm9kZSgibWkiLG4pOih0LmlzQ2hhcmFjdGVyQm94PyhyPW5bMF0sci50eXBlPSJtbyIpOnI9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsbiksdC5tY2xhc3M9PT0ibWJpbiI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjAuMjJlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4yMmVtIik6dC5tY2xhc3M9PT0ibXB1bmN0Ij8oci5hdHRyaWJ1dGVzLmxzcGFjZT0iMGVtIixyLmF0dHJpYnV0ZXMucnNwYWNlPSIwLjE3ZW0iKTp0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMGVtIik6dC5tY2xhc3M9PT0ibWlubmVyIiYmKHIuYXR0cmlidXRlcy5sc3BhY2U9IjAuMDU1NmVtIixyLmF0dHJpYnV0ZXMud2lkdGg9IiswLjExMTFlbSIpKSxyfWZ1bmN0aW9uIEkzZSh0LGUscil7dmFyIG49TjNlW3RdO3N3aXRjaChuKXtjYXNlIlxcXFxjZHJpZ2h0YXJyb3ciOmNhc2UiXFxcXGNkbGVmdGFycm93IjpyZXR1cm4gci5jYWxsRnVuY3Rpb24obixbZVswXV0sW2VbMV1dKTtjYXNlIlxcdXBhcnJvdyI6Y2FzZSJcXGRvd25hcnJvdyI6e3ZhciBpPXIuY2FsbEZ1bmN0aW9uKCJcXFxcY2RsZWZ0IixbZVswXV0sW10pLGE9e3R5cGU6ImF0b20iLHRleHQ6bixtb2RlOiJtYXRoIixmYW1pbHk6InJlbCJ9LHM9ci5jYWxsRnVuY3Rpb24oIlxcQmlnIixbYV0sW10pLGw9ci5jYWxsRnVuY3Rpb24oIlxcXFxjZHJpZ2h0IixbZVsxXV0sW10pLHU9e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltpLHMsbF19O3JldHVybiByLmNhbGxGdW5jdGlvbigiXFxcXGNkcGFyZW50IixbdV0sW10pfWNhc2UiXFxcXGNkbG9uZ2VxdWFsIjpyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcXFxjZGxvbmdlcXVhbCIsW10sW10pO2Nhc2UiXFxWZXJ0Ijp7dmFyIGg9e3R5cGU6InRleHRvcmQiLHRleHQ6IlxcVmVydCIsbW9kZToibWF0aCJ9O3JldHVybiByLmNhbGxGdW5jdGlvbigiXFxCaWciLFtoXSxbXSl9ZGVmYXVsdDpyZXR1cm57dHlwZToidGV4dG9yZCIsdGV4dDoiICIsbW9kZToibWF0aCJ9fX1mdW5jdGlvbiBPM2UodCl7dmFyIGU9W107Zm9yKHQuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0Lmd1bGxldC5tYWNyb3Muc2V0KCJcXGNyIiwiXFxcXFxccmVsYXgiKSx0Lmd1bGxldC5iZWdpbkdyb3VwKCk7Oyl7ZS5wdXNoKHQucGFyc2VFeHByZXNzaW9uKCExLCJcXFxcIikpLHQuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciByPXQuZmV0Y2goKS50ZXh0O2lmKHI9PT0iJiJ8fHI9PT0iXFxcXCIpdC5jb25zdW1lKCk7ZWxzZSBpZihyPT09IlxcZW5kIil7ZVtlLmxlbmd0aC0xXS5sZW5ndGg9PT0wJiZlLnBvcCgpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBcXFxcIG9yIFxcY3Igb3IgXFxlbmQiLHQubmV4dFRva2VuKX1mb3IodmFyIG49W10saT1bbl0sYT0wO2E8ZS5sZW5ndGg7YSsrKXtmb3IodmFyIHM9ZVthXSxsPWFHKCksdT0wO3U8cy5sZW5ndGg7dSsrKWlmKCFzRyhzW3VdKSlsLmJvZHkucHVzaChzW3VdKTtlbHNle24ucHVzaChsKSx1Kz0xO3ZhciBoPW9BKHNbdV0pLnRleHQsZj1uZXcgQXJyYXkoMik7aWYoZlswXT17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6W119LGZbMV09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSwhKCI9fC4iLmluZGV4T2YoaCk+LTEpKWlmKCI8PkFWIi5pbmRleE9mKGgpPi0xKWZvcih2YXIgZD0wO2Q8MjtkKyspe2Zvcih2YXIgcD0hMCxtPXUrMTttPHMubGVuZ3RoO20rKyl7aWYoTTNlKHNbbV0saCkpe3A9ITEsdT1tO2JyZWFrfWlmKHNHKHNbbV0pKXRocm93IG5ldyBwdCgiTWlzc2luZyBhICIraCsiIGNoYXJhY3RlciB0byBjb21wbGV0ZSBhIENEIGFycm93LiIsc1ttXSk7ZltkXS5ib2R5LnB1c2goc1ttXSl9aWYocCl0aHJvdyBuZXcgcHQoIk1pc3NpbmcgYSAiK2grIiBjaGFyYWN0ZXIgdG8gY29tcGxldGUgYSBDRCBhcnJvdy4iLHNbdV0pfWVsc2UgdGhyb3cgbmV3IHB0KCdFeHBlY3RlZCBvbmUgb2YgIjw+QVY9fC4iIGFmdGVyIEAnLHNbdV0pO3ZhciBnPUkzZShoLGYsdCkseT17dHlwZToic3R5bGluZyIsYm9keTpbZ10sbW9kZToibWF0aCIsc3R5bGU6ImRpc3BsYXkifTtuLnB1c2goeSksbD1hRygpfWElMj09PTA/bi5wdXNoKGwpOm4uc2hpZnQoKSxuPVtdLGkucHVzaChuKX10Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmVuZEdyb3VwKCk7dmFyIHY9bmV3IEFycmF5KGlbMF0ubGVuZ3RoKS5maWxsKHt0eXBlOiJhbGlnbiIsYWxpZ246ImMiLHByZWdhcDouMjUscG9zdGdhcDouMjV9KTtyZXR1cm57dHlwZToiYXJyYXkiLG1vZGU6Im1hdGgiLGJvZHk6aSxhcnJheXN0cmV0Y2g6MSxhZGRKb3Q6ITAscm93R2FwczpbbnVsbF0sY29sczp2LGNvbFNlcGFyYXRpb25UeXBlOiJDRCIsaExpbmVzQmVmb3JlUm93Om5ldyBBcnJheShpLmxlbmd0aCsxKS5maWxsKFtdKX19ZnVuY3Rpb24gTTModCxlKXt2YXIgcj1SMyh0KTtpZihyJiZKdC5jb250YWlucyhYM2Usci50ZXh0KSlyZXR1cm4gcjt0aHJvdyByP25ldyBwdCgiSW52YWxpZCBkZWxpbWl0ZXIgJyIrci50ZXh0KyInIGFmdGVyICciK2UuZnVuY05hbWUrIiciLHQpOm5ldyBwdCgiSW52YWxpZCBkZWxpbWl0ZXIgdHlwZSAnIit0LnR5cGUrIiciLHQpfWZ1bmN0aW9uIGxHKHQpe2lmKCF0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJCdWc6IFRoZSBsZWZ0cmlnaHQgUGFyc2VOb2RlIHdhc24ndCBmdWxseSBwYXJzZWQuIil9ZnVuY3Rpb24gdGModCl7Zm9yKHZhcnt0eXBlOmUsbmFtZXM6cixwcm9wczpuLGhhbmRsZXI6aSxodG1sQnVpbGRlcjphLG1hdGhtbEJ1aWxkZXI6c309dCxsPXt0eXBlOmUsbnVtQXJnczpuLm51bUFyZ3N8fDAsYWxsb3dlZEluVGV4dDohMSxudW1PcHRpb25hbEFyZ3M6MCxoYW5kbGVyOml9LHU9MDt1PHIubGVuZ3RoOysrdSlpVltyW3VdXT1sO2EmJihFM1tlXT1hKSxzJiYoUzNbZV09cyl9ZnVuY3Rpb24gZmUodCxlKXthVlt0XT1lfWZ1bmN0aW9uIGNHKHQpe3ZhciBlPVtdO3QuY29uc3VtZVNwYWNlcygpO3ZhciByPXQuZmV0Y2goKS50ZXh0O2ZvcihyPT09IlxccmVsYXgiJiYodC5jb25zdW1lKCksdC5jb25zdW1lU3BhY2VzKCkscj10LmZldGNoKCkudGV4dCk7cj09PSJcXGhsaW5lInx8cj09PSJcXGhkYXNobGluZSI7KXQuY29uc3VtZSgpLGUucHVzaChyPT09IlxcaGRhc2hsaW5lIiksdC5jb25zdW1lU3BhY2VzKCkscj10LmZldGNoKCkudGV4dDtyZXR1cm4gZX1mdW5jdGlvbiBmQSh0KXtpZih0LmluZGV4T2YoImVkIik9PT0tMSlyZXR1cm4gdC5pbmRleE9mKCIqIik9PT0tMX1mdW5jdGlvbiBiaCh0LGUscil7dmFye2hza2lwQmVmb3JlQW5kQWZ0ZXI6bixhZGRKb3Q6aSxjb2xzOmEsYXJyYXlzdHJldGNoOnMsY29sU2VwYXJhdGlvblR5cGU6bCxhdXRvVGFnOnUsc2luZ2xlUm93OmgsZW1wdHlTaW5nbGVSb3c6ZixtYXhOdW1Db2xzOmQsbGVxbm86cH09ZTtpZih0Lmd1bGxldC5iZWdpbkdyb3VwKCksaHx8dC5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksIXMpe3ZhciBtPXQuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KCJcXGFycmF5c3RyZXRjaCIpO2lmKG09PW51bGwpcz0xO2Vsc2UgaWYocz1wYXJzZUZsb2F0KG0pLCFzfHxzPDApdGhyb3cgbmV3IHB0KCJJbnZhbGlkIFxcYXJyYXlzdHJldGNoOiAiK20pfXQuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgZz1bXSx5PVtnXSx2PVtdLHg9W10sYj11IT1udWxsP1tdOnZvaWQgMDtmdW5jdGlvbiBUKCl7dSYmdC5ndWxsZXQubWFjcm9zLnNldCgiXFxAZXFuc3ciLCIxIiwhMCl9byhULCJiZWdpblJvdyIpO2Z1bmN0aW9uIFMoKXtiJiYodC5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKT8oYi5wdXNoKHQuc3VicGFyc2UoW25ldyBfbygiXFxkZkB0YWciKV0pKSx0Lmd1bGxldC5tYWNyb3Muc2V0KCJcXGRmQHRhZyIsdm9pZCAwLCEwKSk6Yi5wdXNoKCEhdSYmdC5ndWxsZXQubWFjcm9zLmdldCgiXFxAZXFuc3ciKT09PSIxIikpfWZvcihvKFMsImVuZFJvdyIpLFQoKSx4LnB1c2goY0codCkpOzspe3ZhciB3PXQucGFyc2VFeHByZXNzaW9uKCExLGg/IlxcZW5kIjoiXFxcXCIpO3QuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuYmVnaW5Hcm91cCgpLHc9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnQubW9kZSxib2R5Ond9LHImJih3PXt0eXBlOiJzdHlsaW5nIixtb2RlOnQubW9kZSxzdHlsZTpyLGJvZHk6W3ddfSksZy5wdXNoKHcpO3ZhciBFPXQuZmV0Y2goKS50ZXh0O2lmKEU9PT0iJiIpe2lmKGQmJmcubGVuZ3RoPT09ZCl7aWYoaHx8bCl0aHJvdyBuZXcgcHQoIlRvbyBtYW55IHRhYiBjaGFyYWN0ZXJzOiAmIix0Lm5leHRUb2tlbik7dC5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInRleHRFbnYiLCJUb28gZmV3IGNvbHVtbnMgc3BlY2lmaWVkIGluIHRoZSB7YXJyYXl9IGNvbHVtbiBhcmd1bWVudC4iKX10LmNvbnN1bWUoKX1lbHNlIGlmKEU9PT0iXFxlbmQiKXtTKCksZy5sZW5ndGg9PT0xJiZ3LnR5cGU9PT0ic3R5bGluZyImJncuYm9keVswXS5ib2R5Lmxlbmd0aD09PTAmJih5Lmxlbmd0aD4xfHwhZikmJnkucG9wKCkseC5sZW5ndGg8eS5sZW5ndGgrMSYmeC5wdXNoKFtdKTticmVha31lbHNlIGlmKEU9PT0iXFxcXCIpe3QuY29uc3VtZSgpO3ZhciBfPXZvaWQgMDt0Lmd1bGxldC5mdXR1cmUoKS50ZXh0IT09IiAiJiYoXz10LnBhcnNlU2l6ZUdyb3VwKCEwKSksdi5wdXNoKF8/Xy52YWx1ZTpudWxsKSxTKCkseC5wdXNoKGNHKHQpKSxnPVtdLHkucHVzaChnKSxUKCl9ZWxzZSB0aHJvdyBuZXcgcHQoIkV4cGVjdGVkICYgb3IgXFxcXCBvciBcXGNyIG9yIFxcZW5kIix0Lm5leHRUb2tlbil9cmV0dXJuIHQuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuZW5kR3JvdXAoKSx7dHlwZToiYXJyYXkiLG1vZGU6dC5tb2RlLGFkZEpvdDppLGFycmF5c3RyZXRjaDpzLGJvZHk6eSxjb2xzOmEscm93R2Fwczp2LGhza2lwQmVmb3JlQW5kQWZ0ZXI6bixoTGluZXNCZWZvcmVSb3c6eCxjb2xTZXBhcmF0aW9uVHlwZTpsLHRhZ3M6YixsZXFubzpwfX1mdW5jdGlvbiBkQSh0KXtyZXR1cm4gdC5zbGljZSgwLDEpPT09ImQiPyJkaXNwbGF5IjoidGV4dCJ9ZnVuY3Rpb24gcFYodCxlLHIpe2Zvcih2YXIgbj0kaSh0LGUsITEpLGk9ZS5zaXplTXVsdGlwbGllci9yLnNpemVNdWx0aXBsaWVyLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXS5jbGFzc2VzLmluZGV4T2YoInNpemluZyIpO3M8MD9BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuW2FdLmNsYXNzZXMsZS5zaXppbmdDbGFzc2VzKHIpKTpuW2FdLmNsYXNzZXNbcysxXT09PSJyZXNldC1zaXplIitlLnNpemUmJihuW2FdLmNsYXNzZXNbcysxXT0icmVzZXQtc2l6ZSIrci5zaXplKSxuW2FdLmhlaWdodCo9aSxuW2FdLmRlcHRoKj1pfXJldHVybiBGZS5tYWtlRnJhZ21lbnQobil9dmFyIFFzLF9vLHB0LGI0ZSxUNGUsdzRlLGs0ZSxFNGUsUzRlLENHLEE0ZSxfNGUsRDRlLEp0LFh5LEt5LFFsLHJBLFQzLHcwLHV1LFF5LENvLGswLHJzLFpsLFI0ZSxONGUsTTRlLEk0ZSxPNGUsUDRlLG5yLEg3LGIzLFQwLEY0ZSwkNGUsejRlLEc0ZSxWNGUsVTRlLEg0ZSxXNGUscTRlLGp6LFk0ZSxvZCxKbCxjMyxLeixSNyxqNGUsUXosWnosdzMsVzcsSzRlLERHLG5pLEV0LHZoLExHLFJHLFE0ZSxORyxsZCxaeSxxNyxaNGUsQXMsZGwsZWMsSnksZTNlLHQzZSxBbixILGl0LHJlLGtlLEhuLEl0LG5zLEUwLHJyLENpLFpzLEQzLEVlLHB1LFJlLE1HLGVHLE43LHUzLHRHLE03LGgzLGszLFd5LGYzLGxyLHRpLERhLGx1LGdoLFk3LHF5LGQzLHAzLHJHLHIzZSxMMyxmbCxuM2UsaTNlLGEzZSxzM2UsbzNlLGlBLENzLElHLGwzZSxjM2UsT0csdTNlLGgzZSxmM2UsZDNlLG0zLFBHLEJHLHAzZSxGZSxyaSxzZCxjdSxtM2UsZzNlLEZHLEUzLFMzLEMzLGdpLGZ1LHkzZSx2M2UseDNlLGIzZSwkaSxuRywkRyxUM2UsWDcsZXYsJHIsdHMsQW8sSzcsZHQsRG8sYUEsc0EsX3MseGgsdm4sR0csVkcsdzNlLGszZSxFM2UsUzNlLEMzZSxBM2UsXzNlLEQzZSxkdSxsQSxVRyxMM2UseTMsUjNlLE4zLE4zZSxhRyxzRyxNM2UscUcsWUcsUTcsWEcsUDNlLGpHLFl5LGNBLEtHLEIzZSxGM2UsUUcsTzcsUDcsWjcsdjMsJDNlLHozZSxaRyxCNyxGNywkNyxHM2UsSkcsVjNlLGVWLGp5LFUzZSxIM2UsVzNlLHRWLHEzZSxyVixuVixZM2UsaHUsb0csWDNlLHVBLGhBLGlWLGFWLEkzLHJjLGozZSxuYyxzVix1RyxvVixsVixoRyxjVixwQSxtQSxmRyxkRyx1VixLM2UsejcscEcsaFYsZlYsUzAsdHYsUTNlLFozZSxkVixKM2UsbUcsZTVlLGdHLHQ1ZSxtVixHNyxWNyx5Ryx2Ryx4RyxyNWUsYkcsVEcseWgsZ1YsbjVlLGk1ZSxhNWUsczVlLEo3LG81ZSxsNWUsQTMsZUEsYzVlLHdHLGdBLGtHLHlBLHlWLHZWLHhWLHRBLEVHLHgzLFU3LFNHLF8zLHZBLHhBLGJWLFRWLHdWLE8zLGtWLEVWLFNWLHU1ZSxBVj1OKCgpPT57InVzZSBzdHJpY3QiO1FzPWNsYXNzIHR7c3RhdGlje28odGhpcywiU291cmNlTG9jYXRpb24iKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9ZSx0aGlzLnN0YXJ0PXIsdGhpcy5lbmQ9bn1zdGF0aWMgcmFuZ2UoZSxyKXtyZXR1cm4gcj8hZXx8IWUubG9jfHwhci5sb2N8fGUubG9jLmxleGVyIT09ci5sb2MubGV4ZXI/bnVsbDpuZXcgdChlLmxvYy5sZXhlcixlLmxvYy5zdGFydCxyLmxvYy5lbmQpOmUmJmUubG9jfX0sX289Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUb2tlbiIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmxvYz12b2lkIDAsdGhpcy5ub2V4cGFuZD12b2lkIDAsdGhpcy50cmVhdEFzUmVsYXg9dm9pZCAwLHRoaXMudGV4dD1lLHRoaXMubG9jPXJ9cmFuZ2UoZSxyKXtyZXR1cm4gbmV3IHQocixRcy5yYW5nZSh0aGlzLGUpKX19LHB0PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5uYW1lPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLmxlbmd0aD12b2lkIDAsdGhpcy5yYXdNZXNzYWdlPXZvaWQgMDt2YXIgbj0iS2FUZVggcGFyc2UgZXJyb3I6ICIrZSxpLGEscz1yJiZyLmxvYztpZihzJiZzLnN0YXJ0PD1zLmVuZCl7dmFyIGw9cy5sZXhlci5pbnB1dDtpPXMuc3RhcnQsYT1zLmVuZCxpPT09bC5sZW5ndGg/bis9IiBhdCBlbmQgb2YgaW5wdXQ6ICI6bis9IiBhdCBwb3NpdGlvbiAiKyhpKzEpKyI6ICI7dmFyIHU9bC5zbGljZShpLGEpLnJlcGxhY2UoL1teXS9nLCIkJlx1MDMzMiIpLGg7aT4xNT9oPSJcdTIwMjYiK2wuc2xpY2UoaS0xNSxpKTpoPWwuc2xpY2UoMCxpKTt2YXIgZjthKzE1PGwubGVuZ3RoP2Y9bC5zbGljZShhLGErMTUpKyJcdTIwMjYiOmY9bC5zbGljZShhKSxuKz1oK3UrZn12YXIgZD1uZXcgRXJyb3Iobik7cmV0dXJuIGQubmFtZT0iUGFyc2VFcnJvciIsZC5fX3Byb3RvX189dC5wcm90b3R5cGUsZC5wb3NpdGlvbj1pLGkhPW51bGwmJmEhPW51bGwmJihkLmxlbmd0aD1hLWkpLGQucmF3TWVzc2FnZT1lLGR9fTtwdC5wcm90b3R5cGUuX19wcm90b19fPUVycm9yLnByb3RvdHlwZTtiNGU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmluZGV4T2YocikhPT0tMX0sImNvbnRhaW5zIiksVDRlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXZvaWQgMD9yOmV9LCJkZWZsdCIpLHc0ZT0vKFtBLVpdKS9nLGs0ZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodzRlLCItJDEiKS50b0xvd2VyQ2FzZSgpfSwiaHlwaGVuYXRlIiksRTRlPXsiJiI6IiZhbXA7IiwiPiI6IiZndDsiLCI8IjoiJmx0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7In0sUzRlPS9bJj48IiddL2c7byhDNGUsImVzY2FwZSIpO0NHPW8oZnVuY3Rpb24gdChlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwInx8ZS50eXBlPT09ImNvbG9yIj9lLmJvZHkubGVuZ3RoPT09MT90KGUuYm9keVswXSk6ZTplLnR5cGU9PT0iZm9udCI/dChlLmJvZHkpOmV9LCJnZXRCYXNlRWxlbSIpLEE0ZT1vKGZ1bmN0aW9uKGUpe3ZhciByPUNHKGUpO3JldHVybiByLnR5cGU9PT0ibWF0aG9yZCJ8fHIudHlwZT09PSJ0ZXh0b3JkInx8ci50eXBlPT09ImF0b20ifSwiaXNDaGFyYWN0ZXJCb3giKSxfNGU9byhmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICIrU3RyaW5nKGUpKTtyZXR1cm4gZX0sImFzc2VydCIpLEQ0ZT1vKGZ1bmN0aW9uKGUpe3ZhciByPS9eW1x4MDAtXHgyMF0qKFteXFwvIz9dKj8pKDp8JiMwKjU4fCYjeDAqM2F8JmNvbG9uKS9pLmV4ZWMoZSk7cmV0dXJuIHI/clsyXSE9PSI6Inx8IS9eW2EtekEtWl1bYS16QS1aMC05K1wtLl0qJC8udGVzdChyWzFdKT9udWxsOnJbMV0udG9Mb3dlckNhc2UoKToiX3JlbGF0aXZlIn0sInByb3RvY29sRnJvbVVybCIpLEp0PXtjb250YWluczpiNGUsZGVmbHQ6VDRlLGVzY2FwZTpDNGUsaHlwaGVuYXRlOms0ZSxnZXRCYXNlRWxlbTpDRyxpc0NoYXJhY3RlckJveDpBNGUscHJvdG9jb2xGcm9tVXJsOkQ0ZX0sWHk9e2Rpc3BsYXlNb2RlOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIGRpc3BsYXkgc3R5bGUgKHNvIFxcaW50IGFuZCBcXHN1bSBhcmUgbGFyZ2UsIGZvciBleGFtcGxlKSwgYW5kIGNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLiIsY2xpOiItZCwgLS1kaXNwbGF5LW1vZGUifSxvdXRwdXQ6e3R5cGU6e2VudW06WyJodG1sQW5kTWF0aG1sIiwiaHRtbCIsIm1hdGhtbCJdfSxkZXNjcmlwdGlvbjoiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuIixjbGk6Ii1GLCAtLWZvcm1hdCA8dHlwZT4ifSxsZXFubzp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246IlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLiJ9LGZsZXFuOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LiJ9LHRocm93T25FcnJvcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxjbGk6Ii10LCAtLW5vLXRocm93LW9uLWVycm9yIixjbGlEZXNjcmlwdGlvbjoiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBQYXJzZUVycm9yIGV4Y2VwdGlvbiB3aGVuIGVuY291bnRlcmluZyBhbiBlcnJvci4ifSxlcnJvckNvbG9yOnt0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiNjYzAwMDAiLGNsaToiLWMsIC0tZXJyb3ItY29sb3IgPGNvbG9yPiIsY2xpRGVzY3JpcHRpb246IkEgY29sb3Igc3RyaW5nIGdpdmVuIGluIHRoZSBmb3JtYXQgJ3JnYicgb3IgJ3JyZ2diYicgKG5vICMpLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb2xvciBvZiBlcnJvcnMgcmVuZGVyZWQgYnkgdGhlIC10IG9wdGlvbi4iLGNsaVByb2Nlc3NvcjpvKHQ9PiIjIit0LCJjbGlQcm9jZXNzb3IiKX0sbWFjcm9zOnt0eXBlOiJvYmplY3QiLGNsaToiLW0sIC0tbWFjcm8gPGRlZj4iLGNsaURlc2NyaXB0aW9uOiJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXGZvbzpleHBhbnNpb24nICh1c2UgbXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLiIsY2xpRGVmYXVsdDpbXSxjbGlQcm9jZXNzb3I6bygodCxlKT0+KGUucHVzaCh0KSxlKSwiY2xpUHJvY2Vzc29yIil9LG1pblJ1bGVUaGlja25lc3M6e3R5cGU6Im51bWJlciIsZGVzY3JpcHRpb246IlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcywgYFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXGhsaW5lYCwgYFxcaGRhc2hsaW5lYCwgYFxcdW5kZXJsaW5lYCwgYFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgYFxcZmJveGAsIGBcXGJveGVkYCwgYW5kIGBcXGZjb2xvcmJveGAuIixwcm9jZXNzb3I6byh0PT5NYXRoLm1heCgwLHQpLCJwcm9jZXNzb3IiKSxjbGk6Ii0tbWluLXJ1bGUtdGhpY2tuZXNzIDxzaXplPiIsY2xpUHJvY2Vzc29yOnBhcnNlRmxvYXR9LGNvbG9ySXNUZXh0Q29sb3I6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJNYWtlcyBcXGNvbG9yIGJlaGF2ZSBsaWtlIExhVGVYJ3MgMi1hcmd1bWVudCBcXHRleHRjb2xvciwgaW5zdGVhZCBvZiBMYVRlWCdzIG9uZS1hcmd1bWVudCBcXGNvbG9yIG1vZGUgY2hhbmdlLiIsY2xpOiItYiwgLS1jb2xvci1pcy10ZXh0LWNvbG9yIn0sc3RyaWN0Ont0eXBlOlt7ZW51bTpbIndhcm4iLCJpZ25vcmUiLCJlcnJvciJdfSwiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlR1cm4gb24gc3RyaWN0IC8gTGFUZVggZmFpdGhmdWxuZXNzIG1vZGUsIHdoaWNoIHRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgdXNlcyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExhVGVYLiIsY2xpOiItUywgLS1zdHJpY3QiLGNsaURlZmF1bHQ6ITF9LHRydXN0Ont0eXBlOlsiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXHVybC4iLGNsaToiLVQsIC0tdHJ1c3QifSxtYXhTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS8wLGRlc2NyaXB0aW9uOiJJZiBub24temVybywgYWxsIHVzZXItc3BlY2lmaWVkIHNpemVzLCBlLmcuIGluIFxccnVsZXs1MDBlbX17NTAwZW19LCB3aWxsIGJlIGNhcHBlZCB0byBtYXhTaXplIGVtcy4gT3RoZXJ3aXNlLCBlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZSIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItcywgLS1tYXgtc2l6ZSA8bj4iLGNsaVByb2Nlc3NvcjpwYXJzZUludH0sbWF4RXhwYW5kOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MWUzLGRlc2NyaXB0aW9uOiJMaW1pdCB0aGUgbnVtYmVyIG9mIG1hY3JvIGV4cGFuc2lvbnMgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIsIHRvIHByZXZlbnQgZS5nLiBpbmZpbml0ZSBtYWNybyBsb29wcy4gSWYgc2V0IHRvIEluZmluaXR5LCB0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLiIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItZSwgLS1tYXgtZXhwYW5kIDxuPiIsY2xpUHJvY2Vzc29yOm8odD0+dD09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KHQpLCJjbGlQcm9jZXNzb3IiKX0sZ2xvYmFsR3JvdXA6e3R5cGU6ImJvb2xlYW4iLGNsaTohMX19O28oTDRlLCJnZXREZWZhdWx0VmFsdWUiKTtLeT1jbGFzc3tzdGF0aWN7byh0aGlzLCJTZXR0aW5ncyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGlzcGxheU1vZGU9dm9pZCAwLHRoaXMub3V0cHV0PXZvaWQgMCx0aGlzLmxlcW5vPXZvaWQgMCx0aGlzLmZsZXFuPXZvaWQgMCx0aGlzLnRocm93T25FcnJvcj12b2lkIDAsdGhpcy5lcnJvckNvbG9yPXZvaWQgMCx0aGlzLm1hY3Jvcz12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLmNvbG9ySXNUZXh0Q29sb3I9dm9pZCAwLHRoaXMuc3RyaWN0PXZvaWQgMCx0aGlzLnRydXN0PXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWF4RXhwYW5kPXZvaWQgMCx0aGlzLmdsb2JhbEdyb3VwPXZvaWQgMCxlPWV8fHt9O2Zvcih2YXIgciBpbiBYeSlpZihYeS5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG49WHlbcl07dGhpc1tyXT1lW3JdIT09dm9pZCAwP24ucHJvY2Vzc29yP24ucHJvY2Vzc29yKGVbcl0pOmVbcl06TDRlKG4pfX1yZXBvcnROb25zdHJpY3QoZSxyLG4pe3ZhciBpPXRoaXMuc3RyaWN0O2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoaT1pKGUscixuKSksISghaXx8aT09PSJpZ25vcmUiKSl7aWYoaT09PSEwfHxpPT09ImVycm9yIil0aHJvdyBuZXcgcHQoIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICdlcnJvcic6ICIrKHIrIiBbIitlKyJdIiksbik7aT09PSJ3YXJuIj90eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKTp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gIisoInVucmVjb2duaXplZCAnIitpKyInOiAiK3IrIiBbIitlKyJdIikpfX11c2VTdHJpY3RCZWhhdmlvcihlLHIsbil7dmFyIGk9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpdHJ5e2k9aShlLHIsbil9Y2F0Y2h7aT0iZXJyb3IifXJldHVybiFpfHxpPT09Imlnbm9yZSI/ITE6aT09PSEwfHxpPT09ImVycm9yIj8hMDppPT09Indhcm4iPyh0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKSwhMSk6KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK2krIic6ICIrcisiIFsiK2UrIl0iKSksITEpfWlzVHJ1c3RlZChlKXtpZihlLnVybCYmIWUucHJvdG9jb2wpe3ZhciByPUp0LnByb3RvY29sRnJvbVVybChlLnVybCk7aWYocj09bnVsbClyZXR1cm4hMTtlLnByb3RvY29sPXJ9dmFyIG49dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChlKTp0aGlzLnRydXN0O3JldHVybiEhbn19LFFsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0eWxlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPWUsdGhpcy5zaXplPXIsdGhpcy5jcmFtcGVkPW59c3VwKCl7cmV0dXJuIFpsW1I0ZVt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIFpsW040ZVt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBabFtNNGVbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gWmxbSTRlW3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBabFtPNGVbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gWmxbUDRlW3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19LHJBPTAsVDM9MSx3MD0yLHV1PTMsUXk9NCxDbz01LGswPTYscnM9NyxabD1bbmV3IFFsKHJBLDAsITEpLG5ldyBRbChUMywwLCEwKSxuZXcgUWwodzAsMSwhMSksbmV3IFFsKHV1LDEsITApLG5ldyBRbChReSwyLCExKSxuZXcgUWwoQ28sMiwhMCksbmV3IFFsKGswLDMsITEpLG5ldyBRbChycywzLCEwKV0sUjRlPVtReSxDbyxReSxDbyxrMCxycyxrMCxyc10sTjRlPVtDbyxDbyxDbyxDbyxycyxycyxycyxyc10sTTRlPVt3MCx1dSxReSxDbyxrMCxycyxrMCxyc10sSTRlPVt1dSx1dSxDbyxDbyxycyxycyxycyxyc10sTzRlPVtUMyxUMyx1dSx1dSxDbyxDbyxycyxyc10sUDRlPVtyQSxUMyx3MCx1dSx3MCx1dSx3MCx1dV0sbnI9e0RJU1BMQVk6WmxbckFdLFRFWFQ6WmxbdzBdLFNDUklQVDpabFtReV0sU0NSSVBUU0NSSVBUOlpsW2swXX0sSDc9W3tuYW1lOiJsYXRpbiIsYmxvY2tzOltbMjU2LDU5MV0sWzc2OCw4NzldXX0se25hbWU6ImN5cmlsbGljIixibG9ja3M6W1sxMDI0LDEyNzldXX0se25hbWU6ImFybWVuaWFuIixibG9ja3M6W1sxMzI4LDE0MjNdXX0se25hbWU6ImJyYWhtaWMiLGJsb2NrczpbWzIzMDQsNDI1NV1dfSx7bmFtZToiZ2VvcmdpYW4iLGJsb2NrczpbWzQyNTYsNDM1MV1dfSx7bmFtZToiY2prIixibG9ja3M6W1sxMjI4OCwxMjU0M10sWzE5OTY4LDQwODc5XSxbNjUyODAsNjUzNzZdXX0se25hbWU6Imhhbmd1bCIsYmxvY2tzOltbNDQwMzIsNTUyMTVdXX1dO28oQjRlLCJzY3JpcHRGcm9tQ29kZXBvaW50Iik7YjM9W107SDcuZm9yRWFjaCh0PT50LmJsb2Nrcy5mb3JFYWNoKGU9PmIzLnB1c2goLi4uZSkpKTtvKEFHLCJzdXBwb3J0ZWRDb2RlcG9pbnQiKTtUMD04MCxGNGU9byhmdW5jdGlvbihlLHIpe3JldHVybiJNOTUsIisoNjIyK2UrcikrYApjLTIuNywwLC03LjE3LC0yLjcsLTEzLjUsLThjLTUuOCwtNS4zLC05LjUsLTEwLC05LjUsLTE0CmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTQKYzQ0LjIsLTMzLjMsNjUuOCwtNTAuMyw2Ni41LC01MWMxLjMsLTEuMywzLC0yLDUsLTJjNC43LDAsOC43LDMuMywxMiwxMApzMTczLDM3OCwxNzMsMzc4YzAuNywwLDM1LjMsLTcxLDEwNCwtMjEzYzY4LjcsLTE0MiwxMzcuNSwtMjg1LDIwNi41LC00MjkKYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjEKbGArZS8yLjA3NSsiIC0iK2UrYApjNS4zLC05LjMsMTIsLTE0LDIwLC0xNApINDAwMDAwdmArKDQwK2UpK2BIODQ1LjI3MjQKcy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksNwpjLTYsMCwtMTAsLTEsLTEyLC0zcy0xOTQsLTQyMiwtMTk0LC00MjJzLTY1LDQ3LC02NSw0N3oKTWArKDgzNCtlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRNYWluIiksJDRlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTI2MywiKyg2MDErZStyKStgYzAuNywwLDE4LDM5LjcsNTIsMTE5CmMzNCw3OS4zLDY4LjE2NywxNTguNywxMDIuNSwyMzhjMzQuMyw3OS4zLDUxLjgsMTE5LjMsNTIuNSwxMjAKYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjcKbGArZS8yLjA4NCsiIC0iK2UrYApjNC43LC03LjMsMTEsLTExLDE5LC0xMQpINDAwMDB2YCsoNDArZSkrYEgxMDEyLjMKcy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzIKYy0yMi4zLDQ2LjcsLTMzLjgsNzAuMywtMzQuNSw3MWMtNC43LDQuNywtMTIuMyw3LC0yMyw3cy0xMiwtMSwtMTIsLTEKcy0xMDksLTI1MywtMTA5LC0yNTNjLTcyLjcsLTE2OCwtMTA5LjMsLTI1MiwtMTEwLC0yNTJjLTEwLjcsOCwtMjIsMTYuNywtMzQsMjYKYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwegpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMSIpLHo0ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk05ODMgIisoMTArZStyKStgCmxgK2UvMy4xMysiIC0iK2UrYApjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMHZgKyg0MCtlKStgCkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDcKcy0xMiwwLC0xMiwwYy0xLjMsLTMuMywtMy43LC0xMS43LC03LC0yNWMtMzUuMywtMTI1LjMsLTEwNi43LC0zNzMuMywtMjE0LC03NDQKYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMApjMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyCmM1NiwtMTc1LjMsMTI2LjMsLTM5Ny4zLDIxMSwtNjY2Yzg0LjcsLTI2OC43LDE1My44LC00ODguMiwyMDcuNSwtNjU4LjUKYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41egpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMiIpLEc0ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00MjQsIisoMjM5OCtlK3IpK2AKYy0xLjMsLTAuNywtMzguNSwtMTcyLC0xMTEuNSwtNTE0Yy03MywtMzQyLC0xMDkuOCwtNTEzLjMsLTExMC41LC01MTQKYzAsLTIsLTEwLjcsMTQuMywtMzIsNDljLTQuNyw3LjMsLTkuOCwxNS43LC0xNS41LDI1Yy01LjcsOS4zLC05LjgsMTYsLTEyLjUsMjAKcy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxCnMyMDksOTY4LDIwOSw5NjhjMCwtMiw4NC43LC0zNjEuNywyNTQsLTEwNzljMTY5LjMsLTcxNy4zLDI1NC43LC0xMDc3LjcsMjU2LC0xMDgxCmxgK2UvNC4yMjMrIiAtIitlK2BjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMAp2YCsoNDArZSkrYEgxMDE0LjYKcy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NQpjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJ6IE1gKygxMDAxK2UpKyIgIityK2AKaDQwMDAwMHZgKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMyIpLFY0ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00NzMsIisoMjcxMytlK3IpK2AKYzMzOS4zLC0xNzk5LjMsNTA5LjMsLTI3MDAsNTEwLC0yNzAyIGxgK2UvNS4yOTgrIiAtIitlK2AKYzMuMywtNy4zLDkuMywtMTEsMTgsLTExIEg0MDAwMDB2YCsoNDArZSkrYEgxMDE3LjcKcy05MC41LDQ3OCwtMjc2LjIsMTQ2NmMtMTg1LjcsOTg4LC0yNzkuNSwxNDgzLC0yODEuNSwxNDg1Yy0yLDYsLTEwLDksLTI0LDkKYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDAKYzAsLTEuMywtNS4zLDguNywtMTYsMzBjLTEwLjcsMjEuMywtMjEuMyw0Mi43LC0zMiw2NHMtMTYsMzMsLTE2LDMzcy0yNiwtMjYsLTI2LC0yNgpzNzYsLTE1Myw3NiwtMTUzczc3LC0xNTEsNzcsLTE1MWMwLjcsMC43LDM1LjcsMjAyLDEwNSw2MDRjNjcuMyw0MDAuNywxMDIsNjAyLjcsMTA0LAo2MDZ6TWArKDEwMDErZSkrIiAiK3IrImg0MDAwMDB2IisoNDArZSkrIkgxMDE3Ljd6In0sInNxcnRTaXplNCIpLFU0ZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUvMjtyZXR1cm4iTTQwMDAwMCAiK2UrIiBIMCBMIityKyIgMCBsNjUgNDUgTDE0NSAiKyhlLTgwKSsiIEg0MDAwMDB6In0sInBoYXNlUGF0aCIpLEg0ZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1uLTU0LXItZTtyZXR1cm4iTTcwMiAiKyhlK3IpKyJINDAwMDAwIisoNDArZSkrYApINzQydmAraStgbC00IDQtNCA0Yy0uNjY3LjcgLTIgMS41LTQgMi41cy00LjE2NyAxLjgzMy02LjUgMi41LTUuNSAxLTkuNSAxCmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzAKYy00LTMuMzMzLTguMzMzLTcuNjY3LTEzIC0xM2wtMTMtMTNsNzctMTU1IDc3LTE1NmM2NiAxOTkuMzMzIDEzOSA0MTkuNjY3CjIxOSA2NjEgbDIxOCA2NjF6TTcwMiBgK3IrIkg0MDAwMDB2IisoNDArZSkrIkg3NDJ6In0sInNxcnRUYWxsIiksVzRlPW8oZnVuY3Rpb24oZSxyLG4pe3I9MWUzKnI7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2Uic3FydE1haW4iOmk9RjRlKHIsVDApO2JyZWFrO2Nhc2Uic3FydFNpemUxIjppPSQ0ZShyLFQwKTticmVhaztjYXNlInNxcnRTaXplMiI6aT16NGUocixUMCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOmk9RzRlKHIsVDApO2JyZWFrO2Nhc2Uic3FydFNpemU0IjppPVY0ZShyLFQwKTticmVhaztjYXNlInNxcnRUYWxsIjppPUg0ZShyLFQwLG4pfXJldHVybiBpfSwic3FydFBhdGgiKSxxNGU9byhmdW5jdGlvbihlLHIpe3N3aXRjaChlKXtjYXNlIlx1MjM5QyI6cmV0dXJuIk0yOTEgMCBINDE3IFYiK3IrIiBIMjkxeiBNMjkxIDAgSDQxNyBWIityKyIgSDI5MXoiO2Nhc2UiXHUyMjIzIjpyZXR1cm4iTTE0NSAwIEgxODggViIrcisiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3IrIiBIMTQ1eiI7Y2FzZSJcdTIyMjUiOnJldHVybiJNMTQ1IDAgSDE4OCBWIityKyIgSDE0NXogTTE0NSAwIEgxODggViIrcisiIEgxNDV6IisoIk0zNjcgMCBINDEwIFYiK3IrIiBIMzY3eiBNMzY3IDAgSDQxMCBWIityKyIgSDM2N3oiKTtjYXNlIlx1MjM5RiI6cmV0dXJuIk00NTcgMCBINTgzIFYiK3IrIiBINDU3eiBNNDU3IDAgSDU4MyBWIityKyIgSDQ1N3oiO2Nhc2UiXHUyM0EyIjpyZXR1cm4iTTMxOSAwIEg0MDMgViIrcisiIEgzMTl6IE0zMTkgMCBINDAzIFYiK3IrIiBIMzE5eiI7Y2FzZSJcdTIzQTUiOnJldHVybiJNMjYzIDAgSDM0NyBWIityKyIgSDI2M3ogTTI2MyAwIEgzNDcgViIrcisiIEgyNjN6IjtjYXNlIlx1MjNBQSI6cmV0dXJuIk0zODQgMCBINTA0IFYiK3IrIiBIMzg0eiBNMzg0IDAgSDUwNCBWIityKyIgSDM4NHoiO2Nhc2UiXHUyM0QwIjpyZXR1cm4iTTMxMiAwIEgzNTUgViIrcisiIEgzMTJ6IE0zMTIgMCBIMzU1IFYiK3IrIiBIMzEyeiI7Y2FzZSJcdTIwMTYiOnJldHVybiJNMjU3IDAgSDMwMCBWIityKyIgSDI1N3ogTTI1NyAwIEgzMDAgViIrcisiIEgyNTd6IisoIk00NzggMCBINTIxIFYiK3IrIiBINDc4eiBNNDc4IDAgSDUyMSBWIityKyIgSDQ3OHoiKTtkZWZhdWx0OnJldHVybiIifX0sImlubmVyUGF0aCIpLGp6PXtkb3VibGVsZWZ0YXJyb3c6YE0yNjIgMTU3CmwxMC0xMGMzNC0zNiA2Mi43LTc3IDg2LTEyMyAzLjMtOCA1LTEzLjMgNS0xNiAwLTUuMy02LjctOC0yMC04LTcuMwogMC0xMi4yLjUtMTQuNSAxLjUtMi4zIDEtNC44IDQuNS03LjUgMTAuNS00OS4zIDk3LjMtMTIxLjcgMTY5LjMtMjE3IDIxNi0yOAogMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41CmMyIDEuNyA2LjMgMy41IDEzIDUuNSA2OCAxNy4zIDEyOC4yIDQ3LjggMTgwLjUgOTEuNSA1Mi4zIDQzLjcgOTMuOCA5Ni4yIDEyNC41CiAxNTcuNSA5LjMgOCAxNS4zIDEyLjMgMTggMTNoNmMxMi0uNyAxOC00IDE4LTEwIDAtMi0xLjctNy01LTE1LTIzLjMtNDYtNTItODcKLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjcKLTIgNi0zLjcgMTAtNSAzNi43LTE2IDcyLjMtMzcuMyAxMDctNjRsMTAtOGgzOTk3ODJ2LTQwegptOCAwdjQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxkb3VibGVyaWdodGFycm93OmBNMzk5NzM4IDM5MmwKLTEwIDEwYy0zNCAzNi02Mi43IDc3LTg2IDEyMy0zLjMgOC01IDEzLjMtNSAxNiAwIDUuMyA2LjcgOCAyMCA4IDcuMyAwIDEyLjItLjUKIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OAotMzMgNi43LTIgMTEtMy44IDEzLTUuNSAyLTEuNyAzLTQuMiAzLTcuNXMtMS01LjgtMy03LjVjLTItMS43LTYuMy0zLjUtMTMtNS41LTY4Ci0xNy4zLTEyOC4yLTQ3LjgtMTgwLjUtOTEuNS01Mi4zLTQzLjctOTMuOC05Ni4yLTEyNC41LTE1Ny41LTkuMy04LTE1LjMtMTIuMy0xOAotMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODIKYy0zMjggMCAwIDAgMCAwbDEwIDhjMjYuNyAyMCA2NS43IDQzIDExNyA2OS0yLjcgMi02IDMuNy0xMCA1LTM2LjcgMTYtNzIuMyAzNy4zCi0xMDcgNjRsLTEwIDhIMHY0MHpNMCAxNTd2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpgLGxlZnRhcnJvdzpgTTQwMDAwMCAyNDFIMTEwbDMtM2M2OC43LTUyLjcgMTEzLjctMTIwCiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOAotNS41IDEyLjUtMS4zIDQuNy0yLjcgMTAuMy00IDE3LTEyIDQ4LjctMzQuOCA5Mi02OC41IDEzMFM2NS4zIDIyOC4zIDE4IDI0NwpjLTEwIDQtMTYgNy43LTE4IDExIDAgOC43IDYgMTQuMyAxOCAxNyA0Ny4zIDE4LjcgODcuOCA0NyAxMjEuNSA4NVMxOTYgNDQxLjMgMjA4CiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMKIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxLTMuNyAyMS0xMSAwLTItMi0xMC4zLTYtMjUtMjAtNzkuMy02NS0xNDYuNy0xMzUtMjAyCiBsLTMtM2gzOTk4OTB6TTEwMCAyNDF2NDBoMzk5OTAwdi00MHpgLGxlZnRicmFjZTpgTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExNwotNDUgMTc5LTUwaDM5OTU3N3YxMjBINDAzYy00My4zIDctODEgMTUtMTEzIDI2LTEwMC43IDMzLTE3OS43IDkxLTIzNyAxNzQtMi43CiA1LTYgOS0xMCAxMy0uNyAxLTcuMyAxLTIwIDFINnpgLGxlZnRicmFjZXVuZGVyOmBNMCA2bDYtNmgxN2MxMi42ODggMCAxOS4zMTMuMyAyMCAxIDQgNCA3LjMxMyA4LjMgMTAgMTMKIDM1LjMxMyA1MS4zIDgwLjgxMyA5My44IDEzNi41IDEyNy41IDU1LjY4OCAzMy43IDExNy4xODggNTUuOCAxODQuNSA2Ni41LjY4OAogMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjcKLTMzMS0xNjFDNjAuNjg3IDEzOC43IDMyLjMxMiA5OS4zIDcgNTRMMCA0MVY2emAsbGVmdGdyb3VwOmBNNDAwMDAwIDgwCkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDAKIDQzNSAwaDM5OTU2NXpgLGxlZnRncm91cHVuZGVyOmBNNDAwMDAwIDI2MgpINDM1QzY0IDI2MiAxNjguMyAxMTIuNiAyMSA4MmMtNS45LTEuMi0xOCAwLTE4IDAtMiAwLTMgMS0zIDN2MzhjNzYgMTU4IDI1NyAyMTkKIDQzNSAyMTloMzk5NTY1emAsbGVmdGhhcnBvb246YE0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zCi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1Ci0xOC4zIDMtMjEtMS4zLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43Ci0xOTYgMjI4LTYuNyA0LjctMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwemAsbGVmdGhhcnBvb25wbHVzOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMy0zLjMgMTAuMi05LjUKIDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNS0xOC4zIDMtMjEtMS4zCi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjcKLTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpNMCA0MzV2NDBoNDAwMDAwdi00MHoKbTAgMHY0MGg0MDAwMDB2LTQwemAsbGVmdGhhcnBvb25kb3duOmBNNyAyNDFjLTQgNC02LjMzMyA4LjY2Ny03IDE0IDAgNS4zMzMuNjY3IDkgMiAxMXM1LjMzMwogNS4zMzMgMTIgMTBjOTAuNjY3IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMzMyAxMC42NjcgNi4zMzMgMTYuMzMzIDkgMTcgMiAuNjY3IDUKIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjcKLTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwek05MyAyODEgSDQwMDAwMCB2LTQwTDcgMjQxemAsbGVmdGhhcnBvb25kb3ducGx1czpgTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTIKIDEwYzkwLjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMyAxMC43IDYuMyAxNi4zIDkgMTcgMiAuNyA1IDEgOSAxaDVjMTAuNyAwIDE2LjcKLTIgMTgtNiAyLTIuNyAxLTkuNy0zLTIxLTMyLTg3LjMtODIuNy0xNTcuNy0xNTItMjExbC0zLTNoMzk5OTA3di00MEg3em05MyAwCnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpgLGxlZnRob29rOmBNNDAwMDAwIDI4MSBIMTAzcy0zMy0xMS4yLTYxLTMzLjVTMCAxOTcuMyAwIDE2NHMxNC4yLTYxLjIgNDIuNQotODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuMwotNjguNyAxNS43LTg2IDM3LTEwIDEyLTE1IDI1LjMtMTUgNDAgMCAyMi43IDkuOCA0MC43IDI5LjUgNTQgMTkuNyAxMy4zIDQzLjUgMjEKIDcxLjUgMjNoMzk5ODU5ek0xMDMgMjgxdi00MGgzOTk4OTd2NDB6YCxsZWZ0bGluZXNlZ21lbnQ6YE00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6Ck00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6YCxsZWZ0bWFwc3RvOmBNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwegpNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwemAsbGVmdFRvRnJvbTpgTTAgMTQ3aDQwMDAwMHY0MEgwem0wIDIxNGM2OCA0MCAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzCi0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OS03MC0xMDFsLTctOGgzOTk5MDV2LTQwSDk1bDctOApjMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zCiA2OCAzMjEgMCAzNjF6bTAtMTc0di00MGgzOTk5MDB2NDB6bTEwMCAxNTR2NDBoMzk5OTAwdi00MHpgLGxvbmdlcXVhbDpgTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6Ck0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwemAsbWlkYnJhY2U6YE0yMDA0MjggMzM0CmMtMTAwLjctOC4zLTE5NS4zLTQ0LTI4MC0xMDgtNTUuMy00Mi0xMDEuNy05My0xMzktMTUzbC05LTE0Yy0yLjcgNC01LjcgOC43LTkgMTQKLTUzLjMgODYuNy0xMjMuNyAxNTMtMjExIDE5OS02Ni43IDM2LTEzNy4zIDU2LjMtMjEyIDYySDBWMjE0aDE5OTU2OGMxNzguMy0xMS43CiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMQogMTIgNDQuNyA1OS4zIDEwMS4zIDEwNi4zIDE3MCAxNDFzMTQ1LjMgNTQuMyAyMjkgNjBoMTk5NTcydjEyMHpgLG1pZGJyYWNldW5kZXI6YE0xOTk1NzIgMjE0CmMxMDAuNyA4LjMgMTk1LjMgNDQgMjgwIDEwOCA1NS4zIDQyIDEwMS43IDkzIDEzOSAxNTNsOSAxNGMyLjctNCA1LjctOC43IDktMTQKIDUzLjMtODYuNyAxMjMuNy0xNTMgMjExLTE5OSA2Ni43LTM2IDEzNy4zLTU2LjMgMjEyLTYyaDE5OTU2OHYxMjBIMjAwNDMyYy0xNzguMwogMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDAKLTUtNC0xMS0xMi00NC43LTU5LjMtMTAxLjMtMTA2LjMtMTcwLTE0MXMtMTQ1LjMtNTQuMy0yMjktNjBIMFYyMTR6YCxvaWludFNpemUxOmBNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42Ci0zMjAuMyAxNzcuNlMxOTMuMSAzMjAuNiAxOTMuMSAyNDkuOGMwLTcxLjQgNDYuOS0xNzguMiAzMTkuNS0xNzguMnoKbTM2OC4xIDE3OC4yYzAtODYuNC02MC45LTIxNS40LTM2OC4xLTIxNS40LTMwNi40IDAtMzY3LjMgMTI5LTM2Ny4zIDIxNS40IDAgODUuOAo2MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44emAsb2lpbnRTaXplMjpgTTc1Ny44IDEwMC4xYzM4NC43IDAgNDUxLjEgMTM3LjYgNDUxLjEgMjMwIDAgOTEuMy02Ni40IDIyOC44Ci00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6Cm01MDIuNCAyMzBjMC0xMTEuMi04Mi40LTI3Ny4yLTUwMi40LTI3Ny4ycy01MDQgMTY2LTUwNCAyNzcuMgpjMCAxMTAgODQgMjc2IDUwNCAyNzZzNTAyLjQtMTY2IDUwMi40LTI3NnpgLG9paWludFNpemUxOmBNNjgxLjQgNzEuNmM0MDguOSAwIDQ4MC41IDEwNi44IDQ4MC41IDE3OC4yIDAgNzAuOC03MS42IDE3Ny42Ci00ODAuNSAxNzcuNlMyMDIuMSAzMjAuNiAyMDIuMSAyNDkuOGMwLTcxLjQgNzAuNS0xNzguMiA0NzkuMy0xNzguMnoKbTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDAKODUuOCA4Ni44IDIxNC44IDUyNC43IDIxNC44IDQzOC45IDAgNTI1LjctMTI5IDUyNS43LTIxNC44emAsb2lpaW50U2l6ZTI6YE0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOAotNzA3LjggMjc1LjgtNjA2IDAtNzEwLjItMTY1LjgtNzEwLjItMjc1LjhDMzExIDIxOC44IDQxNS4yIDUzIDEwMjEuMiA1M3oKbTc3MC40IDI3Ny4xYzAtMTMxLjItMTI2LjQtMzI3LjYtNzcwLjUtMzI3LjZTMjQ4LjQgMTk4LjkgMjQ4LjQgMzMwLjEKYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40emAscmlnaHRhcnJvdzpgTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgKLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAKIDExIDggMCAxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNwogMzktODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUKLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CiAxNTEuNyAxMzkgMjA1em0wIDB2NDBoMzk5OTAwdi00MHpgLHJpZ2h0YnJhY2U6YE00MDAwMDAgNTQybAotNiA2aC0xN2MtMTIuNyAwLTE5LjMtLjMtMjAtMS00LTQtNy4zLTguMy0xMC0xMy0zNS4zLTUxLjMtODAuOC05My44LTEzNi41LTEyNy41CnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxCmMxMjQuNyA4IDIzNSA2MS43IDMzMSAxNjEgMzEuMyAzMy4zIDU5LjcgNzIuNyA4NSAxMThsNyAxM3YzNXpgLHJpZ2h0YnJhY2V1bmRlcjpgTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuMwogMjguNy0xMTcgNDUtMTc5IDUwSC0zMDBWMjE0aDM5OTg5N2M0My4zLTcgODEtMTUgMTEzLTI2IDEwMC43LTMzIDE3OS43LTkxIDIzNwotMTc0IDIuNy01IDYtOSAxMC0xMyAuNy0xIDcuMy0xIDIwLTFoMTd6YCxyaWdodGdyb3VwOmBNMCA4MGgzOTk1NjVjMzcxIDAgMjY2LjcgMTQ5LjQgNDE0IDE4MCA1LjkgMS4yIDE4IDAgMTggMCAyIDAKIDMtMSAzLTN2LTM4Yy03Ni0xNTgtMjU3LTIxOS00MzUtMjE5SDB6YCxyaWdodGdyb3VwdW5kZXI6YE0wIDI2MmgzOTk1NjVjMzcxIDAgMjY2LjctMTQ5LjQgNDE0LTE4MCA1LjktMS4yIDE4IDAgMTgKIDAgMiAwIDMgMSAzIDN2MzhjLTc2IDE1OC0yNTcgMjE5LTQzNSAyMTlIMHpgLHJpZ2h0aGFycG9vbjpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMKLTMuNy0xNS4zLTExLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yCi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTgKIDY5LjIgOTIgOTQuNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25wbHVzOmBNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMQotMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTItMTAuNyAwLTE2LjcKIDItMTggNi0yIDIuNy0xIDkuNyAzIDIxIDE1LjMgNDIgMzYuNyA4MS44IDY0IDExOS41IDI3LjMgMzcuNyA1OCA2OS4yIDkyIDk0LjV6Cm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25kb3duOmBNMzk5NzQ3IDUxMWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44IDE1LTIuNXM0LjctNi44CiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNQotNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMtNjQuNyA1Ny05MiA5NQotMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bnBsdXM6YE0zOTk3NDcgNzA1YzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjgKIDE1LTIuNXM0LjctNi44IDgtMTUuNWM0MC05NCA5OS4zLTE2Ni4zIDE3OC0yMTcgMTMuMy04IDIwLjMtMTIuMyAyMS0xMyA1LjMtMy4zCiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMwotNjQuNyA1Ny05MiA5NS0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgNDM1djQwaDM5OTkwMHYtNDB6Cm0wLTE5NHY0MGg0MDAwMDB2LTQwem0wIDB2NDBoNDAwMDAwdi00MHpgLHJpZ2h0aG9vazpgTTM5OTg1OSAyNDFjLTc2NCAwIDAgMCAwIDAgNDAtMy4zIDY4LjctMTUuNyA4Ni0zNyAxMC0xMiAxNS0yNS4zCiAxNS00MCAwLTIyLjctOS44LTQwLjctMjkuNS01NC0xOS43LTEzLjMtNDMuNS0yMS03MS41LTIzLTE3LjMtMS4zLTI2LTgtMjYtMjAgMAotMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxCiA2Ni44cy0xNCA2MS4yLTQyIDgzLjVjLTI4IDIyLjMtNjEgMzMuNS05OSAzMy41TDAgMjQxeiBNMCAyODF2LTQwaDM5OTg1OXY0MHpgLHJpZ2h0bGluZXNlZ21lbnQ6YE0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHoKTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwemAscmlnaHRUb0Zyb206YE00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjMKIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMyA0MS4zIDY5IDcwIDEwMWw3IDhIMHY0MGgzOTk5MDVsLTcgOGMtMjguNyAzMgotNTIgNjUuNy03MCAxMDEtMTAuNyAyMy4zLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIzYzI0LTY5LjMgNzEuMy0xMjUgMTQyCi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6YCx0d29oZWFkbGVmdGFycm93OmBNMCAxNjdjNjggNDAKIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjMtLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjkKLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuMwotNDAtNjcuMy02Ni05NmwtOS05aDM5OTcxNnYtNDBIMjg0bDktOWMyNi0yOC43IDQ4LTYwLjcgNjYtOTYgMTIuNy0yMy4zMzMgMTkKLTM3LjMzMyAxOS00MmgtNDZjLTE4IDU0LTUyLjMgMTAwLjctMTAzIDE0MGwtOSA3SDk1bDctOGMyOC43LTMyIDUyLTY1LjcgNzAtMTAxCiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6YCx0d29oZWFkcmlnaHRhcnJvdzpgTTQwMDAwMCAxNjcKYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zCiA0MS4zIDY5IDcwIDEwMWw3IDhoLTEyNWwtOS03Yy01MC43LTM5LjMtODUtODYtMTAzLTE0MGgtNDZjMCA0LjcgNi4zIDE4LjcgMTkgNDIKIDE4IDM1LjMgNDAgNjcuMyA2NiA5Nmw5IDlIMHY0MGgzOTk3MTZsLTkgOWMtMjYgMjguNy00OCA2MC43LTY2IDk2LTEyLjcgMjMuMzMzCi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwCiAxMDEtMTAuNyAyMy4zMzMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjJjMjcuMy03MS4zIDc1LTEyNyAxNDMtMTY3emAsdGlsZGUxOmBNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTcKLTIuMTc1LTktNS40MzdMMiA5N2MtMS0yLTItNC0yLTYgMC00IDItNyA1LTlsMjAtMTJDMTE2IDEyIDE3MSAwIDIwNyAwYzg2IDAKIDExNCA2OCAxOTEgNjggNzggMCAxNjgtNjggMTc3LTY4IDQgMCA3IDIgOSA1bDEyIDE5YzEgMi4xNzUgMiA0LjM1IDIgNi41MjUgMAogNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOAotNjguMjY3Ljg0Ny0xMTMtNzMuOTUyLTE5MS03My45NTJ6YCx0aWxkZTI6YE0zNDQgNTUuMjY2Yy0xNDIgMC0zMDAuNjM4IDgxLjMxNi0zMTEuNSA4Ni40MTgKLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45CiAzMS45IDI4MyAwIDM1OCAwYzE0OCAwIDE4OCAxMjIgMzMxIDEyMnMzMTQtOTcgMzI2LTk3YzQgMCA4IDIgMTAgN2w3IDIxLjExNApjMSAyLjE0IDEgMy4yMSAxIDQuMjggMCA1LjM0Ny0zIDkuNjI2LTcgMTAuNjk2bC0yMi4zIDEyLjYyMkM4NTIuNiAxNTguMzcyIDc1MQogMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxemAsdGlsZGUzOmBNNzg2IDU5QzQ1NyA1OSAzMiAxNzUuMjQyIDEzIDE3NS4yNDJjLTYgMC0xMC0zLjQ1NwotMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDAKIDQxMS44IDE1NyA3NDYuOCAxNTcgMzI4IDAgNzU0LTExMiA3NzMtMTEyIDUgMCAxMCAzIDExIDlsMSAxNC4wNzVjMSA4LjA2Ni0uNjk3CiAxNi41OTUtNi42OTcgMTcuNDkybC0yMS4wNTIgNy4zMWMtMzY3LjkgOTguMTQ2LTYwOS4xNSAxMjIuNjk2LTc3OC4xNSAxMjIuNjk2CiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6YCx0aWxkZTQ6YE03ODYgNThDNDU3IDU4IDMyIDE3Ny40ODcgMTMgMTc3LjQ4N2MtNiAwLTEwLTMuMzQ1Ci0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOQogMTc3IDc0NCAxNzcgMzI4IDAgNzU0LTEyNyA3NzMtMTI3IDUgMCAxMCAzIDExIDlsMSAxNC43OTRjMSA3LjgwNS0zIDEzLjM4LTkKIDE0LjQ5NWwtMjAuNyA1LjU3NGMtMzY2Ljg1IDk5Ljc5LTYwNy4zIDEzOS4zNzItNzc2LjMgMTM5LjM3Mi0zMzggMC00MDkKIC0xNzUuMjM2LTc0NC0xNzUuMjM2emAsdmVjOmBNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNQozLjMzMyAyLjY2NyA2LjY2NyA5IDEwIDE5IDYuNjY3IDI0LjY2NyAyMC4zMzMgNDMuNjY3IDQxIDU3IDcuMzMzIDQuNjY3IDExCjEwLjY2NyAxMSAxOCAwIDYtMSAxMC0zIDEycy02LjY2NyA1LTE0IDljLTI4LjY2NyAxNC42NjctNTMuNjY3IDM1LjY2Ny03NSA2MwotMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDEKLTcgMWMtNC42NjcgMC05LjE2Ny0xLjgzMy0xMy41LTUuNVMzMzcgMTg0IDMzNyAxNzhjMC0xMi42NjcgMTUuNjY3LTMyLjMzMyA0Ny01OQpIMjEzbC0xNzEtMWMtOC42NjctNi0xMy0xMi4zMzMtMTMtMTkgMC00LjY2NyA0LjMzMy0xMS4zMzMgMTMtMjBoMzU5CmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5emAsd2lkZWhhdDE6YE01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyCmMtMSA1LTUgOS0xMSA5aC0yTDUzMiA2NyAxOSAxNTloLTJjLTUgMC05LTQtMTEtOWwtNS0yMmMtMS02IDItMTIgOC0xM3pgLHdpZGVoYXQyOmBNMTE4MSAwaDJsMTE3MSAxNzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDM6YE0xMTgxIDBoMmwxMTcxIDIzNmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlaGF0NDpgTTExODEgMGgybDExNzEgMjk2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVjaGVjazE6YE01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLAotNSwtNSwtOSwtMTEsLTloLTJsLTUxMiw5MmwtNTEzLC05MmgtMmMtNSwwLC05LDQsLTExLDlsLTUsMjJjLTEsNiwyLDEyLDgsMTN6YCx3aWRlY2hlY2syOmBNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDE1M2wtMTE2NywtMTUzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazM6YE0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjEzbC0xMTY3LC0yMTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsd2lkZWNoZWNrNDpgTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwyNzNsLTExNjcsLTI3M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCxiYXJhYm92ZWxlZnRhcnJvdzpgTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMgpjNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41CmMtMi4zIDEuNyAtNC4yIDUuOCAtNS41IDEyLjVjLTEuMyA0LjcgLTIuNyAxMC4zIC00IDE3Yy0xMiA0OC43IC0zNC44IDkyIC02OC41IDEzMApzLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3CjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNgpzMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMyAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMSAtMy43IDIxIC0xMQpjMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHoKTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6YCxyaWdodGFycm93YWJvdmViYXI6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzIKLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwIDExIDggMAoxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOQotODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNQotMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwemAsYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uOmBNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxNwpjMiwwLjcsNSwxLDksMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMQpjLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwCmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHoKTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6IE0wIDI4MSB2LTQwIEgzOTk5MDggdjQwemAscmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjpgTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwCmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LAotMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2CmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXoKTTAgMjQxIHY0MCBIMzk5OTA4IHYtNDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHpgLHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjpgTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMQpjMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3YzIsMC43LDUsMSw5LAoxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsCi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6Ck05MyA0MzUgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHpgLHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6YE01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck01MDAgMjQxIHY0MCBIMzk5NDA4IHYtNDB6IE01MDAgNDM1IHY0MCBINDAwMDAwIHYtNDB6YH0sWTRlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2goZSl7Y2FzZSJsYnJhY2siOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjE3NTkgaDM0NyB2LTg0Ckg0MDN6IE00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInJicmFjayI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2IityK2AgdjE3NTkgSDAgdjg0IEgzNDd6Ck0zNDcgMTc1OSBWMCBIMjYzIFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInZlcnQiOnJldHVybiJNMTQ1IDE1IHY1ODUgdiIrcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UiZG91YmxldmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2IityK2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstcitgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArcitgIHY1ODUgaDQzegpNMzY3IDE1IHY1ODUgdmArcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE00MTAgMTUgSDM2NyB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UibGZsb29yIjpyZXR1cm4iTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHYiK3IrYCB2MTcxNSBoMjYzIHY4NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3IrIiB2MTcxNSBIMzE5eiI7Y2FzZSJyZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrcitgIHYxNzk5IEgwIHYtODQgSDMxOXoKTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2YCtyKyIgdjE3MTUgSDMxOXoiO2Nhc2UibGNlaWwiOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjYwMiBoODR6Ck00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2NjAyIGg4NHoiO2Nhc2UicmNlaWwiOnJldHVybiJNMzQ3IDE3NTkgVjAgSDAgVjg0IEgyNjMgVjE3NTkgdiIrcitgIHY2MDIgaDg0egpNMzQ3IDE3NTkgVjAgaC04NCBWMTc1OSB2YCtyKyIgdjYwMiBoODR6IjtjYXNlImxwYXJlbiI6cmV0dXJuYE04NjMsOWMwLC0yLC0yLC01LC02LC05YzAsMCwtMTcsMCwtMTcsMGMtMTIuNywwLC0xOS4zLDAuMywtMjAsMQpjLTUuMyw1LjMsLTEwLjMsMTEsLTE1LDE3Yy0yNDIuNywyOTQuNywtMzk1LjMsNjgyLC00NTgsMTE2MmMtMjEuMywxNjMuMywtMzMuMywzNDksCi0zNiw1NTcgbDAsYCsocis4NCkrYGMwLjIsNiwwLDI2LDAsNjBjMiwxNTkuMywxMCwzMTAuNywyNCw0NTRjNTMuMyw1MjgsMjEwLAo5NDkuNyw0NzAsMTI2NWM0LjcsNiw5LjcsMTEuNywxNSwxN2MwLjcsMC43LDcsMSwxOSwxYzAsMCwxOCwwLDE4LDBjNCwtNCw2LC03LDYsLTkKYzAsLTIuNywtMy4zLC04LjcsLTEwLC0xOGMtMTM1LjMsLTE5Mi43LC0yMzUuNSwtNDE0LjMsLTMwMC41LC02NjVjLTY1LC0yNTAuNywtMTAyLjUsCi01NDQuNywtMTEyLjUsLTg4MmMtMiwtMTA0LC0zLC0xNjcsLTMsLTE4OQpsMCwtYCsocis5MikrYGMwLC0xNjIuNyw1LjcsLTMxNCwxNywtNDU0YzIwLjcsLTI3Miw2My43LC01MTMsMTI5LC03MjNjNjUuMywKLTIxMCwxNTUuMywtMzk2LjMsMjcwLC01NTljNi43LC05LjMsMTAsLTE1LjMsMTAsLTE4emA7Y2FzZSJycGFyZW4iOnJldHVybmBNNzYsMGMtMTYuNywwLC0yNSwzLC0yNSw5YzAsMiwyLDYuMyw2LDEzYzIxLjMsMjguNyw0Mi4zLDYwLjMsCjYzLDk1Yzk2LjcsMTU2LjcsMTcyLjgsMzMyLjUsMjI4LjUsNTI3LjVjNTUuNywxOTUsOTIuOCw0MTYuNSwxMTEuNSw2NjQuNQpjMTEuMywxMzkuMywxNywyOTAuNywxNyw0NTRjMCwyOCwxLjcsNDMsMy4zLDQ1bDAsYCsocis5KStgCmMtMyw0LC0zLjMsMTYuNywtMy4zLDM4YzAsMTYyLC01LjcsMzEzLjcsLTE3LDQ1NWMtMTguNywyNDgsLTU1LjgsNDY5LjMsLTExMS41LDY2NApjLTU1LjcsMTk0LjcsLTEzMS44LDM3MC4zLC0yMjguNSw1MjdjLTIwLjcsMzQuNywtNDEuNyw2Ni4zLC02Myw5NWMtMiwzLjMsLTQsNywtNiwxMQpjMCw3LjMsNS43LDExLDE3LDExYzAsMCwxMSwwLDExLDBjOS4zLDAsMTQuMywtMC4zLDE1LC0xYzUuMywtNS4zLDEwLjMsLTExLDE1LC0xNwpjMjQyLjcsLTI5NC43LDM5NS4zLC02ODEuNyw0NTgsLTExNjFjMjEuMywtMTY0LjcsMzMuMywtMzUwLjcsMzYsLTU1OApsMCwtYCsocisxNDQpK2BjLTIsLTE1OS4zLC0xMCwtMzEwLjcsLTI0LC00NTRjLTUzLjMsLTUyOCwtMjEwLC05NDkuNywKLTQ3MCwtMTI2NWMtNC43LC02LC05LjcsLTExLjcsLTE1LC0xN2MtMC43LC0wLjcsLTYuNywtMSwtMTgsLTF6YDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBzdHJldGNoeSBkZWxpbWl0ZXIuIil9fSwidGFsbERlbGltIiksb2Q9Y2xhc3N7c3RhdGlje28odGhpcywiRG9jdW1lbnRGcmFnbWVudCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49ZSx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3MoZSl7cmV0dXJuIEp0LmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxlKX10b05vZGUoKXtmb3IodmFyIGU9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcl0udG9Ob2RlKCkpO3JldHVybiBlfXRvTWFya3VwKCl7Zm9yKHZhciBlPSIiLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllKz10aGlzLmNoaWxkcmVuW3JdLnRvTWFya3VwKCk7cmV0dXJuIGV9dG9UZXh0KCl7dmFyIGU9byhyPT5yLnRvVGV4dCgpLCJ0b1RleHQiKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZSkuam9pbigiIil9fSxKbD17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sYzM9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sS3o9e1x1MDBDNToiQSIsXHUwMEQwOiJEIixcdTAwREU6Im8iLFx1MDBFNToiYSIsXHUwMEYwOiJkIixcdTAwRkU6Im8iLFx1MDQxMDoiQSIsXHUwNDExOiJCIixcdTA0MTI6IkIiLFx1MDQxMzoiRiIsXHUwNDE0OiJBIixcdTA0MTU6IkUiLFx1MDQxNjoiSyIsXHUwNDE3OiIzIixcdTA0MTg6Ik4iLFx1MDQxOToiTiIsXHUwNDFBOiJLIixcdTA0MUI6Ik4iLFx1MDQxQzoiTSIsXHUwNDFEOiJIIixcdTA0MUU6Ik8iLFx1MDQxRjoiTiIsXHUwNDIwOiJQIixcdTA0MjE6IkMiLFx1MDQyMjoiVCIsXHUwNDIzOiJ5IixcdTA0MjQ6Ik8iLFx1MDQyNToiWCIsXHUwNDI2OiJVIixcdTA0Mjc6ImgiLFx1MDQyODoiVyIsXHUwNDI5OiJXIixcdTA0MkE6IkIiLFx1MDQyQjoiWCIsXHUwNDJDOiJCIixcdTA0MkQ6IjMiLFx1MDQyRToiWCIsXHUwNDJGOiJSIixcdTA0MzA6ImEiLFx1MDQzMToiYiIsXHUwNDMyOiJhIixcdTA0MzM6InIiLFx1MDQzNDoieSIsXHUwNDM1OiJlIixcdTA0MzY6Im0iLFx1MDQzNzoiZSIsXHUwNDM4OiJuIixcdTA0Mzk6Im4iLFx1MDQzQToibiIsXHUwNDNCOiJuIixcdTA0M0M6Im0iLFx1MDQzRDoibiIsXHUwNDNFOiJvIixcdTA0M0Y6Im4iLFx1MDQ0MDoicCIsXHUwNDQxOiJjIixcdTA0NDI6Im8iLFx1MDQ0MzoieSIsXHUwNDQ0OiJiIixcdTA0NDU6IngiLFx1MDQ0NjoibiIsXHUwNDQ3OiJuIixcdTA0NDg6InciLFx1MDQ0OToidyIsXHUwNDRBOiJhIixcdTA0NEI6Im0iLFx1MDQ0QzoiYSIsXHUwNDREOiJlIixcdTA0NEU6Im0iLFx1MDQ0RjoiciJ9O28oX0csInNldEZvbnRNZXRyaWNzIik7byhuQSwiZ2V0Q2hhcmFjdGVyTWV0cmljcyIpO1I3PXt9O28oWDRlLCJnZXRHbG9iYWxNZXRyaWNzIik7ajRlPVtbMSwxLDFdLFsyLDEsMV0sWzMsMSwxXSxbNCwyLDFdLFs1LDIsMV0sWzYsMywxXSxbNyw0LDJdLFs4LDYsM10sWzksNyw2XSxbMTAsOCw3XSxbMTEsMTAsOV1dLFF6PVsuNSwuNiwuNywuOCwuOSwxLDEuMiwxLjQ0LDEuNzI4LDIuMDc0LDIuNDg4XSxaej1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuc2l6ZTwyP2U6ajRlW2UtMV1bci5zaXplLTFdfSwic2l6ZUF0U3R5bGUiKSx3Mz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIk9wdGlvbnMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLmNvbG9yPXZvaWQgMCx0aGlzLnNpemU9dm9pZCAwLHRoaXMudGV4dFNpemU9dm9pZCAwLHRoaXMucGhhbnRvbT12b2lkIDAsdGhpcy5mb250PXZvaWQgMCx0aGlzLmZvbnRGYW1pbHk9dm9pZCAwLHRoaXMuZm9udFdlaWdodD12b2lkIDAsdGhpcy5mb250U2hhcGU9dm9pZCAwLHRoaXMuc2l6ZU11bHRpcGxpZXI9dm9pZCAwLHRoaXMubWF4U2l6ZT12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLl9mb250TWV0cmljcz12b2lkIDAsdGhpcy5zdHlsZT1lLnN0eWxlLHRoaXMuY29sb3I9ZS5jb2xvcix0aGlzLnNpemU9ZS5zaXplfHx0LkJBU0VTSVpFLHRoaXMudGV4dFNpemU9ZS50ZXh0U2l6ZXx8dGhpcy5zaXplLHRoaXMucGhhbnRvbT0hIWUucGhhbnRvbSx0aGlzLmZvbnQ9ZS5mb250fHwiIix0aGlzLmZvbnRGYW1pbHk9ZS5mb250RmFtaWx5fHwiIix0aGlzLmZvbnRXZWlnaHQ9ZS5mb250V2VpZ2h0fHwiIix0aGlzLmZvbnRTaGFwZT1lLmZvbnRTaGFwZXx8IiIsdGhpcy5zaXplTXVsdGlwbGllcj1Relt0aGlzLnNpemUtMV0sdGhpcy5tYXhTaXplPWUubWF4U2l6ZSx0aGlzLm1pblJ1bGVUaGlja25lc3M9ZS5taW5SdWxlVGhpY2tuZXNzLHRoaXMuX2ZvbnRNZXRyaWNzPXZvaWQgMH1leHRlbmQoZSl7dmFyIHI9e3N0eWxlOnRoaXMuc3R5bGUsc2l6ZTp0aGlzLnNpemUsdGV4dFNpemU6dGhpcy50ZXh0U2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHBoYW50b206dGhpcy5waGFudG9tLGZvbnQ6dGhpcy5mb250LGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5LGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTaGFwZTp0aGlzLmZvbnRTaGFwZSxtYXhTaXplOnRoaXMubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOnRoaXMubWluUnVsZVRoaWNrbmVzc307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ZVtuXSk7cmV0dXJuIG5ldyB0KHIpfWhhdmluZ1N0eWxlKGUpe3JldHVybiB0aGlzLnN0eWxlPT09ZT90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTplLHNpemU6WnoodGhpcy50ZXh0U2l6ZSxlKX0pfWhhdmluZ0NyYW1wZWRTdHlsZSgpe3JldHVybiB0aGlzLmhhdmluZ1N0eWxlKHRoaXMuc3R5bGUuY3JhbXAoKSl9aGF2aW5nU2l6ZShlKXtyZXR1cm4gdGhpcy5zaXplPT09ZSYmdGhpcy50ZXh0U2l6ZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6dGhpcy5zdHlsZS50ZXh0KCksc2l6ZTplLHRleHRTaXplOmUsc2l6ZU11bHRpcGxpZXI6UXpbZS0xXX0pfWhhdmluZ0Jhc2VTdHlsZShlKXtlPWV8fHRoaXMuc3R5bGUudGV4dCgpO3ZhciByPVp6KHQuQkFTRVNJWkUsZSk7cmV0dXJuIHRoaXMuc2l6ZT09PXImJnRoaXMudGV4dFNpemU9PT10LkJBU0VTSVpFJiZ0aGlzLnN0eWxlPT09ZT90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTplLHNpemU6cn0pfWhhdmluZ0Jhc2VTaXppbmcoKXt2YXIgZTtzd2l0Y2godGhpcy5zdHlsZS5pZCl7Y2FzZSA0OmNhc2UgNTplPTM7YnJlYWs7Y2FzZSA2OmNhc2UgNzplPTE7YnJlYWs7ZGVmYXVsdDplPTZ9cmV0dXJuIHRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOmV9KX13aXRoQ29sb3IoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtjb2xvcjplfSl9d2l0aFBoYW50b20oKXtyZXR1cm4gdGhpcy5leHRlbmQoe3BoYW50b206ITB9KX13aXRoRm9udChlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnQ6ZX0pfXdpdGhUZXh0Rm9udEZhbWlseShlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRGYW1pbHk6ZSxmb250OiIifSl9d2l0aFRleHRGb250V2VpZ2h0KGUpe3JldHVybiB0aGlzLmV4dGVuZCh7Zm9udFdlaWdodDplLGZvbnQ6IiJ9KX13aXRoVGV4dEZvbnRTaGFwZShlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRTaGFwZTplLGZvbnQ6IiJ9KX1zaXppbmdDbGFzc2VzKGUpe3JldHVybiBlLnNpemUhPT10aGlzLnNpemU/WyJzaXppbmciLCJyZXNldC1zaXplIitlLnNpemUsInNpemUiK3RoaXMuc2l6ZV06W119YmFzZVNpemluZ0NsYXNzZXMoKXtyZXR1cm4gdGhpcy5zaXplIT09dC5CQVNFU0laRT9bInNpemluZyIsInJlc2V0LXNpemUiK3RoaXMuc2l6ZSwic2l6ZSIrdC5CQVNFU0laRV06W119Zm9udE1ldHJpY3MoKXtyZXR1cm4gdGhpcy5fZm9udE1ldHJpY3N8fCh0aGlzLl9mb250TWV0cmljcz1YNGUodGhpcy5zaXplKSksdGhpcy5fZm9udE1ldHJpY3N9Z2V0Q29sb3IoKXtyZXR1cm4gdGhpcy5waGFudG9tPyJ0cmFuc3BhcmVudCI6dGhpcy5jb2xvcn19O3czLkJBU0VTSVpFPTY7Vzc9e3B0OjEsbW06NzIyNy8yNTQwLGNtOjcyMjcvMjU0LGluOjcyLjI3LGJwOjgwMy84MDAscGM6MTIsZGQ6MTIzOC8xMTU3LGNjOjE0ODU2LzExNTcsbmQ6Njg1LzY0MixuYzoxMzcwLzEwNyxzcDoxLzY1NTM2LHB4OjgwMy84MDB9LEs0ZT17ZXg6ITAsZW06ITAsbXU6ITB9LERHPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKGU9ZS51bml0KSxlIGluIFc3fHxlIGluIEs0ZXx8ZT09PSJleCJ9LCJ2YWxpZFVuaXQiKSxuaT1vKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZS51bml0IGluIFc3KW49VzdbZS51bml0XS9yLmZvbnRNZXRyaWNzKCkucHRQZXJFbS9yLnNpemVNdWx0aXBsaWVyO2Vsc2UgaWYoZS51bml0PT09Im11IiluPXIuZm9udE1ldHJpY3MoKS5jc3NFbVBlck11O2Vsc2V7dmFyIGk7aWYoci5zdHlsZS5pc1RpZ2h0KCk/aT1yLmhhdmluZ1N0eWxlKHIuc3R5bGUudGV4dCgpKTppPXIsZS51bml0PT09ImV4IiluPWkuZm9udE1ldHJpY3MoKS54SGVpZ2h0O2Vsc2UgaWYoZS51bml0PT09ImVtIiluPWkuZm9udE1ldHJpY3MoKS5xdWFkO2Vsc2UgdGhyb3cgbmV3IHB0KCJJbnZhbGlkIHVuaXQ6ICciK2UudW5pdCsiJyIpO2khPT1yJiYobio9aS5zaXplTXVsdGlwbGllci9yLnNpemVNdWx0aXBsaWVyKX1yZXR1cm4gTWF0aC5taW4oZS5udW1iZXIqbixyLm1heFNpemUpfSwiY2FsY3VsYXRlU2l6ZSIpLEV0PW8oZnVuY3Rpb24oZSl7cmV0dXJuK2UudG9GaXhlZCg0KSsiZW0ifSwibWFrZUVtIiksdmg9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIocj0+cikuam9pbigiICIpfSwiY3JlYXRlQ2xhc3MiKSxMRz1vKGZ1bmN0aW9uKGUscixuKXtpZih0aGlzLmNsYXNzZXM9ZXx8W10sdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuaGVpZ2h0PTAsdGhpcy5kZXB0aD0wLHRoaXMubWF4Rm9udFNpemU9MCx0aGlzLnN0eWxlPW58fHt9LHIpe3Iuc3R5bGUuaXNUaWdodCgpJiZ0aGlzLmNsYXNzZXMucHVzaCgibXRpZ2h0Iik7dmFyIGk9ci5nZXRDb2xvcigpO2kmJih0aGlzLnN0eWxlLmNvbG9yPWkpfX0sImluaXROb2RlIiksUkc9byhmdW5jdGlvbihlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3IuY2xhc3NOYW1lPXZoKHRoaXMuY2xhc3Nlcyk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7Zm9yKHZhciBpIGluIHRoaXMuYXR0cmlidXRlcyl0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoaSkmJnIuc2V0QXR0cmlidXRlKGksdGhpcy5hdHRyaWJ1dGVzW2ldKTtmb3IodmFyIGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bYV0udG9Ob2RlKCkpO3JldHVybiByfSwidG9Ob2RlIiksUTRlPS9bXHMiJz4vPVx4MDAtXHgxZl0vLE5HPW8oZnVuY3Rpb24oZSl7dmFyIHI9IjwiK2U7dGhpcy5jbGFzc2VzLmxlbmd0aCYmKHIrPScgY2xhc3M9IicrSnQuZXNjYXBlKHZoKHRoaXMuY2xhc3NlcykpKyciJyk7dmFyIG49IiI7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShpKSYmKG4rPUp0Lmh5cGhlbmF0ZShpKSsiOiIrdGhpcy5zdHlsZVtpXSsiOyIpO24mJihyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO2Zvcih2YXIgYSBpbiB0aGlzLmF0dHJpYnV0ZXMpaWYodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGEpKXtpZihRNGUudGVzdChhKSl0aHJvdyBuZXcgcHQoIkludmFsaWQgYXR0cmlidXRlIG5hbWUgJyIrYSsiJyIpO3IrPSIgIithKyc9IicrSnQuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thXSkrJyInfXIrPSI+Ijtmb3IodmFyIHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylyKz10aGlzLmNoaWxkcmVuW3NdLnRvTWFya3VwKCk7cmV0dXJuIHIrPSI8LyIrZSsiPiIscn0sInRvTWFya3VwIiksbGQ9Y2xhc3N7c3RhdGlje28odGhpcywiU3BhbiIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsTEcuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmNoaWxkcmVuPXJ8fFtdfXNldEF0dHJpYnV0ZShlLHIpe3RoaXMuYXR0cmlidXRlc1tlXT1yfWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7cmV0dXJuIFJHLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuIE5HLmNhbGwodGhpcywic3BhbiIpfX0sWnk9Y2xhc3N7c3RhdGlje28odGhpcywiQW5jaG9yIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCxMRy5jYWxsKHRoaXMscixpKSx0aGlzLmNoaWxkcmVuPW58fFtdLHRoaXMuc2V0QXR0cmlidXRlKCJocmVmIixlKX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3JldHVybiBSRy5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiBORy5jYWxsKHRoaXMsImEiKX19LHE3PWNsYXNze3N0YXRpY3tvKHRoaXMsIkltZyIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnNyYz12b2lkIDAsdGhpcy5hbHQ9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuYWx0PXIsdGhpcy5zcmM9ZSx0aGlzLmNsYXNzZXM9WyJtb3JkIl0sdGhpcy5zdHlsZT1ufWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7ZS5zcmM9dGhpcy5zcmMsZS5hbHQ9dGhpcy5hbHQsZS5jbGFzc05hbWU9Im1vcmQiO2Zvcih2YXIgciBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkocikmJihlLnN0eWxlW3JdPXRoaXMuc3R5bGVbcl0pO3JldHVybiBlfXRvTWFya3VwKCl7dmFyIGU9JzxpbWcgc3JjPSInK0p0LmVzY2FwZSh0aGlzLnNyYykrJyInKygnIGFsdD0iJytKdC5lc2NhcGUodGhpcy5hbHQpKyciJykscj0iIjtmb3IodmFyIG4gaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KG4pJiYocis9SnQuaHlwaGVuYXRlKG4pKyI6Iit0aGlzLnN0eWxlW25dKyI7Iik7cmV0dXJuIHImJihlKz0nIHN0eWxlPSInK0p0LmVzY2FwZShyKSsnIicpLGUrPSInLz4iLGV9fSxaNGU9e1x1MDBFRToiXHUwMTMxXHUwMzAyIixcdTAwRUY6Ilx1MDEzMVx1MDMwOCIsXHUwMEVEOiJcdTAxMzFcdTAzMDEiLFx1MDBFQzoiXHUwMTMxXHUwMzAwIn0sQXM9Y2xhc3N7c3RhdGlje28odGhpcywiU3ltYm9sTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuLGksYSxzLGwsdSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5pdGFsaWM9dm9pZCAwLHRoaXMuc2tldz12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLnRleHQ9ZSx0aGlzLmhlaWdodD1yfHwwLHRoaXMuZGVwdGg9bnx8MCx0aGlzLml0YWxpYz1pfHwwLHRoaXMuc2tldz1hfHwwLHRoaXMud2lkdGg9c3x8MCx0aGlzLmNsYXNzZXM9bHx8W10sdGhpcy5zdHlsZT11fHx7fSx0aGlzLm1heEZvbnRTaXplPTA7dmFyIGg9QjRlKHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtoJiZ0aGlzLmNsYXNzZXMucHVzaChoKyJfZmFsbGJhY2siKSwvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpJiYodGhpcy50ZXh0PVo0ZVt0aGlzLnRleHRdKX1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCkscj1udWxsO3RoaXMuaXRhbGljPjAmJihyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxyLnN0eWxlLm1hcmdpblJpZ2h0PUV0KHRoaXMuaXRhbGljKSksdGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksci5jbGFzc05hbWU9dmgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHI9cnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7cmV0dXJuIHI/KHIuYXBwZW5kQ2hpbGQoZSkscik6ZX10b01hcmt1cCgpe3ZhciBlPSExLHI9IjxzcGFuIjt0aGlzLmNsYXNzZXMubGVuZ3RoJiYoZT0hMCxyKz0nIGNsYXNzPSInLHIrPUp0LmVzY2FwZSh2aCh0aGlzLmNsYXNzZXMpKSxyKz0nIicpO3ZhciBuPSIiO3RoaXMuaXRhbGljPjAmJihuKz0ibWFyZ2luLXJpZ2h0OiIrdGhpcy5pdGFsaWMrImVtOyIpO2Zvcih2YXIgaSBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJihuKz1KdC5oeXBoZW5hdGUoaSkrIjoiK3RoaXMuc3R5bGVbaV0rIjsiKTtuJiYoZT0hMCxyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO3ZhciBhPUp0LmVzY2FwZSh0aGlzLnRleHQpO3JldHVybiBlPyhyKz0iPiIscis9YSxyKz0iPC9zcGFuPiIscik6YX19LGRsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN2Z05vZGUiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1lfHxbXSx0aGlzLmF0dHJpYnV0ZXM9cnx8e319dG9Ob2RlKCl7dmFyIGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLCJzdmciKTtmb3IodmFyIG4gaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsbikmJnIuc2V0QXR0cmlidXRlKG4sdGhpcy5hdHRyaWJ1dGVzW25dKTtmb3IodmFyIGk9MDtpPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2krKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSsnIicpO2UrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8L3N2Zz4iLGV9fSxlYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5wYXRoTmFtZT12b2lkIDAsdGhpcy5hbHRlcm5hdGU9dm9pZCAwLHRoaXMucGF0aE5hbWU9ZSx0aGlzLmFsdGVybmF0ZT1yfXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwicGF0aCIpO3JldHVybiB0aGlzLmFsdGVybmF0ZT9yLnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5hbHRlcm5hdGUpOnIuc2V0QXR0cmlidXRlKCJkIixqelt0aGlzLnBhdGhOYW1lXSkscn10b01hcmt1cCgpe3JldHVybiB0aGlzLmFsdGVybmF0ZT8nPHBhdGggZD0iJytKdC5lc2NhcGUodGhpcy5hbHRlcm5hdGUpKyciLz4nOic8cGF0aCBkPSInK0p0LmVzY2FwZShqelt0aGlzLnBhdGhOYW1lXSkrJyIvPid9fSxKeT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaW5lTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPWV8fHt9fXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwibGluZSIpO2Zvcih2YXIgbiBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxuKSYmci5zZXRBdHRyaWJ1dGUobix0aGlzLmF0dHJpYnV0ZXNbbl0pO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9IjxsaW5lIjtmb3IodmFyIHIgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMscikmJihlKz0iICIrcisnPSInK0p0LmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbcl0pKyciJyk7cmV0dXJuIGUrPSIvPiIsZX19O28oSnosImFzc2VydFN5bWJvbERvbU5vZGUiKTtvKEo0ZSwiYXNzZXJ0U3BhbiIpO2UzZT17YmluOjEsY2xvc2U6MSxpbm5lcjoxLG9wZW46MSxwdW5jdDoxLHJlbDoxfSx0M2U9eyJhY2NlbnQtdG9rZW4iOjEsbWF0aG9yZDoxLCJvcC10b2tlbiI6MSxzcGFjaW5nOjEsdGV4dG9yZDoxfSxBbj17bWF0aDp7fSx0ZXh0Ont9fTtvKEcsImRlZmluZVN5bWJvbCIpO0g9Im1hdGgiLGl0PSJ0ZXh0IixyZT0ibWFpbiIsa2U9ImFtcyIsSG49ImFjY2VudC10b2tlbiIsSXQ9ImJpbiIsbnM9ImNsb3NlIixFMD0iaW5uZXIiLHJyPSJtYXRob3JkIixDaT0ib3AtdG9rZW4iLFpzPSJvcGVuIixEMz0icHVuY3QiLEVlPSJyZWwiLHB1PSJzcGFjaW5nIixSZT0idGV4dG9yZCI7RyhILHJlLEVlLCJcdTIyNjEiLCJcXGVxdWl2IiwhMCk7RyhILHJlLEVlLCJcdTIyN0EiLCJcXHByZWMiLCEwKTtHKEgscmUsRWUsIlx1MjI3QiIsIlxcc3VjYyIsITApO0coSCxyZSxFZSwiXHUyMjNDIiwiXFxzaW0iLCEwKTtHKEgscmUsRWUsIlx1MjJBNSIsIlxccGVycCIpO0coSCxyZSxFZSwiXHUyQUFGIiwiXFxwcmVjZXEiLCEwKTtHKEgscmUsRWUsIlx1MkFCMCIsIlxcc3VjY2VxIiwhMCk7RyhILHJlLEVlLCJcdTIyNDMiLCJcXHNpbWVxIiwhMCk7RyhILHJlLEVlLCJcdTIyMjMiLCJcXG1pZCIsITApO0coSCxyZSxFZSwiXHUyMjZBIiwiXFxsbCIsITApO0coSCxyZSxFZSwiXHUyMjZCIiwiXFxnZyIsITApO0coSCxyZSxFZSwiXHUyMjREIiwiXFxhc3ltcCIsITApO0coSCxyZSxFZSwiXHUyMjI1IiwiXFxwYXJhbGxlbCIpO0coSCxyZSxFZSwiXHUyMkM4IiwiXFxib3d0aWUiLCEwKTtHKEgscmUsRWUsIlx1MjMyMyIsIlxcc21pbGUiLCEwKTtHKEgscmUsRWUsIlx1MjI5MSIsIlxcc3FzdWJzZXRlcSIsITApO0coSCxyZSxFZSwiXHUyMjkyIiwiXFxzcXN1cHNldGVxIiwhMCk7RyhILHJlLEVlLCJcdTIyNTAiLCJcXGRvdGVxIiwhMCk7RyhILHJlLEVlLCJcdTIzMjIiLCJcXGZyb3duIiwhMCk7RyhILHJlLEVlLCJcdTIyMEIiLCJcXG5pIiwhMCk7RyhILHJlLEVlLCJcdTIyMUQiLCJcXHByb3B0byIsITApO0coSCxyZSxFZSwiXHUyMkEyIiwiXFx2ZGFzaCIsITApO0coSCxyZSxFZSwiXHUyMkEzIiwiXFxkYXNodiIsITApO0coSCxyZSxFZSwiXHUyMjBCIiwiXFxvd25zIik7RyhILHJlLEQzLCIuIiwiXFxsZG90cCIpO0coSCxyZSxEMywiXHUyMkM1IiwiXFxjZG90cCIpO0coSCxyZSxSZSwiIyIsIlxcIyIpO0coaXQscmUsUmUsIiMiLCJcXCMiKTtHKEgscmUsUmUsIiYiLCJcXCYiKTtHKGl0LHJlLFJlLCImIiwiXFwmIik7RyhILHJlLFJlLCJcdTIxMzUiLCJcXGFsZXBoIiwhMCk7RyhILHJlLFJlLCJcdTIyMDAiLCJcXGZvcmFsbCIsITApO0coSCxyZSxSZSwiXHUyMTBGIiwiXFxoYmFyIiwhMCk7RyhILHJlLFJlLCJcdTIyMDMiLCJcXGV4aXN0cyIsITApO0coSCxyZSxSZSwiXHUyMjA3IiwiXFxuYWJsYSIsITApO0coSCxyZSxSZSwiXHUyNjZEIiwiXFxmbGF0IiwhMCk7RyhILHJlLFJlLCJcdTIxMTMiLCJcXGVsbCIsITApO0coSCxyZSxSZSwiXHUyNjZFIiwiXFxuYXR1cmFsIiwhMCk7RyhILHJlLFJlLCJcdTI2NjMiLCJcXGNsdWJzdWl0IiwhMCk7RyhILHJlLFJlLCJcdTIxMTgiLCJcXHdwIiwhMCk7RyhILHJlLFJlLCJcdTI2NkYiLCJcXHNoYXJwIiwhMCk7RyhILHJlLFJlLCJcdTI2NjIiLCJcXGRpYW1vbmRzdWl0IiwhMCk7RyhILHJlLFJlLCJcdTIxMUMiLCJcXFJlIiwhMCk7RyhILHJlLFJlLCJcdTI2NjEiLCJcXGhlYXJ0c3VpdCIsITApO0coSCxyZSxSZSwiXHUyMTExIiwiXFxJbSIsITApO0coSCxyZSxSZSwiXHUyNjYwIiwiXFxzcGFkZXN1aXQiLCEwKTtHKEgscmUsUmUsIlx4QTciLCJcXFMiLCEwKTtHKGl0LHJlLFJlLCJceEE3IiwiXFxTIik7RyhILHJlLFJlLCJceEI2IiwiXFxQIiwhMCk7RyhpdCxyZSxSZSwiXHhCNiIsIlxcUCIpO0coSCxyZSxSZSwiXHUyMDIwIiwiXFxkYWciKTtHKGl0LHJlLFJlLCJcdTIwMjAiLCJcXGRhZyIpO0coaXQscmUsUmUsIlx1MjAyMCIsIlxcdGV4dGRhZ2dlciIpO0coSCxyZSxSZSwiXHUyMDIxIiwiXFxkZGFnIik7RyhpdCxyZSxSZSwiXHUyMDIxIiwiXFxkZGFnIik7RyhpdCxyZSxSZSwiXHUyMDIxIiwiXFx0ZXh0ZGFnZ2VyZGJsIik7RyhILHJlLG5zLCJcdTIzQjEiLCJcXHJtb3VzdGFjaGUiLCEwKTtHKEgscmUsWnMsIlx1MjNCMCIsIlxcbG1vdXN0YWNoZSIsITApO0coSCxyZSxucywiXHUyN0VGIiwiXFxyZ3JvdXAiLCEwKTtHKEgscmUsWnMsIlx1MjdFRSIsIlxcbGdyb3VwIiwhMCk7RyhILHJlLEl0LCJcdTIyMTMiLCJcXG1wIiwhMCk7RyhILHJlLEl0LCJcdTIyOTYiLCJcXG9taW51cyIsITApO0coSCxyZSxJdCwiXHUyMjhFIiwiXFx1cGx1cyIsITApO0coSCxyZSxJdCwiXHUyMjkzIiwiXFxzcWNhcCIsITApO0coSCxyZSxJdCwiXHUyMjE3IiwiXFxhc3QiKTtHKEgscmUsSXQsIlx1MjI5NCIsIlxcc3FjdXAiLCEwKTtHKEgscmUsSXQsIlx1MjVFRiIsIlxcYmlnY2lyYyIsITApO0coSCxyZSxJdCwiXHUyMjE5IiwiXFxidWxsZXQiLCEwKTtHKEgscmUsSXQsIlx1MjAyMSIsIlxcZGRhZ2dlciIpO0coSCxyZSxJdCwiXHUyMjQwIiwiXFx3ciIsITApO0coSCxyZSxJdCwiXHUyQTNGIiwiXFxhbWFsZyIpO0coSCxyZSxJdCwiJiIsIlxcQW5kIik7RyhILHJlLEVlLCJcdTI3RjUiLCJcXGxvbmdsZWZ0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFEMCIsIlxcTGVmdGFycm93IiwhMCk7RyhILHJlLEVlLCJcdTI3RjgiLCJcXExvbmdsZWZ0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjdGNiIsIlxcbG9uZ3JpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFEMiIsIlxcUmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyN0Y5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMTk0IiwiXFxsZWZ0cmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyN0Y3IiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFENCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjdGQSIsIlxcTG9uZ2xlZnRyaWdodGFycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxQTYiLCJcXG1hcHN0byIsITApO0coSCxyZSxFZSwiXHUyN0ZDIiwiXFxsb25nbWFwc3RvIiwhMCk7RyhILHJlLEVlLCJcdTIxOTciLCJcXG5lYXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFBOSIsIlxcaG9va2xlZnRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUFBIiwiXFxob29rcmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMTk4IiwiXFxzZWFycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxQkMiLCJcXGxlZnRoYXJwb29udXAiLCEwKTtHKEgscmUsRWUsIlx1MjFDMCIsIlxccmlnaHRoYXJwb29udXAiLCEwKTtHKEgscmUsRWUsIlx1MjE5OSIsIlxcc3dhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUJEIiwiXFxsZWZ0aGFycG9vbmRvd24iLCEwKTtHKEgscmUsRWUsIlx1MjFDMSIsIlxccmlnaHRoYXJwb29uZG93biIsITApO0coSCxyZSxFZSwiXHUyMTk2IiwiXFxud2Fycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxQ0MiLCJcXHJpZ2h0bGVmdGhhcnBvb25zIiwhMCk7RyhILGtlLEVlLCJcdTIyNkUiLCJcXG5sZXNzIiwhMCk7RyhILGtlLEVlLCJcdUUwMTAiLCJcXEBubGVxc2xhbnQiKTtHKEgsa2UsRWUsIlx1RTAxMSIsIlxcQG5sZXFxIik7RyhILGtlLEVlLCJcdTJBODciLCJcXGxuZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI2OCIsIlxcbG5lcXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAwQyIsIlxcQGx2ZXJ0bmVxcSIpO0coSCxrZSxFZSwiXHUyMkU2IiwiXFxsbnNpbSIsITApO0coSCxrZSxFZSwiXHUyQTg5IiwiXFxsbmFwcHJveCIsITApO0coSCxrZSxFZSwiXHUyMjgwIiwiXFxucHJlYyIsITApO0coSCxrZSxFZSwiXHUyMkUwIiwiXFxucHJlY2VxIiwhMCk7RyhILGtlLEVlLCJcdTIyRTgiLCJcXHByZWNuc2ltIiwhMCk7RyhILGtlLEVlLCJcdTJBQjkiLCJcXHByZWNuYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyNDEiLCJcXG5zaW0iLCEwKTtHKEgsa2UsRWUsIlx1RTAwNiIsIlxcQG5zaG9ydG1pZCIpO0coSCxrZSxFZSwiXHUyMjI0IiwiXFxubWlkIiwhMCk7RyhILGtlLEVlLCJcdTIyQUMiLCJcXG52ZGFzaCIsITApO0coSCxrZSxFZSwiXHUyMkFEIiwiXFxudkRhc2giLCEwKTtHKEgsa2UsRWUsIlx1MjJFQSIsIlxcbnRyaWFuZ2xlbGVmdCIpO0coSCxrZSxFZSwiXHUyMkVDIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI4QSIsIlxcc3Vic2V0bmVxIiwhMCk7RyhILGtlLEVlLCJcdUUwMUEiLCJcXEB2YXJzdWJzZXRuZXEiKTtHKEgsa2UsRWUsIlx1MkFDQiIsIlxcc3Vic2V0bmVxcSIsITApO0coSCxrZSxFZSwiXHVFMDE3IiwiXFxAdmFyc3Vic2V0bmVxcSIpO0coSCxrZSxFZSwiXHUyMjZGIiwiXFxuZ3RyIiwhMCk7RyhILGtlLEVlLCJcdUUwMEYiLCJcXEBuZ2Vxc2xhbnQiKTtHKEgsa2UsRWUsIlx1RTAwRSIsIlxcQG5nZXFxIik7RyhILGtlLEVlLCJcdTJBODgiLCJcXGduZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI2OSIsIlxcZ25lcXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAwRCIsIlxcQGd2ZXJ0bmVxcSIpO0coSCxrZSxFZSwiXHUyMkU3IiwiXFxnbnNpbSIsITApO0coSCxrZSxFZSwiXHUyQThBIiwiXFxnbmFwcHJveCIsITApO0coSCxrZSxFZSwiXHUyMjgxIiwiXFxuc3VjYyIsITApO0coSCxrZSxFZSwiXHUyMkUxIiwiXFxuc3VjY2VxIiwhMCk7RyhILGtlLEVlLCJcdTIyRTkiLCJcXHN1Y2Nuc2ltIiwhMCk7RyhILGtlLEVlLCJcdTJBQkEiLCJcXHN1Y2NuYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyNDYiLCJcXG5jb25nIiwhMCk7RyhILGtlLEVlLCJcdUUwMDciLCJcXEBuc2hvcnRwYXJhbGxlbCIpO0coSCxrZSxFZSwiXHUyMjI2IiwiXFxucGFyYWxsZWwiLCEwKTtHKEgsa2UsRWUsIlx1MjJBRiIsIlxcblZEYXNoIiwhMCk7RyhILGtlLEVlLCJcdTIyRUIiLCJcXG50cmlhbmdsZXJpZ2h0Iik7RyhILGtlLEVlLCJcdTIyRUQiLCJcXG50cmlhbmdsZXJpZ2h0ZXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAxOCIsIlxcQG5zdXBzZXRlcXEiKTtHKEgsa2UsRWUsIlx1MjI4QiIsIlxcc3Vwc2V0bmVxIiwhMCk7RyhILGtlLEVlLCJcdUUwMUIiLCJcXEB2YXJzdXBzZXRuZXEiKTtHKEgsa2UsRWUsIlx1MkFDQyIsIlxcc3Vwc2V0bmVxcSIsITApO0coSCxrZSxFZSwiXHVFMDE5IiwiXFxAdmFyc3Vwc2V0bmVxcSIpO0coSCxrZSxFZSwiXHUyMkFFIiwiXFxuVmRhc2giLCEwKTtHKEgsa2UsRWUsIlx1MkFCNSIsIlxccHJlY25lcXEiLCEwKTtHKEgsa2UsRWUsIlx1MkFCNiIsIlxcc3VjY25lcXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAxNiIsIlxcQG5zdWJzZXRlcXEiKTtHKEgsa2UsSXQsIlx1MjJCNCIsIlxcdW5saGQiKTtHKEgsa2UsSXQsIlx1MjJCNSIsIlxcdW5yaGQiKTtHKEgsa2UsRWUsIlx1MjE5QSIsIlxcbmxlZnRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMTlCIiwiXFxucmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUNEIiwiXFxuTGVmdGFycm93IiwhMCk7RyhILGtlLEVlLCJcdTIxQ0YiLCJcXG5SaWdodGFycm93IiwhMCk7RyhILGtlLEVlLCJcdTIxQUUiLCJcXG5sZWZ0cmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUNFIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKTtHKEgsa2UsRWUsIlx1MjVCMyIsIlxcdmFydHJpYW5nbGUiKTtHKEgsa2UsUmUsIlx1MjEwRiIsIlxcaHNsYXNoIik7RyhILGtlLFJlLCJcdTI1QkQiLCJcXHRyaWFuZ2xlZG93biIpO0coSCxrZSxSZSwiXHUyNUNBIiwiXFxsb3plbmdlIik7RyhILGtlLFJlLCJcdTI0QzgiLCJcXGNpcmNsZWRTIik7RyhILGtlLFJlLCJceEFFIiwiXFxjaXJjbGVkUiIpO0coaXQsa2UsUmUsIlx4QUUiLCJcXGNpcmNsZWRSIik7RyhILGtlLFJlLCJcdTIyMjEiLCJcXG1lYXN1cmVkYW5nbGUiLCEwKTtHKEgsa2UsUmUsIlx1MjIwNCIsIlxcbmV4aXN0cyIpO0coSCxrZSxSZSwiXHUyMTI3IiwiXFxtaG8iKTtHKEgsa2UsUmUsIlx1MjEzMiIsIlxcRmludiIsITApO0coSCxrZSxSZSwiXHUyMTQxIiwiXFxHYW1lIiwhMCk7RyhILGtlLFJlLCJcdTIwMzUiLCJcXGJhY2twcmltZSIpO0coSCxrZSxSZSwiXHUyNUIyIiwiXFxibGFja3RyaWFuZ2xlIik7RyhILGtlLFJlLCJcdTI1QkMiLCJcXGJsYWNrdHJpYW5nbGVkb3duIik7RyhILGtlLFJlLCJcdTI1QTAiLCJcXGJsYWNrc3F1YXJlIik7RyhILGtlLFJlLCJcdTI5RUIiLCJcXGJsYWNrbG96ZW5nZSIpO0coSCxrZSxSZSwiXHUyNjA1IiwiXFxiaWdzdGFyIik7RyhILGtlLFJlLCJcdTIyMjIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCk7RyhILGtlLFJlLCJcdTIyMDEiLCJcXGNvbXBsZW1lbnQiLCEwKTtHKEgsa2UsUmUsIlx4RjAiLCJcXGV0aCIsITApO0coaXQscmUsUmUsIlx4RjAiLCJceEYwIik7RyhILGtlLFJlLCJcdTI1NzEiLCJcXGRpYWd1cCIpO0coSCxrZSxSZSwiXHUyNTcyIiwiXFxkaWFnZG93biIpO0coSCxrZSxSZSwiXHUyNUExIiwiXFxzcXVhcmUiKTtHKEgsa2UsUmUsIlx1MjVBMSIsIlxcQm94Iik7RyhILGtlLFJlLCJcdTI1Q0EiLCJcXERpYW1vbmQiKTtHKEgsa2UsUmUsIlx4QTUiLCJcXHllbiIsITApO0coaXQsa2UsUmUsIlx4QTUiLCJcXHllbiIsITApO0coSCxrZSxSZSwiXHUyNzEzIiwiXFxjaGVja21hcmsiLCEwKTtHKGl0LGtlLFJlLCJcdTI3MTMiLCJcXGNoZWNrbWFyayIpO0coSCxrZSxSZSwiXHUyMTM2IiwiXFxiZXRoIiwhMCk7RyhILGtlLFJlLCJcdTIxMzgiLCJcXGRhbGV0aCIsITApO0coSCxrZSxSZSwiXHUyMTM3IiwiXFxnaW1lbCIsITApO0coSCxrZSxSZSwiXHUwM0REIiwiXFxkaWdhbW1hIiwhMCk7RyhILGtlLFJlLCJcdTAzRjAiLCJcXHZhcmthcHBhIik7RyhILGtlLFpzLCJcdTI1MEMiLCJcXEB1bGNvcm5lciIsITApO0coSCxrZSxucywiXHUyNTEwIiwiXFxAdXJjb3JuZXIiLCEwKTtHKEgsa2UsWnMsIlx1MjUxNCIsIlxcQGxsY29ybmVyIiwhMCk7RyhILGtlLG5zLCJcdTI1MTgiLCJcXEBscmNvcm5lciIsITApO0coSCxrZSxFZSwiXHUyMjY2IiwiXFxsZXFxIiwhMCk7RyhILGtlLEVlLCJcdTJBN0QiLCJcXGxlcXNsYW50IiwhMCk7RyhILGtlLEVlLCJcdTJBOTUiLCJcXGVxc2xhbnRsZXNzIiwhMCk7RyhILGtlLEVlLCJcdTIyNzIiLCJcXGxlc3NzaW0iLCEwKTtHKEgsa2UsRWUsIlx1MkE4NSIsIlxcbGVzc2FwcHJveCIsITApO0coSCxrZSxFZSwiXHUyMjRBIiwiXFxhcHByb3hlcSIsITApO0coSCxrZSxJdCwiXHUyMkQ2IiwiXFxsZXNzZG90Iik7RyhILGtlLEVlLCJcdTIyRDgiLCJcXGxsbCIsITApO0coSCxrZSxFZSwiXHUyMjc2IiwiXFxsZXNzZ3RyIiwhMCk7RyhILGtlLEVlLCJcdTIyREEiLCJcXGxlc3NlcWd0ciIsITApO0coSCxrZSxFZSwiXHUyQThCIiwiXFxsZXNzZXFxZ3RyIiwhMCk7RyhILGtlLEVlLCJcdTIyNTEiLCJcXGRvdGVxZG90Iik7RyhILGtlLEVlLCJcdTIyNTMiLCJcXHJpc2luZ2RvdHNlcSIsITApO0coSCxrZSxFZSwiXHUyMjUyIiwiXFxmYWxsaW5nZG90c2VxIiwhMCk7RyhILGtlLEVlLCJcdTIyM0QiLCJcXGJhY2tzaW0iLCEwKTtHKEgsa2UsRWUsIlx1MjJDRCIsIlxcYmFja3NpbWVxIiwhMCk7RyhILGtlLEVlLCJcdTJBQzUiLCJcXHN1YnNldGVxcSIsITApO0coSCxrZSxFZSwiXHUyMkQwIiwiXFxTdWJzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI4RiIsIlxcc3FzdWJzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI3QyIsIlxccHJlY2N1cmx5ZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjJERSIsIlxcY3VybHllcXByZWMiLCEwKTtHKEgsa2UsRWUsIlx1MjI3RSIsIlxccHJlY3NpbSIsITApO0coSCxrZSxFZSwiXHUyQUI3IiwiXFxwcmVjYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyQjIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpO0coSCxrZSxFZSwiXHUyMkI0IiwiXFx0cmlhbmdsZWxlZnRlcSIpO0coSCxrZSxFZSwiXHUyMkE4IiwiXFx2RGFzaCIsITApO0coSCxrZSxFZSwiXHUyMkFBIiwiXFxWdmRhc2giLCEwKTtHKEgsa2UsRWUsIlx1MjMyMyIsIlxcc21hbGxzbWlsZSIpO0coSCxrZSxFZSwiXHUyMzIyIiwiXFxzbWFsbGZyb3duIik7RyhILGtlLEVlLCJcdTIyNEYiLCJcXGJ1bXBlcSIsITApO0coSCxrZSxFZSwiXHUyMjRFIiwiXFxCdW1wZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI2NyIsIlxcZ2VxcSIsITApO0coSCxrZSxFZSwiXHUyQTdFIiwiXFxnZXFzbGFudCIsITApO0coSCxrZSxFZSwiXHUyQTk2IiwiXFxlcXNsYW50Z3RyIiwhMCk7RyhILGtlLEVlLCJcdTIyNzMiLCJcXGd0cnNpbSIsITApO0coSCxrZSxFZSwiXHUyQTg2IiwiXFxndHJhcHByb3giLCEwKTtHKEgsa2UsSXQsIlx1MjJENyIsIlxcZ3RyZG90Iik7RyhILGtlLEVlLCJcdTIyRDkiLCJcXGdnZyIsITApO0coSCxrZSxFZSwiXHUyMjc3IiwiXFxndHJsZXNzIiwhMCk7RyhILGtlLEVlLCJcdTIyREIiLCJcXGd0cmVxbGVzcyIsITApO0coSCxrZSxFZSwiXHUyQThDIiwiXFxndHJlcXFsZXNzIiwhMCk7RyhILGtlLEVlLCJcdTIyNTYiLCJcXGVxY2lyYyIsITApO0coSCxrZSxFZSwiXHUyMjU3IiwiXFxjaXJjZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI1QyIsIlxcdHJpYW5nbGVxIiwhMCk7RyhILGtlLEVlLCJcdTIyM0MiLCJcXHRoaWNrc2ltIik7RyhILGtlLEVlLCJcdTIyNDgiLCJcXHRoaWNrYXBwcm94Iik7RyhILGtlLEVlLCJcdTJBQzYiLCJcXHN1cHNldGVxcSIsITApO0coSCxrZSxFZSwiXHUyMkQxIiwiXFxTdXBzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI5MCIsIlxcc3FzdXBzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI3RCIsIlxcc3VjY2N1cmx5ZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjJERiIsIlxcY3VybHllcXN1Y2MiLCEwKTtHKEgsa2UsRWUsIlx1MjI3RiIsIlxcc3VjY3NpbSIsITApO0coSCxrZSxFZSwiXHUyQUI4IiwiXFxzdWNjYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyQjMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKTtHKEgsa2UsRWUsIlx1MjJCNSIsIlxcdHJpYW5nbGVyaWdodGVxIik7RyhILGtlLEVlLCJcdTIyQTkiLCJcXFZkYXNoIiwhMCk7RyhILGtlLEVlLCJcdTIyMjMiLCJcXHNob3J0bWlkIik7RyhILGtlLEVlLCJcdTIyMjUiLCJcXHNob3J0cGFyYWxsZWwiKTtHKEgsa2UsRWUsIlx1MjI2QyIsIlxcYmV0d2VlbiIsITApO0coSCxrZSxFZSwiXHUyMkQ0IiwiXFxwaXRjaGZvcmsiLCEwKTtHKEgsa2UsRWUsIlx1MjIxRCIsIlxcdmFycHJvcHRvIik7RyhILGtlLEVlLCJcdTI1QzAiLCJcXGJsYWNrdHJpYW5nbGVsZWZ0Iik7RyhILGtlLEVlLCJcdTIyMzQiLCJcXHRoZXJlZm9yZSIsITApO0coSCxrZSxFZSwiXHUyMjBEIiwiXFxiYWNrZXBzaWxvbiIpO0coSCxrZSxFZSwiXHUyNUI2IiwiXFxibGFja3RyaWFuZ2xlcmlnaHQiKTtHKEgsa2UsRWUsIlx1MjIzNSIsIlxcYmVjYXVzZSIsITApO0coSCxrZSxFZSwiXHUyMkQ4IiwiXFxsbGxlc3MiKTtHKEgsa2UsRWUsIlx1MjJEOSIsIlxcZ2dndHIiKTtHKEgsa2UsSXQsIlx1MjJCMiIsIlxcbGhkIik7RyhILGtlLEl0LCJcdTIyQjMiLCJcXHJoZCIpO0coSCxrZSxFZSwiXHUyMjQyIiwiXFxlcXNpbSIsITApO0coSCxyZSxFZSwiXHUyMkM4IiwiXFxKb2luIik7RyhILGtlLEVlLCJcdTIyNTEiLCJcXERvdGVxIiwhMCk7RyhILGtlLEl0LCJcdTIyMTQiLCJcXGRvdHBsdXMiLCEwKTtHKEgsa2UsSXQsIlx1MjIxNiIsIlxcc21hbGxzZXRtaW51cyIpO0coSCxrZSxJdCwiXHUyMkQyIiwiXFxDYXAiLCEwKTtHKEgsa2UsSXQsIlx1MjJEMyIsIlxcQ3VwIiwhMCk7RyhILGtlLEl0LCJcdTJBNUUiLCJcXGRvdWJsZWJhcndlZGdlIiwhMCk7RyhILGtlLEl0LCJcdTIyOUYiLCJcXGJveG1pbnVzIiwhMCk7RyhILGtlLEl0LCJcdTIyOUUiLCJcXGJveHBsdXMiLCEwKTtHKEgsa2UsSXQsIlx1MjJDNyIsIlxcZGl2aWRlb250aW1lcyIsITApO0coSCxrZSxJdCwiXHUyMkM5IiwiXFxsdGltZXMiLCEwKTtHKEgsa2UsSXQsIlx1MjJDQSIsIlxccnRpbWVzIiwhMCk7RyhILGtlLEl0LCJcdTIyQ0IiLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCk7RyhILGtlLEl0LCJcdTIyQ0MiLCJcXHJpZ2h0dGhyZWV0aW1lcyIsITApO0coSCxrZSxJdCwiXHUyMkNGIiwiXFxjdXJseXdlZGdlIiwhMCk7RyhILGtlLEl0LCJcdTIyQ0UiLCJcXGN1cmx5dmVlIiwhMCk7RyhILGtlLEl0LCJcdTIyOUQiLCJcXGNpcmNsZWRkYXNoIiwhMCk7RyhILGtlLEl0LCJcdTIyOUIiLCJcXGNpcmNsZWRhc3QiLCEwKTtHKEgsa2UsSXQsIlx1MjJDNSIsIlxcY2VudGVyZG90Iik7RyhILGtlLEl0LCJcdTIyQkEiLCJcXGludGVyY2FsIiwhMCk7RyhILGtlLEl0LCJcdTIyRDIiLCJcXGRvdWJsZWNhcCIpO0coSCxrZSxJdCwiXHUyMkQzIiwiXFxkb3VibGVjdXAiKTtHKEgsa2UsSXQsIlx1MjJBMCIsIlxcYm94dGltZXMiLCEwKTtHKEgsa2UsRWUsIlx1MjFFMiIsIlxcZGFzaHJpZ2h0YXJyb3ciLCEwKTtHKEgsa2UsRWUsIlx1MjFFMCIsIlxcZGFzaGxlZnRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUM3IiwiXFxsZWZ0bGVmdGFycm93cyIsITApO0coSCxrZSxFZSwiXHUyMUM2IiwiXFxsZWZ0cmlnaHRhcnJvd3MiLCEwKTtHKEgsa2UsRWUsIlx1MjFEQSIsIlxcTGxlZnRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMTlFIiwiXFx0d29oZWFkbGVmdGFycm93IiwhMCk7RyhILGtlLEVlLCJcdTIxQTIiLCJcXGxlZnRhcnJvd3RhaWwiLCEwKTtHKEgsa2UsRWUsIlx1MjFBQiIsIlxcbG9vcGFycm93bGVmdCIsITApO0coSCxrZSxFZSwiXHUyMUNCIiwiXFxsZWZ0cmlnaHRoYXJwb29ucyIsITApO0coSCxrZSxFZSwiXHUyMUI2IiwiXFxjdXJ2ZWFycm93bGVmdCIsITApO0coSCxrZSxFZSwiXHUyMUJBIiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKTtHKEgsa2UsRWUsIlx1MjFCMCIsIlxcTHNoIiwhMCk7RyhILGtlLEVlLCJcdTIxQzgiLCJcXHVwdXBhcnJvd3MiLCEwKTtHKEgsa2UsRWUsIlx1MjFCRiIsIlxcdXBoYXJwb29ubGVmdCIsITApO0coSCxrZSxFZSwiXHUyMUMzIiwiXFxkb3duaGFycG9vbmxlZnQiLCEwKTtHKEgscmUsRWUsIlx1MjJCNiIsIlxcb3JpZ29mIiwhMCk7RyhILHJlLEVlLCJcdTIyQjciLCJcXGltYWdlb2YiLCEwKTtHKEgsa2UsRWUsIlx1MjJCOCIsIlxcbXVsdGltYXAiLCEwKTtHKEgsa2UsRWUsIlx1MjFBRCIsIlxcbGVmdHJpZ2h0c3F1aWdhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUM5IiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCk7RyhILGtlLEVlLCJcdTIxQzQiLCJcXHJpZ2h0bGVmdGFycm93cyIsITApO0coSCxrZSxFZSwiXHUyMUEwIiwiXFx0d29oZWFkcmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUEzIiwiXFxyaWdodGFycm93dGFpbCIsITApO0coSCxrZSxFZSwiXHUyMUFDIiwiXFxsb29wYXJyb3dyaWdodCIsITApO0coSCxrZSxFZSwiXHUyMUI3IiwiXFxjdXJ2ZWFycm93cmlnaHQiLCEwKTtHKEgsa2UsRWUsIlx1MjFCQiIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApO0coSCxrZSxFZSwiXHUyMUIxIiwiXFxSc2giLCEwKTtHKEgsa2UsRWUsIlx1MjFDQSIsIlxcZG93bmRvd25hcnJvd3MiLCEwKTtHKEgsa2UsRWUsIlx1MjFCRSIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKTtHKEgsa2UsRWUsIlx1MjFDMiIsIlxcZG93bmhhcnBvb25yaWdodCIsITApO0coSCxrZSxFZSwiXHUyMUREIiwiXFxyaWdodHNxdWlnYXJyb3ciLCEwKTtHKEgsa2UsRWUsIlx1MjFERCIsIlxcbGVhZHN0byIpO0coSCxrZSxFZSwiXHUyMURCIiwiXFxScmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUJFIiwiXFxyZXN0cmljdGlvbiIpO0coSCxyZSxSZSwiXHUyMDE4IiwiYCIpO0coSCxyZSxSZSwiJCIsIlxcJCIpO0coaXQscmUsUmUsIiQiLCJcXCQiKTtHKGl0LHJlLFJlLCIkIiwiXFx0ZXh0ZG9sbGFyIik7RyhILHJlLFJlLCIlIiwiXFwlIik7RyhpdCxyZSxSZSwiJSIsIlxcJSIpO0coSCxyZSxSZSwiXyIsIlxcXyIpO0coaXQscmUsUmUsIl8iLCJcXF8iKTtHKGl0LHJlLFJlLCJfIiwiXFx0ZXh0dW5kZXJzY29yZSIpO0coSCxyZSxSZSwiXHUyMjIwIiwiXFxhbmdsZSIsITApO0coSCxyZSxSZSwiXHUyMjFFIiwiXFxpbmZ0eSIsITApO0coSCxyZSxSZSwiXHUyMDMyIiwiXFxwcmltZSIpO0coSCxyZSxSZSwiXHUyNUIzIiwiXFx0cmlhbmdsZSIpO0coSCxyZSxSZSwiXHUwMzkzIiwiXFxHYW1tYSIsITApO0coSCxyZSxSZSwiXHUwMzk0IiwiXFxEZWx0YSIsITApO0coSCxyZSxSZSwiXHUwMzk4IiwiXFxUaGV0YSIsITApO0coSCxyZSxSZSwiXHUwMzlCIiwiXFxMYW1iZGEiLCEwKTtHKEgscmUsUmUsIlx1MDM5RSIsIlxcWGkiLCEwKTtHKEgscmUsUmUsIlx1MDNBMCIsIlxcUGkiLCEwKTtHKEgscmUsUmUsIlx1MDNBMyIsIlxcU2lnbWEiLCEwKTtHKEgscmUsUmUsIlx1MDNBNSIsIlxcVXBzaWxvbiIsITApO0coSCxyZSxSZSwiXHUwM0E2IiwiXFxQaGkiLCEwKTtHKEgscmUsUmUsIlx1MDNBOCIsIlxcUHNpIiwhMCk7RyhILHJlLFJlLCJcdTAzQTkiLCJcXE9tZWdhIiwhMCk7RyhILHJlLFJlLCJBIiwiXHUwMzkxIik7RyhILHJlLFJlLCJCIiwiXHUwMzkyIik7RyhILHJlLFJlLCJFIiwiXHUwMzk1Iik7RyhILHJlLFJlLCJaIiwiXHUwMzk2Iik7RyhILHJlLFJlLCJIIiwiXHUwMzk3Iik7RyhILHJlLFJlLCJJIiwiXHUwMzk5Iik7RyhILHJlLFJlLCJLIiwiXHUwMzlBIik7RyhILHJlLFJlLCJNIiwiXHUwMzlDIik7RyhILHJlLFJlLCJOIiwiXHUwMzlEIik7RyhILHJlLFJlLCJPIiwiXHUwMzlGIik7RyhILHJlLFJlLCJQIiwiXHUwM0ExIik7RyhILHJlLFJlLCJUIiwiXHUwM0E0Iik7RyhILHJlLFJlLCJYIiwiXHUwM0E3Iik7RyhILHJlLFJlLCJceEFDIiwiXFxuZWciLCEwKTtHKEgscmUsUmUsIlx4QUMiLCJcXGxub3QiKTtHKEgscmUsUmUsIlx1MjJBNCIsIlxcdG9wIik7RyhILHJlLFJlLCJcdTIyQTUiLCJcXGJvdCIpO0coSCxyZSxSZSwiXHUyMjA1IiwiXFxlbXB0eXNldCIpO0coSCxrZSxSZSwiXHUyMjA1IiwiXFx2YXJub3RoaW5nIik7RyhILHJlLHJyLCJcdTAzQjEiLCJcXGFscGhhIiwhMCk7RyhILHJlLHJyLCJcdTAzQjIiLCJcXGJldGEiLCEwKTtHKEgscmUscnIsIlx1MDNCMyIsIlxcZ2FtbWEiLCEwKTtHKEgscmUscnIsIlx1MDNCNCIsIlxcZGVsdGEiLCEwKTtHKEgscmUscnIsIlx1MDNGNSIsIlxcZXBzaWxvbiIsITApO0coSCxyZSxyciwiXHUwM0I2IiwiXFx6ZXRhIiwhMCk7RyhILHJlLHJyLCJcdTAzQjciLCJcXGV0YSIsITApO0coSCxyZSxyciwiXHUwM0I4IiwiXFx0aGV0YSIsITApO0coSCxyZSxyciwiXHUwM0I5IiwiXFxpb3RhIiwhMCk7RyhILHJlLHJyLCJcdTAzQkEiLCJcXGthcHBhIiwhMCk7RyhILHJlLHJyLCJcdTAzQkIiLCJcXGxhbWJkYSIsITApO0coSCxyZSxyciwiXHUwM0JDIiwiXFxtdSIsITApO0coSCxyZSxyciwiXHUwM0JEIiwiXFxudSIsITApO0coSCxyZSxyciwiXHUwM0JFIiwiXFx4aSIsITApO0coSCxyZSxyciwiXHUwM0JGIiwiXFxvbWljcm9uIiwhMCk7RyhILHJlLHJyLCJcdTAzQzAiLCJcXHBpIiwhMCk7RyhILHJlLHJyLCJcdTAzQzEiLCJcXHJobyIsITApO0coSCxyZSxyciwiXHUwM0MzIiwiXFxzaWdtYSIsITApO0coSCxyZSxyciwiXHUwM0M0IiwiXFx0YXUiLCEwKTtHKEgscmUscnIsIlx1MDNDNSIsIlxcdXBzaWxvbiIsITApO0coSCxyZSxyciwiXHUwM0Q1IiwiXFxwaGkiLCEwKTtHKEgscmUscnIsIlx1MDNDNyIsIlxcY2hpIiwhMCk7RyhILHJlLHJyLCJcdTAzQzgiLCJcXHBzaSIsITApO0coSCxyZSxyciwiXHUwM0M5IiwiXFxvbWVnYSIsITApO0coSCxyZSxyciwiXHUwM0I1IiwiXFx2YXJlcHNpbG9uIiwhMCk7RyhILHJlLHJyLCJcdTAzRDEiLCJcXHZhcnRoZXRhIiwhMCk7RyhILHJlLHJyLCJcdTAzRDYiLCJcXHZhcnBpIiwhMCk7RyhILHJlLHJyLCJcdTAzRjEiLCJcXHZhcnJobyIsITApO0coSCxyZSxyciwiXHUwM0MyIiwiXFx2YXJzaWdtYSIsITApO0coSCxyZSxyciwiXHUwM0M2IiwiXFx2YXJwaGkiLCEwKTtHKEgscmUsSXQsIlx1MjIxNyIsIioiLCEwKTtHKEgscmUsSXQsIisiLCIrIik7RyhILHJlLEl0LCJcdTIyMTIiLCItIiwhMCk7RyhILHJlLEl0LCJcdTIyQzUiLCJcXGNkb3QiLCEwKTtHKEgscmUsSXQsIlx1MjIxOCIsIlxcY2lyYyIsITApO0coSCxyZSxJdCwiXHhGNyIsIlxcZGl2IiwhMCk7RyhILHJlLEl0LCJceEIxIiwiXFxwbSIsITApO0coSCxyZSxJdCwiXHhENyIsIlxcdGltZXMiLCEwKTtHKEgscmUsSXQsIlx1MjIyOSIsIlxcY2FwIiwhMCk7RyhILHJlLEl0LCJcdTIyMkEiLCJcXGN1cCIsITApO0coSCxyZSxJdCwiXHUyMjE2IiwiXFxzZXRtaW51cyIsITApO0coSCxyZSxJdCwiXHUyMjI3IiwiXFxsYW5kIik7RyhILHJlLEl0LCJcdTIyMjgiLCJcXGxvciIpO0coSCxyZSxJdCwiXHUyMjI3IiwiXFx3ZWRnZSIsITApO0coSCxyZSxJdCwiXHUyMjI4IiwiXFx2ZWUiLCEwKTtHKEgscmUsUmUsIlx1MjIxQSIsIlxcc3VyZCIpO0coSCxyZSxacywiXHUyN0U4IiwiXFxsYW5nbGUiLCEwKTtHKEgscmUsWnMsIlx1MjIyMyIsIlxcbHZlcnQiKTtHKEgscmUsWnMsIlx1MjIyNSIsIlxcbFZlcnQiKTtHKEgscmUsbnMsIj8iLCI/Iik7RyhILHJlLG5zLCIhIiwiISIpO0coSCxyZSxucywiXHUyN0U5IiwiXFxyYW5nbGUiLCEwKTtHKEgscmUsbnMsIlx1MjIyMyIsIlxccnZlcnQiKTtHKEgscmUsbnMsIlx1MjIyNSIsIlxcclZlcnQiKTtHKEgscmUsRWUsIj0iLCI9Iik7RyhILHJlLEVlLCI6IiwiOiIpO0coSCxyZSxFZSwiXHUyMjQ4IiwiXFxhcHByb3giLCEwKTtHKEgscmUsRWUsIlx1MjI0NSIsIlxcY29uZyIsITApO0coSCxyZSxFZSwiXHUyMjY1IiwiXFxnZSIpO0coSCxyZSxFZSwiXHUyMjY1IiwiXFxnZXEiLCEwKTtHKEgscmUsRWUsIlx1MjE5MCIsIlxcZ2V0cyIpO0coSCxyZSxFZSwiPiIsIlxcZ3QiLCEwKTtHKEgscmUsRWUsIlx1MjIwOCIsIlxcaW4iLCEwKTtHKEgscmUsRWUsIlx1RTAyMCIsIlxcQG5vdCIpO0coSCxyZSxFZSwiXHUyMjgyIiwiXFxzdWJzZXQiLCEwKTtHKEgscmUsRWUsIlx1MjI4MyIsIlxcc3Vwc2V0IiwhMCk7RyhILHJlLEVlLCJcdTIyODYiLCJcXHN1YnNldGVxIiwhMCk7RyhILHJlLEVlLCJcdTIyODciLCJcXHN1cHNldGVxIiwhMCk7RyhILGtlLEVlLCJcdTIyODgiLCJcXG5zdWJzZXRlcSIsITApO0coSCxrZSxFZSwiXHUyMjg5IiwiXFxuc3Vwc2V0ZXEiLCEwKTtHKEgscmUsRWUsIlx1MjJBOCIsIlxcbW9kZWxzIik7RyhILHJlLEVlLCJcdTIxOTAiLCJcXGxlZnRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMjY0IiwiXFxsZSIpO0coSCxyZSxFZSwiXHUyMjY0IiwiXFxsZXEiLCEwKTtHKEgscmUsRWUsIjwiLCJcXGx0IiwhMCk7RyhILHJlLEVlLCJcdTIxOTIiLCJcXHJpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjE5MiIsIlxcdG8iKTtHKEgsa2UsRWUsIlx1MjI3MSIsIlxcbmdlcSIsITApO0coSCxrZSxFZSwiXHUyMjcwIiwiXFxubGVxIiwhMCk7RyhILHJlLHB1LCJceEEwIiwiXFwgIik7RyhILHJlLHB1LCJceEEwIiwiXFxzcGFjZSIpO0coSCxyZSxwdSwiXHhBMCIsIlxcbm9icmVha3NwYWNlIik7RyhpdCxyZSxwdSwiXHhBMCIsIlxcICIpO0coaXQscmUscHUsIlx4QTAiLCIgIik7RyhpdCxyZSxwdSwiXHhBMCIsIlxcc3BhY2UiKTtHKGl0LHJlLHB1LCJceEEwIiwiXFxub2JyZWFrc3BhY2UiKTtHKEgscmUscHUsbnVsbCwiXFxub2JyZWFrIik7RyhILHJlLHB1LG51bGwsIlxcYWxsb3dicmVhayIpO0coSCxyZSxEMywiLCIsIiwiKTtHKEgscmUsRDMsIjsiLCI7Iik7RyhILGtlLEl0LCJcdTIyQkMiLCJcXGJhcndlZGdlIiwhMCk7RyhILGtlLEl0LCJcdTIyQkIiLCJcXHZlZWJhciIsITApO0coSCxyZSxJdCwiXHUyMjk5IiwiXFxvZG90IiwhMCk7RyhILHJlLEl0LCJcdTIyOTUiLCJcXG9wbHVzIiwhMCk7RyhILHJlLEl0LCJcdTIyOTciLCJcXG90aW1lcyIsITApO0coSCxyZSxSZSwiXHUyMjAyIiwiXFxwYXJ0aWFsIiwhMCk7RyhILHJlLEl0LCJcdTIyOTgiLCJcXG9zbGFzaCIsITApO0coSCxrZSxJdCwiXHUyMjlBIiwiXFxjaXJjbGVkY2lyYyIsITApO0coSCxrZSxJdCwiXHUyMkExIiwiXFxib3hkb3QiLCEwKTtHKEgscmUsSXQsIlx1MjVCMyIsIlxcYmlndHJpYW5nbGV1cCIpO0coSCxyZSxJdCwiXHUyNUJEIiwiXFxiaWd0cmlhbmdsZWRvd24iKTtHKEgscmUsSXQsIlx1MjAyMCIsIlxcZGFnZ2VyIik7RyhILHJlLEl0LCJcdTIyQzQiLCJcXGRpYW1vbmQiKTtHKEgscmUsSXQsIlx1MjJDNiIsIlxcc3RhciIpO0coSCxyZSxJdCwiXHUyNUMzIiwiXFx0cmlhbmdsZWxlZnQiKTtHKEgscmUsSXQsIlx1MjVCOSIsIlxcdHJpYW5nbGVyaWdodCIpO0coSCxyZSxacywieyIsIlxceyIpO0coaXQscmUsUmUsInsiLCJcXHsiKTtHKGl0LHJlLFJlLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iik7RyhILHJlLG5zLCJ9IiwiXFx9Iik7RyhpdCxyZSxSZSwifSIsIlxcfSIpO0coaXQscmUsUmUsIn0iLCJcXHRleHRicmFjZXJpZ2h0Iik7RyhILHJlLFpzLCJ7IiwiXFxsYnJhY2UiKTtHKEgscmUsbnMsIn0iLCJcXHJicmFjZSIpO0coSCxyZSxacywiWyIsIlxcbGJyYWNrIiwhMCk7RyhpdCxyZSxSZSwiWyIsIlxcbGJyYWNrIiwhMCk7RyhILHJlLG5zLCJdIiwiXFxyYnJhY2siLCEwKTtHKGl0LHJlLFJlLCJdIiwiXFxyYnJhY2siLCEwKTtHKEgscmUsWnMsIigiLCJcXGxwYXJlbiIsITApO0coSCxyZSxucywiKSIsIlxccnBhcmVuIiwhMCk7RyhpdCxyZSxSZSwiPCIsIlxcdGV4dGxlc3MiLCEwKTtHKGl0LHJlLFJlLCI+IiwiXFx0ZXh0Z3JlYXRlciIsITApO0coSCxyZSxacywiXHUyMzBBIiwiXFxsZmxvb3IiLCEwKTtHKEgscmUsbnMsIlx1MjMwQiIsIlxccmZsb29yIiwhMCk7RyhILHJlLFpzLCJcdTIzMDgiLCJcXGxjZWlsIiwhMCk7RyhILHJlLG5zLCJcdTIzMDkiLCJcXHJjZWlsIiwhMCk7RyhILHJlLFJlLCJcXCIsIlxcYmFja3NsYXNoIik7RyhILHJlLFJlLCJcdTIyMjMiLCJ8Iik7RyhILHJlLFJlLCJcdTIyMjMiLCJcXHZlcnQiKTtHKGl0LHJlLFJlLCJ8IiwiXFx0ZXh0YmFyIiwhMCk7RyhILHJlLFJlLCJcdTIyMjUiLCJcXHwiKTtHKEgscmUsUmUsIlx1MjIyNSIsIlxcVmVydCIpO0coaXQscmUsUmUsIlx1MjIyNSIsIlxcdGV4dGJhcmRibCIpO0coaXQscmUsUmUsIn4iLCJcXHRleHRhc2NpaXRpbGRlIik7RyhpdCxyZSxSZSwiXFwiLCJcXHRleHRiYWNrc2xhc2giKTtHKGl0LHJlLFJlLCJeIiwiXFx0ZXh0YXNjaWljaXJjdW0iKTtHKEgscmUsRWUsIlx1MjE5MSIsIlxcdXBhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUQxIiwiXFxVcGFycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxOTMiLCJcXGRvd25hcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUQzIiwiXFxEb3duYXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjE5NSIsIlxcdXBkb3duYXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFENSIsIlxcVXBkb3duYXJyb3ciLCEwKTtHKEgscmUsQ2ksIlx1MjIxMCIsIlxcY29wcm9kIik7RyhILHJlLENpLCJcdTIyQzEiLCJcXGJpZ3ZlZSIpO0coSCxyZSxDaSwiXHUyMkMwIiwiXFxiaWd3ZWRnZSIpO0coSCxyZSxDaSwiXHUyQTA0IiwiXFxiaWd1cGx1cyIpO0coSCxyZSxDaSwiXHUyMkMyIiwiXFxiaWdjYXAiKTtHKEgscmUsQ2ksIlx1MjJDMyIsIlxcYmlnY3VwIik7RyhILHJlLENpLCJcdTIyMkIiLCJcXGludCIpO0coSCxyZSxDaSwiXHUyMjJCIiwiXFxpbnRvcCIpO0coSCxyZSxDaSwiXHUyMjJDIiwiXFxpaW50Iik7RyhILHJlLENpLCJcdTIyMkQiLCJcXGlpaW50Iik7RyhILHJlLENpLCJcdTIyMEYiLCJcXHByb2QiKTtHKEgscmUsQ2ksIlx1MjIxMSIsIlxcc3VtIik7RyhILHJlLENpLCJcdTJBMDIiLCJcXGJpZ290aW1lcyIpO0coSCxyZSxDaSwiXHUyQTAxIiwiXFxiaWdvcGx1cyIpO0coSCxyZSxDaSwiXHUyQTAwIiwiXFxiaWdvZG90Iik7RyhILHJlLENpLCJcdTIyMkUiLCJcXG9pbnQiKTtHKEgscmUsQ2ksIlx1MjIyRiIsIlxcb2lpbnQiKTtHKEgscmUsQ2ksIlx1MjIzMCIsIlxcb2lpaW50Iik7RyhILHJlLENpLCJcdTJBMDYiLCJcXGJpZ3NxY3VwIik7RyhILHJlLENpLCJcdTIyMkIiLCJcXHNtYWxsaW50Iik7RyhpdCxyZSxFMCwiXHUyMDI2IiwiXFx0ZXh0ZWxsaXBzaXMiKTtHKEgscmUsRTAsIlx1MjAyNiIsIlxcbWF0aGVsbGlwc2lzIik7RyhpdCxyZSxFMCwiXHUyMDI2IiwiXFxsZG90cyIsITApO0coSCxyZSxFMCwiXHUyMDI2IiwiXFxsZG90cyIsITApO0coSCxyZSxFMCwiXHUyMkVGIiwiXFxAY2RvdHMiLCEwKTtHKEgscmUsRTAsIlx1MjJGMSIsIlxcZGRvdHMiLCEwKTtHKEgscmUsUmUsIlx1MjJFRSIsIlxcdmFydmRvdHMiKTtHKGl0LHJlLFJlLCJcdTIyRUUiLCJcXHZhcnZkb3RzIik7RyhILHJlLEhuLCJcdTAyQ0EiLCJcXGFjdXRlIik7RyhILHJlLEhuLCJcdTAyQ0IiLCJcXGdyYXZlIik7RyhILHJlLEhuLCJceEE4IiwiXFxkZG90Iik7RyhILHJlLEhuLCJ+IiwiXFx0aWxkZSIpO0coSCxyZSxIbiwiXHUwMkM5IiwiXFxiYXIiKTtHKEgscmUsSG4sIlx1MDJEOCIsIlxcYnJldmUiKTtHKEgscmUsSG4sIlx1MDJDNyIsIlxcY2hlY2siKTtHKEgscmUsSG4sIl4iLCJcXGhhdCIpO0coSCxyZSxIbiwiXHUyMEQ3IiwiXFx2ZWMiKTtHKEgscmUsSG4sIlx1MDJEOSIsIlxcZG90Iik7RyhILHJlLEhuLCJcdTAyREEiLCJcXG1hdGhyaW5nIik7RyhILHJlLHJyLCJcdUUxMzEiLCJcXEBpbWF0aCIpO0coSCxyZSxyciwiXHVFMjM3IiwiXFxAam1hdGgiKTtHKEgscmUsUmUsIlx1MDEzMSIsIlx1MDEzMSIpO0coSCxyZSxSZSwiXHUwMjM3IiwiXHUwMjM3Iik7RyhpdCxyZSxSZSwiXHUwMTMxIiwiXFxpIiwhMCk7RyhpdCxyZSxSZSwiXHUwMjM3IiwiXFxqIiwhMCk7RyhpdCxyZSxSZSwiXHhERiIsIlxcc3MiLCEwKTtHKGl0LHJlLFJlLCJceEU2IiwiXFxhZSIsITApO0coaXQscmUsUmUsIlx1MDE1MyIsIlxcb2UiLCEwKTtHKGl0LHJlLFJlLCJceEY4IiwiXFxvIiwhMCk7RyhpdCxyZSxSZSwiXHhDNiIsIlxcQUUiLCEwKTtHKGl0LHJlLFJlLCJcdTAxNTIiLCJcXE9FIiwhMCk7RyhpdCxyZSxSZSwiXHhEOCIsIlxcTyIsITApO0coaXQscmUsSG4sIlx1MDJDQSIsIlxcJyIpO0coaXQscmUsSG4sIlx1MDJDQiIsIlxcYCIpO0coaXQscmUsSG4sIlx1MDJDNiIsIlxcXiIpO0coaXQscmUsSG4sIlx1MDJEQyIsIlxcfiIpO0coaXQscmUsSG4sIlx1MDJDOSIsIlxcPSIpO0coaXQscmUsSG4sIlx1MDJEOCIsIlxcdSIpO0coaXQscmUsSG4sIlx1MDJEOSIsIlxcLiIpO0coaXQscmUsSG4sIlx4QjgiLCJcXGMiKTtHKGl0LHJlLEhuLCJcdTAyREEiLCJcXHIiKTtHKGl0LHJlLEhuLCJcdTAyQzciLCJcXHYiKTtHKGl0LHJlLEhuLCJceEE4IiwnXFwiJyk7RyhpdCxyZSxIbiwiXHUwMkREIiwiXFxIIik7RyhpdCxyZSxIbiwiXHUyNUVGIiwiXFx0ZXh0Y2lyY2xlZCIpO01HPXsiLS0iOiEwLCItLS0iOiEwLCJgYCI6ITAsIicnIjohMH07RyhpdCxyZSxSZSwiXHUyMDEzIiwiLS0iLCEwKTtHKGl0LHJlLFJlLCJcdTIwMTMiLCJcXHRleHRlbmRhc2giKTtHKGl0LHJlLFJlLCJcdTIwMTQiLCItLS0iLCEwKTtHKGl0LHJlLFJlLCJcdTIwMTQiLCJcXHRleHRlbWRhc2giKTtHKGl0LHJlLFJlLCJcdTIwMTgiLCJgIiwhMCk7RyhpdCxyZSxSZSwiXHUyMDE4IiwiXFx0ZXh0cXVvdGVsZWZ0Iik7RyhpdCxyZSxSZSwiXHUyMDE5IiwiJyIsITApO0coaXQscmUsUmUsIlx1MjAxOSIsIlxcdGV4dHF1b3RlcmlnaHQiKTtHKGl0LHJlLFJlLCJcdTIwMUMiLCJgYCIsITApO0coaXQscmUsUmUsIlx1MjAxQyIsIlxcdGV4dHF1b3RlZGJsbGVmdCIpO0coaXQscmUsUmUsIlx1MjAxRCIsIicnIiwhMCk7RyhpdCxyZSxSZSwiXHUyMDFEIiwiXFx0ZXh0cXVvdGVkYmxyaWdodCIpO0coSCxyZSxSZSwiXHhCMCIsIlxcZGVncmVlIiwhMCk7RyhpdCxyZSxSZSwiXHhCMCIsIlxcZGVncmVlIik7RyhpdCxyZSxSZSwiXHhCMCIsIlxcdGV4dGRlZ3JlZSIsITApO0coSCxyZSxSZSwiXHhBMyIsIlxccG91bmRzIik7RyhILHJlLFJlLCJceEEzIiwiXFxtYXRoc3RlcmxpbmciLCEwKTtHKGl0LHJlLFJlLCJceEEzIiwiXFxwb3VuZHMiKTtHKGl0LHJlLFJlLCJceEEzIiwiXFx0ZXh0c3RlcmxpbmciLCEwKTtHKEgsa2UsUmUsIlx1MjcyMCIsIlxcbWFsdGVzZSIpO0coaXQsa2UsUmUsIlx1MjcyMCIsIlxcbWFsdGVzZSIpO2VHPScwMTIzNDU2Nzg5L0AuIic7Zm9yKHUzPTA7dTM8ZUcubGVuZ3RoO3UzKyspTjc9ZUcuY2hhckF0KHUzKSxHKEgscmUsUmUsTjcsTjcpO3RHPScwMTIzNDU2Nzg5IUAqKCktPSsiOzo/Ly4sJztmb3IoaDM9MDtoMzx0Ry5sZW5ndGg7aDMrKylNNz10Ry5jaGFyQXQoaDMpLEcoaXQscmUsUmUsTTcsTTcpO2szPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ijtmb3IoZjM9MDtmMzxrMy5sZW5ndGg7ZjMrKylXeT1rMy5jaGFyQXQoZjMpLEcoSCxyZSxycixXeSxXeSksRyhpdCxyZSxSZSxXeSxXeSk7RyhILGtlLFJlLCJDIiwiXHUyMTAyIik7RyhpdCxrZSxSZSwiQyIsIlx1MjEwMiIpO0coSCxrZSxSZSwiSCIsIlx1MjEwRCIpO0coaXQsa2UsUmUsIkgiLCJcdTIxMEQiKTtHKEgsa2UsUmUsIk4iLCJcdTIxMTUiKTtHKGl0LGtlLFJlLCJOIiwiXHUyMTE1Iik7RyhILGtlLFJlLCJQIiwiXHUyMTE5Iik7RyhpdCxrZSxSZSwiUCIsIlx1MjExOSIpO0coSCxrZSxSZSwiUSIsIlx1MjExQSIpO0coaXQsa2UsUmUsIlEiLCJcdTIxMUEiKTtHKEgsa2UsUmUsIlIiLCJcdTIxMUQiKTtHKGl0LGtlLFJlLCJSIiwiXHUyMTFEIik7RyhILGtlLFJlLCJaIiwiXHUyMTI0Iik7RyhpdCxrZSxSZSwiWiIsIlx1MjEyNCIpO0coSCxyZSxyciwiaCIsIlx1MjEwRSIpO0coaXQscmUscnIsImgiLCJcdTIxMEUiKTtscj0iIjtmb3IoRGE9MDtEYTxrMy5sZW5ndGg7RGErKyl0aT1rMy5jaGFyQXQoRGEpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTYzMjArRGEpLEcoSCxyZSxycix0aSxsciksRyhpdCxyZSxSZSx0aSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjM3MitEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NDI0K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY1ODArRGEpLEcoSCxyZSxycix0aSxsciksRyhpdCxyZSxSZSx0aSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjY4NCtEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NzM2K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY3ODgrRGEpLEcoSCxyZSxycix0aSxsciksRyhpdCxyZSxSZSx0aSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njg0MCtEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2OTQ0K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpLERhPDI2JiYobHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjYzMitEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NDc2K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpKTtscj0iXHV7MUQ1NUN9IjtHKEgscmUscnIsImsiLGxyKTtHKGl0LHJlLFJlLCJrIixscik7Zm9yKGdoPTA7Z2g8MTA7Z2grKylsdT1naC50b1N0cmluZygpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTcyOTQrZ2gpLEcoSCxyZSxycixsdSxsciksRyhpdCxyZSxSZSxsdSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMxNCtnaCksRyhILHJlLHJyLGx1LGxyKSxHKGl0LHJlLFJlLGx1LGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzI0K2doKSxHKEgscmUscnIsbHUsbHIpLEcoaXQscmUsUmUsbHUsbHIpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMzQrZ2gpLEcoSCxyZSxycixsdSxsciksRyhpdCxyZSxSZSxsdSxscik7WTc9Ilx4RDBceERFXHhGRSI7Zm9yKGQzPTA7ZDM8WTcubGVuZ3RoO2QzKyspcXk9WTcuY2hhckF0KGQzKSxHKEgscmUscnIscXkscXkpLEcoaXQscmUsUmUscXkscXkpO3AzPVtbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRobm9ybWFsIiwidGV4dGl0IiwiTWF0aC1JdGFsaWMiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbImJvbGRzeW1ib2wiLCJib2xkc3ltYm9sIiwiTWFpbi1Cb2xkSXRhbGljIl0sWyJtYXRoc2NyIiwidGV4dHNjciIsIlNjcmlwdC1SZWd1bGFyIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJiIiwidGV4dGJiIiwiQU1TLVJlZ3VsYXIiXSxbIm1hdGhib2xkZnJhayIsInRleHRib2xkZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyJtYXRoaXRzZiIsInRleHRpdHNmIiwiU2Fuc1NlcmlmLUl0YWxpYyJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl1dLHJHPVtbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsiIiwiIiwiIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl1dLHIzZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jaGFyQ29kZUF0KDApLGk9ZS5jaGFyQ29kZUF0KDEpLGE9KG4tNTUyOTYpKjEwMjQrKGktNTYzMjApKzY1NTM2LHM9cj09PSJtYXRoIj8wOjE7aWYoMTE5ODA4PD1hJiZhPDEyMDQ4NCl7dmFyIGw9TWF0aC5mbG9vcigoYS0xMTk4MDgpLzI2KTtyZXR1cm5bcDNbbF1bMl0scDNbbF1bc11dfWVsc2UgaWYoMTIwNzgyPD1hJiZhPD0xMjA4MzEpe3ZhciB1PU1hdGguZmxvb3IoKGEtMTIwNzgyKS8xMCk7cmV0dXJuW3JHW3VdWzJdLHJHW3VdW3NdXX1lbHNle2lmKGE9PT0xMjA0ODV8fGE9PT0xMjA0ODYpcmV0dXJuW3AzWzBdWzJdLHAzWzBdW3NdXTtpZigxMjA0ODY8YSYmYTwxMjA3ODIpcmV0dXJuWyIiLCIiXTt0aHJvdyBuZXcgcHQoIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogIitlKX19LCJ3aWRlQ2hhcmFjdGVyRm9udCIpLEwzPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBBbltuXVtlXSYmQW5bbl1bZV0ucmVwbGFjZSYmKGU9QW5bbl1bZV0ucmVwbGFjZSkse3ZhbHVlOmUsbWV0cmljczpuQShlLHIsbil9fSwibG9va3VwU3ltYm9sIiksZmw9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPUwzKGUscixuKSxsPXMubWV0cmljcztlPXMudmFsdWU7dmFyIHU7aWYobCl7dmFyIGg9bC5pdGFsaWM7KG49PT0idGV4dCJ8fGkmJmkuZm9udD09PSJtYXRoaXQiKSYmKGg9MCksdT1uZXcgQXMoZSxsLmhlaWdodCxsLmRlcHRoLGgsbC5za2V3LGwud2lkdGgsYSl9ZWxzZSB0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTm8gY2hhcmFjdGVyIG1ldHJpY3MgIisoImZvciAnIitlKyInIGluIHN0eWxlICciK3IrIicgYW5kIG1vZGUgJyIrbisiJyIpKSx1PW5ldyBBcyhlLDAsMCwwLDAsMCxhKTtpZihpKXt1Lm1heEZvbnRTaXplPWkuc2l6ZU11bHRpcGxpZXIsaS5zdHlsZS5pc1RpZ2h0KCkmJnUuY2xhc3Nlcy5wdXNoKCJtdGlnaHQiKTt2YXIgZj1pLmdldENvbG9yKCk7ZiYmKHUuc3R5bGUuY29sb3I9Zil9cmV0dXJuIHV9LCJtYWtlU3ltYm9sIiksbjNlPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPVtdKSxuLmZvbnQ9PT0iYm9sZHN5bWJvbCImJkwzKGUsIk1haW4tQm9sZCIscikubWV0cmljcz9mbChlLCJNYWluLUJvbGQiLHIsbixpLmNvbmNhdChbIm1hdGhiZiJdKSk6ZT09PSJcXCJ8fEFuW3JdW2VdLmZvbnQ9PT0ibWFpbiI/ZmwoZSwiTWFpbi1SZWd1bGFyIixyLG4saSk6ZmwoZSwiQU1TLVJlZ3VsYXIiLHIsbixpLmNvbmNhdChbImFtc3JtIl0pKX0sIm1hdGhzeW0iKSxpM2U9byhmdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiBhIT09InRleHRvcmQiJiZMMyhlLCJNYXRoLUJvbGRJdGFsaWMiLHIpLm1ldHJpY3M/e2ZvbnROYW1lOiJNYXRoLUJvbGRJdGFsaWMiLGZvbnRDbGFzczoiYm9sZHN5bWJvbCJ9Ontmb250TmFtZToiTWFpbi1Cb2xkIixmb250Q2xhc3M6Im1hdGhiZiJ9fSwiYm9sZHN5bWJvbCIpLGEzZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLm1vZGUsYT1lLnRleHQscz1bIm1vcmQiXSxsPWk9PT0ibWF0aCJ8fGk9PT0idGV4dCImJnIuZm9udCx1PWw/ci5mb250OnIuZm9udEZhbWlseSxoPSIiLGY9IiI7aWYoYS5jaGFyQ29kZUF0KDApPT09NTUzNDkmJihbaCxmXT1yM2UoYSxpKSksaC5sZW5ndGg+MClyZXR1cm4gZmwoYSxoLGkscixzLmNvbmNhdChmKSk7aWYodSl7dmFyIGQscDtpZih1PT09ImJvbGRzeW1ib2wiKXt2YXIgbT1pM2UoYSxpLHIscyxuKTtkPW0uZm9udE5hbWUscD1bbS5mb250Q2xhc3NdfWVsc2UgbD8oZD1QR1t1XS5mb250TmFtZSxwPVt1XSk6KGQ9bTModSxyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpLHA9W3Usci5mb250V2VpZ2h0LHIuZm9udFNoYXBlXSk7aWYoTDMoYSxkLGkpLm1ldHJpY3MpcmV0dXJuIGZsKGEsZCxpLHIscy5jb25jYXQocCkpO2lmKE1HLmhhc093blByb3BlcnR5KGEpJiZkLnNsaWNlKDAsMTApPT09IlR5cGV3cml0ZXIiKXtmb3IodmFyIGc9W10seT0wO3k8YS5sZW5ndGg7eSsrKWcucHVzaChmbChhW3ldLGQsaSxyLHMuY29uY2F0KHApKSk7cmV0dXJuIE9HKGcpfX1pZihuPT09Im1hdGhvcmQiKXJldHVybiBmbChhLCJNYXRoLUl0YWxpYyIsaSxyLHMuY29uY2F0KFsibWF0aG5vcm1hbCJdKSk7aWYobj09PSJ0ZXh0b3JkIil7dmFyIHY9QW5baV1bYV0mJkFuW2ldW2FdLmZvbnQ7aWYodj09PSJhbXMiKXt2YXIgeD1tMygiYW1zcm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIGZsKGEseCxpLHIscy5jb25jYXQoImFtc3JtIixyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpKX1lbHNlIGlmKHY9PT0ibWFpbiJ8fCF2KXt2YXIgYj1tMygidGV4dHJtIixyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpO3JldHVybiBmbChhLGIsaSxyLHMuY29uY2F0KHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkpfWVsc2V7dmFyIFQ9bTModixyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpO3JldHVybiBmbChhLFQsaSxyLHMuY29uY2F0KFQsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKSl9fWVsc2UgdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHR5cGU6ICIrbisiIGluIG1ha2VPcmQiKX0sIm1ha2VPcmQiKSxzM2U9bygodCxlKT0+e2lmKHZoKHQuY2xhc3NlcykhPT12aChlLmNsYXNzZXMpfHx0LnNrZXchPT1lLnNrZXd8fHQubWF4Rm9udFNpemUhPT1lLm1heEZvbnRTaXplKXJldHVybiExO2lmKHQuY2xhc3Nlcy5sZW5ndGg9PT0xKXt2YXIgcj10LmNsYXNzZXNbMF07aWYocj09PSJtYmluInx8cj09PSJtb3JkIilyZXR1cm4hMX1mb3IodmFyIG4gaW4gdC5zdHlsZSlpZih0LnN0eWxlLmhhc093blByb3BlcnR5KG4pJiZ0LnN0eWxlW25dIT09ZS5zdHlsZVtuXSlyZXR1cm4hMTtmb3IodmFyIGkgaW4gZS5zdHlsZSlpZihlLnN0eWxlLmhhc093blByb3BlcnR5KGkpJiZ0LnN0eWxlW2ldIT09ZS5zdHlsZVtpXSlyZXR1cm4hMTtyZXR1cm4hMH0sImNhbkNvbWJpbmUiKSxvM2U9byh0PT57Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKyl7dmFyIHI9dFtlXSxuPXRbZSsxXTtyIGluc3RhbmNlb2YgQXMmJm4gaW5zdGFuY2VvZiBBcyYmczNlKHIsbikmJihyLnRleHQrPW4udGV4dCxyLmhlaWdodD1NYXRoLm1heChyLmhlaWdodCxuLmhlaWdodCksci5kZXB0aD1NYXRoLm1heChyLmRlcHRoLG4uZGVwdGgpLHIuaXRhbGljPW4uaXRhbGljLHQuc3BsaWNlKGUrMSwxKSxlLS0pfXJldHVybiB0fSwidHJ5Q29tYmluZUNoYXJzIiksaUE9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPTAsaT0wLGE9MDthPGUuY2hpbGRyZW4ubGVuZ3RoO2ErKyl7dmFyIHM9ZS5jaGlsZHJlblthXTtzLmhlaWdodD5yJiYocj1zLmhlaWdodCkscy5kZXB0aD5uJiYobj1zLmRlcHRoKSxzLm1heEZvbnRTaXplPmkmJihpPXMubWF4Rm9udFNpemUpfWUuaGVpZ2h0PXIsZS5kZXB0aD1uLGUubWF4Rm9udFNpemU9aX0sInNpemVFbGVtZW50RnJvbUNoaWxkcmVuIiksQ3M9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgbGQoZSxyLG4saSk7cmV0dXJuIGlBKGEpLGF9LCJtYWtlU3BhbiIpLElHPW8oKHQsZSxyLG4pPT5uZXcgbGQodCxlLHIsbiksIm1ha2VTdmdTcGFuIiksbDNlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUNzKFtlXSxbXSxyKTtyZXR1cm4gaS5oZWlnaHQ9TWF0aC5tYXgobnx8ci5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLHIubWluUnVsZVRoaWNrbmVzcyksaS5zdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1FdChpLmhlaWdodCksaS5tYXhGb250U2l6ZT0xLGl9LCJtYWtlTGluZVNwYW4iKSxjM2U9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgWnkoZSxyLG4saSk7cmV0dXJuIGlBKGEpLGF9LCJtYWtlQW5jaG9yIiksT0c9byhmdW5jdGlvbihlKXt2YXIgcj1uZXcgb2QoZSk7cmV0dXJuIGlBKHIpLHJ9LCJtYWtlRnJhZ21lbnQiKSx1M2U9byhmdW5jdGlvbihlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygb2Q/Q3MoW10sW2VdLHIpOmV9LCJ3cmFwRnJhZ21lbnQiKSxoM2U9byhmdW5jdGlvbihlKXtpZihlLnBvc2l0aW9uVHlwZT09PSJpbmRpdmlkdWFsU2hpZnQiKXtmb3IodmFyIHI9ZS5jaGlsZHJlbixuPVtyWzBdXSxpPS1yWzBdLnNoaWZ0LXJbMF0uZWxlbS5kZXB0aCxhPWkscz0xO3M8ci5sZW5ndGg7cysrKXt2YXIgbD0tcltzXS5zaGlmdC1hLXJbc10uZWxlbS5kZXB0aCx1PWwtKHJbcy0xXS5lbGVtLmhlaWdodCtyW3MtMV0uZWxlbS5kZXB0aCk7YT1hK2wsbi5wdXNoKHt0eXBlOiJrZXJuIixzaXplOnV9KSxuLnB1c2gocltzXSl9cmV0dXJue2NoaWxkcmVuOm4sZGVwdGg6aX19dmFyIGg7aWYoZS5wb3NpdGlvblR5cGU9PT0idG9wIil7Zm9yKHZhciBmPWUucG9zaXRpb25EYXRhLGQ9MDtkPGUuY2hpbGRyZW4ubGVuZ3RoO2QrKyl7dmFyIHA9ZS5jaGlsZHJlbltkXTtmLT1wLnR5cGU9PT0ia2VybiI/cC5zaXplOnAuZWxlbS5oZWlnaHQrcC5lbGVtLmRlcHRofWg9Zn1lbHNlIGlmKGUucG9zaXRpb25UeXBlPT09ImJvdHRvbSIpaD0tZS5wb3NpdGlvbkRhdGE7ZWxzZXt2YXIgbT1lLmNoaWxkcmVuWzBdO2lmKG0udHlwZSE9PSJlbGVtIil0aHJvdyBuZXcgRXJyb3IoJ0ZpcnN0IGNoaWxkIG11c3QgaGF2ZSB0eXBlICJlbGVtIi4nKTtpZihlLnBvc2l0aW9uVHlwZT09PSJzaGlmdCIpaD0tbS5lbGVtLmRlcHRoLWUucG9zaXRpb25EYXRhO2Vsc2UgaWYoZS5wb3NpdGlvblR5cGU9PT0iZmlyc3RCYXNlbGluZSIpaD0tbS5lbGVtLmRlcHRoO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBvc2l0aW9uVHlwZSAiK2UucG9zaXRpb25UeXBlKyIuIil9cmV0dXJue2NoaWxkcmVuOmUuY2hpbGRyZW4sZGVwdGg6aH19LCJnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgiKSxmM2U9byhmdW5jdGlvbihlLHIpe2Zvcih2YXJ7Y2hpbGRyZW46bixkZXB0aDppfT1oM2UoZSksYT0wLHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9bltzXTtpZihsLnR5cGU9PT0iZWxlbSIpe3ZhciB1PWwuZWxlbTthPU1hdGgubWF4KGEsdS5tYXhGb250U2l6ZSx1LmhlaWdodCl9fWErPTI7dmFyIGg9Q3MoWyJwc3RydXQiXSxbXSk7aC5zdHlsZS5oZWlnaHQ9RXQoYSk7Zm9yKHZhciBmPVtdLGQ9aSxwPWksbT1pLGc9MDtnPG4ubGVuZ3RoO2crKyl7dmFyIHk9bltnXTtpZih5LnR5cGU9PT0ia2VybiIpbSs9eS5zaXplO2Vsc2V7dmFyIHY9eS5lbGVtLHg9eS53cmFwcGVyQ2xhc3Nlc3x8W10sYj15LndyYXBwZXJTdHlsZXx8e30sVD1Dcyh4LFtoLHZdLHZvaWQgMCxiKTtULnN0eWxlLnRvcD1FdCgtYS1tLXYuZGVwdGgpLHkubWFyZ2luTGVmdCYmKFQuc3R5bGUubWFyZ2luTGVmdD15Lm1hcmdpbkxlZnQpLHkubWFyZ2luUmlnaHQmJihULnN0eWxlLm1hcmdpblJpZ2h0PXkubWFyZ2luUmlnaHQpLGYucHVzaChUKSxtKz12LmhlaWdodCt2LmRlcHRofWQ9TWF0aC5taW4oZCxtKSxwPU1hdGgubWF4KHAsbSl9dmFyIFM9Q3MoWyJ2bGlzdCJdLGYpO1Muc3R5bGUuaGVpZ2h0PUV0KHApO3ZhciB3O2lmKGQ8MCl7dmFyIEU9Q3MoW10sW10pLF89Q3MoWyJ2bGlzdCJdLFtFXSk7Xy5zdHlsZS5oZWlnaHQ9RXQoLWQpO3ZhciBDPUNzKFsidmxpc3QtcyJdLFtuZXcgQXMoIlx1MjAwQiIpXSk7dz1bQ3MoWyJ2bGlzdC1yIl0sW1MsQ10pLENzKFsidmxpc3QtciJdLFtfXSldfWVsc2Ugdz1bQ3MoWyJ2bGlzdC1yIl0sW1NdKV07dmFyIEQ9Q3MoWyJ2bGlzdC10Il0sdyk7cmV0dXJuIHcubGVuZ3RoPT09MiYmRC5jbGFzc2VzLnB1c2goInZsaXN0LXQyIiksRC5oZWlnaHQ9cCxELmRlcHRoPS1kLER9LCJtYWtlVkxpc3QiKSxkM2U9bygodCxlKT0+e3ZhciByPUNzKFsibXNwYWNlIl0sW10sZSksbj1uaSh0LGUpO3JldHVybiByLnN0eWxlLm1hcmdpblJpZ2h0PUV0KG4pLHJ9LCJtYWtlR2x1ZSIpLG0zPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPSIiO3N3aXRjaChlKXtjYXNlImFtc3JtIjppPSJBTVMiO2JyZWFrO2Nhc2UidGV4dHJtIjppPSJNYWluIjticmVhaztjYXNlInRleHRzZiI6aT0iU2Fuc1NlcmlmIjticmVhaztjYXNlInRleHR0dCI6aT0iVHlwZXdyaXRlciI7YnJlYWs7ZGVmYXVsdDppPWV9dmFyIGE7cmV0dXJuIHI9PT0idGV4dGJmIiYmbj09PSJ0ZXh0aXQiP2E9IkJvbGRJdGFsaWMiOnI9PT0idGV4dGJmIj9hPSJCb2xkIjpyPT09InRleHRpdCI/YT0iSXRhbGljIjphPSJSZWd1bGFyIixpKyItIithfSwicmV0cmlldmVUZXh0Rm9udE5hbWUiKSxQRz17bWF0aGJmOnt2YXJpYW50OiJib2xkIixmb250TmFtZToiTWFpbi1Cb2xkIn0sbWF0aHJtOnt2YXJpYW50OiJub3JtYWwiLGZvbnROYW1lOiJNYWluLVJlZ3VsYXIifSx0ZXh0aXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aGl0Ont2YXJpYW50OiJpdGFsaWMiLGZvbnROYW1lOiJNYWluLUl0YWxpYyJ9LG1hdGhub3JtYWw6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1hdGgtSXRhbGljIn0sbWF0aHNmaXQ6e3ZhcmlhbnQ6InNhbnMtc2VyaWYtaXRhbGljIixmb250TmFtZToiU2Fuc1NlcmlmLUl0YWxpYyJ9LG1hdGhiYjp7dmFyaWFudDoiZG91YmxlLXN0cnVjayIsZm9udE5hbWU6IkFNUy1SZWd1bGFyIn0sbWF0aGNhbDp7dmFyaWFudDoic2NyaXB0Iixmb250TmFtZToiQ2FsaWdyYXBoaWMtUmVndWxhciJ9LG1hdGhmcmFrOnt2YXJpYW50OiJmcmFrdHVyIixmb250TmFtZToiRnJha3R1ci1SZWd1bGFyIn0sbWF0aHNjcjp7dmFyaWFudDoic2NyaXB0Iixmb250TmFtZToiU2NyaXB0LVJlZ3VsYXIifSxtYXRoc2Y6e3ZhcmlhbnQ6InNhbnMtc2VyaWYiLGZvbnROYW1lOiJTYW5zU2VyaWYtUmVndWxhciJ9LG1hdGh0dDp7dmFyaWFudDoibW9ub3NwYWNlIixmb250TmFtZToiVHlwZXdyaXRlci1SZWd1bGFyIn19LEJHPXt2ZWM6WyJ2ZWMiLC40NzEsLjcxNF0sb2lpbnRTaXplMTpbIm9paW50U2l6ZTEiLC45NTcsLjQ5OV0sb2lpbnRTaXplMjpbIm9paW50U2l6ZTIiLDEuNDcyLC42NTldLG9paWludFNpemUxOlsib2lpaW50U2l6ZTEiLDEuMzA0LC40OTldLG9paWludFNpemUyOlsib2lpaW50U2l6ZTIiLDEuOTgsLjY1OV19LHAzZT1vKGZ1bmN0aW9uKGUscil7dmFyW24saSxhXT1CR1tlXSxzPW5ldyBlYyhuKSxsPW5ldyBkbChbc10se3dpZHRoOkV0KGkpLGhlaWdodDpFdChhKSxzdHlsZToid2lkdGg6IitFdChpKSx2aWV3Qm94OiIwIDAgIisxZTMqaSsiICIrMWUzKmEscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSksdT1JRyhbIm92ZXJsYXkiXSxbbF0scik7cmV0dXJuIHUuaGVpZ2h0PWEsdS5zdHlsZS5oZWlnaHQ9RXQoYSksdS5zdHlsZS53aWR0aD1FdChpKSx1fSwic3RhdGljU3ZnIiksRmU9e2ZvbnRNYXA6UEcsbWFrZVN5bWJvbDpmbCxtYXRoc3ltOm4zZSxtYWtlU3BhbjpDcyxtYWtlU3ZnU3BhbjpJRyxtYWtlTGluZVNwYW46bDNlLG1ha2VBbmNob3I6YzNlLG1ha2VGcmFnbWVudDpPRyx3cmFwRnJhZ21lbnQ6dTNlLG1ha2VWTGlzdDpmM2UsbWFrZU9yZDphM2UsbWFrZUdsdWU6ZDNlLHN0YXRpY1N2ZzpwM2Usc3ZnRGF0YTpCRyx0cnlDb21iaW5lQ2hhcnM6bzNlfSxyaT17bnVtYmVyOjMsdW5pdDoibXUifSxzZD17bnVtYmVyOjQsdW5pdDoibXUifSxjdT17bnVtYmVyOjUsdW5pdDoibXUifSxtM2U9e21vcmQ6e21vcDpyaSxtYmluOnNkLG1yZWw6Y3UsbWlubmVyOnJpfSxtb3A6e21vcmQ6cmksbW9wOnJpLG1yZWw6Y3UsbWlubmVyOnJpfSxtYmluOnttb3JkOnNkLG1vcDpzZCxtb3BlbjpzZCxtaW5uZXI6c2R9LG1yZWw6e21vcmQ6Y3UsbW9wOmN1LG1vcGVuOmN1LG1pbm5lcjpjdX0sbW9wZW46e30sbWNsb3NlOnttb3A6cmksbWJpbjpzZCxtcmVsOmN1LG1pbm5lcjpyaX0sbXB1bmN0Onttb3JkOnJpLG1vcDpyaSxtcmVsOmN1LG1vcGVuOnJpLG1jbG9zZTpyaSxtcHVuY3Q6cmksbWlubmVyOnJpfSxtaW5uZXI6e21vcmQ6cmksbW9wOnJpLG1iaW46c2QsbXJlbDpjdSxtb3BlbjpyaSxtcHVuY3Q6cmksbWlubmVyOnJpfX0sZzNlPXttb3JkOnttb3A6cml9LG1vcDp7bW9yZDpyaSxtb3A6cml9LG1iaW46e30sbXJlbDp7fSxtb3Blbjp7fSxtY2xvc2U6e21vcDpyaX0sbXB1bmN0Ont9LG1pbm5lcjp7bW9wOnJpfX0sRkc9e30sRTM9e30sUzM9e307byhOdCwiZGVmaW5lRnVuY3Rpb24iKTtvKGNkLCJkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzIik7QzM9byhmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwIiYmZS5ib2R5Lmxlbmd0aD09PTE/ZS5ib2R5WzBdOmV9LCJub3JtYWxpemVBcmd1bWVudCIpLGdpPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCI/ZS5ib2R5OltlXX0sIm9yZGFyZ3VtZW50IiksZnU9RmUubWFrZVNwYW4seTNlPVsibGVmdG1vc3QiLCJtYmluIiwibW9wZW4iLCJtcmVsIiwibW9wIiwibXB1bmN0Il0sdjNlPVsicmlnaHRtb3N0IiwibXJlbCIsIm1jbG9zZSIsIm1wdW5jdCJdLHgzZT17ZGlzcGxheTpuci5ESVNQTEFZLHRleHQ6bnIuVEVYVCxzY3JpcHQ6bnIuU0NSSVBULHNjcmlwdHNjcmlwdDpuci5TQ1JJUFRTQ1JJUFR9LGIzZT17bW9yZDoibW9yZCIsbW9wOiJtb3AiLG1iaW46Im1iaW4iLG1yZWw6Im1yZWwiLG1vcGVuOiJtb3BlbiIsbWNsb3NlOiJtY2xvc2UiLG1wdW5jdDoibXB1bmN0IixtaW5uZXI6Im1pbm5lciJ9LCRpPW8oZnVuY3Rpb24oZSxyLG4saSl7aT09PXZvaWQgMCYmKGk9W251bGwsbnVsbF0pO2Zvcih2YXIgYT1bXSxzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBsPSRyKGVbc10scik7aWYobCBpbnN0YW5jZW9mIG9kKXt2YXIgdT1sLmNoaWxkcmVuO2EucHVzaCguLi51KX1lbHNlIGEucHVzaChsKX1pZihGZS50cnlDb21iaW5lQ2hhcnMoYSksIW4pcmV0dXJuIGE7dmFyIGg9cjtpZihlLmxlbmd0aD09PTEpe3ZhciBmPWVbMF07Zi50eXBlPT09InNpemluZyI/aD1yLmhhdmluZ1NpemUoZi5zaXplKTpmLnR5cGU9PT0ic3R5bGluZyImJihoPXIuaGF2aW5nU3R5bGUoeDNlW2Yuc3R5bGVdKSl9dmFyIGQ9ZnUoW2lbMF18fCJsZWZ0bW9zdCJdLFtdLHIpLHA9ZnUoW2lbMV18fCJyaWdodG1vc3QiXSxbXSxyKSxtPW49PT0icm9vdCI7cmV0dXJuIG5HKGEsKGcseSk9Pnt2YXIgdj15LmNsYXNzZXNbMF0seD1nLmNsYXNzZXNbMF07dj09PSJtYmluIiYmSnQuY29udGFpbnModjNlLHgpP3kuY2xhc3Nlc1swXT0ibW9yZCI6eD09PSJtYmluIiYmSnQuY29udGFpbnMoeTNlLHYpJiYoZy5jbGFzc2VzWzBdPSJtb3JkIil9LHtub2RlOmR9LHAsbSksbkcoYSwoZyx5KT0+e3ZhciB2PVg3KHkpLHg9WDcoZyksYj12JiZ4P2cuaGFzQ2xhc3MoIm10aWdodCIpP2czZVt2XVt4XTptM2Vbdl1beF06bnVsbDtpZihiKXJldHVybiBGZS5tYWtlR2x1ZShiLGgpfSx7bm9kZTpkfSxwLG0pLGF9LCJidWlsZEV4cHJlc3Npb24iKSxuRz1vKGZ1bmN0aW9uIHQoZSxyLG4saSxhKXtpJiZlLnB1c2goaSk7Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBsPWVbc10sdT0kRyhsKTtpZih1KXt0KHUuY2hpbGRyZW4scixuLG51bGwsYSk7Y29udGludWV9dmFyIGg9IWwuaGFzQ2xhc3MoIm1zcGFjZSIpO2lmKGgpe3ZhciBmPXIobCxuLm5vZGUpO2YmJihuLmluc2VydEFmdGVyP24uaW5zZXJ0QWZ0ZXIoZik6KGUudW5zaGlmdChmKSxzKyspKX1oP24ubm9kZT1sOmEmJmwuaGFzQ2xhc3MoIm5ld2xpbmUiKSYmKG4ubm9kZT1mdShbImxlZnRtb3N0Il0pKSxuLmluc2VydEFmdGVyPShkPT5wPT57ZS5zcGxpY2UoZCsxLDAscCkscysrfSkocyl9aSYmZS5wb3AoKX0sInRyYXZlcnNlTm9uU3BhY2VOb2RlcyIpLCRHPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBvZHx8ZSBpbnN0YW5jZW9mIFp5fHxlIGluc3RhbmNlb2YgbGQmJmUuaGFzQ2xhc3MoImVuY2xvc2luZyIpP2U6bnVsbH0sImNoZWNrUGFydGlhbEdyb3VwIiksVDNlPW8oZnVuY3Rpb24gdChlLHIpe3ZhciBuPSRHKGUpO2lmKG4pe3ZhciBpPW4uY2hpbGRyZW47aWYoaS5sZW5ndGgpe2lmKHI9PT0icmlnaHQiKXJldHVybiB0KGlbaS5sZW5ndGgtMV0sInJpZ2h0Iik7aWYocj09PSJsZWZ0IilyZXR1cm4gdChpWzBdLCJsZWZ0Iil9fXJldHVybiBlfSwiZ2V0T3V0ZXJtb3N0Tm9kZSIpLFg3PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT8ociYmKGU9VDNlKGUscikpLGIzZVtlLmNsYXNzZXNbMF1dfHxudWxsKTpudWxsfSwiZ2V0VHlwZU9mRG9tVHJlZSIpLGV2PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1bIm51bGxkZWxpbWl0ZXIiXS5jb25jYXQoZS5iYXNlU2l6aW5nQ2xhc3NlcygpKTtyZXR1cm4gZnUoci5jb25jYXQobikpfSwibWFrZU51bGxEZWxpbWl0ZXIiKSwkcj1vKGZ1bmN0aW9uKGUscixuKXtpZighZSlyZXR1cm4gZnUoKTtpZihFM1tlLnR5cGVdKXt2YXIgaT1FM1tlLnR5cGVdKGUscik7aWYobiYmci5zaXplIT09bi5zaXplKXtpPWZ1KHIuc2l6aW5nQ2xhc3NlcyhuKSxbaV0scik7dmFyIGE9ci5zaXplTXVsdGlwbGllci9uLnNpemVNdWx0aXBsaWVyO2kuaGVpZ2h0Kj1hLGkuZGVwdGgqPWF9cmV0dXJuIGl9ZWxzZSB0aHJvdyBuZXcgcHQoIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICciK2UudHlwZSsiJyIpfSwiYnVpbGRHcm91cCIpO28oZzMsImJ1aWxkSFRNTFVuYnJlYWthYmxlIik7byhqNywiYnVpbGRIVE1MIik7byh6RywibmV3RG9jdW1lbnRGcmFnbWVudCIpO3RzPWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hdGhOb2RlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMudHlwZT12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMudHlwZT1lLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPXJ8fFtdLHRoaXMuY2xhc3Nlcz1ufHxbXX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1nZXRBdHRyaWJ1dGUoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tlXX10b05vZGUoKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHRoaXMudHlwZSk7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiZlLnNldEF0dHJpYnV0ZShyLHRoaXMuYXR0cmlidXRlc1tyXSk7dGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYoZS5jbGFzc05hbWU9dmgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtuKyspaWYodGhpcy5jaGlsZHJlbltuXWluc3RhbmNlb2YgQW8mJnRoaXMuY2hpbGRyZW5bbisxXWluc3RhbmNlb2YgQW8pe2Zvcih2YXIgaT10aGlzLmNoaWxkcmVuW25dLnRvVGV4dCgpK3RoaXMuY2hpbGRyZW5bKytuXS50b1RleHQoKTt0aGlzLmNoaWxkcmVuW24rMV1pbnN0YW5jZW9mIEFvOylpKz10aGlzLmNoaWxkcmVuWysrbl0udG9UZXh0KCk7ZS5hcHBlbmRDaGlsZChuZXcgQW8oaSkudG9Ob2RlKCkpfWVsc2UgZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW25dLnRvTm9kZSgpKTtyZXR1cm4gZX10b01hcmt1cCgpe3ZhciBlPSI8Iit0aGlzLnR5cGU7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJyxlKz1KdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSxlKz0nIicpO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKGUrPScgY2xhc3MgPSInK0p0LmVzY2FwZSh2aCh0aGlzLmNsYXNzZXMpKSsnIicpLGUrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8LyIrdGhpcy50eXBlKyI+IixlfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChlPT5lLnRvVGV4dCgpKS5qb2luKCIiKX19LEFvPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRleHROb2RlIil9Y29uc3RydWN0b3IoZSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLnRleHQ9ZX10b05vZGUoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KX10b01hcmt1cCgpe3JldHVybiBKdC5lc2NhcGUodGhpcy50b1RleHQoKSl9dG9UZXh0KCl7cmV0dXJuIHRoaXMudGV4dH19LEs3PWNsYXNze3N0YXRpY3tvKHRoaXMsIlNwYWNlTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2hhcmFjdGVyPXZvaWQgMCx0aGlzLndpZHRoPWUsZT49LjA1NTU1JiZlPD0uMDU1NTY/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwQSI6ZT49LjE2NjYmJmU8PS4xNjY3P3RoaXMuY2hhcmFjdGVyPSJcdTIwMDkiOmU+PS4yMjIyJiZlPD0uMjIyMz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA1IjplPj0uMjc3NyYmZTw9LjI3Nzg/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNVx1MjAwQSI6ZT49LS4wNTU1NiYmZTw9LS4wNTU1NT90aGlzLmNoYXJhY3Rlcj0iXHUyMDBBXHUyMDYzIjplPj0tLjE2NjcmJmU8PS0uMTY2Nj90aGlzLmNoYXJhY3Rlcj0iXHUyMDA5XHUyMDYzIjplPj0tLjIyMjMmJmU8PS0uMjIyMj90aGlzLmNoYXJhY3Rlcj0iXHUyMDVGXHUyMDYzIjplPj0tLjI3NzgmJmU8PS0uMjc3Nz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA1XHUyMDYzIjp0aGlzLmNoYXJhY3Rlcj1udWxsfXRvTm9kZSgpe2lmKHRoaXMuY2hhcmFjdGVyKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwibXNwYWNlIik7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsRXQodGhpcy53aWR0aCkpLGV9dG9NYXJrdXAoKXtyZXR1cm4gdGhpcy5jaGFyYWN0ZXI/IjxtdGV4dD4iK3RoaXMuY2hhcmFjdGVyKyI8L210ZXh0PiI6Jzxtc3BhY2Ugd2lkdGg9IicrRXQodGhpcy53aWR0aCkrJyIvPid9dG9UZXh0KCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyP3RoaXMuY2hhcmFjdGVyOiIgIn19LGR0PXtNYXRoTm9kZTp0cyxUZXh0Tm9kZTpBbyxTcGFjZU5vZGU6SzcsbmV3RG9jdW1lbnRGcmFnbWVudDp6R30sRG89byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIEFuW3JdW2VdJiZBbltyXVtlXS5yZXBsYWNlJiZlLmNoYXJDb2RlQXQoMCkhPT01NTM0OSYmIShNRy5oYXNPd25Qcm9wZXJ0eShlKSYmbiYmKG4uZm9udEZhbWlseSYmbi5mb250RmFtaWx5LnNsaWNlKDQsNik9PT0idHQifHxuLmZvbnQmJm4uZm9udC5zbGljZSg0LDYpPT09InR0IikpJiYoZT1BbltyXVtlXS5yZXBsYWNlKSxuZXcgZHQuVGV4dE5vZGUoZSl9LCJtYWtlVGV4dCIpLGFBPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPT09MT9lWzBdOm5ldyBkdC5NYXRoTm9kZSgibXJvdyIsZSl9LCJtYWtlUm93Iiksc0E9byhmdW5jdGlvbihlLHIpe2lmKHIuZm9udEZhbWlseT09PSJ0ZXh0dHQiKXJldHVybiJtb25vc3BhY2UiO2lmKHIuZm9udEZhbWlseT09PSJ0ZXh0c2YiKXJldHVybiByLmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8ic2Fucy1zZXJpZi1ib2xkLWl0YWxpYyI6ci5mb250U2hhcGU9PT0idGV4dGl0Ij8ic2Fucy1zZXJpZi1pdGFsaWMiOnIuZm9udFdlaWdodD09PSJ0ZXh0YmYiPyJib2xkLXNhbnMtc2VyaWYiOiJzYW5zLXNlcmlmIjtpZihyLmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIilyZXR1cm4iYm9sZC1pdGFsaWMiO2lmKHIuZm9udFNoYXBlPT09InRleHRpdCIpcmV0dXJuIml0YWxpYyI7aWYoci5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQiO3ZhciBuPXIuZm9udDtpZighbnx8bj09PSJtYXRobm9ybWFsIilyZXR1cm4gbnVsbDt2YXIgaT1lLm1vZGU7aWYobj09PSJtYXRoaXQiKXJldHVybiJpdGFsaWMiO2lmKG49PT0iYm9sZHN5bWJvbCIpcmV0dXJuIGUudHlwZT09PSJ0ZXh0b3JkIj8iYm9sZCI6ImJvbGQtaXRhbGljIjtpZihuPT09Im1hdGhiZiIpcmV0dXJuImJvbGQiO2lmKG49PT0ibWF0aGJiIilyZXR1cm4iZG91YmxlLXN0cnVjayI7aWYobj09PSJtYXRoc2ZpdCIpcmV0dXJuInNhbnMtc2VyaWYtaXRhbGljIjtpZihuPT09Im1hdGhmcmFrIilyZXR1cm4iZnJha3R1ciI7aWYobj09PSJtYXRoc2NyInx8bj09PSJtYXRoY2FsIilyZXR1cm4ic2NyaXB0IjtpZihuPT09Im1hdGhzZiIpcmV0dXJuInNhbnMtc2VyaWYiO2lmKG49PT0ibWF0aHR0IilyZXR1cm4ibW9ub3NwYWNlIjt2YXIgYT1lLnRleHQ7aWYoSnQuY29udGFpbnMoWyJcXGltYXRoIiwiXFxqbWF0aCJdLGEpKXJldHVybiBudWxsO0FuW2ldW2FdJiZBbltpXVthXS5yZXBsYWNlJiYoYT1BbltpXVthXS5yZXBsYWNlKTt2YXIgcz1GZS5mb250TWFwW25dLmZvbnROYW1lO3JldHVybiBuQShhLHMsaSk/RmUuZm9udE1hcFtuXS52YXJpYW50Om51bGx9LCJnZXRWYXJpYW50Iik7byhJNywiaXNOdW1iZXJQdW5jdHVhdGlvbiIpO19zPW8oZnVuY3Rpb24oZSxyLG4pe2lmKGUubGVuZ3RoPT09MSl7dmFyIGk9dm4oZVswXSxyKTtyZXR1cm4gbiYmaSBpbnN0YW5jZW9mIHRzJiZpLnR5cGU9PT0ibW8iJiYoaS5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjBlbSIpLGkuc2V0QXR0cmlidXRlKCJyc3BhY2UiLCIwZW0iKSksW2ldfWZvcih2YXIgYT1bXSxzLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHU9dm4oZVtsXSxyKTtpZih1IGluc3RhbmNlb2YgdHMmJnMgaW5zdGFuY2VvZiB0cyl7aWYodS50eXBlPT09Im10ZXh0IiYmcy50eXBlPT09Im10ZXh0IiYmdS5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iik9PT1zLmdldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiKSl7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYodS50eXBlPT09Im1uIiYmcy50eXBlPT09Im1uIil7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoSTcodSkmJnMudHlwZT09PSJtbiIpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtbiImJkk3KHMpKXUuY2hpbGRyZW49Wy4uLnMuY2hpbGRyZW4sLi4udS5jaGlsZHJlbl0sYS5wb3AoKTtlbHNlIGlmKCh1LnR5cGU9PT0ibXN1cCJ8fHUudHlwZT09PSJtc3ViIikmJnUuY2hpbGRyZW4ubGVuZ3RoPj0xJiYocy50eXBlPT09Im1uInx8STcocykpKXt2YXIgaD11LmNoaWxkcmVuWzBdO2ggaW5zdGFuY2VvZiB0cyYmaC50eXBlPT09Im1uIiYmKGguY2hpbGRyZW49Wy4uLnMuY2hpbGRyZW4sLi4uaC5jaGlsZHJlbl0sYS5wb3AoKSl9ZWxzZSBpZihzLnR5cGU9PT0ibWkiJiZzLmNoaWxkcmVuLmxlbmd0aD09PTEpe3ZhciBmPXMuY2hpbGRyZW5bMF07aWYoZiBpbnN0YW5jZW9mIEFvJiZmLnRleHQ9PT0iXHUwMzM4IiYmKHUudHlwZT09PSJtbyJ8fHUudHlwZT09PSJtaSJ8fHUudHlwZT09PSJtbiIpKXt2YXIgZD11LmNoaWxkcmVuWzBdO2QgaW5zdGFuY2VvZiBBbyYmZC50ZXh0Lmxlbmd0aD4wJiYoZC50ZXh0PWQudGV4dC5zbGljZSgwLDEpKyJcdTAzMzgiK2QudGV4dC5zbGljZSgxKSxhLnBvcCgpKX19fWEucHVzaCh1KSxzPXV9cmV0dXJuIGF9LCJidWlsZEV4cHJlc3Npb24iKSx4aD1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gYUEoX3MoZSxyLG4pKX0sImJ1aWxkRXhwcmVzc2lvblJvdyIpLHZuPW8oZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm4gbmV3IGR0Lk1hdGhOb2RlKCJtcm93Iik7aWYoUzNbZS50eXBlXSl7dmFyIG49UzNbZS50eXBlXShlLHIpO3JldHVybiBufWVsc2UgdGhyb3cgbmV3IHB0KCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitlLnR5cGUrIiciKX0sImJ1aWxkR3JvdXAiKTtvKGlHLCJidWlsZE1hdGhNTCIpO0dHPW8oZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3Myh7c3R5bGU6ZS5kaXNwbGF5TW9kZT9uci5ESVNQTEFZOm5yLlRFWFQsbWF4U2l6ZTplLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczplLm1pblJ1bGVUaGlja25lc3N9KX0sIm9wdGlvbnNGcm9tU2V0dGluZ3MiKSxWRz1vKGZ1bmN0aW9uKGUscil7aWYoci5kaXNwbGF5TW9kZSl7dmFyIG49WyJrYXRleC1kaXNwbGF5Il07ci5sZXFubyYmbi5wdXNoKCJsZXFubyIpLHIuZmxlcW4mJm4ucHVzaCgiZmxlcW4iKSxlPUZlLm1ha2VTcGFuKG4sW2VdKX1yZXR1cm4gZX0sImRpc3BsYXlXcmFwIiksdzNlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUdHKG4pLGE7aWYobi5vdXRwdXQ9PT0ibWF0aG1sIilyZXR1cm4gaUcoZSxyLGksbi5kaXNwbGF5TW9kZSwhMCk7aWYobi5vdXRwdXQ9PT0iaHRtbCIpe3ZhciBzPWo3KGUsaSk7YT1GZS5tYWtlU3BhbihbImthdGV4Il0sW3NdKX1lbHNle3ZhciBsPWlHKGUscixpLG4uZGlzcGxheU1vZGUsITEpLHU9ajcoZSxpKTthPUZlLm1ha2VTcGFuKFsia2F0ZXgiXSxbbCx1XSl9cmV0dXJuIFZHKGEsbil9LCJidWlsZFRyZWUiKSxrM2U9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9R0cobiksYT1qNyhlLGkpLHM9RmUubWFrZVNwYW4oWyJrYXRleCJdLFthXSk7cmV0dXJuIFZHKHMsbil9LCJidWlsZEhUTUxUcmVlIiksRTNlPXt3aWRlaGF0OiJeIix3aWRlY2hlY2s6Ilx1MDJDNyIsd2lkZXRpbGRlOiJ+Iix1dGlsZGU6In4iLG92ZXJsZWZ0YXJyb3c6Ilx1MjE5MCIsdW5kZXJsZWZ0YXJyb3c6Ilx1MjE5MCIseGxlZnRhcnJvdzoiXHUyMTkwIixvdmVycmlnaHRhcnJvdzoiXHUyMTkyIix1bmRlcnJpZ2h0YXJyb3c6Ilx1MjE5MiIseHJpZ2h0YXJyb3c6Ilx1MjE5MiIsdW5kZXJicmFjZToiXHUyM0RGIixvdmVyYnJhY2U6Ilx1MjNERSIsb3Zlcmdyb3VwOiJcdTIzRTAiLHVuZGVyZ3JvdXA6Ilx1MjNFMSIsb3ZlcmxlZnRyaWdodGFycm93OiJcdTIxOTQiLHVuZGVybGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIseGxlZnRyaWdodGFycm93OiJcdTIxOTQiLE92ZXJyaWdodGFycm93OiJcdTIxRDIiLHhSaWdodGFycm93OiJcdTIxRDIiLG92ZXJsZWZ0aGFycG9vbjoiXHUyMUJDIix4bGVmdGhhcnBvb251cDoiXHUyMUJDIixvdmVycmlnaHRoYXJwb29uOiJcdTIxQzAiLHhyaWdodGhhcnBvb251cDoiXHUyMUMwIix4TGVmdGFycm93OiJcdTIxRDAiLHhMZWZ0cmlnaHRhcnJvdzoiXHUyMUQ0Iix4aG9va2xlZnRhcnJvdzoiXHUyMUE5Iix4aG9va3JpZ2h0YXJyb3c6Ilx1MjFBQSIseG1hcHN0bzoiXHUyMUE2Iix4cmlnaHRoYXJwb29uZG93bjoiXHUyMUMxIix4bGVmdGhhcnBvb25kb3duOiJcdTIxQkQiLHhyaWdodGxlZnRoYXJwb29uczoiXHUyMUNDIix4bGVmdHJpZ2h0aGFycG9vbnM6Ilx1MjFDQiIseHR3b2hlYWRsZWZ0YXJyb3c6Ilx1MjE5RSIseHR3b2hlYWRyaWdodGFycm93OiJcdTIxQTAiLHhsb25nZXF1YWw6Ij0iLHh0b2Zyb206Ilx1MjFDNCIseHJpZ2h0bGVmdGFycm93czoiXHUyMUM0Iix4cmlnaHRlcXVpbGlicml1bToiXHUyMUNDIix4bGVmdGVxdWlsaWJyaXVtOiJcdTIxQ0IiLCJcXGNkcmlnaHRhcnJvdyI6Ilx1MjE5MiIsIlxcY2RsZWZ0YXJyb3ciOiJcdTIxOTAiLCJcXGNkbG9uZ2VxdWFsIjoiPSJ9LFMzZT1vKGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUoRTNlW2UucmVwbGFjZSgvXlxcLywiIildKV0pO3JldHVybiByLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJ0cnVlIikscn0sIm1hdGhNTG5vZGUiKSxDM2U9e292ZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSxvdmVybGVmdGFycm93OltbImxlZnRhcnJvdyJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHVuZGVycmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sLjg4OCw1MjIsInhNYXhZTWluIl0sdW5kZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0seHJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLDEuNDY5LDUyMiwieE1heFlNaW4iXSwiXFxjZHJpZ2h0YXJyb3ciOltbInJpZ2h0YXJyb3ciXSwzLDUyMiwieE1heFlNaW4iXSx4bGVmdGFycm93OltbImxlZnRhcnJvdyJdLDEuNDY5LDUyMiwieE1pbllNaW4iXSwiXFxjZGxlZnRhcnJvdyI6W1sibGVmdGFycm93Il0sMyw1MjIsInhNaW5ZTWluIl0sT3ZlcnJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLC44ODgsNTYwLCJ4TWF4WU1pbiJdLHhSaWdodGFycm93OltbImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjUyNiw1NjAsInhNYXhZTWluIl0seExlZnRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciXSwxLjUyNiw1NjAsInhNaW5ZTWluIl0sb3ZlcmxlZnRoYXJwb29uOltbImxlZnRoYXJwb29uIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0seGxlZnRoYXJwb29udXA6W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb25kb3duOltbImxlZnRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLG92ZXJyaWdodGhhcnBvb246W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbnVwOltbInJpZ2h0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhyaWdodGhhcnBvb25kb3duOltbInJpZ2h0aGFycG9vbmRvd24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4bG9uZ2VxdWFsOltbImxvbmdlcXVhbCJdLC44ODgsMzM0LCJ4TWluWU1pbiJdLCJcXGNkbG9uZ2VxdWFsIjpbWyJsb25nZXF1YWwiXSwzLDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZGxlZnRhcnJvdzpbWyJ0d29oZWFkbGVmdGFycm93Il0sLjg4OCwzMzQsInhNaW5ZTWluIl0seHR3b2hlYWRyaWdodGFycm93OltbInR3b2hlYWRyaWdodGFycm93Il0sLjg4OCwzMzQsInhNYXhZTWluIl0sb3ZlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0sb3ZlcmJyYWNlOltbImxlZnRicmFjZSIsIm1pZGJyYWNlIiwicmlnaHRicmFjZSJdLDEuNiw1NDhdLHVuZGVyYnJhY2U6W1sibGVmdGJyYWNldW5kZXIiLCJtaWRicmFjZXVuZGVyIiwicmlnaHRicmFjZXVuZGVyIl0sMS42LDU0OF0sdW5kZXJsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sLjg4OCw1MjJdLHhsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sMS43NSw1MjJdLHhMZWZ0cmlnaHRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciLCJkb3VibGVyaWdodGFycm93Il0sMS43NSw1NjBdLHhyaWdodGxlZnRoYXJwb29uczpbWyJsZWZ0aGFycG9vbmRvd25wbHVzIiwicmlnaHRoYXJwb29ucGx1cyJdLDEuNzUsNzE2XSx4bGVmdHJpZ2h0aGFycG9vbnM6W1sibGVmdGhhcnBvb25wbHVzIiwicmlnaHRoYXJwb29uZG93bnBsdXMiXSwxLjc1LDcxNl0seGhvb2tsZWZ0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRob29rIl0sMS4wOCw1MjJdLHhob29rcmlnaHRhcnJvdzpbWyJsZWZ0aG9vayIsInJpZ2h0YXJyb3ciXSwxLjA4LDUyMl0sb3ZlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sdW5kZXJsaW5lc2VnbWVudDpbWyJsZWZ0bGluZXNlZ21lbnQiLCJyaWdodGxpbmVzZWdtZW50Il0sLjg4OCw1MjJdLG92ZXJncm91cDpbWyJsZWZ0Z3JvdXAiLCJyaWdodGdyb3VwIl0sLjg4OCwzNDJdLHVuZGVyZ3JvdXA6W1sibGVmdGdyb3VwdW5kZXIiLCJyaWdodGdyb3VwdW5kZXIiXSwuODg4LDM0Ml0seG1hcHN0bzpbWyJsZWZ0bWFwc3RvIiwicmlnaHRhcnJvdyJdLDEuNSw1MjJdLHh0b2Zyb206W1sibGVmdFRvRnJvbSIsInJpZ2h0VG9Gcm9tIl0sMS43NSw1MjhdLHhyaWdodGxlZnRhcnJvd3M6W1siYmFyYWJvdmVsZWZ0YXJyb3ciLCJyaWdodGFycm93YWJvdmViYXIiXSwxLjc1LDkwMV0seHJpZ2h0ZXF1aWxpYnJpdW06W1siYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uIiwicmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhciJdLDEuNzUsNzE2XSx4bGVmdGVxdWlsaWJyaXVtOltbInNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbiIsInNob3J0cmlnaHRoYXJwb29uYWJvdmViYXIiXSwxLjc1LDcxNl19LEEzZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ib3JkZ3JvdXAiP2UuYm9keS5sZW5ndGg6MX0sImdyb3VwTGVuZ3RoIiksXzNlPW8oZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGw9NGU1LHU9ZS5sYWJlbC5zbGljZSgxKTtpZihKdC5jb250YWlucyhbIndpZGVoYXQiLCJ3aWRlY2hlY2siLCJ3aWRldGlsZGUiLCJ1dGlsZGUiXSx1KSl7dmFyIGg9ZSxmPUEzZShoLmJhc2UpLGQscCxtO2lmKGY+NSl1PT09IndpZGVoYXQifHx1PT09IndpZGVjaGVjayI/KGQ9NDIwLGw9MjM2NCxtPS40MixwPXUrIjQiKTooZD0zMTIsbD0yMzQwLG09LjM0LHA9InRpbGRlNCIpO2Vsc2V7dmFyIGc9WzEsMSwyLDIsMywzXVtmXTt1PT09IndpZGVoYXQifHx1PT09IndpZGVjaGVjayI/KGw9WzAsMTA2MiwyMzY0LDIzNjQsMjM2NF1bZ10sZD1bMCwyMzksMzAwLDM2MCw0MjBdW2ddLG09WzAsLjI0LC4zLC4zLC4zNiwuNDJdW2ddLHA9dStnKToobD1bMCw2MDAsMTAzMywyMzM5LDIzNDBdW2ddLGQ9WzAsMjYwLDI4NiwzMDYsMzEyXVtnXSxtPVswLC4yNiwuMjg2LC4zLC4zMDYsLjM0XVtnXSxwPSJ0aWxkZSIrZyl9dmFyIHk9bmV3IGVjKHApLHY9bmV3IGRsKFt5XSx7d2lkdGg6IjEwMCUiLGhlaWdodDpFdChtKSx2aWV3Qm94OiIwIDAgIitsKyIgIitkLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSk7cmV0dXJue3NwYW46RmUubWFrZVN2Z1NwYW4oW10sW3ZdLHIpLG1pbldpZHRoOjAsaGVpZ2h0Om19fWVsc2V7dmFyIHg9W10sYj1DM2VbdV0sW1QsUyx3XT1iLEU9dy8xZTMsXz1ULmxlbmd0aCxDLEQ7aWYoXz09PTEpe3ZhciBPPWJbM107Qz1bImhpZGUtdGFpbCJdLEQ9W09dfWVsc2UgaWYoXz09PTIpQz1bImhhbGZhcnJvdy1sZWZ0IiwiaGFsZmFycm93LXJpZ2h0Il0sRD1bInhNaW5ZTWluIiwieE1heFlNaW4iXTtlbHNlIGlmKF89PT0zKUM9WyJicmFjZS1sZWZ0IiwiYnJhY2UtY2VudGVyIiwiYnJhY2UtcmlnaHQiXSxEPVsieE1pbllNaW4iLCJ4TWlkWU1pbiIsInhNYXhZTWluIl07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYENvcnJlY3Qga2F0ZXhJbWFnZXNEYXRhIG9yIHVwZGF0ZSBjb2RlIGhlcmUgdG8gc3VwcG9ydAogICAgICAgICAgICAgICAgICAgIGArXysiIGNoaWxkcmVuLiIpO2Zvcih2YXIgUj0wO1I8XztSKyspe3ZhciBrPW5ldyBlYyhUW1JdKSxMPW5ldyBkbChba10se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OkV0KEUpLHZpZXdCb3g6IjAgMCAiK2wrIiAiK3cscHJlc2VydmVBc3BlY3RSYXRpbzpEW1JdKyIgc2xpY2UifSksQT1GZS5tYWtlU3ZnU3BhbihbQ1tSXV0sW0xdLHIpO2lmKF89PT0xKXJldHVybntzcGFuOkEsbWluV2lkdGg6UyxoZWlnaHQ6RX07QS5zdHlsZS5oZWlnaHQ9RXQoRSkseC5wdXNoKEEpfXJldHVybntzcGFuOkZlLm1ha2VTcGFuKFsic3RyZXRjaHkiXSx4LHIpLG1pbldpZHRoOlMsaGVpZ2h0OkV9fX1vKG4sImJ1aWxkU3ZnU3Bhbl8iKTt2YXJ7c3BhbjppLG1pbldpZHRoOmEsaGVpZ2h0OnN9PW4oKTtyZXR1cm4gaS5oZWlnaHQ9cyxpLnN0eWxlLmhlaWdodD1FdChzKSxhPjAmJihpLnN0eWxlLm1pbldpZHRoPUV0KGEpKSxpfSwic3ZnU3BhbiIpLEQzZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHMsbD1lLmhlaWdodCtlLmRlcHRoK24raTtpZigvZmJveHxjb2xvcnxhbmdsLy50ZXN0KHIpKXtpZihzPUZlLm1ha2VTcGFuKFsic3RyZXRjaHkiLHJdLFtdLGEpLHI9PT0iZmJveCIpe3ZhciB1PWEuY29sb3ImJmEuZ2V0Q29sb3IoKTt1JiYocy5zdHlsZS5ib3JkZXJDb2xvcj11KX19ZWxzZXt2YXIgaD1bXTsvXltieF1jYW5jZWwkLy50ZXN0KHIpJiZoLnB1c2gobmV3IEp5KHt4MToiMCIseTE6IjAiLHgyOiIxMDAlIix5MjoiMTAwJSIsInN0cm9rZS13aWR0aCI6IjAuMDQ2ZW0ifSkpLC9eeD9jYW5jZWwkLy50ZXN0KHIpJiZoLnB1c2gobmV3IEp5KHt4MToiMCIseTE6IjEwMCUiLHgyOiIxMDAlIix5MjoiMCIsInN0cm9rZS13aWR0aCI6IjAuMDQ2ZW0ifSkpO3ZhciBmPW5ldyBkbChoLHt3aWR0aDoiMTAwJSIsaGVpZ2h0OkV0KGwpfSk7cz1GZS5tYWtlU3ZnU3BhbihbXSxbZl0sYSl9cmV0dXJuIHMuaGVpZ2h0PWwscy5zdHlsZS5oZWlnaHQ9RXQobCksc30sImVuY2xvc2VTcGFuIiksZHU9e2VuY2xvc2VTcGFuOkQzZSxtYXRoTUxub2RlOlMzZSxzdmdTcGFuOl8zZX07byh4ciwiYXNzZXJ0Tm9kZVR5cGUiKTtvKG9BLCJhc3NlcnRTeW1ib2xOb2RlVHlwZSIpO28oUjMsImNoZWNrU3ltYm9sTm9kZVR5cGUiKTtsQT1vKCh0LGUpPT57dmFyIHIsbixpO3QmJnQudHlwZT09PSJzdXBzdWIiPyhuPXhyKHQuYmFzZSwiYWNjZW50Iikscj1uLmJhc2UsdC5iYXNlPXIsaT1KNGUoJHIodCxlKSksdC5iYXNlPW4pOihuPXhyKHQsImFjY2VudCIpLHI9bi5iYXNlKTt2YXIgYT0kcihyLGUuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpLHM9bi5pc1NoaWZ0eSYmSnQuaXNDaGFyYWN0ZXJCb3gociksbD0wO2lmKHMpe3ZhciB1PUp0LmdldEJhc2VFbGVtKHIpLGg9JHIodSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTtsPUp6KGgpLnNrZXd9dmFyIGY9bi5sYWJlbD09PSJcXGMiLGQ9Zj9hLmhlaWdodCthLmRlcHRoOk1hdGgubWluKGEuaGVpZ2h0LGUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KSxwO2lmKG4uaXNTdHJldGNoeSlwPWR1LnN2Z1NwYW4obixlKSxwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06YX0se3R5cGU6ImVsZW0iLGVsZW06cCx3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdLHdyYXBwZXJTdHlsZTpsPjA/e3dpZHRoOiJjYWxjKDEwMCUgLSAiK0V0KDIqbCkrIikiLG1hcmdpbkxlZnQ6RXQoMipsKX06dm9pZCAwfV19LGUpO2Vsc2V7dmFyIG0sZztuLmxhYmVsPT09IlxcdmVjIj8obT1GZS5zdGF0aWNTdmcoInZlYyIsZSksZz1GZS5zdmdEYXRhLnZlY1sxXSk6KG09RmUubWFrZU9yZCh7bW9kZTpuLm1vZGUsdGV4dDpuLmxhYmVsfSxlLCJ0ZXh0b3JkIiksbT1KeihtKSxtLml0YWxpYz0wLGc9bS53aWR0aCxmJiYoZCs9bS5kZXB0aCkpLHA9RmUubWFrZVNwYW4oWyJhY2NlbnQtYm9keSJdLFttXSk7dmFyIHk9bi5sYWJlbD09PSJcXHRleHRjaXJjbGVkIjt5JiYocC5jbGFzc2VzLnB1c2goImFjY2VudC1mdWxsIiksZD1hLmhlaWdodCk7dmFyIHY9bDt5fHwodi09Zy8yKSxwLnN0eWxlLmxlZnQ9RXQodiksbi5sYWJlbD09PSJcXHRleHRjaXJjbGVkIiYmKHAuc3R5bGUudG9wPSIuMmVtIikscD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmF9LHt0eXBlOiJrZXJuIixzaXplOi1kfSx7dHlwZToiZWxlbSIsZWxlbTpwfV19LGUpfXZhciB4PUZlLm1ha2VTcGFuKFsibW9yZCIsImFjY2VudCJdLFtwXSxlKTtyZXR1cm4gaT8oaS5jaGlsZHJlblswXT14LGkuaGVpZ2h0PU1hdGgubWF4KHguaGVpZ2h0LGkuaGVpZ2h0KSxpLmNsYXNzZXNbMF09Im1vcmQiLGkpOnh9LCJodG1sQnVpbGRlciRhIiksVUc9bygodCxlKT0+e3ZhciByPXQuaXNTdHJldGNoeT9kdS5tYXRoTUxub2RlKHQubGFiZWwpOm5ldyBkdC5NYXRoTm9kZSgibW8iLFtEbyh0LmxhYmVsLHQubW9kZSldKSxuPW5ldyBkdC5NYXRoTm9kZSgibW92ZXIiLFt2bih0LmJhc2UsZSkscl0pO3JldHVybiBuLnNldEF0dHJpYnV0ZSgiYWNjZW50IiwidHJ1ZSIpLG59LCJtYXRobWxCdWlsZGVyJDkiKSxMM2U9bmV3IFJlZ0V4cChbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIl0ubWFwKHQ9PiJcXCIrdCkuam9pbigifCIpKTtOdCh7dHlwZToiYWNjZW50IixuYW1lczpbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIiwiXFx3aWRlY2hlY2siLCJcXHdpZGVoYXQiLCJcXHdpZGV0aWxkZSIsIlxcb3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0YXJyb3ciLCJcXE92ZXJyaWdodGFycm93IiwiXFxvdmVybGVmdHJpZ2h0YXJyb3ciLCJcXG92ZXJncm91cCIsIlxcb3ZlcmxpbmVzZWdtZW50IiwiXFxvdmVybGVmdGhhcnBvb24iLCJcXG92ZXJyaWdodGhhcnBvb24iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1DMyhlWzBdKSxuPSFMM2UudGVzdCh0LmZ1bmNOYW1lKSxpPSFufHx0LmZ1bmNOYW1lPT09Ilxcd2lkZWhhdCJ8fHQuZnVuY05hbWU9PT0iXFx3aWRldGlsZGUifHx0LmZ1bmNOYW1lPT09Ilxcd2lkZWNoZWNrIjtyZXR1cm57dHlwZToiYWNjZW50Iixtb2RlOnQucGFyc2VyLm1vZGUsbGFiZWw6dC5mdW5jTmFtZSxpc1N0cmV0Y2h5Om4saXNTaGlmdHk6aSxiYXNlOnJ9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOmxBLG1hdGhtbEJ1aWxkZXI6VUd9KTtOdCh7dHlwZToiYWNjZW50IixuYW1lczpbIlxcJyIsIlxcYCIsIlxcXiIsIlxcfiIsIlxcPSIsIlxcdSIsIlxcLiIsJ1xcIicsIlxcYyIsIlxcciIsIlxcSCIsIlxcdiIsIlxcdGV4dGNpcmNsZWQiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMCxhcmdUeXBlczpbInByaW1pdGl2ZSJdfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1lWzBdLG49dC5wYXJzZXIubW9kZTtyZXR1cm4gbj09PSJtYXRoIiYmKHQucGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dEFjY2VudHMiLCJMYVRlWCdzIGFjY2VudCAiK3QuZnVuY05hbWUrIiB3b3JrcyBvbmx5IGluIHRleHQgbW9kZSIpLG49InRleHQiKSx7dHlwZToiYWNjZW50Iixtb2RlOm4sbGFiZWw6dC5mdW5jTmFtZSxpc1N0cmV0Y2h5OiExLGlzU2hpZnR5OiEwLGJhc2U6cn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bEEsbWF0aG1sQnVpbGRlcjpVR30pO050KHt0eXBlOiJhY2NlbnRVbmRlciIsbmFtZXM6WyJcXHVuZGVybGVmdGFycm93IiwiXFx1bmRlcnJpZ2h0YXJyb3ciLCJcXHVuZGVybGVmdHJpZ2h0YXJyb3ciLCJcXHVuZGVyZ3JvdXAiLCJcXHVuZGVybGluZXNlZ21lbnQiLCJcXHV0aWxkZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToiYWNjZW50VW5kZXIiLG1vZGU6ci5tb2RlLGxhYmVsOm4sYmFzZTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9JHIodC5iYXNlLGUpLG49ZHUuc3ZnU3Bhbih0LGUpLGk9dC5sYWJlbD09PSJcXHV0aWxkZSI/LjEyOjAsYT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToidG9wIixwb3NpdGlvbkRhdGE6ci5oZWlnaHQsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOm4sd3JhcHBlckNsYXNzZXM6WyJzdmctYWxpZ24iXX0se3R5cGU6Imtlcm4iLHNpemU6aX0se3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwiYWNjZW50dW5kZXIiXSxbYV0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWR1Lm1hdGhNTG5vZGUodC5sYWJlbCksbj1uZXcgZHQuTWF0aE5vZGUoIm11bmRlciIsW3ZuKHQuYmFzZSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxufSwibWF0aG1sQnVpbGRlciIpfSk7eTM9byh0PT57dmFyIGU9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIix0P1t0XTpbXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIiswLjZlbSIpLGUuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwLjNlbSIpLGV9LCJwYWRkZWROb2RlIik7TnQoe3R5cGU6InhBcnJvdyIsbmFtZXM6WyJcXHhsZWZ0YXJyb3ciLCJcXHhyaWdodGFycm93IiwiXFx4TGVmdGFycm93IiwiXFx4UmlnaHRhcnJvdyIsIlxceGxlZnRyaWdodGFycm93IiwiXFx4TGVmdHJpZ2h0YXJyb3ciLCJcXHhob29rbGVmdGFycm93IiwiXFx4aG9va3JpZ2h0YXJyb3ciLCJcXHhtYXBzdG8iLCJcXHhyaWdodGhhcnBvb25kb3duIiwiXFx4cmlnaHRoYXJwb29udXAiLCJcXHhsZWZ0aGFycG9vbmRvd24iLCJcXHhsZWZ0aGFycG9vbnVwIiwiXFx4cmlnaHRsZWZ0aGFycG9vbnMiLCJcXHhsZWZ0cmlnaHRoYXJwb29ucyIsIlxceGxvbmdlcXVhbCIsIlxceHR3b2hlYWRyaWdodGFycm93IiwiXFx4dHdvaGVhZGxlZnRhcnJvdyIsIlxceHRvZnJvbSIsIlxceHJpZ2h0bGVmdGFycm93cyIsIlxceHJpZ2h0ZXF1aWxpYnJpdW0iLCJcXHhsZWZ0ZXF1aWxpYnJpdW0iLCJcXFxcY2RyaWdodGFycm93IiwiXFxcXGNkbGVmdGFycm93IiwiXFxcXGNkbG9uZ2VxdWFsIl0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQ7cmV0dXJue3R5cGU6InhBcnJvdyIsbW9kZTpuLm1vZGUsbGFiZWw6aSxib2R5OmVbMF0sYmVsb3c6clswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9ZS5zdHlsZSxuPWUuaGF2aW5nU3R5bGUoci5zdXAoKSksaT1GZS53cmFwRnJhZ21lbnQoJHIodC5ib2R5LG4sZSksZSksYT10LmxhYmVsLnNsaWNlKDAsMik9PT0iXFx4Ij8ieCI6ImNkIjtpLmNsYXNzZXMucHVzaChhKyItYXJyb3ctcGFkIik7dmFyIHM7dC5iZWxvdyYmKG49ZS5oYXZpbmdTdHlsZShyLnN1YigpKSxzPUZlLndyYXBGcmFnbWVudCgkcih0LmJlbG93LG4sZSksZSkscy5jbGFzc2VzLnB1c2goYSsiLWFycm93LXBhZCIpKTt2YXIgbD1kdS5zdmdTcGFuKHQsZSksdT0tZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQrLjUqbC5oZWlnaHQsaD0tZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQtLjUqbC5oZWlnaHQtLjExMTsoaS5kZXB0aD4uMjV8fHQubGFiZWw9PT0iXFx4bGVmdGVxdWlsaWJyaXVtIikmJihoLT1pLmRlcHRoKTt2YXIgZjtpZihzKXt2YXIgZD0tZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQrcy5oZWlnaHQrLjUqbC5oZWlnaHQrLjExMTtmPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTppLHNoaWZ0Omh9LHt0eXBlOiJlbGVtIixlbGVtOmwsc2hpZnQ6dX0se3R5cGU6ImVsZW0iLGVsZW06cyxzaGlmdDpkfV19LGUpfWVsc2UgZj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aSxzaGlmdDpofSx7dHlwZToiZWxlbSIsZWxlbTpsLHNoaWZ0OnV9XX0sZSk7cmV0dXJuIGYuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2xhc3Nlcy5wdXNoKCJzdmctYWxpZ24iKSxGZS5tYWtlU3BhbihbIm1yZWwiLCJ4LWFycm93Il0sW2ZdLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9ZHUubWF0aE1Mbm9kZSh0LmxhYmVsKTtyLnNldEF0dHJpYnV0ZSgibWluc2l6ZSIsdC5sYWJlbC5jaGFyQXQoMCk9PT0ieCI/IjEuNzVlbSI6IjMuMGVtIik7dmFyIG47aWYodC5ib2R5KXt2YXIgaT15Myh2bih0LmJvZHksZSkpO2lmKHQuYmVsb3cpe3ZhciBhPXkzKHZuKHQuYmVsb3csZSkpO249bmV3IGR0Lk1hdGhOb2RlKCJtdW5kZXJvdmVyIixbcixhLGldKX1lbHNlIG49bmV3IGR0Lk1hdGhOb2RlKCJtb3ZlciIsW3IsaV0pfWVsc2UgaWYodC5iZWxvdyl7dmFyIHM9eTModm4odC5iZWxvdyxlKSk7bj1uZXcgZHQuTWF0aE5vZGUoIm11bmRlciIsW3Isc10pfWVsc2Ugbj15MygpLG49bmV3IGR0Lk1hdGhOb2RlKCJtb3ZlciIsW3Isbl0pO3JldHVybiBufX0pO1IzZT1GZS5tYWtlU3BhbjtvKEhHLCJodG1sQnVpbGRlciQ5Iik7byhXRywibWF0aG1sQnVpbGRlciQ4Iik7TnQoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXG1hdGhvcmQiLCJcXG1hdGhiaW4iLCJcXG1hdGhyZWwiLCJcXG1hdGhvcGVuIiwiXFxtYXRoY2xvc2UiLCJcXG1hdGhwdW5jdCIsIlxcbWF0aGlubmVyIl0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOiJtIituLnNsaWNlKDUpLGJvZHk6Z2koaSksaXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3goaSl9fSxodG1sQnVpbGRlcjpIRyxtYXRobWxCdWlsZGVyOldHfSk7TjM9byh0PT57dmFyIGU9dC50eXBlPT09Im9yZGdyb3VwIiYmdC5ib2R5Lmxlbmd0aD90LmJvZHlbMF06dDtyZXR1cm4gZS50eXBlPT09ImF0b20iJiYoZS5mYW1pbHk9PT0iYmluInx8ZS5mYW1pbHk9PT0icmVsIik/Im0iK2UuZmFtaWx5OiJtb3JkIn0sImJpbnJlbENsYXNzIik7TnQoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXEBiaW5yZWwiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6ci5tb2RlLG1jbGFzczpOMyhlWzBdKSxib2R5OmdpKGVbMV0pLGlzQ2hhcmFjdGVyQm94Okp0LmlzQ2hhcmFjdGVyQm94KGVbMV0pfX19KTtOdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcc3RhY2tyZWwiLCJcXG92ZXJzZXQiLCJcXHVuZGVyc2V0Il0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVsxXSxhPWVbMF0scztuIT09Ilxcc3RhY2tyZWwiP3M9TjMoaSk6cz0ibXJlbCI7dmFyIGw9e3R5cGU6Im9wIixtb2RlOmkubW9kZSxsaW1pdHM6ITAsYWx3YXlzSGFuZGxlU3VwU3ViOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxzdXBwcmVzc0Jhc2VTaGlmdDpuIT09Ilxcc3RhY2tyZWwiLGJvZHk6Z2koaSl9LHU9e3R5cGU6InN1cHN1YiIsbW9kZTphLm1vZGUsYmFzZTpsLHN1cDpuPT09IlxcdW5kZXJzZXQiP251bGw6YSxzdWI6bj09PSJcXHVuZGVyc2V0Ij9hOm51bGx9O3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6ci5tb2RlLG1jbGFzczpzLGJvZHk6W3VdLGlzQ2hhcmFjdGVyQm94Okp0LmlzQ2hhcmFjdGVyQm94KHUpfX0saHRtbEJ1aWxkZXI6SEcsbWF0aG1sQnVpbGRlcjpXR30pO050KHt0eXBlOiJwbWIiLG5hbWVzOlsiXFxwbWIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InBtYiIsbW9kZTpyLm1vZGUsbWNsYXNzOk4zKGVbMF0pLGJvZHk6Z2koZVswXSl9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPSRpKHQuYm9keSxlLCEwKSxuPUZlLm1ha2VTcGFuKFt0Lm1jbGFzc10scixlKTtyZXR1cm4gbi5zdHlsZS50ZXh0U2hhZG93PSIwLjAyZW0gMC4wMWVtIDAuMDRweCIsbn0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPV9zKHQuYm9keSxlKSxuPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixyKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwidGV4dC1zaGFkb3c6IDAuMDJlbSAwLjAxZW0gMC4wNHB4Iiksbn19KTtOM2U9eyI+IjoiXFxcXGNkcmlnaHRhcnJvdyIsIjwiOiJcXFxcY2RsZWZ0YXJyb3ciLCI9IjoiXFxcXGNkbG9uZ2VxdWFsIixBOiJcXHVwYXJyb3ciLFY6IlxcZG93bmFycm93IiwifCI6IlxcVmVydCIsIi4iOiJubyBhcnJvdyJ9LGFHPW8oKCk9Pih7dHlwZToic3R5bGluZyIsYm9keTpbXSxtb2RlOiJtYXRoIixzdHlsZToiZGlzcGxheSJ9KSwibmV3Q2VsbCIpLHNHPW8odD0+dC50eXBlPT09InRleHRvcmQiJiZ0LnRleHQ9PT0iQCIsImlzU3RhcnRPZkFycm93IiksTTNlPW8oKHQsZSk9Pih0LnR5cGU9PT0ibWF0aG9yZCJ8fHQudHlwZT09PSJhdG9tIikmJnQudGV4dD09PWUsImlzTGFiZWxFbmQiKTtvKEkzZSwiY2RBcnJvdyIpO28oTzNlLCJwYXJzZUNEIik7TnQoe3R5cGU6ImNkbGFiZWwiLG5hbWVzOlsiXFxcXGNkbGVmdCIsIlxcXFxjZHJpZ2h0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10O3JldHVybnt0eXBlOiJjZGxhYmVsIixtb2RlOnIubW9kZSxzaWRlOm4uc2xpY2UoNCksbGFiZWw6ZVswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnN1cCgpKSxuPUZlLndyYXBGcmFnbWVudCgkcih0LmxhYmVsLHIsZSksZSk7cmV0dXJuIG4uY2xhc3Nlcy5wdXNoKCJjZC1sYWJlbC0iK3Quc2lkZSksbi5zdHlsZS5ib3R0b209RXQoLjgtbi5kZXB0aCksbi5oZWlnaHQ9MCxuLmRlcHRoPTAsbn0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibXJvdyIsW3ZuKHQubGFiZWwsZSldKTtyZXR1cm4gcj1uZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFtyXSksci5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMCIpLHQuc2lkZT09PSJsZWZ0IiYmci5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIi0xd2lkdGgiKSxyLnNldEF0dHJpYnV0ZSgidm9mZnNldCIsIjAuN2VtIikscj1uZXcgZHQuTWF0aE5vZGUoIm1zdHlsZSIsW3JdKSxyLnNldEF0dHJpYnV0ZSgiZGlzcGxheXN0eWxlIiwiZmFsc2UiKSxyLnNldEF0dHJpYnV0ZSgic2NyaXB0bGV2ZWwiLCIxIikscn19KTtOdCh7dHlwZToiY2RsYWJlbHBhcmVudCIsbmFtZXM6WyJcXFxcY2RwYXJlbnQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJjZGxhYmVscGFyZW50Iixtb2RlOnIubW9kZSxmcmFnbWVudDplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1GZS53cmFwRnJhZ21lbnQoJHIodC5mcmFnbWVudCxlKSxlKTtyZXR1cm4gci5jbGFzc2VzLnB1c2goImNkLXZlcnQtYXJyb3ciKSxyfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIG5ldyBkdC5NYXRoTm9kZSgibXJvdyIsW3ZuKHQuZnJhZ21lbnQsZSldKX19KTtOdCh7dHlwZToidGV4dG9yZCIsbmFtZXM6WyJcXEBjaGFyIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7Zm9yKHZhcntwYXJzZXI6cn09dCxuPXhyKGVbMF0sIm9yZGdyb3VwIiksaT1uLmJvZHksYT0iIixzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPXhyKGlbc10sInRleHRvcmQiKTthKz1sLnRleHR9dmFyIHU9cGFyc2VJbnQoYSksaDtpZihpc05hTih1KSl0aHJvdyBuZXcgcHQoIlxcQGNoYXIgaGFzIG5vbi1udW1lcmljIGFyZ3VtZW50ICIrYSk7aWYodTwwfHx1Pj0xMTE0MTExKXRocm93IG5ldyBwdCgiXFxAY2hhciB3aXRoIGludmFsaWQgY29kZSBwb2ludCAiK2EpO3JldHVybiB1PD02NTUzNT9oPVN0cmluZy5mcm9tQ2hhckNvZGUodSk6KHUtPTY1NTM2LGg9U3RyaW5nLmZyb21DaGFyQ29kZSgodT4+MTApKzU1Mjk2LCh1JjEwMjMpKzU2MzIwKSkse3R5cGU6InRleHRvcmQiLG1vZGU6ci5tb2RlLHRleHQ6aH19fSk7cUc9bygodCxlKT0+e3ZhciByPSRpKHQuYm9keSxlLndpdGhDb2xvcih0LmNvbG9yKSwhMSk7cmV0dXJuIEZlLm1ha2VGcmFnbWVudChyKX0sImh0bWxCdWlsZGVyJDgiKSxZRz1vKCh0LGUpPT57dmFyIHI9X3ModC5ib2R5LGUud2l0aENvbG9yKHQuY29sb3IpKSxuPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixyKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoIm1hdGhjb2xvciIsdC5jb2xvciksbn0sIm1hdGhtbEJ1aWxkZXIkNyIpO050KHt0eXBlOiJjb2xvciIsbmFtZXM6WyJcXHRleHRjb2xvciJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMCxhcmdUeXBlczpbImNvbG9yIiwib3JpZ2luYWwiXX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPXhyKGVbMF0sImNvbG9yLXRva2VuIikuY29sb3IsaT1lWzFdO3JldHVybnt0eXBlOiJjb2xvciIsbW9kZTpyLm1vZGUsY29sb3I6bixib2R5OmdpKGkpfX0saHRtbEJ1aWxkZXI6cUcsbWF0aG1sQnVpbGRlcjpZR30pO050KHt0eXBlOiJjb2xvciIsbmFtZXM6WyJcXGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiXX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixicmVha09uVG9rZW5UZXh0Om59PXQsaT14cihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yO3IuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3VycmVudEBjb2xvciIsaSk7dmFyIGE9ci5wYXJzZUV4cHJlc3Npb24oITAsbik7cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnIubW9kZSxjb2xvcjppLGJvZHk6YX19LGh0bWxCdWlsZGVyOnFHLG1hdGhtbEJ1aWxkZXI6WUd9KTtOdCh7dHlwZToiY3IiLG5hbWVzOlsiXFxcXCJdLHByb3BzOntudW1BcmdzOjAsbnVtT3B0aW9uYWxBcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpufT10LGk9bi5ndWxsZXQuZnV0dXJlKCkudGV4dD09PSJbIj9uLnBhcnNlU2l6ZUdyb3VwKCEwKTpudWxsLGE9IW4uc2V0dGluZ3MuZGlzcGxheU1vZGV8fCFuLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKCJuZXdMaW5lSW5EaXNwbGF5TW9kZSIsIkluIExhVGVYLCBcXFxcIG9yIFxcbmV3bGluZSBkb2VzIG5vdGhpbmcgaW4gZGlzcGxheSBtb2RlIik7cmV0dXJue3R5cGU6ImNyIixtb2RlOm4ubW9kZSxuZXdMaW5lOmEsc2l6ZTppJiZ4cihpLCJzaXplIikudmFsdWV9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZlLm1ha2VTcGFuKFsibXNwYWNlIl0sW10sZSk7cmV0dXJuIHQubmV3TGluZSYmKHIuY2xhc3Nlcy5wdXNoKCJuZXdsaW5lIiksdC5zaXplJiYoci5zdHlsZS5tYXJnaW5Ub3A9RXQobmkodC5zaXplLGUpKSkpLHJ9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1zcGFjZSIpO3JldHVybiB0Lm5ld0xpbmUmJihyLnNldEF0dHJpYnV0ZSgibGluZWJyZWFrIiwibmV3bGluZSIpLHQuc2l6ZSYmci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsRXQobmkodC5zaXplLGUpKSkpLHJ9fSk7UTc9eyJcXGdsb2JhbCI6IlxcZ2xvYmFsIiwiXFxsb25nIjoiXFxcXGdsb2JhbGxvbmciLCJcXFxcZ2xvYmFsbG9uZyI6IlxcXFxnbG9iYWxsb25nIiwiXFxkZWYiOiJcXGdkZWYiLCJcXGdkZWYiOiJcXGdkZWYiLCJcXGVkZWYiOiJcXHhkZWYiLCJcXHhkZWYiOiJcXHhkZWYiLCJcXGxldCI6IlxcXFxnbG9iYWxsZXQiLCJcXGZ1dHVyZWxldCI6IlxcXFxnbG9iYWxmdXR1cmUifSxYRz1vKHQ9Pnt2YXIgZT10LnRleHQ7aWYoL14oPzpbXFx7fSQmI15fXXxFT0YpJC8udGVzdChlKSl0aHJvdyBuZXcgcHQoIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZSIsdCk7cmV0dXJuIGV9LCJjaGVja0NvbnRyb2xTZXF1ZW5jZSIpLFAzZT1vKHQ9Pnt2YXIgZT10Lmd1bGxldC5wb3BUb2tlbigpO3JldHVybiBlLnRleHQ9PT0iPSImJihlPXQuZ3VsbGV0LnBvcFRva2VuKCksZS50ZXh0PT09IiAiJiYoZT10Lmd1bGxldC5wb3BUb2tlbigpKSksZX0sImdldFJIUyIpLGpHPW8oKHQsZSxyLG4pPT57dmFyIGk9dC5ndWxsZXQubWFjcm9zLmdldChyLnRleHQpO2k9PW51bGwmJihyLm5vZXhwYW5kPSEwLGk9e3Rva2Vuczpbcl0sbnVtQXJnczowLHVuZXhwYW5kYWJsZTohdC5ndWxsZXQuaXNFeHBhbmRhYmxlKHIudGV4dCl9KSx0Lmd1bGxldC5tYWNyb3Muc2V0KGUsaSxuKX0sImxldENvbW1hbmQiKTtOdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxnbG9iYWwiLCJcXGxvbmciLCJcXFxcZ2xvYmFsbG9uZyJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dDtlLmNvbnN1bWVTcGFjZXMoKTt2YXIgbj1lLmZldGNoKCk7aWYoUTdbbi50ZXh0XSlyZXR1cm4ocj09PSJcXGdsb2JhbCJ8fHI9PT0iXFxcXGdsb2JhbGxvbmciKSYmKG4udGV4dD1RN1tuLnRleHRdKSx4cihlLnBhcnNlRnVuY3Rpb24oKSwiaW50ZXJuYWwiKTt0aHJvdyBuZXcgcHQoIkludmFsaWQgdG9rZW4gYWZ0ZXIgbWFjcm8gcHJlZml4IixuKX19KTtOdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxkZWYiLCJcXGdkZWYiLCJcXGVkZWYiLCJcXHhkZWYiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10LG49ZS5ndWxsZXQucG9wVG9rZW4oKSxpPW4udGV4dDtpZigvXig/OltcXHt9JCYjXl9dfEVPRikkLy50ZXN0KGkpKXRocm93IG5ldyBwdCgiRXhwZWN0ZWQgYSBjb250cm9sIHNlcXVlbmNlIixuKTtmb3IodmFyIGE9MCxzLGw9W1tdXTtlLmd1bGxldC5mdXR1cmUoKS50ZXh0IT09InsiOylpZihuPWUuZ3VsbGV0LnBvcFRva2VuKCksbi50ZXh0PT09IiMiKXtpZihlLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09InsiKXtzPWUuZ3VsbGV0LmZ1dHVyZSgpLGxbYV0ucHVzaCgieyIpO2JyZWFrfWlmKG49ZS5ndWxsZXQucG9wVG9rZW4oKSwhL15bMS05XSQvLnRlc3Qobi50ZXh0KSl0aHJvdyBuZXcgcHQoJ0ludmFsaWQgYXJndW1lbnQgbnVtYmVyICInK24udGV4dCsnIicpO2lmKHBhcnNlSW50KG4udGV4dCkhPT1hKzEpdGhyb3cgbmV3IHB0KCdBcmd1bWVudCBudW1iZXIgIicrbi50ZXh0KyciIG91dCBvZiBvcmRlcicpO2ErKyxsLnB1c2goW10pfWVsc2V7aWYobi50ZXh0PT09IkVPRiIpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBhIG1hY3JvIGRlZmluaXRpb24iKTtsW2FdLnB1c2gobi50ZXh0KX12YXJ7dG9rZW5zOnV9PWUuZ3VsbGV0LmNvbnN1bWVBcmcoKTtyZXR1cm4gcyYmdS51bnNoaWZ0KHMpLChyPT09IlxcZWRlZiJ8fHI9PT0iXFx4ZGVmIikmJih1PWUuZ3VsbGV0LmV4cGFuZFRva2Vucyh1KSx1LnJldmVyc2UoKSksZS5ndWxsZXQubWFjcm9zLnNldChpLHt0b2tlbnM6dSxudW1BcmdzOmEsZGVsaW1pdGVyczpsfSxyPT09UTdbcl0pLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTplLm1vZGV9fX0pO050KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGxldCIsIlxcXFxnbG9iYWxsZXQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10LG49WEcoZS5ndWxsZXQucG9wVG9rZW4oKSk7ZS5ndWxsZXQuY29uc3VtZVNwYWNlcygpO3ZhciBpPVAzZShlKTtyZXR1cm4gakcoZSxuLGkscj09PSJcXFxcZ2xvYmFsbGV0Iikse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7TnQoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxcZnV0dXJlbGV0IiwiXFxcXGdsb2JhbGZ1dHVyZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1YRyhlLmd1bGxldC5wb3BUb2tlbigpKSxpPWUuZ3VsbGV0LnBvcFRva2VuKCksYT1lLmd1bGxldC5wb3BUb2tlbigpO3JldHVybiBqRyhlLG4sYSxyPT09IlxcXFxnbG9iYWxmdXR1cmUiKSxlLmd1bGxldC5wdXNoVG9rZW4oYSksZS5ndWxsZXQucHVzaFRva2VuKGkpLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTplLm1vZGV9fX0pO1l5PW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUFuLm1hdGhbZV0mJkFuLm1hdGhbZV0ucmVwbGFjZSxhPW5BKGl8fGUscixuKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN5bWJvbCAiK2UrIiBhbmQgZm9udCBzaXplICIrcisiLiIpO3JldHVybiBhfSwiZ2V0TWV0cmljcyIpLGNBPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5oYXZpbmdCYXNlU3R5bGUocikscz1GZS5tYWtlU3BhbihpLmNvbmNhdChhLnNpemluZ0NsYXNzZXMobikpLFtlXSxuKSxsPWEuc2l6ZU11bHRpcGxpZXIvbi5zaXplTXVsdGlwbGllcjtyZXR1cm4gcy5oZWlnaHQqPWwscy5kZXB0aCo9bCxzLm1heEZvbnRTaXplPWEuc2l6ZU11bHRpcGxpZXIsc30sInN0eWxlV3JhcCIpLEtHPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuaGF2aW5nQmFzZVN0eWxlKG4pLGE9KDEtci5zaXplTXVsdGlwbGllci9pLnNpemVNdWx0aXBsaWVyKSpyLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtlLmNsYXNzZXMucHVzaCgiZGVsaW1jZW50ZXIiKSxlLnN0eWxlLnRvcD1FdChhKSxlLmhlaWdodC09YSxlLmRlcHRoKz1hfSwiY2VudGVyU3BhbiIpLEIzZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1GZS5tYWtlU3ltYm9sKGUsIk1haW4tUmVndWxhciIsYSxpKSx1PWNBKGwscixpLHMpO3JldHVybiBuJiZLRyh1LGksciksdX0sIm1ha2VTbWFsbERlbGltIiksRjNlPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIEZlLm1ha2VTeW1ib2woZSwiU2l6ZSIrcisiLVJlZ3VsYXIiLG4saSl9LCJtYXRocm1TaXplIiksUUc9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGw9RjNlKGUscixhLGkpLHU9Y0EoRmUubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsInNpemUiK3JdLFtsXSxpKSxuci5URVhULGkscyk7cmV0dXJuIG4mJktHKHUsaSxuci5URVhUKSx1fSwibWFrZUxhcmdlRGVsaW0iKSxPNz1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaTtyPT09IlNpemUxLVJlZ3VsYXIiP2k9ImRlbGltLXNpemUxIjppPSJkZWxpbS1zaXplNCI7dmFyIGE9RmUubWFrZVNwYW4oWyJkZWxpbXNpemluZ2lubmVyIixpXSxbRmUubWFrZVNwYW4oW10sW0ZlLm1ha2VTeW1ib2woZSxyLG4pXSldKTtyZXR1cm57dHlwZToiZWxlbSIsZWxlbTphfX0sIm1ha2VHbHlwaFNwYW4iKSxQNz1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1KbFsiU2l6ZTQtUmVndWxhciJdW2UuY2hhckNvZGVBdCgwKV0/SmxbIlNpemU0LVJlZ3VsYXIiXVtlLmNoYXJDb2RlQXQoMCldWzRdOkpsWyJTaXplMS1SZWd1bGFyIl1bZS5jaGFyQ29kZUF0KDApXVs0XSxhPW5ldyBlYygiaW5uZXIiLHE0ZShlLE1hdGgucm91bmQoMWUzKnIpKSkscz1uZXcgZGwoW2FdLHt3aWR0aDpFdChpKSxoZWlnaHQ6RXQociksc3R5bGU6IndpZHRoOiIrRXQoaSksdmlld0JveDoiMCAwICIrMWUzKmkrIiAiK01hdGgucm91bmQoMWUzKnIpLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIn0pLGw9RmUubWFrZVN2Z1NwYW4oW10sW3NdLG4pO3JldHVybiBsLmhlaWdodD1yLGwuc3R5bGUuaGVpZ2h0PUV0KHIpLGwuc3R5bGUud2lkdGg9RXQoaSkse3R5cGU6ImVsZW0iLGVsZW06bH19LCJtYWtlSW5uZXIiKSxaNz0uMDA4LHYzPXt0eXBlOiJrZXJuIixzaXplOi0xKlo3fSwkM2U9WyJ8IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXHZlcnQiXSx6M2U9WyJcXHwiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcVmVydCJdLFpHPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsLHUsaCxmLGQ9IiIscD0wO2w9aD1mPWUsdT1udWxsO3ZhciBtPSJTaXplMS1SZWd1bGFyIjtlPT09IlxcdXBhcnJvdyI/aD1mPSJcdTIzRDAiOmU9PT0iXFxVcGFycm93Ij9oPWY9Ilx1MjAxNiI6ZT09PSJcXGRvd25hcnJvdyI/bD1oPSJcdTIzRDAiOmU9PT0iXFxEb3duYXJyb3ciP2w9aD0iXHUyMDE2IjplPT09IlxcdXBkb3duYXJyb3ciPyhsPSJcXHVwYXJyb3ciLGg9Ilx1MjNEMCIsZj0iXFxkb3duYXJyb3ciKTplPT09IlxcVXBkb3duYXJyb3ciPyhsPSJcXFVwYXJyb3ciLGg9Ilx1MjAxNiIsZj0iXFxEb3duYXJyb3ciKTpKdC5jb250YWlucygkM2UsZSk/KGg9Ilx1MjIyMyIsZD0idmVydCIscD0zMzMpOkp0LmNvbnRhaW5zKHozZSxlKT8oaD0iXHUyMjI1IixkPSJkb3VibGV2ZXJ0IixwPTU1Nik6ZT09PSJbInx8ZT09PSJcXGxicmFjayI/KGw9Ilx1MjNBMSIsaD0iXHUyM0EyIixmPSJcdTIzQTMiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxicmFjayIscD02NjcpOmU9PT0iXSJ8fGU9PT0iXFxyYnJhY2siPyhsPSJcdTIzQTQiLGg9Ilx1MjNBNSIsZj0iXHUyM0E2IixtPSJTaXplNC1SZWd1bGFyIixkPSJyYnJhY2siLHA9NjY3KTplPT09IlxcbGZsb29yInx8ZT09PSJcdTIzMEEiPyhoPWw9Ilx1MjNBMiIsZj0iXHUyM0EzIixtPSJTaXplNC1SZWd1bGFyIixkPSJsZmxvb3IiLHA9NjY3KTplPT09IlxcbGNlaWwifHxlPT09Ilx1MjMwOCI/KGw9Ilx1MjNBMSIsaD1mPSJcdTIzQTIiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxjZWlsIixwPTY2Nyk6ZT09PSJcXHJmbG9vciJ8fGU9PT0iXHUyMzBCIj8oaD1sPSJcdTIzQTUiLGY9Ilx1MjNBNiIsbT0iU2l6ZTQtUmVndWxhciIsZD0icmZsb29yIixwPTY2Nyk6ZT09PSJcXHJjZWlsInx8ZT09PSJcdTIzMDkiPyhsPSJcdTIzQTQiLGg9Zj0iXHUyM0E1IixtPSJTaXplNC1SZWd1bGFyIixkPSJyY2VpbCIscD02NjcpOmU9PT0iKCJ8fGU9PT0iXFxscGFyZW4iPyhsPSJcdTIzOUIiLGg9Ilx1MjM5QyIsZj0iXHUyMzlEIixtPSJTaXplNC1SZWd1bGFyIixkPSJscGFyZW4iLHA9ODc1KTplPT09IikifHxlPT09IlxccnBhcmVuIj8obD0iXHUyMzlFIixoPSJcdTIzOUYiLGY9Ilx1MjNBMCIsbT0iU2l6ZTQtUmVndWxhciIsZD0icnBhcmVuIixwPTg3NSk6ZT09PSJcXHsifHxlPT09IlxcbGJyYWNlIj8obD0iXHUyM0E3Iix1PSJcdTIzQTgiLGY9Ilx1MjNBOSIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXH0ifHxlPT09IlxccmJyYWNlIj8obD0iXHUyM0FCIix1PSJcdTIzQUMiLGY9Ilx1MjNBRCIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXGxncm91cCJ8fGU9PT0iXHUyN0VFIj8obD0iXHUyM0E3IixmPSJcdTIzQTkiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOmU9PT0iXFxyZ3JvdXAifHxlPT09Ilx1MjdFRiI/KGw9Ilx1MjNBQiIsZj0iXHUyM0FEIixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcbG1vdXN0YWNoZSJ8fGU9PT0iXHUyM0IwIj8obD0iXHUyM0E3IixmPSJcdTIzQUQiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOihlPT09Ilxccm1vdXN0YWNoZSJ8fGU9PT0iXHUyM0IxIikmJihsPSJcdTIzQUIiLGY9Ilx1MjNBOSIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik7dmFyIGc9WXkobCxtLGEpLHk9Zy5oZWlnaHQrZy5kZXB0aCx2PVl5KGgsbSxhKSx4PXYuaGVpZ2h0K3YuZGVwdGgsYj1ZeShmLG0sYSksVD1iLmhlaWdodCtiLmRlcHRoLFM9MCx3PTE7aWYodSE9PW51bGwpe3ZhciBFPVl5KHUsbSxhKTtTPUUuaGVpZ2h0K0UuZGVwdGgsdz0yfXZhciBfPXkrVCtTLEM9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHItXykvKHcqeCkpKSxEPV8rQyp3KngsTz1pLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtuJiYoTyo9aS5zaXplTXVsdGlwbGllcik7dmFyIFI9RC8yLU8saz1bXTtpZihkLmxlbmd0aD4wKXt2YXIgTD1ELXktVCxBPU1hdGgucm91bmQoRCoxZTMpLEk9WTRlKGQsTWF0aC5yb3VuZChMKjFlMykpLE09bmV3IGVjKGQsSSksUD0ocC8xZTMpLnRvRml4ZWQoMykrImVtIixCPShBLzFlMykudG9GaXhlZCgzKSsiZW0iLEY9bmV3IGRsKFtNXSx7d2lkdGg6UCxoZWlnaHQ6Qix2aWV3Qm94OiIwIDAgIitwKyIgIitBfSksej1GZS5tYWtlU3ZnU3BhbihbXSxbRl0saSk7ei5oZWlnaHQ9QS8xZTMsei5zdHlsZS53aWR0aD1QLHouc3R5bGUuaGVpZ2h0PUIsay5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOnp9KX1lbHNle2lmKGsucHVzaChPNyhmLG0sYSkpLGsucHVzaCh2MyksdT09PW51bGwpe3ZhciAkPUQteS1UKzIqWjc7ay5wdXNoKFA3KGgsJCxpKSl9ZWxzZXt2YXIgVT0oRC15LVQtUykvMisyKlo3O2sucHVzaChQNyhoLFUsaSkpLGsucHVzaCh2Myksay5wdXNoKE83KHUsbSxhKSksay5wdXNoKHYzKSxrLnB1c2goUDcoaCxVLGkpKX1rLnB1c2godjMpLGsucHVzaChPNyhsLG0sYSkpfXZhciBLPWkuaGF2aW5nQmFzZVN0eWxlKG5yLlRFWFQpLGVlPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTpSLGNoaWxkcmVuOmt9LEspO3JldHVybiBjQShGZS5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwibXVsdCJdLFtlZV0sSyksbnIuVEVYVCxpLHMpfSwibWFrZVN0YWNrZWREZWxpbSIpLEI3PTgwLEY3PS4wOCwkNz1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9VzRlKGUsaSxuKSxsPW5ldyBlYyhlLHMpLHU9bmV3IGRsKFtsXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6RXQociksdmlld0JveDoiMCAwIDQwMDAwMCAiK24scHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gc2xpY2UifSk7cmV0dXJuIEZlLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW3VdLGEpfSwic3FydFN2ZyIpLEczZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ci5oYXZpbmdCYXNlU2l6aW5nKCksaT1yVigiXFxzdXJkIixlKm4uc2l6ZU11bHRpcGxpZXIsdFYsbiksYT1uLnNpemVNdWx0aXBsaWVyLHM9TWF0aC5tYXgoMCxyLm1pblJ1bGVUaGlja25lc3Mtci5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKSxsLHU9MCxoPTAsZj0wLGQ7cmV0dXJuIGkudHlwZT09PSJzbWFsbCI/KGY9MWUzKzFlMypzK0I3LGU8MT9hPTE6ZTwxLjQmJihhPS43KSx1PSgxK3MrRjcpL2EsaD0oMStzKS9hLGw9JDcoInNxcnRNYWluIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjg1M2VtIixkPS44MzMvYSk6aS50eXBlPT09ImxhcmdlIj8oZj0oMWUzK0I3KSpqeVtpLnNpemVdLGg9KGp5W2kuc2l6ZV0rcykvYSx1PShqeVtpLnNpemVdK3MrRjcpL2EsbD0kNygic3FydFNpemUiK2kuc2l6ZSx1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIxLjAyZW0iLGQ9MS9hKToodT1lK3MrRjcsaD1lK3MsZj1NYXRoLmZsb29yKDFlMyplK3MpK0I3LGw9JDcoInNxcnRUYWxsIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjc0MmVtIixkPTEuMDU2KSxsLmhlaWdodD1oLGwuc3R5bGUuaGVpZ2h0PUV0KHUpLHtzcGFuOmwsYWR2YW5jZVdpZHRoOmQscnVsZVdpZHRoOihyLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MrcykqYX19LCJtYWtlU3FydEltYWdlIiksSkc9WyIoIiwiXFxscGFyZW4iLCIpIiwiXFxycGFyZW4iLCJbIiwiXFxsYnJhY2siLCJdIiwiXFxyYnJhY2siLCJcXHsiLCJcXGxicmFjZSIsIlxcfSIsIlxccmJyYWNlIiwiXFxsZmxvb3IiLCJcXHJmbG9vciIsIlx1MjMwQSIsIlx1MjMwQiIsIlxcbGNlaWwiLCJcXHJjZWlsIiwiXHUyMzA4IiwiXHUyMzA5IiwiXFxzdXJkIl0sVjNlPVsiXFx1cGFycm93IiwiXFxkb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGFycm93IiwiXFxEb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwifCIsIlxcfCIsIlxcdmVydCIsIlxcVmVydCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwiXHUyN0VFIiwiXHUyN0VGIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwiXHUyM0IwIiwiXHUyM0IxIl0sZVY9WyI8IiwiPiIsIlxcbGFuZ2xlIiwiXFxyYW5nbGUiLCIvIiwiXFxiYWNrc2xhc2giLCJcXGx0IiwiXFxndCJdLGp5PVswLDEuMiwxLjgsMi40LDNdLFUzZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZT09PSI8Inx8ZT09PSJcXGx0Inx8ZT09PSJcdTI3RTgiP2U9IlxcbGFuZ2xlIjooZT09PSI+Inx8ZT09PSJcXGd0Inx8ZT09PSJcdTI3RTkiKSYmKGU9IlxccmFuZ2xlIiksSnQuY29udGFpbnMoSkcsZSl8fEp0LmNvbnRhaW5zKGVWLGUpKXJldHVybiBRRyhlLHIsITEsbixpLGEpO2lmKEp0LmNvbnRhaW5zKFYzZSxlKSlyZXR1cm4gWkcoZSxqeVtyXSwhMSxuLGksYSk7dGhyb3cgbmV3IHB0KCJJbGxlZ2FsIGRlbGltaXRlcjogJyIrZSsiJyIpfSwibWFrZVNpemVkRGVsaW0iKSxIM2U9W3t0eXBlOiJzbWFsbCIsc3R5bGU6bnIuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOm5yLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpuci5URVhUfSx7dHlwZToibGFyZ2UiLHNpemU6MX0se3R5cGU6ImxhcmdlIixzaXplOjJ9LHt0eXBlOiJsYXJnZSIsc2l6ZTozfSx7dHlwZToibGFyZ2UiLHNpemU6NH1dLFczZT1be3R5cGU6InNtYWxsIixzdHlsZTpuci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6bnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOm5yLlRFWFR9LHt0eXBlOiJzdGFjayJ9XSx0Vj1be3R5cGU6InNtYWxsIixzdHlsZTpuci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6bnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOm5yLlRFWFR9LHt0eXBlOiJsYXJnZSIsc2l6ZToxfSx7dHlwZToibGFyZ2UiLHNpemU6Mn0se3R5cGU6ImxhcmdlIixzaXplOjN9LHt0eXBlOiJsYXJnZSIsc2l6ZTo0fSx7dHlwZToic3RhY2sifV0scTNlPW8oZnVuY3Rpb24oZSl7aWYoZS50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitlLnNpemUrIi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK2UudHlwZSsiJyBoZXJlLiIpfSwiZGVsaW1UeXBlVG9Gb250IiksclY9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9TWF0aC5taW4oMiwzLWkuc3R5bGUuc2l6ZSkscz1hO3M8bi5sZW5ndGgmJm5bc10udHlwZSE9PSJzdGFjayI7cysrKXt2YXIgbD1ZeShlLHEzZShuW3NdKSwibWF0aCIpLHU9bC5oZWlnaHQrbC5kZXB0aDtpZihuW3NdLnR5cGU9PT0ic21hbGwiKXt2YXIgaD1pLmhhdmluZ0Jhc2VTdHlsZShuW3NdLnN0eWxlKTt1Kj1oLnNpemVNdWx0aXBsaWVyfWlmKHU+cilyZXR1cm4gbltzXX1yZXR1cm4gbltuLmxlbmd0aC0xXX0sInRyYXZlcnNlU2VxdWVuY2UiKSxuVj1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXtlPT09IjwifHxlPT09IlxcbHQifHxlPT09Ilx1MjdFOCI/ZT0iXFxsYW5nbGUiOihlPT09Ij4ifHxlPT09IlxcZ3QifHxlPT09Ilx1MjdFOSIpJiYoZT0iXFxyYW5nbGUiKTt2YXIgbDtKdC5jb250YWlucyhlVixlKT9sPUgzZTpKdC5jb250YWlucyhKRyxlKT9sPXRWOmw9VzNlO3ZhciB1PXJWKGUscixsLGkpO3JldHVybiB1LnR5cGU9PT0ic21hbGwiP0IzZShlLHUuc3R5bGUsbixpLGEscyk6dS50eXBlPT09ImxhcmdlIj9RRyhlLHUuc2l6ZSxuLGksYSxzKTpaRyhlLHIsbixpLGEscyl9LCJtYWtlQ3VzdG9tU2l6ZWREZWxpbSIpLFkzZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1pLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCppLnNpemVNdWx0aXBsaWVyLHU9OTAxLGg9NS9pLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxmPU1hdGgubWF4KHItbCxuK2wpLGQ9TWF0aC5tYXgoZi81MDAqdSwyKmYtaCk7cmV0dXJuIG5WKGUsZCwhMCxpLGEscyl9LCJtYWtlTGVmdFJpZ2h0RGVsaW0iKSxodT17c3FydEltYWdlOkczZSxzaXplZERlbGltOlUzZSxzaXplVG9NYXhIZWlnaHQ6anksY3VzdG9tU2l6ZWREZWxpbTpuVixsZWZ0UmlnaHREZWxpbTpZM2V9LG9HPXsiXFxiaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToxfSwiXFxCaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToyfSwiXFxiaWdnbCI6e21jbGFzczoibW9wZW4iLHNpemU6M30sIlxcQmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjR9LCJcXGJpZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZToxfSwiXFxCaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6Mn0sIlxcYmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTozfSwiXFxCaWdnciI6e21jbGFzczoibWNsb3NlIixzaXplOjR9LCJcXGJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6MX0sIlxcQmlnbSI6e21jbGFzczoibXJlbCIsc2l6ZToyfSwiXFxiaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTozfSwiXFxCaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTo0fSwiXFxiaWciOnttY2xhc3M6Im1vcmQiLHNpemU6MX0sIlxcQmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjJ9LCJcXGJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6M30sIlxcQmlnZyI6e21jbGFzczoibW9yZCIsc2l6ZTo0fX0sWDNlPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCJcdTIzMEEiLCJcdTIzMEIiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIlx1MjMwOCIsIlx1MjMwOSIsIjwiLCI+IiwiXFxsYW5nbGUiLCJcdTI3RTgiLCJcXHJhbmdsZSIsIlx1MjdFOSIsIlxcbHQiLCJcXGd0IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcbGdyb3VwIiwiXFxyZ3JvdXAiLCJcdTI3RUUiLCJcdTI3RUYiLCJcXGxtb3VzdGFjaGUiLCJcXHJtb3VzdGFjaGUiLCJcdTIzQjAiLCJcdTIzQjEiLCIvIiwiXFxiYWNrc2xhc2giLCJ8IiwiXFx2ZXJ0IiwiXFx8IiwiXFxWZXJ0IiwiXFx1cGFycm93IiwiXFxVcGFycm93IiwiXFxkb3duYXJyb3ciLCJcXERvd25hcnJvdyIsIlxcdXBkb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwiLiJdO28oTTMsImNoZWNrRGVsaW1pdGVyIik7TnQoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPU0zKGVbMF0sdCk7cmV0dXJue3R5cGU6ImRlbGltc2l6aW5nIixtb2RlOnQucGFyc2VyLm1vZGUsc2l6ZTpvR1t0LmZ1bmNOYW1lXS5zaXplLG1jbGFzczpvR1t0LmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06ci50ZXh0fX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT50LmRlbGltPT09Ii4iP0ZlLm1ha2VTcGFuKFt0Lm1jbGFzc10pOmh1LnNpemVkRGVsaW0odC5kZWxpbSx0LnNpemUsZSx0Lm1vZGUsW3QubWNsYXNzXSksImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKHQ9Pnt2YXIgZT1bXTt0LmRlbGltIT09Ii4iJiZlLnB1c2goRG8odC5kZWxpbSx0Lm1vZGUpKTt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1vIixlKTt0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/ci5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnIuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBuPUV0KGh1LnNpemVUb01heEhlaWdodFt0LnNpemVdKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLG4pLHIuc2V0QXR0cmlidXRlKCJtYXhzaXplIixuKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7byhsRywiYXNzZXJ0UGFyc2VkIik7TnQoe3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbmFtZXM6WyJcXHJpZ2h0Il0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPXQucGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGN1cnJlbnRAY29sb3IiKTtpZihyJiZ0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IHB0KCJcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxyaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpNMyhlWzBdLHQpLnRleHQsY29sb3I6cn19LCJoYW5kbGVyIil9KTtOdCh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1NMyhlWzBdLHQpLG49dC5wYXJzZXI7KytuLmxlZnRyaWdodERlcHRoO3ZhciBpPW4ucGFyc2VFeHByZXNzaW9uKCExKTstLW4ubGVmdHJpZ2h0RGVwdGgsbi5leHBlY3QoIlxccmlnaHQiLCExKTt2YXIgYT14cihuLnBhcnNlRnVuY3Rpb24oKSwibGVmdHJpZ2h0LXJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTpuLm1vZGUsYm9keTppLGxlZnQ6ci50ZXh0LHJpZ2h0OmEuZGVsaW0scmlnaHRDb2xvcjphLmNvbG9yfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57bEcodCk7Zm9yKHZhciByPSRpKHQuYm9keSxlLCEwLFsibW9wZW4iLCJtY2xvc2UiXSksbj0wLGk9MCxhPSExLHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdLmlzTWlkZGxlP2E9ITA6KG49TWF0aC5tYXgocltzXS5oZWlnaHQsbiksaT1NYXRoLm1heChyW3NdLmRlcHRoLGkpKTtuKj1lLnNpemVNdWx0aXBsaWVyLGkqPWUuc2l6ZU11bHRpcGxpZXI7dmFyIGw7aWYodC5sZWZ0PT09Ii4iP2w9ZXYoZSxbIm1vcGVuIl0pOmw9aHUubGVmdFJpZ2h0RGVsaW0odC5sZWZ0LG4saSxlLHQubW9kZSxbIm1vcGVuIl0pLHIudW5zaGlmdChsKSxhKWZvcih2YXIgdT0xO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLGY9aC5pc01pZGRsZTtmJiYoclt1XT1odS5sZWZ0UmlnaHREZWxpbShmLmRlbGltLG4saSxmLm9wdGlvbnMsdC5tb2RlLFtdKSl9dmFyIGQ7aWYodC5yaWdodD09PSIuIilkPWV2KGUsWyJtY2xvc2UiXSk7ZWxzZXt2YXIgcD10LnJpZ2h0Q29sb3I/ZS53aXRoQ29sb3IodC5yaWdodENvbG9yKTplO2Q9aHUubGVmdFJpZ2h0RGVsaW0odC5yaWdodCxuLGkscCx0Lm1vZGUsWyJtY2xvc2UiXSl9cmV0dXJuIHIucHVzaChkKSxGZS5tYWtlU3BhbihbIm1pbm5lciJdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e2xHKHQpO3ZhciByPV9zKHQuYm9keSxlKTtpZih0LmxlZnQhPT0iLiIpe3ZhciBuPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtEbyh0LmxlZnQsdC5tb2RlKV0pO24uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxyLnVuc2hpZnQobil9aWYodC5yaWdodCE9PSIuIil7dmFyIGk9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW0RvKHQucmlnaHQsdC5tb2RlKV0pO2kuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx0LnJpZ2h0Q29sb3ImJmkuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLHQucmlnaHRDb2xvciksci5wdXNoKGkpfXJldHVybiBhQShyKX0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJtaWRkbGUiLG5hbWVzOlsiXFxtaWRkbGUiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9TTMoZVswXSx0KTtpZighdC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IHB0KCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHIpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpyLnRleHR9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcjtpZih0LmRlbGltPT09Ii4iKXI9ZXYoZSxbXSk7ZWxzZXtyPWh1LnNpemVkRGVsaW0odC5kZWxpbSwxLGUsdC5tb2RlLFtdKTt2YXIgbj17ZGVsaW06dC5kZWxpbSxvcHRpb25zOmV9O3IuaXNNaWRkbGU9bn1yZXR1cm4gcn0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9dC5kZWxpbT09PSJcXHZlcnQifHx0LmRlbGltPT09InwiP0RvKCJ8IiwidGV4dCIpOkRvKHQuZGVsaW0sdC5tb2RlKSxuPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxuLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksbi5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTt1QT1vKCh0LGUpPT57dmFyIHI9RmUud3JhcEZyYWdtZW50KCRyKHQuYm9keSxlKSxlKSxuPXQubGFiZWwuc2xpY2UoMSksaT1lLnNpemVNdWx0aXBsaWVyLGEscz0wLGw9SnQuaXNDaGFyYWN0ZXJCb3godC5ib2R5KTtpZihuPT09InNvdXQiKWE9RmUubWFrZVNwYW4oWyJzdHJldGNoeSIsInNvdXQiXSksYS5oZWlnaHQ9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzL2kscz0tLjUqZS5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihuPT09InBoYXNlIil7dmFyIHU9bmkoe251bWJlcjouNix1bml0OiJwdCJ9LGUpLGg9bmkoe251bWJlcjouMzUsdW5pdDoiZXgifSxlKSxmPWUuaGF2aW5nQmFzZVNpemluZygpO2k9aS9mLnNpemVNdWx0aXBsaWVyO3ZhciBkPXIuaGVpZ2h0K3IuZGVwdGgrdStoO3Iuc3R5bGUucGFkZGluZ0xlZnQ9RXQoZC8yK3UpO3ZhciBwPU1hdGguZmxvb3IoMWUzKmQqaSksbT1VNGUocCksZz1uZXcgZGwoW25ldyBlYygicGhhc2UiLG0pXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6RXQocC8xZTMpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitwLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO2E9RmUubWFrZVN2Z1NwYW4oWyJoaWRlLXRhaWwiXSxbZ10sZSksYS5zdHlsZS5oZWlnaHQ9RXQoZCkscz1yLmRlcHRoK3UraH1lbHNley9jYW5jZWwvLnRlc3Qobik/bHx8ci5jbGFzc2VzLnB1c2goImNhbmNlbC1wYWQiKTpuPT09ImFuZ2wiP3IuY2xhc3Nlcy5wdXNoKCJhbmdscGFkIik6ci5jbGFzc2VzLnB1c2goImJveHBhZCIpO3ZhciB5PTAsdj0wLHg9MDsvYm94Ly50ZXN0KG4pPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxlLm1pblJ1bGVUaGlja25lc3MpLHk9ZS5mb250TWV0cmljcygpLmZib3hzZXArKG49PT0iY29sb3Jib3giPzA6eCksdj15KTpuPT09ImFuZ2wiPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxlLm1pblJ1bGVUaGlja25lc3MpLHk9NCp4LHY9TWF0aC5tYXgoMCwuMjUtci5kZXB0aCkpOih5PWw/LjI6MCx2PXkpLGE9ZHUuZW5jbG9zZVNwYW4ocixuLHksdixlKSwvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3Qobik/KGEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIixhLnN0eWxlLmJvcmRlcldpZHRoPUV0KHgpKTpuPT09ImFuZ2wiJiZ4IT09LjA0OSYmKGEuc3R5bGUuYm9yZGVyVG9wV2lkdGg9RXQoeCksYS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPUV0KHgpKSxzPXIuZGVwdGgrdix0LmJhY2tncm91bmRDb2xvciYmKGEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yLHQuYm9yZGVyQ29sb3ImJihhLnN0eWxlLmJvcmRlckNvbG9yPXQuYm9yZGVyQ29sb3IpKX12YXIgYjtpZih0LmJhY2tncm91bmRDb2xvciliPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphLHNoaWZ0OnN9LHt0eXBlOiJlbGVtIixlbGVtOnIsc2hpZnQ6MH1dfSxlKTtlbHNle3ZhciBUPS9jYW5jZWx8cGhhc2UvLnRlc3Qobik/WyJzdmctYWxpZ24iXTpbXTtiPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyLHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOmEsc2hpZnQ6cyx3cmFwcGVyQ2xhc3NlczpUfV19LGUpfXJldHVybi9jYW5jZWwvLnRlc3QobikmJihiLmhlaWdodD1yLmhlaWdodCxiLmRlcHRoPXIuZGVwdGgpLC9jYW5jZWwvLnRlc3QobikmJiFsP0ZlLm1ha2VTcGFuKFsibW9yZCIsImNhbmNlbC1sYXAiXSxbYl0sZSk6RmUubWFrZVNwYW4oWyJtb3JkIl0sW2JdLGUpfSwiaHRtbEJ1aWxkZXIkNyIpLGhBPW8oKHQsZSk9Pnt2YXIgcj0wLG49bmV3IGR0Lk1hdGhOb2RlKHQubGFiZWwuaW5kZXhPZigiY29sb3Jib3giKT4tMT8ibXBhZGRlZCI6Im1lbmNsb3NlIixbdm4odC5ib2R5LGUpXSk7c3dpdGNoKHQubGFiZWwpe2Nhc2UiXFxjYW5jZWwiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UiKTticmVhaztjYXNlIlxcYmNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXHBoYXNlIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJwaGFzb3JhbmdsZSIpO2JyZWFrO2Nhc2UiXFxzb3V0IjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJob3Jpem9udGFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGZib3giOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImJveCIpO2JyZWFrO2Nhc2UiXFxhbmdsIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJhY3R1YXJpYWwiKTticmVhaztjYXNlIlxcZmNvbG9yYm94IjpjYXNlIlxcY29sb3Jib3giOmlmKHI9ZS5mb250TWV0cmljcygpLmZib3hzZXAqZS5mb250TWV0cmljcygpLnB0UGVyRW0sbi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKyIrMipyKyJwdCIpLG4uc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIrIisyKnIrInB0Iiksbi5zZXRBdHRyaWJ1dGUoImxzcGFjZSIscisicHQiKSxuLnNldEF0dHJpYnV0ZSgidm9mZnNldCIscisicHQiKSx0LmxhYmVsPT09IlxcZmNvbG9yYm94Iil7dmFyIGk9TWF0aC5tYXgoZS5mb250TWV0cmljcygpLmZib3hydWxlLGUubWluUnVsZVRoaWNrbmVzcyk7bi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAiK2krImVtIHNvbGlkICIrU3RyaW5nKHQuYm9yZGVyQ29sb3IpKX1icmVhaztjYXNlIlxceGNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2UiKTticmVha31yZXR1cm4gdC5iYWNrZ3JvdW5kQ29sb3ImJm4uc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsdC5iYWNrZ3JvdW5kQ29sb3IpLG59LCJtYXRobWxCdWlsZGVyJDYiKTtOdCh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bixmdW5jTmFtZTppfT10LGE9eHIoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixzPWVbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOmEsYm9keTpzfX0saHRtbEJ1aWxkZXI6dUEsbWF0aG1sQnVpbGRlcjpoQX0pO050KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MyxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJjb2xvciIsInRleHQiXX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQsYT14cihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHM9eHIoZVsxXSwiY29sb3ItdG9rZW4iKS5jb2xvcixsPWVbMl07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOnMsYm9yZGVyQ29sb3I6YSxib2R5Omx9fSxodG1sQnVpbGRlcjp1QSxtYXRobWxCdWlsZGVyOmhBfSk7TnQoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmYm94Il0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnIubW9kZSxsYWJlbDoiXFxmYm94Iixib2R5OmVbMF19fX0pO050KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcY2FuY2VsIiwiXFxiY2FuY2VsIiwiXFx4Y2FuY2VsIiwiXFxzb3V0IiwiXFxwaGFzZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4sYm9keTppfX0saHRtbEJ1aWxkZXI6dUEsbWF0aG1sQnVpbGRlcjpoQX0pO050KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpyLm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTplWzBdfX19KTtpVj17fTtvKHRjLCJkZWZpbmVFbnZpcm9ubWVudCIpO2FWPXt9O28oZmUsImRlZmluZU1hY3JvIik7byhjRywiZ2V0SExpbmVzIik7STM9byh0PT57dmFyIGU9dC5wYXJzZXIuc2V0dGluZ3M7aWYoIWUuZGlzcGxheU1vZGUpdGhyb3cgbmV3IHB0KCJ7Iit0LmVudk5hbWUrIn0gY2FuIGJlIHVzZWQgb25seSBpbiBkaXNwbGF5IG1vZGUuIil9LCJ2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCIpO28oZkEsImdldEF1dG9UYWciKTtvKGJoLCJwYXJzZUFycmF5Iik7byhkQSwiZENlbGxTdHlsZSIpO3JjPW8oZnVuY3Rpb24oZSxyKXt2YXIgbixpLGE9ZS5ib2R5Lmxlbmd0aCxzPWUuaExpbmVzQmVmb3JlUm93LGw9MCx1PW5ldyBBcnJheShhKSxoPVtdLGY9TWF0aC5tYXgoci5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLHIubWluUnVsZVRoaWNrbmVzcyksZD0xL3IuZm9udE1ldHJpY3MoKS5wdFBlckVtLHA9NSpkO2lmKGUuY29sU2VwYXJhdGlvblR5cGUmJmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiKXt2YXIgbT1yLmhhdmluZ1N0eWxlKG5yLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7cD0uMjc3OCoobS9yLnNpemVNdWx0aXBsaWVyKX12YXIgZz1lLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9uaSh7bnVtYmVyOjMsdW5pdDoiZXgifSxyKToxMipkLHk9MypkLHY9ZS5hcnJheXN0cmV0Y2gqZyx4PS43KnYsYj0uMyp2LFQ9MDtmdW5jdGlvbiBTKGFlKXtmb3IodmFyIE9lPTA7T2U8YWUubGVuZ3RoOysrT2UpT2U+MCYmKFQrPS4yNSksaC5wdXNoKHtwb3M6VCxpc0Rhc2hlZDphZVtPZV19KX1mb3IobyhTLCJzZXRITGluZVBvcyIpLFMoc1swXSksbj0wO248ZS5ib2R5Lmxlbmd0aDsrK24pe3ZhciB3PWUuYm9keVtuXSxFPXgsXz1iO2w8dy5sZW5ndGgmJihsPXcubGVuZ3RoKTt2YXIgQz1uZXcgQXJyYXkody5sZW5ndGgpO2ZvcihpPTA7aTx3Lmxlbmd0aDsrK2kpe3ZhciBEPSRyKHdbaV0scik7XzxELmRlcHRoJiYoXz1ELmRlcHRoKSxFPEQuaGVpZ2h0JiYoRT1ELmhlaWdodCksQ1tpXT1EfXZhciBPPWUucm93R2Fwc1tuXSxSPTA7TyYmKFI9bmkoTyxyKSxSPjAmJihSKz1iLF88UiYmKF89UiksUj0wKSksZS5hZGRKb3QmJihfKz15KSxDLmhlaWdodD1FLEMuZGVwdGg9XyxUKz1FLEMucG9zPVQsVCs9XytSLHVbbl09QyxTKHNbbisxXSl9dmFyIGs9VC8yK3IuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LEw9ZS5jb2xzfHxbXSxBPVtdLEksTSxQPVtdO2lmKGUudGFncyYmZS50YWdzLnNvbWUoYWU9PmFlKSlmb3Iobj0wO248YTsrK24pe3ZhciBCPXVbbl0sRj1CLnBvcy1rLHo9ZS50YWdzW25dLCQ9dm9pZCAwO3o9PT0hMD8kPUZlLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHIpOno9PT0hMT8kPUZlLm1ha2VTcGFuKFtdLFtdLHIpOiQ9RmUubWFrZVNwYW4oW10sJGkoeixyLCEwKSxyKSwkLmRlcHRoPUIuZGVwdGgsJC5oZWlnaHQ9Qi5oZWlnaHQsUC5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOiQsc2hpZnQ6Rn0pfWZvcihpPTAsTT0wO2k8bHx8TTxMLmxlbmd0aDsrK2ksKytNKXtmb3IodmFyIFU9TFtNXXx8e30sSz0hMDtVLnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKEt8fChJPUZlLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksSS5zdHlsZS53aWR0aD1FdChyLmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksQS5wdXNoKEkpKSxVLnNlcGFyYXRvcj09PSJ8Inx8VS5zZXBhcmF0b3I9PT0iOiIpe3ZhciBlZT1VLnNlcGFyYXRvcj09PSJ8Ij8ic29saWQiOiJkYXNoZWQiLFk9RmUubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSxyKTtZLnN0eWxlLmhlaWdodD1FdChUKSxZLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9RXQoZiksWS5zdHlsZS5ib3JkZXJSaWdodFN0eWxlPWVlLFkuc3R5bGUubWFyZ2luPSIwICIrRXQoLWYvMik7dmFyIGNlPVQtaztjZSYmKFkuc3R5bGUudmVydGljYWxBbGlnbj1FdCgtY2UpKSxBLnB1c2goWSl9ZWxzZSB0aHJvdyBuZXcgcHQoIkludmFsaWQgc2VwYXJhdG9yIHR5cGU6ICIrVS5zZXBhcmF0b3IpO00rKyxVPUxbTV18fHt9LEs9ITF9aWYoIShpPj1sKSl7dmFyIFo9dm9pZCAwOyhpPjB8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihaPUp0LmRlZmx0KFUucHJlZ2FwLHApLFohPT0wJiYoST1GZS5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLEkuc3R5bGUud2lkdGg9RXQoWiksQS5wdXNoKEkpKSk7dmFyIHVlPVtdO2ZvcihuPTA7bjxhOysrbil7dmFyIFE9dVtuXSxqPVFbaV07aWYoail7dmFyIG5lPVEucG9zLWs7ai5kZXB0aD1RLmRlcHRoLGouaGVpZ2h0PVEuaGVpZ2h0LHVlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06aixzaGlmdDpuZX0pfX11ZT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjp1ZX0sciksdWU9RmUubWFrZVNwYW4oWyJjb2wtYWxpZ24tIisoVS5hbGlnbnx8ImMiKV0sW3VlXSksQS5wdXNoKHVlKSwoaTxsLTF8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihaPUp0LmRlZmx0KFUucG9zdGdhcCxwKSxaIT09MCYmKEk9RmUubWFrZVNwYW4oWyJhcnJheWNvbHNlcCJdLFtdKSxJLnN0eWxlLndpZHRoPUV0KFopLEEucHVzaChJKSkpfX1pZih1PUZlLm1ha2VTcGFuKFsibXRhYmxlIl0sQSksaC5sZW5ndGg+MCl7Zm9yKHZhciB0ZT1GZS5tYWtlTGluZVNwYW4oImhsaW5lIixyLGYpLGhlPUZlLm1ha2VMaW5lU3BhbigiaGRhc2hsaW5lIixyLGYpLGxlPVt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9XTtoLmxlbmd0aD4wOyl7dmFyIEo9aC5wb3AoKSxTZT1KLnBvcy1rO0ouaXNEYXNoZWQ/bGUucHVzaCh7dHlwZToiZWxlbSIsZWxlbTpoZSxzaGlmdDpTZX0pOmxlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06dGUsc2hpZnQ6U2V9KX11PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmxlfSxyKX1pZihQLmxlbmd0aD09PTApcmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCJdLFt1XSxyKTt2YXIgc2U9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46UH0scik7cmV0dXJuIHNlPUZlLm1ha2VTcGFuKFsidGFnIl0sW3NlXSxyKSxGZS5tYWtlRnJhZ21lbnQoW3Usc2VdKX0sImh0bWxCdWlsZGVyIiksajNlPXtjOiJjZW50ZXIgIixsOiJsZWZ0ICIscjoicmlnaHQgIn0sbmM9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPW5ldyBkdC5NYXRoTm9kZSgibXRkIixbXSxbIm10ci1nbHVlIl0pLGE9bmV3IGR0Lk1hdGhOb2RlKCJtdGQiLFtdLFsibW1sLWVxbi1udW0iXSkscz0wO3M8ZS5ib2R5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1lLmJvZHlbc10sdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspdS5wdXNoKG5ldyBkdC5NYXRoTm9kZSgibXRkIixbdm4obFtoXSxyKV0pKTtlLnRhZ3MmJmUudGFnc1tzXSYmKHUudW5zaGlmdChpKSx1LnB1c2goaSksZS5sZXFubz91LnVuc2hpZnQoYSk6dS5wdXNoKGEpKSxuLnB1c2gobmV3IGR0Lk1hdGhOb2RlKCJtdHIiLHUpKX12YXIgZj1uZXcgZHQuTWF0aE5vZGUoIm10YWJsZSIsbiksZD1lLmFycmF5c3RyZXRjaD09PS41Py4xOi4xNitlLmFycmF5c3RyZXRjaC0xKyhlLmFkZEpvdD8uMDk6MCk7Zi5zZXRBdHRyaWJ1dGUoInJvd3NwYWNpbmciLEV0KGQpKTt2YXIgcD0iIixtPSIiO2lmKGUuY29scyYmZS5jb2xzLmxlbmd0aD4wKXt2YXIgZz1lLmNvbHMseT0iIix2PSExLHg9MCxiPWcubGVuZ3RoO2dbMF0udHlwZT09PSJzZXBhcmF0b3IiJiYocCs9InRvcCAiLHg9MSksZ1tnLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihwKz0iYm90dG9tICIsYi09MSk7Zm9yKHZhciBUPXg7VDxiO1QrKylnW1RdLnR5cGU9PT0iYWxpZ24iPyhtKz1qM2VbZ1tUXS5hbGlnbl0sdiYmKHkrPSJub25lICIpLHY9ITApOmdbVF0udHlwZT09PSJzZXBhcmF0b3IiJiZ2JiYoeSs9Z1tUXS5zZXBhcmF0b3I9PT0ifCI/InNvbGlkICI6ImRhc2hlZCAiLHY9ITEpO2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5hbGlnbiIsbS50cmltKCkpLC9bc2RdLy50ZXN0KHkpJiZmLnNldEF0dHJpYnV0ZSgiY29sdW1ubGluZXMiLHkudHJpbSgpKX1pZihlLmNvbFNlcGFyYXRpb25UeXBlPT09ImFsaWduIil7Zm9yKHZhciBTPWUuY29sc3x8W10sdz0iIixFPTE7RTxTLmxlbmd0aDtFKyspdys9RSUyPyIwZW0gIjoiMWVtICI7Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLHcudHJpbSgpKX1lbHNlIGUuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ25hdCJ8fGUuY29sU2VwYXJhdGlvblR5cGU9PT0iZ2F0aGVyIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjBlbSIpOmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiP2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC4yNzc4ZW0iKTplLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjAuNWVtIik6Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIxZW0iKTt2YXIgXz0iIixDPWUuaExpbmVzQmVmb3JlUm93O3ArPUNbMF0ubGVuZ3RoPjA/ImxlZnQgIjoiIixwKz1DW0MubGVuZ3RoLTFdLmxlbmd0aD4wPyJyaWdodCAiOiIiO2Zvcih2YXIgRD0xO0Q8Qy5sZW5ndGgtMTtEKyspXys9Q1tEXS5sZW5ndGg9PT0wPyJub25lICI6Q1tEXVswXT8iZGFzaGVkICI6InNvbGlkICI7cmV0dXJuL1tzZF0vLnRlc3QoXykmJmYuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsXy50cmltKCkpLHAhPT0iIiYmKGY9bmV3IGR0Lk1hdGhOb2RlKCJtZW5jbG9zZSIsW2ZdKSxmLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLHAudHJpbSgpKSksZS5hcnJheXN0cmV0Y2gmJmUuYXJyYXlzdHJldGNoPDEmJihmPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixbZl0pLGYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSksZn0sIm1hdGhtbEJ1aWxkZXIiKSxzVj1vKGZ1bmN0aW9uKGUscil7ZS5lbnZOYW1lLmluZGV4T2YoImVkIik9PT0tMSYmSTMoZSk7dmFyIG49W10saT1lLmVudk5hbWUuaW5kZXhPZigiYXQiKT4tMT8iYWxpZ25hdCI6ImFsaWduIixhPWUuZW52TmFtZT09PSJzcGxpdCIscz1iaChlLnBhcnNlcix7Y29sczpuLGFkZEpvdDohMCxhdXRvVGFnOmE/dm9pZCAwOmZBKGUuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsY29sU2VwYXJhdGlvblR5cGU6aSxtYXhOdW1Db2xzOmE/Mjp2b2lkIDAsbGVxbm86ZS5wYXJzZXIuc2V0dGluZ3MubGVxbm99LCJkaXNwbGF5IiksbCx1PTAsaD17dHlwZToib3JkZ3JvdXAiLG1vZGU6ZS5tb2RlLGJvZHk6W119O2lmKHJbMF0mJnJbMF0udHlwZT09PSJvcmRncm91cCIpe2Zvcih2YXIgZj0iIixkPTA7ZDxyWzBdLmJvZHkubGVuZ3RoO2QrKyl7dmFyIHA9eHIoclswXS5ib2R5W2RdLCJ0ZXh0b3JkIik7Zis9cC50ZXh0fWw9TnVtYmVyKGYpLHU9bCoyfXZhciBtPSF1O3MuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2Zvcih2YXIgYj0xO2I8eC5sZW5ndGg7Yis9Mil7dmFyIFQ9eHIoeFtiXSwic3R5bGluZyIpLFM9eHIoVC5ib2R5WzBdLCJvcmRncm91cCIpO1MuYm9keS51bnNoaWZ0KGgpfWlmKG0pdTx4Lmxlbmd0aCYmKHU9eC5sZW5ndGgpO2Vsc2V7dmFyIHc9eC5sZW5ndGgvMjtpZihsPHcpdGhyb3cgbmV3IHB0KCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIitsKyIsIGJ1dCBnb3QgIit3KSx4WzBdKX19KTtmb3IodmFyIGc9MDtnPHU7KytnKXt2YXIgeT0iciIsdj0wO2clMj09PTE/eT0ibCI6Zz4wJiZtJiYodj0xKSxuW2ddPXt0eXBlOiJhbGlnbiIsYWxpZ246eSxwcmVnYXA6dixwb3N0Z2FwOjB9fXJldHVybiBzLmNvbFNlcGFyYXRpb25UeXBlPW0/ImFsaWduIjoiYWxpZ25hdCIsc30sImFsaWduZWRIYW5kbGVyIik7dGMoe3R5cGU6ImFycmF5IixuYW1lczpbImFycmF5IiwiZGFycmF5Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhciByPVIzKGVbMF0pLG49cj9bZVswXV06eHIoZVswXSwib3JkZ3JvdXAiKS5ib2R5LGk9bi5tYXAoZnVuY3Rpb24ocyl7dmFyIGw9b0EocyksdT1sLnRleHQ7aWYoImxjciIuaW5kZXhPZih1KSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246dX07aWYodT09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZih1PT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBwdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KSxhPXtjb2xzOmksaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOmkubGVuZ3RofTtyZXR1cm4gYmgodC5wYXJzZXIsYSxkQSh0LmVudk5hbWUpKX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJtYXRyaXgiLCJwbWF0cml4IiwiYm1hdHJpeCIsIkJtYXRyaXgiLCJ2bWF0cml4IiwiVm1hdHJpeCIsIm1hdHJpeCoiLCJwbWF0cml4KiIsImJtYXRyaXgqIiwiQm1hdHJpeCoiLCJ2bWF0cml4KiIsIlZtYXRyaXgqIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXIgZT17bWF0cml4Om51bGwscG1hdHJpeDpbIigiLCIpIl0sYm1hdHJpeDpbIlsiLCJdIl0sQm1hdHJpeDpbIlxceyIsIlxcfSJdLHZtYXRyaXg6WyJ8IiwifCJdLFZtYXRyaXg6WyJcXFZlcnQiLCJcXFZlcnQiXX1bdC5lbnZOYW1lLnJlcGxhY2UoIioiLCIiKV0scj0iYyIsbj17aHNraXBCZWZvcmVBbmRBZnRlcjohMSxjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX07aWYodC5lbnZOYW1lLmNoYXJBdCh0LmVudk5hbWUubGVuZ3RoLTEpPT09IioiKXt2YXIgaT10LnBhcnNlcjtpZihpLmNvbnN1bWVTcGFjZXMoKSxpLmZldGNoKCkudGV4dD09PSJbIil7aWYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCkscj1pLmZldGNoKCkudGV4dCwibGNyIi5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBsIG9yIGMgb3IgciIsaS5uZXh0VG9rZW4pO2kuY29uc3VtZSgpLGkuY29uc3VtZVNwYWNlcygpLGkuZXhwZWN0KCJdIiksaS5jb25zdW1lKCksbi5jb2xzPVt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX19dmFyIGE9YmgodC5wYXJzZXIsbixkQSh0LmVudk5hbWUpKSxzPU1hdGgubWF4KDAsLi4uYS5ib2R5Lm1hcChsPT5sLmxlbmd0aCkpO3JldHVybiBhLmNvbHM9bmV3IEFycmF5KHMpLmZpbGwoe3R5cGU6ImFsaWduIixhbGlnbjpyfSksZT97dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OlthXSxsZWZ0OmVbMF0scmlnaHQ6ZVsxXSxyaWdodENvbG9yOnZvaWQgMH06YX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzbWFsbG1hdHJpeCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFyIGU9e2FycmF5c3RyZXRjaDouNX0scj1iaCh0LnBhcnNlcixlLCJzY3JpcHQiKTtyZXR1cm4gci5jb2xTZXBhcmF0aW9uVHlwZT0ic21hbGwiLHJ9LGh0bWxCdWlsZGVyOnJjLG1hdGhtbEJ1aWxkZXI6bmN9KTt0Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsic3ViYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFyIHI9UjMoZVswXSksbj1yP1tlWzBdXTp4cihlWzBdLCJvcmRncm91cCIpLmJvZHksaT1uLm1hcChmdW5jdGlvbihzKXt2YXIgbD1vQShzKSx1PWwudGV4dDtpZigibGMiLmluZGV4T2YodSkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOnV9O3Rocm93IG5ldyBwdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KTtpZihpLmxlbmd0aD4xKXRocm93IG5ldyBwdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgYT17Y29sczppLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZihhPWJoKHQucGFyc2VyLGEsInNjcmlwdCIpLGEuYm9keS5sZW5ndGg+MCYmYS5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBwdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gYX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhciBlPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHI9YmgodC5wYXJzZXIsZSxkQSh0LmVudk5hbWUpKTtyZXR1cm57dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OltyXSxsZWZ0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/Ii4iOiJcXHsiLHJpZ2h0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/IlxcfSI6Ii4iLHJpZ2h0Q29sb3I6dm9pZCAwfX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJhbGlnbiIsImFsaWduKiIsImFsaWduZWQiLCJzcGxpdCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6c1YsaHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJnYXRoZXJlZCIsImdhdGhlciIsImdhdGhlcioiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe0p0LmNvbnRhaW5zKFsiZ2F0aGVyIiwiZ2F0aGVyKiJdLHQuZW52TmFtZSkmJkkzKHQpO3ZhciBlPXtjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOiJjIn1dLGFkZEpvdDohMCxjb2xTZXBhcmF0aW9uVHlwZToiZ2F0aGVyIixhdXRvVGFnOmZBKHQuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBiaCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOnJjLG1hdGhtbEJ1aWxkZXI6bmN9KTt0Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpzVixodG1sQnVpbGRlcjpyYyxtYXRobWxCdWlsZGVyOm5jfSk7dGMoe3R5cGU6ImFycmF5IixuYW1lczpbImVxdWF0aW9uIiwiZXF1YXRpb24qIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXtJMyh0KTt2YXIgZT17YXV0b1RhZzpmQSh0LmVudk5hbWUpLGVtcHR5U2luZ2xlUm93OiEwLHNpbmdsZVJvdzohMCxtYXhOdW1Db2xzOjEsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBiaCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOnJjLG1hdGhtbEJ1aWxkZXI6bmN9KTt0Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiQ0QiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3JldHVybiBJMyh0KSxPM2UodC5wYXJzZXIpfSxodG1sQnVpbGRlcjpyYyxtYXRobWxCdWlsZGVyOm5jfSk7ZmUoIlxcbm9udW1iZXIiLCJcXGdkZWZcXEBlcW5zd3swfSIpO2ZlKCJcXG5vdGFnIiwiXFxub251bWJlciIpO050KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcaGxpbmUiLCJcXGhkYXNobGluZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IHB0KHQuZnVuY05hbWUrIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudCIpfX0pO3VHPWlWO050KHt0eXBlOiJlbnZpcm9ubWVudCIsbmFtZXM6WyJcXGJlZ2luIiwiXFxlbmQiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO2lmKGkudHlwZSE9PSJvcmRncm91cCIpdGhyb3cgbmV3IHB0KCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWUiLGkpO2Zvcih2YXIgYT0iIixzPTA7czxpLmJvZHkubGVuZ3RoOysrcylhKz14cihpLmJvZHlbc10sInRleHRvcmQiKS50ZXh0O2lmKG49PT0iXFxiZWdpbiIpe2lmKCF1Ry5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgcHQoIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrYSxpKTt2YXIgbD11R1thXSx7YXJnczp1LG9wdEFyZ3M6aH09ci5wYXJzZUFyZ3VtZW50cygiXFxiZWdpbnsiK2ErIn0iLGwpLGY9e21vZGU6ci5tb2RlLGVudk5hbWU6YSxwYXJzZXI6cn0sZD1sLmhhbmRsZXIoZix1LGgpO3IuZXhwZWN0KCJcXGVuZCIsITEpO3ZhciBwPXIubmV4dFRva2VuLG09eHIoci5wYXJzZUZ1bmN0aW9uKCksImVudmlyb25tZW50Iik7aWYobS5uYW1lIT09YSl0aHJvdyBuZXcgcHQoIk1pc21hdGNoOiBcXGJlZ2lueyIrYSsifSBtYXRjaGVkIGJ5IFxcZW5keyIrbS5uYW1lKyJ9IixwKTtyZXR1cm4gZH1yZXR1cm57dHlwZToiZW52aXJvbm1lbnQiLG1vZGU6ci5tb2RlLG5hbWU6YSxuYW1lR3JvdXA6aX19fSk7b1Y9bygodCxlKT0+e3ZhciByPXQuZm9udCxuPWUud2l0aEZvbnQocik7cmV0dXJuICRyKHQuYm9keSxuKX0sImh0bWxCdWlsZGVyJDUiKSxsVj1vKCh0LGUpPT57dmFyIHI9dC5mb250LG49ZS53aXRoRm9udChyKTtyZXR1cm4gdm4odC5ib2R5LG4pfSwibWF0aG1sQnVpbGRlciQ0IiksaEc9eyJcXEJiYiI6IlxcbWF0aGJiIiwiXFxib2xkIjoiXFxtYXRoYmYiLCJcXGZyYWsiOiJcXG1hdGhmcmFrIiwiXFxibSI6IlxcYm9sZHN5bWJvbCJ9O050KHt0eXBlOiJmb250IixuYW1lczpbIlxcbWF0aHJtIiwiXFxtYXRoaXQiLCJcXG1hdGhiZiIsIlxcbWF0aG5vcm1hbCIsIlxcbWF0aHNmaXQiLCJcXG1hdGhiYiIsIlxcbWF0aGNhbCIsIlxcbWF0aGZyYWsiLCJcXG1hdGhzY3IiLCJcXG1hdGhzZiIsIlxcbWF0aHR0IiwiXFxCYmIiLCJcXGJvbGQiLCJcXGZyYWsiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJbkFyZ3VtZW50OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPUMzKGVbMF0pLGE9bjtyZXR1cm4gYSBpbiBoRyYmKGE9aEdbYV0pLHt0eXBlOiJmb250Iixtb2RlOnIubW9kZSxmb250OmEuc2xpY2UoMSksYm9keTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvVixtYXRobWxCdWlsZGVyOmxWfSk7TnQoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXGJvbGRzeW1ib2wiLCJcXGJtIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXSxpPUp0LmlzQ2hhcmFjdGVyQm94KG4pO3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6ci5tb2RlLG1jbGFzczpOMyhuKSxib2R5Olt7dHlwZToiZm9udCIsbW9kZTpyLm1vZGUsZm9udDoiYm9sZHN5bWJvbCIsYm9keTpufV0saXNDaGFyYWN0ZXJCb3g6aX19LCJoYW5kbGVyIil9KTtOdCh7dHlwZToiZm9udCIsbmFtZXM6WyJcXHJtIiwiXFxzZiIsIlxcdHQiLCJcXGJmIiwiXFxpdCIsIlxcY2FsIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bixicmVha09uVG9rZW5UZXh0Oml9PXQse21vZGU6YX09cixzPXIucGFyc2VFeHByZXNzaW9uKCEwLGkpLGw9Im1hdGgiK24uc2xpY2UoMSk7cmV0dXJue3R5cGU6ImZvbnQiLG1vZGU6YSxmb250OmwsYm9keTp7dHlwZToib3JkZ3JvdXAiLG1vZGU6ci5tb2RlLGJvZHk6c319fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm9WLG1hdGhtbEJ1aWxkZXI6bFZ9KTtjVj1vKCh0LGUpPT57dmFyIHI9ZTtyZXR1cm4gdD09PSJkaXNwbGF5Ij9yPXIuaWQ+PW5yLlNDUklQVC5pZD9yLnRleHQoKTpuci5ESVNQTEFZOnQ9PT0idGV4dCImJnIuc2l6ZT09PW5yLkRJU1BMQVkuc2l6ZT9yPW5yLlRFWFQ6dD09PSJzY3JpcHQiP3I9bnIuU0NSSVBUOnQ9PT0ic2NyaXB0c2NyaXB0IiYmKHI9bnIuU0NSSVBUU0NSSVBUKSxyfSwiYWRqdXN0U3R5bGUiKSxwQT1vKCh0LGUpPT57dmFyIHI9Y1YodC5zaXplLGUuc3R5bGUpLG49ci5mcmFjTnVtKCksaT1yLmZyYWNEZW4oKSxhO2E9ZS5oYXZpbmdTdHlsZShuKTt2YXIgcz0kcih0Lm51bWVyLGEsZSk7aWYodC5jb250aW51ZWQpe3ZhciBsPTguNS9lLmZvbnRNZXRyaWNzKCkucHRQZXJFbSx1PTMuNS9lLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtzLmhlaWdodD1zLmhlaWdodDxsP2w6cy5oZWlnaHQscy5kZXB0aD1zLmRlcHRoPHU/dTpzLmRlcHRofWE9ZS5oYXZpbmdTdHlsZShpKTt2YXIgaD0kcih0LmRlbm9tLGEsZSksZixkLHA7dC5oYXNCYXJMaW5lPyh0LmJhclNpemU/KGQ9bmkodC5iYXJTaXplLGUpLGY9RmUubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLGUsZCkpOmY9RmUubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLGUpLGQ9Zi5oZWlnaHQscD1mLmhlaWdodCk6KGY9bnVsbCxkPTAscD1lLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MpO3ZhciBtLGcseTtyLnNpemU9PT1uci5ESVNQTEFZLnNpemV8fHQuc2l6ZT09PSJkaXNwbGF5Ij8obT1lLmZvbnRNZXRyaWNzKCkubnVtMSxkPjA/Zz0zKnA6Zz03KnAseT1lLmZvbnRNZXRyaWNzKCkuZGVub20xKTooZD4wPyhtPWUuZm9udE1ldHJpY3MoKS5udW0yLGc9cCk6KG09ZS5mb250TWV0cmljcygpLm51bTMsZz0zKnApLHk9ZS5mb250TWV0cmljcygpLmRlbm9tMik7dmFyIHY7aWYoZil7dmFyIGI9ZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7bS1zLmRlcHRoLShiKy41KmQpPGcmJihtKz1nLShtLXMuZGVwdGgtKGIrLjUqZCkpKSxiLS41KmQtKGguaGVpZ2h0LXkpPGcmJih5Kz1nLShiLS41KmQtKGguaGVpZ2h0LXkpKSk7dmFyIFQ9LShiLS41KmQpO3Y9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmgsc2hpZnQ6eX0se3R5cGU6ImVsZW0iLGVsZW06ZixzaGlmdDpUfSx7dHlwZToiZWxlbSIsZWxlbTpzLHNoaWZ0Oi1tfV19LGUpfWVsc2V7dmFyIHg9bS1zLmRlcHRoLShoLmhlaWdodC15KTt4PGcmJihtKz0uNSooZy14KSx5Kz0uNSooZy14KSksdj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aCxzaGlmdDp5fSx7dHlwZToiZWxlbSIsZWxlbTpzLHNoaWZ0Oi1tfV19LGUpfWE9ZS5oYXZpbmdTdHlsZShyKSx2LmhlaWdodCo9YS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyLHYuZGVwdGgqPWEuc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcjt2YXIgUztyLnNpemU9PT1uci5ESVNQTEFZLnNpemU/Uz1lLmZvbnRNZXRyaWNzKCkuZGVsaW0xOnIuc2l6ZT09PW5yLlNDUklQVFNDUklQVC5zaXplP1M9ZS5oYXZpbmdTdHlsZShuci5TQ1JJUFQpLmZvbnRNZXRyaWNzKCkuZGVsaW0yOlM9ZS5mb250TWV0cmljcygpLmRlbGltMjt2YXIgdyxFO3JldHVybiB0LmxlZnREZWxpbT09bnVsbD93PWV2KGUsWyJtb3BlbiJdKTp3PWh1LmN1c3RvbVNpemVkRGVsaW0odC5sZWZ0RGVsaW0sUywhMCxlLmhhdmluZ1N0eWxlKHIpLHQubW9kZSxbIm1vcGVuIl0pLHQuY29udGludWVkP0U9RmUubWFrZVNwYW4oW10pOnQucmlnaHREZWxpbT09bnVsbD9FPWV2KGUsWyJtY2xvc2UiXSk6RT1odS5jdXN0b21TaXplZERlbGltKHQucmlnaHREZWxpbSxTLCEwLGUuaGF2aW5nU3R5bGUociksdC5tb2RlLFsibWNsb3NlIl0pLEZlLm1ha2VTcGFuKFsibW9yZCJdLmNvbmNhdChhLnNpemluZ0NsYXNzZXMoZSkpLFt3LEZlLm1ha2VTcGFuKFsibWZyYWMiXSxbdl0pLEVdLGUpfSwiaHRtbEJ1aWxkZXIkNCIpLG1BPW8oKHQsZSk9Pnt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1mcmFjIixbdm4odC5udW1lcixlKSx2bih0LmRlbm9tLGUpXSk7aWYoIXQuaGFzQmFyTGluZSlyLnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsIjBweCIpO2Vsc2UgaWYodC5iYXJTaXplKXt2YXIgbj1uaSh0LmJhclNpemUsZSk7ci5zZXRBdHRyaWJ1dGUoImxpbmV0aGlja25lc3MiLEV0KG4pKX12YXIgaT1jVih0LnNpemUsZS5zdHlsZSk7aWYoaS5zaXplIT09ZS5zdHlsZS5zaXplKXtyPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixbcl0pO3ZhciBhPWkuc2l6ZT09PW5yLkRJU1BMQVkuc2l6ZT8idHJ1ZSI6ImZhbHNlIjtyLnNldEF0dHJpYnV0ZSgiZGlzcGxheXN0eWxlIixhKSxyLnNldEF0dHJpYnV0ZSgic2NyaXB0bGV2ZWwiLCIwIil9aWYodC5sZWZ0RGVsaW0hPW51bGx8fHQucmlnaHREZWxpbSE9bnVsbCl7dmFyIHM9W107aWYodC5sZWZ0RGVsaW0hPW51bGwpe3ZhciBsPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUodC5sZWZ0RGVsaW0ucmVwbGFjZSgiXFwiLCIiKSldKTtsLnNldEF0dHJpYnV0ZSgiZmVuY2UiLCJ0cnVlIikscy5wdXNoKGwpfWlmKHMucHVzaChyKSx0LnJpZ2h0RGVsaW0hPW51bGwpe3ZhciB1PW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUodC5yaWdodERlbGltLnJlcGxhY2UoIlxcIiwiIikpXSk7dS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLHMucHVzaCh1KX1yZXR1cm4gYUEocyl9cmV0dXJuIHJ9LCJtYXRobWxCdWlsZGVyJDMiKTtOdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGRmcmFjIiwiXFxmcmFjIiwiXFx0ZnJhYyIsIlxcZGJpbm9tIiwiXFxiaW5vbSIsIlxcdGJpbm9tIiwiXFxcXGF0b3BmcmFjIiwiXFxcXGJyYWNlZnJhYyIsIlxcXFxicmFja2ZyYWMiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJbkFyZ3VtZW50OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF0sYT1lWzFdLHMsbD1udWxsLHU9bnVsbCxoPSJhdXRvIjtzd2l0Y2gobil7Y2FzZSJcXGRmcmFjIjpjYXNlIlxcZnJhYyI6Y2FzZSJcXHRmcmFjIjpzPSEwO2JyZWFrO2Nhc2UiXFxcXGF0b3BmcmFjIjpzPSExO2JyZWFrO2Nhc2UiXFxkYmlub20iOmNhc2UiXFxiaW5vbSI6Y2FzZSJcXHRiaW5vbSI6cz0hMSxsPSIoIix1PSIpIjticmVhaztjYXNlIlxcXFxicmFjZWZyYWMiOnM9ITEsbD0iXFx7Iix1PSJcXH0iO2JyZWFrO2Nhc2UiXFxcXGJyYWNrZnJhYyI6cz0hMSxsPSJbIix1PSJdIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGdlbmZyYWMgY29tbWFuZCIpfXN3aXRjaChuKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxkYmlub20iOmg9ImRpc3BsYXkiO2JyZWFrO2Nhc2UiXFx0ZnJhYyI6Y2FzZSJcXHRiaW5vbSI6aD0idGV4dCI7YnJlYWt9cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6ci5tb2RlLGNvbnRpbnVlZDohMSxudW1lcjppLGRlbm9tOmEsaGFzQmFyTGluZTpzLGxlZnREZWxpbTpsLHJpZ2h0RGVsaW06dSxzaXplOmgsYmFyU2l6ZTpudWxsfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpwQSxtYXRobWxCdWlsZGVyOm1BfSk7TnQoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxjZnJhYyJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXSxhPWVbMV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6ci5tb2RlLGNvbnRpbnVlZDohMCxudW1lcjppLGRlbm9tOmEsaGFzQmFyTGluZTohMCxsZWZ0RGVsaW06bnVsbCxyaWdodERlbGltOm51bGwsc2l6ZToiZGlzcGxheSIsYmFyU2l6ZTpudWxsfX0sImhhbmRsZXIiKX0pO050KHt0eXBlOiJpbmZpeCIsbmFtZXM6WyJcXG92ZXIiLCJcXGNob29zZSIsIlxcYXRvcCIsIlxcYnJhY2UiLCJcXGJyYWNrIl0scHJvcHM6e251bUFyZ3M6MCxpbmZpeDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cix0b2tlbjpufT10LGk7c3dpdGNoKHIpe2Nhc2UiXFxvdmVyIjppPSJcXGZyYWMiO2JyZWFrO2Nhc2UiXFxjaG9vc2UiOmk9IlxcYmlub20iO2JyZWFrO2Nhc2UiXFxhdG9wIjppPSJcXFxcYXRvcGZyYWMiO2JyZWFrO2Nhc2UiXFxicmFjZSI6aT0iXFxcXGJyYWNlZnJhYyI7YnJlYWs7Y2FzZSJcXGJyYWNrIjppPSJcXFxcYnJhY2tmcmFjIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGluZml4IGdlbmZyYWMgY29tbWFuZCIpfXJldHVybnt0eXBlOiJpbmZpeCIsbW9kZTplLm1vZGUscmVwbGFjZVdpdGg6aSx0b2tlbjpufX19KTtmRz1bImRpc3BsYXkiLCJ0ZXh0Iiwic2NyaXB0Iiwic2NyaXB0c2NyaXB0Il0sZEc9byhmdW5jdGlvbihlKXt2YXIgcj1udWxsO3JldHVybiBlLmxlbmd0aD4wJiYocj1lLHI9cj09PSIuIj9udWxsOnIpLHJ9LCJkZWxpbUZyb21WYWx1ZSIpO050KHt0eXBlOiJnZW5mcmFjIixuYW1lczpbIlxcZ2VuZnJhYyJdLHByb3BzOntudW1BcmdzOjYsYWxsb3dlZEluQXJndW1lbnQ6ITAsYXJnVHlwZXM6WyJtYXRoIiwibWF0aCIsInNpemUiLCJ0ZXh0IiwibWF0aCIsIm1hdGgiXX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPWVbNF0saT1lWzVdLGE9QzMoZVswXSkscz1hLnR5cGU9PT0iYXRvbSImJmEuZmFtaWx5PT09Im9wZW4iP2RHKGEudGV4dCk6bnVsbCxsPUMzKGVbMV0pLHU9bC50eXBlPT09ImF0b20iJiZsLmZhbWlseT09PSJjbG9zZSI/ZEcobC50ZXh0KTpudWxsLGg9eHIoZVsyXSwic2l6ZSIpLGYsZD1udWxsO2guaXNCbGFuaz9mPSEwOihkPWgudmFsdWUsZj1kLm51bWJlcj4wKTt2YXIgcD0iYXV0byIsbT1lWzNdO2lmKG0udHlwZT09PSJvcmRncm91cCIpe2lmKG0uYm9keS5sZW5ndGg+MCl7dmFyIGc9eHIobS5ib2R5WzBdLCJ0ZXh0b3JkIik7cD1mR1tOdW1iZXIoZy50ZXh0KV19fWVsc2UgbT14cihtLCJ0ZXh0b3JkIikscD1mR1tOdW1iZXIobS50ZXh0KV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6ci5tb2RlLG51bWVyOm4sZGVub206aSxjb250aW51ZWQ6ITEsaGFzQmFyTGluZTpmLGJhclNpemU6ZCxsZWZ0RGVsaW06cyxyaWdodERlbGltOnUsc2l6ZTpwfX0saHRtbEJ1aWxkZXI6cEEsbWF0aG1sQnVpbGRlcjptQX0pO050KHt0eXBlOiJpbmZpeCIsbmFtZXM6WyJcXGFib3ZlIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxpbmZpeDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLHRva2VuOml9PXQ7cmV0dXJue3R5cGU6ImluZml4Iixtb2RlOnIubW9kZSxyZXBsYWNlV2l0aDoiXFxcXGFib3ZlZnJhYyIsc2l6ZTp4cihlWzBdLCJzaXplIikudmFsdWUsdG9rZW46aX19fSk7TnQoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxcXGFib3ZlZnJhYyJdLHByb3BzOntudW1BcmdzOjMsYXJnVHlwZXM6WyJtYXRoIiwic2l6ZSIsIm1hdGgiXX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdLGE9XzRlKHhyKGVbMV0sImluZml4Iikuc2l6ZSkscz1lWzJdLGw9YS5udW1iZXI+MDtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsbnVtZXI6aSxkZW5vbTpzLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOmwsYmFyU2l6ZTphLGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJhdXRvIn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6cEEsbWF0aG1sQnVpbGRlcjptQX0pO3VWPW8oKHQsZSk9Pnt2YXIgcj1lLnN0eWxlLG4saTt0LnR5cGU9PT0ic3Vwc3ViIj8obj10LnN1cD8kcih0LnN1cCxlLmhhdmluZ1N0eWxlKHIuc3VwKCkpLGUpOiRyKHQuc3ViLGUuaGF2aW5nU3R5bGUoci5zdWIoKSksZSksaT14cih0LmJhc2UsImhvcml6QnJhY2UiKSk6aT14cih0LCJob3JpekJyYWNlIik7dmFyIGE9JHIoaS5iYXNlLGUuaGF2aW5nQmFzZVN0eWxlKG5yLkRJU1BMQVkpKSxzPWR1LnN2Z1NwYW4oaSxlKSxsO2lmKGkuaXNPdmVyPyhsPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06YX0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOnN9XX0sZSksbC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKToobD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6YS5kZXB0aCsuMStzLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06c30se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOmF9XX0sZSksbC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKSxuKXt2YXIgdT1GZS5tYWtlU3BhbihbIm1vcmQiLGkuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFtsXSxlKTtpLmlzT3Zlcj9sPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6LjJ9LHt0eXBlOiJlbGVtIixlbGVtOm59XX0sZSk6bD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6dS5kZXB0aCsuMituLmhlaWdodCtuLmRlcHRoLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpufSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06dX1dfSxlKX1yZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIixpLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiXSxbbF0sZSl9LCJodG1sQnVpbGRlciQzIiksSzNlPW8oKHQsZSk9Pnt2YXIgcj1kdS5tYXRoTUxub2RlKHQubGFiZWwpO3JldHVybiBuZXcgZHQuTWF0aE5vZGUodC5pc092ZXI/Im1vdmVyIjoibXVuZGVyIixbdm4odC5iYXNlLGUpLHJdKX0sIm1hdGhtbEJ1aWxkZXIkMiIpO050KHt0eXBlOiJob3JpekJyYWNlIixuYW1lczpbIlxcb3ZlcmJyYWNlIiwiXFx1bmRlcmJyYWNlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10O3JldHVybnt0eXBlOiJob3JpekJyYWNlIixtb2RlOnIubW9kZSxsYWJlbDpuLGlzT3ZlcjovXlxcb3Zlci8udGVzdChuKSxiYXNlOmVbMF19fSxodG1sQnVpbGRlcjp1VixtYXRobWxCdWlsZGVyOkszZX0pO050KHt0eXBlOiJocmVmIixuYW1lczpbIlxcaHJlZiJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJ1cmwiLCJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dCxuPWVbMV0saT14cihlWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHIuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXGhyZWYiLHVybDppfSk/e3R5cGU6ImhyZWYiLG1vZGU6ci5tb2RlLGhyZWY6aSxib2R5OmdpKG4pfTpyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGhyZWYiKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9JGkodC5ib2R5LGUsITEpO3JldHVybiBGZS5tYWtlQW5jaG9yKHQuaHJlZixbXSxyLGUpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj14aCh0LmJvZHksZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiB0c3x8KHI9bmV3IHRzKCJtcm93Iixbcl0pKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsdC5ocmVmKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFx1cmwiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidXJsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49eHIoZVswXSwidXJsIikudXJsO2lmKCFyLnNldHRpbmdzLmlzVHJ1c3RlZCh7Y29tbWFuZDoiXFx1cmwiLHVybDpufSkpcmV0dXJuIHIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoIlxcdXJsIik7Zm9yKHZhciBpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXTtzPT09In4iJiYocz0iXFx0ZXh0YXNjaWl0aWxkZSIpLGkucHVzaCh7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsdGV4dDpzfSl9dmFyIGw9e3R5cGU6InRleHQiLG1vZGU6ci5tb2RlLGZvbnQ6IlxcdGV4dHR0Iixib2R5Oml9O3JldHVybnt0eXBlOiJocmVmIixtb2RlOnIubW9kZSxocmVmOm4sYm9keTpnaShsKX19LCJoYW5kbGVyIil9KTtOdCh7dHlwZToiaGJveCIsbmFtZXM6WyJcXGhib3giXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJoYm94Iixtb2RlOnIubW9kZSxib2R5OmdpKGVbMF0pfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj0kaSh0LmJvZHksZSwhMSk7cmV0dXJuIEZlLm1ha2VGcmFnbWVudChyKX0sbWF0aG1sQnVpbGRlcih0LGUpe3JldHVybiBuZXcgZHQuTWF0aE5vZGUoIm1yb3ciLF9zKHQuYm9keSxlKSl9fSk7TnQoe3R5cGU6Imh0bWwiLG5hbWVzOlsiXFxodG1sQ2xhc3MiLCJcXGh0bWxJZCIsIlxcaHRtbFN0eWxlIiwiXFxodG1sRGF0YSJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJyYXciLCJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLHRva2VuOml9PXQsYT14cihlWzBdLCJyYXciKS5zdHJpbmcscz1lWzFdO3Iuc2V0dGluZ3Muc3RyaWN0JiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgiaHRtbEV4dGVuc2lvbiIsIkhUTUwgZXh0ZW5zaW9uIGlzIGRpc2FibGVkIG9uIHN0cmljdCBtb2RlIik7dmFyIGwsdT17fTtzd2l0Y2gobil7Y2FzZSJcXGh0bWxDbGFzcyI6dS5jbGFzcz1hLGw9e2NvbW1hbmQ6IlxcaHRtbENsYXNzIixjbGFzczphfTticmVhaztjYXNlIlxcaHRtbElkIjp1LmlkPWEsbD17Y29tbWFuZDoiXFxodG1sSWQiLGlkOmF9O2JyZWFrO2Nhc2UiXFxodG1sU3R5bGUiOnUuc3R5bGU9YSxsPXtjb21tYW5kOiJcXGh0bWxTdHlsZSIsc3R5bGU6YX07YnJlYWs7Y2FzZSJcXGh0bWxEYXRhIjp7Zm9yKHZhciBoPWEuc3BsaXQoIiwiKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl0uc3BsaXQoIj0iKTtpZihkLmxlbmd0aCE9PTIpdGhyb3cgbmV3IHB0KCJFcnJvciBwYXJzaW5nIGtleS12YWx1ZSBmb3IgXFxodG1sRGF0YSIpO3VbImRhdGEtIitkWzBdLnRyaW0oKV09ZFsxXS50cmltKCl9bD17Y29tbWFuZDoiXFxodG1sRGF0YSIsYXR0cmlidXRlczp1fTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGh0bWwgY29tbWFuZCIpfXJldHVybiByLnNldHRpbmdzLmlzVHJ1c3RlZChsKT97dHlwZToiaHRtbCIsbW9kZTpyLm1vZGUsYXR0cmlidXRlczp1LGJvZHk6Z2kocyl9OnIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQobil9LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPSRpKHQuYm9keSxlLCExKSxuPVsiZW5jbG9zaW5nIl07dC5hdHRyaWJ1dGVzLmNsYXNzJiZuLnB1c2goLi4udC5hdHRyaWJ1dGVzLmNsYXNzLnRyaW0oKS5zcGxpdCgvXHMrLykpO3ZhciBpPUZlLm1ha2VTcGFuKG4scixlKTtmb3IodmFyIGEgaW4gdC5hdHRyaWJ1dGVzKWEhPT0iY2xhc3MiJiZ0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYSkmJmkuc2V0QXR0cmlidXRlKGEsdC5hdHRyaWJ1dGVzW2FdKTtyZXR1cm4gaX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT54aCh0LmJvZHksZSksIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJodG1sbWF0aG1sIixuYW1lczpbIlxcaHRtbEBtYXRobWwiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiaHRtbG1hdGhtbCIsbW9kZTpyLm1vZGUsaHRtbDpnaShlWzBdKSxtYXRobWw6Z2koZVsxXSl9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj0kaSh0Lmh0bWwsZSwhMSk7cmV0dXJuIEZlLm1ha2VGcmFnbWVudChyKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT54aCh0Lm1hdGhtbCxlKSwibWF0aG1sQnVpbGRlciIpfSk7ejc9byhmdW5jdGlvbihlKXtpZigvXlstK10/ICooXGQrKFwuXGQqKT98XC5cZCspJC8udGVzdChlKSlyZXR1cm57bnVtYmVyOitlLHVuaXQ6ImJwIn07dmFyIHI9LyhbLStdPykgKihcZCsoPzpcLlxkKik/fFwuXGQrKSAqKFthLXpdezJ9KS8uZXhlYyhlKTtpZighcil0aHJvdyBuZXcgcHQoIkludmFsaWQgc2l6ZTogJyIrZSsiJyBpbiBcXGluY2x1ZGVncmFwaGljcyIpO3ZhciBuPXtudW1iZXI6KyhyWzFdK3JbMl0pLHVuaXQ6clszXX07aWYoIURHKG4pKXRocm93IG5ldyBwdCgiSW52YWxpZCB1bml0OiAnIituLnVuaXQrIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MuIik7cmV0dXJuIG59LCJzaXplRGF0YSIpO050KHt0eXBlOiJpbmNsdWRlZ3JhcGhpY3MiLG5hbWVzOlsiXFxpbmNsdWRlZ3JhcGhpY3MiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxLGFyZ1R5cGVzOlsicmF3IiwidXJsIl0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcjpvKCh0LGUscik9Pnt2YXJ7cGFyc2VyOm59PXQsaT17bnVtYmVyOjAsdW5pdDoiZW0ifSxhPXtudW1iZXI6LjksdW5pdDoiZW0ifSxzPXtudW1iZXI6MCx1bml0OiJlbSJ9LGw9IiI7aWYoclswXSlmb3IodmFyIHU9eHIoclswXSwicmF3Iikuc3RyaW5nLGg9dS5zcGxpdCgiLCIpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXS5zcGxpdCgiPSIpO2lmKGQubGVuZ3RoPT09Mil7dmFyIHA9ZFsxXS50cmltKCk7c3dpdGNoKGRbMF0udHJpbSgpKXtjYXNlImFsdCI6bD1wO2JyZWFrO2Nhc2Uid2lkdGgiOmk9ejcocCk7YnJlYWs7Y2FzZSJoZWlnaHQiOmE9ejcocCk7YnJlYWs7Y2FzZSJ0b3RhbGhlaWdodCI6cz16NyhwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBwdCgiSW52YWxpZCBrZXk6ICciK2RbMF0rIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MuIil9fX12YXIgbT14cihlWzBdLCJ1cmwiKS51cmw7cmV0dXJuIGw9PT0iIiYmKGw9bSxsPWwucmVwbGFjZSgvXi4qW1xcL10vLCIiKSxsPWwuc3Vic3RyaW5nKDAsbC5sYXN0SW5kZXhPZigiLiIpKSksbi5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaW5jbHVkZWdyYXBoaWNzIix1cmw6bX0pP3t0eXBlOiJpbmNsdWRlZ3JhcGhpY3MiLG1vZGU6bi5tb2RlLGFsdDpsLHdpZHRoOmksaGVpZ2h0OmEsdG90YWxoZWlnaHQ6cyxzcmM6bX06bi5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFxpbmNsdWRlZ3JhcGhpY3MiKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmkodC5oZWlnaHQsZSksbj0wO3QudG90YWxoZWlnaHQubnVtYmVyPjAmJihuPW5pKHQudG90YWxoZWlnaHQsZSktcik7dmFyIGk9MDt0LndpZHRoLm51bWJlcj4wJiYoaT1uaSh0LndpZHRoLGUpKTt2YXIgYT17aGVpZ2h0OkV0KHIrbil9O2k+MCYmKGEud2lkdGg9RXQoaSkpLG4+MCYmKGEudmVydGljYWxBbGlnbj1FdCgtbikpO3ZhciBzPW5ldyBxNyh0LnNyYyx0LmFsdCxhKTtyZXR1cm4gcy5oZWlnaHQ9cixzLmRlcHRoPW4sc30sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGR0Lk1hdGhOb2RlKCJtZ2x5cGgiLFtdKTtyLnNldEF0dHJpYnV0ZSgiYWx0Iix0LmFsdCk7dmFyIG49bmkodC5oZWlnaHQsZSksaT0wO2lmKHQudG90YWxoZWlnaHQubnVtYmVyPjAmJihpPW5pKHQudG90YWxoZWlnaHQsZSktbixyLnNldEF0dHJpYnV0ZSgidmFsaWduIixFdCgtaSkpKSxyLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixFdChuK2kpKSx0LndpZHRoLm51bWJlcj4wKXt2YXIgYT1uaSh0LndpZHRoLGUpO3Iuc2V0QXR0cmlidXRlKCJ3aWR0aCIsRXQoYSkpfXJldHVybiByLnNldEF0dHJpYnV0ZSgic3JjIix0LnNyYykscn0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJrZXJuIixuYW1lczpbIlxca2VybiIsIlxcbWtlcm4iLCJcXGhza2lwIiwiXFxtc2tpcCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJzaXplIl0scHJpbWl0aXZlOiEwLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPXhyKGVbMF0sInNpemUiKTtpZihyLnNldHRpbmdzLnN0cmljdCl7dmFyIGE9blsxXT09PSJtIixzPWkudmFsdWUudW5pdD09PSJtdSI7YT8oc3x8ci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoIm1hdGhWc1RleHRVbml0cyIsIkxhVGVYJ3MgIituKyIgc3VwcG9ydHMgb25seSBtdSB1bml0cywgIisoIm5vdCAiK2kudmFsdWUudW5pdCsiIHVuaXRzIikpLHIubW9kZSE9PSJtYXRoIiYmci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoIm1hdGhWc1RleHRVbml0cyIsIkxhVGVYJ3MgIituKyIgd29ya3Mgb25seSBpbiBtYXRoIG1vZGUiKSk6cyYmci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoIm1hdGhWc1RleHRVbml0cyIsIkxhVGVYJ3MgIituKyIgZG9lc24ndCBzdXBwb3J0IG11IHVuaXRzIil9cmV0dXJue3R5cGU6Imtlcm4iLG1vZGU6ci5tb2RlLGRpbWVuc2lvbjppLnZhbHVlfX0saHRtbEJ1aWxkZXIodCxlKXtyZXR1cm4gRmUubWFrZUdsdWUodC5kaW1lbnNpb24sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uaSh0LmRpbWVuc2lvbixlKTtyZXR1cm4gbmV3IGR0LlNwYWNlTm9kZShyKX19KTtOdCh7dHlwZToibGFwIixuYW1lczpbIlxcbWF0aGxsYXAiLCJcXG1hdGhybGFwIiwiXFxtYXRoY2xhcCJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJsYXAiLG1vZGU6ci5tb2RlLGFsaWdubWVudDpuLnNsaWNlKDUpLGJvZHk6aX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByO3QuYWxpZ25tZW50PT09ImNsYXAiPyhyPUZlLm1ha2VTcGFuKFtdLFskcih0LmJvZHksZSldKSxyPUZlLm1ha2VTcGFuKFsiaW5uZXIiXSxbcl0sZSkpOnI9RmUubWFrZVNwYW4oWyJpbm5lciJdLFskcih0LmJvZHksZSldKTt2YXIgbj1GZS5tYWtlU3BhbihbImZpeCJdLFtdKSxpPUZlLm1ha2VTcGFuKFt0LmFsaWdubWVudF0sW3Isbl0sZSksYT1GZS5tYWtlU3BhbihbInN0cnV0Il0pO3JldHVybiBhLnN0eWxlLmhlaWdodD1FdChpLmhlaWdodCtpLmRlcHRoKSxpLmRlcHRoJiYoYS5zdHlsZS52ZXJ0aWNhbEFsaWduPUV0KC1pLmRlcHRoKSksaS5jaGlsZHJlbi51bnNoaWZ0KGEpLGk9RmUubWFrZVNwYW4oWyJ0aGluYm94Il0sW2ldLGUpLEZlLm1ha2VTcGFuKFsibW9yZCIsInZib3giXSxbaV0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW3ZuKHQuYm9keSxlKV0pO2lmKHQuYWxpZ25tZW50IT09InJsYXAiKXt2YXIgbj10LmFsaWdubWVudD09PSJsbGFwIj8iLTEiOiItMC41IjtyLnNldEF0dHJpYnV0ZSgibHNwYWNlIixuKyJ3aWR0aCIpfXJldHVybiByLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFwoIiwiJCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiExfSxoYW5kbGVyKHQsZSl7dmFye2Z1bmNOYW1lOnIscGFyc2VyOm59PXQsaT1uLm1vZGU7bi5zd2l0Y2hNb2RlKCJtYXRoIik7dmFyIGE9cj09PSJcXCgiPyJcXCkiOiIkIixzPW4ucGFyc2VFeHByZXNzaW9uKCExLGEpO3JldHVybiBuLmV4cGVjdChhKSxuLnN3aXRjaE1vZGUoaSkse3R5cGU6InN0eWxpbmciLG1vZGU6bi5tb2RlLHN0eWxlOiJ0ZXh0Iixib2R5OnN9fX0pO050KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcKSIsIlxcXSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiExfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IHB0KCJNaXNtYXRjaGVkICIrdC5mdW5jTmFtZSl9fSk7cEc9bygodCxlKT0+e3N3aXRjaChlLnN0eWxlLnNpemUpe2Nhc2UgbnIuRElTUExBWS5zaXplOnJldHVybiB0LmRpc3BsYXk7Y2FzZSBuci5URVhULnNpemU6cmV0dXJuIHQudGV4dDtjYXNlIG5yLlNDUklQVC5zaXplOnJldHVybiB0LnNjcmlwdDtjYXNlIG5yLlNDUklQVFNDUklQVC5zaXplOnJldHVybiB0LnNjcmlwdHNjcmlwdDtkZWZhdWx0OnJldHVybiB0LnRleHR9fSwiY2hvb3NlTWF0aFN0eWxlIik7TnQoe3R5cGU6Im1hdGhjaG9pY2UiLG5hbWVzOlsiXFxtYXRoY2hvaWNlIl0scHJvcHM6e251bUFyZ3M6NCxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToibWF0aGNob2ljZSIsbW9kZTpyLm1vZGUsZGlzcGxheTpnaShlWzBdKSx0ZXh0OmdpKGVbMV0pLHNjcmlwdDpnaShlWzJdKSxzY3JpcHRzY3JpcHQ6Z2koZVszXSl9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1wRyh0LGUpLG49JGkocixlLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KG4pfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1wRyh0LGUpO3JldHVybiB4aChyLGUpfSwibWF0aG1sQnVpbGRlciIpfSk7aFY9bygodCxlLHIsbixpLGEscyk9Pnt0PUZlLm1ha2VTcGFuKFtdLFt0XSk7dmFyIGw9ciYmSnQuaXNDaGFyYWN0ZXJCb3gociksdSxoO2lmKGUpe3ZhciBmPSRyKGUsbi5oYXZpbmdTdHlsZShpLnN1cCgpKSxuKTtoPXtlbGVtOmYsa2VybjpNYXRoLm1heChuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMSxuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMy1mLmRlcHRoKX19aWYocil7dmFyIGQ9JHIocixuLmhhdmluZ1N0eWxlKGkuc3ViKCkpLG4pO3U9e2VsZW06ZCxrZXJuOk1hdGgubWF4KG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc0LWQuaGVpZ2h0KX19dmFyIHA7aWYoaCYmdSl7dmFyIG09bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzUrdS5lbGVtLmhlaWdodCt1LmVsZW0uZGVwdGgrdS5rZXJuK3QuZGVwdGgrcztwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTptLGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX0se3R5cGU6ImVsZW0iLGVsZW06dS5lbGVtLG1hcmdpbkxlZnQ6RXQoLWEpfSx7dHlwZToia2VybiIsc2l6ZTp1Lmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOnR9LHt0eXBlOiJrZXJuIixzaXplOmgua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06aC5lbGVtLG1hcmdpbkxlZnQ6RXQoYSl9LHt0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fV19LG4pfWVsc2UgaWYodSl7dmFyIGc9dC5oZWlnaHQtcztwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpnLGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX0se3R5cGU6ImVsZW0iLGVsZW06dS5lbGVtLG1hcmdpbkxlZnQ6RXQoLWEpfSx7dHlwZToia2VybiIsc2l6ZTp1Lmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOnR9XX0sbil9ZWxzZSBpZihoKXt2YXIgeT10LmRlcHRoK3M7cD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6eSxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dH0se3R5cGU6Imtlcm4iLHNpemU6aC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTpoLmVsZW0sbWFyZ2luTGVmdDpFdChhKX0se3R5cGU6Imtlcm4iLHNpemU6bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9XX0sbil9ZWxzZSByZXR1cm4gdDt2YXIgdj1bcF07aWYodSYmYSE9PTAmJiFsKXt2YXIgeD1GZS5tYWtlU3BhbihbIm1zcGFjZSJdLFtdLG4pO3guc3R5bGUubWFyZ2luUmlnaHQ9RXQoYSksdi51bnNoaWZ0KHgpfXJldHVybiBGZS5tYWtlU3BhbihbIm1vcCIsIm9wLWxpbWl0cyJdLHYsbil9LCJhc3NlbWJsZVN1cFN1YiIpLGZWPVsiXFxzbWFsbGludCJdLFMwPW8oKHQsZSk9Pnt2YXIgcixuLGk9ITEsYTt0LnR5cGU9PT0ic3Vwc3ViIj8ocj10LnN1cCxuPXQuc3ViLGE9eHIodC5iYXNlLCJvcCIpLGk9ITApOmE9eHIodCwib3AiKTt2YXIgcz1lLnN0eWxlLGw9ITE7cy5zaXplPT09bnIuRElTUExBWS5zaXplJiZhLnN5bWJvbCYmIUp0LmNvbnRhaW5zKGZWLGEubmFtZSkmJihsPSEwKTt2YXIgdTtpZihhLnN5bWJvbCl7dmFyIGg9bD8iU2l6ZTItUmVndWxhciI6IlNpemUxLVJlZ3VsYXIiLGY9IiI7aWYoKGEubmFtZT09PSJcXG9paW50Inx8YS5uYW1lPT09Ilxcb2lpaW50IikmJihmPWEubmFtZS5zbGljZSgxKSxhLm5hbWU9Zj09PSJvaWludCI/IlxcaWludCI6IlxcaWlpbnQiKSx1PUZlLm1ha2VTeW1ib2woYS5uYW1lLGgsIm1hdGgiLGUsWyJtb3AiLCJvcC1zeW1ib2wiLGw/ImxhcmdlLW9wIjoic21hbGwtb3AiXSksZi5sZW5ndGg+MCl7dmFyIGQ9dS5pdGFsaWMscD1GZS5zdGF0aWNTdmcoZisiU2l6ZSIrKGw/IjIiOiIxIiksZSk7dT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dSxzaGlmdDowfSx7dHlwZToiZWxlbSIsZWxlbTpwLHNoaWZ0Omw/LjA4OjB9XX0sZSksYS5uYW1lPSJcXCIrZix1LmNsYXNzZXMudW5zaGlmdCgibW9wIiksdS5pdGFsaWM9ZH19ZWxzZSBpZihhLmJvZHkpe3ZhciBtPSRpKGEuYm9keSxlLCEwKTttLmxlbmd0aD09PTEmJm1bMF1pbnN0YW5jZW9mIEFzPyh1PW1bMF0sdS5jbGFzc2VzWzBdPSJtb3AiKTp1PUZlLm1ha2VTcGFuKFsibW9wIl0sbSxlKX1lbHNle2Zvcih2YXIgZz1bXSx5PTE7eTxhLm5hbWUubGVuZ3RoO3krKylnLnB1c2goRmUubWF0aHN5bShhLm5hbWVbeV0sYS5tb2RlLGUpKTt1PUZlLm1ha2VTcGFuKFsibW9wIl0sZyxlKX12YXIgdj0wLHg9MDtyZXR1cm4odSBpbnN0YW5jZW9mIEFzfHxhLm5hbWU9PT0iXFxvaWludCJ8fGEubmFtZT09PSJcXG9paWludCIpJiYhYS5zdXBwcmVzc0Jhc2VTaGlmdCYmKHY9KHUuaGVpZ2h0LXUuZGVwdGgpLzItZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQseD11Lml0YWxpYyksaT9oVih1LHIsbixlLHMseCx2KToodiYmKHUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix1LnN0eWxlLnRvcD1FdCh2KSksdSl9LCJodG1sQnVpbGRlciQyIiksdHY9bygodCxlKT0+e3ZhciByO2lmKHQuc3ltYm9sKXI9bmV3IHRzKCJtbyIsW0RvKHQubmFtZSx0Lm1vZGUpXSksSnQuY29udGFpbnMoZlYsdC5uYW1lKSYmci5zZXRBdHRyaWJ1dGUoImxhcmdlb3AiLCJmYWxzZSIpO2Vsc2UgaWYodC5ib2R5KXI9bmV3IHRzKCJtbyIsX3ModC5ib2R5LGUpKTtlbHNle3I9bmV3IHRzKCJtaSIsW25ldyBBbyh0Lm5hbWUuc2xpY2UoMSkpXSk7dmFyIG49bmV3IHRzKCJtbyIsW0RvKCJcdTIwNjEiLCJ0ZXh0IildKTt0LnBhcmVudElzU3VwU3ViP3I9bmV3IHRzKCJtcm93IixbcixuXSk6cj16RyhbcixuXSl9cmV0dXJuIHJ9LCJtYXRobWxCdWlsZGVyJDEiKSxRM2U9eyJcdTIyMEYiOiJcXHByb2QiLCJcdTIyMTAiOiJcXGNvcHJvZCIsIlx1MjIxMSI6Ilxcc3VtIiwiXHUyMkMwIjoiXFxiaWd3ZWRnZSIsIlx1MjJDMSI6IlxcYmlndmVlIiwiXHUyMkMyIjoiXFxiaWdjYXAiLCJcdTIyQzMiOiJcXGJpZ2N1cCIsIlx1MkEwMCI6IlxcYmlnb2RvdCIsIlx1MkEwMSI6IlxcYmlnb3BsdXMiLCJcdTJBMDIiOiJcXGJpZ290aW1lcyIsIlx1MkEwNCI6IlxcYmlndXBsdXMiLCJcdTJBMDYiOiJcXGJpZ3NxY3VwIn07TnQoe3R5cGU6Im9wIixuYW1lczpbIlxcY29wcm9kIiwiXFxiaWd2ZWUiLCJcXGJpZ3dlZGdlIiwiXFxiaWd1cGx1cyIsIlxcYmlnY2FwIiwiXFxiaWdjdXAiLCJcXGludG9wIiwiXFxwcm9kIiwiXFxzdW0iLCJcXGJpZ290aW1lcyIsIlxcYmlnb3BsdXMiLCJcXGJpZ29kb3QiLCJcXGJpZ3NxY3VwIiwiXFxzbWFsbGludCIsIlx1MjIwRiIsIlx1MjIxMCIsIlx1MjIxMSIsIlx1MjJDMCIsIlx1MjJDMSIsIlx1MjJDMiIsIlx1MjJDMyIsIlx1MkEwMCIsIlx1MkEwMSIsIlx1MkEwMiIsIlx1MkEwNCIsIlx1MkEwNiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9bjtyZXR1cm4gaS5sZW5ndGg9PT0xJiYoaT1RM2VbaV0pLHt0eXBlOiJvcCIsbW9kZTpyLm1vZGUsbGltaXRzOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMCxuYW1lOml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOlMwLG1hdGhtbEJ1aWxkZXI6dHZ9KTtOdCh7dHlwZToib3AiLG5hbWVzOlsiXFxtYXRob3AiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToib3AiLG1vZGU6ci5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsYm9keTpnaShuKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6UzAsbWF0aG1sQnVpbGRlcjp0dn0pO1ozZT17Ilx1MjIyQiI6IlxcaW50IiwiXHUyMjJDIjoiXFxpaW50IiwiXHUyMjJEIjoiXFxpaWludCIsIlx1MjIyRSI6Ilxcb2ludCIsIlx1MjIyRiI6Ilxcb2lpbnQiLCJcdTIyMzAiOiJcXG9paWludCJ9O050KHt0eXBlOiJvcCIsbmFtZXM6WyJcXGFyY3NpbiIsIlxcYXJjY29zIiwiXFxhcmN0YW4iLCJcXGFyY3RnIiwiXFxhcmNjdGciLCJcXGFyZyIsIlxcY2giLCJcXGNvcyIsIlxcY29zZWMiLCJcXGNvc2giLCJcXGNvdCIsIlxcY290ZyIsIlxcY290aCIsIlxcY3NjIiwiXFxjdGciLCJcXGN0aCIsIlxcZGVnIiwiXFxkaW0iLCJcXGV4cCIsIlxcaG9tIiwiXFxrZXIiLCJcXGxnIiwiXFxsbiIsIlxcbG9nIiwiXFxzZWMiLCJcXHNpbiIsIlxcc2luaCIsIlxcc2giLCJcXHRhbiIsIlxcdGFuaCIsIlxcdGciLCJcXHRoIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dDtyZXR1cm57dHlwZToib3AiLG1vZGU6ZS5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsbmFtZTpyfX0saHRtbEJ1aWxkZXI6UzAsbWF0aG1sQnVpbGRlcjp0dn0pO050KHt0eXBlOiJvcCIsbmFtZXM6WyJcXGRldCIsIlxcZ2NkIiwiXFxpbmYiLCJcXGxpbSIsIlxcbWF4IiwiXFxtaW4iLCJcXFByIiwiXFxzdXAiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O3JldHVybnt0eXBlOiJvcCIsbW9kZTplLm1vZGUsbGltaXRzOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnJ9fSxodG1sQnVpbGRlcjpTMCxtYXRobWxCdWlsZGVyOnR2fSk7TnQoe3R5cGU6Im9wIixuYW1lczpbIlxcaW50IiwiXFxpaW50IiwiXFxpaWludCIsIlxcb2ludCIsIlxcb2lpbnQiLCJcXG9paWludCIsIlx1MjIyQiIsIlx1MjIyQyIsIlx1MjIyRCIsIlx1MjIyRSIsIlx1MjIyRiIsIlx1MjIzMCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1yO3JldHVybiBuLmxlbmd0aD09PTEmJihuPVozZVtuXSkse3R5cGU6Im9wIixtb2RlOmUubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6bn19LGh0bWxCdWlsZGVyOlMwLG1hdGhtbEJ1aWxkZXI6dHZ9KTtkVj1vKCh0LGUpPT57dmFyIHIsbixpPSExLGE7dC50eXBlPT09InN1cHN1YiI/KHI9dC5zdXAsbj10LnN1YixhPXhyKHQuYmFzZSwib3BlcmF0b3JuYW1lIiksaT0hMCk6YT14cih0LCJvcGVyYXRvcm5hbWUiKTt2YXIgcztpZihhLmJvZHkubGVuZ3RoPjApe2Zvcih2YXIgbD1hLmJvZHkubWFwKGQ9Pnt2YXIgcD1kLnRleHQ7cmV0dXJuIHR5cGVvZiBwPT0ic3RyaW5nIj97dHlwZToidGV4dG9yZCIsbW9kZTpkLm1vZGUsdGV4dDpwfTpkfSksdT0kaShsLGUud2l0aEZvbnQoIm1hdGhybSIpLCEwKSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07ZiBpbnN0YW5jZW9mIEFzJiYoZi50ZXh0PWYudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpKX1zPUZlLm1ha2VTcGFuKFsibW9wIl0sdSxlKX1lbHNlIHM9RmUubWFrZVNwYW4oWyJtb3AiXSxbXSxlKTtyZXR1cm4gaT9oVihzLHIsbixlLGUuc3R5bGUsMCwwKTpzfSwiaHRtbEJ1aWxkZXIkMSIpLEozZT1vKCh0LGUpPT57Zm9yKHZhciByPV9zKHQuYm9keSxlLndpdGhGb250KCJtYXRocm0iKSksbj0hMCxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07aWYoIShhIGluc3RhbmNlb2YgZHQuU3BhY2VOb2RlKSlpZihhIGluc3RhbmNlb2YgZHQuTWF0aE5vZGUpc3dpdGNoKGEudHlwZSl7Y2FzZSJtaSI6Y2FzZSJtbiI6Y2FzZSJtcyI6Y2FzZSJtc3BhY2UiOmNhc2UibXRleHQiOmJyZWFrO2Nhc2UibW8iOnt2YXIgcz1hLmNoaWxkcmVuWzBdO2EuY2hpbGRyZW4ubGVuZ3RoPT09MSYmcyBpbnN0YW5jZW9mIGR0LlRleHROb2RlP3MudGV4dD1zLnRleHQucmVwbGFjZSgvXHUyMjEyLywiLSIpLnJlcGxhY2UoL1x1MjIxNy8sIioiKTpuPSExO2JyZWFrfWRlZmF1bHQ6bj0hMX1lbHNlIG49ITF9aWYobil7dmFyIGw9ci5tYXAoZj0+Zi50b1RleHQoKSkuam9pbigiIik7cj1bbmV3IGR0LlRleHROb2RlKGwpXX12YXIgdT1uZXcgZHQuTWF0aE5vZGUoIm1pIixyKTt1LnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJub3JtYWwiKTt2YXIgaD1uZXcgZHQuTWF0aE5vZGUoIm1vIixbRG8oIlx1MjA2MSIsInRleHQiKV0pO3JldHVybiB0LnBhcmVudElzU3VwU3ViP25ldyBkdC5NYXRoTm9kZSgibXJvdyIsW3UsaF0pOmR0Lm5ld0RvY3VtZW50RnJhZ21lbnQoW3UsaF0pfSwibWF0aG1sQnVpbGRlciIpO050KHt0eXBlOiJvcGVyYXRvcm5hbWUiLG5hbWVzOlsiXFxvcGVyYXRvcm5hbWVAIiwiXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJvcGVyYXRvcm5hbWUiLG1vZGU6ci5tb2RlLGJvZHk6Z2koaSksYWx3YXlzSGFuZGxlU3VwU3ViOm49PT0iXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzIixsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOmRWLG1hdGhtbEJ1aWxkZXI6SjNlfSk7ZmUoIlxcb3BlcmF0b3JuYW1lIiwiXFxAaWZzdGFyXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzXFxvcGVyYXRvcm5hbWVAIik7Y2Qoe3R5cGU6Im9yZGdyb3VwIixodG1sQnVpbGRlcih0LGUpe3JldHVybiB0LnNlbWlzaW1wbGU/RmUubWFrZUZyYWdtZW50KCRpKHQuYm9keSxlLCExKSk6RmUubWFrZVNwYW4oWyJtb3JkIl0sJGkodC5ib2R5LGUsITApLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIHhoKHQuYm9keSxlLCEwKX19KTtOdCh7dHlwZToib3ZlcmxpbmUiLG5hbWVzOlsiXFxvdmVybGluZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJvdmVybGluZSIsbW9kZTpyLm1vZGUsYm9keTpufX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj0kcih0LmJvZHksZS5oYXZpbmdDcmFtcGVkU3R5bGUoKSksbj1GZS5tYWtlTGluZVNwYW4oIm92ZXJsaW5lLWxpbmUiLGUpLGk9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyfSx7dHlwZToia2VybiIsc2l6ZTozKml9LHt0eXBlOiJlbGVtIixlbGVtOm59LHt0eXBlOiJrZXJuIixzaXplOml9XX0sZSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsIm92ZXJsaW5lIl0sW2FdLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW25ldyBkdC5UZXh0Tm9kZSgiXHUyMDNFIildKTtyLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJ0cnVlIik7dmFyIG49bmV3IGR0Lk1hdGhOb2RlKCJtb3ZlciIsW3ZuKHQuYm9keSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnQiLCJ0cnVlIiksbn19KTtOdCh7dHlwZToicGhhbnRvbSIsbmFtZXM6WyJcXHBoYW50b20iXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6InBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6Z2kobil9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj0kaSh0LmJvZHksZS53aXRoUGhhbnRvbSgpLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1fcyh0LmJvZHksZSk7cmV0dXJuIG5ldyBkdC5NYXRoTm9kZSgibXBoYW50b20iLHIpfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6ImhwaGFudG9tIixuYW1lczpbIlxcaHBoYW50b20iXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6ImhwaGFudG9tIixtb2RlOnIubW9kZSxib2R5Om59fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1GZS5tYWtlU3BhbihbXSxbJHIodC5ib2R5LGUud2l0aFBoYW50b20oKSldKTtpZihyLmhlaWdodD0wLHIuZGVwdGg9MCxyLmNoaWxkcmVuKWZvcih2YXIgbj0wO248ci5jaGlsZHJlbi5sZW5ndGg7bisrKXIuY2hpbGRyZW5bbl0uaGVpZ2h0PTAsci5jaGlsZHJlbltuXS5kZXB0aD0wO3JldHVybiByPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKSxGZS5tYWtlU3BhbihbIm1vcmQiXSxbcl0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPV9zKGdpKHQuYm9keSksZSksbj1uZXcgZHQuTWF0aE5vZGUoIm1waGFudG9tIixyKSxpPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW25dKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjBweCIpLGkuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLGl9LCJtYXRobWxCdWlsZGVyIil9KTtOdCh7dHlwZToidnBoYW50b20iLG5hbWVzOlsiXFx2cGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToidnBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6bn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZlLm1ha2VTcGFuKFsiaW5uZXIiXSxbJHIodC5ib2R5LGUud2l0aFBoYW50b20oKSldKSxuPUZlLm1ha2VTcGFuKFsiZml4Il0sW10pO3JldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJybGFwIl0sW3Isbl0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPV9zKGdpKHQuYm9keSksZSksbj1uZXcgZHQuTWF0aE5vZGUoIm1waGFudG9tIixyKSxpPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW25dKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMHB4IiksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJyYWlzZWJveCIsbmFtZXM6WyJcXHJhaXNlYm94Il0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInNpemUiLCJoYm94Il0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPXhyKGVbMF0sInNpemUiKS52YWx1ZSxpPWVbMV07cmV0dXJue3R5cGU6InJhaXNlYm94Iixtb2RlOnIubW9kZSxkeTpuLGJvZHk6aX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9JHIodC5ib2R5LGUpLG49bmkodC5keSxlKTtyZXR1cm4gRmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6LW4sY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFt2bih0LmJvZHksZSldKSxuPXQuZHkubnVtYmVyK3QuZHkudW5pdDtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLG4pLHJ9fSk7TnQoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxccmVsYXgiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplfT10O3JldHVybnt0eXBlOiJpbnRlcm5hbCIsbW9kZTplLm1vZGV9fX0pO050KHt0eXBlOiJydWxlIixuYW1lczpbIlxccnVsZSJdLHByb3BzOntudW1BcmdzOjIsbnVtT3B0aW9uYWxBcmdzOjEsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwLGFyZ1R5cGVzOlsic2l6ZSIsInNpemUiLCJzaXplIl19LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bn09dCxpPXJbMF0sYT14cihlWzBdLCJzaXplIikscz14cihlWzFdLCJzaXplIik7cmV0dXJue3R5cGU6InJ1bGUiLG1vZGU6bi5tb2RlLHNoaWZ0OmkmJnhyKGksInNpemUiKS52YWx1ZSx3aWR0aDphLnZhbHVlLGhlaWdodDpzLnZhbHVlfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1GZS5tYWtlU3BhbihbIm1vcmQiLCJydWxlIl0sW10sZSksbj1uaSh0LndpZHRoLGUpLGk9bmkodC5oZWlnaHQsZSksYT10LnNoaWZ0P25pKHQuc2hpZnQsZSk6MDtyZXR1cm4gci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPUV0KG4pLHIuc3R5bGUuYm9yZGVyVG9wV2lkdGg9RXQoaSksci5zdHlsZS5ib3R0b209RXQoYSksci53aWR0aD1uLHIuaGVpZ2h0PWkrYSxyLmRlcHRoPS1hLHIubWF4Rm9udFNpemU9aSoxLjEyNSplLnNpemVNdWx0aXBsaWVyLHJ9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uaSh0LndpZHRoLGUpLG49bmkodC5oZWlnaHQsZSksaT10LnNoaWZ0P25pKHQuc2hpZnQsZSk6MCxhPWUuY29sb3ImJmUuZ2V0Q29sb3IoKXx8ImJsYWNrIixzPW5ldyBkdC5NYXRoTm9kZSgibXNwYWNlIik7cy5zZXRBdHRyaWJ1dGUoIm1hdGhiYWNrZ3JvdW5kIixhKSxzLnNldEF0dHJpYnV0ZSgid2lkdGgiLEV0KHIpKSxzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixFdChuKSk7dmFyIGw9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbc10pO3JldHVybiBpPj0wP2wuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEV0KGkpKToobC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsRXQoaSkpLGwuc2V0QXR0cmlidXRlKCJkZXB0aCIsRXQoLWkpKSksbC5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLEV0KGkpKSxsfX0pO28ocFYsInNpemluZ0dyb3VwIik7bUc9WyJcXHRpbnkiLCJcXHNpeHB0c2l6ZSIsIlxcc2NyaXB0c2l6ZSIsIlxcZm9vdG5vdGVzaXplIiwiXFxzbWFsbCIsIlxcbm9ybWFsc2l6ZSIsIlxcbGFyZ2UiLCJcXExhcmdlIiwiXFxMQVJHRSIsIlxcaHVnZSIsIlxcSHVnZSJdLGU1ZT1vKCh0LGUpPT57dmFyIHI9ZS5oYXZpbmdTaXplKHQuc2l6ZSk7cmV0dXJuIHBWKHQuYm9keSxyLGUpfSwiaHRtbEJ1aWxkZXIiKTtOdCh7dHlwZToic2l6aW5nIixuYW1lczptRyxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcnticmVha09uVG9rZW5UZXh0OnIsZnVuY05hbWU6bixwYXJzZXI6aX09dCxhPWkucGFyc2VFeHByZXNzaW9uKCExLHIpO3JldHVybnt0eXBlOiJzaXppbmciLG1vZGU6aS5tb2RlLHNpemU6bUcuaW5kZXhPZihuKSsxLGJvZHk6YX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6ZTVlLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWUuaGF2aW5nU2l6ZSh0LnNpemUpLG49X3ModC5ib2R5LHIpLGk9bmV3IGR0Lk1hdGhOb2RlKCJtc3R5bGUiLG4pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgibWF0aHNpemUiLEV0KHIuc2l6ZU11bHRpcGxpZXIpKSxpfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6InNtYXNoIixuYW1lczpbIlxcc21hc2giXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlLHIpPT57dmFye3BhcnNlcjpufT10LGk9ITEsYT0hMSxzPXJbMF0mJnhyKHJbMF0sIm9yZGdyb3VwIik7aWYocylmb3IodmFyIGw9IiIsdT0wO3U8cy5ib2R5Lmxlbmd0aDsrK3Upe3ZhciBoPXMuYm9keVt1XTtpZihsPWgudGV4dCxsPT09InQiKWk9ITA7ZWxzZSBpZihsPT09ImIiKWE9ITA7ZWxzZXtpPSExLGE9ITE7YnJlYWt9fWVsc2UgaT0hMCxhPSEwO3ZhciBmPWVbMF07cmV0dXJue3R5cGU6InNtYXNoIixtb2RlOm4ubW9kZSxib2R5OmYsc21hc2hIZWlnaHQ6aSxzbWFzaERlcHRoOmF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1GZS5tYWtlU3BhbihbXSxbJHIodC5ib2R5LGUpXSk7aWYoIXQuc21hc2hIZWlnaHQmJiF0LnNtYXNoRGVwdGgpcmV0dXJuIHI7aWYodC5zbWFzaEhlaWdodCYmKHIuaGVpZ2h0PTAsci5jaGlsZHJlbikpZm9yKHZhciBuPTA7bjxyLmNoaWxkcmVuLmxlbmd0aDtuKyspci5jaGlsZHJlbltuXS5oZWlnaHQ9MDtpZih0LnNtYXNoRGVwdGgmJihyLmRlcHRoPTAsci5jaGlsZHJlbikpZm9yKHZhciBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspci5jaGlsZHJlbltpXS5kZXB0aD0wO3ZhciBhPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIl0sW2FdLGUpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFt2bih0LmJvZHksZSldKTtyZXR1cm4gdC5zbWFzaEhlaWdodCYmci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjBweCIpLHQuc21hc2hEZXB0aCYmci5zZXRBdHRyaWJ1dGUoImRlcHRoIiwiMHB4Iikscn0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJzcXJ0IixuYW1lczpbIlxcc3FydCJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjF9LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bn09dCxpPXJbMF0sYT1lWzBdO3JldHVybnt0eXBlOiJzcXJ0Iixtb2RlOm4ubW9kZSxib2R5OmEsaW5kZXg6aX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9JHIodC5ib2R5LGUuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO3IuaGVpZ2h0PT09MCYmKHIuaGVpZ2h0PWUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KSxyPUZlLndyYXBGcmFnbWVudChyLGUpO3ZhciBuPWUuZm9udE1ldHJpY3MoKSxpPW4uZGVmYXVsdFJ1bGVUaGlja25lc3MsYT1pO2Uuc3R5bGUuaWQ8bnIuVEVYVC5pZCYmKGE9ZS5mb250TWV0cmljcygpLnhIZWlnaHQpO3ZhciBzPWkrYS80LGw9ci5oZWlnaHQrci5kZXB0aCtzK2kse3NwYW46dSxydWxlV2lkdGg6aCxhZHZhbmNlV2lkdGg6Zn09aHUuc3FydEltYWdlKGwsZSksZD11LmhlaWdodC1oO2Q+ci5oZWlnaHQrci5kZXB0aCtzJiYocz0ocytkLXIuaGVpZ2h0LXIuZGVwdGgpLzIpO3ZhciBwPXUuaGVpZ2h0LXIuaGVpZ2h0LXMtaDtyLnN0eWxlLnBhZGRpbmdMZWZ0PUV0KGYpO3ZhciBtPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cix3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTotKHIuaGVpZ2h0K3ApfSx7dHlwZToiZWxlbSIsZWxlbTp1fSx7dHlwZToia2VybiIsc2l6ZTpofV19LGUpO2lmKHQuaW5kZXgpe3ZhciBnPWUuaGF2aW5nU3R5bGUobnIuU0NSSVBUU0NSSVBUKSx5PSRyKHQuaW5kZXgsZyxlKSx2PS42KihtLmhlaWdodC1tLmRlcHRoKSx4PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi12LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp5fV19LGUpLGI9RmUubWFrZVNwYW4oWyJyb290Il0sW3hdKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwic3FydCJdLFtiLG1dLGUpfWVsc2UgcmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbbV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXJ7Ym9keTpyLGluZGV4Om59PXQ7cmV0dXJuIG4/bmV3IGR0Lk1hdGhOb2RlKCJtcm9vdCIsW3ZuKHIsZSksdm4obixlKV0pOm5ldyBkdC5NYXRoTm9kZSgibXNxcnQiLFt2bihyLGUpXSl9fSk7Z0c9e2Rpc3BsYXk6bnIuRElTUExBWSx0ZXh0Om5yLlRFWFQsc2NyaXB0Om5yLlNDUklQVCxzY3JpcHRzY3JpcHQ6bnIuU0NSSVBUU0NSSVBUfTtOdCh7dHlwZToic3R5bGluZyIsbmFtZXM6WyJcXGRpc3BsYXlzdHlsZSIsIlxcdGV4dHN0eWxlIiwiXFxzY3JpcHRzdHlsZSIsIlxcc2NyaXB0c2NyaXB0c3R5bGUiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQsZSl7dmFye2JyZWFrT25Ub2tlblRleHQ6cixmdW5jTmFtZTpuLHBhcnNlcjppfT10LGE9aS5wYXJzZUV4cHJlc3Npb24oITAscikscz1uLnNsaWNlKDEsbi5sZW5ndGgtNSk7cmV0dXJue3R5cGU6InN0eWxpbmciLG1vZGU6aS5tb2RlLHN0eWxlOnMsYm9keTphfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1nR1t0LnN0eWxlXSxuPWUuaGF2aW5nU3R5bGUocikud2l0aEZvbnQoIiIpO3JldHVybiBwVih0LmJvZHksbixlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPWdHW3Quc3R5bGVdLG49ZS5oYXZpbmdTdHlsZShyKSxpPV9zKHQuYm9keSxuKSxhPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixpKSxzPXtkaXNwbGF5OlsiMCIsInRydWUiXSx0ZXh0OlsiMCIsImZhbHNlIl0sc2NyaXB0OlsiMSIsImZhbHNlIl0sc2NyaXB0c2NyaXB0OlsiMiIsImZhbHNlIl19LGw9c1t0LnN0eWxlXTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInNjcmlwdGxldmVsIixsWzBdKSxhLnNldEF0dHJpYnV0ZSgiZGlzcGxheXN0eWxlIixsWzFdKSxhfX0pO3Q1ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5iYXNlO2lmKG4paWYobi50eXBlPT09Im9wIil7dmFyIGk9bi5saW1pdHMmJihyLnN0eWxlLnNpemU9PT1uci5ESVNQTEFZLnNpemV8fG4uYWx3YXlzSGFuZGxlU3VwU3ViKTtyZXR1cm4gaT9TMDpudWxsfWVsc2UgaWYobi50eXBlPT09Im9wZXJhdG9ybmFtZSIpe3ZhciBhPW4uYWx3YXlzSGFuZGxlU3VwU3ViJiYoci5zdHlsZS5zaXplPT09bnIuRElTUExBWS5zaXplfHxuLmxpbWl0cyk7cmV0dXJuIGE/ZFY6bnVsbH1lbHNle2lmKG4udHlwZT09PSJhY2NlbnQiKXJldHVybiBKdC5pc0NoYXJhY3RlckJveChuLmJhc2UpP2xBOm51bGw7aWYobi50eXBlPT09Imhvcml6QnJhY2UiKXt2YXIgcz0hZS5zdWI7cmV0dXJuIHM9PT1uLmlzT3Zlcj91VjpudWxsfWVsc2UgcmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gbnVsbH0sImh0bWxCdWlsZGVyRGVsZWdhdGUiKTtjZCh7dHlwZToic3Vwc3ViIixodG1sQnVpbGRlcih0LGUpe3ZhciByPXQ1ZSh0LGUpO2lmKHIpcmV0dXJuIHIodCxlKTt2YXJ7YmFzZTpuLHN1cDppLHN1YjphfT10LHM9JHIobixlKSxsLHUsaD1lLmZvbnRNZXRyaWNzKCksZj0wLGQ9MCxwPW4mJkp0LmlzQ2hhcmFjdGVyQm94KG4pO2lmKGkpe3ZhciBtPWUuaGF2aW5nU3R5bGUoZS5zdHlsZS5zdXAoKSk7bD0kcihpLG0sZSkscHx8KGY9cy5oZWlnaHQtbS5mb250TWV0cmljcygpLnN1cERyb3AqbS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyKX1pZihhKXt2YXIgZz1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3ViKCkpO3U9JHIoYSxnLGUpLHB8fChkPXMuZGVwdGgrZy5mb250TWV0cmljcygpLnN1YkRyb3AqZy5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyKX12YXIgeTtlLnN0eWxlPT09bnIuRElTUExBWT95PWguc3VwMTplLnN0eWxlLmNyYW1wZWQ/eT1oLnN1cDM6eT1oLnN1cDI7dmFyIHY9ZS5zaXplTXVsdGlwbGllcix4PUV0KC41L2gucHRQZXJFbS92KSxiPW51bGw7aWYodSl7dmFyIFQ9dC5iYXNlJiZ0LmJhc2UudHlwZT09PSJvcCImJnQuYmFzZS5uYW1lJiYodC5iYXNlLm5hbWU9PT0iXFxvaWludCJ8fHQuYmFzZS5uYW1lPT09Ilxcb2lpaW50Iik7KHMgaW5zdGFuY2VvZiBBc3x8VCkmJihiPUV0KC1zLml0YWxpYykpfXZhciBTO2lmKGwmJnUpe2Y9TWF0aC5tYXgoZix5LGwuZGVwdGgrLjI1KmgueEhlaWdodCksZD1NYXRoLm1heChkLGguc3ViMik7dmFyIHc9aC5kZWZhdWx0UnVsZVRoaWNrbmVzcyxFPTQqdztpZihmLWwuZGVwdGgtKHUuaGVpZ2h0LWQpPEUpe2Q9RS0oZi1sLmRlcHRoKSt1LmhlaWdodDt2YXIgXz0uOCpoLnhIZWlnaHQtKGYtbC5kZXB0aCk7Xz4wJiYoZis9XyxkLT1fKX12YXIgQz1be3R5cGU6ImVsZW0iLGVsZW06dSxzaGlmdDpkLG1hcmdpblJpZ2h0OngsbWFyZ2luTGVmdDpifSx7dHlwZToiZWxlbSIsZWxlbTpsLHNoaWZ0Oi1mLG1hcmdpblJpZ2h0Onh9XTtTPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOkN9LGUpfWVsc2UgaWYodSl7ZD1NYXRoLm1heChkLGguc3ViMSx1LmhlaWdodC0uOCpoLnhIZWlnaHQpO3ZhciBEPVt7dHlwZToiZWxlbSIsZWxlbTp1LG1hcmdpbkxlZnQ6YixtYXJnaW5SaWdodDp4fV07Uz1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTpkLGNoaWxkcmVuOkR9LGUpfWVsc2UgaWYobClmPU1hdGgubWF4KGYseSxsLmRlcHRoKy4yNSpoLnhIZWlnaHQpLFM9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6LWYsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmwsbWFyZ2luUmlnaHQ6eH1dfSxlKTtlbHNlIHRocm93IG5ldyBFcnJvcigic3Vwc3ViIG11c3QgaGF2ZSBlaXRoZXIgc3VwIG9yIHN1Yi4iKTt2YXIgTz1YNyhzLCJyaWdodCIpfHwibW9yZCI7cmV0dXJuIEZlLm1ha2VTcGFuKFtPXSxbcyxGZS5tYWtlU3BhbihbIm1zdXBzdWIiXSxbU10pXSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPSExLG4saTt0LmJhc2UmJnQuYmFzZS50eXBlPT09Imhvcml6QnJhY2UiJiYoaT0hIXQuc3VwLGk9PT10LmJhc2UuaXNPdmVyJiYocj0hMCxuPXQuYmFzZS5pc092ZXIpKSx0LmJhc2UmJih0LmJhc2UudHlwZT09PSJvcCJ8fHQuYmFzZS50eXBlPT09Im9wZXJhdG9ybmFtZSIpJiYodC5iYXNlLnBhcmVudElzU3VwU3ViPSEwKTt2YXIgYT1bdm4odC5iYXNlLGUpXTt0LnN1YiYmYS5wdXNoKHZuKHQuc3ViLGUpKSx0LnN1cCYmYS5wdXNoKHZuKHQuc3VwLGUpKTt2YXIgcztpZihyKXM9bj8ibW92ZXIiOiJtdW5kZXIiO2Vsc2UgaWYodC5zdWIpaWYodC5zdXApe3ZhciBoPXQuYmFzZTtoJiZoLnR5cGU9PT0ib3AiJiZoLmxpbWl0cyYmZS5zdHlsZT09PW5yLkRJU1BMQVl8fGgmJmgudHlwZT09PSJvcGVyYXRvcm5hbWUiJiZoLmFsd2F5c0hhbmRsZVN1cFN1YiYmKGUuc3R5bGU9PT1uci5ESVNQTEFZfHxoLmxpbWl0cyk/cz0ibXVuZGVyb3ZlciI6cz0ibXN1YnN1cCJ9ZWxzZXt2YXIgdT10LmJhc2U7dSYmdS50eXBlPT09Im9wIiYmdS5saW1pdHMmJihlLnN0eWxlPT09bnIuRElTUExBWXx8dS5hbHdheXNIYW5kbGVTdXBTdWIpfHx1JiZ1LnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmdS5hbHdheXNIYW5kbGVTdXBTdWImJih1LmxpbWl0c3x8ZS5zdHlsZT09PW5yLkRJU1BMQVkpP3M9Im11bmRlciI6cz0ibXN1YiJ9ZWxzZXt2YXIgbD10LmJhc2U7bCYmbC50eXBlPT09Im9wIiYmbC5saW1pdHMmJihlLnN0eWxlPT09bnIuRElTUExBWXx8bC5hbHdheXNIYW5kbGVTdXBTdWIpfHxsJiZsLnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmbC5hbHdheXNIYW5kbGVTdXBTdWImJihsLmxpbWl0c3x8ZS5zdHlsZT09PW5yLkRJU1BMQVkpP3M9Im1vdmVyIjpzPSJtc3VwIn1yZXR1cm4gbmV3IGR0Lk1hdGhOb2RlKHMsYSl9fSk7Y2Qoe3R5cGU6ImF0b20iLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEZlLm1hdGhzeW0odC50ZXh0LHQubW9kZSxlLFsibSIrdC5mYW1pbHldKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtEbyh0LnRleHQsdC5tb2RlKV0pO2lmKHQuZmFtaWx5PT09ImJpbiIpe3ZhciBuPXNBKHQsZSk7bj09PSJib2xkLWl0YWxpYyImJnIuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbil9ZWxzZSB0LmZhbWlseT09PSJwdW5jdCI/ci5zZXRBdHRyaWJ1dGUoInNlcGFyYXRvciIsInRydWUiKToodC5mYW1pbHk9PT0ib3BlbiJ8fHQuZmFtaWx5PT09ImNsb3NlIikmJnIuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsImZhbHNlIik7cmV0dXJuIHJ9fSk7bVY9e21pOiJpdGFsaWMiLG1uOiJub3JtYWwiLG10ZXh0OiJub3JtYWwifTtjZCh7dHlwZToibWF0aG9yZCIsaHRtbEJ1aWxkZXIodCxlKXtyZXR1cm4gRmUubWFrZU9yZCh0LGUsIm1hdGhvcmQiKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibWkiLFtEbyh0LnRleHQsdC5tb2RlLGUpXSksbj1zQSh0LGUpfHwiaXRhbGljIjtyZXR1cm4gbiE9PW1WW3IudHlwZV0mJnIuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbikscn19KTtjZCh7dHlwZToidGV4dG9yZCIsaHRtbEJ1aWxkZXIodCxlKXtyZXR1cm4gRmUubWFrZU9yZCh0LGUsInRleHRvcmQiKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPURvKHQudGV4dCx0Lm1vZGUsZSksbj1zQSh0LGUpfHwibm9ybWFsIixpO3JldHVybiB0Lm1vZGU9PT0idGV4dCI/aT1uZXcgZHQuTWF0aE5vZGUoIm10ZXh0Iixbcl0pOi9bMC05XS8udGVzdCh0LnRleHQpP2k9bmV3IGR0Lk1hdGhOb2RlKCJtbiIsW3JdKTp0LnRleHQ9PT0iXFxwcmltZSI/aT1uZXcgZHQuTWF0aE5vZGUoIm1vIixbcl0pOmk9bmV3IGR0Lk1hdGhOb2RlKCJtaSIsW3JdKSxuIT09bVZbaS50eXBlXSYmaS5zZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50IixuKSxpfX0pO0c3PXsiXFxub2JyZWFrIjoibm9icmVhayIsIlxcYWxsb3dicmVhayI6ImFsbG93YnJlYWsifSxWNz17IiAiOnt9LCJcXCAiOnt9LCJ+Ijp7Y2xhc3NOYW1lOiJub2JyZWFrIn0sIlxcc3BhY2UiOnt9LCJcXG5vYnJlYWtzcGFjZSI6e2NsYXNzTmFtZToibm9icmVhayJ9fTtjZCh7dHlwZToic3BhY2luZyIsaHRtbEJ1aWxkZXIodCxlKXtpZihWNy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXt2YXIgcj1WN1t0LnRleHRdLmNsYXNzTmFtZXx8IiI7aWYodC5tb2RlPT09InRleHQiKXt2YXIgbj1GZS5tYWtlT3JkKHQsZSwidGV4dG9yZCIpO3JldHVybiBuLmNsYXNzZXMucHVzaChyKSxufWVsc2UgcmV0dXJuIEZlLm1ha2VTcGFuKFsibXNwYWNlIixyXSxbRmUubWF0aHN5bSh0LnRleHQsdC5tb2RlLGUpXSxlKX1lbHNle2lmKEc3Lmhhc093blByb3BlcnR5KHQudGV4dCkpcmV0dXJuIEZlLm1ha2VTcGFuKFsibXNwYWNlIixHN1t0LnRleHRdXSxbXSxlKTt0aHJvdyBuZXcgcHQoJ1Vua25vd24gdHlwZSBvZiBzcGFjZSAiJyt0LnRleHQrJyInKX19LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcjtpZihWNy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXI9bmV3IGR0Lk1hdGhOb2RlKCJtdGV4dCIsW25ldyBkdC5UZXh0Tm9kZSgiXHhBMCIpXSk7ZWxzZXtpZihHNy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXJldHVybiBuZXcgZHQuTWF0aE5vZGUoIm1zcGFjZSIpO3Rocm93IG5ldyBwdCgnVW5rbm93biB0eXBlIG9mIHNwYWNlICInK3QudGV4dCsnIicpfXJldHVybiByfX0pO3lHPW8oKCk9Pnt2YXIgdD1uZXcgZHQuTWF0aE5vZGUoIm10ZCIsW10pO3JldHVybiB0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCI1MCUiKSx0fSwicGFkIik7Y2Qoe3R5cGU6InRhZyIsbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibXRhYmxlIixbbmV3IGR0Lk1hdGhOb2RlKCJtdHIiLFt5RygpLG5ldyBkdC5NYXRoTm9kZSgibXRkIixbeGgodC5ib2R5LGUpXSkseUcoKSxuZXcgZHQuTWF0aE5vZGUoIm10ZCIsW3hoKHQudGFnLGUpXSldKV0pO3JldHVybiByLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIikscn19KTt2Rz17IlxcdGV4dCI6dm9pZCAwLCJcXHRleHRybSI6InRleHRybSIsIlxcdGV4dHNmIjoidGV4dHNmIiwiXFx0ZXh0dHQiOiJ0ZXh0dHQiLCJcXHRleHRub3JtYWwiOiJ0ZXh0cm0ifSx4Rz17IlxcdGV4dGJmIjoidGV4dGJmIiwiXFx0ZXh0bWQiOiJ0ZXh0bWQifSxyNWU9eyJcXHRleHRpdCI6InRleHRpdCIsIlxcdGV4dHVwIjoidGV4dHVwIn0sYkc9bygodCxlKT0+e3ZhciByPXQuZm9udDtpZihyKXtpZih2R1tyXSlyZXR1cm4gZS53aXRoVGV4dEZvbnRGYW1pbHkodkdbcl0pO2lmKHhHW3JdKXJldHVybiBlLndpdGhUZXh0Rm9udFdlaWdodCh4R1tyXSk7aWYocj09PSJcXGVtcGgiKXJldHVybiBlLmZvbnRTaGFwZT09PSJ0ZXh0aXQiP2Uud2l0aFRleHRGb250U2hhcGUoInRleHR1cCIpOmUud2l0aFRleHRGb250U2hhcGUoInRleHRpdCIpfWVsc2UgcmV0dXJuIGU7cmV0dXJuIGUud2l0aFRleHRGb250U2hhcGUocjVlW3JdKX0sIm9wdGlvbnNXaXRoRm9udCIpO050KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcdGV4dCIsIlxcdGV4dHJtIiwiXFx0ZXh0c2YiLCJcXHRleHR0dCIsIlxcdGV4dG5vcm1hbCIsIlxcdGV4dGJmIiwiXFx0ZXh0bWQiLCJcXHRleHRpdCIsIlxcdGV4dHVwIiwiXFxlbXBoIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInRleHQiXSxhbGxvd2VkSW5Bcmd1bWVudDohMCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJ0ZXh0Iixtb2RlOnIubW9kZSxib2R5OmdpKGkpLGZvbnQ6bn19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9YkcodCxlKSxuPSRpKHQuYm9keSxyLCEwKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwidGV4dCJdLG4scil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1iRyh0LGUpO3JldHVybiB4aCh0LmJvZHkscil9fSk7TnQoe3R5cGU6InVuZGVybGluZSIsbmFtZXM6WyJcXHVuZGVybGluZSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToidW5kZXJsaW5lIixtb2RlOnIubW9kZSxib2R5OmVbMF19fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPSRyKHQuYm9keSxlKSxuPUZlLm1ha2VMaW5lU3BhbigidW5kZXJsaW5lLWxpbmUiLGUpLGk9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOnIuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTppfSx7dHlwZToiZWxlbSIsZWxlbTpufSx7dHlwZToia2VybiIsc2l6ZTozKml9LHt0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInVuZGVybGluZSJdLFthXSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUoIlx1MjAzRSIpXSk7ci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBuPW5ldyBkdC5NYXRoTm9kZSgibXVuZGVyIixbdm4odC5ib2R5LGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLG59fSk7TnQoe3R5cGU6InZjZW50ZXIiLG5hbWVzOlsiXFx2Y2VudGVyIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToidmNlbnRlciIsbW9kZTpyLm1vZGUsYm9keTplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj0kcih0LmJvZHksZSksbj1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCxpPS41KihyLmhlaWdodC1uLShyLmRlcHRoK24pKTtyZXR1cm4gRmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6aSxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3JldHVybiBuZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFt2bih0LmJvZHksZSldLFsidmNlbnRlciJdKX19KTtOdCh7dHlwZToidmVyYiIsbmFtZXM6WyJcXHZlcmIiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlLHIpe3Rocm93IG5ldyBwdCgiXFx2ZXJiIGVuZGVkIGJ5IGVuZCBvZiBsaW5lIGluc3RlYWQgb2YgbWF0Y2hpbmcgZGVsaW1pdGVyIil9LGh0bWxCdWlsZGVyKHQsZSl7Zm9yKHZhciByPVRHKHQpLG49W10saT1lLmhhdmluZ1N0eWxlKGUuc3R5bGUudGV4dCgpKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07cz09PSJ+IiYmKHM9IlxcdGV4dGFzY2lpdGlsZGUiKSxuLnB1c2goRmUubWFrZVN5bWJvbChzLCJUeXBld3JpdGVyLVJlZ3VsYXIiLHQubW9kZSxpLFsibW9yZCIsInRleHR0dCJdKSl9cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInRleHQiXS5jb25jYXQoaS5zaXppbmdDbGFzc2VzKGUpKSxGZS50cnlDb21iaW5lQ2hhcnMobiksaSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuVGV4dE5vZGUoVEcodCkpLG49bmV3IGR0Lk1hdGhOb2RlKCJtdGV4dCIsW3JdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50IiwibW9ub3NwYWNlIiksbn19KTtURz1vKHQ9PnQuYm9keS5yZXBsYWNlKC8gL2csdC5zdGFyPyJcdTI0MjMiOiJceEEwIiksIm1ha2VWZXJiIikseWg9RkcsZ1Y9YFsgXHIKCV1gLG41ZT0iXFxcXFthLXpBLVpAXSsiLGk1ZT0iXFxcXFteXHVEODAwLVx1REZGRl0iLGE1ZT0iKCIrbjVlKyIpIitnVisiKiIsczVlPWBcXFxcKAp8WyBccgldKwo/KVsgXHIJXSpgLEo3PSJbXHUwMzAwLVx1MDM2Rl0iLG81ZT1uZXcgUmVnRXhwKEo3KyIrJCIpLGw1ZT0iKCIrZ1YrIispfCIrKHM1ZSsifCIpKyIoWyEtXFxbXFxdLVx1MjAyN1x1MjAyQS1cdUQ3RkZcdUY5MDAtXHVGRkZGXSIrKEo3KyIqIikrInxbXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0iKyhKNysiKiIpKyJ8XFxcXHZlcmJcXCooW15dKS4qP1xcNHxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcNSIrKCJ8IithNWUpKygifCIraTVlKyIpIiksQTM9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuaW5wdXQ9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMudG9rZW5SZWdleD12b2lkIDAsdGhpcy5jYXRjb2Rlcz12b2lkIDAsdGhpcy5pbnB1dD1lLHRoaXMuc2V0dGluZ3M9cix0aGlzLnRva2VuUmVnZXg9bmV3IFJlZ0V4cChsNWUsImciKSx0aGlzLmNhdGNvZGVzPXsiJSI6MTQsIn4iOjEzfX1zZXRDYXRjb2RlKGUscil7dGhpcy5jYXRjb2Rlc1tlXT1yfWxleCgpe3ZhciBlPXRoaXMuaW5wdXQscj10aGlzLnRva2VuUmVnZXgubGFzdEluZGV4O2lmKHI9PT1lLmxlbmd0aClyZXR1cm4gbmV3IF9vKCJFT0YiLG5ldyBRcyh0aGlzLHIscikpO3ZhciBuPXRoaXMudG9rZW5SZWdleC5leGVjKGUpO2lmKG49PT1udWxsfHxuLmluZGV4IT09cil0aHJvdyBuZXcgcHQoIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnIitlW3JdKyInIixuZXcgX28oZVtyXSxuZXcgUXModGhpcyxyLHIrMSkpKTt2YXIgaT1uWzZdfHxuWzNdfHwoblsyXT8iXFwgIjoiICIpO2lmKHRoaXMuY2F0Y29kZXNbaV09PT0xNCl7dmFyIGE9ZS5pbmRleE9mKGAKYCx0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KTtyZXR1cm4gYT09PS0xPyh0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4PWUubGVuZ3RoLHRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJjb21tZW50QXRFbmQiLCIlIGNvbW1lbnQgaGFzIG5vIHRlcm1pbmF0aW5nIG5ld2xpbmU7IExhVGVYIHdvdWxkIGZhaWwgYmVjYXVzZSBvZiBjb21tZW50aW5nIHRoZSBlbmQgb2YgbWF0aCBtb2RlIChlLmcuICQpIikpOnRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg9YSsxLHRoaXMubGV4KCl9cmV0dXJuIG5ldyBfbyhpLG5ldyBRcyh0aGlzLHIsdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCkpfX0sZUE9Y2xhc3N7c3RhdGlje28odGhpcywiTmFtZXNwYWNlIil9Y29uc3RydWN0b3IoZSxyKXtlPT09dm9pZCAwJiYoZT17fSkscj09PXZvaWQgMCYmKHI9e30pLHRoaXMuY3VycmVudD12b2lkIDAsdGhpcy5idWlsdGlucz12b2lkIDAsdGhpcy51bmRlZlN0YWNrPXZvaWQgMCx0aGlzLmN1cnJlbnQ9cix0aGlzLmJ1aWx0aW5zPWUsdGhpcy51bmRlZlN0YWNrPVtdfWJlZ2luR3JvdXAoKXt0aGlzLnVuZGVmU3RhY2sucHVzaCh7fSl9ZW5kR3JvdXAoKXtpZih0aGlzLnVuZGVmU3RhY2subGVuZ3RoPT09MCl0aHJvdyBuZXcgcHQoIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IHRvIHBvcCBnbG9iYWwgbmFtZXNwYWNlOyBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWciKTt2YXIgZT10aGlzLnVuZGVmU3RhY2sucG9wKCk7Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09PW51bGw/ZGVsZXRlIHRoaXMuY3VycmVudFtyXTp0aGlzLmN1cnJlbnRbcl09ZVtyXSl9ZW5kR3JvdXBzKCl7Zm9yKDt0aGlzLnVuZGVmU3RhY2subGVuZ3RoPjA7KXRoaXMuZW5kR3JvdXAoKX1oYXMoZSl7cmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShlKXx8dGhpcy5idWlsdGlucy5oYXNPd25Qcm9wZXJ0eShlKX1nZXQoZSl7cmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShlKT90aGlzLmN1cnJlbnRbZV06dGhpcy5idWlsdGluc1tlXX1zZXQoZSxyLG4pe2lmKG49PT12b2lkIDAmJihuPSExKSxuKXtmb3IodmFyIGk9MDtpPHRoaXMudW5kZWZTdGFjay5sZW5ndGg7aSsrKWRlbGV0ZSB0aGlzLnVuZGVmU3RhY2tbaV1bZV07dGhpcy51bmRlZlN0YWNrLmxlbmd0aD4wJiYodGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGgtMV1bZV09cil9ZWxzZXt2YXIgYT10aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aC0xXTthJiYhYS5oYXNPd25Qcm9wZXJ0eShlKSYmKGFbZV09dGhpcy5jdXJyZW50W2VdKX1yPT1udWxsP2RlbGV0ZSB0aGlzLmN1cnJlbnRbZV06dGhpcy5jdXJyZW50W2VdPXJ9fSxjNWU9YVY7ZmUoIlxcbm9leHBhbmQiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9wVG9rZW4oKTtyZXR1cm4gdC5pc0V4cGFuZGFibGUoZS50ZXh0KSYmKGUubm9leHBhbmQ9ITAsZS50cmVhdEFzUmVsYXg9ITApLHt0b2tlbnM6W2VdLG51bUFyZ3M6MH19KTtmZSgiXFxleHBhbmRhZnRlciIsZnVuY3Rpb24odCl7dmFyIGU9dC5wb3BUb2tlbigpO3JldHVybiB0LmV4cGFuZE9uY2UoITApLHt0b2tlbnM6W2VdLG51bUFyZ3M6MH19KTtmZSgiXFxAZmlyc3RvZnR3byIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOmVbMF0sbnVtQXJnczowfX0pO2ZlKCJcXEBzZWNvbmRvZnR3byIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOmVbMV0sbnVtQXJnczowfX0pO2ZlKCJcXEBpZm5leHRjaGFyIixmdW5jdGlvbih0KXt2YXIgZT10LmNvbnN1bWVBcmdzKDMpO3QuY29uc3VtZVNwYWNlcygpO3ZhciByPXQuZnV0dXJlKCk7cmV0dXJuIGVbMF0ubGVuZ3RoPT09MSYmZVswXVswXS50ZXh0PT09ci50ZXh0P3t0b2tlbnM6ZVsxXSxudW1BcmdzOjB9Ont0b2tlbnM6ZVsyXSxudW1BcmdzOjB9fSk7ZmUoIlxcQGlmc3RhciIsIlxcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX0iKTtmZSgiXFxUZXh0T3JNYXRoIixmdW5jdGlvbih0KXt2YXIgZT10LmNvbnN1bWVBcmdzKDIpO3JldHVybiB0Lm1vZGU9PT0idGV4dCI/e3Rva2VuczplWzBdLG51bUFyZ3M6MH06e3Rva2VuczplWzFdLG51bUFyZ3M6MH19KTt3Rz17MDowLDE6MSwyOjIsMzozLDQ6NCw1OjUsNjo2LDc6Nyw4OjgsOTo5LGE6MTAsQToxMCxiOjExLEI6MTEsYzoxMixDOjEyLGQ6MTMsRDoxMyxlOjE0LEU6MTQsZjoxNSxGOjE1fTtmZSgiXFxjaGFyIixmdW5jdGlvbih0KXt2YXIgZT10LnBvcFRva2VuKCkscixuPSIiO2lmKGUudGV4dD09PSInIilyPTgsZT10LnBvcFRva2VuKCk7ZWxzZSBpZihlLnRleHQ9PT0nIicpcj0xNixlPXQucG9wVG9rZW4oKTtlbHNlIGlmKGUudGV4dD09PSJgIilpZihlPXQucG9wVG9rZW4oKSxlLnRleHRbMF09PT0iXFwiKW49ZS50ZXh0LmNoYXJDb2RlQXQoMSk7ZWxzZXtpZihlLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgcHQoIlxcY2hhcmAgbWlzc2luZyBhcmd1bWVudCIpO249ZS50ZXh0LmNoYXJDb2RlQXQoMCl9ZWxzZSByPTEwO2lmKHIpe2lmKG49d0dbZS50ZXh0XSxuPT1udWxsfHxuPj1yKXRocm93IG5ldyBwdCgiSW52YWxpZCBiYXNlLSIrcisiIGRpZ2l0ICIrZS50ZXh0KTtmb3IodmFyIGk7KGk9d0dbdC5mdXR1cmUoKS50ZXh0XSkhPW51bGwmJmk8cjspbio9cixuKz1pLHQucG9wVG9rZW4oKX1yZXR1cm4iXFxAY2hhcnsiK24rIn0ifSk7Z0E9bygodCxlLHIsbik9Pnt2YXIgaT10LmNvbnN1bWVBcmcoKS50b2tlbnM7aWYoaS5sZW5ndGghPT0xKXRocm93IG5ldyBwdCgiXFxuZXdjb21tYW5kJ3MgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIG1hY3JvIG5hbWUiKTt2YXIgYT1pWzBdLnRleHQscz10LmlzRGVmaW5lZChhKTtpZihzJiYhZSl0aHJvdyBuZXcgcHQoIlxcbmV3Y29tbWFuZHsiK2ErIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSAiKyhhKyI7IHVzZSBcXHJlbmV3Y29tbWFuZCIpKTtpZighcyYmIXIpdGhyb3cgbmV3IHB0KCJcXHJlbmV3Y29tbWFuZHsiK2ErIn0gd2hlbiBjb21tYW5kICIrYSsiIGRvZXMgbm90IHlldCBleGlzdDsgdXNlIFxcbmV3Y29tbWFuZCIpO3ZhciBsPTA7aWYoaT10LmNvbnN1bWVBcmcoKS50b2tlbnMsaS5sZW5ndGg9PT0xJiZpWzBdLnRleHQ9PT0iWyIpe2Zvcih2YXIgdT0iIixoPXQuZXhwYW5kTmV4dFRva2VuKCk7aC50ZXh0IT09Il0iJiZoLnRleHQhPT0iRU9GIjspdSs9aC50ZXh0LGg9dC5leHBhbmROZXh0VG9rZW4oKTtpZighdS5tYXRjaCgvXlxzKlswLTldK1xzKiQvKSl0aHJvdyBuZXcgcHQoIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogIit1KTtsPXBhcnNlSW50KHUpLGk9dC5jb25zdW1lQXJnKCkudG9rZW5zfXJldHVybiBzJiZufHx0Lm1hY3Jvcy5zZXQoYSx7dG9rZW5zOmksbnVtQXJnczpsfSksIiJ9LCJuZXdjb21tYW5kIik7ZmUoIlxcbmV3Y29tbWFuZCIsdD0+Z0EodCwhMSwhMCwhMSkpO2ZlKCJcXHJlbmV3Y29tbWFuZCIsdD0+Z0EodCwhMCwhMSwhMSkpO2ZlKCJcXHByb3ZpZGVjb21tYW5kIix0PT5nQSh0LCEwLCEwLCEwKSk7ZmUoIlxcbWVzc2FnZSIsdD0+e3ZhciBlPXQuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUubG9nKGUucmV2ZXJzZSgpLm1hcChyPT5yLnRleHQpLmpvaW4oIiIpKSwiIn0pO2ZlKCJcXGVycm1lc3NhZ2UiLHQ9Pnt2YXIgZT10LmNvbnN1bWVBcmdzKDEpWzBdO3JldHVybiBjb25zb2xlLmVycm9yKGUucmV2ZXJzZSgpLm1hcChyPT5yLnRleHQpLmpvaW4oIiIpKSwiIn0pO2ZlKCJcXHNob3ciLHQ9Pnt2YXIgZT10LnBvcFRva2VuKCkscj1lLnRleHQ7cmV0dXJuIGNvbnNvbGUubG9nKGUsdC5tYWNyb3MuZ2V0KHIpLHloW3JdLEFuLm1hdGhbcl0sQW4udGV4dFtyXSksIiJ9KTtmZSgiXFxiZ3JvdXAiLCJ7Iik7ZmUoIlxcZWdyb3VwIiwifSIpO2ZlKCJ+IiwiXFxub2JyZWFrc3BhY2UiKTtmZSgiXFxscSIsImAiKTtmZSgiXFxycSIsIiciKTtmZSgiXFxhYSIsIlxcciBhIik7ZmUoIlxcQUEiLCJcXHIgQSIpO2ZlKCJcXHRleHRjb3B5cmlnaHQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7Y319e1xcY2hhcmBceEE5fSIpO2ZlKCJcXGNvcHlyaWdodCIsIlxcVGV4dE9yTWF0aHtcXHRleHRjb3B5cmlnaHR9e1xcdGV4dHtcXHRleHRjb3B5cmlnaHR9fSIpO2ZlKCJcXHRleHRyZWdpc3RlcmVkIiwiXFxodG1sQG1hdGhtbHtcXHRleHRjaXJjbGVke1xcc2NyaXB0c2l6ZSBSfX17XFxjaGFyYFx4QUV9Iik7ZmUoIlx1MjEyQyIsIlxcbWF0aHNjcntCfSIpO2ZlKCJcdTIxMzAiLCJcXG1hdGhzY3J7RX0iKTtmZSgiXHUyMTMxIiwiXFxtYXRoc2Nye0Z9Iik7ZmUoIlx1MjEwQiIsIlxcbWF0aHNjcntIfSIpO2ZlKCJcdTIxMTAiLCJcXG1hdGhzY3J7SX0iKTtmZSgiXHUyMTEyIiwiXFxtYXRoc2Nye0x9Iik7ZmUoIlx1MjEzMyIsIlxcbWF0aHNjcntNfSIpO2ZlKCJcdTIxMUIiLCJcXG1hdGhzY3J7Un0iKTtmZSgiXHUyMTJEIiwiXFxtYXRoZnJha3tDfSIpO2ZlKCJcdTIxMEMiLCJcXG1hdGhmcmFre0h9Iik7ZmUoIlx1MjEyOCIsIlxcbWF0aGZyYWt7Wn0iKTtmZSgiXFxCYmJrIiwiXFxCYmJ7a30iKTtmZSgiXHhCNyIsIlxcY2RvdHAiKTtmZSgiXFxsbGFwIiwiXFxtYXRobGxhcHtcXHRleHRybXsjMX19Iik7ZmUoIlxccmxhcCIsIlxcbWF0aHJsYXB7XFx0ZXh0cm17IzF9fSIpO2ZlKCJcXGNsYXAiLCJcXG1hdGhjbGFwe1xcdGV4dHJteyMxfX0iKTtmZSgiXFxtYXRoc3RydXQiLCJcXHZwaGFudG9teyh9Iik7ZmUoIlxcdW5kZXJiYXIiLCJcXHVuZGVybGluZXtcXHRleHR7IzF9fSIpO2ZlKCJcXG5vdCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJsYXBcXEBub3R9fXtcXGNoYXIiMzM4fScpO2ZlKCJcXG5lcSIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbm90PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjYwfX0iKTtmZSgiXFxuZSIsIlxcbmVxIik7ZmUoIlx1MjI2MCIsIlxcbmVxIik7ZmUoIlxcbm90aW4iLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHt7XFxpbn1cXG1hdGhsbGFwey9cXG1za2lwMW11fX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjA5fX0iKTtmZSgiXHUyMjA5IiwiXFxub3RpbiIpO2ZlKCJcdTIyNTgiLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxrZXJuey0xZW19XFxyYWlzZWJveHswLjRlbX17JFxcc2NyaXB0c2l6ZVxcZnJvd24kfX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjU4fX0iKTtmZSgiXHUyMjU5IiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcd2VkZ2V9ez19fXtcXG1hdGhyZWx7XFxjaGFyYFx1MjI1OH19Iik7ZmUoIlx1MjI1QSIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXHZlZX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVBfX0iKTtmZSgiXHUyMjVCIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcc2NyaXB0c2l6ZVxcc3Rhcn17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVCfX0iKTtmZSgiXHUyMjVEIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte2RlZn19ez19fXtcXG1hdGhyZWx7XFxjaGFyYFx1MjI1RH19Iik7ZmUoIlx1MjI1RSIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXG1hdGhybXttfX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVFfX0iKTtmZSgiXHUyMjVGIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueT99ez19fXtcXG1hdGhyZWx7XFxjaGFyYFx1MjI1Rn19Iik7ZmUoIlx1MjdDMiIsIlxccGVycCIpO2ZlKCJcdTIwM0MiLCJcXG1hdGhjbG9zZXshXFxta2Vybi0wLjhtdSF9Iik7ZmUoIlx1MjIwQyIsIlxcbm90bmkiKTtmZSgiXHUyMzFDIiwiXFx1bGNvcm5lciIpO2ZlKCJcdTIzMUQiLCJcXHVyY29ybmVyIik7ZmUoIlx1MjMxRSIsIlxcbGxjb3JuZXIiKTtmZSgiXHUyMzFGIiwiXFxscmNvcm5lciIpO2ZlKCJceEE5IiwiXFxjb3B5cmlnaHQiKTtmZSgiXHhBRSIsIlxcdGV4dHJlZ2lzdGVyZWQiKTtmZSgiXHVGRTBGIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpO2ZlKCJcXHVsY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEB1bGNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWN9fScpO2ZlKCJcXHVyY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEB1cmNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWR9fScpO2ZlKCJcXGxsY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEBsbGNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWV9fScpO2ZlKCJcXGxyY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEBscmNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWZ9fScpO2ZlKCJcXHZkb3RzIiwie1xcdmFydmRvdHNcXHJ1bGV7MHB0fXsxNXB0fX0iKTtmZSgiXHUyMkVFIiwiXFx2ZG90cyIpO2ZlKCJcXHZhckdhbW1hIiwiXFxtYXRoaXR7XFxHYW1tYX0iKTtmZSgiXFx2YXJEZWx0YSIsIlxcbWF0aGl0e1xcRGVsdGF9Iik7ZmUoIlxcdmFyVGhldGEiLCJcXG1hdGhpdHtcXFRoZXRhfSIpO2ZlKCJcXHZhckxhbWJkYSIsIlxcbWF0aGl0e1xcTGFtYmRhfSIpO2ZlKCJcXHZhclhpIiwiXFxtYXRoaXR7XFxYaX0iKTtmZSgiXFx2YXJQaSIsIlxcbWF0aGl0e1xcUGl9Iik7ZmUoIlxcdmFyU2lnbWEiLCJcXG1hdGhpdHtcXFNpZ21hfSIpO2ZlKCJcXHZhclVwc2lsb24iLCJcXG1hdGhpdHtcXFVwc2lsb259Iik7ZmUoIlxcdmFyUGhpIiwiXFxtYXRoaXR7XFxQaGl9Iik7ZmUoIlxcdmFyUHNpIiwiXFxtYXRoaXR7XFxQc2l9Iik7ZmUoIlxcdmFyT21lZ2EiLCJcXG1hdGhpdHtcXE9tZWdhfSIpO2ZlKCJcXHN1YnN0YWNrIiwiXFxiZWdpbntzdWJhcnJheX17Y30jMVxcZW5ke3N1YmFycmF5fSIpO2ZlKCJcXGNvbG9uIiwiXFxub2JyZWFrXFxtc2tpcDJtdVxcbWF0aHB1bmN0e31cXG1hdGhjaG9pY2V7XFxta2Vybi0zbXV9e1xcbWtlcm4tM211fXt9e317On1cXG1za2lwNm11XFxyZWxheCIpO2ZlKCJcXGJveGVkIiwiXFxmYm94eyRcXGRpc3BsYXlzdHlsZXsjMX0kfSIpO2ZlKCJcXGlmZiIsIlxcRE9UU0JcXDtcXExvbmdsZWZ0cmlnaHRhcnJvd1xcOyIpO2ZlKCJcXGltcGxpZXMiLCJcXERPVFNCXFw7XFxMb25ncmlnaHRhcnJvd1xcOyIpO2ZlKCJcXGltcGxpZWRieSIsIlxcRE9UU0JcXDtcXExvbmdsZWZ0YXJyb3dcXDsiKTtmZSgiXFxkZGRvdCIsIntcXG92ZXJzZXR7XFxyYWlzZWJveHstMC4xZXh9e1xcbm9ybWFsc2l6ZSAuLi59fXsjMX19Iik7ZmUoIlxcZGRkZG90Iiwie1xcb3ZlcnNldHtcXHJhaXNlYm94ey0wLjFleH17XFxub3JtYWxzaXplIC4uLi59fXsjMX19Iik7a0c9eyIsIjoiXFxkb3RzYyIsIlxcbm90IjoiXFxkb3RzYiIsIisiOiJcXGRvdHNiIiwiPSI6IlxcZG90c2IiLCI8IjoiXFxkb3RzYiIsIj4iOiJcXGRvdHNiIiwiLSI6IlxcZG90c2IiLCIqIjoiXFxkb3RzYiIsIjoiOiJcXGRvdHNiIiwiXFxET1RTQiI6IlxcZG90c2IiLCJcXGNvcHJvZCI6IlxcZG90c2IiLCJcXGJpZ3ZlZSI6IlxcZG90c2IiLCJcXGJpZ3dlZGdlIjoiXFxkb3RzYiIsIlxcYmlndXBsdXMiOiJcXGRvdHNiIiwiXFxiaWdjYXAiOiJcXGRvdHNiIiwiXFxiaWdjdXAiOiJcXGRvdHNiIiwiXFxwcm9kIjoiXFxkb3RzYiIsIlxcc3VtIjoiXFxkb3RzYiIsIlxcYmlnb3RpbWVzIjoiXFxkb3RzYiIsIlxcYmlnb3BsdXMiOiJcXGRvdHNiIiwiXFxiaWdvZG90IjoiXFxkb3RzYiIsIlxcYmlnc3FjdXAiOiJcXGRvdHNiIiwiXFxBbmQiOiJcXGRvdHNiIiwiXFxsb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxtYXBzdG8iOiJcXGRvdHNiIiwiXFxsb25nbWFwc3RvIjoiXFxkb3RzYiIsIlxcaG9va3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxkb3RlcSI6IlxcZG90c2IiLCJcXG1hdGhiaW4iOiJcXGRvdHNiIiwiXFxtYXRocmVsIjoiXFxkb3RzYiIsIlxccmVsYmFyIjoiXFxkb3RzYiIsIlxcUmVsYmFyIjoiXFxkb3RzYiIsIlxceHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFx4bGVmdGFycm93IjoiXFxkb3RzYiIsIlxcRE9UU0kiOiJcXGRvdHNpIiwiXFxpbnQiOiJcXGRvdHNpIiwiXFxvaW50IjoiXFxkb3RzaSIsIlxcaWludCI6IlxcZG90c2kiLCJcXGlpaW50IjoiXFxkb3RzaSIsIlxcaWlpaW50IjoiXFxkb3RzaSIsIlxcaWRvdHNpbnQiOiJcXGRvdHNpIiwiXFxET1RTWCI6IlxcZG90c3gifTtmZSgiXFxkb3RzIixmdW5jdGlvbih0KXt2YXIgZT0iXFxkb3RzbyIscj10LmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtyZXR1cm4gciBpbiBrRz9lPWtHW3JdOihyLnNsaWNlKDAsNCk9PT0iXFxub3QifHxyIGluIEFuLm1hdGgmJkp0LmNvbnRhaW5zKFsiYmluIiwicmVsIl0sQW4ubWF0aFtyXS5ncm91cCkpJiYoZT0iXFxkb3RzYiIpLGV9KTt5QT17IikiOiEwLCJdIjohMCwiXFxyYnJhY2siOiEwLCJcXH0iOiEwLCJcXHJicmFjZSI6ITAsIlxccmFuZ2xlIjohMCwiXFxyY2VpbCI6ITAsIlxccmZsb29yIjohMCwiXFxyZ3JvdXAiOiEwLCJcXHJtb3VzdGFjaGUiOiEwLCJcXHJpZ2h0IjohMCwiXFxiaWdyIjohMCwiXFxiaWdnciI6ITAsIlxcQmlnciI6ITAsIlxcQmlnZ3IiOiEwLCQ6ITAsIjsiOiEwLCIuIjohMCwiLCI6ITB9O2ZlKCJcXGRvdHNvIixmdW5jdGlvbih0KXt2YXIgZT10LmZ1dHVyZSgpLnRleHQ7cmV0dXJuIGUgaW4geUE/IlxcbGRvdHNcXCwiOiJcXGxkb3RzIn0pO2ZlKCJcXGRvdHNjIixmdW5jdGlvbih0KXt2YXIgZT10LmZ1dHVyZSgpLnRleHQ7cmV0dXJuIGUgaW4geUEmJmUhPT0iLCI/IlxcbGRvdHNcXCwiOiJcXGxkb3RzIn0pO2ZlKCJcXGNkb3RzIixmdW5jdGlvbih0KXt2YXIgZT10LmZ1dHVyZSgpLnRleHQ7cmV0dXJuIGUgaW4geUE/IlxcQGNkb3RzXFwsIjoiXFxAY2RvdHMifSk7ZmUoIlxcZG90c2IiLCJcXGNkb3RzIik7ZmUoIlxcZG90c20iLCJcXGNkb3RzIik7ZmUoIlxcZG90c2kiLCJcXCFcXGNkb3RzIik7ZmUoIlxcZG90c3giLCJcXGxkb3RzXFwsIik7ZmUoIlxcRE9UU0kiLCJcXHJlbGF4Iik7ZmUoIlxcRE9UU0IiLCJcXHJlbGF4Iik7ZmUoIlxcRE9UU1giLCJcXHJlbGF4Iik7ZmUoIlxcdG1zcGFjZSIsIlxcVGV4dE9yTWF0aHtcXGtlcm4jMSMzfXtcXG1za2lwIzEjMn1cXHJlbGF4Iik7ZmUoIlxcLCIsIlxcdG1zcGFjZSt7M211fXsuMTY2N2VtfSIpO2ZlKCJcXHRoaW5zcGFjZSIsIlxcLCIpO2ZlKCJcXD4iLCJcXG1za2lwezRtdX0iKTtmZSgiXFw6IiwiXFx0bXNwYWNlK3s0bXV9ey4yMjIyZW19Iik7ZmUoIlxcbWVkc3BhY2UiLCJcXDoiKTtmZSgiXFw7IiwiXFx0bXNwYWNlK3s1bXV9ey4yNzc3ZW19Iik7ZmUoIlxcdGhpY2tzcGFjZSIsIlxcOyIpO2ZlKCJcXCEiLCJcXHRtc3BhY2UtezNtdX17LjE2NjdlbX0iKTtmZSgiXFxuZWd0aGluc3BhY2UiLCJcXCEiKTtmZSgiXFxuZWdtZWRzcGFjZSIsIlxcdG1zcGFjZS17NG11fXsuMjIyMmVtfSIpO2ZlKCJcXG5lZ3RoaWNrc3BhY2UiLCJcXHRtc3BhY2UtezVtdX17LjI3N2VtfSIpO2ZlKCJcXGVuc3BhY2UiLCJcXGtlcm4uNWVtICIpO2ZlKCJcXGVuc2tpcCIsIlxcaHNraXAuNWVtXFxyZWxheCIpO2ZlKCJcXHF1YWQiLCJcXGhza2lwMWVtXFxyZWxheCIpO2ZlKCJcXHFxdWFkIiwiXFxoc2tpcDJlbVxccmVsYXgiKTtmZSgiXFx0YWciLCJcXEBpZnN0YXJcXHRhZ0BsaXRlcmFsXFx0YWdAcGFyZW4iKTtmZSgiXFx0YWdAcGFyZW4iLCJcXHRhZ0BsaXRlcmFseyh7IzF9KX0iKTtmZSgiXFx0YWdAbGl0ZXJhbCIsdD0+e2lmKHQubWFjcm9zLmdldCgiXFxkZkB0YWciKSl0aHJvdyBuZXcgcHQoIk11bHRpcGxlIFxcdGFnIik7cmV0dXJuIlxcZ2RlZlxcZGZAdGFne1xcdGV4dHsjMX19In0pO2ZlKCJcXGJtb2QiLCJcXG1hdGhjaG9pY2V7XFxtc2tpcDFtdX17XFxtc2tpcDFtdX17XFxtc2tpcDVtdX17XFxtc2tpcDVtdX1cXG1hdGhiaW57XFxybSBtb2R9XFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9Iik7ZmUoIlxccG9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuOG11fXtcXG1rZXJuOG11fXtcXG1rZXJuOG11fSgjMSkiKTtmZSgiXFxwbW9kIiwiXFxwb2R7e1xccm0gbW9kfVxcbWtlcm42bXUjMX0iKTtmZSgiXFxtb2QiLCJcXGFsbG93YnJlYWtcXG1hdGhjaG9pY2V7XFxta2VybjE4bXV9e1xcbWtlcm4xMm11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xccm0gbW9kfVxcLFxcLCMxIik7ZmUoIlxcbmV3bGluZSIsIlxcXFxcXHJlbGF4Iik7ZmUoIlxcVGVYIiwiXFx0ZXh0cm17XFxodG1sQG1hdGhtbHtUXFxrZXJuLS4xNjY3ZW1cXHJhaXNlYm94ey0uNWV4fXtFfVxca2Vybi0uMTI1ZW1YfXtUZVh9fSIpO3lWPUV0KEpsWyJNYWluLVJlZ3VsYXIiXVs4NF1bMV0tLjcqSmxbIk1haW4tUmVndWxhciJdWzY1XVsxXSk7ZmUoIlxcTGFUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJMXFxrZXJuLS4zNmVtXFxyYWlzZWJveHsiK3lWKyJ9e1xcc2NyaXB0c3R5bGUgQX0iKSsiXFxrZXJuLS4xNWVtXFxUZVh9e0xhVGVYfX0iKTtmZSgiXFxLYVRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7IisoIktcXGtlcm4tLjE3ZW1cXHJhaXNlYm94eyIreVYrIn17XFxzY3JpcHRzdHlsZSBBfSIpKyJcXGtlcm4tLjE1ZW1cXFRlWH17S2FUZVh9fSIpO2ZlKCJcXGhzcGFjZSIsIlxcQGlmc3RhclxcQGhzcGFjZXJcXEBoc3BhY2UiKTtmZSgiXFxAaHNwYWNlIiwiXFxoc2tpcCAjMVxccmVsYXgiKTtmZSgiXFxAaHNwYWNlciIsIlxccnVsZXswcHR9ezBwdH1cXGhza2lwICMxXFxyZWxheCIpO2ZlKCJcXG9yZGluYXJ5Y29sb24iLCI6Iik7ZmUoIlxcdmNlbnRjb2xvbiIsIlxcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn0iKTtmZSgiXFxkYmxjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyMzd9fScpO2ZlKCJcXGNvbG9uZXFxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX19e1xcbWF0aG9we1xcY2hhciIyMjU0fX0nKTtmZSgiXFxDb2xvbmVxcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiM2R9fScpO2ZlKCJcXGNvbG9uZXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXG1hdGhyZWx7LX19fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjIxMn19Jyk7ZmUoIlxcQ29sb25lcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXG1hdGhyZWx7LX19fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjEyfX0nKTtmZSgiXFxlcXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjI1NX19Jyk7ZmUoIlxcRXFxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn19e1xcbWF0aG9we1xcY2hhciIzZFxcY2hhciIyMjM3fX0nKTtmZSgiXFxlcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyMzl9fScpO2ZlKCJcXEVxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXG1hdGhyZWx7LX1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyMTJcXGNoYXIiMjIzN319Jyk7ZmUoIlxcY29sb25hcHByb3giLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjQ4fX0nKTtmZSgiXFxDb2xvbmFwcHJveCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyNDh9fScpO2ZlKCJcXGNvbG9uc2ltIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjIzY319Jyk7ZmUoIlxcQ29sb25zaW0iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjNjfX0nKTtmZSgiXHUyMjM3IiwiXFxkYmxjb2xvbiIpO2ZlKCJcdTIyMzkiLCJcXGVxY29sb24iKTtmZSgiXHUyMjU0IiwiXFxjb2xvbmVxcSIpO2ZlKCJcdTIyNTUiLCJcXGVxcWNvbG9uIik7ZmUoIlx1MkE3NCIsIlxcQ29sb25lcXEiKTtmZSgiXFxyYXRpbyIsIlxcdmNlbnRjb2xvbiIpO2ZlKCJcXGNvbG9uY29sb24iLCJcXGRibGNvbG9uIik7ZmUoIlxcY29sb25lcXVhbHMiLCJcXGNvbG9uZXFxIik7ZmUoIlxcY29sb25jb2xvbmVxdWFscyIsIlxcQ29sb25lcXEiKTtmZSgiXFxlcXVhbHNjb2xvbiIsIlxcZXFxY29sb24iKTtmZSgiXFxlcXVhbHNjb2xvbmNvbG9uIiwiXFxFcXFjb2xvbiIpO2ZlKCJcXGNvbG9ubWludXMiLCJcXGNvbG9uZXEiKTtmZSgiXFxjb2xvbmNvbG9ubWludXMiLCJcXENvbG9uZXEiKTtmZSgiXFxtaW51c2NvbG9uIiwiXFxlcWNvbG9uIik7ZmUoIlxcbWludXNjb2xvbmNvbG9uIiwiXFxFcWNvbG9uIik7ZmUoIlxcY29sb25jb2xvbmFwcHJveCIsIlxcQ29sb25hcHByb3giKTtmZSgiXFxjb2xvbmNvbG9uc2ltIiwiXFxDb2xvbnNpbSIpO2ZlKCJcXHNpbWNvbG9uIiwiXFxtYXRocmVse1xcc2ltXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufSIpO2ZlKCJcXHNpbWNvbG9uY29sb24iLCJcXG1hdGhyZWx7XFxzaW1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufSIpO2ZlKCJcXGFwcHJveGNvbG9uIiwiXFxtYXRocmVse1xcYXBwcm94XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufSIpO2ZlKCJcXGFwcHJveGNvbG9uY29sb24iLCJcXG1hdGhyZWx7XFxhcHByb3hcXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufSIpO2ZlKCJcXG5vdG5pIiwiXFxodG1sQG1hdGhtbHtcXG5vdFxcbml9e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjBDfX0iKTtmZSgiXFxsaW1zdXAiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2xpbVxcLHN1cH0iKTtmZSgiXFxsaW1pbmYiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2xpbVxcLGluZn0iKTtmZSgiXFxpbmpsaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2lualxcLGxpbX0iKTtmZSgiXFxwcm9qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntwcm9qXFwsbGltfSIpO2ZlKCJcXHZhcmxpbXN1cCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFxvdmVybGluZXtsaW19fSIpO2ZlKCJcXHZhcmxpbWluZiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFx1bmRlcmxpbmV7bGltfX0iKTtmZSgiXFx2YXJpbmpsaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJyaWdodGFycm93e2xpbX19Iik7ZmUoIlxcdmFycHJvamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFx1bmRlcmxlZnRhcnJvd3tsaW19fSIpO2ZlKCJcXGd2ZXJ0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAZ3ZlcnRuZXFxfXtcdTIyNjl9Iik7ZmUoIlxcbHZlcnRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBsdmVydG5lcXF9e1x1MjI2OH0iKTtmZSgiXFxuZ2VxcSIsIlxcaHRtbEBtYXRobWx7XFxAbmdlcXF9e1x1MjI3MX0iKTtmZSgiXFxuZ2Vxc2xhbnQiLCJcXGh0bWxAbWF0aG1se1xcQG5nZXFzbGFudH17XHUyMjcxfSIpO2ZlKCJcXG5sZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBubGVxcX17XHUyMjcwfSIpO2ZlKCJcXG5sZXFzbGFudCIsIlxcaHRtbEBtYXRobWx7XFxAbmxlcXNsYW50fXtcdTIyNzB9Iik7ZmUoIlxcbnNob3J0bWlkIiwiXFxodG1sQG1hdGhtbHtcXEBuc2hvcnRtaWR9e1x1MjIyNH0iKTtmZSgiXFxuc2hvcnRwYXJhbGxlbCIsIlxcaHRtbEBtYXRobWx7XFxAbnNob3J0cGFyYWxsZWx9e1x1MjIyNn0iKTtmZSgiXFxuc3Vic2V0ZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuc3Vic2V0ZXFxfXtcdTIyODh9Iik7ZmUoIlxcbnN1cHNldGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbnN1cHNldGVxcX17XHUyMjg5fSIpO2ZlKCJcXHZhcnN1YnNldG5lcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vic2V0bmVxfXtcdTIyOEF9Iik7ZmUoIlxcdmFyc3Vic2V0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vic2V0bmVxcX17XHUyQUNCfSIpO2ZlKCJcXHZhcnN1cHNldG5lcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vwc2V0bmVxfXtcdTIyOEJ9Iik7ZmUoIlxcdmFyc3Vwc2V0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vwc2V0bmVxcX17XHUyQUNDfSIpO2ZlKCJcXGltYXRoIiwiXFxodG1sQG1hdGhtbHtcXEBpbWF0aH17XHUwMTMxfSIpO2ZlKCJcXGptYXRoIiwiXFxodG1sQG1hdGhtbHtcXEBqbWF0aH17XHUwMjM3fSIpO2ZlKCJcXGxsYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntbXFxta2Vybi0zLjJtdVt9fXtcXG1hdGhvcGVue1xcY2hhcmBcdTI3RTZ9fSIpO2ZlKCJcXHJyYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRoY2xvc2V7XVxcbWtlcm4tMy4ybXVdfX17XFxtYXRoY2xvc2V7XFxjaGFyYFx1MjdFN319Iik7ZmUoIlx1MjdFNiIsIlxcbGxicmFja2V0Iik7ZmUoIlx1MjdFNyIsIlxccnJicmFja2V0Iik7ZmUoIlxcbEJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhvcGVue1xce1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJgXHUyOTgzfX0iKTtmZSgiXFxyQnJhY2UiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XFx9fX17XFxtYXRoY2xvc2V7XFxjaGFyYFx1Mjk4NH19Iik7ZmUoIlx1Mjk4MyIsIlxcbEJyYWNlIik7ZmUoIlx1Mjk4NCIsIlxcckJyYWNlIik7ZmUoIlxcbWludXNvIiwiXFxtYXRoYmlue1xcaHRtbEBtYXRobWx7e1xcbWF0aHJsYXB7XFxtYXRoY2hvaWNle1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTQ1ZW19fXtcXGtlcm57MC4xMDE1ZW19fXtcXGtlcm57MC4wNzI1ZW19fVxcY2lyY317LX19fXtcXGNoYXJgXHUyOUI1fX0iKTtmZSgiXHUyOUI1IiwiXFxtaW51c28iKTtmZSgiXFxkYXJyIiwiXFxkb3duYXJyb3ciKTtmZSgiXFxkQXJyIiwiXFxEb3duYXJyb3ciKTtmZSgiXFxEYXJyIiwiXFxEb3duYXJyb3ciKTtmZSgiXFxsYW5nIiwiXFxsYW5nbGUiKTtmZSgiXFxyYW5nIiwiXFxyYW5nbGUiKTtmZSgiXFx1YXJyIiwiXFx1cGFycm93Iik7ZmUoIlxcdUFyciIsIlxcVXBhcnJvdyIpO2ZlKCJcXFVhcnIiLCJcXFVwYXJyb3ciKTtmZSgiXFxOIiwiXFxtYXRoYmJ7Tn0iKTtmZSgiXFxSIiwiXFxtYXRoYmJ7Un0iKTtmZSgiXFxaIiwiXFxtYXRoYmJ7Wn0iKTtmZSgiXFxhbGVmIiwiXFxhbGVwaCIpO2ZlKCJcXGFsZWZzeW0iLCJcXGFsZXBoIik7ZmUoIlxcQWxwaGEiLCJcXG1hdGhybXtBfSIpO2ZlKCJcXEJldGEiLCJcXG1hdGhybXtCfSIpO2ZlKCJcXGJ1bGwiLCJcXGJ1bGxldCIpO2ZlKCJcXENoaSIsIlxcbWF0aHJte1h9Iik7ZmUoIlxcY2x1YnMiLCJcXGNsdWJzdWl0Iik7ZmUoIlxcY251bXMiLCJcXG1hdGhiYntDfSIpO2ZlKCJcXENvbXBsZXgiLCJcXG1hdGhiYntDfSIpO2ZlKCJcXERhZ2dlciIsIlxcZGRhZ2dlciIpO2ZlKCJcXGRpYW1vbmRzIiwiXFxkaWFtb25kc3VpdCIpO2ZlKCJcXGVtcHR5IiwiXFxlbXB0eXNldCIpO2ZlKCJcXEVwc2lsb24iLCJcXG1hdGhybXtFfSIpO2ZlKCJcXEV0YSIsIlxcbWF0aHJte0h9Iik7ZmUoIlxcZXhpc3QiLCJcXGV4aXN0cyIpO2ZlKCJcXGhhcnIiLCJcXGxlZnRyaWdodGFycm93Iik7ZmUoIlxcaEFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKTtmZSgiXFxIYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2ZlKCJcXGhlYXJ0cyIsIlxcaGVhcnRzdWl0Iik7ZmUoIlxcaW1hZ2UiLCJcXEltIik7ZmUoIlxcaW5maW4iLCJcXGluZnR5Iik7ZmUoIlxcSW90YSIsIlxcbWF0aHJte0l9Iik7ZmUoIlxcaXNpbiIsIlxcaW4iKTtmZSgiXFxLYXBwYSIsIlxcbWF0aHJte0t9Iik7ZmUoIlxcbGFyciIsIlxcbGVmdGFycm93Iik7ZmUoIlxcbEFyciIsIlxcTGVmdGFycm93Iik7ZmUoIlxcTGFyciIsIlxcTGVmdGFycm93Iik7ZmUoIlxcbHJhcnIiLCJcXGxlZnRyaWdodGFycm93Iik7ZmUoIlxcbHJBcnIiLCJcXExlZnRyaWdodGFycm93Iik7ZmUoIlxcTHJhcnIiLCJcXExlZnRyaWdodGFycm93Iik7ZmUoIlxcTXUiLCJcXG1hdGhybXtNfSIpO2ZlKCJcXG5hdG51bXMiLCJcXG1hdGhiYntOfSIpO2ZlKCJcXE51IiwiXFxtYXRocm17Tn0iKTtmZSgiXFxPbWljcm9uIiwiXFxtYXRocm17T30iKTtmZSgiXFxwbHVzbW4iLCJcXHBtIik7ZmUoIlxccmFyciIsIlxccmlnaHRhcnJvdyIpO2ZlKCJcXHJBcnIiLCJcXFJpZ2h0YXJyb3ciKTtmZSgiXFxSYXJyIiwiXFxSaWdodGFycm93Iik7ZmUoIlxccmVhbCIsIlxcUmUiKTtmZSgiXFxyZWFscyIsIlxcbWF0aGJie1J9Iik7ZmUoIlxcUmVhbHMiLCJcXG1hdGhiYntSfSIpO2ZlKCJcXFJobyIsIlxcbWF0aHJte1B9Iik7ZmUoIlxcc2RvdCIsIlxcY2RvdCIpO2ZlKCJcXHNlY3QiLCJcXFMiKTtmZSgiXFxzcGFkZXMiLCJcXHNwYWRlc3VpdCIpO2ZlKCJcXHN1YiIsIlxcc3Vic2V0Iik7ZmUoIlxcc3ViZSIsIlxcc3Vic2V0ZXEiKTtmZSgiXFxzdXBlIiwiXFxzdXBzZXRlcSIpO2ZlKCJcXFRhdSIsIlxcbWF0aHJte1R9Iik7ZmUoIlxcdGhldGFzeW0iLCJcXHZhcnRoZXRhIik7ZmUoIlxcd2VpZXJwIiwiXFx3cCIpO2ZlKCJcXFpldGEiLCJcXG1hdGhybXtafSIpO2ZlKCJcXGFyZ21pbiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWlufSIpO2ZlKCJcXGFyZ21heCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWF4fSIpO2ZlKCJcXHBsaW0iLCJcXERPVFNCXFxtYXRob3B7XFxvcGVyYXRvcm5hbWV7cGxpbX19XFxsaW1pdHMiKTtmZSgiXFxicmEiLCJcXG1hdGhpbm5lcntcXGxhbmdsZXsjMX18fSIpO2ZlKCJcXGtldCIsIlxcbWF0aGlubmVye3x7IzF9XFxyYW5nbGV9Iik7ZmUoIlxcYnJha2V0IiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9XFxyYW5nbGV9Iik7ZmUoIlxcQnJhIiwiXFxsZWZ0XFxsYW5nbGUjMVxccmlnaHR8Iik7ZmUoIlxcS2V0IiwiXFxsZWZ0fCMxXFxyaWdodFxccmFuZ2xlIik7dlY9byh0PT5lPT57dmFyIHI9ZS5jb25zdW1lQXJnKCkudG9rZW5zLG49ZS5jb25zdW1lQXJnKCkudG9rZW5zLGk9ZS5jb25zdW1lQXJnKCkudG9rZW5zLGE9ZS5jb25zdW1lQXJnKCkudG9rZW5zLHM9ZS5tYWNyb3MuZ2V0KCJ8IiksbD1lLm1hY3Jvcy5nZXQoIlxcfCIpO2UubWFjcm9zLmJlZ2luR3JvdXAoKTt2YXIgdT1vKGQ9PnA9Pnt0JiYocC5tYWNyb3Muc2V0KCJ8IixzKSxpLmxlbmd0aCYmcC5tYWNyb3Muc2V0KCJcXHwiLGwpKTt2YXIgbT1kO2lmKCFkJiZpLmxlbmd0aCl7dmFyIGc9cC5mdXR1cmUoKTtnLnRleHQ9PT0ifCImJihwLnBvcFRva2VuKCksbT0hMCl9cmV0dXJue3Rva2VuczptP2k6bixudW1BcmdzOjB9fSwibWlkTWFjcm8iKTtlLm1hY3Jvcy5zZXQoInwiLHUoITEpKSxpLmxlbmd0aCYmZS5tYWNyb3Muc2V0KCJcXHwiLHUoITApKTt2YXIgaD1lLmNvbnN1bWVBcmcoKS50b2tlbnMsZj1lLmV4cGFuZFRva2VucyhbLi4uYSwuLi5oLC4uLnJdKTtyZXR1cm4gZS5tYWNyb3MuZW5kR3JvdXAoKSx7dG9rZW5zOmYucmV2ZXJzZSgpLG51bUFyZ3M6MH19LCJicmFrZXRIZWxwZXIiKTtmZSgiXFxicmFAa2V0Iix2VighMSkpO2ZlKCJcXGJyYUBzZXQiLHZWKCEwKSk7ZmUoIlxcQnJha2V0IiwiXFxicmFAa2V0e1xcbGVmdFxcbGFuZ2xlfXtcXCxcXG1pZGRsZVxcdmVydFxcLH17XFwsXFxtaWRkbGVcXHZlcnRcXCx9e1xccmlnaHRcXHJhbmdsZX0iKTtmZSgiXFxTZXQiLCJcXGJyYUBzZXR7XFxsZWZ0XFx7XFw6fXtcXDtcXG1pZGRsZVxcdmVydFxcO317XFw7XFxtaWRkbGVcXFZlcnRcXDt9e1xcOlxccmlnaHRcXH19Iik7ZmUoIlxcc2V0IiwiXFxicmFAc2V0e1xce1xcLH17XFxtaWR9e317XFwsXFx9fSIpO2ZlKCJcXGFuZ2xuIiwie1xcYW5nbCBufSIpO2ZlKCJcXGJsdWUiLCJcXHRleHRjb2xvcnsjIzY0OTVlZH17IzF9Iik7ZmUoIlxcb3JhbmdlIiwiXFx0ZXh0Y29sb3J7IyNmZmE1MDB9eyMxfSIpO2ZlKCJcXHBpbmsiLCJcXHRleHRjb2xvcnsjI2ZmMDBhZn17IzF9Iik7ZmUoIlxccmVkIiwiXFx0ZXh0Y29sb3J7IyNkZjAwMzB9eyMxfSIpO2ZlKCJcXGdyZWVuIiwiXFx0ZXh0Y29sb3J7IyMyOGFlN2J9eyMxfSIpO2ZlKCJcXGdyYXkiLCJcXHRleHRjb2xvcntncmF5fXsjMX0iKTtmZSgiXFxwdXJwbGUiLCJcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9Iik7ZmUoIlxcYmx1ZUEiLCJcXHRleHRjb2xvcnsjI2NjZmFmZn17IzF9Iik7ZmUoIlxcYmx1ZUIiLCJcXHRleHRjb2xvcnsjIzgwZjZmZn17IzF9Iik7ZmUoIlxcYmx1ZUMiLCJcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9Iik7ZmUoIlxcYmx1ZUQiLCJcXHRleHRjb2xvcnsjIzExYWNjZH17IzF9Iik7ZmUoIlxcYmx1ZUUiLCJcXHRleHRjb2xvcnsjIzBjN2Y5OX17IzF9Iik7ZmUoIlxcdGVhbEEiLCJcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9Iik7ZmUoIlxcdGVhbEIiLCJcXHRleHRjb2xvcnsjIzI2ZWRkNX17IzF9Iik7ZmUoIlxcdGVhbEMiLCJcXHRleHRjb2xvcnsjIzAxZDFjMX17IzF9Iik7ZmUoIlxcdGVhbEQiLCJcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9Iik7ZmUoIlxcdGVhbEUiLCJcXHRleHRjb2xvcnsjIzIwODE3MH17IzF9Iik7ZmUoIlxcZ3JlZW5BIiwiXFx0ZXh0Y29sb3J7IyNiNmZmYjB9eyMxfSIpO2ZlKCJcXGdyZWVuQiIsIlxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX0iKTtmZSgiXFxncmVlbkMiLCJcXHRleHRjb2xvcnsjIzc0Y2Y3MH17IzF9Iik7ZmUoIlxcZ3JlZW5EIiwiXFx0ZXh0Y29sb3J7IyMxZmFiNTR9eyMxfSIpO2ZlKCJcXGdyZWVuRSIsIlxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX0iKTtmZSgiXFxnb2xkQSIsIlxcdGV4dGNvbG9yeyMjZmZkMGE5fXsjMX0iKTtmZSgiXFxnb2xkQiIsIlxcdGV4dGNvbG9yeyMjZmZiYjcxfXsjMX0iKTtmZSgiXFxnb2xkQyIsIlxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX0iKTtmZSgiXFxnb2xkRCIsIlxcdGV4dGNvbG9yeyMjZTA3ZDEwfXsjMX0iKTtmZSgiXFxnb2xkRSIsIlxcdGV4dGNvbG9yeyMjYTc1YTA1fXsjMX0iKTtmZSgiXFxyZWRBIiwiXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfSIpO2ZlKCJcXHJlZEIiLCJcXHRleHRjb2xvcnsjI2ZmODQ4Mn17IzF9Iik7ZmUoIlxccmVkQyIsIlxcdGV4dGNvbG9yeyMjZjk2ODVkfXsjMX0iKTtmZSgiXFxyZWREIiwiXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfSIpO2ZlKCJcXHJlZEUiLCJcXHRleHRjb2xvcnsjI2JjMjYxMn17IzF9Iik7ZmUoIlxcbWFyb29uQSIsIlxcdGV4dGNvbG9yeyMjZmZiZGUwfXsjMX0iKTtmZSgiXFxtYXJvb25CIiwiXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfSIpO2ZlKCJcXG1hcm9vbkMiLCJcXHRleHRjb2xvcnsjI2VkNWZhNn17IzF9Iik7ZmUoIlxcbWFyb29uRCIsIlxcdGV4dGNvbG9yeyMjY2EzMzdjfXsjMX0iKTtmZSgiXFxtYXJvb25FIiwiXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfSIpO2ZlKCJcXHB1cnBsZUEiLCJcXHRleHRjb2xvcnsjI2RkZDdmZn17IzF9Iik7ZmUoIlxccHVycGxlQiIsIlxcdGV4dGNvbG9yeyMjYzZiOWZjfXsjMX0iKTtmZSgiXFxwdXJwbGVDIiwiXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfSIpO2ZlKCJcXHB1cnBsZUQiLCJcXHRleHRjb2xvcnsjIzc4NTRhYn17IzF9Iik7ZmUoIlxccHVycGxlRSIsIlxcdGV4dGNvbG9yeyMjNTQzYjc4fXsjMX0iKTtmZSgiXFxtaW50QSIsIlxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX0iKTtmZSgiXFxtaW50QiIsIlxcdGV4dGNvbG9yeyMjZWRmMmRmfXsjMX0iKTtmZSgiXFxtaW50QyIsIlxcdGV4dGNvbG9yeyMjZTBlNWNjfXsjMX0iKTtmZSgiXFxncmF5QSIsIlxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX0iKTtmZSgiXFxncmF5QiIsIlxcdGV4dGNvbG9yeyMjZjBmMWYyfXsjMX0iKTtmZSgiXFxncmF5QyIsIlxcdGV4dGNvbG9yeyMjZTNlNWU2fXsjMX0iKTtmZSgiXFxncmF5RCIsIlxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX0iKTtmZSgiXFxncmF5RSIsIlxcdGV4dGNvbG9yeyMjYmFiZWMyfXsjMX0iKTtmZSgiXFxncmF5RiIsIlxcdGV4dGNvbG9yeyMjODg4ZDkzfXsjMX0iKTtmZSgiXFxncmF5RyIsIlxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX0iKTtmZSgiXFxncmF5SCIsIlxcdGV4dGNvbG9yeyMjM2IzZTQwfXsjMX0iKTtmZSgiXFxncmF5SSIsIlxcdGV4dGNvbG9yeyMjMjEyNDJjfXsjMX0iKTtmZSgiXFxrYUJsdWUiLCJcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9Iik7ZmUoIlxca2FHcmVlbiIsIlxcdGV4dGNvbG9yeyMjNzFCMzA3fXsjMX0iKTt4Vj17Il4iOiEwLF86ITAsIlxcbGltaXRzIjohMCwiXFxub2xpbWl0cyI6ITB9LHRBPWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hY3JvRXhwYW5kZXIiKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5zZXR0aW5ncz12b2lkIDAsdGhpcy5leHBhbnNpb25Db3VudD12b2lkIDAsdGhpcy5sZXhlcj12b2lkIDAsdGhpcy5tYWNyb3M9dm9pZCAwLHRoaXMuc3RhY2s9dm9pZCAwLHRoaXMubW9kZT12b2lkIDAsdGhpcy5zZXR0aW5ncz1yLHRoaXMuZXhwYW5zaW9uQ291bnQ9MCx0aGlzLmZlZWQoZSksdGhpcy5tYWNyb3M9bmV3IGVBKGM1ZSxyLm1hY3JvcyksdGhpcy5tb2RlPW4sdGhpcy5zdGFjaz1bXX1mZWVkKGUpe3RoaXMubGV4ZXI9bmV3IEEzKGUsdGhpcy5zZXR0aW5ncyl9c3dpdGNoTW9kZShlKXt0aGlzLm1vZGU9ZX1iZWdpbkdyb3VwKCl7dGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpfWVuZEdyb3VwKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXAoKX1lbmRHcm91cHMoKXt0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKX1mdXR1cmUoKXtyZXR1cm4gdGhpcy5zdGFjay5sZW5ndGg9PT0wJiZ0aGlzLnB1c2hUb2tlbih0aGlzLmxleGVyLmxleCgpKSx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdfXBvcFRva2VuKCl7cmV0dXJuIHRoaXMuZnV0dXJlKCksdGhpcy5zdGFjay5wb3AoKX1wdXNoVG9rZW4oZSl7dGhpcy5zdGFjay5wdXNoKGUpfXB1c2hUb2tlbnMoZSl7dGhpcy5zdGFjay5wdXNoKC4uLmUpfXNjYW5Bcmd1bWVudChlKXt2YXIgcixuLGk7aWYoZSl7aWYodGhpcy5jb25zdW1lU3BhY2VzKCksdGhpcy5mdXR1cmUoKS50ZXh0IT09IlsiKXJldHVybiBudWxsO3I9dGhpcy5wb3BUb2tlbigpLHt0b2tlbnM6aSxlbmQ6bn09dGhpcy5jb25zdW1lQXJnKFsiXSJdKX1lbHNlKHt0b2tlbnM6aSxzdGFydDpyLGVuZDpufT10aGlzLmNvbnN1bWVBcmcoKSk7cmV0dXJuIHRoaXMucHVzaFRva2VuKG5ldyBfbygiRU9GIixuLmxvYykpLHRoaXMucHVzaFRva2VucyhpKSxyLnJhbmdlKG4sIiIpfWNvbnN1bWVTcGFjZXMoKXtmb3IoOzspe3ZhciBlPXRoaXMuZnV0dXJlKCk7aWYoZS50ZXh0PT09IiAiKXRoaXMuc3RhY2sucG9wKCk7ZWxzZSBicmVha319Y29uc3VtZUFyZyhlKXt2YXIgcj1bXSxuPWUmJmUubGVuZ3RoPjA7bnx8dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk9dGhpcy5mdXR1cmUoKSxhLHM9MCxsPTA7ZG97aWYoYT10aGlzLnBvcFRva2VuKCksci5wdXNoKGEpLGEudGV4dD09PSJ7IikrK3M7ZWxzZSBpZihhLnRleHQ9PT0ifSIpe2lmKC0tcyxzPT09LTEpdGhyb3cgbmV3IHB0KCJFeHRyYSB9IixhKX1lbHNlIGlmKGEudGV4dD09PSJFT0YiKXRocm93IG5ldyBwdCgiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gYSBtYWNybyBhcmd1bWVudCwgZXhwZWN0ZWQgJyIrKGUmJm4/ZVtsXToifSIpKyInIixhKTtpZihlJiZuKWlmKChzPT09MHx8cz09PTEmJmVbbF09PT0ieyIpJiZhLnRleHQ9PT1lW2xdKXtpZigrK2wsbD09PWUubGVuZ3RoKXtyLnNwbGljZSgtbCxsKTticmVha319ZWxzZSBsPTB9d2hpbGUocyE9PTB8fG4pO3JldHVybiBpLnRleHQ9PT0ieyImJnJbci5sZW5ndGgtMV0udGV4dD09PSJ9IiYmKHIucG9wKCksci5zaGlmdCgpKSxyLnJldmVyc2UoKSx7dG9rZW5zOnIsc3RhcnQ6aSxlbmQ6YX19Y29uc3VtZUFyZ3MoZSxyKXtpZihyKXtpZihyLmxlbmd0aCE9PWUrMSl0aHJvdyBuZXcgcHQoIlRoZSBsZW5ndGggb2YgZGVsaW1pdGVycyBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJncyEiKTtmb3IodmFyIG49clswXSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMucG9wVG9rZW4oKTtpZihuW2ldIT09YS50ZXh0KXRocm93IG5ldyBwdCgiVXNlIG9mIHRoZSBtYWNybyBkb2Vzbid0IG1hdGNoIGl0cyBkZWZpbml0aW9uIixhKX19Zm9yKHZhciBzPVtdLGw9MDtsPGU7bCsrKXMucHVzaCh0aGlzLmNvbnN1bWVBcmcociYmcltsKzFdKS50b2tlbnMpO3JldHVybiBzfWNvdW50RXhwYW5zaW9uKGUpe2lmKHRoaXMuZXhwYW5zaW9uQ291bnQrPWUsdGhpcy5leHBhbnNpb25Db3VudD50aGlzLnNldHRpbmdzLm1heEV4cGFuZCl0aHJvdyBuZXcgcHQoIlRvbyBtYW55IGV4cGFuc2lvbnM6IGluZmluaXRlIGxvb3Agb3IgbmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZyIpfWV4cGFuZE9uY2UoZSl7dmFyIHI9dGhpcy5wb3BUb2tlbigpLG49ci50ZXh0LGk9ci5ub2V4cGFuZD9udWxsOnRoaXMuX2dldEV4cGFuc2lvbihuKTtpZihpPT1udWxsfHxlJiZpLnVuZXhwYW5kYWJsZSl7aWYoZSYmaT09bnVsbCYmblswXT09PSJcXCImJiF0aGlzLmlzRGVmaW5lZChuKSl0aHJvdyBuZXcgcHQoIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK24pO3JldHVybiB0aGlzLnB1c2hUb2tlbihyKSwhMX10aGlzLmNvdW50RXhwYW5zaW9uKDEpO3ZhciBhPWkudG9rZW5zLHM9dGhpcy5jb25zdW1lQXJncyhpLm51bUFyZ3MsaS5kZWxpbWl0ZXJzKTtpZihpLm51bUFyZ3Mpe2E9YS5zbGljZSgpO2Zvcih2YXIgbD1hLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgdT1hW2xdO2lmKHUudGV4dD09PSIjIil7aWYobD09PTApdGhyb3cgbmV3IHB0KCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5Iix1KTtpZih1PWFbLS1sXSx1LnRleHQ9PT0iIyIpYS5zcGxpY2UobCsxLDEpO2Vsc2UgaWYoL15bMS05XSQvLnRlc3QodS50ZXh0KSlhLnNwbGljZShsLDIsLi4uc1srdS50ZXh0LTFdKTtlbHNlIHRocm93IG5ldyBwdCgiTm90IGEgdmFsaWQgYXJndW1lbnQgbnVtYmVyIix1KX19fXJldHVybiB0aGlzLnB1c2hUb2tlbnMoYSksYS5sZW5ndGh9ZXhwYW5kQWZ0ZXJGdXR1cmUoKXtyZXR1cm4gdGhpcy5leHBhbmRPbmNlKCksdGhpcy5mdXR1cmUoKX1leHBhbmROZXh0VG9rZW4oKXtmb3IoOzspaWYodGhpcy5leHBhbmRPbmNlKCk9PT0hMSl7dmFyIGU9dGhpcy5zdGFjay5wb3AoKTtyZXR1cm4gZS50cmVhdEFzUmVsYXgmJihlLnRleHQ9IlxccmVsYXgiKSxlfXRocm93IG5ldyBFcnJvcn1leHBhbmRNYWNybyhlKXtyZXR1cm4gdGhpcy5tYWNyb3MuaGFzKGUpP3RoaXMuZXhwYW5kVG9rZW5zKFtuZXcgX28oZSldKTp2b2lkIDB9ZXhwYW5kVG9rZW5zKGUpe3ZhciByPVtdLG49dGhpcy5zdGFjay5sZW5ndGg7Zm9yKHRoaXMucHVzaFRva2VucyhlKTt0aGlzLnN0YWNrLmxlbmd0aD5uOylpZih0aGlzLmV4cGFuZE9uY2UoITApPT09ITEpe3ZhciBpPXRoaXMuc3RhY2sucG9wKCk7aS50cmVhdEFzUmVsYXgmJihpLm5vZXhwYW5kPSExLGkudHJlYXRBc1JlbGF4PSExKSxyLnB1c2goaSl9cmV0dXJuIHRoaXMuY291bnRFeHBhbnNpb24oci5sZW5ndGgpLHJ9ZXhwYW5kTWFjcm9Bc1RleHQoZSl7dmFyIHI9dGhpcy5leHBhbmRNYWNybyhlKTtyZXR1cm4gciYmci5tYXAobj0+bi50ZXh0KS5qb2luKCIiKX1fZ2V0RXhwYW5zaW9uKGUpe3ZhciByPXRoaXMubWFjcm9zLmdldChlKTtpZihyPT1udWxsKXJldHVybiByO2lmKGUubGVuZ3RoPT09MSl7dmFyIG49dGhpcy5sZXhlci5jYXRjb2Rlc1tlXTtpZihuIT1udWxsJiZuIT09MTMpcmV0dXJufXZhciBpPXR5cGVvZiByPT0iZnVuY3Rpb24iP3IodGhpcyk6cjtpZih0eXBlb2YgaT09InN0cmluZyIpe3ZhciBhPTA7aWYoaS5pbmRleE9mKCIjIikhPT0tMSlmb3IodmFyIHM9aS5yZXBsYWNlKC8jIy9nLCIiKTtzLmluZGV4T2YoIiMiKyhhKzEpKSE9PS0xOykrK2E7Zm9yKHZhciBsPW5ldyBBMyhpLHRoaXMuc2V0dGluZ3MpLHU9W10saD1sLmxleCgpO2gudGV4dCE9PSJFT0YiOyl1LnB1c2goaCksaD1sLmxleCgpO3UucmV2ZXJzZSgpO3ZhciBmPXt0b2tlbnM6dSxudW1BcmdzOmF9O3JldHVybiBmfXJldHVybiBpfWlzRGVmaW5lZChlKXtyZXR1cm4gdGhpcy5tYWNyb3MuaGFzKGUpfHx5aC5oYXNPd25Qcm9wZXJ0eShlKXx8QW4ubWF0aC5oYXNPd25Qcm9wZXJ0eShlKXx8QW4udGV4dC5oYXNPd25Qcm9wZXJ0eShlKXx8eFYuaGFzT3duUHJvcGVydHkoZSl9aXNFeHBhbmRhYmxlKGUpe3ZhciByPXRoaXMubWFjcm9zLmdldChlKTtyZXR1cm4gciE9bnVsbD90eXBlb2Ygcj09InN0cmluZyJ8fHR5cGVvZiByPT0iZnVuY3Rpb24ifHwhci51bmV4cGFuZGFibGU6eWguaGFzT3duUHJvcGVydHkoZSkmJiF5aFtlXS5wcmltaXRpdmV9fSxFRz0vXlvigorigovigozigo3igo7igoDigoHigoLigoPigoTigoXigobigofigojigonigpDigpHigpXhtaLisbzigpbigpfigpjigpnigpLigprhtaPigpvigpzhtaThtaXigpPhtabhtafhtajhtanhtapdLyx4Mz1PYmplY3QuZnJlZXplKHsiXHUyMDhBIjoiKyIsIlx1MjA4QiI6Ii0iLCJcdTIwOEMiOiI9IiwiXHUyMDhEIjoiKCIsIlx1MjA4RSI6IikiLCJcdTIwODAiOiIwIiwiXHUyMDgxIjoiMSIsIlx1MjA4MiI6IjIiLCJcdTIwODMiOiIzIiwiXHUyMDg0IjoiNCIsIlx1MjA4NSI6IjUiLCJcdTIwODYiOiI2IiwiXHUyMDg3IjoiNyIsIlx1MjA4OCI6IjgiLCJcdTIwODkiOiI5IiwiXHUyMDkwIjoiYSIsIlx1MjA5MSI6ImUiLCJcdTIwOTUiOiJoIiwiXHUxRDYyIjoiaSIsIlx1MkM3QyI6ImoiLCJcdTIwOTYiOiJrIiwiXHUyMDk3IjoibCIsIlx1MjA5OCI6Im0iLCJcdTIwOTkiOiJuIiwiXHUyMDkyIjoibyIsIlx1MjA5QSI6InAiLCJcdTFENjMiOiJyIiwiXHUyMDlCIjoicyIsIlx1MjA5QyI6InQiLCJcdTFENjQiOiJ1IiwiXHUxRDY1IjoidiIsIlx1MjA5MyI6IngiLCJcdTFENjYiOiJcdTAzQjIiLCJcdTFENjciOiJcdTAzQjMiLCJcdTFENjgiOiJcdTAzQzEiLCJcdTFENjkiOiJcdTAzRDUiLCJcdTFENkEiOiJcdTAzQzciLCJcdTIwN0EiOiIrIiwiXHUyMDdCIjoiLSIsIlx1MjA3QyI6Ij0iLCJcdTIwN0QiOiIoIiwiXHUyMDdFIjoiKSIsIlx1MjA3MCI6IjAiLCJceEI5IjoiMSIsIlx4QjIiOiIyIiwiXHhCMyI6IjMiLCJcdTIwNzQiOiI0IiwiXHUyMDc1IjoiNSIsIlx1MjA3NiI6IjYiLCJcdTIwNzciOiI3IiwiXHUyMDc4IjoiOCIsIlx1MjA3OSI6IjkiLCJcdTFEMkMiOiJBIiwiXHUxRDJFIjoiQiIsIlx1MUQzMCI6IkQiLCJcdTFEMzEiOiJFIiwiXHUxRDMzIjoiRyIsIlx1MUQzNCI6IkgiLCJcdTFEMzUiOiJJIiwiXHUxRDM2IjoiSiIsIlx1MUQzNyI6IksiLCJcdTFEMzgiOiJMIiwiXHUxRDM5IjoiTSIsIlx1MUQzQSI6Ik4iLCJcdTFEM0MiOiJPIiwiXHUxRDNFIjoiUCIsIlx1MUQzRiI6IlIiLCJcdTFENDAiOiJUIiwiXHUxRDQxIjoiVSIsIlx1MkM3RCI6IlYiLCJcdTFENDIiOiJXIiwiXHUxRDQzIjoiYSIsIlx1MUQ0NyI6ImIiLCJcdTFEOUMiOiJjIiwiXHUxRDQ4IjoiZCIsIlx1MUQ0OSI6ImUiLCJcdTFEQTAiOiJmIiwiXHUxRDREIjoiZyIsXHUwMkIwOiJoIiwiXHUyMDcxIjoiaSIsXHUwMkIyOiJqIiwiXHUxRDRGIjoiayIsXHUwMkUxOiJsIiwiXHUxRDUwIjoibSIsXHUyMDdGOiJuIiwiXHUxRDUyIjoibyIsIlx1MUQ1NiI6InAiLFx1MDJCMzoiciIsXHUwMkUyOiJzIiwiXHUxRDU3IjoidCIsIlx1MUQ1OCI6InUiLCJcdTFENUIiOiJ2IixcdTAyQjc6InciLFx1MDJFMzoieCIsXHUwMkI4OiJ5IiwiXHUxREJCIjoieiIsIlx1MUQ1RCI6Ilx1MDNCMiIsIlx1MUQ1RSI6Ilx1MDNCMyIsIlx1MUQ1RiI6Ilx1MDNCNCIsIlx1MUQ2MCI6Ilx1MDNENSIsIlx1MUQ2MSI6Ilx1MDNDNyIsIlx1MURCRiI6Ilx1MDNCOCJ9KSxVNz17Ilx1MDMwMSI6e3RleHQ6IlxcJyIsbWF0aDoiXFxhY3V0ZSJ9LCJcdTAzMDAiOnt0ZXh0OiJcXGAiLG1hdGg6IlxcZ3JhdmUifSwiXHUwMzA4Ijp7dGV4dDonXFwiJyxtYXRoOiJcXGRkb3QifSwiXHUwMzAzIjp7dGV4dDoiXFx+IixtYXRoOiJcXHRpbGRlIn0sIlx1MDMwNCI6e3RleHQ6IlxcPSIsbWF0aDoiXFxiYXIifSwiXHUwMzA2Ijp7dGV4dDoiXFx1IixtYXRoOiJcXGJyZXZlIn0sIlx1MDMwQyI6e3RleHQ6IlxcdiIsbWF0aDoiXFxjaGVjayJ9LCJcdTAzMDIiOnt0ZXh0OiJcXF4iLG1hdGg6IlxcaGF0In0sIlx1MDMwNyI6e3RleHQ6IlxcLiIsbWF0aDoiXFxkb3QifSwiXHUwMzBBIjp7dGV4dDoiXFxyIixtYXRoOiJcXG1hdGhyaW5nIn0sIlx1MDMwQiI6e3RleHQ6IlxcSCJ9LCJcdTAzMjciOnt0ZXh0OiJcXGMifX0sU0c9e1x1MDBFMToiYVx1MDMwMSIsXHUwMEUwOiJhXHUwMzAwIixcdTAwRTQ6ImFcdTAzMDgiLFx1MDFERjoiYVx1MDMwOFx1MDMwNCIsXHUwMEUzOiJhXHUwMzAzIixcdTAxMDE6ImFcdTAzMDQiLFx1MDEwMzoiYVx1MDMwNiIsXHUxRUFGOiJhXHUwMzA2XHUwMzAxIixcdTFFQjE6ImFcdTAzMDZcdTAzMDAiLFx1MUVCNToiYVx1MDMwNlx1MDMwMyIsXHUwMUNFOiJhXHUwMzBDIixcdTAwRTI6ImFcdTAzMDIiLFx1MUVBNToiYVx1MDMwMlx1MDMwMSIsXHUxRUE3OiJhXHUwMzAyXHUwMzAwIixcdTFFQUI6ImFcdTAzMDJcdTAzMDMiLFx1MDIyNzoiYVx1MDMwNyIsXHUwMUUxOiJhXHUwMzA3XHUwMzA0IixcdTAwRTU6ImFcdTAzMEEiLFx1MDFGQjoiYVx1MDMwQVx1MDMwMSIsXHUxRTAzOiJiXHUwMzA3IixcdTAxMDc6ImNcdTAzMDEiLFx1MUUwOToiY1x1MDMyN1x1MDMwMSIsXHUwMTBEOiJjXHUwMzBDIixcdTAxMDk6ImNcdTAzMDIiLFx1MDEwQjoiY1x1MDMwNyIsXHUwMEU3OiJjXHUwMzI3IixcdTAxMEY6ImRcdTAzMEMiLFx1MUUwQjoiZFx1MDMwNyIsXHUxRTExOiJkXHUwMzI3IixcdTAwRTk6ImVcdTAzMDEiLFx1MDBFODoiZVx1MDMwMCIsXHUwMEVCOiJlXHUwMzA4IixcdTFFQkQ6ImVcdTAzMDMiLFx1MDExMzoiZVx1MDMwNCIsXHUxRTE3OiJlXHUwMzA0XHUwMzAxIixcdTFFMTU6ImVcdTAzMDRcdTAzMDAiLFx1MDExNToiZVx1MDMwNiIsXHUxRTFEOiJlXHUwMzI3XHUwMzA2IixcdTAxMUI6ImVcdTAzMEMiLFx1MDBFQToiZVx1MDMwMiIsXHUxRUJGOiJlXHUwMzAyXHUwMzAxIixcdTFFQzE6ImVcdTAzMDJcdTAzMDAiLFx1MUVDNToiZVx1MDMwMlx1MDMwMyIsXHUwMTE3OiJlXHUwMzA3IixcdTAyMjk6ImVcdTAzMjciLFx1MUUxRjoiZlx1MDMwNyIsXHUwMUY1OiJnXHUwMzAxIixcdTFFMjE6ImdcdTAzMDQiLFx1MDExRjoiZ1x1MDMwNiIsXHUwMUU3OiJnXHUwMzBDIixcdTAxMUQ6ImdcdTAzMDIiLFx1MDEyMToiZ1x1MDMwNyIsXHUwMTIzOiJnXHUwMzI3IixcdTFFMjc6ImhcdTAzMDgiLFx1MDIxRjoiaFx1MDMwQyIsXHUwMTI1OiJoXHUwMzAyIixcdTFFMjM6ImhcdTAzMDciLFx1MUUyOToiaFx1MDMyNyIsXHUwMEVEOiJpXHUwMzAxIixcdTAwRUM6ImlcdTAzMDAiLFx1MDBFRjoiaVx1MDMwOCIsXHUxRTJGOiJpXHUwMzA4XHUwMzAxIixcdTAxMjk6ImlcdTAzMDMiLFx1MDEyQjoiaVx1MDMwNCIsXHUwMTJEOiJpXHUwMzA2IixcdTAxRDA6ImlcdTAzMEMiLFx1MDBFRToiaVx1MDMwMiIsXHUwMUYwOiJqXHUwMzBDIixcdTAxMzU6ImpcdTAzMDIiLFx1MUUzMToia1x1MDMwMSIsXHUwMUU5OiJrXHUwMzBDIixcdTAxMzc6ImtcdTAzMjciLFx1MDEzQToibFx1MDMwMSIsXHUwMTNFOiJsXHUwMzBDIixcdTAxM0M6ImxcdTAzMjciLFx1MUUzRjoibVx1MDMwMSIsXHUxRTQxOiJtXHUwMzA3IixcdTAxNDQ6Im5cdTAzMDEiLFx1MDFGOToiblx1MDMwMCIsXHUwMEYxOiJuXHUwMzAzIixcdTAxNDg6Im5cdTAzMEMiLFx1MUU0NToiblx1MDMwNyIsXHUwMTQ2OiJuXHUwMzI3IixcdTAwRjM6Im9cdTAzMDEiLFx1MDBGMjoib1x1MDMwMCIsXHUwMEY2OiJvXHUwMzA4IixcdTAyMkI6Im9cdTAzMDhcdTAzMDQiLFx1MDBGNToib1x1MDMwMyIsXHUxRTREOiJvXHUwMzAzXHUwMzAxIixcdTFFNEY6Im9cdTAzMDNcdTAzMDgiLFx1MDIyRDoib1x1MDMwM1x1MDMwNCIsXHUwMTREOiJvXHUwMzA0IixcdTFFNTM6Im9cdTAzMDRcdTAzMDEiLFx1MUU1MToib1x1MDMwNFx1MDMwMCIsXHUwMTRGOiJvXHUwMzA2IixcdTAxRDI6Im9cdTAzMEMiLFx1MDBGNDoib1x1MDMwMiIsXHUxRUQxOiJvXHUwMzAyXHUwMzAxIixcdTFFRDM6Im9cdTAzMDJcdTAzMDAiLFx1MUVENzoib1x1MDMwMlx1MDMwMyIsXHUwMjJGOiJvXHUwMzA3IixcdTAyMzE6Im9cdTAzMDdcdTAzMDQiLFx1MDE1MToib1x1MDMwQiIsXHUxRTU1OiJwXHUwMzAxIixcdTFFNTc6InBcdTAzMDciLFx1MDE1NToiclx1MDMwMSIsXHUwMTU5OiJyXHUwMzBDIixcdTFFNTk6InJcdTAzMDciLFx1MDE1Nzoiclx1MDMyNyIsXHUwMTVCOiJzXHUwMzAxIixcdTFFNjU6InNcdTAzMDFcdTAzMDciLFx1MDE2MToic1x1MDMwQyIsXHUxRTY3OiJzXHUwMzBDXHUwMzA3IixcdTAxNUQ6InNcdTAzMDIiLFx1MUU2MToic1x1MDMwNyIsXHUwMTVGOiJzXHUwMzI3IixcdTFFOTc6InRcdTAzMDgiLFx1MDE2NToidFx1MDMwQyIsXHUxRTZCOiJ0XHUwMzA3IixcdTAxNjM6InRcdTAzMjciLFx1MDBGQToidVx1MDMwMSIsXHUwMEY5OiJ1XHUwMzAwIixcdTAwRkM6InVcdTAzMDgiLFx1MDFEODoidVx1MDMwOFx1MDMwMSIsXHUwMURDOiJ1XHUwMzA4XHUwMzAwIixcdTAxRDY6InVcdTAzMDhcdTAzMDQiLFx1MDFEQToidVx1MDMwOFx1MDMwQyIsXHUwMTY5OiJ1XHUwMzAzIixcdTFFNzk6InVcdTAzMDNcdTAzMDEiLFx1MDE2QjoidVx1MDMwNCIsXHUxRTdCOiJ1XHUwMzA0XHUwMzA4IixcdTAxNkQ6InVcdTAzMDYiLFx1MDFENDoidVx1MDMwQyIsXHUwMEZCOiJ1XHUwMzAyIixcdTAxNkY6InVcdTAzMEEiLFx1MDE3MToidVx1MDMwQiIsXHUxRTdEOiJ2XHUwMzAzIixcdTFFODM6IndcdTAzMDEiLFx1MUU4MToid1x1MDMwMCIsXHUxRTg1OiJ3XHUwMzA4IixcdTAxNzU6IndcdTAzMDIiLFx1MUU4Nzoid1x1MDMwNyIsXHUxRTk4OiJ3XHUwMzBBIixcdTFFOEQ6InhcdTAzMDgiLFx1MUU4QjoieFx1MDMwNyIsXHUwMEZEOiJ5XHUwMzAxIixcdTFFRjM6InlcdTAzMDAiLFx1MDBGRjoieVx1MDMwOCIsXHUxRUY5OiJ5XHUwMzAzIixcdTAyMzM6InlcdTAzMDQiLFx1MDE3NzoieVx1MDMwMiIsXHUxRThGOiJ5XHUwMzA3IixcdTFFOTk6InlcdTAzMEEiLFx1MDE3QToielx1MDMwMSIsXHUwMTdFOiJ6XHUwMzBDIixcdTFFOTE6InpcdTAzMDIiLFx1MDE3Qzoielx1MDMwNyIsXHUwMEMxOiJBXHUwMzAxIixcdTAwQzA6IkFcdTAzMDAiLFx1MDBDNDoiQVx1MDMwOCIsXHUwMURFOiJBXHUwMzA4XHUwMzA0IixcdTAwQzM6IkFcdTAzMDMiLFx1MDEwMDoiQVx1MDMwNCIsXHUwMTAyOiJBXHUwMzA2IixcdTFFQUU6IkFcdTAzMDZcdTAzMDEiLFx1MUVCMDoiQVx1MDMwNlx1MDMwMCIsXHUxRUI0OiJBXHUwMzA2XHUwMzAzIixcdTAxQ0Q6IkFcdTAzMEMiLFx1MDBDMjoiQVx1MDMwMiIsXHUxRUE0OiJBXHUwMzAyXHUwMzAxIixcdTFFQTY6IkFcdTAzMDJcdTAzMDAiLFx1MUVBQToiQVx1MDMwMlx1MDMwMyIsXHUwMjI2OiJBXHUwMzA3IixcdTAxRTA6IkFcdTAzMDdcdTAzMDQiLFx1MDBDNToiQVx1MDMwQSIsXHUwMUZBOiJBXHUwMzBBXHUwMzAxIixcdTFFMDI6IkJcdTAzMDciLFx1MDEwNjoiQ1x1MDMwMSIsXHUxRTA4OiJDXHUwMzI3XHUwMzAxIixcdTAxMEM6IkNcdTAzMEMiLFx1MDEwODoiQ1x1MDMwMiIsXHUwMTBBOiJDXHUwMzA3IixcdTAwQzc6IkNcdTAzMjciLFx1MDEwRToiRFx1MDMwQyIsXHUxRTBBOiJEXHUwMzA3IixcdTFFMTA6IkRcdTAzMjciLFx1MDBDOToiRVx1MDMwMSIsXHUwMEM4OiJFXHUwMzAwIixcdTAwQ0I6IkVcdTAzMDgiLFx1MUVCQzoiRVx1MDMwMyIsXHUwMTEyOiJFXHUwMzA0IixcdTFFMTY6IkVcdTAzMDRcdTAzMDEiLFx1MUUxNDoiRVx1MDMwNFx1MDMwMCIsXHUwMTE0OiJFXHUwMzA2IixcdTFFMUM6IkVcdTAzMjdcdTAzMDYiLFx1MDExQToiRVx1MDMwQyIsXHUwMENBOiJFXHUwMzAyIixcdTFFQkU6IkVcdTAzMDJcdTAzMDEiLFx1MUVDMDoiRVx1MDMwMlx1MDMwMCIsXHUxRUM0OiJFXHUwMzAyXHUwMzAzIixcdTAxMTY6IkVcdTAzMDciLFx1MDIyODoiRVx1MDMyNyIsXHUxRTFFOiJGXHUwMzA3IixcdTAxRjQ6IkdcdTAzMDEiLFx1MUUyMDoiR1x1MDMwNCIsXHUwMTFFOiJHXHUwMzA2IixcdTAxRTY6IkdcdTAzMEMiLFx1MDExQzoiR1x1MDMwMiIsXHUwMTIwOiJHXHUwMzA3IixcdTAxMjI6IkdcdTAzMjciLFx1MUUyNjoiSFx1MDMwOCIsXHUwMjFFOiJIXHUwMzBDIixcdTAxMjQ6IkhcdTAzMDIiLFx1MUUyMjoiSFx1MDMwNyIsXHUxRTI4OiJIXHUwMzI3IixcdTAwQ0Q6IklcdTAzMDEiLFx1MDBDQzoiSVx1MDMwMCIsXHUwMENGOiJJXHUwMzA4IixcdTFFMkU6IklcdTAzMDhcdTAzMDEiLFx1MDEyODoiSVx1MDMwMyIsXHUwMTJBOiJJXHUwMzA0IixcdTAxMkM6IklcdTAzMDYiLFx1MDFDRjoiSVx1MDMwQyIsXHUwMENFOiJJXHUwMzAyIixcdTAxMzA6IklcdTAzMDciLFx1MDEzNDoiSlx1MDMwMiIsXHUxRTMwOiJLXHUwMzAxIixcdTAxRTg6IktcdTAzMEMiLFx1MDEzNjoiS1x1MDMyNyIsXHUwMTM5OiJMXHUwMzAxIixcdTAxM0Q6IkxcdTAzMEMiLFx1MDEzQjoiTFx1MDMyNyIsXHUxRTNFOiJNXHUwMzAxIixcdTFFNDA6Ik1cdTAzMDciLFx1MDE0MzoiTlx1MDMwMSIsXHUwMUY4OiJOXHUwMzAwIixcdTAwRDE6Ik5cdTAzMDMiLFx1MDE0NzoiTlx1MDMwQyIsXHUxRTQ0OiJOXHUwMzA3IixcdTAxNDU6Ik5cdTAzMjciLFx1MDBEMzoiT1x1MDMwMSIsXHUwMEQyOiJPXHUwMzAwIixcdTAwRDY6Ik9cdTAzMDgiLFx1MDIyQToiT1x1MDMwOFx1MDMwNCIsXHUwMEQ1OiJPXHUwMzAzIixcdTFFNEM6Ik9cdTAzMDNcdTAzMDEiLFx1MUU0RToiT1x1MDMwM1x1MDMwOCIsXHUwMjJDOiJPXHUwMzAzXHUwMzA0IixcdTAxNEM6Ik9cdTAzMDQiLFx1MUU1MjoiT1x1MDMwNFx1MDMwMSIsXHUxRTUwOiJPXHUwMzA0XHUwMzAwIixcdTAxNEU6Ik9cdTAzMDYiLFx1MDFEMToiT1x1MDMwQyIsXHUwMEQ0OiJPXHUwMzAyIixcdTFFRDA6Ik9cdTAzMDJcdTAzMDEiLFx1MUVEMjoiT1x1MDMwMlx1MDMwMCIsXHUxRUQ2OiJPXHUwMzAyXHUwMzAzIixcdTAyMkU6Ik9cdTAzMDciLFx1MDIzMDoiT1x1MDMwN1x1MDMwNCIsXHUwMTUwOiJPXHUwMzBCIixcdTFFNTQ6IlBcdTAzMDEiLFx1MUU1NjoiUFx1MDMwNyIsXHUwMTU0OiJSXHUwMzAxIixcdTAxNTg6IlJcdTAzMEMiLFx1MUU1ODoiUlx1MDMwNyIsXHUwMTU2OiJSXHUwMzI3IixcdTAxNUE6IlNcdTAzMDEiLFx1MUU2NDoiU1x1MDMwMVx1MDMwNyIsXHUwMTYwOiJTXHUwMzBDIixcdTFFNjY6IlNcdTAzMENcdTAzMDciLFx1MDE1QzoiU1x1MDMwMiIsXHUxRTYwOiJTXHUwMzA3IixcdTAxNUU6IlNcdTAzMjciLFx1MDE2NDoiVFx1MDMwQyIsXHUxRTZBOiJUXHUwMzA3IixcdTAxNjI6IlRcdTAzMjciLFx1MDBEQToiVVx1MDMwMSIsXHUwMEQ5OiJVXHUwMzAwIixcdTAwREM6IlVcdTAzMDgiLFx1MDFENzoiVVx1MDMwOFx1MDMwMSIsXHUwMURCOiJVXHUwMzA4XHUwMzAwIixcdTAxRDU6IlVcdTAzMDhcdTAzMDQiLFx1MDFEOToiVVx1MDMwOFx1MDMwQyIsXHUwMTY4OiJVXHUwMzAzIixcdTFFNzg6IlVcdTAzMDNcdTAzMDEiLFx1MDE2QToiVVx1MDMwNCIsXHUxRTdBOiJVXHUwMzA0XHUwMzA4IixcdTAxNkM6IlVcdTAzMDYiLFx1MDFEMzoiVVx1MDMwQyIsXHUwMERCOiJVXHUwMzAyIixcdTAxNkU6IlVcdTAzMEEiLFx1MDE3MDoiVVx1MDMwQiIsXHUxRTdDOiJWXHUwMzAzIixcdTFFODI6IldcdTAzMDEiLFx1MUU4MDoiV1x1MDMwMCIsXHUxRTg0OiJXXHUwMzA4IixcdTAxNzQ6IldcdTAzMDIiLFx1MUU4NjoiV1x1MDMwNyIsXHUxRThDOiJYXHUwMzA4IixcdTFFOEE6IlhcdTAzMDciLFx1MDBERDoiWVx1MDMwMSIsXHUxRUYyOiJZXHUwMzAwIixcdTAxNzg6IllcdTAzMDgiLFx1MUVGODoiWVx1MDMwMyIsXHUwMjMyOiJZXHUwMzA0IixcdTAxNzY6IllcdTAzMDIiLFx1MUU4RToiWVx1MDMwNyIsXHUwMTc5OiJaXHUwMzAxIixcdTAxN0Q6IlpcdTAzMEMiLFx1MUU5MDoiWlx1MDMwMiIsXHUwMTdCOiJaXHUwMzA3IixcdTAzQUM6Ilx1MDNCMVx1MDMwMSIsXHUxRjcwOiJcdTAzQjFcdTAzMDAiLFx1MUZCMToiXHUwM0IxXHUwMzA0IixcdTFGQjA6Ilx1MDNCMVx1MDMwNiIsXHUwM0FEOiJcdTAzQjVcdTAzMDEiLFx1MUY3MjoiXHUwM0I1XHUwMzAwIixcdTAzQUU6Ilx1MDNCN1x1MDMwMSIsXHUxRjc0OiJcdTAzQjdcdTAzMDAiLFx1MDNBRjoiXHUwM0I5XHUwMzAxIixcdTFGNzY6Ilx1MDNCOVx1MDMwMCIsXHUwM0NBOiJcdTAzQjlcdTAzMDgiLFx1MDM5MDoiXHUwM0I5XHUwMzA4XHUwMzAxIixcdTFGRDI6Ilx1MDNCOVx1MDMwOFx1MDMwMCIsXHUxRkQxOiJcdTAzQjlcdTAzMDQiLFx1MUZEMDoiXHUwM0I5XHUwMzA2IixcdTAzQ0M6Ilx1MDNCRlx1MDMwMSIsXHUxRjc4OiJcdTAzQkZcdTAzMDAiLFx1MDNDRDoiXHUwM0M1XHUwMzAxIixcdTFGN0E6Ilx1MDNDNVx1MDMwMCIsXHUwM0NCOiJcdTAzQzVcdTAzMDgiLFx1MDNCMDoiXHUwM0M1XHUwMzA4XHUwMzAxIixcdTFGRTI6Ilx1MDNDNVx1MDMwOFx1MDMwMCIsXHUxRkUxOiJcdTAzQzVcdTAzMDQiLFx1MUZFMDoiXHUwM0M1XHUwMzA2IixcdTAzQ0U6Ilx1MDNDOVx1MDMwMSIsXHUxRjdDOiJcdTAzQzlcdTAzMDAiLFx1MDM4RToiXHUwM0E1XHUwMzAxIixcdTFGRUE6Ilx1MDNBNVx1MDMwMCIsXHUwM0FCOiJcdTAzQTVcdTAzMDgiLFx1MUZFOToiXHUwM0E1XHUwMzA0IixcdTFGRTg6Ilx1MDNBNVx1MDMwNiIsXHUwMzhGOiJcdTAzQTlcdTAzMDEiLFx1MUZGQToiXHUwM0E5XHUwMzAwIn0sXzM9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJQYXJzZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMubW9kZT12b2lkIDAsdGhpcy5ndWxsZXQ9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMubGVmdHJpZ2h0RGVwdGg9dm9pZCAwLHRoaXMubmV4dFRva2VuPXZvaWQgMCx0aGlzLm1vZGU9Im1hdGgiLHRoaXMuZ3VsbGV0PW5ldyB0QShlLHIsdGhpcy5tb2RlKSx0aGlzLnNldHRpbmdzPXIsdGhpcy5sZWZ0cmlnaHREZXB0aD0wfWV4cGVjdChlLHIpe2lmKHI9PT12b2lkIDAmJihyPSEwKSx0aGlzLmZldGNoKCkudGV4dCE9PWUpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCAnIitlKyInLCBnb3QgJyIrdGhpcy5mZXRjaCgpLnRleHQrIiciLHRoaXMuZmV0Y2goKSk7ciYmdGhpcy5jb25zdW1lKCl9Y29uc3VtZSgpe3RoaXMubmV4dFRva2VuPW51bGx9ZmV0Y2goKXtyZXR1cm4gdGhpcy5uZXh0VG9rZW49PW51bGwmJih0aGlzLm5leHRUb2tlbj10aGlzLmd1bGxldC5leHBhbmROZXh0VG9rZW4oKSksdGhpcy5uZXh0VG9rZW59c3dpdGNoTW9kZShlKXt0aGlzLm1vZGU9ZSx0aGlzLmd1bGxldC5zd2l0Y2hNb2RlKGUpfXBhcnNlKCl7dGhpcy5zZXR0aW5ncy5nbG9iYWxHcm91cHx8dGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpLHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvciYmdGhpcy5ndWxsZXQubWFjcm9zLnNldCgiXFxjb2xvciIsIlxcdGV4dGNvbG9yIik7dHJ5e3ZhciBlPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIkVPRiIpLHRoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCksZX1maW5hbGx5e3RoaXMuZ3VsbGV0LmVuZEdyb3VwcygpfX1zdWJwYXJzZShlKXt2YXIgcj10aGlzLm5leHRUb2tlbjt0aGlzLmNvbnN1bWUoKSx0aGlzLmd1bGxldC5wdXNoVG9rZW4obmV3IF9vKCJ9IikpLHRoaXMuZ3VsbGV0LnB1c2hUb2tlbnMoZSk7dmFyIG49dGhpcy5wYXJzZUV4cHJlc3Npb24oITEpO3JldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMubmV4dFRva2VuPXIsbn1wYXJzZUV4cHJlc3Npb24oZSxyKXtmb3IodmFyIG49W107Oyl7dGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLmNvbnN1bWVTcGFjZXMoKTt2YXIgaT10aGlzLmZldGNoKCk7aWYodC5lbmRPZkV4cHJlc3Npb24uaW5kZXhPZihpLnRleHQpIT09LTF8fHImJmkudGV4dD09PXJ8fGUmJnloW2kudGV4dF0mJnloW2kudGV4dF0uaW5maXgpYnJlYWs7dmFyIGE9dGhpcy5wYXJzZUF0b20ocik7aWYoYSl7aWYoYS50eXBlPT09ImludGVybmFsIiljb250aW51ZX1lbHNlIGJyZWFrO24ucHVzaChhKX1yZXR1cm4gdGhpcy5tb2RlPT09InRleHQiJiZ0aGlzLmZvcm1MaWdhdHVyZXMobiksdGhpcy5oYW5kbGVJbmZpeE5vZGVzKG4pfWhhbmRsZUluZml4Tm9kZXMoZSl7Zm9yKHZhciByPS0xLG4saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV0udHlwZT09PSJpbmZpeCIpe2lmKHIhPT0tMSl0aHJvdyBuZXcgcHQoIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cCIsZVtpXS50b2tlbik7cj1pLG49ZVtpXS5yZXBsYWNlV2l0aH1pZihyIT09LTEmJm4pe3ZhciBhLHMsbD1lLnNsaWNlKDAsciksdT1lLnNsaWNlKHIrMSk7bC5sZW5ndGg9PT0xJiZsWzBdLnR5cGU9PT0ib3JkZ3JvdXAiP2E9bFswXTphPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTpsfSx1Lmxlbmd0aD09PTEmJnVbMF0udHlwZT09PSJvcmRncm91cCI/cz11WzBdOnM9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5OnV9O3ZhciBoO3JldHVybiBuPT09IlxcXFxhYm92ZWZyYWMiP2g9dGhpcy5jYWxsRnVuY3Rpb24obixbYSxlW3JdLHNdLFtdKTpoPXRoaXMuY2FsbEZ1bmN0aW9uKG4sW2Esc10sW10pLFtoXX1lbHNlIHJldHVybiBlfWhhbmRsZVN1cFN1YnNjcmlwdChlKXt2YXIgcj10aGlzLmZldGNoKCksbj1yLnRleHQ7dGhpcy5jb25zdW1lKCksdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk7ZG97dmFyIGE7aT10aGlzLnBhcnNlR3JvdXAoZSl9d2hpbGUoKChhPWkpPT1udWxsP3ZvaWQgMDphLnR5cGUpPT09ImludGVybmFsIik7aWYoIWkpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBncm91cCBhZnRlciAnIituKyInIixyKTtyZXR1cm4gaX1mb3JtYXRVbnN1cHBvcnRlZENtZChlKXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXIucHVzaCh7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsdGV4dDplW25dfSk7dmFyIGk9e3R5cGU6InRleHQiLG1vZGU6dGhpcy5tb2RlLGJvZHk6cn0sYT17dHlwZToiY29sb3IiLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnRoaXMuc2V0dGluZ3MuZXJyb3JDb2xvcixib2R5OltpXX07cmV0dXJuIGF9cGFyc2VBdG9tKGUpe3ZhciByPXRoaXMucGFyc2VHcm91cCgiYXRvbSIsZSk7aWYocj8udHlwZT09PSJpbnRlcm5hbCJ8fHRoaXMubW9kZT09PSJ0ZXh0IilyZXR1cm4gcjtmb3IodmFyIG4saTs7KXt0aGlzLmNvbnN1bWVTcGFjZXMoKTt2YXIgYT10aGlzLmZldGNoKCk7aWYoYS50ZXh0PT09IlxcbGltaXRzInx8YS50ZXh0PT09Ilxcbm9saW1pdHMiKXtpZihyJiZyLnR5cGU9PT0ib3AiKXt2YXIgcz1hLnRleHQ9PT0iXFxsaW1pdHMiO3IubGltaXRzPXMsci5hbHdheXNIYW5kbGVTdXBTdWI9ITB9ZWxzZSBpZihyJiZyLnR5cGU9PT0ib3BlcmF0b3JuYW1lIilyLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHIubGltaXRzPWEudGV4dD09PSJcXGxpbWl0cyIpO2Vsc2UgdGhyb3cgbmV3IHB0KCJMaW1pdCBjb250cm9scyBtdXN0IGZvbGxvdyBhIG1hdGggb3BlcmF0b3IiLGEpO3RoaXMuY29uc3VtZSgpfWVsc2UgaWYoYS50ZXh0PT09Il4iKXtpZihuKXRocm93IG5ldyBwdCgiRG91YmxlIHN1cGVyc2NyaXB0IixhKTtuPXRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdXBlcnNjcmlwdCIpfWVsc2UgaWYoYS50ZXh0PT09Il8iKXtpZihpKXRocm93IG5ldyBwdCgiRG91YmxlIHN1YnNjcmlwdCIsYSk7aT10aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3Vic2NyaXB0Iil9ZWxzZSBpZihhLnRleHQ9PT0iJyIpe2lmKG4pdGhyb3cgbmV3IHB0KCJEb3VibGUgc3VwZXJzY3JpcHQiLGEpO3ZhciBsPXt0eXBlOiJ0ZXh0b3JkIixtb2RlOnRoaXMubW9kZSx0ZXh0OiJcXHByaW1lIn0sdT1bbF07Zm9yKHRoaXMuY29uc3VtZSgpO3RoaXMuZmV0Y2goKS50ZXh0PT09IiciOyl1LnB1c2gobCksdGhpcy5jb25zdW1lKCk7dGhpcy5mZXRjaCgpLnRleHQ9PT0iXiImJnUucHVzaCh0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3VwZXJzY3JpcHQiKSksbj17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6dX19ZWxzZSBpZih4M1thLnRleHRdKXt2YXIgaD1FRy50ZXN0KGEudGV4dCksZj1bXTtmb3IoZi5wdXNoKG5ldyBfbyh4M1thLnRleHRdKSksdGhpcy5jb25zdW1lKCk7Oyl7dmFyIGQ9dGhpcy5mZXRjaCgpLnRleHQ7aWYoIXgzW2RdfHxFRy50ZXN0KGQpIT09aClicmVhaztmLnVuc2hpZnQobmV3IF9vKHgzW2RdKSksdGhpcy5jb25zdW1lKCl9dmFyIHA9dGhpcy5zdWJwYXJzZShmKTtoP2k9e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OnB9Om49e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OnB9fWVsc2UgYnJlYWt9cmV0dXJuIG58fGk/e3R5cGU6InN1cHN1YiIsbW9kZTp0aGlzLm1vZGUsYmFzZTpyLHN1cDpuLHN1YjppfTpyfXBhcnNlRnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmZldGNoKCksaT1uLnRleHQsYT15aFtpXTtpZighYSlyZXR1cm4gbnVsbDtpZih0aGlzLmNvbnN1bWUoKSxyJiZyIT09ImF0b20iJiYhYS5hbGxvd2VkSW5Bcmd1bWVudCl0aHJvdyBuZXcgcHQoIkdvdCBmdW5jdGlvbiAnIitpKyInIHdpdGggbm8gYXJndW1lbnRzIisocj8iIGFzICIrcjoiIiksbik7aWYodGhpcy5tb2RlPT09InRleHQiJiYhYS5hbGxvd2VkSW5UZXh0KXRocm93IG5ldyBwdCgiQ2FuJ3QgdXNlIGZ1bmN0aW9uICciK2krIicgaW4gdGV4dCBtb2RlIixuKTtpZih0aGlzLm1vZGU9PT0ibWF0aCImJmEuYWxsb3dlZEluTWF0aD09PSExKXRocm93IG5ldyBwdCgiQ2FuJ3QgdXNlIGZ1bmN0aW9uICciK2krIicgaW4gbWF0aCBtb2RlIixuKTt2YXJ7YXJnczpzLG9wdEFyZ3M6bH09dGhpcy5wYXJzZUFyZ3VtZW50cyhpLGEpO3JldHVybiB0aGlzLmNhbGxGdW5jdGlvbihpLHMsbCxuLGUpfWNhbGxGdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPXtmdW5jTmFtZTplLHBhcnNlcjp0aGlzLHRva2VuOmksYnJlYWtPblRva2VuVGV4dDphfSxsPXloW2VdO2lmKGwmJmwuaGFuZGxlcilyZXR1cm4gbC5oYW5kbGVyKHMscixuKTt0aHJvdyBuZXcgcHQoIk5vIGZ1bmN0aW9uIGhhbmRsZXIgZm9yICIrZSl9cGFyc2VBcmd1bWVudHMoZSxyKXt2YXIgbj1yLm51bUFyZ3Mrci5udW1PcHRpb25hbEFyZ3M7aWYobj09PTApcmV0dXJue2FyZ3M6W10sb3B0QXJnczpbXX07Zm9yKHZhciBpPVtdLGE9W10scz0wO3M8bjtzKyspe3ZhciBsPXIuYXJnVHlwZXMmJnIuYXJnVHlwZXNbc10sdT1zPHIubnVtT3B0aW9uYWxBcmdzOyhyLnByaW1pdGl2ZSYmbD09bnVsbHx8ci50eXBlPT09InNxcnQiJiZzPT09MSYmYVswXT09bnVsbCkmJihsPSJwcmltaXRpdmUiKTt2YXIgaD10aGlzLnBhcnNlR3JvdXBPZlR5cGUoImFyZ3VtZW50IHRvICciK2UrIiciLGwsdSk7aWYodSlhLnB1c2goaCk7ZWxzZSBpZihoIT1udWxsKWkucHVzaChoKTtlbHNlIHRocm93IG5ldyBwdCgiTnVsbCBhcmd1bWVudCwgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIil9cmV0dXJue2FyZ3M6aSxvcHRBcmdzOmF9fXBhcnNlR3JvdXBPZlR5cGUoZSxyLG4pe3N3aXRjaChyKXtjYXNlImNvbG9yIjpyZXR1cm4gdGhpcy5wYXJzZUNvbG9yR3JvdXAobik7Y2FzZSJzaXplIjpyZXR1cm4gdGhpcy5wYXJzZVNpemVHcm91cChuKTtjYXNlInVybCI6cmV0dXJuIHRoaXMucGFyc2VVcmxHcm91cChuKTtjYXNlIm1hdGgiOmNhc2UidGV4dCI6cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4scik7Y2FzZSJoYm94Ijp7dmFyIGk9dGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAobiwidGV4dCIpO3JldHVybiBpIT1udWxsP3t0eXBlOiJzdHlsaW5nIixtb2RlOmkubW9kZSxib2R5OltpXSxzdHlsZToidGV4dCJ9Om51bGx9Y2FzZSJyYXciOnt2YXIgYT10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInJhdyIsbik7cmV0dXJuIGEhPW51bGw/e3R5cGU6InJhdyIsbW9kZToidGV4dCIsc3RyaW5nOmEudGV4dH06bnVsbH1jYXNlInByaW1pdGl2ZSI6e2lmKG4pdGhyb3cgbmV3IHB0KCJBIHByaW1pdGl2ZSBhcmd1bWVudCBjYW5ub3QgYmUgb3B0aW9uYWwiKTt2YXIgcz10aGlzLnBhcnNlR3JvdXAoZSk7aWYocz09bnVsbCl0aHJvdyBuZXcgcHQoIkV4cGVjdGVkIGdyb3VwIGFzICIrZSx0aGlzLmZldGNoKCkpO3JldHVybiBzfWNhc2Uib3JpZ2luYWwiOmNhc2UgbnVsbDpjYXNlIHZvaWQgMDpyZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAobik7ZGVmYXVsdDp0aHJvdyBuZXcgcHQoIlVua25vd24gZ3JvdXAgdHlwZSBhcyAiK2UsdGhpcy5mZXRjaCgpKX19Y29uc3VtZVNwYWNlcygpe2Zvcig7dGhpcy5mZXRjaCgpLnRleHQ9PT0iICI7KXRoaXMuY29uc3VtZSgpfXBhcnNlU3RyaW5nR3JvdXAoZSxyKXt2YXIgbj10aGlzLmd1bGxldC5zY2FuQXJndW1lbnQocik7aWYobj09bnVsbClyZXR1cm4gbnVsbDtmb3IodmFyIGk9IiIsYTsoYT10aGlzLmZldGNoKCkpLnRleHQhPT0iRU9GIjspaSs9YS50ZXh0LHRoaXMuY29uc3VtZSgpO3JldHVybiB0aGlzLmNvbnN1bWUoKSxuLnRleHQ9aSxufXBhcnNlUmVnZXhHcm91cChlLHIpe2Zvcih2YXIgbj10aGlzLmZldGNoKCksaT1uLGE9IiIsczsocz10aGlzLmZldGNoKCkpLnRleHQhPT0iRU9GIiYmZS50ZXN0KGErcy50ZXh0KTspaT1zLGErPWkudGV4dCx0aGlzLmNvbnN1bWUoKTtpZihhPT09IiIpdGhyb3cgbmV3IHB0KCJJbnZhbGlkICIrcisiOiAnIituLnRleHQrIiciLG4pO3JldHVybiBuLnJhbmdlKGksYSl9cGFyc2VDb2xvckdyb3VwKGUpe3ZhciByPXRoaXMucGFyc2VTdHJpbmdHcm91cCgiY29sb3IiLGUpO2lmKHI9PW51bGwpcmV0dXJuIG51bGw7dmFyIG49L14oI1thLWYwLTldezN9fCM/W2EtZjAtOV17Nn18W2Etel0rKSQvaS5leGVjKHIudGV4dCk7aWYoIW4pdGhyb3cgbmV3IHB0KCJJbnZhbGlkIGNvbG9yOiAnIityLnRleHQrIiciLHIpO3ZhciBpPW5bMF07cmV0dXJuL15bMC05YS1mXXs2fSQvaS50ZXN0KGkpJiYoaT0iIyIraSkse3R5cGU6ImNvbG9yLXRva2VuIixtb2RlOnRoaXMubW9kZSxjb2xvcjppfX1wYXJzZVNpemVHcm91cChlKXt2YXIgcixuPSExO2lmKHRoaXMuZ3VsbGV0LmNvbnN1bWVTcGFjZXMoKSwhZSYmdGhpcy5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSJ7Ij9yPXRoaXMucGFyc2VSZWdleEdyb3VwKC9eWy0rXT8gKig/OiR8XGQrfFxkK1wuXGQqfFwuXGQqKSAqW2Etel17MCwyfSAqJC8sInNpemUiKTpyPXRoaXMucGFyc2VTdHJpbmdHcm91cCgic2l6ZSIsZSksIXIpcmV0dXJuIG51bGw7IWUmJnIudGV4dC5sZW5ndGg9PT0wJiYoci50ZXh0PSIwcHQiLG49ITApO3ZhciBpPS8oWy0rXT8pICooXGQrKD86XC5cZCopP3xcLlxkKykgKihbYS16XXsyfSkvLmV4ZWMoci50ZXh0KTtpZighaSl0aHJvdyBuZXcgcHQoIkludmFsaWQgc2l6ZTogJyIrci50ZXh0KyInIixyKTt2YXIgYT17bnVtYmVyOisoaVsxXStpWzJdKSx1bml0OmlbM119O2lmKCFERyhhKSl0aHJvdyBuZXcgcHQoIkludmFsaWQgdW5pdDogJyIrYS51bml0KyInIixyKTtyZXR1cm57dHlwZToic2l6ZSIsbW9kZTp0aGlzLm1vZGUsdmFsdWU6YSxpc0JsYW5rOm59fXBhcnNlVXJsR3JvdXAoZSl7dGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTMpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEyKTt2YXIgcj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInVybCIsZSk7aWYodGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTQpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEzKSxyPT1udWxsKXJldHVybiBudWxsO3ZhciBuPXIudGV4dC5yZXBsYWNlKC9cXChbIyQlJn5fXnt9XSkvZywiJDEiKTtyZXR1cm57dHlwZToidXJsIixtb2RlOnRoaXMubW9kZSx1cmw6bn19cGFyc2VBcmd1bWVudEdyb3VwKGUscil7dmFyIG49dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KGUpO2lmKG49PW51bGwpcmV0dXJuIG51bGw7dmFyIGk9dGhpcy5tb2RlO3ImJnRoaXMuc3dpdGNoTW9kZShyKSx0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGE9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsIkVPRiIpO3RoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLmd1bGxldC5lbmRHcm91cCgpO3ZhciBzPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOm4ubG9jLGJvZHk6YX07cmV0dXJuIHImJnRoaXMuc3dpdGNoTW9kZShpKSxzfXBhcnNlR3JvdXAoZSxyKXt2YXIgbj10aGlzLmZldGNoKCksaT1uLnRleHQsYTtpZihpPT09InsifHxpPT09IlxcYmVnaW5ncm91cCIpe3RoaXMuY29uc3VtZSgpO3ZhciBzPWk9PT0ieyI/In0iOiJcXGVuZGdyb3VwIjt0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGw9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEscyksdT10aGlzLmZldGNoKCk7dGhpcy5leHBlY3QocyksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKSxhPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOlFzLnJhbmdlKG4sdSksYm9keTpsLHNlbWlzaW1wbGU6aT09PSJcXGJlZ2luZ3JvdXAifHx2b2lkIDB9fWVsc2UgaWYoYT10aGlzLnBhcnNlRnVuY3Rpb24ocixlKXx8dGhpcy5wYXJzZVN5bWJvbCgpLGE9PW51bGwmJmlbMF09PT0iXFwiJiYheFYuaGFzT3duUHJvcGVydHkoaSkpe2lmKHRoaXMuc2V0dGluZ3MudGhyb3dPbkVycm9yKXRocm93IG5ldyBwdCgiVW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2U6ICIraSxuKTthPXRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoaSksdGhpcy5jb25zdW1lKCl9cmV0dXJuIGF9Zm9ybUxpZ2F0dXJlcyhlKXtmb3IodmFyIHI9ZS5sZW5ndGgtMSxuPTA7bjxyOysrbil7dmFyIGk9ZVtuXSxhPWkudGV4dDthPT09Ii0iJiZlW24rMV0udGV4dD09PSItIiYmKG4rMTxyJiZlW24rMl0udGV4dD09PSItIj8oZS5zcGxpY2UobiwzLHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6UXMucmFuZ2UoaSxlW24rMl0pLHRleHQ6Ii0tLSJ9KSxyLT0yKTooZS5zcGxpY2UobiwyLHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6UXMucmFuZ2UoaSxlW24rMV0pLHRleHQ6Ii0tIn0pLHItPTEpKSwoYT09PSInInx8YT09PSJgIikmJmVbbisxXS50ZXh0PT09YSYmKGUuc3BsaWNlKG4sMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOlFzLnJhbmdlKGksZVtuKzFdKSx0ZXh0OmErYX0pLHItPTEpfX1wYXJzZVN5bWJvbCgpe3ZhciBlPXRoaXMuZmV0Y2goKSxyPWUudGV4dDtpZigvXlxcdmVyYlteYS16QS1aXS8udGVzdChyKSl7dGhpcy5jb25zdW1lKCk7dmFyIG49ci5zbGljZSg1KSxpPW4uY2hhckF0KDApPT09IioiO2lmKGkmJihuPW4uc2xpY2UoMSkpLG4ubGVuZ3RoPDJ8fG4uY2hhckF0KDApIT09bi5zbGljZSgtMSkpdGhyb3cgbmV3IHB0KGBcXHZlcmIgYXNzZXJ0aW9uIGZhaWxlZCAtLQogICAgICAgICAgICAgICAgICAgIHBsZWFzZSByZXBvcnQgd2hhdCBpbnB1dCBjYXVzZWQgdGhpcyBidWdgKTtyZXR1cm4gbj1uLnNsaWNlKDEsLTEpLHt0eXBlOiJ2ZXJiIixtb2RlOiJ0ZXh0Iixib2R5Om4sc3RhcjppfX1TRy5oYXNPd25Qcm9wZXJ0eShyWzBdKSYmIUFuW3RoaXMubW9kZV1bclswXV0mJih0aGlzLnNldHRpbmdzLnN0cmljdCYmdGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnQWNjZW50ZWQgVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKSxyPVNHW3JbMF1dK3Iuc2xpY2UoMSkpO3ZhciBhPW81ZS5leGVjKHIpO2EmJihyPXIuc3Vic3RyaW5nKDAsYS5pbmRleCkscj09PSJpIj9yPSJcdTAxMzEiOnI9PT0iaiImJihyPSJcdTAyMzciKSk7dmFyIHM7aWYoQW5bdGhpcy5tb2RlXVtyXSl7dGhpcy5zZXR0aW5ncy5zdHJpY3QmJnRoaXMubW9kZT09PSJtYXRoIiYmWTcuaW5kZXhPZihyKT49MCYmdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInVuaWNvZGVUZXh0SW5NYXRoTW9kZSIsJ0xhdGluLTEvVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKTt2YXIgbD1Bblt0aGlzLm1vZGVdW3JdLmdyb3VwLHU9UXMucmFuZ2UoZSksaDtpZihlM2UuaGFzT3duUHJvcGVydHkobCkpe3ZhciBmPWw7aD17dHlwZToiYXRvbSIsbW9kZTp0aGlzLm1vZGUsZmFtaWx5OmYsbG9jOnUsdGV4dDpyfX1lbHNlIGg9e3R5cGU6bCxtb2RlOnRoaXMubW9kZSxsb2M6dSx0ZXh0OnJ9O3M9aH1lbHNlIGlmKHIuY2hhckNvZGVBdCgwKT49MTI4KXRoaXMuc2V0dGluZ3Muc3RyaWN0JiYoQUcoci5jaGFyQ29kZUF0KDApKT90aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3JbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLGUpOnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmtub3duU3ltYm9sIiwnVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyICInK3JbMF0rJyInKygiICgiK3IuY2hhckNvZGVBdCgwKSsiKSIpLGUpKSxzPXt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6UXMucmFuZ2UoZSksdGV4dDpyfTtlbHNlIHJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLGEpZm9yKHZhciBkPTA7ZDxhWzBdLmxlbmd0aDtkKyspe3ZhciBwPWFbMF1bZF07aWYoIVU3W3BdKXRocm93IG5ldyBwdCgiVW5rbm93biBhY2NlbnQgJyAiK3ArIiciLGUpO3ZhciBtPVU3W3BdW3RoaXMubW9kZV18fFU3W3BdLnRleHQ7aWYoIW0pdGhyb3cgbmV3IHB0KCJBY2NlbnQgIitwKyIgdW5zdXBwb3J0ZWQgaW4gIit0aGlzLm1vZGUrIiBtb2RlIixlKTtzPXt0eXBlOiJhY2NlbnQiLG1vZGU6dGhpcy5tb2RlLGxvYzpRcy5yYW5nZShlKSxsYWJlbDptLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpzfX1yZXR1cm4gc319O18zLmVuZE9mRXhwcmVzc2lvbj1bIn0iLCJcXGVuZGdyb3VwIiwiXFxlbmQiLCJcXHJpZ2h0IiwiJiJdO3ZBPW8oZnVuY3Rpb24oZSxyKXtpZighKHR5cGVvZiBlPT0ic3RyaW5nInx8ZSBpbnN0YW5jZW9mIFN0cmluZykpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2FUZVggY2FuIG9ubHkgcGFyc2Ugc3RyaW5nIHR5cGVkIGV4cHJlc3Npb24iKTt2YXIgbj1uZXcgXzMoZSxyKTtkZWxldGUgbi5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcZGZAdGFnIl07dmFyIGk9bi5wYXJzZSgpO2lmKGRlbGV0ZSBuLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxjdXJyZW50QGNvbG9yIl0sZGVsZXRlIG4uZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGNvbG9yIl0sbi5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKSl7aWYoIXIuZGlzcGxheU1vZGUpdGhyb3cgbmV3IHB0KCJcXHRhZyB3b3JrcyBvbmx5IGluIGRpc3BsYXkgZXF1YXRpb25zIik7aT1be3R5cGU6InRhZyIsbW9kZToidGV4dCIsYm9keTppLHRhZzpuLnN1YnBhcnNlKFtuZXcgX28oIlxcZGZAdGFnIildKX1dfXJldHVybiBpfSwicGFyc2VUcmVlIikseEE9byhmdW5jdGlvbihlLHIsbil7ci50ZXh0Q29udGVudD0iIjt2YXIgaT1PMyhlLG4pLnRvTm9kZSgpO3IuYXBwZW5kQ2hpbGQoaSl9LCJyZW5kZXIiKTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jb21wYXRNb2RlIT09IkNTUzFDb21wYXQiJiYodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgd2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLiIpLHhBPW8oZnVuY3Rpb24oKXt0aHJvdyBuZXcgcHQoIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4iKX0sInJlbmRlciIpKTtiVj1vKGZ1bmN0aW9uKGUscil7dmFyIG49TzMoZSxyKS50b01hcmt1cCgpO3JldHVybiBufSwicmVuZGVyVG9TdHJpbmciKSxUVj1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEt5KHIpO3JldHVybiB2QShlLG4pfSwiZ2VuZXJhdGVQYXJzZVRyZWUiKSx3Vj1vKGZ1bmN0aW9uKGUscixuKXtpZihuLnRocm93T25FcnJvcnx8IShlIGluc3RhbmNlb2YgcHQpKXRocm93IGU7dmFyIGk9RmUubWFrZVNwYW4oWyJrYXRleC1lcnJvciJdLFtuZXcgQXMocildKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoInRpdGxlIixlLnRvU3RyaW5nKCkpLGkuc2V0QXR0cmlidXRlKCJzdHlsZSIsImNvbG9yOiIrbi5lcnJvckNvbG9yKSxpfSwicmVuZGVyRXJyb3IiKSxPMz1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEt5KHIpO3RyeXt2YXIgaT12QShlLG4pO3JldHVybiB3M2UoaSxlLG4pfWNhdGNoKGEpe3JldHVybiB3VihhLGUsbil9fSwicmVuZGVyVG9Eb21UcmVlIiksa1Y9byhmdW5jdGlvbihlLHIpe3ZhciBuPW5ldyBLeShyKTt0cnl7dmFyIGk9dkEoZSxuKTtyZXR1cm4gazNlKGksZSxuKX1jYXRjaChhKXtyZXR1cm4gd1YoYSxlLG4pfX0sInJlbmRlclRvSFRNTFRyZWUiKSxFVj0iMC4xNi4yMiIsU1Y9e1NwYW46bGQsQW5jaG9yOlp5LFN5bWJvbE5vZGU6QXMsU3ZnTm9kZTpkbCxQYXRoTm9kZTplYyxMaW5lTm9kZTpKeX0sdTVlPXt2ZXJzaW9uOkVWLHJlbmRlcjp4QSxyZW5kZXJUb1N0cmluZzpiVixQYXJzZUVycm9yOnB0LFNFVFRJTkdTX1NDSEVNQTpYeSxfX3BhcnNlOlRWLF9fcmVuZGVyVG9Eb21UcmVlOk8zLF9fcmVuZGVyVG9IVE1MVHJlZTprVixfX3NldEZvbnRNZXRyaWNzOl9HLF9fZGVmaW5lU3ltYm9sOkcsX19kZWZpbmVGdW5jdGlvbjpOdCxfX2RlZmluZU1hY3JvOmZlLF9fZG9tVHJlZTpTVn19KTtmdW5jdGlvbiBkNWUoKXtsZXQgdD0iZGF0YS10ZW1wLWhyZWYtdGFyZ2V0IjttaC5hZGRIb29rKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLGU9PntlIGluc3RhbmNlb2YgRWxlbWVudCYmZS50YWdOYW1lPT09IkEiJiZlLmhhc0F0dHJpYnV0ZSgidGFyZ2V0IikmJmUuc2V0QXR0cmlidXRlKHQsZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPz8iIil9KSxtaC5hZGRIb29rKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIsZT0+e2UgaW5zdGFuY2VvZiBFbGVtZW50JiZlLnRhZ05hbWU9PT0iQSImJmUuaGFzQXR0cmlidXRlKHQpJiYoZS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsZS5nZXRBdHRyaWJ1dGUodCk/PyIiKSxlLnJlbW92ZUF0dHJpYnV0ZSh0KSxlLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iik9PT0iX2JsYW5rIiYmZS5zZXRBdHRyaWJ1dGUoInJlbCIsIm5vb3BlbmVyIikpfSl9dmFyIHVkLGg1ZSxmNWUsTFYsX1Ysd3IscDVlLG01ZSxnNWUseTVlLFJWLG11LGRyLHY1ZSx4NWUsaWMsYkEsYjVlLFQ1ZSxEVixQMyx5aSxoZCxUaCxaZSxwcj1OKCgpPT57InVzZSBzdHJpY3QiO0w3KCk7dWQ9LzxiclxzKlwvPz4vZ2ksaDVlPW8odD0+dD9SVih0KS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpLnNwbGl0KCIjYnIjIik6WyIiXSwiZ2V0Um93cyIpLGY1ZT0oKCk9PntsZXQgdD0hMTtyZXR1cm4oKT0+e3R8fChkNWUoKSx0PSEwKX19KSgpO28oZDVlLCJzZXR1cERvbXB1cmlmeUhvb2tzIik7TFY9byh0PT4oZjVlKCksbWguc2FuaXRpemUodCkpLCJyZW1vdmVTY3JpcHQiKSxfVj1vKCh0LGUpPT57aWYoZS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMhPT0hMSl7bGV0IHI9ZS5zZWN1cml0eUxldmVsO3I9PT0iYW50aXNjcmlwdCJ8fHI9PT0ic3RyaWN0Ij90PUxWKHQpOnIhPT0ibG9vc2UiJiYodD1SVih0KSx0PXQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksdD10LnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSx0PXk1ZSh0KSl9cmV0dXJuIHR9LCJzYW5pdGl6ZU1vcmUiKSx3cj1vKCh0LGUpPT50JiYoZS5kb21wdXJpZnlDb25maWc/dD1taC5zYW5pdGl6ZShfVih0LGUpLGUuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOnQ9bWguc2FuaXRpemUoX1YodCxlKSx7Rk9SQklEX1RBR1M6WyJzdHlsZSJdfSkudG9TdHJpbmcoKSx0KSwic2FuaXRpemVUZXh0IikscDVlPW8oKHQsZSk9PnR5cGVvZiB0PT0ic3RyaW5nIj93cih0LGUpOnQuZmxhdCgpLm1hcChyPT53cihyLGUpKSwic2FuaXRpemVUZXh0T3JBcnJheSIpLG01ZT1vKHQ9PnVkLnRlc3QodCksImhhc0JyZWFrcyIpLGc1ZT1vKHQ9PnQuc3BsaXQodWQpLCJzcGxpdEJyZWFrcyIpLHk1ZT1vKHQ9PnQucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpLCJwbGFjZWhvbGRlclRvQnJlYWsiKSxSVj1vKHQ9PnQucmVwbGFjZSh1ZCwiI2JyIyIpLCJicmVha1RvUGxhY2Vob2xkZXIiKSxtdT1vKHQ9PntsZXQgZT0iIjtyZXR1cm4gdCYmKGU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsZT1DU1MuZXNjYXBlKGUpKSxlfSwiZ2V0VXJsIiksZHI9byh0PT4hKHQ9PT0hMXx8WyJmYWxzZSIsIm51bGwiLCIwIl0uaW5jbHVkZXMoU3RyaW5nKHQpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSksImV2YWx1YXRlIiksdjVlPW8oZnVuY3Rpb24oLi4udCl7bGV0IGU9dC5maWx0ZXIocj0+IWlzTmFOKHIpKTtyZXR1cm4gTWF0aC5tYXgoLi4uZSl9LCJnZXRNYXgiKSx4NWU9byhmdW5jdGlvbiguLi50KXtsZXQgZT10LmZpbHRlcihyPT4haXNOYU4ocikpO3JldHVybiBNYXRoLm1pbiguLi5lKX0sImdldE1pbiIpLGljPW8oZnVuY3Rpb24odCl7bGV0IGU9dC5zcGxpdCgvKCwpLykscj1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IGk9ZVtuXTtpZihpPT09IiwiJiZuPjAmJm4rMTxlLmxlbmd0aCl7bGV0IGE9ZVtuLTFdLHM9ZVtuKzFdO2I1ZShhLHMpJiYoaT1hKyIsIitzLG4rKyxyLnBvcCgpKX1yLnB1c2goVDVlKGkpKX1yZXR1cm4gci5qb2luKCIiKX0sInBhcnNlR2VuZXJpY1R5cGVzIiksYkE9bygodCxlKT0+TWF0aC5tYXgoMCx0LnNwbGl0KGUpLmxlbmd0aC0xKSwiY291bnRPY2N1cnJlbmNlIiksYjVlPW8oKHQsZSk9PntsZXQgcj1iQSh0LCJ+Iiksbj1iQShlLCJ+Iik7cmV0dXJuIHI9PT0xJiZuPT09MX0sInNob3VsZENvbWJpbmVTZXRzIiksVDVlPW8odD0+e2xldCBlPWJBKHQsIn4iKSxyPSExO2lmKGU8PTEpcmV0dXJuIHQ7ZSUyIT09MCYmdC5zdGFydHNXaXRoKCJ+IikmJih0PXQuc3Vic3RyaW5nKDEpLHI9ITApO2xldCBuPVsuLi50XSxpPW4uaW5kZXhPZigifiIpLGE9bi5sYXN0SW5kZXhPZigifiIpO2Zvcig7aSE9PS0xJiZhIT09LTEmJmkhPT1hOyluW2ldPSI8IixuW2FdPSI+IixpPW4uaW5kZXhPZigifiIpLGE9bi5sYXN0SW5kZXhPZigifiIpO3JldHVybiByJiZuLnVuc2hpZnQoIn4iKSxuLmpvaW4oIiIpfSwicHJvY2Vzc1NldCIpLERWPW8oKCk9PndpbmRvdy5NYXRoTUxFbGVtZW50IT09dm9pZCAwLCJpc01hdGhNTFN1cHBvcnRlZCIpLFAzPS9cJFwkKC4qKVwkXCQvZyx5aT1vKHQ9Pih0Lm1hdGNoKFAzKT8ubGVuZ3RoPz8wKT4wLCJoYXNLYXRleCIpLGhkPW8oYXN5bmModCxlKT0+e3Q9YXdhaXQgVGgodCxlKTtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmlubmVySFRNTD10LHIuaWQ9ImthdGV4LXRlbXAiLHIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjAiLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKT8uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLHIpO2xldCBpPXt3aWR0aDpyLmNsaWVudFdpZHRoLGhlaWdodDpyLmNsaWVudEhlaWdodH07cmV0dXJuIHIucmVtb3ZlKCksaX0sImNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMiKSxUaD1vKGFzeW5jKHQsZSk9PntpZigheWkodCkpcmV0dXJuIHQ7aWYoIShEVigpfHxlLmxlZ2FjeU1hdGhNTHx8ZS5mb3JjZUxlZ2FjeU1hdGhNTCkpcmV0dXJuIHQucmVwbGFjZShQMywiTWF0aE1MIGlzIHVuc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIik7e2xldHtkZWZhdWx0OnJ9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBVigpLENWKSksbj1lLmZvcmNlTGVnYWN5TWF0aE1MfHwhRFYoKSYmZS5sZWdhY3lNYXRoTUw/Imh0bWxBbmRNYXRobWwiOiJtYXRobWwiO3JldHVybiB0LnNwbGl0KHVkKS5tYXAoaT0+eWkoaSk/YDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyI+JHtpfTwvZGl2PmA6YDxkaXY+JHtpfTwvZGl2PmApLmpvaW4oIiIpLnJlcGxhY2UoUDMsKGksYSk9PnIucmVuZGVyVG9TdHJpbmcoYSx7dGhyb3dPbkVycm9yOiEwLGRpc3BsYXlNb2RlOiEwLG91dHB1dDpufSkucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XC9hbm5vdGF0aW9uPi9nLCIiKSl9cmV0dXJuIHQucmVwbGFjZShQMywiS2F0ZXggaXMgbm90IHN1cHBvcnRlZCBpbiBAbWVybWFpZC1qcy90aW55LiBQbGVhc2UgdXNlIHRoZSBmdWxsIG1lcm1haWQgbGlicmFyeS4iKX0sInJlbmRlckthdGV4IiksWmU9e2dldFJvd3M6aDVlLHNhbml0aXplVGV4dDp3cixzYW5pdGl6ZVRleHRPckFycmF5OnA1ZSxoYXNCcmVha3M6bTVlLHNwbGl0QnJlYWtzOmc1ZSxsaW5lQnJlYWtSZWdleDp1ZCxyZW1vdmVTY3JpcHQ6TFYsZ2V0VXJsOm11LGV2YWx1YXRlOmRyLGdldE1heDp2NWUsZ2V0TWluOng1ZX19KTt2YXIgdzVlLGs1ZSxmbixMbyx4aT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7dzVlPW8oZnVuY3Rpb24odCxlKXtmb3IobGV0IHIgb2YgZSl0LmF0dHIoclswXSxyWzFdKX0sImQzQXR0cnMiKSxrNWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49bmV3IE1hcDtyZXR1cm4gcj8obi5zZXQoIndpZHRoIiwiMTAwJSIpLG4uc2V0KCJzdHlsZSIsYG1heC13aWR0aDogJHtlfXB4O2ApKToobi5zZXQoImhlaWdodCIsdCksbi5zZXQoIndpZHRoIixlKSksbn0sImNhbGN1bGF0ZVN2Z1NpemVBdHRycyIpLGZuPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9azVlKGUscixuKTt3NWUodCxpKX0sImNvbmZpZ3VyZVN2Z1NpemUiKSxMbz1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPWUubm9kZSgpLmdldEJCb3goKSxhPWkud2lkdGgscz1pLmhlaWdodDtYLmluZm8oYFNWRyBib3VuZHM6ICR7YX14JHtzfWAsaSk7bGV0IGw9MCx1PTA7WC5pbmZvKGBHcmFwaCBib3VuZHM6ICR7bH14JHt1fWAsdCksbD1hK3IqMix1PXMrcioyLFguaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7bH14JHt1fWApLGZuKGUsdSxsLG4pO2xldCBoPWAke2kueC1yfSAke2kueS1yfSAke2kud2lkdGgrMipyfSAke2kuaGVpZ2h0KzIqcn1gO2UuYXR0cigidmlld0JveCIsaCl9LCJzZXR1cEdyYXBoVmlld2JveCIpfSk7dmFyIEIzLEU1ZSxOVixNVixUQT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7QjM9e30sRTVlPW8oKHQsZSxyKT0+e2xldCBuPSIiO3JldHVybiB0IGluIEIzJiZCM1t0XT9uPUIzW3RdKHIpOlgud2FybihgTm8gdGhlbWUgZm91bmQgZm9yICR7dH1gKSxgICYgewogICAgZm9udC1mYW1pbHk6ICR7ci5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtyLmZvbnRTaXplfTsKICAgIGZpbGw6ICR7ci50ZXh0Q29sb3J9CiAgfQogIEBrZXlmcmFtZXMgZWRnZS1hbmltYXRpb24tZnJhbWUgewogICAgZnJvbSB7CiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgfQogIH0KICBAa2V5ZnJhbWVzIGRhc2ggewogICAgdG8gewogICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgIH0KICB9CiAgJiAuZWRnZS1hbmltYXRpb24tc2xvdyB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA5LDUgIWltcG9ydGFudDsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA5MDA7CiAgICBhbmltYXRpb246IGRhc2ggNTBzIGxpbmVhciBpbmZpbml0ZTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICB9CiAgJiAuZWRnZS1hbmltYXRpb24tZmFzdCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA5LDUgIWltcG9ydGFudDsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA5MDA7CiAgICBhbmltYXRpb246IGRhc2ggMjBzIGxpbmVhciBpbmZpbml0ZTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICB9CiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHtyLmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7ci5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7ci5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgICBmaWxsOiBub25lOwogIH0KICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke3IubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHtyLmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7ci5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7ci5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtyLmZvbnRTaXplfTsKICB9CiAgICYgcCB7CiAgICBtYXJnaW46IDAKICAgfQoKICAke259CgogICR7ZX0KYH0sImdldFN0eWxlcyIpLE5WPW8oKHQsZSk9PntlIT09dm9pZCAwJiYoQjNbdF09ZSl9LCJhZGRTdHlsZXNGb3JEaWFncmFtIiksTVY9RTVlfSk7dmFyIHJ2PXt9O3VyKHJ2LHtjbGVhcjooKT0+a3IsZ2V0QWNjRGVzY3JpcHRpb246KCk9PlJyLGdldEFjY1RpdGxlOigpPT5EcixnZXREaWFncmFtVGl0bGU6KCk9Pk5yLHNldEFjY0Rlc2NyaXB0aW9uOigpPT5McixzZXRBY2NUaXRsZTooKT0+QXIsc2V0RGlhZ3JhbVRpdGxlOigpPT5Pcn0pO3ZhciB3QSxrQSxFQSxTQSxrcixBcixEcixMcixScixPcixOcixjaT1OKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7bWkoKTt3QT0iIixrQT0iIixFQT0iIixTQT1vKHQ9PndyKHQsdHIoKSksInNhbml0aXplVGV4dCIpLGtyPW8oKCk9Pnt3QT0iIixFQT0iIixrQT0iIn0sImNsZWFyIiksQXI9byh0PT57d0E9U0EodCkucmVwbGFjZSgvXlxzKy9nLCIiKX0sInNldEFjY1RpdGxlIiksRHI9bygoKT0+d0EsImdldEFjY1RpdGxlIiksTHI9byh0PT57RUE9U0EodCkucmVwbGFjZSgvXG5ccysvZyxgCmApfSwic2V0QWNjRGVzY3JpcHRpb24iKSxScj1vKCgpPT5FQSwiZ2V0QWNjRGVzY3JpcHRpb24iKSxPcj1vKHQ9PntrQT1TQSh0KX0sInNldERpYWdyYW1UaXRsZSIpLE5yPW8oKCk9PmtBLCJnZXREaWFncmFtVGl0bGUiKX0pO3ZhciBJVixTNWUsbWUsbnYsJDMsZmQsQUEsQzVlLEYzLGRkLGl2LENBLEd0PU4oKCk9PnsidXNlIHN0cmljdCI7cmQoKTt5dCgpO21pKCk7cHIoKTt4aSgpO1RBKCk7Y2koKTtJVj1YLFM1ZT1EeSxtZT10cixudj1hMywkMz1waCxmZD1vKHQ9PndyKHQsbWUoKSksInNhbml0aXplVGV4dCIpLEFBPUxvLEM1ZT1vKCgpPT5ydiwiZ2V0Q29tbW9uRGIiKSxGMz17fSxkZD1vKCh0LGUscik9PntGM1t0XSYmSVYud2FybihgRGlhZ3JhbSB3aXRoIGlkICR7dH0gYWxyZWFkeSByZWdpc3RlcmVkLiBPdmVyd3JpdGluZy5gKSxGM1t0XT1lLHImJmk3KHQsciksTlYodCxlLnN0eWxlcyksZS5pbmplY3RVdGlscz8uKElWLFM1ZSxtZSxmZCxBQSxDNWUoKSwoKT0+e30pfSwicmVnaXN0ZXJEaWFncmFtIiksaXY9byh0PT57aWYodCBpbiBGMylyZXR1cm4gRjNbdF07dGhyb3cgbmV3IENBKHQpfSwiZ2V0RGlhZ3JhbSIpLENBPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiRGlhZ3JhbU5vdEZvdW5kRXJyb3IiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihgRGlhZ3JhbSAke2V9IG5vdCBmb3VuZC5gKX19fSk7dmFyIG1sLHdoLGlzLHBsLGFjLGF2LF9BLERBLHozLEczLE9WLEE1ZSxfNWUsRDVlLEw1ZSxSNWUsTjVlLE01ZSxJNWUsTzVlLFA1ZSxCNWUsRjVlLCQ1ZSx6NWUsRzVlLFY1ZSxVNWUsUFYsSDVlLFc1ZSxCVixxNWUsWTVlLFg1ZSxqNWUsa2gsSzVlLFE1ZSxaNWUsSjVlLGVUZSxzdixMQT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7cHIoKTtjaSgpO21sPVtdLHdoPVsiIl0saXM9Imdsb2JhbCIscGw9IiIsYWM9W3thbGlhczoiZ2xvYmFsIixsYWJlbDp7dGV4dDoiZ2xvYmFsIn0sdHlwZTp7dGV4dDoiZ2xvYmFsIn0sdGFnczpudWxsLGxpbms6bnVsbCxwYXJlbnRCb3VuZGFyeToiIn1dLGF2PVtdLF9BPSIiLERBPSExLHozPTQsRzM9MixBNWU9byhmdW5jdGlvbigpe3JldHVybiBPVn0sImdldEM0VHlwZSIpLF81ZT1vKGZ1bmN0aW9uKHQpe09WPXdyKHQsbWUoKSl9LCJzZXRDNFR5cGUiKSxENWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSl7aWYodD09bnVsbHx8ZT09PXZvaWQgMHx8ZT09PW51bGx8fHI9PT12b2lkIDB8fHI9PT1udWxsfHxuPT09dm9pZCAwfHxuPT09bnVsbClyZXR1cm47bGV0IGg9e30sZj1hdi5maW5kKGQ9PmQuZnJvbT09PWUmJmQudG89PT1yKTtpZihmP2g9Zjphdi5wdXNoKGgpLGgudHlwZT10LGguZnJvbT1lLGgudG89cixoLmxhYmVsPXt0ZXh0Om59LGk9PW51bGwpaC50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2hbZF09e3RleHQ6cH19ZWxzZSBoLnRlY2huPXt0ZXh0Oml9O2lmKGE9PW51bGwpaC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGEpWzBdO2hbZF09e3RleHQ6cH19ZWxzZSBoLmRlc2NyPXt0ZXh0OmF9O2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXMocylbMF07aFtkXT1wfWVsc2UgaC5zcHJpdGU9cztpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGwpWzBdO2hbZF09cH1lbHNlIGgudGFncz1sO2lmKHR5cGVvZiB1PT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXModSlbMF07aFtkXT1wfWVsc2UgaC5saW5rPXU7aC53cmFwPWtoKCl9LCJhZGRSZWwiKSxMNWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCBsPXt9LHU9bWwuZmluZChoPT5oLmFsaWFzPT09ZSk7aWYodSYmZT09PXUuYWxpYXM/bD11OihsLmFsaWFzPWUsbWwucHVzaChsKSkscj09bnVsbD9sLmxhYmVsPXt0ZXh0OiIifTpsLmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpbC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2xbaF09e3RleHQ6Zn19ZWxzZSBsLmRlc2NyPXt0ZXh0Om59O2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMoaSlbMF07bFtoXT1mfWVsc2UgbC5zcHJpdGU9aTtpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKGEpWzBdO2xbaF09Zn1lbHNlIGwudGFncz1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMocylbMF07bFtoXT1mfWVsc2UgbC5saW5rPXM7bC50eXBlQzRTaGFwZT17dGV4dDp0fSxsLnBhcmVudEJvdW5kYXJ5PWlzLGwud3JhcD1raCgpfSwiYWRkUGVyc29uT3JTeXN0ZW0iKSxSNWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD1tbC5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSxtbC5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudGVjaG49e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhhKVswXTt1W2ZdPWR9ZWxzZSB1LnNwcml0ZT1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMocylbMF07dVtmXT1kfWVsc2UgdS50YWdzPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhsKVswXTt1W2ZdPWR9ZWxzZSB1Lmxpbms9bDt1LndyYXA9a2goKSx1LnR5cGVDNFNoYXBlPXt0ZXh0OnR9LHUucGFyZW50Qm91bmRhcnk9aXN9LCJhZGRDb250YWluZXIiKSxONWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD1tbC5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSxtbC5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudGVjaG49e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhhKVswXTt1W2ZdPWR9ZWxzZSB1LnNwcml0ZT1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMocylbMF07dVtmXT1kfWVsc2UgdS50YWdzPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhsKVswXTt1W2ZdPWR9ZWxzZSB1Lmxpbms9bDt1LndyYXA9a2goKSx1LnR5cGVDNFNoYXBlPXt0ZXh0OnR9LHUucGFyZW50Qm91bmRhcnk9aXN9LCJhZGRDb21wb25lbnQiKSxNNWU9byhmdW5jdGlvbih0LGUscixuLGkpe2lmKHQ9PT1udWxsfHxlPT09bnVsbClyZXR1cm47bGV0IGE9e30scz1hYy5maW5kKGw9PmwuYWxpYXM9PT10KTtpZihzJiZ0PT09cy5hbGlhcz9hPXM6KGEuYWxpYXM9dCxhYy5wdXNoKGEpKSxlPT1udWxsP2EubGFiZWw9e3RleHQ6IiJ9OmEubGFiZWw9e3RleHQ6ZX0scj09bnVsbClhLnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhyKVswXTthW2xdPXt0ZXh0OnV9fWVsc2UgYS50eXBlPXt0ZXh0OnJ9O2lmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMobilbMF07YVtsXT11fWVsc2UgYS50YWdzPW47aWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhpKVswXTthW2xdPXV9ZWxzZSBhLmxpbms9aTthLnBhcmVudEJvdW5kYXJ5PWlzLGEud3JhcD1raCgpLHBsPWlzLGlzPXQsd2gucHVzaChwbCl9LCJhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5IiksSTVlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZih0PT09bnVsbHx8ZT09PW51bGwpcmV0dXJuO2xldCBhPXt9LHM9YWMuZmluZChsPT5sLmFsaWFzPT09dCk7aWYocyYmdD09PXMuYWxpYXM/YT1zOihhLmFsaWFzPXQsYWMucHVzaChhKSksZT09bnVsbD9hLmxhYmVsPXt0ZXh0OiIifTphLmxhYmVsPXt0ZXh0OmV9LHI9PW51bGwpYS50eXBlPXt0ZXh0OiJjb250YWluZXIifTtlbHNlIGlmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMocilbMF07YVtsXT17dGV4dDp1fX1lbHNlIGEudHlwZT17dGV4dDpyfTtpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2FbbF09dX1lbHNlIGEudGFncz1uO2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMoaSlbMF07YVtsXT11fWVsc2UgYS5saW5rPWk7YS5wYXJlbnRCb3VuZGFyeT1pcyxhLndyYXA9a2goKSxwbD1pcyxpcz10LHdoLnB1c2gocGwpfSwiYWRkQ29udGFpbmVyQm91bmRhcnkiKSxPNWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD1hYy5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSxhYy5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudHlwZT17dGV4dDpufTtpZihpPT1udWxsKXUuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhpKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS5kZXNjcj17dGV4dDppfTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKHMpWzBdO3VbZl09ZH1lbHNlIHUudGFncz1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobClbMF07dVtmXT1kfWVsc2UgdS5saW5rPWw7dS5ub2RlVHlwZT10LHUucGFyZW50Qm91bmRhcnk9aXMsdS53cmFwPWtoKCkscGw9aXMsaXM9ZSx3aC5wdXNoKHBsKX0sImFkZERlcGxveW1lbnROb2RlIiksUDVlPW8oZnVuY3Rpb24oKXtpcz1wbCx3aC5wb3AoKSxwbD13aC5wb3AoKSx3aC5wdXNoKHBsKX0sInBvcEJvdW5kYXJ5UGFyc2VTdGFjayIpLEI1ZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgsZil7bGV0IGQ9bWwuZmluZChwPT5wLmFsaWFzPT09ZSk7aWYoIShkPT09dm9pZCAwJiYoZD1hYy5maW5kKHA9PnAuYWxpYXM9PT1lKSxkPT09dm9pZCAwKSkpe2lmKHIhPW51bGwpaWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhyKVswXTtkW3BdPW19ZWxzZSBkLmJnQ29sb3I9cjtpZihuIT1udWxsKWlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMobilbMF07ZFtwXT1tfWVsc2UgZC5mb250Q29sb3I9bjtpZihpIT1udWxsKWlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoaSlbMF07ZFtwXT1tfWVsc2UgZC5ib3JkZXJDb2xvcj1pO2lmKGEhPW51bGwpaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhhKVswXTtkW3BdPW19ZWxzZSBkLnNoYWRvd2luZz1hO2lmKHMhPW51bGwpaWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhzKVswXTtkW3BdPW19ZWxzZSBkLnNoYXBlPXM7aWYobCE9bnVsbClpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGwpWzBdO2RbcF09bX1lbHNlIGQuc3ByaXRlPWw7aWYodSE9bnVsbClpZih0eXBlb2YgdT09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKHUpWzBdO2RbcF09bX1lbHNlIGQudGVjaG49dTtpZihoIT1udWxsKWlmKHR5cGVvZiBoPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoaClbMF07ZFtwXT1tfWVsc2UgZC5sZWdlbmRUZXh0PWg7aWYoZiE9bnVsbClpZih0eXBlb2YgZj09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGYpWzBdO2RbcF09bX1lbHNlIGQubGVnZW5kU3ByaXRlPWZ9fSwidXBkYXRlRWxTdHlsZSIpLEY1ZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldCBsPWF2LmZpbmQodT0+dS5mcm9tPT09ZSYmdS50bz09PXIpO2lmKGwhPT12b2lkIDApe2lmKG4hPW51bGwpaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhuKVswXTtsW3VdPWh9ZWxzZSBsLnRleHRDb2xvcj1uO2lmKGkhPW51bGwpaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhpKVswXTtsW3VdPWh9ZWxzZSBsLmxpbmVDb2xvcj1pO2lmKGEhPW51bGwpaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhhKVswXTtsW3VdPXBhcnNlSW50KGgpfWVsc2UgbC5vZmZzZXRYPXBhcnNlSW50KGEpO2lmKHMhPW51bGwpaWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhzKVswXTtsW3VdPXBhcnNlSW50KGgpfWVsc2UgbC5vZmZzZXRZPXBhcnNlSW50KHMpfX0sInVwZGF0ZVJlbFN0eWxlIiksJDVlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXozLGk9RzM7aWYodHlwZW9mIGU9PSJvYmplY3QiKXtsZXQgYT1PYmplY3QudmFsdWVzKGUpWzBdO249cGFyc2VJbnQoYSl9ZWxzZSBuPXBhcnNlSW50KGUpO2lmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0IGE9T2JqZWN0LnZhbHVlcyhyKVswXTtpPXBhcnNlSW50KGEpfWVsc2UgaT1wYXJzZUludChyKTtuPj0xJiYoejM9biksaT49MSYmKEczPWkpfSwidXBkYXRlTGF5b3V0Q29uZmlnIiksejVlPW8oZnVuY3Rpb24oKXtyZXR1cm4gejN9LCJnZXRDNFNoYXBlSW5Sb3ciKSxHNWU9byhmdW5jdGlvbigpe3JldHVybiBHM30sImdldEM0Qm91bmRhcnlJblJvdyIpLFY1ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGlzfSwiZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2UiKSxVNWU9byhmdW5jdGlvbigpe3JldHVybiBwbH0sImdldFBhcmVudEJvdW5kYXJ5UGFyc2UiKSxQVj1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP21sOm1sLmZpbHRlcihlPT5lLnBhcmVudEJvdW5kYXJ5PT09dCl9LCJnZXRDNFNoYXBlQXJyYXkiKSxINWU9byhmdW5jdGlvbih0KXtyZXR1cm4gbWwuZmluZChlPT5lLmFsaWFzPT09dCl9LCJnZXRDNFNoYXBlIiksVzVlPW8oZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKFBWKHQpKX0sImdldEM0U2hhcGVLZXlzIiksQlY9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9hYzphYy5maWx0ZXIoZT0+ZS5wYXJlbnRCb3VuZGFyeT09PXQpfSwiZ2V0Qm91bmRhcmllcyIpLHE1ZT1CVixZNWU9byhmdW5jdGlvbigpe3JldHVybiBhdn0sImdldFJlbHMiKSxYNWU9byhmdW5jdGlvbigpe3JldHVybiBfQX0sImdldFRpdGxlIiksajVlPW8oZnVuY3Rpb24odCl7REE9dH0sInNldFdyYXAiKSxraD1vKGZ1bmN0aW9uKCl7cmV0dXJuIERBfSwiYXV0b1dyYXAiKSxLNWU9byhmdW5jdGlvbigpe21sPVtdLGFjPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxwbD0iIixpcz0iZ2xvYmFsIix3aD1bIiJdLGF2PVtdLHdoPVsiIl0sX0E9IiIsREE9ITEsejM9NCxHMz0yfSwiY2xlYXIiKSxRNWU9e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1fSxaNWU9e0ZJTExFRDowLE9QRU46MX0sSjVlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxlVGU9byhmdW5jdGlvbih0KXtfQT13cih0LG1lKCkpfSwic2V0VGl0bGUiKSxzdj17YWRkUGVyc29uT3JTeXN0ZW06TDVlLGFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnk6TTVlLGFkZENvbnRhaW5lcjpSNWUsYWRkQ29udGFpbmVyQm91bmRhcnk6STVlLGFkZENvbXBvbmVudDpONWUsYWRkRGVwbG95bWVudE5vZGU6TzVlLHBvcEJvdW5kYXJ5UGFyc2VTdGFjazpQNWUsYWRkUmVsOkQ1ZSx1cGRhdGVFbFN0eWxlOkI1ZSx1cGRhdGVSZWxTdHlsZTpGNWUsdXBkYXRlTGF5b3V0Q29uZmlnOiQ1ZSxhdXRvV3JhcDpraCxzZXRXcmFwOmo1ZSxnZXRDNFNoYXBlQXJyYXk6UFYsZ2V0QzRTaGFwZTpINWUsZ2V0QzRTaGFwZUtleXM6VzVlLGdldEJvdW5kYXJpZXM6QlYsZ2V0Qm91bmRhcnlzOnE1ZSxnZXRDdXJyZW50Qm91bmRhcnlQYXJzZTpWNWUsZ2V0UGFyZW50Qm91bmRhcnlQYXJzZTpVNWUsZ2V0UmVsczpZNWUsZ2V0VGl0bGU6WDVlLGdldEM0VHlwZTpBNWUsZ2V0QzRTaGFwZUluUm93Ono1ZSxnZXRDNEJvdW5kYXJ5SW5Sb3c6RzVlLHNldEFjY1RpdGxlOkFyLGdldEFjY1RpdGxlOkRyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLGdldENvbmZpZzpvKCgpPT5tZSgpLmM0LCJnZXRDb25maWciKSxjbGVhcjpLNWUsTElORVRZUEU6UTVlLEFSUk9XVFlQRTpaNWUsUExBQ0VNRU5UOko1ZSxzZXRUaXRsZTplVGUsc2V0QzRUeXBlOl81ZX19KTtmdW5jdGlvbiBwZCh0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsP05hTjp0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIgUkE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHBkLCJhc2NlbmRpbmciKX0pO2Z1bmN0aW9uIE5BKHQsZSl7cmV0dXJuIHQ9PW51bGx8fGU9PW51bGw/TmFOOmU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBGVj1OKCgpPT57InVzZSBzdHJpY3QiO28oTkEsImRlc2NlbmRpbmciKX0pO2Z1bmN0aW9uIG1kKHQpe2xldCBlLHIsbjt0Lmxlbmd0aCE9PTI/KGU9cGQscj1vKChsLHUpPT5wZCh0KGwpLHUpLCJjb21wYXJlMiIpLG49bygobCx1KT0+dChsKS11LCJkZWx0YSIpKTooZT10PT09cGR8fHQ9PT1OQT90OnRUZSxyPXQsbj10KTtmdW5jdGlvbiBpKGwsdSxoPTAsZj1sLmxlbmd0aCl7aWYoaDxmKXtpZihlKHUsdSkhPT0wKXJldHVybiBmO2Rve2xldCBkPWgrZj4+PjE7cihsW2RdLHUpPDA/aD1kKzE6Zj1kfXdoaWxlKGg8Zil9cmV0dXJuIGh9byhpLCJsZWZ0Iik7ZnVuY3Rpb24gYShsLHUsaD0wLGY9bC5sZW5ndGgpe2lmKGg8Zil7aWYoZSh1LHUpIT09MClyZXR1cm4gZjtkb3tsZXQgZD1oK2Y+Pj4xO3IobFtkXSx1KTw9MD9oPWQrMTpmPWR9d2hpbGUoaDxmKX1yZXR1cm4gaH1vKGEsInJpZ2h0Iik7ZnVuY3Rpb24gcyhsLHUsaD0wLGY9bC5sZW5ndGgpe2xldCBkPWkobCx1LGgsZi0xKTtyZXR1cm4gZD5oJiZuKGxbZC0xXSx1KT4tbihsW2RdLHUpP2QtMTpkfXJldHVybiBvKHMsImNlbnRlciIpLHtsZWZ0OmksY2VudGVyOnMscmlnaHQ6YX19ZnVuY3Rpb24gdFRlKCl7cmV0dXJuIDB9dmFyIE1BPU4oKCk9PnsidXNlIHN0cmljdCI7UkEoKTtGVigpO28obWQsImJpc2VjdG9yIik7byh0VGUsInplcm8iKX0pO2Z1bmN0aW9uIElBKHQpe3JldHVybiB0PT09bnVsbD9OYU46K3R9dmFyICRWPU4oKCk9PnsidXNlIHN0cmljdCI7byhJQSwibnVtYmVyIil9KTt2YXIgelYsR1YsclRlLG5UZSxPQSxWVj1OKCgpPT57InVzZSBzdHJpY3QiO1JBKCk7TUEoKTskVigpO3pWPW1kKHBkKSxHVj16Vi5yaWdodCxyVGU9elYubGVmdCxuVGU9bWQoSUEpLmNlbnRlcixPQT1HVn0pO2Z1bmN0aW9uIFVWKHtfaW50ZXJuOnQsX2tleTplfSxyKXtsZXQgbj1lKHIpO3JldHVybiB0LmhhcyhuKT90LmdldChuKTpyfWZ1bmN0aW9uIGlUZSh7X2ludGVybjp0LF9rZXk6ZX0scil7bGV0IG49ZShyKTtyZXR1cm4gdC5oYXMobik/dC5nZXQobik6KHQuc2V0KG4scikscil9ZnVuY3Rpb24gYVRlKHtfaW50ZXJuOnQsX2tleTplfSxyKXtsZXQgbj1lKHIpO3JldHVybiB0LmhhcyhuKSYmKHI9dC5nZXQobiksdC5kZWxldGUobikpLHJ9ZnVuY3Rpb24gc1RlKHQpe3JldHVybiB0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiP3QudmFsdWVPZigpOnR9dmFyIEMwLEhWPU4oKCk9PnsidXNlIHN0cmljdCI7QzA9Y2xhc3MgZXh0ZW5kcyBNYXB7c3RhdGlje28odGhpcywiSW50ZXJuTWFwIil9Y29uc3RydWN0b3IoZSxyPXNUZSl7aWYoc3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtfaW50ZXJuOnt2YWx1ZTpuZXcgTWFwfSxfa2V5Ont2YWx1ZTpyfX0pLGUhPW51bGwpZm9yKGxldFtuLGldb2YgZSl0aGlzLnNldChuLGkpfWdldChlKXtyZXR1cm4gc3VwZXIuZ2V0KFVWKHRoaXMsZSkpfWhhcyhlKXtyZXR1cm4gc3VwZXIuaGFzKFVWKHRoaXMsZSkpfXNldChlLHIpe3JldHVybiBzdXBlci5zZXQoaVRlKHRoaXMsZSkscil9ZGVsZXRlKGUpe3JldHVybiBzdXBlci5kZWxldGUoYVRlKHRoaXMsZSkpfX07byhVViwiaW50ZXJuX2dldCIpO28oaVRlLCJpbnRlcm5fc2V0Iik7byhhVGUsImludGVybl9kZWxldGUiKTtvKHNUZSwia2V5b2YiKX0pO2Z1bmN0aW9uIFYzKHQsZSxyKXtsZXQgbj0oZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZzEwKG4pKSxhPW4vTWF0aC5wb3coMTAsaSkscz1hPj1vVGU/MTA6YT49bFRlPzU6YT49Y1RlPzI6MSxsLHUsaDtyZXR1cm4gaTwwPyhoPU1hdGgucG93KDEwLC1pKS9zLGw9TWF0aC5yb3VuZCh0KmgpLHU9TWF0aC5yb3VuZChlKmgpLGwvaDx0JiYrK2wsdS9oPmUmJi0tdSxoPS1oKTooaD1NYXRoLnBvdygxMCxpKSpzLGw9TWF0aC5yb3VuZCh0L2gpLHU9TWF0aC5yb3VuZChlL2gpLGwqaDx0JiYrK2wsdSpoPmUmJi0tdSksdTxsJiYuNTw9ciYmcjwyP1YzKHQsZSxyKjIpOltsLHUsaF19ZnVuY3Rpb24gVTModCxlLHIpe2lmKGU9K2UsdD0rdCxyPStyLCEocj4wKSlyZXR1cm5bXTtpZih0PT09ZSlyZXR1cm5bdF07bGV0IG49ZTx0LFtpLGEsc109bj9WMyhlLHQscik6VjModCxlLHIpO2lmKCEoYT49aSkpcmV0dXJuW107bGV0IGw9YS1pKzEsdT1uZXcgQXJyYXkobCk7aWYobilpZihzPDApZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShhLWgpLy1zO2Vsc2UgZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShhLWgpKnM7ZWxzZSBpZihzPDApZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShpK2gpLy1zO2Vsc2UgZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShpK2gpKnM7cmV0dXJuIHV9ZnVuY3Rpb24gb3YodCxlLHIpe3JldHVybiBlPStlLHQ9K3Qscj0rcixWMyh0LGUscilbMl19ZnVuY3Rpb24gQTAodCxlLHIpe2U9K2UsdD0rdCxyPStyO2xldCBuPWU8dCxpPW4/b3YoZSx0LHIpOm92KHQsZSxyKTtyZXR1cm4obj8tMToxKSooaTwwPzEvLWk6aSl9dmFyIG9UZSxsVGUsY1RlLFdWPU4oKCk9PnsidXNlIHN0cmljdCI7b1RlPU1hdGguc3FydCg1MCksbFRlPU1hdGguc3FydCgxMCksY1RlPU1hdGguc3FydCgyKTtvKFYzLCJ0aWNrU3BlYyIpO28oVTMsInRpY2tzIik7byhvdiwidGlja0luY3JlbWVudCIpO28oQTAsInRpY2tTdGVwIil9KTtmdW5jdGlvbiBIMyh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI8bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPGl8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgcVY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEgzLCJtYXgiKX0pO2Z1bmN0aW9uIFczKHQsZSl7bGV0IHI7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCluIT1udWxsJiYocj5ufHxyPT09dm9pZCAwJiZuPj1uKSYmKHI9bik7ZWxzZXtsZXQgbj0tMTtmb3IobGV0IGkgb2YgdCkoaT1lKGksKytuLHQpKSE9bnVsbCYmKHI+aXx8cj09PXZvaWQgMCYmaT49aSkmJihyPWkpfXJldHVybiByfXZhciBZVj1OKCgpPT57InVzZSBzdHJpY3QiO28oVzMsIm1pbiIpfSk7ZnVuY3Rpb24gcTModCxlLHIpe3Q9K3QsZT0rZSxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpfDAsYT1uZXcgQXJyYXkoaSk7KytuPGk7KWFbbl09dCtuKnI7cmV0dXJuIGF9dmFyIFhWPU4oKCk9PnsidXNlIHN0cmljdCI7byhxMywicmFuZ2UiKX0pO3ZhciBFaD1OKCgpPT57InVzZSBzdHJpY3QiO1ZWKCk7TUEoKTtxVigpO1lWKCk7WFYoKTtXVigpO0hWKCl9KTtmdW5jdGlvbiBQQSh0KXtyZXR1cm4gdH12YXIgalY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFBBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB1VGUodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwwKSJ9ZnVuY3Rpb24gaFRlKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3QrIikifWZ1bmN0aW9uIGZUZSh0KXtyZXR1cm4gZT0+K3QoZSl9ZnVuY3Rpb24gZFRlKHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLWUqMikvMix0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLHI9Pit0KHIpK2V9ZnVuY3Rpb24gcFRlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIFFWKHQsZSl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxhPTYscz02LGw9Myx1PXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xPzA6LjUsaD10PT09WDN8fHQ9PT1ZMz8tMToxLGY9dD09PVkzfHx0PT09QkE/IngiOiJ5IixkPXQ9PT1YM3x8dD09PUZBP3VUZTpoVGU7ZnVuY3Rpb24gcChtKXt2YXIgZz1uPz8oZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUscik6ZS5kb21haW4oKSkseT1pPz8oZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLHIpOlBBKSx2PU1hdGgubWF4KGEsMCkrbCx4PWUucmFuZ2UoKSxiPSt4WzBdK3UsVD0reFt4Lmxlbmd0aC0xXSt1LFM9KGUuYmFuZHdpZHRoP2RUZTpmVGUpKGUuY29weSgpLHUpLHc9bS5zZWxlY3Rpb24/bS5zZWxlY3Rpb24oKTptLEU9dy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksXz13LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGcsZSkub3JkZXIoKSxDPV8uZXhpdCgpLEQ9Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLE89Xy5zZWxlY3QoImxpbmUiKSxSPV8uc2VsZWN0KCJ0ZXh0Iik7RT1FLm1lcmdlKEUuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLF89Xy5tZXJnZShEKSxPPU8ubWVyZ2UoRC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGYrIjIiLGgqYSkpLFI9Ui5tZXJnZShELmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGYsaCp2KS5hdHRyKCJkeSIsdD09PVgzPyIwZW0iOnQ9PT1GQT8iMC43MWVtIjoiMC4zMmVtIikpLG0hPT13JiYoRT1FLnRyYW5zaXRpb24obSksXz1fLnRyYW5zaXRpb24obSksTz1PLnRyYW5zaXRpb24obSksUj1SLnRyYW5zaXRpb24obSksQz1DLnRyYW5zaXRpb24obSkuYXR0cigib3BhY2l0eSIsS1YpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oayl7cmV0dXJuIGlzRmluaXRlKGs9UyhrKSk/ZChrK3UpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLEQuYXR0cigib3BhY2l0eSIsS1YpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oayl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gZCgoTCYmaXNGaW5pdGUoTD1MKGspKT9MOlMoaykpK3UpfSkpLEMucmVtb3ZlKCksRS5hdHRyKCJkIix0PT09WTN8fHQ9PT1CQT9zPyJNIitoKnMrIiwiK2IrIkgiK3UrIlYiK1QrIkgiK2gqczoiTSIrdSsiLCIrYisiViIrVDpzPyJNIitiKyIsIitoKnMrIlYiK3UrIkgiK1QrIlYiK2gqczoiTSIrYisiLCIrdSsiSCIrVCksXy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGspe3JldHVybiBkKFMoaykrdSl9KSxPLmF0dHIoZisiMiIsaCphKSxSLmF0dHIoZixoKnYpLnRleHQoeSksdy5maWx0ZXIocFRlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIix0PT09QkE/InN0YXJ0Ijp0PT09WTM/ImVuZCI6Im1pZGRsZSIpLHcuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPVN9KX1yZXR1cm4gbyhwLCJheGlzIikscC5zY2FsZT1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1tLHApOmV9LHAudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1BcnJheS5mcm9tKGFyZ3VtZW50cykscH0scC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW09PW51bGw/W106QXJyYXkuZnJvbShtKSxwKTpyLnNsaWNlKCl9LHAudGlja1ZhbHVlcz1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1tPT1udWxsP251bGw6QXJyYXkuZnJvbShtKSxwKTpuJiZuLnNsaWNlKCl9LHAudGlja0Zvcm1hdD1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tLHApOml9LHAudGlja1NpemU9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cz0rbSxwKTphfSxwLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K20scCk6YX0scC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSttLHApOnN9LHAudGlja1BhZGRpbmc9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K20scCk6bH0scC5vZmZzZXQ9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K20scCk6dX0scH1mdW5jdGlvbiAkQSh0KXtyZXR1cm4gUVYoWDMsdCl9ZnVuY3Rpb24gekEodCl7cmV0dXJuIFFWKEZBLHQpfXZhciBYMyxCQSxGQSxZMyxLVixaVj1OKCgpPT57InVzZSBzdHJpY3QiO2pWKCk7WDM9MSxCQT0yLEZBPTMsWTM9NCxLVj0xZS02O28odVRlLCJ0cmFuc2xhdGVYIik7byhoVGUsInRyYW5zbGF0ZVkiKTtvKGZUZSwibnVtYmVyIik7byhkVGUsImNlbnRlciIpO28ocFRlLCJlbnRlcmluZyIpO28oUVYsImF4aXMiKTtvKCRBLCJheGlzVG9wIik7byh6QSwiYXhpc0JvdHRvbSIpfSk7dmFyIEpWPU4oKCk9PnsidXNlIHN0cmljdCI7WlYoKX0pO2Z1bmN0aW9uIHRVKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjt0PGU7Kyt0KXtpZighKG49YXJndW1lbnRzW3RdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGozKHIpfWZ1bmN0aW9uIGozKHQpe3RoaXMuXz10fWZ1bmN0aW9uIGdUZSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiFlLmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHlUZSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsaTtyPG47KytyKWlmKChpPXRbcl0pLm5hbWU9PT1lKXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGVVKHQsZSxyKXtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24paWYodFtuXS5uYW1lPT09ZSl7dFtuXT1tVGUsdD10LnNsaWNlKDAsbikuY29uY2F0KHQuc2xpY2UobisxKSk7YnJlYWt9cmV0dXJuIHIhPW51bGwmJnQucHVzaCh7bmFtZTplLHZhbHVlOnJ9KSx0fXZhciBtVGUsR0EsclU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttVGU9e3ZhbHVlOm8oKCk9Pnt9LCJ2YWx1ZSIpfTtvKHRVLCJkaXNwYXRjaCIpO28oajMsIkRpc3BhdGNoIik7byhnVGUsInBhcnNlVHlwZW5hbWVzIik7ajMucHJvdG90eXBlPXRVLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ajMsb246byhmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuXyxuPWdUZSh0KyIiLHIpLGksYT0tMSxzPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK2E8czspaWYoKGk9KHQ9blthXSkudHlwZSkmJihpPXlUZShyW2ldLHQubmFtZSkpKXJldHVybiBpO3JldHVybn1pZihlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8czspaWYoaT0odD1uW2FdKS50eXBlKXJbaV09ZVUocltpXSx0Lm5hbWUsZSk7ZWxzZSBpZihlPT1udWxsKWZvcihpIGluIHIpcltpXT1lVShyW2ldLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sIm9uIiksY29weTpvKGZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBqMyh0KX0sImNvcHkiKSxjYWxsOm8oZnVuY3Rpb24odCxlKXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxhO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPXRoaXMuX1t0XSxuPTAsaT1hLmxlbmd0aDtuPGk7KytuKWFbbl0udmFsdWUuYXBwbHkoZSxyKX0sImNhbGwiKSxhcHBseTpvKGZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9LCJhcHBseSIpfTtvKHlUZSwiZ2V0Iik7byhlVSwic2V0Iik7R0E9dFV9KTt2YXIgVkE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyVSgpfSk7dmFyIEszLFVBLEhBPU4oKCk9PnsidXNlIHN0cmljdCI7SzM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFVBPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpLMyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gc2ModCl7dmFyIGU9dCs9IiIscj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKGU9dC5zbGljZSgwLHIpKSE9PSJ4bWxucyImJih0PXQuc2xpY2UocisxKSksVUEuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOlVBW2VdLGxvY2FsOnR9OnR9dmFyIFEzPU4oKCk9PnsidXNlIHN0cmljdCI7SEEoKTtvKHNjLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB2VGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1LMyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09SzM/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKHIsdCl9fWZ1bmN0aW9uIHhUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBsdih0KXt2YXIgZT1zYyh0KTtyZXR1cm4oZS5sb2NhbD94VGU6dlRlKShlKX12YXIgV0E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRMygpO0hBKCk7byh2VGUsImNyZWF0b3JJbmhlcml0Iik7byh4VGUsImNyZWF0b3JGaXhlZCIpO28obHYsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGJUZSgpe31mdW5jdGlvbiBTaCh0KXtyZXR1cm4gdD09bnVsbD9iVGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX12YXIgWjM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGJUZSwibm9uZSIpO28oU2gsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHFBKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1TaCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPW5ldyBBcnJheShzKSx1LGgsZj0wO2Y8czsrK2YpKHU9YVtmXSkmJihoPXQuY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksbFtmXT1oKTtyZXR1cm4gbmV3IHVpKG4sdGhpcy5fcGFyZW50cyl9dmFyIG5VPU4oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtaMygpO28ocUEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFlBKHQpe3JldHVybiB0PT1udWxsP1tdOkFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpfXZhciBpVT1OKCgpPT57InVzZSBzdHJpY3QiO28oWUEsImFycmF5Iil9KTtmdW5jdGlvbiBUVGUoKXtyZXR1cm5bXX1mdW5jdGlvbiBfMCh0KXtyZXR1cm4gdD09bnVsbD9UVGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX12YXIgWEE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFRUZSwiZW1wdHkiKTtvKF8wLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB3VGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFlBKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gakEodCl7dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dD13VGUodCk6dD1fMCh0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1bXSxpPVtdLGE9MDthPHI7KythKWZvcih2YXIgcz1lW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraCkodT1zW2hdKSYmKG4ucHVzaCh0LmNhbGwodSx1Ll9fZGF0YV9fLGgscykpLGkucHVzaCh1KSk7cmV0dXJuIG5ldyB1aShuLGkpfXZhciBhVT1OKCgpPT57InVzZSBzdHJpY3QiO2dsKCk7aVUoKTtYQSgpO28od1RlLCJhcnJheUFsbCIpO28oakEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEQwKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIEozKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKHQpfX12YXIgY3Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEQwLCJkZWZhdWx0Iik7byhKMywiY2hpbGRNYXRjaGVyIil9KTtmdW5jdGlvbiBFVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGtUZS5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fWZ1bmN0aW9uIFNUZSgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWZ1bmN0aW9uIEtBKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0PT1udWxsP1NUZTpFVGUodHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpKMyh0KSkpfXZhciBrVGUsc1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjdigpO2tUZT1BcnJheS5wcm90b3R5cGUuZmluZDtvKEVUZSwiY2hpbGRGaW5kIik7byhTVGUsImNoaWxkRmlyc3QiKTtvKEtBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBBVGUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBfVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIENUZS5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fWZ1bmN0aW9uIFFBKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbCh0PT1udWxsP0FUZTpfVGUodHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpKMyh0KSkpfXZhciBDVGUsb1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjdigpO0NUZT1BcnJheS5wcm90b3R5cGUuZmlsdGVyO28oQVRlLCJjaGlsZHJlbiIpO28oX1RlLCJjaGlsZHJlbkZpbHRlciIpO28oUUEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpBKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1EMCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPVtdLHUsaD0wO2g8czsrK2gpKHU9YVtoXSkmJnQuY2FsbCh1LHUuX19kYXRhX18saCxhKSYmbC5wdXNoKHUpO3JldHVybiBuZXcgdWkobix0aGlzLl9wYXJlbnRzKX12YXIgbFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtnbCgpO2N2KCk7byhaQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdXYodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9dmFyIEpBPU4oKCk9PnsidXNlIHN0cmljdCI7byh1diwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZTgoKXtyZXR1cm4gbmV3IHVpKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHV2KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBodih0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12YXIgdDg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtKQSgpO2dsKCk7byhlOCwiZGVmYXVsdCIpO28oaHYsIkVudGVyTm9kZSIpO2h2LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aHYsYXBwZW5kQ2hpbGQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSwiYXBwZW5kQ2hpbGQiKSxpbnNlcnRCZWZvcmU6byhmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LCJpbnNlcnRCZWZvcmUiKSxxdWVyeVNlbGVjdG9yOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSwicXVlcnlTZWxlY3RvciIpLHF1ZXJ5U2VsZWN0b3JBbGw6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9LCJxdWVyeVNlbGVjdG9yQWxsIil9fSk7ZnVuY3Rpb24gcjgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBjVT1OKCgpPT57InVzZSBzdHJpY3QiO28ocjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIERUZSh0LGUscixuLGksYSl7Zm9yKHZhciBzPTAsbCx1PWUubGVuZ3RoLGg9YS5sZW5ndGg7czxoOysrcykobD1lW3NdKT8obC5fX2RhdGFfXz1hW3NdLG5bc109bCk6cltzXT1uZXcgaHYodCxhW3NdKTtmb3IoO3M8dTsrK3MpKGw9ZVtzXSkmJihpW3NdPWwpfWZ1bmN0aW9uIExUZSh0LGUscixuLGksYSxzKXt2YXIgbCx1LGg9bmV3IE1hcCxmPWUubGVuZ3RoLGQ9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksbTtmb3IobD0wO2w8ZjsrK2wpKHU9ZVtsXSkmJihwW2xdPW09cy5jYWxsKHUsdS5fX2RhdGFfXyxsLGUpKyIiLGguaGFzKG0pP2lbbF09dTpoLnNldChtLHUpKTtmb3IobD0wO2w8ZDsrK2wpbT1zLmNhbGwodCxhW2xdLGwsYSkrIiIsKHU9aC5nZXQobSkpPyhuW2xdPXUsdS5fX2RhdGFfXz1hW2xdLGguZGVsZXRlKG0pKTpyW2xdPW5ldyBodih0LGFbbF0pO2ZvcihsPTA7bDxmOysrbCkodT1lW2xdKSYmaC5nZXQocFtsXSk9PT11JiYoaVtsXT11KX1mdW5jdGlvbiBSVGUodCl7cmV0dXJuIHQuX19kYXRhX199ZnVuY3Rpb24gbjgodCxlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLFJUZSk7dmFyIHI9ZT9MVGU6RFRlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9cjgodCkpO2Zvcih2YXIgYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxoPTA7aDxhOysraCl7dmFyIGY9bltoXSxkPWlbaF0scD1kLmxlbmd0aCxtPU5UZSh0LmNhbGwoZixmJiZmLl9fZGF0YV9fLGgsbikpLGc9bS5sZW5ndGgseT1sW2hdPW5ldyBBcnJheShnKSx2PXNbaF09bmV3IEFycmF5KGcpLHg9dVtoXT1uZXcgQXJyYXkocCk7cihmLGQseSx2LHgsbSxlKTtmb3IodmFyIGI9MCxUPTAsUyx3O2I8ZzsrK2IpaWYoUz15W2JdKXtmb3IoYj49VCYmKFQ9YisxKTshKHc9dltUXSkmJisrVDxnOyk7Uy5fbmV4dD13fHxudWxsfX1yZXR1cm4gcz1uZXcgdWkocyxuKSxzLl9lbnRlcj1sLHMuX2V4aXQ9dSxzfWZ1bmN0aW9uIE5UZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfXZhciB1VT1OKCgpPT57InVzZSBzdHJpY3QiO2dsKCk7dDgoKTtjVSgpO28oRFRlLCJiaW5kSW5kZXgiKTtvKExUZSwiYmluZEtleSIpO28oUlRlLCJkYXR1bSIpO28objgsImRlZmF1bHQiKTtvKE5UZSwiYXJyYXlsaWtlIil9KTtmdW5jdGlvbiBpOCgpe3JldHVybiBuZXcgdWkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh1diksdGhpcy5fcGFyZW50cyl9dmFyIGhVPU4oKCk9PnsidXNlIHN0cmljdCI7SkEoKTtnbCgpO28oaTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGE4KHQsZSxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhuPXQobiksbiYmKG49bi5zZWxlY3Rpb24oKSkpOm49bi5hcHBlbmQodCsiIiksZSE9bnVsbCYmKGk9ZShpKSxpJiYoaT1pLnNlbGVjdGlvbigpKSkscj09bnVsbD9hLnJlbW92ZSgpOnIoYSksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX12YXIgZlU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGE4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzOCh0KXtmb3IodmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0LHI9dGhpcy5fZ3JvdXBzLG49ZS5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uLmxlbmd0aCxzPU1hdGgubWluKGksYSksbD1uZXcgQXJyYXkoaSksdT0wO3U8czsrK3UpZm9yKHZhciBoPXJbdV0sZj1uW3VdLGQ9aC5sZW5ndGgscD1sW3VdPW5ldyBBcnJheShkKSxtLGc9MDtnPGQ7KytnKShtPWhbZ118fGZbZ10pJiYocFtnXT1tKTtmb3IoO3U8aTsrK3UpbFt1XT1yW3VdO3JldHVybiBuZXcgdWkobCx0aGlzLl9wYXJlbnRzKX12YXIgZFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtnbCgpO28oczgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG84KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLHI9dC5sZW5ndGg7KytlPHI7KWZvcih2YXIgbj10W2VdLGk9bi5sZW5ndGgtMSxhPW5baV0sczstLWk+PTA7KShzPW5baV0pJiYoYSYmcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKV40JiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsYSksYT1zKTtyZXR1cm4gdGhpc312YXIgcFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG84LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsOCh0KXt0fHwodD1NVGUpO2Z1bmN0aW9uIGUoZCxwKXtyZXR1cm4gZCYmcD90KGQuX19kYXRhX18scC5fX2RhdGFfXyk6IWQtIXB9byhlLCJjb21wYXJlTm9kZSIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSl7Zm9yKHZhciBzPXJbYV0sbD1zLmxlbmd0aCx1PWlbYV09bmV3IEFycmF5KGwpLGgsZj0wO2Y8bDsrK2YpKGg9c1tmXSkmJih1W2ZdPWgpO3Uuc29ydChlKX1yZXR1cm4gbmV3IHVpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNVGUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIG1VPU4oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtvKGw4LCJkZWZhdWx0Iik7byhNVGUsImFzY2VuZGluZyIpfSk7ZnVuY3Rpb24gYzgoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9dmFyIGdVPU4oKCk9PnsidXNlIHN0cmljdCI7byhjOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdTgoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX12YXIgeVU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHU4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBoOCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIG49dFtlXSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKXt2YXIgcz1uW2ldO2lmKHMpcmV0dXJuIHN9cmV0dXJuIG51bGx9dmFyIHZVPU4oKCk9PnsidXNlIHN0cmljdCI7byhoOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZjgoKXtsZXQgdD0wO2ZvcihsZXQgZSBvZiB0aGlzKSsrdDtyZXR1cm4gdH12YXIgeFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGY4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBkOCgpe3JldHVybiF0aGlzLm5vZGUoKX12YXIgYlU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGQ4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBwOCh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPWVbcl0sYT0wLHM9aS5sZW5ndGgsbDthPHM7KythKShsPWlbYV0pJiZ0LmNhbGwobCxsLl9fZGF0YV9fLGEsaSk7cmV0dXJuIHRoaXN9dmFyIFRVPU4oKCk9PnsidXNlIHN0cmljdCI7byhwOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSVRlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBPVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBQVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBCVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gRlRlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LHIpfX1mdW5jdGlvbiAkVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKX19ZnVuY3Rpb24gbTgodCxlKXt2YXIgcj1zYyh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKChlPT1udWxsP3IubG9jYWw/T1RlOklUZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9yLmxvY2FsPyRUZTpGVGU6ci5sb2NhbD9CVGU6UFRlKShyLGUpKX12YXIgd1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRMygpO28oSVRlLCJhdHRyUmVtb3ZlIik7byhPVGUsImF0dHJSZW1vdmVOUyIpO28oUFRlLCJhdHRyQ29uc3RhbnQiKTtvKEJUZSwiYXR0ckNvbnN0YW50TlMiKTtvKEZUZSwiYXR0ckZ1bmN0aW9uIik7bygkVGUsImF0dHJGdW5jdGlvbk5TIik7byhtOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZnYodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fXZhciBnOD1OKCgpPT57InVzZSBzdHJpY3QiO28oZnYsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHpUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBHVGUodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBWVGUodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixyKX19ZnVuY3Rpb24geTgodCxlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChlPT1udWxsP3pUZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9WVGU6R1RlKSh0LGUscj8/IiIpKTpDaCh0aGlzLm5vZGUoKSx0KX1mdW5jdGlvbiBDaCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fGZ2KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfXZhciB2OD1OKCgpPT57InVzZSBzdHJpY3QiO2c4KCk7byh6VGUsInN0eWxlUmVtb3ZlIik7byhHVGUsInN0eWxlQ29uc3RhbnQiKTtvKFZUZSwic3R5bGVGdW5jdGlvbiIpO28oeTgsImRlZmF1bHQiKTtvKENoLCJzdHlsZVZhbHVlIil9KTtmdW5jdGlvbiBVVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEhUZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gV1RlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9fWZ1bmN0aW9uIHg4KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGU9PW51bGw/VVRlOnR5cGVvZiBlPT0iZnVuY3Rpb24iP1dUZTpIVGUpKHQsZSkpOnRoaXMubm9kZSgpW3RdfXZhciBrVT1OKCgpPT57InVzZSBzdHJpY3QiO28oVVRlLCJwcm9wZXJ0eVJlbW92ZSIpO28oSFRlLCJwcm9wZXJ0eUNvbnN0YW50Iik7byhXVGUsInByb3BlcnR5RnVuY3Rpb24iKTtvKHg4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBFVSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gYjgodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgU1UodCl9ZnVuY3Rpb24gU1UodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPUVVKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gQ1UodCxlKXtmb3IodmFyIHI9YjgodCksbj0tMSxpPWUubGVuZ3RoOysrbjxpOylyLmFkZChlW25dKX1mdW5jdGlvbiBBVSh0LGUpe2Zvcih2YXIgcj1iOCh0KSxuPS0xLGk9ZS5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKGVbbl0pfWZ1bmN0aW9uIHFUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtDVSh0aGlzLHQpfX1mdW5jdGlvbiBZVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7QVUodGhpcyx0KX19ZnVuY3Rpb24gWFRlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP0NVOkFVKSh0aGlzLHQpfX1mdW5jdGlvbiBUOCh0LGUpe3ZhciByPUVVKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWI4KHRoaXMubm9kZSgpKSxpPS0xLGE9ci5sZW5ndGg7KytpPGE7KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1hUZTplP3FUZTpZVGUpKHIsZSkpfXZhciBfVT1OKCgpPT57InVzZSBzdHJpY3QiO28oRVUsImNsYXNzQXJyYXkiKTtvKGI4LCJjbGFzc0xpc3QiKTtvKFNVLCJDbGFzc0xpc3QiKTtTVS5wcm90b3R5cGU9e2FkZDpvKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSwiYWRkIikscmVtb3ZlOm8oZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sInJlbW92ZSIpLGNvbnRhaW5zOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9LCJjb250YWlucyIpfTtvKENVLCJjbGFzc2VkQWRkIik7byhBVSwiY2xhc3NlZFJlbW92ZSIpO28ocVRlLCJjbGFzc2VkVHJ1ZSIpO28oWVRlLCJjbGFzc2VkRmFsc2UiKTtvKFhUZSwiY2xhc3NlZEZ1bmN0aW9uIik7byhUOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24galRlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBLVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBRVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1lPz8iIn19ZnVuY3Rpb24gdzgodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHQ9PW51bGw/alRlOih0eXBlb2YgdD09ImZ1bmN0aW9uIj9RVGU6S1RlKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIERVPU4oKCk9PnsidXNlIHN0cmljdCI7byhqVGUsInRleHRSZW1vdmUiKTtvKEtUZSwidGV4dENvbnN0YW50Iik7byhRVGUsInRleHRGdW5jdGlvbiIpO28odzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEpUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBld2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9ZT8/IiJ9fWZ1bmN0aW9uIGs4KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh0PT1udWxsP1pUZToodHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZXdlOkpUZSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFpUZSwiaHRtbFJlbW92ZSIpO28oSlRlLCJodG1sQ29uc3RhbnQiKTtvKGV3ZSwiaHRtbEZ1bmN0aW9uIik7byhrOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdHdlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEU4KCl7cmV0dXJuIHRoaXMuZWFjaCh0d2UpfXZhciBSVT1OKCgpPT57InVzZSBzdHJpY3QiO28odHdlLCJyYWlzZSIpO28oRTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHJ3ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFM4KCl7cmV0dXJuIHRoaXMuZWFjaChyd2UpfXZhciBOVT1OKCgpPT57InVzZSBzdHJpY3QiO28ocndlLCJsb3dlciIpO28oUzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEM4KHQpe3ZhciBlPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bHYodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE1VPU4oKCk9PnsidXNlIHN0cmljdCI7V0EoKTtvKEM4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBud2UoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBBOCh0LGUpe3ZhciByPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bHYodCksbj1lPT1udWxsP253ZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlNoKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgSVU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXQSgpO1ozKCk7byhud2UsImNvbnN0YW50TnVsbCIpO28oQTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGl3ZSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIF84KCl7cmV0dXJuIHRoaXMuZWFjaChpd2UpfXZhciBPVT1OKCgpPT57InVzZSBzdHJpY3QiO28oaXdlLCJyZW1vdmUiKTtvKF84LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBhd2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIHN3ZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gRDgodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/c3dlOmF3ZSl9dmFyIFBVPU4oKCk9PnsidXNlIHN0cmljdCI7byhhd2UsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciKTtvKHN3ZSwic2VsZWN0aW9uX2Nsb25lRGVlcCIpO28oRDgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEw4KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgQlU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEw4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBvd2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fWZ1bmN0aW9uIGx3ZSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGUpe3ZhciByPSIiLG49ZS5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPWUuc2xpY2UobisxKSxlPWUuc2xpY2UoMCxuKSkse3R5cGU6ZSxuYW1lOnJ9fSl9ZnVuY3Rpb24gY3dlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIHI9MCxuPS0xLGk9ZS5sZW5ndGgsYTtyPGk7KytyKWE9ZVtyXSwoIXQudHlwZXx8YS50eXBlPT09dC50eXBlKSYmYS5uYW1lPT09dC5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLnR5cGUsYS5saXN0ZW5lcixhLm9wdGlvbnMpOmVbKytuXT1hOysrbj9lLmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiB1d2UodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19vbixpLGE9b3dlKGUpO2lmKG4pe2Zvcih2YXIgcz0wLGw9bi5sZW5ndGg7czxsOysrcylpZigoaT1uW3NdKS50eXBlPT09dC50eXBlJiZpLm5hbWU9PT10Lm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcixpLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcj1hLGkub3B0aW9ucz1yKSxpLnZhbHVlPWU7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGEsciksaT17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjphLG9wdGlvbnM6cn0sbj9uLnB1c2goaSk6dGhpcy5fX29uPVtpXX19ZnVuY3Rpb24gUjgodCxlLHIpe3ZhciBuPWx3ZSh0KyIiKSxpLGE9bi5sZW5ndGgscztpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBsPXRoaXMubm9kZSgpLl9fb247aWYobCl7Zm9yKHZhciB1PTAsaD1sLmxlbmd0aCxmO3U8aDsrK3UpZm9yKGk9MCxmPWxbdV07aTxhOysraSlpZigocz1uW2ldKS50eXBlPT09Zi50eXBlJiZzLm5hbWU9PT1mLm5hbWUpcmV0dXJuIGYudmFsdWV9cmV0dXJufWZvcihsPWU/dXdlOmN3ZSxpPTA7aTxhOysraSl0aGlzLmVhY2gobChuW2ldLGUscikpO3JldHVybiB0aGlzfXZhciBGVT1OKCgpPT57InVzZSBzdHJpY3QiO28ob3dlLCJjb250ZXh0TGlzdGVuZXIiKTtvKGx3ZSwicGFyc2VUeXBlbmFtZXMiKTtvKGN3ZSwib25SZW1vdmUiKTtvKHV3ZSwib25BZGQiKTtvKFI4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkVSh0LGUscil7dmFyIG49ZnYodCksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkoZSxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KGUsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gaHdlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuICRVKHRoaXMsdCxlKX19ZnVuY3Rpb24gZndlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuICRVKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIE44KHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZndlOmh3ZSkodCxlKSl9dmFyIHpVPU4oKCk9PnsidXNlIHN0cmljdCI7ZzgoKTtvKCRVLCJkaXNwYXRjaEV2ZW50Iik7byhod2UsImRpc3BhdGNoQ29uc3RhbnQiKTtvKGZ3ZSwiZGlzcGF0Y2hGdW5jdGlvbiIpO28oTjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uKk04KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAscj10Lmxlbmd0aDtlPHI7KytlKWZvcih2YXIgbj10W2VdLGk9MCxhPW4ubGVuZ3RoLHM7aTxhOysraSkocz1uW2ldKSYmKHlpZWxkIHMpfXZhciBHVT1OKCgpPT57InVzZSBzdHJpY3QiO28oTTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHVpKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIFZVKCl7cmV0dXJuIG5ldyB1aShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEk4KX1mdW5jdGlvbiBkd2UoKXtyZXR1cm4gdGhpc312YXIgSTgsZ3UsZ2w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuVSgpO2FVKCk7c1UoKTtvVSgpO2xVKCk7dVUoKTt0OCgpO2hVKCk7ZlUoKTtkVSgpO3BVKCk7bVUoKTtnVSgpO3lVKCk7dlUoKTt4VSgpO2JVKCk7VFUoKTt3VSgpO3Y4KCk7a1UoKTtfVSgpO0RVKCk7TFUoKTtSVSgpO05VKCk7TVUoKTtJVSgpO09VKCk7UFUoKTtCVSgpO0ZVKCk7elUoKTtHVSgpO0k4PVtudWxsXTtvKHVpLCJTZWxlY3Rpb24iKTtvKFZVLCJzZWxlY3Rpb24iKTtvKGR3ZSwic2VsZWN0aW9uX3NlbGVjdGlvbiIpO3VpLnByb3RvdHlwZT1WVS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVpLHNlbGVjdDpxQSxzZWxlY3RBbGw6akEsc2VsZWN0Q2hpbGQ6S0Esc2VsZWN0Q2hpbGRyZW46UUEsZmlsdGVyOlpBLGRhdGE6bjgsZW50ZXI6ZTgsZXhpdDppOCxqb2luOmE4LG1lcmdlOnM4LHNlbGVjdGlvbjpkd2Usb3JkZXI6bzgsc29ydDpsOCxjYWxsOmM4LG5vZGVzOnU4LG5vZGU6aDgsc2l6ZTpmOCxlbXB0eTpkOCxlYWNoOnA4LGF0dHI6bTgsc3R5bGU6eTgscHJvcGVydHk6eDgsY2xhc3NlZDpUOCx0ZXh0Onc4LGh0bWw6azgscmFpc2U6RTgsbG93ZXI6UzgsYXBwZW5kOkM4LGluc2VydDpBOCxyZW1vdmU6XzgsY2xvbmU6RDgsZGF0dW06TDgsb246UjgsZGlzcGF0Y2g6TjgsW1N5bWJvbC5pdGVyYXRvcl06TTh9O2d1PVZVfSk7ZnVuY3Rpb24gR2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj9uZXcgdWkoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB1aShbW3RdXSxJOCl9dmFyIFVVPU4oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtvKEdlLCJkZWZhdWx0Iil9KTt2YXIgeWw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjdigpO1EzKCk7VVUoKTtnbCgpO1ozKCk7WEEoKTt2OCgpfSk7dmFyIEhVPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBBaCh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gTDAodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9dmFyIE84PU4oKCk9PnsidXNlIHN0cmljdCI7byhBaCwiZGVmYXVsdCIpO28oTDAsImV4dGVuZCIpfSk7ZnVuY3Rpb24gX2goKXt9ZnVuY3Rpb24gcVUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBUd2UoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9ZnVuY3Rpb24gd3dlKCl7cmV0dXJuIEpVKHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIFlVKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24geGwodCl7dmFyIGUscjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cHdlLmV4ZWModCkpPyhyPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNikscj09PTY/WFUoZSk6cj09PTM/bmV3IGNhKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXxlJjI0MCwoZSYxNSk8PDR8ZSYxNSwxKTpyPT09OD9lNShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LChlJjI1NSkvMjU1KTpyPT09ND9lNShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8ZSYyNDAsKChlJjE1KTw8NHxlJjE1KS8yNTUpOm51bGwpOihlPW13ZS5leGVjKHQpKT9uZXcgY2EoZVsxXSxlWzJdLGVbM10sMSk6KGU9Z3dlLmV4ZWModCkpP25ldyBjYShlWzFdKjI1NS8xMDAsZVsyXSoyNTUvMTAwLGVbM10qMjU1LzEwMCwxKTooZT15d2UuZXhlYyh0KSk/ZTUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9dndlLmV4ZWModCkpP2U1KGVbMV0qMjU1LzEwMCxlWzJdKjI1NS8xMDAsZVszXSoyNTUvMTAwLGVbNF0pOihlPXh3ZS5leGVjKHQpKT9RVShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWJ3ZS5leGVjKHQpKT9RVShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOldVLmhhc093blByb3BlcnR5KHQpP1hVKFdVW3RdKTp0PT09InRyYW5zcGFyZW50Ij9uZXcgY2EoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBYVSh0KXtyZXR1cm4gbmV3IGNhKHQ+PjE2JjI1NSx0Pj44JjI1NSx0JjI1NSwxKX1mdW5jdGlvbiBlNSh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IGNhKHQsZSxyLG4pfWZ1bmN0aW9uIEI4KHQpe3JldHVybiB0IGluc3RhbmNlb2YgX2h8fCh0PXhsKHQpKSx0Pyh0PXQucmdiKCksbmV3IGNhKHQucix0LmcsdC5iLHQub3BhY2l0eSkpOm5ldyBjYX1mdW5jdGlvbiBOMCh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/QjgodCk6bmV3IGNhKHQsZSxyLG4/PzEpfWZ1bmN0aW9uIGNhKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBqVSgpe3JldHVybmAjJHtnZCh0aGlzLnIpfSR7Z2QodGhpcy5nKX0ke2dkKHRoaXMuYil9YH1mdW5jdGlvbiBrd2UoKXtyZXR1cm5gIyR7Z2QodGhpcy5yKX0ke2dkKHRoaXMuZyl9JHtnZCh0aGlzLmIpfSR7Z2QoKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKjI1NSl9YH1mdW5jdGlvbiBLVSgpe2xldCB0PW41KHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7dD09PTE/InJnYigiOiJyZ2JhKCJ9JHt5ZCh0aGlzLnIpfSwgJHt5ZCh0aGlzLmcpfSwgJHt5ZCh0aGlzLmIpfSR7dD09PTE/IikiOmAsICR7dH0pYH1gfWZ1bmN0aW9uIG41KHQpe3JldHVybiBpc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSl9ZnVuY3Rpb24geWQodCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKX1mdW5jdGlvbiBnZCh0KXtyZXR1cm4gdD15ZCh0KSwodDwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFFVKHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgdmwodCxlLHIsbil9ZnVuY3Rpb24gSlUodCl7aWYodCBpbnN0YW5jZW9mIHZsKXJldHVybiBuZXcgdmwodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgX2h8fCh0PXhsKHQpKSwhdClyZXR1cm4gbmV3IHZsO2lmKHQgaW5zdGFuY2VvZiB2bClyZXR1cm4gdDt0PXQucmdiKCk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9TWF0aC5taW4oZSxyLG4pLGE9TWF0aC5tYXgoZSxyLG4pLHM9TmFOLGw9YS1pLHU9KGEraSkvMjtyZXR1cm4gbD8oZT09PWE/cz0oci1uKS9sKyhyPG4pKjY6cj09PWE/cz0obi1lKS9sKzI6cz0oZS1yKS9sKzQsbC89dTwuNT9hK2k6Mi1hLWkscyo9NjApOmw9dT4wJiZ1PDE/MDpzLG5ldyB2bChzLGwsdSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGVIKHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9KVSh0KTpuZXcgdmwodCxlLHIsbj8/MSl9ZnVuY3Rpb24gdmwodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFpVKHQpe3JldHVybiB0PSh0fHwwKSUzNjAsdDwwP3QrMzYwOnR9ZnVuY3Rpb24gdDUodCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSx0fHwwKSl9ZnVuY3Rpb24gUDgodCxlLHIpe3JldHVybih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKSoyNTV9dmFyIGR2LHI1LFIwLHB2LG9jLHB3ZSxtd2UsZ3dlLHl3ZSx2d2UseHdlLGJ3ZSxXVSxGOD1OKCgpPT57InVzZSBzdHJpY3QiO084KCk7byhfaCwiQ29sb3IiKTtkdj0uNyxyNT0xL2R2LFIwPSJcXHMqKFsrLV0/XFxkKylcXHMqIixwdj0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsb2M9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixwd2U9L14jKFswLTlhLWZdezMsOH0pJC8sbXdlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke1IwfSwke1IwfSwke1IwfVxcKSRgKSxnd2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7b2N9LCR7b2N9LCR7b2N9XFwpJGApLHl3ZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7UjB9LCR7UjB9LCR7UjB9LCR7cHZ9XFwpJGApLHZ3ZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7b2N9LCR7b2N9LCR7b2N9LCR7cHZ9XFwpJGApLHh3ZT1uZXcgUmVnRXhwKGBeaHNsXFwoJHtwdn0sJHtvY30sJHtvY31cXCkkYCksYndlPW5ldyBSZWdFeHAoYF5oc2xhXFwoJHtwdn0sJHtvY30sJHtvY30sJHtwdn1cXCkkYCksV1U9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07QWgoX2gseGwse2NvcHkodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cVUsZm9ybWF0SGV4OnFVLGZvcm1hdEhleDg6VHdlLGZvcm1hdEhzbDp3d2UsZm9ybWF0UmdiOllVLHRvU3RyaW5nOllVfSk7byhxVSwiY29sb3JfZm9ybWF0SGV4Iik7byhUd2UsImNvbG9yX2Zvcm1hdEhleDgiKTtvKHd3ZSwiY29sb3JfZm9ybWF0SHNsIik7byhZVSwiY29sb3JfZm9ybWF0UmdiIik7byh4bCwiY29sb3IiKTtvKFhVLCJyZ2JuIik7byhlNSwicmdiYSIpO28oQjgsInJnYkNvbnZlcnQiKTtvKE4wLCJyZ2IiKTtvKGNhLCJSZ2IiKTtBaChjYSxOMCxMMChfaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9yNTpNYXRoLnBvdyhyNSx0KSxuZXcgY2EodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiB0PXQ9PW51bGw/ZHY6TWF0aC5wb3coZHYsdCksbmV3IGNhKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgY2EoeWQodGhpcy5yKSx5ZCh0aGlzLmcpLHlkKHRoaXMuYiksbjUodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpqVSxmb3JtYXRIZXg6alUsZm9ybWF0SGV4ODprd2UsZm9ybWF0UmdiOktVLHRvU3RyaW5nOktVfSkpO28oalUsInJnYl9mb3JtYXRIZXgiKTtvKGt3ZSwicmdiX2Zvcm1hdEhleDgiKTtvKEtVLCJyZ2JfZm9ybWF0UmdiIik7byhuNSwiY2xhbXBhIik7byh5ZCwiY2xhbXBpIik7byhnZCwiaGV4Iik7byhRVSwiaHNsYSIpO28oSlUsImhzbENvbnZlcnQiKTtvKGVILCJoc2wiKTtvKHZsLCJIc2wiKTtBaCh2bCxlSCxMMChfaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9yNTpNYXRoLnBvdyhyNSx0KSxuZXcgdmwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9kdjpNYXRoLnBvdyhkdix0KSxuZXcgdmwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgdD10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyBjYShQOCh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxQOCh0LGksbiksUDgodDwxMjA/dCsyNDA6dC0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgdmwoWlUodGhpcy5oKSx0NSh0aGlzLnMpLHQ1KHRoaXMubCksbjUodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtsZXQgdD1uNSh0aGlzLm9wYWNpdHkpO3JldHVybmAke3Q9PT0xPyJoc2woIjoiaHNsYSgifSR7WlUodGhpcy5oKX0sICR7dDUodGhpcy5zKSoxMDB9JSwgJHt0NSh0aGlzLmwpKjEwMH0lJHt0PT09MT8iKSI6YCwgJHt0fSlgfWB9fSkpO28oWlUsImNsYW1waCIpO28odDUsImNsYW1wdCIpO28oUDgsImhzbDJyZ2IiKX0pO3ZhciB0SCxySCxuSD1OKCgpPT57InVzZSBzdHJpY3QiO3RIPU1hdGguUEkvMTgwLHJIPTE4MC9NYXRoLlBJfSk7ZnVuY3Rpb24gY0godCl7aWYodCBpbnN0YW5jZW9mIGxjKXJldHVybiBuZXcgbGModC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgeXUpcmV0dXJuIHVIKHQpO3QgaW5zdGFuY2VvZiBjYXx8KHQ9QjgodCkpO3ZhciBlPVY4KHQucikscj1WOCh0LmcpLG49VjgodC5iKSxpPSQ4KCguMjIyNTA0NSplKy43MTY4Nzg2KnIrLjA2MDYxNjkqbikvYUgpLGEscztyZXR1cm4gZT09PXImJnI9PT1uP2E9cz1pOihhPSQ4KCguNDM2MDc0NyplKy4zODUwNjQ5KnIrLjE0MzA4MDQqbikvaUgpLHM9JDgoKC4wMTM5MzIyKmUrLjA5NzEwNDUqcisuNzE0MTczMypuKS9zSCkpLG5ldyBsYygxMTYqaS0xNiw1MDAqKGEtaSksMjAwKihpLXMpLHQub3BhY2l0eSl9ZnVuY3Rpb24gVTgodCxlLHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2NIKHQpOm5ldyBsYyh0LGUscixuPz8xKX1mdW5jdGlvbiBsYyh0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gJDgodCl7cmV0dXJuIHQ+RXdlP01hdGgucG93KHQsMS8zKTp0L2xIK29IfWZ1bmN0aW9uIHo4KHQpe3JldHVybiB0Pk0wP3QqdCp0OmxIKih0LW9IKX1mdW5jdGlvbiBHOCh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFY4KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFN3ZSh0KXtpZih0IGluc3RhbmNlb2YgeXUpcmV0dXJuIG5ldyB5dSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBsY3x8KHQ9Y0godCkpLHQuYT09PTAmJnQuYj09PTApcmV0dXJuIG5ldyB5dShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpySDtyZXR1cm4gbmV3IHl1KGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIG12KHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9Td2UodCk6bmV3IHl1KHQsZSxyLG4/PzEpfWZ1bmN0aW9uIHl1KHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB1SCh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgbGModC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp0SDtyZXR1cm4gbmV3IGxjKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dmFyIGk1LGlILGFILHNILG9ILE0wLGxILEV3ZSxoSD1OKCgpPT57InVzZSBzdHJpY3QiO084KCk7RjgoKTtuSCgpO2k1PTE4LGlIPS45NjQyMixhSD0xLHNIPS44MjUyMSxvSD00LzI5LE0wPTYvMjksbEg9MypNMCpNMCxFd2U9TTAqTTAqTTA7byhjSCwibGFiQ29udmVydCIpO28oVTgsImxhYiIpO28obGMsIkxhYiIpO0FoKGxjLFU4LEwwKF9oLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IGxjKHRoaXMubCtpNSoodD8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIG5ldyBsYyh0aGlzLmwtaTUqKHQ/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIGU9aUgqejgoZSksdD1hSCp6OCh0KSxyPXNIKno4KHIpLG5ldyBjYShHOCgzLjEzMzg1NjEqZS0xLjYxNjg2NjcqdC0uNDkwNjE0NipyKSxHOCgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0KnIpLEc4KC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7bygkOCwieHl6MmxhYiIpO28oejgsImxhYjJ4eXoiKTtvKEc4LCJscmdiMnJnYiIpO28oVjgsInJnYjJscmdiIik7byhTd2UsImhjbENvbnZlcnQiKTtvKG12LCJoY2wiKTtvKHl1LCJIY2wiKTtvKHVILCJoY2wybGFiIik7QWgoeXUsbXYsTDAoX2gse2JyaWdodGVyKHQpe3JldHVybiBuZXcgeXUodGhpcy5oLHRoaXMuYyx0aGlzLmwraTUqKHQ/PzEpLHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gbmV3IHl1KHRoaXMuaCx0aGlzLmMsdGhpcy5sLWk1Kih0Pz8xKSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdUgodGhpcykucmdiKCl9fSkpfSk7dmFyIEkwPU4oKCk9PnsidXNlIHN0cmljdCI7RjgoKTtoSCgpfSk7ZnVuY3Rpb24gSDgodCxlLHIsbixpKXt2YXIgYT10KnQscz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtcykqZSsoNC02KmErMypzKSpyKygxKzMqdCszKmEtMypzKSpuK3MqaSkvNn1mdW5jdGlvbiBXOCh0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsZS0xKTpNYXRoLmZsb29yKHIqZSksaT10W25dLGE9dFtuKzFdLHM9bj4wP3Rbbi0xXToyKmktYSxsPW48ZS0xP3RbbisyXToyKmEtaTtyZXR1cm4gSDgoKHItbi9lKSplLHMsaSxhLGwpfX12YXIgcTg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEg4LCJiYXNpcyIpO28oVzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFk4KHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqZSksaT10WyhuK2UtMSklZV0sYT10W24lZV0scz10WyhuKzEpJWVdLGw9dFsobisyKSVlXTtyZXR1cm4gSDgoKHItbi9lKSplLGksYSxzLGwpfX12YXIgZkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxOCgpO28oWTgsImRlZmF1bHQiKX0pO3ZhciBPMCxYOD1OKCgpPT57InVzZSBzdHJpY3QiO08wPW8odD0+KCk9PnQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGRIKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gQ3dlKHQsZSxyKXtyZXR1cm4gdD1NYXRoLnBvdyh0LHIpLGU9TWF0aC5wb3coZSxyKS10LHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyh0K24qZSxyKX19ZnVuY3Rpb24gcEgodCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/ZEgodCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOk8wKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbUgodCl7cmV0dXJuKHQ9K3QpPT0xP3Z1OmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9Dd2UoZSxyLHQpOk8wKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIHZ1KHQsZSl7dmFyIHI9ZS10O3JldHVybiByP2RIKHQscik6TzAoaXNOYU4odCk/ZTp0KX12YXIgajg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYOCgpO28oZEgsImxpbmVhciIpO28oQ3dlLCJleHBvbmVudGlhbCIpO28ocEgsImh1ZSIpO28obUgsImdhbW1hIik7byh2dSwibm9nYW1tYSIpfSk7ZnVuY3Rpb24gZ0godCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHMsbDtmb3Iocz0wO3M8cjsrK3MpbD1OMChlW3NdKSxuW3NdPWwucnx8MCxpW3NdPWwuZ3x8MCxhW3NdPWwuYnx8MDtyZXR1cm4gbj10KG4pLGk9dChpKSxhPXQoYSksbC5vcGFjaXR5PTEsZnVuY3Rpb24odSl7cmV0dXJuIGwucj1uKHUpLGwuZz1pKHUpLGwuYj1hKHUpLGwrIiJ9fX12YXIgdmQsQXdlLF93ZSxLOD1OKCgpPT57InVzZSBzdHJpY3QiO0kwKCk7cTgoKTtmSCgpO2o4KCk7dmQ9byhmdW5jdGlvbiB0KGUpe3ZhciByPW1IKGUpO2Z1bmN0aW9uIG4oaSxhKXt2YXIgcz1yKChpPU4wKGkpKS5yLChhPU4wKGEpKS5yKSxsPXIoaS5nLGEuZyksdT1yKGkuYixhLmIpLGg9dnUoaS5vcGFjaXR5LGEub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBpLnI9cyhmKSxpLmc9bChmKSxpLmI9dShmKSxpLm9wYWNpdHk9aChmKSxpKyIifX1yZXR1cm4gbyhuLCJyZ2IiKSxuLmdhbW1hPXQsbn0sInJnYkdhbW1hIikoMSk7byhnSCwicmdiU3BsaW5lIik7QXdlPWdIKFc4KSxfd2U9Z0goWTgpfSk7ZnVuY3Rpb24gUTgodCxlKXtlfHwoZT1bXSk7dmFyIHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxuPWUuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihhKXtmb3IoaT0wO2k8cjsrK2kpbltpXT10W2ldKigxLWEpK2VbaV0qYTtyZXR1cm4gbn19ZnVuY3Rpb24geUgodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciB2SD1OKCgpPT57InVzZSBzdHJpY3QiO28oUTgsImRlZmF1bHQiKTtvKHlILCJpc051bWJlckFycmF5Iil9KTtmdW5jdGlvbiB4SCh0LGUpe3ZhciByPWU/ZS5sZW5ndGg6MCxuPXQ/TWF0aC5taW4ocix0Lmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShyKSxzO2ZvcihzPTA7czxuOysrcylpW3NdPURoKHRbc10sZVtzXSk7Zm9yKDtzPHI7KytzKWFbc109ZVtzXTtyZXR1cm4gZnVuY3Rpb24obCl7Zm9yKHM9MDtzPG47KytzKWFbc109aVtzXShsKTtyZXR1cm4gYX19dmFyIGJIPU4oKCk9PnsidXNlIHN0cmljdCI7YTUoKTtvKHhILCJnZW5lcmljQXJyYXkiKX0pO2Z1bmN0aW9uIFo4KHQsZSl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQqKDEtbikrZSpuKSxyfX12YXIgVEg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFo4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLaSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX12YXIgZ3Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEtpLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBKOCh0LGUpe3ZhciByPXt9LG49e30saTsodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KSwoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KTtmb3IoaSBpbiBlKWkgaW4gdD9yW2ldPURoKHRbaV0sZVtpXSk6bltpXT1lW2ldO3JldHVybiBmdW5jdGlvbihhKXtmb3IoaSBpbiByKW5baV09cltpXShhKTtyZXR1cm4gbn19dmFyIHdIPU4oKCk9PnsidXNlIHN0cmljdCI7YTUoKTtvKEo4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBEd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEx3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fWZ1bmN0aW9uIFAwKHQsZSl7dmFyIHI9dF8ubGFzdEluZGV4PWVfLmxhc3RJbmRleD0wLG4saSxhLHM9LTEsbD1bXSx1PVtdO2Zvcih0PXQrIiIsZT1lKyIiOyhuPXRfLmV4ZWModCkpJiYoaT1lXy5leGVjKGUpKTspKGE9aS5pbmRleCk+ciYmKGE9ZS5zbGljZShyLGEpLGxbc10/bFtzXSs9YTpsWysrc109YSksKG49blswXSk9PT0oaT1pWzBdKT9sW3NdP2xbc10rPWk6bFsrK3NdPWk6KGxbKytzXT1udWxsLHUucHVzaCh7aTpzLHg6S2kobixpKX0pKSxyPWVfLmxhc3RJbmRleDtyZXR1cm4gcjxlLmxlbmd0aCYmKGE9ZS5zbGljZShyKSxsW3NdP2xbc10rPWE6bFsrK3NdPWEpLGwubGVuZ3RoPDI/dVswXT9Md2UodVswXS54KTpEd2UoZSk6KGU9dS5sZW5ndGgsZnVuY3Rpb24oaCl7Zm9yKHZhciBmPTAsZDtmPGU7KytmKWxbKGQ9dVtmXSkuaV09ZC54KGgpO3JldHVybiBsLmpvaW4oIiIpfSl9dmFyIHRfLGVfLHJfPU4oKCk9PnsidXNlIHN0cmljdCI7Z3YoKTt0Xz0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csZV89bmV3IFJlZ0V4cCh0Xy5zb3VyY2UsImciKTtvKER3ZSwiemVybyIpO28oTHdlLCJvbmUiKTtvKFAwLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBEaCh0LGUpe3ZhciByPXR5cGVvZiBlLG47cmV0dXJuIGU9PW51bGx8fHI9PT0iYm9vbGVhbiI/TzAoZSk6KHI9PT0ibnVtYmVyIj9LaTpyPT09InN0cmluZyI/KG49eGwoZSkpPyhlPW4sdmQpOlAwOmUgaW5zdGFuY2VvZiB4bD92ZDplIGluc3RhbmNlb2YgRGF0ZT9aODp5SChlKT9RODpBcnJheS5pc0FycmF5KGUpP3hIOnR5cGVvZiBlLnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiBlLnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTihlKT9KODpLaSkodCxlKX12YXIgYTU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMCgpO0s4KCk7YkgoKTtUSCgpO2d2KCk7d0goKTtyXygpO1g4KCk7dkgoKTtvKERoLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzNSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCooMS1yKStlKnIpfX12YXIga0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHM1LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsNSh0LGUscixuLGksYSl7dmFyIHMsbCx1O3JldHVybihzPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1zLGUvPXMpLCh1PXQqcitlKm4pJiYoci09dCp1LG4tPWUqdSksKGw9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPWwsbi89bCx1Lz1sKSx0Km48ZSpyJiYodD0tdCxlPS1lLHU9LXUscz0tcykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpFSCxza2V3WDpNYXRoLmF0YW4odSkqRUgsc2NhbGVYOnMsc2NhbGVZOmx9fXZhciBFSCxvNSxTSD1OKCgpPT57InVzZSBzdHJpY3QiO0VIPTE4MC9NYXRoLlBJLG81PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O28obDUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIENIKHQpe2xldCBlPW5ldyh0eXBlb2YgRE9NTWF0cml4PT0iZnVuY3Rpb24iP0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKHQrIiIpO3JldHVybiBlLmlzSWRlbnRpdHk/bzU6bDUoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpfWZ1bmN0aW9uIEFIKHQpe3JldHVybiB0PT1udWxsP281OihjNXx8KGM1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGM1LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1jNS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8odD10Lm1hdHJpeCxsNSh0LmEsdC5iLHQuYyx0LmQsdC5lLHQuZikpOm81KX12YXIgYzUsX0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTSCgpO28oQ0gsInBhcnNlQ3NzIik7byhBSCwicGFyc2VTdmciKX0pO2Z1bmN0aW9uIERIKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaCl7cmV0dXJuIGgubGVuZ3RoP2gucG9wKCkrIiAiOiIifW8oaSwicG9wIik7ZnVuY3Rpb24gYShoLGYsZCxwLG0sZyl7aWYoaCE9PWR8fGYhPT1wKXt2YXIgeT1tLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLHIpO2cucHVzaCh7aTp5LTQseDpLaShoLGQpfSx7aTp5LTIseDpLaShmLHApfSl9ZWxzZShkfHxwKSYmbS5wdXNoKCJ0cmFuc2xhdGUoIitkK2UrcCtyKX1vKGEsInRyYW5zbGF0ZSIpO2Z1bmN0aW9uIHMoaCxmLGQscCl7aCE9PWY/KGgtZj4xODA/Zis9MzYwOmYtaD4xODAmJihoKz0zNjApLHAucHVzaCh7aTpkLnB1c2goaShkKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6S2koaCxmKX0pKTpmJiZkLnB1c2goaShkKSsicm90YXRlKCIrZituKX1vKHMsInJvdGF0ZSIpO2Z1bmN0aW9uIGwoaCxmLGQscCl7aCE9PWY/cC5wdXNoKHtpOmQucHVzaChpKGQpKyJza2V3WCgiLG51bGwsbiktMix4OktpKGgsZil9KTpmJiZkLnB1c2goaShkKSsic2tld1goIitmK24pfW8obCwic2tld1giKTtmdW5jdGlvbiB1KGgsZixkLHAsbSxnKXtpZihoIT09ZHx8ZiE9PXApe3ZhciB5PW0ucHVzaChpKG0pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtnLnB1c2goe2k6eS00LHg6S2koaCxkKX0se2k6eS0yLHg6S2koZixwKX0pfWVsc2UoZCE9PTF8fHAhPT0xKSYmbS5wdXNoKGkobSkrInNjYWxlKCIrZCsiLCIrcCsiKSIpfXJldHVybiBvKHUsInNjYWxlIiksZnVuY3Rpb24oaCxmKXt2YXIgZD1bXSxwPVtdO3JldHVybiBoPXQoaCksZj10KGYpLGEoaC50cmFuc2xhdGVYLGgudHJhbnNsYXRlWSxmLnRyYW5zbGF0ZVgsZi50cmFuc2xhdGVZLGQscCkscyhoLnJvdGF0ZSxmLnJvdGF0ZSxkLHApLGwoaC5za2V3WCxmLnNrZXdYLGQscCksdShoLnNjYWxlWCxoLnNjYWxlWSxmLnNjYWxlWCxmLnNjYWxlWSxkLHApLGg9Zj1udWxsLGZ1bmN0aW9uKG0pe2Zvcih2YXIgZz0tMSx5PXAubGVuZ3RoLHY7KytnPHk7KWRbKHY9cFtnXSkuaV09di54KG0pO3JldHVybiBkLmpvaW4oIiIpfX19dmFyIG5fLGlfLExIPU4oKCk9PnsidXNlIHN0cmljdCI7Z3YoKTtfSCgpO28oREgsImludGVycG9sYXRlVHJhbnNmb3JtIik7bl89REgoQ0gsInB4LCAiLCJweCkiLCJkZWcpIiksaV89REgoQUgsIiwgIiwiKSIsIikiKX0pO2Z1bmN0aW9uIFJIKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXQoKGU9bXYoZSkpLmgsKHI9bXYocikpLmgpLGk9dnUoZS5jLHIuYyksYT12dShlLmwsci5sKSxzPXZ1KGUub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gZS5oPW4obCksZS5jPWkobCksZS5sPWEobCksZS5vcGFjaXR5PXMobCksZSsiIn19fXZhciBhXyxSd2UsTkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMCgpO2o4KCk7byhSSCwiaGNsIik7YV89UkgocEgpLFJ3ZT1SSCh2dSl9KTt2YXIgQjA9TigoKT0+eyJ1c2Ugc3RyaWN0IjthNSgpO2d2KCk7a0goKTtyXygpO0xIKCk7SzgoKTtOSCgpfSk7ZnVuY3Rpb24gd3YoKXtyZXR1cm4geGR8fChPSChOd2UpLHhkPWJ2Lm5vdygpK2Y1KX1mdW5jdGlvbiBOd2UoKXt4ZD0wfWZ1bmN0aW9uIFR2KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBkNSh0LGUscil7dmFyIG49bmV3IFR2O3JldHVybiBuLnJlc3RhcnQodCxlLHIpLG59ZnVuY3Rpb24gUEgoKXt3digpLCsrRjA7Zm9yKHZhciB0PXU1LGU7dDspKGU9eGQtdC5fdGltZSk+PTAmJnQuX2NhbGwuY2FsbCh2b2lkIDAsZSksdD10Ll9uZXh0Oy0tRjB9ZnVuY3Rpb24gTUgoKXt4ZD0oaDU9YnYubm93KCkpK2Y1LEYwPXZ2PTA7dHJ5e1BIKCl9ZmluYWxseXtGMD0wLEl3ZSgpLHhkPTB9fWZ1bmN0aW9uIE13ZSgpe3ZhciB0PWJ2Lm5vdygpLGU9dC1oNTtlPklIJiYoZjUtPWUsaDU9dCl9ZnVuY3Rpb24gSXdlKCl7Zm9yKHZhciB0LGU9dTUscixuPTEvMDtlOyllLl9jYWxsPyhuPmUuX3RpbWUmJihuPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihyPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PXI6dTU9cik7eHY9dCxzXyhuKX1mdW5jdGlvbiBzXyh0KXtpZighRjApe3Z2JiYodnY9Y2xlYXJUaW1lb3V0KHZ2KSk7dmFyIGU9dC14ZDtlPjI0Pyh0PDEvMCYmKHZ2PXNldFRpbWVvdXQoTUgsdC1idi5ub3coKS1mNSkpLHl2JiYoeXY9Y2xlYXJJbnRlcnZhbCh5dikpKTooeXZ8fChoNT1idi5ub3coKSx5dj1zZXRJbnRlcnZhbChNd2UsSUgpKSxGMD0xLE9IKE1IKSl9fXZhciBGMCx2dix5dixJSCx1NSx4dixoNSx4ZCxmNSxidixPSCxvXz1OKCgpPT57InVzZSBzdHJpY3QiO0YwPTAsdnY9MCx5dj0wLElIPTFlMyxoNT0wLHhkPTAsZjU9MCxidj10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxPSD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtvKHd2LCJub3ciKTtvKE53ZSwiY2xlYXJOb3ciKTtvKFR2LCJUaW1lciIpO1R2LnByb3RvdHlwZT1kNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlR2LHJlc3RhcnQ6byhmdW5jdGlvbih0LGUscil7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP3d2KCk6K3IpKyhlPT1udWxsPzA6K2UpLCF0aGlzLl9uZXh0JiZ4diE9PXRoaXMmJih4dj94di5fbmV4dD10aGlzOnU1PXRoaXMseHY9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9cixzXygpfSwicmVzdGFydCIpLHN0b3A6byhmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsc18oKSl9LCJzdG9wIil9O28oZDUsInRpbWVyIik7byhQSCwidGltZXJGbHVzaCIpO28oTUgsIndha2UiKTtvKE13ZSwicG9rZSIpO28oSXdlLCJuYXAiKTtvKHNfLCJzbGVlcCIpfSk7ZnVuY3Rpb24ga3YodCxlLHIpe3ZhciBuPW5ldyBUdjtyZXR1cm4gZT1lPT1udWxsPzA6K2Usbi5yZXN0YXJ0KGk9PntuLnN0b3AoKSx0KGkrZSl9LGUsciksbn12YXIgQkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvXygpO28oa3YsImRlZmF1bHQiKX0pO3ZhciBwNT1OKCgpPT57InVzZSBzdHJpY3QiO29fKCk7QkgoKX0pO2Z1bmN0aW9uIHh1KHQsZSxyLG4saSxhKXt2YXIgcz10Ll9fdHJhbnNpdGlvbjtpZighcyl0Ll9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gcylyZXR1cm47QndlKHQscix7bmFtZTplLGluZGV4Om4sZ3JvdXA6aSxvbjpPd2UsdHdlZW46UHdlLHRpbWU6YS50aW1lLGRlbGF5OmEuZGVsYXksZHVyYXRpb246YS5kdXJhdGlvbixlYXNlOmEuZWFzZSx0aW1lcjpudWxsLHN0YXRlOnpIfSl9ZnVuY3Rpb24gU3YodCxlKXt2YXIgcj16aSh0LGUpO2lmKHIuc3RhdGU+ekgpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiB1YSh0LGUpe3ZhciByPXppKHQsZSk7aWYoci5zdGF0ZT5tNSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiB6aSh0LGUpe3ZhciByPXQuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9cltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIEJ3ZSh0LGUscil7dmFyIG49dC5fX3RyYW5zaXRpb24saTtuW2VdPXIsci50aW1lcj1kNShhLDAsci50aW1lKTtmdW5jdGlvbiBhKGgpe3Iuc3RhdGU9Rkgsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHIuZGVsYXk8PWgmJnMoaC1yLmRlbGF5KX1vKGEsInNjaGVkdWxlIik7ZnVuY3Rpb24gcyhoKXt2YXIgZixkLHAsbTtpZihyLnN0YXRlIT09RkgpcmV0dXJuIHUoKTtmb3IoZiBpbiBuKWlmKG09bltmXSxtLm5hbWU9PT1yLm5hbWUpe2lmKG0uc3RhdGU9PT1tNSlyZXR1cm4ga3Yocyk7bS5zdGF0ZT09PSRIPyhtLnN0YXRlPUV2LG0udGltZXIuc3RvcCgpLG0ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbS5pbmRleCxtLmdyb3VwKSxkZWxldGUgbltmXSk6K2Y8ZSYmKG0uc3RhdGU9RXYsbS50aW1lci5zdG9wKCksbS5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxtLmluZGV4LG0uZ3JvdXApLGRlbGV0ZSBuW2ZdKX1pZihrdihmdW5jdGlvbigpe3Iuc3RhdGU9PT1tNSYmKHIuc3RhdGU9JEgsci50aW1lci5yZXN0YXJ0KGwsci5kZWxheSxyLnRpbWUpLGwoaCkpfSksci5zdGF0ZT1nNSxyLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ZzUpe2ZvcihyLnN0YXRlPW01LGk9bmV3IEFycmF5KHA9ci50d2Vlbi5sZW5ndGgpLGY9MCxkPS0xO2Y8cDsrK2YpKG09ci50d2VlbltmXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytkXT1tKTtpLmxlbmd0aD1kKzF9fW8ocywic3RhcnQiKTtmdW5jdGlvbiBsKGgpe2Zvcih2YXIgZj1oPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxoL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQodSksci5zdGF0ZT15NSwxKSxkPS0xLHA9aS5sZW5ndGg7KytkPHA7KWlbZF0uY2FsbCh0LGYpO3Iuc3RhdGU9PT15NSYmKHIub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSx1KCkpfW8obCwidGljayIpO2Z1bmN0aW9uIHUoKXtyLnN0YXRlPUV2LHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW2VdO2Zvcih2YXIgaCBpbiBuKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259byh1LCJzdG9wIil9dmFyIE93ZSxQd2UsekgsRkgsZzUsbTUsJEgseTUsRXYsRHM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWQSgpO3A1KCk7T3dlPUdBKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFB3ZT1bXSx6SD0wLEZIPTEsZzU9MixtNT0zLCRIPTQseTU9NSxFdj02O28oeHUsImRlZmF1bHQiKTtvKFN2LCJpbml0Iik7byh1YSwic2V0Iik7byh6aSwiZ2V0Iik7byhCd2UsImNyZWF0ZSIpfSk7ZnVuY3Rpb24gQ3YodCxlKXt2YXIgcj10Ll9fdHJhbnNpdGlvbixuLGksYT0hMCxzO2lmKHIpe2U9ZT09bnVsbD9udWxsOmUrIiI7Zm9yKHMgaW4gcil7aWYoKG49cltzXSkubmFtZSE9PWUpe2E9ITE7Y29udGludWV9aT1uLnN0YXRlPmc1JiZuLnN0YXRlPHk1LG4uc3RhdGU9RXYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbc119YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX12YXIgR0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEcygpO28oQ3YsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGxfKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtDdih0aGlzLHQpfSl9dmFyIFZIPU4oKCk9PnsidXNlIHN0cmljdCI7R0goKTtvKGxfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBGd2UodCxlKXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXVhKHRoaXMsdCksYT1pLnR3ZWVuO2lmKGEhPT1yKXtuPXI9YTtmb3IodmFyIHM9MCxsPW4ubGVuZ3RoO3M8bDsrK3MpaWYobltzXS5uYW1lPT09ZSl7bj1uLnNsaWNlKCksbi5zcGxpY2UocywxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiAkd2UodCxlLHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXVhKHRoaXMsdCkscz1hLnR3ZWVuO2lmKHMhPT1uKXtpPShuPXMpLnNsaWNlKCk7Zm9yKHZhciBsPXtuYW1lOmUsdmFsdWU6cn0sdT0wLGg9aS5sZW5ndGg7dTxoOysrdSlpZihpW3VdLm5hbWU9PT1lKXtpW3VdPWw7YnJlYWt9dT09PWgmJmkucHVzaChsKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIGNfKHQsZSl7dmFyIHI9dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49emkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLGE9bi5sZW5ndGgscztpPGE7KytpKWlmKChzPW5baV0pLm5hbWU9PT10KXJldHVybiBzLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKGU9PW51bGw/RndlOiR3ZSkocix0LGUpKX1mdW5jdGlvbiAkMCh0LGUscil7dmFyIG49dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciBpPXVhKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbZV09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gemkoaSxuKS52YWx1ZVtlXX19dmFyIEF2PU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKEZ3ZSwidHdlZW5SZW1vdmUiKTtvKCR3ZSwidHdlZW5GdW5jdGlvbiIpO28oY18sImRlZmF1bHQiKTtvKCQwLCJ0d2VlblZhbHVlIil9KTtmdW5jdGlvbiBfdih0LGUpe3ZhciByO3JldHVybih0eXBlb2YgZT09Im51bWJlciI/S2k6ZSBpbnN0YW5jZW9mIHhsP3ZkOihyPXhsKGUpKT8oZT1yLHZkKTpQMCkodCxlKX12YXIgdV89TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMCgpO0IwKCk7byhfdiwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gendlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBHd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBWd2UodCxlLHIpe3ZhciBuLGk9cisiIixhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBzPT09aT9udWxsOnM9PT1uP2E6YT1lKG49cyxyKX19ZnVuY3Rpb24gVXdlKHQsZSxyKXt2YXIgbixpPXIrIiIsYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIHM9PT1pP251bGw6cz09PW4/YTphPWUobj1zLHIpfX1mdW5jdGlvbiBId2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsPXIodGhpcyksdTtyZXR1cm4gbD09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKHQpOihzPXRoaXMuZ2V0QXR0cmlidXRlKHQpLHU9bCsiIixzPT09dT9udWxsOnM9PT1uJiZ1PT09aT9hOihpPXUsYT1lKG49cyxsKSkpfX1mdW5jdGlvbiBXd2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsPXIodGhpcyksdTtyZXR1cm4gbD09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKToocz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCksdT1sKyIiLHM9PT11P251bGw6cz09PW4mJnU9PT1pP2E6KGk9dSxhPWUobj1zLGwpKSl9fWZ1bmN0aW9uIGhfKHQsZSl7dmFyIHI9c2ModCksbj1yPT09InRyYW5zZm9ybSI/aV86X3Y7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsdHlwZW9mIGU9PSJmdW5jdGlvbiI/KHIubG9jYWw/V3dlOkh3ZSkocixuLCQwKHRoaXMsImF0dHIuIit0LGUpKTplPT1udWxsPyhyLmxvY2FsP0d3ZTp6d2UpKHIpOihyLmxvY2FsP1V3ZTpWd2UpKHIsbixlKSl9dmFyIFVIPU4oKCk9PnsidXNlIHN0cmljdCI7QjAoKTt5bCgpO0F2KCk7dV8oKTtvKHp3ZSwiYXR0clJlbW92ZSIpO28oR3dlLCJhdHRyUmVtb3ZlTlMiKTtvKFZ3ZSwiYXR0ckNvbnN0YW50Iik7byhVd2UsImF0dHJDb25zdGFudE5TIik7byhId2UsImF0dHJGdW5jdGlvbiIpO28oV3dlLCJhdHRyRnVuY3Rpb25OUyIpO28oaF8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHF3ZSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gWXdlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gWHdlKHQsZSl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1uJiYocj0obj1hKSYmWXdlKHQsYSkpLHJ9cmV0dXJuIG8oaSwidHdlZW4iKSxpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gandlKHQsZSl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1uJiYocj0obj1hKSYmcXdlKHQsYSkpLHJ9cmV0dXJuIG8oaSwidHdlZW4iKSxpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gZl8odCxlKXt2YXIgcj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPXNjKHQpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/WHdlOmp3ZSkobixlKSl9dmFyIEhIPU4oKCk9PnsidXNlIHN0cmljdCI7eWwoKTtvKHF3ZSwiYXR0ckludGVycG9sYXRlIik7byhZd2UsImF0dHJJbnRlcnBvbGF0ZU5TIik7byhYd2UsImF0dHJUd2Vlbk5TIik7byhqd2UsImF0dHJUd2VlbiIpO28oZl8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEt3ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe1N2KHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBRd2UodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe1N2KHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gZF8odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9Ld2U6UXdlKShlLHQpKTp6aSh0aGlzLm5vZGUoKSxlKS5kZWxheX12YXIgV0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEcygpO28oS3dlLCJkZWxheUZ1bmN0aW9uIik7byhRd2UsImRlbGF5Q29uc3RhbnQiKTtvKGRfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBad2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt1YSh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSndlKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt1YSh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIHBfKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/WndlOkp3ZSkoZSx0KSk6emkodGhpcy5ub2RlKCksZSkuZHVyYXRpb259dmFyIHFIPU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKFp3ZSwiZHVyYXRpb25GdW5jdGlvbiIpO28oSndlLCJkdXJhdGlvbkNvbnN0YW50Iik7byhwXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZWtlKHQsZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3VhKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBtXyh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZWtlKGUsdCkpOnppKHRoaXMubm9kZSgpLGUpLmVhc2V9dmFyIFlIPU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKGVrZSwiZWFzZUNvbnN0YW50Iik7byhtXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdGtlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3VhKHRoaXMsdCkuZWFzZT1yfX1mdW5jdGlvbiBnXyh0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaCh0a2UodGhpcy5faWQsdCkpfXZhciBYSD1OKCgpPT57InVzZSBzdHJpY3QiO0RzKCk7byh0a2UsImVhc2VWYXJ5aW5nIik7byhnXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24geV8odCl7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PUQwKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBhPWVbaV0scz1hLmxlbmd0aCxsPW5baV09W10sdSxoPTA7aDxzOysraCkodT1hW2hdKSYmdC5jYWxsKHUsdS5fX2RhdGFfXyxoLGEpJiZsLnB1c2godSk7cmV0dXJuIG5ldyBhcyhuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGpIPU4oKCk9PnsidXNlIHN0cmljdCI7eWwoKTtiZCgpO28oeV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHZfKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj10Ll9ncm91cHMsbj1lLmxlbmd0aCxpPXIubGVuZ3RoLGE9TWF0aC5taW4obixpKSxzPW5ldyBBcnJheShuKSxsPTA7bDxhOysrbClmb3IodmFyIHU9ZVtsXSxoPXJbbF0sZj11Lmxlbmd0aCxkPXNbbF09bmV3IEFycmF5KGYpLHAsbT0wO208ZjsrK20pKHA9dVttXXx8aFttXSkmJihkW21dPXApO2Zvcig7bDxuOysrbClzW2xdPWVbbF07cmV0dXJuIG5ldyBhcyhzLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIEtIPU4oKCk9PnsidXNlIHN0cmljdCI7YmQoKTtvKHZfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBya2UodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihlKXt2YXIgcj1lLmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKGU9ZS5zbGljZSgwLHIpKSwhZXx8ZT09PSJzdGFydCJ9KX1mdW5jdGlvbiBua2UodCxlLHIpe3ZhciBuLGksYT1ya2UoZSk/U3Y6dWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9YSh0aGlzLHQpLGw9cy5vbjtsIT09biYmKGk9KG49bCkuY29weSgpKS5vbihlLHIpLHMub249aX19ZnVuY3Rpb24geF8odCxlKXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3ppKHRoaXMubm9kZSgpLHIpLm9uLm9uKHQpOnRoaXMuZWFjaChua2Uocix0LGUpKX12YXIgUUg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEcygpO28ocmtlLCJzdGFydCIpO28obmtlLCJvbkZ1bmN0aW9uIik7byh4XywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaWtlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBiXygpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixpa2UodGhpcy5faWQpKX12YXIgWkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGlrZSwicmVtb3ZlRnVuY3Rpb24iKTtvKGJfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBUXyh0KXt2YXIgZT10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PVNoKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsYT1uZXcgQXJyYXkoaSkscz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYsZCxwPTA7cDx1OysrcCkoZj1sW3BdKSYmKGQ9dC5jYWxsKGYsZi5fX2RhdGFfXyxwLGwpKSYmKCJfX2RhdGFfXyJpbiBmJiYoZC5fX2RhdGFfXz1mLl9fZGF0YV9fKSxoW3BdPWQseHUoaFtwXSxlLHIscCxoLHppKGYscikpKTtyZXR1cm4gbmV3IGFzKGEsdGhpcy5fcGFyZW50cyxlLHIpfXZhciBKSD1OKCgpPT57InVzZSBzdHJpY3QiO3lsKCk7YmQoKTtEcygpO28oVF8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHdfKHQpe3ZhciBlPXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9XzAodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPVtdLHM9W10sbD0wO2w8aTsrK2wpZm9yKHZhciB1PW5bbF0saD11Lmxlbmd0aCxmLGQ9MDtkPGg7KytkKWlmKGY9dVtkXSl7Zm9yKHZhciBwPXQuY2FsbChmLGYuX19kYXRhX18sZCx1KSxtLGc9emkoZixyKSx5PTAsdj1wLmxlbmd0aDt5PHY7Kyt5KShtPXBbeV0pJiZ4dShtLGUscix5LHAsZyk7YS5wdXNoKHApLHMucHVzaChmKX1yZXR1cm4gbmV3IGFzKGEscyxlLHIpfXZhciBlVz1OKCgpPT57InVzZSBzdHJpY3QiO3lsKCk7YmQoKTtEcygpO28od18sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGtfKCl7cmV0dXJuIG5ldyBha2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBha2UsdFc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5bCgpO2FrZT1ndS5wcm90b3R5cGUuY29uc3RydWN0b3I7byhrXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gc2tlKHQsZSl7dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUNoKHRoaXMsdCkscz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxDaCh0aGlzLHQpKTtyZXR1cm4gYT09PXM/bnVsbDphPT09ciYmcz09PW4/aTppPWUocj1hLG49cyl9fWZ1bmN0aW9uIHJXKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIG9rZSh0LGUscil7dmFyIG4saT1yKyIiLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9Q2godGhpcyx0KTtyZXR1cm4gcz09PWk/bnVsbDpzPT09bj9hOmE9ZShuPXMscil9fWZ1bmN0aW9uIGxrZSh0LGUscil7dmFyIG4saSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPUNoKHRoaXMsdCksbD1yKHRoaXMpLHU9bCsiIjtyZXR1cm4gbD09bnVsbCYmKHU9bD0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxDaCh0aGlzLHQpKSkscz09PXU/bnVsbDpzPT09biYmdT09PWk/YTooaT11LGE9ZShuPXMsbCkpfX1mdW5jdGlvbiBja2UodCxlKXt2YXIgcixuLGksYT0ic3R5bGUuIitlLHM9ImVuZC4iK2EsbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT11YSh0aGlzLHQpLGg9dS5vbixmPXUudmFsdWVbYV09PW51bGw/bHx8KGw9clcoZSkpOnZvaWQgMDsoaCE9PXJ8fGkhPT1mKSYmKG49KHI9aCkuY29weSgpKS5vbihzLGk9ZiksdS5vbj1ufX1mdW5jdGlvbiBFXyh0LGUscil7dmFyIG49KHQrPSIiKT09InRyYW5zZm9ybSI/bl86X3Y7cmV0dXJuIGU9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKHQsc2tlKHQsbikpLm9uKCJlbmQuc3R5bGUuIit0LHJXKHQpKTp0eXBlb2YgZT09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4odCxsa2UodCxuLCQwKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goY2tlKHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxva2UodCxuLGUpLHIpLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfXZhciBuVz1OKCgpPT57InVzZSBzdHJpY3QiO0IwKCk7eWwoKTtEcygpO0F2KCk7dV8oKTtvKHNrZSwic3R5bGVOdWxsIik7byhyVywic3R5bGVSZW1vdmUiKTtvKG9rZSwic3R5bGVDb25zdGFudCIpO28obGtlLCJzdHlsZUZ1bmN0aW9uIik7byhja2UsInN0eWxlTWF5YmVSZW1vdmUiKTtvKEVfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB1a2UodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIGhrZSh0LGUscil7dmFyIG4saTtmdW5jdGlvbiBhKCl7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMhPT1pJiYobj0oaT1zKSYmdWtlKHQscyxyKSksbn1yZXR1cm4gbyhhLCJ0d2VlbiIpLGEuX3ZhbHVlPWUsYX1mdW5jdGlvbiBTXyh0LGUscil7dmFyIG49InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixoa2UodCxlLHI/PyIiKSl9dmFyIGlXPU4oKCk9PnsidXNlIHN0cmljdCI7byh1a2UsInN0eWxlSW50ZXJwb2xhdGUiKTtvKGhrZSwic3R5bGVUd2VlbiIpO28oU18sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGZrZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIGRrZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9ZT8/IiJ9fWZ1bmN0aW9uIENfKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgdD09ImZ1bmN0aW9uIj9ka2UoJDAodGhpcywidGV4dCIsdCkpOmZrZSh0PT1udWxsPyIiOnQrIiIpKX12YXIgYVc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdigpO28oZmtlLCJ0ZXh0Q29uc3RhbnQiKTtvKGRrZSwidGV4dEZ1bmN0aW9uIik7byhDXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcGtlKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBta2UodCl7dmFyIGUscjtmdW5jdGlvbiBuKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYoZT0ocj1pKSYmcGtlKGkpKSxlfXJldHVybiBvKG4sInR3ZWVuIiksbi5fdmFsdWU9dCxufWZ1bmN0aW9uIEFfKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxta2UodCkpfXZhciBzVz1OKCgpPT57InVzZSBzdHJpY3QiO28ocGtlLCJ0ZXh0SW50ZXJwb2xhdGUiKTtvKG1rZSwidGV4dFR3ZWVuIik7byhBXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gX18oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLHI9djUoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraClpZih1PXNbaF0pe3ZhciBmPXppKHUsZSk7eHUodSx0LHIsaCxzLHt0aW1lOmYudGltZStmLmRlbGF5K2YuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlfSl9cmV0dXJuIG5ldyBhcyhuLHRoaXMuX3BhcmVudHMsdCxyKX12YXIgb1c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZCgpO0RzKCk7byhfXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRF8oKXt2YXIgdCxlLHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEscyl7dmFyIGw9e3ZhbHVlOnN9LHU9e3ZhbHVlOm8oZnVuY3Rpb24oKXstLWk9PT0wJiZhKCl9LCJ2YWx1ZSIpfTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgaD11YSh0aGlzLG4pLGY9aC5vbjtmIT09dCYmKGU9KHQ9ZikuY29weSgpLGUuXy5jYW5jZWwucHVzaChsKSxlLl8uaW50ZXJydXB0LnB1c2gobCksZS5fLmVuZC5wdXNoKHUpKSxoLm9uPWV9KSxpPT09MCYmYSgpfSl9dmFyIGxXPU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKERfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBhcyh0LGUscixuKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gY1codCl7cmV0dXJuIGd1KCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiB2NSgpe3JldHVybisrZ2tlfXZhciBna2UsYnUsYmQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5bCgpO1VIKCk7SEgoKTtXSCgpO3FIKCk7WUgoKTtYSCgpO2pIKCk7S0goKTtRSCgpO1pIKCk7SkgoKTtlVygpO3RXKCk7blcoKTtpVygpO2FXKCk7c1coKTtvVygpO0F2KCk7bFcoKTtna2U9MDtvKGFzLCJUcmFuc2l0aW9uIik7byhjVywidHJhbnNpdGlvbiIpO28odjUsIm5ld0lkIik7YnU9Z3UucHJvdG90eXBlO2FzLnByb3RvdHlwZT1jVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFzLHNlbGVjdDpUXyxzZWxlY3RBbGw6d18sc2VsZWN0Q2hpbGQ6YnUuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46YnUuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOnlfLG1lcmdlOnZfLHNlbGVjdGlvbjprXyx0cmFuc2l0aW9uOl9fLGNhbGw6YnUuY2FsbCxub2RlczpidS5ub2Rlcyxub2RlOmJ1Lm5vZGUsc2l6ZTpidS5zaXplLGVtcHR5OmJ1LmVtcHR5LGVhY2g6YnUuZWFjaCxvbjp4XyxhdHRyOmhfLGF0dHJUd2VlbjpmXyxzdHlsZTpFXyxzdHlsZVR3ZWVuOlNfLHRleHQ6Q18sdGV4dFR3ZWVuOkFfLHJlbW92ZTpiXyx0d2VlbjpjXyxkZWxheTpkXyxkdXJhdGlvbjpwXyxlYXNlOm1fLGVhc2VWYXJ5aW5nOmdfLGVuZDpEXyxbU3ltYm9sLml0ZXJhdG9yXTpidVtTeW1ib2wuaXRlcmF0b3JdfX0pO2Z1bmN0aW9uIHg1KHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfXZhciB1Vz1OKCgpPT57InVzZSBzdHJpY3QiO28oeDUsImN1YmljSW5PdXQiKX0pO3ZhciBMXz1OKCgpPT57InVzZSBzdHJpY3QiO3VXKCl9KTtmdW5jdGlvbiB2a2UodCxlKXtmb3IodmFyIHI7IShyPXQuX190cmFuc2l0aW9uKXx8IShyPXJbZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gcn1mdW5jdGlvbiBSXyh0KXt2YXIgZSxyO3QgaW5zdGFuY2VvZiBhcz8oZT10Ll9pZCx0PXQuX25hbWUpOihlPXY1KCksKHI9eWtlKS50aW1lPXd2KCksdD10PT1udWxsP251bGw6dCsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraCkodT1zW2hdKSYmeHUodSx0LGUsaCxzLHJ8fHZrZSh1LGUpKTtyZXR1cm4gbmV3IGFzKG4sdGhpcy5fcGFyZW50cyx0LGUpfXZhciB5a2UsaFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZCgpO0RzKCk7TF8oKTtwNSgpO3lrZT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6eDV9O28odmtlLCJpbmhlcml0Iik7byhSXywiZGVmYXVsdCIpfSk7dmFyIGZXPU4oKCk9PnsidXNlIHN0cmljdCI7eWwoKTtWSCgpO2hXKCk7Z3UucHJvdG90eXBlLmludGVycnVwdD1sXztndS5wcm90b3R5cGUudHJhbnNpdGlvbj1SX30pO3ZhciBiNT1OKCgpPT57InVzZSBzdHJpY3QiO2ZXKCl9KTt2YXIgZFc9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBwVz1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIG1XPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBnVyh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHhrZSh0KXtyZXR1cm5bZ1codFswXSksZ1codFsxXSldfWZ1bmN0aW9uIE5fKHQpe3JldHVybnt0eXBlOnR9fXZhciBfZ3QsRGd0LExndCxSZ3QsTmd0LE1ndCx5Vz1OKCgpPT57InVzZSBzdHJpY3QiO2I1KCk7ZFcoKTtwVygpO21XKCk7KHthYnM6X2d0LG1heDpEZ3QsbWluOkxndH09TWF0aCk7byhnVywibnVtYmVyMSIpO28oeGtlLCJudW1iZXIyIik7Umd0PXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoTl8pLGlucHV0Om8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09bnVsbD9udWxsOltbK3RbMF0sZVswXVsxXV0sWyt0WzFdLGVbMV1bMV1dXX0sImlucHV0Iiksb3V0cHV0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfSwib3V0cHV0Iil9LE5ndD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKE5fKSxpbnB1dDpvKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PW51bGw/bnVsbDpbW2VbMF1bMF0sK3RbMF1dLFtlWzFdWzBdLCt0WzFdXV19LCJpbnB1dCIpLG91dHB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX0sIm91dHB1dCIpfSxNZ3Q9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKE5fKSxpbnB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP251bGw6eGtlKHQpfSwiaW5wdXQiKSxvdXRwdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdH0sIm91dHB1dCIpfTtvKE5fLCJ0eXBlIil9KTt2YXIgdlc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5VygpfSk7ZnVuY3Rpb24geFcodCl7dGhpcy5fKz10WzBdO2ZvcihsZXQgZT0xLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLl8rPWFyZ3VtZW50c1tlXSt0W2VdfWZ1bmN0aW9uIFRrZSh0KXtsZXQgZT1NYXRoLmZsb29yKHQpO2lmKCEoZT49MCkpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt0fWApO2lmKGU+MTUpcmV0dXJuIHhXO2xldCByPTEwKiplO3JldHVybiBmdW5jdGlvbihuKXt0aGlzLl8rPW5bMF07Zm9yKGxldCBpPTEsYT1uLmxlbmd0aDtpPGE7KytpKXRoaXMuXys9TWF0aC5yb3VuZChhcmd1bWVudHNbaV0qcikvcituW2ldfX1mdW5jdGlvbiBiVygpe3JldHVybiBuZXcgd2R9dmFyIE1fLElfLFRkLGJrZSx3ZCxUVz1OKCgpPT57InVzZSBzdHJpY3QiO01fPU1hdGguUEksSV89MipNXyxUZD0xZS02LGJrZT1JXy1UZDtvKHhXLCJhcHBlbmQiKTtvKFRrZSwiYXBwZW5kUm91bmQiKTt3ZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoIil9Y29uc3RydWN0b3IoZSl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPWU9PW51bGw/eFc6VGtlKGUpfW1vdmVUbyhlLHIpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rZX0sJHt0aGlzLl95MD10aGlzLl95MT0rcn1gfWNsb3NlUGF0aCgpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGUscil7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPStlfSwke3RoaXMuX3kxPStyfWB9cXVhZHJhdGljQ3VydmVUbyhlLHIsbixpKXt0aGlzLl9hcHBlbmRgUSR7K2V9LCR7K3J9LCR7dGhpcy5feDE9K259LCR7dGhpcy5feTE9K2l9YH1iZXppZXJDdXJ2ZVRvKGUscixuLGksYSxzKXt0aGlzLl9hcHBlbmRgQyR7K2V9LCR7K3J9LCR7K259LCR7K2l9LCR7dGhpcy5feDE9K2F9LCR7dGhpcy5feTE9K3N9YH1hcmNUbyhlLHIsbixpLGEpe2lmKGU9K2Uscj0rcixuPStuLGk9K2ksYT0rYSxhPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7YX1gKTtsZXQgcz10aGlzLl94MSxsPXRoaXMuX3kxLHU9bi1lLGg9aS1yLGY9cy1lLGQ9bC1yLHA9ZipmK2QqZDtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9cn1gO2Vsc2UgaWYocD5UZClpZighKE1hdGguYWJzKGQqdS1oKmYpPlRkKXx8IWEpdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9cn1gO2Vsc2V7bGV0IG09bi1zLGc9aS1sLHk9dSp1K2gqaCx2PW0qbStnKmcseD1NYXRoLnNxcnQoeSksYj1NYXRoLnNxcnQocCksVD1hKk1hdGgudGFuKChNXy1NYXRoLmFjb3MoKHkrcC12KS8oMip4KmIpKSkvMiksUz1UL2Isdz1UL3g7TWF0aC5hYnMoUy0xKT5UZCYmdGhpcy5fYXBwZW5kYEwke2UrUypmfSwke3IrUypkfWAsdGhpcy5fYXBwZW5kYEEke2F9LCR7YX0sMCwwLCR7KyhkKm0+ZipnKX0sJHt0aGlzLl94MT1lK3cqdX0sJHt0aGlzLl95MT1yK3cqaH1gfX1hcmMoZSxyLG4saSxhLHMpe2lmKGU9K2Uscj0rcixuPStuLHM9ISFzLG48MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtufWApO2xldCBsPW4qTWF0aC5jb3MoaSksdT1uKk1hdGguc2luKGkpLGg9ZStsLGY9cit1LGQ9MV5zLHA9cz9pLWE6YS1pO3RoaXMuX3gxPT09bnVsbD90aGlzLl9hcHBlbmRgTSR7aH0sJHtmfWA6KE1hdGguYWJzKHRoaXMuX3gxLWgpPlRkfHxNYXRoLmFicyh0aGlzLl95MS1mKT5UZCkmJnRoaXMuX2FwcGVuZGBMJHtofSwke2Z9YCxuJiYocDwwJiYocD1wJUlfK0lfKSxwPmJrZT90aGlzLl9hcHBlbmRgQSR7bn0sJHtufSwwLDEsJHtkfSwke2UtbH0sJHtyLXV9QSR7bn0sJHtufSwwLDEsJHtkfSwke3RoaXMuX3gxPWh9LCR7dGhpcy5feTE9Zn1gOnA+VGQmJnRoaXMuX2FwcGVuZGBBJHtufSwke259LDAsJHsrKHA+PU1fKX0sJHtkfSwke3RoaXMuX3gxPWUrbipNYXRoLmNvcyhhKX0sJHt0aGlzLl95MT1yK24qTWF0aC5zaW4oYSl9YCl9cmVjdChlLHIsbixpKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2V9LCR7dGhpcy5feTA9dGhpcy5feTE9K3J9aCR7bj0rbn12JHsraX1oJHstbn1aYH10b1N0cmluZygpe3JldHVybiB0aGlzLl99fTtvKGJXLCJwYXRoIik7YlcucHJvdG90eXBlPXdkLnByb3RvdHlwZX0pO3ZhciBPXz1OKCgpPT57InVzZSBzdHJpY3QiO1RXKCl9KTt2YXIgd1c9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBrVz1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEVXPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgU1c9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBDVz1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEFXPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgX1c9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIFBfKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBrZCh0LGUpe2lmKChyPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPXQuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrdC5zbGljZShyKzEpXX12YXIgRHY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFBfLCJkZWZhdWx0Iik7byhrZCwiZm9ybWF0RGVjaW1hbFBhcnRzIil9KTtmdW5jdGlvbiBibCh0KXtyZXR1cm4gdD1rZChNYXRoLmFicyh0KSksdD90WzFdOk5hTn12YXIgTHY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEdigpO28oYmwsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEJfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLGE9W10scz0wLGw9dFswXSx1PTA7aT4wJiZsPjAmJih1K2wrMT5uJiYobD1NYXRoLm1heCgxLG4tdSkpLGEucHVzaChyLnN1YnN0cmluZyhpLT1sLGkrbCkpLCEoKHUrPWwrMSk+bikpOylsPXRbcz0ocysxKSV0Lmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oZSl9fXZhciBEVz1OKCgpPT57InVzZSBzdHJpY3QiO28oQl8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEZfKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKHIpe3JldHVybiB0WytyXX0pfX12YXIgTFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEZfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBMaCh0KXtpZighKGU9d2tlLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7cmV0dXJuIG5ldyBUNSh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBUNSh0KXt0aGlzLmZpbGw9dC5maWxsPT09dm9pZCAwPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj10LmFsaWduPT09dm9pZCAwPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj10LnNpZ249PT12b2lkIDA/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD10LnN5bWJvbD09PXZvaWQgMD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD10LndpZHRoPT09dm9pZCAwP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dC50eXBlPT09dm9pZCAwPyIiOnQudHlwZSsiIn12YXIgd2tlLCRfPU4oKCk9PnsidXNlIHN0cmljdCI7d2tlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO28oTGgsImZvcm1hdFNwZWNpZmllciIpO0xoLnByb3RvdHlwZT1UNS5wcm90b3R5cGU7byhUNSwiRm9ybWF0U3BlY2lmaWVyIik7VDUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX19KTtmdW5jdGlvbiB6Xyh0KXtlOmZvcih2YXIgZT10Lmxlbmd0aCxyPTEsbj0tMSxpO3I8ZTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoISt0W3JdKWJyZWFrIGU7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP3Quc2xpY2UoMCxuKSt0LnNsaWNlKGkrMSk6dH12YXIgUlc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHpfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBWXyh0LGUpe3ZhciByPWtkKHQsZSk7aWYoIXIpcmV0dXJuIHQrIiI7dmFyIG49clswXSxpPXJbMV0sYT1pLShHXz1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEscz1uLmxlbmd0aDtyZXR1cm4gYT09PXM/bjphPnM/bituZXcgQXJyYXkoYS1zKzEpLmpvaW4oIjAiKTphPjA/bi5zbGljZSgwLGEpKyIuIituLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK2tkKHQsTWF0aC5tYXgoMCxlK2EtMSkpWzBdfXZhciBHXyxVXz1OKCgpPT57InVzZSBzdHJpY3QiO0R2KCk7byhWXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdzUodCxlKXt2YXIgcj1rZCh0LGUpO2lmKCFyKXJldHVybiB0KyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBOVz1OKCgpPT57InVzZSBzdHJpY3QiO0R2KCk7byh3NSwiZGVmYXVsdCIpfSk7dmFyIEhfLE1XPU4oKCk9PnsidXNlIHN0cmljdCI7RHYoKTtVXygpO05XKCk7SF89eyIlIjpvKCh0LGUpPT4odCoxMDApLnRvRml4ZWQoZSksIiUiKSxiOm8odD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygyKSwiYiIpLGM6byh0PT50KyIiLCJjIiksZDpQXyxlOm8oKHQsZSk9PnQudG9FeHBvbmVudGlhbChlKSwiZSIpLGY6bygodCxlKT0+dC50b0ZpeGVkKGUpLCJmIiksZzpvKCh0LGUpPT50LnRvUHJlY2lzaW9uKGUpLCJnIiksbzpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoOCksIm8iKSxwOm8oKHQsZSk9Pnc1KHQqMTAwLGUpLCJwIikscjp3NSxzOlZfLFg6byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLCJYIikseDpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLCJ4Iil9fSk7ZnVuY3Rpb24gazUodCl7cmV0dXJuIHR9dmFyIElXPU4oKCk9PnsidXNlIHN0cmljdCI7byhrNSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gV18odCl7dmFyIGU9dC5ncm91cGluZz09PXZvaWQgMHx8dC50aG91c2FuZHM9PT12b2lkIDA/azU6Ql8oT1cuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksdC50aG91c2FuZHMrIiIpLHI9dC5jdXJyZW5jeT09PXZvaWQgMD8iIjp0LmN1cnJlbmN5WzBdKyIiLG49dC5jdXJyZW5jeT09PXZvaWQgMD8iIjp0LmN1cnJlbmN5WzFdKyIiLGk9dC5kZWNpbWFsPT09dm9pZCAwPyIuIjp0LmRlY2ltYWwrIiIsYT10Lm51bWVyYWxzPT09dm9pZCAwP2s1OkZfKE9XLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxzPXQucGVyY2VudD09PXZvaWQgMD8iJSI6dC5wZXJjZW50KyIiLGw9dC5taW51cz09PXZvaWQgMD8iXHUyMjEyIjp0Lm1pbnVzKyIiLHU9dC5uYW49PT12b2lkIDA/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gaChkKXtkPUxoKGQpO3ZhciBwPWQuZmlsbCxtPWQuYWxpZ24sZz1kLnNpZ24seT1kLnN5bWJvbCx2PWQuemVybyx4PWQud2lkdGgsYj1kLmNvbW1hLFQ9ZC5wcmVjaXNpb24sUz1kLnRyaW0sdz1kLnR5cGU7dz09PSJuIj8oYj0hMCx3PSJnIik6SF9bd118fChUPT09dm9pZCAwJiYoVD0xMiksUz0hMCx3PSJnIiksKHZ8fHA9PT0iMCImJm09PT0iPSIpJiYodj0hMCxwPSIwIixtPSI9Iik7dmFyIEU9eT09PSIkIj9yOnk9PT0iIyImJi9bYm94WF0vLnRlc3Qodyk/IjAiK3cudG9Mb3dlckNhc2UoKToiIixfPXk9PT0iJCI/bjovWyVwXS8udGVzdCh3KT9zOiIiLEM9SF9bd10sRD0vW2RlZmdwcnMlXS8udGVzdCh3KTtUPVQ9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KHcpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsVCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsVCkpO2Z1bmN0aW9uIE8oUil7dmFyIGs9RSxMPV8sQSxJLE07aWYodz09PSJjIilMPUMoUikrTCxSPSIiO2Vsc2V7Uj0rUjt2YXIgUD1SPDB8fDEvUjwwO2lmKFI9aXNOYU4oUik/dTpDKE1hdGguYWJzKFIpLFQpLFMmJihSPXpfKFIpKSxQJiYrUj09MCYmZyE9PSIrIiYmKFA9ITEpLGs9KFA/Zz09PSIoIj9nOmw6Zz09PSItInx8Zz09PSIoIj8iIjpnKStrLEw9KHc9PT0icyI/UFdbOCtHXy8zXToiIikrTCsoUCYmZz09PSIoIj8iKSI6IiIpLEQpe2ZvcihBPS0xLEk9Ui5sZW5ndGg7KytBPEk7KWlmKE09Ui5jaGFyQ29kZUF0KEEpLDQ4Pk18fE0+NTcpe0w9KE09PT00Nj9pK1Iuc2xpY2UoQSsxKTpSLnNsaWNlKEEpKStMLFI9Ui5zbGljZSgwLEEpO2JyZWFrfX19YiYmIXYmJihSPWUoUiwxLzApKTt2YXIgQj1rLmxlbmd0aCtSLmxlbmd0aCtMLmxlbmd0aCxGPUI8eD9uZXcgQXJyYXkoeC1CKzEpLmpvaW4ocCk6IiI7c3dpdGNoKGImJnYmJihSPWUoRitSLEYubGVuZ3RoP3gtTC5sZW5ndGg6MS8wKSxGPSIiKSxtKXtjYXNlIjwiOlI9aytSK0wrRjticmVhaztjYXNlIj0iOlI9aytGK1IrTDticmVhaztjYXNlIl4iOlI9Ri5zbGljZSgwLEI9Ri5sZW5ndGg+PjEpK2srUitMK0Yuc2xpY2UoQik7YnJlYWs7ZGVmYXVsdDpSPUYraytSK0w7YnJlYWt9cmV0dXJuIGEoUil9cmV0dXJuIG8oTywiZm9ybWF0IiksTy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBkKyIifSxPfW8oaCwibmV3Rm9ybWF0Iik7ZnVuY3Rpb24gZihkLHApe3ZhciBtPWgoKGQ9TGgoZCksZC50eXBlPSJmIixkKSksZz1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoYmwocCkvMykpKSozLHk9TWF0aC5wb3coMTAsLWcpLHY9UFdbOCtnLzNdO3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4gbSh5KngpK3Z9fXJldHVybiBvKGYsImZvcm1hdFByZWZpeCIpLHtmb3JtYXQ6aCxmb3JtYXRQcmVmaXg6Zn19dmFyIE9XLFBXLEJXPU4oKCk9PnsidXNlIHN0cmljdCI7THYoKTtEVygpO0xXKCk7JF8oKTtSVygpO01XKCk7VV8oKTtJVygpO09XPUFycmF5LnByb3RvdHlwZS5tYXAsUFc9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceEI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07byhXXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcV8odCl7cmV0dXJuIEU1PVdfKHQpLGNjPUU1LmZvcm1hdCxTNT1FNS5mb3JtYXRQcmVmaXgsRTV9dmFyIEU1LGNjLFM1LEZXPU4oKCk9PnsidXNlIHN0cmljdCI7QlcoKTtxXyh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtvKHFfLCJkZWZhdWx0TG9jYWxlIil9KTtmdW5jdGlvbiBDNSh0KXtyZXR1cm4gTWF0aC5tYXgoMCwtYmwoTWF0aC5hYnModCkpKX12YXIgJFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMdigpO28oQzUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEE1KHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGJsKGUpLzMpKSkqMy1ibChNYXRoLmFicyh0KSkpfXZhciB6Vz1OKCgpPT57InVzZSBzdHJpY3QiO0x2KCk7byhBNSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gXzUodCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxibChlKS1ibCh0KSkrMX12YXIgR1c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMdigpO28oXzUsImRlZmF1bHQiKX0pO3ZhciBZXz1OKCgpPT57InVzZSBzdHJpY3QiO0ZXKCk7JF8oKTskVygpO3pXKCk7R1coKX0pO3ZhciBWVz1OKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24ga2tlKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pZT0xO2Vsc2UgZm9yKDstLW4+PTA7KWUrPXJbbl0udmFsdWU7dC52YWx1ZT1lfWZ1bmN0aW9uIFhfKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGtrZSl9dmFyIFVXPU4oKCk9PnsidXNlIHN0cmljdCI7byhra2UsImNvdW50Iik7byhYXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gal8odCxlKXtsZXQgcj0tMTtmb3IobGV0IG4gb2YgdGhpcyl0LmNhbGwoZSxuLCsrcix0aGlzKTtyZXR1cm4gdGhpc312YXIgSFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLXyh0LGUpe2Zvcih2YXIgcj10aGlzLG49W3JdLGksYSxzPS0xO3I9bi5wb3AoKTspaWYodC5jYWxsKGUsciwrK3MsdGhpcyksaT1yLmNoaWxkcmVuKWZvcihhPWkubGVuZ3RoLTE7YT49MDstLWEpbi5wdXNoKGlbYV0pO3JldHVybiB0aGlzfXZhciBXVz1OKCgpPT57InVzZSBzdHJpY3QiO28oS18sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFFfKHQsZSl7Zm9yKHZhciByPXRoaXMsbj1bcl0saT1bXSxhLHMsbCx1PS0xO3I9bi5wb3AoKTspaWYoaS5wdXNoKHIpLGE9ci5jaGlsZHJlbilmb3Iocz0wLGw9YS5sZW5ndGg7czxsOysrcyluLnB1c2goYVtzXSk7Zm9yKDtyPWkucG9wKCk7KXQuY2FsbChlLHIsKyt1LHRoaXMpO3JldHVybiB0aGlzfXZhciBxVz1OKCgpPT57InVzZSBzdHJpY3QiO28oUV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpfKHQsZSl7bGV0IHI9LTE7Zm9yKGxldCBuIG9mIHRoaXMpaWYodC5jYWxsKGUsbiwrK3IsdGhpcykpcmV0dXJuIG59dmFyIFlXPU4oKCk9PnsidXNlIHN0cmljdCI7byhaXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSl8odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0rdChlLmRhdGEpfHwwLG49ZS5jaGlsZHJlbixpPW4mJm4ubGVuZ3RoOy0taT49MDspcis9bltpXS52YWx1ZTtlLnZhbHVlPXJ9KX12YXIgWFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEpfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBlRCh0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pfXZhciBqVz1OKCgpPT57InVzZSBzdHJpY3QiO28oZUQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHREKHQpe2Zvcih2YXIgZT10aGlzLHI9RWtlKGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRWtlKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9dC5hbmNlc3RvcnMoKSxuPWUuYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PXIucG9wKCksZT1uLnBvcCgpO3Q9PT1lOylpPXQsdD1yLnBvcCgpLGU9bi5wb3AoKTtyZXR1cm4gaX12YXIgS1c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHRELCJkZWZhdWx0Iik7byhFa2UsImxlYXN0Q29tbW9uQW5jZXN0b3IiKX0pO2Z1bmN0aW9uIHJEKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfXZhciBRVz1OKCgpPT57InVzZSBzdHJpY3QiO28ockQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG5EKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9dmFyIFpXPU4oKCk9PnsidXNlIHN0cmljdCI7byhuRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaUQoKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pLHR9dmFyIEpXPU4oKCk9PnsidXNlIHN0cmljdCI7byhpRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gYUQoKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLGV9dmFyIGVxPU4oKCk9PnsidXNlIHN0cmljdCI7byhhRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24qc0QoKXt2YXIgdD10aGlzLGUscj1bdF0sbixpLGE7ZG8gZm9yKGU9ci5yZXZlcnNlKCkscj1bXTt0PWUucG9wKCk7KWlmKHlpZWxkIHQsbj10LmNoaWxkcmVuKWZvcihpPTAsYT1uLmxlbmd0aDtpPGE7KytpKXIucHVzaChuW2ldKTt3aGlsZShyLmxlbmd0aCl9dmFyIHRxPU4oKCk9PnsidXNlIHN0cmljdCI7byhzRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gejAodCxlKXt0IGluc3RhbmNlb2YgTWFwPyh0PVt2b2lkIDAsdF0sZT09PXZvaWQgMCYmKGU9QWtlKSk6ZT09PXZvaWQgMCYmKGU9Q2tlKTtmb3IodmFyIHI9bmV3IFJ2KHQpLG4saT1bcl0sYSxzLGwsdTtuPWkucG9wKCk7KWlmKChzPWUobi5kYXRhKSkmJih1PShzPUFycmF5LmZyb20ocykpLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49cyxsPXUtMTtsPj0wOy0tbClpLnB1c2goYT1zW2xdPW5ldyBSdihzW2xdKSksYS5wYXJlbnQ9bixhLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKERrZSl9ZnVuY3Rpb24gU2tlKCl7cmV0dXJuIHowKHRoaXMpLmVhY2hCZWZvcmUoX2tlKX1mdW5jdGlvbiBDa2UodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gQWtlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMV06bnVsbH1mdW5jdGlvbiBfa2UodCl7dC5kYXRhLnZhbHVlIT09dm9pZCAwJiYodC52YWx1ZT10LmRhdGEudmFsdWUpLHQuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBEa2UodCl7dmFyIGU9MDtkbyB0LmhlaWdodD1lO3doaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBSdih0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH12YXIgcnE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVVygpO0hXKCk7V1coKTtxVygpO1lXKCk7WFcoKTtqVygpO0tXKCk7UVcoKTtaVygpO0pXKCk7ZXEoKTt0cSgpO28oejAsImhpZXJhcmNoeSIpO28oU2tlLCJub2RlX2NvcHkiKTtvKENrZSwib2JqZWN0Q2hpbGRyZW4iKTtvKEFrZSwibWFwQ2hpbGRyZW4iKTtvKF9rZSwiY29weURhdGEiKTtvKERrZSwiY29tcHV0ZUhlaWdodCIpO28oUnYsIk5vZGUiKTtSdi5wcm90b3R5cGU9ejAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSdixjb3VudDpYXyxlYWNoOmpfLGVhY2hBZnRlcjpRXyxlYWNoQmVmb3JlOktfLGZpbmQ6Wl8sc3VtOkpfLHNvcnQ6ZUQscGF0aDp0RCxhbmNlc3RvcnM6ckQsZGVzY2VuZGFudHM6bkQsbGVhdmVzOmlELGxpbmtzOmFELGNvcHk6U2tlLFtTeW1ib2wuaXRlcmF0b3JdOnNEfX0pO2Z1bmN0aW9uIG5xKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH12YXIgaXE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG5xLCJyZXF1aXJlZCIpfSk7ZnVuY3Rpb24gRzAoKXtyZXR1cm4gMH1mdW5jdGlvbiBFZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIGFxPU4oKCk9PnsidXNlIHN0cmljdCI7byhHMCwiY29uc3RhbnRaZXJvIik7byhFZCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gb0QodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfXZhciBzcT1OKCgpPT57InVzZSBzdHJpY3QiO28ob0QsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGxEKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQuY2hpbGRyZW4scyxsPS0xLHU9YS5sZW5ndGgsaD10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrbDx1OylzPWFbbF0scy55MD1yLHMueTE9aSxzLngwPWUscy54MT1lKz1zLnZhbHVlKmh9dmFyIG9xPU4oKCk9PnsidXNlIHN0cmljdCI7byhsRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY0QodCxlLHIsbixpKXtmb3IodmFyIGE9dC5jaGlsZHJlbixzLGw9LTEsdT1hLmxlbmd0aCxoPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytsPHU7KXM9YVtsXSxzLngwPWUscy54MT1uLHMueTA9cixzLnkxPXIrPXMudmFsdWUqaH12YXIgbHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGNELCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBSa2UodCxlLHIsbixpLGEpe2Zvcih2YXIgcz1bXSxsPWUuY2hpbGRyZW4sdSxoLGY9MCxkPTAscD1sLmxlbmd0aCxtLGcseT1lLnZhbHVlLHYseCxiLFQsUyx3LEU7ZjxwOyl7bT1pLXIsZz1hLW47ZG8gdj1sW2QrK10udmFsdWU7d2hpbGUoIXYmJmQ8cCk7Zm9yKHg9Yj12LHc9TWF0aC5tYXgoZy9tLG0vZykvKHkqdCksRT12KnYqdyxTPU1hdGgubWF4KGIvRSxFL3gpO2Q8cDsrK2Qpe2lmKHYrPWg9bFtkXS52YWx1ZSxoPHgmJih4PWgpLGg+YiYmKGI9aCksRT12KnYqdyxUPU1hdGgubWF4KGIvRSxFL3gpLFQ+Uyl7di09aDticmVha31TPVR9cy5wdXNoKHU9e3ZhbHVlOnYsZGljZTptPGcsY2hpbGRyZW46bC5zbGljZShmLGQpfSksdS5kaWNlP2xEKHUscixuLGkseT9uKz1nKnYveTphKTpjRCh1LHIsbix5P3IrPW0qdi95OmksYSkseS09dixmPWR9cmV0dXJuIHN9dmFyIExrZSxjcSx1cT1OKCgpPT57InVzZSBzdHJpY3QiO29xKCk7bHEoKTtMa2U9KDErTWF0aC5zcXJ0KDUpKS8yO28oUmtlLCJzcXVhcmlmeVJhdGlvIik7Y3E9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobixpLGEscyxsKXtSa2UoZSxuLGksYSxzLGwpfXJldHVybiBvKHIsInNxdWFyaWZ5Iiksci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxyfSwiY3VzdG9tIikoTGtlKX0pO2Z1bmN0aW9uIEQ1KCl7dmFyIHQ9Y3EsZT0hMSxyPTEsbj0xLGk9WzBdLGE9RzAscz1HMCxsPUcwLHU9RzAsaD1HMDtmdW5jdGlvbiBmKHApe3JldHVybiBwLngwPXAueTA9MCxwLngxPXIscC55MT1uLHAuZWFjaEJlZm9yZShkKSxpPVswXSxlJiZwLmVhY2hCZWZvcmUob0QpLHB9byhmLCJ0cmVlbWFwIik7ZnVuY3Rpb24gZChwKXt2YXIgbT1pW3AuZGVwdGhdLGc9cC54MCttLHk9cC55MCttLHY9cC54MS1tLHg9cC55MS1tO3Y8ZyYmKGc9dj0oZyt2KS8yKSx4PHkmJih5PXg9KHkreCkvMikscC54MD1nLHAueTA9eSxwLngxPXYscC55MT14LHAuY2hpbGRyZW4mJihtPWlbcC5kZXB0aCsxXT1hKHApLzIsZys9aChwKS1tLHkrPXMocCktbSx2LT1sKHApLW0seC09dShwKS1tLHY8ZyYmKGc9dj0oZyt2KS8yKSx4PHkmJih5PXg9KHkreCkvMiksdChwLGcseSx2LHgpKX1yZXR1cm4gbyhkLCJwb3NpdGlvbk5vZGUiKSxmLnJvdW5kPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhcCxmKTplfSxmLnNpemU9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3BbMF0sbj0rcFsxXSxmKTpbcixuXX0sZi50aWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW5xKHApLGYpOnR9LGYucGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9mLnBhZGRpbmdJbm5lcihwKS5wYWRkaW5nT3V0ZXIocCk6Zi5wYWRkaW5nSW5uZXIoKX0sZi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6YX0sZi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zi5wYWRkaW5nVG9wKHApLnBhZGRpbmdSaWdodChwKS5wYWRkaW5nQm90dG9tKHApLnBhZGRpbmdMZWZ0KHApOmYucGFkZGluZ1RvcCgpfSxmLnBhZGRpbmdUb3A9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6c30sZi5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6bH0sZi5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXR5cGVvZiBwPT0iZnVuY3Rpb24iP3A6RWQoK3ApLGYpOnV9LGYucGFkZGluZ0xlZnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6aH0sZn12YXIgaHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzcSgpO3VxKCk7aXEoKTthcSgpO28oRDUsImRlZmF1bHQiKX0pO3ZhciBmcT1OKCgpPT57InVzZSBzdHJpY3QiO3JxKCk7aHEoKX0pO3ZhciBkcT1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIHBxPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBSaCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KTticmVha31yZXR1cm4gdGhpc312YXIgTnY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFJoLCJpbml0UmFuZ2UiKX0pO2Z1bmN0aW9uIEpzKCl7dmFyIHQ9bmV3IEMwLGU9W10scj1bXSxuPXVEO2Z1bmN0aW9uIGkoYSl7bGV0IHM9dC5nZXQoYSk7aWYocz09PXZvaWQgMCl7aWYobiE9PXVEKXJldHVybiBuO3Quc2V0KGEscz1lLnB1c2goYSktMSl9cmV0dXJuIHJbcyVyLmxlbmd0aF19cmV0dXJuIG8oaSwic2NhbGUiKSxpLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1uZXcgQzA7Zm9yKGxldCBzIG9mIGEpdC5oYXMocyl8fHQuc2V0KHMsZS5wdXNoKHMpLTEpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUFycmF5LmZyb20oYSksaSk6ci5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxpKTpufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSnMoZSxyKS51bmtub3duKG4pfSxSaC5hcHBseShpLGFyZ3VtZW50cyksaX12YXIgdUQsaEQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFaCgpO052KCk7dUQ9U3ltYm9sKCJpbXBsaWNpdCIpO28oSnMsIm9yZGluYWwiKX0pO2Z1bmN0aW9uIFYwKCl7dmFyIHQ9SnMoKS51bmtub3duKHZvaWQgMCksZT10LmRvbWFpbixyPXQucmFuZ2Usbj0wLGk9MSxhLHMsbD0hMSx1PTAsaD0wLGY9LjU7ZGVsZXRlIHQudW5rbm93bjtmdW5jdGlvbiBkKCl7dmFyIHA9ZSgpLmxlbmd0aCxtPWk8bixnPW0/aTpuLHk9bT9uOmk7YT0oeS1nKS9NYXRoLm1heCgxLHAtdStoKjIpLGwmJihhPU1hdGguZmxvb3IoYSkpLGcrPSh5LWctYSoocC11KSkqZixzPWEqKDEtdSksbCYmKGc9TWF0aC5yb3VuZChnKSxzPU1hdGgucm91bmQocykpO3ZhciB2PXEzKHApLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gZythKnh9KTtyZXR1cm4gcihtP3YucmV2ZXJzZSgpOnYpfXJldHVybiBvKGQsInJlc2NhbGUiKSx0LmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShwKSxkKCkpOmUoKX0sdC5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW24saV09cCxuPStuLGk9K2ksZCgpKTpbbixpXX0sdC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHApe3JldHVybltuLGldPXAsbj0rbixpPStpLGw9ITAsZCgpfSx0LmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBzfSx0LnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdC5yb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0hIXAsZCgpKTpsfSx0LnBhZGRpbmc9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9TWF0aC5taW4oMSxoPStwKSxkKCkpOnV9LHQucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWluKDEscCksZCgpKTp1fSx0LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rcCxkKCkpOmh9LHQuYWxpZ249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHApKSxkKCkpOmZ9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBWMChlKCksW24saV0pLnJvdW5kKGwpLnBhZGRpbmdJbm5lcih1KS5wYWRkaW5nT3V0ZXIoaCkuYWxpZ24oZil9LFJoLmFwcGx5KGQoKSxhcmd1bWVudHMpfXZhciBtcT1OKCgpPT57InVzZSBzdHJpY3QiO0VoKCk7TnYoKTtoRCgpO28oVjAsImJhbmQiKX0pO2Z1bmN0aW9uIGZEKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgZ3E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZELCJjb25zdGFudHMiKX0pO2Z1bmN0aW9uIGREKHQpe3JldHVybit0fXZhciB5cT1OKCgpPT57InVzZSBzdHJpY3QiO28oZEQsIm51bWJlciIpfSk7ZnVuY3Rpb24gVTAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gcEQodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX06ZkQoaXNOYU4oZSk/TmFOOi41KX1mdW5jdGlvbiBOa2UodCxlKXt2YXIgcjtyZXR1cm4gdD5lJiYocj10LHQ9ZSxlPXIpLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfX1mdW5jdGlvbiBNa2UodCxlLHIpe3ZhciBuPXRbMF0saT10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIGk8bj8obj1wRChpLG4pLGE9cihzLGEpKToobj1wRChuLGkpLGE9cihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShuKGwpKX19ZnVuY3Rpb24gSWtlKHQsZSxyKXt2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxzPS0xO2Zvcih0W25dPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8bjspaVtzXT1wRCh0W3NdLHRbcysxXSksYVtzXT1yKGVbc10sZVtzKzFdKTtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIHU9T0EodCxsLDEsbiktMTtyZXR1cm4gYVt1XShpW3VdKGwpKX19ZnVuY3Rpb24gTDUodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gT2tlKCl7dmFyIHQ9dnEsZT12cSxyPURoLG4saSxhLHM9VTAsbCx1LGg7ZnVuY3Rpb24gZigpe3ZhciBwPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtyZXR1cm4gcyE9PVUwJiYocz1Oa2UodFswXSx0W3AtMV0pKSxsPXA+Mj9Ja2U6TWtlLHU9aD1udWxsLGR9byhmLCJyZXNjYWxlIik7ZnVuY3Rpb24gZChwKXtyZXR1cm4gcD09bnVsbHx8aXNOYU4ocD0rcCk/YToodXx8KHU9bCh0Lm1hcChuKSxlLHIpKSkobihzKHApKSl9cmV0dXJuIG8oZCwic2NhbGUiKSxkLmludmVydD1mdW5jdGlvbihwKXtyZXR1cm4gcyhpKChofHwoaD1sKGUsdC5tYXAobiksS2kpKSkocCkpKX0sZC5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QXJyYXkuZnJvbShwLGREKSxmKCkpOnQuc2xpY2UoKX0sZC5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BcnJheS5mcm9tKHApLGYoKSk6ZS5zbGljZSgpfSxkLnJhbmdlUm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGU9QXJyYXkuZnJvbShwKSxyPXM1LGYoKX0sZC5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1wPyEwOlUwLGYoKSk6cyE9PVUwfSxkLmludGVycG9sYXRlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZigpKTpyfSxkLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cCxkKTphfSxmdW5jdGlvbihwLG0pe3JldHVybiBuPXAsaT1tLGYoKX19ZnVuY3Rpb24gTXYoKXtyZXR1cm4gT2tlKCkoVTAsVTApfXZhciB2cSxtRD1OKCgpPT57InVzZSBzdHJpY3QiO0VoKCk7QjAoKTtncSgpO3lxKCk7dnE9WzAsMV07byhVMCwiaWRlbnRpdHkiKTtvKHBELCJub3JtYWxpemUiKTtvKE5rZSwiY2xhbXBlciIpO28oTWtlLCJiaW1hcCIpO28oSWtlLCJwb2x5bWFwIik7byhMNSwiY29weSIpO28oT2tlLCJ0cmFuc2Zvcm1lciIpO28oTXYsImNvbnRpbnVvdXMiKX0pO2Z1bmN0aW9uIGdEKHQsZSxyLG4pe3ZhciBpPUEwKHQsZSxyKSxhO3N3aXRjaChuPUxoKG4/PyIsZiIpLG4udHlwZSl7Y2FzZSJzIjp7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9QTUoaSxzKSkmJihuLnByZWNpc2lvbj1hKSxTNShuLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9XzUoaSxNYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpKSYmKG4ucHJlY2lzaW9uPWEtKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihhPUM1KGkpKSYmKG4ucHJlY2lzaW9uPWEtKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiBjYyhuKX12YXIgeHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFaCgpO1lfKCk7byhnRCwidGlja0Zvcm1hdCIpfSk7ZnVuY3Rpb24gUGtlKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHIpe3ZhciBuPWUoKTtyZXR1cm4gVTMoblswXSxuW24ubGVuZ3RoLTFdLHI/PzEwKX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHIsbil7dmFyIGk9ZSgpO3JldHVybiBnRChpWzBdLGlbaS5sZW5ndGgtMV0scj8/MTAsbil9LHQubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49ZSgpLGk9MCxhPW4ubGVuZ3RoLTEscz1uW2ldLGw9blthXSx1LGgsZj0xMDtmb3IobDxzJiYoaD1zLHM9bCxsPWgsaD1pLGk9YSxhPWgpO2YtLSA+MDspe2lmKGg9b3YocyxsLHIpLGg9PT11KXJldHVybiBuW2ldPXMsblthXT1sLGUobik7aWYoaD4wKXM9TWF0aC5mbG9vcihzL2gpKmgsbD1NYXRoLmNlaWwobC9oKSpoO2Vsc2UgaWYoaDwwKXM9TWF0aC5jZWlsKHMqaCkvaCxsPU1hdGguZmxvb3IobCpoKS9oO2Vsc2UgYnJlYWs7dT1ofXJldHVybiB0fSx0fWZ1bmN0aW9uIFRsKCl7dmFyIHQ9TXYoKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEw1KHQsVGwoKSl9LFJoLmFwcGx5KHQsYXJndW1lbnRzKSxQa2UodCl9dmFyIGJxPU4oKCk9PnsidXNlIHN0cmljdCI7RWgoKTttRCgpO052KCk7eHEoKTtvKFBrZSwibGluZWFyaXNoIik7byhUbCwibGluZWFyIil9KTtmdW5jdGlvbiB5RCh0LGUpe3Q9dC5zbGljZSgpO3ZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFtyXSxhPXRbbl0scztyZXR1cm4gYTxpJiYocz1yLHI9bixuPXMscz1pLGk9YSxhPXMpLHRbcl09ZS5mbG9vcihpKSx0W25dPWUuY2VpbChhKSx0fXZhciBUcT1OKCgpPT57InVzZSBzdHJpY3QiO28oeUQsIm5pY2UiKX0pO2Z1bmN0aW9uIHhuKHQsZSxyLG4pe2Z1bmN0aW9uIGkoYSl7cmV0dXJuIHQoYT1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrYSkpLGF9cmV0dXJuIG8oaSwiaW50ZXJ2YWwiKSxpLmZsb29yPWE9Pih0KGE9bmV3IERhdGUoK2EpKSxhKSxpLmNlaWw9YT0+KHQoYT1uZXcgRGF0ZShhLTEpKSxlKGEsMSksdChhKSxhKSxpLnJvdW5kPWE9PntsZXQgcz1pKGEpLGw9aS5jZWlsKGEpO3JldHVybiBhLXM8bC1hP3M6bH0saS5vZmZzZXQ9KGEscyk9PihlKGE9bmV3IERhdGUoK2EpLHM9PW51bGw/MTpNYXRoLmZsb29yKHMpKSxhKSxpLnJhbmdlPShhLHMsbCk9PntsZXQgdT1bXTtpZihhPWkuY2VpbChhKSxsPWw9PW51bGw/MTpNYXRoLmZsb29yKGwpLCEoYTxzKXx8IShsPjApKXJldHVybiB1O2xldCBoO2RvIHUucHVzaChoPW5ldyBEYXRlKCthKSksZShhLGwpLHQoYSk7d2hpbGUoaDxhJiZhPHMpO3JldHVybiB1fSxpLmZpbHRlcj1hPT54bihzPT57aWYocz49cylmb3IoO3QocyksIWEocyk7KXMuc2V0VGltZShzLTEpfSwocyxsKT0+e2lmKHM+PXMpaWYobDwwKWZvcig7KytsPD0wOylmb3IoO2UocywtMSksIWEocyk7KTtlbHNlIGZvcig7LS1sPj0wOylmb3IoO2UocywxKSwhYShzKTspO30pLHImJihpLmNvdW50PShhLHMpPT4odkQuc2V0VGltZSgrYSkseEQuc2V0VGltZSgrcyksdCh2RCksdCh4RCksTWF0aC5mbG9vcihyKHZELHhEKSkpLGkuZXZlcnk9YT0+KGE9TWF0aC5mbG9vcihhKSwhaXNGaW5pdGUoYSl8fCEoYT4wKT9udWxsOmE+MT9pLmZpbHRlcihuP3M9Pm4ocyklYT09PTA6cz0+aS5jb3VudCgwLHMpJWE9PT0wKTppKSksaX12YXIgdkQseEQsVHU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2RD1uZXcgRGF0ZSx4RD1uZXcgRGF0ZTtvKHhuLCJ0aW1lSW50ZXJ2YWwiKX0pO3ZhciB1Yyx3cSxiRD1OKCgpPT57InVzZSBzdHJpY3QiO1R1KCk7dWM9eG4oKCk9Pnt9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UpfSwodCxlKT0+ZS10KTt1Yy5ldmVyeT10PT4odD1NYXRoLmZsb29yKHQpLCFpc0Zpbml0ZSh0KXx8ISh0PjApP251bGw6dD4xP3huKGU9PntlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSwoZSxyKT0+e2Uuc2V0VGltZSgrZStyKnQpfSwoZSxyKT0+KHItZSkvdCk6dWMpO3dxPXVjLnJhbmdlfSk7dmFyIGVvLGtxLFREPU4oKCk9PnsidXNlIHN0cmljdCI7VHUoKTtlbz14bih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqMWUzKX0sKHQsZSk9PihlLXQpLzFlMyx0PT50LmdldFVUQ1NlY29uZHMoKSksa3E9ZW8ucmFuZ2V9KTt2YXIgd3UsQmtlLFI1LEZrZSx3RD1OKCgpPT57InVzZSBzdHJpY3QiO1R1KCk7d3U9eG4odD0+e3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqMWUzKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSo2ZTQpfSwodCxlKT0+KGUtdCkvNmU0LHQ9PnQuZ2V0TWludXRlcygpKSxCa2U9d3UucmFuZ2UsUjU9eG4odD0+e3Quc2V0VVRDU2Vjb25kcygwLDApfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjZlNCl9LCh0LGUpPT4oZS10KS82ZTQsdD0+dC5nZXRVVENNaW51dGVzKCkpLEZrZT1SNS5yYW5nZX0pO3ZhciBrdSwka2UsTjUsemtlLGtEPU4oKCk9PnsidXNlIHN0cmljdCI7VHUoKTtrdT14bih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSoxZTMtdC5nZXRNaW51dGVzKCkqNmU0KX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSozNmU1KX0sKHQsZSk9PihlLXQpLzM2ZTUsdD0+dC5nZXRIb3VycygpKSwka2U9a3UucmFuZ2UsTjU9eG4odD0+e3Quc2V0VVRDTWludXRlcygwLDAsMCl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqMzZlNSl9LCh0LGUpPT4oZS10KS8zNmU1LHQ9PnQuZ2V0VVRDSG91cnMoKSksemtlPU41LnJhbmdlfSk7dmFyIFJvLEdrZSxPdixWa2UsTTUsVWtlLEVEPU4oKCk9PnsidXNlIHN0cmljdCI7VHUoKTtSbz14bih0PT50LnNldEhvdXJzKDAsMCwwLDApLCh0LGUpPT50LnNldERhdGUodC5nZXREYXRlKCkrZSksKHQsZSk9PihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKjZlNCkvODY0ZTUsdD0+dC5nZXREYXRlKCktMSksR2tlPVJvLnJhbmdlLE92PXhuKHQ9Pnt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sKHQsZSk9PihlLXQpLzg2NGU1LHQ9PnQuZ2V0VVRDRGF0ZSgpLTEpLFZrZT1Pdi5yYW5nZSxNNT14bih0PT57dC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9LCh0LGUpPT4oZS10KS84NjRlNSx0PT5NYXRoLmZsb29yKHQvODY0ZTUpKSxVa2U9TTUucmFuZ2V9KTtmdW5jdGlvbiBBZCh0KXtyZXR1cm4geG4oZT0+e2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3IqNyl9LChlLHIpPT4oci1lLShyLmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSo2ZTQpLzYwNDhlNSl9ZnVuY3Rpb24gX2QodCl7cmV0dXJuIHhuKGU9PntlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKStyKjcpfSwoZSxyKT0+KHItZSkvNjA0OGU1KX12YXIgd2wsTmgsSTUsTzUsZmMsUDUsQjUsU3EsSGtlLFdrZSxxa2UsWWtlLFhrZSxqa2UsRGQsSDAsQ3EsQXEsTWgsX3EsRHEsTHEsS2tlLFFrZSxaa2UsSmtlLGVFZSx0RWUsU0Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdSgpO28oQWQsInRpbWVXZWVrZGF5Iik7d2w9QWQoMCksTmg9QWQoMSksSTU9QWQoMiksTzU9QWQoMyksZmM9QWQoNCksUDU9QWQoNSksQjU9QWQoNiksU3E9d2wucmFuZ2UsSGtlPU5oLnJhbmdlLFdrZT1JNS5yYW5nZSxxa2U9TzUucmFuZ2UsWWtlPWZjLnJhbmdlLFhrZT1QNS5yYW5nZSxqa2U9QjUucmFuZ2U7byhfZCwidXRjV2Vla2RheSIpO0RkPV9kKDApLEgwPV9kKDEpLENxPV9kKDIpLEFxPV9kKDMpLE1oPV9kKDQpLF9xPV9kKDUpLERxPV9kKDYpLExxPURkLnJhbmdlLEtrZT1IMC5yYW5nZSxRa2U9Q3EucmFuZ2UsWmtlPUFxLnJhbmdlLEprZT1NaC5yYW5nZSxlRWU9X3EucmFuZ2UsdEVlPURxLnJhbmdlfSk7dmFyIEV1LHJFZSxGNSxuRWUsQ0Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdSgpO0V1PXhuKHQ9Pnt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sKHQsZSk9PmUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpKjEyLHQ9PnQuZ2V0TW9udGgoKSksckVlPUV1LnJhbmdlLEY1PXhuKHQ9Pnt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0sKHQsZSk9PmUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpKjEyLHQ9PnQuZ2V0VVRDTW9udGgoKSksbkVlPUY1LnJhbmdlfSk7dmFyIHRvLGlFZSxrbCxhRWUsQUQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdSgpO3RvPXhuKHQ9Pnt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sKHQsZSk9PmUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCksdD0+dC5nZXRGdWxsWWVhcigpKTt0by5ldmVyeT10PT4haXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKXx8ISh0PjApP251bGw6eG4oZT0+e2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrcip0KX0pO2lFZT10by5yYW5nZSxrbD14bih0PT57dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9LCh0LGUpPT5lLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpLHQ9PnQuZ2V0VVRDRnVsbFllYXIoKSk7a2wuZXZlcnk9dD0+IWlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSl8fCEodD4wKT9udWxsOnhuKGU9PntlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3IqdCl9KTthRWU9a2wucmFuZ2V9KTtmdW5jdGlvbiBOcSh0LGUscixuLGksYSl7bGV0IHM9W1tlbywxLDFlM10sW2VvLDUsNSoxZTNdLFtlbywxNSwxNSoxZTNdLFtlbywzMCwzMCoxZTNdLFthLDEsNmU0XSxbYSw1LDUqNmU0XSxbYSwxNSwxNSo2ZTRdLFthLDMwLDMwKjZlNF0sW2ksMSwzNmU1XSxbaSwzLDMqMzZlNV0sW2ksNiw2KjM2ZTVdLFtpLDEyLDEyKjM2ZTVdLFtuLDEsODY0ZTVdLFtuLDIsMio4NjRlNV0sW3IsMSw2MDQ4ZTVdLFtlLDEsMjU5MmU2XSxbZSwzLDMqMjU5MmU2XSxbdCwxLDMxNTM2ZTZdXTtmdW5jdGlvbiBsKGgsZixkKXtsZXQgcD1mPGg7cCYmKFtoLGZdPVtmLGhdKTtsZXQgbT1kJiZ0eXBlb2YgZC5yYW5nZT09ImZ1bmN0aW9uIj9kOnUoaCxmLGQpLGc9bT9tLnJhbmdlKGgsK2YrMSk6W107cmV0dXJuIHA/Zy5yZXZlcnNlKCk6Z31vKGwsInRpY2tzIik7ZnVuY3Rpb24gdShoLGYsZCl7bGV0IHA9TWF0aC5hYnMoZi1oKS9kLG09bWQoKFssLHZdKT0+dikucmlnaHQocyxwKTtpZihtPT09cy5sZW5ndGgpcmV0dXJuIHQuZXZlcnkoQTAoaC8zMTUzNmU2LGYvMzE1MzZlNixkKSk7aWYobT09PTApcmV0dXJuIHVjLmV2ZXJ5KE1hdGgubWF4KEEwKGgsZixkKSwxKSk7bGV0W2cseV09c1twL3NbbS0xXVsyXTxzW21dWzJdL3A/bS0xOm1dO3JldHVybiBnLmV2ZXJ5KHkpfXJldHVybiBvKHUsInRpY2tJbnRlcnZhbCIpLFtsLHVdfXZhciBvRWUsbEVlLF9ELERELE1xPU4oKCk9PnsidXNlIHN0cmljdCI7RWgoKTtiRCgpO1REKCk7d0QoKTtrRCgpO0VEKCk7U0QoKTtDRCgpO0FEKCk7byhOcSwidGlja2VyIik7W29FZSxsRWVdPU5xKGtsLEY1LERkLE01LE41LFI1KSxbX0QsRERdPU5xKHRvLEV1LHdsLFJvLGt1LHd1KX0pO3ZhciAkNT1OKCgpPT57InVzZSBzdHJpY3QiO2JEKCk7VEQoKTt3RCgpO2tEKCk7RUQoKTtTRCgpO0NEKCk7QUQoKTtNcSgpfSk7ZnVuY3Rpb24gTEQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIFJEKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFB2KHQsZSxyKXtyZXR1cm57eTp0LG06ZSxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBORCh0KXt2YXIgZT10LmRhdGVUaW1lLHI9dC5kYXRlLG49dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLHM9dC5zaG9ydERheXMsbD10Lm1vbnRocyx1PXQuc2hvcnRNb250aHMsaD1CdihpKSxmPUZ2KGkpLGQ9QnYoYSkscD1GdihhKSxtPUJ2KHMpLGc9RnYocykseT1CdihsKSx2PUZ2KGwpLHg9QnYodSksYj1Gdih1KSxUPXthOlAsQTpCLGI6RixCOnosYzpudWxsLGQ6JHEsZTokcSxmOlJFZSxnOkdFZSxHOlVFZSxIOl9FZSxJOkRFZSxqOkxFZSxMOkhxLG06TkVlLE06TUVlLHA6JCxxOlUsUTpWcSxzOlVxLFM6SUVlLHU6T0VlLFU6UEVlLFY6QkVlLHc6RkVlLFc6JEVlLHg6bnVsbCxYOm51bGwseTp6RWUsWTpWRWUsWjpIRWUsIiUiOkdxfSxTPXthOkssQTplZSxiOlksQjpjZSxjOm51bGwsZDp6cSxlOnpxLGY6WEVlLGc6aVNlLEc6c1NlLEg6V0VlLEk6cUVlLGo6WUVlLEw6cXEsbTpqRWUsTTpLRWUscDpaLHE6dWUsUTpWcSxzOlVxLFM6UUVlLHU6WkVlLFU6SkVlLFY6ZVNlLHc6dFNlLFc6clNlLHg6bnVsbCxYOm51bGwseTpuU2UsWTphU2UsWjpvU2UsIiUiOkdxfSx3PXthOk8sQTpSLGI6ayxCOkwsYzpBLGQ6QnEsZTpCcSxmOkVFZSxnOlBxLEc6T3EsSDpGcSxJOkZxLGo6YkVlLEw6a0VlLG06eEVlLE06VEVlLHA6RCxxOnZFZSxROkNFZSxzOkFFZSxTOndFZSx1OmRFZSxVOnBFZSxWOm1FZSx3OmZFZSxXOmdFZSx4OkksWDpNLHk6UHEsWTpPcSxaOnlFZSwiJSI6U0VlfTtULng9RShyLFQpLFQuWD1FKG4sVCksVC5jPUUoZSxUKSxTLng9RShyLFMpLFMuWD1FKG4sUyksUy5jPUUoZSxTKTtmdW5jdGlvbiBFKFEsail7cmV0dXJuIGZ1bmN0aW9uKG5lKXt2YXIgdGU9W10saGU9LTEsbGU9MCxKPVEubGVuZ3RoLFNlLHNlLGFlO2ZvcihuZSBpbnN0YW5jZW9mIERhdGV8fChuZT1uZXcgRGF0ZSgrbmUpKTsrK2hlPEo7KVEuY2hhckNvZGVBdChoZSk9PT0zNyYmKHRlLnB1c2goUS5zbGljZShsZSxoZSkpLChzZT1JcVtTZT1RLmNoYXJBdCgrK2hlKV0pIT1udWxsP1NlPVEuY2hhckF0KCsraGUpOnNlPVNlPT09ImUiPyIgIjoiMCIsKGFlPWpbU2VdKSYmKFNlPWFlKG5lLHNlKSksdGUucHVzaChTZSksbGU9aGUrMSk7cmV0dXJuIHRlLnB1c2goUS5zbGljZShsZSxoZSkpLHRlLmpvaW4oIiIpfX1vKEUsIm5ld0Zvcm1hdCIpO2Z1bmN0aW9uIF8oUSxqKXtyZXR1cm4gZnVuY3Rpb24obmUpe3ZhciB0ZT1QdigxOTAwLHZvaWQgMCwxKSxoZT1DKHRlLFEsbmUrPSIiLDApLGxlLEo7aWYoaGUhPW5lLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiB0ZSlyZXR1cm4gbmV3IERhdGUodGUuUSk7aWYoInMiaW4gdGUpcmV0dXJuIG5ldyBEYXRlKHRlLnMqMWUzKygiTCJpbiB0ZT90ZS5MOjApKTtpZihqJiYhKCJaImluIHRlKSYmKHRlLlo9MCksInAiaW4gdGUmJih0ZS5IPXRlLkglMTIrdGUucCoxMiksdGUubT09PXZvaWQgMCYmKHRlLm09InEiaW4gdGU/dGUucTowKSwiViJpbiB0ZSl7aWYodGUuVjwxfHx0ZS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHRlfHwodGUudz0xKSwiWiJpbiB0ZT8obGU9UkQoUHYodGUueSwwLDEpKSxKPWxlLmdldFVUQ0RheSgpLGxlPUo+NHx8Sj09PTA/SDAuY2VpbChsZSk6SDAobGUpLGxlPU92Lm9mZnNldChsZSwodGUuVi0xKSo3KSx0ZS55PWxlLmdldFVUQ0Z1bGxZZWFyKCksdGUubT1sZS5nZXRVVENNb250aCgpLHRlLmQ9bGUuZ2V0VVRDRGF0ZSgpKyh0ZS53KzYpJTcpOihsZT1MRChQdih0ZS55LDAsMSkpLEo9bGUuZ2V0RGF5KCksbGU9Sj40fHxKPT09MD9OaC5jZWlsKGxlKTpOaChsZSksbGU9Um8ub2Zmc2V0KGxlLCh0ZS5WLTEpKjcpLHRlLnk9bGUuZ2V0RnVsbFllYXIoKSx0ZS5tPWxlLmdldE1vbnRoKCksdGUuZD1sZS5nZXREYXRlKCkrKHRlLncrNiklNyl9ZWxzZSgiVyJpbiB0ZXx8IlUiaW4gdGUpJiYoInciaW4gdGV8fCh0ZS53PSJ1ImluIHRlP3RlLnUlNzoiVyJpbiB0ZT8xOjApLEo9IloiaW4gdGU/UkQoUHYodGUueSwwLDEpKS5nZXRVVENEYXkoKTpMRChQdih0ZS55LDAsMSkpLmdldERheSgpLHRlLm09MCx0ZS5kPSJXImluIHRlPyh0ZS53KzYpJTcrdGUuVyo3LShKKzUpJTc6dGUudyt0ZS5VKjctKEorNiklNyk7cmV0dXJuIloiaW4gdGU/KHRlLkgrPXRlLlovMTAwfDAsdGUuTSs9dGUuWiUxMDAsUkQodGUpKTpMRCh0ZSl9fW8oXywibmV3UGFyc2UiKTtmdW5jdGlvbiBDKFEsaixuZSx0ZSl7Zm9yKHZhciBoZT0wLGxlPWoubGVuZ3RoLEo9bmUubGVuZ3RoLFNlLHNlO2hlPGxlOyl7aWYodGU+PUopcmV0dXJuLTE7aWYoU2U9ai5jaGFyQ29kZUF0KGhlKyspLFNlPT09Mzcpe2lmKFNlPWouY2hhckF0KGhlKyspLHNlPXdbU2UgaW4gSXE/ai5jaGFyQXQoaGUrKyk6U2VdLCFzZXx8KHRlPXNlKFEsbmUsdGUpKTwwKXJldHVybi0xfWVsc2UgaWYoU2UhPW5lLmNoYXJDb2RlQXQodGUrKykpcmV0dXJuLTF9cmV0dXJuIHRlfW8oQywicGFyc2VTcGVjaWZpZXIiKTtmdW5jdGlvbiBEKFEsaixuZSl7dmFyIHRlPWguZXhlYyhqLnNsaWNlKG5lKSk7cmV0dXJuIHRlPyhRLnA9Zi5nZXQodGVbMF0udG9Mb3dlckNhc2UoKSksbmUrdGVbMF0ubGVuZ3RoKTotMX1vKEQsInBhcnNlUGVyaW9kIik7ZnVuY3Rpb24gTyhRLGosbmUpe3ZhciB0ZT1tLmV4ZWMoai5zbGljZShuZSkpO3JldHVybiB0ZT8oUS53PWcuZ2V0KHRlWzBdLnRvTG93ZXJDYXNlKCkpLG5lK3RlWzBdLmxlbmd0aCk6LTF9byhPLCJwYXJzZVNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIFIoUSxqLG5lKXt2YXIgdGU9ZC5leGVjKGouc2xpY2UobmUpKTtyZXR1cm4gdGU/KFEudz1wLmdldCh0ZVswXS50b0xvd2VyQ2FzZSgpKSxuZSt0ZVswXS5sZW5ndGgpOi0xfW8oUiwicGFyc2VXZWVrZGF5Iik7ZnVuY3Rpb24gayhRLGosbmUpe3ZhciB0ZT14LmV4ZWMoai5zbGljZShuZSkpO3JldHVybiB0ZT8oUS5tPWIuZ2V0KHRlWzBdLnRvTG93ZXJDYXNlKCkpLG5lK3RlWzBdLmxlbmd0aCk6LTF9byhrLCJwYXJzZVNob3J0TW9udGgiKTtmdW5jdGlvbiBMKFEsaixuZSl7dmFyIHRlPXkuZXhlYyhqLnNsaWNlKG5lKSk7cmV0dXJuIHRlPyhRLm09di5nZXQodGVbMF0udG9Mb3dlckNhc2UoKSksbmUrdGVbMF0ubGVuZ3RoKTotMX1vKEwsInBhcnNlTW9udGgiKTtmdW5jdGlvbiBBKFEsaixuZSl7cmV0dXJuIEMoUSxlLGosbmUpfW8oQSwicGFyc2VMb2NhbGVEYXRlVGltZSIpO2Z1bmN0aW9uIEkoUSxqLG5lKXtyZXR1cm4gQyhRLHIsaixuZSl9byhJLCJwYXJzZUxvY2FsZURhdGUiKTtmdW5jdGlvbiBNKFEsaixuZSl7cmV0dXJuIEMoUSxuLGosbmUpfW8oTSwicGFyc2VMb2NhbGVUaW1lIik7ZnVuY3Rpb24gUChRKXtyZXR1cm4gc1tRLmdldERheSgpXX1vKFAsImZvcm1hdFNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIEIoUSl7cmV0dXJuIGFbUS5nZXREYXkoKV19byhCLCJmb3JtYXRXZWVrZGF5Iik7ZnVuY3Rpb24gRihRKXtyZXR1cm4gdVtRLmdldE1vbnRoKCldfW8oRiwiZm9ybWF0U2hvcnRNb250aCIpO2Z1bmN0aW9uIHooUSl7cmV0dXJuIGxbUS5nZXRNb250aCgpXX1vKHosImZvcm1hdE1vbnRoIik7ZnVuY3Rpb24gJChRKXtyZXR1cm4gaVsrKFEuZ2V0SG91cnMoKT49MTIpXX1vKCQsImZvcm1hdFBlcmlvZCIpO2Z1bmN0aW9uIFUoUSl7cmV0dXJuIDErfn4oUS5nZXRNb250aCgpLzMpfW8oVSwiZm9ybWF0UXVhcnRlciIpO2Z1bmN0aW9uIEsoUSl7cmV0dXJuIHNbUS5nZXRVVENEYXkoKV19byhLLCJmb3JtYXRVVENTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBlZShRKXtyZXR1cm4gYVtRLmdldFVUQ0RheSgpXX1vKGVlLCJmb3JtYXRVVENXZWVrZGF5Iik7ZnVuY3Rpb24gWShRKXtyZXR1cm4gdVtRLmdldFVUQ01vbnRoKCldfW8oWSwiZm9ybWF0VVRDU2hvcnRNb250aCIpO2Z1bmN0aW9uIGNlKFEpe3JldHVybiBsW1EuZ2V0VVRDTW9udGgoKV19byhjZSwiZm9ybWF0VVRDTW9udGgiKTtmdW5jdGlvbiBaKFEpe3JldHVybiBpWysoUS5nZXRVVENIb3VycygpPj0xMildfW8oWiwiZm9ybWF0VVRDUGVyaW9kIik7ZnVuY3Rpb24gdWUoUSl7cmV0dXJuIDErfn4oUS5nZXRVVENNb250aCgpLzMpfXJldHVybiBvKHVlLCJmb3JtYXRVVENRdWFydGVyIikse2Zvcm1hdDpvKGZ1bmN0aW9uKFEpe3ZhciBqPUUoUSs9IiIsVCk7cmV0dXJuIGoudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUX0san0sImZvcm1hdCIpLHBhcnNlOm8oZnVuY3Rpb24oUSl7dmFyIGo9XyhRKz0iIiwhMSk7cmV0dXJuIGoudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUX0san0sInBhcnNlIiksdXRjRm9ybWF0Om8oZnVuY3Rpb24oUSl7dmFyIGo9RShRKz0iIixTKTtyZXR1cm4gai50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBRfSxqfSwidXRjRm9ybWF0IiksdXRjUGFyc2U6byhmdW5jdGlvbihRKXt2YXIgaj1fKFErPSIiLCEwKTtyZXR1cm4gai50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBRfSxqfSwidXRjUGFyc2UiKX19ZnVuY3Rpb24gV3IodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gaEVlKHQpe3JldHVybiB0LnJlcGxhY2UodUVlLCJcXCQmIil9ZnVuY3Rpb24gQnYodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKGhFZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEZ2KHQpe3JldHVybiBuZXcgTWFwKHQubWFwKChlLHIpPT5bZS50b0xvd2VyQ2FzZSgpLHJdKSl9ZnVuY3Rpb24gZkVlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGRFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbUVlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPcSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQcSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlFZSh0LGUscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Llo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHZFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4RWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJxKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQubT0wLHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGcSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBURWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd0VlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGtFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Lkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU0VlKHQsZSxyKXt2YXIgbj1jRWUuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBDRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkcSh0LGUpe3JldHVybiBXcih0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIF9FZSh0LGUpe3JldHVybiBXcih0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBERWUodCxlKXtyZXR1cm4gV3IodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIExFZSh0LGUpe3JldHVybiBXcigxK1JvLmNvdW50KHRvKHQpLHQpLGUsMyl9ZnVuY3Rpb24gSHEodCxlKXtyZXR1cm4gV3IodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFJFZSh0LGUpe3JldHVybiBIcSh0LGUpKyIwMDAifWZ1bmN0aW9uIE5FZSh0LGUpe3JldHVybiBXcih0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIE1FZSh0LGUpe3JldHVybiBXcih0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIElFZSh0LGUpe3JldHVybiBXcih0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE9FZSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPT09MD83OmV9ZnVuY3Rpb24gUEVlKHQsZSl7cmV0dXJuIFdyKHdsLmNvdW50KHRvKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBXcSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHxlPT09MD9mYyh0KTpmYy5jZWlsKHQpfWZ1bmN0aW9uIEJFZSh0LGUpe3JldHVybiB0PVdxKHQpLFdyKGZjLmNvdW50KHRvKHQpLHQpKyh0byh0KS5nZXREYXkoKT09PTQpLGUsMil9ZnVuY3Rpb24gRkVlKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uICRFZSh0LGUpe3JldHVybiBXcihOaC5jb3VudCh0byh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gekVlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBHRWUodCxlKXtyZXR1cm4gdD1XcSh0KSxXcih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gVkVlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBVRWUodCxlKXt2YXIgcj10LmdldERheSgpO3JldHVybiB0PXI+PTR8fHI9PT0wP2ZjKHQpOmZjLmNlaWwodCksV3IodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEhFZSh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK1dyKGUvNjB8MCwiMCIsMikrV3IoZSU2MCwiMCIsMil9ZnVuY3Rpb24genEodCxlKXtyZXR1cm4gV3IodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBXRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gcUVlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBZRWUodCxlKXtyZXR1cm4gV3IoMStPdi5jb3VudChrbCh0KSx0KSxlLDMpfWZ1bmN0aW9uIHFxKHQsZSl7cmV0dXJuIFdyKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBYRWUodCxlKXtyZXR1cm4gcXEodCxlKSsiMDAwIn1mdW5jdGlvbiBqRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBLRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBRRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBaRWUodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT09PTA/NzplfWZ1bmN0aW9uIEpFZSh0LGUpe3JldHVybiBXcihEZC5jb3VudChrbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gWXEodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8ZT09PTA/TWgodCk6TWguY2VpbCh0KX1mdW5jdGlvbiBlU2UodCxlKXtyZXR1cm4gdD1ZcSh0KSxXcihNaC5jb3VudChrbCh0KSx0KSsoa2wodCkuZ2V0VVRDRGF5KCk9PT00KSxlLDIpfWZ1bmN0aW9uIHRTZSh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiByU2UodCxlKXtyZXR1cm4gV3IoSDAuY291bnQoa2wodCktMSx0KSxlLDIpfWZ1bmN0aW9uIG5TZSh0LGUpe3JldHVybiBXcih0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gaVNlKHQsZSl7cmV0dXJuIHQ9WXEodCksV3IodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGFTZSh0LGUpe3JldHVybiBXcih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gc1NlKHQsZSl7dmFyIHI9dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1yPj00fHxyPT09MD9NaCh0KTpNaC5jZWlsKHQpLFdyKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBvU2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEdxKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFZxKHQpe3JldHVybit0fWZ1bmN0aW9uIFVxKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9dmFyIElxLFFpLGNFZSx1RWUsWHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjskNSgpO28oTEQsImxvY2FsRGF0ZSIpO28oUkQsInV0Y0RhdGUiKTtvKFB2LCJuZXdEYXRlIik7byhORCwiZm9ybWF0TG9jYWxlIik7SXE9eyItIjoiIixfOiIgIiwwOiIwIn0sUWk9L15ccypcZCsvLGNFZT0vXiUvLHVFZT0vW1xcXiQqKz98W1xdKCkue31dL2c7byhXciwicGFkIik7byhoRWUsInJlcXVvdGUiKTtvKEJ2LCJmb3JtYXRSZSIpO28oRnYsImZvcm1hdExvb2t1cCIpO28oZkVlLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKGRFZSwicGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5Iik7byhwRWUsInBhcnNlV2Vla051bWJlclN1bmRheSIpO28obUVlLCJwYXJzZVdlZWtOdW1iZXJJU08iKTtvKGdFZSwicGFyc2VXZWVrTnVtYmVyTW9uZGF5Iik7byhPcSwicGFyc2VGdWxsWWVhciIpO28oUHEsInBhcnNlWWVhciIpO28oeUVlLCJwYXJzZVpvbmUiKTtvKHZFZSwicGFyc2VRdWFydGVyIik7byh4RWUsInBhcnNlTW9udGhOdW1iZXIiKTtvKEJxLCJwYXJzZURheU9mTW9udGgiKTtvKGJFZSwicGFyc2VEYXlPZlllYXIiKTtvKEZxLCJwYXJzZUhvdXIyNCIpO28oVEVlLCJwYXJzZU1pbnV0ZXMiKTtvKHdFZSwicGFyc2VTZWNvbmRzIik7byhrRWUsInBhcnNlTWlsbGlzZWNvbmRzIik7byhFRWUsInBhcnNlTWljcm9zZWNvbmRzIik7byhTRWUsInBhcnNlTGl0ZXJhbFBlcmNlbnQiKTtvKENFZSwicGFyc2VVbml4VGltZXN0YW1wIik7byhBRWUsInBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMiKTtvKCRxLCJmb3JtYXREYXlPZk1vbnRoIik7byhfRWUsImZvcm1hdEhvdXIyNCIpO28oREVlLCJmb3JtYXRIb3VyMTIiKTtvKExFZSwiZm9ybWF0RGF5T2ZZZWFyIik7byhIcSwiZm9ybWF0TWlsbGlzZWNvbmRzIik7byhSRWUsImZvcm1hdE1pY3Jvc2Vjb25kcyIpO28oTkVlLCJmb3JtYXRNb250aE51bWJlciIpO28oTUVlLCJmb3JtYXRNaW51dGVzIik7byhJRWUsImZvcm1hdFNlY29uZHMiKTtvKE9FZSwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIpO28oUEVlLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5Iik7byhXcSwiZElTTyIpO28oQkVlLCJmb3JtYXRXZWVrTnVtYmVySVNPIik7byhGRWUsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKCRFZSwiZm9ybWF0V2Vla051bWJlck1vbmRheSIpO28oekVlLCJmb3JtYXRZZWFyIik7byhHRWUsImZvcm1hdFllYXJJU08iKTtvKFZFZSwiZm9ybWF0RnVsbFllYXIiKTtvKFVFZSwiZm9ybWF0RnVsbFllYXJJU08iKTtvKEhFZSwiZm9ybWF0Wm9uZSIpO28oenEsImZvcm1hdFVUQ0RheU9mTW9udGgiKTtvKFdFZSwiZm9ybWF0VVRDSG91cjI0Iik7byhxRWUsImZvcm1hdFVUQ0hvdXIxMiIpO28oWUVlLCJmb3JtYXRVVENEYXlPZlllYXIiKTtvKHFxLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiKTtvKFhFZSwiZm9ybWF0VVRDTWljcm9zZWNvbmRzIik7byhqRWUsImZvcm1hdFVUQ01vbnRoTnVtYmVyIik7byhLRWUsImZvcm1hdFVUQ01pbnV0ZXMiKTtvKFFFZSwiZm9ybWF0VVRDU2Vjb25kcyIpO28oWkVlLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5Iik7byhKRWUsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiKTtvKFlxLCJVVENkSVNPIik7byhlU2UsImZvcm1hdFVUQ1dlZWtOdW1iZXJJU08iKTtvKHRTZSwiZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSIpO28oclNlLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5Iik7byhuU2UsImZvcm1hdFVUQ1llYXIiKTtvKGlTZSwiZm9ybWF0VVRDWWVhcklTTyIpO28oYVNlLCJmb3JtYXRVVENGdWxsWWVhciIpO28oc1NlLCJmb3JtYXRVVENGdWxsWWVhcklTTyIpO28ob1NlLCJmb3JtYXRVVENab25lIik7byhHcSwiZm9ybWF0TGl0ZXJhbFBlcmNlbnQiKTtvKFZxLCJmb3JtYXRVbml4VGltZXN0YW1wIik7byhVcSwiZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMiKX0pO2Z1bmN0aW9uIE1EKHQpe3JldHVybiBXMD1ORCh0KSxMZD1XMC5mb3JtYXQsanE9VzAucGFyc2UsS3E9VzAudXRjRm9ybWF0LFFxPVcwLnV0Y1BhcnNlLFcwfXZhciBXMCxMZCxqcSxLcSxRcSxacT1OKCgpPT57InVzZSBzdHJpY3QiO1hxKCk7TUQoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtvKE1ELCJkZWZhdWx0TG9jYWxlIil9KTt2YXIgSUQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtacSgpfSk7ZnVuY3Rpb24gbFNlKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBjU2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gSnEodCxlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9TXYoKSxkPWYuaW52ZXJ0LHA9Zi5kb21haW4sbT1oKCIuJUwiKSxnPWgoIjolUyIpLHk9aCgiJUk6JU0iKSx2PWgoIiVJICVwIikseD1oKCIlYSAlZCIpLGI9aCgiJWIgJWQiKSxUPWgoIiVCIiksUz1oKCIlWSIpO2Z1bmN0aW9uIHcoRSl7cmV0dXJuKHUoRSk8RT9tOmwoRSk8RT9nOnMoRSk8RT95OmEoRSk8RT92Om4oRSk8RT9pKEUpPEU/eDpiOnIoRSk8RT9UOlMpKEUpfXJldHVybiBvKHcsInRpY2tGb3JtYXQiKSxmLmludmVydD1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IERhdGUoZChFKSl9LGYuZG9tYWluPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3AoQXJyYXkuZnJvbShFLGNTZSkpOnAoKS5tYXAobFNlKX0sZi50aWNrcz1mdW5jdGlvbihFKXt2YXIgXz1wKCk7cmV0dXJuIHQoX1swXSxfW18ubGVuZ3RoLTFdLEU/PzEwKX0sZi50aWNrRm9ybWF0PWZ1bmN0aW9uKEUsXyl7cmV0dXJuIF89PW51bGw/dzpoKF8pfSxmLm5pY2U9ZnVuY3Rpb24oRSl7dmFyIF89cCgpO3JldHVybighRXx8dHlwZW9mIEUucmFuZ2UhPSJmdW5jdGlvbiIpJiYoRT1lKF9bMF0sX1tfLmxlbmd0aC0xXSxFPz8xMCkpLEU/cCh5RChfLEUpKTpmfSxmLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTDUoZixKcSh0LGUscixuLGksYSxzLGwsdSxoKSl9LGZ9ZnVuY3Rpb24gejUoKXtyZXR1cm4gUmguYXBwbHkoSnEoX0QsREQsdG8sRXUsd2wsUm8sa3Usd3UsZW8sTGQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfXZhciBlWT1OKCgpPT57InVzZSBzdHJpY3QiOyQ1KCk7SUQoKTttRCgpO052KCk7VHEoKTtvKGxTZSwiZGF0ZSIpO28oY1NlLCJudW1iZXIiKTtvKEpxLCJjYWxlbmRhciIpO28oejUsInRpbWUiKX0pO3ZhciB0WT1OKCgpPT57InVzZSBzdHJpY3QiO21xKCk7YnEoKTtoRCgpO2VZKCl9KTtmdW5jdGlvbiBPRCh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KXJbbl09IiMiK3Quc2xpY2Uobio2LCsrbio2KTtyZXR1cm4gcn12YXIgclk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE9ELCJkZWZhdWx0Iil9KTt2YXIgUEQsblk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyWSgpO1BEPU9EKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKX0pO3ZhciBpWT1OKCgpPT57InVzZSBzdHJpY3QiO25ZKCl9KTtmdW5jdGlvbiBCbih0KXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiB0fSwiY29uc3RhbnQiKX12YXIgRzU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEJuLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzWSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9xMDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gRkQodCl7cmV0dXJuIHQ+PTE/JHY6dDw9LTE/LSR2Ok1hdGguYXNpbih0KX12YXIgQkQsaGEsSWgsYVksVjUsRWwsUmQsWmkscTAsJHYsWTAsVTU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCRD1NYXRoLmFicyxoYT1NYXRoLmF0YW4yLEloPU1hdGguY29zLGFZPU1hdGgubWF4LFY1PU1hdGgubWluLEVsPU1hdGguc2luLFJkPU1hdGguc3FydCxaaT0xZS0xMixxMD1NYXRoLlBJLCR2PXEwLzIsWTA9MipxMDtvKHNZLCJhY29zIik7byhGRCwiYXNpbiIpfSk7ZnVuY3Rpb24gSDUodCl7bGV0IGU9MztyZXR1cm4gdC5kaWdpdHM9ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU7aWYocj09bnVsbCllPW51bGw7ZWxzZXtsZXQgbj1NYXRoLmZsb29yKHIpO2lmKCEobj49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke3J9YCk7ZT1ufXJldHVybiB0fSwoKT0+bmV3IHdkKGUpfXZhciAkRD1OKCgpPT57InVzZSBzdHJpY3QiO09fKCk7byhINSwid2l0aFBhdGgiKX0pO2Z1bmN0aW9uIHVTZSh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBoU2UodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZlNlKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gZFNlKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHBTZSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBtU2UodCxlLHIsbixpLGEscyxsKXt2YXIgdT1yLXQsaD1uLWUsZj1zLWksZD1sLWEscD1kKnUtZipoO2lmKCEocCpwPFppKSlyZXR1cm4gcD0oZiooZS1hKS1kKih0LWkpKS9wLFt0K3AqdSxlK3AqaF19ZnVuY3Rpb24gVzUodCxlLHIsbixpLGEscyl7dmFyIGw9dC1yLHU9ZS1uLGg9KHM/YTotYSkvUmQobCpsK3UqdSksZj1oKnUsZD0taCpsLHA9dCtmLG09ZStkLGc9citmLHk9bitkLHY9KHArZykvMix4PShtK3kpLzIsYj1nLXAsVD15LW0sUz1iKmIrVCpULHc9aS1hLEU9cCp5LWcqbSxfPShUPDA/LTE6MSkqUmQoYVkoMCx3KncqUy1FKkUpKSxDPShFKlQtYipfKS9TLEQ9KC1FKmItVCpfKS9TLE89KEUqVCtiKl8pL1MsUj0oLUUqYitUKl8pL1Msaz1DLXYsTD1ELXgsQT1PLXYsST1SLXg7cmV0dXJuIGsqaytMKkw+QSpBK0kqSSYmKEM9TyxEPVIpLHtjeDpDLGN5OkQseDAxOi1mLHkwMTotZCx4MTE6QyooaS93LTEpLHkxMTpEKihpL3ctMSl9fWZ1bmN0aW9uIFNsKCl7dmFyIHQ9dVNlLGU9aFNlLHI9Qm4oMCksbj1udWxsLGk9ZlNlLGE9ZFNlLHM9cFNlLGw9bnVsbCx1PUg1KGgpO2Z1bmN0aW9uIGgoKXt2YXIgZixkLHA9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLG09K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGc9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktJHYseT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS0kdix2PUJEKHktZykseD15Pmc7aWYobHx8KGw9Zj11KCkpLG08cCYmKGQ9bSxtPXAscD1kKSwhKG0+WmkpKWwubW92ZVRvKDAsMCk7ZWxzZSBpZih2PlkwLVppKWwubW92ZVRvKG0qSWgoZyksbSpFbChnKSksbC5hcmMoMCwwLG0sZyx5LCF4KSxwPlppJiYobC5tb3ZlVG8ocCpJaCh5KSxwKkVsKHkpKSxsLmFyYygwLDAscCx5LGcseCkpO2Vsc2V7dmFyIGI9ZyxUPXksUz1nLHc9eSxFPXYsXz12LEM9cy5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixEPUM+WmkmJihuPytuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSZChwKnArbSptKSksTz1WNShCRChtLXApLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxSPU8saz1PLEwsQTtpZihEPlppKXt2YXIgST1GRChEL3AqRWwoQykpLE09RkQoRC9tKkVsKEMpKTsoRS09SSoyKT5aaT8oSSo9eD8xOi0xLFMrPUksdy09SSk6KEU9MCxTPXc9KGcreSkvMiksKF8tPU0qMik+Wmk/KE0qPXg/MTotMSxiKz1NLFQtPU0pOihfPTAsYj1UPShnK3kpLzIpfXZhciBQPW0qSWgoYiksQj1tKkVsKGIpLEY9cCpJaCh3KSx6PXAqRWwodyk7aWYoTz5aaSl7dmFyICQ9bSpJaChUKSxVPW0qRWwoVCksSz1wKkloKFMpLGVlPXAqRWwoUyksWTtpZih2PHEwKWlmKFk9bVNlKFAsQixLLGVlLCQsVSxGLHopKXt2YXIgY2U9UC1ZWzBdLFo9Qi1ZWzFdLHVlPSQtWVswXSxRPVUtWVsxXSxqPTEvRWwoc1koKGNlKnVlK1oqUSkvKFJkKGNlKmNlK1oqWikqUmQodWUqdWUrUSpRKSkpLzIpLG5lPVJkKFlbMF0qWVswXStZWzFdKllbMV0pO1I9VjUoTywocC1uZSkvKGotMSkpLGs9VjUoTywobS1uZSkvKGorMSkpfWVsc2UgUj1rPTB9Xz5aaT9rPlppPyhMPVc1KEssZWUsUCxCLG0sayx4KSxBPVc1KCQsVSxGLHosbSxrLHgpLGwubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksazxPP2wuYXJjKEwuY3gsTC5jeSxrLGhhKEwueTAxLEwueDAxKSxoYShBLnkwMSxBLngwMSksIXgpOihsLmFyYyhMLmN4LEwuY3ksayxoYShMLnkwMSxMLngwMSksaGEoTC55MTEsTC54MTEpLCF4KSxsLmFyYygwLDAsbSxoYShMLmN5K0wueTExLEwuY3grTC54MTEpLGhhKEEuY3krQS55MTEsQS5jeCtBLngxMSksIXgpLGwuYXJjKEEuY3gsQS5jeSxrLGhhKEEueTExLEEueDExKSxoYShBLnkwMSxBLngwMSksIXgpKSk6KGwubW92ZVRvKFAsQiksbC5hcmMoMCwwLG0sYixULCF4KSk6bC5tb3ZlVG8oUCxCKSwhKHA+WmkpfHwhKEU+WmkpP2wubGluZVRvKEYseik6Uj5aaT8oTD1XNShGLHosJCxVLHAsLVIseCksQT1XNShQLEIsSyxlZSxwLC1SLHgpLGwubGluZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksUjxPP2wuYXJjKEwuY3gsTC5jeSxSLGhhKEwueTAxLEwueDAxKSxoYShBLnkwMSxBLngwMSksIXgpOihsLmFyYyhMLmN4LEwuY3ksUixoYShMLnkwMSxMLngwMSksaGEoTC55MTEsTC54MTEpLCF4KSxsLmFyYygwLDAscCxoYShMLmN5K0wueTExLEwuY3grTC54MTEpLGhhKEEuY3krQS55MTEsQS5jeCtBLngxMSkseCksbC5hcmMoQS5jeCxBLmN5LFIsaGEoQS55MTEsQS54MTEpLGhhKEEueTAxLEEueDAxKSwheCkpKTpsLmFyYygwLDAscCx3LFMseCl9aWYobC5jbG9zZVBhdGgoKSxmKXJldHVybiBsPW51bGwsZisiInx8bnVsbH1yZXR1cm4gbyhoLCJhcmMiKSxoLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGY9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGQ9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXEwLzI7cmV0dXJuW0loKGQpKmYsRWwoZCkqZl19LGguaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6dH0saC5vdXRlclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkJuKCtmKSxoKTplfSxoLmNvcm5lclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkJuKCtmKSxoKTpyfSxoLnBhZFJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6bn0saC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Qm4oK2YpLGgpOml9LGguZW5kQW5nbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6YX0saC5wYWRBbmdsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkJuKCtmKSxoKTpzfSxoLmNvbnRleHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9Zj8/bnVsbCxoKTpsfSxofXZhciBvWT1OKCgpPT57InVzZSBzdHJpY3QiO0c1KCk7VTUoKTskRCgpO28odVNlLCJhcmNJbm5lclJhZGl1cyIpO28oaFNlLCJhcmNPdXRlclJhZGl1cyIpO28oZlNlLCJhcmNTdGFydEFuZ2xlIik7byhkU2UsImFyY0VuZEFuZ2xlIik7byhwU2UsImFyY1BhZEFuZ2xlIik7byhtU2UsImludGVyc2VjdCIpO28oVzUsImNvcm5lclRhbmdlbnRzIik7byhTbCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24genYodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX12YXIgeXh0LHpEPU4oKCk9PnsidXNlIHN0cmljdCI7eXh0PUFycmF5LnByb3RvdHlwZS5zbGljZTtvKHp2LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsWSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gU3UodCl7cmV0dXJuIG5ldyBsWSh0KX12YXIgR0Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGxZLCJMaW5lYXIiKTtsWS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWt9fSwicG9pbnQiKX07byhTdSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY1kodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gdVkodCl7cmV0dXJuIHRbMV19dmFyIGhZPU4oKCk9PnsidXNlIHN0cmljdCI7byhjWSwieCIpO28odVksInkiKX0pO2Z1bmN0aW9uIENsKHQsZSl7dmFyIHI9Qm4oITApLG49bnVsbCxpPVN1LGE9bnVsbCxzPUg1KGwpO3Q9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0PT09dm9pZCAwP2NZOkJuKHQpLGU9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT09dm9pZCAwP3VZOkJuKGUpO2Z1bmN0aW9uIGwodSl7dmFyIGgsZj0odT16dih1KSkubGVuZ3RoLGQscD0hMSxtO2ZvcihuPT1udWxsJiYoYT1pKG09cygpKSksaD0wO2g8PWY7KytoKSEoaDxmJiZyKGQ9dVtoXSxoLHUpKT09PXAmJigocD0hcCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSkscCYmYS5wb2ludCgrdChkLGgsdSksK2UoZCxoLHUpKTtpZihtKXJldHVybiBhPW51bGwsbSsiInx8bnVsbH1yZXR1cm4gbyhsLCJsaW5lIiksbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6Qm4oK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkJuKCt1KSxsKTplfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpCbighIXUpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dSxuIT1udWxsJiYoYT1pKG4pKSxsKTppfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bj1hPW51bGw6YT1pKG49dSksbCk6bn0sbH12YXIgZlk9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6RCgpO0c1KCk7R0QoKTskRCgpO2hZKCk7byhDbCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVkQodCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIGRZPU4oKCk9PnsidXNlIHN0cmljdCI7byhWRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVUQodCl7cmV0dXJuIHR9dmFyIHBZPU4oKCk9PnsidXNlIHN0cmljdCI7byhVRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcTUoKXt2YXIgdD1VRCxlPVZELHI9bnVsbCxuPUJuKDApLGk9Qm4oWTApLGE9Qm4oMCk7ZnVuY3Rpb24gcyhsKXt2YXIgdSxoPShsPXp2KGwpKS5sZW5ndGgsZixkLHA9MCxtPW5ldyBBcnJheShoKSxnPW5ldyBBcnJheShoKSx5PStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKFkwLE1hdGgubWF4KC1ZMCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSkseCxiPU1hdGgubWluKE1hdGguYWJzKHYpL2gsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFQ9YioodjwwPy0xOjEpLFM7Zm9yKHU9MDt1PGg7Kyt1KShTPWdbbVt1XT11XT0rdChsW3VdLHUsbCkpPjAmJihwKz1TKTtmb3IoZSE9bnVsbD9tLnNvcnQoZnVuY3Rpb24odyxFKXtyZXR1cm4gZShnW3ddLGdbRV0pfSk6ciE9bnVsbCYmbS5zb3J0KGZ1bmN0aW9uKHcsRSl7cmV0dXJuIHIobFt3XSxsW0VdKX0pLHU9MCxkPXA/KHYtaCpUKS9wOjA7dTxoOysrdSx5PXgpZj1tW3VdLFM9Z1tmXSx4PXkrKFM+MD9TKmQ6MCkrVCxnW2ZdPXtkYXRhOmxbZl0saW5kZXg6dSx2YWx1ZTpTLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTp4LHBhZEFuZ2xlOmJ9O3JldHVybiBnfXJldHVybiBvKHMsInBpZSIpLHMudmFsdWU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpCbigrbCkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWwscj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sLGU9bnVsbCxzKTpyfSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpCbigrbCkscyk6bn0scy5lbmRBbmdsZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOkJuKCtsKSxzKTppfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Qm4oK2wpLHMpOmF9LHN9dmFyIG1ZPU4oKCk9PnsidXNlIHN0cmljdCI7ekQoKTtHNSgpO2RZKCk7cFkoKTtVNSgpO28ocTUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEd2KHQpe3JldHVybiBuZXcgWTUodCwhMCl9ZnVuY3Rpb24gVnYodCl7cmV0dXJuIG5ldyBZNSh0LCExKX12YXIgWTUsZ1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZNT1jbGFzc3tzdGF0aWN7byh0aGlzLCJCdW1wIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9jb250ZXh0PWUsdGhpcy5feD1yfWFyZWFTdGFydCgpe3RoaXMuX2xpbmU9MH1hcmVhRW5kKCl7dGhpcy5fbGluZT1OYU59bGluZVN0YXJ0KCl7dGhpcy5fcG9pbnQ9MH1saW5lRW5kKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfXBvaW50KGUscil7c3dpdGNoKGU9K2Uscj0rcix0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrfWNhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e3RoaXMuX3g/dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwPSh0aGlzLl94MCtlKS8yLHRoaXMuX3kwLHRoaXMuX3gwLHIsZSxyKTp0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsdGhpcy5feTA9KHRoaXMuX3kwK3IpLzIsZSx0aGlzLl95MCxlLHIpO2JyZWFrfX10aGlzLl94MD1lLHRoaXMuX3kwPXJ9fTtvKEd2LCJidW1wWCIpO28oVnYsImJ1bXBZIil9KTtmdW5jdGlvbiBybygpe312YXIgVXY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHJvLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBYMCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gSHYodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE5vKHQpe3JldHVybiBuZXcgSHYodCl9dmFyIFd2PU4oKCk9PnsidXNlIHN0cmljdCI7byhYMCwicG9pbnQiKTtvKEh2LCJCYXNpcyIpO0h2LnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6WDAodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OlgwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKE5vLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB5WSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWDUodCl7cmV0dXJuIG5ldyB5WSh0KX12YXIgdlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVdigpO1d2KCk7byh5WSwiQmFzaXNDbG9zZWQiKTt5WS5wcm90b3R5cGU9e2FyZWFTdGFydDpybyxhcmVhRW5kOnJvLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6WDAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28oWDUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHhZKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBqNSh0KXtyZXR1cm4gbmV3IHhZKHQpfXZhciBiWT1OKCgpPT57InVzZSBzdHJpY3QiO1d2KCk7byh4WSwiQmFzaXNPcGVuIik7eFkucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WDAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28oajUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFRZKHQsZSl7dGhpcy5fYmFzaXM9bmV3IEh2KHQpLHRoaXMuX2JldGE9ZX12YXIgSEQsd1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdigpO28oVFksIkJ1bmRsZSIpO1RZLnByb3RvdHlwZT17bGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj10WzBdLGk9ZVswXSxhPXRbcl0tbixzPWVbcl0taSxsPS0xLHU7KytsPD1yOyl1PWwvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKG4rdSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKGkrdSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9LCJwb2ludCIpfTtIRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT09PTE/bmV3IEh2KG4pOm5ldyBUWShuLGUpfXJldHVybiBvKHIsImJ1bmRsZSIpLHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguODUpfSk7ZnVuY3Rpb24gajAodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLXIpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBLNSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIHF2LFl2PU4oKCk9PnsidXNlIHN0cmljdCI7byhqMCwicG9pbnQiKTtvKEs1LCJDYXJkaW5hbCIpO0s1LnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpqMCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OmowKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtxdj1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IEs1KG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBRNSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIFdELHFEPU4oKCk9PnsidXNlIHN0cmljdCI7VXYoKTtZdigpO28oUTUsIkNhcmRpbmFsQ2xvc2VkIik7UTUucHJvdG90eXBlPXthcmVhU3RhcnQ6cm8sYXJlYUVuZDpybyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpqMCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07V0Q9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBRNShuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gWjUodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciBZRCxYRD1OKCgpPT57InVzZSBzdHJpY3QiO1l2KCk7byhaNSwiQ2FyZGluYWxPcGVuIik7WjUucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmowKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtZRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFo1KG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBYdih0LGUscil7dmFyIG49dC5feDEsaT10Ll95MSxhPXQuX3gyLHM9dC5feTI7aWYodC5fbDAxX2E+Wmkpe3ZhciBsPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qbC10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS91LGk9KGkqbC10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS91fWlmKHQuX2wyM19hPlppKXt2YXIgaD0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxmPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKmgrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9mLHM9KHMqaCt0Ll95MSp0Ll9sMjNfMmEtcip0Ll9sMTJfMmEpL2Z9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxhLHMsdC5feDIsdC5feTIpfWZ1bmN0aW9uIGtZKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9dmFyIGp2LEo1PU4oKCk9PnsidXNlIHN0cmljdCI7VTUoKTtZdigpO28oWHYsInBvaW50Iik7byhrWSwiQ2F0bXVsbFJvbSIpO2tZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Olh2KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07anY9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IGtZKG4sZSk6bmV3IEs1KG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gRVkodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX12YXIgakQsU1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxRCgpO1V2KCk7SjUoKTtvKEVZLCJDYXRtdWxsUm9tQ2xvc2VkIik7RVkucHJvdG90eXBlPXthcmVhU3RhcnQ6cm8sYXJlYUVuZDpybyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6WHYodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtqRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgRVkobixlKTpuZXcgUTUobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBDWSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXZhciBLRCxBWT1OKCgpPT57InVzZSBzdHJpY3QiO1hEKCk7SjUoKTtvKENZLCJDYXRtdWxsUm9tT3BlbiIpO0NZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WHYodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtLRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgQ1kobixlKTpuZXcgWjUobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBfWSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZVQodCl7cmV0dXJuIG5ldyBfWSh0KX12YXIgRFk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVdigpO28oX1ksIkxpbmVhckNsb3NlZCIpO19ZLnByb3RvdHlwZT17YXJlYVN0YXJ0OnJvLGFyZWFFbmQ6cm8sbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfSwicG9pbnQiKX07byhlVCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTFkodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIFJZKHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxzPShyLXQuX3kxKS8oaXx8bjwwJiYtMCksbD0oYSppK3MqbikvKG4raSk7cmV0dXJuKExZKGEpK0xZKHMpKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhzKSwuNSpNYXRoLmFicyhsKSl8fDB9ZnVuY3Rpb24gTlkodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIFFEKHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEscz10Ll95MSxsPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rbCxpK2wqZSxhLWwscy1sKnIsYSxzKX1mdW5jdGlvbiB0VCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gTVkodCl7dGhpcy5fY29udGV4dD1uZXcgSVkodCl9ZnVuY3Rpb24gSVkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEt2KHQpe3JldHVybiBuZXcgdFQodCl9ZnVuY3Rpb24gUXYodCl7cmV0dXJuIG5ldyBNWSh0KX12YXIgT1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKExZLCJzaWduIik7byhSWSwic2xvcGUzIik7byhOWSwic2xvcGUyIik7byhRRCwicG9pbnQiKTtvKHRULCJNb25vdG9uZVgiKTt0VC5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6UUQodGhpcyx0aGlzLl90MCxOWSh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYodD0rdCxlPStlLCEodD09PXRoaXMuX3gxJiZlPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLFFEKHRoaXMsTlkodGhpcyxyPVJZKHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpRRCh0aGlzLHRoaXMuX3QwLHI9UlkodGhpcyx0LGUpKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19LCJwb2ludCIpfTtvKE1ZLCJNb25vdG9uZVkiKTsoTVkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodFQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXt0VC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9O28oSVksIlJlZmxlY3RDb250ZXh0Iik7SVkucHJvdG90eXBlPXttb3ZlVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LCJtb3ZlVG8iKSxjbG9zZVBhdGg6byhmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJjbG9zZVBhdGgiKSxsaW5lVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LCJsaW5lVG8iKSxiZXppZXJDdXJ2ZVRvOm8oZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsaSl9LCJiZXppZXJDdXJ2ZVRvIil9O28oS3YsIm1vbm90b25lWCIpO28oUXYsIm1vbm90b25lWSIpfSk7ZnVuY3Rpb24gQlkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFBZKHQpe3ZhciBlLHI9dC5sZW5ndGgtMSxuLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsYVswXT0yLHNbMF09dFswXSsyKnRbMV0sZT0xO2U8ci0xOysrZSlpW2VdPTEsYVtlXT00LHNbZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW3ItMV09MixhW3ItMV09NyxzW3ItMV09OCp0W3ItMV0rdFtyXSxlPTE7ZTxyOysrZSluPWlbZV0vYVtlLTFdLGFbZV0tPW4sc1tlXS09bipzW2UtMV07Zm9yKGlbci0xXT1zW3ItMV0vYVtyLTFdLGU9ci0yO2U+PTA7LS1lKWlbZV09KHNbZV0taVtlKzFdKS9hW2VdO2ZvcihhW3ItMV09KHRbcl0raVtyLTFdKS8yLGU9MDtlPHItMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gSzAodCl7cmV0dXJuIG5ldyBCWSh0KX12YXIgRlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEJZLCJOYXR1cmFsIik7QlkucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIG49UFkodCksaT1QWShlKSxhPTAscz0xO3M8cjsrK2EsKytzKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW2FdLGlbMF1bYV0sblsxXVthXSxpWzFdW2FdLHRbc10sZVtzXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX0sInBvaW50Iil9O28oUFksImNvbnRyb2xQb2ludHMiKTtvKEswLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiByVCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PWV9ZnVuY3Rpb24gUTAodCl7cmV0dXJuIG5ldyByVCh0LC41KX1mdW5jdGlvbiBadih0KXtyZXR1cm4gbmV3IHJUKHQsMCl9ZnVuY3Rpb24gSnYodCl7cmV0dXJuIG5ldyByVCh0LDEpfXZhciAkWT1OKCgpPT57InVzZSBzdHJpY3QiO28oclQsIlN0ZXAiKTtyVC5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OntpZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX1icmVha319dGhpcy5feD10LHRoaXMuX3k9ZX0sInBvaW50Iil9O28oUTAsImRlZmF1bHQiKTtvKFp2LCJzdGVwQmVmb3JlIik7byhKdiwic3RlcEFmdGVyIil9KTt2YXIgelk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvWSgpO2ZZKCk7bVkoKTt2WSgpO2JZKCk7V3YoKTtnWSgpO3dZKCk7cUQoKTtYRCgpO1l2KCk7U1koKTtBWSgpO0o1KCk7RFkoKTtHRCgpO09ZKCk7RlkoKTskWSgpfSk7dmFyIEdZPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgVlk9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIE9oKHQsZSxyKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9cn1mdW5jdGlvbiBKRCh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIFpEO3JldHVybiB0Ll9fem9vbX12YXIgWkQsZTk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE9oLCJUcmFuc2Zvcm0iKTtPaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9oLHNjYWxlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0xP3RoaXM6bmV3IE9oKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSwic2NhbGUiKSx0cmFuc2xhdGU6byhmdW5jdGlvbih0LGUpe3JldHVybiB0PT09MCZlPT09MD90aGlzOm5ldyBPaCh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LCJ0cmFuc2xhdGUiKSxhcHBseTpvKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sImFwcGx5IiksYXBwbHlYOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sImFwcGx5WCIpLGFwcGx5WTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LCJhcHBseVkiKSxpbnZlcnQ6byhmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSwiaW52ZXJ0IiksaW52ZXJ0WDpvKGZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSwiaW52ZXJ0WCIpLGludmVydFk6byhmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30sImludmVydFkiKSxyZXNjYWxlWDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sInJlc2NhbGVYIikscmVzY2FsZVk6byhmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LCJyZXNjYWxlWSIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifSwidG9TdHJpbmciKX07WkQ9bmV3IE9oKDEsMCwwKTtKRC5wcm90b3R5cGU9T2gucHJvdG90eXBlO28oSkQsInRyYW5zZm9ybSIpfSk7dmFyIFVZPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgSFk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiNSgpO0dZKCk7VlkoKTtlOSgpO1VZKCl9KTt2YXIgV1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtIWSgpO2U5KCl9KTt2YXIgZnI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFaCgpO0pWKCk7dlcoKTt3VygpO0kwKCk7a1coKTtFVygpO1ZBKCk7SFUoKTtTVygpO0xfKCk7Q1coKTtfVygpO1lfKCk7VlcoKTtmcSgpO0IwKCk7T18oKTtkcSgpO0FXKCk7cHEoKTt0WSgpO2lZKCk7eWwoKTt6WSgpOyQ1KCk7SUQoKTtwNSgpO2I1KCk7V1koKX0pO3ZhciBxWT1QaShKaT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSmksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0ppLkJMQU5LX1VSTD1KaS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycz1KaS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleD1KaS51cmxTY2hlbWVSZWdleD1KaS5jdHJsQ2hhcmFjdGVyc1JlZ2V4PUppLmh0bWxDdHJsRW50aXR5UmVnZXg9SmkuaHRtbEVudGl0aWVzUmVnZXg9SmkuaW52YWxpZFByb3RvY29sUmVnZXg9dm9pZCAwO0ppLmludmFsaWRQcm90b2NvbFJlZ2V4PS9eKFteXHddKikoamF2YXNjcmlwdHxkYXRhfHZic2NyaXB0KS9pbTtKaS5odG1sRW50aXRpZXNSZWdleD0vJiMoXHcrKSheXHd8Oyk/L2c7SmkuaHRtbEN0cmxFbnRpdHlSZWdleD0vJihuZXdsaW5lfHRhYik7L2dpO0ppLmN0cmxDaGFyYWN0ZXJzUmVnZXg9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbTtKaS51cmxTY2hlbWVSZWdleD0vXi4rKDp8JmNvbG9uOykvZ2ltO0ppLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4PS8oXFx8JTVbY0NdKSgoJSg2W2VFXXw3Mnw3NCkpfFtucnRdKS9nO0ppLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzPVsiLiIsIi8iXTtKaS5CTEFOS19VUkw9ImFib3V0OmJsYW5rIn0pO3ZhciBaMD1QaShuVD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoblQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO25ULnNhbml0aXplVXJsPXZvaWQgMDt2YXIgTGE9cVkoKTtmdW5jdGlvbiBnU2UodCl7cmV0dXJuIExhLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzLmluZGV4T2YodFswXSk+LTF9byhnU2UsImlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2wiKTtmdW5jdGlvbiB5U2UodCl7dmFyIGU9dC5yZXBsYWNlKExhLmN0cmxDaGFyYWN0ZXJzUmVnZXgsIiIpO3JldHVybiBlLnJlcGxhY2UoTGEuaHRtbEVudGl0aWVzUmVnZXgsZnVuY3Rpb24ocixuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0pfW8oeVNlLCJkZWNvZGVIdG1sQ2hhcmFjdGVycyIpO2Z1bmN0aW9uIHZTZSh0KXtyZXR1cm4gVVJMLmNhblBhcnNlKHQpfW8odlNlLCJpc1ZhbGlkVXJsIik7ZnVuY3Rpb24gWVkodCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9Y2F0Y2h7cmV0dXJuIHR9fW8oWVksImRlY29kZVVSSSIpO2Z1bmN0aW9uIHhTZSh0KXtpZighdClyZXR1cm4gTGEuQkxBTktfVVJMO3ZhciBlLHI9WVkodC50cmltKCkpO2RvIHI9eVNlKHIpLnJlcGxhY2UoTGEuaHRtbEN0cmxFbnRpdHlSZWdleCwiIikucmVwbGFjZShMYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCIiKS5yZXBsYWNlKExhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4LCIiKS50cmltKCkscj1ZWShyKSxlPXIubWF0Y2goTGEuY3RybENoYXJhY3RlcnNSZWdleCl8fHIubWF0Y2goTGEuaHRtbEVudGl0aWVzUmVnZXgpfHxyLm1hdGNoKExhLmh0bWxDdHJsRW50aXR5UmVnZXgpfHxyLm1hdGNoKExhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4KTt3aGlsZShlJiZlLmxlbmd0aD4wKTt2YXIgbj1yO2lmKCFuKXJldHVybiBMYS5CTEFOS19VUkw7aWYoZ1NlKG4pKXJldHVybiBuO3ZhciBpPW4udHJpbVN0YXJ0KCksYT1pLm1hdGNoKExhLnVybFNjaGVtZVJlZ2V4KTtpZighYSlyZXR1cm4gbjt2YXIgcz1hWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2lmKExhLmludmFsaWRQcm90b2NvbFJlZ2V4LnRlc3QocykpcmV0dXJuIExhLkJMQU5LX1VSTDt2YXIgbD1pLnJlcGxhY2UoL1xcL2csIi8iKTtpZihzPT09Im1haWx0bzoifHxzLmluY2x1ZGVzKCI6Ly8iKSlyZXR1cm4gbDtpZihzPT09Imh0dHA6Inx8cz09PSJodHRwczoiKXtpZighdlNlKGwpKXJldHVybiBMYS5CTEFOS19VUkw7dmFyIHU9bmV3IFVSTChsKTtyZXR1cm4gdS5wcm90b2NvbD11LnByb3RvY29sLnRvTG93ZXJDYXNlKCksdS5ob3N0bmFtZT11Lmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksdS50b1N0cmluZygpfXJldHVybiBsfW8oeFNlLCJzYW5pdGl6ZVVybCIpO25ULnNhbml0aXplVXJsPXhTZX0pO3ZhciB0OSxOZCxpVCxYWSxqWSxLWSxBbCxlMix0Mj1OKCgpPT57InVzZSBzdHJpY3QiO3Q5PUFhKFowKCksMSk7cHIoKTtOZD1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoInJlY3QiKTtpZihyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksZS5uYW1lJiZyLmF0dHIoIm5hbWUiLGUubmFtZSksZS5yeCYmci5hdHRyKCJyeCIsZS5yeCksZS5yeSYmci5hdHRyKCJyeSIsZS5yeSksZS5hdHRycyE9PXZvaWQgMClmb3IobGV0IG4gaW4gZS5hdHRycylyLmF0dHIobixlLmF0dHJzW25dKTtyZXR1cm4gZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksaVQ9bygodCxlKT0+e2xldCByPXt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxzdHJva2U6ZS5zdHJva2UsY2xhc3M6InJlY3QifTtOZCh0LHIpLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxYWT1vKCh0LGUpPT57bGV0IHI9ZS50ZXh0LnJlcGxhY2UodWQsIiAiKSxuPXQuYXBwZW5kKCJ0ZXh0Iik7bi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImNsYXNzIiwibGVnZW5kIiksbi5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxlLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKTtsZXQgaT1uLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrZS50ZXh0TWFyZ2luKjIpLGkudGV4dChyKSxufSwiZHJhd1RleHQiKSxqWT1vKCh0LGUscixuKT0+e2xldCBpPXQuYXBwZW5kKCJpbWFnZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCx0OS5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixhKX0sImRyYXdJbWFnZSIpLEtZPW8oKHQsZSxyLG4pPT57bGV0IGk9dC5hcHBlbmQoInVzZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCx0OS5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixgIyR7YX1gKX0sImRyYXdFbWJlZGRlZEltYWdlIiksQWw9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsYW5jaG9yOiJzdGFydCIscng6MCxyeTowfSksImdldE5vdGVSZWN0IiksZTI9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IixzdHlsZToiIzY2NiIsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMH0pLCJnZXRUZXh0T2JqIil9KTt2YXIgUVkscjksWlksYlNlLFRTZSx3U2Usa1NlLEVTZSxTU2UsQ1NlLEFTZSxfU2UsRFNlLExTZSxSU2UsQ3UsX2wsSlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3QyKCk7UVk9QWEoWjAoKSwxKSxyOT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5kKHQsZSl9LCJkcmF3UmVjdCIpLFpZPW8oZnVuY3Rpb24odCxlLHIsbixpLGEpe2xldCBzPXQuYXBwZW5kKCJpbWFnZSIpO3MuYXR0cigid2lkdGgiLGUpLHMuYXR0cigiaGVpZ2h0IixyKSxzLmF0dHIoIngiLG4pLHMuYXR0cigieSIsaSk7bGV0IGw9YS5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT9hOigwLFFZLnNhbml0aXplVXJsKShhKTtzLmF0dHIoInhsaW5rOmhyZWYiLGwpfSwiZHJhd0ltYWdlIiksYlNlPW8oKHQsZSxyKT0+e2xldCBuPXQuYXBwZW5kKCJnIiksaT0wO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz1hLnRleHRDb2xvcj9hLnRleHRDb2xvcjoiIzQ0NDQ0NCIsbD1hLmxpbmVDb2xvcj9hLmxpbmVDb2xvcjoiIzQ0NDQ0NCIsdT1hLm9mZnNldFg/cGFyc2VJbnQoYS5vZmZzZXRYKTowLGg9YS5vZmZzZXRZP3BhcnNlSW50KGEub2Zmc2V0WSk6MCxmPSIiO2lmKGk9PT0wKXtsZXQgcD1uLmFwcGVuZCgibGluZSIpO3AuYXR0cigieDEiLGEuc3RhcnRQb2ludC54KSxwLmF0dHIoInkxIixhLnN0YXJ0UG9pbnQueSkscC5hdHRyKCJ4MiIsYS5lbmRQb2ludC54KSxwLmF0dHIoInkyIixhLmVuZFBvaW50LnkpLHAuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLHAuYXR0cigic3Ryb2tlIixsKSxwLnN0eWxlKCJmaWxsIiwibm9uZSIpLGEudHlwZSE9PSJyZWxfYiImJnAuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiNhcnJvd2hlYWQpIiksKGEudHlwZT09PSJiaXJlbCJ8fGEudHlwZT09PSJyZWxfYiIpJiZwLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiNhcnJvd2VuZCkiKSxpPS0xfWVsc2V7bGV0IHA9bi5hcHBlbmQoInBhdGgiKTtwLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLmF0dHIoInN0cm9rZSIsbCkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5IFFjb250cm9seCxjb250cm9seSBzdG9weCxzdG9weSAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS5zdGFydFBvaW50LngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS5zdGFydFBvaW50LnkpLnJlcGxhY2VBbGwoImNvbnRyb2x4IixhLnN0YXJ0UG9pbnQueCsoYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS8yLShhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzQpLnJlcGxhY2VBbGwoImNvbnRyb2x5IixhLnN0YXJ0UG9pbnQueSsoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yKS5yZXBsYWNlQWxsKCJzdG9weCIsYS5lbmRQb2ludC54KS5yZXBsYWNlQWxsKCJzdG9weSIsYS5lbmRQb2ludC55KSksYS50eXBlIT09InJlbF9iIiYmcC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZisiI2Fycm93aGVhZCkiKSwoYS50eXBlPT09ImJpcmVsInx8YS50eXBlPT09InJlbF9iIikmJnAuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZisiI2Fycm93ZW5kKSIpfWxldCBkPXIubWVzc2FnZUZvbnQoKTtDdShyKShhLmxhYmVsLnRleHQsbixNYXRoLm1pbihhLnN0YXJ0UG9pbnQueCxhLmVuZFBvaW50LngpK01hdGguYWJzKGEuZW5kUG9pbnQueC1hLnN0YXJ0UG9pbnQueCkvMit1LE1hdGgubWluKGEuc3RhcnRQb2ludC55LGEuZW5kUG9pbnQueSkrTWF0aC5hYnMoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yK2gsYS5sYWJlbC53aWR0aCxhLmxhYmVsLmhlaWdodCx7ZmlsbDpzfSxkKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGQ9ci5tZXNzYWdlRm9udCgpLEN1KHIpKCJbIithLnRlY2huLnRleHQrIl0iLG4sTWF0aC5taW4oYS5zdGFydFBvaW50LngsYS5lbmRQb2ludC54KStNYXRoLmFicyhhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzIrdSxNYXRoLm1pbihhLnN0YXJ0UG9pbnQueSxhLmVuZFBvaW50LnkpK01hdGguYWJzKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMityLm1lc3NhZ2VGb250U2l6ZSs1K2gsTWF0aC5tYXgoYS5sYWJlbC53aWR0aCxhLnRlY2huLndpZHRoKSxhLnRlY2huLmhlaWdodCx7ZmlsbDpzLCJmb250LXN0eWxlIjoiaXRhbGljIn0sZCkpfX0sImRyYXdSZWxzIiksVFNlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuYXBwZW5kKCJnIiksaT1lLmJnQ29sb3I/ZS5iZ0NvbG9yOiJub25lIixhPWUuYm9yZGVyQ29sb3I/ZS5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIscz1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiYmxhY2siLGw9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07ZS5ub2RlVHlwZSYmKGw9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgdT17eDplLngseTplLnksZmlsbDppLHN0cm9rZTphLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6bH07cjkobix1KTtsZXQgaD1yLmJvdW5kYXJ5Rm9udCgpO2guZm9udFdlaWdodD0iYm9sZCIsaC5mb250U2l6ZT1oLmZvbnRTaXplKzIsaC5mb250Q29sb3I9cyxDdShyKShlLmxhYmVsLnRleHQsbixlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCksZS50eXBlJiZlLnR5cGUudGV4dCE9PSIiJiYoaD1yLmJvdW5kYXJ5Rm9udCgpLGguZm9udENvbG9yPXMsQ3UocikoZS50eXBlLnRleHQsbixlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxoKSksZS5kZXNjciYmZS5kZXNjci50ZXh0IT09IiImJihoPXIuYm91bmRhcnlGb250KCksaC5mb250U2l6ZT1oLmZvbnRTaXplLTIsaC5mb250Q29sb3I9cyxDdShyKShlLmRlc2NyLnRleHQsbixlLngsZS55K2UuZGVzY3IuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCkpfSwiZHJhd0JvdW5kYXJ5Iiksd1NlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWUuYmdDb2xvcj9lLmJnQ29sb3I6cltlLnR5cGVDNFNoYXBlLnRleHQrIl9iZ19jb2xvciJdLGk9ZS5ib3JkZXJDb2xvcj9lLmJvcmRlckNvbG9yOnJbZS50eXBlQzRTaGFwZS50ZXh0KyJfYm9yZGVyX2NvbG9yIl0sYT1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiI0ZGRkZGRiIscz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7c3dpdGNoKGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOnM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrO2Nhc2UiZXh0ZXJuYWxfcGVyc29uIjpzPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFCNkVsRVFWUjRYdTJZTFkrRU1CQ0c5K2RXcjBhajBXZzBHbzFHbzArajhYZHYydVRDdnYxZ3B0MGViSEtQdWhEYWVXNDYwNVo5bUp2eDRBZFhVeVRVZGQwOHordTZmbG1XWlJuSHNXa2FmazlEcHRBd0RQdStmMGVBWXR1MlBFYUdXdWo1ZkNJWnJCQUMyZUxCQW5SQ3NFa2t4bWVhSnA3aURKMlFNRGRIc0xnOFN4S0ZFSmFBbzhsQVhubXVPRkloVE1weHhLQVRlYm80VWlGa251Tm80T25pU0lYUXlSeEVBM1lzbmpHQ1ZFalZYRDd5TFVBcXhCR1V5UHYvWTRXMmJlTWdHdVM3a1ZRSUJ5Y0gwZkQrb2k1cGV6UUVUeGRIS21RS0drMWVRRVlsZEsranc1R3hQZlo5ejdNazBRbmhmMVcxbTN3Ly9FVW41QkRtU1pzYlI0NFFRTEJFcXJCSHFPcm1TS2FRQXhkbkxBckNyeFpjTTdBN1pLczRpb1JxOExGQytOcEMzV0NCSnN2cFZ3NWVkbTlpRVhGdXlOZnhYQWdTd2ZyRlExYzBpTmRhOEFkZWp2VWdua3RPdEpRUXhtY2ZGekdnbGM1V1ZDajdvRGdGcVUxOGJvZUZTczUyQ1VoOExFOEJJVlFEVDFBQnJCMEh0Z1NFWWxYNWRvSm5Dd3Y5VFhvY0tDYUtibndoZERLUHE0bGYzU3dVM0hMcTRWLytXWWhIVk1hLzNiNElsZnlpa0FkdUNrY0JjN21RMy96L1FxL2NUdWlraGt6QjEyQWUvbWNKQzlVK1ZvOEVqMWdXQXRnYmVHZ0ZzQU1IcjUwQklXT0xDYmV6dmhwQkZVZFk2RUp1Si9RRFcwWG9NWDYwelowQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrfWxldCBsPXQuYXBwZW5kKCJnIik7bC5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtsZXQgdT1BbCgpO3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Y2FzZSJzeXN0ZW0iOmNhc2UiZXh0ZXJuYWxfc3lzdGVtIjpjYXNlImNvbnRhaW5lciI6Y2FzZSJleHRlcm5hbF9jb250YWluZXIiOmNhc2UiY29tcG9uZW50IjpjYXNlImV4dGVybmFsX2NvbXBvbmVudCI6dS54PWUueCx1Lnk9ZS55LHUuZmlsbD1uLHUud2lkdGg9ZS53aWR0aCx1LmhlaWdodD1lLmhlaWdodCx1LnN0cm9rZT1pLHUucng9Mi41LHUucnk9Mi41LHUuYXR0cnM9eyJzdHJva2Utd2lkdGgiOi41fSxyOShsLHUpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOmwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsbikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIsZS5oZWlnaHQpKSxsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjpsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLG4pLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJ3aWR0aCIsZS53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIsZS5oZWlnaHQvMikpLGwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngrZS53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixlLnkpLnJlcGxhY2VBbGwoImhhbGYiLGUuaGVpZ2h0LzIpKTticmVha31sZXQgaD1SU2UocixlLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLGEpLmF0dHIoImZvbnQtZmFtaWx5IixoLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsaC5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLGUudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLGUueCtlLndpZHRoLzItZS50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixlLnkrZS50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrZS50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpaWShsLDQ4LDQ4LGUueCtlLndpZHRoLzItMjQsZS55K2UuaW1hZ2UuWSxzKTticmVha31sZXQgZj1yW2UudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCk7cmV0dXJuIGYuZm9udFdlaWdodD0iYm9sZCIsZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250Q29sb3I9YSxDdShyKShlLmxhYmVsLnRleHQsbCxlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmF9LGYpLGY9cltlLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpLGYuZm9udENvbG9yPWEsZS50ZWNobiYmZS50ZWNobj8udGV4dCE9PSIiP0N1KHIpKGUudGVjaG4udGV4dCxsLGUueCxlLnkrZS50ZWNobi5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpOmUudHlwZSYmZS50eXBlLnRleHQhPT0iIiYmQ3UocikoZS50eXBlLnRleHQsbCxlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpLGUuZGVzY3ImJmUuZGVzY3IudGV4dCE9PSIiJiYoZj1yLnBlcnNvbkZvbnQoKSxmLmZvbnRDb2xvcj1hLEN1KHIpKGUuZGVzY3IudGV4dCxsLGUueCxlLnkrZS5kZXNjci5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YX0sZikpLGUuaGVpZ2h0fSwiZHJhd0M0U2hhcGUiKSxrU2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0sImluc2VydERhdGFiYXNlSWNvbiIpLEVTZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LCJpbnNlcnRDb21wdXRlckljb24iKSxTU2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSwiaW5zZXJ0Q2xvY2tJY29uIiksQ1NlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sImluc2VydEFycm93SGVhZCIpLEFTZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93ZW5kIikuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0VuZCIpLF9TZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxEU2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnREeW5hbWljTnVtYmVyIiksTFNlPW8oZnVuY3Rpb24odCl7bGV0IHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksUlNlPW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJnZXRDNFNoYXBlRm9udCIpLEN1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmKXtsZXQgZD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7Zm9udFNpemU6cCxmb250RmFtaWx5Om0sZm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChaZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixwKS5zdHlsZSgiZm9udC13ZWlnaHQiLGcpLnN0eWxlKCJmb250LWZhbWlseSIsbSk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWF0aGVtYXRpY2FsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksX2w9e2RyYXdSZWN0OnI5LGRyYXdCb3VuZGFyeTpUU2UsZHJhd0M0U2hhcGU6d1NlLGRyYXdSZWxzOmJTZSxkcmF3SW1hZ2U6WlksaW5zZXJ0QXJyb3dIZWFkOkNTZSxpbnNlcnRBcnJvd0VuZDpBU2UsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOl9TZSxpbnNlcnREeW5hbWljTnVtYmVyOkRTZSxpbnNlcnRBcnJvd0Nyb3NzSGVhZDpMU2UsaW5zZXJ0RGF0YWJhc2VJY29uOmtTZSxpbnNlcnRDb21wdXRlckljb246RVNlLGluc2VydENsb2NrSWNvbjpTU2V9fSk7dmFyIE5TZSxzVCxuOT1OKCgpPT57InVzZSBzdHJpY3QiO05TZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsc1Q9TlNlfSk7dmFyIE1TZSxJU2UsaGksTW89TigoKT0+eyJ1c2Ugc3RyaWN0IjtuOSgpO01TZT10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLElTZT1zVHx8TVNlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGhpPUlTZX0pO3ZhciBPU2UsZWEsTWQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNbygpO09TZT1oaS5TeW1ib2wsZWE9T1NlfSk7ZnVuY3Rpb24gRlNlKHQpe3ZhciBlPVBTZS5jYWxsKHQscjIpLHI9dFtyMl07dHJ5e3RbcjJdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaHt9dmFyIGk9QlNlLmNhbGwodCk7cmV0dXJuIG4mJihlP3RbcjJdPXI6ZGVsZXRlIHRbcjJdKSxpfXZhciBlWCxQU2UsQlNlLHIyLHRYLHJYPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtlWD1PYmplY3QucHJvdG90eXBlLFBTZT1lWC5oYXNPd25Qcm9wZXJ0eSxCU2U9ZVgudG9TdHJpbmcscjI9ZWE/ZWEudG9TdHJpbmdUYWc6dm9pZCAwO28oRlNlLCJnZXRSYXdUYWciKTt0WD1GU2V9KTtmdW5jdGlvbiBHU2UodCl7cmV0dXJuIHpTZS5jYWxsKHQpfXZhciAkU2UselNlLG5YLGlYPU4oKCk9PnsidXNlIHN0cmljdCI7JFNlPU9iamVjdC5wcm90b3R5cGUselNlPSRTZS50b1N0cmluZztvKEdTZSwib2JqZWN0VG9TdHJpbmciKTtuWD1HU2V9KTtmdW5jdGlvbiBIU2UodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD9VU2U6VlNlOmFYJiZhWCBpbiBPYmplY3QodCk/dFgodCk6blgodCl9dmFyIFZTZSxVU2UsYVgsZmEsQXU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNZCgpO3JYKCk7aVgoKTtWU2U9IltvYmplY3QgTnVsbF0iLFVTZT0iW29iamVjdCBVbmRlZmluZWRdIixhWD1lYT9lYS50b1N0cmluZ1RhZzp2b2lkIDA7byhIU2UsImJhc2VHZXRUYWciKTtmYT1IU2V9KTtmdW5jdGlvbiBXU2UodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9dmFyIGJuLG5vPU4oKCk9PnsidXNlIHN0cmljdCI7byhXU2UsImlzT2JqZWN0Iik7Ym49V1NlfSk7ZnVuY3Rpb24gS1NlKHQpe2lmKCFibih0KSlyZXR1cm4hMTt2YXIgZT1mYSh0KTtyZXR1cm4gZT09WVNlfHxlPT1YU2V8fGU9PXFTZXx8ZT09alNlfXZhciBxU2UsWVNlLFhTZSxqU2UsQWksbjI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdSgpO25vKCk7cVNlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixZU2U9IltvYmplY3QgRnVuY3Rpb25dIixYU2U9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixqU2U9IltvYmplY3QgUHJveHldIjtvKEtTZSwiaXNGdW5jdGlvbiIpO0FpPUtTZX0pO3ZhciBRU2Usb1Qsc1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNbygpO1FTZT1oaVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sb1Q9UVNlfSk7ZnVuY3Rpb24gWlNlKHQpe3JldHVybiEhb1gmJm9YIGluIHR9dmFyIG9YLGxYLGNYPU4oKCk9PnsidXNlIHN0cmljdCI7c1goKTtvWD1mdW5jdGlvbigpe3ZhciB0PS9bXi5dKyQvLmV4ZWMob1QmJm9ULmtleXMmJm9ULmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gdD8iU3ltYm9sKHNyYylfMS4iK3Q6IiJ9KCk7byhaU2UsImlzTWFza2VkIik7bFg9WlNlfSk7ZnVuY3Rpb24gdDZlKHQpe2lmKHQhPW51bGwpe3RyeXtyZXR1cm4gZTZlLmNhbGwodCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaHt9fXJldHVybiIifXZhciBKU2UsZTZlLF91LGk5PU4oKCk9PnsidXNlIHN0cmljdCI7SlNlPUZ1bmN0aW9uLnByb3RvdHlwZSxlNmU9SlNlLnRvU3RyaW5nO28odDZlLCJ0b1NvdXJjZSIpO191PXQ2ZX0pO2Z1bmN0aW9uIGM2ZSh0KXtpZighYm4odCl8fGxYKHQpKXJldHVybiExO3ZhciBlPUFpKHQpP2w2ZTpuNmU7cmV0dXJuIGUudGVzdChfdSh0KSl9dmFyIHI2ZSxuNmUsaTZlLGE2ZSxzNmUsbzZlLGw2ZSx1WCxoWD1OKCgpPT57InVzZSBzdHJpY3QiO24yKCk7Y1goKTtubygpO2k5KCk7cjZlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxuNmU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8saTZlPUZ1bmN0aW9uLnByb3RvdHlwZSxhNmU9T2JqZWN0LnByb3RvdHlwZSxzNmU9aTZlLnRvU3RyaW5nLG82ZT1hNmUuaGFzT3duUHJvcGVydHksbDZlPVJlZ0V4cCgiXiIrczZlLmNhbGwobzZlKS5yZXBsYWNlKHI2ZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtvKGM2ZSwiYmFzZUlzTmF0aXZlIik7dVg9YzZlfSk7ZnVuY3Rpb24gdTZlKHQsZSl7cmV0dXJuIHQ/LltlXX12YXIgZlgsZFg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHU2ZSwiZ2V0VmFsdWUiKTtmWD11NmV9KTtmdW5jdGlvbiBoNmUodCxlKXt2YXIgcj1mWCh0LGUpO3JldHVybiB1WChyKT9yOnZvaWQgMH12YXIgTHMsUGg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoWCgpO2RYKCk7byhoNmUsImdldE5hdGl2ZSIpO0xzPWg2ZX0pO3ZhciBmNmUsRHUsaTI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQaCgpO2Y2ZT1McyhPYmplY3QsImNyZWF0ZSIpLER1PWY2ZX0pO2Z1bmN0aW9uIGQ2ZSgpe3RoaXMuX19kYXRhX189RHU/RHUobnVsbCk6e30sdGhpcy5zaXplPTB9dmFyIHBYLG1YPU4oKCk9PnsidXNlIHN0cmljdCI7aTIoKTtvKGQ2ZSwiaGFzaENsZWFyIik7cFg9ZDZlfSk7ZnVuY3Rpb24gcDZlKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciBnWCx5WD1OKCgpPT57InVzZSBzdHJpY3QiO28ocDZlLCJoYXNoRGVsZXRlIik7Z1g9cDZlfSk7ZnVuY3Rpb24gdjZlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoRHUpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1tNmU/dm9pZCAwOnJ9cmV0dXJuIHk2ZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9dmFyIG02ZSxnNmUseTZlLHZYLHhYPU4oKCk9PnsidXNlIHN0cmljdCI7aTIoKTttNmU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLGc2ZT1PYmplY3QucHJvdG90eXBlLHk2ZT1nNmUuaGFzT3duUHJvcGVydHk7byh2NmUsImhhc2hHZXQiKTt2WD12NmV9KTtmdW5jdGlvbiBUNmUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gRHU/ZVt0XSE9PXZvaWQgMDpiNmUuY2FsbChlLHQpfXZhciB4NmUsYjZlLGJYLFRYPU4oKCk9PnsidXNlIHN0cmljdCI7aTIoKTt4NmU9T2JqZWN0LnByb3RvdHlwZSxiNmU9eDZlLmhhc093blByb3BlcnR5O28oVDZlLCJoYXNoSGFzIik7Ylg9VDZlfSk7ZnVuY3Rpb24gazZlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1EdSYmZT09PXZvaWQgMD93NmU6ZSx0aGlzfXZhciB3NmUsd1gsa1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtpMigpO3c2ZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhrNmUsImhhc2hTZXQiKTt3WD1rNmV9KTtmdW5jdGlvbiBKMCh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX12YXIgYTksRVg9TigoKT0+eyJ1c2Ugc3RyaWN0IjttWCgpO3lYKCk7eFgoKTtUWCgpO2tYKCk7byhKMCwiSGFzaCIpO0owLnByb3RvdHlwZS5jbGVhcj1wWDtKMC5wcm90b3R5cGUuZGVsZXRlPWdYO0owLnByb3RvdHlwZS5nZXQ9dlg7SjAucHJvdG90eXBlLmhhcz1iWDtKMC5wcm90b3R5cGUuc2V0PXdYO2E5PUowfSk7ZnVuY3Rpb24gRTZlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgU1gsQ1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEU2ZSwibGlzdENhY2hlQ2xlYXIiKTtTWD1FNmV9KTtmdW5jdGlvbiBTNmUodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX12YXIgSW8sSWQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFM2ZSwiZXEiKTtJbz1TNmV9KTtmdW5jdGlvbiBDNmUodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihJbyh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciBCaCxhMj1OKCgpPT57InVzZSBzdHJpY3QiO0lkKCk7byhDNmUsImFzc29jSW5kZXhPZiIpO0JoPUM2ZX0pO2Z1bmN0aW9uIEQ2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9QmgoZSx0KTtpZihyPDApcmV0dXJuITE7dmFyIG49ZS5sZW5ndGgtMTtyZXR1cm4gcj09bj9lLnBvcCgpOl82ZS5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgQTZlLF82ZSxBWCxfWD1OKCgpPT57InVzZSBzdHJpY3QiO2EyKCk7QTZlPUFycmF5LnByb3RvdHlwZSxfNmU9QTZlLnNwbGljZTtvKEQ2ZSwibGlzdENhY2hlRGVsZXRlIik7QVg9RDZlfSk7ZnVuY3Rpb24gTDZlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1CaChlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19dmFyIERYLExYPU4oKCk9PnsidXNlIHN0cmljdCI7YTIoKTtvKEw2ZSwibGlzdENhY2hlR2V0Iik7RFg9TDZlfSk7ZnVuY3Rpb24gUjZlKHQpe3JldHVybiBCaCh0aGlzLl9fZGF0YV9fLHQpPi0xfXZhciBSWCxOWD1OKCgpPT57InVzZSBzdHJpY3QiO2EyKCk7byhSNmUsImxpc3RDYWNoZUhhcyIpO1JYPVI2ZX0pO2Z1bmN0aW9uIE42ZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1CaChyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfXZhciBNWCxJWD1OKCgpPT57InVzZSBzdHJpY3QiO2EyKCk7byhONmUsImxpc3RDYWNoZVNldCIpO01YPU42ZX0pO2Z1bmN0aW9uIGVtKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fXZhciBGaCxzMj1OKCgpPT57InVzZSBzdHJpY3QiO0NYKCk7X1goKTtMWCgpO05YKCk7SVgoKTtvKGVtLCJMaXN0Q2FjaGUiKTtlbS5wcm90b3R5cGUuY2xlYXI9U1g7ZW0ucHJvdG90eXBlLmRlbGV0ZT1BWDtlbS5wcm90b3R5cGUuZ2V0PURYO2VtLnByb3RvdHlwZS5oYXM9Ulg7ZW0ucHJvdG90eXBlLnNldD1NWDtGaD1lbX0pO3ZhciBNNmUsJGgsbFQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQaCgpO01vKCk7TTZlPUxzKGhpLCJNYXAiKSwkaD1NNmV9KTtmdW5jdGlvbiBJNmUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBhOSxtYXA6bmV3KCRofHxGaCksc3RyaW5nOm5ldyBhOX19dmFyIE9YLFBYPU4oKCk9PnsidXNlIHN0cmljdCI7RVgoKTtzMigpO2xUKCk7byhJNmUsIm1hcENhY2hlQ2xlYXIiKTtPWD1JNmV9KTtmdW5jdGlvbiBPNmUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIGU9PSJzdHJpbmcifHxlPT0ibnVtYmVyInx8ZT09InN5bWJvbCJ8fGU9PSJib29sZWFuIj90IT09Il9fcHJvdG9fXyI6dD09PW51bGx9dmFyIEJYLEZYPU4oKCk9PnsidXNlIHN0cmljdCI7byhPNmUsImlzS2V5YWJsZSIpO0JYPU82ZX0pO2Z1bmN0aW9uIFA2ZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIEJYKGUpP3JbdHlwZW9mIGU9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ci5tYXB9dmFyIHpoLG8yPU4oKCk9PnsidXNlIHN0cmljdCI7RlgoKTtvKFA2ZSwiZ2V0TWFwRGF0YSIpO3poPVA2ZX0pO2Z1bmN0aW9uIEI2ZSh0KXt2YXIgZT16aCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciAkWCx6WD1OKCgpPT57InVzZSBzdHJpY3QiO28yKCk7byhCNmUsIm1hcENhY2hlRGVsZXRlIik7JFg9QjZlfSk7ZnVuY3Rpb24gRjZlKHQpe3JldHVybiB6aCh0aGlzLHQpLmdldCh0KX12YXIgR1gsVlg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvMigpO28oRjZlLCJtYXBDYWNoZUdldCIpO0dYPUY2ZX0pO2Z1bmN0aW9uICQ2ZSh0KXtyZXR1cm4gemgodGhpcyx0KS5oYXModCl9dmFyIFVYLEhYPU4oKCk9PnsidXNlIHN0cmljdCI7bzIoKTtvKCQ2ZSwibWFwQ2FjaGVIYXMiKTtVWD0kNmV9KTtmdW5jdGlvbiB6NmUodCxlKXt2YXIgcj16aCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfXZhciBXWCxxWD1OKCgpPT57InVzZSBzdHJpY3QiO28yKCk7byh6NmUsIm1hcENhY2hlU2V0Iik7V1g9ejZlfSk7ZnVuY3Rpb24gdG0odCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19dmFyIE9kLGNUPU4oKCk9PnsidXNlIHN0cmljdCI7UFgoKTt6WCgpO1ZYKCk7SFgoKTtxWCgpO28odG0sIk1hcENhY2hlIik7dG0ucHJvdG90eXBlLmNsZWFyPU9YO3RtLnByb3RvdHlwZS5kZWxldGU9JFg7dG0ucHJvdG90eXBlLmdldD1HWDt0bS5wcm90b3R5cGUuaGFzPVVYO3RtLnByb3RvdHlwZS5zZXQ9V1g7T2Q9dG19KTtmdW5jdGlvbiBzOSh0LGUpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24ifHxlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEc2ZSk7dmFyIHI9byhmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sYT1yLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgcz10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9YS5zZXQoaSxzKXx8YSxzfSwibWVtb2l6ZWQiKTtyZXR1cm4gci5jYWNoZT1uZXcoczkuQ2FjaGV8fE9kKSxyfXZhciBHNmUscm0sbzk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjVCgpO0c2ZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhzOSwibWVtb2l6ZSIpO3M5LkNhY2hlPU9kO3JtPXM5fSk7ZnVuY3Rpb24gVjZlKCl7dGhpcy5fX2RhdGFfXz1uZXcgRmgsdGhpcy5zaXplPTB9dmFyIFlYLFhYPU4oKCk9PnsidXNlIHN0cmljdCI7czIoKTtvKFY2ZSwic3RhY2tDbGVhciIpO1lYPVY2ZX0pO2Z1bmN0aW9uIFU2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn12YXIgalgsS1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFU2ZSwic3RhY2tEZWxldGUiKTtqWD1VNmV9KTtmdW5jdGlvbiBINmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfXZhciBRWCxaWD1OKCgpPT57InVzZSBzdHJpY3QiO28oSDZlLCJzdGFja0dldCIpO1FYPUg2ZX0pO2Z1bmN0aW9uIFc2ZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIEpYLGVqPU4oKCk9PnsidXNlIHN0cmljdCI7byhXNmUsInN0YWNrSGFzIik7Slg9VzZlfSk7ZnVuY3Rpb24gWTZlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgRmgpe3ZhciBuPXIuX19kYXRhX187aWYoISRofHxuLmxlbmd0aDxxNmUtMSlyZXR1cm4gbi5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IE9kKG4pfXJldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZT1yLnNpemUsdGhpc312YXIgcTZlLHRqLHJqPU4oKCk9PnsidXNlIHN0cmljdCI7czIoKTtsVCgpO2NUKCk7cTZlPTIwMDtvKFk2ZSwic3RhY2tTZXQiKTt0aj1ZNmV9KTtmdW5jdGlvbiBubSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyBGaCh0KTt0aGlzLnNpemU9ZS5zaXplfXZhciBkYyxsMj1OKCgpPT57InVzZSBzdHJpY3QiO3MyKCk7WFgoKTtLWCgpO1pYKCk7ZWooKTtyaigpO28obm0sIlN0YWNrIik7bm0ucHJvdG90eXBlLmNsZWFyPVlYO25tLnByb3RvdHlwZS5kZWxldGU9alg7bm0ucHJvdG90eXBlLmdldD1RWDtubS5wcm90b3R5cGUuaGFzPUpYO25tLnByb3RvdHlwZS5zZXQ9dGo7ZGM9bm19KTt2YXIgWDZlLGltLGw5PU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtYNmU9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9THMoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoe319KCksaW09WDZlfSk7ZnVuY3Rpb24gajZlKHQsZSxyKXtlPT0iX19wcm90b19fIiYmaW0/aW0odCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6dFtlXT1yfXZhciBwYyxhbT1OKCgpPT57InVzZSBzdHJpY3QiO2w5KCk7byhqNmUsImJhc2VBc3NpZ25WYWx1ZSIpO3BjPWo2ZX0pO2Z1bmN0aW9uIEs2ZSh0LGUscil7KHIhPT12b2lkIDAmJiFJbyh0W2VdLHIpfHxyPT09dm9pZCAwJiYhKGUgaW4gdCkpJiZwYyh0LGUscil9dmFyIGMyLGM5PU4oKCk9PnsidXNlIHN0cmljdCI7YW0oKTtJZCgpO28oSzZlLCJhc3NpZ25NZXJnZVZhbHVlIik7YzI9SzZlfSk7ZnVuY3Rpb24gUTZlKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLHM9bihlKSxsPXMubGVuZ3RoO2wtLTspe3ZhciB1PXNbdD9sOisraV07aWYocihhW3VdLHUsYSk9PT0hMSlicmVha31yZXR1cm4gZX19dmFyIG5qLGlqPU4oKCk9PnsidXNlIHN0cmljdCI7byhRNmUsImNyZWF0ZUJhc2VGb3IiKTtuaj1RNmV9KTt2YXIgWjZlLHNtLHVUPU4oKCk9PnsidXNlIHN0cmljdCI7aWooKTtaNmU9bmooKSxzbT1aNmV9KTtmdW5jdGlvbiBlQ2UodCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIHI9dC5sZW5ndGgsbj1vaj9vaihyKTpuZXcgdC5jb25zdHJ1Y3RvcihyKTtyZXR1cm4gdC5jb3B5KG4pLG59dmFyIGxqLGFqLEo2ZSxzaixvaixoVCx1OT1OKCgpPT57InVzZSBzdHJpY3QiO01vKCk7bGo9dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxhaj1saiYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEo2ZT1haiYmYWouZXhwb3J0cz09PWxqLHNqPUo2ZT9oaS5CdWZmZXI6dm9pZCAwLG9qPXNqP3NqLmFsbG9jVW5zYWZlOnZvaWQgMDtvKGVDZSwiY2xvbmVCdWZmZXIiKTtoVD1lQ2V9KTt2YXIgdENlLG9tLGg5PU4oKCk9PnsidXNlIHN0cmljdCI7TW8oKTt0Q2U9aGkuVWludDhBcnJheSxvbT10Q2V9KTtmdW5jdGlvbiByQ2UodCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IG9tKGUpLnNldChuZXcgb20odCkpLGV9dmFyIGxtLGZUPU4oKCk9PnsidXNlIHN0cmljdCI7aDkoKTtvKHJDZSwiY2xvbmVBcnJheUJ1ZmZlciIpO2xtPXJDZX0pO2Z1bmN0aW9uIG5DZSh0LGUpe3ZhciByPWU/bG0odC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihyLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9dmFyIGRULGY5PU4oKCk9PnsidXNlIHN0cmljdCI7ZlQoKTtvKG5DZSwiY2xvbmVUeXBlZEFycmF5Iik7ZFQ9bkNlfSk7ZnVuY3Rpb24gaUNlKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkobikpOysrcjxuOyllW3JdPXRbcl07cmV0dXJuIGV9dmFyIHBULGQ5PU4oKCk9PnsidXNlIHN0cmljdCI7byhpQ2UsImNvcHlBcnJheSIpO3BUPWlDZX0pO3ZhciBjaixhQ2UsdWosaGo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtubygpO2NqPU9iamVjdC5jcmVhdGUsYUNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gbyh0LCJvYmplY3QiKSxmdW5jdGlvbihlKXtpZighYm4oZSkpcmV0dXJue307aWYoY2opcmV0dXJuIGNqKGUpO3QucHJvdG90eXBlPWU7dmFyIHI9bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxyfX0oKSx1aj1hQ2V9KTtmdW5jdGlvbiBzQ2UodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fXZhciBtVCxwOT1OKCgpPT57InVzZSBzdHJpY3QiO28oc0NlLCJvdmVyQXJnIik7bVQ9c0NlfSk7dmFyIG9DZSxjbSxnVD1OKCgpPT57InVzZSBzdHJpY3QiO3A5KCk7b0NlPW1UKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLGNtPW9DZX0pO2Z1bmN0aW9uIGNDZSh0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yLHI9dHlwZW9mIGU9PSJmdW5jdGlvbiImJmUucHJvdG90eXBlfHxsQ2U7cmV0dXJuIHQ9PT1yfXZhciBsQ2UsbWMsdW09TigoKT0+eyJ1c2Ugc3RyaWN0IjtsQ2U9T2JqZWN0LnByb3RvdHlwZTtvKGNDZSwiaXNQcm90b3R5cGUiKTttYz1jQ2V9KTtmdW5jdGlvbiB1Q2UodCl7cmV0dXJuIHR5cGVvZiB0LmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhbWModCk/dWooY20odCkpOnt9fXZhciB5VCxtOT1OKCgpPT57InVzZSBzdHJpY3QiO2hqKCk7Z1QoKTt1bSgpO28odUNlLCJpbml0Q2xvbmVPYmplY3QiKTt5VD11Q2V9KTtmdW5jdGlvbiBoQ2UodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0In12YXIgaWksT289TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGhDZSwiaXNPYmplY3RMaWtlIik7aWk9aENlfSk7ZnVuY3Rpb24gZENlKHQpe3JldHVybiBpaSh0KSYmZmEodCk9PWZDZX12YXIgZkNlLGc5LGZqPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtPbygpO2ZDZT0iW29iamVjdCBBcmd1bWVudHNdIjtvKGRDZSwiYmFzZUlzQXJndW1lbnRzIik7Zzk9ZENlfSk7dmFyIGRqLHBDZSxtQ2UsZ0NlLERsLGhtPU4oKCk9PnsidXNlIHN0cmljdCI7ZmooKTtPbygpO2RqPU9iamVjdC5wcm90b3R5cGUscENlPWRqLmhhc093blByb3BlcnR5LG1DZT1kai5wcm9wZXJ0eUlzRW51bWVyYWJsZSxnQ2U9ZzkoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9nOTpmdW5jdGlvbih0KXtyZXR1cm4gaWkodCkmJnBDZS5jYWxsKHQsImNhbGxlZSIpJiYhbUNlLmNhbGwodCwiY2FsbGVlIil9LERsPWdDZX0pO3ZhciB5Q2UsUHQsV249TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5Q2U9QXJyYXkuaXNBcnJheSxQdD15Q2V9KTtmdW5jdGlvbiB4Q2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIiYmdD4tMSYmdCUxPT0wJiZ0PD12Q2V9dmFyIHZDZSxmbSx2VD1OKCgpPT57InVzZSBzdHJpY3QiO3ZDZT05MDA3MTk5MjU0NzQwOTkxO28oeENlLCJpc0xlbmd0aCIpO2ZtPXhDZX0pO2Z1bmN0aW9uIGJDZSh0KXtyZXR1cm4gdCE9bnVsbCYmZm0odC5sZW5ndGgpJiYhQWkodCl9dmFyIGZpLFBvPU4oKCk9PnsidXNlIHN0cmljdCI7bjIoKTt2VCgpO28oYkNlLCJpc0FycmF5TGlrZSIpO2ZpPWJDZX0pO2Z1bmN0aW9uIFRDZSh0KXtyZXR1cm4gaWkodCkmJmZpKHQpfXZhciBQZCx4VD1OKCgpPT57InVzZSBzdHJpY3QiO1BvKCk7T28oKTtvKFRDZSwiaXNBcnJheUxpa2VPYmplY3QiKTtQZD1UQ2V9KTtmdW5jdGlvbiB3Q2UoKXtyZXR1cm4hMX12YXIgcGosbWo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHdDZSwic3R1YkZhbHNlIik7cGo9d0NlfSk7dmFyIHZqLGdqLGtDZSx5aixFQ2UsU0NlLExsLGRtPU4oKCk9PnsidXNlIHN0cmljdCI7TW8oKTttaigpO3ZqPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZ2o9dmomJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxrQ2U9Z2omJmdqLmV4cG9ydHM9PT12aix5aj1rQ2U/aGkuQnVmZmVyOnZvaWQgMCxFQ2U9eWo/eWouaXNCdWZmZXI6dm9pZCAwLFNDZT1FQ2V8fHBqLExsPVNDZX0pO2Z1bmN0aW9uIFJDZSh0KXtpZighaWkodCl8fGZhKHQpIT1DQ2UpcmV0dXJuITE7dmFyIGU9Y20odCk7aWYoZT09PW51bGwpcmV0dXJuITA7dmFyIHI9RENlLmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiImJnIgaW5zdGFuY2VvZiByJiZ4ai5jYWxsKHIpPT1MQ2V9dmFyIENDZSxBQ2UsX0NlLHhqLERDZSxMQ2UsYmosVGo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdSgpO2dUKCk7T28oKTtDQ2U9IltvYmplY3QgT2JqZWN0XSIsQUNlPUZ1bmN0aW9uLnByb3RvdHlwZSxfQ2U9T2JqZWN0LnByb3RvdHlwZSx4aj1BQ2UudG9TdHJpbmcsRENlPV9DZS5oYXNPd25Qcm9wZXJ0eSxMQ2U9eGouY2FsbChPYmplY3QpO28oUkNlLCJpc1BsYWluT2JqZWN0Iik7Ymo9UkNlfSk7ZnVuY3Rpb24gcjdlKHQpe3JldHVybiBpaSh0KSYmZm0odC5sZW5ndGgpJiYhIUZuW2ZhKHQpXX12YXIgTkNlLE1DZSxJQ2UsT0NlLFBDZSxCQ2UsRkNlLCRDZSx6Q2UsR0NlLFZDZSxVQ2UsSENlLFdDZSxxQ2UsWUNlLFhDZSxqQ2UsS0NlLFFDZSxaQ2UsSkNlLGU3ZSx0N2UsRm4sd2osa2o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdSgpO3ZUKCk7T28oKTtOQ2U9IltvYmplY3QgQXJndW1lbnRzXSIsTUNlPSJbb2JqZWN0IEFycmF5XSIsSUNlPSJbb2JqZWN0IEJvb2xlYW5dIixPQ2U9IltvYmplY3QgRGF0ZV0iLFBDZT0iW29iamVjdCBFcnJvcl0iLEJDZT0iW29iamVjdCBGdW5jdGlvbl0iLEZDZT0iW29iamVjdCBNYXBdIiwkQ2U9IltvYmplY3QgTnVtYmVyXSIsekNlPSJbb2JqZWN0IE9iamVjdF0iLEdDZT0iW29iamVjdCBSZWdFeHBdIixWQ2U9IltvYmplY3QgU2V0XSIsVUNlPSJbb2JqZWN0IFN0cmluZ10iLEhDZT0iW29iamVjdCBXZWFrTWFwXSIsV0NlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIscUNlPSJbb2JqZWN0IERhdGFWaWV3XSIsWUNlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFhDZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixqQ2U9IltvYmplY3QgSW50OEFycmF5XSIsS0NlPSJbb2JqZWN0IEludDE2QXJyYXldIixRQ2U9IltvYmplY3QgSW50MzJBcnJheV0iLFpDZT0iW29iamVjdCBVaW50OEFycmF5XSIsSkNlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsZTdlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdDdlPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsRm49e307Rm5bWUNlXT1GbltYQ2VdPUZuW2pDZV09Rm5bS0NlXT1GbltRQ2VdPUZuW1pDZV09Rm5bSkNlXT1GbltlN2VdPUZuW3Q3ZV09ITA7Rm5bTkNlXT1GbltNQ2VdPUZuW1dDZV09Rm5bSUNlXT1GbltxQ2VdPUZuW09DZV09Rm5bUENlXT1GbltCQ2VdPUZuW0ZDZV09Rm5bJENlXT1Gblt6Q2VdPUZuW0dDZV09Rm5bVkNlXT1GbltVQ2VdPUZuW0hDZV09ITE7byhyN2UsImJhc2VJc1R5cGVkQXJyYXkiKTt3aj1yN2V9KTtmdW5jdGlvbiBuN2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX12YXIgQm8sQmQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG43ZSwiYmFzZVVuYXJ5Iik7Qm89bjdlfSk7dmFyIEVqLHUyLGk3ZSx5OSxhN2UsRm8saDI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuOSgpO0VqPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsdTI9RWomJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxpN2U9dTImJnUyLmV4cG9ydHM9PT1Faix5OT1pN2UmJnNULnByb2Nlc3MsYTdlPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXUyJiZ1Mi5yZXF1aXJlJiZ1Mi5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fHk5JiZ5OS5iaW5kaW5nJiZ5OS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxGbz1hN2V9KTt2YXIgU2osczdlLEdoLGYyPU4oKCk9PnsidXNlIHN0cmljdCI7a2ooKTtCZCgpO2gyKCk7U2o9Rm8mJkZvLmlzVHlwZWRBcnJheSxzN2U9U2o/Qm8oU2opOndqLEdoPXM3ZX0pO2Z1bmN0aW9uIG83ZSh0LGUpe2lmKCEoZT09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiB0W2VdPT0iZnVuY3Rpb24iKSYmZSE9Il9fcHJvdG9fXyIpcmV0dXJuIHRbZV19dmFyIGQyLHY5PU4oKCk9PnsidXNlIHN0cmljdCI7byhvN2UsInNhZmVHZXQiKTtkMj1vN2V9KTtmdW5jdGlvbiB1N2UodCxlLHIpe3ZhciBuPXRbZV07KCEoYzdlLmNhbGwodCxlKSYmSW8obixyKSl8fHI9PT12b2lkIDAmJiEoZSBpbiB0KSkmJnBjKHQsZSxyKX12YXIgbDdlLGM3ZSxnYyxwbT1OKCgpPT57InVzZSBzdHJpY3QiO2FtKCk7SWQoKTtsN2U9T2JqZWN0LnByb3RvdHlwZSxjN2U9bDdlLmhhc093blByb3BlcnR5O28odTdlLCJhc3NpZ25WYWx1ZSIpO2djPXU3ZX0pO2Z1bmN0aW9uIGg3ZSh0LGUscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBhPS0xLHM9ZS5sZW5ndGg7KythPHM7KXt2YXIgbD1lW2FdLHU9bj9uKHJbbF0sdFtsXSxsLHIsdCk6dm9pZCAwO3U9PT12b2lkIDAmJih1PXRbbF0pLGk/cGMocixsLHUpOmdjKHIsbCx1KX1yZXR1cm4gcn12YXIgJG8sRmQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwbSgpO2FtKCk7byhoN2UsImNvcHlPYmplY3QiKTskbz1oN2V9KTtmdW5jdGlvbiBmN2UodCxlKXtmb3IodmFyIHI9LTEsbj1BcnJheSh0KTsrK3I8dDspbltyXT1lKHIpO3JldHVybiBufXZhciBDaixBaj1OKCgpPT57InVzZSBzdHJpY3QiO28oZjdlLCJiYXNlVGltZXMiKTtDaj1mN2V9KTtmdW5jdGlvbiBtN2UodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz9kN2UsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZwN2UudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfXZhciBkN2UscDdlLFZoLHAyPU4oKCk9PnsidXNlIHN0cmljdCI7ZDdlPTkwMDcxOTkyNTQ3NDA5OTEscDdlPS9eKD86MHxbMS05XVxkKikkLztvKG03ZSwiaXNJbmRleCIpO1ZoPW03ZX0pO2Z1bmN0aW9uIHY3ZSh0LGUpe3ZhciByPVB0KHQpLG49IXImJkRsKHQpLGk9IXImJiFuJiZMbCh0KSxhPSFyJiYhbiYmIWkmJkdoKHQpLHM9cnx8bnx8aXx8YSxsPXM/Q2oodC5sZW5ndGgsU3RyaW5nKTpbXSx1PWwubGVuZ3RoO2Zvcih2YXIgaCBpbiB0KShlfHx5N2UuY2FsbCh0LGgpKSYmIShzJiYoaD09Imxlbmd0aCJ8fGkmJihoPT0ib2Zmc2V0Inx8aD09InBhcmVudCIpfHxhJiYoaD09ImJ1ZmZlciJ8fGg9PSJieXRlTGVuZ3RoInx8aD09ImJ5dGVPZmZzZXQiKXx8VmgoaCx1KSkpJiZsLnB1c2goaCk7cmV0dXJuIGx9dmFyIGc3ZSx5N2UsYlQseDk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBaigpO2htKCk7V24oKTtkbSgpO3AyKCk7ZjIoKTtnN2U9T2JqZWN0LnByb3RvdHlwZSx5N2U9ZzdlLmhhc093blByb3BlcnR5O28odjdlLCJhcnJheUxpa2VLZXlzIik7YlQ9djdlfSk7ZnVuY3Rpb24geDdlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpZm9yKHZhciByIGluIE9iamVjdCh0KSllLnB1c2gocik7cmV0dXJuIGV9dmFyIF9qLERqPU4oKCk9PnsidXNlIHN0cmljdCI7byh4N2UsIm5hdGl2ZUtleXNJbiIpO19qPXg3ZX0pO2Z1bmN0aW9uIHc3ZSh0KXtpZighYm4odCkpcmV0dXJuIF9qKHQpO3ZhciBlPW1jKHQpLHI9W107Zm9yKHZhciBuIGluIHQpbj09ImNvbnN0cnVjdG9yIiYmKGV8fCFUN2UuY2FsbCh0LG4pKXx8ci5wdXNoKG4pO3JldHVybiByfXZhciBiN2UsVDdlLExqLFJqPU4oKCk9PnsidXNlIHN0cmljdCI7bm8oKTt1bSgpO0RqKCk7YjdlPU9iamVjdC5wcm90b3R5cGUsVDdlPWI3ZS5oYXNPd25Qcm9wZXJ0eTtvKHc3ZSwiYmFzZUtleXNJbiIpO0xqPXc3ZX0pO2Z1bmN0aW9uIGs3ZSh0KXtyZXR1cm4gZmkodCk/YlQodCwhMCk6TGoodCl9dmFyIFJzLFVoPU4oKCk9PnsidXNlIHN0cmljdCI7eDkoKTtSaigpO1BvKCk7byhrN2UsImtleXNJbiIpO1JzPWs3ZX0pO2Z1bmN0aW9uIEU3ZSh0KXtyZXR1cm4gJG8odCxScyh0KSl9dmFyIE5qLE1qPU4oKCk9PnsidXNlIHN0cmljdCI7RmQoKTtVaCgpO28oRTdlLCJ0b1BsYWluT2JqZWN0Iik7Tmo9RTdlfSk7ZnVuY3Rpb24gUzdlKHQsZSxyLG4saSxhLHMpe3ZhciBsPWQyKHQsciksdT1kMihlLHIpLGg9cy5nZXQodSk7aWYoaCl7YzIodCxyLGgpO3JldHVybn12YXIgZj1hP2EobCx1LHIrIiIsdCxlLHMpOnZvaWQgMCxkPWY9PT12b2lkIDA7aWYoZCl7dmFyIHA9UHQodSksbT0hcCYmTGwodSksZz0hcCYmIW0mJkdoKHUpO2Y9dSxwfHxtfHxnP1B0KGwpP2Y9bDpQZChsKT9mPXBUKGwpOm0/KGQ9ITEsZj1oVCh1LCEwKSk6Zz8oZD0hMSxmPWRUKHUsITApKTpmPVtdOmJqKHUpfHxEbCh1KT8oZj1sLERsKGwpP2Y9TmoobCk6KCFibihsKXx8QWkobCkpJiYoZj15VCh1KSkpOmQ9ITF9ZCYmKHMuc2V0KHUsZiksaShmLHUsbixhLHMpLHMuZGVsZXRlKHUpKSxjMih0LHIsZil9dmFyIElqLE9qPU4oKCk9PnsidXNlIHN0cmljdCI7YzkoKTt1OSgpO2Y5KCk7ZDkoKTttOSgpO2htKCk7V24oKTt4VCgpO2RtKCk7bjIoKTtubygpO1RqKCk7ZjIoKTt2OSgpO01qKCk7byhTN2UsImJhc2VNZXJnZURlZXAiKTtJaj1TN2V9KTtmdW5jdGlvbiBQaih0LGUscixuLGkpe3QhPT1lJiZzbShlLGZ1bmN0aW9uKGEscyl7aWYoaXx8KGk9bmV3IGRjKSxibihhKSlJaih0LGUscyxyLFBqLG4saSk7ZWxzZXt2YXIgbD1uP24oZDIodCxzKSxhLHMrIiIsdCxlLGkpOnZvaWQgMDtsPT09dm9pZCAwJiYobD1hKSxjMih0LHMsbCl9fSxScyl9dmFyIEJqLEZqPU4oKCk9PnsidXNlIHN0cmljdCI7bDIoKTtjOSgpO3VUKCk7T2ooKTtubygpO1VoKCk7djkoKTtvKFBqLCJiYXNlTWVyZ2UiKTtCaj1Qan0pO2Z1bmN0aW9uIEM3ZSh0KXtyZXR1cm4gdH12YXIgdGEsTHU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEM3ZSwiaWRlbnRpdHkiKTt0YT1DN2V9KTtmdW5jdGlvbiBBN2UodCxlLHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxyWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIHQuYXBwbHkoZSxyKX12YXIgJGosemo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEE3ZSwiYXBwbHkiKTskaj1BN2V9KTtmdW5jdGlvbiBfN2UodCxlLHIpe3JldHVybiBlPUdqKGU9PT12b2lkIDA/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cyxpPS0xLGE9R2oobi5sZW5ndGgtZSwwKSxzPUFycmF5KGEpOysraTxhOylzW2ldPW5bZStpXTtpPS0xO2Zvcih2YXIgbD1BcnJheShlKzEpOysraTxlOylsW2ldPW5baV07cmV0dXJuIGxbZV09cihzKSwkaih0LHRoaXMsbCl9fXZhciBHaixUVCxiOT1OKCgpPT57InVzZSBzdHJpY3QiO3pqKCk7R2o9TWF0aC5tYXg7byhfN2UsIm92ZXJSZXN0Iik7VFQ9XzdlfSk7ZnVuY3Rpb24gRDdlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgTnMsVDk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEQ3ZSwiY29uc3RhbnQiKTtOcz1EN2V9KTt2YXIgTDdlLFZqLFVqPU4oKCk9PnsidXNlIHN0cmljdCI7VDkoKTtsOSgpO0x1KCk7TDdlPWltP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGltKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6TnMoZSksd3JpdGFibGU6ITB9KX06dGEsVmo9TDdlfSk7ZnVuY3Rpb24gSTdlKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPU03ZSgpLGk9TjdlLShuLXIpO2lmKHI9bixpPjApe2lmKCsrZT49UjdlKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBSN2UsTjdlLE03ZSxIaixXaj1OKCgpPT57InVzZSBzdHJpY3QiO1I3ZT04MDAsTjdlPTE2LE03ZT1EYXRlLm5vdztvKEk3ZSwic2hvcnRPdXQiKTtIaj1JN2V9KTt2YXIgTzdlLHdULHc5PU4oKCk9PnsidXNlIHN0cmljdCI7VWooKTtXaigpO083ZT1IaihWaiksd1Q9TzdlfSk7ZnVuY3Rpb24gUDdlKHQsZSl7cmV0dXJuIHdUKFRUKHQsZSx0YSksdCsiIil9dmFyIHljLG1tPU4oKCk9PnsidXNlIHN0cmljdCI7THUoKTtiOSgpO3c5KCk7byhQN2UsImJhc2VSZXN0Iik7eWM9UDdlfSk7ZnVuY3Rpb24gQjdlKHQsZSxyKXtpZighYm4ocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuKG49PSJudW1iZXIiP2ZpKHIpJiZWaChlLHIubGVuZ3RoKTpuPT0ic3RyaW5nIiYmZSBpbiByKT9JbyhyW2VdLHQpOiExfXZhciBpbywkZD1OKCgpPT57InVzZSBzdHJpY3QiO0lkKCk7UG8oKTtwMigpO25vKCk7byhCN2UsImlzSXRlcmF0ZWVDYWxsIik7aW89QjdlfSk7ZnVuY3Rpb24gRjdlKHQpe3JldHVybiB5YyhmdW5jdGlvbihlLHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsYT1pPjE/cltpLTFdOnZvaWQgMCxzPWk+Mj9yWzJdOnZvaWQgMDtmb3IoYT10Lmxlbmd0aD4zJiZ0eXBlb2YgYT09ImZ1bmN0aW9uIj8oaS0tLGEpOnZvaWQgMCxzJiZpbyhyWzBdLHJbMV0scykmJihhPWk8Mz92b2lkIDA6YSxpPTEpLGU9T2JqZWN0KGUpOysrbjxpOyl7dmFyIGw9cltuXTtsJiZ0KGUsbCxuLGEpfXJldHVybiBlfSl9dmFyIGtULGs5PU4oKCk9PnsidXNlIHN0cmljdCI7bW0oKTskZCgpO28oRjdlLCJjcmVhdGVBc3NpZ25lciIpO2tUPUY3ZX0pO3ZhciAkN2UsSGgsRTk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGaigpO2s5KCk7JDdlPWtUKGZ1bmN0aW9uKHQsZSxyKXtCaih0LGUscil9KSxIaD0kN2V9KTtmdW5jdGlvbiBBOSh0LGUpe2lmKCF0KXJldHVybiBlO2xldCByPWBjdXJ2ZSR7dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWA7cmV0dXJuIHo3ZVtyXT8/ZX1mdW5jdGlvbiBIN2UodCxlKXtsZXQgcj10LnRyaW0oKTtpZihyKXJldHVybiBlLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiPygwLFhqLnNhbml0aXplVXJsKShyKTpyfWZ1bmN0aW9uIFFqKHQsZSl7cmV0dXJuIXR8fCFlPzA6TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSl9ZnVuY3Rpb24gcTdlKHQpe2xldCBlLHI9MDt0LmZvckVhY2goaT0+e3IrPVFqKGksZSksZT1pfSk7bGV0IG49ci8yO3JldHVybiBfOSh0LG4pfWZ1bmN0aW9uIFk3ZSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06cTdlKHQpfWZ1bmN0aW9uIGo3ZSh0LGUscil7bGV0IG49c3RydWN0dXJlZENsb25lKHIpO1guaW5mbygib3VyIHBvaW50cyIsbiksZSE9PSJzdGFydF9sZWZ0IiYmZSE9PSJzdGFydF9yaWdodCImJm4ucmV2ZXJzZSgpO2xldCBpPTI1K3QsYT1fOShuLGkpLHM9MTArdCouNSxsPU1hdGguYXRhbjIoblswXS55LWEueSxuWzBdLngtYS54KSx1PXt4OjAseTowfTtyZXR1cm4gZT09PSJzdGFydF9sZWZ0Ij8odS54PU1hdGguc2luKGwrTWF0aC5QSSkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwrTWF0aC5QSSkqcysoblswXS55K2EueSkvMik6ZT09PSJlbmRfcmlnaHQiPyh1Lng9TWF0aC5zaW4obC1NYXRoLlBJKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsLU1hdGguUEkpKnMrKG5bMF0ueSthLnkpLzItNSk6ZT09PSJlbmRfbGVmdCI/KHUueD1NYXRoLnNpbihsKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsKSpzKyhuWzBdLnkrYS55KS8yLTUpOih1Lng9TWF0aC5zaW4obCkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwpKnMrKG5bMF0ueSthLnkpLzIpLHV9ZnVuY3Rpb24gRDkodCl7bGV0IGU9IiIscj0iIjtmb3IobGV0IG4gb2YgdCluIT09dm9pZCAwJiYobi5zdGFydHNXaXRoKCJjb2xvcjoiKXx8bi5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP3I9cituKyI7IjplPWUrbisiOyIpO3JldHVybntzdHlsZTplLGxhYmVsU3R5bGU6cn19ZnVuY3Rpb24gSzdlKHQpe2xldCBlPSIiLHI9IjAxMjM0NTY3ODlhYmNkZWYiLG49ci5sZW5ndGg7Zm9yKGxldCBpPTA7aTx0O2krKyllKz1yLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikpO3JldHVybiBlfWZ1bmN0aW9uIFNUKHQsZSl7cmV0dXJuIE05KHQsZSkuaGVpZ2h0fWZ1bmN0aW9uIHJhKHQsZSl7cmV0dXJuIE05KHQsZSkud2lkdGh9ZnVuY3Rpb24gSTkodCl7cmV0dXJuInN0ciJpbiB0fWZ1bmN0aW9uICRuKHQsZSl7cmV0dXJuIEhoKHt9LHQsZSl9ZnVuY3Rpb24gem4odCl7cmV0dXJuIHQ/P251bGx9dmFyIFhqLEM5LHo3ZSxHN2UsVjdlLGpqLEtqLFU3ZSxXN2UscWosXzksWDdlLFlqLEw5LFI5LFE3ZSxaN2UsTjksSjdlLE05LFM5LEVULGVBZSx0QWUsem8sVnQsWmosbmEsV2gsZXI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYaj1BYShaMCgpLDEpO2ZyKCk7cHIoKTtiNygpO3l0KCk7cmQoKTtnMCgpO285KCk7RTkoKTtRNCgpO0M5PSJcdTIwMEIiLHo3ZT17Y3VydmVCYXNpczpObyxjdXJ2ZUJhc2lzQ2xvc2VkOlg1LGN1cnZlQmFzaXNPcGVuOmo1LGN1cnZlQnVtcFg6R3YsY3VydmVCdW1wWTpWdixjdXJ2ZUJ1bmRsZTpIRCxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOldELGN1cnZlQ2FyZGluYWxPcGVuOllELGN1cnZlQ2FyZGluYWw6cXYsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOmpELGN1cnZlQ2F0bXVsbFJvbU9wZW46S0QsY3VydmVDYXRtdWxsUm9tOmp2LGN1cnZlTGluZWFyOlN1LGN1cnZlTGluZWFyQ2xvc2VkOmVULGN1cnZlTW9ub3RvbmVYOkt2LGN1cnZlTW9ub3RvbmVZOlF2LGN1cnZlTmF0dXJhbDpLMCxjdXJ2ZVN0ZXA6UTAsY3VydmVTdGVwQWZ0ZXI6SnYsY3VydmVTdGVwQmVmb3JlOlp2fSxHN2U9L1xzKig/OihcdyspKD89Oik6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLFY3ZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9amoodCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyksbj17fTtpZihBcnJheS5pc0FycmF5KHIpKXtsZXQgcz1yLm1hcChsPT5sLmFyZ3MpO3YwKHMpLG49VW4obixbLi4uc10pfWVsc2Ugbj1yLmFyZ3M7aWYoIW4pcmV0dXJuO2xldCBpPW0wKHQsZSksYT0iY29uZmlnIjtyZXR1cm4gblthXSE9PXZvaWQgMCYmKGk9PT0iZmxvd2NoYXJ0LXYyIiYmKGk9ImZsb3djaGFydCIpLG5baV09blthXSxkZWxldGUgblthXSksbn0sImRldGVjdEluaXQiKSxqaj1vKGZ1bmN0aW9uKHQsZT1udWxsKXt0cnl7bGV0IHI9bmV3IFJlZ0V4cChgWyVdezJ9KD8hW3tdJHtHN2Uuc291cmNlfSkoPz1bfV1bJV17Mn0pLioKYCwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UociwiIikucmVwbGFjZSgvJy9nbSwnIicpLFguZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7ZSE9PW51bGw/IiB0eXBlOiIrZToiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHt0fWApO2xldCBuLGk9W107Zm9yKDsobj10ZC5leGVjKHQpKSE9PW51bGw7KWlmKG4uaW5kZXg9PT10ZC5sYXN0SW5kZXgmJnRkLmxhc3RJbmRleCsrLG4mJiFlfHxlJiZuWzFdPy5tYXRjaChlKXx8ZSYmblsyXT8ubWF0Y2goZSkpe2xldCBhPW5bMV0/blsxXTpuWzJdLHM9blszXT9uWzNdLnRyaW0oKTpuWzRdP0pTT04ucGFyc2Uobls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpzfSl9cmV0dXJuIGkubGVuZ3RoPT09MD97dHlwZTp0LGFyZ3M6bnVsbH06aS5sZW5ndGg9PT0xP2lbMF06aX1jYXRjaChyKXtyZXR1cm4gWC5lcnJvcihgRVJST1I6ICR7ci5tZXNzYWdlfSAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUgdHlwZTogJyR7ZX0nIGJhc2VkIG9uIHRoZSB0ZXh0OiAnJHt0fSdgKSx7dHlwZTp2b2lkIDAsYXJnczpudWxsfX19LCJkZXRlY3REaXJlY3RpdmUiKSxLaj1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UodGQsIiIpfSwicmVtb3ZlRGlyZWN0aXZlcyIpLFU3ZT1vKGZ1bmN0aW9uKHQsZSl7Zm9yKGxldFtyLG5db2YgZS5lbnRyaWVzKCkpaWYobi5tYXRjaCh0KSlyZXR1cm4gcjtyZXR1cm4tMX0sImlzU3Vic3RyaW5nSW5BcnJheSIpO28oQTksImludGVycG9sYXRlVG9DdXJ2ZSIpO28oSDdlLCJmb3JtYXRVcmwiKTtXN2U9bygodCwuLi5lKT0+e2xldCByPXQuc3BsaXQoIi4iKSxuPXIubGVuZ3RoLTEsaT1yW25dLGE9d2luZG93O2ZvcihsZXQgcz0wO3M8bjtzKyspaWYoYT1hW3Jbc11dLCFhKXtYLmVycm9yKGBGdW5jdGlvbiBuYW1lOiAke3R9IG5vdCBmb3VuZCBpbiB3aW5kb3dgKTtyZXR1cm59YVtpXSguLi5lKX0sInJ1bkZ1bmMiKTtvKFFqLCJkaXN0YW5jZSIpO28ocTdlLCJ0cmF2ZXJzZUVkZ2UiKTtvKFk3ZSwiY2FsY0xhYmVsUG9zaXRpb24iKTtxaj1vKCh0LGU9Mik9PntsZXQgcj1NYXRoLnBvdygxMCxlKTtyZXR1cm4gTWF0aC5yb3VuZCh0KnIpL3J9LCJyb3VuZE51bWJlciIpLF85PW8oKHQsZSk9PntsZXQgcixuPWU7Zm9yKGxldCBpIG9mIHQpe2lmKHIpe2xldCBhPVFqKGkscik7aWYoYT09PTApcmV0dXJuIHI7aWYoYTxuKW4tPWE7ZWxzZXtsZXQgcz1uL2E7aWYoczw9MClyZXR1cm4gcjtpZihzPj0xKXJldHVybnt4OmkueCx5OmkueX07aWYocz4wJiZzPDEpcmV0dXJue3g6cWooKDEtcykqci54K3MqaS54LDUpLHk6cWooKDEtcykqci55K3MqaS55LDUpfX19cj1pfXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBwb2ludCBmb3IgdGhlIGdpdmVuIGRpc3RhbmNlIil9LCJjYWxjdWxhdGVQb2ludCIpLFg3ZT1vKCh0LGUscik9PntYLmluZm8oYG91ciBwb2ludHMgJHtKU09OLnN0cmluZ2lmeShlKX1gKSxlWzBdIT09ciYmKGU9ZS5yZXZlcnNlKCkpO2xldCBpPV85KGUsMjUpLGE9dD8xMDo1LHM9TWF0aC5hdGFuMihlWzBdLnktaS55LGVbMF0ueC1pLngpLGw9e3g6MCx5OjB9O3JldHVybiBsLng9TWF0aC5zaW4ocykqYSsoZVswXS54K2kueCkvMixsLnk9LU1hdGguY29zKHMpKmErKGVbMF0ueStpLnkpLzIsbH0sImNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uIik7byhqN2UsImNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24iKTtvKEQ5LCJnZXRTdHlsZXNGcm9tQXJyYXkiKTtZaj0wLEw5PW8oKCk9PihZaisrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrWWopLCJnZW5lcmF0ZUlkIik7byhLN2UsIm1ha2VSYW5kb21IZXgiKTtSOT1vKHQ9Pks3ZSh0Lmxlbmd0aCksInJhbmRvbSIpLFE3ZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMCx0ZXh0OiIifX0sImdldFRleHRPYmoiKSxaN2U9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKFplLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxuXT16byhlLmZvbnRTaXplKSxpPXQuYXBwZW5kKCJ0ZXh0Iik7aS5hdHRyKCJ4IixlLngpLGkuYXR0cigieSIsZS55KSxpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLGkuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLGkuc3R5bGUoImZvbnQtc2l6ZSIsbiksaS5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksaS5hdHRyKCJmaWxsIixlLmZpbGwpLGUuY2xhc3MhPT12b2lkIDAmJmkuYXR0cigiY2xhc3MiLGUuY2xhc3MpO2xldCBhPWkuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBhLmF0dHIoIngiLGUueCtlLnRleHRNYXJnaW4qMiksYS5hdHRyKCJmaWxsIixlLmZpbGwpLGEudGV4dChyKSxpfSwiZHJhd1NpbXBsZVRleHQiKSxOOT1ybSgodCxlLHIpPT57aWYoIXR8fChyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxyKSxaZS5saW5lQnJlYWtSZWdleC50ZXN0KHQpKSlyZXR1cm4gdDtsZXQgbj10LnNwbGl0KCIgIikuZmlsdGVyKEJvb2xlYW4pLGk9W10sYT0iIjtyZXR1cm4gbi5mb3JFYWNoKChzLGwpPT57bGV0IHU9cmEoYCR7c30gYCxyKSxoPXJhKGEscik7aWYodT5lKXtsZXR7aHlwaGVuYXRlZFN0cmluZ3M6cCxyZW1haW5pbmdXb3JkOm19PUo3ZShzLGUsIi0iLHIpO2kucHVzaChhLC4uLnApLGE9bX1lbHNlIGgrdT49ZT8oaS5wdXNoKGEpLGE9cyk6YT1bYSxzXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO2wrMT09PW4ubGVuZ3RoJiZpLnB1c2goYSl9KSxpLmZpbHRlcihzPT5zIT09IiIpLmpvaW4oci5qb2luV2l0aCl9LCh0LGUscik9PmAke3R9JHtlfSR7ci5mb250U2l6ZX0ke3IuZm9udFdlaWdodH0ke3IuZm9udEZhbWlseX0ke3Iuam9pbldpdGh9YCksSjdlPXJtKCh0LGUscj0iLSIsbik9PntuPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0sbik7bGV0IGk9Wy4uLnRdLGE9W10scz0iIjtyZXR1cm4gaS5mb3JFYWNoKChsLHUpPT57bGV0IGg9YCR7c30ke2x9YDtpZihyYShoLG4pPj1lKXtsZXQgZD11KzEscD1pLmxlbmd0aD09PWQsbT1gJHtofSR7cn1gO2EucHVzaChwP2g6bSkscz0iIn1lbHNlIHM9aH0pLHtoeXBoZW5hdGVkU3RyaW5nczphLHJlbWFpbmluZ1dvcmQ6c319LCh0LGUscj0iLSIsbik9PmAke3R9JHtlfSR7cn0ke24uZm9udFNpemV9JHtuLmZvbnRXZWlnaHR9JHtuLmZvbnRGYW1pbHl9YCk7byhTVCwiY2FsY3VsYXRlVGV4dEhlaWdodCIpO28ocmEsImNhbGN1bGF0ZVRleHRXaWR0aCIpO005PXJtKCh0LGUpPT57bGV0e2ZvbnRTaXplOnI9MTIsZm9udEZhbWlseTpuPSJBcmlhbCIsZm9udFdlaWdodDppPTQwMH09ZTtpZighdClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07bGV0WyxhXT16byhyKSxzPVsic2Fucy1zZXJpZiIsbl0sbD10LnNwbGl0KFplLmxpbmVCcmVha1JlZ2V4KSx1PVtdLGg9R2UoImJvZHkiKTtpZighaC5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtsZXQgZj1oLmFwcGVuZCgic3ZnIik7Zm9yKGxldCBwIG9mIHMpe2xldCBtPTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2ZvcihsZXQgeSBvZiBsKXtsZXQgdj1RN2UoKTt2LnRleHQ9eXx8Qzk7bGV0IHg9WjdlKGYsdikuc3R5bGUoImZvbnQtc2l6ZSIsYSkuc3R5bGUoImZvbnQtd2VpZ2h0IixpKS5zdHlsZSgiZm9udC1mYW1pbHkiLHApLGI9KHguX2dyb3Vwc3x8eClbMF1bMF0uZ2V0QkJveCgpO2lmKGIud2lkdGg9PT0wJiZiLmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTtnLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoZy53aWR0aCxiLndpZHRoKSksbT1NYXRoLnJvdW5kKGIuaGVpZ2h0KSxnLmhlaWdodCs9bSxnLmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heChnLmxpbmVIZWlnaHQsbSkpfXUucHVzaChnKX1mLnJlbW92ZSgpO2xldCBkPWlzTmFOKHVbMV0uaGVpZ2h0KXx8aXNOYU4odVsxXS53aWR0aCl8fGlzTmFOKHVbMV0ubGluZUhlaWdodCl8fHVbMF0uaGVpZ2h0PnVbMV0uaGVpZ2h0JiZ1WzBdLndpZHRoPnVbMV0ud2lkdGgmJnVbMF0ubGluZUhlaWdodD51WzFdLmxpbmVIZWlnaHQ/MDoxO3JldHVybiB1W2RdfSwodCxlKT0+YCR7dH0ke2UuZm9udFNpemV9JHtlLmZvbnRXZWlnaHR9JHtlLmZvbnRGYW1pbHl9YCksUzk9Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSxyKXt0aGlzLmNvdW50PTA7dGhpcy5jb3VudD1yP3IubGVuZ3RoOjAsdGhpcy5uZXh0PWU/KCk9PnRoaXMuY291bnQrKzooKT0+RGF0ZS5ub3coKX1zdGF0aWN7byh0aGlzLCJJbml0SURHZW5lcmF0b3IiKX19LGVBZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBFVD1FVHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1lc2NhcGUodCkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksRVQuaW5uZXJIVE1MPXQsdW5lc2NhcGUoRVQudGV4dENvbnRlbnQpfSwiZW50aXR5RGVjb2RlIik7byhJOSwiaXNEZXRhaWxlZEVycm9yIik7dEFlPW8oKHQsZSxyLG4pPT57aWYoIW4pcmV0dXJuO2xldCBpPXQubm9kZSgpPy5nZXRCQm94KCk7aSYmdC5hcHBlbmQoInRleHQiKS50ZXh0KG4pLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsaS54K2kud2lkdGgvMikuYXR0cigieSIsLXIpLmF0dHIoImNsYXNzIixlKX0sImluc2VydFRpdGxlIiksem89byh0PT57aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVyblt0LHQrInB4Il07bGV0IGU9cGFyc2VJbnQodD8/IiIsMTApO3JldHVybiBOdW1iZXIuaXNOYU4oZSk/W3ZvaWQgMCx2b2lkIDBdOnQ9PT1TdHJpbmcoZSk/W2UsdCsicHgiXTpbZSx0XX0sInBhcnNlRm9udFNpemUiKTtvKCRuLCJjbGVhbkFuZE1lcmdlIik7VnQ9e2Fzc2lnbldpdGhEZXB0aDpVbix3cmFwTGFiZWw6TjksY2FsY3VsYXRlVGV4dEhlaWdodDpTVCxjYWxjdWxhdGVUZXh0V2lkdGg6cmEsY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6TTksY2xlYW5BbmRNZXJnZTokbixkZXRlY3RJbml0OlY3ZSxkZXRlY3REaXJlY3RpdmU6amosaXNTdWJzdHJpbmdJbkFycmF5OlU3ZSxpbnRlcnBvbGF0ZVRvQ3VydmU6QTksY2FsY0xhYmVsUG9zaXRpb246WTdlLGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOlg3ZSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmo3ZSxmb3JtYXRVcmw6SDdlLGdldFN0eWxlc0Zyb21BcnJheTpEOSxnZW5lcmF0ZUlkOkw5LHJhbmRvbTpSOSxydW5GdW5jOlc3ZSxlbnRpdHlEZWNvZGU6ZUFlLGluc2VydFRpdGxlOnRBZSxwYXJzZUZvbnRTaXplOnpvLEluaXRJREdlbmVyYXRvcjpTOX0sWmo9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPWUucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvY2xhc3NEZWYuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvI1x3KzsvZyxmdW5jdGlvbihyKXtsZXQgbj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChuKT8iXHVGQjAyXHhCMFx4QjAiK24rIlx4QjZceERGIjoiXHVGQjAyXHhCMCIrbisiXHhCNlx4REYifSksZX0sImVuY29kZUVudGl0aWVzIiksbmE9byhmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC/vrILCsMKwL2csIiYjIikucmVwbGFjZSgv76yCwrAvZywiJiIpLnJlcGxhY2UoL8K2w58vZywiOyIpfSwiZGVjb2RlRW50aXRpZXMiKSxXaD1vKCh0LGUse2NvdW50ZXI6cj0wLHByZWZpeDpuLHN1ZmZpeDppfSxhKT0+YXx8YCR7bj9gJHtufV9gOiIifSR7dH1fJHtlfV8ke3J9JHtpP2BfJHtpfWA6IiJ9YCwiZ2V0RWRnZUlkIik7byh6biwiaGFuZGxlVW5kZWZpbmVkQXR0ciIpfSk7ZnVuY3Rpb24gUmwodCxlLHIsbixpKXtpZighZVt0XS53aWR0aClpZihyKWVbdF0udGV4dD1OOShlW3RdLnRleHQsaSxuKSxlW3RdLnRleHRMaW5lcz1lW3RdLnRleHQuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpLmxlbmd0aCxlW3RdLndpZHRoPWksZVt0XS5oZWlnaHQ9U1QoZVt0XS50ZXh0LG4pO2Vsc2V7bGV0IGE9ZVt0XS50ZXh0LnNwbGl0KFplLmxpbmVCcmVha1JlZ2V4KTtlW3RdLnRleHRMaW5lcz1hLmxlbmd0aDtsZXQgcz0wO2VbdF0uaGVpZ2h0PTAsZVt0XS53aWR0aD0wO2ZvcihsZXQgbCBvZiBhKWVbdF0ud2lkdGg9TWF0aC5tYXgocmEobCxuKSxlW3RdLndpZHRoKSxzPVNUKGwsbiksZVt0XS5oZWlnaHQ9ZVt0XS5oZWlnaHQrc319ZnVuY3Rpb24gbksodCxlLHIsbixpKXtsZXQgYT1uZXcgRFQoaSk7YS5kYXRhLndpZHRoTGltaXQ9ci5kYXRhLndpZHRoTGltaXQvTWF0aC5taW4oTzksbi5sZW5ndGgpO2ZvcihsZXRbcyxsXW9mIG4uZW50cmllcygpKXtsZXQgdT0wO2wuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSxsLnNwcml0ZSYmKGwuaW1hZ2Uud2lkdGg9NDgsbC5pbWFnZS5oZWlnaHQ9NDgsbC5pbWFnZS5ZPXUsdT1sLmltYWdlLlkrbC5pbWFnZS5oZWlnaHQpO2xldCBoPWwud3JhcCYmVXQud3JhcCxmPUNUKFV0KTtpZihmLmZvbnRTaXplPWYuZm9udFNpemUrMixmLmZvbnRXZWlnaHQ9ImJvbGQiLFJsKCJsYWJlbCIsbCxoLGYsYS5kYXRhLndpZHRoTGltaXQpLGwubGFiZWwuWT11KzgsdT1sLmxhYmVsLlkrbC5sYWJlbC5oZWlnaHQsbC50eXBlJiZsLnR5cGUudGV4dCE9PSIiKXtsLnR5cGUudGV4dD0iWyIrbC50eXBlLnRleHQrIl0iO2xldCBnPUNUKFV0KTtSbCgidHlwZSIsbCxoLGcsYS5kYXRhLndpZHRoTGltaXQpLGwudHlwZS5ZPXUrNSx1PWwudHlwZS5ZK2wudHlwZS5oZWlnaHR9aWYobC5kZXNjciYmbC5kZXNjci50ZXh0IT09IiIpe2xldCBnPUNUKFV0KTtnLmZvbnRTaXplPWcuZm9udFNpemUtMixSbCgiZGVzY3IiLGwsaCxnLGEuZGF0YS53aWR0aExpbWl0KSxsLmRlc2NyLlk9dSsyMCx1PWwuZGVzY3IuWStsLmRlc2NyLmhlaWdodH1pZihzPT0wfHxzJU85PT09MCl7bGV0IGc9ci5kYXRhLnN0YXJ0eCtVdC5kaWFncmFtTWFyZ2luWCx5PXIuZGF0YS5zdG9weStVdC5kaWFncmFtTWFyZ2luWSt1O2Euc2V0RGF0YShnLGcseSx5KX1lbHNle2xldCBnPWEuZGF0YS5zdG9weCE9PWEuZGF0YS5zdGFydHg/YS5kYXRhLnN0b3B4K1V0LmRpYWdyYW1NYXJnaW5YOmEuZGF0YS5zdGFydHgseT1hLmRhdGEuc3RhcnR5O2Euc2V0RGF0YShnLGcseSx5KX1hLm5hbWU9bC5hbGlhcztsZXQgZD1pLmRiLmdldEM0U2hhcGVBcnJheShsLmFsaWFzKSxwPWkuZGIuZ2V0QzRTaGFwZUtleXMobC5hbGlhcyk7cC5sZW5ndGg+MCYmcksoYSx0LGQscCksZT1sLmFsaWFzO2xldCBtPWkuZGIuZ2V0Qm91bmRhcmllcyhlKTttLmxlbmd0aD4wJiZuSyh0LGUsYSxtLGkpLGwuYWxpYXMhPT0iZ2xvYmFsIiYmdEsodCxsLGEpLHIuZGF0YS5zdG9weT1NYXRoLm1heChhLmRhdGEuc3RvcHkrVXQuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHkpLHIuZGF0YS5zdG9weD1NYXRoLm1heChhLmRhdGEuc3RvcHgrVXQuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHgpLEFUPU1hdGgubWF4KEFULHIuZGF0YS5zdG9weCksX1Q9TWF0aC5tYXgoX1Qsci5kYXRhLnN0b3B5KX19dmFyIEFULF9ULGVLLE85LFV0LERULFA5LG0yLENULHJBZSx0SyxySyxNcyxKaixuQWUsaUFlLGFBZSxCOSxpSz1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7SlkoKTt5dCgpO2E3KCk7cHIoKTtMQSgpO0d0KCk7ZzAoKTtlcigpO3hpKCk7QVQ9MCxfVD0wLGVLPTQsTzk9MjtSeS55eT1zdjtVdD17fSxEVD1jbGFzc3tzdGF0aWN7byh0aGlzLCJCb3VuZHMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXt9LHRoaXMuZGF0YS5zdGFydHg9dm9pZCAwLHRoaXMuZGF0YS5zdG9weD12b2lkIDAsdGhpcy5kYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5kYXRhLnN0b3B5PXZvaWQgMCx0aGlzLmRhdGEud2lkdGhMaW1pdD12b2lkIDAsdGhpcy5uZXh0RGF0YT17fSx0aGlzLm5leHREYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdGFydHk9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHk9dm9pZCAwLHRoaXMubmV4dERhdGEuY250PTAsUDkoZS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShlLHIsbixpKXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWUsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9cix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PW4sdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9aX11cGRhdGVWYWwoZSxyLG4saSl7ZVtyXT09PXZvaWQgMD9lW3JdPW46ZVtyXT1pKG4sZVtyXSl9aW5zZXJ0KGUpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IHI9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrZS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCtlLm1hcmdpbioyLG49citlLndpZHRoLGk9dGhpcy5uZXh0RGF0YS5zdGFydHkrZS5tYXJnaW4qMixhPWkrZS5oZWlnaHQ7KHI+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxuPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+ZUspJiYocj10aGlzLm5leHREYXRhLnN0YXJ0eCtlLm1hcmdpbitVdC5uZXh0TGluZVBhZGRpbmdYLGk9dGhpcy5uZXh0RGF0YS5zdG9weStlLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9bj1yK2Uud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PWE9aStlLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxlLng9cixlLnk9aSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLG4sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsbixNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpfWluaXQoZSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxQOShlLmRiLmdldENvbmZpZygpKX1idW1wTGFzdE1hcmdpbihlKXt0aGlzLmRhdGEuc3RvcHgrPWUsdGhpcy5kYXRhLnN0b3B5Kz1lfX0sUDk9byhmdW5jdGlvbih0KXtVbihVdCx0KSx0LmZvbnRGYW1pbHkmJihVdC5wZXJzb25Gb250RmFtaWx5PVV0LnN5c3RlbUZvbnRGYW1pbHk9VXQubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoVXQucGVyc29uRm9udFNpemU9VXQuc3lzdGVtRm9udFNpemU9VXQubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKFV0LnBlcnNvbkZvbnRXZWlnaHQ9VXQuc3lzdGVtRm9udFdlaWdodD1VdC5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSwic2V0Q29uZiIpLG0yPW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJjNFNoYXBlRm9udCIpLENUPW8odD0+KHtmb250RmFtaWx5OnQuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnQuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnQuYm91bmRhcnlGb250V2VpZ2h0fSksImJvdW5kYXJ5Rm9udCIpLHJBZT1vKHQ9Pih7Zm9udEZhbWlseTp0Lm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnQubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5tZXNzYWdlRm9udFdlaWdodH0pLCJtZXNzYWdlRm9udCIpO28oUmwsImNhbGNDNFNoYXBlVGV4dFdIIik7dEs9byhmdW5jdGlvbih0LGUscil7ZS54PXIuZGF0YS5zdGFydHgsZS55PXIuZGF0YS5zdGFydHksZS53aWR0aD1yLmRhdGEuc3RvcHgtci5kYXRhLnN0YXJ0eCxlLmhlaWdodD1yLmRhdGEuc3RvcHktci5kYXRhLnN0YXJ0eSxlLmxhYmVsLnk9VXQuYzRTaGFwZU1hcmdpbi0zNTtsZXQgbj1lLndyYXAmJlV0LndyYXAsaT1DVChVdCk7aS5mb250U2l6ZT1pLmZvbnRTaXplKzIsaS5mb250V2VpZ2h0PSJib2xkIjtsZXQgYT1yYShlLmxhYmVsLnRleHQsaSk7UmwoImxhYmVsIixlLG4saSxhKSxfbC5kcmF3Qm91bmRhcnkodCxlLFV0KX0sImRyYXdCb3VuZGFyeSIpLHJLPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MDtmb3IobGV0IGEgb2Ygbil7aT0wO2xldCBzPXJbYV0sbD1tMihVdCxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmZvbnRTaXplPWwuZm9udFNpemUtMixzLnR5cGVDNFNoYXBlLndpZHRoPXJhKCJceEFCIitzLnR5cGVDNFNoYXBlLnRleHQrIlx4QkIiLGwpLHMudHlwZUM0U2hhcGUuaGVpZ2h0PWwuZm9udFNpemUrMixzLnR5cGVDNFNoYXBlLlk9VXQuYzRTaGFwZVBhZGRpbmcsaT1zLnR5cGVDNFNoYXBlLlkrcy50eXBlQzRTaGFwZS5oZWlnaHQtNCxzLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0scy50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOnMuaW1hZ2Uud2lkdGg9NDgscy5pbWFnZS5oZWlnaHQ9NDgscy5pbWFnZS5ZPWksaT1zLmltYWdlLlkrcy5pbWFnZS5oZWlnaHQ7YnJlYWt9cy5zcHJpdGUmJihzLmltYWdlLndpZHRoPTQ4LHMuaW1hZ2UuaGVpZ2h0PTQ4LHMuaW1hZ2UuWT1pLGk9cy5pbWFnZS5ZK3MuaW1hZ2UuaGVpZ2h0KTtsZXQgdT1zLndyYXAmJlV0LndyYXAsaD1VdC53aWR0aC1VdC5jNFNoYXBlUGFkZGluZyoyLGY9bTIoVXQscy50eXBlQzRTaGFwZS50ZXh0KTtpZihmLmZvbnRTaXplPWYuZm9udFNpemUrMixmLmZvbnRXZWlnaHQ9ImJvbGQiLFJsKCJsYWJlbCIscyx1LGYsaCkscy5sYWJlbC5ZPWkrOCxpPXMubGFiZWwuWStzLmxhYmVsLmhlaWdodCxzLnR5cGUmJnMudHlwZS50ZXh0IT09IiIpe3MudHlwZS50ZXh0PSJbIitzLnR5cGUudGV4dCsiXSI7bGV0IG09bTIoVXQscy50eXBlQzRTaGFwZS50ZXh0KTtSbCgidHlwZSIscyx1LG0saCkscy50eXBlLlk9aSs1LGk9cy50eXBlLlkrcy50eXBlLmhlaWdodH1lbHNlIGlmKHMudGVjaG4mJnMudGVjaG4udGV4dCE9PSIiKXtzLnRlY2huLnRleHQ9IlsiK3MudGVjaG4udGV4dCsiXSI7bGV0IG09bTIoVXQscy50ZWNobi50ZXh0KTtSbCgidGVjaG4iLHMsdSxtLGgpLHMudGVjaG4uWT1pKzUsaT1zLnRlY2huLlkrcy50ZWNobi5oZWlnaHR9bGV0IGQ9aSxwPXMubGFiZWwud2lkdGg7aWYocy5kZXNjciYmcy5kZXNjci50ZXh0IT09IiIpe2xldCBtPW0yKFV0LHMudHlwZUM0U2hhcGUudGV4dCk7UmwoImRlc2NyIixzLHUsbSxoKSxzLmRlc2NyLlk9aSsyMCxpPXMuZGVzY3IuWStzLmRlc2NyLmhlaWdodCxwPU1hdGgubWF4KHMubGFiZWwud2lkdGgscy5kZXNjci53aWR0aCksZD1pLXMuZGVzY3IudGV4dExpbmVzKjV9cD1wK1V0LmM0U2hhcGVQYWRkaW5nLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aHx8VXQud2lkdGgscCxVdC53aWR0aCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHR8fFV0LmhlaWdodCxkLFV0LmhlaWdodCkscy5tYXJnaW49cy5tYXJnaW58fFV0LmM0U2hhcGVNYXJnaW4sdC5pbnNlcnQocyksX2wuZHJhd0M0U2hhcGUoZSxzLFV0KX10LmJ1bXBMYXN0TWFyZ2luKFV0LmM0U2hhcGVNYXJnaW4pfSwiZHJhd0M0U2hhcGVBcnJheSIpLE1zPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBvaW50Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLng9ZSx0aGlzLnk9cn19LEpqPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10Lngsbj10LnksaT1lLngsYT1lLnkscz1yK3Qud2lkdGgvMixsPW4rdC5oZWlnaHQvMix1PU1hdGguYWJzKHItaSksaD1NYXRoLmFicyhuLWEpLGY9aC91LGQ9dC5oZWlnaHQvdC53aWR0aCxwPW51bGw7cmV0dXJuIG49PWEmJnI8aT9wPW5ldyBNcyhyK3Qud2lkdGgsbCk6bj09YSYmcj5pP3A9bmV3IE1zKHIsbCk6cj09aSYmbjxhP3A9bmV3IE1zKHMsbit0LmhlaWdodCk6cj09aSYmbj5hJiYocD1uZXcgTXMocyxuKSkscj5pJiZuPGE/ZD49Zj9wPW5ldyBNcyhyLGwrZip0LndpZHRoLzIpOnA9bmV3IE1zKHMtdS9oKnQuaGVpZ2h0LzIsbit0LmhlaWdodCk6cjxpJiZuPGE/ZD49Zj9wPW5ldyBNcyhyK3Qud2lkdGgsbCtmKnQud2lkdGgvMik6cD1uZXcgTXMocyt1L2gqdC5oZWlnaHQvMixuK3QuaGVpZ2h0KTpyPGkmJm4+YT9kPj1mP3A9bmV3IE1zKHIrdC53aWR0aCxsLWYqdC53aWR0aC8yKTpwPW5ldyBNcyhzK3QuaGVpZ2h0LzIqdS9oLG4pOnI+aSYmbj5hJiYoZD49Zj9wPW5ldyBNcyhyLGwtdC53aWR0aC8yKmYpOnA9bmV3IE1zKHMtdC5oZWlnaHQvMip1L2gsbikpLHB9LCJnZXRJbnRlcnNlY3RQb2ludCIpLG5BZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3g6MCx5OjB9O3IueD1lLngrZS53aWR0aC8yLHIueT1lLnkrZS5oZWlnaHQvMjtsZXQgbj1Kaih0LHIpO3IueD10LngrdC53aWR0aC8yLHIueT10LnkrdC5oZWlnaHQvMjtsZXQgaT1KaihlLHIpO3JldHVybntzdGFydFBvaW50Om4sZW5kUG9pbnQ6aX19LCJnZXRJbnRlcnNlY3RQb2ludHMiKSxpQWU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wO2ZvcihsZXQgYSBvZiBlKXtpPWkrMTtsZXQgcz1hLndyYXAmJlV0LndyYXAsbD1yQWUoVXQpO24uZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKGEubGFiZWwudGV4dD1pKyI6ICIrYS5sYWJlbC50ZXh0KTtsZXQgaD1yYShhLmxhYmVsLnRleHQsbCk7UmwoImxhYmVsIixhLHMsbCxoKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGg9cmEoYS50ZWNobi50ZXh0LGwpLFJsKCJ0ZWNobiIsYSxzLGwsaCkpLGEuZGVzY3ImJmEuZGVzY3IudGV4dCE9PSIiJiYoaD1yYShhLmRlc2NyLnRleHQsbCksUmwoImRlc2NyIixhLHMsbCxoKSk7bGV0IGY9cihhLmZyb20pLGQ9cihhLnRvKSxwPW5BZShmLGQpO2Euc3RhcnRQb2ludD1wLnN0YXJ0UG9pbnQsYS5lbmRQb2ludD1wLmVuZFBvaW50fV9sLmRyYXdSZWxzKHQsZSxVdCl9LCJkcmF3UmVscyIpO28obkssImRyYXdJbnNpZGVCb3VuZGFyeSIpO2FBZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe1V0PW1lKCkuYzQ7bGV0IGk9bWUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9R2UoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9HZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksbD1uLmRiO24uZGIuc2V0V3JhcChVdC53cmFwKSxlSz1sLmdldEM0U2hhcGVJblJvdygpLE85PWwuZ2V0QzRCb3VuZGFyeUluUm93KCksWC5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KFV0LG51bGwsMil9YCk7bGV0IHU9aT09PSJzYW5kYm94Ij9zLnNlbGVjdChgW2lkPSIke2V9Il1gKTpHZShgW2lkPSIke2V9Il1gKTtfbC5pbnNlcnRDb21wdXRlckljb24odSksX2wuaW5zZXJ0RGF0YWJhc2VJY29uKHUpLF9sLmluc2VydENsb2NrSWNvbih1KTtsZXQgaD1uZXcgRFQobik7aC5zZXREYXRhKFV0LmRpYWdyYW1NYXJnaW5YLFV0LmRpYWdyYW1NYXJnaW5YLFV0LmRpYWdyYW1NYXJnaW5ZLFV0LmRpYWdyYW1NYXJnaW5ZKSxoLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCxBVD1VdC5kaWFncmFtTWFyZ2luWCxfVD1VdC5kaWFncmFtTWFyZ2luWTtsZXQgZj1uLmRiLmdldFRpdGxlKCksZD1uLmRiLmdldEJvdW5kYXJpZXMoIiIpO25LKHUsIiIsaCxkLG4pLF9sLmluc2VydEFycm93SGVhZCh1KSxfbC5pbnNlcnRBcnJvd0VuZCh1KSxfbC5pbnNlcnRBcnJvd0Nyb3NzSGVhZCh1KSxfbC5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQodSksaUFlKHUsbi5kYi5nZXRSZWxzKCksbi5kYi5nZXRDNFNoYXBlLG4pLGguZGF0YS5zdG9weD1BVCxoLmRhdGEuc3RvcHk9X1Q7bGV0IHA9aC5kYXRhLGc9cC5zdG9weS1wLnN0YXJ0eSsyKlV0LmRpYWdyYW1NYXJnaW5ZLHY9cC5zdG9weC1wLnN0YXJ0eCsyKlV0LmRpYWdyYW1NYXJnaW5YO2YmJnUuYXBwZW5kKCJ0ZXh0IikudGV4dChmKS5hdHRyKCJ4IiwocC5zdG9weC1wLnN0YXJ0eCkvMi00KlV0LmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IixwLnN0YXJ0eStVdC5kaWFncmFtTWFyZ2luWSksZm4odSxnLHYsVXQudXNlTWF4V2lkdGgpO2xldCB4PWY/NjA6MDt1LmF0dHIoInZpZXdCb3giLHAuc3RhcnR4LVV0LmRpYWdyYW1NYXJnaW5YKyIgLSIrKFV0LmRpYWdyYW1NYXJnaW5ZK3gpKyIgIit2KyIgIisoZyt4KSksWC5kZWJ1ZygibW9kZWxzOiIscCl9LCJkcmF3IiksQjk9e2RyYXdQZXJzb25PclN5c3RlbUFycmF5OnJLLGRyYXdCb3VuZGFyeTp0SyxzZXRDb25mOlA5LGRyYXc6YUFlfX0pO3ZhciBzQWUsYUssc0s9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzQWU9byh0PT5gLnBlcnNvbiB7CiAgICBzdHJva2U6ICR7dC5wZXJzb25Cb3JkZXJ9OwogICAgZmlsbDogJHt0LnBlcnNvbkJrZ307CiAgfQpgLCJnZXRTdHlsZXMiKSxhSz1zQWV9KTt2YXIgb0s9e307dXIob0sse2RpYWdyYW06KCk9Pm9BZX0pO3ZhciBvQWUsbEs9TigoKT0+eyJ1c2Ugc3RyaWN0IjthNygpO0xBKCk7aUsoKTtzSygpO29BZT17cGFyc2VyOkckLGRiOnN2LHJlbmRlcmVyOkI5LHN0eWxlczphSyxpbml0Om8oKHtjNDp0LHdyYXA6ZX0pPT57Qjkuc2V0Q29uZih0KSxzdi5zZXRXcmFwKGUpfSwiaW5pdCIpfX0pO2Z1bmN0aW9uIENLKHQpe3JldHVybiB0eXBlb2YgdD4idSJ8fHQ9PT1udWxsfWZ1bmN0aW9uIGhBZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbH1mdW5jdGlvbiBmQWUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpDSyh0KT9bXTpbdF19ZnVuY3Rpb24gZEFlKHQsZSl7dmFyIHIsbixpLGE7aWYoZSlmb3IoYT1PYmplY3Qua2V5cyhlKSxyPTAsbj1hLmxlbmd0aDtyPG47cis9MSlpPWFbcl0sdFtpXT1lW2ldO3JldHVybiB0fWZ1bmN0aW9uIHBBZSh0LGUpe3ZhciByPSIiLG47Zm9yKG49MDtuPGU7bis9MSlyKz10O3JldHVybiByfWZ1bmN0aW9uIG1BZSh0KXtyZXR1cm4gdD09PTAmJk51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PTEvdH1mdW5jdGlvbiBBSyh0LGUpe3ZhciByPSIiLG49dC5yZWFzb258fCIodW5rbm93biByZWFzb24pIjtyZXR1cm4gdC5tYXJrPyh0Lm1hcmsubmFtZSYmKHIrPSdpbiAiJyt0Lm1hcmsubmFtZSsnIiAnKSxyKz0iKCIrKHQubWFyay5saW5lKzEpKyI6IisodC5tYXJrLmNvbHVtbisxKSsiKSIsIWUmJnQubWFyay5zbmlwcGV0JiYocis9YAoKYCt0Lm1hcmsuc25pcHBldCksbisiICIrcik6bn1mdW5jdGlvbiB5Mih0LGUpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj10LHRoaXMubWFyaz1lLHRoaXMubWVzc2FnZT1BSyh0aGlzLCExKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2t8fCIifWZ1bmN0aW9uIEY5KHQsZSxyLG4saSl7dmFyIGE9IiIscz0iIixsPU1hdGguZmxvb3IoaS8yKS0xO3JldHVybiBuLWU+bCYmKGE9IiAuLi4gIixlPW4tbCthLmxlbmd0aCksci1uPmwmJihzPSIgLi4uIixyPW4rbC1zLmxlbmd0aCkse3N0cjphK3Quc2xpY2UoZSxyKS5yZXBsYWNlKC9cdC9nLCJcdTIxOTIiKStzLHBvczpuLWUrYS5sZW5ndGh9fWZ1bmN0aW9uICQ5KHQsZSl7cmV0dXJuIEdpLnJlcGVhdCgiICIsZS10Lmxlbmd0aCkrdH1mdW5jdGlvbiB3QWUodCxlKXtpZihlPU9iamVjdC5jcmVhdGUoZXx8bnVsbCksIXQuYnVmZmVyKXJldHVybiBudWxsO2UubWF4TGVuZ3RofHwoZS5tYXhMZW5ndGg9NzkpLHR5cGVvZiBlLmluZGVudCE9Im51bWJlciImJihlLmluZGVudD0xKSx0eXBlb2YgZS5saW5lc0JlZm9yZSE9Im51bWJlciImJihlLmxpbmVzQmVmb3JlPTMpLHR5cGVvZiBlLmxpbmVzQWZ0ZXIhPSJudW1iZXIiJiYoZS5saW5lc0FmdGVyPTIpO2Zvcih2YXIgcj0vXHI/XG58XHJ8XDAvZyxuPVswXSxpPVtdLGEscz0tMTthPXIuZXhlYyh0LmJ1ZmZlcik7KWkucHVzaChhLmluZGV4KSxuLnB1c2goYS5pbmRleCthWzBdLmxlbmd0aCksdC5wb3NpdGlvbjw9YS5pbmRleCYmczwwJiYocz1uLmxlbmd0aC0yKTtzPDAmJihzPW4ubGVuZ3RoLTEpO3ZhciBsPSIiLHUsaCxmPU1hdGgubWluKHQubGluZStlLmxpbmVzQWZ0ZXIsaS5sZW5ndGgpLnRvU3RyaW5nKCkubGVuZ3RoLGQ9ZS5tYXhMZW5ndGgtKGUuaW5kZW50K2YrMyk7Zm9yKHU9MTt1PD1lLmxpbmVzQmVmb3JlJiYhKHMtdTwwKTt1KyspaD1GOSh0LmJ1ZmZlcixuW3MtdV0saVtzLXVdLHQucG9zaXRpb24tKG5bc10tbltzLXVdKSxkKSxsPUdpLnJlcGVhdCgiICIsZS5pbmRlbnQpKyQ5KCh0LmxpbmUtdSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYCtsO2ZvcihoPUY5KHQuYnVmZmVyLG5bc10saVtzXSx0LnBvc2l0aW9uLGQpLGwrPUdpLnJlcGVhdCgiICIsZS5pbmRlbnQpKyQ5KCh0LmxpbmUrMSkudG9TdHJpbmcoKSxmKSsiIHwgIitoLnN0citgCmAsbCs9R2kucmVwZWF0KCItIixlLmluZGVudCtmKzMraC5wb3MpK2BeCmAsdT0xO3U8PWUubGluZXNBZnRlciYmIShzK3U+PWkubGVuZ3RoKTt1KyspaD1GOSh0LmJ1ZmZlcixuW3MrdV0saVtzK3VdLHQucG9zaXRpb24tKG5bc10tbltzK3VdKSxkKSxsKz1HaS5yZXBlYXQoIiAiLGUuaW5kZW50KSskOSgodC5saW5lK3UrMSkudG9TdHJpbmcoKSxmKSsiIHwgIitoLnN0citgCmA7cmV0dXJuIGwucmVwbGFjZSgvXG4kLywiIil9ZnVuY3Rpb24gQ0FlKHQpe3ZhciBlPXt9O3JldHVybiB0IT09bnVsbCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXt0W3JdLmZvckVhY2goZnVuY3Rpb24obil7ZVtTdHJpbmcobildPXJ9KX0pLGV9ZnVuY3Rpb24gQUFlKHQsZSl7aWYoZT1lfHx7fSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKEVBZS5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IElzKCdVbmtub3duIG9wdGlvbiAiJytyKyciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInK3QrJyIgWUFNTCB0eXBlLicpfSksdGhpcy5vcHRpb25zPWUsdGhpcy50YWc9dCx0aGlzLmtpbmQ9ZS5raW5kfHxudWxsLHRoaXMucmVzb2x2ZT1lLnJlc29sdmV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHRoaXMuY29uc3RydWN0PWUuY29uc3RydWN0fHxmdW5jdGlvbihyKXtyZXR1cm4gcn0sdGhpcy5pbnN0YW5jZU9mPWUuaW5zdGFuY2VPZnx8bnVsbCx0aGlzLnByZWRpY2F0ZT1lLnByZWRpY2F0ZXx8bnVsbCx0aGlzLnJlcHJlc2VudD1lLnJlcHJlc2VudHx8bnVsbCx0aGlzLnJlcHJlc2VudE5hbWU9ZS5yZXByZXNlbnROYW1lfHxudWxsLHRoaXMuZGVmYXVsdFN0eWxlPWUuZGVmYXVsdFN0eWxlfHxudWxsLHRoaXMubXVsdGk9ZS5tdWx0aXx8ITEsdGhpcy5zdHlsZUFsaWFzZXM9Q0FlKGUuc3R5bGVBbGlhc2VzfHxudWxsKSxTQWUuaW5kZXhPZih0aGlzLmtpbmQpPT09LTEpdGhyb3cgbmV3IElzKCdVbmtub3duIGtpbmQgIicrdGhpcy5raW5kKyciIGlzIHNwZWNpZmllZCBmb3IgIicrdCsnIiBZQU1MIHR5cGUuJyl9ZnVuY3Rpb24gaEsodCxlKXt2YXIgcj1bXTtyZXR1cm4gdFtlXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXIubGVuZ3RoO3IuZm9yRWFjaChmdW5jdGlvbihhLHMpe2EudGFnPT09bi50YWcmJmEua2luZD09PW4ua2luZCYmYS5tdWx0aT09PW4ubXVsdGkmJihpPXMpfSkscltpXT1ufSkscn1mdW5jdGlvbiBfQWUoKXt2YXIgdD17c2NhbGFyOnt9LHNlcXVlbmNlOnt9LG1hcHBpbmc6e30sZmFsbGJhY2s6e30sbXVsdGk6e3NjYWxhcjpbXSxzZXF1ZW5jZTpbXSxtYXBwaW5nOltdLGZhbGxiYWNrOltdfX0sZSxyO2Z1bmN0aW9uIG4oaSl7aS5tdWx0aT8odC5tdWx0aVtpLmtpbmRdLnB1c2goaSksdC5tdWx0aS5mYWxsYmFjay5wdXNoKGkpKTp0W2kua2luZF1baS50YWddPXQuZmFsbGJhY2tbaS50YWddPWl9Zm9yKG8obiwiY29sbGVjdFR5cGUiKSxlPTAscj1hcmd1bWVudHMubGVuZ3RoO2U8cjtlKz0xKWFyZ3VtZW50c1tlXS5mb3JFYWNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEc5KHQpe3JldHVybiB0aGlzLmV4dGVuZCh0KX1mdW5jdGlvbiBJQWUodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU9PT0xJiZ0PT09In4ifHxlPT09NCYmKHQ9PT0ibnVsbCJ8fHQ9PT0iTnVsbCJ8fHQ9PT0iTlVMTCIpfWZ1bmN0aW9uIE9BZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFBBZSh0KXtyZXR1cm4gdD09PW51bGx9ZnVuY3Rpb24gRkFlKHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlPXQubGVuZ3RoO3JldHVybiBlPT09NCYmKHQ9PT0idHJ1ZSJ8fHQ9PT0iVHJ1ZSJ8fHQ9PT0iVFJVRSIpfHxlPT09NSYmKHQ9PT0iZmFsc2UifHx0PT09IkZhbHNlInx8dD09PSJGQUxTRSIpfWZ1bmN0aW9uICRBZSh0KXtyZXR1cm4gdD09PSJ0cnVlInx8dD09PSJUcnVlInx8dD09PSJUUlVFIn1mdW5jdGlvbiB6QWUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IEJvb2xlYW5dIn1mdW5jdGlvbiBWQWUodCl7cmV0dXJuIDQ4PD10JiZ0PD01N3x8NjU8PXQmJnQ8PTcwfHw5Nzw9dCYmdDw9MTAyfWZ1bmN0aW9uIFVBZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU1fWZ1bmN0aW9uIEhBZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3fWZ1bmN0aW9uIFdBZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt2YXIgZT10Lmxlbmd0aCxyPTAsbj0hMSxpO2lmKCFlKXJldHVybiExO2lmKGk9dFtyXSwoaT09PSItInx8aT09PSIrIikmJihpPXRbKytyXSksaT09PSIwIil7aWYocisxPT09ZSlyZXR1cm4hMDtpZihpPXRbKytyXSxpPT09ImIiKXtmb3IocisrO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKGkhPT0iMCImJmkhPT0iMSIpcmV0dXJuITE7bj0hMH1yZXR1cm4gbiYmaSE9PSJfIn1pZihpPT09IngiKXtmb3IocisrO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKCFWQWUodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4hMTtuPSEwfXJldHVybiBuJiZpIT09Il8ifWlmKGk9PT0ibyIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoIVVBZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiExO249ITB9cmV0dXJuIG4mJmkhPT0iXyJ9fWlmKGk9PT0iXyIpcmV0dXJuITE7Zm9yKDtyPGU7cisrKWlmKGk9dFtyXSxpIT09Il8iKXtpZighSEFlKHQuY2hhckNvZGVBdChyKSkpcmV0dXJuITE7bj0hMH1yZXR1cm4hKCFufHxpPT09Il8iKX1mdW5jdGlvbiBxQWUodCl7dmFyIGU9dCxyPTEsbjtpZihlLmluZGV4T2YoIl8iKSE9PS0xJiYoZT1lLnJlcGxhY2UoL18vZywiIikpLG49ZVswXSwobj09PSItInx8bj09PSIrIikmJihuPT09Ii0iJiYocj0tMSksZT1lLnNsaWNlKDEpLG49ZVswXSksZT09PSIwIilyZXR1cm4gMDtpZihuPT09IjAiKXtpZihlWzFdPT09ImIiKXJldHVybiByKnBhcnNlSW50KGUuc2xpY2UoMiksMik7aWYoZVsxXT09PSJ4IilyZXR1cm4gcipwYXJzZUludChlLnNsaWNlKDIpLDE2KTtpZihlWzFdPT09Im8iKXJldHVybiByKnBhcnNlSW50KGUuc2xpY2UoMiksOCl9cmV0dXJuIHIqcGFyc2VJbnQoZSwxMCl9ZnVuY3Rpb24gWUFlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBOdW1iZXJdIiYmdCUxPT09MCYmIUdpLmlzTmVnYXRpdmVaZXJvKHQpfWZ1bmN0aW9uIEtBZSh0KXtyZXR1cm4hKHQ9PT1udWxsfHwhakFlLnRlc3QodCl8fHRbdC5sZW5ndGgtMV09PT0iXyIpfWZ1bmN0aW9uIFFBZSh0KXt2YXIgZSxyO3JldHVybiBlPXQucmVwbGFjZSgvXy9nLCIiKS50b0xvd2VyQ2FzZSgpLHI9ZVswXT09PSItIj8tMToxLCIrLSIuaW5kZXhPZihlWzBdKT49MCYmKGU9ZS5zbGljZSgxKSksZT09PSIuaW5mIj9yPT09MT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmU9PT0iLm5hbiI/TmFOOnIqcGFyc2VGbG9hdChlLDEwKX1mdW5jdGlvbiBKQWUodCxlKXt2YXIgcjtpZihpc05hTih0KSlzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIubmFuIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5OQU4iO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLk5hTiJ9ZWxzZSBpZihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk9PT10KXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuSW5mIn1lbHNlIGlmKE51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PXQpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLS5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLS5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLS5JbmYifWVsc2UgaWYoR2kuaXNOZWdhdGl2ZVplcm8odCkpcmV0dXJuIi0wLjAiO3JldHVybiByPXQudG9TdHJpbmcoMTApLFpBZS50ZXN0KHIpP3IucmVwbGFjZSgiZSIsIi5lIik6cn1mdW5jdGlvbiBlOGUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE51bWJlcl0iJiYodCUxIT09MHx8R2kuaXNOZWdhdGl2ZVplcm8odCkpfWZ1bmN0aW9uIG44ZSh0KXtyZXR1cm4gdD09PW51bGw/ITE6REsuZXhlYyh0KSE9PW51bGx8fExLLmV4ZWModCkhPT1udWxsfWZ1bmN0aW9uIGk4ZSh0KXt2YXIgZSxyLG4saSxhLHMsbCx1PTAsaD1udWxsLGYsZCxwO2lmKGU9REsuZXhlYyh0KSxlPT09bnVsbCYmKGU9TEsuZXhlYyh0KSksZT09PW51bGwpdGhyb3cgbmV3IEVycm9yKCJEYXRlIHJlc29sdmUgZXJyb3IiKTtpZihyPStlWzFdLG49K2VbMl0tMSxpPStlWzNdLCFlWzRdKXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhyLG4saSkpO2lmKGE9K2VbNF0scz0rZVs1XSxsPStlWzZdLGVbN10pe2Zvcih1PWVbN10uc2xpY2UoMCwzKTt1Lmxlbmd0aDwzOyl1Kz0iMCI7dT0rdX1yZXR1cm4gZVs5XSYmKGY9K2VbMTBdLGQ9KyhlWzExXXx8MCksaD0oZio2MCtkKSo2ZTQsZVs5XT09PSItIiYmKGg9LWgpKSxwPW5ldyBEYXRlKERhdGUuVVRDKHIsbixpLGEscyxsLHUpKSxoJiZwLnNldFRpbWUocC5nZXRUaW1lKCktaCkscH1mdW5jdGlvbiBhOGUodCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBvOGUodCl7cmV0dXJuIHQ9PT0iPDwifHx0PT09bnVsbH1mdW5jdGlvbiBjOGUodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGUscixuPTAsaT10Lmxlbmd0aCxhPXE5O2ZvcihyPTA7cjxpO3IrKylpZihlPWEuaW5kZXhPZih0LmNoYXJBdChyKSksIShlPjY0KSl7aWYoZTwwKXJldHVybiExO24rPTZ9cmV0dXJuIG4lOD09PTB9ZnVuY3Rpb24gdThlKHQpe3ZhciBlLHIsbj10LnJlcGxhY2UoL1tcclxuPV0vZywiIiksaT1uLmxlbmd0aCxhPXE5LHM9MCxsPVtdO2ZvcihlPTA7ZTxpO2UrKyllJTQ9PT0wJiZlJiYobC5wdXNoKHM+PjE2JjI1NSksbC5wdXNoKHM+PjgmMjU1KSxsLnB1c2gocyYyNTUpKSxzPXM8PDZ8YS5pbmRleE9mKG4uY2hhckF0KGUpKTtyZXR1cm4gcj1pJTQqNixyPT09MD8obC5wdXNoKHM+PjE2JjI1NSksbC5wdXNoKHM+PjgmMjU1KSxsLnB1c2gocyYyNTUpKTpyPT09MTg/KGwucHVzaChzPj4xMCYyNTUpLGwucHVzaChzPj4yJjI1NSkpOnI9PT0xMiYmbC5wdXNoKHM+PjQmMjU1KSxuZXcgVWludDhBcnJheShsKX1mdW5jdGlvbiBoOGUodCl7dmFyIGU9IiIscj0wLG4saSxhPXQubGVuZ3RoLHM9cTk7Zm9yKG49MDtuPGE7bisrKW4lMz09PTAmJm4mJihlKz1zW3I+PjE4JjYzXSxlKz1zW3I+PjEyJjYzXSxlKz1zW3I+PjYmNjNdLGUrPXNbciY2M10pLHI9KHI8PDgpK3Rbbl07cmV0dXJuIGk9YSUzLGk9PT0wPyhlKz1zW3I+PjE4JjYzXSxlKz1zW3I+PjEyJjYzXSxlKz1zW3I+PjYmNjNdLGUrPXNbciY2M10pOmk9PT0yPyhlKz1zW3I+PjEwJjYzXSxlKz1zW3I+PjQmNjNdLGUrPXNbcjw8MiY2M10sZSs9c1s2NF0pOmk9PT0xJiYoZSs9c1tyPj4yJjYzXSxlKz1zW3I8PDQmNjNdLGUrPXNbNjRdLGUrPXNbNjRdKSxlfWZ1bmN0aW9uIGY4ZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgVWludDhBcnJheV0ifWZ1bmN0aW9uIGc4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZT1bXSxyLG4saSxhLHMsbD10O2ZvcihyPTAsbj1sLmxlbmd0aDtyPG47cis9MSl7aWYoaT1sW3JdLHM9ITEsbThlLmNhbGwoaSkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTtmb3IoYSBpbiBpKWlmKHA4ZS5jYWxsKGksYSkpaWYoIXMpcz0hMDtlbHNlIHJldHVybiExO2lmKCFzKXJldHVybiExO2lmKGUuaW5kZXhPZihhKT09PS0xKWUucHVzaChhKTtlbHNlIHJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHk4ZSh0KXtyZXR1cm4gdCE9PW51bGw/dDpbXX1mdW5jdGlvbiBiOGUodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGUscixuLGksYSxzPXQ7Zm9yKGE9bmV3IEFycmF5KHMubGVuZ3RoKSxlPTAscj1zLmxlbmd0aDtlPHI7ZSs9MSl7aWYobj1zW2VdLHg4ZS5jYWxsKG4pIT09IltvYmplY3QgT2JqZWN0XSJ8fChpPU9iamVjdC5rZXlzKG4pLGkubGVuZ3RoIT09MSkpcmV0dXJuITE7YVtlXT1baVswXSxuW2lbMF1dXX1yZXR1cm4hMH1mdW5jdGlvbiBUOGUodCl7aWYodD09PW51bGwpcmV0dXJuW107dmFyIGUscixuLGksYSxzPXQ7Zm9yKGE9bmV3IEFycmF5KHMubGVuZ3RoKSxlPTAscj1zLmxlbmd0aDtlPHI7ZSs9MSluPXNbZV0saT1PYmplY3Qua2V5cyhuKSxhW2VdPVtpWzBdLG5baVswXV1dO3JldHVybiBhfWZ1bmN0aW9uIEU4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZSxyPXQ7Zm9yKGUgaW4gcilpZihrOGUuY2FsbChyLGUpJiZyW2VdIT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBTOGUodCl7cmV0dXJuIHQhPT1udWxsP3Q6e319ZnVuY3Rpb24gZEsodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB2Yyh0KXtyZXR1cm4gdD09PTEwfHx0PT09MTN9ZnVuY3Rpb24gR2QodCl7cmV0dXJuIHQ9PT05fHx0PT09MzJ9ZnVuY3Rpb24gT3ModCl7cmV0dXJuIHQ9PT05fHx0PT09MzJ8fHQ9PT0xMHx8dD09PTEzfWZ1bmN0aW9uIHltKHQpe3JldHVybiB0PT09NDR8fHQ9PT05MXx8dD09PTkzfHx0PT09MTIzfHx0PT09MTI1fWZ1bmN0aW9uIFI4ZSh0KXt2YXIgZTtyZXR1cm4gNDg8PXQmJnQ8PTU3P3QtNDg6KGU9dHwzMiw5Nzw9ZSYmZTw9MTAyP2UtOTcrMTA6LTEpfWZ1bmN0aW9uIE44ZSh0KXtyZXR1cm4gdD09PTEyMD8yOnQ9PT0xMTc/NDp0PT09ODU/ODowfWZ1bmN0aW9uIE04ZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3P3QtNDg6LTF9ZnVuY3Rpb24gcEsodCl7cmV0dXJuIHQ9PT00OD8iXDAiOnQ9PT05Nz8iXHgwNyI6dD09PTk4PyJcYiI6dD09PTExNnx8dD09PTk/IgkiOnQ9PT0xMTA/YApgOnQ9PT0xMTg/Ilx2Ijp0PT09MTAyPyJcZiI6dD09PTExND8iXHIiOnQ9PT0xMDE/Ilx4MUIiOnQ9PT0zMj8iICI6dD09PTM0PyciJzp0PT09NDc/Ii8iOnQ9PT05Mj8iXFwiOnQ9PT03OD8iXHg4NSI6dD09PTk1PyJceEEwIjp0PT09NzY/Ilx1MjAyOCI6dD09PTgwPyJcdTIwMjkiOiIifWZ1bmN0aW9uIEk4ZSh0KXtyZXR1cm4gdDw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZSh0KTpTdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTY1NTM2Pj4xMCkrNTUyOTYsKHQtNjU1MzYmMTAyMykrNTYzMjApfWZ1bmN0aW9uIE84ZSh0LGUpe3RoaXMuaW5wdXQ9dCx0aGlzLmZpbGVuYW1lPWUuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9ZS5zY2hlbWF8fFJLLHRoaXMub25XYXJuaW5nPWUub25XYXJuaW5nfHxudWxsLHRoaXMubGVnYWN5PWUubGVnYWN5fHwhMSx0aGlzLmpzb249ZS5qc29ufHwhMSx0aGlzLmxpc3RlbmVyPWUubGlzdGVuZXJ8fG51bGwsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy50eXBlTWFwPXRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5saW5lPTAsdGhpcy5saW5lU3RhcnQ9MCx0aGlzLmxpbmVJbmRlbnQ9MCx0aGlzLmZpcnN0VGFiSW5MaW5lPS0xLHRoaXMuZG9jdW1lbnRzPVtdfWZ1bmN0aW9uIEZLKHQsZSl7dmFyIHI9e25hbWU6dC5maWxlbmFtZSxidWZmZXI6dC5pbnB1dC5zbGljZSgwLC0xKSxwb3NpdGlvbjp0LnBvc2l0aW9uLGxpbmU6dC5saW5lLGNvbHVtbjp0LnBvc2l0aW9uLXQubGluZVN0YXJ0fTtyZXR1cm4gci5zbmlwcGV0PWtBZShyKSxuZXcgSXMoZSxyKX1mdW5jdGlvbiBRdCh0LGUpe3Rocm93IEZLKHQsZSl9ZnVuY3Rpb24gTlQodCxlKXt0Lm9uV2FybmluZyYmdC5vbldhcm5pbmcuY2FsbChudWxsLEZLKHQsZSkpfWZ1bmN0aW9uIHFoKHQsZSxyLG4pe3ZhciBpLGEscyxsO2lmKGU8cil7aWYobD10LmlucHV0LnNsaWNlKGUsciksbilmb3IoaT0wLGE9bC5sZW5ndGg7aTxhO2krPTEpcz1sLmNoYXJDb2RlQXQoaSkscz09PTl8fDMyPD1zJiZzPD0xMTE0MTExfHxRdCh0LCJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpO2Vsc2UgXzhlLnRlc3QobCkmJlF0KHQsInRoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIik7dC5yZXN1bHQrPWx9fWZ1bmN0aW9uIGdLKHQsZSxyLG4pe3ZhciBpLGEscyxsO2ZvcihHaS5pc09iamVjdChyKXx8UXQodCwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSxpPU9iamVjdC5rZXlzKHIpLHM9MCxsPWkubGVuZ3RoO3M8bDtzKz0xKWE9aVtzXSxZaC5jYWxsKGUsYSl8fChlW2FdPXJbYV0sblthXT0hMCl9ZnVuY3Rpb24gdm0odCxlLHIsbixpLGEscyxsLHUpe3ZhciBoLGY7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IoaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpKSxoPTAsZj1pLmxlbmd0aDtoPGY7aCs9MSlBcnJheS5pc0FycmF5KGlbaF0pJiZRdCh0LCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIiksdHlwZW9mIGk9PSJvYmplY3QiJiZkSyhpW2hdKT09PSJbb2JqZWN0IE9iamVjdF0iJiYoaVtoXT0iW29iamVjdCBPYmplY3RdIik7aWYodHlwZW9mIGk9PSJvYmplY3QiJiZkSyhpKT09PSJbb2JqZWN0IE9iamVjdF0iJiYoaT0iW29iamVjdCBPYmplY3RdIiksaT1TdHJpbmcoaSksZT09PW51bGwmJihlPXt9KSxuPT09InRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIilpZihBcnJheS5pc0FycmF5KGEpKWZvcihoPTAsZj1hLmxlbmd0aDtoPGY7aCs9MSlnSyh0LGUsYVtoXSxyKTtlbHNlIGdLKHQsZSxhLHIpO2Vsc2UhdC5qc29uJiYhWWguY2FsbChyLGkpJiZZaC5jYWxsKGUsaSkmJih0LmxpbmU9c3x8dC5saW5lLHQubGluZVN0YXJ0PWx8fHQubGluZVN0YXJ0LHQucG9zaXRpb249dXx8dC5wb3NpdGlvbixRdCh0LCJkdXBsaWNhdGVkIG1hcHBpbmcga2V5IikpLGk9PT0iX19wcm90b19fIj9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTphfSk6ZVtpXT1hLGRlbGV0ZSByW2ldO3JldHVybiBlfWZ1bmN0aW9uIFk5KHQpe3ZhciBlO2U9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGU9PT0xMD90LnBvc2l0aW9uKys6ZT09PTEzPyh0LnBvc2l0aW9uKyssdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09MTAmJnQucG9zaXRpb24rKyk6UXQodCwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkIiksdC5saW5lKz0xLHQubGluZVN0YXJ0PXQucG9zaXRpb24sdC5maXJzdFRhYkluTGluZT0tMX1mdW5jdGlvbiBfaSh0LGUscil7Zm9yKHZhciBuPTAsaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7aSE9PTA7KXtmb3IoO0dkKGkpOylpPT09OSYmdC5maXJzdFRhYkluTGluZT09PS0xJiYodC5maXJzdFRhYkluTGluZT10LnBvc2l0aW9uKSxpPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKGUmJmk9PT0zNSlkbyBpPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKGkhPT0xMCYmaSE9PTEzJiZpIT09MCk7aWYodmMoaSkpZm9yKFk5KHQpLGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLG4rKyx0LmxpbmVJbmRlbnQ9MDtpPT09MzI7KXQubGluZUluZGVudCsrLGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gciE9PS0xJiZuIT09MCYmdC5saW5lSW5kZW50PHImJk5UKHQsImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLG59ZnVuY3Rpb24gT1QodCl7dmFyIGU9dC5wb3NpdGlvbixyO3JldHVybiByPXQuaW5wdXQuY2hhckNvZGVBdChlKSwhISgocj09PTQ1fHxyPT09NDYpJiZyPT09dC5pbnB1dC5jaGFyQ29kZUF0KGUrMSkmJnI9PT10LmlucHV0LmNoYXJDb2RlQXQoZSsyKSYmKGUrPTMscj10LmlucHV0LmNoYXJDb2RlQXQoZSkscj09PTB8fE9zKHIpKSl9ZnVuY3Rpb24gWDkodCxlKXtlPT09MT90LnJlc3VsdCs9IiAiOmU+MSYmKHQucmVzdWx0Kz1HaS5yZXBlYXQoYApgLGUtMSkpfWZ1bmN0aW9uIFA4ZSh0LGUscil7dmFyIG4saSxhLHMsbCx1LGgsZixkPXQua2luZCxwPXQucmVzdWx0LG07aWYobT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksT3MobSl8fHltKG0pfHxtPT09MzV8fG09PT0zOHx8bT09PTQyfHxtPT09MzN8fG09PT0xMjR8fG09PT02Mnx8bT09PTM5fHxtPT09MzR8fG09PT0zN3x8bT09PTY0fHxtPT09OTZ8fChtPT09NjN8fG09PT00NSkmJihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLE9zKGkpfHxyJiZ5bShpKSkpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIixhPXM9dC5wb3NpdGlvbixsPSExO20hPT0wOyl7aWYobT09PTU4KXtpZihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLE9zKGkpfHxyJiZ5bShpKSlicmVha31lbHNlIGlmKG09PT0zNSl7aWYobj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbi0xKSxPcyhuKSlicmVha31lbHNle2lmKHQucG9zaXRpb249PT10LmxpbmVTdGFydCYmT1QodCl8fHImJnltKG0pKWJyZWFrO2lmKHZjKG0pKWlmKHU9dC5saW5lLGg9dC5saW5lU3RhcnQsZj10LmxpbmVJbmRlbnQsX2kodCwhMSwtMSksdC5saW5lSW5kZW50Pj1lKXtsPSEwLG09dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2NvbnRpbnVlfWVsc2V7dC5wb3NpdGlvbj1zLHQubGluZT11LHQubGluZVN0YXJ0PWgsdC5saW5lSW5kZW50PWY7YnJlYWt9fWwmJihxaCh0LGEscywhMSksWDkodCx0LmxpbmUtdSksYT1zPXQucG9zaXRpb24sbD0hMSksR2QobSl8fChzPXQucG9zaXRpb24rMSksbT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKX1yZXR1cm4gcWgodCxhLHMsITEpLHQucmVzdWx0PyEwOih0LmtpbmQ9ZCx0LnJlc3VsdD1wLCExKX1mdW5jdGlvbiBCOGUodCxlKXt2YXIgcixuLGk7aWYocj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksciE9PTM5KXJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiIsdC5wb3NpdGlvbisrLG49aT10LnBvc2l0aW9uOyhyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wOylpZihyPT09MzkpaWYocWgodCxuLHQucG9zaXRpb24sITApLHI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikscj09PTM5KW49dC5wb3NpdGlvbix0LnBvc2l0aW9uKyssaT10LnBvc2l0aW9uO2Vsc2UgcmV0dXJuITA7ZWxzZSB2YyhyKT8ocWgodCxuLGksITApLFg5KHQsX2kodCwhMSxlKSksbj1pPXQucG9zaXRpb24pOnQucG9zaXRpb249PT10LmxpbmVTdGFydCYmT1QodCk/UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KHQucG9zaXRpb24rKyxpPXQucG9zaXRpb24pO1F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBGOGUodCxlKXt2YXIgcixuLGksYSxzLGw7aWYobD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbCE9PTM0KXJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiIsdC5wb3NpdGlvbisrLHI9bj10LnBvc2l0aW9uOyhsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wOyl7aWYobD09PTM0KXJldHVybiBxaCh0LHIsdC5wb3NpdGlvbiwhMCksdC5wb3NpdGlvbisrLCEwO2lmKGw9PT05Mil7aWYocWgodCxyLHQucG9zaXRpb24sITApLGw9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksdmMobCkpX2kodCwhMSxlKTtlbHNlIGlmKGw8MjU2JiZQS1tsXSl0LnJlc3VsdCs9QktbbF0sdC5wb3NpdGlvbisrO2Vsc2UgaWYoKHM9TjhlKGwpKT4wKXtmb3IoaT1zLGE9MDtpPjA7aS0tKWw9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksKHM9UjhlKGwpKT49MD9hPShhPDw0KStzOlF0KHQsImV4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlciIpO3QucmVzdWx0Kz1JOGUoYSksdC5wb3NpdGlvbisrfWVsc2UgUXQodCwidW5rbm93biBlc2NhcGUgc2VxdWVuY2UiKTtyPW49dC5wb3NpdGlvbn1lbHNlIHZjKGwpPyhxaCh0LHIsbiwhMCksWDkodCxfaSh0LCExLGUpKSxyPW49dC5wb3NpdGlvbik6dC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZPVCh0KT9RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKToodC5wb3NpdGlvbisrLG49dC5wb3NpdGlvbil9UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uICQ4ZSh0LGUpe3ZhciByPSEwLG4saSxhLHM9dC50YWcsbCx1PXQuYW5jaG9yLGgsZixkLHAsbSxnPU9iamVjdC5jcmVhdGUobnVsbCkseSx2LHgsYjtpZihiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09OTEpZj05MyxtPSExLGw9W107ZWxzZSBpZihiPT09MTIzKWY9MTI1LG09ITAsbD17fTtlbHNlIHJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09bCksYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtiIT09MDspe2lmKF9pKHQsITAsZSksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksYj09PWYpcmV0dXJuIHQucG9zaXRpb24rKyx0LnRhZz1zLHQuYW5jaG9yPXUsdC5raW5kPW0/Im1hcHBpbmciOiJzZXF1ZW5jZSIsdC5yZXN1bHQ9bCwhMDtyP2I9PT00NCYmUXQodCwiZXhwZWN0ZWQgdGhlIG5vZGUgY29udGVudCwgYnV0IGZvdW5kICcsJyIpOlF0KHQsIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIiksdj15PXg9bnVsbCxkPXA9ITEsYj09PTYzJiYoaD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSxPcyhoKSYmKGQ9cD0hMCx0LnBvc2l0aW9uKyssX2kodCwhMCxlKSkpLG49dC5saW5lLGk9dC5saW5lU3RhcnQsYT10LnBvc2l0aW9uLHhtKHQsZSxMVCwhMSwhMCksdj10LnRhZyx5PXQucmVzdWx0LF9pKHQsITAsZSksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksKHB8fHQubGluZT09PW4pJiZiPT09NTgmJihkPSEwLGI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksX2kodCwhMCxlKSx4bSh0LGUsTFQsITEsITApLHg9dC5yZXN1bHQpLG0/dm0odCxsLGcsdix5LHgsbixpLGEpOmQ/bC5wdXNoKHZtKHQsbnVsbCxnLHYseSx4LG4saSxhKSk6bC5wdXNoKHkpLF9pKHQsITAsZSksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksYj09PTQ0PyhyPSEwLGI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOnI9ITF9UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKX1mdW5jdGlvbiB6OGUodCxlKXt2YXIgcixuLGk9ejksYT0hMSxzPSExLGw9ZSx1PTAsaD0hMSxmLGQ7aWYoZD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksZD09PTEyNCluPSExO2Vsc2UgaWYoZD09PTYyKW49ITA7ZWxzZSByZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiO2QhPT0wOylpZihkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGQ9PT00M3x8ZD09PTQ1KXo5PT09aT9pPWQ9PT00Mz9mSzpBOGU6UXQodCwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7ZWxzZSBpZigoZj1NOGUoZCkpPj0wKWY9PT0wP1F0KHQsImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTpzP1F0KHQsInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KGw9ZStmLTEscz0hMCk7ZWxzZSBicmVhaztpZihHZChkKSl7ZG8gZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShHZChkKSk7aWYoZD09PTM1KWRvIGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUoIXZjKGQpJiZkIT09MCl9Zm9yKDtkIT09MDspe2ZvcihZOSh0KSx0LmxpbmVJbmRlbnQ9MCxkPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTsoIXN8fHQubGluZUluZGVudDxsKSYmZD09PTMyOyl0LmxpbmVJbmRlbnQrKyxkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKCFzJiZ0LmxpbmVJbmRlbnQ+bCYmKGw9dC5saW5lSW5kZW50KSx2YyhkKSl7dSsrO2NvbnRpbnVlfWlmKHQubGluZUluZGVudDxsKXtpPT09Zks/dC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsYT8xK3U6dSk6aT09PXo5JiZhJiYodC5yZXN1bHQrPWAKYCk7YnJlYWt9Zm9yKG4/R2QoZCk/KGg9ITAsdC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsYT8xK3U6dSkpOmg/KGg9ITEsdC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsdSsxKSk6dT09PTA/YSYmKHQucmVzdWx0Kz0iICIpOnQucmVzdWx0Kz1HaS5yZXBlYXQoYApgLHUpOnQucmVzdWx0Kz1HaS5yZXBlYXQoYApgLGE/MSt1OnUpLGE9ITAscz0hMCx1PTAscj10LnBvc2l0aW9uOyF2YyhkKSYmZCE9PTA7KWQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cWgodCxyLHQucG9zaXRpb24sITEpfXJldHVybiEwfWZ1bmN0aW9uIHlLKHQsZSl7dmFyIHIsbj10LnRhZyxpPXQuYW5jaG9yLGE9W10scyxsPSExLHU7aWYodC5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09YSksdT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7dSE9PTAmJih0LmZpcnN0VGFiSW5MaW5lIT09LTEmJih0LnBvc2l0aW9uPXQuZmlyc3RUYWJJbkxpbmUsUXQodCwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSwhKHUhPT00NXx8KHM9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksIU9zKHMpKSkpOyl7aWYobD0hMCx0LnBvc2l0aW9uKyssX2kodCwhMCwtMSkmJnQubGluZUluZGVudDw9ZSl7YS5wdXNoKG51bGwpLHU9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2NvbnRpbnVlfWlmKHI9dC5saW5lLHhtKHQsZSxNSywhMSwhMCksYS5wdXNoKHQucmVzdWx0KSxfaSh0LCEwLC0xKSx1PXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwodC5saW5lPT09cnx8dC5saW5lSW5kZW50PmUpJiZ1IT09MClRdCh0LCJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeSIpO2Vsc2UgaWYodC5saW5lSW5kZW50PGUpYnJlYWt9cmV0dXJuIGw/KHQudGFnPW4sdC5hbmNob3I9aSx0LmtpbmQ9InNlcXVlbmNlIix0LnJlc3VsdD1hLCEwKTohMX1mdW5jdGlvbiBHOGUodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxoPXQudGFnLGY9dC5hbmNob3IsZD17fSxwPU9iamVjdC5jcmVhdGUobnVsbCksbT1udWxsLGc9bnVsbCx5PW51bGwsdj0hMSx4PSExLGI7aWYodC5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09ZCksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7YiE9PTA7KXtpZighdiYmdC5maXJzdFRhYkluTGluZSE9PS0xJiYodC5wb3NpdGlvbj10LmZpcnN0VGFiSW5MaW5lLFF0KHQsInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24iKSksbj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSxhPXQubGluZSwoYj09PTYzfHxiPT09NTgpJiZPcyhuKSliPT09NjM/KHYmJih2bSh0LGQscCxtLGcsbnVsbCxzLGwsdSksbT1nPXk9bnVsbCkseD0hMCx2PSEwLGk9ITApOnY/KHY9ITEsaT0hMCk6UXQodCwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLHQucG9zaXRpb24rPTEsYj1uO2Vsc2V7aWYocz10LmxpbmUsbD10LmxpbmVTdGFydCx1PXQucG9zaXRpb24sIXhtKHQscixOSywhMSwhMCkpYnJlYWs7aWYodC5saW5lPT09YSl7Zm9yKGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO0dkKGIpOyliPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKGI9PT01OCliPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLE9zKGIpfHxRdCh0LCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSx2JiYodm0odCxkLHAsbSxnLG51bGwscyxsLHUpLG09Zz15PW51bGwpLHg9ITAsdj0hMSxpPSExLG09dC50YWcsZz10LnJlc3VsdDtlbHNlIGlmKHgpUXQodCwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTtlbHNlIHJldHVybiB0LnRhZz1oLHQuYW5jaG9yPWYsITB9ZWxzZSBpZih4KVF0KHQsImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleSIpO2Vsc2UgcmV0dXJuIHQudGFnPWgsdC5hbmNob3I9ZiwhMH1pZigodC5saW5lPT09YXx8dC5saW5lSW5kZW50PmUpJiYodiYmKHM9dC5saW5lLGw9dC5saW5lU3RhcnQsdT10LnBvc2l0aW9uKSx4bSh0LGUsUlQsITAsaSkmJih2P2c9dC5yZXN1bHQ6eT10LnJlc3VsdCksdnx8KHZtKHQsZCxwLG0sZyx5LHMsbCx1KSxtPWc9eT1udWxsKSxfaSh0LCEwLC0xKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSksKHQubGluZT09PWF8fHQubGluZUluZGVudD5lKSYmYiE9PTApUXQodCwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYodC5saW5lSW5kZW50PGUpYnJlYWt9cmV0dXJuIHYmJnZtKHQsZCxwLG0sZyxudWxsLHMsbCx1KSx4JiYodC50YWc9aCx0LmFuY2hvcj1mLHQua2luZD0ibWFwcGluZyIsdC5yZXN1bHQ9ZCkseH1mdW5jdGlvbiBWOGUodCl7dmFyIGUscj0hMSxuPSExLGksYSxzO2lmKHM9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLHMhPT0zMylyZXR1cm4hMTtpZih0LnRhZyE9PW51bGwmJlF0KHQsImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Iikscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxzPT09NjA/KHI9ITAscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6cz09PTMzPyhuPSEwLGk9IiEhIixzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTppPSIhIixlPXQucG9zaXRpb24scil7ZG8gcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShzIT09MCYmcyE9PTYyKTt0LnBvc2l0aW9uPHQubGVuZ3RoPyhhPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTpRdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIpfWVsc2V7Zm9yKDtzIT09MCYmIU9zKHMpOylzPT09MzMmJihuP1F0KHQsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKTooaT10LmlucHV0LnNsaWNlKGUtMSx0LnBvc2l0aW9uKzEpLElLLnRlc3QoaSl8fFF0KHQsIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIiksbj0hMCxlPXQucG9zaXRpb24rMSkpLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7YT10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksTDhlLnRlc3QoYSkmJlF0KHQsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycyIpfWEmJiFPSy50ZXN0KGEpJiZRdCh0LCJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIrYSk7dHJ5e2E9ZGVjb2RlVVJJQ29tcG9uZW50KGEpfWNhdGNoe1F0KHQsInRhZyBuYW1lIGlzIG1hbGZvcm1lZDogIithKX1yZXR1cm4gcj90LnRhZz1hOlloLmNhbGwodC50YWdNYXAsaSk/dC50YWc9dC50YWdNYXBbaV0rYTppPT09IiEiP3QudGFnPSIhIithOmk9PT0iISEiP3QudGFnPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK2E6UXQodCwndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInK2krJyInKSwhMH1mdW5jdGlvbiBVOGUodCl7dmFyIGUscjtpZihyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxyIT09MzgpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmUXQodCwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Iikscj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxlPXQucG9zaXRpb247ciE9PTAmJiFPcyhyKSYmIXltKHIpOylyPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3JldHVybiB0LnBvc2l0aW9uPT09ZSYmUXQodCwibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLHQuYW5jaG9yPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSwhMH1mdW5jdGlvbiBIOGUodCl7dmFyIGUscixuO2lmKG49dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLG4hPT00MilyZXR1cm4hMTtmb3Iobj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxlPXQucG9zaXRpb247biE9PTAmJiFPcyhuKSYmIXltKG4pOyluPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3JldHVybiB0LnBvc2l0aW9uPT09ZSYmUXQodCwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIikscj10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksWWguY2FsbCh0LmFuY2hvck1hcCxyKXx8UXQodCwndW5pZGVudGlmaWVkIGFsaWFzICInK3IrJyInKSx0LnJlc3VsdD10LmFuY2hvck1hcFtyXSxfaSh0LCEwLC0xKSwhMH1mdW5jdGlvbiB4bSh0LGUscixuLGkpe3ZhciBhLHMsbCx1PTEsaD0hMSxmPSExLGQscCxtLGcseSx2O2lmKHQubGlzdGVuZXIhPT1udWxsJiZ0Lmxpc3RlbmVyKCJvcGVuIix0KSx0LnRhZz1udWxsLHQuYW5jaG9yPW51bGwsdC5raW5kPW51bGwsdC5yZXN1bHQ9bnVsbCxhPXM9bD1SVD09PXJ8fE1LPT09cixuJiZfaSh0LCEwLC0xKSYmKGg9ITAsdC5saW5lSW5kZW50PmU/dT0xOnQubGluZUluZGVudD09PWU/dT0wOnQubGluZUluZGVudDxlJiYodT0tMSkpLHU9PT0xKWZvcig7VjhlKHQpfHxVOGUodCk7KV9pKHQsITAsLTEpPyhoPSEwLGw9YSx0LmxpbmVJbmRlbnQ+ZT91PTE6dC5saW5lSW5kZW50PT09ZT91PTA6dC5saW5lSW5kZW50PGUmJih1PS0xKSk6bD0hMTtpZihsJiYobD1ofHxpKSwodT09PTF8fFJUPT09cikmJihMVD09PXJ8fE5LPT09cj95PWU6eT1lKzEsdj10LnBvc2l0aW9uLXQubGluZVN0YXJ0LHU9PT0xP2wmJih5Syh0LHYpfHxHOGUodCx2LHkpKXx8JDhlKHQseSk/Zj0hMDoocyYmejhlKHQseSl8fEI4ZSh0LHkpfHxGOGUodCx5KT9mPSEwOkg4ZSh0KT8oZj0hMCwodC50YWchPT1udWxsfHx0LmFuY2hvciE9PW51bGwpJiZRdCh0LCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTpQOGUodCx5LExUPT09cikmJihmPSEwLHQudGFnPT09bnVsbCYmKHQudGFnPSI/IikpLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCkpOnU9PT0wJiYoZj1sJiZ5Syh0LHYpKSksdC50YWc9PT1udWxsKXQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCk7ZWxzZSBpZih0LnRhZz09PSI/Iil7Zm9yKHQucmVzdWx0IT09bnVsbCYmdC5raW5kIT09InNjYWxhciImJlF0KHQsJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgInNjYWxhciIsIG5vdCAiJyt0LmtpbmQrJyInKSxkPTAscD10LmltcGxpY2l0VHlwZXMubGVuZ3RoO2Q8cDtkKz0xKWlmKGc9dC5pbXBsaWNpdFR5cGVzW2RdLGcucmVzb2x2ZSh0LnJlc3VsdCkpe3QucmVzdWx0PWcuY29uc3RydWN0KHQucmVzdWx0KSx0LnRhZz1nLnRhZyx0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09dC5yZXN1bHQpO2JyZWFrfX1lbHNlIGlmKHQudGFnIT09IiEiKXtpZihZaC5jYWxsKHQudHlwZU1hcFt0LmtpbmR8fCJmYWxsYmFjayJdLHQudGFnKSlnPXQudHlwZU1hcFt0LmtpbmR8fCJmYWxsYmFjayJdW3QudGFnXTtlbHNlIGZvcihnPW51bGwsbT10LnR5cGVNYXAubXVsdGlbdC5raW5kfHwiZmFsbGJhY2siXSxkPTAscD1tLmxlbmd0aDtkPHA7ZCs9MSlpZih0LnRhZy5zbGljZSgwLG1bZF0udGFnLmxlbmd0aCk9PT1tW2RdLnRhZyl7Zz1tW2RdO2JyZWFrfWd8fFF0KHQsInVua25vd24gdGFnICE8Iit0LnRhZysiPiIpLHQucmVzdWx0IT09bnVsbCYmZy5raW5kIT09dC5raW5kJiZRdCh0LCJ1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCIrdC50YWcrJz4gdGFnOyBpdCBzaG91bGQgYmUgIicrZy5raW5kKyciLCBub3QgIicrdC5raW5kKyciJyksZy5yZXNvbHZlKHQucmVzdWx0LHQudGFnKT8odC5yZXN1bHQ9Zy5jb25zdHJ1Y3QodC5yZXN1bHQsdC50YWcpLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCkpOlF0KHQsImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8Iit0LnRhZysiPiBleHBsaWNpdCB0YWciKX1yZXR1cm4gdC5saXN0ZW5lciE9PW51bGwmJnQubGlzdGVuZXIoImNsb3NlIix0KSx0LnRhZyE9PW51bGx8fHQuYW5jaG9yIT09bnVsbHx8Zn1mdW5jdGlvbiBXOGUodCl7dmFyIGU9dC5wb3NpdGlvbixyLG4saSxhPSExLHM7Zm9yKHQudmVyc2lvbj1udWxsLHQuY2hlY2tMaW5lQnJlYWtzPXQubGVnYWN5LHQudGFnTWFwPU9iamVjdC5jcmVhdGUobnVsbCksdC5hbmNob3JNYXA9T2JqZWN0LmNyZWF0ZShudWxsKTsocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikpIT09MCYmKF9pKHQsITAsLTEpLHM9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLCEodC5saW5lSW5kZW50PjB8fHMhPT0zNykpOyl7Zm9yKGE9ITAscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxyPXQucG9zaXRpb247cyE9PTAmJiFPcyhzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtmb3Iobj10LmlucHV0LnNsaWNlKHIsdC5wb3NpdGlvbiksaT1bXSxuLmxlbmd0aDwxJiZRdCh0LCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTtzIT09MDspe2Zvcig7R2Qocyk7KXM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYocz09PTM1KXtkbyBzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKHMhPT0wJiYhdmMocykpO2JyZWFrfWlmKHZjKHMpKWJyZWFrO2ZvcihyPXQucG9zaXRpb247cyE9PTAmJiFPcyhzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpLnB1c2godC5pbnB1dC5zbGljZShyLHQucG9zaXRpb24pKX1zIT09MCYmWTkodCksWWguY2FsbChtSyxuKT9tS1tuXSh0LG4saSk6TlQodCwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicrbisnIicpfWlmKF9pKHQsITAsLTEpLHQubGluZUluZGVudD09PTAmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTQ1JiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKT09PTQ1JiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisyKT09PTQ1Pyh0LnBvc2l0aW9uKz0zLF9pKHQsITAsLTEpKTphJiZRdCh0LCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkIikseG0odCx0LmxpbmVJbmRlbnQtMSxSVCwhMSwhMCksX2kodCwhMCwtMSksdC5jaGVja0xpbmVCcmVha3MmJkQ4ZS50ZXN0KHQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSkmJk5UKHQsIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpLHQuZG9jdW1lbnRzLnB1c2godC5yZXN1bHQpLHQucG9zaXRpb249PT10LmxpbmVTdGFydCYmT1QodCkpe3QuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTQ2JiYodC5wb3NpdGlvbis9MyxfaSh0LCEwLC0xKSk7cmV0dXJufWlmKHQucG9zaXRpb248dC5sZW5ndGgtMSlRdCh0LCJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpO2Vsc2UgcmV0dXJufWZ1bmN0aW9uICRLKHQsZSl7dD1TdHJpbmcodCksZT1lfHx7fSx0Lmxlbmd0aCE9PTAmJih0LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkhPT0xMCYmdC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpIT09MTMmJih0Kz1gCmApLHQuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYodD10LnNsaWNlKDEpKSk7dmFyIHI9bmV3IE84ZSh0LGUpLG49dC5pbmRleE9mKCJcMCIpO2ZvcihuIT09LTEmJihyLnBvc2l0aW9uPW4sUXQociwibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0IikpLHIuaW5wdXQrPSJcMCI7ci5pbnB1dC5jaGFyQ29kZUF0KHIucG9zaXRpb24pPT09MzI7KXIubGluZUluZGVudCs9MSxyLnBvc2l0aW9uKz0xO2Zvcig7ci5wb3NpdGlvbjxyLmxlbmd0aC0xOylXOGUocik7cmV0dXJuIHIuZG9jdW1lbnRzfWZ1bmN0aW9uIHE4ZSh0LGUscil7ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IiYmdHlwZW9mIHI+InUiJiYocj1lLGU9bnVsbCk7dmFyIG49JEsodCxyKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIilyZXR1cm4gbjtmb3IodmFyIGk9MCxhPW4ubGVuZ3RoO2k8YTtpKz0xKWUobltpXSl9ZnVuY3Rpb24gWThlKHQsZSl7dmFyIHI9JEsodCxlKTtpZihyLmxlbmd0aCE9PTApe2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gclswXTt0aHJvdyBuZXcgSXMoImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIil9fWZ1bmN0aW9uIHBfZSh0LGUpe3ZhciByLG4saSxhLHMsbCx1O2lmKGU9PT1udWxsKXJldHVybnt9O2ZvcihyPXt9LG49T2JqZWN0LmtleXMoZSksaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpcz1uW2ldLGw9U3RyaW5nKGVbc10pLHMuc2xpY2UoMCwyKT09PSIhISImJihzPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK3Muc2xpY2UoMikpLHU9dC5jb21waWxlZFR5cGVNYXAuZmFsbGJhY2tbc10sdSYmVksuY2FsbCh1LnN0eWxlQWxpYXNlcyxsKSYmKGw9dS5zdHlsZUFsaWFzZXNbbF0pLHJbc109bDtyZXR1cm4gcn1mdW5jdGlvbiBtX2UodCl7dmFyIGUscixuO2lmKGU9dC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx0PD0yNTUpcj0ieCIsbj0yO2Vsc2UgaWYodDw9NjU1MzUpcj0idSIsbj00O2Vsc2UgaWYodDw9NDI5NDk2NzI5NSlyPSJVIixuPTg7ZWxzZSB0aHJvdyBuZXcgSXMoImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTtyZXR1cm4iXFwiK3IrR2kucmVwZWF0KCIwIixuLWUubGVuZ3RoKStlfWZ1bmN0aW9uIHlfZSh0KXt0aGlzLnNjaGVtYT10LnNjaGVtYXx8UkssdGhpcy5pbmRlbnQ9TWF0aC5tYXgoMSx0LmluZGVudHx8MiksdGhpcy5ub0FycmF5SW5kZW50PXQubm9BcnJheUluZGVudHx8ITEsdGhpcy5za2lwSW52YWxpZD10LnNraXBJbnZhbGlkfHwhMSx0aGlzLmZsb3dMZXZlbD1HaS5pc05vdGhpbmcodC5mbG93TGV2ZWwpPy0xOnQuZmxvd0xldmVsLHRoaXMuc3R5bGVNYXA9cF9lKHRoaXMuc2NoZW1hLHQuc3R5bGVzfHxudWxsKSx0aGlzLnNvcnRLZXlzPXQuc29ydEtleXN8fCExLHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRofHw4MCx0aGlzLm5vUmVmcz10Lm5vUmVmc3x8ITEsdGhpcy5ub0NvbXBhdE1vZGU9dC5ub0NvbXBhdE1vZGV8fCExLHRoaXMuY29uZGVuc2VGbG93PXQuY29uZGVuc2VGbG93fHwhMSx0aGlzLnF1b3RpbmdUeXBlPXQucXVvdGluZ1R5cGU9PT0nIic/eDI6Z19lLHRoaXMuZm9yY2VRdW90ZXM9dC5mb3JjZVF1b3Rlc3x8ITEsdGhpcy5yZXBsYWNlcj10eXBlb2YgdC5yZXBsYWNlcj09ImZ1bmN0aW9uIj90LnJlcGxhY2VyOm51bGwsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy5leHBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkRXhwbGljaXQsdGhpcy50YWc9bnVsbCx0aGlzLnJlc3VsdD0iIix0aGlzLmR1cGxpY2F0ZXM9W10sdGhpcy51c2VkRHVwbGljYXRlcz1udWxsfWZ1bmN0aW9uIHZLKHQsZSl7Zm9yKHZhciByPUdpLnJlcGVhdCgiICIsZSksbj0wLGk9LTEsYT0iIixzLGw9dC5sZW5ndGg7bjxsOylpPXQuaW5kZXhPZihgCmAsbiksaT09PS0xPyhzPXQuc2xpY2Uobiksbj1sKToocz10LnNsaWNlKG4saSsxKSxuPWkrMSkscy5sZW5ndGgmJnMhPT1gCmAmJihhKz1yKSxhKz1zO3JldHVybiBhfWZ1bmN0aW9uIFU5KHQsZSl7cmV0dXJuYApgK0dpLnJlcGVhdCgiICIsdC5pbmRlbnQqZSl9ZnVuY3Rpb24gdl9lKHQsZSl7dmFyIHIsbixpO2ZvcihyPTAsbj10LmltcGxpY2l0VHlwZXMubGVuZ3RoO3I8bjtyKz0xKWlmKGk9dC5pbXBsaWNpdFR5cGVzW3JdLGkucmVzb2x2ZShlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBJVCh0KXtyZXR1cm4gdD09PVo4ZXx8dD09PUs4ZX1mdW5jdGlvbiBiMih0KXtyZXR1cm4gMzI8PXQmJnQ8PTEyNnx8MTYxPD10JiZ0PD01NTI5NSYmdCE9PTgyMzImJnQhPT04MjMzfHw1NzM0NDw9dCYmdDw9NjU1MzMmJnQhPT1qOXx8NjU1MzY8PXQmJnQ8PTExMTQxMTF9ZnVuY3Rpb24geEsodCl7cmV0dXJuIGIyKHQpJiZ0IT09ajkmJnQhPT1ROGUmJnQhPT12Mn1mdW5jdGlvbiBiSyh0LGUscil7dmFyIG49eEsodCksaT1uJiYhSVQodCk7cmV0dXJuKHI/bjpuJiZ0IT09VUsmJnQhPT1ISyYmdCE9PVdLJiZ0IT09cUsmJnQhPT1ZSykmJnQhPT1WOSYmIShlPT09TVQmJiFpKXx8eEsoZSkmJiFJVChlKSYmdD09PVY5fHxlPT09TVQmJml9ZnVuY3Rpb24geF9lKHQpe3JldHVybiBiMih0KSYmdCE9PWo5JiYhSVQodCkmJnQhPT1hX2UmJnQhPT1sX2UmJnQhPT1NVCYmdCE9PVVLJiZ0IT09SEsmJnQhPT1XSyYmdCE9PXFLJiZ0IT09WUsmJnQhPT1WOSYmdCE9PXJfZSYmdCE9PWlfZSYmdCE9PUo4ZSYmdCE9PWhfZSYmdCE9PXNfZSYmdCE9PW9fZSYmdCE9PW5fZSYmdCE9PWVfZSYmdCE9PXRfZSYmdCE9PWNfZSYmdCE9PXVfZX1mdW5jdGlvbiBiX2UodCl7cmV0dXJuIUlUKHQpJiZ0IT09TVR9ZnVuY3Rpb24gZzIodCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZSksbjtyZXR1cm4gcj49NTUyOTYmJnI8PTU2MzE5JiZlKzE8dC5sZW5ndGgmJihuPXQuY2hhckNvZGVBdChlKzEpLG4+PTU2MzIwJiZuPD01NzM0Myk/KHItNTUyOTYpKjEwMjQrbi01NjMyMCs2NTUzNjpyfWZ1bmN0aW9uIFhLKHQpe3ZhciBlPS9eXG4qIC87cmV0dXJuIGUudGVzdCh0KX1mdW5jdGlvbiBUX2UodCxlLHIsbixpLGEscyxsKXt2YXIgdSxoPTAsZj1udWxsLGQ9ITEscD0hMSxtPW4hPT0tMSxnPS0xLHk9eF9lKGcyKHQsMCkpJiZiX2UoZzIodCx0Lmxlbmd0aC0xKSk7aWYoZXx8cylmb3IodT0wO3U8dC5sZW5ndGg7aD49NjU1MzY/dSs9Mjp1Kyspe2lmKGg9ZzIodCx1KSwhYjIoaCkpcmV0dXJuIGdtO3k9eSYmYksoaCxmLGwpLGY9aH1lbHNle2Zvcih1PTA7dTx0Lmxlbmd0aDtoPj02NTUzNj91Kz0yOnUrKyl7aWYoaD1nMih0LHUpLGg9PT12MilkPSEwLG0mJihwPXB8fHUtZy0xPm4mJnRbZysxXSE9PSIgIixnPXUpO2Vsc2UgaWYoIWIyKGgpKXJldHVybiBnbTt5PXkmJmJLKGgsZixsKSxmPWh9cD1wfHxtJiZ1LWctMT5uJiZ0W2crMV0hPT0iICJ9cmV0dXJuIWQmJiFwP3kmJiFzJiYhaSh0KT9qSzphPT09eDI/Z206SDk6cj45JiZYSyh0KT9nbTpzP2E9PT14Mj9nbTpIOTpwP1FLOktLfWZ1bmN0aW9uIHdfZSh0LGUscixuLGkpe3QuZHVtcD1mdW5jdGlvbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdC5xdW90aW5nVHlwZT09PXgyPyciIic6IicnIjtpZighdC5ub0NvbXBhdE1vZGUmJihmX2UuaW5kZXhPZihlKSE9PS0xfHxkX2UudGVzdChlKSkpcmV0dXJuIHQucXVvdGluZ1R5cGU9PT14Mj8nIicrZSsnIic6IiciK2UrIiciO3ZhciBhPXQuaW5kZW50Kk1hdGgubWF4KDEscikscz10LmxpbmVXaWR0aD09PS0xPy0xOk1hdGgubWF4KE1hdGgubWluKHQubGluZVdpZHRoLDQwKSx0LmxpbmVXaWR0aC1hKSxsPW58fHQuZmxvd0xldmVsPi0xJiZyPj10LmZsb3dMZXZlbDtmdW5jdGlvbiB1KGgpe3JldHVybiB2X2UodCxoKX1zd2l0Y2gobyh1LCJ0ZXN0QW1iaWd1aXR5IiksVF9lKGUsbCx0LmluZGVudCxzLHUsdC5xdW90aW5nVHlwZSx0LmZvcmNlUXVvdGVzJiYhbixpKSl7Y2FzZSBqSzpyZXR1cm4gZTtjYXNlIEg5OnJldHVybiInIitlLnJlcGxhY2UoLycvZywiJyciKSsiJyI7Y2FzZSBLSzpyZXR1cm4ifCIrVEsoZSx0LmluZGVudCkrd0sodksoZSxhKSk7Y2FzZSBRSzpyZXR1cm4iPiIrVEsoZSx0LmluZGVudCkrd0sodksoa19lKGUscyksYSkpO2Nhc2UgZ206cmV0dXJuJyInK0VfZShlKSsnIic7ZGVmYXVsdDp0aHJvdyBuZXcgSXMoImltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlIil9fSgpfWZ1bmN0aW9uIFRLKHQsZSl7dmFyIHI9WEsodCk/U3RyaW5nKGUpOiIiLG49dFt0Lmxlbmd0aC0xXT09PWAKYCxpPW4mJih0W3QubGVuZ3RoLTJdPT09YApgfHx0PT09YApgKSxhPWk/IisiOm4/IiI6Ii0iO3JldHVybiByK2ErYApgfWZ1bmN0aW9uIHdLKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdPT09YApgP3Quc2xpY2UoMCwtMSk6dH1mdW5jdGlvbiBrX2UodCxlKXtmb3IodmFyIHI9LyhcbispKFteXG5dKikvZyxuPWZ1bmN0aW9uKCl7dmFyIGg9dC5pbmRleE9mKGAKYCk7cmV0dXJuIGg9aCE9PS0xP2g6dC5sZW5ndGgsci5sYXN0SW5kZXg9aCxrSyh0LnNsaWNlKDAsaCksZSl9KCksaT10WzBdPT09YApgfHx0WzBdPT09IiAiLGEscztzPXIuZXhlYyh0KTspe3ZhciBsPXNbMV0sdT1zWzJdO2E9dVswXT09PSIgIixuKz1sKyghaSYmIWEmJnUhPT0iIj9gCmA6IiIpK2tLKHUsZSksaT1hfXJldHVybiBufWZ1bmN0aW9uIGtLKHQsZSl7aWYodD09PSIifHx0WzBdPT09IiAiKXJldHVybiB0O2Zvcih2YXIgcj0vIFteIF0vZyxuLGk9MCxhLHM9MCxsPTAsdT0iIjtuPXIuZXhlYyh0KTspbD1uLmluZGV4LGwtaT5lJiYoYT1zPmk/czpsLHUrPWAKYCt0LnNsaWNlKGksYSksaT1hKzEpLHM9bDtyZXR1cm4gdSs9YApgLHQubGVuZ3RoLWk+ZSYmcz5pP3UrPXQuc2xpY2UoaSxzKStgCmArdC5zbGljZShzKzEpOnUrPXQuc2xpY2UoaSksdS5zbGljZSgxKX1mdW5jdGlvbiBFX2UodCl7Zm9yKHZhciBlPSIiLHI9MCxuLGk9MDtpPHQubGVuZ3RoO3I+PTY1NTM2P2krPTI6aSsrKXI9ZzIodCxpKSxuPU5hW3JdLCFuJiZiMihyKT8oZSs9dFtpXSxyPj02NTUzNiYmKGUrPXRbaSsxXSkpOmUrPW58fG1fZShyKTtyZXR1cm4gZX1mdW5jdGlvbiBTX2UodCxlLHIpe3ZhciBuPSIiLGk9dC50YWcsYSxzLGw7Zm9yKGE9MCxzPXIubGVuZ3RoO2E8czthKz0xKWw9clthXSx0LnJlcGxhY2VyJiYobD10LnJlcGxhY2VyLmNhbGwocixTdHJpbmcoYSksbCkpLChSdSh0LGUsbCwhMSwhMSl8fHR5cGVvZiBsPiJ1IiYmUnUodCxlLG51bGwsITEsITEpKSYmKG4hPT0iIiYmKG4rPSIsIisodC5jb25kZW5zZUZsb3c/IiI6IiAiKSksbis9dC5kdW1wKTt0LnRhZz1pLHQuZHVtcD0iWyIrbisiXSJ9ZnVuY3Rpb24gRUsodCxlLHIsbil7dmFyIGk9IiIsYT10LnRhZyxzLGwsdTtmb3Iocz0wLGw9ci5sZW5ndGg7czxsO3MrPTEpdT1yW3NdLHQucmVwbGFjZXImJih1PXQucmVwbGFjZXIuY2FsbChyLFN0cmluZyhzKSx1KSksKFJ1KHQsZSsxLHUsITAsITAsITEsITApfHx0eXBlb2YgdT4idSImJlJ1KHQsZSsxLG51bGwsITAsITAsITEsITApKSYmKCghbnx8aSE9PSIiKSYmKGkrPVU5KHQsZSkpLHQuZHVtcCYmdjI9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9pKz0iLSI6aSs9Ii0gIixpKz10LmR1bXApO3QudGFnPWEsdC5kdW1wPWl8fCJbXSJ9ZnVuY3Rpb24gQ19lKHQsZSxyKXt2YXIgbj0iIixpPXQudGFnLGE9T2JqZWN0LmtleXMocikscyxsLHUsaCxmO2ZvcihzPTAsbD1hLmxlbmd0aDtzPGw7cys9MSlmPSIiLG4hPT0iIiYmKGYrPSIsICIpLHQuY29uZGVuc2VGbG93JiYoZis9JyInKSx1PWFbc10saD1yW3VdLHQucmVwbGFjZXImJihoPXQucmVwbGFjZXIuY2FsbChyLHUsaCkpLFJ1KHQsZSx1LCExLCExKSYmKHQuZHVtcC5sZW5ndGg+MTAyNCYmKGYrPSI/ICIpLGYrPXQuZHVtcCsodC5jb25kZW5zZUZsb3c/JyInOiIiKSsiOiIrKHQuY29uZGVuc2VGbG93PyIiOiIgIiksUnUodCxlLGgsITEsITEpJiYoZis9dC5kdW1wLG4rPWYpKTt0LnRhZz1pLHQuZHVtcD0ieyIrbisifSJ9ZnVuY3Rpb24gQV9lKHQsZSxyLG4pe3ZhciBpPSIiLGE9dC50YWcscz1PYmplY3Qua2V5cyhyKSxsLHUsaCxmLGQscDtpZih0LnNvcnRLZXlzPT09ITApcy5zb3J0KCk7ZWxzZSBpZih0eXBlb2YgdC5zb3J0S2V5cz09ImZ1bmN0aW9uIilzLnNvcnQodC5zb3J0S2V5cyk7ZWxzZSBpZih0LnNvcnRLZXlzKXRocm93IG5ldyBJcygic29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiIpO2ZvcihsPTAsdT1zLmxlbmd0aDtsPHU7bCs9MSlwPSIiLCghbnx8aSE9PSIiKSYmKHArPVU5KHQsZSkpLGg9c1tsXSxmPXJbaF0sdC5yZXBsYWNlciYmKGY9dC5yZXBsYWNlci5jYWxsKHIsaCxmKSksUnUodCxlKzEsaCwhMCwhMCwhMCkmJihkPXQudGFnIT09bnVsbCYmdC50YWchPT0iPyJ8fHQuZHVtcCYmdC5kdW1wLmxlbmd0aD4xMDI0LGQmJih0LmR1bXAmJnYyPT09dC5kdW1wLmNoYXJDb2RlQXQoMCk/cCs9Ij8iOnArPSI/ICIpLHArPXQuZHVtcCxkJiYocCs9VTkodCxlKSksUnUodCxlKzEsZiwhMCxkKSYmKHQuZHVtcCYmdjI9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9wKz0iOiI6cCs9IjogIixwKz10LmR1bXAsaSs9cCkpO3QudGFnPWEsdC5kdW1wPWl8fCJ7fSJ9ZnVuY3Rpb24gU0sodCxlLHIpe3ZhciBuLGksYSxzLGwsdTtmb3IoaT1yP3QuZXhwbGljaXRUeXBlczp0LmltcGxpY2l0VHlwZXMsYT0wLHM9aS5sZW5ndGg7YTxzO2ErPTEpaWYobD1pW2FdLChsLmluc3RhbmNlT2Z8fGwucHJlZGljYXRlKSYmKCFsLmluc3RhbmNlT2Z8fHR5cGVvZiBlPT0ib2JqZWN0IiYmZSBpbnN0YW5jZW9mIGwuaW5zdGFuY2VPZikmJighbC5wcmVkaWNhdGV8fGwucHJlZGljYXRlKGUpKSl7aWYocj9sLm11bHRpJiZsLnJlcHJlc2VudE5hbWU/dC50YWc9bC5yZXByZXNlbnROYW1lKGUpOnQudGFnPWwudGFnOnQudGFnPSI/IixsLnJlcHJlc2VudCl7aWYodT10LnN0eWxlTWFwW2wudGFnXXx8bC5kZWZhdWx0U3R5bGUsR0suY2FsbChsLnJlcHJlc2VudCk9PT0iW29iamVjdCBGdW5jdGlvbl0iKW49bC5yZXByZXNlbnQoZSx1KTtlbHNlIGlmKFZLLmNhbGwobC5yZXByZXNlbnQsdSkpbj1sLnJlcHJlc2VudFt1XShlLHUpO2Vsc2UgdGhyb3cgbmV3IElzKCIhPCIrbC50YWcrJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90ICInK3UrJyIgc3R5bGUnKTt0LmR1bXA9bn1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBSdSh0LGUscixuLGksYSxzKXt0LnRhZz1udWxsLHQuZHVtcD1yLFNLKHQsciwhMSl8fFNLKHQsciwhMCk7dmFyIGw9R0suY2FsbCh0LmR1bXApLHU9bixoO24mJihuPXQuZmxvd0xldmVsPDB8fHQuZmxvd0xldmVsPmUpO3ZhciBmPWw9PT0iW29iamVjdCBPYmplY3RdInx8bD09PSJbb2JqZWN0IEFycmF5XSIsZCxwO2lmKGYmJihkPXQuZHVwbGljYXRlcy5pbmRleE9mKHIpLHA9ZCE9PS0xKSwodC50YWchPT1udWxsJiZ0LnRhZyE9PSI/Inx8cHx8dC5pbmRlbnQhPT0yJiZlPjApJiYoaT0hMSkscCYmdC51c2VkRHVwbGljYXRlc1tkXSl0LmR1bXA9IipyZWZfIitkO2Vsc2V7aWYoZiYmcCYmIXQudXNlZER1cGxpY2F0ZXNbZF0mJih0LnVzZWREdXBsaWNhdGVzW2RdPSEwKSxsPT09IltvYmplY3QgT2JqZWN0XSIpbiYmT2JqZWN0LmtleXModC5kdW1wKS5sZW5ndGghPT0wPyhBX2UodCxlLHQuZHVtcCxpKSxwJiYodC5kdW1wPSImcmVmXyIrZCt0LmR1bXApKTooQ19lKHQsZSx0LmR1bXApLHAmJih0LmR1bXA9IiZyZWZfIitkKyIgIit0LmR1bXApKTtlbHNlIGlmKGw9PT0iW29iamVjdCBBcnJheV0iKW4mJnQuZHVtcC5sZW5ndGghPT0wPyh0Lm5vQXJyYXlJbmRlbnQmJiFzJiZlPjA/RUsodCxlLTEsdC5kdW1wLGkpOkVLKHQsZSx0LmR1bXAsaSkscCYmKHQuZHVtcD0iJnJlZl8iK2QrdC5kdW1wKSk6KFNfZSh0LGUsdC5kdW1wKSxwJiYodC5kdW1wPSImcmVmXyIrZCsiICIrdC5kdW1wKSk7ZWxzZSBpZihsPT09IltvYmplY3QgU3RyaW5nXSIpdC50YWchPT0iPyImJndfZSh0LHQuZHVtcCxlLGEsdSk7ZWxzZXtpZihsPT09IltvYmplY3QgVW5kZWZpbmVkXSIpcmV0dXJuITE7aWYodC5za2lwSW52YWxpZClyZXR1cm4hMTt0aHJvdyBuZXcgSXMoInVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICIrbCl9dC50YWchPT1udWxsJiZ0LnRhZyE9PSI/IiYmKGg9ZW5jb2RlVVJJKHQudGFnWzBdPT09IiEiP3QudGFnLnNsaWNlKDEpOnQudGFnKS5yZXBsYWNlKC8hL2csIiUyMSIpLHQudGFnWzBdPT09IiEiP2g9IiEiK2g6aC5zbGljZSgwLDE4KT09PSJ0YWc6eWFtbC5vcmcsMjAwMjoiP2g9IiEhIitoLnNsaWNlKDE4KTpoPSIhPCIraCsiPiIsdC5kdW1wPWgrIiAiK3QuZHVtcCl9cmV0dXJuITB9ZnVuY3Rpb24gX19lKHQsZSl7dmFyIHI9W10sbj1bXSxpLGE7Zm9yKFc5KHQscixuKSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSllLmR1cGxpY2F0ZXMucHVzaChyW25baV1dKTtlLnVzZWREdXBsaWNhdGVzPW5ldyBBcnJheShhKX1mdW5jdGlvbiBXOSh0LGUscil7dmFyIG4saSxhO2lmKHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCIpaWYoaT1lLmluZGV4T2YodCksaSE9PS0xKXIuaW5kZXhPZihpKT09PS0xJiZyLnB1c2goaSk7ZWxzZSBpZihlLnB1c2godCksQXJyYXkuaXNBcnJheSh0KSlmb3IoaT0wLGE9dC5sZW5ndGg7aTxhO2krPTEpVzkodFtpXSxlLHIpO2Vsc2UgZm9yKG49T2JqZWN0LmtleXModCksaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpVzkodFtuW2ldXSxlLHIpfWZ1bmN0aW9uIERfZSh0LGUpe2U9ZXx8e307dmFyIHI9bmV3IHlfZShlKTtyLm5vUmVmc3x8X19lKHQscik7dmFyIG49dDtyZXR1cm4gci5yZXBsYWNlciYmKG49ci5yZXBsYWNlci5jYWxsKHsiIjpufSwiIixuKSksUnUociwwLG4sITAsITApP3IuZHVtcCtgCmA6IiJ9ZnVuY3Rpb24gSzkodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uIHlhbWwuIit0KyIgaXMgcmVtb3ZlZCBpbiBqcy15YW1sIDQuIFVzZSB5YW1sLiIrZSsiIGluc3RlYWQsIHdoaWNoIGlzIG5vdyBzYWZlIGJ5IGRlZmF1bHQuIil9fXZhciBnQWUseUFlLHZBZSx4QWUsYkFlLFRBZSxHaSxJcyxrQWUsRUFlLFNBZSxSYSxEQWUsTEFlLFJBZSxOQWUsTUFlLEJBZSxHQWUsWEFlLGpBZSxaQWUsdDhlLF9LLHI4ZSxESyxMSyxzOGUsbDhlLHE5LGQ4ZSxwOGUsbThlLHY4ZSx4OGUsdzhlLGs4ZSxDOGUsUkssWWgsTFQsTkssTUssUlQsejksQThlLGZLLF84ZSxEOGUsTDhlLElLLE9LLFBLLEJLLHpkLG1LLFg4ZSxqOGUsekssR0ssVkssajksSzhlLHYyLFE4ZSxaOGUsSjhlLGVfZSxWOSx0X2Uscl9lLG5fZSxpX2UsVUssYV9lLE1ULHNfZSxvX2UsbF9lLGNfZSxISyxXSyx1X2UscUssaF9lLFlLLE5hLGZfZSxkX2UsZ19lLHgyLGpLLEg5LEtLLFFLLGdtLExfZSxSX2UsYm0sVG0scVN0LFlTdCxYU3QsalN0LEtTdCxQVD1OKCgpPT57InVzZSBzdHJpY3QiO28oQ0ssImlzTm90aGluZyIpO28oaEFlLCJpc09iamVjdCIpO28oZkFlLCJ0b0FycmF5Iik7byhkQWUsImV4dGVuZCIpO28ocEFlLCJyZXBlYXQiKTtvKG1BZSwiaXNOZWdhdGl2ZVplcm8iKTtnQWU9Q0sseUFlPWhBZSx2QWU9ZkFlLHhBZT1wQWUsYkFlPW1BZSxUQWU9ZEFlLEdpPXtpc05vdGhpbmc6Z0FlLGlzT2JqZWN0OnlBZSx0b0FycmF5OnZBZSxyZXBlYXQ6eEFlLGlzTmVnYXRpdmVaZXJvOmJBZSxleHRlbmQ6VEFlfTtvKEFLLCJmb3JtYXRFcnJvciIpO28oeTIsIllBTUxFeGNlcHRpb24kMSIpO3kyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7eTIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXkyO3kyLnByb3RvdHlwZS50b1N0cmluZz1vKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWUrIjogIitBSyh0aGlzLGUpfSwidG9TdHJpbmciKTtJcz15MjtvKEY5LCJnZXRMaW5lIik7bygkOSwicGFkU3RhcnQiKTtvKHdBZSwibWFrZVNuaXBwZXQiKTtrQWU9d0FlLEVBZT1bImtpbmQiLCJtdWx0aSIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwicmVwcmVzZW50TmFtZSIsImRlZmF1bHRTdHlsZSIsInN0eWxlQWxpYXNlcyJdLFNBZT1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO28oQ0FlLCJjb21waWxlU3R5bGVBbGlhc2VzIik7byhBQWUsIlR5cGUkMSIpO1JhPUFBZTtvKGhLLCJjb21waWxlTGlzdCIpO28oX0FlLCJjb21waWxlTWFwIik7byhHOSwiU2NoZW1hJDEiKTtHOS5wcm90b3R5cGUuZXh0ZW5kPW8oZnVuY3Rpb24oZSl7dmFyIHI9W10sbj1bXTtpZihlIGluc3RhbmNlb2YgUmEpbi5wdXNoKGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSluPW4uY29uY2F0KGUpO2Vsc2UgaWYoZSYmKEFycmF5LmlzQXJyYXkoZS5pbXBsaWNpdCl8fEFycmF5LmlzQXJyYXkoZS5leHBsaWNpdCkpKWUuaW1wbGljaXQmJihyPXIuY29uY2F0KGUuaW1wbGljaXQpKSxlLmV4cGxpY2l0JiYobj1uLmNvbmNhdChlLmV4cGxpY2l0KSk7ZWxzZSB0aHJvdyBuZXcgSXMoIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSkiKTtyLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgUmEpKXRocm93IG5ldyBJcygiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO2lmKGEubG9hZEtpbmQmJmEubG9hZEtpbmQhPT0ic2NhbGFyIil0aHJvdyBuZXcgSXMoIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIpO2lmKGEubXVsdGkpdGhyb3cgbmV3IElzKCJUaGVyZSBpcyBhIG11bHRpIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIE11bHRpIHRhZ3MgY2FuIG9ubHkgYmUgbGlzdGVkIGFzIGV4cGxpY2l0LiIpfSksbi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKCEoYSBpbnN0YW5jZW9mIFJhKSl0aHJvdyBuZXcgSXMoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKX0pO3ZhciBpPU9iamVjdC5jcmVhdGUoRzkucHJvdG90eXBlKTtyZXR1cm4gaS5pbXBsaWNpdD0odGhpcy5pbXBsaWNpdHx8W10pLmNvbmNhdChyKSxpLmV4cGxpY2l0PSh0aGlzLmV4cGxpY2l0fHxbXSkuY29uY2F0KG4pLGkuY29tcGlsZWRJbXBsaWNpdD1oSyhpLCJpbXBsaWNpdCIpLGkuY29tcGlsZWRFeHBsaWNpdD1oSyhpLCJleHBsaWNpdCIpLGkuY29tcGlsZWRUeXBlTWFwPV9BZShpLmNvbXBpbGVkSW1wbGljaXQsaS5jb21waWxlZEV4cGxpY2l0KSxpfSwiZXh0ZW5kIik7REFlPUc5LExBZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIse2tpbmQ6InNjYWxhciIsY29uc3RydWN0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1udWxsP3Q6IiJ9LCJjb25zdHJ1Y3QiKX0pLFJBZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIse2tpbmQ6InNlcXVlbmNlIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDpbXX0sImNvbnN0cnVjdCIpfSksTkFlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6bWFwIix7a2luZDoibWFwcGluZyIsY29uc3RydWN0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1udWxsP3Q6e319LCJjb25zdHJ1Y3QiKX0pLE1BZT1uZXcgREFlKHtleHBsaWNpdDpbTEFlLFJBZSxOQWVdfSk7byhJQWUsInJlc29sdmVZYW1sTnVsbCIpO28oT0FlLCJjb25zdHJ1Y3RZYW1sTnVsbCIpO28oUEFlLCJpc051bGwiKTtCQWU9bmV3IFJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix7a2luZDoic2NhbGFyIixyZXNvbHZlOklBZSxjb25zdHJ1Y3Q6T0FlLHByZWRpY2F0ZTpQQWUscmVwcmVzZW50OntjYW5vbmljYWw6byhmdW5jdGlvbigpe3JldHVybiJ+In0sImNhbm9uaWNhbCIpLGxvd2VyY2FzZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSwibG93ZXJjYXNlIiksdXBwZXJjYXNlOm8oZnVuY3Rpb24oKXtyZXR1cm4iTlVMTCJ9LCJ1cHBlcmNhc2UiKSxjYW1lbGNhc2U6byhmdW5jdGlvbigpe3JldHVybiJOdWxsIn0sImNhbWVsY2FzZSIpLGVtcHR5Om8oZnVuY3Rpb24oKXtyZXR1cm4iIn0sImVtcHR5Iil9LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO28oRkFlLCJyZXNvbHZlWWFtbEJvb2xlYW4iKTtvKCRBZSwiY29uc3RydWN0WWFtbEJvb2xlYW4iKTtvKHpBZSwiaXNCb29sZWFuIik7R0FlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpGQWUsY29uc3RydWN0OiRBZSxwcmVkaWNhdGU6ekFlLHJlcHJlc2VudDp7bG93ZXJjYXNlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ/InRydWUiOiJmYWxzZSJ9LCJsb3dlcmNhc2UiKSx1cHBlcmNhc2U6byhmdW5jdGlvbih0KXtyZXR1cm4gdD8iVFJVRSI6IkZBTFNFIn0sInVwcGVyY2FzZSIpLGNhbWVsY2FzZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PyJUcnVlIjoiRmFsc2UifSwiY2FtZWxjYXNlIil9LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO28oVkFlLCJpc0hleENvZGUiKTtvKFVBZSwiaXNPY3RDb2RlIik7byhIQWUsImlzRGVjQ29kZSIpO28oV0FlLCJyZXNvbHZlWWFtbEludGVnZXIiKTtvKHFBZSwiY29uc3RydWN0WWFtbEludGVnZXIiKTtvKFlBZSwiaXNJbnRlZ2VyIik7WEFlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6aW50Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOldBZSxjb25zdHJ1Y3Q6cUFlLHByZWRpY2F0ZTpZQWUscmVwcmVzZW50OntiaW5hcnk6byhmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMGIiK3QudG9TdHJpbmcoMik6Ii0wYiIrdC50b1N0cmluZygyKS5zbGljZSgxKX0sImJpbmFyeSIpLG9jdGFsOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTA/IjBvIit0LnRvU3RyaW5nKDgpOiItMG8iK3QudG9TdHJpbmcoOCkuc2xpY2UoMSl9LCJvY3RhbCIpLGRlY2ltYWw6byhmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxMCl9LCJkZWNpbWFsIiksaGV4YWRlY2ltYWw6byhmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMHgiK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Ii0weCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX0sImhleGFkZWNpbWFsIil9LGRlZmF1bHRTdHlsZToiZGVjaW1hbCIsc3R5bGVBbGlhc2VzOntiaW5hcnk6WzIsImJpbiJdLG9jdGFsOls4LCJvY3QiXSxkZWNpbWFsOlsxMCwiZGVjIl0saGV4YWRlY2ltYWw6WzE2LCJoZXgiXX19KSxqQWU9bmV3IFJlZ0V4cCgiXig/OlstK10/KD86WzAtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpO28oS0FlLCJyZXNvbHZlWWFtbEZsb2F0Iik7byhRQWUsImNvbnN0cnVjdFlhbWxGbG9hdCIpO1pBZT0vXlstK10/WzAtOV0rZS87byhKQWUsInJlcHJlc2VudFlhbWxGbG9hdCIpO28oZThlLCJpc0Zsb2F0Iik7dDhlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6S0FlLGNvbnN0cnVjdDpRQWUscHJlZGljYXRlOmU4ZSxyZXByZXNlbnQ6SkFlLGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pLF9LPU1BZS5leHRlbmQoe2ltcGxpY2l0OltCQWUsR0FlLFhBZSx0OGVdfSkscjhlPV9LLERLPW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIiksTEs9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiKTtvKG44ZSwicmVzb2x2ZVlhbWxUaW1lc3RhbXAiKTtvKGk4ZSwiY29uc3RydWN0WWFtbFRpbWVzdGFtcCIpO28oYThlLCJyZXByZXNlbnRZYW1sVGltZXN0YW1wIik7czhlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIix7a2luZDoic2NhbGFyIixyZXNvbHZlOm44ZSxjb25zdHJ1Y3Q6aThlLGluc3RhbmNlT2Y6RGF0ZSxyZXByZXNlbnQ6YThlfSk7byhvOGUsInJlc29sdmVZYW1sTWVyZ2UiKTtsOGU9bmV3IFJhKCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpvOGV9KSxxOT1gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0KXHJgO28oYzhlLCJyZXNvbHZlWWFtbEJpbmFyeSIpO28odThlLCJjb25zdHJ1Y3RZYW1sQmluYXJ5Iik7byhoOGUsInJlcHJlc2VudFlhbWxCaW5hcnkiKTtvKGY4ZSwiaXNCaW5hcnkiKTtkOGU9bmV3IFJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6YzhlLGNvbnN0cnVjdDp1OGUscHJlZGljYXRlOmY4ZSxyZXByZXNlbnQ6aDhlfSkscDhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbThlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7byhnOGUsInJlc29sdmVZYW1sT21hcCIpO28oeThlLCJjb25zdHJ1Y3RZYW1sT21hcCIpO3Y4ZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpnOGUsY29uc3RydWN0Onk4ZX0pLHg4ZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO28oYjhlLCJyZXNvbHZlWWFtbFBhaXJzIik7byhUOGUsImNvbnN0cnVjdFlhbWxQYWlycyIpO3c4ZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6YjhlLGNvbnN0cnVjdDpUOGV9KSxrOGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtvKEU4ZSwicmVzb2x2ZVlhbWxTZXQiKTtvKFM4ZSwiY29uc3RydWN0WWFtbFNldCIpO0M4ZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnNldCIse2tpbmQ6Im1hcHBpbmciLHJlc29sdmU6RThlLGNvbnN0cnVjdDpTOGV9KSxSSz1yOGUuZXh0ZW5kKHtpbXBsaWNpdDpbczhlLGw4ZV0sZXhwbGljaXQ6W2Q4ZSx2OGUsdzhlLEM4ZV19KSxZaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LExUPTEsTks9MixNSz0zLFJUPTQsejk9MSxBOGU9MixmSz0zLF84ZT0vW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLEQ4ZT0vW1x4ODVcdTIwMjhcdTIwMjldLyxMOGU9L1ssXFtcXVx7XH1dLyxJSz0vXig/OiF8ISF8IVthLXpcLV0rISkkL2ksT0s9L14oPzohfFteLFxbXF1ce1x9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelwtIztcL1w/OkAmPVwrXCQsX1wuIX5cKidcKFwpXFtcXV0pKiQvaTtvKGRLLCJfY2xhc3MiKTtvKHZjLCJpc19FT0wiKTtvKEdkLCJpc19XSElURV9TUEFDRSIpO28oT3MsImlzX1dTX09SX0VPTCIpO28oeW0sImlzX0ZMT1dfSU5ESUNBVE9SIik7byhSOGUsImZyb21IZXhDb2RlIik7byhOOGUsImVzY2FwZWRIZXhMZW4iKTtvKE04ZSwiZnJvbURlY2ltYWxDb2RlIik7byhwSywic2ltcGxlRXNjYXBlU2VxdWVuY2UiKTtvKEk4ZSwiY2hhckZyb21Db2RlcG9pbnQiKTtQSz1uZXcgQXJyYXkoMjU2KSxCSz1uZXcgQXJyYXkoMjU2KTtmb3IoemQ9MDt6ZDwyNTY7emQrKylQS1t6ZF09cEsoemQpPzE6MCxCS1t6ZF09cEsoemQpO28oTzhlLCJTdGF0ZSQxIik7byhGSywiZ2VuZXJhdGVFcnJvciIpO28oUXQsInRocm93RXJyb3IiKTtvKE5ULCJ0aHJvd1dhcm5pbmciKTttSz17WUFNTDpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLHM7ZS52ZXJzaW9uIT09bnVsbCYmUXQoZSwiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIiksbi5sZW5ndGghPT0xJiZRdChlLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IiksaT0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoblswXSksaT09PW51bGwmJlF0KGUsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIiksYT1wYXJzZUludChpWzFdLDEwKSxzPXBhcnNlSW50KGlbMl0sMTApLGEhPT0xJiZRdChlLCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpLGUudmVyc2lvbj1uWzBdLGUuY2hlY2tMaW5lQnJlYWtzPXM8MixzIT09MSYmcyE9PTImJk5UKGUsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sImhhbmRsZVlhbWxEaXJlY3RpdmUiKSxUQUc6byhmdW5jdGlvbihlLHIsbil7dmFyIGksYTtuLmxlbmd0aCE9PTImJlF0KGUsIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKSxpPW5bMF0sYT1uWzFdLElLLnRlc3QoaSl8fFF0KGUsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksWWguY2FsbChlLnRhZ01hcCxpKSYmUXQoZSwndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIicraSsnIiB0YWcgaGFuZGxlJyksT0sudGVzdChhKXx8UXQoZSwiaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIik7dHJ5e2E9ZGVjb2RlVVJJQ29tcG9uZW50KGEpfWNhdGNoe1F0KGUsInRhZyBwcmVmaXggaXMgbWFsZm9ybWVkOiAiK2EpfWUudGFnTWFwW2ldPWF9LCJoYW5kbGVUYWdEaXJlY3RpdmUiKX07byhxaCwiY2FwdHVyZVNlZ21lbnQiKTtvKGdLLCJtZXJnZU1hcHBpbmdzIik7byh2bSwic3RvcmVNYXBwaW5nUGFpciIpO28oWTksInJlYWRMaW5lQnJlYWsiKTtvKF9pLCJza2lwU2VwYXJhdGlvblNwYWNlIik7byhPVCwidGVzdERvY3VtZW50U2VwYXJhdG9yIik7byhYOSwid3JpdGVGb2xkZWRMaW5lcyIpO28oUDhlLCJyZWFkUGxhaW5TY2FsYXIiKTtvKEI4ZSwicmVhZFNpbmdsZVF1b3RlZFNjYWxhciIpO28oRjhlLCJyZWFkRG91YmxlUXVvdGVkU2NhbGFyIik7bygkOGUsInJlYWRGbG93Q29sbGVjdGlvbiIpO28oejhlLCJyZWFkQmxvY2tTY2FsYXIiKTtvKHlLLCJyZWFkQmxvY2tTZXF1ZW5jZSIpO28oRzhlLCJyZWFkQmxvY2tNYXBwaW5nIik7byhWOGUsInJlYWRUYWdQcm9wZXJ0eSIpO28oVThlLCJyZWFkQW5jaG9yUHJvcGVydHkiKTtvKEg4ZSwicmVhZEFsaWFzIik7byh4bSwiY29tcG9zZU5vZGUiKTtvKFc4ZSwicmVhZERvY3VtZW50Iik7bygkSywibG9hZERvY3VtZW50cyIpO28ocThlLCJsb2FkQWxsJDEiKTtvKFk4ZSwibG9hZCQxIik7WDhlPXE4ZSxqOGU9WThlLHpLPXtsb2FkQWxsOlg4ZSxsb2FkOmo4ZX0sR0s9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxWSz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGo5PTY1Mjc5LEs4ZT05LHYyPTEwLFE4ZT0xMyxaOGU9MzIsSjhlPTMzLGVfZT0zNCxWOT0zNSx0X2U9Mzcscl9lPTM4LG5fZT0zOSxpX2U9NDIsVUs9NDQsYV9lPTQ1LE1UPTU4LHNfZT02MSxvX2U9NjIsbF9lPTYzLGNfZT02NCxISz05MSxXSz05Myx1X2U9OTYscUs9MTIzLGhfZT0xMjQsWUs9MTI1LE5hPXt9O05hWzBdPSJcXDAiO05hWzddPSJcXGEiO05hWzhdPSJcXGIiO05hWzldPSJcXHQiO05hWzEwXT0iXFxuIjtOYVsxMV09IlxcdiI7TmFbMTJdPSJcXGYiO05hWzEzXT0iXFxyIjtOYVsyN109IlxcZSI7TmFbMzRdPSdcXCInO05hWzkyXT0iXFxcXCI7TmFbMTMzXT0iXFxOIjtOYVsxNjBdPSJcXF8iO05hWzgyMzJdPSJcXEwiO05hWzgyMzNdPSJcXFAiO2ZfZT1bInkiLCJZIiwieWVzIiwiWWVzIiwiWUVTIiwib24iLCJPbiIsIk9OIiwibiIsIk4iLCJubyIsIk5vIiwiTk8iLCJvZmYiLCJPZmYiLCJPRkYiXSxkX2U9L15bLStdP1swLTlfXSsoPzo6WzAtOV9dKykrKD86XC5bMC05X10qKT8kLztvKHBfZSwiY29tcGlsZVN0eWxlTWFwIik7byhtX2UsImVuY29kZUhleCIpO2dfZT0xLHgyPTI7byh5X2UsIlN0YXRlIik7byh2SywiaW5kZW50U3RyaW5nIik7byhVOSwiZ2VuZXJhdGVOZXh0TGluZSIpO28odl9lLCJ0ZXN0SW1wbGljaXRSZXNvbHZpbmciKTtvKElULCJpc1doaXRlc3BhY2UiKTtvKGIyLCJpc1ByaW50YWJsZSIpO28oeEssImlzTnNDaGFyT3JXaGl0ZXNwYWNlIik7byhiSywiaXNQbGFpblNhZmUiKTtvKHhfZSwiaXNQbGFpblNhZmVGaXJzdCIpO28oYl9lLCJpc1BsYWluU2FmZUxhc3QiKTtvKGcyLCJjb2RlUG9pbnRBdCIpO28oWEssIm5lZWRJbmRlbnRJbmRpY2F0b3IiKTtqSz0xLEg5PTIsS0s9MyxRSz00LGdtPTU7byhUX2UsImNob29zZVNjYWxhclN0eWxlIik7byh3X2UsIndyaXRlU2NhbGFyIik7byhUSywiYmxvY2tIZWFkZXIiKTtvKHdLLCJkcm9wRW5kaW5nTmV3bGluZSIpO28oa19lLCJmb2xkU3RyaW5nIik7byhrSywiZm9sZExpbmUiKTtvKEVfZSwiZXNjYXBlU3RyaW5nIik7byhTX2UsIndyaXRlRmxvd1NlcXVlbmNlIik7byhFSywid3JpdGVCbG9ja1NlcXVlbmNlIik7byhDX2UsIndyaXRlRmxvd01hcHBpbmciKTtvKEFfZSwid3JpdGVCbG9ja01hcHBpbmciKTtvKFNLLCJkZXRlY3RUeXBlIik7byhSdSwid3JpdGVOb2RlIik7byhfX2UsImdldER1cGxpY2F0ZVJlZmVyZW5jZXMiKTtvKFc5LCJpbnNwZWN0Tm9kZSIpO28oRF9lLCJkdW1wJDEiKTtMX2U9RF9lLFJfZT17ZHVtcDpMX2V9O28oSzksInJlbmFtZWQiKTtibT1fSyxUbT16Sy5sb2FkLHFTdD16Sy5sb2FkQWxsLFlTdD1SX2UuZHVtcCxYU3Q9SzkoInNhZmVMb2FkIiwibG9hZCIpLGpTdD1LOSgic2FmZUxvYWRBbGwiLCJsb2FkQWxsIiksS1N0PUs5KCJzYWZlRHVtcCIsImR1bXAiKX0pO2Z1bmN0aW9uIHRMKCl7cmV0dXJue2FzeW5jOiExLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhvb2tzOm51bGwscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzaWxlbnQ6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsfX1mdW5jdGlvbiBuUSh0KXtVZD10fWZ1bmN0aW9uIG5uKHQsZT0iIil7bGV0IHI9dHlwZW9mIHQ9PSJzdHJpbmciP3Q6dC5zb3VyY2Usbj17cmVwbGFjZTpvKChpLGEpPT57bGV0IHM9dHlwZW9mIGE9PSJzdHJpbmciP2E6YS5zb3VyY2U7cmV0dXJuIHM9cy5yZXBsYWNlKHNzLmNhcmV0LCIkMSIpLHI9ci5yZXBsYWNlKGkscyksbn0sInJlcGxhY2UiKSxnZXRSZWdleDpvKCgpPT5uZXcgUmVnRXhwKHIsZSksImdldFJlZ2V4Iil9O3JldHVybiBufWZ1bmN0aW9uIHhjKHQsZSl7aWYoZSl7aWYoc3MuZXNjYXBlVGVzdC50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2Uoc3MuZXNjYXBlUmVwbGFjZSxKSyl9ZWxzZSBpZihzcy5lc2NhcGVUZXN0Tm9FbmNvZGUudGVzdCh0KSlyZXR1cm4gdC5yZXBsYWNlKHNzLmVzY2FwZVJlcGxhY2VOb0VuY29kZSxKSyk7cmV0dXJuIHR9ZnVuY3Rpb24gZVEodCl7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2Uoc3MucGVyY2VudERlY29kZSwiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiB0fWZ1bmN0aW9uIHRRKHQsZSl7bGV0IHI9dC5yZXBsYWNlKHNzLmZpbmRQaXBlLChhLHMsbCk9PntsZXQgdT0hMSxoPXM7Zm9yKDstLWg+PTAmJmxbaF09PT0iXFwiOyl1PSF1O3JldHVybiB1PyJ8IjoiIHwifSksbj1yLnNwbGl0KHNzLnNwbGl0UGlwZSksaT0wO2lmKG5bMF0udHJpbSgpfHxuLnNoaWZ0KCksbi5sZW5ndGg+MCYmIW4uYXQoLTEpPy50cmltKCkmJm4ucG9wKCksZSlpZihuLmxlbmd0aD5lKW4uc3BsaWNlKGUpO2Vsc2UgZm9yKDtuLmxlbmd0aDxlOyluLnB1c2goIiIpO2Zvcig7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKS5yZXBsYWNlKHNzLnNsYXNoUGlwZSwifCIpO3JldHVybiBufWZ1bmN0aW9uIHcyKHQsZSxyKXtsZXQgbj10Lmxlbmd0aDtpZihuPT09MClyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxuOyl7bGV0IGE9dC5jaGFyQXQobi1pLTEpO2lmKGE9PT1lJiYhcilpKys7ZWxzZSBpZihhIT09ZSYmcilpKys7ZWxzZSBicmVha31yZXR1cm4gdC5zbGljZSgwLG4taSl9ZnVuY3Rpb24gaERlKHQsZSl7aWYodC5pbmRleE9mKGVbMV0pPT09LTEpcmV0dXJuLTE7bGV0IHI9MDtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dPT09IlxcIiluKys7ZWxzZSBpZih0W25dPT09ZVswXSlyKys7ZWxzZSBpZih0W25dPT09ZVsxXSYmKHItLSxyPDApKXJldHVybiBuO3JldHVybiByPjA/LTI6LTF9ZnVuY3Rpb24gclEodCxlLHIsbixpKXtsZXQgYT1lLmhyZWYscz1lLnRpdGxlfHxudWxsLGw9dFsxXS5yZXBsYWNlKGkub3RoZXIub3V0cHV0TGlua1JlcGxhY2UsIiQxIik7bi5zdGF0ZS5pbkxpbms9ITA7bGV0IHU9e3R5cGU6dFswXS5jaGFyQXQoMCk9PT0iISI/ImltYWdlIjoibGluayIscmF3OnIsaHJlZjphLHRpdGxlOnMsdGV4dDpsLHRva2VuczpuLmlubGluZVRva2VucyhsKX07cmV0dXJuIG4uc3RhdGUuaW5MaW5rPSExLHV9ZnVuY3Rpb24gZkRlKHQsZSxyKXtsZXQgbj10Lm1hdGNoKHIub3RoZXIuaW5kZW50Q29kZUNvbXBlbnNhdGlvbik7aWYobj09PW51bGwpcmV0dXJuIGU7bGV0IGk9blsxXTtyZXR1cm4gZS5zcGxpdChgCmApLm1hcChhPT57bGV0IHM9YS5tYXRjaChyLm90aGVyLmJlZ2lubmluZ1NwYWNlKTtpZihzPT09bnVsbClyZXR1cm4gYTtsZXRbbF09cztyZXR1cm4gbC5sZW5ndGg+PWkubGVuZ3RoP2Euc2xpY2UoaS5sZW5ndGgpOmF9KS5qb2luKGAKYCl9ZnVuY3Rpb24gSnIodCxlKXtyZXR1cm4gVmQucGFyc2UodCxlKX12YXIgVWQsazIsc3MsTl9lLE1fZSxJX2UsRTIsT19lLHJMLGlRLGFRLFBfZSxuTCxCX2UsaUwsRl9lLCRfZSxWVCxhTCx6X2Usc1EsR19lLHNMLFpLLFZfZSxVX2UsSF9lLFdfZSxvUSxxX2UsVVQsb0wsbFEsWV9lLGNRLFhfZSxqX2UsS19lLHVRLFFfZSxaX2UsaFEsSl9lLGVEZSx0RGUsckRlLG5EZSxpRGUsYURlLCRULHNEZSxmUSxkUSxvRGUsbEwsbERlLFo5LGNEZSxCVCxUMix1RGUsSksselQsTnUsR1QsY0wsTXUsRlQsZERlLFZkLFpTdCxKU3QsZTZ0LHQ2dCxyNnQsbjZ0LGk2dCxwUT1OKCgpPT57InVzZSBzdHJpY3QiO28odEwsIk0iKTtVZD10TCgpO28oblEsIkgiKTtrMj17ZXhlYzpvKCgpPT5udWxsLCJleGVjIil9O28obm4sImgiKTtzcz17Y29kZVJlbW92ZUluZGVudDovXig/OiB7MSw0fXwgezAsM31cdCkvZ20sb3V0cHV0TGlua1JlcGxhY2U6L1xcKFtcW1xdXSkvZyxpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOi9eKFxzKykoPzpgYGApLyxiZWdpbm5pbmdTcGFjZTovXlxzKy8sZW5kaW5nSGFzaDovIyQvLHN0YXJ0aW5nU3BhY2VDaGFyOi9eIC8sZW5kaW5nU3BhY2VDaGFyOi8gJC8sbm9uU3BhY2VDaGFyOi9bXiBdLyxuZXdMaW5lQ2hhckdsb2JhbDovXG4vZyx0YWJDaGFyR2xvYmFsOi9cdC9nLG11bHRpcGxlU3BhY2VHbG9iYWw6L1xzKy9nLGJsYW5rTGluZTovXlsgXHRdKiQvLGRvdWJsZUJsYW5rTGluZTovXG5bIFx0XSpcblsgXHRdKiQvLGJsb2NrcXVvdGVTdGFydDovXiB7MCwzfT4vLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlOi9cbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cbnwkKS9nLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMjovXiB7MCwzfT5bIFx0XT8vZ20sbGlzdFJlcGxhY2VUYWJzOi9eXHQrLyxsaXN0UmVwbGFjZU5lc3Rpbmc6L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxsaXN0SXNUYXNrOi9eXFtbIHhYXVxdIC8sbGlzdFJlcGxhY2VUYXNrOi9eXFtbIHhYXVxdICsvLGFueUxpbmU6L1xuLipcbi8saHJlZkJyYWNrZXRzOi9ePCguKik+JC8sdGFibGVEZWxpbWl0ZXI6L1s6fF0vLHRhYmxlQWxpZ25DaGFyczovXlx8fFx8ICokL2csdGFibGVSb3dCbGFua0xpbmU6L1xuWyBcdF0qJC8sdGFibGVBbGlnblJpZ2h0Oi9eICotKzogKiQvLHRhYmxlQWxpZ25DZW50ZXI6L14gKjotKzogKiQvLHRhYmxlQWxpZ25MZWZ0Oi9eICo6LSsgKiQvLHN0YXJ0QVRhZzovXjxhIC9pLGVuZEFUYWc6L148XC9hPi9pLHN0YXJ0UHJlU2NyaXB0VGFnOi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLGVuZFByZVNjcmlwdFRhZzovXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLHN0YXJ0QW5nbGVCcmFja2V0Oi9ePC8sZW5kQW5nbGVCcmFja2V0Oi8+JC8scGVkYW50aWNIcmVmVGl0bGU6L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLyx1bmljb2RlQWxwaGFOdW1lcmljOi9bXHB7TH1ccHtOfV0vdSxlc2NhcGVUZXN0Oi9bJjw+IiddLyxlc2NhcGVSZXBsYWNlOi9bJjw+IiddL2csZXNjYXBlVGVzdE5vRW5jb2RlOi9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxlc2NhcGVSZXBsYWNlTm9FbmNvZGU6L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvZyx1bmVzY2FwZVRlc3Q6LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWcsY2FyZXQ6LyhefFteXFtdKVxeL2cscGVyY2VudERlY29kZTovJTI1L2csZmluZFBpcGU6L1x8L2csc3BsaXRQaXBlOi8gXHwvLHNsYXNoUGlwZTovXFxcfC9nLGNhcnJpYWdlUmV0dXJuOi9cclxufFxyL2csc3BhY2VMaW5lOi9eICskL2dtLG5vdFNwYWNlU3RhcnQ6L15cUyovLGVuZGluZ05ld2xpbmU6L1xuJC8sbGlzdEl0ZW1SZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4oIHswLDN9JHt0fSkoKD86WwkgXVteXFxuXSopPyg/OlxcbnwkKSlgKSwibGlzdEl0ZW1SZWdleCIpLG5leHRCdWxsZXRSZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHQtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyAJXVteXFxuXSopPyg/OlxcbnwkKSlgKSwibmV4dEJ1bGxldFJlZ2V4IiksaHJSZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHQtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSwiaHJSZWdleCIpLGZlbmNlc0JlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX0oPzpcYFxgXGB8fn5+KWApLCJmZW5jZXNCZWdpblJlZ2V4IiksaGVhZGluZ0JlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX0jYCksImhlYWRpbmdCZWdpblJlZ2V4IiksaHRtbEJlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX08KD86W2Etel0uKj58IS0tKWAsImkiKSwiaHRtbEJlZ2luUmVnZXgiKX0sTl9lPS9eKD86WyBcdF0qKD86XG58JCkpKy8sTV9lPS9eKCg/OiB7NH18IHswLDN9XHQpW15cbl0rKD86XG4oPzpbIFx0XSooPzpcbnwkKSkqKT8pKy8sSV9lPS9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8sRTI9L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8sT19lPS9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLHJMPS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLGlRPS9eKD8hYnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbHx0YWJsZSkoKD86Lnxcbig/IVxzKj9cbnxidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sfHRhYmxlKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sYVE9bm4oaVEpLnJlcGxhY2UoL2J1bGwvZyxyTCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL1x8dGFibGUvZywiIikuZ2V0UmVnZXgoKSxQX2U9bm4oaVEpLnJlcGxhY2UoL2J1bGwvZyxyTCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL3RhYmxlL2csLyB7MCwzfVx8Pyg/Ols6XC0gXSpcfCkrW1w6XC0gXSpcbi8pLmdldFJlZ2V4KCksbkw9L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sQl9lPS9eW15cbl0rLyxpTD0vKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxGX2U9bm4oL14gezAsM31cWyhsYWJlbClcXTogKig/OlxuWyBcdF0qKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG5bIFx0XSopP3wgKlxuWyBcdF0qKSh0aXRsZSkpPyAqKD86XG4rfCQpLykucmVwbGFjZSgibGFiZWwiLGlMKS5yZXBsYWNlKCJ0aXRsZSIsLyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS8pLmdldFJlZ2V4KCksJF9lPW5uKC9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvKS5yZXBsYWNlKC9idWxsL2csckwpLmdldFJlZ2V4KCksVlQ9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLGFMPS88IS0tKD86LT8+fFtcc1xTXSo/KD86LS0+fCQpKS8sel9lPW5uKCJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuWyAJXSopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuWyAJXSopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpKSIsImkiKS5yZXBsYWNlKCJjb21tZW50IixhTCkucmVwbGFjZSgidGFnIixWVCkucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxzUT1ubihuTCkucmVwbGFjZSgiaHIiLEUyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFZUKS5nZXRSZWdleCgpLEdfZT1ubigvXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLykucmVwbGFjZSgicGFyYWdyYXBoIixzUSkuZ2V0UmVnZXgoKSxzTD17YmxvY2txdW90ZTpHX2UsY29kZTpNX2UsZGVmOkZfZSxmZW5jZXM6SV9lLGhlYWRpbmc6T19lLGhyOkUyLGh0bWw6el9lLGxoZWFkaW5nOmFRLGxpc3Q6JF9lLG5ld2xpbmU6Tl9lLHBhcmFncmFwaDpzUSx0YWJsZTprMix0ZXh0OkJfZX0sWks9bm4oIl4gKihbXlxcbiBdLiopXFxuIHswLDN9KCg/OlxcfCAqKT86Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKig/OlxcfCAqKT8pKD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIikucmVwbGFjZSgiaHIiLEUyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiKD86IHs0fXwgezAsM30JKVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVlQpLmdldFJlZ2V4KCksVl9lPXsuLi5zTCxsaGVhZGluZzpQX2UsdGFibGU6WksscGFyYWdyYXBoOm5uKG5MKS5yZXBsYWNlKCJociIsRTIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsWkspLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixWVCkuZ2V0UmVnZXgoKX0sVV9lPXsuLi5zTCxodG1sOm5uKGBeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzoiW14iXSoifCdbXiddKid8XFxzW14nIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKWApLnJlcGxhY2UoImNvbW1lbnQiLGFMKS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczprMixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpubihuTCkucmVwbGFjZSgiaHIiLEUyKS5yZXBsYWNlKCJoZWFkaW5nIixgICojezEsNn0gKlteCl1gKS5yZXBsYWNlKCJsaGVhZGluZyIsYVEpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5yZXBsYWNlKCJ8dGFnIiwiIikuZ2V0UmVnZXgoKX0sSF9lPS9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxXX2U9L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxvUT0vXiggezIsfXxcXClcbig/IVxzKiQpLyxxX2U9L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8sVVQ9L1tccHtQfVxwe1N9XS91LG9MPS9bXHNccHtQfVxwe1N9XS91LGxRPS9bXlxzXHB7UH1ccHtTfV0vdSxZX2U9bm4oL14oKD8hWypfXSlwdW5jdFNwYWNlKS8sInUiKS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csb0wpLmdldFJlZ2V4KCksY1E9Lyg/IX4pW1xwe1B9XHB7U31dL3UsWF9lPS8oPyF+KVtcc1xwe1B9XHB7U31dL3Usal9lPS8oPzpbXlxzXHB7UH1ccHtTfV18fikvdSxLX2U9L1xbW15bXF1dKj9cXVwoKD86XFwufFteXFxcKFwpXXxcKCg/OlxcLnxbXlxcXChcKV0pKlwpKSpcKXxgW15gXSo/YHw8W148Pl0qPz4vZyx1UT0vXig/OlwqKyg/OigoPyFcKilwdW5jdCl8W15ccypdKSl8Xl8rKD86KCg/IV8pcHVuY3QpfChbXlxzX10pKS8sUV9lPW5uKHVRLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxVVCkuZ2V0UmVnZXgoKSxaX2U9bm4odVEsInUiKS5yZXBsYWNlKC9wdW5jdC9nLGNRKS5nZXRSZWdleCgpLGhRPSJeW15fKl0qP19fW15fKl0qP1xcKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcXCopcHVuY3QoXFwqKykoPz1bXFxzXXwkKXxub3RQdW5jdFNwYWNlKFxcKispKD8hXFwqKSg/PXB1bmN0U3BhY2V8JCl8KD8hXFwqKXB1bmN0U3BhY2UoXFwqKykoPz1ub3RQdW5jdFNwYWNlKXxbXFxzXShcXCorKSg/IVxcKikoPz1wdW5jdCl8KD8hXFwqKXB1bmN0KFxcKispKD8hXFwqKSg/PXB1bmN0KXxub3RQdW5jdFNwYWNlKFxcKispKD89bm90UHVuY3RTcGFjZSkiLEpfZT1ubihoUSwiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csbFEpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxvTCkucmVwbGFjZSgvcHVuY3QvZyxVVCkuZ2V0UmVnZXgoKSxlRGU9bm4oaFEsImd1IikucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLGpfZSkucmVwbGFjZSgvcHVuY3RTcGFjZS9nLFhfZSkucmVwbGFjZSgvcHVuY3QvZyxjUSkuZ2V0UmVnZXgoKSx0RGU9bm4oIl5bXl8qXSo/XFwqXFwqW15fKl0qP19bXl8qXSo/KD89XFwqXFwqKXxbXl9dKyg/PVteX10pfCg/IV8pcHVuY3QoXyspKD89W1xcc118JCl8bm90UHVuY3RTcGFjZShfKykoPyFfKSg/PXB1bmN0U3BhY2V8JCl8KD8hXylwdW5jdFNwYWNlKF8rKSg/PW5vdFB1bmN0U3BhY2UpfFtcXHNdKF8rKSg/IV8pKD89cHVuY3QpfCg/IV8pcHVuY3QoXyspKD8hXykoPz1wdW5jdCkiLCJndSIpLnJlcGxhY2UoL25vdFB1bmN0U3BhY2UvZyxsUSkucmVwbGFjZSgvcHVuY3RTcGFjZS9nLG9MKS5yZXBsYWNlKC9wdW5jdC9nLFVUKS5nZXRSZWdleCgpLHJEZT1ubigvXFwocHVuY3QpLywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFVUKS5nZXRSZWdleCgpLG5EZT1ubigvXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vKS5yZXBsYWNlKCJzY2hlbWUiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZSgiZW1haWwiLC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksaURlPW5uKGFMKS5yZXBsYWNlKCIoPzotLT58JCkiLCItLT4iKS5nZXRSZWdleCgpLGFEZT1ubigiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iKS5yZXBsYWNlKCJjb21tZW50IixpRGUpLnJlcGxhY2UoImF0dHJpYnV0ZSIsL1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksJFQ9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sc0RlPW5uKC9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86KD86WyBcdF0qKD86XG5bIFx0XSopPykodGl0bGUpKT9ccypcKS8pLnJlcGxhY2UoImxhYmVsIiwkVCkucmVwbGFjZSgiaHJlZiIsLzwoPzpcXC58W15cbjw+XFxdKSs+fFteIFx0XG5ceDAwLVx4MWZdKi8pLnJlcGxhY2UoInRpdGxlIiwvIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvKS5nZXRSZWdleCgpLGZRPW5uKC9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8pLnJlcGxhY2UoImxhYmVsIiwkVCkucmVwbGFjZSgicmVmIixpTCkuZ2V0UmVnZXgoKSxkUT1ubigvXiE/XFsocmVmKVxdKD86XFtcXSk/LykucmVwbGFjZSgicmVmIixpTCkuZ2V0UmVnZXgoKSxvRGU9bm4oInJlZmxpbmt8bm9saW5rKD8hXFwoKSIsImciKS5yZXBsYWNlKCJyZWZsaW5rIixmUSkucmVwbGFjZSgibm9saW5rIixkUSkuZ2V0UmVnZXgoKSxsTD17X2JhY2twZWRhbDprMixhbnlQdW5jdHVhdGlvbjpyRGUsYXV0b2xpbms6bkRlLGJsb2NrU2tpcDpLX2UsYnI6b1EsY29kZTpXX2UsZGVsOmsyLGVtU3Ryb25nTERlbGltOlFfZSxlbVN0cm9uZ1JEZWxpbUFzdDpKX2UsZW1TdHJvbmdSRGVsaW1VbmQ6dERlLGVzY2FwZTpIX2UsbGluazpzRGUsbm9saW5rOmRRLHB1bmN0dWF0aW9uOllfZSxyZWZsaW5rOmZRLHJlZmxpbmtTZWFyY2g6b0RlLHRhZzphRGUsdGV4dDpxX2UsdXJsOmsyfSxsRGU9ey4uLmxMLGxpbms6bm4oL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLCRUKS5nZXRSZWdleCgpLHJlZmxpbms6bm4oL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLCRUKS5nZXRSZWdleCgpfSxaOT17Li4ubEwsZW1TdHJvbmdSRGVsaW1Bc3Q6ZURlLGVtU3Ryb25nTERlbGltOlpfZSx1cmw6bm4oL14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLCJpIikucmVwbGFjZSgiZW1haWwiLC9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLykuZ2V0UmVnZXgoKSxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKCg/OlxcLnxbXlxcXSkqPyg/OlxcLnxbXlxzflxcXSkpXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LGNEZT17Li4uWjksYnI6bm4ob1EpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0Om5uKFo5LnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfSxCVD17bm9ybWFsOnNMLGdmbTpWX2UscGVkYW50aWM6VV9lfSxUMj17bm9ybWFsOmxMLGdmbTpaOSxicmVha3M6Y0RlLHBlZGFudGljOmxEZX0sdURlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxKSz1vKHQ9PnVEZVt0XSwiZ2UiKTtvKHhjLCJSIik7byhlUSwiSiIpO28odFEsIlYiKTtvKHcyLCJBIik7byhoRGUsImZlIik7byhyUSwiZGUiKTtvKGZEZSwiSmUiKTt6VD1jbGFzc3tzdGF0aWN7byh0aGlzLCJTIil9b3B0aW9ucztydWxlcztsZXhlcjtjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wdGlvbnM9dHx8VWR9c3BhY2UodCl7bGV0IGU9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWModCk7aWYoZSYmZVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzplWzBdfX1jb2RlKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKHQpO2lmKGUpe2xldCByPWVbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmNvZGVSZW1vdmVJbmRlbnQsIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6ZVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3I6dzIocixgCmApfX19ZmVuY2VzKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVswXSxuPWZEZShyLGVbM118fCIiLHRoaXMucnVsZXMpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6cixsYW5nOmVbMl0/ZVsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTplWzJdLHRleHQ6bn19fWhlYWRpbmcodCl7bGV0IGU9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVsyXS50cmltKCk7aWYodGhpcy5ydWxlcy5vdGhlci5lbmRpbmdIYXNoLnRlc3Qocikpe2xldCBuPXcyKHIsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhbnx8dGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdChuKSkmJihyPW4udHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmVbMF0sZGVwdGg6ZVsxXS5sZW5ndGgsdGV4dDpyLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyKX19fWhyKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJociIscmF3OncyKGVbMF0sYApgKX19YmxvY2txdW90ZSh0KXtsZXQgZT10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyh0KTtpZihlKXtsZXQgcj13MihlWzBdLGAKYCkuc3BsaXQoYApgKSxuPSIiLGk9IiIsYT1bXTtmb3IoO3IubGVuZ3RoPjA7KXtsZXQgcz0hMSxsPVtdLHU7Zm9yKHU9MDt1PHIubGVuZ3RoO3UrKylpZih0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTdGFydC50ZXN0KHJbdV0pKWwucHVzaChyW3VdKSxzPSEwO2Vsc2UgaWYoIXMpbC5wdXNoKHJbdV0pO2Vsc2UgYnJlYWs7cj1yLnNsaWNlKHUpO2xldCBoPWwuam9pbihgCmApLGY9aC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVNldGV4dFJlcGxhY2UsYAogICAgJDFgKS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVNldGV4dFJlcGxhY2UyLCIiKTtuPW4/YCR7bn0KJHtofWA6aCxpPWk/YCR7aX0KJHtmfWA6ZjtsZXQgZD10aGlzLmxleGVyLnN0YXRlLnRvcDtpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMCx0aGlzLmxleGVyLmJsb2NrVG9rZW5zKGYsYSwhMCksdGhpcy5sZXhlci5zdGF0ZS50b3A9ZCxyLmxlbmd0aD09PTApYnJlYWs7bGV0IHA9YS5hdCgtMSk7aWYocD8udHlwZT09PSJjb2RlIilicmVhaztpZihwPy50eXBlPT09ImJsb2NrcXVvdGUiKXtsZXQgbT1wLGc9bS5yYXcrYApgK3Iuam9pbihgCmApLHk9dGhpcy5ibG9ja3F1b3RlKGcpO2FbYS5sZW5ndGgtMV09eSxuPW4uc3Vic3RyaW5nKDAsbi5sZW5ndGgtbS5yYXcubGVuZ3RoKSt5LnJhdyxpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtbS50ZXh0Lmxlbmd0aCkreS50ZXh0O2JyZWFrfWVsc2UgaWYocD8udHlwZT09PSJsaXN0Iil7bGV0IG09cCxnPW0ucmF3K2AKYCtyLmpvaW4oYApgKSx5PXRoaXMubGlzdChnKTthW2EubGVuZ3RoLTFdPXksbj1uLnN1YnN0cmluZygwLG4ubGVuZ3RoLXAucmF3Lmxlbmd0aCkreS5yYXcsaT1pLnN1YnN0cmluZygwLGkubGVuZ3RoLW0ucmF3Lmxlbmd0aCkreS5yYXcscj1nLnN1YnN0cmluZyhhLmF0KC0xKS5yYXcubGVuZ3RoKS5zcGxpdChgCmApO2NvbnRpbnVlfX1yZXR1cm57dHlwZToiYmxvY2txdW90ZSIscmF3Om4sdG9rZW5zOmEsdGV4dDppfX19bGlzdCh0KXtsZXQgZT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyh0KTtpZihlKXtsZXQgcj1lWzFdLnRyaW0oKSxuPXIubGVuZ3RoPjEsaT17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6bixzdGFydDpuPytyLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtyPW4/YFxcZHsxLDl9XFwke3Iuc2xpY2UoLTEpfWA6YFxcJHtyfWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYocj1uP3I6IlsqKy1dIik7bGV0IGE9dGhpcy5ydWxlcy5vdGhlci5saXN0SXRlbVJlZ2V4KHIpLHM9ITE7Zm9yKDt0Oyl7bGV0IHU9ITEsaD0iIixmPSIiO2lmKCEoZT1hLmV4ZWModCkpfHx0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QodCkpYnJlYWs7aD1lWzBdLHQ9dC5zdWJzdHJpbmcoaC5sZW5ndGgpO2xldCBkPWVbMl0uc3BsaXQoYApgLDEpWzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhYnMseD0+IiAiLnJlcGVhdCgzKngubGVuZ3RoKSkscD10LnNwbGl0KGAKYCwxKVswXSxtPSFkLnRyaW0oKSxnPTA7aWYodGhpcy5vcHRpb25zLnBlZGFudGljPyhnPTIsZj1kLnRyaW1TdGFydCgpKTptP2c9ZVsxXS5sZW5ndGgrMTooZz1lWzJdLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhciksZz1nPjQ/MTpnLGY9ZC5zbGljZShnKSxnKz1lWzFdLmxlbmd0aCksbSYmdGhpcy5ydWxlcy5vdGhlci5ibGFua0xpbmUudGVzdChwKSYmKGgrPXArYApgLHQ9dC5zdWJzdHJpbmcocC5sZW5ndGgrMSksdT0hMCksIXUpe2xldCB4PXRoaXMucnVsZXMub3RoZXIubmV4dEJ1bGxldFJlZ2V4KGcpLGI9dGhpcy5ydWxlcy5vdGhlci5oclJlZ2V4KGcpLFQ9dGhpcy5ydWxlcy5vdGhlci5mZW5jZXNCZWdpblJlZ2V4KGcpLFM9dGhpcy5ydWxlcy5vdGhlci5oZWFkaW5nQmVnaW5SZWdleChnKSx3PXRoaXMucnVsZXMub3RoZXIuaHRtbEJlZ2luUmVnZXgoZyk7Zm9yKDt0Oyl7bGV0IEU9dC5zcGxpdChgCmAsMSlbMF0sXztpZihwPUUsdGhpcy5vcHRpb25zLnBlZGFudGljPyhwPXAucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlTmVzdGluZywiICAiKSxfPXApOl89cC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFiQ2hhckdsb2JhbCwiICAgICIpLFQudGVzdChwKXx8Uy50ZXN0KHApfHx3LnRlc3QocCl8fHgudGVzdChwKXx8Yi50ZXN0KHApKWJyZWFrO2lmKF8uc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKT49Z3x8IXAudHJpbSgpKWYrPWAKYCtfLnNsaWNlKGcpO2Vsc2V7aWYobXx8ZC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFiQ2hhckdsb2JhbCwiICAgICIpLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhcik+PTR8fFQudGVzdChkKXx8Uy50ZXN0KGQpfHxiLnRlc3QoZCkpYnJlYWs7Zis9YApgK3B9IW0mJiFwLnRyaW0oKSYmKG09ITApLGgrPUUrYApgLHQ9dC5zdWJzdHJpbmcoRS5sZW5ndGgrMSksZD1fLnNsaWNlKGcpfX1pLmxvb3NlfHwocz9pLmxvb3NlPSEwOnRoaXMucnVsZXMub3RoZXIuZG91YmxlQmxhbmtMaW5lLnRlc3QoaCkmJihzPSEwKSk7bGV0IHk9bnVsbCx2O3RoaXMub3B0aW9ucy5nZm0mJih5PXRoaXMucnVsZXMub3RoZXIubGlzdElzVGFzay5leGVjKGYpLHkmJih2PXlbMF0hPT0iWyBdICIsZj1mLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssIiIpKSksaS5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpoLHRhc2s6ISF5LGNoZWNrZWQ6dixsb29zZTohMSx0ZXh0OmYsdG9rZW5zOltdfSksaS5yYXcrPWh9bGV0IGw9aS5pdGVtcy5hdCgtMSk7aWYobClsLnJhdz1sLnJhdy50cmltRW5kKCksbC50ZXh0PWwudGV4dC50cmltRW5kKCk7ZWxzZSByZXR1cm47aS5yYXc9aS5yYXcudHJpbUVuZCgpO2ZvcihsZXQgdT0wO3U8aS5pdGVtcy5sZW5ndGg7dSsrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGkuaXRlbXNbdV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoaS5pdGVtc1t1XS50ZXh0LFtdKSwhaS5sb29zZSl7bGV0IGg9aS5pdGVtc1t1XS50b2tlbnMuZmlsdGVyKGQ9PmQudHlwZT09PSJzcGFjZSIpLGY9aC5sZW5ndGg+MCYmaC5zb21lKGQ9PnRoaXMucnVsZXMub3RoZXIuYW55TGluZS50ZXN0KGQucmF3KSk7aS5sb29zZT1mfWlmKGkubG9vc2UpZm9yKGxldCB1PTA7dTxpLml0ZW1zLmxlbmd0aDt1KyspaS5pdGVtc1t1XS5sb29zZT0hMDtyZXR1cm4gaX19aHRtbCh0KXtsZXQgZT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJodG1sIixibG9jazohMCxyYXc6ZVswXSxwcmU6ZVsxXT09PSJwcmUifHxlWzFdPT09InNjcmlwdCJ8fGVbMV09PT0ic3R5bGUiLHRleHQ6ZVswXX19ZGVmKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCIgIiksbj1lWzJdP2VbMl0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmhyZWZCcmFja2V0cywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOiIiLGk9ZVszXT9lWzNdLnN1YnN0cmluZygxLGVbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6ZVszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6cixyYXc6ZVswXSxocmVmOm4sdGl0bGU6aX19fXRhYmxlKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyh0KTtpZighZXx8IXRoaXMucnVsZXMub3RoZXIudGFibGVEZWxpbWl0ZXIudGVzdChlWzJdKSlyZXR1cm47bGV0IHI9dFEoZVsxXSksbj1lWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduQ2hhcnMsIiIpLnNwbGl0KCJ8IiksaT1lWzNdPy50cmltKCk/ZVszXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFibGVSb3dCbGFua0xpbmUsIiIpLnNwbGl0KGAKYCk6W10sYT17dHlwZToidGFibGUiLHJhdzplWzBdLGhlYWRlcjpbXSxhbGlnbjpbXSxyb3dzOltdfTtpZihyLmxlbmd0aD09PW4ubGVuZ3RoKXtmb3IobGV0IHMgb2Ygbil0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25SaWdodC50ZXN0KHMpP2EuYWxpZ24ucHVzaCgicmlnaHQiKTp0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DZW50ZXIudGVzdChzKT9hLmFsaWduLnB1c2goImNlbnRlciIpOnRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkxlZnQudGVzdChzKT9hLmFsaWduLnB1c2goImxlZnQiKTphLmFsaWduLnB1c2gobnVsbCk7Zm9yKGxldCBzPTA7czxyLmxlbmd0aDtzKyspYS5oZWFkZXIucHVzaCh7dGV4dDpyW3NdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyW3NdKSxoZWFkZXI6ITAsYWxpZ246YS5hbGlnbltzXX0pO2ZvcihsZXQgcyBvZiBpKWEucm93cy5wdXNoKHRRKHMsYS5oZWFkZXIubGVuZ3RoKS5tYXAoKGwsdSk9Pih7dGV4dDpsLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShsKSxoZWFkZXI6ITEsYWxpZ246YS5hbGlnblt1XX0pKSk7cmV0dXJuIGF9fWxoZWFkaW5nKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6ZVswXSxkZXB0aDplWzJdLmNoYXJBdCgwKT09PSI9Ij8xOjIsdGV4dDplWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShlWzFdKX19cGFyYWdyYXBoKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVsxXS5jaGFyQXQoZVsxXS5sZW5ndGgtMSk9PT1gCmA/ZVsxXS5zbGljZSgwLC0xKTplWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzplWzBdLHRleHQ6cix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUocil9fX10ZXh0KHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6InRleHQiLHJhdzplWzBdLHRleHQ6ZVswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZVswXSl9fWVzY2FwZSh0KXtsZXQgZT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzplWzBdLHRleHQ6ZVsxXX19dGFnKHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKHQpO2lmKGUpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiZ0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QVRhZy50ZXN0KGVbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiZ0aGlzLnJ1bGVzLm90aGVyLmVuZEFUYWcudGVzdChlWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiZ0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0UHJlU2NyaXB0VGFnLnRlc3QoZVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmdGhpcy5ydWxlcy5vdGhlci5lbmRQcmVTY3JpcHRUYWcudGVzdChlWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6Imh0bWwiLHJhdzplWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OmVbMF19fWxpbmsodCl7bGV0IGU9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKHQpO2lmKGUpe2xldCByPWVbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJnRoaXMucnVsZXMub3RoZXIuc3RhcnRBbmdsZUJyYWNrZXQudGVzdChyKSl7aWYoIXRoaXMucnVsZXMub3RoZXIuZW5kQW5nbGVCcmFja2V0LnRlc3QocikpcmV0dXJuO2xldCBhPXcyKHIuc2xpY2UoMCwtMSksIlxcIik7aWYoKHIubGVuZ3RoLWEubGVuZ3RoKSUyPT09MClyZXR1cm59ZWxzZXtsZXQgYT1oRGUoZVsyXSwiKCkiKTtpZihhPT09LTIpcmV0dXJuO2lmKGE+LTEpe2xldCBzPShlWzBdLmluZGV4T2YoIiEiKT09PTA/NTo0KStlWzFdLmxlbmd0aCthO2VbMl09ZVsyXS5zdWJzdHJpbmcoMCxhKSxlWzBdPWVbMF0uc3Vic3RyaW5nKDAscykudHJpbSgpLGVbM109IiJ9fWxldCBuPWVbMl0saT0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2xldCBhPXRoaXMucnVsZXMub3RoZXIucGVkYW50aWNIcmVmVGl0bGUuZXhlYyhuKTthJiYobj1hWzFdLGk9YVszXSl9ZWxzZSBpPWVbM10/ZVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gbj1uLnRyaW0oKSx0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QW5nbGVCcmFja2V0LnRlc3QobikmJih0aGlzLm9wdGlvbnMucGVkYW50aWMmJiF0aGlzLnJ1bGVzLm90aGVyLmVuZEFuZ2xlQnJhY2tldC50ZXN0KHIpP249bi5zbGljZSgxKTpuPW4uc2xpY2UoMSwtMSkpLHJRKGUse2hyZWY6biYmbi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpLHRpdGxlOmkmJmkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKX0sZVswXSx0aGlzLmxleGVyLHRoaXMucnVsZXMpfX1yZWZsaW5rKHQsZSl7bGV0IHI7aWYoKHI9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHQpKXx8KHI9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWModCkpKXtsZXQgbj0oclsyXXx8clsxXSkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsIiAiKSxpPWVbbi50b0xvd2VyQ2FzZSgpXTtpZighaSl7bGV0IGE9clswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzphLHRleHQ6YX19cmV0dXJuIHJRKHIsaSxyWzBdLHRoaXMubGV4ZXIsdGhpcy5ydWxlcyl9fWVtU3Ryb25nKHQsZSxyPSIiKXtsZXQgbj10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ0xEZWxpbS5leGVjKHQpO2lmKCEoIW58fG5bM10mJnIubWF0Y2godGhpcy5ydWxlcy5vdGhlci51bmljb2RlQWxwaGFOdW1lcmljKSkmJighKG5bMV18fG5bMl0pfHwhcnx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhyKSkpe2xldCBpPVsuLi5uWzBdXS5sZW5ndGgtMSxhLHMsbD1pLHU9MCxoPW5bMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7Zm9yKGgubGFzdEluZGV4PTAsZT1lLnNsaWNlKC0xKnQubGVuZ3RoK2kpOyhuPWguZXhlYyhlKSkhPW51bGw7KXtpZihhPW5bMV18fG5bMl18fG5bM118fG5bNF18fG5bNV18fG5bNl0sIWEpY29udGludWU7aWYocz1bLi4uYV0ubGVuZ3RoLG5bM118fG5bNF0pe2wrPXM7Y29udGludWV9ZWxzZSBpZigobls1XXx8bls2XSkmJmklMyYmISgoaStzKSUzKSl7dSs9cztjb250aW51ZX1pZihsLT1zLGw+MCljb250aW51ZTtzPU1hdGgubWluKHMscytsK3UpO2xldCBmPVsuLi5uWzBdXVswXS5sZW5ndGgsZD10LnNsaWNlKDAsaStuLmluZGV4K2Yrcyk7aWYoTWF0aC5taW4oaSxzKSUyKXtsZXQgbT1kLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmQsdGV4dDptLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhtKX19bGV0IHA9ZC5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6ZCx0ZXh0OnAsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHApfX19fWNvZGVzcGFuKHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyh0KTtpZihlKXtsZXQgcj1lWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCwiICIpLG49dGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIudGVzdChyKSxpPXRoaXMucnVsZXMub3RoZXIuc3RhcnRpbmdTcGFjZUNoYXIudGVzdChyKSYmdGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdChyKTtyZXR1cm4gbiYmaSYmKHI9ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKSkse3R5cGU6ImNvZGVzcGFuIixyYXc6ZVswXSx0ZXh0OnJ9fX1icih0KXtsZXQgZT10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6ImJyIixyYXc6ZVswXX19ZGVsKHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6ImRlbCIscmF3OmVbMF0sdGV4dDplWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhlWzJdKX19YXV0b2xpbmsodCl7bGV0IGU9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyh0KTtpZihlKXtsZXQgcixuO3JldHVybiBlWzJdPT09IkAiPyhyPWVbMV0sbj0ibWFpbHRvOiIrcik6KHI9ZVsxXSxuPXIpLHt0eXBlOiJsaW5rIixyYXc6ZVswXSx0ZXh0OnIsaHJlZjpuLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19dXJsKHQpe2xldCBlO2lmKGU9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWModCkpe2xldCByLG47aWYoZVsyXT09PSJAIilyPWVbMF0sbj0ibWFpbHRvOiIrcjtlbHNle2xldCBpO2RvIGk9ZVswXSxlWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhlWzBdKT8uWzBdPz8iIjt3aGlsZShpIT09ZVswXSk7cj1lWzBdLGVbMV09PT0id3d3LiI/bj0iaHR0cDovLyIrZVswXTpuPWVbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzplWzBdLHRleHQ6cixocmVmOm4sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX1pbmxpbmVUZXh0KHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyh0KTtpZihlKXtsZXQgcj10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s7cmV0dXJue3R5cGU6InRleHQiLHJhdzplWzBdLHRleHQ6ZVswXSxlc2NhcGVkOnJ9fX19LE51PWNsYXNzIEo5e3N0YXRpY3tvKHRoaXMsImEiKX10b2tlbnM7b3B0aW9ucztzdGF0ZTt0b2tlbml6ZXI7aW5saW5lUXVldWU7Y29uc3RydWN0b3IoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8VWQsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgelQsdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtsZXQgcj17b3RoZXI6c3MsYmxvY2s6QlQubm9ybWFsLGlubGluZTpUMi5ub3JtYWx9O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8oci5ibG9jaz1CVC5wZWRhbnRpYyxyLmlubGluZT1UMi5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKHIuYmxvY2s9QlQuZ2ZtLHRoaXMub3B0aW9ucy5icmVha3M/ci5pbmxpbmU9VDIuYnJlYWtzOnIuaW5saW5lPVQyLmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9cn1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOkJULGlubGluZTpUMn19c3RhdGljIGxleChlLHIpe3JldHVybiBuZXcgSjkocikubGV4KGUpfXN0YXRpYyBsZXhJbmxpbmUoZSxyKXtyZXR1cm4gbmV3IEo5KHIpLmlubGluZVRva2VucyhlKX1sZXgoZSl7ZT1lLnJlcGxhY2Uoc3MuY2FycmlhZ2VSZXR1cm4sYApgKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO2ZvcihsZXQgcj0wO3I8dGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZVF1ZXVlW3JdO3RoaXMuaW5saW5lVG9rZW5zKG4uc3JjLG4udG9rZW5zKX1yZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhlLHI9W10sbj0hMSl7Zm9yKHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGU9ZS5yZXBsYWNlKHNzLnRhYkNoYXJHbG9iYWwsIiAgICAiKS5yZXBsYWNlKHNzLnNwYWNlTGluZSwiIikpO2U7KXtsZXQgaTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uYmxvY2s/LnNvbWUocz0+KGk9cy5jYWxsKHtsZXhlcjp0aGlzfSxlLHIpKT8oZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKSwhMCk6ITEpKWNvbnRpbnVlO2lmKGk9dGhpcy50b2tlbml6ZXIuc3BhY2UoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKTtsZXQgcz1yLmF0KC0xKTtpLnJhdy5sZW5ndGg9PT0xJiZzIT09dm9pZCAwP3MucmF3Kz1gCmA6ci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuY29kZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpO2xldCBzPXIuYXQoLTEpO3M/LnR5cGU9PT0icGFyYWdyYXBoInx8cz8udHlwZT09PSJ0ZXh0Ij8ocy5yYXcrPWAKYCtpLnJhdyxzLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPXMudGV4dCk6ci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmhyKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmxpc3QoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5odG1sKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuZGVmKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7bGV0IHM9ci5hdCgtMSk7cz8udHlwZT09PSJwYXJhZ3JhcGgifHxzPy50eXBlPT09InRleHQiPyhzLnJhdys9YApgK2kucmF3LHMudGV4dCs9YApgK2kucmF3LHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYz1zLnRleHQpOnRoaXMudG9rZW5zLmxpbmtzW2kudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2kudGFnXT17aHJlZjppLmhyZWYsdGl0bGU6aS50aXRsZX0pO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIudGFibGUoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5saGVhZGluZyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1sZXQgYT1lO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydEJsb2NrKXtsZXQgcz0xLzAsbD1lLnNsaWNlKDEpLHU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGg9Pnt1PWguY2FsbCh7bGV4ZXI6dGhpc30sbCksdHlwZW9mIHU9PSJudW1iZXIiJiZ1Pj0wJiYocz1NYXRoLm1pbihzLHUpKX0pLHM8MS8wJiZzPj0wJiYoYT1lLnN1YnN0cmluZygwLHMrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoaT10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoYSkpKXtsZXQgcz1yLmF0KC0xKTtuJiZzPy50eXBlPT09InBhcmFncmFwaCI/KHMucmF3Kz1gCmAraS5yYXcscy50ZXh0Kz1gCmAraS50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPXMudGV4dCk6ci5wdXNoKGkpLG49YS5sZW5ndGghPT1lLmxlbmd0aCxlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci50ZXh0KGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7bGV0IHM9ci5hdCgtMSk7cz8udHlwZT09PSJ0ZXh0Ij8ocy5yYXcrPWAKYCtpLnJhdyxzLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9cy50ZXh0KTpyLnB1c2goaSk7Y29udGludWV9aWYoZSl7bGV0IHM9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihzKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihzKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLHJ9aW5saW5lKGUscj1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmUsdG9rZW5zOnJ9KSxyfWlubGluZVRva2VucyhlLHI9W10pe2xldCBuPWUsaT1udWxsO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtsZXQgbD1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYobC5sZW5ndGg+MClmb3IoOyhpPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMobikpIT1udWxsOylsLmluY2x1ZGVzKGlbMF0uc2xpY2UoaVswXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKG49bi5zbGljZSgwLGkuaW5kZXgpKyJbIisiYSIucmVwZWF0KGlbMF0ubGVuZ3RoLTIpKyJdIituLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7KGk9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMobikpIT1udWxsOyluPW4uc2xpY2UoMCxpLmluZGV4KSsiKysiK24uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDsoaT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMobikpIT1udWxsOyluPW4uc2xpY2UoMCxpLmluZGV4KSsiWyIrImEiLnJlcGVhdChpWzBdLmxlbmd0aC0yKSsiXSIrbi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7bGV0IGE9ITEscz0iIjtmb3IoO2U7KXthfHwocz0iIiksYT0hMTtsZXQgbDtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uaW5saW5lPy5zb21lKGg9PihsPWguY2FsbCh7bGV4ZXI6dGhpc30sZSxyKSk/KGU9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCksITApOiExKSljb250aW51ZTtpZihsPXRoaXMudG9rZW5pemVyLmVzY2FwZShlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLnRhZyhlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmxpbmsoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5yZWZsaW5rKGUsdGhpcy50b2tlbnMubGlua3MpKXtlPWUuc3Vic3RyaW5nKGwucmF3Lmxlbmd0aCk7bGV0IGg9ci5hdCgtMSk7bC50eXBlPT09InRleHQiJiZoPy50eXBlPT09InRleHQiPyhoLnJhdys9bC5yYXcsaC50ZXh0Kz1sLnRleHQpOnIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGUsbixzKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGUpKXtlPWUuc3Vic3RyaW5nKGwucmF3Lmxlbmd0aCksci5wdXNoKGwpO2NvbnRpbnVlfWlmKGw9dGhpcy50b2tlbml6ZXIuYnIoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5kZWwoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5hdXRvbGluayhlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihsPXRoaXMudG9rZW5pemVyLnVybChlKSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9bGV0IHU9ZTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uc3RhcnRJbmxpbmUpe2xldCBoPTEvMCxmPWUuc2xpY2UoMSksZDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKHA9PntkPXAuY2FsbCh7bGV4ZXI6dGhpc30sZiksdHlwZW9mIGQ9PSJudW1iZXIiJiZkPj0wJiYoaD1NYXRoLm1pbihoLGQpKX0pLGg8MS8wJiZoPj0wJiYodT1lLnN1YnN0cmluZygwLGgrMSkpfWlmKGw9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dCh1KSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLGwucmF3LnNsaWNlKC0xKSE9PSJfIiYmKHM9bC5yYXcuc2xpY2UoLTEpKSxhPSEwO2xldCBoPXIuYXQoLTEpO2g/LnR5cGU9PT0idGV4dCI/KGgucmF3Kz1sLnJhdyxoLnRleHQrPWwudGV4dCk6ci5wdXNoKGwpO2NvbnRpbnVlfWlmKGUpe2xldCBoPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoaCk7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaCl9fXJldHVybiByfX0sR1Q9Y2xhc3N7c3RhdGlje28odGhpcywiJCIpfW9wdGlvbnM7cGFyc2VyO2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10fHxVZH1zcGFjZSh0KXtyZXR1cm4iIn1jb2RlKHt0ZXh0OnQsbGFuZzplLGVzY2FwZWQ6cn0pe2xldCBuPShlfHwiIikubWF0Y2goc3Mubm90U3BhY2VTdGFydCk/LlswXSxpPXQucmVwbGFjZShzcy5lbmRpbmdOZXdsaW5lLCIiKStgCmA7cmV0dXJuIG4/JzxwcmU+PGNvZGUgY2xhc3M9Imxhbmd1YWdlLScreGMobikrJyI+Jysocj9pOnhjKGksITApKStgPC9jb2RlPjwvcHJlPgpgOiI8cHJlPjxjb2RlPiIrKHI/aTp4YyhpLCEwKSkrYDwvY29kZT48L3ByZT4KYH1ibG9ja3F1b3RlKHt0b2tlbnM6dH0pe3JldHVybmA8YmxvY2txdW90ZT4KJHt0aGlzLnBhcnNlci5wYXJzZSh0KX08L2Jsb2NrcXVvdGU+CmB9aHRtbCh7dGV4dDp0fSl7cmV0dXJuIHR9aGVhZGluZyh7dG9rZW5zOnQsZGVwdGg6ZX0pe3JldHVybmA8aCR7ZX0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L2gke2V9PgpgfWhyKHQpe3JldHVybmA8aHI+CmB9bGlzdCh0KXtsZXQgZT10Lm9yZGVyZWQscj10LnN0YXJ0LG49IiI7Zm9yKGxldCBzPTA7czx0Lml0ZW1zLmxlbmd0aDtzKyspe2xldCBsPXQuaXRlbXNbc107bis9dGhpcy5saXN0aXRlbShsKX1sZXQgaT1lPyJvbCI6InVsIixhPWUmJnIhPT0xPycgc3RhcnQ9IicrcisnIic6IiI7cmV0dXJuIjwiK2krYStgPgpgK24rIjwvIitpK2A+CmB9bGlzdGl0ZW0odCl7bGV0IGU9IiI7aWYodC50YXNrKXtsZXQgcj10aGlzLmNoZWNrYm94KHtjaGVja2VkOiEhdC5jaGVja2VkfSk7dC5sb29zZT90LnRva2Vuc1swXT8udHlwZT09PSJwYXJhZ3JhcGgiPyh0LnRva2Vuc1swXS50ZXh0PXIrIiAiK3QudG9rZW5zWzBdLnRleHQsdC50b2tlbnNbMF0udG9rZW5zJiZ0LnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJnQudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlPT09InRleHQiJiYodC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9cisiICIreGModC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpLHQudG9rZW5zWzBdLnRva2Vuc1swXS5lc2NhcGVkPSEwKSk6dC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIscmF3OnIrIiAiLHRleHQ6cisiICIsZXNjYXBlZDohMH0pOmUrPXIrIiAifXJldHVybiBlKz10aGlzLnBhcnNlci5wYXJzZSh0LnRva2VucywhIXQubG9vc2UpLGA8bGk+JHtlfTwvbGk+CmB9Y2hlY2tib3goe2NoZWNrZWQ6dH0pe3JldHVybiI8aW5wdXQgIisodD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giPid9cGFyYWdyYXBoKHt0b2tlbnM6dH0pe3JldHVybmA8cD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHQpfTwvcD4KYH10YWJsZSh0KXtsZXQgZT0iIixyPSIiO2ZvcihsZXQgaT0wO2k8dC5oZWFkZXIubGVuZ3RoO2krKylyKz10aGlzLnRhYmxlY2VsbCh0LmhlYWRlcltpXSk7ZSs9dGhpcy50YWJsZXJvdyh7dGV4dDpyfSk7bGV0IG49IiI7Zm9yKGxldCBpPTA7aTx0LnJvd3MubGVuZ3RoO2krKyl7bGV0IGE9dC5yb3dzW2ldO3I9IiI7Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspcis9dGhpcy50YWJsZWNlbGwoYVtzXSk7bis9dGhpcy50YWJsZXJvdyh7dGV4dDpyfSl9cmV0dXJuIG4mJihuPWA8dGJvZHk+JHtufTwvdGJvZHk+YCksYDx0YWJsZT4KPHRoZWFkPgpgK2UrYDwvdGhlYWQ+CmArbitgPC90YWJsZT4KYH10YWJsZXJvdyh7dGV4dDp0fSl7cmV0dXJuYDx0cj4KJHt0fTwvdHI+CmB9dGFibGVjZWxsKHQpe2xldCBlPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHQudG9rZW5zKSxyPXQuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4odC5hbGlnbj9gPCR7cn0gYWxpZ249IiR7dC5hbGlnbn0iPmA6YDwke3J9PmApK2UrYDwvJHtyfT4KYH1zdHJvbmcoe3Rva2Vuczp0fSl7cmV0dXJuYDxzdHJvbmc+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L3N0cm9uZz5gfWVtKHt0b2tlbnM6dH0pe3JldHVybmA8ZW0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L2VtPmB9Y29kZXNwYW4oe3RleHQ6dH0pe3JldHVybmA8Y29kZT4ke3hjKHQsITApfTwvY29kZT5gfWJyKHQpe3JldHVybiI8YnI+In1kZWwoe3Rva2Vuczp0fSl7cmV0dXJuYDxkZWw+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L2RlbD5gfWxpbmsoe2hyZWY6dCx0aXRsZTplLHRva2VuczpyfSl7bGV0IG49dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUociksaT1lUSh0KTtpZihpPT09bnVsbClyZXR1cm4gbjt0PWk7bGV0IGE9JzxhIGhyZWY9IicrdCsnIic7cmV0dXJuIGUmJihhKz0nIHRpdGxlPSInK3hjKGUpKyciJyksYSs9Ij4iK24rIjwvYT4iLGF9aW1hZ2Uoe2hyZWY6dCx0aXRsZTplLHRleHQ6cix0b2tlbnM6bn0pe24mJihyPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKG4sdGhpcy5wYXJzZXIudGV4dFJlbmRlcmVyKSk7bGV0IGk9ZVEodCk7aWYoaT09PW51bGwpcmV0dXJuIHhjKHIpO3Q9aTtsZXQgYT1gPGltZyBzcmM9IiR7dH0iIGFsdD0iJHtyfSJgO3JldHVybiBlJiYoYSs9YCB0aXRsZT0iJHt4YyhlKX0iYCksYSs9Ij4iLGF9dGV4dCh0KXtyZXR1cm4idG9rZW5zImluIHQmJnQudG9rZW5zP3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHQudG9rZW5zKToiZXNjYXBlZCJpbiB0JiZ0LmVzY2FwZWQ/dC50ZXh0OnhjKHQudGV4dCl9fSxjTD1jbGFzc3tzdGF0aWN7byh0aGlzLCJfIil9c3Ryb25nKHt0ZXh0OnR9KXtyZXR1cm4gdH1lbSh7dGV4dDp0fSl7cmV0dXJuIHR9Y29kZXNwYW4oe3RleHQ6dH0pe3JldHVybiB0fWRlbCh7dGV4dDp0fSl7cmV0dXJuIHR9aHRtbCh7dGV4dDp0fSl7cmV0dXJuIHR9dGV4dCh7dGV4dDp0fSl7cmV0dXJuIHR9bGluayh7dGV4dDp0fSl7cmV0dXJuIiIrdH1pbWFnZSh7dGV4dDp0fSl7cmV0dXJuIiIrdH1icigpe3JldHVybiIifX0sTXU9Y2xhc3MgZUx7c3RhdGlje28odGhpcywiYSIpfW9wdGlvbnM7cmVuZGVyZXI7dGV4dFJlbmRlcmVyO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxVZCx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgR1QsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyLnBhcnNlcj10aGlzLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBjTH1zdGF0aWMgcGFyc2UoZSxyKXtyZXR1cm4gbmV3IGVMKHIpLnBhcnNlKGUpfXN0YXRpYyBwYXJzZUlubGluZShlLHIpe3JldHVybiBuZXcgZUwocikucGFyc2VJbmxpbmUoZSl9cGFyc2UoZSxyPSEwKXtsZXQgbj0iIjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IGE9ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYS50eXBlXSl7bGV0IGw9YSx1PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tsLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxsKTtpZih1IT09ITF8fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKGwudHlwZSkpe24rPXV8fCIiO2NvbnRpbnVlfX1sZXQgcz1hO3N3aXRjaChzLnR5cGUpe2Nhc2Uic3BhY2UiOntuKz10aGlzLnJlbmRlcmVyLnNwYWNlKHMpO2NvbnRpbnVlfWNhc2UiaHIiOntuKz10aGlzLnJlbmRlcmVyLmhyKHMpO2NvbnRpbnVlfWNhc2UiaGVhZGluZyI6e24rPXRoaXMucmVuZGVyZXIuaGVhZGluZyhzKTtjb250aW51ZX1jYXNlImNvZGUiOntuKz10aGlzLnJlbmRlcmVyLmNvZGUocyk7Y29udGludWV9Y2FzZSJ0YWJsZSI6e24rPXRoaXMucmVuZGVyZXIudGFibGUocyk7Y29udGludWV9Y2FzZSJibG9ja3F1b3RlIjp7bis9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHMpO2NvbnRpbnVlfWNhc2UibGlzdCI6e24rPXRoaXMucmVuZGVyZXIubGlzdChzKTtjb250aW51ZX1jYXNlImh0bWwiOntuKz10aGlzLnJlbmRlcmVyLmh0bWwocyk7Y29udGludWV9Y2FzZSJwYXJhZ3JhcGgiOntuKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaChzKTtjb250aW51ZX1jYXNlInRleHQiOntsZXQgbD1zLHU9dGhpcy5yZW5kZXJlci50ZXh0KGwpO2Zvcig7aSsxPGUubGVuZ3RoJiZlW2krMV0udHlwZT09PSJ0ZXh0IjspbD1lWysraV0sdSs9YApgK3RoaXMucmVuZGVyZXIudGV4dChsKTtyP24rPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHt0eXBlOiJwYXJhZ3JhcGgiLHJhdzp1LHRleHQ6dSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6dSx0ZXh0OnUsZXNjYXBlZDohMH1dfSk6bis9dTtjb250aW51ZX1kZWZhdWx0OntsZXQgbD0nVG9rZW4gd2l0aCAiJytzLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gbn1wYXJzZUlubGluZShlLHI9dGhpcy5yZW5kZXJlcil7bGV0IG49IiI7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV07aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnJlbmRlcmVycz8uW2EudHlwZV0pe2xldCBsPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxhKTtpZihsIT09ITF8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoYS50eXBlKSl7bis9bHx8IiI7Y29udGludWV9fWxldCBzPWE7c3dpdGNoKHMudHlwZSl7Y2FzZSJlc2NhcGUiOntuKz1yLnRleHQocyk7YnJlYWt9Y2FzZSJodG1sIjp7bis9ci5odG1sKHMpO2JyZWFrfWNhc2UibGluayI6e24rPXIubGluayhzKTticmVha31jYXNlImltYWdlIjp7bis9ci5pbWFnZShzKTticmVha31jYXNlInN0cm9uZyI6e24rPXIuc3Ryb25nKHMpO2JyZWFrfWNhc2UiZW0iOntuKz1yLmVtKHMpO2JyZWFrfWNhc2UiY29kZXNwYW4iOntuKz1yLmNvZGVzcGFuKHMpO2JyZWFrfWNhc2UiYnIiOntuKz1yLmJyKHMpO2JyZWFrfWNhc2UiZGVsIjp7bis9ci5kZWwocyk7YnJlYWt9Y2FzZSJ0ZXh0Ijp7bis9ci50ZXh0KHMpO2JyZWFrfWRlZmF1bHQ6e2xldCBsPSdUb2tlbiB3aXRoICInK3MudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKGwpLCIiO3Rocm93IG5ldyBFcnJvcihsKX19fXJldHVybiBufX0sRlQ9Y2xhc3N7c3RhdGlje28odGhpcywiTCIpfW9wdGlvbnM7YmxvY2s7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXR8fFVkfXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiLCJwcm9jZXNzQWxsVG9rZW5zIl0pO3ByZXByb2Nlc3ModCl7cmV0dXJuIHR9cG9zdHByb2Nlc3ModCl7cmV0dXJuIHR9cHJvY2Vzc0FsbFRva2Vucyh0KXtyZXR1cm4gdH1wcm92aWRlTGV4ZXIoKXtyZXR1cm4gdGhpcy5ibG9jaz9OdS5sZXg6TnUubGV4SW5saW5lfXByb3ZpZGVQYXJzZXIoKXtyZXR1cm4gdGhpcy5ibG9jaz9NdS5wYXJzZTpNdS5wYXJzZUlubGluZX19LGREZT1jbGFzc3tzdGF0aWN7byh0aGlzLCJCIil9ZGVmYXVsdHM9dEwoKTtvcHRpb25zPXRoaXMuc2V0T3B0aW9ucztwYXJzZT10aGlzLnBhcnNlTWFya2Rvd24oITApO3BhcnNlSW5saW5lPXRoaXMucGFyc2VNYXJrZG93bighMSk7UGFyc2VyPU11O1JlbmRlcmVyPUdUO1RleHRSZW5kZXJlcj1jTDtMZXhlcj1OdTtUb2tlbml6ZXI9elQ7SG9va3M9RlQ7Y29uc3RydWN0b3IoLi4udCl7dGhpcy51c2UoLi4udCl9d2Fsa1Rva2Vucyh0LGUpe2xldCByPVtdO2ZvcihsZXQgbiBvZiB0KXN3aXRjaChyPXIuY29uY2F0KGUuY2FsbCh0aGlzLG4pKSxuLnR5cGUpe2Nhc2UidGFibGUiOntsZXQgaT1uO2ZvcihsZXQgYSBvZiBpLmhlYWRlcilyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLnRva2VucyxlKSk7Zm9yKGxldCBhIG9mIGkucm93cylmb3IobGV0IHMgb2YgYSlyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzLnRva2VucyxlKSk7YnJlYWt9Y2FzZSJsaXN0Ijp7bGV0IGk9bjtyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhpLml0ZW1zLGUpKTticmVha31kZWZhdWx0OntsZXQgaT1uO3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucz8uY2hpbGRUb2tlbnM/LltpLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tpLnR5cGVdLmZvckVhY2goYT0+e2xldCBzPWlbYV0uZmxhdCgxLzApO3I9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKHMsZSkpfSk6aS50b2tlbnMmJihyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhpLnRva2VucyxlKSkpfX1yZXR1cm4gcn11c2UoLi4udCl7bGV0IGU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gdC5mb3JFYWNoKHI9PntsZXQgbj17Li4ucn07aWYobi5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxuLmFzeW5jfHwhMSxyLmV4dGVuc2lvbnMmJihyLmV4dGVuc2lvbnMuZm9yRWFjaChpPT57aWYoIWkubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoInJlbmRlcmVyImluIGkpe2xldCBhPWUucmVuZGVyZXJzW2kubmFtZV07YT9lLnJlbmRlcmVyc1tpLm5hbWVdPWZ1bmN0aW9uKC4uLnMpe2xldCBsPWkucmVuZGVyZXIuYXBwbHkodGhpcyxzKTtyZXR1cm4gbD09PSExJiYobD1hLmFwcGx5KHRoaXMscykpLGx9OmUucmVuZGVyZXJzW2kubmFtZV09aS5yZW5kZXJlcn1pZigidG9rZW5pemVyImluIGkpe2lmKCFpLmxldmVsfHxpLmxldmVsIT09ImJsb2NrIiYmaS5sZXZlbCE9PSJpbmxpbmUiKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2xldCBhPWVbaS5sZXZlbF07YT9hLnVuc2hpZnQoaS50b2tlbml6ZXIpOmVbaS5sZXZlbF09W2kudG9rZW5pemVyXSxpLnN0YXJ0JiYoaS5sZXZlbD09PSJibG9jayI/ZS5zdGFydEJsb2NrP2Uuc3RhcnRCbG9jay5wdXNoKGkuc3RhcnQpOmUuc3RhcnRCbG9jaz1baS5zdGFydF06aS5sZXZlbD09PSJpbmxpbmUiJiYoZS5zdGFydElubGluZT9lLnN0YXJ0SW5saW5lLnB1c2goaS5zdGFydCk6ZS5zdGFydElubGluZT1baS5zdGFydF0pKX0iY2hpbGRUb2tlbnMiaW4gaSYmaS5jaGlsZFRva2VucyYmKGUuY2hpbGRUb2tlbnNbaS5uYW1lXT1pLmNoaWxkVG9rZW5zKX0pLG4uZXh0ZW5zaW9ucz1lKSxyLnJlbmRlcmVyKXtsZXQgaT10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgR1QodGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBhIGluIHIucmVuZGVyZXIpe2lmKCEoYSBpbiBpKSl0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke2F9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsInBhcnNlciJdLmluY2x1ZGVzKGEpKWNvbnRpbnVlO2xldCBzPWEsbD1yLnJlbmRlcmVyW3NdLHU9aVtzXTtpW3NdPSguLi5oKT0+e2xldCBmPWwuYXBwbHkoaSxoKTtyZXR1cm4gZj09PSExJiYoZj11LmFwcGx5KGksaCkpLGZ8fCIifX1uLnJlbmRlcmVyPWl9aWYoci50b2tlbml6ZXIpe2xldCBpPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgelQodGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBhIGluIHIudG9rZW5pemVyKXtpZighKGEgaW4gaSkpdGhyb3cgbmV3IEVycm9yKGB0b2tlbml6ZXIgJyR7YX0nIGRvZXMgbm90IGV4aXN0YCk7aWYoWyJvcHRpb25zIiwicnVsZXMiLCJsZXhlciJdLmluY2x1ZGVzKGEpKWNvbnRpbnVlO2xldCBzPWEsbD1yLnRva2VuaXplcltzXSx1PWlbc107aVtzXT0oLi4uaCk9PntsZXQgZj1sLmFwcGx5KGksaCk7cmV0dXJuIGY9PT0hMSYmKGY9dS5hcHBseShpLGgpKSxmfX1uLnRva2VuaXplcj1pfWlmKHIuaG9va3Mpe2xldCBpPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5ldyBGVDtmb3IobGV0IGEgaW4gci5ob29rcyl7aWYoIShhIGluIGkpKXRocm93IG5ldyBFcnJvcihgaG9vayAnJHthfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJibG9jayJdLmluY2x1ZGVzKGEpKWNvbnRpbnVlO2xldCBzPWEsbD1yLmhvb2tzW3NdLHU9aVtzXTtGVC5wYXNzVGhyb3VnaEhvb2tzLmhhcyhhKT9pW3NdPWg9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUobC5jYWxsKGksaCkpLnRoZW4oZD0+dS5jYWxsKGksZCkpO2xldCBmPWwuY2FsbChpLGgpO3JldHVybiB1LmNhbGwoaSxmKX06aVtzXT0oLi4uaCk9PntsZXQgZj1sLmFwcGx5KGksaCk7cmV0dXJuIGY9PT0hMSYmKGY9dS5hcHBseShpLGgpKSxmfX1uLmhvb2tzPWl9aWYoci53YWxrVG9rZW5zKXtsZXQgaT10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnMsYT1yLndhbGtUb2tlbnM7bi53YWxrVG9rZW5zPWZ1bmN0aW9uKHMpe2xldCBsPVtdO3JldHVybiBsLnB1c2goYS5jYWxsKHRoaXMscykpLGkmJihsPWwuY29uY2F0KGkuY2FsbCh0aGlzLHMpKSksbH19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5ufX0pLHRoaXN9c2V0T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi50fSx0aGlzfWxleGVyKHQsZSl7cmV0dXJuIE51LmxleCh0LGU/P3RoaXMuZGVmYXVsdHMpfXBhcnNlcih0LGUpe3JldHVybiBNdS5wYXJzZSh0LGU/P3RoaXMuZGVmYXVsdHMpfXBhcnNlTWFya2Rvd24odCl7cmV0dXJuKGUscik9PntsZXQgbj17Li4ucn0saT17Li4udGhpcy5kZWZhdWx0cywuLi5ufSxhPXRoaXMub25FcnJvcighIWkuc2lsZW50LCEhaS5hc3luYyk7aWYodGhpcy5kZWZhdWx0cy5hc3luYz09PSEwJiZuLmFzeW5jPT09ITEpcmV0dXJuIGEobmV3IEVycm9yKCJtYXJrZWQoKTogVGhlIGFzeW5jIG9wdGlvbiB3YXMgc2V0IHRvIHRydWUgYnkgYW4gZXh0ZW5zaW9uLiBSZW1vdmUgYXN5bmM6IGZhbHNlIGZyb20gdGhlIHBhcnNlIG9wdGlvbnMgb2JqZWN0IHRvIHJldHVybiBhIFByb21pc2UuIikpO2lmKHR5cGVvZiBlPiJ1Inx8ZT09PW51bGwpcmV0dXJuIGEobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gYShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aS5ob29rcyYmKGkuaG9va3Mub3B0aW9ucz1pLGkuaG9va3MuYmxvY2s9dCk7bGV0IHM9aS5ob29rcz9pLmhvb2tzLnByb3ZpZGVMZXhlcigpOnQ/TnUubGV4Ok51LmxleElubGluZSxsPWkuaG9va3M/aS5ob29rcy5wcm92aWRlUGFyc2VyKCk6dD9NdS5wYXJzZTpNdS5wYXJzZUlubGluZTtpZihpLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoaS5ob29rcz9pLmhvb2tzLnByZXByb2Nlc3MoZSk6ZSkudGhlbih1PT5zKHUsaSkpLnRoZW4odT0+aS5ob29rcz9pLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModSk6dSkudGhlbih1PT5pLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKHUsaS53YWxrVG9rZW5zKSkudGhlbigoKT0+dSk6dSkudGhlbih1PT5sKHUsaSkpLnRoZW4odT0+aS5ob29rcz9pLmhvb2tzLnBvc3Rwcm9jZXNzKHUpOnUpLmNhdGNoKGEpO3RyeXtpLmhvb2tzJiYoZT1pLmhvb2tzLnByZXByb2Nlc3MoZSkpO2xldCB1PXMoZSxpKTtpLmhvb2tzJiYodT1pLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModSkpLGkud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKHUsaS53YWxrVG9rZW5zKTtsZXQgaD1sKHUsaSk7cmV0dXJuIGkuaG9va3MmJihoPWkuaG9va3MucG9zdHByb2Nlc3MoaCkpLGh9Y2F0Y2godSl7cmV0dXJuIGEodSl9fX1vbkVycm9yKHQsZSl7cmV0dXJuIHI9PntpZihyLm1lc3NhZ2UrPWAKUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuYCx0KXtsZXQgbj0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+Iit4YyhyLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiBlP1Byb21pc2UucmVzb2x2ZShuKTpufWlmKGUpcmV0dXJuIFByb21pc2UucmVqZWN0KHIpO3Rocm93IHJ9fX0sVmQ9bmV3IGREZTtvKEpyLCJrIik7SnIub3B0aW9ucz1Kci5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBWZC5zZXRPcHRpb25zKHQpLEpyLmRlZmF1bHRzPVZkLmRlZmF1bHRzLG5RKEpyLmRlZmF1bHRzKSxKcn07SnIuZ2V0RGVmYXVsdHM9dEw7SnIuZGVmYXVsdHM9VWQ7SnIudXNlPWZ1bmN0aW9uKC4uLnQpe3JldHVybiBWZC51c2UoLi4udCksSnIuZGVmYXVsdHM9VmQuZGVmYXVsdHMsblEoSnIuZGVmYXVsdHMpLEpyfTtKci53YWxrVG9rZW5zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZkLndhbGtUb2tlbnModCxlKX07SnIucGFyc2VJbmxpbmU9VmQucGFyc2VJbmxpbmU7SnIuUGFyc2VyPU11O0pyLnBhcnNlcj1NdS5wYXJzZTtKci5SZW5kZXJlcj1HVDtKci5UZXh0UmVuZGVyZXI9Y0w7SnIuTGV4ZXI9TnU7SnIubGV4ZXI9TnUubGV4O0pyLlRva2VuaXplcj16VDtKci5Ib29rcz1GVDtKci5wYXJzZT1KcjtaU3Q9SnIub3B0aW9ucyxKU3Q9SnIuc2V0T3B0aW9ucyxlNnQ9SnIudXNlLHQ2dD1Kci53YWxrVG9rZW5zLHI2dD1Kci5wYXJzZUlubGluZSxuNnQ9TXUucGFyc2UsaTZ0PU51LmxleH0pO2Z1bmN0aW9uIHBEZSh0LHttYXJrZG93bkF1dG9XcmFwOmV9KXtsZXQgbj10LnJlcGxhY2UoLzxiclwvPi9nLGAKYCkucmVwbGFjZSgvXG57Mix9L2csYApgKSxpPWo0KG4pO3JldHVybiBlPT09ITE/aS5yZXBsYWNlKC8gL2csIiZuYnNwOyIpOml9ZnVuY3Rpb24gbVEodCxlPXt9KXtsZXQgcj1wRGUodCxlKSxuPUpyLmxleGVyKHIpLGk9W1tdXSxhPTA7ZnVuY3Rpb24gcyhsLHU9Im5vcm1hbCIpe2wudHlwZT09PSJ0ZXh0Ij9sLnRleHQuc3BsaXQoYApgKS5mb3JFYWNoKChmLGQpPT57ZCE9PTAmJihhKyssaS5wdXNoKFtdKSksZi5zcGxpdCgiICIpLmZvckVhY2gocD0+e3A9cC5yZXBsYWNlKC8mIzM5Oy9nLCInIikscCYmaVthXS5wdXNoKHtjb250ZW50OnAsdHlwZTp1fSl9KX0pOmwudHlwZT09PSJzdHJvbmcifHxsLnR5cGU9PT0iZW0iP2wudG9rZW5zLmZvckVhY2goaD0+e3MoaCxsLnR5cGUpfSk6bC50eXBlPT09Imh0bWwiJiZpW2FdLnB1c2goe2NvbnRlbnQ6bC50ZXh0LHR5cGU6Im5vcm1hbCJ9KX1yZXR1cm4gbyhzLCJwcm9jZXNzTm9kZSIpLG4uZm9yRWFjaChsPT57bC50eXBlPT09InBhcmFncmFwaCI/bC50b2tlbnM/LmZvckVhY2godT0+e3ModSl9KTpsLnR5cGU9PT0iaHRtbCImJmlbYV0ucHVzaCh7Y29udGVudDpsLnRleHQsdHlwZToibm9ybWFsIn0pfSksaX1mdW5jdGlvbiBnUSh0LHttYXJrZG93bkF1dG9XcmFwOmV9PXt9KXtsZXQgcj1Kci5sZXhlcih0KTtmdW5jdGlvbiBuKGkpe3JldHVybiBpLnR5cGU9PT0idGV4dCI/ZT09PSExP2kudGV4dC5yZXBsYWNlKC9cbiAqL2csIjxici8+IikucmVwbGFjZSgvIC9nLCImbmJzcDsiKTppLnRleHQucmVwbGFjZSgvXG4gKi9nLCI8YnIvPiIpOmkudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7aS50b2tlbnM/Lm1hcChuKS5qb2luKCIiKX08L3N0cm9uZz5gOmkudHlwZT09PSJlbSI/YDxlbT4ke2kudG9rZW5zPy5tYXAobikuam9pbigiIil9PC9lbT5gOmkudHlwZT09PSJwYXJhZ3JhcGgiP2A8cD4ke2kudG9rZW5zPy5tYXAobikuam9pbigiIil9PC9wPmA6aS50eXBlPT09InNwYWNlIj8iIjppLnR5cGU9PT0iaHRtbCI/YCR7aS50ZXh0fWA6aS50eXBlPT09ImVzY2FwZSI/aS50ZXh0OmBVbnN1cHBvcnRlZCBtYXJrZG93bjogJHtpLnR5cGV9YH1yZXR1cm4gbyhuLCJvdXRwdXQiKSxyLm1hcChuKS5qb2luKCIiKX12YXIgeVE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwUSgpO3I3KCk7byhwRGUsInByZXByb2Nlc3NNYXJrZG93biIpO28obVEsIm1hcmtkb3duVG9MaW5lcyIpO28oZ1EsIm1hcmtkb3duVG9IVE1MIil9KTtmdW5jdGlvbiBtRGUodCl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KHQpXS5tYXAoZT0+ZS5zZWdtZW50KTpbLi4udF19ZnVuY3Rpb24gZ0RlKHQsZSl7bGV0IHI9bURlKGUuY29udGVudCk7cmV0dXJuIHZRKHQsW10scixlLnR5cGUpfWZ1bmN0aW9uIHZRKHQsZSxyLG4pe2lmKHIubGVuZ3RoPT09MClyZXR1cm5be2NvbnRlbnQ6ZS5qb2luKCIiKSx0eXBlOm59LHtjb250ZW50OiIiLHR5cGU6bn1dO2xldFtpLC4uLmFdPXIscz1bLi4uZSxpXTtyZXR1cm4gdChbe2NvbnRlbnQ6cy5qb2luKCIiKSx0eXBlOm59XSk/dlEodCxzLGEsbik6KGUubGVuZ3RoPT09MCYmaSYmKGUucHVzaChpKSxyLnNoaWZ0KCkpLFt7Y29udGVudDplLmpvaW4oIiIpLHR5cGU6bn0se2NvbnRlbnQ6ci5qb2luKCIiKSx0eXBlOm59XSl9ZnVuY3Rpb24geFEodCxlKXtpZih0LnNvbWUoKHtjb250ZW50OnJ9KT0+ci5pbmNsdWRlcyhgCmApKSl0aHJvdyBuZXcgRXJyb3IoInNwbGl0TGluZVRvRml0V2lkdGggZG9lcyBub3Qgc3VwcG9ydCBuZXdsaW5lcyBpbiB0aGUgbGluZSIpO3JldHVybiB1TCh0LGUpfWZ1bmN0aW9uIHVMKHQsZSxyPVtdLG49W10pe2lmKHQubGVuZ3RoPT09MClyZXR1cm4gbi5sZW5ndGg+MCYmci5wdXNoKG4pLHIubGVuZ3RoPjA/cjpbXTtsZXQgaT0iIjt0WzBdLmNvbnRlbnQ9PT0iICImJihpPSIgIix0LnNoaWZ0KCkpO2xldCBhPXQuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LHM9Wy4uLm5dO2lmKGkhPT0iIiYmcy5wdXNoKHtjb250ZW50OmksdHlwZToibm9ybWFsIn0pLHMucHVzaChhKSxlKHMpKXJldHVybiB1TCh0LGUscixzKTtpZihuLmxlbmd0aD4wKXIucHVzaChuKSx0LnVuc2hpZnQoYSk7ZWxzZSBpZihhLmNvbnRlbnQpe2xldFtsLHVdPWdEZShlLGEpO3IucHVzaChbbF0pLHUuY29udGVudCYmdC51bnNoaWZ0KHUpfXJldHVybiB1TCh0LGUscil9dmFyIGJRPU4oKCk9PnsidXNlIHN0cmljdCI7byhtRGUsInNwbGl0VGV4dFRvQ2hhcnMiKTtvKGdEZSwic3BsaXRXb3JkVG9GaXRXaWR0aCIpO28odlEsInNwbGl0V29yZFRvRml0V2lkdGhSZWN1cnNpb24iKTtvKHhRLCJzcGxpdExpbmVUb0ZpdFdpZHRoIik7byh1TCwic3BsaXRMaW5lVG9GaXRXaWR0aFJlY3Vyc2lvbiIpfSk7ZnVuY3Rpb24gVFEodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1hc3luYyBmdW5jdGlvbiB5RGUodCxlLHIsbixpPSExKXtsZXQgYT10LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpO2EuYXR0cigid2lkdGgiLGAkezEwKnJ9cHhgKSxhLmF0dHIoImhlaWdodCIsYCR7MTAqcn1weGApO2xldCBzPWEuYXBwZW5kKCJ4aHRtbDpkaXYiKSxsPWUubGFiZWw7ZS5sYWJlbCYmeWkoZS5sYWJlbCkmJihsPWF3YWl0IFRoKGUubGFiZWwucmVwbGFjZShaZS5saW5lQnJlYWtSZWdleCxgCmApLG1lKCkpKTtsZXQgdT1lLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIixoPXMuYXBwZW5kKCJzcGFuIik7aC5odG1sKGwpLFRRKGgsZS5sYWJlbFN0eWxlKSxoLmF0dHIoImNsYXNzIixgJHt1fSAke259YCksVFEocyxlLmxhYmVsU3R5bGUpLHMuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikscy5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxzLnN0eWxlKCJsaW5lLWhlaWdodCIsIjEuNSIpLHMuc3R5bGUoIm1heC13aWR0aCIscisicHgiKSxzLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikscy5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxpJiZzLmF0dHIoImNsYXNzIiwibGFiZWxCa2ciKTtsZXQgZj1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZi53aWR0aD09PXImJihzLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKSxzLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsImJyZWFrLXNwYWNlcyIpLHMuc3R5bGUoIndpZHRoIixyKyJweCIpLGY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGEubm9kZSgpfWZ1bmN0aW9uIGhMKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInRzcGFuIikuYXR0cigiY2xhc3MiLCJ0ZXh0LW91dGVyLXRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsZSpyLS4xKyJlbSIpLmF0dHIoImR5IixyKyJlbSIpfWZ1bmN0aW9uIHZEZSh0LGUscil7bGV0IG49dC5hcHBlbmQoInRleHQiKSxpPWhMKG4sMSxlKTtmTChpLHIpO2xldCBhPWkubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO3JldHVybiBuLnJlbW92ZSgpLGF9ZnVuY3Rpb24gd1EodCxlLHIpe2xldCBuPXQuYXBwZW5kKCJ0ZXh0IiksaT1oTChuLDEsZSk7ZkwoaSxbe2NvbnRlbnQ6cix0eXBlOiJub3JtYWwifV0pO2xldCBhPWkubm9kZSgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gYSYmbi5yZW1vdmUoKSxhfWZ1bmN0aW9uIHhEZSh0LGUscixuPSExKXtsZXQgYT1lLmFwcGVuZCgiZyIpLHM9YS5pbnNlcnQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5hdHRyKCJzdHlsZSIsInN0cm9rZTogbm9uZSIpLGw9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IiwiLTEwLjEiKSx1PTA7Zm9yKGxldCBoIG9mIHIpe2xldCBmPW8ocD0+dkRlKGEsMS4xLHApPD10LCJjaGVja1dpZHRoIiksZD1mKGgpP1toXTp4UShoLGYpO2ZvcihsZXQgcCBvZiBkKXtsZXQgbT1oTChsLHUsMS4xKTtmTChtLHApLHUrK319aWYobil7bGV0IGg9bC5ub2RlKCkuZ2V0QkJveCgpLGY9MjtyZXR1cm4gcy5hdHRyKCJ4IixoLngtZikuYXR0cigieSIsaC55LWYpLmF0dHIoIndpZHRoIixoLndpZHRoKzIqZikuYXR0cigiaGVpZ2h0IixoLmhlaWdodCsyKmYpLGEubm9kZSgpfWVsc2UgcmV0dXJuIGwubm9kZSgpfWZ1bmN0aW9uIGZMKHQsZSl7dC50ZXh0KCIiKSxlLmZvckVhY2goKHIsbik9PntsZXQgaT10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIixyLnR5cGU9PT0iZW0iPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsci50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtuPT09MD9pLnRleHQoci5jb250ZW50KTppLnRleHQoIiAiK3IuY29udGVudCl9KX1hc3luYyBmdW5jdGlvbiBkTCh0KXtsZXQgZT1bXTt0LnJlcGxhY2UoLyhmYVtia2xyc10/KTpmYS0oW1x3LV0rKS9nLChuLGksYSk9PihlLnB1c2goKGFzeW5jKCk9PntsZXQgcz1gJHtpfToke2F9YDtyZXR1cm4gYXdhaXQgRiQocyk/YXdhaXQgRXMocyx2b2lkIDAse2NsYXNzOiJsYWJlbC1pY29uIn0pOmA8aSBjbGFzcz0nJHtmZChuKS5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmB9KSgpKSxuKSk7bGV0IHI9YXdhaXQgUHJvbWlzZS5hbGwoZSk7cmV0dXJuIHQucmVwbGFjZSgvKGZhW2JrbHJzXT8pOmZhLShbXHctXSspL2csKCk9PnIuc2hpZnQoKT8/IiIpfXZhciBxbixhbz1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R3QoKTtwcigpO3l0KCk7eVEoKTtlcigpO2psKCk7YlEoKTtvKFRRLCJhcHBseVN0eWxlIik7byh5RGUsImFkZEh0bWxTcGFuIik7byhoTCwiY3JlYXRlVHNwYW4iKTtvKHZEZSwiY29tcHV0ZVdpZHRoT2ZUZXh0Iik7byh3USwiY29tcHV0ZURpbWVuc2lvbk9mVGV4dCIpO28oeERlLCJjcmVhdGVGb3JtYXR0ZWRUZXh0Iik7byhmTCwidXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXMiKTtvKGRMLCJyZXBsYWNlSWNvblN1YnN0cmluZyIpO3FuPW8oYXN5bmModCxlPSIiLHtzdHlsZTpyPSIiLGlzVGl0bGU6bj0hMSxjbGFzc2VzOmk9IiIsdXNlSHRtbExhYmVsczphPSEwLGlzTm9kZTpzPSEwLHdpZHRoOmw9MjAwLGFkZFN2Z0JhY2tncm91bmQ6dT0hMX09e30saCk9PntpZihYLmRlYnVnKCJYWVogY3JlYXRlVGV4dCIsZSxyLG4saSxhLHMsImFkZFN2Z0JhY2tncm91bmQ6ICIsdSksYSl7bGV0IGY9Z1EoZSxoKSxkPWF3YWl0IGRMKG5hKGYpKSxwPWUucmVwbGFjZSgvXFxcXC9nLCJcXCIpLG09e2lzTm9kZTpzLGxhYmVsOnlpKGUpP3A6ZCxsYWJlbFN0eWxlOnIucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIGF3YWl0IHlEZSh0LG0sbCxpLHUpfWVsc2V7bGV0IGY9ZS5yZXBsYWNlKC88YnJccypcLz8+L2csIjxici8+IiksZD1tUShmLnJlcGxhY2UoIjxicj4iLCI8YnIvPiIpLGgpLHA9eERlKGwsdCxkLGU/dTohMSk7aWYocyl7L3N0cm9rZTovLmV4ZWMocikmJihyPXIucmVwbGFjZSgic3Ryb2tlOiIsImxpbmVDb2xvcjoiKSk7bGV0IG09ci5yZXBsYWNlKC9zdHJva2U6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9zdHJva2Utd2lkdGg6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9maWxsOlteO10rOz8vZywiIikucmVwbGFjZSgvY29sb3I6L2csImZpbGw6Iik7R2UocCkuYXR0cigic3R5bGUiLG0pfWVsc2V7bGV0IG09ci5yZXBsYWNlKC9zdHJva2U6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9zdHJva2Utd2lkdGg6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9maWxsOlteO10rOz8vZywiIikucmVwbGFjZSgvYmFja2dyb3VuZDovZywiZmlsbDoiKTtHZShwKS5zZWxlY3QoInJlY3QiKS5hdHRyKCJzdHlsZSIsbS5yZXBsYWNlKC9iYWNrZ3JvdW5kOi9nLCJmaWxsOiIpKTtsZXQgZz1yLnJlcGxhY2UoL3N0cm9rZTpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL3N0cm9rZS13aWR0aDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2ZpbGw6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9jb2xvcjovZywiZmlsbDoiKTtHZShwKS5zZWxlY3QoInRleHQiKS5hdHRyKCJzdHlsZSIsZyl9cmV0dXJuIHB9fSwiY3JlYXRlVGV4dCIpfSk7ZnVuY3Rpb24gWHQodCl7bGV0IGU9dC5tYXAoKHIsbik9PmAke249PT0wPyJNIjoiTCJ9JHtyLnh9LCR7ci55fWApO3JldHVybiBlLnB1c2goIloiKSxlLmpvaW4oIiAiKX1mdW5jdGlvbiBHbyh0LGUscixuLGksYSl7bGV0IHM9W10sdT1yLXQsaD1uLWUsZj11L2EsZD0yKk1hdGguUEkvZixwPWUraC8yO2ZvcihsZXQgbT0wO208PTUwO20rKyl7bGV0IGc9bS81MCx5PXQrZyp1LHY9cCtpKk1hdGguc2luKGQqKHktdCkpO3MucHVzaCh7eDp5LHk6dn0pfXJldHVybiBzfWZ1bmN0aW9uIFdUKHQsZSxyLG4saSxhKXtsZXQgcz1bXSxsPWkqTWF0aC5QSS8xODAsZj0oYSpNYXRoLlBJLzE4MC1sKS8obi0xKTtmb3IobGV0IGQ9MDtkPG47ZCsrKXtsZXQgcD1sK2QqZixtPXQrcipNYXRoLmNvcyhwKSxnPWUrcipNYXRoLnNpbihwKTtzLnB1c2goe3g6LW0seTotZ30pfXJldHVybiBzfXZhciBtdCxIVCxLZSxodCxGdD1OKCgpPT57InVzZSBzdHJpY3QiO2FvKCk7R3QoKTtmcigpO19hKCk7cHIoKTtlcigpO210PW8oYXN5bmModCxlLHIpPT57bGV0IG4saT1lLnVzZUh0bWxMYWJlbHN8fGRyKG1lKCk/Lmh0bWxMYWJlbHMpO3I/bj1yOm49Im5vZGUgZGVmYXVsdCI7bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHM9YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLHpuKGUubGFiZWxTdHlsZSkpLGw7ZS5sYWJlbD09PXZvaWQgMD9sPSIiOmw9dHlwZW9mIGUubGFiZWw9PSJzdHJpbmciP2UubGFiZWw6ZS5sYWJlbFswXTtsZXQgdT1hd2FpdCBxbihzLHdyKG5hKGwpLG1lKCkpLHt1c2VIdG1sTGFiZWxzOmksd2lkdGg6ZS53aWR0aHx8bWUoKS5mbG93Y2hhcnQ/LndyYXBwaW5nV2lkdGgsY3NzQ2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCIsc3R5bGU6ZS5sYWJlbFN0eWxlLGFkZFN2Z0JhY2tncm91bmQ6ISFlLmljb258fCEhZS5pbWd9KSxoPXUuZ2V0QkJveCgpLGY9KGU/LnBhZGRpbmc/PzApLzI7aWYoaSl7bGV0IGQ9dS5jaGlsZHJlblswXSxwPUdlKHUpLG09ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYobSl7bGV0IGc9bC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5tXS5tYXAoeT0+bmV3IFByb21pc2Uodj0+e2Z1bmN0aW9uIHgoKXtpZih5LnN0eWxlLmRpc3BsYXk9ImZsZXgiLHkuc3R5bGUuZmxleERpcmVjdGlvbj0iY29sdW1uIixnKXtsZXQgYj1tZSgpLmZvbnRTaXplP21lKCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsVD01LFtTPW9yLmZvbnRTaXplXT16byhiKSx3PVMqVCsicHgiO3kuc3R5bGUubWluV2lkdGg9dyx5LnN0eWxlLm1heFdpZHRoPXd9ZWxzZSB5LnN0eWxlLndpZHRoPSIxMDAlIjt2KHkpfW8oeCwic2V0dXBJbWFnZSIpLHNldFRpbWVvdXQoKCk9Pnt5LmNvbXBsZXRlJiZ4KCl9KSx5LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHgpfSkpKX1oPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscC5hdHRyKCJ3aWR0aCIsaC53aWR0aCkscC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1yZXR1cm4gaT9zLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1oLndpZHRoLzIrIiwgIistaC5oZWlnaHQvMisiKSIpOnMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrLWguaGVpZ2h0LzIrIikiKSxlLmNlbnRlckxhYmVsJiZzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1oLndpZHRoLzIrIiwgIistaC5oZWlnaHQvMisiKSIpLHMuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikse3NoYXBlU3ZnOmEsYmJveDpoLGhhbGZQYWRkaW5nOmYsbGFiZWw6c319LCJsYWJlbEhlbHBlciIpLEhUPW8oYXN5bmModCxlLHIpPT57bGV0IG49ci51c2VIdG1sTGFiZWxzfHxkcihtZSgpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpLGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLHIubGFiZWxTdHlsZXx8IiIpLGE9YXdhaXQgcW4oaSx3cihuYShlKSxtZSgpKSx7dXNlSHRtbExhYmVsczpuLHdpZHRoOnIud2lkdGh8fG1lKCk/LmZsb3djaGFydD8ud3JhcHBpbmdXaWR0aCxzdHlsZTpyLmxhYmVsU3R5bGUsYWRkU3ZnQmFja2dyb3VuZDohIXIuaWNvbnx8ISFyLmltZ30pLHM9YS5nZXRCQm94KCksbD1yLnBhZGRpbmcvMjtpZihkcihtZSgpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpKXtsZXQgdT1hLmNoaWxkcmVuWzBdLGg9R2UoYSk7cz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGguYXR0cigid2lkdGgiLHMud2lkdGgpLGguYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9cmV0dXJuIG4/aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKTppLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiKy1zLmhlaWdodC8yKyIpIiksci5jZW50ZXJMYWJlbCYmaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHtzaGFwZVN2Zzp0LGJib3g6cyxoYWxmUGFkZGluZzpsLGxhYmVsOml9fSwiaW5zZXJ0TGFiZWwiKSxLZT1vKCh0LGUpPT57bGV0IHI9ZS5ub2RlKCkuZ2V0QkJveCgpO3Qud2lkdGg9ci53aWR0aCx0LmhlaWdodD1yLmhlaWdodH0sInVwZGF0ZU5vZGVCb3VuZHMiKSxodD1vKCh0LGUpPT4odC5sb29rPT09ImhhbmREcmF3biI/InJvdWdoLW5vZGUiOiJub2RlIikrIiAiK3QuY3NzQ2xhc3NlcysiICIrKGV8fCIiKSwiZ2V0Tm9kZUNsYXNzZXMiKTtvKFh0LCJjcmVhdGVQYXRoRnJvbVBvaW50cyIpO28oR28sImdlbmVyYXRlRnVsbFNpbmVXYXZlUG9pbnRzIik7byhXVCwiZ2VuZXJhdGVDaXJjbGVQb2ludHMiKX0pO2Z1bmN0aW9uIGJEZSh0LGUpe3JldHVybiB0LmludGVyc2VjdChlKX12YXIga1EsRVE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGJEZSwiaW50ZXJzZWN0Tm9kZSIpO2tRPWJEZX0pO2Z1bmN0aW9uIFREZSh0LGUscixuKXt2YXIgaT10LngsYT10Lnkscz1pLW4ueCxsPWEtbi55LHU9TWF0aC5zcXJ0KGUqZSpsKmwrcipyKnMqcyksaD1NYXRoLmFicyhlKnIqcy91KTtuLng8aSYmKGg9LWgpO3ZhciBmPU1hdGguYWJzKGUqcipsL3UpO3JldHVybiBuLnk8YSYmKGY9LWYpLHt4OmkraCx5OmErZn19dmFyIHFULHBMPU4oKCk9PnsidXNlIHN0cmljdCI7byhURGUsImludGVyc2VjdEVsbGlwc2UiKTtxVD1URGV9KTtmdW5jdGlvbiB3RGUodCxlLHIpe3JldHVybiBxVCh0LGUsZSxyKX12YXIgU1EsQ1E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwTCgpO28od0RlLCJpbnRlcnNlY3RDaXJjbGUiKTtTUT13RGV9KTtmdW5jdGlvbiBrRGUodCxlLHIsbil7dmFyIGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHYseCxiO2lmKGk9ZS55LXQueSxzPXQueC1lLngsdT1lLngqdC55LXQueCplLnkscD1pKnIueCtzKnIueSt1LG09aSpuLngrcypuLnkrdSwhKHAhPT0wJiZtIT09MCYmQVEocCxtKSkmJihhPW4ueS1yLnksbD1yLngtbi54LGg9bi54KnIueS1yLngqbi55LGY9YSp0LngrbCp0LnkraCxkPWEqZS54K2wqZS55K2gsIShmIT09MCYmZCE9PTAmJkFRKGYsZCkpJiYoZz1pKmwtYSpzLGchPT0wKSkpcmV0dXJuIHk9TWF0aC5hYnMoZy8yKSx2PXMqaC1sKnUseD12PDA/KHYteSkvZzoodit5KS9nLHY9YSp1LWkqaCxiPXY8MD8odi15KS9nOih2K3kpL2cse3gseTpifX1mdW5jdGlvbiBBUSh0LGUpe3JldHVybiB0KmU+MH12YXIgX1EsRFE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGtEZSwiaW50ZXJzZWN0TGluZSIpO28oQVEsInNhbWVTaWduIik7X1E9a0RlfSk7ZnVuY3Rpb24gRURlKHQsZSxyKXtsZXQgbj10LngsaT10LnksYT1bXSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTt0eXBlb2YgZS5mb3JFYWNoPT0iZnVuY3Rpb24iP2UuZm9yRWFjaChmdW5jdGlvbihmKXtzPU1hdGgubWluKHMsZi54KSxsPU1hdGgubWluKGwsZi55KX0pOihzPU1hdGgubWluKHMsZS54KSxsPU1hdGgubWluKGwsZS55KSk7bGV0IHU9bi10LndpZHRoLzItcyxoPWktdC5oZWlnaHQvMi1sO2ZvcihsZXQgZj0wO2Y8ZS5sZW5ndGg7ZisrKXtsZXQgZD1lW2ZdLHA9ZVtmPGUubGVuZ3RoLTE/ZisxOjBdLG09X1EodCxyLHt4OnUrZC54LHk6aCtkLnl9LHt4OnUrcC54LHk6aCtwLnl9KTttJiZhLnB1c2gobSl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoZnVuY3Rpb24oZixkKXtsZXQgcD1mLngtci54LG09Zi55LXIueSxnPU1hdGguc3FydChwKnArbSptKSx5PWQueC1yLngsdj1kLnktci55LHg9TWF0aC5zcXJ0KHkqeSt2KnYpO3JldHVybiBnPHg/LTE6Zz09PXg/MDoxfSksYVswXSk6dH12YXIgTFEsUlE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEUSgpO28oRURlLCJpbnRlcnNlY3RQb2x5Z29uIik7TFE9RURlfSk7dmFyIFNEZSxYaCxtTD1OKCgpPT57InVzZSBzdHJpY3QiO1NEZT1vKCh0LGUpPT57dmFyIHI9dC54LG49dC55LGk9ZS54LXIsYT1lLnktbixzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzIsdSxoO3JldHVybiBNYXRoLmFicyhhKSpzPk1hdGguYWJzKGkpKmw/KGE8MCYmKGw9LWwpLHU9YT09PTA/MDpsKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1pPT09MD8wOnMqYS9pKSx7eDpyK3UseTpuK2h9fSwiaW50ZXJzZWN0UmVjdCIpLFhoPVNEZX0pO3ZhciBYZSxIdD1OKCgpPT57InVzZSBzdHJpY3QiO0VRKCk7Q1EoKTtwTCgpO1JRKCk7bUwoKTtYZT17bm9kZTprUSxjaXJjbGU6U1EsZWxsaXBzZTpxVCxwb2x5Z29uOkxRLHJlY3Q6WGh9fSk7dmFyIE5RLGJjLENEZSxTMixZZSxRZSx6dD1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7TlE9byh0PT57bGV0e2hhbmREcmF3blNlZWQ6ZX09bWUoKTtyZXR1cm57ZmlsbDp0LGhhY2h1cmVBbmdsZToxMjAsaGFjaHVyZUdhcDo0LGZpbGxXZWlnaHQ6Mixyb3VnaG5lc3M6Ljcsc3Ryb2tlOnQsc2VlZDplfX0sInNvbGlkU3RhdGVGaWxsIiksYmM9byh0PT57bGV0IGU9Q0RlKFsuLi50LmNzc0NvbXBpbGVkU3R5bGVzfHxbXSwuLi50LmNzc1N0eWxlc3x8W11dKTtyZXR1cm57c3R5bGVzTWFwOmUsc3R5bGVzQXJyYXk6Wy4uLmVdfX0sImNvbXBpbGVTdHlsZXMiKSxDRGU9byh0PT57bGV0IGU9bmV3IE1hcDtyZXR1cm4gdC5mb3JFYWNoKHI9PntsZXRbbixpXT1yLnNwbGl0KCI6Iik7ZS5zZXQobi50cmltKCksaT8udHJpbSgpKX0pLGV9LCJzdHlsZXMyTWFwIiksUzI9byh0PT50PT09ImNvbG9yInx8dD09PSJmb250LXNpemUifHx0PT09ImZvbnQtZmFtaWx5Inx8dD09PSJmb250LXdlaWdodCJ8fHQ9PT0iZm9udC1zdHlsZSJ8fHQ9PT0idGV4dC1kZWNvcmF0aW9uInx8dD09PSJ0ZXh0LWFsaWduInx8dD09PSJ0ZXh0LXRyYW5zZm9ybSJ8fHQ9PT0ibGluZS1oZWlnaHQifHx0PT09ImxldHRlci1zcGFjaW5nInx8dD09PSJ3b3JkLXNwYWNpbmcifHx0PT09InRleHQtc2hhZG93Inx8dD09PSJ0ZXh0LW92ZXJmbG93Inx8dD09PSJ3aGl0ZS1zcGFjZSJ8fHQ9PT0id29yZC13cmFwInx8dD09PSJ3b3JkLWJyZWFrInx8dD09PSJvdmVyZmxvdy13cmFwInx8dD09PSJoeXBoZW5zIiwiaXNMYWJlbFN0eWxlIiksWWU9byh0PT57bGV0e3N0eWxlc0FycmF5OmV9PWJjKHQpLHI9W10sbj1bXSxpPVtdLGE9W107cmV0dXJuIGUuZm9yRWFjaChzPT57bGV0IGw9c1swXTtTMihsKT9yLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50Iik6KG4ucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKSxsLmluY2x1ZGVzKCJzdHJva2UiKSYmaS5wdXNoKHMuam9pbigiOiIpKyIgIWltcG9ydGFudCIpLGw9PT0iZmlsbCImJmEucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKSl9KSx7bGFiZWxTdHlsZXM6ci5qb2luKCI7Iiksbm9kZVN0eWxlczpuLmpvaW4oIjsiKSxzdHlsZXNBcnJheTplLGJvcmRlclN0eWxlczppLGJhY2tncm91bmRTdHlsZXM6YX19LCJzdHlsZXMyU3RyaW5nIiksUWU9bygodCxlKT0+e2xldHt0aGVtZVZhcmlhYmxlczpyLGhhbmREcmF3blNlZWQ6bn09bWUoKSx7bm9kZUJvcmRlcjppLG1haW5Ca2c6YX09cix7c3R5bGVzTWFwOnN9PWJjKHQpO3JldHVybiBPYmplY3QuYXNzaWduKHtyb3VnaG5lc3M6LjcsZmlsbDpzLmdldCgiZmlsbCIpfHxhLGZpbGxTdHlsZToiaGFjaHVyZSIsZmlsbFdlaWdodDo0LGhhY2h1cmVHYXA6NS4yLHN0cm9rZTpzLmdldCgic3Ryb2tlIil8fGksc2VlZDpuLHN0cm9rZVdpZHRoOnMuZ2V0KCJzdHJva2Utd2lkdGgiKT8ucmVwbGFjZSgicHgiLCIiKXx8MS4zLGZpbGxMaW5lRGFzaDpbMCwwXX0sZSl9LCJ1c2VyTm9kZU92ZXJyaWRlcyIpfSk7ZnVuY3Rpb24gZ0wodCxlLHIpe2lmKHQmJnQubGVuZ3RoKXtsZXRbbixpXT1lLGE9TWF0aC5QSS8xODAqcixzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7Zm9yKGxldCB1IG9mIHQpe2xldFtoLGZdPXU7dVswXT0oaC1uKSpzLShmLWkpKmwrbix1WzFdPShoLW4pKmwrKGYtaSkqcytpfX19ZnVuY3Rpb24gQURlKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXX1mdW5jdGlvbiBfRGUodCxlLHIsbj0xKXtsZXQgaT1yLGE9TWF0aC5tYXgoZSwuMSkscz10WzBdJiZ0WzBdWzBdJiZ0eXBlb2YgdFswXVswXT09Im51bWJlciI/W3RdOnQsbD1bMCwwXTtpZihpKWZvcihsZXQgaCBvZiBzKWdMKGgsbCxpKTtsZXQgdT1mdW5jdGlvbihoLGYsZCl7bGV0IHA9W107Zm9yKGxldCBiIG9mIGgpe2xldCBUPVsuLi5iXTtBRGUoVFswXSxUW1QubGVuZ3RoLTFdKXx8VC5wdXNoKFtUWzBdWzBdLFRbMF1bMV1dKSxULmxlbmd0aD4yJiZwLnB1c2goVCl9bGV0IG09W107Zj1NYXRoLm1heChmLC4xKTtsZXQgZz1bXTtmb3IobGV0IGIgb2YgcClmb3IobGV0IFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXtsZXQgUz1iW1RdLHc9YltUKzFdO2lmKFNbMV0hPT13WzFdKXtsZXQgRT1NYXRoLm1pbihTWzFdLHdbMV0pO2cucHVzaCh7eW1pbjpFLHltYXg6TWF0aC5tYXgoU1sxXSx3WzFdKSx4OkU9PT1TWzFdP1NbMF06d1swXSxpc2xvcGU6KHdbMF0tU1swXSkvKHdbMV0tU1sxXSl9KX19aWYoZy5zb3J0KChiLFQpPT5iLnltaW48VC55bWluPy0xOmIueW1pbj5ULnltaW4/MTpiLng8VC54Py0xOmIueD5ULng/MTpiLnltYXg9PT1ULnltYXg/MDooYi55bWF4LVQueW1heCkvTWF0aC5hYnMoYi55bWF4LVQueW1heCkpLCFnLmxlbmd0aClyZXR1cm4gbTtsZXQgeT1bXSx2PWdbMF0ueW1pbix4PTA7Zm9yKDt5Lmxlbmd0aHx8Zy5sZW5ndGg7KXtpZihnLmxlbmd0aCl7bGV0IGI9LTE7Zm9yKGxldCBUPTA7VDxnLmxlbmd0aCYmIShnW1RdLnltaW4+dik7VCsrKWI9VDtnLnNwbGljZSgwLGIrMSkuZm9yRWFjaChUPT57eS5wdXNoKHtzOnYsZWRnZTpUfSl9KX1pZih5PXkuZmlsdGVyKGI9PiEoYi5lZGdlLnltYXg8PXYpKSx5LnNvcnQoKGIsVCk9PmIuZWRnZS54PT09VC5lZGdlLng/MDooYi5lZGdlLngtVC5lZGdlLngpL01hdGguYWJzKGIuZWRnZS54LVQuZWRnZS54KSksKGQhPT0xfHx4JWY9PTApJiZ5Lmxlbmd0aD4xKWZvcihsZXQgYj0wO2I8eS5sZW5ndGg7Yis9Mil7bGV0IFQ9YisxO2lmKFQ+PXkubGVuZ3RoKWJyZWFrO2xldCBTPXlbYl0uZWRnZSx3PXlbVF0uZWRnZTttLnB1c2goW1tNYXRoLnJvdW5kKFMueCksdl0sW01hdGgucm91bmQody54KSx2XV0pfXYrPWQseS5mb3JFYWNoKGI9PntiLmVkZ2UueD1iLmVkZ2UueCtkKmIuZWRnZS5pc2xvcGV9KSx4Kyt9cmV0dXJuIG19KHMsYSxuKTtpZihpKXtmb3IobGV0IGggb2YgcylnTChoLGwsLWkpOyhmdW5jdGlvbihoLGYsZCl7bGV0IHA9W107aC5mb3JFYWNoKG09PnAucHVzaCguLi5tKSksZ0wocCxmLGQpfSkodSxsLC1pKX1yZXR1cm4gdX1mdW5jdGlvbiBEMih0LGUpe3ZhciByO2xldCBuPWUuaGFjaHVyZUFuZ2xlKzkwLGk9ZS5oYWNodXJlR2FwO2k8MCYmKGk9NCplLnN0cm9rZVdpZHRoKSxpPU1hdGgucm91bmQoTWF0aC5tYXgoaSwuMSkpO2xldCBhPTE7cmV0dXJuIGUucm91Z2huZXNzPj0xJiYoKChyPWUucmFuZG9taXplcik9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm5leHQoKSl8fE1hdGgucmFuZG9tKCkpPi43JiYoYT1pKSxfRGUodCxpLG4sYXx8MSl9ZnVuY3Rpb24gdHcodCl7bGV0IGU9dFswXSxyPXRbMV07cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhlWzBdLXJbMF0sMikrTWF0aC5wb3coZVsxXS1yWzFdLDIpKX1mdW5jdGlvbiB2TCh0LGUpe3JldHVybiB0LnR5cGU9PT1lfWZ1bmN0aW9uIE5MKHQpe2xldCBlPVtdLHI9ZnVuY3Rpb24ocyl7bGV0IGw9bmV3IEFycmF5O2Zvcig7cyE9PSIiOylpZihzLm1hdGNoKC9eKFsgXHRcclxuLF0rKS8pKXM9cy5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCk7ZWxzZSBpZihzLm1hdGNoKC9eKFthQWNDaEhsTG1NcVFzU3RUdlZ6Wl0pLykpbFtsLmxlbmd0aF09e3R5cGU6RERlLHRleHQ6UmVnRXhwLiQxfSxzPXMuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpO2Vsc2V7aWYoIXMubWF0Y2goL14oKFstK10/WzAtOV0rKFwuWzAtOV0qKT98Wy0rXT9cLlswLTldKykoW2VFXVstK10/WzAtOV0rKT8pLykpcmV0dXJuW107bFtsLmxlbmd0aF09e3R5cGU6eUwsdGV4dDpgJHtwYXJzZUZsb2F0KFJlZ0V4cC4kMSl9YH0scz1zLnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKX1yZXR1cm4gbFtsLmxlbmd0aF09e3R5cGU6TVEsdGV4dDoiIn0sbH0odCksbj0iQk9EIixpPTAsYT1yW2ldO2Zvcig7IXZMKGEsTVEpOyl7bGV0IHM9MCxsPVtdO2lmKG49PT0iQk9EIil7aWYoYS50ZXh0IT09Ik0iJiZhLnRleHQhPT0ibSIpcmV0dXJuIE5MKCJNMCwwIit0KTtpKysscz1ZVFthLnRleHRdLG49YS50ZXh0fWVsc2UgdkwoYSx5TCk/cz1ZVFtuXTooaSsrLHM9WVRbYS50ZXh0XSxuPWEudGV4dCk7aWYoIShpK3M8ci5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiUGF0aCBkYXRhIGVuZGVkIHNob3J0Iik7Zm9yKGxldCB1PWk7dTxpK3M7dSsrKXtsZXQgaD1yW3VdO2lmKCF2TChoLHlMKSl0aHJvdyBuZXcgRXJyb3IoIlBhcmFtIG5vdCBhIG51bWJlcjogIituKyIsIitoLnRleHQpO2xbbC5sZW5ndGhdPStoLnRleHR9aWYodHlwZW9mIFlUW25dIT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoIkJhZCBzZWdtZW50OiAiK24pO3tsZXQgdT17a2V5Om4sZGF0YTpsfTtlLnB1c2godSksaSs9cyxhPXJbaV0sbj09PSJNIiYmKG49IkwiKSxuPT09Im0iJiYobj0ibCIpfX1yZXR1cm4gZX1mdW5jdGlvbiBHUSh0KXtsZXQgZT0wLHI9MCxuPTAsaT0wLGE9W107Zm9yKGxldHtrZXk6cyxkYXRhOmx9b2YgdClzd2l0Y2gocyl7Y2FzZSJNIjphLnB1c2goe2tleToiTSIsZGF0YTpbLi4ubF19KSxbZSxyXT1sLFtuLGldPWw7YnJlYWs7Y2FzZSJtIjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6Ik0iLGRhdGE6W2Uscl19KSxuPWUsaT1yO2JyZWFrO2Nhc2UiTCI6YS5wdXNoKHtrZXk6IkwiLGRhdGE6Wy4uLmxdfSksW2Uscl09bDticmVhaztjYXNlImwiOmUrPWxbMF0scis9bFsxXSxhLnB1c2goe2tleToiTCIsZGF0YTpbZSxyXX0pO2JyZWFrO2Nhc2UiQyI6YS5wdXNoKHtrZXk6IkMiLGRhdGE6Wy4uLmxdfSksZT1sWzRdLHI9bFs1XTticmVhaztjYXNlImMiOntsZXQgdT1sLm1hcCgoaCxmKT0+ZiUyP2grcjpoK2UpO2EucHVzaCh7a2V5OiJDIixkYXRhOnV9KSxlPXVbNF0scj11WzVdO2JyZWFrfWNhc2UiUSI6YS5wdXNoKHtrZXk6IlEiLGRhdGE6Wy4uLmxdfSksZT1sWzJdLHI9bFszXTticmVhaztjYXNlInEiOntsZXQgdT1sLm1hcCgoaCxmKT0+ZiUyP2grcjpoK2UpO2EucHVzaCh7a2V5OiJRIixkYXRhOnV9KSxlPXVbMl0scj11WzNdO2JyZWFrfWNhc2UiQSI6YS5wdXNoKHtrZXk6IkEiLGRhdGE6Wy4uLmxdfSksZT1sWzVdLHI9bFs2XTticmVhaztjYXNlImEiOmUrPWxbNV0scis9bFs2XSxhLnB1c2goe2tleToiQSIsZGF0YTpbbFswXSxsWzFdLGxbMl0sbFszXSxsWzRdLGUscl19KTticmVhaztjYXNlIkgiOmEucHVzaCh7a2V5OiJIIixkYXRhOlsuLi5sXX0pLGU9bFswXTticmVhaztjYXNlImgiOmUrPWxbMF0sYS5wdXNoKHtrZXk6IkgiLGRhdGE6W2VdfSk7YnJlYWs7Y2FzZSJWIjphLnB1c2goe2tleToiViIsZGF0YTpbLi4ubF19KSxyPWxbMF07YnJlYWs7Y2FzZSJ2IjpyKz1sWzBdLGEucHVzaCh7a2V5OiJWIixkYXRhOltyXX0pO2JyZWFrO2Nhc2UiUyI6YS5wdXNoKHtrZXk6IlMiLGRhdGE6Wy4uLmxdfSksZT1sWzJdLHI9bFszXTticmVhaztjYXNlInMiOntsZXQgdT1sLm1hcCgoaCxmKT0+ZiUyP2grcjpoK2UpO2EucHVzaCh7a2V5OiJTIixkYXRhOnV9KSxlPXVbMl0scj11WzNdO2JyZWFrfWNhc2UiVCI6YS5wdXNoKHtrZXk6IlQiLGRhdGE6Wy4uLmxdfSksZT1sWzBdLHI9bFsxXTticmVhaztjYXNlInQiOmUrPWxbMF0scis9bFsxXSxhLnB1c2goe2tleToiVCIsZGF0YTpbZSxyXX0pO2JyZWFrO2Nhc2UiWiI6Y2FzZSJ6IjphLnB1c2goe2tleToiWiIsZGF0YTpbXX0pLGU9bixyPWl9cmV0dXJuIGF9ZnVuY3Rpb24gVlEodCl7bGV0IGU9W10scj0iIixuPTAsaT0wLGE9MCxzPTAsbD0wLHU9MDtmb3IobGV0e2tleTpoLGRhdGE6Zn1vZiB0KXtzd2l0Y2goaCl7Y2FzZSJNIjplLnB1c2goe2tleToiTSIsZGF0YTpbLi4uZl19KSxbbixpXT1mLFthLHNdPWY7YnJlYWs7Y2FzZSJDIjplLnB1c2goe2tleToiQyIsZGF0YTpbLi4uZl19KSxuPWZbNF0saT1mWzVdLGw9ZlsyXSx1PWZbM107YnJlYWs7Y2FzZSJMIjplLnB1c2goe2tleToiTCIsZGF0YTpbLi4uZl19KSxbbixpXT1mO2JyZWFrO2Nhc2UiSCI6bj1mWzBdLGUucHVzaCh7a2V5OiJMIixkYXRhOltuLGldfSk7YnJlYWs7Y2FzZSJWIjppPWZbMF0sZS5wdXNoKHtrZXk6IkwiLGRhdGE6W24saV19KTticmVhaztjYXNlIlMiOntsZXQgZD0wLHA9MDtyPT09IkMifHxyPT09IlMiPyhkPW4rKG4tbCkscD1pKyhpLXUpKTooZD1uLHA9aSksZS5wdXNoKHtrZXk6IkMiLGRhdGE6W2QscCwuLi5mXX0pLGw9ZlswXSx1PWZbMV0sbj1mWzJdLGk9ZlszXTticmVha31jYXNlIlQiOntsZXRbZCxwXT1mLG09MCxnPTA7cj09PSJRInx8cj09PSJUIj8obT1uKyhuLWwpLGc9aSsoaS11KSk6KG09bixnPWkpO2xldCB5PW4rMioobS1uKS8zLHY9aSsyKihnLWkpLzMseD1kKzIqKG0tZCkvMyxiPXArMiooZy1wKS8zO2UucHVzaCh7a2V5OiJDIixkYXRhOlt5LHYseCxiLGQscF19KSxsPW0sdT1nLG49ZCxpPXA7YnJlYWt9Y2FzZSJRIjp7bGV0W2QscCxtLGddPWYseT1uKzIqKGQtbikvMyx2PWkrMioocC1pKS8zLHg9bSsyKihkLW0pLzMsYj1nKzIqKHAtZykvMztlLnB1c2goe2tleToiQyIsZGF0YTpbeSx2LHgsYixtLGddfSksbD1kLHU9cCxuPW0saT1nO2JyZWFrfWNhc2UiQSI6e2xldCBkPU1hdGguYWJzKGZbMF0pLHA9TWF0aC5hYnMoZlsxXSksbT1mWzJdLGc9ZlszXSx5PWZbNF0sdj1mWzVdLHg9Zls2XTtkPT09MHx8cD09PTA/KGUucHVzaCh7a2V5OiJDIixkYXRhOltuLGksdix4LHYseF19KSxuPXYsaT14KToobiE9PXZ8fGkhPT14KSYmKFVRKG4saSx2LHgsZCxwLG0sZyx5KS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2UucHVzaCh7a2V5OiJDIixkYXRhOmJ9KX0pLG49dixpPXgpO2JyZWFrfWNhc2UiWiI6ZS5wdXNoKHtrZXk6IloiLGRhdGE6W119KSxuPWEsaT1zfXI9aH1yZXR1cm4gZX1mdW5jdGlvbiBDMih0LGUscil7cmV0dXJuW3QqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx0Kk1hdGguc2luKHIpK2UqTWF0aC5jb3MocildfWZ1bmN0aW9uIFVRKHQsZSxyLG4saSxhLHMsbCx1LGgpe2xldCBmPShkPXMsTWF0aC5QSSpkLzE4MCk7dmFyIGQ7bGV0IHA9W10sbT0wLGc9MCx5PTAsdj0wO2lmKGgpW20sZyx5LHZdPWg7ZWxzZXtbdCxlXT1DMih0LGUsLWYpLFtyLG5dPUMyKHIsbiwtZik7bGV0IEw9KHQtcikvMixBPShlLW4pLzIsST1MKkwvKGkqaSkrQSpBLyhhKmEpO0k+MSYmKEk9TWF0aC5zcXJ0KEkpLGkqPUksYSo9SSk7bGV0IE09aSppLFA9YSphLEI9TSpQLU0qQSpBLVAqTCpMLEY9TSpBKkErUCpMKkwsej0obD09PXU/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKEIvRikpO3k9eippKkEvYSsodCtyKS8yLHY9eiotYSpML2krKGUrbikvMixtPU1hdGguYXNpbihwYXJzZUZsb2F0KCgoZS12KS9hKS50b0ZpeGVkKDkpKSksZz1NYXRoLmFzaW4ocGFyc2VGbG9hdCgoKG4tdikvYSkudG9GaXhlZCg5KSkpLHQ8eSYmKG09TWF0aC5QSS1tKSxyPHkmJihnPU1hdGguUEktZyksbTwwJiYobT0yKk1hdGguUEkrbSksZzwwJiYoZz0yKk1hdGguUEkrZyksdSYmbT5nJiYobS09MipNYXRoLlBJKSwhdSYmZz5tJiYoZy09MipNYXRoLlBJKX1sZXQgeD1nLW07aWYoTWF0aC5hYnMoeCk+MTIwKk1hdGguUEkvMTgwKXtsZXQgTD1nLEE9cixJPW47Zz11JiZnPm0/bSsxMjAqTWF0aC5QSS8xODAqMTptKzEyMCpNYXRoLlBJLzE4MCotMSxwPVVRKHI9eStpKk1hdGguY29zKGcpLG49dithKk1hdGguc2luKGcpLEEsSSxpLGEscywwLHUsW2csTCx5LHZdKX14PWctbTtsZXQgYj1NYXRoLmNvcyhtKSxUPU1hdGguc2luKG0pLFM9TWF0aC5jb3MoZyksdz1NYXRoLnNpbihnKSxFPU1hdGgudGFuKHgvNCksXz00LzMqaSpFLEM9NC8zKmEqRSxEPVt0LGVdLE89W3QrXypULGUtQypiXSxSPVtyK18qdyxuLUMqU10saz1bcixuXTtpZihPWzBdPTIqRFswXS1PWzBdLE9bMV09MipEWzFdLU9bMV0saClyZXR1cm5bTyxSLGtdLmNvbmNhdChwKTt7cD1bTyxSLGtdLmNvbmNhdChwKTtsZXQgTD1bXTtmb3IobGV0IEE9MDtBPHAubGVuZ3RoO0ErPTMpe2xldCBJPUMyKHBbQV1bMF0scFtBXVsxXSxmKSxNPUMyKHBbQSsxXVswXSxwW0ErMV1bMV0sZiksUD1DMihwW0ErMl1bMF0scFtBKzJdWzFdLGYpO0wucHVzaChbSVswXSxJWzFdLE1bMF0sTVsxXSxQWzBdLFBbMV1dKX1yZXR1cm4gTH19ZnVuY3Rpb24gSFEodCxlLHIsbixpKXtyZXR1cm57dHlwZToicGF0aCIsb3BzOmpoKHQsZSxyLG4saSl9fWZ1bmN0aW9uIEtUKHQsZSxyKXtsZXQgbj0odHx8W10pLmxlbmd0aDtpZihuPjIpe2xldCBpPVtdO2ZvcihsZXQgYT0wO2E8bi0xO2ErKylpLnB1c2goLi4uamgodFthXVswXSx0W2FdWzFdLHRbYSsxXVswXSx0W2ErMV1bMV0scikpO3JldHVybiBlJiZpLnB1c2goLi4uamgodFtuLTFdWzBdLHRbbi0xXVsxXSx0WzBdWzBdLHRbMF1bMV0scikpLHt0eXBlOiJwYXRoIixvcHM6aX19cmV0dXJuIG49PT0yP0hRKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0scik6e3R5cGU6InBhdGgiLG9wczpbXX19ZnVuY3Rpb24gUkRlKHQsZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEscyl7cmV0dXJuIEtUKGEsITAscyl9KFtbdCxlXSxbdCtyLGVdLFt0K3IsZStuXSxbdCxlK25dXSxpKX1mdW5jdGlvbiBJUSh0LGUpe2lmKHQubGVuZ3RoKXtsZXQgcj10eXBlb2YgdFswXVswXT09Im51bWJlciI/W3RdOnQsbj1YVChyWzBdLDEqKDErLjIqZS5yb3VnaG5lc3MpLGUpLGk9ZS5kaXNhYmxlTXVsdGlTdHJva2U/W106WFQoclswXSwxLjUqKDErLjIyKmUucm91Z2huZXNzKSxCUShlKSk7Zm9yKGxldCBhPTE7YTxyLmxlbmd0aDthKyspe2xldCBzPXJbYV07aWYocy5sZW5ndGgpe2xldCBsPVhUKHMsMSooMSsuMiplLnJvdWdobmVzcyksZSksdT1lLmRpc2FibGVNdWx0aVN0cm9rZT9bXTpYVChzLDEuNSooMSsuMjIqZS5yb3VnaG5lc3MpLEJRKGUpKTtmb3IobGV0IGggb2YgbCloLm9wIT09Im1vdmUiJiZuLnB1c2goaCk7Zm9yKGxldCBoIG9mIHUpaC5vcCE9PSJtb3ZlIiYmaS5wdXNoKGgpfX1yZXR1cm57dHlwZToicGF0aCIsb3BzOm4uY29uY2F0KGkpfX1yZXR1cm57dHlwZToicGF0aCIsb3BzOltdfX1mdW5jdGlvbiBXUSh0LGUscil7bGV0IG49TWF0aC5zcXJ0KDIqTWF0aC5QSSpNYXRoLnNxcnQoKE1hdGgucG93KHQvMiwyKStNYXRoLnBvdyhlLzIsMikpLzIpKSxpPU1hdGguY2VpbChNYXRoLm1heChyLmN1cnZlU3RlcENvdW50LHIuY3VydmVTdGVwQ291bnQvTWF0aC5zcXJ0KDIwMCkqbikpLGE9MipNYXRoLlBJL2kscz1NYXRoLmFicyh0LzIpLGw9TWF0aC5hYnMoZS8yKSx1PTEtci5jdXJ2ZUZpdHRpbmc7cmV0dXJuIHMrPWFyKHMqdSxyKSxsKz1hcihsKnUscikse2luY3JlbWVudDphLHJ4OnMscnk6bH19ZnVuY3Rpb24gQUwodCxlLHIsbil7bGV0W2ksYV09RlEobi5pbmNyZW1lbnQsdCxlLG4ucngsbi5yeSwxLG4uaW5jcmVtZW50KlpUKC4xLFpUKC40LDEscikscikscikscz1KVChpLG51bGwscik7aWYoIXIuZGlzYWJsZU11bHRpU3Ryb2tlJiZyLnJvdWdobmVzcyE9PTApe2xldFtsXT1GUShuLmluY3JlbWVudCx0LGUsbi5yeCxuLnJ5LDEuNSwwLHIpLHU9SlQobCxudWxsLHIpO3M9cy5jb25jYXQodSl9cmV0dXJue2VzdGltYXRlZFBvaW50czphLG9wc2V0Ont0eXBlOiJwYXRoIixvcHM6c319fWZ1bmN0aW9uIE9RKHQsZSxyLG4saSxhLHMsbCx1KXtsZXQgaD10LGY9ZSxkPU1hdGguYWJzKHIvMikscD1NYXRoLmFicyhuLzIpO2QrPWFyKC4wMSpkLHUpLHArPWFyKC4wMSpwLHUpO2xldCBtPWksZz1hO2Zvcig7bTwwOyltKz0yKk1hdGguUEksZys9MipNYXRoLlBJO2ctbT4yKk1hdGguUEkmJihtPTAsZz0yKk1hdGguUEkpO2xldCB5PTIqTWF0aC5QSS91LmN1cnZlU3RlcENvdW50LHY9TWF0aC5taW4oeS8yLChnLW0pLzIpLHg9JFEodixoLGYsZCxwLG0sZywxLHUpO2lmKCF1LmRpc2FibGVNdWx0aVN0cm9rZSl7bGV0IGI9JFEodixoLGYsZCxwLG0sZywxLjUsdSk7eC5wdXNoKC4uLmIpfXJldHVybiBzJiYobD94LnB1c2goLi4uamgoaCxmLGgrZCpNYXRoLmNvcyhtKSxmK3AqTWF0aC5zaW4obSksdSksLi4uamgoaCxmLGgrZCpNYXRoLmNvcyhnKSxmK3AqTWF0aC5zaW4oZyksdSkpOngucHVzaCh7b3A6ImxpbmVUbyIsZGF0YTpbaCxmXX0se29wOiJsaW5lVG8iLGRhdGE6W2grZCpNYXRoLmNvcyhtKSxmK3AqTWF0aC5zaW4obSldfSkpLHt0eXBlOiJwYXRoIixvcHM6eH19ZnVuY3Rpb24gUFEodCxlKXtsZXQgcj1WUShHUShOTCh0KSkpLG49W10saT1bMCwwXSxhPVswLDBdO2ZvcihsZXR7a2V5OnMsZGF0YTpsfW9mIHIpc3dpdGNoKHMpe2Nhc2UiTSI6YT1bbFswXSxsWzFdXSxpPVtsWzBdLGxbMV1dO2JyZWFrO2Nhc2UiTCI6bi5wdXNoKC4uLmpoKGFbMF0sYVsxXSxsWzBdLGxbMV0sZSkpLGE9W2xbMF0sbFsxXV07YnJlYWs7Y2FzZSJDIjp7bGV0W3UsaCxmLGQscCxtXT1sO24ucHVzaCguLi5ORGUodSxoLGYsZCxwLG0sYSxlKSksYT1bcCxtXTticmVha31jYXNlIloiOm4ucHVzaCguLi5qaChhWzBdLGFbMV0saVswXSxpWzFdLGUpKSxhPVtpWzBdLGlbMV1dfXJldHVybnt0eXBlOiJwYXRoIixvcHM6bn19ZnVuY3Rpb24geEwodCxlKXtsZXQgcj1bXTtmb3IobGV0IG4gb2YgdClpZihuLmxlbmd0aCl7bGV0IGk9ZS5tYXhSYW5kb21uZXNzT2Zmc2V0fHwwLGE9bi5sZW5ndGg7aWYoYT4yKXtyLnB1c2goe29wOiJtb3ZlIixkYXRhOltuWzBdWzBdK2FyKGksZSksblswXVsxXSthcihpLGUpXX0pO2ZvcihsZXQgcz0xO3M8YTtzKyspci5wdXNoKHtvcDoibGluZVRvIixkYXRhOltuW3NdWzBdK2FyKGksZSksbltzXVsxXSthcihpLGUpXX0pfX1yZXR1cm57dHlwZToiZmlsbFBhdGgiLG9wczpyfX1mdW5jdGlvbiB3bSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2xldCBpPXIuZmlsbFN0eWxlfHwiaGFjaHVyZSI7aWYoIVBzW2ldKXN3aXRjaChpKXtjYXNlInppZ3phZyI6UHNbaV18fChQc1tpXT1uZXcgVEwobikpO2JyZWFrO2Nhc2UiY3Jvc3MtaGF0Y2giOlBzW2ldfHwoUHNbaV09bmV3IHdMKG4pKTticmVhaztjYXNlImRvdHMiOlBzW2ldfHwoUHNbaV09bmV3IGtMKG4pKTticmVhaztjYXNlImRhc2hlZCI6UHNbaV18fChQc1tpXT1uZXcgRUwobikpO2JyZWFrO2Nhc2UiemlnemFnLWxpbmUiOlBzW2ldfHwoUHNbaV09bmV3IFNMKG4pKTticmVhaztkZWZhdWx0Omk9ImhhY2h1cmUiLFBzW2ldfHwoUHNbaV09bmV3IF8yKG4pKX1yZXR1cm4gUHNbaV19KGUsTERlKS5maWxsUG9seWdvbnModCxlKX1mdW5jdGlvbiBCUSh0KXtsZXQgZT1PYmplY3QuYXNzaWduKHt9LHQpO3JldHVybiBlLnJhbmRvbWl6ZXI9dm9pZCAwLHQuc2VlZCYmKGUuc2VlZD10LnNlZWQrMSksZX1mdW5jdGlvbiBxUSh0KXtyZXR1cm4gdC5yYW5kb21pemVyfHwodC5yYW5kb21pemVyPW5ldyBDTCh0LnNlZWR8fDApKSx0LnJhbmRvbWl6ZXIubmV4dCgpfWZ1bmN0aW9uIFpUKHQsZSxyLG49MSl7cmV0dXJuIHIucm91Z2huZXNzKm4qKHFRKHIpKihlLXQpK3QpfWZ1bmN0aW9uIGFyKHQsZSxyPTEpe3JldHVybiBaVCgtdCx0LGUscil9ZnVuY3Rpb24gamgodCxlLHIsbixpLGE9ITEpe2xldCBzPWE/aS5kaXNhYmxlTXVsdGlTdHJva2VGaWxsOmkuZGlzYWJsZU11bHRpU3Ryb2tlLGw9X0wodCxlLHIsbixpLCEwLCExKTtpZihzKXJldHVybiBsO2xldCB1PV9MKHQsZSxyLG4saSwhMCwhMCk7cmV0dXJuIGwuY29uY2F0KHUpfWZ1bmN0aW9uIF9MKHQsZSxyLG4saSxhLHMpe2xldCBsPU1hdGgucG93KHQtciwyKStNYXRoLnBvdyhlLW4sMiksdT1NYXRoLnNxcnQobCksaD0xO2g9dTwyMDA/MTp1PjUwMD8uNDotLjAwMTY2NjgqdSsxLjIzMzMzNDtsZXQgZj1pLm1heFJhbmRvbW5lc3NPZmZzZXR8fDA7ZipmKjEwMD5sJiYoZj11LzEwKTtsZXQgZD1mLzIscD0uMisuMipxUShpKSxtPWkuYm93aW5nKmkubWF4UmFuZG9tbmVzc09mZnNldCoobi1lKS8yMDAsZz1pLmJvd2luZyppLm1heFJhbmRvbW5lc3NPZmZzZXQqKHQtcikvMjAwO209YXIobSxpLGgpLGc9YXIoZyxpLGgpO2xldCB5PVtdLHY9bygoKT0+YXIoZCxpLGgpLCJNIikseD1vKCgpPT5hcihmLGksaCksImsiKSxiPWkucHJlc2VydmVWZXJ0aWNlcztyZXR1cm4gYSYmKHM/eS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdCsoYj8wOnYoKSksZSsoYj8wOnYoKSldfSk6eS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdCsoYj8wOmFyKGYsaSxoKSksZSsoYj8wOmFyKGYsaSxoKSldfSkpLHM/eS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W20rdCsoci10KSpwK3YoKSxnK2UrKG4tZSkqcCt2KCksbSt0KzIqKHItdCkqcCt2KCksZytlKzIqKG4tZSkqcCt2KCkscisoYj8wOnYoKSksbisoYj8wOnYoKSldfSk6eS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W20rdCsoci10KSpwK3goKSxnK2UrKG4tZSkqcCt4KCksbSt0KzIqKHItdCkqcCt4KCksZytlKzIqKG4tZSkqcCt4KCkscisoYj8wOngoKSksbisoYj8wOngoKSldfSkseX1mdW5jdGlvbiBYVCh0LGUscil7aWYoIXQubGVuZ3RoKXJldHVybltdO2xldCBuPVtdO24ucHVzaChbdFswXVswXSthcihlLHIpLHRbMF1bMV0rYXIoZSxyKV0pLG4ucHVzaChbdFswXVswXSthcihlLHIpLHRbMF1bMV0rYXIoZSxyKV0pO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGg7aSsrKW4ucHVzaChbdFtpXVswXSthcihlLHIpLHRbaV1bMV0rYXIoZSxyKV0pLGk9PT10Lmxlbmd0aC0xJiZuLnB1c2goW3RbaV1bMF0rYXIoZSxyKSx0W2ldWzFdK2FyKGUscildKTtyZXR1cm4gSlQobixudWxsLHIpfWZ1bmN0aW9uIEpUKHQsZSxyKXtsZXQgbj10Lmxlbmd0aCxpPVtdO2lmKG4+Myl7bGV0IGE9W10scz0xLXIuY3VydmVUaWdodG5lc3M7aS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdFsxXVswXSx0WzFdWzFdXX0pO2ZvcihsZXQgbD0xO2wrMjxuO2wrKyl7bGV0IHU9dFtsXTthWzBdPVt1WzBdLHVbMV1dLGFbMV09W3VbMF0rKHMqdFtsKzFdWzBdLXMqdFtsLTFdWzBdKS82LHVbMV0rKHMqdFtsKzFdWzFdLXMqdFtsLTFdWzFdKS82XSxhWzJdPVt0W2wrMV1bMF0rKHMqdFtsXVswXS1zKnRbbCsyXVswXSkvNix0W2wrMV1bMV0rKHMqdFtsXVsxXS1zKnRbbCsyXVsxXSkvNl0sYVszXT1bdFtsKzFdWzBdLHRbbCsxXVsxXV0saS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W2FbMV1bMF0sYVsxXVsxXSxhWzJdWzBdLGFbMl1bMV0sYVszXVswXSxhWzNdWzFdXX0pfWlmKGUmJmUubGVuZ3RoPT09Mil7bGV0IGw9ci5tYXhSYW5kb21uZXNzT2Zmc2V0O2kucHVzaCh7b3A6ImxpbmVUbyIsZGF0YTpbZVswXSthcihsLHIpLGVbMV0rYXIobCxyKV19KX19ZWxzZSBuPT09Mz8oaS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdFsxXVswXSx0WzFdWzFdXX0pLGkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlt0WzFdWzBdLHRbMV1bMV0sdFsyXVswXSx0WzJdWzFdLHRbMl1bMF0sdFsyXVsxXV19KSk6bj09PTImJmkucHVzaCguLi5fTCh0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdLHIsITAsITApKTtyZXR1cm4gaX1mdW5jdGlvbiBGUSh0LGUscixuLGksYSxzLGwpe2xldCB1PVtdLGg9W107aWYobC5yb3VnaG5lc3M9PT0wKXt0Lz00LGgucHVzaChbZStuKk1hdGguY29zKC10KSxyK2kqTWF0aC5zaW4oLXQpXSk7Zm9yKGxldCBmPTA7Zjw9MipNYXRoLlBJO2YrPXQpe2xldCBkPVtlK24qTWF0aC5jb3MoZikscitpKk1hdGguc2luKGYpXTt1LnB1c2goZCksaC5wdXNoKGQpfWgucHVzaChbZStuKk1hdGguY29zKDApLHIraSpNYXRoLnNpbigwKV0pLGgucHVzaChbZStuKk1hdGguY29zKHQpLHIraSpNYXRoLnNpbih0KV0pfWVsc2V7bGV0IGY9YXIoLjUsbCktTWF0aC5QSS8yO2gucHVzaChbYXIoYSxsKStlKy45Km4qTWF0aC5jb3MoZi10KSxhcihhLGwpK3IrLjkqaSpNYXRoLnNpbihmLXQpXSk7bGV0IGQ9MipNYXRoLlBJK2YtLjAxO2ZvcihsZXQgcD1mO3A8ZDtwKz10KXtsZXQgbT1bYXIoYSxsKStlK24qTWF0aC5jb3MocCksYXIoYSxsKStyK2kqTWF0aC5zaW4ocCldO3UucHVzaChtKSxoLnB1c2gobSl9aC5wdXNoKFthcihhLGwpK2UrbipNYXRoLmNvcyhmKzIqTWF0aC5QSSsuNSpzKSxhcihhLGwpK3IraSpNYXRoLnNpbihmKzIqTWF0aC5QSSsuNSpzKV0pLGgucHVzaChbYXIoYSxsKStlKy45OCpuKk1hdGguY29zKGYrcyksYXIoYSxsKStyKy45OCppKk1hdGguc2luKGYrcyldKSxoLnB1c2goW2FyKGEsbCkrZSsuOSpuKk1hdGguY29zKGYrLjUqcyksYXIoYSxsKStyKy45KmkqTWF0aC5zaW4oZisuNSpzKV0pfXJldHVybltoLHVdfWZ1bmN0aW9uICRRKHQsZSxyLG4saSxhLHMsbCx1KXtsZXQgaD1hK2FyKC4xLHUpLGY9W107Zi5wdXNoKFthcihsLHUpK2UrLjkqbipNYXRoLmNvcyhoLXQpLGFyKGwsdSkrcisuOSppKk1hdGguc2luKGgtdCldKTtmb3IobGV0IGQ9aDtkPD1zO2QrPXQpZi5wdXNoKFthcihsLHUpK2UrbipNYXRoLmNvcyhkKSxhcihsLHUpK3IraSpNYXRoLnNpbihkKV0pO3JldHVybiBmLnB1c2goW2UrbipNYXRoLmNvcyhzKSxyK2kqTWF0aC5zaW4ocyldKSxmLnB1c2goW2UrbipNYXRoLmNvcyhzKSxyK2kqTWF0aC5zaW4ocyldKSxKVChmLG51bGwsdSl9ZnVuY3Rpb24gTkRlKHQsZSxyLG4saSxhLHMsbCl7bGV0IHU9W10saD1bbC5tYXhSYW5kb21uZXNzT2Zmc2V0fHwxLChsLm1heFJhbmRvbW5lc3NPZmZzZXR8fDEpKy4zXSxmPVswLDBdLGQ9bC5kaXNhYmxlTXVsdGlTdHJva2U/MToyLHA9bC5wcmVzZXJ2ZVZlcnRpY2VzO2ZvcihsZXQgbT0wO208ZDttKyspbT09PTA/dS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbc1swXSxzWzFdXX0pOnUucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3NbMF0rKHA/MDphcihoWzBdLGwpKSxzWzFdKyhwPzA6YXIoaFswXSxsKSldfSksZj1wP1tpLGFdOltpK2FyKGhbbV0sbCksYSthcihoW21dLGwpXSx1LnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbdCthcihoW21dLGwpLGUrYXIoaFttXSxsKSxyK2FyKGhbbV0sbCksbithcihoW21dLGwpLGZbMF0sZlsxXV19KTtyZXR1cm4gdX1mdW5jdGlvbiBBMih0KXtyZXR1cm5bLi4udF19ZnVuY3Rpb24gelEodCxlPTApe2xldCByPXQubGVuZ3RoO2lmKHI8Myl0aHJvdyBuZXcgRXJyb3IoIkEgY3VydmUgbXVzdCBoYXZlIGF0IGxlYXN0IHRocmVlIHBvaW50cy4iKTtsZXQgbj1bXTtpZihyPT09MyluLnB1c2goQTIodFswXSksQTIodFsxXSksQTIodFsyXSksQTIodFsyXSkpO2Vsc2V7bGV0IGk9W107aS5wdXNoKHRbMF0sdFswXSk7Zm9yKGxldCBsPTE7bDx0Lmxlbmd0aDtsKyspaS5wdXNoKHRbbF0pLGw9PT10Lmxlbmd0aC0xJiZpLnB1c2godFtsXSk7bGV0IGE9W10scz0xLWU7bi5wdXNoKEEyKGlbMF0pKTtmb3IobGV0IGw9MTtsKzI8aS5sZW5ndGg7bCsrKXtsZXQgdT1pW2xdO2FbMF09W3VbMF0sdVsxXV0sYVsxXT1bdVswXSsocyppW2wrMV1bMF0tcyppW2wtMV1bMF0pLzYsdVsxXSsocyppW2wrMV1bMV0tcyppW2wtMV1bMV0pLzZdLGFbMl09W2lbbCsxXVswXSsocyppW2xdWzBdLXMqaVtsKzJdWzBdKS82LGlbbCsxXVsxXSsocyppW2xdWzFdLXMqaVtsKzJdWzFdKS82XSxhWzNdPVtpW2wrMV1bMF0saVtsKzFdWzFdXSxuLnB1c2goYVsxXSxhWzJdLGFbM10pfX1yZXR1cm4gbn1mdW5jdGlvbiBRVCh0LGUpe3JldHVybiBNYXRoLnBvdyh0WzBdLWVbMF0sMikrTWF0aC5wb3codFsxXS1lWzFdLDIpfWZ1bmN0aW9uIE1EZSh0LGUscil7bGV0IG49UVQoZSxyKTtpZihuPT09MClyZXR1cm4gUVQodCxlKTtsZXQgaT0oKHRbMF0tZVswXSkqKHJbMF0tZVswXSkrKHRbMV0tZVsxXSkqKHJbMV0tZVsxXSkpL247cmV0dXJuIGk9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGkpKSxRVCh0LEhkKGUscixpKSl9ZnVuY3Rpb24gSGQodCxlLHIpe3JldHVyblt0WzBdKyhlWzBdLXRbMF0pKnIsdFsxXSsoZVsxXS10WzFdKSpyXX1mdW5jdGlvbiBETCh0LGUscixuKXtsZXQgaT1ufHxbXTtpZihmdW5jdGlvbihsLHUpe2xldCBoPWxbdSswXSxmPWxbdSsxXSxkPWxbdSsyXSxwPWxbdSszXSxtPTMqZlswXS0yKmhbMF0tcFswXTttKj1tO2xldCBnPTMqZlsxXS0yKmhbMV0tcFsxXTtnKj1nO2xldCB5PTMqZFswXS0yKnBbMF0taFswXTt5Kj15O2xldCB2PTMqZFsxXS0yKnBbMV0taFsxXTtyZXR1cm4gdio9dixtPHkmJihtPXkpLGc8diYmKGc9diksbStnfSh0LGUpPHIpe2xldCBsPXRbZSswXTtpLmxlbmd0aD8oYT1pW2kubGVuZ3RoLTFdLHM9bCxNYXRoLnNxcnQoUVQoYSxzKSk+MSYmaS5wdXNoKGwpKTppLnB1c2gobCksaS5wdXNoKHRbZSszXSl9ZWxzZXtsZXQgdT10W2UrMF0saD10W2UrMV0sZj10W2UrMl0sZD10W2UrM10scD1IZCh1LGgsLjUpLG09SGQoaCxmLC41KSxnPUhkKGYsZCwuNSkseT1IZChwLG0sLjUpLHY9SGQobSxnLC41KSx4PUhkKHksdiwuNSk7REwoW3UscCx5LHhdLDAscixpKSxETChbeCx2LGcsZF0sMCxyLGkpfXZhciBhLHM7cmV0dXJuIGl9ZnVuY3Rpb24gSURlKHQsZSl7cmV0dXJuIGV3KHQsMCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiBldyh0LGUscixuLGkpe2xldCBhPWl8fFtdLHM9dFtlXSxsPXRbci0xXSx1PTAsaD0xO2ZvcihsZXQgZj1lKzE7ZjxyLTE7KytmKXtsZXQgZD1NRGUodFtmXSxzLGwpO2Q+dSYmKHU9ZCxoPWYpfXJldHVybiBNYXRoLnNxcnQodSk+bj8oZXcodCxlLGgrMSxuLGEpLGV3KHQsaCxyLG4sYSkpOihhLmxlbmd0aHx8YS5wdXNoKHMpLGEucHVzaChsKSksYX1mdW5jdGlvbiBiTCh0LGU9LjE1LHIpe2xldCBuPVtdLGk9KHQubGVuZ3RoLTEpLzM7Zm9yKGxldCBhPTA7YTxpO2ErKylETCh0LDMqYSxlLG4pO3JldHVybiByJiZyPjA/ZXcobiwwLG4ubGVuZ3RoLHIpOm59dmFyIF8yLFRMLHdMLGtMLEVMLFNMLFBzLENMLEREZSx5TCxNUSxZVCxMRGUsc28sa20sTEwsalQsUkwsamUsV3Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGdMLCJ0Iik7byhBRGUsImUiKTtvKF9EZSwicyIpO28oRDIsIm4iKTtfMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJvIil9Y29uc3RydWN0b3IoZSl7dGhpcy5oZWxwZXI9ZX1maWxsUG9seWdvbnMoZSxyKXtyZXR1cm4gdGhpcy5fZmlsbFBvbHlnb25zKGUscil9X2ZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPUQyKGUscik7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLnJlbmRlckxpbmVzKG4scil9fXJlbmRlckxpbmVzKGUscil7bGV0IG49W107Zm9yKGxldCBpIG9mIGUpbi5wdXNoKC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHMoaVswXVswXSxpWzBdWzFdLGlbMV1bMF0saVsxXVsxXSxyKSk7cmV0dXJuIG59fTtvKHR3LCJhIik7VEw9Y2xhc3MgZXh0ZW5kcyBfMntzdGF0aWN7byh0aGlzLCJoIil9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49ci5oYWNodXJlR2FwO248MCYmKG49NCpyLnN0cm9rZVdpZHRoKSxuPU1hdGgubWF4KG4sLjEpO2xldCBpPUQyKGUsT2JqZWN0LmFzc2lnbih7fSxyLHtoYWNodXJlR2FwOm59KSksYT1NYXRoLlBJLzE4MCpyLmhhY2h1cmVBbmdsZSxzPVtdLGw9LjUqbipNYXRoLmNvcyhhKSx1PS41Km4qTWF0aC5zaW4oYSk7Zm9yKGxldFtoLGZdb2YgaSl0dyhbaCxmXSkmJnMucHVzaChbW2hbMF0tbCxoWzFdK3VdLFsuLi5mXV0sW1toWzBdK2wsaFsxXS11XSxbLi4uZl1dKTtyZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOnRoaXMucmVuZGVyTGluZXMocyxyKX19fSx3TD1jbGFzcyBleHRlbmRzIF8ye3N0YXRpY3tvKHRoaXMsInIiKX1maWxsUG9seWdvbnMoZSxyKXtsZXQgbj10aGlzLl9maWxsUG9seWdvbnMoZSxyKSxpPU9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUFuZ2xlOnIuaGFjaHVyZUFuZ2xlKzkwfSksYT10aGlzLl9maWxsUG9seWdvbnMoZSxpKTtyZXR1cm4gbi5vcHM9bi5vcHMuY29uY2F0KGEub3BzKSxufX0sa0w9Y2xhc3N7c3RhdGlje28odGhpcywiaSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49RDIoZSxyPU9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUFuZ2xlOjB9KSk7cmV0dXJuIHRoaXMuZG90c09uTGluZXMobixyKX1kb3RzT25MaW5lcyhlLHIpe2xldCBuPVtdLGk9ci5oYWNodXJlR2FwO2k8MCYmKGk9NCpyLnN0cm9rZVdpZHRoKSxpPU1hdGgubWF4KGksLjEpO2xldCBhPXIuZmlsbFdlaWdodDthPDAmJihhPXIuc3Ryb2tlV2lkdGgvMik7bGV0IHM9aS80O2ZvcihsZXQgbCBvZiBlKXtsZXQgdT10dyhsKSxoPXUvaSxmPU1hdGguY2VpbChoKS0xLGQ9dS1mKmkscD0obFswXVswXStsWzFdWzBdKS8yLWkvNCxtPU1hdGgubWluKGxbMF1bMV0sbFsxXVsxXSk7Zm9yKGxldCBnPTA7ZzxmO2crKyl7bGV0IHk9bStkK2cqaSx2PXAtcysyKk1hdGgucmFuZG9tKCkqcyx4PXktcysyKk1hdGgucmFuZG9tKCkqcyxiPXRoaXMuaGVscGVyLmVsbGlwc2Uodix4LGEsYSxyKTtuLnB1c2goLi4uYi5vcHMpfX1yZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOm59fX0sRUw9Y2xhc3N7c3RhdGlje28odGhpcywiYyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49RDIoZSxyKTtyZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOnRoaXMuZGFzaGVkTGluZShuLHIpfX1kYXNoZWRMaW5lKGUscil7bGV0IG49ci5kYXNoT2Zmc2V0PDA/ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcDpyLmRhc2hPZmZzZXQsaT1yLmRhc2hHYXA8MD9yLmhhY2h1cmVHYXA8MD80KnIuc3Ryb2tlV2lkdGg6ci5oYWNodXJlR2FwOnIuZGFzaEdhcCxhPVtdO3JldHVybiBlLmZvckVhY2gocz0+e2xldCBsPXR3KHMpLHU9TWF0aC5mbG9vcihsLyhuK2kpKSxoPShsK2ktdSoobitpKSkvMixmPXNbMF0sZD1zWzFdO2ZbMF0+ZFswXSYmKGY9c1sxXSxkPXNbMF0pO2xldCBwPU1hdGguYXRhbigoZFsxXS1mWzFdKS8oZFswXS1mWzBdKSk7Zm9yKGxldCBtPTA7bTx1O20rKyl7bGV0IGc9bSoobitpKSx5PWcrbix2PVtmWzBdK2cqTWF0aC5jb3MocCkraCpNYXRoLmNvcyhwKSxmWzFdK2cqTWF0aC5zaW4ocCkraCpNYXRoLnNpbihwKV0seD1bZlswXSt5Kk1hdGguY29zKHApK2gqTWF0aC5jb3MocCksZlsxXSt5Kk1hdGguc2luKHApK2gqTWF0aC5zaW4ocCldO2EucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKHZbMF0sdlsxXSx4WzBdLHhbMV0scikpfX0pLGF9fSxTTD1jbGFzc3tzdGF0aWN7byh0aGlzLCJsIil9Y29uc3RydWN0b3IoZSl7dGhpcy5oZWxwZXI9ZX1maWxsUG9seWdvbnMoZSxyKXtsZXQgbj1yLmhhY2h1cmVHYXA8MD80KnIuc3Ryb2tlV2lkdGg6ci5oYWNodXJlR2FwLGk9ci56aWd6YWdPZmZzZXQ8MD9uOnIuemlnemFnT2Zmc2V0LGE9RDIoZSxyPU9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUdhcDpuK2l9KSk7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLnppZ3phZ0xpbmVzKGEsaSxyKX19emlnemFnTGluZXMoZSxyLG4pe2xldCBpPVtdO3JldHVybiBlLmZvckVhY2goYT0+e2xldCBzPXR3KGEpLGw9TWF0aC5yb3VuZChzLygyKnIpKSx1PWFbMF0saD1hWzFdO3VbMF0+aFswXSYmKHU9YVsxXSxoPWFbMF0pO2xldCBmPU1hdGguYXRhbigoaFsxXS11WzFdKS8oaFswXS11WzBdKSk7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7bGV0IHA9MipkKnIsbT0yKihkKzEpKnIsZz1NYXRoLnNxcnQoMipNYXRoLnBvdyhyLDIpKSx5PVt1WzBdK3AqTWF0aC5jb3MoZiksdVsxXStwKk1hdGguc2luKGYpXSx2PVt1WzBdK20qTWF0aC5jb3MoZiksdVsxXSttKk1hdGguc2luKGYpXSx4PVt5WzBdK2cqTWF0aC5jb3MoZitNYXRoLlBJLzQpLHlbMV0rZypNYXRoLnNpbihmK01hdGguUEkvNCldO2kucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKHlbMF0seVsxXSx4WzBdLHhbMV0sbiksLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh4WzBdLHhbMV0sdlswXSx2WzFdLG4pKX19KSxpfX0sUHM9e30sQ0w9Y2xhc3N7c3RhdGlje28odGhpcywicCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc2VlZD1lfW5leHQoKXtyZXR1cm4gdGhpcy5zZWVkPygyKiozMS0xJih0aGlzLnNlZWQ9TWF0aC5pbXVsKDQ4MjcxLHRoaXMuc2VlZCkpKS8yKiozMTpNYXRoLnJhbmRvbSgpfX0sRERlPTAseUw9MSxNUT0yLFlUPXtBOjcsYTo3LEM6NixjOjYsSDoxLGg6MSxMOjIsbDoyLE06MixtOjIsUTo0LHE6NCxTOjQsczo0LFQ6Mix0OjIsVjoxLHY6MSxaOjAsejowfTtvKHZMLCJrIik7byhOTCwiYiIpO28oR1EsInkiKTtvKFZRLCJtIik7byhDMiwidyIpO28oVVEsIngiKTtMRGU9e3JhbmRPZmZzZXQ6byhmdW5jdGlvbih0LGUpe3JldHVybiBhcih0LGUpfSwicmFuZE9mZnNldCIpLHJhbmRPZmZzZXRXaXRoUmFuZ2U6byhmdW5jdGlvbih0LGUscil7cmV0dXJuIFpUKHQsZSxyKX0sInJhbmRPZmZzZXRXaXRoUmFuZ2UiKSxlbGxpcHNlOm8oZnVuY3Rpb24odCxlLHIsbixpKXtsZXQgYT1XUShyLG4saSk7cmV0dXJuIEFMKHQsZSxpLGEpLm9wc2V0fSwiZWxsaXBzZSIpLGRvdWJsZUxpbmVPcHM6byhmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBqaCh0LGUscixuLGksITApfSwiZG91YmxlTGluZU9wcyIpfTtvKEhRLCJ2Iik7byhLVCwiUyIpO28oUkRlLCJPIik7byhJUSwiTCIpO28oV1EsIlQiKTtvKEFMLCJEIik7byhPUSwiQSIpO28oUFEsIl8iKTtvKHhMLCJJIik7byh3bSwiQyIpO28oQlEsInoiKTtvKHFRLCJXIik7byhaVCwiRSIpO28oYXIsIkciKTtvKGpoLCIkIik7byhfTCwiUiIpO28oWFQsImoiKTtvKEpULCJxIik7byhGUSwiRiIpO28oJFEsIlYiKTtvKE5EZSwiWiIpO28oQTIsIlEiKTtvKHpRLCJIIik7byhRVCwiTiIpO28oTURlLCJCIik7byhIZCwiSiIpO28oREwsIksiKTtvKElEZSwiVSIpO28oZXcsIlgiKTtvKGJMLCJZIik7c289Im5vbmUiLGttPWNsYXNze3N0YXRpY3tvKHRoaXMsImV0Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0T3B0aW9ucz17bWF4UmFuZG9tbmVzc09mZnNldDoyLHJvdWdobmVzczoxLGJvd2luZzoxLHN0cm9rZToiIzAwMCIsc3Ryb2tlV2lkdGg6MSxjdXJ2ZVRpZ2h0bmVzczowLGN1cnZlRml0dGluZzouOTUsY3VydmVTdGVwQ291bnQ6OSxmaWxsU3R5bGU6ImhhY2h1cmUiLGZpbGxXZWlnaHQ6LTEsaGFjaHVyZUFuZ2xlOi00MSxoYWNodXJlR2FwOi0xLGRhc2hPZmZzZXQ6LTEsZGFzaEdhcDotMSx6aWd6YWdPZmZzZXQ6LTEsc2VlZDowLGRpc2FibGVNdWx0aVN0cm9rZTohMSxkaXNhYmxlTXVsdGlTdHJva2VGaWxsOiExLHByZXNlcnZlVmVydGljZXM6ITEsZmlsbFNoYXBlUm91Z2huZXNzR2FpbjouOH0sdGhpcy5jb25maWc9ZXx8e30sdGhpcy5jb25maWcub3B0aW9ucyYmKHRoaXMuZGVmYXVsdE9wdGlvbnM9dGhpcy5fbyh0aGlzLmNvbmZpZy5vcHRpb25zKSl9c3RhdGljIG5ld1NlZWQoKXtyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIqKjMxKX1fbyhlKXtyZXR1cm4gZT9PYmplY3QuYXNzaWduKHt9LHRoaXMuZGVmYXVsdE9wdGlvbnMsZSk6dGhpcy5kZWZhdWx0T3B0aW9uc31fZChlLHIsbil7cmV0dXJue3NoYXBlOmUsc2V0czpyfHxbXSxvcHRpb25zOm58fHRoaXMuZGVmYXVsdE9wdGlvbnN9fWxpbmUoZSxyLG4saSxhKXtsZXQgcz10aGlzLl9vKGEpO3JldHVybiB0aGlzLl9kKCJsaW5lIixbSFEoZSxyLG4saSxzKV0scyl9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKSxsPVtdLHU9UkRlKGUscixuLGkscyk7aWYocy5maWxsKXtsZXQgaD1bW2Uscl0sW2UrbixyXSxbZStuLHIraV0sW2UscitpXV07cy5maWxsU3R5bGU9PT0ic29saWQiP2wucHVzaCh4TChbaF0scykpOmwucHVzaCh3bShbaF0scykpfXJldHVybiBzLnN0cm9rZSE9PXNvJiZsLnB1c2godSksdGhpcy5fZCgicmVjdGFuZ2xlIixsLHMpfWVsbGlwc2UoZSxyLG4saSxhKXtsZXQgcz10aGlzLl9vKGEpLGw9W10sdT1XUShuLGkscyksaD1BTChlLHIscyx1KTtpZihzLmZpbGwpaWYocy5maWxsU3R5bGU9PT0ic29saWQiKXtsZXQgZj1BTChlLHIscyx1KS5vcHNldDtmLnR5cGU9ImZpbGxQYXRoIixsLnB1c2goZil9ZWxzZSBsLnB1c2god20oW2guZXN0aW1hdGVkUG9pbnRzXSxzKSk7cmV0dXJuIHMuc3Ryb2tlIT09c28mJmwucHVzaChoLm9wc2V0KSx0aGlzLl9kKCJlbGxpcHNlIixsLHMpfWNpcmNsZShlLHIsbixpKXtsZXQgYT10aGlzLmVsbGlwc2UoZSxyLG4sbixpKTtyZXR1cm4gYS5zaGFwZT0iY2lyY2xlIixhfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLl9vKHIpO3JldHVybiB0aGlzLl9kKCJsaW5lYXJQYXRoIixbS1QoZSwhMSxuKV0sbil9YXJjKGUscixuLGksYSxzLGw9ITEsdSl7bGV0IGg9dGhpcy5fbyh1KSxmPVtdLGQ9T1EoZSxyLG4saSxhLHMsbCwhMCxoKTtpZihsJiZoLmZpbGwpaWYoaC5maWxsU3R5bGU9PT0ic29saWQiKXtsZXQgcD1PYmplY3QuYXNzaWduKHt9LGgpO3AuZGlzYWJsZU11bHRpU3Ryb2tlPSEwO2xldCBtPU9RKGUscixuLGksYSxzLCEwLCExLHApO20udHlwZT0iZmlsbFBhdGgiLGYucHVzaChtKX1lbHNlIGYucHVzaChmdW5jdGlvbihwLG0sZyx5LHYseCxiKXtsZXQgVD1wLFM9bSx3PU1hdGguYWJzKGcvMiksRT1NYXRoLmFicyh5LzIpO3crPWFyKC4wMSp3LGIpLEUrPWFyKC4wMSpFLGIpO2xldCBfPXYsQz14O2Zvcig7XzwwOylfKz0yKk1hdGguUEksQys9MipNYXRoLlBJO0MtXz4yKk1hdGguUEkmJihfPTAsQz0yKk1hdGguUEkpO2xldCBEPShDLV8pL2IuY3VydmVTdGVwQ291bnQsTz1bXTtmb3IobGV0IFI9XztSPD1DO1IrPUQpTy5wdXNoKFtUK3cqTWF0aC5jb3MoUiksUytFKk1hdGguc2luKFIpXSk7cmV0dXJuIE8ucHVzaChbVCt3Kk1hdGguY29zKEMpLFMrRSpNYXRoLnNpbihDKV0pLE8ucHVzaChbVCxTXSksd20oW09dLGIpfShlLHIsbixpLGEscyxoKSk7cmV0dXJuIGguc3Ryb2tlIT09c28mJmYucHVzaChkKSx0aGlzLl9kKCJhcmMiLGYsaCl9Y3VydmUoZSxyKXtsZXQgbj10aGlzLl9vKHIpLGk9W10sYT1JUShlLG4pO2lmKG4uZmlsbCYmbi5maWxsIT09c28paWYobi5maWxsU3R5bGU9PT0ic29saWQiKXtsZXQgcz1JUShlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7ZGlzYWJsZU11bHRpU3Ryb2tlOiEwLHJvdWdobmVzczpuLnJvdWdobmVzcz9uLnJvdWdobmVzcytuLmZpbGxTaGFwZVJvdWdobmVzc0dhaW46MH0pKTtpLnB1c2goe3R5cGU6ImZpbGxQYXRoIixvcHM6dGhpcy5fbWVyZ2VkU2hhcGUocy5vcHMpfSl9ZWxzZXtsZXQgcz1bXSxsPWU7aWYobC5sZW5ndGgpe2xldCB1PXR5cGVvZiBsWzBdWzBdPT0ibnVtYmVyIj9bbF06bDtmb3IobGV0IGggb2YgdSloLmxlbmd0aDwzP3MucHVzaCguLi5oKTpoLmxlbmd0aD09PTM/cy5wdXNoKC4uLmJMKHpRKFtoWzBdLGhbMF0saFsxXSxoWzJdXSksMTAsKDErbi5yb3VnaG5lc3MpLzIpKTpzLnB1c2goLi4uYkwoelEoaCksMTAsKDErbi5yb3VnaG5lc3MpLzIpKX1zLmxlbmd0aCYmaS5wdXNoKHdtKFtzXSxuKSl9cmV0dXJuIG4uc3Ryb2tlIT09c28mJmkucHVzaChhKSx0aGlzLl9kKCJjdXJ2ZSIsaSxuKX1wb2x5Z29uKGUscil7bGV0IG49dGhpcy5fbyhyKSxpPVtdLGE9S1QoZSwhMCxuKTtyZXR1cm4gbi5maWxsJiYobi5maWxsU3R5bGU9PT0ic29saWQiP2kucHVzaCh4TChbZV0sbikpOmkucHVzaCh3bShbZV0sbikpKSxuLnN0cm9rZSE9PXNvJiZpLnB1c2goYSksdGhpcy5fZCgicG9seWdvbiIsaSxuKX1wYXRoKGUscil7bGV0IG49dGhpcy5fbyhyKSxpPVtdO2lmKCFlKXJldHVybiB0aGlzLl9kKCJwYXRoIixpLG4pO2U9KGV8fCIiKS5yZXBsYWNlKC9cbi9nLCIgIikucmVwbGFjZSgvKC1ccykvZywiLSIpLnJlcGxhY2UoIi8oc3MpL2ciLCIgIik7bGV0IGE9bi5maWxsJiZuLmZpbGwhPT0idHJhbnNwYXJlbnQiJiZuLmZpbGwhPT1zbyxzPW4uc3Ryb2tlIT09c28sbD0hIShuLnNpbXBsaWZpY2F0aW9uJiZuLnNpbXBsaWZpY2F0aW9uPDEpLHU9ZnVuY3Rpb24oZixkLHApe2xldCBtPVZRKEdRKE5MKGYpKSksZz1bXSx5PVtdLHY9WzAsMF0seD1bXSxiPW8oKCk9Pnt4Lmxlbmd0aD49NCYmeS5wdXNoKC4uLmJMKHgsZCkpLHg9W119LCJpIiksVD1vKCgpPT57YigpLHkubGVuZ3RoJiYoZy5wdXNoKHkpLHk9W10pfSwiYyIpO2ZvcihsZXR7a2V5OncsZGF0YTpFfW9mIG0pc3dpdGNoKHcpe2Nhc2UiTSI6VCgpLHY9W0VbMF0sRVsxXV0seS5wdXNoKHYpO2JyZWFrO2Nhc2UiTCI6YigpLHkucHVzaChbRVswXSxFWzFdXSk7YnJlYWs7Y2FzZSJDIjppZigheC5sZW5ndGgpe2xldCBfPXkubGVuZ3RoP3lbeS5sZW5ndGgtMV06djt4LnB1c2goW19bMF0sX1sxXV0pfXgucHVzaChbRVswXSxFWzFdXSkseC5wdXNoKFtFWzJdLEVbM11dKSx4LnB1c2goW0VbNF0sRVs1XV0pO2JyZWFrO2Nhc2UiWiI6YigpLHkucHVzaChbdlswXSx2WzFdXSl9aWYoVCgpLCFwKXJldHVybiBnO2xldCBTPVtdO2ZvcihsZXQgdyBvZiBnKXtsZXQgRT1JRGUodyxwKTtFLmxlbmd0aCYmUy5wdXNoKEUpfXJldHVybiBTfShlLDEsbD80LTQqKG4uc2ltcGxpZmljYXRpb258fDEpOigxK24ucm91Z2huZXNzKS8yKSxoPVBRKGUsbik7aWYoYSlpZihuLmZpbGxTdHlsZT09PSJzb2xpZCIpaWYodS5sZW5ndGg9PT0xKXtsZXQgZj1QUShlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7ZGlzYWJsZU11bHRpU3Ryb2tlOiEwLHJvdWdobmVzczpuLnJvdWdobmVzcz9uLnJvdWdobmVzcytuLmZpbGxTaGFwZVJvdWdobmVzc0dhaW46MH0pKTtpLnB1c2goe3R5cGU6ImZpbGxQYXRoIixvcHM6dGhpcy5fbWVyZ2VkU2hhcGUoZi5vcHMpfSl9ZWxzZSBpLnB1c2goeEwodSxuKSk7ZWxzZSBpLnB1c2god20odSxuKSk7cmV0dXJuIHMmJihsP3UuZm9yRWFjaChmPT57aS5wdXNoKEtUKGYsITEsbikpfSk6aS5wdXNoKGgpKSx0aGlzLl9kKCJwYXRoIixpLG4pfW9wc1RvUGF0aChlLHIpe2xldCBuPSIiO2ZvcihsZXQgaSBvZiBlLm9wcyl7bGV0IGE9dHlwZW9mIHI9PSJudW1iZXIiJiZyPj0wP2kuZGF0YS5tYXAocz0+K3MudG9GaXhlZChyKSk6aS5kYXRhO3N3aXRjaChpLm9wKXtjYXNlIm1vdmUiOm4rPWBNJHthWzBdfSAke2FbMV19IGA7YnJlYWs7Y2FzZSJiY3VydmVUbyI6bis9YEMke2FbMF19ICR7YVsxXX0sICR7YVsyXX0gJHthWzNdfSwgJHthWzRdfSAke2FbNV19IGA7YnJlYWs7Y2FzZSJsaW5lVG8iOm4rPWBMJHthWzBdfSAke2FbMV19IGB9fXJldHVybiBuLnRyaW0oKX10b1BhdGhzKGUpe2xldCByPWUuc2V0c3x8W10sbj1lLm9wdGlvbnN8fHRoaXMuZGVmYXVsdE9wdGlvbnMsaT1bXTtmb3IobGV0IGEgb2Ygcil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlInBhdGgiOnM9e2Q6dGhpcy5vcHNUb1BhdGgoYSksc3Ryb2tlOm4uc3Ryb2tlLHN0cm9rZVdpZHRoOm4uc3Ryb2tlV2lkdGgsZmlsbDpzb307YnJlYWs7Y2FzZSJmaWxsUGF0aCI6cz17ZDp0aGlzLm9wc1RvUGF0aChhKSxzdHJva2U6c28sc3Ryb2tlV2lkdGg6MCxmaWxsOm4uZmlsbHx8c299O2JyZWFrO2Nhc2UiZmlsbFNrZXRjaCI6cz10aGlzLmZpbGxTa2V0Y2goYSxuKX1zJiZpLnB1c2gocyl9cmV0dXJuIGl9ZmlsbFNrZXRjaChlLHIpe2xldCBuPXIuZmlsbFdlaWdodDtyZXR1cm4gbjwwJiYobj1yLnN0cm9rZVdpZHRoLzIpLHtkOnRoaXMub3BzVG9QYXRoKGUpLHN0cm9rZTpyLmZpbGx8fHNvLHN0cm9rZVdpZHRoOm4sZmlsbDpzb319X21lcmdlZFNoYXBlKGUpe3JldHVybiBlLmZpbHRlcigocixuKT0+bj09PTB8fHIub3AhPT0ibW92ZSIpfX0sTEw9Y2xhc3N7c3RhdGlje28odGhpcywic3QiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY2FudmFzPWUsdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSx0aGlzLmdlbj1uZXcga20ocil9ZHJhdyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmdldERlZmF1bHRPcHRpb25zKCksaT10aGlzLmN0eCxhPWUub3B0aW9ucy5maXhlZERlY2ltYWxQbGFjZURpZ2l0cztmb3IobGV0IHMgb2Ygcilzd2l0Y2gocy50eXBlKXtjYXNlInBhdGgiOmkuc2F2ZSgpLGkuc3Ryb2tlU3R5bGU9bi5zdHJva2U9PT0ibm9uZSI/InRyYW5zcGFyZW50IjpuLnN0cm9rZSxpLmxpbmVXaWR0aD1uLnN0cm9rZVdpZHRoLG4uc3Ryb2tlTGluZURhc2gmJmkuc2V0TGluZURhc2gobi5zdHJva2VMaW5lRGFzaCksbi5zdHJva2VMaW5lRGFzaE9mZnNldCYmKGkubGluZURhc2hPZmZzZXQ9bi5zdHJva2VMaW5lRGFzaE9mZnNldCksdGhpcy5fZHJhd1RvQ29udGV4dChpLHMsYSksaS5yZXN0b3JlKCk7YnJlYWs7Y2FzZSJmaWxsUGF0aCI6e2kuc2F2ZSgpLGkuZmlsbFN0eWxlPW4uZmlsbHx8IiI7bGV0IGw9ZS5zaGFwZT09PSJjdXJ2ZSJ8fGUuc2hhcGU9PT0icG9seWdvbiJ8fGUuc2hhcGU9PT0icGF0aCI/ImV2ZW5vZGQiOiJub256ZXJvIjt0aGlzLl9kcmF3VG9Db250ZXh0KGkscyxhLGwpLGkucmVzdG9yZSgpO2JyZWFrfWNhc2UiZmlsbFNrZXRjaCI6dGhpcy5maWxsU2tldGNoKGkscyxuKX19ZmlsbFNrZXRjaChlLHIsbil7bGV0IGk9bi5maWxsV2VpZ2h0O2k8MCYmKGk9bi5zdHJva2VXaWR0aC8yKSxlLnNhdmUoKSxuLmZpbGxMaW5lRGFzaCYmZS5zZXRMaW5lRGFzaChuLmZpbGxMaW5lRGFzaCksbi5maWxsTGluZURhc2hPZmZzZXQmJihlLmxpbmVEYXNoT2Zmc2V0PW4uZmlsbExpbmVEYXNoT2Zmc2V0KSxlLnN0cm9rZVN0eWxlPW4uZmlsbHx8IiIsZS5saW5lV2lkdGg9aSx0aGlzLl9kcmF3VG9Db250ZXh0KGUscixuLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzKSxlLnJlc3RvcmUoKX1fZHJhd1RvQ29udGV4dChlLHIsbixpPSJub256ZXJvIil7ZS5iZWdpblBhdGgoKTtmb3IobGV0IGEgb2Ygci5vcHMpe2xldCBzPXR5cGVvZiBuPT0ibnVtYmVyIiYmbj49MD9hLmRhdGEubWFwKGw9PitsLnRvRml4ZWQobikpOmEuZGF0YTtzd2l0Y2goYS5vcCl7Y2FzZSJtb3ZlIjplLm1vdmVUbyhzWzBdLHNbMV0pO2JyZWFrO2Nhc2UiYmN1cnZlVG8iOmUuYmV6aWVyQ3VydmVUbyhzWzBdLHNbMV0sc1syXSxzWzNdLHNbNF0sc1s1XSk7YnJlYWs7Y2FzZSJsaW5lVG8iOmUubGluZVRvKHNbMF0sc1sxXSl9fXIudHlwZT09PSJmaWxsUGF0aCI/ZS5maWxsKGkpOmUuc3Ryb2tlKCl9Z2V0IGdlbmVyYXRvcigpe3JldHVybiB0aGlzLmdlbn1nZXREZWZhdWx0T3B0aW9ucygpe3JldHVybiB0aGlzLmdlbi5kZWZhdWx0T3B0aW9uc31saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ubGluZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyksc31yZWN0YW5nbGUoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5yZWN0YW5nbGUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpLHN9ZWxsaXBzZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLmVsbGlwc2UoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpLHN9Y2lyY2xlKGUscixuLGkpe2xldCBhPXRoaXMuZ2VuLmNpcmNsZShlLHIsbixpKTtyZXR1cm4gdGhpcy5kcmF3KGEpLGF9bGluZWFyUGF0aChlLHIpe2xldCBuPXRoaXMuZ2VuLmxpbmVhclBhdGgoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59cG9seWdvbihlLHIpe2xldCBuPXRoaXMuZ2VuLnBvbHlnb24oZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59YXJjKGUscixuLGksYSxzLGw9ITEsdSl7bGV0IGg9dGhpcy5nZW4uYXJjKGUscixuLGksYSxzLGwsdSk7cmV0dXJuIHRoaXMuZHJhdyhoKSxofWN1cnZlKGUscil7bGV0IG49dGhpcy5nZW4uY3VydmUoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59cGF0aChlLHIpe2xldCBuPXRoaXMuZ2VuLnBhdGgoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59fSxqVD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFJMPWNsYXNze3N0YXRpY3tvKHRoaXMsIm90Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnN2Zz1lLHRoaXMuZ2VuPW5ldyBrbShyKX1kcmF3KGUpe2xldCByPWUuc2V0c3x8W10sbj1lLm9wdGlvbnN8fHRoaXMuZ2V0RGVmYXVsdE9wdGlvbnMoKSxpPXRoaXMuc3ZnLm93bmVyRG9jdW1lbnR8fHdpbmRvdy5kb2N1bWVudCxhPWkuY3JlYXRlRWxlbWVudE5TKGpULCJnIikscz1lLm9wdGlvbnMuZml4ZWREZWNpbWFsUGxhY2VEaWdpdHM7Zm9yKGxldCBsIG9mIHIpe2xldCB1PW51bGw7c3dpdGNoKGwudHlwZSl7Y2FzZSJwYXRoIjp1PWkuY3JlYXRlRWxlbWVudE5TKGpULCJwYXRoIiksdS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMub3BzVG9QYXRoKGwscykpLHUuc2V0QXR0cmlidXRlKCJzdHJva2UiLG4uc3Ryb2tlKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixuLnN0cm9rZVdpZHRoKyIiKSx1LnNldEF0dHJpYnV0ZSgiZmlsbCIsIm5vbmUiKSxuLnN0cm9rZUxpbmVEYXNoJiZ1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIsbi5zdHJva2VMaW5lRGFzaC5qb2luKCIgIikudHJpbSgpKSxuLnN0cm9rZUxpbmVEYXNoT2Zmc2V0JiZ1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hvZmZzZXQiLGAke24uc3Ryb2tlTGluZURhc2hPZmZzZXR9YCk7YnJlYWs7Y2FzZSJmaWxsUGF0aCI6dT1pLmNyZWF0ZUVsZW1lbnROUyhqVCwicGF0aCIpLHUuc2V0QXR0cmlidXRlKCJkIix0aGlzLm9wc1RvUGF0aChsLHMpKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwibm9uZSIpLHUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCIwIiksdS5zZXRBdHRyaWJ1dGUoImZpbGwiLG4uZmlsbHx8IiIpLGUuc2hhcGUhPT0iY3VydmUiJiZlLnNoYXBlIT09InBvbHlnb24ifHx1LnNldEF0dHJpYnV0ZSgiZmlsbC1ydWxlIiwiZXZlbm9kZCIpO2JyZWFrO2Nhc2UiZmlsbFNrZXRjaCI6dT10aGlzLmZpbGxTa2V0Y2goaSxsLG4pfXUmJmEuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGF9ZmlsbFNrZXRjaChlLHIsbil7bGV0IGk9bi5maWxsV2VpZ2h0O2k8MCYmKGk9bi5zdHJva2VXaWR0aC8yKTtsZXQgYT1lLmNyZWF0ZUVsZW1lbnROUyhqVCwicGF0aCIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5vcHNUb1BhdGgocixuLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzKSksYS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsbi5maWxsfHwiIiksYS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsaSsiIiksYS5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIiksbi5maWxsTGluZURhc2gmJmEuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IixuLmZpbGxMaW5lRGFzaC5qb2luKCIgIikudHJpbSgpKSxuLmZpbGxMaW5lRGFzaE9mZnNldCYmYS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixgJHtuLmZpbGxMaW5lRGFzaE9mZnNldH1gKSxhfWdldCBnZW5lcmF0b3IoKXtyZXR1cm4gdGhpcy5nZW59Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5nZW4uZGVmYXVsdE9wdGlvbnN9b3BzVG9QYXRoKGUscil7cmV0dXJuIHRoaXMuZ2VuLm9wc1RvUGF0aChlLHIpfWxpbmUoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5saW5lKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKX1yZWN0YW5nbGUoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5yZWN0YW5nbGUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpfWVsbGlwc2UoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5lbGxpcHNlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKX1jaXJjbGUoZSxyLG4saSl7bGV0IGE9dGhpcy5nZW4uY2lyY2xlKGUscixuLGkpO3JldHVybiB0aGlzLmRyYXcoYSl9bGluZWFyUGF0aChlLHIpe2xldCBuPXRoaXMuZ2VuLmxpbmVhclBhdGgoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pfXBvbHlnb24oZSxyKXtsZXQgbj10aGlzLmdlbi5wb2x5Z29uKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1hcmMoZSxyLG4saSxhLHMsbD0hMSx1KXtsZXQgaD10aGlzLmdlbi5hcmMoZSxyLG4saSxhLHMsbCx1KTtyZXR1cm4gdGhpcy5kcmF3KGgpfWN1cnZlKGUscil7bGV0IG49dGhpcy5nZW4uY3VydmUoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pfXBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5wYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX19LGplPXtjYW52YXM6bygodCxlKT0+bmV3IExMKHQsZSksImNhbnZhcyIpLHN2ZzpvKCh0LGUpPT5uZXcgUkwodCxlKSwic3ZnIiksZ2VuZXJhdG9yOm8odD0+bmV3IGttKHQpLCJnZW5lcmF0b3IiKSxuZXdTZWVkOm8oKCk9PmttLm5ld1NlZWQoKSwibmV3U2VlZCIpfX0pO2Z1bmN0aW9uIFlRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnJ9PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldCBuPWh0KGUpLGk9bjtufHwoaT0iYW5jaG9yIik7bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHM9MSx7Y3NzU3R5bGVzOmx9PWUsdT1qZS5zdmcoYSksaD1RZShlLHtmaWxsOiJibGFjayIsc3Ryb2tlOiJub25lIixmaWxsU3R5bGU6InNvbGlkIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoaC5yb3VnaG5lc3M9MCk7bGV0IGY9dS5jaXJjbGUoMCwwLHMqMixoKSxkPWEuaW5zZXJ0KCgpPT5mLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gZC5hdHRyKCJjbGFzcyIsImFuY2hvciIpLmF0dHIoInN0eWxlIix6bihsKSksS2UoZSxkKSxlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWC5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLHMscCksWGUuY2lyY2xlKGUscyxwKX0sYX12YXIgWFE9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7SHQoKTt6dCgpO1d0KCk7ZXIoKTtvKFlRLCJhbmNob3IiKX0pO2Z1bmN0aW9uIGpRKHQsZSxyLG4saSxhLHMpe2xldCB1PSh0K3IpLzIsaD0oZStuKS8yLGY9TWF0aC5hdGFuMihuLWUsci10KSxkPShyLXQpLzIscD0obi1lKS8yLG09ZC9pLGc9cC9hLHk9TWF0aC5zcXJ0KG0qKjIrZyoqMik7aWYoeT4xKXRocm93IG5ldyBFcnJvcigiVGhlIGdpdmVuIHJhZGlpIGFyZSB0b28gc21hbGwgdG8gY3JlYXRlIGFuIGFyYyBiZXR3ZWVuIHRoZSBwb2ludHMuIik7bGV0IHY9TWF0aC5zcXJ0KDEteSoqMikseD11K3YqYSpNYXRoLnNpbihmKSoocz8tMToxKSxiPWgtdippKk1hdGguY29zKGYpKihzPy0xOjEpLFQ9TWF0aC5hdGFuMigoZS1iKS9hLCh0LXgpL2kpLHc9TWF0aC5hdGFuMigobi1iKS9hLChyLXgpL2kpLVQ7cyYmdzwwJiYodys9MipNYXRoLlBJKSwhcyYmdz4wJiYody09MipNYXRoLlBJKTtsZXQgRT1bXTtmb3IobGV0IF89MDtfPDIwO18rKyl7bGV0IEM9Xy8xOSxEPVQrQyp3LE89eCtpKk1hdGguY29zKEQpLFI9YithKk1hdGguc2luKEQpO0UucHVzaCh7eDpPLHk6Un0pfXJldHVybiBFfWFzeW5jIGZ1bmN0aW9uIEtRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz1hLndpZHRoK2UucGFkZGluZysyMCxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PWwvMixoPXUvKDIuNStsLzUwKSx7Y3NzU3R5bGVzOmZ9PWUsZD1be3g6cy8yLHk6LWwvMn0se3g6LXMvMix5Oi1sLzJ9LC4uLmpRKC1zLzIsLWwvMiwtcy8yLGwvMixoLHUsITEpLHt4OnMvMix5OmwvMn0sLi4ualEocy8yLGwvMixzLzIsLWwvMixoLHUsITApXSxwPWplLnN2ZyhpKSxtPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1YdChkKSx5PXAucGF0aChnLG0pLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpO3JldHVybiB2LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gvMn0sIDApYCksS2UoZSx2KSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWGUucG9seWdvbihlLGQseCl9LGl9dmFyIFFRPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtvKGpRLCJnZW5lcmF0ZUFyY1BvaW50cyIpO28oS1EsImJvd1RpZVJlY3QiKX0pO2Z1bmN0aW9uIE1hKHQsZSxyLG4pe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkueCsiLCIraS55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK3IvMisiKSIpfXZhciBJdT1OKCgpPT57InVzZSBzdHJpY3QiO28oTWEsImluc2VydFBvbHlnb25TaGFwZSIpfSk7YXN5bmMgZnVuY3Rpb24gWlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgbXQodCxlLGh0KGUpKSxzPWEuaGVpZ2h0K2UucGFkZGluZyxsPTEyLHU9YS53aWR0aCtlLnBhZGRpbmcrbCxoPTAsZj11LGQ9LXMscD0wLG09W3t4OmgrbCx5OmR9LHt4OmYseTpkfSx7eDpmLHk6cH0se3g6aCx5OnB9LHt4OmgseTpkK2x9LHt4OmgrbCx5OmR9XSxnLHtjc3NTdHlsZXM6eX09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHY9amUuc3ZnKGkpLHg9UWUoZSx7fSksYj1YdChtKSxUPXYucGF0aChiLHgpO2c9aS5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAke3MvMn0pYCkseSYmZy5hdHRyKCJzdHlsZSIseSl9ZWxzZSBnPU1hKGksdSxzLG0pO3JldHVybiBuJiZnLmF0dHIoInN0eWxlIixuKSxLZShlLGcpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHYpe3JldHVybiBYZS5wb2x5Z29uKGUsbSx2KX0saX12YXIgSlE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7RnQoKTtvKFpRLCJjYXJkIil9KTtmdW5jdGlvbiBlWih0LGUpe2xldHtub2RlU3R5bGVzOnJ9PVllKGUpO2UubGFiZWw9IiI7bGV0IG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOml9PWUsYT1NYXRoLm1heCgyOCxlLndpZHRoPz8wKSxzPVt7eDowLHk6YS8yfSx7eDphLzIseTowfSx7eDowLHk6LWEvMn0se3g6LWEvMix5OjB9XSxsPWplLnN2ZyhuKSx1PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYodS5yb3VnaG5lc3M9MCx1LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgaD1YdChzKSxmPWwucGF0aChoLHUpLGQ9bi5pbnNlcnQoKCk9PmYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpJiZlLmxvb2shPT0iaGFuZERyYXduIiYmZC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsaSksciYmZS5sb29rIT09ImhhbmREcmF3biImJmQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHIpLGUud2lkdGg9MjgsZS5oZWlnaHQ9MjgsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFhlLnBvbHlnb24oZSxzLHApfSxufXZhciB0Wj1OKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7V3QoKTt6dCgpO0Z0KCk7byhlWiwiY2hvaWNlIil9KTthc3luYyBmdW5jdGlvbiByWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGhhbGZQYWRkaW5nOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1hLndpZHRoLzIrcyx1LHtjc3NTdHlsZXM6aH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGY9amUuc3ZnKGkpLGQ9UWUoZSx7fSkscD1mLmNpcmNsZSgwLDAsbCoyLGQpO3U9aS5pbnNlcnQoKCk9PnAsIjpmaXJzdC1jaGlsZCIpLHUuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsem4oaCkpfWVsc2UgdT1pLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigiciIsbCkuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKTtyZXR1cm4gS2UoZSx1KSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gWC5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLGwsZiksWGUuY2lyY2xlKGUsbCxmKX0saX12YXIgblo9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7SHQoKTt6dCgpO1d0KCk7ZXIoKTtvKHJaLCJjaXJjbGUiKX0pO2Z1bmN0aW9uIE9EZSh0KXtsZXQgZT1NYXRoLmNvcyhNYXRoLlBJLzQpLHI9TWF0aC5zaW4oTWF0aC5QSS80KSxuPXQqMixpPXt4Om4vMiplLHk6bi8yKnJ9LGE9e3g6LShuLzIpKmUseTpuLzIqcn0scz17eDotKG4vMikqZSx5Oi0obi8yKSpyfSxsPXt4Om4vMiplLHk6LShuLzIpKnJ9O3JldHVybmBNICR7YS54fSwke2EueX0gTCAke2wueH0sJHtsLnl9CiAgICAgICAgICAgICAgICAgICBNICR7aS54fSwke2kueX0gTCAke3MueH0sJHtzLnl9YH1mdW5jdGlvbiBpWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXIsZS5sYWJlbD0iIjtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixodChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLGE9TWF0aC5tYXgoMzAsZT8ud2lkdGg/PzApLHtjc3NTdHlsZXM6c309ZSxsPWplLnN2ZyhpKSx1PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYodS5yb3VnaG5lc3M9MCx1LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgaD1sLmNpcmNsZSgwLDAsYSoyLHUpLGY9T0RlKGEpLGQ9bC5wYXRoKGYsdSkscD1pLmluc2VydCgoKT0+aCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHAuaW5zZXJ0KCgpPT5kKSxzJiZlLmxvb2shPT0iaGFuZERyYXduIiYmcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscyksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEtlKGUscCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFguaW5mbygiY3Jvc3NlZENpcmNsZSBpbnRlcnNlY3QiLGUse3JhZGl1czphLHBvaW50Om19KSxYZS5jaXJjbGUoZSxhLG0pfSxpfXZhciBhWj1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7RnQoKTt6dCgpO1d0KCk7SHQoKTtvKE9EZSwiY3JlYXRlTGluZSIpO28oaVosImNyb3NzZWRDaXJjbGUiKX0pO2Z1bmN0aW9uIEtoKHQsZSxyLG49MTAwLGk9MCxhPTE4MCl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Oi1tLHk6LWd9KX1yZXR1cm4gc31hc3luYyBmdW5jdGlvbiBzWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1hLndpZHRoKyhlLnBhZGRpbmc/PzApLHU9YS5oZWlnaHQrKGUucGFkZGluZz8/MCksaD1NYXRoLm1heCg1LHUqLjEpLHtjc3NTdHlsZXM6Zn09ZSxkPVsuLi5LaChsLzIsLXUvMixoLDMwLC05MCwwKSx7eDotbC8yLWgseTpofSwuLi5LaChsLzIraCoyLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5LaChsLzIraCoyLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6LXUvMn0sLi4uS2gobC8yLHUvMixoLDIwLDAsOTApXSxwPVt7eDpsLzIseTotdS8yLWh9LHt4Oi1sLzIseTotdS8yLWh9LC4uLktoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4Oi1sLzItaCx5Oi1ofSwuLi5LaChsLzIrbCouMSwtaCxoLDIwLC0xODAsLTI3MCksLi4uS2gobC8yK2wqLjEsaCxoLDIwLC05MCwtMTgwKSx7eDotbC8yLWgseTp1LzJ9LC4uLktoKGwvMix1LzIsaCwyMCwwLDkwKSx7eDotbC8yLHk6dS8yK2h9LHt4OmwvMix5OnUvMitofV0sbT1qZS5zdmcoaSksZz1RZShlLHtmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1YdChkKS5yZXBsYWNlKCJaIiwiIikseD1tLnBhdGgodixnKSxiPVh0KHApLFQ9bS5wYXRoKGIsey4uLmd9KSxTPWkuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFMuaW5zZXJ0KCgpPT5ULCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCksUy5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJ0ZXh0IiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJlMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxTLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2h9LCAwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMitoLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHcpe3JldHVybiBYZS5wb2x5Z29uKGUscCx3KX0saX12YXIgb1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28oS2gsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIik7byhzWiwiY3VybHlCcmFjZUxlZnQiKX0pO2Z1bmN0aW9uIFFoKHQsZSxyLG49MTAwLGk9MCxhPTE4MCl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Om0seTpnfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gbFoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uUWgobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6bC8yK2gseTotaH0sLi4uUWgobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uUWgobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4OmwvMitoLHk6dS8yfSwuLi5RaChsLzIsdS8yLGgsMjAsMCw5MCldLHA9W3t4Oi1sLzIseTotdS8yLWh9LHt4OmwvMix5Oi11LzItaH0sLi4uUWgobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6bC8yK2gseTotaH0sLi4uUWgobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uUWgobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4OmwvMitoLHk6dS8yfSwuLi5RaChsLzIsdS8yLGgsMjAsMCw5MCkse3g6bC8yLHk6dS8yK2h9LHt4Oi1sLzIseTp1LzIraH1dLG09amUuc3ZnKGkpLGc9UWUoZSx7ZmlsbDoibm9uZSJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9WHQoZCkucmVwbGFjZSgiWiIsIiIpLHg9bS5wYXRoKHYsZyksYj1YdChwKSxUPW0ucGF0aChiLHsuLi5nfSksUz1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBTLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLFMuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxTLmF0dHIoImNsYXNzIiwidGV4dCIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmUy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstaH0sIDApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LXUvMisoZS5wYWRkaW5nPz8wKS8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsUyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odyl7cmV0dXJuIFhlLnBvbHlnb24oZSxwLHcpfSxpfXZhciBjWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhRaCwiZ2VuZXJhdGVDaXJjbGVQb2ludHMiKTtvKGxaLCJjdXJseUJyYWNlUmlnaHQiKX0pO2Z1bmN0aW9uIElhKHQsZSxyLG49MTAwLGk9MCxhPTE4MCl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Oi1tLHk6LWd9KX1yZXR1cm4gc31hc3luYyBmdW5jdGlvbiB1Wih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1hLndpZHRoKyhlLnBhZGRpbmc/PzApLHU9YS5oZWlnaHQrKGUucGFkZGluZz8/MCksaD1NYXRoLm1heCg1LHUqLjEpLHtjc3NTdHlsZXM6Zn09ZSxkPVsuLi5JYShsLzIsLXUvMixoLDMwLC05MCwwKSx7eDotbC8yLWgseTpofSwuLi5JYShsLzIraCoyLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5JYShsLzIraCoyLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6LXUvMn0sLi4uSWEobC8yLHUvMixoLDIwLDAsOTApXSxwPVsuLi5JYSgtbC8yK2graC8yLC11LzIsaCwyMCwtOTAsLTE4MCkse3g6bC8yLWgvMix5Omh9LC4uLklhKC1sLzItaC8yLC1oLGgsMjAsMCw5MCksLi4uSWEoLWwvMi1oLzIsaCxoLDIwLC05MCwwKSx7eDpsLzItaC8yLHk6LWh9LC4uLklhKC1sLzIraCtoLzIsdS8yLGgsMzAsLTE4MCwtMjcwKV0sbT1be3g6bC8yLHk6LXUvMi1ofSx7eDotbC8yLHk6LXUvMi1ofSwuLi5JYShsLzIsLXUvMixoLDIwLC05MCwwKSx7eDotbC8yLWgseTotaH0sLi4uSWEobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uSWEobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5OnUvMn0sLi4uSWEobC8yLHUvMixoLDIwLDAsOTApLHt4Oi1sLzIseTp1LzIraH0se3g6bC8yLWgtaC8yLHk6dS8yK2h9LC4uLklhKC1sLzIraCtoLzIsLXUvMixoLDIwLC05MCwtMTgwKSx7eDpsLzItaC8yLHk6aH0sLi4uSWEoLWwvMi1oLzIsLWgsaCwyMCwwLDkwKSwuLi5JYSgtbC8yLWgvMixoLGgsMjAsLTkwLDApLHt4OmwvMi1oLzIseTotaH0sLi4uSWEoLWwvMitoK2gvMix1LzIsaCwzMCwtMTgwLC0yNzApXSxnPWplLnN2ZyhpKSx5PVFlKGUse2ZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJih5LnJvdWdobmVzcz0wLHkuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PVh0KGQpLnJlcGxhY2UoIloiLCIiKSxiPWcucGF0aCh4LHkpLFM9WHQocCkucmVwbGFjZSgiWiIsIiIpLHc9Zy5wYXRoKFMseSksRT1YdChtKSxfPWcucGF0aChFLHsuLi55fSksQz1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBDLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLEMuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxDLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIiksQy5hdHRyKCJjbGFzcyIsInRleHQiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJkMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aC1oLzR9LCAwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS8yLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLEMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEQpe3JldHVybiBYZS5wb2x5Z29uKGUsbSxEKX0saX12YXIgaFo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28oSWEsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIik7byh1WiwiY3VybHlCcmFjZXMiKX0pO2FzeW5jIGZ1bmN0aW9uIGZaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz04MCxsPTIwLHU9TWF0aC5tYXgocywoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyKSoxLjI1LGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwsYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9aC8yLHtjc3NTdHlsZXM6ZH09ZSxwPWplLnN2ZyhpKSxtPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz11LHk9aCx2PWctZix4PXkvNCxiPVt7eDp2LHk6MH0se3gseTowfSx7eDowLHk6eS8yfSx7eCx5fSx7eDp2LHl9LC4uLldUKC12LC15LzIsZiw1MCwyNzAsOTApXSxUPVh0KGIpLFM9cC5wYXRoKFQsbSksdz1pLmluc2VydCgoKT0+UywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSx3LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAkey1oLzJ9KWApLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSxiLEUpfSxpfXZhciBkWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhmWiwiY3VydmVkVHJhcGV6b2lkIil9KTthc3luYyBmdW5jdGlvbiBwWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoK2UucGFkZGluZyxlLndpZHRoPz8wKSx1PWwvMixoPXUvKDIuNStsLzUwKSxmPU1hdGgubWF4KGEuaGVpZ2h0K2grZS5wYWRkaW5nLGUuaGVpZ2h0Pz8wKSxkLHtjc3NTdHlsZXM6cH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IG09amUuc3ZnKGkpLGc9QkRlKDAsMCxsLGYsdSxoKSx5PUZEZSgwLGgsbCxmLHUsaCksdj1tLnBhdGgoZyxRZShlLHt9KSkseD1tLnBhdGgoeSxRZShlLHtmaWxsOiJub25lIn0pKTtkPWkuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxkPWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKSxkLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZC5hdHRyKCJzdHlsZSIscCl9ZWxzZXtsZXQgbT1QRGUoMCwwLGwsZix1LGgpO2Q9aS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixtKS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIix6bihwKSkuYXR0cigic3R5bGUiLG4pfXJldHVybiBkLmF0dHIoImxhYmVsLW9mZnNldC15IixoKSxkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzJ9LCAkey0oZi8yK2gpfSlgKSxLZShlLGQpLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpKyhlLnBhZGRpbmc/PzApLzEuNS0oYS55LShhLnRvcD8/MCkpfSlgKSxlLmludGVyc2VjdD1mdW5jdGlvbihtKXtsZXQgZz1YZS5yZWN0KGUsbSkseT1nLngtKGUueD8/MCk7aWYodSE9MCYmKE1hdGguYWJzKHkpPChlLndpZHRoPz8wKS8yfHxNYXRoLmFicyh5KT09KGUud2lkdGg/PzApLzImJk1hdGguYWJzKGcueS0oZS55Pz8wKSk+KGUuaGVpZ2h0Pz8wKS8yLWgpKXtsZXQgdj1oKmgqKDEteSp5Lyh1KnUpKTt2PjAmJih2PU1hdGguc3FydCh2KSksdj1oLXYsbS55LShlLnk/PzApPjAmJih2PS12KSxnLnkrPXZ9cmV0dXJuIGd9LGl9dmFyIFBEZSxCRGUsRkRlLG1aPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtlcigpO1BEZT1vKCh0LGUscixuLGksYSk9PltgTSR7dH0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWBdLmpvaW4oIiAiKSwiY3JlYXRlQ3lsaW5kZXJQYXRoRCIpLEJEZT1vKCh0LGUscixuLGksYSk9PltgTSR7dH0sJHtlK2F9YCxgTSR7dCtyfSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWBdLmpvaW4oIiAiKSwiY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEIiksRkRlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0LXIvMn0sJHstbi8yfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYF0uam9pbigiICIpLCJjcmVhdGVJbm5lckN5bGluZGVyUGF0aEQiKTtvKHBaLCJjeWxpbmRlciIpfSk7YXN5bmMgZnVuY3Rpb24gZ1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9YS53aWR0aCtlLnBhZGRpbmcsdT1hLmhlaWdodCtlLnBhZGRpbmcsaD11Ki4yLGY9LWwvMixkPS11LzItaC8yLHtjc3NTdHlsZXM6cH09ZSxtPWplLnN2ZyhpKSxnPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeT1be3g6Zix5OmQraH0se3g6LWYseTpkK2h9LHt4Oi1mLHk6LWR9LHt4OmYseTotZH0se3g6Zix5OmR9LHt4Oi1mLHk6ZH0se3g6LWYseTpkK2h9XSx2PW0ucG9seWdvbih5Lm1hcChiPT5bYi54LGIueV0pLGcpLHg9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2YrKGUucGFkZGluZz8/MCkvMi0oYS54LShhLmxlZnQ/PzApKX0sICR7ZCtoKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucmVjdChlLGIpfSxpfXZhciB5Wj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhnWiwiZGl2aWRlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gdloodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxoYWxmUGFkZGluZzpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHU9YS53aWR0aC8yK3MrNSxoPWEud2lkdGgvMitzLGYse2Nzc1N0eWxlczpkfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgcD1qZS5zdmcoaSksbT1RZShlLHtyb3VnaG5lc3M6LjIsc3Ryb2tlV2lkdGg6Mi41fSksZz1RZShlLHtyb3VnaG5lc3M6LjIsc3Ryb2tlV2lkdGg6MS41fSkseT1wLmNpcmNsZSgwLDAsdSoyLG0pLHY9cC5jaXJjbGUoMCwwLGgqMixnKTtmPWkuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksZi5hdHRyKCJjbGFzcyIsem4oZS5jc3NDbGFzc2VzKSkuYXR0cigic3R5bGUiLHpuKGQpKSxmLm5vZGUoKT8uYXBwZW5kQ2hpbGQoeSksZi5ub2RlKCk/LmFwcGVuZENoaWxkKHYpfWVsc2V7Zj1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO2xldCBwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxtPWYuaW5zZXJ0KCJjaXJjbGUiKTtmLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLHAuYXR0cigiY2xhc3MiLCJvdXRlci1jaXJjbGUiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigiciIsdSkuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKSxtLmF0dHIoImNsYXNzIiwiaW5uZXItY2lyY2xlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLGgpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCl9cmV0dXJuIEtlKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFguaW5mbygiRG91YmxlQ2lyY2xlIGludGVyc2VjdCIsZSx1LHApLFhlLmNpcmNsZShlLHUscCl9LGl9dmFyIHhaPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtGdCgpO0h0KCk7enQoKTtXdCgpO2VyKCk7byh2WiwiZG91YmxlY2lyY2xlIil9KTtmdW5jdGlvbiBiWih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cn19KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVllKGUpO2UubGFiZWw9IiIsZS5sYWJlbFN0eWxlPW47bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSxzPTcse2Nzc1N0eWxlczpsfT1lLHU9amUuc3ZnKGEpLHtub2RlQm9yZGVyOmh9PXIsZj1RZShlLHtmaWxsU3R5bGU6InNvbGlkIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZi5yb3VnaG5lc3M9MCk7bGV0IGQ9dS5jaXJjbGUoMCwwLHMqMixmKSxwPWEuaW5zZXJ0KCgpPT5kLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYGZpbGw6ICR7aH0gIWltcG9ydGFudDtgKSxsJiZsLmxlbmd0aD4wJiZlLmxvb2shPT0iaGFuZERyYXduIiYmcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbCksaSYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLEtlKGUscCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFguaW5mbygiZmlsbGVkQ2lyY2xlIGludGVyc2VjdCIsZSx7cmFkaXVzOnMscG9pbnQ6bX0pLFhlLmNpcmNsZShlLHMsbSl9LGF9dmFyIFRaPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTt5dCgpO0h0KCk7enQoKTtGdCgpO28oYlosImZpbGxlZENpcmNsZSIpfSk7YXN5bmMgZnVuY3Rpb24gd1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWwrYS5oZWlnaHQsaD1sK2EuaGVpZ2h0LGY9W3t4OjAseTotdX0se3g6aCx5Oi11fSx7eDpoLzIseTowfV0se2Nzc1N0eWxlczpkfT1lLHA9amUuc3ZnKGkpLG09UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVh0KGYpLHk9cC5wYXRoKGcsbSksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMn0sICR7dS8yfSlgKTtyZXR1cm4gZCYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1sLGUuaGVpZ2h0PXUsS2UoZSx2KSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey11LzIrKGUucGFkZGluZz8/MCkvMisoYS55LShhLnRvcD8/MCkpfSlgKSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWC5pbmZvKCJUcmlhbmdsZSBpbnRlcnNlY3QiLGUsZix4KSxYZS5wb2x5Z29uKGUsZix4KX0saX12YXIga1o9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7SHQoKTt6dCgpO1d0KCk7RnQoKTtvKHdaLCJmbGlwcGVkVHJpYW5nbGUiKX0pO2Z1bmN0aW9uIEVaKHQsZSx7ZGlyOnIsY29uZmlnOntzdGF0ZTpuLHRoZW1lVmFyaWFibGVzOml9fSl7bGV0e25vZGVTdHlsZXM6YX09WWUoZSk7ZS5sYWJlbD0iIjtsZXQgcz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixodChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLHtjc3NTdHlsZXM6bH09ZSx1PU1hdGgubWF4KDcwLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KDEwLGU/LmhlaWdodD8/MCk7cj09PSJMUiImJih1PU1hdGgubWF4KDEwLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KDcwLGU/LmhlaWdodD8/MCkpO2xldCBmPS0xKnUvMixkPS0xKmgvMixwPWplLnN2ZyhzKSxtPVFlKGUse3N0cm9rZTppLmxpbmVDb2xvcixmaWxsOmkubGluZUNvbG9yfSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPXAucmVjdGFuZ2xlKGYsZCx1LGgsbSkseT1zLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIik7bCYmZS5sb29rIT09ImhhbmREcmF3biImJnkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLGEmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixhKSxLZShlLHkpO2xldCB2PW4/LnBhZGRpbmc/PzA7cmV0dXJuIGUud2lkdGgmJmUuaGVpZ2h0JiYoZS53aWR0aCs9di8yfHwwLGUuaGVpZ2h0Kz12LzJ8fDApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBYZS5yZWN0KGUseCl9LHN9dmFyIFNaPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTtIdCgpO3p0KCk7RnQoKTtvKEVaLCJmb3JrSm9pbiIpfSk7YXN5bmMgZnVuY3Rpb24gQ1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldCBpPTgwLGE9NTAse3NoYXBlU3ZnOnMsYmJveDpsfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHU9TWF0aC5tYXgoaSxsLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoYSxsLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZj1oLzIse2Nzc1N0eWxlczpkfT1lLHA9amUuc3ZnKHMpLG09UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVt7eDotdS8yLHk6LWgvMn0se3g6dS8yLWYseTotaC8yfSwuLi5XVCgtdS8yK2YsMCxmLDUwLDkwLDI3MCkse3g6dS8yLWYseTpoLzJ9LHt4Oi11LzIseTpoLzJ9XSx5PVh0KGcpLHY9cC5wYXRoKHksbSkseD1zLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHguYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxLZShlLHgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBYLmluZm8oIlBpbGwgaW50ZXJzZWN0IixlLHtyYWRpdXM6Zixwb2ludDpifSksWGUucG9seWdvbihlLGcsYil9LHN9dmFyIEFaPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtGdCgpO0h0KCk7enQoKTtXdCgpO28oQ1osImhhbGZSb3VuZGVkUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBfWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9NCxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PWwvcyxoPWEud2lkdGgrMip1K2UucGFkZGluZyxmPVt7eDp1LHk6MH0se3g6aC11LHk6MH0se3g6aCx5Oi1sLzJ9LHt4OmgtdSx5Oi1sfSx7eDp1LHk6LWx9LHt4OjAseTotbC8yfV0sZCx7Y3NzU3R5bGVzOnB9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBtPWplLnN2ZyhpKSxnPVFlKGUse30pLHk9JERlKDAsMCxoLGwsdSksdj1tLnBhdGgoeSxnKTtkPWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstaC8yfSwgJHtsLzJ9KWApLHAmJmQuYXR0cigic3R5bGUiLHApfWVsc2UgZD1NYShpLGgsbCxmKTtyZXR1cm4gbiYmZC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1oLGUuaGVpZ2h0PWwsS2UoZSxkKSxlLmludGVyc2VjdD1mdW5jdGlvbihtKXtyZXR1cm4gWGUucG9seWdvbihlLGYsbSl9LGl9dmFyICREZSxEWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7SXUoKTskRGU9bygodCxlLHIsbixpKT0+W2BNJHt0K2l9LCR7ZX1gLGBMJHt0K3ItaX0sJHtlfWAsYEwke3Qrcn0sJHtlLW4vMn1gLGBMJHt0K3ItaX0sJHtlLW59YCxgTCR7dCtpfSwke2Utbn1gLGBMJHt0fSwke2Utbi8yfWAsIloiXS5qb2luKCIgIiksImNyZWF0ZUhleGFnb25QYXRoRCIpO28oX1osImhleGFnb24iKX0pO2FzeW5jIGZ1bmN0aW9uIExaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsPSIiLGUubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGE9TWF0aC5tYXgoMzAsZT8ud2lkdGg/PzApLHM9TWF0aC5tYXgoMzAsZT8uaGVpZ2h0Pz8wKSx7Y3NzU3R5bGVzOmx9PWUsdT1qZS5zdmcoaSksaD1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGgucm91Z2huZXNzPTAsaC5maWxsU3R5bGU9InNvbGlkIik7bGV0IGY9W3t4OjAseTowfSx7eDphLHk6MH0se3g6MCx5OnN9LHt4OmEseTpzfV0sZD1YdChmKSxwPXUucGF0aChkLGgpLG09aS5pbnNlcnQoKCk9PnAsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBtLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbCYmZS5sb29rIT09ImhhbmREcmF3biImJm0uc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJm0uc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksbS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYS8yfSwgJHstcy8yfSlgKSxLZShlLG0pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGcpe3JldHVybiBYLmluZm8oIlBpbGwgaW50ZXJzZWN0IixlLHtwb2ludHM6Zn0pLFhlLnBvbHlnb24oZSxmLGcpfSxpfXZhciBSWj1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7RnQoKTtIdCgpO3p0KCk7V3QoKTtvKExaLCJob3VyZ2xhc3MiKX0pO2FzeW5jIGZ1bmN0aW9uIE5aKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyLGZsb3djaGFydDpufX0pe2xldHtsYWJlbFN0eWxlczppfT1ZZShlKTtlLmxhYmVsU3R5bGU9aTtsZXQgYT1lLmFzc2V0SGVpZ2h0Pz80OCxzPWUuYXNzZXRXaWR0aD8/NDgsbD1NYXRoLm1heChhLHMpLHU9bj8ud3JhcHBpbmdXaWR0aDtlLndpZHRoPU1hdGgubWF4KGwsdT8/MCk7bGV0e3NoYXBlU3ZnOmgsYmJveDpmLGxhYmVsOmR9PWF3YWl0IG10KHQsZSwiaWNvbi1zaGFwZSBkZWZhdWx0IikscD1lLnBvcz09PSJ0IixtPWwsZz1sLHtub2RlQm9yZGVyOnl9PXIse3N0eWxlc01hcDp2fT1iYyhlKSx4PS1nLzIsYj0tbS8yLFQ9ZS5sYWJlbD84OjAsUz1qZS5zdmcoaCksdz1RZShlLHtzdHJva2U6Im5vbmUiLGZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJih3LnJvdWdobmVzcz0wLHcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBFPVMucmVjdGFuZ2xlKHgsYixnLG0sdyksXz1NYXRoLm1heChnLGYud2lkdGgpLEM9bStmLmhlaWdodCtULEQ9Uy5yZWN0YW5nbGUoLV8vMiwtQy8yLF8sQyx7Li4udyxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLE89aC5pbnNlcnQoKCk9PkUsIjpmaXJzdC1jaGlsZCIpLFI9aC5pbnNlcnQoKCk9PkQpO2lmKGUuaWNvbil7bGV0IGs9aC5hcHBlbmQoImciKTtrLmh0bWwoYDxnPiR7YXdhaXQgRXMoZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBMPWsubm9kZSgpLmdldEJCb3goKSxBPUwud2lkdGgsST1MLmhlaWdodCxNPUwueCxQPUwueTtrLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1BLzItTX0sJHtwP2YuaGVpZ2h0LzIrVC8yLUkvMi1QOi1mLmhlaWdodC8yLVQvMi1JLzItUH0pYCksay5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke3YuZ2V0KCJzdHJva2UiKT8/eX07YCl9cmV0dXJuIGQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHtwPy1DLzI6Qy8yLWYuaGVpZ2h0fSlgKSxPLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7cD9mLmhlaWdodC8yK1QvMjotZi5oZWlnaHQvMi1ULzJ9KWApLEtlKGUsUiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oayl7aWYoWC5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxrKSwhZS5sYWJlbClyZXR1cm4gWGUucmVjdChlLGspO2xldCBMPWUueD8/MCxBPWUueT8/MCxJPWUuaGVpZ2h0Pz8wLE09W107cmV0dXJuIHA/TT1be3g6TC1mLndpZHRoLzIseTpBLUkvMn0se3g6TCtmLndpZHRoLzIseTpBLUkvMn0se3g6TCtmLndpZHRoLzIseTpBLUkvMitmLmhlaWdodCtUfSx7eDpMK2cvMix5OkEtSS8yK2YuaGVpZ2h0K1R9LHt4OkwrZy8yLHk6QStJLzJ9LHt4OkwtZy8yLHk6QStJLzJ9LHt4OkwtZy8yLHk6QS1JLzIrZi5oZWlnaHQrVH0se3g6TC1mLndpZHRoLzIseTpBLUkvMitmLmhlaWdodCtUfV06TT1be3g6TC1nLzIseTpBLUkvMn0se3g6TCtnLzIseTpBLUkvMn0se3g6TCtnLzIseTpBLUkvMittfSx7eDpMK2Yud2lkdGgvMix5OkEtSS8yK219LHt4OkwrZi53aWR0aC8yLzIseTpBK0kvMn0se3g6TC1mLndpZHRoLzIseTpBK0kvMn0se3g6TC1mLndpZHRoLzIseTpBLUkvMittfSx7eDpMLWcvMix5OkEtSS8yK219XSxYZS5wb2x5Z29uKGUsTSxrKX0saH12YXIgTVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO3l0KCk7amwoKTtIdCgpO3p0KCk7RnQoKTtvKE5aLCJpY29uIil9KTthc3luYyBmdW5jdGlvbiBJWih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09WWUoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixsYWJlbDpkfT1hd2FpdCBtdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLHA9MjAsbT1lLmxhYmVsPzg6MCxnPWUucG9zPT09InQiLHtub2RlQm9yZGVyOnksbWFpbkJrZzp2fT1yLHtzdHlsZXNNYXA6eH09YmMoZSksYj1qZS5zdmcoaCksVD1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKFQucm91Z2huZXNzPTAsVC5maWxsU3R5bGU9InNvbGlkIik7bGV0IFM9eC5nZXQoImZpbGwiKTtULnN0cm9rZT1TPz92O2xldCB3PWguYXBwZW5kKCJnIik7ZS5pY29uJiZ3Lmh0bWwoYDxnPiR7YXdhaXQgRXMoZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBFPXcubm9kZSgpLmdldEJCb3goKSxfPUUud2lkdGgsQz1FLmhlaWdodCxEPUUueCxPPUUueSxSPU1hdGgubWF4KF8sQykqTWF0aC5TUVJUMitwKjIsaz1iLmNpcmNsZSgwLDAsUixUKSxMPU1hdGgubWF4KFIsZi53aWR0aCksQT1SK2YuaGVpZ2h0K20sST1iLnJlY3RhbmdsZSgtTC8yLC1BLzIsTCxBLHsuLi5ULGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6Im5vbmUifSksTT1oLmluc2VydCgoKT0+aywiOmZpcnN0LWNoaWxkIiksUD1oLmluc2VydCgoKT0+SSk7cmV0dXJuIHcuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LV8vMi1EfSwke2c/Zi5oZWlnaHQvMittLzItQy8yLU86LWYuaGVpZ2h0LzItbS8yLUMvMi1PfSlgKSx3LmF0dHIoInN0eWxlIixgY29sb3I6ICR7eC5nZXQoInN0cm9rZSIpPz95fTtgKSxkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7Zz8tQS8yOkEvMi1mLmhlaWdodH0pYCksTS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke2c/Zi5oZWlnaHQvMittLzI6LWYuaGVpZ2h0LzItbS8yfSlgKSxLZShlLFApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEIpe3JldHVybiBYLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLEIpLFhlLnJlY3QoZSxCKX0saH12YXIgT1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO3l0KCk7amwoKTtIdCgpO3p0KCk7RnQoKTtvKElaLCJpY29uQ2lyY2xlIil9KTt2YXIgT2EsWmg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPYT1vKCh0LGUscixuLGkpPT5bIk0iLHQraSxlLCJIIix0K3ItaSwiQSIsaSxpLDAsMCwxLHQrcixlK2ksIlYiLGUrbi1pLCJBIixpLGksMCwwLDEsdCtyLWksZStuLCJIIix0K2ksIkEiLGksaSwwLDAsMSx0LGUrbi1pLCJWIixlK2ksIkEiLGksaSwwLDAsMSx0K2ksZSwiWiJdLmpvaW4oIiAiKSwiY3JlYXRlUm91bmRlZFJlY3RQYXRoRCIpfSk7YXN5bmMgZnVuY3Rpb24gUFoodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVllKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsaGFsZlBhZGRpbmc6ZCxsYWJlbDpwfT1hd2FpdCBtdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLG09ZS5wb3M9PT0idCIsZz1sK2QqMix5PWwrZCoyLHtub2RlQm9yZGVyOnYsbWFpbkJrZzp4fT1yLHtzdHlsZXNNYXA6Yn09YmMoZSksVD0teS8yLFM9LWcvMix3PWUubGFiZWw/ODowLEU9amUuc3ZnKGgpLF89UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihfLnJvdWdobmVzcz0wLF8uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBDPWIuZ2V0KCJmaWxsIik7Xy5zdHJva2U9Qz8/eDtsZXQgRD1FLnBhdGgoT2EoVCxTLHksZyw1KSxfKSxPPU1hdGgubWF4KHksZi53aWR0aCksUj1nK2YuaGVpZ2h0K3csaz1FLnJlY3RhbmdsZSgtTy8yLC1SLzIsTyxSLHsuLi5fLGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6Im5vbmUifSksTD1oLmluc2VydCgoKT0+RCwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJpY29uLXNoYXBlMiIpLEE9aC5pbnNlcnQoKCk9PmspO2lmKGUuaWNvbil7bGV0IEk9aC5hcHBlbmQoImciKTtJLmh0bWwoYDxnPiR7YXdhaXQgRXMoZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBNPUkubm9kZSgpLmdldEJCb3goKSxQPU0ud2lkdGgsQj1NLmhlaWdodCxGPU0ueCx6PU0ueTtJLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1QLzItRn0sJHttP2YuaGVpZ2h0LzIrdy8yLUIvMi16Oi1mLmhlaWdodC8yLXcvMi1CLzIten0pYCksSS5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke2IuZ2V0KCJzdHJva2UiKT8/dn07YCl9cmV0dXJuIHAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHttPy1SLzI6Ui8yLWYuaGVpZ2h0fSlgKSxMLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7bT9mLmhlaWdodC8yK3cvMjotZi5oZWlnaHQvMi13LzJ9KWApLEtlKGUsQSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7aWYoWC5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxJKSwhZS5sYWJlbClyZXR1cm4gWGUucmVjdChlLEkpO2xldCBNPWUueD8/MCxQPWUueT8/MCxCPWUuaGVpZ2h0Pz8wLEY9W107cmV0dXJuIG0/Rj1be3g6TS1mLndpZHRoLzIseTpQLUIvMn0se3g6TStmLndpZHRoLzIseTpQLUIvMn0se3g6TStmLndpZHRoLzIseTpQLUIvMitmLmhlaWdodCt3fSx7eDpNK3kvMix5OlAtQi8yK2YuaGVpZ2h0K3d9LHt4Ok0reS8yLHk6UCtCLzJ9LHt4Ok0teS8yLHk6UCtCLzJ9LHt4Ok0teS8yLHk6UC1CLzIrZi5oZWlnaHQrd30se3g6TS1mLndpZHRoLzIseTpQLUIvMitmLmhlaWdodCt3fV06Rj1be3g6TS15LzIseTpQLUIvMn0se3g6TSt5LzIseTpQLUIvMn0se3g6TSt5LzIseTpQLUIvMitnfSx7eDpNK2Yud2lkdGgvMix5OlAtQi8yK2d9LHt4Ok0rZi53aWR0aC8yLzIseTpQK0IvMn0se3g6TS1mLndpZHRoLzIseTpQK0IvMn0se3g6TS1mLndpZHRoLzIseTpQLUIvMitnfSx7eDpNLXkvMix5OlAtQi8yK2d9XSxYZS5wb2x5Z29uKGUsRixJKX0saH12YXIgQlo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO3l0KCk7amwoKTtIdCgpO3p0KCk7WmgoKTtGdCgpO28oUFosImljb25Sb3VuZGVkIil9KTthc3luYyBmdW5jdGlvbiBGWih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09WWUoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixoYWxmUGFkZGluZzpkLGxhYmVsOnB9PWF3YWl0IG10KHQsZSwiaWNvbi1zaGFwZSBkZWZhdWx0IiksbT1lLnBvcz09PSJ0IixnPWwrZCoyLHk9bCtkKjIse25vZGVCb3JkZXI6dixtYWluQmtnOnh9PXIse3N0eWxlc01hcDpifT1iYyhlKSxUPS15LzIsUz0tZy8yLHc9ZS5sYWJlbD84OjAsRT1qZS5zdmcoaCksXz1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKF8ucm91Z2huZXNzPTAsXy5maWxsU3R5bGU9InNvbGlkIik7bGV0IEM9Yi5nZXQoImZpbGwiKTtfLnN0cm9rZT1DPz94O2xldCBEPUUucGF0aChPYShULFMseSxnLC4xKSxfKSxPPU1hdGgubWF4KHksZi53aWR0aCksUj1nK2YuaGVpZ2h0K3csaz1FLnJlY3RhbmdsZSgtTy8yLC1SLzIsTyxSLHsuLi5fLGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6Im5vbmUifSksTD1oLmluc2VydCgoKT0+RCwiOmZpcnN0LWNoaWxkIiksQT1oLmluc2VydCgoKT0+ayk7aWYoZS5pY29uKXtsZXQgST1oLmFwcGVuZCgiZyIpO0kuaHRtbChgPGc+JHthd2FpdCBFcyhlLmljb24se2hlaWdodDpsLHdpZHRoOmwsZmFsbGJhY2tQcmVmaXg6IiJ9KX08L2c+YCk7bGV0IE09SS5ub2RlKCkuZ2V0QkJveCgpLFA9TS53aWR0aCxCPU0uaGVpZ2h0LEY9TS54LHo9TS55O0kuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LVAvMi1GfSwke20/Zi5oZWlnaHQvMit3LzItQi8yLXo6LWYuaGVpZ2h0LzItdy8yLUIvMi16fSlgKSxJLmF0dHIoInN0eWxlIixgY29sb3I6ICR7Yi5nZXQoInN0cm9rZSIpPz92fTtgKX1yZXR1cm4gcC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZi53aWR0aC8yLShmLngtKGYubGVmdD8/MCkpfSwke20/LVIvMjpSLzItZi5oZWlnaHR9KWApLEwuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHttP2YuaGVpZ2h0LzIrdy8yOi1mLmhlaWdodC8yLXcvMn0pYCksS2UoZSxBKSxlLmludGVyc2VjdD1mdW5jdGlvbihJKXtpZihYLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLEkpLCFlLmxhYmVsKXJldHVybiBYZS5yZWN0KGUsSSk7bGV0IE09ZS54Pz8wLFA9ZS55Pz8wLEI9ZS5oZWlnaHQ/PzAsRj1bXTtyZXR1cm4gbT9GPVt7eDpNLWYud2lkdGgvMix5OlAtQi8yfSx7eDpNK2Yud2lkdGgvMix5OlAtQi8yfSx7eDpNK2Yud2lkdGgvMix5OlAtQi8yK2YuaGVpZ2h0K3d9LHt4Ok0reS8yLHk6UC1CLzIrZi5oZWlnaHQrd30se3g6TSt5LzIseTpQK0IvMn0se3g6TS15LzIseTpQK0IvMn0se3g6TS15LzIseTpQLUIvMitmLmhlaWdodCt3fSx7eDpNLWYud2lkdGgvMix5OlAtQi8yK2YuaGVpZ2h0K3d9XTpGPVt7eDpNLXkvMix5OlAtQi8yfSx7eDpNK3kvMix5OlAtQi8yfSx7eDpNK3kvMix5OlAtQi8yK2d9LHt4Ok0rZi53aWR0aC8yLHk6UC1CLzIrZ30se3g6TStmLndpZHRoLzIvMix5OlArQi8yfSx7eDpNLWYud2lkdGgvMix5OlArQi8yfSx7eDpNLWYud2lkdGgvMix5OlAtQi8yK2d9LHt4Ok0teS8yLHk6UC1CLzIrZ31dLFhlLnBvbHlnb24oZSxGLEkpfSxofXZhciAkWj1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7eXQoKTtqbCgpO0h0KCk7WmgoKTt6dCgpO0Z0KCk7byhGWiwiaWNvblNxdWFyZSIpfSk7YXN5bmMgZnVuY3Rpb24geloodCxlLHtjb25maWc6e2Zsb3djaGFydDpyfX0pe2xldCBuPW5ldyBJbWFnZTtuLnNyYz1lPy5pbWc/PyIiLGF3YWl0IG4uZGVjb2RlKCk7bGV0IGk9TnVtYmVyKG4ubmF0dXJhbFdpZHRoLnRvU3RyaW5nKCkucmVwbGFjZSgicHgiLCIiKSksYT1OdW1iZXIobi5uYXR1cmFsSGVpZ2h0LnRvU3RyaW5nKCkucmVwbGFjZSgicHgiLCIiKSk7ZS5pbWFnZUFzcGVjdFJhdGlvPWkvYTtsZXR7bGFiZWxTdHlsZXM6c309WWUoZSk7ZS5sYWJlbFN0eWxlPXM7bGV0IGw9cj8ud3JhcHBpbmdXaWR0aDtlLmRlZmF1bHRXaWR0aD1yPy53cmFwcGluZ1dpZHRoO2xldCB1PU1hdGgubWF4KGUubGFiZWw/bD8/MDowLGU/LmFzc2V0V2lkdGg/P2kpLGg9ZS5jb25zdHJhaW50PT09Im9uIiYmZT8uYXNzZXRIZWlnaHQ/ZS5hc3NldEhlaWdodCplLmltYWdlQXNwZWN0UmF0aW86dSxmPWUuY29uc3RyYWludD09PSJvbiI/aC9lLmltYWdlQXNwZWN0UmF0aW86ZT8uYXNzZXRIZWlnaHQ/P2E7ZS53aWR0aD1NYXRoLm1heChoLGw/PzApO2xldHtzaGFwZVN2ZzpkLGJib3g6cCxsYWJlbDptfT1hd2FpdCBtdCh0LGUsImltYWdlLXNoYXBlIGRlZmF1bHQiKSxnPWUucG9zPT09InQiLHk9LWgvMix2PS1mLzIseD1lLmxhYmVsPzg6MCxiPWplLnN2ZyhkKSxUPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoVC5yb3VnaG5lc3M9MCxULmZpbGxTdHlsZT0ic29saWQiKTtsZXQgUz1iLnJlY3RhbmdsZSh5LHYsaCxmLFQpLHc9TWF0aC5tYXgoaCxwLndpZHRoKSxFPWYrcC5oZWlnaHQreCxfPWIucmVjdGFuZ2xlKC13LzIsLUUvMix3LEUsey4uLlQsZmlsbDoibm9uZSIsc3Ryb2tlOiJub25lIn0pLEM9ZC5pbnNlcnQoKCk9PlMsIjpmaXJzdC1jaGlsZCIpLEQ9ZC5pbnNlcnQoKCk9Pl8pO2lmKGUuaW1nKXtsZXQgTz1kLmFwcGVuZCgiaW1hZ2UiKTtPLmF0dHIoImhyZWYiLGUuaW1nKSxPLmF0dHIoIndpZHRoIixoKSxPLmF0dHIoImhlaWdodCIsZiksTy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwibm9uZSIpLE8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sJHtnP0UvMi1mOi1FLzJ9KWApfXJldHVybiBtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1wLndpZHRoLzItKHAueC0ocC5sZWZ0Pz8wKSl9LCR7Zz8tZi8yLXAuaGVpZ2h0LzIteC8yOmYvMi1wLmhlaWdodC8yK3gvMn0pYCksQy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke2c/cC5oZWlnaHQvMit4LzI6LXAuaGVpZ2h0LzIteC8yfSlgKSxLZShlLEQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKE8pe2lmKFguaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsTyksIWUubGFiZWwpcmV0dXJuIFhlLnJlY3QoZSxPKTtsZXQgUj1lLng/PzAsaz1lLnk/PzAsTD1lLmhlaWdodD8/MCxBPVtdO3JldHVybiBnP0E9W3t4OlItcC53aWR0aC8yLHk6ay1MLzJ9LHt4OlIrcC53aWR0aC8yLHk6ay1MLzJ9LHt4OlIrcC53aWR0aC8yLHk6ay1MLzIrcC5oZWlnaHQreH0se3g6UitoLzIseTprLUwvMitwLmhlaWdodCt4fSx7eDpSK2gvMix5OmsrTC8yfSx7eDpSLWgvMix5OmsrTC8yfSx7eDpSLWgvMix5OmstTC8yK3AuaGVpZ2h0K3h9LHt4OlItcC53aWR0aC8yLHk6ay1MLzIrcC5oZWlnaHQreH1dOkE9W3t4OlItaC8yLHk6ay1MLzJ9LHt4OlIraC8yLHk6ay1MLzJ9LHt4OlIraC8yLHk6ay1MLzIrZn0se3g6UitwLndpZHRoLzIseTprLUwvMitmfSx7eDpSK3Aud2lkdGgvMi8yLHk6aytMLzJ9LHt4OlItcC53aWR0aC8yLHk6aytMLzJ9LHt4OlItcC53aWR0aC8yLHk6ay1MLzIrZn0se3g6Ui1oLzIseTprLUwvMitmfV0sWGUucG9seWdvbihlLEEsTyl9LGR9dmFyIEdaPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTt5dCgpO0h0KCk7enQoKTtGdCgpO28oelosImltYWdlU3F1YXJlIil9KTthc3luYyBmdW5jdGlvbiBWWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSx1PVt7eDowLHk6MH0se3g6cyx5OjB9LHt4OnMrMypsLzYseTotbH0se3g6LTMqbC82LHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9amUuc3ZnKGkpLHA9UWUoZSx7fSksbT1YdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPU1hKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxLZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBYZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgVVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7byhWWiwiaW52X3RyYXBlem9pZCIpfSk7YXN5bmMgZnVuY3Rpb24gT3UodCxlLHIpe2xldHtsYWJlbFN0eWxlczpuLG5vZGVTdHlsZXM6aX09WWUoZSk7ZS5sYWJlbFN0eWxlPW47bGV0e3NoYXBlU3ZnOmEsYmJveDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgocy53aWR0aCtyLmxhYmVsUGFkZGluZ1gqMixlPy53aWR0aHx8MCksdT1NYXRoLm1heChzLmhlaWdodCtyLmxhYmVsUGFkZGluZ1kqMixlPy5oZWlnaHR8fDApLGg9LWwvMixmPS11LzIsZCx7cng6cCxyeTptfT1lLHtjc3NTdHlsZXM6Z309ZTtpZihyPy5yeCYmci5yeSYmKHA9ci5yeCxtPXIucnkpLGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgeT1qZS5zdmcoYSksdj1RZShlLHt9KSx4PXB8fG0/eS5wYXRoKE9hKGgsZixsLHUscHx8MCksdik6eS5yZWN0YW5nbGUoaCxmLGwsdSx2KTtkPWEuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxkLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLHpuKGcpKX1lbHNlIGQ9YS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxkLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGkpLmF0dHIoInJ4Iix6bihwKSkuYXR0cigicnkiLHpuKG0pKS5hdHRyKCJ4IixoKS5hdHRyKCJ5IixmKS5hdHRyKCJ3aWR0aCIsbCkuYXR0cigiaGVpZ2h0Iix1KTtyZXR1cm4gS2UoZSxkKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gWGUucmVjdChlLHkpfSxhfXZhciBFbT1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtaaCgpO3p0KCk7V3QoKTtlcigpO28oT3UsImRyYXdSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBIWih0LGUpe2xldHtzaGFwZVN2ZzpyLGJib3g6bixsYWJlbDppfT1hd2FpdCBtdCh0LGUsImxhYmVsIiksYT1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBhLmF0dHIoIndpZHRoIiwuMSkuYXR0cigiaGVpZ2h0IiwuMSksci5hdHRyKCJjbGFzcyIsImxhYmVsIGVkZ2VMYWJlbCIpLGkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShuLndpZHRoLzIpLShuLngtKG4ubGVmdD8/MCkpfSwgJHstKG4uaGVpZ2h0LzIpLShuLnktKG4udG9wPz8wKSl9KWApLEtlKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIFhlLnJlY3QoZSx1KX0scn12YXIgV1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFbSgpO0Z0KCk7SHQoKTtvKEhaLCJsYWJlbFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIHFaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApLGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGU/LmhlaWdodD8/MCksdT1be3g6MCx5OjB9LHt4OnMrMypsLzYseTowfSx7eDpzLHk6LWx9LHt4Oi0oMypsKS82LHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9amUuc3ZnKGkpLHA9UWUoZSx7fSksbT1YdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPU1hKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxLZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBYZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgWVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7byhxWiwibGVhbl9sZWZ0Iil9KTthc3luYyBmdW5jdGlvbiBYWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLHU9W3t4Oi0zKmwvNix5OjB9LHt4OnMseTowfSx7eDpzKzMqbC82LHk6LWx9LHt4OjAseTotbH1dLGgse2Nzc1N0eWxlczpmfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZD1qZS5zdmcoaSkscD1RZShlLHt9KSxtPVh0KHUpLGc9ZC5wYXRoKG0scCk7aD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXMvMn0sICR7bC8yfSlgKSxmJiZoLmF0dHIoInN0eWxlIixmKX1lbHNlIGg9TWEoaSxzLGwsdSk7cmV0dXJuIG4mJmguYXR0cigic3R5bGUiLG4pLGUud2lkdGg9cyxlLmhlaWdodD1sLEtlKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIFhlLnBvbHlnb24oZSx1LGQpfSxpfXZhciBqWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7SXUoKTtvKFhaLCJsZWFuX3JpZ2h0Iil9KTtmdW5jdGlvbiBLWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbD0iIixlLmxhYmVsU3R5bGU9cjtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixodChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLHtjc3NTdHlsZXM6YX09ZSxzPU1hdGgubWF4KDM1LGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KDM1LGU/LmhlaWdodD8/MCksdT03LGg9W3t4OnMseTowfSx7eDowLHk6bCt1LzJ9LHt4OnMtMip1LHk6bCt1LzJ9LHt4OjAseToyKmx9LHt4OnMseTpsLXUvMn0se3g6Mip1LHk6bC11LzJ9XSxmPWplLnN2ZyhpKSxkPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZC5yb3VnaG5lc3M9MCxkLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgcD1YdChoKSxtPWYucGF0aChwLGQpLGc9aS5pbnNlcnQoKCk9Pm0sIjpmaXJzdC1jaGlsZCIpO3JldHVybiBhJiZlLmxvb2shPT0iaGFuZERyYXduIiYmZy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGcuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKC0ke3MvMn0sJHstbH0pYCksS2UoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gWC5pbmZvKCJsaWdodG5pbmdCb2x0IGludGVyc2VjdCIsZSx5KSxYZS5wb2x5Z29uKGUsaCx5KX0saX12YXIgUVo9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7enQoKTtXdCgpO0h0KCk7RnQoKTtvKEtaLCJsaWdodG5pbmdCb2x0Iil9KTthc3luYyBmdW5jdGlvbiBaWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApLGUud2lkdGg/PzApLHU9bC8yLGg9dS8oMi41K2wvNTApLGY9TWF0aC5tYXgoYS5oZWlnaHQraCsoZS5wYWRkaW5nPz8wKSxlLmhlaWdodD8/MCksZD1mKi4xLHAse2Nzc1N0eWxlczptfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZz1qZS5zdmcoaSkseT1HRGUoMCwwLGwsZix1LGgsZCksdj1WRGUoMCxoLGwsZix1LGgpLHg9UWUoZSx7fSksYj1nLnBhdGgoeSx4KSxUPWcucGF0aCh2LHgpO2kuaW5zZXJ0KCgpPT5ULCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImxpbmUiKSxwPWkuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxwLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmcC5hdHRyKCJzdHlsZSIsbSl9ZWxzZXtsZXQgZz16RGUoMCwwLGwsZix1LGgsZCk7cD1pLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLGcpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLHpuKG0pKS5hdHRyKCJzdHlsZSIsbil9cmV0dXJuIHAuYXR0cigibGFiZWwtb2Zmc2V0LXkiLGgpLHAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMn0sICR7LShmLzIraCl9KWApLEtlKGUscCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC0oYS55LShhLnRvcD8/MCkpfSlgKSxlLmludGVyc2VjdD1mdW5jdGlvbihnKXtsZXQgeT1YZS5yZWN0KGUsZyksdj15LngtKGUueD8/MCk7aWYodSE9MCYmKE1hdGguYWJzKHYpPChlLndpZHRoPz8wKS8yfHxNYXRoLmFicyh2KT09KGUud2lkdGg/PzApLzImJk1hdGguYWJzKHkueS0oZS55Pz8wKSk+KGUuaGVpZ2h0Pz8wKS8yLWgpKXtsZXQgeD1oKmgqKDEtdip2Lyh1KnUpKTt4PjAmJih4PU1hdGguc3FydCh4KSkseD1oLXgsZy55LShlLnk/PzApPjAmJih4PS14KSx5LnkrPXh9cmV0dXJuIHl9LGl9dmFyIHpEZSxHRGUsVkRlLEpaPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtlcigpO3pEZT1vKCh0LGUscixuLGksYSxzKT0+W2BNJHt0fSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGEke2l9LCR7YX0gMCwwLDAgJHstcn0sMGAsYGwwLCR7bn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGwwLCR7LW59YCxgTSR7dH0sJHtlK2Erc31gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlQ3lsaW5kZXJQYXRoRCIpLEdEZT1vKCh0LGUscixuLGksYSxzKT0+W2BNJHt0fSwke2UrYX1gLGBNJHt0K3J9LCR7ZSthfWAsYGEke2l9LCR7YX0gMCwwLDAgJHstcn0sMGAsYGwwLCR7bn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGwwLCR7LW59YCxgTSR7dH0sJHtlK2Erc31gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEIiksVkRlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0LXIvMn0sJHstbi8yfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYF0uam9pbigiICIpLCJjcmVhdGVJbm5lckN5bGluZGVyUGF0aEQiKTtvKFpaLCJsaW5lZEN5bGluZGVyIil9KTthc3luYyBmdW5jdGlvbiBlSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS80LGY9dStoLHtjc3NTdHlsZXM6ZH09ZSxwPWplLnN2ZyhpKSxtPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6LWwvMi1sLzIqLjEseTotZi8yfSx7eDotbC8yLWwvMiouMSx5OmYvMn0sLi4uR28oLWwvMi1sLzIqLjEsZi8yLGwvMitsLzIqLjEsZi8yLGgsLjgpLHt4OmwvMitsLzIqLjEseTotZi8yfSx7eDotbC8yLWwvMiouMSx5Oi1mLzJ9LHt4Oi1sLzIseTotZi8yfSx7eDotbC8yLHk6Zi8yKjEuMX0se3g6LWwvMix5Oi1mLzJ9XSx5PXAucG9seWdvbihnLm1hcCh4PT5beC54LHgueV0pLG0pLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpO3JldHVybiB2LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApK2wvMiouMS8yLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFhlLnBvbHlnb24oZSxnLHgpfSxpfXZhciB0Sj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtXdCgpO3p0KCk7byhlSiwibGluZWRXYXZlRWRnZWRSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBySih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9NSxmPS1sLzIsZD0tdS8yLHtjc3NTdHlsZXM6cH09ZSxtPWplLnN2ZyhpKSxnPVFlKGUse30pLHk9W3t4OmYtaCx5OmQraH0se3g6Zi1oLHk6ZCt1K2h9LHt4OmYrbC1oLHk6ZCt1K2h9LHt4OmYrbC1oLHk6ZCt1fSx7eDpmK2wseTpkK3V9LHt4OmYrbCx5OmQrdS1ofSx7eDpmK2wraCx5OmQrdS1ofSx7eDpmK2wraCx5OmQtaH0se3g6ZitoLHk6ZC1ofSx7eDpmK2gseTpkfSx7eDpmLHk6ZH0se3g6Zix5OmQraH1dLHY9W3t4OmYseTpkK2h9LHt4OmYrbC1oLHk6ZCtofSx7eDpmK2wtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkfSx7eDpmLHk6ZH1dO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1YdCh5KSxiPW0ucGF0aCh4LGcpLFQ9WHQodiksUz1tLnBhdGgoVCx7Li4uZyxmaWxsOiJub25lIn0pLHc9aS5pbnNlcnQoKCk9PlMsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB3Lmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksdy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ3LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktaC0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKStoLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSx5LEUpfSxpfXZhciBuSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7enQoKTtXdCgpO0h0KCk7byhySiwibXVsdGlSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBpSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS80LGY9dStoLGQ9LWwvMixwPS1mLzIsbT01LHtjc3NTdHlsZXM6Z309ZSx5PUdvKGQtbSxwK2YrbSxkK2wtbSxwK2YrbSxoLC44KSx2PXk/Llt5Lmxlbmd0aC0xXSx4PVt7eDpkLW0seTpwK219LHt4OmQtbSx5OnArZittfSwuLi55LHt4OmQrbC1tLHk6di55LW19LHt4OmQrbCx5OnYueS1tfSx7eDpkK2wseTp2LnktMiptfSx7eDpkK2wrbSx5OnYueS0yKm19LHt4OmQrbCttLHk6cC1tfSx7eDpkK20seTpwLW19LHt4OmQrbSx5OnB9LHt4OmQseTpwfSx7eDpkLHk6cCttfV0sYj1be3g6ZCx5OnArbX0se3g6ZCtsLW0seTpwK219LHt4OmQrbC1tLHk6di55LW19LHt4OmQrbCx5OnYueS1tfSx7eDpkK2wseTpwfSx7eDpkLHk6cH1dLFQ9amUuc3ZnKGkpLFM9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihTLnJvdWdobmVzcz0wLFMuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB3PVh0KHgpLEU9VC5wYXRoKHcsUyksXz1YdChiKSxDPVQucGF0aChfLFMpLEQ9aS5pbnNlcnQoKCk9PkUsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBELmluc2VydCgoKT0+QyksRC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGcmJmUubG9vayE9PSJoYW5kRHJhd24iJiZELnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixnKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmRC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksRC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLW0tKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikrbS1oLzItKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSxEKSxlLmludGVyc2VjdD1mdW5jdGlvbihPKXtyZXR1cm4gWGUucG9seWdvbihlLHgsTyl9LGl9dmFyIGFKPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1d0KCk7enQoKTtvKGlKLCJtdWx0aVdhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gc0oodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1ZZShlKTtlLmxhYmVsU3R5bGU9bixlLnVzZUh0bWxMYWJlbHN8fHRyKCkuZmxvd2NoYXJ0Py5odG1sTGFiZWxzIT09ITF8fChlLmNlbnRlckxhYmVsPSEwKTtsZXR7c2hhcGVTdmc6cyxiYm94OmwsbGFiZWw6dX09YXdhaXQgbXQodCxlLGh0KGUpKSxoPU1hdGgubWF4KGwud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksZj1NYXRoLm1heChsLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZD0taC8yLHA9LWYvMix7Y3NzU3R5bGVzOm19PWUsZz1qZS5zdmcocykseT1RZShlLHtmaWxsOnIubm90ZUJrZ0NvbG9yLHN0cm9rZTpyLm5vdGVCb3JkZXJDb2xvcn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1nLnJlY3RhbmdsZShkLHAsaCxmLHkpLHg9cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLGkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSx1LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLndpZHRoLzItKGwueC0obC5sZWZ0Pz8wKSl9LCAkey0obC5oZWlnaHQvMiktKGwueS0obC50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucmVjdChlLGIpfSxzfXZhciBvSj1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7SHQoKTt6dCgpO0Z0KCk7bWkoKTtvKHNKLCJub3RlIil9KTthc3luYyBmdW5jdGlvbiBsSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9YS53aWR0aCtlLnBhZGRpbmcsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1zK2wsaD1be3g6dS8yLHk6MH0se3g6dSx5Oi11LzJ9LHt4OnUvMix5Oi11fSx7eDowLHk6LXUvMn1dLGYse2Nzc1N0eWxlczpkfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgcD1qZS5zdmcoaSksbT1RZShlLHt9KSxnPVVEZSgwLDAsdSkseT1wLnBhdGgoZyxtKTtmPWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHt1LzJ9KWApLGQmJmYuYXR0cigic3R5bGUiLGQpfWVsc2UgZj1NYShpLHUsdSxoKTtyZXR1cm4gbiYmZi5hdHRyKCJzdHlsZSIsbiksS2UoZSxmKSxlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWC5kZWJ1ZyhgQVBBMTIgSW50ZXJzZWN0IGNhbGxlZCBTUExJVApwb2ludDpgLHAsYApub2RlOgpgLGUsYApyZXM6YCxYZS5wb2x5Z29uKGUsaCxwKSksWGUucG9seWdvbihlLGgscCl9LGl9dmFyIFVEZSxjSj1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7RnQoKTtIdCgpO3p0KCk7V3QoKTtJdSgpO1VEZT1vKCh0LGUscik9PltgTSR7dCtyLzJ9LCR7ZX1gLGBMJHt0K3J9LCR7ZS1yLzJ9YCxgTCR7dCtyLzJ9LCR7ZS1yfWAsYEwke3R9LCR7ZS1yLzJ9YCwiWiJdLmpvaW4oIiAiKSwiY3JlYXRlRGVjaXNpb25Cb3hQYXRoRCIpO28obEosInF1ZXN0aW9uIil9KTthc3luYyBmdW5jdGlvbiB1Sih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGU/LmhlaWdodD8/MCksaD0tbC8yLGY9LXUvMixkPWYvMixwPVt7eDpoK2QseTpmfSx7eDpoLHk6MH0se3g6aCtkLHk6LWZ9LHt4Oi1oLHk6LWZ9LHt4Oi1oLHk6Zn1dLHtjc3NTdHlsZXM6bX09ZSxnPWplLnN2ZyhpKSx5PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1YdChwKSx4PWcucGF0aCh2LHkpLGI9aS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBiLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1kLzJ9LDApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZC8yLWEud2lkdGgvMi0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKS0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLGIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiBYZS5wb2x5Z29uKGUscCxUKX0saX12YXIgaEo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28odUosInJlY3RfbGVmdF9pbnZfYXJyb3ciKX0pO2Z1bmN0aW9uIEhEZSh0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfWFzeW5jIGZ1bmN0aW9uIFdEZSh0KXtsZXQgZT1HZShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZm9yZWlnbk9iamVjdCIpKSxyPWUuYXBwZW5kKCJ4aHRtbDpkaXYiKSxuPXQubGFiZWw7dC5sYWJlbCYmeWkodC5sYWJlbCkmJihuPWF3YWl0IFRoKHQubGFiZWwucmVwbGFjZShaZS5saW5lQnJlYWtSZWdleCxgCmApLG1lKCkpKTtsZXQgaT10LmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtyZXR1cm4gci5odG1sKCc8c3BhbiBjbGFzcz0iJytpKyciICcrKHQubGFiZWxTdHlsZT8nc3R5bGU9IicrdC5sYWJlbFN0eWxlKyciJzoiIikrIj4iK24rIjwvc3Bhbj4iKSxIRGUocix0LmxhYmVsU3R5bGUpLHIuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxyLnN0eWxlKCJwYWRkaW5nLXJpZ2h0IiwiMXB4Iiksci5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxyLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGUubm9kZSgpfXZhciBxRGUsVGMscnc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO3l0KCk7R3QoKTtwcigpO2VyKCk7byhIRGUsImFwcGx5U3R5bGUiKTtvKFdEZSwiYWRkSHRtbExhYmVsIik7cURlPW8oYXN5bmModCxlLHIsbik9PntsZXQgaT10fHwiIjtpZih0eXBlb2YgaT09Im9iamVjdCImJihpPWlbMF0pLGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtpPWkucmVwbGFjZSgvXFxufFxuL2csIjxiciAvPiIpLFguaW5mbygidmVydGV4VGV4dCIraSk7bGV0IGE9e2lzTm9kZTpuLGxhYmVsOm5hKGkpLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxsPT5gPGkgY2xhc3M9JyR7bC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApLGxhYmVsU3R5bGU6ZSYmZS5yZXBsYWNlKCJmaWxsOiIsImNvbG9yOiIpfTtyZXR1cm4gYXdhaXQgV0RlKGEpfWVsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTthLnNldEF0dHJpYnV0ZSgic3R5bGUiLGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7bGV0IHM9W107dHlwZW9mIGk9PSJzdHJpbmciP3M9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/cz1pOnM9W107Zm9yKGxldCBsIG9mIHMpe2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Uuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksdS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksdS5zZXRBdHRyaWJ1dGUoIngiLCIwIikscj91LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp1LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx1LnRleHRDb250ZW50PWwudHJpbSgpLGEuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGF9fSwiY3JlYXRlTGFiZWwiKSxUYz1xRGV9KTthc3luYyBmdW5jdGlvbiBmSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0IGk7ZS5jc3NDbGFzc2VzP2k9Im5vZGUgIitlLmNzc0NsYXNzZXM6aT0ibm9kZSBkZWZhdWx0IjtsZXQgYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscz1hLmluc2VydCgiZyIpLGw9YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLG4pLHU9ZS5kZXNjcmlwdGlvbixoPWUubGFiZWwsZj1sLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBUYyhoLGUubGFiZWxTdHlsZSwhMCwhMCkpLGQ9e3dpZHRoOjAsaGVpZ2h0OjB9O2lmKGRyKG1lKCk/LmZsb3djaGFydD8uaHRtbExhYmVscykpe2xldCBDPWYuY2hpbGRyZW5bMF0sRD1HZShmKTtkPUMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRC5hdHRyKCJ3aWR0aCIsZC53aWR0aCksRC5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0KX1YLmluZm8oIlRleHQgMiIsdSk7bGV0IHA9dXx8W10sbT1mLmdldEJCb3goKSxnPWwubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IFRjKHAuam9pbj9wLmpvaW4oIjxici8+Iik6cCxlLmxhYmVsU3R5bGUsITAsITApKSx5PWcuY2hpbGRyZW5bMF0sdj1HZShnKTtkPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdi5hdHRyKCJ3aWR0aCIsZC53aWR0aCksdi5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0KTtsZXQgeD0oZS5wYWRkaW5nfHwwKS8yO0dlKGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZC53aWR0aD5tLndpZHRoPzA6KG0ud2lkdGgtZC53aWR0aCkvMikrIiwgIisobS5oZWlnaHQreCs1KSsiKSIpLEdlKGYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZC53aWR0aDxtLndpZHRoPzA6LShtLndpZHRoLWQud2lkdGgpLzIpKyIsIDApIiksZD1sLm5vZGUoKS5nZXRCQm94KCksbC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrKC1kLmhlaWdodC8yLXgrMykrIikiKTtsZXQgYj1kLndpZHRoKyhlLnBhZGRpbmd8fDApLFQ9ZC5oZWlnaHQrKGUucGFkZGluZ3x8MCksUz0tZC53aWR0aC8yLXgsdz0tZC5oZWlnaHQvMi14LEUsXztpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IEM9amUuc3ZnKGEpLEQ9UWUoZSx7fSksTz1DLnBhdGgoT2EoUyx3LGIsVCxlLnJ4fHwwKSxEKSxSPUMubGluZSgtZC53aWR0aC8yLXgsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4LGQud2lkdGgvMit4LC1kLmhlaWdodC8yLXgrbS5oZWlnaHQreCxEKTtfPWEuaW5zZXJ0KCgpPT4oWC5kZWJ1ZygiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDIixPKSxSKSwiOmZpcnN0LWNoaWxkIiksRT1hLmluc2VydCgoKT0+KFguZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsTyksTyksIjpmaXJzdC1jaGlsZCIpfWVsc2UgRT1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLF89cy5pbnNlcnQoImxpbmUiKSxFLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigieCIsLWQud2lkdGgvMi14KS5hdHRyKCJ5IiwtZC5oZWlnaHQvMi14KS5hdHRyKCJ3aWR0aCIsZC53aWR0aCsoZS5wYWRkaW5nfHwwKSkuYXR0cigiaGVpZ2h0IixkLmhlaWdodCsoZS5wYWRkaW5nfHwwKSksXy5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWQud2lkdGgvMi14KS5hdHRyKCJ4MiIsZC53aWR0aC8yK3gpLmF0dHIoInkxIiwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gpLmF0dHIoInkyIiwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gpO3JldHVybiBLZShlLEUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEMpe3JldHVybiBYZS5yZWN0KGUsQyl9LGF9dmFyIGRKPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtwcigpO0Z0KCk7cncoKTtIdCgpO3p0KCk7V3QoKTtHdCgpO1poKCk7eXQoKTtvKGZKLCJyZWN0V2l0aFRpdGxlIil9KTthc3luYyBmdW5jdGlvbiBwSih0LGUpe2xldCByPXtyeDo1LHJ5OjUsY2xhc3NlczoiIixsYWJlbFBhZGRpbmdYOihlPy5wYWRkaW5nfHwwKSoxLGxhYmVsUGFkZGluZ1k6KGU/LnBhZGRpbmd8fDApKjF9O3JldHVybiBPdSh0LGUscil9dmFyIG1KPU4oKCk9PnsidXNlIHN0cmljdCI7RW0oKTtvKHBKLCJyb3VuZGVkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gZ0oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9ZT8ucGFkZGluZz8/MCx1PU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksaD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZj0tYS53aWR0aC8yLWwsZD0tYS5oZWlnaHQvMi1sLHtjc3NTdHlsZXM6cH09ZSxtPWplLnN2ZyhpKSxnPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeT1be3g6Zix5OmR9LHt4OmYrdSs4LHk6ZH0se3g6Zit1KzgseTpkK2h9LHt4OmYtOCx5OmQraH0se3g6Zi04LHk6ZH0se3g6Zix5OmR9LHt4OmYseTpkK2h9XSx2PW0ucG9seWdvbih5Lm1hcChiPT5bYi54LGIueV0pLGcpLHg9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLHpuKHApKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMis0KyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey1oLzIrKGUucGFkZGluZz8/MCktKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucmVjdChlLGIpfSxpfXZhciB5Sj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7ZXIoKTtvKGdKLCJzaGFkZWRQcm9jZXNzIil9KTthc3luYyBmdW5jdGlvbiB2Sih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9LWwvMixmPS11LzIse2Nzc1N0eWxlczpkfT1lLHA9amUuc3ZnKGkpLG09UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVt7eDpoLHk6Zn0se3g6aCx5OmYrdX0se3g6aCtsLHk6Zit1fSx7eDpoK2wseTpmLXUvMn1dLHk9WHQoZyksdj1wLnBhdGgoeSxtKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHguYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsICR7dS80fSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCktKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey11LzQrKGUucGFkZGluZz8/MCktKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucG9seWdvbihlLGcsYil9LGl9dmFyIHhKPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtvKHZKLCJzbG9wZWRSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBiSih0LGUpe2xldCByPXtyeDowLHJ5OjAsY2xhc3NlczoiIixsYWJlbFBhZGRpbmdYOihlPy5wYWRkaW5nfHwwKSoyLGxhYmVsUGFkZGluZ1k6KGU/LnBhZGRpbmd8fDApKjF9O3JldHVybiBPdSh0LGUscil9dmFyIFRKPU4oKCk9PnsidXNlIHN0cmljdCI7RW0oKTtvKGJKLCJzcXVhcmVSZWN0Iil9KTthc3luYyBmdW5jdGlvbiB3Sih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9YS5oZWlnaHQrZS5wYWRkaW5nLGw9YS53aWR0aCtzLzQrZS5wYWRkaW5nLHUse2Nzc1N0eWxlczpofT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZj1qZS5zdmcoaSksZD1RZShlLHt9KSxwPU9hKC1sLzIsLXMvMixsLHMscy8yKSxtPWYucGF0aChwLGQpO3U9aS5pbnNlcnQoKCk9Pm0sIjpmaXJzdC1jaGlsZCIpLHUuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsem4oaCkpfWVsc2UgdT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHUuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigicngiLHMvMikuYXR0cigicnkiLHMvMikuYXR0cigieCIsLWwvMikuYXR0cigieSIsLXMvMikuYXR0cigid2lkdGgiLGwpLmF0dHIoImhlaWdodCIscyk7cmV0dXJuIEtlKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIFhlLnJlY3QoZSxmKX0saX12YXIga0o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO1poKCk7ZXIoKTtvKHdKLCJzdGFkaXVtIil9KTthc3luYyBmdW5jdGlvbiBFSih0LGUpe3JldHVybiBPdSh0LGUse3J4OjUscnk6NSxjbGFzc2VzOiJmbG93Y2hhcnQtbm9kZSJ9KX12YXIgU0o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFbSgpO28oRUosInN0YXRlIil9KTtmdW5jdGlvbiBDSih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cn19KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVllKGUpO2UubGFiZWxTdHlsZT1uO2xldHtjc3NTdHlsZXM6YX09ZSx7bGluZUNvbG9yOnMsc3RhdGVCb3JkZXI6bCxub2RlQm9yZGVyOnV9PXIsaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGY9amUuc3ZnKGgpLGQ9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihkLnJvdWdobmVzcz0wLGQuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBwPWYuY2lyY2xlKDAsMCwxNCx7Li4uZCxzdHJva2U6cyxzdHJva2VXaWR0aDoyfSksbT1sPz91LGc9Zi5jaXJjbGUoMCwwLDUsey4uLmQsZmlsbDptLHN0cm9rZTptLHN0cm9rZVdpZHRoOjIsZmlsbFN0eWxlOiJzb2xpZCJ9KSx5PWguaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geS5pbnNlcnQoKCk9PmcpLGEmJnkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGEpLGkmJnkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLEtlKGUseSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIFhlLmNpcmNsZShlLDcsdil9LGh9dmFyIEFKPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTtIdCgpO3p0KCk7RnQoKTtvKENKLCJzdGF0ZUVuZCIpfSk7ZnVuY3Rpb24gX0oodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xpbmVDb2xvcjpufT1yLGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxhO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgbD1qZS5zdmcoaSkuY2lyY2xlKDAsMCwxNCxOUShuKSk7YT1pLmluc2VydCgoKT0+bCksYS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KX1lbHNlIGE9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGEuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCk7cmV0dXJuIEtlKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFhlLmNpcmNsZShlLDcscyl9LGl9dmFyIERKPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTtIdCgpO3p0KCk7RnQoKTtvKF9KLCJzdGF0ZVN0YXJ0Iil9KTthc3luYyBmdW5jdGlvbiBMSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9KGU/LnBhZGRpbmd8fDApLzIsbD1hLndpZHRoK2UucGFkZGluZyx1PWEuaGVpZ2h0K2UucGFkZGluZyxoPS1hLndpZHRoLzItcyxmPS1hLmhlaWdodC8yLXMsZD1be3g6MCx5OjB9LHt4OmwseTowfSx7eDpsLHk6LXV9LHt4OjAseTotdX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6bCs4LHk6MH0se3g6bCs4LHk6LXV9LHt4Oi04LHk6LXV9LHt4Oi04LHk6MH1dO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgcD1qZS5zdmcoaSksbT1RZShlLHt9KSxnPXAucmVjdGFuZ2xlKGgtOCxmLGwrMTYsdSxtKSx5PXAubGluZShoLGYsaCxmK3UsbSksdj1wLmxpbmUoaCtsLGYsaCtsLGYrdSxtKTtpLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIiksaS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO2xldCB4PWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKSx7Y3NzU3R5bGVzOmJ9PWU7eC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIix6bihiKSksS2UoZSx4KX1lbHNle2xldCBwPU1hKGksbCx1LGQpO24mJnAuYXR0cigic3R5bGUiLG4pLEtlKGUscCl9cmV0dXJuIGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBYZS5wb2x5Z29uKGUsZCxwKX0saX12YXIgUko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7ZXIoKTtvKExKLCJzdWJyb3V0aW5lIil9KTthc3luYyBmdW5jdGlvbiBOSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSx1PS1zLzIsaD0tbC8yLGY9LjIqbCxkPS4yKmwse2Nzc1N0eWxlczpwfT1lLG09amUuc3ZnKGkpLGc9UWUoZSx7fSkseT1be3g6dS1mLzIseTpofSx7eDp1K3MrZi8yLHk6aH0se3g6dStzK2YvMix5OmgrbH0se3g6dS1mLzIseTpoK2x9XSx2PVt7eDp1K3MtZi8yLHk6aCtsfSx7eDp1K3MrZi8yLHk6aCtsfSx7eDp1K3MrZi8yLHk6aCtsLWR9XTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9WHQoeSksYj1tLnBhdGgoeCxnKSxUPVh0KHYpLFM9bS5wYXRoKFQsey4uLmcsZmlsbFN0eWxlOiJzb2xpZCJ9KSx3PWkuaW5zZXJ0KCgpPT5TLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdy5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLHcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJncuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSx5LEUpfSxpfXZhciBNSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7enQoKTtXdCgpO0h0KCk7byhOSiwidGFnZ2VkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gSUoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPS4yKmwsZD0uMip1LHA9dStoLHtjc3NTdHlsZXM6bX09ZSxnPWplLnN2ZyhpKSx5PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1be3g6LWwvMi1sLzIqLjEseTpwLzJ9LC4uLkdvKC1sLzItbC8yKi4xLHAvMixsLzIrbC8yKi4xLHAvMixoLC44KSx7eDpsLzIrbC8yKi4xLHk6LXAvMn0se3g6LWwvMi1sLzIqLjEseTotcC8yfV0seD0tbC8yK2wvMiouMSxiPS1wLzItZCouNCxUPVt7eDp4K2wtZix5OihiK3UpKjEuNH0se3g6eCtsLHk6Yit1LWR9LHt4OngrbCx5OihiK3UpKi45fSwuLi5Hbyh4K2wsKGIrdSkqMS4zLHgrbC1mLChiK3UpKjEuNSwtdSouMDMsLjUpXSxTPVh0KHYpLHc9Zy5wYXRoKFMseSksRT1YdChUKSxfPWcucGF0aChFLHsuLi55LGZpbGxTdHlsZToic29saWQifSksQz1pLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIEMuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKSxDLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZS5sb29rIT09ImhhbmREcmF3biImJkMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZDLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxDLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsQyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRCl7cmV0dXJuIFhlLnBvbHlnb24oZSx2LEQpfSxpfXZhciBPSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtXdCgpO3p0KCk7byhJSiwidGFnZ2VkV2F2ZUVkZ2VkUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBQSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCtlLnBhZGRpbmcsZT8ud2lkdGh8fDApLGw9TWF0aC5tYXgoYS5oZWlnaHQrZS5wYWRkaW5nLGU/LmhlaWdodHx8MCksdT0tcy8yLGg9LWwvMixmPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGYuYXR0cigiY2xhc3MiLCJ0ZXh0IikuYXR0cigic3R5bGUiLG4pLmF0dHIoInJ4IiwwKS5hdHRyKCJyeSIsMCkuYXR0cigieCIsdSkuYXR0cigieSIsaCkuYXR0cigid2lkdGgiLHMpLmF0dHIoImhlaWdodCIsbCksS2UoZSxmKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWGUucmVjdChlLGQpfSxpfXZhciBCSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO28oUEosInRleHQiKX0pO2FzeW5jIGZ1bmN0aW9uIEZKKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6cyxoYWxmUGFkZGluZzpsfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHU9ZS5sb29rPT09Im5lbyI/bCoyOmwsaD1hLmhlaWdodCt1LGY9aC8yLGQ9Zi8oMi41K2gvNTApLHA9YS53aWR0aCtkK3Use2Nzc1N0eWxlczptfT1lLGc7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB5PWplLnN2ZyhpKSx2PVhEZSgwLDAscCxoLGQsZikseD1qRGUoMCwwLHAsaCxkLGYpLGI9eS5wYXRoKHYsUWUoZSx7fSkpLFQ9eS5wYXRoKHgsUWUoZSx7ZmlsbDoibm9uZSJ9KSk7Zz1pLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIiksZz1pLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksZy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmcuYXR0cigic3R5bGUiLG0pfWVsc2V7bGV0IHk9WURlKDAsMCxwLGgsZCxmKTtnPWkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIseSkuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsem4obSkpLmF0dHIoInN0eWxlIixuKSxnLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbSksbiYmZy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbil9cmV0dXJuIGcuYXR0cigibGFiZWwtb2Zmc2V0LXgiLGQpLGcuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXAvMn0sICR7aC8yfSApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktZC0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKS0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLGcpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe2xldCB2PVhlLnJlY3QoZSx5KSx4PXYueS0oZS55Pz8wKTtpZihmIT0wJiYoTWF0aC5hYnMoeCk8KGUuaGVpZ2h0Pz8wKS8yfHxNYXRoLmFicyh4KT09KGUuaGVpZ2h0Pz8wKS8yJiZNYXRoLmFicyh2LngtKGUueD8/MCkpPihlLndpZHRoPz8wKS8yLWQpKXtsZXQgYj1kKmQqKDEteCp4LyhmKmYpKTtiIT0wJiYoYj1NYXRoLnNxcnQoTWF0aC5hYnMoYikpKSxiPWQtYix5LngtKGUueD8/MCk+MCYmKGI9LWIpLHYueCs9Yn1yZXR1cm4gdn0saX12YXIgWURlLFhEZSxqRGUsJEo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO3p0KCk7V3QoKTtIdCgpO2VyKCk7WURlPW8oKHQsZSxyLG4saSxhKT0+YE0ke3R9LCR7ZX0KICAgIGEke2l9LCR7YX0gMCwwLDEgMCwkey1ufQogICAgbCR7cn0sMAogICAgYSR7aX0sJHthfSAwLDAsMSAwLCR7bn0KICAgIE0ke3J9LCR7LW59CiAgICBhJHtpfSwke2F9IDAsMCwwIDAsJHtufQogICAgbCR7LXJ9LDBgLCJjcmVhdGVDeWxpbmRlclBhdGhEIiksWERlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0fSwke2V9YCxgTSR7dCtyfSwke2V9YCxgYSR7aX0sJHthfSAwLDAsMCAwLCR7LW59YCxgbCR7LXJ9LDBgLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWAsYGwke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLGpEZT1vKCh0LGUscixuLGksYSk9PltgTSR7dCtyLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhGSiwidGlsdGVkQ3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIHpKKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz1hLndpZHRoK2UucGFkZGluZyxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PVt7eDotMypsLzYseTowfSx7eDpzKzMqbC82LHk6MH0se3g6cyx5Oi1sfSx7eDowLHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9amUuc3ZnKGkpLHA9UWUoZSx7fSksbT1YdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPU1hKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxLZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBYZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgR0o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7byh6SiwidHJhcGV6b2lkIil9KTthc3luYyBmdW5jdGlvbiBWSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9NjAsbD0yMCx1PU1hdGgubWF4KHMsYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwsYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLHtjc3NTdHlsZXM6Zn09ZSxkPWplLnN2ZyhpKSxwPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYocC5yb3VnaG5lc3M9MCxwLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgbT1be3g6LXUvMiouOCx5Oi1oLzJ9LHt4OnUvMiouOCx5Oi1oLzJ9LHt4OnUvMix5Oi1oLzIqLjZ9LHt4OnUvMix5OmgvMn0se3g6LXUvMix5OmgvMn0se3g6LXUvMix5Oi1oLzIqLjZ9XSxnPVh0KG0pLHk9ZC5wYXRoKGcscCksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxLZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBYZS5wb2x5Z29uKGUsbSx4KX0saX12YXIgVUo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28oVkosInRyYXBlem9pZGFsUGVudGFnb24iKX0pO2FzeW5jIGZ1bmN0aW9uIEhKKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgbXQodCxlLGh0KGUpKSxsPWRyKG1lKCkuZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSx1PWEud2lkdGgrKGUucGFkZGluZz8/MCksaD11K2EuaGVpZ2h0LGY9dSthLmhlaWdodCxkPVt7eDowLHk6MH0se3g6Zix5OjB9LHt4OmYvMix5Oi1ofV0se2Nzc1N0eWxlczpwfT1lLG09amUuc3ZnKGkpLGc9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PVh0KGQpLHY9bS5wYXRoKHksZykseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sICR7aC8yfSlgKTtyZXR1cm4gcCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD11LGUuaGVpZ2h0PWgsS2UoZSx4KSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAke2gvMi0oYS5oZWlnaHQrKGUucGFkZGluZz8/MCkvKGw/MjoxKS0oYS55LShhLnRvcD8/MCkpKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFguaW5mbygiVHJpYW5nbGUgaW50ZXJzZWN0IixlLGQsYiksWGUucG9seWdvbihlLGQsYil9LGl9dmFyIFdKPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtGdCgpO0h0KCk7enQoKTtXdCgpO0Z0KCk7cHIoKTtHdCgpO28oSEosInRyaWFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBxSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS84LGY9dStoLHtjc3NTdHlsZXM6ZH09ZSxtPTcwLWwsZz1tPjA/bS8yOjAseT1qZS5zdmcoaSksdj1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHYucm91Z2huZXNzPTAsdi5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9W3t4Oi1sLzItZyx5OmYvMn0sLi4uR28oLWwvMi1nLGYvMixsLzIrZyxmLzIsaCwuOCkse3g6bC8yK2cseTotZi8yfSx7eDotbC8yLWcseTotZi8yfV0sYj1YdCh4KSxUPXkucGF0aChiLHYpLFM9aS5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBTLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJlMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxTLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHcpe3JldHVybiBYZS5wb2x5Z29uKGUseCx3KX0saX12YXIgWUo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7V3QoKTt6dCgpO28ocUosIndhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gWEoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgbXQodCxlLGh0KGUpKSxzPTEwMCxsPTUwLHU9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPXUvaCxkPXUscD1oO2Q+cCpmP3A9ZC9mOmQ9cCpmLGQ9TWF0aC5tYXgoZCxzKSxwPU1hdGgubWF4KHAsbCk7bGV0IG09TWF0aC5taW4ocCouMixwLzQpLGc9cCttKjIse2Nzc1N0eWxlczp5fT1lLHY9amUuc3ZnKGkpLHg9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih4LnJvdWdobmVzcz0wLHguZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBiPVt7eDotZC8yLHk6Zy8yfSwuLi5HbygtZC8yLGcvMixkLzIsZy8yLG0sMSkse3g6ZC8yLHk6LWcvMn0sLi4uR28oZC8yLC1nLzIsLWQvMiwtZy8yLG0sLTEpXSxUPVh0KGIpLFM9di5wYXRoKFQseCksdz1pLmluc2VydCgoKT0+UywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSx5JiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIseSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJncuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSxiLEUpfSxpfXZhciBqSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhYSiwid2F2ZVJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gS0oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPTUsZj0tbC8yLGQ9LXUvMix7Y3NzU3R5bGVzOnB9PWUsbT1qZS5zdmcoaSksZz1RZShlLHt9KSx5PVt7eDpmLWgseTpkLWh9LHt4OmYtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkLWh9XSx2PWBNJHtmLWh9LCR7ZC1ofSBMJHtmK2x9LCR7ZC1ofSBMJHtmK2x9LCR7ZCt1fSBMJHtmLWh9LCR7ZCt1fSBMJHtmLWh9LCR7ZC1ofQogICAgICAgICAgICAgICAgTSR7Zi1ofSwke2R9IEwke2YrbH0sJHtkfQogICAgICAgICAgICAgICAgTSR7Zn0sJHtkLWh9IEwke2Z9LCR7ZCt1fWA7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PW0ucGF0aCh2LGcpLGI9aS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gvMn0sICR7aC8yfSlgKSxiLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKStoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsYiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIFhlLnBvbHlnb24oZSx5LFQpfSxpfXZhciBRSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7enQoKTtXdCgpO0h0KCk7byhLSiwid2luZG93UGFuZSIpfSk7YXN5bmMgZnVuY3Rpb24gTUwodCxlKXtsZXQgcj1lO2lmKHIuYWxpYXMmJihlLmxhYmVsPXIuYWxpYXMpLGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXR7dGhlbWVWYXJpYWJsZXM6VX09dHIoKSx7YmFja2dyb3VuZDpLfT1VLGVlPXsuLi5lLGlkOmUuaWQrIi1iYWNrZ3JvdW5kIixsb29rOiJkZWZhdWx0Iixjc3NTdHlsZXM6WyJzdHJva2U6IG5vbmUiLGBmaWxsOiAke0t9YF19O2F3YWl0IE1MKHQsZWUpfWxldCBuPXRyKCk7ZS51c2VIdG1sTGFiZWxzPW4uaHRtbExhYmVscztsZXQgaT1uLmVyPy5kaWFncmFtUGFkZGluZz8/MTAsYT1uLmVyPy5lbnRpdHlQYWRkaW5nPz82LHtjc3NTdHlsZXM6c309ZSx7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnV9PVllKGUpO2lmKHIuYXR0cmlidXRlcy5sZW5ndGg9PT0wJiZlLmxhYmVsKXtsZXQgVT17cng6MCxyeTowLGxhYmVsUGFkZGluZ1g6aSxsYWJlbFBhZGRpbmdZOmkqMS41LGNsYXNzZXM6IiJ9O3JhKGUubGFiZWwsbikrVS5sYWJlbFBhZGRpbmdYKjI8bi5lci5taW5FbnRpdHlXaWR0aCYmKGUud2lkdGg9bi5lci5taW5FbnRpdHlXaWR0aCk7bGV0IEs9YXdhaXQgT3UodCxlLFUpO2lmKCFkcihuLmh0bWxMYWJlbHMpKXtsZXQgZWU9Sy5zZWxlY3QoInRleHQiKSxZPWVlLm5vZGUoKT8uZ2V0QkJveCgpO2VlLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1ZLndpZHRoLzJ9LCAwKWApfXJldHVybiBLfW4uaHRtbExhYmVsc3x8KGkqPTEuMjUsYSo9MS4yNSk7bGV0IGg9aHQoZSk7aHx8KGg9Im5vZGUgZGVmYXVsdCIpO2xldCBmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGgpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxkPWF3YWl0IEwyKGYsZS5sYWJlbD8/IiIsbiwwLDAsWyJuYW1lIl0sbCk7ZC5oZWlnaHQrPWE7bGV0IHA9MCxtPVtdLGc9W10seT0wLHY9MCx4PTAsYj0wLFQ9ITAsUz0hMDtmb3IobGV0IFUgb2Ygci5hdHRyaWJ1dGVzKXtsZXQgSz1hd2FpdCBMMihmLFUudHlwZSxuLDAscCxbImF0dHJpYnV0ZS10eXBlIl0sbCk7eT1NYXRoLm1heCh5LEsud2lkdGgraSk7bGV0IGVlPWF3YWl0IEwyKGYsVS5uYW1lLG4sMCxwLFsiYXR0cmlidXRlLW5hbWUiXSxsKTt2PU1hdGgubWF4KHYsZWUud2lkdGgraSk7bGV0IFk9YXdhaXQgTDIoZixVLmtleXMuam9pbigpLG4sMCxwLFsiYXR0cmlidXRlLWtleXMiXSxsKTt4PU1hdGgubWF4KHgsWS53aWR0aCtpKTtsZXQgY2U9YXdhaXQgTDIoZixVLmNvbW1lbnQsbiwwLHAsWyJhdHRyaWJ1dGUtY29tbWVudCJdLGwpO2I9TWF0aC5tYXgoYixjZS53aWR0aCtpKTtsZXQgWj1NYXRoLm1heChLLmhlaWdodCxlZS5oZWlnaHQsWS5oZWlnaHQsY2UuaGVpZ2h0KSthO2cucHVzaCh7eU9mZnNldDpwLHJvd0hlaWdodDpafSkscCs9Wn1sZXQgdz00O3g8PWkmJihUPSExLHg9MCx3LS0pLGI8PWkmJihTPSExLGI9MCx3LS0pO2xldCBFPWYubm9kZSgpLmdldEJCb3goKTtpZihkLndpZHRoK2kqMi0oeSt2K3grYik+MCl7bGV0IFU9ZC53aWR0aCtpKjItKHkrdit4K2IpO3krPVUvdyx2Kz1VL3cseD4wJiYoeCs9VS93KSxiPjAmJihiKz1VL3cpfWxldCBfPXkrdit4K2IsQz1qZS5zdmcoZiksRD1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKEQucm91Z2huZXNzPTAsRC5maWxsU3R5bGU9InNvbGlkIik7bGV0IE89MDtnLmxlbmd0aD4wJiYoTz1nLnJlZHVjZSgoVSxLKT0+VSsoSz8ucm93SGVpZ2h0Pz8wKSwwKSk7bGV0IFI9TWF0aC5tYXgoRS53aWR0aCtpKjIsZT8ud2lkdGh8fDAsXyksaz1NYXRoLm1heCgoTz8/MCkrZC5oZWlnaHQsZT8uaGVpZ2h0fHwwKSxMPS1SLzIsQT0tay8yO2Yuc2VsZWN0QWxsKCJnOm5vdCg6Zmlyc3QtY2hpbGQpIikuZWFjaCgoVSxLLGVlKT0+e2xldCBZPUdlKGVlW0tdKSxjZT1ZLmF0dHIoInRyYW5zZm9ybSIpLFo9MCx1ZT0wO2lmKGNlKXtsZXQgaj1SZWdFeHAoL3RyYW5zbGF0ZVwoKFteLF0rKSwoW14pXSspXCkvKS5leGVjKGNlKTtqJiYoWj1wYXJzZUZsb2F0KGpbMV0pLHVlPXBhcnNlRmxvYXQoalsyXSksWS5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJhdHRyaWJ1dGUtbmFtZSIpP1orPXk6WS5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJhdHRyaWJ1dGUta2V5cyIpP1orPXkrdjpZLmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImF0dHJpYnV0ZS1jb21tZW50IikmJihaKz15K3YreCkpfVkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7TCtpLzIrWn0sICR7dWUrQStkLmhlaWdodCthLzJ9KWApfSksZi5zZWxlY3QoIi5uYW1lIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKyhBK2EvMikrIikiKTtsZXQgST1DLnJlY3RhbmdsZShMLEEsUixrLEQpLE09Zi5pbnNlcnQoKCk9PkksIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixzLmpvaW4oIiIpKSx7dGhlbWVWYXJpYWJsZXM6UH09dHIoKSx7cm93RXZlbjpCLHJvd09kZDpGLG5vZGVCb3JkZXI6en09UDttLnB1c2goMCk7Zm9yKGxldFtVLEtdb2YgZy5lbnRyaWVzKCkpe2xldCBZPShVKzEpJTI9PT0wJiZLLnlPZmZzZXQhPT0wLGNlPUMucmVjdGFuZ2xlKEwsZC5oZWlnaHQrQStLPy55T2Zmc2V0LFIsSz8ucm93SGVpZ2h0LHsuLi5ELGZpbGw6WT9COkYsc3Ryb2tlOnp9KTtmLmluc2VydCgoKT0+Y2UsImcubGFiZWwiKS5hdHRyKCJzdHlsZSIscy5qb2luKCIiKSkuYXR0cigiY2xhc3MiLGByb3ctcmVjdC0ke1k/ImV2ZW4iOiJvZGQifWApfWxldCAkPUMubGluZShMLGQuaGVpZ2h0K0EsUitMLGQuaGVpZ2h0K0EsRCk7Zi5pbnNlcnQoKCk9PiQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLCQ9Qy5saW5lKHkrTCxkLmhlaWdodCtBLHkrTCxrK0EsRCksZi5pbnNlcnQoKCk9PiQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLFQmJigkPUMubGluZSh5K3YrTCxkLmhlaWdodCtBLHkrditMLGsrQSxEKSxmLmluc2VydCgoKT0+JCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikpLFMmJigkPUMubGluZSh5K3YreCtMLGQuaGVpZ2h0K0EseSt2K3grTCxrK0EsRCksZi5pbnNlcnQoKCk9PiQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpKTtmb3IobGV0IFUgb2YgbSkkPUMubGluZShMLGQuaGVpZ2h0K0ErVSxSK0wsZC5oZWlnaHQrQStVLEQpLGYuaW5zZXJ0KCgpPT4kKS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKTtpZihLZShlLE0pLHUmJmUubG9vayE9PSJoYW5kRHJhd24iKXtsZXQgSz11LnNwbGl0KCI7Iik/LmZpbHRlcihlZT0+ZWUuaW5jbHVkZXMoInN0cm9rZSIpKT8ubWFwKGVlPT5gJHtlZX1gKS5qb2luKCI7ICIpO2Yuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLEs/PyIiKSxmLnNlbGVjdEFsbCgiLnJvdy1yZWN0LWV2ZW4gcGF0aCIpLmF0dHIoInN0eWxlIix1KX1yZXR1cm4gZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVSl7cmV0dXJuIFhlLnJlY3QoZSxVKX0sZn1hc3luYyBmdW5jdGlvbiBMMih0LGUscixuPTAsaT0wLGE9W10scz0iIil7bGV0IGw9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYGxhYmVsICR7YS5qb2luKCIgIil9YCkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7bn0sICR7aX0pYCkuYXR0cigic3R5bGUiLHMpO2UhPT1pYyhlKSYmKGU9aWMoZSksZT1lLnJlcGxhY2VBbGwoIjwiLCImbHQ7IikucmVwbGFjZUFsbCgiPiIsIiZndDsiKSk7bGV0IHU9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgcW4obCxlLHt3aWR0aDpyYShlLHIpKzEwMCxzdHlsZTpzLHVzZUh0bWxMYWJlbHM6ci5odG1sTGFiZWxzfSxyKSk7aWYoZS5pbmNsdWRlcygiJmx0OyIpfHxlLmluY2x1ZGVzKCImZ3Q7Iikpe2xldCBmPXUuY2hpbGRyZW5bMF07Zm9yKGYudGV4dENvbnRlbnQ9Zi50ZXh0Q29udGVudC5yZXBsYWNlQWxsKCImbHQ7IiwiPCIpLnJlcGxhY2VBbGwoIiZndDsiLCI+Iik7Zi5jaGlsZE5vZGVzWzBdOylmPWYuY2hpbGROb2Rlc1swXSxmLnRleHRDb250ZW50PWYudGV4dENvbnRlbnQucmVwbGFjZUFsbCgiJmx0OyIsIjwiKS5yZXBsYWNlQWxsKCImZ3Q7IiwiPiIpfWxldCBoPXUuZ2V0QkJveCgpO2lmKGRyKHIuaHRtbExhYmVscykpe2xldCBmPXUuY2hpbGRyZW5bMF07Zi5zdHlsZS50ZXh0QWxpZ249InN0YXJ0IjtsZXQgZD1HZSh1KTtoPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZC5hdHRyKCJ3aWR0aCIsaC53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1yZXR1cm4gaH12YXIgWko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0VtKCk7bWkoKTthbygpO3ByKCk7ZnIoKTtlcigpO28oTUwsImVyQm94Iik7byhMMiwiYWRkVGV4dCIpfSk7YXN5bmMgZnVuY3Rpb24gSkoodCxlLHIsbixpPXIuY2xhc3MucGFkZGluZz8/MTIpe2xldCBhPW4/MDozLHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxsPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwsZD0wLHA9MCxtPTA7aWYobD1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYW5ub3RhdGlvbi1ncm91cCB0ZXh0IiksZS5hbm5vdGF0aW9ucy5sZW5ndGg+MCl7bGV0IGI9ZS5hbm5vdGF0aW9uc1swXTthd2FpdCBudyhsLHt0ZXh0OmBceEFCJHtifVx4QkJgfSwwKSxkPWwubm9kZSgpLmdldEJCb3goKS5oZWlnaHR9dT1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwtZ3JvdXAgdGV4dCIpLGF3YWl0IG53KHUsZSwwLFsiZm9udC13ZWlnaHQ6IGJvbGRlciJdKTtsZXQgZz11Lm5vZGUoKS5nZXRCQm94KCk7cD1nLmhlaWdodCxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJtZW1iZXJzLWdyb3VwIHRleHQiKTtsZXQgeT0wO2ZvcihsZXQgYiBvZiBlLm1lbWJlcnMpe2xldCBUPWF3YWl0IG53KGgsYix5LFtiLnBhcnNlQ2xhc3NpZmllcigpXSk7eSs9VCthfW09aC5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxtPD0wJiYobT1pLzIpLGY9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm1ldGhvZHMtZ3JvdXAgdGV4dCIpO2xldCB2PTA7Zm9yKGxldCBiIG9mIGUubWV0aG9kcyl7bGV0IFQ9YXdhaXQgbncoZixiLHYsW2IucGFyc2VDbGFzc2lmaWVyKCldKTt2Kz1UK2F9bGV0IHg9cy5ub2RlKCkuZ2V0QkJveCgpO2lmKGwhPT1udWxsKXtsZXQgYj1sLm5vZGUoKS5nZXRCQm94KCk7bC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYi53aWR0aC8yfSlgKX1yZXR1cm4gdS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZy53aWR0aC8yfSwgJHtkfSlgKSx4PXMubm9kZSgpLmdldEJCb3goKSxoLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke2QrcCtpKjJ9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLGYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsICR7ZCtwKyhtP20raSo0OmkqMil9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLHtzaGFwZVN2ZzpzLGJib3g6eH19YXN5bmMgZnVuY3Rpb24gbncodCxlLHIsbj1bXSl7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLG4uam9pbigiOyAiKSksYT10cigpLHM9InVzZUh0bWxMYWJlbHMiaW4gZT9lLnVzZUh0bWxMYWJlbHM6ZHIoYS5odG1sTGFiZWxzKT8/ITAsbD0iIjsidGV4dCJpbiBlP2w9ZS50ZXh0Omw9ZS5sYWJlbCwhcyYmbC5zdGFydHNXaXRoKCJcXCIpJiYobD1sLnN1YnN0cmluZygxKSkseWkobCkmJihzPSEwKTtsZXQgdT1hd2FpdCBxbihpLGZkKG5hKGwpKSx7d2lkdGg6cmEobCxhKSs1MCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIix1c2VIdG1sTGFiZWxzOnN9LGEpLGgsZj0xO2lmKHMpe2xldCBkPXUuY2hpbGRyZW5bMF0scD1HZSh1KTtmPWQuaW5uZXJIVE1MLnNwbGl0KCI8YnI+IikubGVuZ3RoLGQuaW5uZXJIVE1MLmluY2x1ZGVzKCI8L21hdGg+IikmJihmKz1kLmlubmVySFRNTC5zcGxpdCgiPG1yb3c+IikubGVuZ3RoLTEpO2xldCBtPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKG0pe2xldCBnPWwucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4ubV0ubWFwKHk9Pm5ldyBQcm9taXNlKHY9PntmdW5jdGlvbiB4KCl7aWYoeS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix5LnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsZyl7bGV0IGI9YS5mb250U2l6ZT8udG9TdHJpbmcoKT8/d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsUz1wYXJzZUludChiLDEwKSo1KyJweCI7eS5zdHlsZS5taW5XaWR0aD1TLHkuc3R5bGUubWF4V2lkdGg9U31lbHNlIHkuc3R5bGUud2lkdGg9IjEwMCUiO3YoeSl9byh4LCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e3kuY29tcGxldGUmJngoKX0pLHkuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCl9KSkpfWg9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwLmF0dHIoIndpZHRoIixoLndpZHRoKSxwLmF0dHIoImhlaWdodCIsaC5oZWlnaHQpfWVsc2V7bi5pbmNsdWRlcygiZm9udC13ZWlnaHQ6IGJvbGRlciIpJiZHZSh1KS5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLCIiKSxmPXUuY2hpbGRyZW4ubGVuZ3RoO2xldCBkPXUuY2hpbGRyZW5bMF07KHUudGV4dENvbnRlbnQ9PT0iInx8dS50ZXh0Q29udGVudC5pbmNsdWRlcygiJmd0IikpJiYoZC50ZXh0Q29udGVudD1sWzBdK2wuc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoIiZndDsiLCI+IikucmVwbGFjZUFsbCgiJmx0OyIsIjwiKS50cmltKCksbFsxXT09PSIgIiYmKGQudGV4dENvbnRlbnQ9ZC50ZXh0Q29udGVudFswXSsiICIrZC50ZXh0Q29udGVudC5zdWJzdHJpbmcoMSkpKSxkLnRleHRDb250ZW50PT09InVuZGVmaW5lZCImJihkLnRleHRDb250ZW50PSIiKSxoPXUuZ2V0QkJveCgpfXJldHVybiBpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKC1oLmhlaWdodC8oMipmKStyKSsiKSIpLGguaGVpZ2h0fXZhciBlZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO21pKCk7RnQoKTtlcigpO0d0KCk7YW8oKTtwcigpO28oSkosInRleHRIZWxwZXIiKTtvKG53LCJhZGRUZXh0Iil9KTthc3luYyBmdW5jdGlvbiB0ZWUodCxlKXtsZXQgcj1tZSgpLG49ci5jbGFzcy5wYWRkaW5nPz8xMixpPW4sYT1lLnVzZUh0bWxMYWJlbHM/P2RyKHIuaHRtbExhYmVscyk/PyEwLHM9ZTtzLmFubm90YXRpb25zPXMuYW5ub3RhdGlvbnM/P1tdLHMubWVtYmVycz1zLm1lbWJlcnM/P1tdLHMubWV0aG9kcz1zLm1ldGhvZHM/P1tdO2xldHtzaGFwZVN2ZzpsLGJib3g6dX09YXdhaXQgSkoodCxlLHIsYSxpKSx7bGFiZWxTdHlsZXM6aCxub2RlU3R5bGVzOmZ9PVllKGUpO2UubGFiZWxTdHlsZT1oLGUuY3NzU3R5bGVzPXMuc3R5bGVzfHwiIjtsZXQgZD1zLnN0eWxlcz8uam9pbigiOyIpfHxmfHwiIjtlLmNzc1N0eWxlc3x8KGUuY3NzU3R5bGVzPWQucmVwbGFjZUFsbCgiIWltcG9ydGFudCIsIiIpLnNwbGl0KCI7IikpO2xldCBwPXMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MCYmIXIuY2xhc3M/LmhpZGVFbXB0eU1lbWJlcnNCb3gsbT1qZS5zdmcobCksZz1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9dS53aWR0aCx2PXUuaGVpZ2h0O3MubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD92Kz1pOnMubWVtYmVycy5sZW5ndGg+MCYmcy5tZXRob2RzLmxlbmd0aD09PTAmJih2Kz1pKjIpO2xldCB4PS15LzIsYj0tdi8yLFQ9bS5yZWN0YW5nbGUoeC1uLGItbi0ocD9uOnMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD8tbi8yOjApLHkrMipuLHYrMipuKyhwP24qMjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW46MCksZyksUz1sLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIik7Uy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpO2xldCB3PVMubm9kZSgpLmdldEJCb3goKTtsLnNlbGVjdEFsbCgiLnRleHQiKS5lYWNoKChELE8sUik9PntsZXQgaz1HZShSW09dKSxMPWsuYXR0cigidHJhbnNmb3JtIiksQT0wO2lmKEwpe2xldCBCPVJlZ0V4cCgvdHJhbnNsYXRlXCgoW14sXSspLChbXildKylcKS8pLmV4ZWMoTCk7QiYmKEE9cGFyc2VGbG9hdChCWzJdKSl9bGV0IEk9QStiK24tKHA/bjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW4vMjowKTthfHwoSS09NCk7bGV0IE09eDsoay5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJsYWJlbC1ncm91cCIpfHxrLmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImFubm90YXRpb24tZ3JvdXAiKSkmJihNPS1rLm5vZGUoKT8uZ2V0QkJveCgpLndpZHRoLzJ8fDAsbC5zZWxlY3RBbGwoInRleHQiKS5lYWNoKGZ1bmN0aW9uKFAsQixGKXt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShGW0JdKS50ZXh0QW5jaG9yPT09Im1pZGRsZSImJihNPTApfSkpLGsuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7TX0sICR7SX0pYCl9KTtsZXQgRT1sLnNlbGVjdCgiLmFubm90YXRpb24tZ3JvdXAiKS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodC0ocD9uLzI6MCl8fDAsXz1sLnNlbGVjdCgiLmxhYmVsLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwLEM9bC5zZWxlY3QoIi5tZW1iZXJzLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwO2lmKHMubWVtYmVycy5sZW5ndGg+MHx8cy5tZXRob2RzLmxlbmd0aD4wfHxwKXtsZXQgRD1tLmxpbmUody54LEUrXytiK24sdy54K3cud2lkdGgsRStfK2IrbixnKTtsLmluc2VydCgoKT0+RCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigic3R5bGUiLGQpfWlmKHB8fHMubWVtYmVycy5sZW5ndGg+MHx8cy5tZXRob2RzLmxlbmd0aD4wKXtsZXQgRD1tLmxpbmUody54LEUrXytDK2IraSoyK24sdy54K3cud2lkdGgsRStfK0MrYituK2kqMixnKTtsLmluc2VydCgoKT0+RCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigic3R5bGUiLGQpfWlmKHMubG9vayE9PSJoYW5kRHJhd24iJiZsLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxTLnNlbGVjdCgiOm50aC1jaGlsZCgyKSIpLmF0dHIoInN0eWxlIixkKSxsLnNlbGVjdEFsbCgiLmRpdmlkZXIiKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksZS5sYWJlbFN0eWxlP2wuc2VsZWN0QWxsKCJzcGFuIikuYXR0cigic3R5bGUiLGUubGFiZWxTdHlsZSk6bC5zZWxlY3RBbGwoInNwYW4iKS5hdHRyKCJzdHlsZSIsZCksIWEpe2xldCBEPVJlZ0V4cCgvY29sb3Jccyo6XHMqKFteO10qKS8pLE89RC5leGVjKGQpO2lmKE8pe2xldCBSPU9bMF0ucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7bC5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigic3R5bGUiLFIpfWVsc2UgaWYoaCl7bGV0IFI9RC5leGVjKGgpO2lmKFIpe2xldCBrPVJbMF0ucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7bC5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigic3R5bGUiLGspfX19cmV0dXJuIEtlKGUsUyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRCl7cmV0dXJuIFhlLnJlY3QoZSxEKX0sbH12YXIgcmVlPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtHdCgpO2ZyKCk7V3QoKTt6dCgpO0h0KCk7ZWVlKCk7cHIoKTtvKHRlZSwiY2xhc3NCb3giKX0pO2FzeW5jIGZ1bmN0aW9uIG5lZSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0IGk9ZSxhPWUscz0yMCxsPTIwLHU9InZlcmlmeU1ldGhvZCJpbiBlLGg9aHQoZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixoKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCksZDt1P2Q9YXdhaXQgUHUoZixgJmx0OyZsdDske2kudHlwZX0mZ3Q7Jmd0O2AsMCxlLmxhYmVsU3R5bGUpOmQ9YXdhaXQgUHUoZiwiJmx0OyZsdDtFbGVtZW50Jmd0OyZndDsiLDAsZS5sYWJlbFN0eWxlKTtsZXQgcD1kLG09YXdhaXQgUHUoZixpLm5hbWUscCxlLmxhYmVsU3R5bGUrIjsgZm9udC13ZWlnaHQ6IGJvbGQ7Iik7aWYocCs9bStsLHUpe2xldCBFPWF3YWl0IFB1KGYsYCR7aS5yZXF1aXJlbWVudElkP2BpZDogJHtpLnJlcXVpcmVtZW50SWR9YDoiIn1gLHAsZS5sYWJlbFN0eWxlKTtwKz1FO2xldCBfPWF3YWl0IFB1KGYsYCR7aS50ZXh0P2BUZXh0OiAke2kudGV4dH1gOiIifWAscCxlLmxhYmVsU3R5bGUpO3ArPV87bGV0IEM9YXdhaXQgUHUoZixgJHtpLnJpc2s/YFJpc2s6ICR7aS5yaXNrfWA6IiJ9YCxwLGUubGFiZWxTdHlsZSk7cCs9Qyxhd2FpdCBQdShmLGAke2kudmVyaWZ5TWV0aG9kP2BWZXJpZmljYXRpb246ICR7aS52ZXJpZnlNZXRob2R9YDoiIn1gLHAsZS5sYWJlbFN0eWxlKX1lbHNle2xldCBFPWF3YWl0IFB1KGYsYCR7YS50eXBlP2BUeXBlOiAke2EudHlwZX1gOiIifWAscCxlLmxhYmVsU3R5bGUpO3ArPUUsYXdhaXQgUHUoZixgJHthLmRvY1JlZj9gRG9jIFJlZjogJHthLmRvY1JlZn1gOiIifWAscCxlLmxhYmVsU3R5bGUpfWxldCBnPShmLm5vZGUoKT8uZ2V0QkJveCgpLndpZHRoPz8yMDApK3MseT0oZi5ub2RlKCk/LmdldEJCb3goKS5oZWlnaHQ/PzIwMCkrcyx2PS1nLzIseD0teS8yLGI9amUuc3ZnKGYpLFQ9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihULnJvdWdobmVzcz0wLFQuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBTPWIucmVjdGFuZ2xlKHYseCxnLHksVCksdz1mLmluc2VydCgoKT0+UywiOmZpcnN0LWNoaWxkIik7aWYody5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixuKSxmLnNlbGVjdEFsbCgiLmxhYmVsIikuZWFjaCgoRSxfLEMpPT57bGV0IEQ9R2UoQ1tfXSksTz1ELmF0dHIoInRyYW5zZm9ybSIpLFI9MCxrPTA7aWYoTyl7bGV0IE09UmVnRXhwKC90cmFuc2xhdGVcKChbXixdKyksKFteKV0rKVwpLykuZXhlYyhPKTtNJiYoUj1wYXJzZUZsb2F0KE1bMV0pLGs9cGFyc2VGbG9hdChNWzJdKSl9bGV0IEw9ay15LzIsQT12K3MvMjsoXz09PTB8fF89PT0xKSYmKEE9UiksRC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtBfSwgJHtMK3N9KWApfSkscD5kK20rbCl7bGV0IEU9Yi5saW5lKHYseCtkK20rbCx2K2cseCtkK20rbCxUKTtmLmluc2VydCgoKT0+RSkuYXR0cigic3R5bGUiLG4pfXJldHVybiBLZShlLHcpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBYZS5yZWN0KGUsRSl9LGZ9YXN5bmMgZnVuY3Rpb24gUHUodCxlLHIsbj0iIil7aWYoZT09PSIiKXJldHVybiAwO2xldCBpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixuKSxhPW1lKCkscz1hLmh0bWxMYWJlbHM/PyEwLGw9YXdhaXQgcW4oaSxmZChuYShlKSkse3dpZHRoOnJhKGUsYSkrNTAsY2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCIsdXNlSHRtbExhYmVsczpzLHN0eWxlOm59LGEpLHU7aWYocyl7bGV0IGg9bC5jaGlsZHJlblswXSxmPUdlKGwpO3U9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmLmF0dHIoIndpZHRoIix1LndpZHRoKSxmLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpfWVsc2V7bGV0IGg9bC5jaGlsZHJlblswXTtmb3IobGV0IGYgb2YgaC5jaGlsZHJlbilmLnRleHRDb250ZW50PWYudGV4dENvbnRlbnQucmVwbGFjZUFsbCgiJmd0OyIsIj4iKS5yZXBsYWNlQWxsKCImbHQ7IiwiPCIpLG4mJmYuc2V0QXR0cmlidXRlKCJzdHlsZSIsbik7dT1sLmdldEJCb3goKSx1LmhlaWdodCs9Nn1yZXR1cm4gaS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS53aWR0aC8yfSwkey11LmhlaWdodC8yK3J9KWApLHUuaGVpZ2h0fXZhciBpZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO2VyKCk7R3QoKTthbygpO2ZyKCk7byhuZWUsInJlcXVpcmVtZW50Qm94Iik7byhQdSwiYWRkVGV4dCIpfSk7YXN5bmMgZnVuY3Rpb24gYWVlKHQsZSx7Y29uZmlnOnJ9KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVllKGUpO2UubGFiZWxTdHlsZT1ufHwiIjtsZXQgYT0xMCxzPWUud2lkdGg7ZS53aWR0aD0oZS53aWR0aD8/MjAwKS0xMDtsZXR7c2hhcGVTdmc6bCxiYm94OnUsbGFiZWw6aH09YXdhaXQgbXQodCxlLGh0KGUpKSxmPWUucGFkZGluZ3x8MTAsZD0iIixwOyJ0aWNrZXQiaW4gZSYmZS50aWNrZXQmJnI/LmthbmJhbj8udGlja2V0QmFzZVVybCYmKGQ9cj8ua2FuYmFuPy50aWNrZXRCYXNlVXJsLnJlcGxhY2UoIiNUSUNLRVQjIixlLnRpY2tldCkscD1sLmluc2VydCgic3ZnOmEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImthbmJhbi10aWNrZXQtbGluayIpLmF0dHIoInhsaW5rOmhyZWYiLGQpLmF0dHIoInRhcmdldCIsIl9ibGFuayIpKTtsZXQgbT17dXNlSHRtbExhYmVsczplLnVzZUh0bWxMYWJlbHMsbGFiZWxTdHlsZTplLmxhYmVsU3R5bGV8fCIiLHdpZHRoOmUud2lkdGgsaW1nOmUuaW1nLHBhZGRpbmc6ZS5wYWRkaW5nfHw4LGNlbnRlckxhYmVsOiExfSxnLHk7cD97bGFiZWw6ZyxiYm94Onl9PWF3YWl0IEhUKHAsInRpY2tldCJpbiBlJiZlLnRpY2tldHx8IiIsbSk6e2xhYmVsOmcsYmJveDp5fT1hd2FpdCBIVChsLCJ0aWNrZXQiaW4gZSYmZS50aWNrZXR8fCIiLG0pO2xldHtsYWJlbDp2LGJib3g6eH09YXdhaXQgSFQobCwiYXNzaWduZWQiaW4gZSYmZS5hc3NpZ25lZHx8IiIsbSk7ZS53aWR0aD1zO2xldCBiPTEwLFQ9ZT8ud2lkdGh8fDAsUz1NYXRoLm1heCh5LmhlaWdodCx4LmhlaWdodCkvMix3PU1hdGgubWF4KHUuaGVpZ2h0K2IqMixlPy5oZWlnaHR8fDApK1MsRT0tVC8yLF89LXcvMjtoLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmLVQvMikrIiwgIisoLVMtdS5oZWlnaHQvMikrIikiKSxnLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmLVQvMikrIiwgIisoLVMrdS5oZWlnaHQvMikrIikiKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmK1QvMi14LndpZHRoLTIqYSkrIiwgIisoLVMrdS5oZWlnaHQvMikrIikiKTtsZXQgQyx7cng6RCxyeTpPfT1lLHtjc3NTdHlsZXM6Un09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGs9amUuc3ZnKGwpLEw9UWUoZSx7fSksQT1EfHxPP2sucGF0aChPYShFLF8sVCx3LER8fDApLEwpOmsucmVjdGFuZ2xlKEUsXyxULHcsTCk7Qz1sLmluc2VydCgoKT0+QSwiOmZpcnN0LWNoaWxkIiksQy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixSfHxudWxsKX1lbHNle0M9bC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxDLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIF9fQVBBX18iKS5hdHRyKCJzdHlsZSIsaSkuYXR0cigicngiLEQ/PzUpLmF0dHIoInJ5IixPPz81KS5hdHRyKCJ4IixFKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0Iix3KTtsZXQgaz0icHJpb3JpdHkiaW4gZSYmZS5wcmlvcml0eTtpZihrKXtsZXQgTD1sLmFwcGVuZCgibGluZSIpLEE9RSsyLEk9XytNYXRoLmZsb29yKChEPz8wKS8yKSxNPV8rdy1NYXRoLmZsb29yKChEPz8wKS8yKTtMLmF0dHIoIngxIixBKS5hdHRyKCJ5MSIsSSkuYXR0cigieDIiLEEpLmF0dHIoInkyIixNKS5hdHRyKCJzdHJva2Utd2lkdGgiLCI0IikuYXR0cigic3Ryb2tlIixLRGUoaykpfX1yZXR1cm4gS2UoZSxDKSxlLmhlaWdodD13LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGspe3JldHVybiBYZS5yZWN0KGUsayl9LGx9dmFyIEtEZSxzZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7WmgoKTt6dCgpO1d0KCk7S0RlPW8odD0+e3N3aXRjaCh0KXtjYXNlIlZlcnkgSGlnaCI6cmV0dXJuInJlZCI7Y2FzZSJIaWdoIjpyZXR1cm4ib3JhbmdlIjtjYXNlIk1lZGl1bSI6cmV0dXJuIG51bGw7Y2FzZSJMb3ciOnJldHVybiJibHVlIjtjYXNlIlZlcnkgTG93IjpyZXR1cm4ibGlnaHRibHVlIn19LCJjb2xvckZyb21Qcmlvcml0eSIpO28oYWVlLCJrYW5iYW5JdGVtIil9KTtmdW5jdGlvbiBvZWUodCl7cmV0dXJuIHQgaW4gSUx9dmFyIFFEZSxaRGUsSUwsT0w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYUSgpO1FRKCk7SlEoKTt0WigpO25aKCk7YVooKTtvWigpO2NaKCk7aFooKTtkWigpO21aKCk7eVooKTt4WigpO1RaKCk7a1ooKTtTWigpO0FaKCk7RFooKTtSWigpO01aKCk7T1ooKTtCWigpOyRaKCk7R1ooKTtVWigpO1daKCk7WVooKTtqWigpO1FaKCk7SlooKTt0SigpO25KKCk7YUooKTtvSigpO2NKKCk7aEooKTtkSigpO21KKCk7eUooKTt4SigpO1RKKCk7a0ooKTtTSigpO0FKKCk7REooKTtSSigpO01KKCk7T0ooKTtCSigpOyRKKCk7R0ooKTtVSigpO1dKKCk7WUooKTtqSigpO1FKKCk7WkooKTtyZWUoKTtpZWUoKTtzZWUoKTtRRGU9W3tzZW1hbnRpY05hbWU6IlByb2Nlc3MiLG5hbWU6IlJlY3RhbmdsZSIsc2hvcnROYW1lOiJyZWN0IixkZXNjcmlwdGlvbjoiU3RhbmRhcmQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbInByb2MiLCJwcm9jZXNzIiwicmVjdGFuZ2xlIl0saW50ZXJuYWxBbGlhc2VzOlsic3F1YXJlUmVjdCJdLGhhbmRsZXI6Ykp9LHtzZW1hbnRpY05hbWU6IkV2ZW50IixuYW1lOiJSb3VuZGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJyb3VuZGVkIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhbiBldmVudCIsYWxpYXNlczpbImV2ZW50Il0saW50ZXJuYWxBbGlhc2VzOlsicm91bmRlZFJlY3QiXSxoYW5kbGVyOnBKfSx7c2VtYW50aWNOYW1lOiJUZXJtaW5hbCBQb2ludCIsbmFtZToiU3RhZGl1bSIsc2hvcnROYW1lOiJzdGFkaXVtIixkZXNjcmlwdGlvbjoiVGVybWluYWwgcG9pbnQiLGFsaWFzZXM6WyJ0ZXJtaW5hbCIsInBpbGwiXSxoYW5kbGVyOndKfSx7c2VtYW50aWNOYW1lOiJTdWJwcm9jZXNzIixuYW1lOiJGcmFtZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImZyLXJlY3QiLGRlc2NyaXB0aW9uOiJTdWJwcm9jZXNzIixhbGlhc2VzOlsic3VicHJvY2VzcyIsInN1YnByb2MiLCJmcmFtZWQtcmVjdGFuZ2xlIiwic3Vicm91dGluZSJdLGhhbmRsZXI6TEp9LHtzZW1hbnRpY05hbWU6IkRhdGFiYXNlIixuYW1lOiJDeWxpbmRlciIsc2hvcnROYW1lOiJjeWwiLGRlc2NyaXB0aW9uOiJEYXRhYmFzZSBzdG9yYWdlIixhbGlhc2VzOlsiZGIiLCJkYXRhYmFzZSIsImN5bGluZGVyIl0saGFuZGxlcjpwWn0se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IkNpcmNsZSIsc2hvcnROYW1lOiJjaXJjbGUiLGRlc2NyaXB0aW9uOiJTdGFydGluZyBwb2ludCIsYWxpYXNlczpbImNpcmMiXSxoYW5kbGVyOnJafSx7c2VtYW50aWNOYW1lOiJEZWNpc2lvbiIsbmFtZToiRGlhbW9uZCIsc2hvcnROYW1lOiJkaWFtIixkZXNjcmlwdGlvbjoiRGVjaXNpb24tbWFraW5nIHN0ZXAiLGFsaWFzZXM6WyJkZWNpc2lvbiIsImRpYW1vbmQiLCJxdWVzdGlvbiJdLGhhbmRsZXI6bEp9LHtzZW1hbnRpY05hbWU6IlByZXBhcmUgQ29uZGl0aW9uYWwiLG5hbWU6IkhleGFnb24iLHNob3J0TmFtZToiaGV4IixkZXNjcmlwdGlvbjoiUHJlcGFyYXRpb24gb3IgY29uZGl0aW9uIHN0ZXAiLGFsaWFzZXM6WyJoZXhhZ29uIiwicHJlcGFyZSJdLGhhbmRsZXI6X1p9LHtzZW1hbnRpY05hbWU6IkRhdGEgSW5wdXQvT3V0cHV0IixuYW1lOiJMZWFuIFJpZ2h0IixzaG9ydE5hbWU6ImxlYW4tciIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgaW5wdXQgb3Igb3V0cHV0IixhbGlhc2VzOlsibGVhbi1yaWdodCIsImluLW91dCJdLGludGVybmFsQWxpYXNlczpbImxlYW5fcmlnaHQiXSxoYW5kbGVyOlhafSx7c2VtYW50aWNOYW1lOiJEYXRhIElucHV0L091dHB1dCIsbmFtZToiTGVhbiBMZWZ0IixzaG9ydE5hbWU6ImxlYW4tbCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgb3V0cHV0IG9yIGlucHV0IixhbGlhc2VzOlsibGVhbi1sZWZ0Iiwib3V0LWluIl0saW50ZXJuYWxBbGlhc2VzOlsibGVhbl9sZWZ0Il0saGFuZGxlcjpxWn0se3NlbWFudGljTmFtZToiUHJpb3JpdHkgQWN0aW9uIixuYW1lOiJUcmFwZXpvaWQgQmFzZSBCb3R0b20iLHNob3J0TmFtZToidHJhcC1iIixkZXNjcmlwdGlvbjoiUHJpb3JpdHkgYWN0aW9uIixhbGlhc2VzOlsicHJpb3JpdHkiLCJ0cmFwZXpvaWQtYm90dG9tIiwidHJhcGV6b2lkIl0saGFuZGxlcjp6Sn0se3NlbWFudGljTmFtZToiTWFudWFsIE9wZXJhdGlvbiIsbmFtZToiVHJhcGV6b2lkIEJhc2UgVG9wIixzaG9ydE5hbWU6InRyYXAtdCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBtYW51YWwgdGFzayIsYWxpYXNlczpbIm1hbnVhbCIsInRyYXBlem9pZC10b3AiLCJpbnYtdHJhcGV6b2lkIl0saW50ZXJuYWxBbGlhc2VzOlsiaW52X3RyYXBlem9pZCJdLGhhbmRsZXI6Vlp9LHtzZW1hbnRpY05hbWU6IlN0b3AiLG5hbWU6IkRvdWJsZSBDaXJjbGUiLHNob3J0TmFtZToiZGJsLWNpcmMiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgc3RvcCBwb2ludCIsYWxpYXNlczpbImRvdWJsZS1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJkb3VibGVjaXJjbGUiXSxoYW5kbGVyOnZafSx7c2VtYW50aWNOYW1lOiJUZXh0IEJsb2NrIixuYW1lOiJUZXh0IEJsb2NrIixzaG9ydE5hbWU6InRleHQiLGRlc2NyaXB0aW9uOiJUZXh0IGJsb2NrIixoYW5kbGVyOlBKfSx7c2VtYW50aWNOYW1lOiJDYXJkIixuYW1lOiJOb3RjaGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJub3RjaC1yZWN0IixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGNhcmQiLGFsaWFzZXM6WyJjYXJkIiwibm90Y2hlZC1yZWN0YW5nbGUiXSxoYW5kbGVyOlpRfSx7c2VtYW50aWNOYW1lOiJMaW5lZC9TaGFkZWQgUHJvY2VzcyIsbmFtZToiTGluZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6Imxpbi1yZWN0IixkZXNjcmlwdGlvbjoiTGluZWQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbImxpbmVkLXJlY3RhbmdsZSIsImxpbmVkLXByb2Nlc3MiLCJsaW4tcHJvYyIsInNoYWRlZC1wcm9jZXNzIl0saGFuZGxlcjpnSn0se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IlNtYWxsIENpcmNsZSIsc2hvcnROYW1lOiJzbS1jaXJjIixkZXNjcmlwdGlvbjoiU21hbGwgc3RhcnRpbmcgcG9pbnQiLGFsaWFzZXM6WyJzdGFydCIsInNtYWxsLWNpcmNsZSJdLGludGVybmFsQWxpYXNlczpbInN0YXRlU3RhcnQiXSxoYW5kbGVyOl9KfSx7c2VtYW50aWNOYW1lOiJTdG9wIixuYW1lOiJGcmFtZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImZyLWNpcmMiLGRlc2NyaXB0aW9uOiJTdG9wIHBvaW50IixhbGlhc2VzOlsic3RvcCIsImZyYW1lZC1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJzdGF0ZUVuZCJdLGhhbmRsZXI6Q0p9LHtzZW1hbnRpY05hbWU6IkZvcmsvSm9pbiIsbmFtZToiRmlsbGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJmb3JrIixkZXNjcmlwdGlvbjoiRm9yayBvciBqb2luIGluIHByb2Nlc3MgZmxvdyIsYWxpYXNlczpbImpvaW4iXSxpbnRlcm5hbEFsaWFzZXM6WyJmb3JrSm9pbiJdLGhhbmRsZXI6RVp9LHtzZW1hbnRpY05hbWU6IkNvbGxhdGUiLG5hbWU6IkhvdXJnbGFzcyIsc2hvcnROYW1lOiJob3VyZ2xhc3MiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgY29sbGF0ZSBvcGVyYXRpb24iLGFsaWFzZXM6WyJob3VyZ2xhc3MiLCJjb2xsYXRlIl0saGFuZGxlcjpMWn0se3NlbWFudGljTmFtZToiQ29tbWVudCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsYWxpYXNlczpbImNvbW1lbnQiLCJicmFjZS1sIl0saGFuZGxlcjpzWn0se3NlbWFudGljTmFtZToiQ29tbWVudCBSaWdodCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UtciIsZGVzY3JpcHRpb246IkFkZHMgYSBjb21tZW50IixoYW5kbGVyOmxafSx7c2VtYW50aWNOYW1lOiJDb21tZW50IHdpdGggYnJhY2VzIG9uIGJvdGggc2lkZXMiLG5hbWU6IkN1cmx5IEJyYWNlcyIsc2hvcnROYW1lOiJicmFjZXMiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsaGFuZGxlcjp1Wn0se3NlbWFudGljTmFtZToiQ29tIExpbmsiLG5hbWU6IkxpZ2h0bmluZyBCb2x0IixzaG9ydE5hbWU6ImJvbHQiLGRlc2NyaXB0aW9uOiJDb21tdW5pY2F0aW9uIGxpbmsiLGFsaWFzZXM6WyJjb20tbGluayIsImxpZ2h0bmluZy1ib2x0Il0saGFuZGxlcjpLWn0se3NlbWFudGljTmFtZToiRG9jdW1lbnQiLG5hbWU6IkRvY3VtZW50IixzaG9ydE5hbWU6ImRvYyIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBkb2N1bWVudCIsYWxpYXNlczpbImRvYyIsImRvY3VtZW50Il0saGFuZGxlcjpxSn0se3NlbWFudGljTmFtZToiRGVsYXkiLG5hbWU6IkhhbGYtUm91bmRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGVsYXkiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgZGVsYXkiLGFsaWFzZXM6WyJoYWxmLXJvdW5kZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjpDWn0se3NlbWFudGljTmFtZToiRGlyZWN0IEFjY2VzcyBTdG9yYWdlIixuYW1lOiJIb3Jpem9udGFsIEN5bGluZGVyIixzaG9ydE5hbWU6ImgtY3lsIixkZXNjcmlwdGlvbjoiRGlyZWN0IGFjY2VzcyBzdG9yYWdlIixhbGlhc2VzOlsiZGFzIiwiaG9yaXpvbnRhbC1jeWxpbmRlciJdLGhhbmRsZXI6Rkp9LHtzZW1hbnRpY05hbWU6IkRpc2sgU3RvcmFnZSIsbmFtZToiTGluZWQgQ3lsaW5kZXIiLHNob3J0TmFtZToibGluLWN5bCIsZGVzY3JpcHRpb246IkRpc2sgc3RvcmFnZSIsYWxpYXNlczpbImRpc2siLCJsaW5lZC1jeWxpbmRlciJdLGhhbmRsZXI6Wlp9LHtzZW1hbnRpY05hbWU6IkRpc3BsYXkiLG5hbWU6IkN1cnZlZCBUcmFwZXpvaWQiLHNob3J0TmFtZToiY3Vydi10cmFwIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGRpc3BsYXkiLGFsaWFzZXM6WyJjdXJ2ZWQtdHJhcGV6b2lkIiwiZGlzcGxheSJdLGhhbmRsZXI6Zlp9LHtzZW1hbnRpY05hbWU6IkRpdmlkZWQgUHJvY2VzcyIsbmFtZToiRGl2aWRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGl2LXJlY3QiLGRlc2NyaXB0aW9uOiJEaXZpZGVkIHByb2Nlc3Mgc2hhcGUiLGFsaWFzZXM6WyJkaXYtcHJvYyIsImRpdmlkZWQtcmVjdGFuZ2xlIiwiZGl2aWRlZC1wcm9jZXNzIl0saGFuZGxlcjpnWn0se3NlbWFudGljTmFtZToiRXh0cmFjdCIsbmFtZToiVHJpYW5nbGUiLHNob3J0TmFtZToidHJpIixkZXNjcmlwdGlvbjoiRXh0cmFjdGlvbiBwcm9jZXNzIixhbGlhc2VzOlsiZXh0cmFjdCIsInRyaWFuZ2xlIl0saGFuZGxlcjpISn0se3NlbWFudGljTmFtZToiSW50ZXJuYWwgU3RvcmFnZSIsbmFtZToiV2luZG93IFBhbmUiLHNob3J0TmFtZToid2luLXBhbmUiLGRlc2NyaXB0aW9uOiJJbnRlcm5hbCBzdG9yYWdlIixhbGlhc2VzOlsiaW50ZXJuYWwtc3RvcmFnZSIsIndpbmRvdy1wYW5lIl0saGFuZGxlcjpLSn0se3NlbWFudGljTmFtZToiSnVuY3Rpb24iLG5hbWU6IkZpbGxlZCBDaXJjbGUiLHNob3J0TmFtZToiZi1jaXJjIixkZXNjcmlwdGlvbjoiSnVuY3Rpb24gcG9pbnQiLGFsaWFzZXM6WyJqdW5jdGlvbiIsImZpbGxlZC1jaXJjbGUiXSxoYW5kbGVyOmJafSx7c2VtYW50aWNOYW1lOiJMb29wIExpbWl0IixuYW1lOiJUcmFwZXpvaWRhbCBQZW50YWdvbiIsc2hvcnROYW1lOiJub3RjaC1wZW50IixkZXNjcmlwdGlvbjoiTG9vcCBsaW1pdCBzdGVwIixhbGlhc2VzOlsibG9vcC1saW1pdCIsIm5vdGNoZWQtcGVudGFnb24iXSxoYW5kbGVyOlZKfSx7c2VtYW50aWNOYW1lOiJNYW51YWwgRmlsZSIsbmFtZToiRmxpcHBlZCBUcmlhbmdsZSIsc2hvcnROYW1lOiJmbGlwLXRyaSIsZGVzY3JpcHRpb246Ik1hbnVhbCBmaWxlIG9wZXJhdGlvbiIsYWxpYXNlczpbIm1hbnVhbC1maWxlIiwiZmxpcHBlZC10cmlhbmdsZSJdLGhhbmRsZXI6d1p9LHtzZW1hbnRpY05hbWU6Ik1hbnVhbCBJbnB1dCIsbmFtZToiU2xvcGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzbC1yZWN0IixkZXNjcmlwdGlvbjoiTWFudWFsIGlucHV0IHN0ZXAiLGFsaWFzZXM6WyJtYW51YWwtaW5wdXQiLCJzbG9wZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjp2Sn0se3NlbWFudGljTmFtZToiTXVsdGktRG9jdW1lbnQiLG5hbWU6IlN0YWNrZWQgRG9jdW1lbnQiLHNob3J0TmFtZToiZG9jcyIsZGVzY3JpcHRpb246Ik11bHRpcGxlIGRvY3VtZW50cyIsYWxpYXNlczpbImRvY3VtZW50cyIsInN0LWRvYyIsInN0YWNrZWQtZG9jdW1lbnQiXSxoYW5kbGVyOmlKfSx7c2VtYW50aWNOYW1lOiJNdWx0aS1Qcm9jZXNzIixuYW1lOiJTdGFja2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzdC1yZWN0IixkZXNjcmlwdGlvbjoiTXVsdGlwbGUgcHJvY2Vzc2VzIixhbGlhc2VzOlsicHJvY3MiLCJwcm9jZXNzZXMiLCJzdGFja2VkLXJlY3RhbmdsZSJdLGhhbmRsZXI6ckp9LHtzZW1hbnRpY05hbWU6IlN0b3JlZCBEYXRhIixuYW1lOiJCb3cgVGllIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJib3ctcmVjdCIsZGVzY3JpcHRpb246IlN0b3JlZCBkYXRhIixhbGlhc2VzOlsic3RvcmVkLWRhdGEiLCJib3ctdGllLXJlY3RhbmdsZSJdLGhhbmRsZXI6S1F9LHtzZW1hbnRpY05hbWU6IlN1bW1hcnkiLG5hbWU6IkNyb3NzZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImNyb3NzLWNpcmMiLGRlc2NyaXB0aW9uOiJTdW1tYXJ5IixhbGlhc2VzOlsic3VtbWFyeSIsImNyb3NzZWQtY2lyY2xlIl0saGFuZGxlcjppWn0se3NlbWFudGljTmFtZToiVGFnZ2VkIERvY3VtZW50IixuYW1lOiJUYWdnZWQgRG9jdW1lbnQiLHNob3J0TmFtZToidGFnLWRvYyIsZGVzY3JpcHRpb246IlRhZ2dlZCBkb2N1bWVudCIsYWxpYXNlczpbInRhZy1kb2MiLCJ0YWdnZWQtZG9jdW1lbnQiXSxoYW5kbGVyOklKfSx7c2VtYW50aWNOYW1lOiJUYWdnZWQgUHJvY2VzcyIsbmFtZToiVGFnZ2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJ0YWctcmVjdCIsZGVzY3JpcHRpb246IlRhZ2dlZCBwcm9jZXNzIixhbGlhc2VzOlsidGFnZ2VkLXJlY3RhbmdsZSIsInRhZy1wcm9jIiwidGFnZ2VkLXByb2Nlc3MiXSxoYW5kbGVyOk5KfSx7c2VtYW50aWNOYW1lOiJQYXBlciBUYXBlIixuYW1lOiJGbGFnIixzaG9ydE5hbWU6ImZsYWciLGRlc2NyaXB0aW9uOiJQYXBlciB0YXBlIixhbGlhc2VzOlsicGFwZXItdGFwZSJdLGhhbmRsZXI6WEp9LHtzZW1hbnRpY05hbWU6Ik9kZCIsbmFtZToiT2RkIixzaG9ydE5hbWU6Im9kZCIsZGVzY3JpcHRpb246Ik9kZCBzaGFwZSIsaW50ZXJuYWxBbGlhc2VzOlsicmVjdF9sZWZ0X2ludl9hcnJvdyJdLGhhbmRsZXI6dUp9LHtzZW1hbnRpY05hbWU6IkxpbmVkIERvY3VtZW50IixuYW1lOiJMaW5lZCBEb2N1bWVudCIsc2hvcnROYW1lOiJsaW4tZG9jIixkZXNjcmlwdGlvbjoiTGluZWQgZG9jdW1lbnQiLGFsaWFzZXM6WyJsaW5lZC1kb2N1bWVudCJdLGhhbmRsZXI6ZUp9XSxaRGU9bygoKT0+e2xldCBlPVsuLi5PYmplY3QuZW50cmllcyh7c3RhdGU6RUosY2hvaWNlOmVaLG5vdGU6c0oscmVjdFdpdGhUaXRsZTpmSixsYWJlbFJlY3Q6SFosaWNvblNxdWFyZTpGWixpY29uQ2lyY2xlOklaLGljb246TlosaWNvblJvdW5kZWQ6UFosaW1hZ2VTcXVhcmU6elosYW5jaG9yOllRLGthbmJhbkl0ZW06YWVlLGNsYXNzQm94OnRlZSxlckJveDpNTCxyZXF1aXJlbWVudEJveDpuZWV9KSwuLi5RRGUuZmxhdE1hcChyPT5bci5zaG9ydE5hbWUsLi4uImFsaWFzZXMiaW4gcj9yLmFsaWFzZXM6W10sLi4uImludGVybmFsQWxpYXNlcyJpbiByP3IuaW50ZXJuYWxBbGlhc2VzOltdXS5tYXAoaT0+W2ksci5oYW5kbGVyXSkpXTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGUpfSwiZ2VuZXJhdGVTaGFwZU1hcCIpLElMPVpEZSgpO28ob2VlLCJpc1ZhbGlkU2hhcGUiKX0pO3ZhciBKRGUsaXcsbGVlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtQVCgpO0d0KCk7eXQoKTtPTCgpO2VyKCk7cHIoKTtjaSgpO0pEZT0iZmxvd2NoYXJ0LSIsaXc9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnZlcnRleENvdW50ZXI9MDt0aGlzLmNvbmZpZz1tZSgpO3RoaXMudmVydGljZXM9bmV3IE1hcDt0aGlzLmVkZ2VzPVtdO3RoaXMuY2xhc3Nlcz1uZXcgTWFwO3RoaXMuc3ViR3JhcGhzPVtdO3RoaXMuc3ViR3JhcGhMb29rdXA9bmV3IE1hcDt0aGlzLnRvb2x0aXBzPW5ldyBNYXA7dGhpcy5zdWJDb3VudD0wO3RoaXMuZmlyc3RHcmFwaEZsYWc9ITA7dGhpcy5zZWNDb3VudD0tMTt0aGlzLnBvc0Nyb3NzUmVmPVtdO3RoaXMuZnVucz1bXTt0aGlzLnNldEFjY1RpdGxlPUFyO3RoaXMuc2V0QWNjRGVzY3JpcHRpb249THI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXRBY2NUaXRsZT1Ecjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPVJyO3RoaXMuZ2V0RGlhZ3JhbVRpdGxlPU5yO3RoaXMuZnVucy5wdXNoKHRoaXMuc2V0dXBUb29sVGlwcy5iaW5kKHRoaXMpKSx0aGlzLmFkZFZlcnRleD10aGlzLmFkZFZlcnRleC5iaW5kKHRoaXMpLHRoaXMuZmlyc3RHcmFwaD10aGlzLmZpcnN0R3JhcGguYmluZCh0aGlzKSx0aGlzLnNldERpcmVjdGlvbj10aGlzLnNldERpcmVjdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkU3ViR3JhcGg9dGhpcy5hZGRTdWJHcmFwaC5iaW5kKHRoaXMpLHRoaXMuYWRkTGluaz10aGlzLmFkZExpbmsuYmluZCh0aGlzKSx0aGlzLnNldExpbms9dGhpcy5zZXRMaW5rLmJpbmQodGhpcyksdGhpcy51cGRhdGVMaW5rPXRoaXMudXBkYXRlTGluay5iaW5kKHRoaXMpLHRoaXMuYWRkQ2xhc3M9dGhpcy5hZGRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0Q2xhc3M9dGhpcy5zZXRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuZGVzdHJ1Y3RMaW5rPXRoaXMuZGVzdHJ1Y3RMaW5rLmJpbmQodGhpcyksdGhpcy5zZXRDbGlja0V2ZW50PXRoaXMuc2V0Q2xpY2tFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2V0VG9vbHRpcD10aGlzLnNldFRvb2x0aXAuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZT10aGlzLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZS5iaW5kKHRoaXMpLHRoaXMuc2V0Q2xpY2tGdW49dGhpcy5zZXRDbGlja0Z1bi5iaW5kKHRoaXMpLHRoaXMuYmluZEZ1bmN0aW9ucz10aGlzLmJpbmRGdW5jdGlvbnMuYmluZCh0aGlzKSx0aGlzLmxleD17Zmlyc3RHcmFwaDp0aGlzLmZpcnN0R3JhcGguYmluZCh0aGlzKX0sdGhpcy5jbGVhcigpLHRoaXMuc2V0R2VuKCJnZW4tMiIpfXN0YXRpY3tvKHRoaXMsIkZsb3dEQiIpfXNhbml0aXplVGV4dChlKXtyZXR1cm4gWmUuc2FuaXRpemVUZXh0KGUsdGhpcy5jb25maWcpfWxvb2tVcERvbUlkKGUpe2ZvcihsZXQgciBvZiB0aGlzLnZlcnRpY2VzLnZhbHVlcygpKWlmKHIuaWQ9PT1lKXJldHVybiByLmRvbUlkO3JldHVybiBlfWFkZFZlcnRleChlLHIsbixpLGEscyxsPXt9LHUpe2lmKCFlfHxlLnRyaW0oKS5sZW5ndGg9PT0wKXJldHVybjtsZXQgaDtpZih1IT09dm9pZCAwKXtsZXQgbTt1LmluY2x1ZGVzKGAKYCk/bT11K2AKYDptPWB7CmArdStgCn1gLGg9VG0obSx7c2NoZW1hOmJtfSl9bGV0IGY9dGhpcy5lZGdlcy5maW5kKG09Pm0uaWQ9PT1lKTtpZihmKXtsZXQgbT1oO20/LmFuaW1hdGUhPT12b2lkIDAmJihmLmFuaW1hdGU9bS5hbmltYXRlKSxtPy5hbmltYXRpb24hPT12b2lkIDAmJihmLmFuaW1hdGlvbj1tLmFuaW1hdGlvbik7cmV0dXJufWxldCBkLHA9dGhpcy52ZXJ0aWNlcy5nZXQoZSk7aWYocD09PXZvaWQgMCYmKHA9e2lkOmUsbGFiZWxUeXBlOiJ0ZXh0Iixkb21JZDpKRGUrZSsiLSIrdGhpcy52ZXJ0ZXhDb3VudGVyLHN0eWxlczpbXSxjbGFzc2VzOltdfSx0aGlzLnZlcnRpY2VzLnNldChlLHApKSx0aGlzLnZlcnRleENvdW50ZXIrKyxyIT09dm9pZCAwPyh0aGlzLmNvbmZpZz1tZSgpLGQ9dGhpcy5zYW5pdGl6ZVRleHQoci50ZXh0LnRyaW0oKSkscC5sYWJlbFR5cGU9ci50eXBlLGQuc3RhcnRzV2l0aCgnIicpJiZkLmVuZHNXaXRoKCciJykmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLHAudGV4dD1kKTpwLnRleHQ9PT12b2lkIDAmJihwLnRleHQ9ZSksbiE9PXZvaWQgMCYmKHAudHlwZT1uKSxpPy5mb3JFYWNoKG09PntwLnN0eWxlcy5wdXNoKG0pfSksYT8uZm9yRWFjaChtPT57cC5jbGFzc2VzLnB1c2gobSl9KSxzIT09dm9pZCAwJiYocC5kaXI9cykscC5wcm9wcz09PXZvaWQgMD9wLnByb3BzPWw6bCE9PXZvaWQgMCYmT2JqZWN0LmFzc2lnbihwLnByb3BzLGwpLGghPT12b2lkIDApe2lmKGguc2hhcGUpe2lmKGguc2hhcGUhPT1oLnNoYXBlLnRvTG93ZXJDYXNlKCl8fGguc2hhcGUuaW5jbHVkZXMoIl8iKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7aC5zaGFwZX0uIFNoYXBlIG5hbWVzIHNob3VsZCBiZSBsb3dlcmNhc2UuYCk7aWYoIW9lZShoLnNoYXBlKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7aC5zaGFwZX0uYCk7cC50eXBlPWg/LnNoYXBlfWg/LmxhYmVsJiYocC50ZXh0PWg/LmxhYmVsKSxoPy5pY29uJiYocC5pY29uPWg/Lmljb24sIWgubGFiZWw/LnRyaW0oKSYmcC50ZXh0PT09ZSYmKHAudGV4dD0iIikpLGg/LmZvcm0mJihwLmZvcm09aD8uZm9ybSksaD8ucG9zJiYocC5wb3M9aD8ucG9zKSxoPy5pbWcmJihwLmltZz1oPy5pbWcsIWgubGFiZWw/LnRyaW0oKSYmcC50ZXh0PT09ZSYmKHAudGV4dD0iIikpLGg/LmNvbnN0cmFpbnQmJihwLmNvbnN0cmFpbnQ9aC5jb25zdHJhaW50KSxoLncmJihwLmFzc2V0V2lkdGg9TnVtYmVyKGgudykpLGguaCYmKHAuYXNzZXRIZWlnaHQ9TnVtYmVyKGguaCkpfX1hZGRTaW5nbGVMaW5rKGUscixuLGkpe2xldCBsPXtzdGFydDplLGVuZDpyLHR5cGU6dm9pZCAwLHRleHQ6IiIsbGFiZWxUeXBlOiJ0ZXh0IixjbGFzc2VzOltdLGlzVXNlckRlZmluZWRJZDohMSxpbnRlcnBvbGF0ZTp0aGlzLmVkZ2VzLmRlZmF1bHRJbnRlcnBvbGF0ZX07WC5pbmZvKCJhYmM3OCBHb3QgZWRnZS4uLiIsbCk7bGV0IHU9bi50ZXh0O2lmKHUhPT12b2lkIDAmJihsLnRleHQ9dGhpcy5zYW5pdGl6ZVRleHQodS50ZXh0LnRyaW0oKSksbC50ZXh0LnN0YXJ0c1dpdGgoJyInKSYmbC50ZXh0LmVuZHNXaXRoKCciJykmJihsLnRleHQ9bC50ZXh0LnN1YnN0cmluZygxLGwudGV4dC5sZW5ndGgtMSkpLGwubGFiZWxUeXBlPXUudHlwZSksbiE9PXZvaWQgMCYmKGwudHlwZT1uLnR5cGUsbC5zdHJva2U9bi5zdHJva2UsbC5sZW5ndGg9bi5sZW5ndGg+MTA/MTA6bi5sZW5ndGgpLGkmJiF0aGlzLmVkZ2VzLnNvbWUoaD0+aC5pZD09PWkpKWwuaWQ9aSxsLmlzVXNlckRlZmluZWRJZD0hMDtlbHNle2xldCBoPXRoaXMuZWRnZXMuZmlsdGVyKGY9PmYuc3RhcnQ9PT1sLnN0YXJ0JiZmLmVuZD09PWwuZW5kKTtoLmxlbmd0aD09PTA/bC5pZD1XaChsLnN0YXJ0LGwuZW5kLHtjb3VudGVyOjAscHJlZml4OiJMIn0pOmwuaWQ9V2gobC5zdGFydCxsLmVuZCx7Y291bnRlcjpoLmxlbmd0aCsxLHByZWZpeDoiTCJ9KX1pZih0aGlzLmVkZ2VzLmxlbmd0aDwodGhpcy5jb25maWcubWF4RWRnZXM/PzUwMCkpWC5pbmZvKCJQdXNoaW5nIGVkZ2UuLi4iKSx0aGlzLmVkZ2VzLnB1c2gobCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEVkZ2UgbGltaXQgZXhjZWVkZWQuICR7dGhpcy5lZGdlcy5sZW5ndGh9IGVkZ2VzIGZvdW5kLCBidXQgdGhlIGxpbWl0IGlzICR7dGhpcy5jb25maWcubWF4RWRnZXN9LgoKSW5pdGlhbGl6ZSBtZXJtYWlkIHdpdGggbWF4RWRnZXMgc2V0IHRvIGEgaGlnaGVyIG51bWJlciB0byBhbGxvdyBtb3JlIGVkZ2VzLgpZb3UgY2Fubm90IHNldCB0aGlzIGNvbmZpZyB2aWEgY29uZmlndXJhdGlvbiBpbnNpZGUgdGhlIGRpYWdyYW0gYXMgaXQgaXMgYSBzZWN1cmUgY29uZmlnLgpZb3UgaGF2ZSB0byBjYWxsIG1lcm1haWQuaW5pdGlhbGl6ZS5gKX1pc0xpbmtEYXRhKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYiaWQiaW4gZSYmdHlwZW9mIGUuaWQ9PSJzdHJpbmcifWFkZExpbmsoZSxyLG4pe2xldCBpPXRoaXMuaXNMaW5rRGF0YShuKT9uLmlkLnJlcGxhY2UoIkAiLCIiKTp2b2lkIDA7WC5pbmZvKCJhZGRMaW5rIixlLHIsaSk7Zm9yKGxldCBhIG9mIGUpZm9yKGxldCBzIG9mIHIpe2xldCBsPWE9PT1lW2UubGVuZ3RoLTFdLHU9cz09PXJbMF07bCYmdT90aGlzLmFkZFNpbmdsZUxpbmsoYSxzLG4saSk6dGhpcy5hZGRTaW5nbGVMaW5rKGEscyxuLHZvaWQgMCl9fXVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShlLHIpe2UuZm9yRWFjaChuPT57bj09PSJkZWZhdWx0Ij90aGlzLmVkZ2VzLmRlZmF1bHRJbnRlcnBvbGF0ZT1yOnRoaXMuZWRnZXNbbl0uaW50ZXJwb2xhdGU9cn0pfXVwZGF0ZUxpbmsoZSxyKXtlLmZvckVhY2gobj0+e2lmKHR5cGVvZiBuPT0ibnVtYmVyIiYmbj49dGhpcy5lZGdlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBUaGUgaW5kZXggJHtufSBmb3IgbGlua1N0eWxlIGlzIG91dCBvZiBib3VuZHMuIFZhbGlkIGluZGljZXMgZm9yIGxpbmtTdHlsZSBhcmUgYmV0d2VlbiAwIGFuZCAke3RoaXMuZWRnZXMubGVuZ3RoLTF9LiAoSGVscDogRW5zdXJlIHRoYXQgdGhlIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgZXhpc3RpbmcgZWRnZXMuKWApO249PT0iZGVmYXVsdCI/dGhpcy5lZGdlcy5kZWZhdWx0U3R5bGU9cjoodGhpcy5lZGdlc1tuXS5zdHlsZT1yLCh0aGlzLmVkZ2VzW25dPy5zdHlsZT8ubGVuZ3RoPz8wKT4wJiYhdGhpcy5lZGdlc1tuXT8uc3R5bGU/LnNvbWUoaT0+aT8uc3RhcnRzV2l0aCgiZmlsbCIpKSYmdGhpcy5lZGdlc1tuXT8uc3R5bGU/LnB1c2goImZpbGw6bm9uZSIpKX0pfWFkZENsYXNzKGUscil7bGV0IG49ci5qb2luKCkucmVwbGFjZSgvXFwsL2csIlx4QTdceEE3XHhBNyIpLnJlcGxhY2UoLywvZywiOyIpLnJlcGxhY2UoL8KnwqfCpy9nLCIsIikuc3BsaXQoIjsiKTtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57bGV0IGE9dGhpcy5jbGFzc2VzLmdldChpKTthPT09dm9pZCAwJiYoYT17aWQ6aSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sdGhpcy5jbGFzc2VzLnNldChpLGEpKSxuPy5mb3JFYWNoKHM9PntpZigvY29sb3IvLmV4ZWMocykpe2xldCBsPXMucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpO2EudGV4dFN0eWxlcy5wdXNoKGwpfWEuc3R5bGVzLnB1c2gocyl9KX0pfXNldERpcmVjdGlvbihlKXt0aGlzLmRpcmVjdGlvbj1lLC8uKjwvLmV4ZWModGhpcy5kaXJlY3Rpb24pJiYodGhpcy5kaXJlY3Rpb249IlJMIiksLy4qXF4vLmV4ZWModGhpcy5kaXJlY3Rpb24pJiYodGhpcy5kaXJlY3Rpb249IkJUIiksLy4qPi8uZXhlYyh0aGlzLmRpcmVjdGlvbikmJih0aGlzLmRpcmVjdGlvbj0iTFIiKSwvLip2Ly5leGVjKHRoaXMuZGlyZWN0aW9uKSYmKHRoaXMuZGlyZWN0aW9uPSJUQiIpLHRoaXMuZGlyZWN0aW9uPT09IlREIiYmKHRoaXMuZGlyZWN0aW9uPSJUQiIpfXNldENsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUuc3BsaXQoIiwiKSl7bGV0IGk9dGhpcy52ZXJ0aWNlcy5nZXQobik7aSYmaS5jbGFzc2VzLnB1c2gocik7bGV0IGE9dGhpcy5lZGdlcy5maW5kKGw9PmwuaWQ9PT1uKTthJiZhLmNsYXNzZXMucHVzaChyKTtsZXQgcz10aGlzLnN1YkdyYXBoTG9va3VwLmdldChuKTtzJiZzLmNsYXNzZXMucHVzaChyKX19c2V0VG9vbHRpcChlLHIpe2lmKHIhPT12b2lkIDApe3I9dGhpcy5zYW5pdGl6ZVRleHQocik7Zm9yKGxldCBuIG9mIGUuc3BsaXQoIiwiKSl0aGlzLnRvb2x0aXBzLnNldCh0aGlzLnZlcnNpb249PT0iZ2VuLTEiP3RoaXMubG9va1VwRG9tSWQobik6bixyKX19c2V0Q2xpY2tGdW4oZSxyLG4pe2xldCBpPXRoaXMubG9va1VwRG9tSWQoZSk7aWYobWUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8cj09PXZvaWQgMClyZXR1cm47bGV0IGE9W107aWYodHlwZW9mIG49PSJzdHJpbmciKXthPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2xldCB1PWFbbF0udHJpbSgpO3Uuc3RhcnRzV2l0aCgnIicpJiZ1LmVuZHNXaXRoKCciJykmJih1PXUuc3Vic3RyKDEsdS5sZW5ndGgtMikpLGFbbF09dX19YS5sZW5ndGg9PT0wJiZhLnB1c2goZSk7bGV0IHM9dGhpcy52ZXJ0aWNlcy5nZXQoZSk7cyYmKHMuaGF2ZUNhbGxiYWNrPSEwLHRoaXMuZnVucy5wdXNoKCgpPT57bGV0IGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2l9Il1gKTtsIT09bnVsbCYmbC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntWdC5ydW5GdW5jKHIsLi4uYSl9LCExKX0pKX1zZXRMaW5rKGUscixuKXtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57bGV0IGE9dGhpcy52ZXJ0aWNlcy5nZXQoaSk7YSE9PXZvaWQgMCYmKGEubGluaz1WdC5mb3JtYXRVcmwocix0aGlzLmNvbmZpZyksYS5saW5rVGFyZ2V0PW4pfSksdGhpcy5zZXRDbGFzcyhlLCJjbGlja2FibGUiKX1nZXRUb29sdGlwKGUpe3JldHVybiB0aGlzLnRvb2x0aXBzLmdldChlKX1zZXRDbGlja0V2ZW50KGUscixuKXtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57dGhpcy5zZXRDbGlja0Z1bihpLHIsbil9KSx0aGlzLnNldENsYXNzKGUsImNsaWNrYWJsZSIpfWJpbmRGdW5jdGlvbnMoZSl7dGhpcy5mdW5zLmZvckVhY2gocj0+e3IoZSl9KX1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24/LnRyaW0oKX1nZXRWZXJ0aWNlcygpe3JldHVybiB0aGlzLnZlcnRpY2VzfWdldEVkZ2VzKCl7cmV0dXJuIHRoaXMuZWRnZXN9Z2V0Q2xhc3Nlcygpe3JldHVybiB0aGlzLmNsYXNzZXN9c2V0dXBUb29sVGlwcyhlKXtsZXQgcj1HZSgiLm1lcm1haWRUb29sdGlwIik7KHIuX2dyb3Vwc3x8cilbMF1bMF09PT1udWxsJiYocj1HZSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksR2UoZSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGE9PntsZXQgcz1HZShhLmN1cnJlbnRUYXJnZXQpO2lmKHMuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2xldCB1PWEuY3VycmVudFRhcmdldD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ci50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45Iiksci50ZXh0KHMuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK3UubGVmdCsodS5yaWdodC11LmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrdS5ib3R0b20rInB4Iiksci5odG1sKHIuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxzLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGE9PntyLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxHZShhLmN1cnJlbnRUYXJnZXQpLmNsYXNzZWQoImhvdmVyIiwhMSl9KX1jbGVhcihlPSJnZW4tMiIpe3RoaXMudmVydGljZXM9bmV3IE1hcCx0aGlzLmNsYXNzZXM9bmV3IE1hcCx0aGlzLmVkZ2VzPVtdLHRoaXMuZnVucz1bdGhpcy5zZXR1cFRvb2xUaXBzLmJpbmQodGhpcyldLHRoaXMuc3ViR3JhcGhzPVtdLHRoaXMuc3ViR3JhcGhMb29rdXA9bmV3IE1hcCx0aGlzLnN1YkNvdW50PTAsdGhpcy50b29sdGlwcz1uZXcgTWFwLHRoaXMuZmlyc3RHcmFwaEZsYWc9ITAsdGhpcy52ZXJzaW9uPWUsdGhpcy5jb25maWc9bWUoKSxrcigpfXNldEdlbihlKXt0aGlzLnZlcnNpb249ZXx8Imdlbi0yIn1kZWZhdWx0U3R5bGUoKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifWFkZFN1YkdyYXBoKGUscixuKXtsZXQgaT1lLnRleHQudHJpbSgpLGE9bi50ZXh0O2U9PT1uJiYvXHMvLmV4ZWMobi50ZXh0KSYmKGk9dm9pZCAwKTtsZXQgbD1vKHA9PntsZXQgbT17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxnPVtdLHk7cmV0dXJue25vZGVMaXN0OnAuZmlsdGVyKGZ1bmN0aW9uKHgpe2xldCBiPXR5cGVvZiB4O3JldHVybiB4LnN0bXQmJnguc3RtdD09PSJkaXIiPyh5PXgudmFsdWUsITEpOngudHJpbSgpPT09IiI/ITE6YiBpbiBtP21bYl0uaGFzT3duUHJvcGVydHkoeCk/ITE6bVtiXVt4XT0hMDpnLmluY2x1ZGVzKHgpPyExOmcucHVzaCh4KX0pLGRpcjp5fX0sInVuaXEiKShyLmZsYXQoKSksdT1sLm5vZGVMaXN0LGg9bC5kaXIsZj1tZSgpLmZsb3djaGFydD8/e307aWYoaD1oPz8oZi5pbmhlcml0RGlyP3RoaXMuZ2V0RGlyZWN0aW9uKCk/P21lKCkuZGlyZWN0aW9uPz92b2lkIDA6dm9pZCAwKSx0aGlzLnZlcnNpb249PT0iZ2VuLTEiKWZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXVbcF09dGhpcy5sb29rVXBEb21JZCh1W3BdKTtpPWk/PyJzdWJHcmFwaCIrdGhpcy5zdWJDb3VudCxhPWF8fCIiLGE9dGhpcy5zYW5pdGl6ZVRleHQoYSksdGhpcy5zdWJDb3VudD10aGlzLnN1YkNvdW50KzE7bGV0IGQ9e2lkOmksbm9kZXM6dSx0aXRsZTphLnRyaW0oKSxjbGFzc2VzOltdLGRpcjpoLGxhYmVsVHlwZTpuLnR5cGV9O3JldHVybiBYLmluZm8oIkFkZGluZyIsZC5pZCxkLm5vZGVzLGQuZGlyKSxkLm5vZGVzPXRoaXMubWFrZVVuaXEoZCx0aGlzLnN1YkdyYXBocykubm9kZXMsdGhpcy5zdWJHcmFwaHMucHVzaChkKSx0aGlzLnN1YkdyYXBoTG9va3VwLnNldChpLGQpLGl9Z2V0UG9zRm9ySWQoZSl7Zm9yKGxldFtyLG5db2YgdGhpcy5zdWJHcmFwaHMuZW50cmllcygpKWlmKG4uaWQ9PT1lKXJldHVybiByO3JldHVybi0xfWluZGV4Tm9kZXMyKGUscil7bGV0IG49dGhpcy5zdWJHcmFwaHNbcl0ubm9kZXM7aWYodGhpcy5zZWNDb3VudD10aGlzLnNlY0NvdW50KzEsdGhpcy5zZWNDb3VudD4yZTMpcmV0dXJue3Jlc3VsdDohMSxjb3VudDowfTtpZih0aGlzLnBvc0Nyb3NzUmVmW3RoaXMuc2VjQ291bnRdPXIsdGhpcy5zdWJHcmFwaHNbcl0uaWQ9PT1lKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IGk9MCxhPTE7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IHM9dGhpcy5nZXRQb3NGb3JJZChuW2ldKTtpZihzPj0wKXtsZXQgbD10aGlzLmluZGV4Tm9kZXMyKGUscyk7aWYobC5yZXN1bHQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDphK2wuY291bnR9O2E9YStsLmNvdW50fWk9aSsxfXJldHVybntyZXN1bHQ6ITEsY291bnQ6YX19Z2V0RGVwdGhGaXJzdFBvcyhlKXtyZXR1cm4gdGhpcy5wb3NDcm9zc1JlZltlXX1pbmRleE5vZGVzKCl7dGhpcy5zZWNDb3VudD0tMSx0aGlzLnN1YkdyYXBocy5sZW5ndGg+MCYmdGhpcy5pbmRleE5vZGVzMigibm9uZSIsdGhpcy5zdWJHcmFwaHMubGVuZ3RoLTEpfWdldFN1YkdyYXBocygpe3JldHVybiB0aGlzLnN1YkdyYXBoc31maXJzdEdyYXBoKCl7cmV0dXJuIHRoaXMuZmlyc3RHcmFwaEZsYWc/KHRoaXMuZmlyc3RHcmFwaEZsYWc9ITEsITApOiExfWRlc3RydWN0U3RhcnRMaW5rKGUpe2xldCByPWUudHJpbSgpLG49ImFycm93X29wZW4iO3N3aXRjaChyWzBdKXtjYXNlIjwiOm49ImFycm93X3BvaW50IixyPXIuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpuPSJhcnJvd19jcm9zcyIscj1yLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6bj0iYXJyb3dfY2lyY2xlIixyPXIuc2xpY2UoMSk7YnJlYWt9bGV0IGk9Im5vcm1hbCI7cmV0dXJuIHIuaW5jbHVkZXMoIj0iKSYmKGk9InRoaWNrIiksci5pbmNsdWRlcygiLiIpJiYoaT0iZG90dGVkIikse3R5cGU6bixzdHJva2U6aX19Y291bnRDaGFyKGUscil7bGV0IG49ci5sZW5ndGgsaT0wO2ZvcihsZXQgYT0wO2E8bjsrK2EpclthXT09PWUmJisraTtyZXR1cm4gaX1kZXN0cnVjdEVuZExpbmsoZSl7bGV0IHI9ZS50cmltKCksbj1yLnNsaWNlKDAsLTEpLGk9ImFycm93X29wZW4iO3N3aXRjaChyLnNsaWNlKC0xKSl7Y2FzZSJ4IjppPSJhcnJvd19jcm9zcyIsci5zdGFydHNXaXRoKCJ4IikmJihpPSJkb3VibGVfIitpLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSI+IjppPSJhcnJvd19wb2ludCIsci5zdGFydHNXaXRoKCI8IikmJihpPSJkb3VibGVfIitpLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjppPSJhcnJvd19jaXJjbGUiLHIuc3RhcnRzV2l0aCgibyIpJiYoaT0iZG91YmxlXyIraSxuPW4uc2xpY2UoMSkpO2JyZWFrfWxldCBhPSJub3JtYWwiLHM9bi5sZW5ndGgtMTtuLnN0YXJ0c1dpdGgoIj0iKSYmKGE9InRoaWNrIiksbi5zdGFydHNXaXRoKCJ+IikmJihhPSJpbnZpc2libGUiKTtsZXQgbD10aGlzLmNvdW50Q2hhcigiLiIsbik7cmV0dXJuIGwmJihhPSJkb3R0ZWQiLHM9bCkse3R5cGU6aSxzdHJva2U6YSxsZW5ndGg6c319ZGVzdHJ1Y3RMaW5rKGUscil7bGV0IG49dGhpcy5kZXN0cnVjdEVuZExpbmsoZSksaTtpZihyKXtpZihpPXRoaXMuZGVzdHJ1Y3RTdGFydExpbmsociksaS5zdHJva2UhPT1uLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYoaS50eXBlPT09ImFycm93X29wZW4iKWkudHlwZT1uLnR5cGU7ZWxzZXtpZihpLnR5cGUhPT1uLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2kudHlwZT0iZG91YmxlXyIraS50eXBlfXJldHVybiBpLnR5cGU9PT0iZG91YmxlX2Fycm93IiYmKGkudHlwZT0iZG91YmxlX2Fycm93X3BvaW50IiksaS5sZW5ndGg9bi5sZW5ndGgsaX1yZXR1cm4gbn1leGlzdHMoZSxyKXtmb3IobGV0IG4gb2YgZSlpZihuLm5vZGVzLmluY2x1ZGVzKHIpKXJldHVybiEwO3JldHVybiExfW1ha2VVbmlxKGUscil7bGV0IG49W107cmV0dXJuIGUubm9kZXMuZm9yRWFjaCgoaSxhKT0+e3RoaXMuZXhpc3RzKHIsaSl8fG4ucHVzaChlLm5vZGVzW2FdKX0pLHtub2RlczpufX1nZXRUeXBlRnJvbVZlcnRleChlKXtpZihlLmltZylyZXR1cm4iaW1hZ2VTcXVhcmUiO2lmKGUuaWNvbilyZXR1cm4gZS5mb3JtPT09ImNpcmNsZSI/Imljb25DaXJjbGUiOmUuZm9ybT09PSJzcXVhcmUiPyJpY29uU3F1YXJlIjplLmZvcm09PT0icm91bmRlZCI/Imljb25Sb3VuZGVkIjoiaWNvbiI7c3dpdGNoKGUudHlwZSl7Y2FzZSJzcXVhcmUiOmNhc2Ugdm9pZCAwOnJldHVybiJzcXVhcmVSZWN0IjtjYXNlInJvdW5kIjpyZXR1cm4icm91bmRlZFJlY3QiO2Nhc2UiZWxsaXBzZSI6cmV0dXJuImVsbGlwc2UiO2RlZmF1bHQ6cmV0dXJuIGUudHlwZX19ZmluZE5vZGUoZSxyKXtyZXR1cm4gZS5maW5kKG49Pm4uaWQ9PT1yKX1kZXN0cnVjdEVkZ2VUeXBlKGUpe2xldCByPSJub25lIixuPSJhcnJvd19wb2ludCI7c3dpdGNoKGUpe2Nhc2UiYXJyb3dfcG9pbnQiOmNhc2UiYXJyb3dfY2lyY2xlIjpjYXNlImFycm93X2Nyb3NzIjpuPWU7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmNhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOnI9ZS5yZXBsYWNlKCJkb3VibGVfIiwiIiksbj1yO2JyZWFrfXJldHVybnthcnJvd1R5cGVTdGFydDpyLGFycm93VHlwZUVuZDpufX1hZGROb2RlRnJvbVZlcnRleChlLHIsbixpLGEscyl7bGV0IGw9bi5nZXQoZS5pZCksdT1pLmdldChlLmlkKT8/ITEsaD10aGlzLmZpbmROb2RlKHIsZS5pZCk7aWYoaCloLmNzc1N0eWxlcz1lLnN0eWxlcyxoLmNzc0NvbXBpbGVkU3R5bGVzPXRoaXMuZ2V0Q29tcGlsZWRTdHlsZXMoZS5jbGFzc2VzKSxoLmNzc0NsYXNzZXM9ZS5jbGFzc2VzLmpvaW4oIiAiKTtlbHNle2xldCBmPXtpZDplLmlkLGxhYmVsOmUudGV4dCxsYWJlbFN0eWxlOiIiLHBhcmVudElkOmwscGFkZGluZzphLmZsb3djaGFydD8ucGFkZGluZ3x8OCxjc3NTdHlsZXM6ZS5zdHlsZXMsY3NzQ29tcGlsZWRTdHlsZXM6dGhpcy5nZXRDb21waWxlZFN0eWxlcyhbImRlZmF1bHQiLCJub2RlIiwuLi5lLmNsYXNzZXNdKSxjc3NDbGFzc2VzOiJkZWZhdWx0ICIrZS5jbGFzc2VzLmpvaW4oIiAiKSxkaXI6ZS5kaXIsZG9tSWQ6ZS5kb21JZCxsb29rOnMsbGluazplLmxpbmssbGlua1RhcmdldDplLmxpbmtUYXJnZXQsdG9vbHRpcDp0aGlzLmdldFRvb2x0aXAoZS5pZCksaWNvbjplLmljb24scG9zOmUucG9zLGltZzplLmltZyxhc3NldFdpZHRoOmUuYXNzZXRXaWR0aCxhc3NldEhlaWdodDplLmFzc2V0SGVpZ2h0LGNvbnN0cmFpbnQ6ZS5jb25zdHJhaW50fTt1P3IucHVzaCh7Li4uZixpc0dyb3VwOiEwLHNoYXBlOiJyZWN0In0pOnIucHVzaCh7Li4uZixpc0dyb3VwOiExLHNoYXBlOnRoaXMuZ2V0VHlwZUZyb21WZXJ0ZXgoZSl9KX19Z2V0Q29tcGlsZWRTdHlsZXMoZSl7bGV0IHI9W107Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuY2xhc3Nlcy5nZXQobik7aT8uc3R5bGVzJiYocj1bLi4uciwuLi5pLnN0eWxlcz8/W11dLm1hcChhPT5hLnRyaW0oKSkpLGk/LnRleHRTdHlsZXMmJihyPVsuLi5yLC4uLmkudGV4dFN0eWxlcz8/W11dLm1hcChhPT5hLnRyaW0oKSkpfXJldHVybiByfWdldERhdGEoKXtsZXQgZT1tZSgpLHI9W10sbj1bXSxpPXRoaXMuZ2V0U3ViR3JhcGhzKCksYT1uZXcgTWFwLHM9bmV3IE1hcDtmb3IobGV0IGg9aS5sZW5ndGgtMTtoPj0wO2gtLSl7bGV0IGY9aVtoXTtmLm5vZGVzLmxlbmd0aD4wJiZzLnNldChmLmlkLCEwKTtmb3IobGV0IGQgb2YgZi5ub2RlcylhLnNldChkLGYuaWQpfWZvcihsZXQgaD1pLmxlbmd0aC0xO2g+PTA7aC0tKXtsZXQgZj1pW2hdO3IucHVzaCh7aWQ6Zi5pZCxsYWJlbDpmLnRpdGxlLGxhYmVsU3R5bGU6IiIscGFyZW50SWQ6YS5nZXQoZi5pZCkscGFkZGluZzo4LGNzc0NvbXBpbGVkU3R5bGVzOnRoaXMuZ2V0Q29tcGlsZWRTdHlsZXMoZi5jbGFzc2VzKSxjc3NDbGFzc2VzOmYuY2xhc3Nlcy5qb2luKCIgIiksc2hhcGU6InJlY3QiLGRpcjpmLmRpcixpc0dyb3VwOiEwLGxvb2s6ZS5sb29rfSl9dGhpcy5nZXRWZXJ0aWNlcygpLmZvckVhY2goaD0+e3RoaXMuYWRkTm9kZUZyb21WZXJ0ZXgoaCxyLGEscyxlLGUubG9va3x8ImNsYXNzaWMiKX0pO2xldCB1PXRoaXMuZ2V0RWRnZXMoKTtyZXR1cm4gdS5mb3JFYWNoKChoLGYpPT57bGV0e2Fycm93VHlwZVN0YXJ0OmQsYXJyb3dUeXBlRW5kOnB9PXRoaXMuZGVzdHJ1Y3RFZGdlVHlwZShoLnR5cGUpLG09Wy4uLnUuZGVmYXVsdFN0eWxlPz9bXV07aC5zdHlsZSYmbS5wdXNoKC4uLmguc3R5bGUpO2xldCBnPXtpZDpXaChoLnN0YXJ0LGguZW5kLHtjb3VudGVyOmYscHJlZml4OiJMIn0saC5pZCksaXNVc2VyRGVmaW5lZElkOmguaXNVc2VyRGVmaW5lZElkLHN0YXJ0Omguc3RhcnQsZW5kOmguZW5kLHR5cGU6aC50eXBlPz8ibm9ybWFsIixsYWJlbDpoLnRleHQsbGFiZWxwb3M6ImMiLHRoaWNrbmVzczpoLnN0cm9rZSxtaW5sZW46aC5sZW5ndGgsY2xhc3NlczpoPy5zdHJva2U9PT0iaW52aXNpYmxlIj8iIjoiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayIsYXJyb3dUeXBlU3RhcnQ6aD8uc3Ryb2tlPT09ImludmlzaWJsZSJ8fGg/LnR5cGU9PT0iYXJyb3dfb3BlbiI/Im5vbmUiOmQsYXJyb3dUeXBlRW5kOmg/LnN0cm9rZT09PSJpbnZpc2libGUifHxoPy50eXBlPT09ImFycm93X29wZW4iPyJub25lIjpwLGFycm93aGVhZFN0eWxlOiJmaWxsOiAjMzMzIixjc3NDb21waWxlZFN0eWxlczp0aGlzLmdldENvbXBpbGVkU3R5bGVzKGguY2xhc3NlcyksbGFiZWxTdHlsZTptLHN0eWxlOm0scGF0dGVybjpoLnN0cm9rZSxsb29rOmUubG9vayxhbmltYXRlOmguYW5pbWF0ZSxhbmltYXRpb246aC5hbmltYXRpb24sY3VydmU6aC5pbnRlcnBvbGF0ZXx8dGhpcy5lZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGV8fGUuZmxvd2NoYXJ0Py5jdXJ2ZX07bi5wdXNoKGcpfSkse25vZGVzOnIsZWRnZXM6bixvdGhlcjp7fSxjb25maWc6ZX19ZGVmYXVsdENvbmZpZygpe3JldHVybiAkMy5mbG93Y2hhcnR9fX0pO3ZhciB3YyxTbT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7d2M9bygodCxlKT0+e2xldCByO3JldHVybiBlPT09InNhbmRib3giJiYocj1HZSgiI2kiK3QpKSwoZT09PSJzYW5kYm94Ij9HZShyLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IikpLnNlbGVjdChgW2lkPSIke3R9Il1gKX0sImdldERpYWdyYW1FbGVtZW50Iil9KTt2YXIgQnUsUjI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCdT1vKCh7Zmxvd2NoYXJ0OnR9KT0+e2xldCBlPXQ/LnN1YkdyYXBoVGl0bGVNYXJnaW4/LnRvcD8/MCxyPXQ/LnN1YkdyYXBoVGl0bGVNYXJnaW4/LmJvdHRvbT8/MCxuPWUrcjtyZXR1cm57c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjplLHN1YkdyYXBoVGl0bGVCb3R0b21NYXJnaW46cixzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46bn19LCJnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyIpfSk7dmFyIGNlZSxlOWUsdDllLHI5ZSxuOWUsaTllLGE5ZSx1ZWUsQ20saGVlLGF3PU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtwcigpO3l0KCk7UjIoKTtmcigpO1d0KCk7YW8oKTttTCgpO3J3KCk7WmgoKTt6dCgpO2NlZT1vKGFzeW5jKHQsZSk9PntYLmluZm8oIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTtsZXQgcj1tZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7Y2x1c3RlckJrZzphLGNsdXN0ZXJCb3JkZXI6c309bix7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnUsYm9yZGVyU3R5bGVzOmgsYmFja2dyb3VuZFN0eWxlczpmfT1ZZShlKSxkPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyICIrZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLHA9ZHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1kLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCAiKSxnPWF3YWl0IHFuKG0sZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6cCxpc05vZGU6ITB9KSx5PWcuZ2V0QkJveCgpO2lmKGRyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgXz1nLmNoaWxkcmVuWzBdLEM9R2UoZyk7eT1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEMuYXR0cigid2lkdGgiLHkud2lkdGgpLEMuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCl9bGV0IHY9ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/eS53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD15LndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHYtZS53aWR0aCkvMi1lLnBhZGRpbmc6ZS5kaWZmPS1lLnBhZGRpbmc7bGV0IHg9ZS5oZWlnaHQsYj1lLngtdi8yLFQ9ZS55LXgvMjtYLnRyYWNlKCJEYXRhICIsZSxKU09OLnN0cmluZ2lmeShlKSk7bGV0IFM7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBfPWplLnN2ZyhkKSxDPVFlKGUse3JvdWdobmVzczouNyxmaWxsOmEsc3Ryb2tlOnMsZmlsbFdlaWdodDozLHNlZWQ6aX0pLEQ9Xy5wYXRoKE9hKGIsVCx2LHgsMCksQyk7Uz1kLmluc2VydCgoKT0+KFguZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsRCksRCksIjpmaXJzdC1jaGlsZCIpLFMuc2VsZWN0KCJwYXRoOm50aC1jaGlsZCgyKSIpLmF0dHIoInN0eWxlIixoLmpvaW4oIjsiKSksUy5zZWxlY3QoInBhdGgiKS5hdHRyKCJzdHlsZSIsZi5qb2luKCI7IikucmVwbGFjZSgiZmlsbCIsInN0cm9rZSIpKX1lbHNlIFM9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxTLmF0dHIoInN0eWxlIix1KS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGIpLmF0dHIoInkiLFQpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLHgpO2xldHtzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOnd9PUJ1KHIpO2lmKG0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZS54LXkud2lkdGgvMn0sICR7ZS55LWUuaGVpZ2h0LzIrd30pYCksbCl7bGV0IF89bS5zZWxlY3QoInNwYW4iKTtfJiZfLmF0dHIoInN0eWxlIixsKX1sZXQgRT1TLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUub2Zmc2V0WD0wLGUud2lkdGg9RS53aWR0aCxlLmhlaWdodD1FLmhlaWdodCxlLm9mZnNldFk9eS5oZWlnaHQtZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIFhoKGUsXyl9LHtjbHVzdGVyOmQsbGFiZWxCQm94Onl9fSwicmVjdCIpLGU5ZT1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixlLmlkKSxuPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wKmUucGFkZGluZyxhPWkvMjtuLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsZS54LWUud2lkdGgvMi1hKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpLmF0dHIoImZpbGwiLCJub25lIik7bGV0IHM9bi5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLndpZHRoPXMud2lkdGgsZS5oZWlnaHQ9cy5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIFhoKGUsbCl9LHtjbHVzdGVyOnIsbGFiZWxCQm94Ont3aWR0aDowLGhlaWdodDowfX19LCJub3RlR3JvdXAiKSx0OWU9byhhc3luYyh0LGUpPT57bGV0IHI9bWUoKSx7dGhlbWVWYXJpYWJsZXM6bixoYW5kRHJhd25TZWVkOml9PXIse2FsdEJhY2tncm91bmQ6YSxjb21wb3NpdGVCYWNrZ3JvdW5kOnMsY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kOmwsbm9kZUJvcmRlcjp1fT1uLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1pZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLGY9aC5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSxkPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIikscD1oLmFwcGVuZCgicmVjdCIpLG09ZC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgVGMoZS5sYWJlbCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSksZz1tLmdldEJCb3goKTtpZihkcihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEQ9bS5jaGlsZHJlblswXSxPPUdlKG0pO2c9RC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxPLmF0dHIoIndpZHRoIixnLndpZHRoKSxPLmF0dHIoImhlaWdodCIsZy5oZWlnaHQpfWxldCB5PTAqZS5wYWRkaW5nLHY9eS8yLHg9KGUud2lkdGg8PWcud2lkdGgrZS5wYWRkaW5nP2cud2lkdGgrZS5wYWRkaW5nOmUud2lkdGgpK3k7ZS53aWR0aDw9Zy53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh4LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCBiPWUuaGVpZ2h0K3ksVD1lLmhlaWdodCt5LWcuaGVpZ2h0LTYsUz1lLngteC8yLHc9ZS55LWIvMjtlLndpZHRoPXg7bGV0IEU9ZS55LWUuaGVpZ2h0LzItditnLmhlaWdodCsyLF87aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBEPWUuY3NzQ2xhc3Nlcy5pbmNsdWRlcygic3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IiksTz1qZS5zdmcoaCksUj1lLnJ4fHxlLnJ5P08ucGF0aChPYShTLHcseCxiLDEwKSx7cm91Z2huZXNzOi43LGZpbGw6bCxmaWxsU3R5bGU6InNvbGlkIixzdHJva2U6dSxzZWVkOml9KTpPLnJlY3RhbmdsZShTLHcseCxiLHtzZWVkOml9KTtfPWguaW5zZXJ0KCgpPT5SLCI6Zmlyc3QtY2hpbGQiKTtsZXQgaz1PLnJlY3RhbmdsZShTLEUseCxULHtmaWxsOkQ/YTpzLGZpbGxTdHlsZTpEPyJoYWNodXJlIjoic29saWQiLHN0cm9rZTp1LHNlZWQ6aX0pO189aC5pbnNlcnQoKCk9PlIsIjpmaXJzdC1jaGlsZCIpLHA9aC5pbnNlcnQoKCk9PmspfWVsc2UgXz1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLF8uYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLFMpLmF0dHIoInkiLHcpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxwLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixTKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0IixUKTtkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC1nLndpZHRoLzJ9LCAke3crMS0oZHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyk/MDozKX0pYCk7bGV0IEM9Xy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1DLmhlaWdodCxlLm9mZnNldFg9MCxlLm9mZnNldFk9Zy5oZWlnaHQtZS5wYWRkaW5nLzIsZS5sYWJlbEJCb3g9ZyxlLmludGVyc2VjdD1mdW5jdGlvbihEKXtyZXR1cm4gWGgoZSxEKX0se2NsdXN0ZXI6aCxsYWJlbEJCb3g6Z319LCJyb3VuZGVkV2l0aFRpdGxlIikscjllPW8oYXN5bmModCxlKT0+e1guaW5mbygiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO2xldCByPW1lKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHtjbHVzdGVyQmtnOmEsY2x1c3RlckJvcmRlcjpzfT1uLHtsYWJlbFN0eWxlczpsLG5vZGVTdHlsZXM6dSxib3JkZXJTdHlsZXM6aCxiYWNrZ3JvdW5kU3R5bGVzOmZ9PVllKGUpLGQ9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIgIitlLmNzc0NsYXNzZXMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vaykscD1kcihyLmZsb3djaGFydC5odG1sTGFiZWxzKSxtPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsICIpLGc9YXdhaXQgcW4obSxlLmxhYmVsLHtzdHlsZTplLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczpwLGlzTm9kZTohMCx3aWR0aDplLndpZHRofSkseT1nLmdldEJCb3goKTtpZihkcihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IF89Zy5jaGlsZHJlblswXSxDPUdlKGcpO3k9Xy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxDLmF0dHIoIndpZHRoIix5LndpZHRoKSxDLmF0dHIoImhlaWdodCIseS5oZWlnaHQpfWxldCB2PWUud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP3kud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh2LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCB4PWUuaGVpZ2h0LGI9ZS54LXYvMixUPWUueS14LzI7WC50cmFjZSgiRGF0YSAiLGUsSlNPTi5zdHJpbmdpZnkoZSkpO2xldCBTO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgXz1qZS5zdmcoZCksQz1RZShlLHtyb3VnaG5lc3M6LjcsZmlsbDphLHN0cm9rZTpzLGZpbGxXZWlnaHQ6NCxzZWVkOml9KSxEPV8ucGF0aChPYShiLFQsdix4LGUucngpLEMpO1M9ZC5pbnNlcnQoKCk9PihYLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEQpLEQpLCI6Zmlyc3QtY2hpbGQiKSxTLnNlbGVjdCgicGF0aDpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsaC5qb2luKCI7IikpLFMuc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGYuam9pbigiOyIpLnJlcGxhY2UoImZpbGwiLCJzdHJva2UiKSl9ZWxzZSBTPWQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJzdHlsZSIsdSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixUKS5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0Iix4KTtsZXR7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjp3fT1CdShyKTtpZihtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC15LndpZHRoLzJ9LCAke2UueS1lLmhlaWdodC8yK3d9KWApLGwpe2xldCBfPW0uc2VsZWN0KCJzcGFuIik7XyYmXy5hdHRyKCJzdHlsZSIsbCl9bGV0IEU9Uy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLm9mZnNldFg9MCxlLndpZHRoPUUud2lkdGgsZS5oZWlnaHQ9RS5oZWlnaHQsZS5vZmZzZXRZPXkuaGVpZ2h0LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBYaChlLF8pfSx7Y2x1c3RlcjpkLGxhYmVsQkJveDp5fX0sImthbmJhblNlY3Rpb24iKSxuOWU9bygodCxlKT0+e2xldCByPW1lKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHtub2RlQm9yZGVyOmF9PW4scz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixlLmNzc0NsYXNzZXMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vayksbD1zLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLHU9MCplLnBhZGRpbmcsaD1lLndpZHRoK3U7ZS5kaWZmPS1lLnBhZGRpbmc7bGV0IGY9ZS5oZWlnaHQrdSxkPWUueC1oLzIscD1lLnktZi8yO2Uud2lkdGg9aDtsZXQgbTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHY9amUuc3ZnKHMpLnJlY3RhbmdsZShkLHAsaCxmLHtmaWxsOiJsaWdodGdyZXkiLHJvdWdobmVzczouNSxzdHJva2VMaW5lRGFzaDpbNV0sc3Ryb2tlOmEsc2VlZDppfSk7bT1zLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIil9ZWxzZSBtPWwuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksbS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixwKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vayk7bGV0IGc9bS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1nLmhlaWdodCxlLm9mZnNldFg9MCxlLm9mZnNldFk9MCxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gWGgoZSx5KX0se2NsdXN0ZXI6cyxsYWJlbEJCb3g6e319fSwiZGl2aWRlciIpLGk5ZT1jZWUsYTllPXtyZWN0OmNlZSxzcXVhcmVSZWN0Omk5ZSxyb3VuZGVkV2l0aFRpdGxlOnQ5ZSxub3RlR3JvdXA6ZTllLGRpdmlkZXI6bjllLGthbmJhblNlY3Rpb246cjllfSx1ZWU9bmV3IE1hcCxDbT1vKGFzeW5jKHQsZSk9PntsZXQgcj1lLnNoYXBlfHwicmVjdCIsbj1hd2FpdCBhOWVbcl0odCxlKTtyZXR1cm4gdWVlLnNldChlLmlkLG4pLG59LCJpbnNlcnRDbHVzdGVyIiksaGVlPW8oKCk9Pnt1ZWU9bmV3IE1hcH0sImNsZWFyIil9KTtmdW5jdGlvbiBzdyh0LGUpe2lmKHQ9PT12b2lkIDB8fGU9PT12b2lkIDApcmV0dXJue2FuZ2xlOjAsZGVsdGFYOjAsZGVsdGFZOjB9O3Q9WW4odCksZT1ZbihlKTtsZXRbcixuXT1bdC54LHQueV0sW2ksYV09W2UueCxlLnldLHM9aS1yLGw9YS1uO3JldHVybnthbmdsZTpNYXRoLmF0YW4obC9zKSxkZWx0YVg6cyxkZWx0YVk6bH19dmFyIFZvLFluLG93LFBMPU4oKCk9PnsidXNlIHN0cmljdCI7Vm89e2FnZ3JlZ2F0aW9uOjE4LGV4dGVuc2lvbjoxOCxjb21wb3NpdGlvbjoxOCxkZXBlbmRlbmN5OjYsbG9sbGlwb3A6MTMuNSxhcnJvd19wb2ludDo0fTtvKHN3LCJjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlIik7WW49byh0PT5BcnJheS5pc0FycmF5KHQpP3t4OnRbMF0seTp0WzFdfTp0LCJwb2ludFRyYW5zZm9ybWVyIiksb3c9byh0PT4oe3g6byhmdW5jdGlvbihlLHIsbil7bGV0IGk9MCxhPVluKG5bMF0pLng8WW4obltuLmxlbmd0aC0xXSkueD8ibGVmdCI6InJpZ2h0IjtpZihyPT09MCYmT2JqZWN0Lmhhc093bihWbyx0LmFycm93VHlwZVN0YXJ0KSl7bGV0e2FuZ2xlOm0sZGVsdGFYOmd9PXN3KG5bMF0sblsxXSk7aT1Wb1t0LmFycm93VHlwZVN0YXJ0XSpNYXRoLmNvcyhtKSooZz49MD8xOi0xKX1lbHNlIGlmKHI9PT1uLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKFZvLHQuYXJyb3dUeXBlRW5kKSl7bGV0e2FuZ2xlOm0sZGVsdGFYOmd9PXN3KG5bbi5sZW5ndGgtMV0sbltuLmxlbmd0aC0yXSk7aT1Wb1t0LmFycm93VHlwZUVuZF0qTWF0aC5jb3MobSkqKGc+PTA/MTotMSl9bGV0IHM9TWF0aC5hYnMoWW4oZSkueC1ZbihuW24ubGVuZ3RoLTFdKS54KSxsPU1hdGguYWJzKFluKGUpLnktWW4obltuLmxlbmd0aC0xXSkueSksdT1NYXRoLmFicyhZbihlKS54LVluKG5bMF0pLngpLGg9TWF0aC5hYnMoWW4oZSkueS1ZbihuWzBdKS55KSxmPVZvW3QuYXJyb3dUeXBlU3RhcnRdLGQ9Vm9bdC5hcnJvd1R5cGVFbmRdLHA9MTtpZihzPGQmJnM+MCYmbDxkKXtsZXQgbT1kK3AtczttKj1hPT09InJpZ2h0Ij8tMToxLGktPW19aWYodTxmJiZ1PjAmJmg8Zil7bGV0IG09ZitwLXU7bSo9YT09PSJyaWdodCI/LTE6MSxpKz1tfXJldHVybiBZbihlKS54K2l9LCJ4IikseTpvKGZ1bmN0aW9uKGUscixuKXtsZXQgaT0wLGE9WW4oblswXSkueTxZbihuW24ubGVuZ3RoLTFdKS55PyJkb3duIjoidXAiO2lmKHI9PT0wJiZPYmplY3QuaGFzT3duKFZvLHQuYXJyb3dUeXBlU3RhcnQpKXtsZXR7YW5nbGU6bSxkZWx0YVk6Z309c3coblswXSxuWzFdKTtpPVZvW3QuYXJyb3dUeXBlU3RhcnRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooZz49MD8xOi0xKX1lbHNlIGlmKHI9PT1uLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKFZvLHQuYXJyb3dUeXBlRW5kKSl7bGV0e2FuZ2xlOm0sZGVsdGFZOmd9PXN3KG5bbi5sZW5ndGgtMV0sbltuLmxlbmd0aC0yXSk7aT1Wb1t0LmFycm93VHlwZUVuZF0qTWF0aC5hYnMoTWF0aC5zaW4obSkpKihnPj0wPzE6LTEpfWxldCBzPU1hdGguYWJzKFluKGUpLnktWW4obltuLmxlbmd0aC0xXSkueSksbD1NYXRoLmFicyhZbihlKS54LVluKG5bbi5sZW5ndGgtMV0pLngpLHU9TWF0aC5hYnMoWW4oZSkueS1ZbihuWzBdKS55KSxoPU1hdGguYWJzKFluKGUpLngtWW4oblswXSkueCksZj1Wb1t0LmFycm93VHlwZVN0YXJ0XSxkPVZvW3QuYXJyb3dUeXBlRW5kXSxwPTE7aWYoczxkJiZzPjAmJmw8ZCl7bGV0IG09ZCtwLXM7bSo9YT09PSJ1cCI/LTE6MSxpLT1tfWlmKHU8ZiYmdT4wJiZoPGYpe2xldCBtPWYrcC11O20qPWE9PT0idXAiPy0xOjEsaSs9bX1yZXR1cm4gWW4oZSkueStpfSwieSIpfSksImdldExpbmVGdW5jdGlvbnNXaXRoT2Zmc2V0Iil9KTt2YXIgZGVlLHM5ZSxmZWUscGVlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtkZWU9bygodCxlLHIsbixpLGEpPT57ZS5hcnJvd1R5cGVTdGFydCYmZmVlKHQsInN0YXJ0IixlLmFycm93VHlwZVN0YXJ0LHIsbixpLGEpLGUuYXJyb3dUeXBlRW5kJiZmZWUodCwiZW5kIixlLmFycm93VHlwZUVuZCxyLG4saSxhKX0sImFkZEVkZ2VNYXJrZXJzIiksczllPXthcnJvd19jcm9zczp7dHlwZToiY3Jvc3MiLGZpbGw6ITF9LGFycm93X3BvaW50Ont0eXBlOiJwb2ludCIsZmlsbDohMH0sYXJyb3dfYmFyYjp7dHlwZToiYmFyYiIsZmlsbDohMH0sYXJyb3dfY2lyY2xlOnt0eXBlOiJjaXJjbGUiLGZpbGw6ITF9LGFnZ3JlZ2F0aW9uOnt0eXBlOiJhZ2dyZWdhdGlvbiIsZmlsbDohMX0sZXh0ZW5zaW9uOnt0eXBlOiJleHRlbnNpb24iLGZpbGw6ITF9LGNvbXBvc2l0aW9uOnt0eXBlOiJjb21wb3NpdGlvbiIsZmlsbDohMH0sZGVwZW5kZW5jeTp7dHlwZToiZGVwZW5kZW5jeSIsZmlsbDohMH0sbG9sbGlwb3A6e3R5cGU6ImxvbGxpcG9wIixmaWxsOiExfSxvbmx5X29uZTp7dHlwZToib25seU9uZSIsZmlsbDohMX0semVyb19vcl9vbmU6e3R5cGU6Inplcm9Pck9uZSIsZmlsbDohMX0sb25lX29yX21vcmU6e3R5cGU6Im9uZU9yTW9yZSIsZmlsbDohMX0semVyb19vcl9tb3JlOnt0eXBlOiJ6ZXJvT3JNb3JlIixmaWxsOiExfSxyZXF1aXJlbWVudF9hcnJvdzp7dHlwZToicmVxdWlyZW1lbnRfYXJyb3ciLGZpbGw6ITF9LHJlcXVpcmVtZW50X2NvbnRhaW5zOnt0eXBlOiJyZXF1aXJlbWVudF9jb250YWlucyIsZmlsbDohMX19LGZlZT1vKCh0LGUscixuLGksYSxzKT0+e2xldCBsPXM5ZVtyXTtpZighbCl7WC53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7cn1gKTtyZXR1cm59bGV0IHU9bC50eXBlLGY9YCR7aX1fJHthfS0ke3V9JHtlPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQifWA7aWYocyYmcy50cmltKCkhPT0iIil7bGV0IGQ9cy5yZXBsYWNlKC9bXlxkQS1aYS16XS9nLCJfIikscD1gJHtmfV8ke2R9YDtpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocCkpe2xldCBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2lmKG0pe2xldCBnPW0uY2xvbmVOb2RlKCEwKTtnLmlkPXAsZy5xdWVyeVNlbGVjdG9yQWxsKCJwYXRoLCBjaXJjbGUsIGxpbmUiKS5mb3JFYWNoKHY9Pnt2LnNldEF0dHJpYnV0ZSgic3Ryb2tlIixzKSxsLmZpbGwmJnYuc2V0QXR0cmlidXRlKCJmaWxsIixzKX0pLG0ucGFyZW50Tm9kZT8uYXBwZW5kQ2hpbGQoZyl9fXQuYXR0cihgbWFya2VyLSR7ZX1gLGB1cmwoJHtufSMke3B9KWApfWVsc2UgdC5hdHRyKGBtYXJrZXItJHtlfWAsYHVybCgke259IyR7Zn0pYCl9LCJhZGRFZGdlTWFya2VyIil9KTtmdW5jdGlvbiBsdyh0LGUpe21lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPWUubGVuZ3RoKjkrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfWZ1bmN0aW9uIGM5ZSh0KXtsZXQgZT1bXSxyPVtdO2ZvcihsZXQgbj0xO248dC5sZW5ndGgtMTtuKyspe2xldCBpPXRbbi0xXSxhPXRbbl0scz10W24rMV07KGkueD09PWEueCYmYS55PT09cy55JiZNYXRoLmFicyhhLngtcy54KT41JiZNYXRoLmFicyhhLnktaS55KT41fHxpLnk9PT1hLnkmJmEueD09PXMueCYmTWF0aC5hYnMoYS54LWkueCk+NSYmTWF0aC5hYnMoYS55LXMueSk+NSkmJihlLnB1c2goYSksci5wdXNoKG4pKX1yZXR1cm57Y29ybmVyUG9pbnRzOmUsY29ybmVyUG9pbnRQb3NpdGlvbnM6cn19dmFyIGN3LGRhLHllZSxOMix1dyxodyxvOWUsbDllLG1lZSxnZWUsdTllLGZ3LEJMPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtwcigpO3l0KCk7YW8oKTtlcigpO1BMKCk7UjIoKTtmcigpO1d0KCk7cncoKTtwZWUoKTt6dCgpO2N3PW5ldyBNYXAsZGE9bmV3IE1hcCx5ZWU9bygoKT0+e2N3LmNsZWFyKCksZGEuY2xlYXIoKX0sImNsZWFyIiksTjI9byh0PT50P3QucmVkdWNlKChyLG4pPT5yKyI7IituLCIiKToiIiwiZ2V0TGFiZWxTdHlsZXMiKSx1dz1vKGFzeW5jKHQsZSk9PntsZXQgcj1kcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxuPWF3YWl0IHFuKHQsZS5sYWJlbCx7c3R5bGU6TjIoZS5sYWJlbFN0eWxlKSx1c2VIdG1sTGFiZWxzOnIsYWRkU3ZnQmFja2dyb3VuZDohMCxpc05vZGU6ITF9KTtYLmluZm8oImFiYzgyIixlLGUubGFiZWxUeXBlKTtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksYT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthLm5vZGUoKS5hcHBlbmRDaGlsZChuKTtsZXQgcz1uLmdldEJCb3goKTtpZihyKXtsZXQgdT1uLmNoaWxkcmVuWzBdLGg9R2Uobik7cz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGguYXR0cigid2lkdGgiLHMud2lkdGgpLGguYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKSxjdy5zZXQoZS5pZCxpKSxlLndpZHRoPXMud2lkdGgsZS5oZWlnaHQ9cy5oZWlnaHQ7bGV0IGw7aWYoZS5zdGFydExhYmVsTGVmdCl7bGV0IHU9YXdhaXQgVGMoZS5zdGFydExhYmVsTGVmdCxOMihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksZGEuZ2V0KGUuaWQpfHxkYS5zZXQoZS5pZCx7fSksZGEuZ2V0KGUuaWQpLnN0YXJ0TGVmdD1oLGx3KGwsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IFRjKGUuc3RhcnRMYWJlbFJpZ2h0LE4yKGUubGFiZWxTdHlsZSkpLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxmPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2w9aC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZi5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7bGV0IGQ9dS5nZXRCQm94KCk7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrLWQuaGVpZ2h0LzIrIikiKSxkYS5nZXQoZS5pZCl8fGRhLnNldChlLmlkLHt9KSxkYS5nZXQoZS5pZCkuc3RhcnRSaWdodD1oLGx3KGwsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXtsZXQgdT1hd2FpdCBUYyhlLmVuZExhYmVsTGVmdCxOMihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZGEuZ2V0KGUuaWQpfHxkYS5zZXQoZS5pZCx7fSksZGEuZ2V0KGUuaWQpLmVuZExlZnQ9aCxsdyhsLGUuZW5kTGFiZWxMZWZ0KX1pZihlLmVuZExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IFRjKGUuZW5kTGFiZWxSaWdodCxOMihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZGEuZ2V0KGUuaWQpfHxkYS5zZXQoZS5pZCx7fSksZGEuZ2V0KGUuaWQpLmVuZFJpZ2h0PWgsbHcobCxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBufSwiaW5zZXJ0RWRnZUxhYmVsIik7byhsdywic2V0VGVybWluYWxXaWR0aCIpO2h3PW8oKHQsZSk9PntYLmRlYnVnKCJNb3ZpbmcgbGFiZWwgYWJjODggIix0LmlkLHQubGFiZWwsY3cuZ2V0KHQuaWQpLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPW1lKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1CdShuKTtpZih0LmxhYmVsKXtsZXQgYT1jdy5nZXQodC5pZCkscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY0xhYmVsUG9zaXRpb24ocik7WC5kZWJ1ZygiTW92aW5nIGxhYmVsICIrdC5sYWJlbCsiIGZyb20gKCIscywiLCIsbCwiKSB0byAoIix1LngsIiwiLHUueSwiKSBhYmM4OCIpLGUudXBkYXRlZFBhdGgmJihzPXUueCxsPXUueSl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsK2kvMn0pYCl9aWYodC5zdGFydExhYmVsTGVmdCl7bGV0IGE9ZGEuZ2V0KHQuaWQpLnN0YXJ0TGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7bGV0IGE9ZGEuZ2V0KHQuaWQpLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT1kYS5nZXQodC5pZCkuZW5kTGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxSaWdodCl7bGV0IGE9ZGEuZ2V0KHQuaWQpLmVuZFJpZ2h0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVZ0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfX0sInBvc2l0aW9uRWRnZUxhYmVsIiksbzllPW8oKHQsZSk9PntsZXQgcj10Lngsbj10LnksaT1NYXRoLmFicyhlLngtciksYT1NYXRoLmFicyhlLnktbikscz10LndpZHRoLzIsbD10LmhlaWdodC8yO3JldHVybiBpPj1zfHxhPj1sfSwib3V0c2lkZU5vZGUiKSxsOWU9bygodCxlLHIpPT57WC5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KGUpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShyKX0KICBub2RlICAgICAgICA6IHg6JHt0Lnh9IHk6JHt0Lnl9IHc6JHt0LndpZHRofSBoOiR7dC5oZWlnaHR9YCk7bGV0IG49dC54LGk9dC55LGE9TWF0aC5hYnMobi1yLngpLHM9dC53aWR0aC8yLGw9ci54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixoPU1hdGguYWJzKGUueS1yLnkpLGY9TWF0aC5hYnMoZS54LXIueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMobi1lLngpKnUpe2xldCBkPXIueTxlLnk/ZS55LXUtaTppLXUtZS55O2w9ZipkL2g7bGV0IHA9e3g6ci54PGUueD9yLngrbDpyLngtZitsLHk6ci55PGUueT9yLnkraC1kOnIueS1oK2R9O3JldHVybiBsPT09MCYmKHAueD1lLngscC55PWUueSksZj09PTAmJihwLng9ZS54KSxoPT09MCYmKHAueT1lLnkpLFguZGVidWcoYGFiYzg5IHRvcC9ib3R0b20gY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBYLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksbWVlPW8oKHQsZSk9PntYLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTtsZXQgcj1bXSxuPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKGE9PntpZihYLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50IixhLGUpLCFvOWUoZSxhKSYmIWkpe2xldCBzPWw5ZShlLG4sYSk7WC5kZWJ1ZygiYWJjODggaW5zaWRlIixhLG4scyksWC5kZWJ1ZygiYWJjODggaW50ZXJzZWN0aW9uIixzLGUpO2xldCBsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSk/WC53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLHMscik6ci5wdXNoKHMpLGk9ITB9ZWxzZSBYLndhcm4oImFiYzg4IG91dHNpZGUiLGEsbiksbj1hLGl8fHIucHVzaChhKX0pLFguZGVidWcoInJldHVybmluZyBwb2ludHMiLHIpLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKTtvKGM5ZSwiZXh0cmFjdENvcm5lclBvaW50cyIpO2dlZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngtdC54LGk9ZS55LXQueSxhPU1hdGguc3FydChuKm4raSppKSxzPXIvYTtyZXR1cm57eDplLngtcypuLHk6ZS55LXMqaX19LCJmaW5kQWRqYWNlbnRQb2ludCIpLHU5ZT1vKGZ1bmN0aW9uKHQpe2xldHtjb3JuZXJQb2ludFBvc2l0aW9uczplfT1jOWUodCkscj1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZihlLmluY2x1ZGVzKG4pKXtsZXQgaT10W24tMV0sYT10W24rMV0scz10W25dLGw9Z2VlKGkscyw1KSx1PWdlZShhLHMsNSksaD11LngtbC54LGY9dS55LWwueTtyLnB1c2gobCk7bGV0IGQ9TWF0aC5zcXJ0KDIpKjIscD17eDpzLngseTpzLnl9O2lmKE1hdGguYWJzKGEueC1pLngpPjEwJiZNYXRoLmFicyhhLnktaS55KT49MTApe1guZGVidWcoIkNvcm5lciBwb2ludCBmaXhpbmciLE1hdGguYWJzKGEueC1pLngpLE1hdGguYWJzKGEueS1pLnkpKTtsZXQgbT01O3MueD09PWwueD9wPXt4Omg8MD9sLngtbStkOmwueCttLWQseTpmPDA/bC55LWQ6bC55K2R9OnA9e3g6aDwwP2wueC1kOmwueCtkLHk6ZjwwP2wueS1tK2Q6bC55K20tZH19ZWxzZSBYLmRlYnVnKCJDb3JuZXIgcG9pbnQgc2tpcHBpbmcgZml4aW5nIixNYXRoLmFicyhhLngtaS54KSxNYXRoLmFicyhhLnktaS55KSk7ci5wdXNoKHAsdSl9ZWxzZSByLnB1c2godFtuXSk7cmV0dXJuIHJ9LCJmaXhDb3JuZXJzIiksZnc9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXR7aGFuZERyYXduU2VlZDpsfT1tZSgpLHU9ZS5wb2ludHMsaD0hMSxmPWk7dmFyIGQ9YTtsZXQgcD1bXTtmb3IobGV0IEQgaW4gZS5jc3NDb21waWxlZFN0eWxlcylTMihEKXx8cC5wdXNoKGUuY3NzQ29tcGlsZWRTdHlsZXNbRF0pO2QuaW50ZXJzZWN0JiZmLmludGVyc2VjdCYmKHU9dS5zbGljZSgxLGUucG9pbnRzLmxlbmd0aC0xKSx1LnVuc2hpZnQoZi5pbnRlcnNlY3QodVswXSkpLFguZGVidWcoIkxhc3QgcG9pbnQgQVBBMTIiLGUuc3RhcnQsIi0tPiIsZS5lbmQsdVt1Lmxlbmd0aC0xXSxkLGQuaW50ZXJzZWN0KHVbdS5sZW5ndGgtMV0pKSx1LnB1c2goZC5pbnRlcnNlY3QodVt1Lmxlbmd0aC0xXSkpKSxlLnRvQ2x1c3RlciYmKFguaW5mbygidG8gY2x1c3RlciBhYmM4OCIsci5nZXQoZS50b0NsdXN0ZXIpKSx1PW1lZShlLnBvaW50cyxyLmdldChlLnRvQ2x1c3Rlcikubm9kZSksaD0hMCksZS5mcm9tQ2x1c3RlciYmKFguZGVidWcoImZyb20gY2x1c3RlciBhYmM4OCIsci5nZXQoZS5mcm9tQ2x1c3RlciksSlNPTi5zdHJpbmdpZnkodSxudWxsLDIpKSx1PW1lZSh1LnJldmVyc2UoKSxyLmdldChlLmZyb21DbHVzdGVyKS5ub2RlKS5yZXZlcnNlKCksaD0hMCk7bGV0IG09dS5maWx0ZXIoRD0+IU51bWJlci5pc05hTihELnkpKTttPXU5ZShtKTtsZXQgZz1Obztzd2l0Y2goZz1TdSxlLmN1cnZlKXtjYXNlImxpbmVhciI6Zz1TdTticmVhaztjYXNlImJhc2lzIjpnPU5vO2JyZWFrO2Nhc2UiY2FyZGluYWwiOmc9cXY7YnJlYWs7Y2FzZSJidW1wWCI6Zz1HdjticmVhaztjYXNlImJ1bXBZIjpnPVZ2O2JyZWFrO2Nhc2UiY2F0bXVsbFJvbSI6Zz1qdjticmVhaztjYXNlIm1vbm90b25lWCI6Zz1LdjticmVhaztjYXNlIm1vbm90b25lWSI6Zz1RdjticmVhaztjYXNlIm5hdHVyYWwiOmc9SzA7YnJlYWs7Y2FzZSJzdGVwIjpnPVEwO2JyZWFrO2Nhc2Uic3RlcEFmdGVyIjpnPUp2O2JyZWFrO2Nhc2Uic3RlcEJlZm9yZSI6Zz1adjticmVhaztkZWZhdWx0Omc9Tm99bGV0e3g6eSx5OnZ9PW93KGUpLHg9Q2woKS54KHkpLnkodikuY3VydmUoZyksYjtzd2l0Y2goZS50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpiPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwiO2JyZWFrO2Nhc2UidGhpY2siOmI9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztjYXNlImludmlzaWJsZSI6Yj0iZWRnZS10aGlja25lc3MtaW52aXNpYmxlIjticmVhaztkZWZhdWx0OmI9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCJ9c3dpdGNoKGUucGF0dGVybil7Y2FzZSJzb2xpZCI6Yis9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpiKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjpiKz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrO2RlZmF1bHQ6Yis9IiBlZGdlLXBhdHRlcm4tc29saWQifWxldCBULFM9eChtKSx3PUFycmF5LmlzQXJyYXkoZS5zdHlsZSk/ZS5zdHlsZTplLnN0eWxlP1tlLnN0eWxlXTpbXSxFPXcuZmluZChEPT5EPy5zdGFydHNXaXRoKCJzdHJva2U6IikpO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgRD1qZS5zdmcodCk7T2JqZWN0LmFzc2lnbihbXSxtKTtsZXQgTz1ELnBhdGgoUyx7cm91Z2huZXNzOi4zLHNlZWQ6bH0pO2IrPSIgdHJhbnNpdGlvbiIsVD1HZShPKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiY2xhc3MiLCIgIitiKyhlLmNsYXNzZXM/IiAiK2UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIix3P3cucmVkdWNlKChrLEwpPT5rKyI7IitMLCIiKToiIik7bGV0IFI9VC5hdHRyKCJkIik7VC5hdHRyKCJkIixSKSx0Lm5vZGUoKS5hcHBlbmRDaGlsZChULm5vZGUoKSl9ZWxzZXtsZXQgRD1wLmpvaW4oIjsiKSxPPXc/dy5yZWR1Y2UoKEwsQSk9PkwrQSsiOyIsIiIpOiIiLFI9IiI7ZS5hbmltYXRlJiYoUj0iIGVkZ2UtYW5pbWF0aW9uLWZhc3QiKSxlLmFuaW1hdGlvbiYmKFI9IiBlZGdlLWFuaW1hdGlvbi0iK2UuYW5pbWF0aW9uKTtsZXQgaz1EP0QrIjsiK08rIjsiOk87VD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLFMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJjbGFzcyIsIiAiK2IrKGUuY2xhc3Nlcz8iICIrZS5jbGFzc2VzOiIiKSsoUj8/IiIpKS5hdHRyKCJzdHlsZSIsayksRT1rLm1hdGNoKC9zdHJva2U6KFteO10rKS8pPy5bMV19bGV0IF89IiI7KG1lKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fG1lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihfPW11KCEwKSksWC5pbmZvKCJhcnJvd1R5cGVTdGFydCIsZS5hcnJvd1R5cGVTdGFydCksWC5pbmZvKCJhcnJvd1R5cGVFbmQiLGUuYXJyb3dUeXBlRW5kKSxkZWUoVCxlLF8scyxuLEUpO2xldCBDPXt9O3JldHVybiBoJiYoQy51cGRhdGVkUGF0aD11KSxDLm9yaWdpbmFsUGF0aD1lLnBvaW50cyxDfSwiaW5zZXJ0RWRnZSIpfSk7dmFyIGg5ZSxmOWUsZDllLHA5ZSxtOWUsZzllLHk5ZSx2OWUseDllLGI5ZSxUOWUsdzllLGs5ZSxFOWUsUzllLEM5ZSxBOWUsZHcsRkw9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO2g5ZT1vKCh0LGUscixuKT0+e2UuZm9yRWFjaChpPT57QTllW2ldKHQscixuKX0pfSwiaW5zZXJ0TWFya2VycyIpLGY5ZT1vKCh0LGUscik9PntYLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixyKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LCJleHRlbnNpb24iKSxkOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJjb21wb3NpdGlvbiIpLHA5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sImFnZ3JlZ2F0aW9uIiksbTllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJkZXBlbmRlbmN5IiksZzllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSwibG9sbGlwb3AiKSx5OWU9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sInBvaW50IiksdjllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNpcmNsZSIpLHg5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jcm9zc0VuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLDEyKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jcm9zc1N0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwiY3Jvc3MiKSxiOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sImJhcmIiKSxUOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItb25seU9uZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgb25seU9uZSAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLW9ubHlPbmVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBvbmx5T25lICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKX0sIm9ubHlfb25lIiksdzllPW8oKHQsZSxyKT0+e2xldCBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXplcm9Pck9uZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgemVyb09yT25lICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIik7bi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk05LDAgTDksMTgiKTtsZXQgaT10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi16ZXJvT3JPbmVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciB6ZXJvT3JPbmUgIitlKS5hdHRyKCJyZWZYIiwzMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTIxLDAgTDIxLDE4Iil9LCJ6ZXJvX29yX29uZSIpLGs5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1vbmVPck1vcmVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIG9uZU9yTW9yZSAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItb25lT3JNb3JlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgb25lT3JNb3JlICIrZSkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpfSwib25lX29yX21vcmUiKSxFOWU9bygodCxlLHIpPT57bGV0IG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItemVyb09yTW9yZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgemVyb09yTW9yZSAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDU3KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIik7bi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOCIpO2xldCBpPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXplcm9Pck1vcmVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciB6ZXJvT3JNb3JlICIrZSkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKTtpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSwiemVyb19vcl9tb3JlIiksUzllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXJlcXVpcmVtZW50X2Fycm93RW5kIikuYXR0cigicmVmWCIsMjApLmF0dHIoInJlZlkiLDEwKS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMMjAsMTAKICAgICAgTTIwLDEwCiAgICAgIEwwLDIwYCl9LCJyZXF1aXJlbWVudF9hcnJvdyIpLEM5ZT1vKCh0LGUscik9PntsZXQgbj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1yZXF1aXJlbWVudF9jb250YWluc1N0YXJ0IikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsMTApLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyMCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTApLmF0dHIoImN5IiwxMCkuYXR0cigiciIsOSkuYXR0cigiZmlsbCIsIm5vbmUiKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwxKS5hdHRyKCJ4MiIsMTkpLmF0dHIoInkxIiwxMCkuYXR0cigieTIiLDEwKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoInkxIiwxKS5hdHRyKCJ5MiIsMTkpLmF0dHIoIngxIiwxMCkuYXR0cigieDIiLDEwKX0sInJlcXVpcmVtZW50X2NvbnRhaW5zIiksQTllPXtleHRlbnNpb246ZjllLGNvbXBvc2l0aW9uOmQ5ZSxhZ2dyZWdhdGlvbjpwOWUsZGVwZW5kZW5jeTptOWUsbG9sbGlwb3A6ZzllLHBvaW50Onk5ZSxjaXJjbGU6djllLGNyb3NzOng5ZSxiYXJiOmI5ZSxvbmx5X29uZTpUOWUsemVyb19vcl9vbmU6dzllLG9uZV9vcl9tb3JlOms5ZSx6ZXJvX29yX21vcmU6RTllLHJlcXVpcmVtZW50X2Fycm93OlM5ZSxyZXF1aXJlbWVudF9jb250YWluczpDOWV9LGR3PWg5ZX0pO2FzeW5jIGZ1bmN0aW9uIEFtKHQsZSxyKXtsZXQgbixpO2Uuc2hhcGU9PT0icmVjdCImJihlLnJ4JiZlLnJ5P2Uuc2hhcGU9InJvdW5kZWRSZWN0IjplLnNoYXBlPSJzcXVhcmVSZWN0Iik7bGV0IGE9ZS5zaGFwZT9JTFtlLnNoYXBlXTp2b2lkIDA7aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2Uuc2hhcGV9LiBQbGVhc2UgY2hlY2sgeW91ciBzeW50YXguYCk7aWYoZS5saW5rKXtsZXQgcztyLmNvbmZpZy5zZWN1cml0eUxldmVsPT09InNhbmRib3giP3M9Il90b3AiOmUubGlua1RhcmdldCYmKHM9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksbj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIscz8/bnVsbCksaT1hd2FpdCBhKG4sZSxyKX1lbHNlIGk9YXdhaXQgYSh0LGUsciksbj1pO3JldHVybiBlLnRvb2x0aXAmJmkuYXR0cigidGl0bGUiLGUudG9vbHRpcCkscHcuc2V0KGUuaWQsbiksZS5oYXZlQ2FsbGJhY2smJm4uYXR0cigiY2xhc3MiLG4uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLG59dmFyIHB3LHZlZSx4ZWUsTTIsbXc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO09MKCk7cHc9bmV3IE1hcDtvKEFtLCJpbnNlcnROb2RlIik7dmVlPW8oKHQsZSk9Pntwdy5zZXQoZS5pZCx0KX0sInNldE5vZGVFbGVtIikseGVlPW8oKCk9Pntwdy5jbGVhcigpfSwiY2xlYXIiKSxNMj1vKHQ9PntsZXQgZT1wdy5nZXQodC5pZCk7WC50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO2xldCByPTgsbj10LmRpZmZ8fDA7cmV0dXJuIHQuY2x1c3Rlck5vZGU/ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodC54K24tdC53aWR0aC8yKSsiLCAiKyh0LnktdC5oZWlnaHQvMi1yKSsiKSIpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIiksbn0sInBvc2l0aW9uTm9kZSIpfSk7dmFyIGJlZSxUZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttaSgpO3ByKCk7eXQoKTthdygpO0JMKCk7RkwoKTttdygpO0Z0KCk7ZXIoKTtiZWU9e2NvbW1vbjpaZSxnZXRDb25maWc6dHIsaW5zZXJ0Q2x1c3RlcjpDbSxpbnNlcnRFZGdlOmZ3LGluc2VydEVkZ2VMYWJlbDp1dyxpbnNlcnRNYXJrZXJzOmR3LGluc2VydE5vZGU6QW0saW50ZXJwb2xhdGVUb0N1cnZlOkE5LGxhYmVsSGVscGVyOm10LGxvZzpYLHBvc2l0aW9uRWRnZUxhYmVsOmh3fX0pO2Z1bmN0aW9uIEQ5ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxpaSh0KSYmZmEodCk9PV85ZX12YXIgXzllLG9vLFdkPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtPbygpO185ZT0iW29iamVjdCBTeW1ib2xdIjtvKEQ5ZSwiaXNTeW1ib2wiKTtvbz1EOWV9KTtmdW5jdGlvbiBMOWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX12YXIgQnMscWQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEw5ZSwiYXJyYXlNYXAiKTtCcz1MOWV9KTtmdW5jdGlvbiBFZWUodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKFB0KHQpKXJldHVybiBCcyh0LEVlZSkrIiI7aWYob28odCkpcmV0dXJuIGtlZT9rZWUuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiBlPT0iMCImJjEvdD09LVI5ZT8iLTAiOmV9dmFyIFI5ZSx3ZWUsa2VlLFNlZSxDZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNZCgpO3FkKCk7V24oKTtXZCgpO1I5ZT0xLzAsd2VlPWVhP2VhLnByb3RvdHlwZTp2b2lkIDAsa2VlPXdlZT93ZWUudG9TdHJpbmc6dm9pZCAwO28oRWVlLCJiYXNlVG9TdHJpbmciKTtTZWU9RWVlfSk7ZnVuY3Rpb24gTTllKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJk45ZS50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfXZhciBOOWUsQWVlLF9lZT1OKCgpPT57InVzZSBzdHJpY3QiO045ZT0vXHMvO28oTTllLCJ0cmltbWVkRW5kSW5kZXgiKTtBZWU9TTllfSk7ZnVuY3Rpb24gTzllKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAsQWVlKHQpKzEpLnJlcGxhY2UoSTllLCIiKX12YXIgSTllLERlZSxMZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtfZWUoKTtJOWU9L15ccysvO28oTzllLCJiYXNlVHJpbSIpO0RlZT1POWV9KTtmdW5jdGlvbiB6OWUodCl7aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVybiB0O2lmKG9vKHQpKXJldHVybiBSZWU7aWYoYm4odCkpe3ZhciBlPXR5cGVvZiB0LnZhbHVlT2Y9PSJmdW5jdGlvbiI/dC52YWx1ZU9mKCk6dDt0PWJuKGUpP2UrIiI6ZX1pZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIHQ9PT0wP3Q6K3Q7dD1EZWUodCk7dmFyIHI9QjllLnRlc3QodCk7cmV0dXJuIHJ8fEY5ZS50ZXN0KHQpPyQ5ZSh0LnNsaWNlKDIpLHI/Mjo4KTpQOWUudGVzdCh0KT9SZWU6K3R9dmFyIFJlZSxQOWUsQjllLEY5ZSwkOWUsTmVlLE1lZT1OKCgpPT57InVzZSBzdHJpY3QiO0xlZSgpO25vKCk7V2QoKTtSZWU9TmFOLFA5ZT0vXlstK10weFswLTlhLWZdKyQvaSxCOWU9L14wYlswMV0rJC9pLEY5ZT0vXjBvWzAtN10rJC9pLCQ5ZT1wYXJzZUludDtvKHo5ZSwidG9OdW1iZXIiKTtOZWU9ejllfSk7ZnVuY3Rpb24gVjllKHQpe2lmKCF0KXJldHVybiB0PT09MD90OjA7aWYodD1OZWUodCksdD09PUllZXx8dD09PS1JZWUpe3ZhciBlPXQ8MD8tMToxO3JldHVybiBlKkc5ZX1yZXR1cm4gdD09PXQ/dDowfXZhciBJZWUsRzllLF9tLCRMPU4oKCk9PnsidXNlIHN0cmljdCI7TWVlKCk7SWVlPTEvMCxHOWU9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO28oVjllLCJ0b0Zpbml0ZSIpO19tPVY5ZX0pO2Z1bmN0aW9uIFU5ZSh0KXt2YXIgZT1fbSh0KSxyPWUlMTtyZXR1cm4gZT09PWU/cj9lLXI6ZTowfXZhciBrYyxEbT1OKCgpPT57InVzZSBzdHJpY3QiOyRMKCk7byhVOWUsInRvSW50ZWdlciIpO2tjPVU5ZX0pO3ZhciBIOWUsZ3csT2VlPU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtNbygpO0g5ZT1McyhoaSwiV2Vha01hcCIpLGd3PUg5ZX0pO2Z1bmN0aW9uIFc5ZSgpe312YXIgYWksekw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFc5ZSwibm9vcCIpO2FpPVc5ZX0pO2Z1bmN0aW9uIHE5ZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aDsrK3I8biYmZSh0W3JdLHIsdCkhPT0hMTspO3JldHVybiB0fXZhciB5dyxHTD1OKCgpPT57InVzZSBzdHJpY3QiO28ocTllLCJhcnJheUVhY2giKTt5dz1xOWV9KTtmdW5jdGlvbiBZOWUodCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9cisobj8xOi0xKTtuP2EtLTorK2E8aTspaWYoZSh0W2FdLGEsdCkpcmV0dXJuIGE7cmV0dXJuLTF9dmFyIHZ3LFZMPU4oKCk9PnsidXNlIHN0cmljdCI7byhZOWUsImJhc2VGaW5kSW5kZXgiKTt2dz1ZOWV9KTtmdW5jdGlvbiBYOWUodCl7cmV0dXJuIHQhPT10fXZhciBQZWUsQmVlPU4oKCk9PnsidXNlIHN0cmljdCI7byhYOWUsImJhc2VJc05hTiIpO1BlZT1YOWV9KTtmdW5jdGlvbiBqOWUodCxlLHIpe2Zvcih2YXIgbj1yLTEsaT10Lmxlbmd0aDsrK248aTspaWYodFtuXT09PWUpcmV0dXJuIG47cmV0dXJuLTF9dmFyIEZlZSwkZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGo5ZSwic3RyaWN0SW5kZXhPZiIpO0ZlZT1qOWV9KTtmdW5jdGlvbiBLOWUodCxlLHIpe3JldHVybiBlPT09ZT9GZWUodCxlLHIpOnZ3KHQsUGVlLHIpfXZhciBMbSx4dz1OKCgpPT57InVzZSBzdHJpY3QiO1ZMKCk7QmVlKCk7JGVlKCk7byhLOWUsImJhc2VJbmRleE9mIik7TG09SzllfSk7ZnVuY3Rpb24gUTllKHQsZSl7dmFyIHI9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiEhciYmTG0odCxlLDApPi0xfXZhciBidyxVTD1OKCgpPT57InVzZSBzdHJpY3QiO3h3KCk7byhROWUsImFycmF5SW5jbHVkZXMiKTtidz1ROWV9KTt2YXIgWjllLHplZSxHZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwOSgpO1o5ZT1tVChPYmplY3Qua2V5cyxPYmplY3QpLHplZT1aOWV9KTtmdW5jdGlvbiB0TGUodCl7aWYoIW1jKHQpKXJldHVybiB6ZWUodCk7dmFyIGU9W107Zm9yKHZhciByIGluIE9iamVjdCh0KSllTGUuY2FsbCh0LHIpJiZyIT0iY29uc3RydWN0b3IiJiZlLnB1c2gocik7cmV0dXJuIGV9dmFyIEo5ZSxlTGUsUm0sVHc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1bSgpO0dlZSgpO0o5ZT1PYmplY3QucHJvdG90eXBlLGVMZT1KOWUuaGFzT3duUHJvcGVydHk7byh0TGUsImJhc2VLZXlzIik7Um09dExlfSk7ZnVuY3Rpb24gckxlKHQpe3JldHVybiBmaSh0KT9iVCh0KTpSbSh0KX12YXIgenIsRWM9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4OSgpO1R3KCk7UG8oKTtvKHJMZSwia2V5cyIpO3pyPXJMZX0pO3ZhciBuTGUsaUxlLGFMZSxwYSxWZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwbSgpO0ZkKCk7azkoKTtQbygpO3VtKCk7RWMoKTtuTGU9T2JqZWN0LnByb3RvdHlwZSxpTGU9bkxlLmhhc093blByb3BlcnR5LGFMZT1rVChmdW5jdGlvbih0LGUpe2lmKG1jKGUpfHxmaShlKSl7JG8oZSx6cihlKSx0KTtyZXR1cm59Zm9yKHZhciByIGluIGUpaUxlLmNhbGwoZSxyKSYmZ2ModCxyLGVbcl0pfSkscGE9YUxlfSk7ZnVuY3Rpb24gbExlKHQsZSl7aWYoUHQodCkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIHI9PSJudW1iZXIifHxyPT0ic3ltYm9sInx8cj09ImJvb2xlYW4ifHx0PT1udWxsfHxvbyh0KT8hMDpvTGUudGVzdCh0KXx8IXNMZS50ZXN0KHQpfHxlIT1udWxsJiZ0IGluIE9iamVjdChlKX12YXIgc0xlLG9MZSxObSx3dz1OKCgpPT57InVzZSBzdHJpY3QiO1duKCk7V2QoKTtzTGU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sb0xlPS9eXHcqJC87byhsTGUsImlzS2V5Iik7Tm09bExlfSk7ZnVuY3Rpb24gdUxlKHQpe3ZhciBlPXJtKHQsZnVuY3Rpb24obil7cmV0dXJuIHIuc2l6ZT09PWNMZSYmci5jbGVhcigpLG59KSxyPWUuY2FjaGU7cmV0dXJuIGV9dmFyIGNMZSxVZWUsSGVlPU4oKCk9PnsidXNlIHN0cmljdCI7bzkoKTtjTGU9NTAwO28odUxlLCJtZW1vaXplQ2FwcGVkIik7VWVlPXVMZX0pO3ZhciBoTGUsZkxlLGRMZSxXZWUscWVlPU4oKCk9PnsidXNlIHN0cmljdCI7SGVlKCk7aExlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGZMZT0vXFwoXFwpPy9nLGRMZT1VZWUoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09PTQ2JiZlLnB1c2goIiIpLHQucmVwbGFjZShoTGUsZnVuY3Rpb24ocixuLGksYSl7ZS5wdXNoKGk/YS5yZXBsYWNlKGZMZSwiJDEiKTpufHxyKX0pLGV9KSxXZWU9ZExlfSk7ZnVuY3Rpb24gcExlKHQpe3JldHVybiB0PT1udWxsPyIiOlNlZSh0KX12YXIga3csSEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDZWUoKTtvKHBMZSwidG9TdHJpbmciKTtrdz1wTGV9KTtmdW5jdGlvbiBtTGUodCxlKXtyZXR1cm4gUHQodCk/dDpObSh0LGUpP1t0XTpXZWUoa3codCkpfXZhciBKaCxJMj1OKCgpPT57InVzZSBzdHJpY3QiO1duKCk7d3coKTtxZWUoKTtITCgpO28obUxlLCJjYXN0UGF0aCIpO0poPW1MZX0pO2Z1bmN0aW9uIHlMZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fG9vKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tZ0xlPyItMCI6ZX12YXIgZ0xlLFNjLE1tPU4oKCk9PnsidXNlIHN0cmljdCI7V2QoKTtnTGU9MS8wO28oeUxlLCJ0b0tleSIpO1NjPXlMZX0pO2Z1bmN0aW9uIHZMZSh0LGUpe2U9SmgoZSx0KTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3QhPW51bGwmJnI8bjspdD10W1NjKGVbcisrXSldO3JldHVybiByJiZyPT1uP3Q6dm9pZCAwfXZhciBlZixPMj1OKCgpPT57InVzZSBzdHJpY3QiO0kyKCk7TW0oKTtvKHZMZSwiYmFzZUdldCIpO2VmPXZMZX0pO2Z1bmN0aW9uIHhMZSh0LGUscil7dmFyIG49dD09bnVsbD92b2lkIDA6ZWYodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59dmFyIFllZSxYZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPMigpO28oeExlLCJnZXQiKTtZZWU9eExlfSk7ZnVuY3Rpb24gYkxlKHQsZSl7Zm9yKHZhciByPS0xLG49ZS5sZW5ndGgsaT10Lmxlbmd0aDsrK3I8bjspdFtpK3JdPWVbcl07cmV0dXJuIHR9dmFyIEltLEV3PU4oKCk9PnsidXNlIHN0cmljdCI7byhiTGUsImFycmF5UHVzaCIpO0ltPWJMZX0pO2Z1bmN0aW9uIFRMZSh0KXtyZXR1cm4gUHQodCl8fERsKHQpfHwhIShqZWUmJnQmJnRbamVlXSl9dmFyIGplZSxLZWUsUWVlPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtobSgpO1duKCk7amVlPWVhP2VhLmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDA7byhUTGUsImlzRmxhdHRlbmFibGUiKTtLZWU9VExlfSk7ZnVuY3Rpb24gWmVlKHQsZSxyLG4saSl7dmFyIGE9LTEscz10Lmxlbmd0aDtmb3Iocnx8KHI9S2VlKSxpfHwoaT1bXSk7KythPHM7KXt2YXIgbD10W2FdO2U+MCYmcihsKT9lPjE/WmVlKGwsZS0xLHIsbixpKTpJbShpLGwpOm58fChpW2kubGVuZ3RoXT1sKX1yZXR1cm4gaX12YXIgQ2MsT209TigoKT0+eyJ1c2Ugc3RyaWN0IjtFdygpO1FlZSgpO28oWmVlLCJiYXNlRmxhdHRlbiIpO0NjPVplZX0pO2Z1bmN0aW9uIHdMZSh0KXt2YXIgZT10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuIGU/Q2ModCwxKTpbXX12YXIgcXIsU3c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPbSgpO28od0xlLCJmbGF0dGVuIik7cXI9d0xlfSk7ZnVuY3Rpb24ga0xlKHQpe3JldHVybiB3VChUVCh0LHZvaWQgMCxxciksdCsiIil9dmFyIEplZSxldGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTdygpO2I5KCk7dzkoKTtvKGtMZSwiZmxhdFJlc3QiKTtKZWU9a0xlfSk7ZnVuY3Rpb24gRUxlKHQsZSxyKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2U8MCYmKGU9LWU+aT8wOmkrZSkscj1yPmk/aTpyLHI8MCYmKHIrPWkpLGk9ZT5yPzA6ci1lPj4+MCxlPj4+PTA7Zm9yKHZhciBhPUFycmF5KGkpOysrbjxpOylhW25dPXRbbitlXTtyZXR1cm4gYX12YXIgQ3csV0w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEVMZSwiYmFzZVNsaWNlIik7Q3c9RUxlfSk7ZnVuY3Rpb24gTUxlKHQpe3JldHVybiBOTGUudGVzdCh0KX12YXIgU0xlLENMZSxBTGUsX0xlLERMZSxMTGUsUkxlLE5MZSx0dGUscnRlPU4oKCk9PnsidXNlIHN0cmljdCI7U0xlPSJcXHVkODAwLVxcdWRmZmYiLENMZT0iXFx1MDMwMC1cXHUwMzZmIixBTGU9IlxcdWZlMjAtXFx1ZmUyZiIsX0xlPSJcXHUyMGQwLVxcdTIwZmYiLERMZT1DTGUrQUxlK19MZSxMTGU9IlxcdWZlMGVcXHVmZTBmIixSTGU9IlxcdTIwMGQiLE5MZT1SZWdFeHAoIlsiK1JMZStTTGUrRExlK0xMZSsiXSIpO28oTUxlLCJoYXNVbmljb2RlIik7dHRlPU1MZX0pO2Z1bmN0aW9uIElMZSh0LGUscixuKXt2YXIgaT0tMSxhPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IobiYmYSYmKHI9dFsrK2ldKTsrK2k8YTspcj1lKHIsdFtpXSxpLHQpO3JldHVybiByfXZhciBudGUsaXRlPU4oKCk9PnsidXNlIHN0cmljdCI7byhJTGUsImFycmF5UmVkdWNlIik7bnRlPUlMZX0pO2Z1bmN0aW9uIE9MZSh0LGUpe3JldHVybiB0JiYkbyhlLHpyKGUpLHQpfXZhciBhdGUsc3RlPU4oKCk9PnsidXNlIHN0cmljdCI7RmQoKTtFYygpO28oT0xlLCJiYXNlQXNzaWduIik7YXRlPU9MZX0pO2Z1bmN0aW9uIFBMZSh0LGUpe3JldHVybiB0JiYkbyhlLFJzKGUpLHQpfXZhciBvdGUsbHRlPU4oKCk9PnsidXNlIHN0cmljdCI7RmQoKTtVaCgpO28oUExlLCJiYXNlQXNzaWduSW4iKTtvdGU9UExlfSk7ZnVuY3Rpb24gQkxlKHQsZSl7Zm9yKHZhciByPS0xLG49dD09bnVsbD8wOnQubGVuZ3RoLGk9MCxhPVtdOysrcjxuOyl7dmFyIHM9dFtyXTtlKHMscix0KSYmKGFbaSsrXT1zKX1yZXR1cm4gYX12YXIgUG0sQXc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEJMZSwiYXJyYXlGaWx0ZXIiKTtQbT1CTGV9KTtmdW5jdGlvbiBGTGUoKXtyZXR1cm5bXX12YXIgX3cscUw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEZMZSwic3R1YkFycmF5Iik7X3c9RkxlfSk7dmFyICRMZSx6TGUsY3RlLEdMZSxCbSxEdz1OKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7cUwoKTskTGU9T2JqZWN0LnByb3RvdHlwZSx6TGU9JExlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGN0ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEdMZT1jdGU/ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/W106KHQ9T2JqZWN0KHQpLFBtKGN0ZSh0KSxmdW5jdGlvbihlKXtyZXR1cm4gekxlLmNhbGwodCxlKX0pKX06X3csQm09R0xlfSk7ZnVuY3Rpb24gVkxlKHQsZSl7cmV0dXJuICRvKHQsQm0odCksZSl9dmFyIHV0ZSxodGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGZCgpO0R3KCk7byhWTGUsImNvcHlTeW1ib2xzIik7dXRlPVZMZX0pO3ZhciBVTGUsSExlLEx3LFlMPU4oKCk9PnsidXNlIHN0cmljdCI7RXcoKTtnVCgpO0R3KCk7cUwoKTtVTGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxITGU9VUxlP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylJbShlLEJtKHQpKSx0PWNtKHQpO3JldHVybiBlfTpfdyxMdz1ITGV9KTtmdW5jdGlvbiBXTGUodCxlKXtyZXR1cm4gJG8odCxMdyh0KSxlKX12YXIgZnRlLGR0ZT1OKCgpPT57InVzZSBzdHJpY3QiO0ZkKCk7WUwoKTtvKFdMZSwiY29weVN5bWJvbHNJbiIpO2Z0ZT1XTGV9KTtmdW5jdGlvbiBxTGUodCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIFB0KHQpP246SW0obixyKHQpKX12YXIgUncsWEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFdygpO1duKCk7byhxTGUsImJhc2VHZXRBbGxLZXlzIik7Unc9cUxlfSk7ZnVuY3Rpb24gWUxlKHQpe3JldHVybiBSdyh0LHpyLEJtKX12YXIgUDIsakw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYTCgpO0R3KCk7RWMoKTtvKFlMZSwiZ2V0QWxsS2V5cyIpO1AyPVlMZX0pO2Z1bmN0aW9uIFhMZSh0KXtyZXR1cm4gUncodCxScyxMdyl9dmFyIE53LEtMPU4oKCk9PnsidXNlIHN0cmljdCI7WEwoKTtZTCgpO1VoKCk7byhYTGUsImdldEFsbEtleXNJbiIpO053PVhMZX0pO3ZhciBqTGUsTXcscHRlPU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtNbygpO2pMZT1McyhoaSwiRGF0YVZpZXciKSxNdz1qTGV9KTt2YXIgS0xlLEl3LG10ZT1OKCgpPT57InVzZSBzdHJpY3QiO1BoKCk7TW8oKTtLTGU9THMoaGksIlByb21pc2UiKSxJdz1LTGV9KTt2YXIgUUxlLHRmLFFMPU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtNbygpO1FMZT1McyhoaSwiU2V0IiksdGY9UUxlfSk7dmFyIGd0ZSxaTGUseXRlLHZ0ZSx4dGUsYnRlLEpMZSxlUmUsdFJlLHJSZSxuUmUsWWQsbG8sWGQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwdGUoKTtsVCgpO210ZSgpO1FMKCk7T2VlKCk7QXUoKTtpOSgpO2d0ZT0iW29iamVjdCBNYXBdIixaTGU9IltvYmplY3QgT2JqZWN0XSIseXRlPSJbb2JqZWN0IFByb21pc2VdIix2dGU9IltvYmplY3QgU2V0XSIseHRlPSJbb2JqZWN0IFdlYWtNYXBdIixidGU9IltvYmplY3QgRGF0YVZpZXddIixKTGU9X3UoTXcpLGVSZT1fdSgkaCksdFJlPV91KEl3KSxyUmU9X3UodGYpLG5SZT1fdShndyksWWQ9ZmE7KE13JiZZZChuZXcgTXcobmV3IEFycmF5QnVmZmVyKDEpKSkhPWJ0ZXx8JGgmJllkKG5ldyAkaCkhPWd0ZXx8SXcmJllkKEl3LnJlc29sdmUoKSkhPXl0ZXx8dGYmJllkKG5ldyB0ZikhPXZ0ZXx8Z3cmJllkKG5ldyBndykhPXh0ZSkmJihZZD1vKGZ1bmN0aW9uKHQpe3ZhciBlPWZhKHQpLHI9ZT09WkxlP3QuY29uc3RydWN0b3I6dm9pZCAwLG49cj9fdShyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEpMZTpyZXR1cm4gYnRlO2Nhc2UgZVJlOnJldHVybiBndGU7Y2FzZSB0UmU6cmV0dXJuIHl0ZTtjYXNlIHJSZTpyZXR1cm4gdnRlO2Nhc2UgblJlOnJldHVybiB4dGV9cmV0dXJuIGV9LCJnZXRUYWciKSk7bG89WWR9KTtmdW5jdGlvbiBzUmUodCl7dmFyIGU9dC5sZW5ndGgscj1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmdHlwZW9mIHRbMF09PSJzdHJpbmciJiZhUmUuY2FsbCh0LCJpbmRleCIpJiYoci5pbmRleD10LmluZGV4LHIuaW5wdXQ9dC5pbnB1dCkscn12YXIgaVJlLGFSZSxUdGUsd3RlPU4oKCk9PnsidXNlIHN0cmljdCI7aVJlPU9iamVjdC5wcm90b3R5cGUsYVJlPWlSZS5oYXNPd25Qcm9wZXJ0eTtvKHNSZSwiaW5pdENsb25lQXJyYXkiKTtUdGU9c1JlfSk7ZnVuY3Rpb24gb1JlKHQsZSl7dmFyIHI9ZT9sbSh0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKHIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9dmFyIGt0ZSxFdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmVCgpO28ob1JlLCJjbG9uZURhdGFWaWV3Iik7a3RlPW9SZX0pO2Z1bmN0aW9uIGNSZSh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxsUmUuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9dmFyIGxSZSxTdGUsQ3RlPU4oKCk9PnsidXNlIHN0cmljdCI7bFJlPS9cdyokLztvKGNSZSwiY2xvbmVSZWdFeHAiKTtTdGU9Y1JlfSk7ZnVuY3Rpb24gdVJlKHQpe3JldHVybiBfdGU/T2JqZWN0KF90ZS5jYWxsKHQpKTp7fX12YXIgQXRlLF90ZSxEdGUsTHRlPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtBdGU9ZWE/ZWEucHJvdG90eXBlOnZvaWQgMCxfdGU9QXRlP0F0ZS52YWx1ZU9mOnZvaWQgMDtvKHVSZSwiY2xvbmVTeW1ib2wiKTtEdGU9dVJlfSk7ZnVuY3Rpb24gTFJlKHQsZSxyKXt2YXIgbj10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIHhSZTpyZXR1cm4gbG0odCk7Y2FzZSBoUmU6Y2FzZSBmUmU6cmV0dXJuIG5ldyBuKCt0KTtjYXNlIGJSZTpyZXR1cm4ga3RlKHQscik7Y2FzZSBUUmU6Y2FzZSB3UmU6Y2FzZSBrUmU6Y2FzZSBFUmU6Y2FzZSBTUmU6Y2FzZSBDUmU6Y2FzZSBBUmU6Y2FzZSBfUmU6Y2FzZSBEUmU6cmV0dXJuIGRUKHQscik7Y2FzZSBkUmU6cmV0dXJuIG5ldyBuO2Nhc2UgcFJlOmNhc2UgeVJlOnJldHVybiBuZXcgbih0KTtjYXNlIG1SZTpyZXR1cm4gU3RlKHQpO2Nhc2UgZ1JlOnJldHVybiBuZXcgbjtjYXNlIHZSZTpyZXR1cm4gRHRlKHQpfX12YXIgaFJlLGZSZSxkUmUscFJlLG1SZSxnUmUseVJlLHZSZSx4UmUsYlJlLFRSZSx3UmUsa1JlLEVSZSxTUmUsQ1JlLEFSZSxfUmUsRFJlLFJ0ZSxOdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmVCgpO0V0ZSgpO0N0ZSgpO0x0ZSgpO2Y5KCk7aFJlPSJbb2JqZWN0IEJvb2xlYW5dIixmUmU9IltvYmplY3QgRGF0ZV0iLGRSZT0iW29iamVjdCBNYXBdIixwUmU9IltvYmplY3QgTnVtYmVyXSIsbVJlPSJbb2JqZWN0IFJlZ0V4cF0iLGdSZT0iW29iamVjdCBTZXRdIix5UmU9IltvYmplY3QgU3RyaW5nXSIsdlJlPSJbb2JqZWN0IFN5bWJvbF0iLHhSZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGJSZT0iW29iamVjdCBEYXRhVmlld10iLFRSZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIix3UmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsa1JlPSJbb2JqZWN0IEludDhBcnJheV0iLEVSZT0iW29iamVjdCBJbnQxNkFycmF5XSIsU1JlPSJbb2JqZWN0IEludDMyQXJyYXldIixDUmU9IltvYmplY3QgVWludDhBcnJheV0iLEFSZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLF9SZT0iW29iamVjdCBVaW50MTZBcnJheV0iLERSZT0iW29iamVjdCBVaW50MzJBcnJheV0iO28oTFJlLCJpbml0Q2xvbmVCeVRhZyIpO1J0ZT1MUmV9KTtmdW5jdGlvbiBOUmUodCl7cmV0dXJuIGlpKHQpJiZsbyh0KT09UlJlfXZhciBSUmUsTXRlLEl0ZT1OKCgpPT57InVzZSBzdHJpY3QiO1hkKCk7T28oKTtSUmU9IltvYmplY3QgTWFwXSI7byhOUmUsImJhc2VJc01hcCIpO010ZT1OUmV9KTt2YXIgT3RlLE1SZSxQdGUsQnRlPU4oKCk9PnsidXNlIHN0cmljdCI7SXRlKCk7QmQoKTtoMigpO090ZT1GbyYmRm8uaXNNYXAsTVJlPU90ZT9CbyhPdGUpOk10ZSxQdGU9TVJlfSk7ZnVuY3Rpb24gT1JlKHQpe3JldHVybiBpaSh0KSYmbG8odCk9PUlSZX12YXIgSVJlLEZ0ZSwkdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYZCgpO09vKCk7SVJlPSJbb2JqZWN0IFNldF0iO28oT1JlLCJiYXNlSXNTZXQiKTtGdGU9T1JlfSk7dmFyIHp0ZSxQUmUsR3RlLFZ0ZT1OKCgpPT57InVzZSBzdHJpY3QiOyR0ZSgpO0JkKCk7aDIoKTt6dGU9Rm8mJkZvLmlzU2V0LFBSZT16dGU/Qm8oenRlKTpGdGUsR3RlPVBSZX0pO2Z1bmN0aW9uIE93KHQsZSxyLG4saSxhKXt2YXIgcyxsPWUmQlJlLHU9ZSZGUmUsaD1lJiRSZTtpZihyJiYocz1pP3IodCxuLGksYSk6cih0KSkscyE9PXZvaWQgMClyZXR1cm4gcztpZighYm4odCkpcmV0dXJuIHQ7dmFyIGY9UHQodCk7aWYoZil7aWYocz1UdGUodCksIWwpcmV0dXJuIHBUKHQscyl9ZWxzZXt2YXIgZD1sbyh0KSxwPWQ9PUh0ZXx8ZD09SFJlO2lmKExsKHQpKXJldHVybiBoVCh0LGwpO2lmKGQ9PVd0ZXx8ZD09VXRlfHxwJiYhaSl7aWYocz11fHxwP3t9OnlUKHQpLCFsKXJldHVybiB1P2Z0ZSh0LG90ZShzLHQpKTp1dGUodCxhdGUocyx0KSl9ZWxzZXtpZighX25bZF0pcmV0dXJuIGk/dDp7fTtzPVJ0ZSh0LGQsbCl9fWF8fChhPW5ldyBkYyk7dmFyIG09YS5nZXQodCk7aWYobSlyZXR1cm4gbTthLnNldCh0LHMpLEd0ZSh0KT90LmZvckVhY2goZnVuY3Rpb24odil7cy5hZGQoT3codixlLHIsdix0LGEpKX0pOlB0ZSh0KSYmdC5mb3JFYWNoKGZ1bmN0aW9uKHYseCl7cy5zZXQoeCxPdyh2LGUscix4LHQsYSkpfSk7dmFyIGc9aD91P053OlAyOnU/UnM6enIseT1mP3ZvaWQgMDpnKHQpO3JldHVybiB5dyh5fHx0LGZ1bmN0aW9uKHYseCl7eSYmKHg9dix2PXRbeF0pLGdjKHMseCxPdyh2LGUscix4LHQsYSkpfSksc312YXIgQlJlLEZSZSwkUmUsVXRlLHpSZSxHUmUsVlJlLFVSZSxIdGUsSFJlLFdSZSxxUmUsV3RlLFlSZSxYUmUsalJlLEtSZSxRUmUsWlJlLEpSZSxlTmUsdE5lLHJOZSxuTmUsaU5lLGFOZSxzTmUsb05lLGxOZSxfbixQdyxaTD1OKCgpPT57InVzZSBzdHJpY3QiO2wyKCk7R0woKTtwbSgpO3N0ZSgpO2x0ZSgpO3U5KCk7ZDkoKTtodGUoKTtkdGUoKTtqTCgpO0tMKCk7WGQoKTt3dGUoKTtOdGUoKTttOSgpO1duKCk7ZG0oKTtCdGUoKTtubygpO1Z0ZSgpO0VjKCk7VWgoKTtCUmU9MSxGUmU9MiwkUmU9NCxVdGU9IltvYmplY3QgQXJndW1lbnRzXSIselJlPSJbb2JqZWN0IEFycmF5XSIsR1JlPSJbb2JqZWN0IEJvb2xlYW5dIixWUmU9IltvYmplY3QgRGF0ZV0iLFVSZT0iW29iamVjdCBFcnJvcl0iLEh0ZT0iW29iamVjdCBGdW5jdGlvbl0iLEhSZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFdSZT0iW29iamVjdCBNYXBdIixxUmU9IltvYmplY3QgTnVtYmVyXSIsV3RlPSJbb2JqZWN0IE9iamVjdF0iLFlSZT0iW29iamVjdCBSZWdFeHBdIixYUmU9IltvYmplY3QgU2V0XSIsalJlPSJbb2JqZWN0IFN0cmluZ10iLEtSZT0iW29iamVjdCBTeW1ib2xdIixRUmU9IltvYmplY3QgV2Vha01hcF0iLFpSZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEpSZT0iW29iamVjdCBEYXRhVmlld10iLGVOZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIix0TmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsck5lPSJbb2JqZWN0IEludDhBcnJheV0iLG5OZT0iW29iamVjdCBJbnQxNkFycmF5XSIsaU5lPSJbb2JqZWN0IEludDMyQXJyYXldIixhTmU9IltvYmplY3QgVWludDhBcnJheV0iLHNOZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLG9OZT0iW29iamVjdCBVaW50MTZBcnJheV0iLGxOZT0iW29iamVjdCBVaW50MzJBcnJheV0iLF9uPXt9O19uW1V0ZV09X25belJlXT1fbltaUmVdPV9uW0pSZV09X25bR1JlXT1fbltWUmVdPV9uW2VOZV09X25bdE5lXT1fbltyTmVdPV9uW25OZV09X25baU5lXT1fbltXUmVdPV9uW3FSZV09X25bV3RlXT1fbltZUmVdPV9uW1hSZV09X25balJlXT1fbltLUmVdPV9uW2FOZV09X25bc05lXT1fbltvTmVdPV9uW2xOZV09ITA7X25bVVJlXT1fbltIdGVdPV9uW1FSZV09ITE7byhPdywiYmFzZUNsb25lIik7UHc9T3d9KTtmdW5jdGlvbiB1TmUodCl7cmV0dXJuIFB3KHQsY05lKX12YXIgY05lLGFuLEpMPU4oKCk9PnsidXNlIHN0cmljdCI7WkwoKTtjTmU9NDtvKHVOZSwiY2xvbmUiKTthbj11TmV9KTtmdW5jdGlvbiBkTmUodCl7cmV0dXJuIFB3KHQsaE5lfGZOZSl9dmFyIGhOZSxmTmUsZVIscXRlPU4oKCk9PnsidXNlIHN0cmljdCI7WkwoKTtoTmU9MSxmTmU9NDtvKGROZSwiY2xvbmVEZWVwIik7ZVI9ZE5lfSk7ZnVuY3Rpb24gcE5lKHQpe2Zvcih2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aCxuPTAsaT1bXTsrK2U8cjspe3ZhciBhPXRbZV07YSYmKGlbbisrXT1hKX1yZXR1cm4gaX12YXIgQWMsWXRlPU4oKCk9PnsidXNlIHN0cmljdCI7byhwTmUsImNvbXBhY3QiKTtBYz1wTmV9KTtmdW5jdGlvbiBnTmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsbU5lKSx0aGlzfXZhciBtTmUsWHRlLGp0ZT1OKCgpPT57InVzZSBzdHJpY3QiO21OZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhnTmUsInNldENhY2hlQWRkIik7WHRlPWdOZX0pO2Z1bmN0aW9uIHlOZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIEt0ZSxRdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHlOZSwic2V0Q2FjaGVIYXMiKTtLdGU9eU5lfSk7ZnVuY3Rpb24gQncodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IE9kOysrZTxyOyl0aGlzLmFkZCh0W2VdKX12YXIgRm0sRnc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjVCgpO2p0ZSgpO1F0ZSgpO28oQncsIlNldENhY2hlIik7QncucHJvdG90eXBlLmFkZD1Cdy5wcm90b3R5cGUucHVzaD1YdGU7QncucHJvdG90eXBlLmhhcz1LdGU7Rm09Qnd9KTtmdW5jdGlvbiB2TmUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZhciAkdyx0Uj1OKCgpPT57InVzZSBzdHJpY3QiO28odk5lLCJhcnJheVNvbWUiKTskdz12TmV9KTtmdW5jdGlvbiB4TmUodCxlKXtyZXR1cm4gdC5oYXMoZSl9dmFyICRtLHp3PU4oKCk9PnsidXNlIHN0cmljdCI7byh4TmUsImNhY2hlSGFzIik7JG09eE5lfSk7ZnVuY3Rpb24gd05lKHQsZSxyLG4saSxhKXt2YXIgcz1yJmJOZSxsPXQubGVuZ3RoLHU9ZS5sZW5ndGg7aWYobCE9dSYmIShzJiZ1PmwpKXJldHVybiExO3ZhciBoPWEuZ2V0KHQpLGY9YS5nZXQoZSk7aWYoaCYmZilyZXR1cm4gaD09ZSYmZj09dDt2YXIgZD0tMSxwPSEwLG09ciZUTmU/bmV3IEZtOnZvaWQgMDtmb3IoYS5zZXQodCxlKSxhLnNldChlLHQpOysrZDxsOyl7dmFyIGc9dFtkXSx5PWVbZF07aWYobil2YXIgdj1zP24oeSxnLGQsZSx0LGEpOm4oZyx5LGQsdCxlLGEpO2lmKHYhPT12b2lkIDApe2lmKHYpY29udGludWU7cD0hMTticmVha31pZihtKXtpZighJHcoZSxmdW5jdGlvbih4LGIpe2lmKCEkbShtLGIpJiYoZz09PXh8fGkoZyx4LHIsbixhKSkpcmV0dXJuIG0ucHVzaChiKX0pKXtwPSExO2JyZWFrfX1lbHNlIGlmKCEoZz09PXl8fGkoZyx5LHIsbixhKSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZSh0KSxhLmRlbGV0ZShlKSxwfXZhciBiTmUsVE5lLEd3LHJSPU4oKCk9PnsidXNlIHN0cmljdCI7RncoKTt0UigpO3p3KCk7Yk5lPTEsVE5lPTI7byh3TmUsImVxdWFsQXJyYXlzIik7R3c9d05lfSk7ZnVuY3Rpb24ga05lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7clsrK2VdPVtpLG5dfSkscn12YXIgWnRlLEp0ZT1OKCgpPT57InVzZSBzdHJpY3QiO28oa05lLCJtYXBUb0FycmF5Iik7WnRlPWtOZX0pO2Z1bmN0aW9uIEVOZSh0KXt2YXIgZT0tMSxyPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrZV09bn0pLHJ9dmFyIHptLFZ3PU4oKCk9PnsidXNlIHN0cmljdCI7byhFTmUsInNldFRvQXJyYXkiKTt6bT1FTmV9KTtmdW5jdGlvbiBGTmUodCxlLHIsbixpLGEscyl7c3dpdGNoKHIpe2Nhc2UgQk5lOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSBQTmU6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IWEobmV3IG9tKHQpLG5ldyBvbShlKSkpO2Nhc2UgQU5lOmNhc2UgX05lOmNhc2UgUk5lOnJldHVybiBJbygrdCwrZSk7Y2FzZSBETmU6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIE5OZTpjYXNlIElOZTpyZXR1cm4gdD09ZSsiIjtjYXNlIExOZTp2YXIgbD1adGU7Y2FzZSBNTmU6dmFyIHU9biZTTmU7aWYobHx8KGw9em0pLHQuc2l6ZSE9ZS5zaXplJiYhdSlyZXR1cm4hMTt2YXIgaD1zLmdldCh0KTtpZihoKXJldHVybiBoPT1lO258PUNOZSxzLnNldCh0LGUpO3ZhciBmPUd3KGwodCksbChlKSxuLGksYSxzKTtyZXR1cm4gcy5kZWxldGUodCksZjtjYXNlIE9OZTppZihuUilyZXR1cm4gblIuY2FsbCh0KT09blIuY2FsbChlKX1yZXR1cm4hMX12YXIgU05lLENOZSxBTmUsX05lLEROZSxMTmUsUk5lLE5OZSxNTmUsSU5lLE9OZSxQTmUsQk5lLGVyZSxuUix0cmUscnJlPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtoOSgpO0lkKCk7clIoKTtKdGUoKTtWdygpO1NOZT0xLENOZT0yLEFOZT0iW29iamVjdCBCb29sZWFuXSIsX05lPSJbb2JqZWN0IERhdGVdIixETmU9IltvYmplY3QgRXJyb3JdIixMTmU9IltvYmplY3QgTWFwXSIsUk5lPSJbb2JqZWN0IE51bWJlcl0iLE5OZT0iW29iamVjdCBSZWdFeHBdIixNTmU9IltvYmplY3QgU2V0XSIsSU5lPSJbb2JqZWN0IFN0cmluZ10iLE9OZT0iW29iamVjdCBTeW1ib2xdIixQTmU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixCTmU9IltvYmplY3QgRGF0YVZpZXddIixlcmU9ZWE/ZWEucHJvdG90eXBlOnZvaWQgMCxuUj1lcmU/ZXJlLnZhbHVlT2Y6dm9pZCAwO28oRk5lLCJlcXVhbEJ5VGFnIik7dHJlPUZOZX0pO2Z1bmN0aW9uIFZOZSh0LGUscixuLGksYSl7dmFyIHM9ciYkTmUsbD1QMih0KSx1PWwubGVuZ3RoLGg9UDIoZSksZj1oLmxlbmd0aDtpZih1IT1mJiYhcylyZXR1cm4hMTtmb3IodmFyIGQ9dTtkLS07KXt2YXIgcD1sW2RdO2lmKCEocz9wIGluIGU6R05lLmNhbGwoZSxwKSkpcmV0dXJuITF9dmFyIG09YS5nZXQodCksZz1hLmdldChlKTtpZihtJiZnKXJldHVybiBtPT1lJiZnPT10O3ZhciB5PSEwO2Euc2V0KHQsZSksYS5zZXQoZSx0KTtmb3IodmFyIHY9czsrK2Q8dTspe3A9bFtkXTt2YXIgeD10W3BdLGI9ZVtwXTtpZihuKXZhciBUPXM/bihiLHgscCxlLHQsYSk6bih4LGIscCx0LGUsYSk7aWYoIShUPT09dm9pZCAwP3g9PT1ifHxpKHgsYixyLG4sYSk6VCkpe3k9ITE7YnJlYWt9dnx8KHY9cD09ImNvbnN0cnVjdG9yIil9aWYoeSYmIXYpe3ZhciBTPXQuY29uc3RydWN0b3Isdz1lLmNvbnN0cnVjdG9yO1MhPXcmJiJjb25zdHJ1Y3RvciJpbiB0JiYiY29uc3RydWN0b3IiaW4gZSYmISh0eXBlb2YgUz09ImZ1bmN0aW9uIiYmUyBpbnN0YW5jZW9mIFMmJnR5cGVvZiB3PT0iZnVuY3Rpb24iJiZ3IGluc3RhbmNlb2YgdykmJih5PSExKX1yZXR1cm4gYS5kZWxldGUodCksYS5kZWxldGUoZSkseX12YXIgJE5lLHpOZSxHTmUsbnJlLGlyZT1OKCgpPT57InVzZSBzdHJpY3QiO2pMKCk7JE5lPTEsek5lPU9iamVjdC5wcm90b3R5cGUsR05lPXpOZS5oYXNPd25Qcm9wZXJ0eTtvKFZOZSwiZXF1YWxPYmplY3RzIik7bnJlPVZOZX0pO2Z1bmN0aW9uIFdOZSh0LGUscixuLGksYSl7dmFyIHM9UHQodCksbD1QdChlKSx1PXM/c3JlOmxvKHQpLGg9bD9zcmU6bG8oZSk7dT11PT1hcmU/VXc6dSxoPWg9PWFyZT9VdzpoO3ZhciBmPXU9PVV3LGQ9aD09VXcscD11PT1oO2lmKHAmJkxsKHQpKXtpZighTGwoZSkpcmV0dXJuITE7cz0hMCxmPSExfWlmKHAmJiFmKXJldHVybiBhfHwoYT1uZXcgZGMpLHN8fEdoKHQpP0d3KHQsZSxyLG4saSxhKTp0cmUodCxlLHUscixuLGksYSk7aWYoIShyJlVOZSkpe3ZhciBtPWYmJm9yZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksZz1kJiZvcmUuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKG18fGcpe3ZhciB5PW0/dC52YWx1ZSgpOnQsdj1nP2UudmFsdWUoKTplO3JldHVybiBhfHwoYT1uZXcgZGMpLGkoeSx2LHIsbixhKX19cmV0dXJuIHA/KGF8fChhPW5ldyBkYyksbnJlKHQsZSxyLG4saSxhKSk6ITF9dmFyIFVOZSxhcmUsc3JlLFV3LEhOZSxvcmUsbHJlLGNyZT1OKCgpPT57InVzZSBzdHJpY3QiO2wyKCk7clIoKTtycmUoKTtpcmUoKTtYZCgpO1duKCk7ZG0oKTtmMigpO1VOZT0xLGFyZT0iW29iamVjdCBBcmd1bWVudHNdIixzcmU9IltvYmplY3QgQXJyYXldIixVdz0iW29iamVjdCBPYmplY3RdIixITmU9T2JqZWN0LnByb3RvdHlwZSxvcmU9SE5lLmhhc093blByb3BlcnR5O28oV05lLCJiYXNlSXNFcXVhbERlZXAiKTtscmU9V05lfSk7ZnVuY3Rpb24gdXJlKHQsZSxyLG4saSl7cmV0dXJuIHQ9PT1lPyEwOnQ9PW51bGx8fGU9PW51bGx8fCFpaSh0KSYmIWlpKGUpP3QhPT10JiZlIT09ZTpscmUodCxlLHIsbix1cmUsaSl9dmFyIEh3LGlSPU4oKCk9PnsidXNlIHN0cmljdCI7Y3JlKCk7T28oKTtvKHVyZSwiYmFzZUlzRXF1YWwiKTtIdz11cmV9KTtmdW5jdGlvbiBYTmUodCxlLHIsbil7dmFyIGk9ci5sZW5ndGgsYT1pLHM9IW47aWYodD09bnVsbClyZXR1cm4hYTtmb3IodD1PYmplY3QodCk7aS0tOyl7dmFyIGw9cltpXTtpZihzJiZsWzJdP2xbMV0hPT10W2xbMF1dOiEobFswXWluIHQpKXJldHVybiExfWZvcig7KytpPGE7KXtsPXJbaV07dmFyIHU9bFswXSxoPXRbdV0sZj1sWzFdO2lmKHMmJmxbMl0pe2lmKGg9PT12b2lkIDAmJiEodSBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyBkYztpZihuKXZhciBwPW4oaCxmLHUsdCxlLGQpO2lmKCEocD09PXZvaWQgMD9IdyhmLGgscU5lfFlOZSxuLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH12YXIgcU5lLFlOZSxocmUsZnJlPU4oKCk9PnsidXNlIHN0cmljdCI7bDIoKTtpUigpO3FOZT0xLFlOZT0yO28oWE5lLCJiYXNlSXNNYXRjaCIpO2hyZT1YTmV9KTtmdW5jdGlvbiBqTmUodCl7cmV0dXJuIHQ9PT10JiYhYm4odCl9dmFyIFd3LGFSPU4oKCk9PnsidXNlIHN0cmljdCI7bm8oKTtvKGpOZSwiaXNTdHJpY3RDb21wYXJhYmxlIik7V3c9ak5lfSk7ZnVuY3Rpb24gS05lKHQpe2Zvcih2YXIgZT16cih0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0saT10W25dO2Vbcl09W24saSxXdyhpKV19cmV0dXJuIGV9dmFyIGRyZSxwcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjthUigpO0VjKCk7byhLTmUsImdldE1hdGNoRGF0YSIpO2RyZT1LTmV9KTtmdW5jdGlvbiBRTmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6clt0XT09PWUmJihlIT09dm9pZCAwfHx0IGluIE9iamVjdChyKSl9fXZhciBxdyxzUj1OKCgpPT57InVzZSBzdHJpY3QiO28oUU5lLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIpO3F3PVFOZX0pO2Z1bmN0aW9uIFpOZSh0KXt2YXIgZT1kcmUodCk7cmV0dXJuIGUubGVuZ3RoPT0xJiZlWzBdWzJdP3F3KGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT10fHxocmUocix0LGUpfX12YXIgbXJlLGdyZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyZSgpO3ByZSgpO3NSKCk7byhaTmUsImJhc2VNYXRjaGVzIik7bXJlPVpOZX0pO2Z1bmN0aW9uIEpOZSh0LGUpe3JldHVybiB0IT1udWxsJiZlIGluIE9iamVjdCh0KX12YXIgeXJlLHZyZT1OKCgpPT57InVzZSBzdHJpY3QiO28oSk5lLCJiYXNlSGFzSW4iKTt5cmU9Sk5lfSk7ZnVuY3Rpb24gZU1lKHQsZSxyKXtlPUpoKGUsdCk7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT0hMTsrK248aTspe3ZhciBzPVNjKGVbbl0pO2lmKCEoYT10IT1udWxsJiZyKHQscykpKWJyZWFrO3Q9dFtzXX1yZXR1cm4gYXx8KytuIT1pP2E6KGk9dD09bnVsbD8wOnQubGVuZ3RoLCEhaSYmZm0oaSkmJlZoKHMsaSkmJihQdCh0KXx8RGwodCkpKX12YXIgWXcsb1I9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMigpO2htKCk7V24oKTtwMigpO3ZUKCk7TW0oKTtvKGVNZSwiaGFzUGF0aCIpO1l3PWVNZX0pO2Z1bmN0aW9uIHRNZSh0LGUpe3JldHVybiB0IT1udWxsJiZZdyh0LGUseXJlKX12YXIgWHcsbFI9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2cmUoKTtvUigpO28odE1lLCJoYXNJbiIpO1h3PXRNZX0pO2Z1bmN0aW9uIGlNZSh0LGUpe3JldHVybiBObSh0KSYmV3coZSk/cXcoU2ModCksZSk6ZnVuY3Rpb24ocil7dmFyIG49WWVlKHIsdCk7cmV0dXJuIG49PT12b2lkIDAmJm49PT1lP1h3KHIsdCk6SHcoZSxuLHJNZXxuTWUpfX12YXIgck1lLG5NZSx4cmUsYnJlPU4oKCk9PnsidXNlIHN0cmljdCI7aVIoKTtYZWUoKTtsUigpO3d3KCk7YVIoKTtzUigpO01tKCk7ck1lPTEsbk1lPTI7byhpTWUsImJhc2VNYXRjaGVzUHJvcGVydHkiKTt4cmU9aU1lfSk7ZnVuY3Rpb24gYU1lKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZT8uW3RdfX12YXIgancsY1I9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGFNZSwiYmFzZVByb3BlcnR5Iik7anc9YU1lfSk7ZnVuY3Rpb24gc01lKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZWYoZSx0KX19dmFyIFRyZSx3cmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPMigpO28oc01lLCJiYXNlUHJvcGVydHlEZWVwIik7VHJlPXNNZX0pO2Z1bmN0aW9uIG9NZSh0KXtyZXR1cm4gTm0odCk/ancoU2ModCkpOlRyZSh0KX12YXIga3JlLEVyZT1OKCgpPT57InVzZSBzdHJpY3QiO2NSKCk7d3JlKCk7d3coKTtNbSgpO28ob01lLCJwcm9wZXJ0eSIpO2tyZT1vTWV9KTtmdW5jdGlvbiBsTWUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dD09bnVsbD90YTp0eXBlb2YgdD09Im9iamVjdCI/UHQodCk/eHJlKHRbMF0sdFsxXSk6bXJlKHQpOmtyZSh0KX12YXIgbW4sb3M9TigoKT0+eyJ1c2Ugc3RyaWN0IjtncmUoKTticmUoKTtMdSgpO1duKCk7RXJlKCk7byhsTWUsImJhc2VJdGVyYXRlZSIpO21uPWxNZX0pO2Z1bmN0aW9uIGNNZSh0LGUscixuKXtmb3IodmFyIGk9LTEsYT10PT1udWxsPzA6dC5sZW5ndGg7KytpPGE7KXt2YXIgcz10W2ldO2UobixzLHIocyksdCl9cmV0dXJuIG59dmFyIFNyZSxDcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGNNZSwiYXJyYXlBZ2dyZWdhdG9yIik7U3JlPWNNZX0pO2Z1bmN0aW9uIHVNZSh0LGUpe3JldHVybiB0JiZzbSh0LGUsenIpfXZhciBHbSxLdz1OKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7RWMoKTtvKHVNZSwiYmFzZUZvck93biIpO0dtPXVNZX0pO2Z1bmN0aW9uIGhNZSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIWZpKHIpKXJldHVybiB0KHIsbik7Zm9yKHZhciBpPXIubGVuZ3RoLGE9ZT9pOi0xLHM9T2JqZWN0KHIpOyhlP2EtLTorK2E8aSkmJm4oc1thXSxhLHMpIT09ITE7KTtyZXR1cm4gcn19dmFyIEFyZSxfcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQbygpO28oaE1lLCJjcmVhdGVCYXNlRWFjaCIpO0FyZT1oTWV9KTt2YXIgZk1lLEZzLHJmPU4oKCk9PnsidXNlIHN0cmljdCI7S3coKTtfcmUoKTtmTWU9QXJlKEdtKSxGcz1mTWV9KTtmdW5jdGlvbiBkTWUodCxlLHIsbil7cmV0dXJuIEZzKHQsZnVuY3Rpb24oaSxhLHMpe2UobixpLHIoaSkscyl9KSxufXZhciBEcmUsTHJlPU4oKCk9PnsidXNlIHN0cmljdCI7cmYoKTtvKGRNZSwiYmFzZUFnZ3JlZ2F0b3IiKTtEcmU9ZE1lfSk7ZnVuY3Rpb24gcE1lKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9UHQocik/U3JlOkRyZSxhPWU/ZSgpOnt9O3JldHVybiBpKHIsdCxtbihuLDIpLGEpfX12YXIgUnJlLE5yZT1OKCgpPT57InVzZSBzdHJpY3QiO0NyZSgpO0xyZSgpO29zKCk7V24oKTtvKHBNZSwiY3JlYXRlQWdncmVnYXRvciIpO1JyZT1wTWV9KTt2YXIgbU1lLFF3LE1yZT1OKCgpPT57InVzZSBzdHJpY3QiO01vKCk7bU1lPW8oZnVuY3Rpb24oKXtyZXR1cm4gaGkuRGF0ZS5ub3coKX0sIm5vdyIpLFF3PW1NZX0pO3ZhciBJcmUsZ01lLHlNZSxuZixPcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttbSgpO0lkKCk7JGQoKTtVaCgpO0lyZT1PYmplY3QucHJvdG90eXBlLGdNZT1JcmUuaGFzT3duUHJvcGVydHkseU1lPXljKGZ1bmN0aW9uKHQsZSl7dD1PYmplY3QodCk7dmFyIHI9LTEsbj1lLmxlbmd0aCxpPW4+Mj9lWzJdOnZvaWQgMDtmb3IoaSYmaW8oZVswXSxlWzFdLGkpJiYobj0xKTsrK3I8bjspZm9yKHZhciBhPWVbcl0scz1ScyhhKSxsPS0xLHU9cy5sZW5ndGg7KytsPHU7KXt2YXIgaD1zW2xdLGY9dFtoXTsoZj09PXZvaWQgMHx8SW8oZixJcmVbaF0pJiYhZ01lLmNhbGwodCxoKSkmJih0W2hdPWFbaF0pfXJldHVybiB0fSksbmY9eU1lfSk7ZnVuY3Rpb24gdk1lKHQsZSxyKXtmb3IodmFyIG49LTEsaT10PT1udWxsPzA6dC5sZW5ndGg7KytuPGk7KWlmKHIoZSx0W25dKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgWncsdVI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHZNZSwiYXJyYXlJbmNsdWRlc1dpdGgiKTtadz12TWV9KTtmdW5jdGlvbiBiTWUodCxlLHIsbil7dmFyIGk9LTEsYT1idyxzPSEwLGw9dC5sZW5ndGgsdT1bXSxoPWUubGVuZ3RoO2lmKCFsKXJldHVybiB1O3ImJihlPUJzKGUsQm8ocikpKSxuPyhhPVp3LHM9ITEpOmUubGVuZ3RoPj14TWUmJihhPSRtLHM9ITEsZT1uZXcgRm0oZSkpO2U6Zm9yKDsrK2k8bDspe3ZhciBmPXRbaV0sZD1yPT1udWxsP2Y6cihmKTtpZihmPW58fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPWg7cC0tOylpZihlW3BdPT09ZCljb250aW51ZSBlO3UucHVzaChmKX1lbHNlIGEoZSxkLG4pfHx1LnB1c2goZil9cmV0dXJuIHV9dmFyIHhNZSxQcmUsQnJlPU4oKCk9PnsidXNlIHN0cmljdCI7RncoKTtVTCgpO3VSKCk7cWQoKTtCZCgpO3p3KCk7eE1lPTIwMDtvKGJNZSwiYmFzZURpZmZlcmVuY2UiKTtQcmU9Yk1lfSk7dmFyIFRNZSxhZixGcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCcmUoKTtPbSgpO21tKCk7eFQoKTtUTWU9eWMoZnVuY3Rpb24odCxlKXtyZXR1cm4gUGQodCk/UHJlKHQsQ2MoZSwxLFBkLCEwKSk6W119KSxhZj1UTWV9KTtmdW5jdGlvbiB3TWUodCl7dmFyIGU9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9dmFyIG1hLCRyZT1OKCgpPT57InVzZSBzdHJpY3QiO28od01lLCJsYXN0Iik7bWE9d01lfSk7ZnVuY3Rpb24ga01lKHQsZSxyKXt2YXIgbj10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuIG4/KGU9cnx8ZT09PXZvaWQgMD8xOmtjKGUpLEN3KHQsZTwwPzA6ZSxuKSk6W119dmFyIGJpLHpyZT1OKCgpPT57InVzZSBzdHJpY3QiO1dMKCk7RG0oKTtvKGtNZSwiZHJvcCIpO2JpPWtNZX0pO2Z1bmN0aW9uIEVNZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBuPyhlPXJ8fGU9PT12b2lkIDA/MTprYyhlKSxlPW4tZSxDdyh0LDAsZTwwPzA6ZSkpOltdfXZhciBGdSxHcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXTCgpO0RtKCk7byhFTWUsImRyb3BSaWdodCIpO0Z1PUVNZX0pO2Z1bmN0aW9uIFNNZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0YX12YXIgVm0sSnc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO28oU01lLCJjYXN0RnVuY3Rpb24iKTtWbT1TTWV9KTtmdW5jdGlvbiBDTWUodCxlKXt2YXIgcj1QdCh0KT95dzpGcztyZXR1cm4gcih0LFZtKGUpKX12YXIgQWUsZWs9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHTCgpO3JmKCk7SncoKTtXbigpO28oQ01lLCJmb3JFYWNoIik7QWU9Q01lfSk7dmFyIFZyZT1OKCgpPT57InVzZSBzdHJpY3QiO2VrKCl9KTtmdW5jdGlvbiBBTWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKCFlKHRbcl0scix0KSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgVXJlLEhyZT1OKCgpPT57InVzZSBzdHJpY3QiO28oQU1lLCJhcnJheUV2ZXJ5Iik7VXJlPUFNZX0pO2Z1bmN0aW9uIF9NZSh0LGUpe3ZhciByPSEwO3JldHVybiBGcyh0LGZ1bmN0aW9uKG4saSxhKXtyZXR1cm4gcj0hIWUobixpLGEpLHJ9KSxyfXZhciBXcmUscXJlPU4oKCk9PnsidXNlIHN0cmljdCI7cmYoKTtvKF9NZSwiYmFzZUV2ZXJ5Iik7V3JlPV9NZX0pO2Z1bmN0aW9uIERNZSh0LGUscil7dmFyIG49UHQodCk/VXJlOldyZTtyZXR1cm4gciYmaW8odCxlLHIpJiYoZT12b2lkIDApLG4odCxtbihlLDMpKX12YXIgUGEsWXJlPU4oKCk9PnsidXNlIHN0cmljdCI7SHJlKCk7cXJlKCk7b3MoKTtXbigpOyRkKCk7byhETWUsImV2ZXJ5Iik7UGE9RE1lfSk7ZnVuY3Rpb24gTE1lKHQsZSl7dmFyIHI9W107cmV0dXJuIEZzKHQsZnVuY3Rpb24obixpLGEpe2UobixpLGEpJiZyLnB1c2gobil9KSxyfXZhciB0ayxoUj1OKCgpPT57InVzZSBzdHJpY3QiO3JmKCk7byhMTWUsImJhc2VGaWx0ZXIiKTt0az1MTWV9KTtmdW5jdGlvbiBSTWUodCxlKXt2YXIgcj1QdCh0KT9QbTp0aztyZXR1cm4gcih0LG1uKGUsMykpfXZhciBZcixmUj1OKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7aFIoKTtvcygpO1duKCk7byhSTWUsImZpbHRlciIpO1lyPVJNZX0pO2Z1bmN0aW9uIE5NZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU9iamVjdChlKTtpZighZmkoZSkpe3ZhciBhPW1uKHIsMyk7ZT16cihlKSxyPW8oZnVuY3Rpb24obCl7cmV0dXJuIGEoaVtsXSxsLGkpfSwicHJlZGljYXRlIil9dmFyIHM9dChlLHIsbik7cmV0dXJuIHM+LTE/aVthP2Vbc106c106dm9pZCAwfX12YXIgWHJlLGpyZT1OKCgpPT57InVzZSBzdHJpY3QiO29zKCk7UG8oKTtFYygpO28oTk1lLCJjcmVhdGVGaW5kIik7WHJlPU5NZX0pO2Z1bmN0aW9uIElNZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDprYyhyKTtyZXR1cm4gaTwwJiYoaT1NTWUobitpLDApKSx2dyh0LG1uKGUsMyksaSl9dmFyIE1NZSxLcmUsUXJlPU4oKCk9PnsidXNlIHN0cmljdCI7VkwoKTtvcygpO0RtKCk7TU1lPU1hdGgubWF4O28oSU1lLCJmaW5kSW5kZXgiKTtLcmU9SU1lfSk7dmFyIE9NZSxscyxacmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqcmUoKTtRcmUoKTtPTWU9WHJlKEtyZSksbHM9T01lfSk7ZnVuY3Rpb24gUE1lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOnZvaWQgMH12YXIgaWEsSnJlPU4oKCk9PnsidXNlIHN0cmljdCI7byhQTWUsImhlYWQiKTtpYT1QTWV9KTt2YXIgZW5lPU4oKCk9PnsidXNlIHN0cmljdCI7SnJlKCl9KTtmdW5jdGlvbiBCTWUodCxlKXt2YXIgcj0tMSxuPWZpKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gRnModCxmdW5jdGlvbihpLGEscyl7blsrK3JdPWUoaSxhLHMpfSksbn12YXIgcmssZFI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyZigpO1BvKCk7byhCTWUsImJhc2VNYXAiKTtyaz1CTWV9KTtmdW5jdGlvbiBGTWUodCxlKXt2YXIgcj1QdCh0KT9CczpyaztyZXR1cm4gcih0LG1uKGUsMykpfXZhciBKZSxVbT1OKCgpPT57InVzZSBzdHJpY3QiO3FkKCk7b3MoKTtkUigpO1duKCk7byhGTWUsIm1hcCIpO0plPUZNZX0pO2Z1bmN0aW9uICRNZSh0LGUpe3JldHVybiBDYyhKZSh0LGUpLDEpfXZhciBnYSxwUj1OKCgpPT57InVzZSBzdHJpY3QiO09tKCk7VW0oKTtvKCRNZSwiZmxhdE1hcCIpO2dhPSRNZX0pO2Z1bmN0aW9uIHpNZSh0LGUpe3JldHVybiB0PT1udWxsP3Q6c20odCxWbShlKSxScyl9dmFyIG1SLHRuZT1OKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7SncoKTtVaCgpO28oek1lLCJmb3JJbiIpO21SPXpNZX0pO2Z1bmN0aW9uIEdNZSh0LGUpe3JldHVybiB0JiZHbSh0LFZtKGUpKX12YXIgZ1Iscm5lPU4oKCk9PnsidXNlIHN0cmljdCI7S3coKTtKdygpO28oR01lLCJmb3JPd24iKTtnUj1HTWV9KTt2YXIgVk1lLFVNZSxITWUseVIsbm5lPU4oKCk9PnsidXNlIHN0cmljdCI7YW0oKTtOcmUoKTtWTWU9T2JqZWN0LnByb3RvdHlwZSxVTWU9Vk1lLmhhc093blByb3BlcnR5LEhNZT1ScmUoZnVuY3Rpb24odCxlLHIpe1VNZS5jYWxsKHQscik/dFtyXS5wdXNoKGUpOnBjKHQscixbZV0pfSkseVI9SE1lfSk7ZnVuY3Rpb24gV01lKHQsZSl7cmV0dXJuIHQ+ZX12YXIgaW5lLGFuZT1OKCgpPT57InVzZSBzdHJpY3QiO28oV01lLCJiYXNlR3QiKTtpbmU9V01lfSk7ZnVuY3Rpb24gWE1lKHQsZSl7cmV0dXJuIHQhPW51bGwmJllNZS5jYWxsKHQsZSl9dmFyIHFNZSxZTWUsc25lLG9uZT1OKCgpPT57InVzZSBzdHJpY3QiO3FNZT1PYmplY3QucHJvdG90eXBlLFlNZT1xTWUuaGFzT3duUHJvcGVydHk7byhYTWUsImJhc2VIYXMiKTtzbmU9WE1lfSk7ZnVuY3Rpb24gak1lKHQsZSl7cmV0dXJuIHQhPW51bGwmJll3KHQsZSxzbmUpfXZhciBCdCxsbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvbmUoKTtvUigpO28oak1lLCJoYXMiKTtCdD1qTWV9KTtmdW5jdGlvbiBRTWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nInx8IVB0KHQpJiZpaSh0KSYmZmEodCk9PUtNZX12YXIgS01lLFRpLG5rPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtXbigpO09vKCk7S01lPSJbb2JqZWN0IFN0cmluZ10iO28oUU1lLCJpc1N0cmluZyIpO1RpPVFNZX0pO2Z1bmN0aW9uIFpNZSh0LGUpe3JldHVybiBCcyhlLGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdfSl9dmFyIGNuZSx1bmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxZCgpO28oWk1lLCJiYXNlVmFsdWVzIik7Y25lPVpNZX0pO2Z1bmN0aW9uIEpNZSh0KXtyZXR1cm4gdD09bnVsbD9bXTpjbmUodCx6cih0KSl9dmFyIGJyLHZSPU4oKCk9PnsidXNlIHN0cmljdCI7dW5lKCk7RWMoKTtvKEpNZSwidmFsdWVzIik7YnI9Sk1lfSk7ZnVuY3Rpb24gdEllKHQsZSxyLG4pe3Q9ZmkodCk/dDpicih0KSxyPXImJiFuP2tjKHIpOjA7dmFyIGk9dC5sZW5ndGg7cmV0dXJuIHI8MCYmKHI9ZUllKGkrciwwKSksVGkodCk/cjw9aSYmdC5pbmRleE9mKGUscik+LTE6ISFpJiZMbSh0LGUscik+LTF9dmFyIGVJZSxYbixobmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4dygpO1BvKCk7bmsoKTtEbSgpO3ZSKCk7ZUllPU1hdGgubWF4O28odEllLCJpbmNsdWRlcyIpO1huPXRJZX0pO2Z1bmN0aW9uIG5JZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDprYyhyKTtyZXR1cm4gaTwwJiYoaT1ySWUobitpLDApKSxMbSh0LGUsaSl9dmFyIHJJZSxpayxmbmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4dygpO0RtKCk7ckllPU1hdGgubWF4O28obkllLCJpbmRleE9mIik7aWs9bkllfSk7ZnVuY3Rpb24gbEllKHQpe2lmKHQ9PW51bGwpcmV0dXJuITA7aWYoZmkodCkmJihQdCh0KXx8dHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdC5zcGxpY2U9PSJmdW5jdGlvbiJ8fExsKHQpfHxHaCh0KXx8RGwodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1sbyh0KTtpZihlPT1pSWV8fGU9PWFJZSlyZXR1cm4hdC5zaXplO2lmKG1jKHQpKXJldHVybiFSbSh0KS5sZW5ndGg7Zm9yKHZhciByIGluIHQpaWYob0llLmNhbGwodCxyKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgaUllLGFJZSxzSWUsb0llLGhyLGFrPU4oKCk9PnsidXNlIHN0cmljdCI7VHcoKTtYZCgpO2htKCk7V24oKTtQbygpO2RtKCk7dW0oKTtmMigpO2lJZT0iW29iamVjdCBNYXBdIixhSWU9IltvYmplY3QgU2V0XSIsc0llPU9iamVjdC5wcm90b3R5cGUsb0llPXNJZS5oYXNPd25Qcm9wZXJ0eTtvKGxJZSwiaXNFbXB0eSIpO2hyPWxJZX0pO2Z1bmN0aW9uIHVJZSh0KXtyZXR1cm4gaWkodCkmJmZhKHQpPT1jSWV9dmFyIGNJZSxkbmUscG5lPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtPbygpO2NJZT0iW29iamVjdCBSZWdFeHBdIjtvKHVJZSwiYmFzZUlzUmVnRXhwIik7ZG5lPXVJZX0pO3ZhciBtbmUsaEllLFVvLGduZT1OKCgpPT57InVzZSBzdHJpY3QiO3BuZSgpO0JkKCk7aDIoKTttbmU9Rm8mJkZvLmlzUmVnRXhwLGhJZT1tbmU/Qm8obW5lKTpkbmUsVW89aEllfSk7ZnVuY3Rpb24gZkllKHQpe3JldHVybiB0PT09dm9pZCAwfXZhciBtcix5bmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZJZSwiaXNVbmRlZmluZWQiKTttcj1mSWV9KTtmdW5jdGlvbiBkSWUodCxlKXtyZXR1cm4gdDxlfXZhciBzayx4Uj1OKCgpPT57InVzZSBzdHJpY3QiO28oZEllLCJiYXNlTHQiKTtzaz1kSWV9KTtmdW5jdGlvbiBwSWUodCxlKXt2YXIgcj17fTtyZXR1cm4gZT1tbihlLDMpLEdtKHQsZnVuY3Rpb24obixpLGEpe3BjKHIsaSxlKG4saSxhKSl9KSxyfXZhciBqZCx2bmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjthbSgpO0t3KCk7b3MoKTtvKHBJZSwibWFwVmFsdWVzIik7amQ9cEllfSk7ZnVuY3Rpb24gbUllKHQsZSxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aDsrK248aTspe3ZhciBhPXRbbl0scz1lKGEpO2lmKHMhPW51bGwmJihsPT09dm9pZCAwP3M9PT1zJiYhb28ocyk6cihzLGwpKSl2YXIgbD1zLHU9YX1yZXR1cm4gdX12YXIgSG0sb2s9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXZCgpO28obUllLCJiYXNlRXh0cmVtdW0iKTtIbT1tSWV9KTtmdW5jdGlvbiBnSWUodCl7cmV0dXJuIHQmJnQubGVuZ3RoP0htKHQsdGEsaW5lKTp2b2lkIDB9dmFyICRzLHhuZT1OKCgpPT57InVzZSBzdHJpY3QiO29rKCk7YW5lKCk7THUoKTtvKGdJZSwibWF4Iik7JHM9Z0llfSk7ZnVuY3Rpb24geUllKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9IbSh0LHRhLHNrKTp2b2lkIDB9dmFyIE5sLGJSPU4oKCk9PnsidXNlIHN0cmljdCI7b2soKTt4UigpO0x1KCk7byh5SWUsIm1pbiIpO05sPXlJZX0pO2Z1bmN0aW9uIHZJZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9IbSh0LG1uKGUsMiksc2spOnZvaWQgMH12YXIgS2QsYm5lPU4oKCk9PnsidXNlIHN0cmljdCI7b2soKTtvcygpO3hSKCk7byh2SWUsIm1pbkJ5Iik7S2Q9dkllfSk7ZnVuY3Rpb24gYkllKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoeEllKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXQuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0pO2Nhc2UgMjpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSxlWzJdKX1yZXR1cm4hdC5hcHBseSh0aGlzLGUpfX12YXIgeEllLFRuZSx3bmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4SWU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO28oYkllLCJuZWdhdGUiKTtUbmU9YkllfSk7ZnVuY3Rpb24gVEllKHQsZSxyLG4pe2lmKCFibih0KSlyZXR1cm4gdDtlPUpoKGUsdCk7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgscz1hLTEsbD10O2whPW51bGwmJisraTxhOyl7dmFyIHU9U2MoZVtpXSksaD1yO2lmKHU9PT0iX19wcm90b19fInx8dT09PSJjb25zdHJ1Y3RvciJ8fHU9PT0icHJvdG90eXBlIilyZXR1cm4gdDtpZihpIT1zKXt2YXIgZj1sW3VdO2g9bj9uKGYsdSxsKTp2b2lkIDAsaD09PXZvaWQgMCYmKGg9Ym4oZik/ZjpWaChlW2krMV0pP1tdOnt9KX1nYyhsLHUsaCksbD1sW3VdfXJldHVybiB0fXZhciBrbmUsRW5lPU4oKCk9PnsidXNlIHN0cmljdCI7cG0oKTtJMigpO3AyKCk7bm8oKTtNbSgpO28oVEllLCJiYXNlU2V0Iik7a25lPVRJZX0pO2Z1bmN0aW9uIHdJZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT17fTsrK248aTspe3ZhciBzPWVbbl0sbD1lZih0LHMpO3IobCxzKSYma25lKGEsSmgocyx0KSxsKX1yZXR1cm4gYX12YXIgbGssVFI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPMigpO0VuZSgpO0kyKCk7byh3SWUsImJhc2VQaWNrQnkiKTtsaz13SWV9KTtmdW5jdGlvbiBrSWUodCxlKXtpZih0PT1udWxsKXJldHVybnt9O3ZhciByPUJzKE53KHQpLGZ1bmN0aW9uKG4pe3JldHVybltuXX0pO3JldHVybiBlPW1uKGUpLGxrKHQscixmdW5jdGlvbihuLGkpe3JldHVybiBlKG4saVswXSl9KX12YXIgenMsU25lPU4oKCk9PnsidXNlIHN0cmljdCI7cWQoKTtvcygpO1RSKCk7S0woKTtvKGtJZSwicGlja0J5Iik7enM9a0llfSk7ZnVuY3Rpb24gRUllKHQsZSl7dmFyIHI9dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtyLS07KXRbcl09dFtyXS52YWx1ZTtyZXR1cm4gdH12YXIgQ25lLEFuZT1OKCgpPT57InVzZSBzdHJpY3QiO28oRUllLCJiYXNlU29ydEJ5Iik7Q25lPUVJZX0pO2Z1bmN0aW9uIFNJZSh0LGUpe2lmKHQhPT1lKXt2YXIgcj10IT09dm9pZCAwLG49dD09PW51bGwsaT10PT09dCxhPW9vKHQpLHM9ZSE9PXZvaWQgMCxsPWU9PT1udWxsLHU9ZT09PWUsaD1vbyhlKTtpZighbCYmIWgmJiFhJiZ0PmV8fGEmJnMmJnUmJiFsJiYhaHx8biYmcyYmdXx8IXImJnV8fCFpKXJldHVybiAxO2lmKCFuJiYhYSYmIWgmJnQ8ZXx8aCYmciYmaSYmIW4mJiFhfHxsJiZyJiZpfHwhcyYmaXx8IXUpcmV0dXJuLTF9cmV0dXJuIDB9dmFyIF9uZSxEbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXZCgpO28oU0llLCJjb21wYXJlQXNjZW5kaW5nIik7X25lPVNJZX0pO2Z1bmN0aW9uIENJZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dC5jcml0ZXJpYSxhPWUuY3JpdGVyaWEscz1pLmxlbmd0aCxsPXIubGVuZ3RoOysrbjxzOyl7dmFyIHU9X25lKGlbbl0sYVtuXSk7aWYodSl7aWYobj49bClyZXR1cm4gdTt2YXIgaD1yW25dO3JldHVybiB1KihoPT0iZGVzYyI/LTE6MSl9fXJldHVybiB0LmluZGV4LWUuaW5kZXh9dmFyIExuZSxSbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEbmUoKTtvKENJZSwiY29tcGFyZU11bHRpcGxlIik7TG5lPUNJZX0pO2Z1bmN0aW9uIEFJZSh0LGUscil7ZS5sZW5ndGg/ZT1CcyhlLGZ1bmN0aW9uKGEpe3JldHVybiBQdChhKT9mdW5jdGlvbihzKXtyZXR1cm4gZWYocyxhLmxlbmd0aD09PTE/YVswXTphKX06YX0pOmU9W3RhXTt2YXIgbj0tMTtlPUJzKGUsQm8obW4pKTt2YXIgaT1yayh0LGZ1bmN0aW9uKGEscyxsKXt2YXIgdT1CcyhlLGZ1bmN0aW9uKGgpe3JldHVybiBoKGEpfSk7cmV0dXJue2NyaXRlcmlhOnUsaW5kZXg6KytuLHZhbHVlOmF9fSk7cmV0dXJuIENuZShpLGZ1bmN0aW9uKGEscyl7cmV0dXJuIExuZShhLHMscil9KX12YXIgTm5lLE1uZT1OKCgpPT57InVzZSBzdHJpY3QiO3FkKCk7TzIoKTtvcygpO2RSKCk7QW5lKCk7QmQoKTtSbmUoKTtMdSgpO1duKCk7byhBSWUsImJhc2VPcmRlckJ5Iik7Tm5lPUFJZX0pO3ZhciBfSWUsSW5lLE9uZT1OKCgpPT57InVzZSBzdHJpY3QiO2NSKCk7X0llPWp3KCJsZW5ndGgiKSxJbmU9X0llfSk7ZnVuY3Rpb24gekllKHQpe2Zvcih2YXIgZT1QbmUubGFzdEluZGV4PTA7UG5lLnRlc3QodCk7KSsrZTtyZXR1cm4gZX12YXIgQm5lLERJZSxMSWUsUkllLE5JZSxNSWUsSUllLHdSLGtSLE9JZSxGbmUsJG5lLHpuZSxQSWUsR25lLFZuZSxCSWUsRkllLCRJZSxQbmUsVW5lLEhuZT1OKCgpPT57InVzZSBzdHJpY3QiO0JuZT0iXFx1ZDgwMC1cXHVkZmZmIixESWU9IlxcdTAzMDAtXFx1MDM2ZiIsTEllPSJcXHVmZTIwLVxcdWZlMmYiLFJJZT0iXFx1MjBkMC1cXHUyMGZmIixOSWU9REllK0xJZStSSWUsTUllPSJcXHVmZTBlXFx1ZmUwZiIsSUllPSJbIitCbmUrIl0iLHdSPSJbIitOSWUrIl0iLGtSPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLE9JZT0iKD86Iit3UisifCIra1IrIikiLEZuZT0iW14iK0JuZSsiXSIsJG5lPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9Iix6bmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLFBJZT0iXFx1MjAwZCIsR25lPU9JZSsiPyIsVm5lPSJbIitNSWUrIl0/IixCSWU9Iig/OiIrUEllKyIoPzoiK1tGbmUsJG5lLHpuZV0uam9pbigifCIpKyIpIitWbmUrR25lKyIpKiIsRkllPVZuZStHbmUrQkllLCRJZT0iKD86IitbRm5lK3dSKyI/Iix3UiwkbmUsem5lLElJZV0uam9pbigifCIpKyIpIixQbmU9UmVnRXhwKGtSKyIoPz0iK2tSKyIpfCIrJEllK0ZJZSwiZyIpO28oekllLCJ1bmljb2RlU2l6ZSIpO1VuZT16SWV9KTtmdW5jdGlvbiBHSWUodCl7cmV0dXJuIHR0ZSh0KT9VbmUodCk6SW5lKHQpfXZhciBXbmUscW5lPU4oKCk9PnsidXNlIHN0cmljdCI7T25lKCk7cnRlKCk7SG5lKCk7byhHSWUsInN0cmluZ1NpemUiKTtXbmU9R0llfSk7ZnVuY3Rpb24gVkllKHQsZSl7cmV0dXJuIGxrKHQsZSxmdW5jdGlvbihyLG4pe3JldHVybiBYdyh0LG4pfSl9dmFyIFluZSxYbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUUigpO2xSKCk7byhWSWUsImJhc2VQaWNrIik7WW5lPVZJZX0pO3ZhciBVSWUsUWQsam5lPU4oKCk9PnsidXNlIHN0cmljdCI7WG5lKCk7ZXRlKCk7VUllPUplZShmdW5jdGlvbih0LGUpe3JldHVybiB0PT1udWxsP3t9OlluZSh0LGUpfSksUWQ9VUllfSk7ZnVuY3Rpb24gcUllKHQsZSxyLG4pe2Zvcih2YXIgaT0tMSxhPVdJZShISWUoKGUtdCkvKHJ8fDEpKSwwKSxzPUFycmF5KGEpO2EtLTspc1tuP2E6KytpXT10LHQrPXI7cmV0dXJuIHN9dmFyIEhJZSxXSWUsS25lLFFuZT1OKCgpPT57InVzZSBzdHJpY3QiO0hJZT1NYXRoLmNlaWwsV0llPU1hdGgubWF4O28ocUllLCJiYXNlUmFuZ2UiKTtLbmU9cUllfSk7ZnVuY3Rpb24gWUllKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIG4mJnR5cGVvZiBuIT0ibnVtYmVyIiYmaW8oZSxyLG4pJiYocj1uPXZvaWQgMCksZT1fbShlKSxyPT09dm9pZCAwPyhyPWUsZT0wKTpyPV9tKHIpLG49bj09PXZvaWQgMD9lPHI/MTotMTpfbShuKSxLbmUoZSxyLG4sdCl9fXZhciBabmUsSm5lPU4oKCk9PnsidXNlIHN0cmljdCI7UW5lKCk7JGQoKTskTCgpO28oWUllLCJjcmVhdGVSYW5nZSIpO1puZT1ZSWV9KTt2YXIgWEllLEhvLGVpZT1OKCgpPT57InVzZSBzdHJpY3QiO0puZSgpO1hJZT1abmUoKSxIbz1YSWV9KTtmdW5jdGlvbiBqSWUodCxlLHIsbixpKXtyZXR1cm4gaSh0LGZ1bmN0aW9uKGEscyxsKXtyPW4/KG49ITEsYSk6ZShyLGEscyxsKX0pLHJ9dmFyIHRpZSxyaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpJZSwiYmFzZVJlZHVjZSIpO3RpZT1qSWV9KTtmdW5jdGlvbiBLSWUodCxlLHIpe3ZhciBuPVB0KHQpP250ZTp0aWUsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4odCxtbihlLDQpLHIsaSxGcyl9dmFyIFhyLEVSPU4oKCk9PnsidXNlIHN0cmljdCI7aXRlKCk7cmYoKTtvcygpO3JpZSgpO1duKCk7byhLSWUsInJlZHVjZSIpO1hyPUtJZX0pO2Z1bmN0aW9uIFFJZSh0LGUpe3ZhciByPVB0KHQpP1BtOnRrO3JldHVybiByKHQsVG5lKG1uKGUsMykpKX12YXIgc2YsbmllPU4oKCk9PnsidXNlIHN0cmljdCI7QXcoKTtoUigpO29zKCk7V24oKTt3bmUoKTtvKFFJZSwicmVqZWN0Iik7c2Y9UUllfSk7ZnVuY3Rpb24gZU9lKHQpe2lmKHQ9PW51bGwpcmV0dXJuIDA7aWYoZmkodCkpcmV0dXJuIFRpKHQpP1duZSh0KTp0Lmxlbmd0aDt2YXIgZT1sbyh0KTtyZXR1cm4gZT09WkllfHxlPT1KSWU/dC5zaXplOlJtKHQpLmxlbmd0aH12YXIgWkllLEpJZSxTUixpaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdygpO1hkKCk7UG8oKTtuaygpO3FuZSgpO1pJZT0iW29iamVjdCBNYXBdIixKSWU9IltvYmplY3QgU2V0XSI7byhlT2UsInNpemUiKTtTUj1lT2V9KTtmdW5jdGlvbiB0T2UodCxlKXt2YXIgcjtyZXR1cm4gRnModCxmdW5jdGlvbihuLGksYSl7cmV0dXJuIHI9ZShuLGksYSksIXJ9KSwhIXJ9dmFyIGFpZSxzaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyZigpO28odE9lLCJiYXNlU29tZSIpO2FpZT10T2V9KTtmdW5jdGlvbiByT2UodCxlLHIpe3ZhciBuPVB0KHQpPyR3OmFpZTtyZXR1cm4gciYmaW8odCxlLHIpJiYoZT12b2lkIDApLG4odCxtbihlLDMpKX12YXIgQjIsb2llPU4oKCk9PnsidXNlIHN0cmljdCI7dFIoKTtvcygpO3NpZSgpO1duKCk7JGQoKTtvKHJPZSwic29tZSIpO0IyPXJPZX0pO3ZhciBuT2UsX2MsbGllPU4oKCk9PnsidXNlIHN0cmljdCI7T20oKTtNbmUoKTttbSgpOyRkKCk7bk9lPXljKGZ1bmN0aW9uKHQsZSl7aWYodD09bnVsbClyZXR1cm5bXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gcj4xJiZpbyh0LGVbMF0sZVsxXSk/ZT1bXTpyPjImJmlvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxObmUodCxDYyhlLDEpLFtdKX0pLF9jPW5PZX0pO3ZhciBpT2UsYU9lLGNpZSx1aWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRTCgpO3pMKCk7VncoKTtpT2U9MS8wLGFPZT10ZiYmMS96bShuZXcgdGYoWywtMF0pKVsxXT09aU9lP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgdGYodCl9OmFpLGNpZT1hT2V9KTtmdW5jdGlvbiBvT2UodCxlLHIpe3ZhciBuPS0xLGk9YncsYT10Lmxlbmd0aCxzPSEwLGw9W10sdT1sO2lmKHIpcz0hMSxpPVp3O2Vsc2UgaWYoYT49c09lKXt2YXIgaD1lP251bGw6Y2llKHQpO2lmKGgpcmV0dXJuIHptKGgpO3M9ITEsaT0kbSx1PW5ldyBGbX1lbHNlIHU9ZT9bXTpsO2U6Zm9yKDsrK248YTspe3ZhciBmPXRbbl0sZD1lP2UoZik6ZjtpZihmPXJ8fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPXUubGVuZ3RoO3AtLTspaWYodVtwXT09PWQpY29udGludWUgZTtlJiZ1LnB1c2goZCksbC5wdXNoKGYpfWVsc2UgaSh1LGQscil8fCh1IT09bCYmdS5wdXNoKGQpLGwucHVzaChmKSl9cmV0dXJuIGx9dmFyIHNPZSxXbSxjaz1OKCgpPT57InVzZSBzdHJpY3QiO0Z3KCk7VUwoKTt1UigpO3p3KCk7dWllKCk7VncoKTtzT2U9MjAwO28ob09lLCJiYXNlVW5pcSIpO1dtPW9PZX0pO3ZhciBsT2UsQ1IsaGllPU4oKCk9PnsidXNlIHN0cmljdCI7T20oKTttbSgpO2NrKCk7eFQoKTtsT2U9eWMoZnVuY3Rpb24odCl7cmV0dXJuIFdtKENjKHQsMSxQZCwhMCkpfSksQ1I9bE9lfSk7ZnVuY3Rpb24gY09lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9XbSh0KTpbXX12YXIgcW0sZmllPU4oKCk9PnsidXNlIHN0cmljdCI7Y2soKTtvKGNPZSwidW5pcSIpO3FtPWNPZX0pO2Z1bmN0aW9uIHVPZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9XbSh0LG1uKGUsMikpOltdfXZhciBkaWUscGllPU4oKCk9PnsidXNlIHN0cmljdCI7b3MoKTtjaygpO28odU9lLCJ1bmlxQnkiKTtkaWU9dU9lfSk7ZnVuY3Rpb24gZk9lKHQpe3ZhciBlPSsraE9lO3JldHVybiBrdyh0KStlfXZhciBoT2UsWmQsbWllPU4oKCk9PnsidXNlIHN0cmljdCI7SEwoKTtoT2U9MDtvKGZPZSwidW5pcXVlSWQiKTtaZD1mT2V9KTtmdW5jdGlvbiBkT2UodCxlLHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgscz17fTsrK248aTspe3ZhciBsPW48YT9lW25dOnZvaWQgMDtyKHMsdFtuXSxsKX1yZXR1cm4gc312YXIgZ2llLHlpZT1OKCgpPT57InVzZSBzdHJpY3QiO28oZE9lLCJiYXNlWmlwT2JqZWN0Iik7Z2llPWRPZX0pO2Z1bmN0aW9uIHBPZSh0LGUpe3JldHVybiBnaWUodHx8W10sZXx8W10sZ2MpfXZhciB1ayx2aWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwbSgpO3lpZSgpO28ocE9lLCJ6aXBPYmplY3QiKTt1az1wT2V9KTt2YXIgcXQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWZWUoKTtKTCgpO3F0ZSgpO1l0ZSgpO1Q5KCk7T3JlKCk7RnJlKCk7enJlKCk7R3JlKCk7VnJlKCk7WXJlKCk7ZlIoKTtacmUoKTtlbmUoKTtwUigpO1N3KCk7ZWsoKTt0bmUoKTtybmUoKTtubmUoKTtsbmUoKTtMdSgpO2huZSgpO2ZuZSgpO1duKCk7YWsoKTtuMigpO25vKCk7Z25lKCk7bmsoKTt5bmUoKTtFYygpOyRyZSgpO1VtKCk7dm5lKCk7eG5lKCk7RTkoKTtiUigpO2JuZSgpO3pMKCk7TXJlKCk7am5lKCk7U25lKCk7ZWllKCk7RVIoKTtuaWUoKTtpaWUoKTtvaWUoKTtsaWUoKTtoaWUoKTtmaWUoKTttaWUoKTt2UigpO3ZpZSgpO30pO2Z1bmN0aW9uIGJpZSh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBUaWUodCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIEYyKHQsZSxyLG4pe3ZhciBpPSIiK2UsYT0iIityO2lmKCF0JiZpPmEpe3ZhciBzPWk7aT1hLGE9c31yZXR1cm4gaSt4aWUrYSt4aWUrKG1yKG4pP21PZTpuKX1mdW5jdGlvbiBnT2UodCxlLHIsbil7dmFyIGk9IiIrZSxhPSIiK3I7aWYoIXQmJmk+YSl7dmFyIHM9aTtpPWEsYT1zfXZhciBsPXt2OmksdzphfTtyZXR1cm4gbiYmKGwubmFtZT1uKSxsfWZ1bmN0aW9uIEFSKHQsZSl7cmV0dXJuIEYyKHQsZS52LGUudyxlLm5hbWUpfXZhciBtT2UsSmQseGllLHNuLGhrPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTttT2U9IlwwIixKZD0iXDAiLHhpZT0iASIsc249Y2xhc3N7c3RhdGlje28odGhpcywiR3JhcGgiKX1jb25zdHJ1Y3RvcihlPXt9KXt0aGlzLl9pc0RpcmVjdGVkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkaXJlY3RlZCIpP2UuZGlyZWN0ZWQ6ITAsdGhpcy5faXNNdWx0aWdyYXBoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJtdWx0aWdyYXBoIik/ZS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImNvbXBvdW5kIik/ZS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPU5zKHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPU5zKHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlbltKZF09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319aXNEaXJlY3RlZCgpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfWlzTXVsdGlncmFwaCgpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9aXNDb21wb3VuZCgpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfXNldEdyYXBoKGUpe3JldHVybiB0aGlzLl9sYWJlbD1lLHRoaXN9Z3JhcGgoKXtyZXR1cm4gdGhpcy5fbGFiZWx9c2V0RGVmYXVsdE5vZGVMYWJlbChlKXtyZXR1cm4gQWkoZSl8fChlPU5zKGUpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49ZSx0aGlzfW5vZGVDb3VudCgpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9bm9kZXMoKXtyZXR1cm4genIodGhpcy5fbm9kZXMpfXNvdXJjZXMoKXt2YXIgZT10aGlzO3JldHVybiBZcih0aGlzLm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIGhyKGUuX2luW3JdKX0pfXNpbmtzKCl7dmFyIGU9dGhpcztyZXR1cm4gWXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBocihlLl9vdXRbcl0pfSl9c2V0Tm9kZXMoZSxyKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzO3JldHVybiBBZShlLGZ1bmN0aW9uKGEpe24ubGVuZ3RoPjE/aS5zZXROb2RlKGEscik6aS5zZXROb2RlKGEpfSksdGhpc31zZXROb2RlKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9ub2RlcyxlKT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbZV09ciksdGhpcyk6KHRoaXMuX25vZGVzW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9yOnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbihlKSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W2VdPUpkLHRoaXMuX2NoaWxkcmVuW2VdPXt9LHRoaXMuX2NoaWxkcmVuW0pkXVtlXT0hMCksdGhpcy5faW5bZV09e30sdGhpcy5fcHJlZHNbZV09e30sdGhpcy5fb3V0W2VdPXt9LHRoaXMuX3N1Y3NbZV09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9bm9kZShlKXtyZXR1cm4gdGhpcy5fbm9kZXNbZV19aGFzTm9kZShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpfXJlbW92ZU5vZGUoZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpKXt2YXIgcj1vKG49PnRoaXMucmVtb3ZlRWRnZSh0aGlzLl9lZGdlT2Jqc1tuXSksInJlbW92ZUVkZ2UiKTtkZWxldGUgdGhpcy5fbm9kZXNbZV0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbZV0sQWUodGhpcy5jaGlsZHJlbihlKSxuPT57dGhpcy5zZXRQYXJlbnQobil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bZV0pLEFlKHpyKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLEFlKHpyKHRoaXMuX291dFtlXSksciksZGVsZXRlIHRoaXMuX291dFtlXSxkZWxldGUgdGhpcy5fc3Vjc1tlXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQoZSxyKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYobXIocikpcj1KZDtlbHNle3IrPSIiO2Zvcih2YXIgbj1yOyFtcihuKTtuPXRoaXMucGFyZW50KG4pKWlmKG49PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3IrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUocil9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09cix0aGlzLl9jaGlsZHJlbltyXVtlXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2VdXVtlXX1wYXJlbnQoZSl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIHI9dGhpcy5fcGFyZW50W2VdO2lmKHIhPT1KZClyZXR1cm4gcn19Y2hpbGRyZW4oZSl7aWYobXIoZSkmJihlPUpkKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgcj10aGlzLl9jaGlsZHJlbltlXTtpZihyKXJldHVybiB6cihyKX1lbHNle2lmKGU9PT1KZClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShlKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKGUpe3ZhciByPXRoaXMuX3ByZWRzW2VdO2lmKHIpcmV0dXJuIHpyKHIpfXN1Y2Nlc3NvcnMoZSl7dmFyIHI9dGhpcy5fc3Vjc1tlXTtpZihyKXJldHVybiB6cihyKX1uZWlnaGJvcnMoZSl7dmFyIHI9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYocilyZXR1cm4gQ1Iocix0aGlzLnN1Y2Nlc3NvcnMoZSkpfWlzTGVhZihlKXt2YXIgcjtyZXR1cm4gdGhpcy5pc0RpcmVjdGVkKCk/cj10aGlzLnN1Y2Nlc3NvcnMoZSk6cj10aGlzLm5laWdoYm9ycyhlKSxyLmxlbmd0aD09PTB9ZmlsdGVyTm9kZXMoZSl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO3Iuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO0FlKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHMsbCl7ZShsKSYmci5zZXROb2RlKGwscyl9KSxBZSh0aGlzLl9lZGdlT2JqcyxmdW5jdGlvbihzKXtyLmhhc05vZGUocy52KSYmci5oYXNOb2RlKHMudykmJnIuc2V0RWRnZShzLG4uZWRnZShzKSl9KTt2YXIgaT17fTtmdW5jdGlvbiBhKHMpe3ZhciBsPW4ucGFyZW50KHMpO3JldHVybiBsPT09dm9pZCAwfHxyLmhhc05vZGUobCk/KGlbc109bCxsKTpsIGluIGk/aVtsXTphKGwpfXJldHVybiBvKGEsImZpbmRQYXJlbnQiKSx0aGlzLl9pc0NvbXBvdW5kJiZBZShyLm5vZGVzKCksZnVuY3Rpb24ocyl7ci5zZXRQYXJlbnQocyxhKHMpKX0pLHJ9c2V0RGVmYXVsdEVkZ2VMYWJlbChlKXtyZXR1cm4gQWkoZSl8fChlPU5zKGUpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ZSx0aGlzfWVkZ2VDb3VudCgpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9ZWRnZXMoKXtyZXR1cm4gYnIodGhpcy5fZWRnZU9ianMpfXNldFBhdGgoZSxyKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiBYcihlLGZ1bmN0aW9uKGEscyl7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKGEscyxyKTpuLnNldEVkZ2UoYSxzKSxzfSksdGhpc31zZXRFZGdlKCl7dmFyIGUscixuLGksYT0hMSxzPWFyZ3VtZW50c1swXTt0eXBlb2Ygcz09Im9iamVjdCImJnMhPT1udWxsJiYidiJpbiBzPyhlPXMudixyPXMudyxuPXMubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKGk9YXJndW1lbnRzWzFdLGE9ITApKTooZT1zLHI9YXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKGk9YXJndW1lbnRzWzJdLGE9ITApKSxlPSIiK2Uscj0iIityLG1yKG4pfHwobj0iIituKTt2YXIgbD1GMih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZWRnZUxhYmVscyxsKSlyZXR1cm4gYSYmKHRoaXMuX2VkZ2VMYWJlbHNbbF09aSksdGhpcztpZighbXIobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZShyKSx0aGlzLl9lZGdlTGFiZWxzW2xdPWE/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSxyLG4pO3ZhciB1PWdPZSh0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gZT11LnYscj11LncsT2JqZWN0LmZyZWV6ZSh1KSx0aGlzLl9lZGdlT2Jqc1tsXT11LGJpZSh0aGlzLl9wcmVkc1tyXSxlKSxiaWUodGhpcy5fc3Vjc1tlXSxyKSx0aGlzLl9pbltyXVtsXT11LHRoaXMuX291dFtlXVtsXT11LHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/QVIodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOkYyKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW2ldfWhhc0VkZ2UoZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg9PT0xP0FSKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpGMih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2VkZ2VMYWJlbHMsaSl9cmVtb3ZlRWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/QVIodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOkYyKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pLGE9dGhpcy5fZWRnZU9ianNbaV07cmV0dXJuIGEmJihlPWEudixyPWEudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tpXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbaV0sVGllKHRoaXMuX3ByZWRzW3JdLGUpLFRpZSh0aGlzLl9zdWNzW2VdLHIpLGRlbGV0ZSB0aGlzLl9pbltyXVtpXSxkZWxldGUgdGhpcy5fb3V0W2VdW2ldLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfWluRWRnZXMoZSxyKXt2YXIgbj10aGlzLl9pbltlXTtpZihuKXt2YXIgaT1icihuKTtyZXR1cm4gcj9ZcihpLGZ1bmN0aW9uKGEpe3JldHVybiBhLnY9PT1yfSk6aX19b3V0RWRnZXMoZSxyKXt2YXIgbj10aGlzLl9vdXRbZV07aWYobil7dmFyIGk9YnIobik7cmV0dXJuIHI/WXIoaSxmdW5jdGlvbihhKXtyZXR1cm4gYS53PT09cn0pOml9fW5vZGVFZGdlcyhlLHIpe3ZhciBuPXRoaXMuaW5FZGdlcyhlLHIpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXMoZSxyKSl9fTtzbi5wcm90b3R5cGUuX25vZGVDb3VudD0wO3NuLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7byhiaWUsImluY3JlbWVudE9ySW5pdEVudHJ5Iik7byhUaWUsImRlY3JlbWVudE9yUmVtb3ZlRW50cnkiKTtvKEYyLCJlZGdlQXJnc1RvSWQiKTtvKGdPZSwiZWRnZUFyZ3NUb09iaiIpO28oQVIsImVkZ2VPYmpUb0lkIil9KTt2YXIgV289TigoKT0+eyJ1c2Ugc3RyaWN0IjtoaygpfSk7ZnVuY3Rpb24gd2llKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24geU9lKHQsZSl7aWYodCE9PSJfbmV4dCImJnQhPT0iX3ByZXYiKXJldHVybiBlfXZhciBkayxraWU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijtkaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaXN0Iil9Y29uc3RydWN0b3IoKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWRlcXVldWUoKXt2YXIgZT10aGlzLl9zZW50aW5lbCxyPWUuX3ByZXY7aWYociE9PWUpcmV0dXJuIHdpZShyKSxyfWVucXVldWUoZSl7dmFyIHI9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmd2llKGUpLGUuX25leHQ9ci5fbmV4dCxyLl9uZXh0Ll9wcmV2PWUsci5fbmV4dD1lLGUuX3ByZXY9cn10b1N0cmluZygpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX3NlbnRpbmVsLG49ci5fcHJldjtuIT09cjspZS5wdXNoKEpTT04uc3RyaW5naWZ5KG4seU9lKSksbj1uLl9wcmV2O3JldHVybiJbIitlLmpvaW4oIiwgIikrIl0ifX07byh3aWUsInVubGluayIpO28oeU9lLCJmaWx0ZXJPdXRMaW5rcyIpfSk7ZnVuY3Rpb24gRWllKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgcj1iT2UodCxlfHx2T2UpLG49eE9lKHIuZ3JhcGgsci5idWNrZXRzLHIuemVyb0lkeCk7cmV0dXJuIHFyKEplKG4sZnVuY3Rpb24oaSl7cmV0dXJuIHQub3V0RWRnZXMoaS52LGkudyl9KSl9ZnVuY3Rpb24geE9lKHQsZSxyKXtmb3IodmFyIG49W10saT1lW2UubGVuZ3RoLTFdLGE9ZVswXSxzO3Qubm9kZUNvdW50KCk7KXtmb3IoO3M9YS5kZXF1ZXVlKCk7KV9SKHQsZSxyLHMpO2Zvcig7cz1pLmRlcXVldWUoKTspX1IodCxlLHIscyk7aWYodC5ub2RlQ291bnQoKSl7Zm9yKHZhciBsPWUubGVuZ3RoLTI7bD4wOy0tbClpZihzPWVbbF0uZGVxdWV1ZSgpLHMpe249bi5jb25jYXQoX1IodCxlLHIscywhMCkpO2JyZWFrfX19cmV0dXJuIG59ZnVuY3Rpb24gX1IodCxlLHIsbixpKXt2YXIgYT1pP1tdOnZvaWQgMDtyZXR1cm4gQWUodC5pbkVkZ2VzKG4udiksZnVuY3Rpb24ocyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7aSYmYS5wdXNoKHt2OnMudix3OnMud30pLHUub3V0LT1sLERSKGUscix1KX0pLEFlKHQub3V0RWRnZXMobi52KSxmdW5jdGlvbihzKXt2YXIgbD10LmVkZ2UocyksdT1zLncsaD10Lm5vZGUodSk7aC5pbi09bCxEUihlLHIsaCl9KSx0LnJlbW92ZU5vZGUobi52KSxhfWZ1bmN0aW9uIGJPZSh0LGUpe3ZhciByPW5ldyBzbixuPTAsaT0wO0FlKHQubm9kZXMoKSxmdW5jdGlvbihsKXtyLnNldE5vZGUobCx7djpsLGluOjAsb3V0OjB9KX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihsKXt2YXIgdT1yLmVkZ2UobC52LGwudyl8fDAsaD1lKGwpLGY9dStoO3Iuc2V0RWRnZShsLnYsbC53LGYpLGk9TWF0aC5tYXgoaSxyLm5vZGUobC52KS5vdXQrPWgpLG49TWF0aC5tYXgobixyLm5vZGUobC53KS5pbis9aCl9KTt2YXIgYT1IbyhpK24rMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBka30pLHM9bisxO3JldHVybiBBZShyLm5vZGVzKCksZnVuY3Rpb24obCl7RFIoYSxzLHIubm9kZShsKSl9KSx7Z3JhcGg6cixidWNrZXRzOmEsemVyb0lkeDpzfX1mdW5jdGlvbiBEUih0LGUscil7ci5vdXQ/ci5pbj90W3Iub3V0LXIuaW4rZV0uZW5xdWV1ZShyKTp0W3QubGVuZ3RoLTFdLmVucXVldWUocik6dFswXS5lbnF1ZXVlKHIpfXZhciB2T2UsU2llPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtXbygpO2tpZSgpO3ZPZT1OcygxKTtvKEVpZSwiZ3JlZWR5RkFTIik7byh4T2UsImRvR3JlZWR5RkFTIik7byhfUiwicmVtb3ZlTm9kZSIpO28oYk9lLCJidWlsZFN0YXRlIik7byhEUiwiYXNzaWduQnVja2V0Iil9KTtmdW5jdGlvbiBDaWUodCl7dmFyIGU9dC5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP0VpZSh0LHIodCkpOlRPZSh0KTtBZShlLGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKTt0LnJlbW92ZUVkZ2UobiksaS5mb3J3YXJkTmFtZT1uLm5hbWUsaS5yZXZlcnNlZD0hMCx0LnNldEVkZ2Uobi53LG4udixpLFpkKCJyZXYiKSl9KTtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5lZGdlKGkpLndlaWdodH19byhyLCJ3ZWlnaHRGbiIpfWZ1bmN0aW9uIFRPZSh0KXt2YXIgZT1bXSxyPXt9LG49e307ZnVuY3Rpb24gaShhKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKXx8KG5bYV09ITAsclthXT0hMCxBZSh0Lm91dEVkZ2VzKGEpLGZ1bmN0aW9uKHMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMudyk/ZS5wdXNoKHMpOmkocy53KX0pLGRlbGV0ZSByW2FdKX1yZXR1cm4gbyhpLCJkZnMiKSxBZSh0Lm5vZGVzKCksaSksZX1mdW5jdGlvbiBBaWUodCl7QWUodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihyLnJldmVyc2VkKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSx0LnNldEVkZ2UoZS53LGUudixyLG4pfX0pfXZhciBMUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7U2llKCk7byhDaWUsInJ1biIpO28oVE9lLCJkZnNGQVMiKTtvKEFpZSwidW5kbyIpfSk7ZnVuY3Rpb24gRGModCxlLHIsbil7dmFyIGk7ZG8gaT1aZChuKTt3aGlsZSh0Lmhhc05vZGUoaSkpO3JldHVybiByLmR1bW15PWUsdC5zZXROb2RlKGksciksaX1mdW5jdGlvbiBEaWUodCl7dmFyIGU9bmV3IHNuKCkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gQWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe2Uuc2V0Tm9kZShyLHQubm9kZShyKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIudixyLncpfHx7d2VpZ2h0OjAsbWlubGVuOjF9LGk9dC5lZGdlKHIpO2Uuc2V0RWRnZShyLnYsci53LHt3ZWlnaHQ6bi53ZWlnaHQraS53ZWlnaHQsbWlubGVuOk1hdGgubWF4KG4ubWlubGVuLGkubWlubGVuKX0pfSksZX1mdW5jdGlvbiBwayh0KXt2YXIgZT1uZXcgc24oe211bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKHQuZ3JhcGgoKSk7cmV0dXJuIEFlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt0LmNoaWxkcmVuKHIpLmxlbmd0aHx8ZS5zZXROb2RlKHIsdC5ub2RlKHIpKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXtlLnNldEVkZ2Uocix0LmVkZ2UocikpfSksZX1mdW5jdGlvbiBSUih0LGUpe3ZhciByPXQueCxuPXQueSxpPWUueC1yLGE9ZS55LW4scz10LndpZHRoLzIsbD10LmhlaWdodC8yO2lmKCFpJiYhYSl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciB1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1sKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1zKmEvaSkse3g6cit1LHk6bitofX1mdW5jdGlvbiBvZih0KXt2YXIgZT1KZShIbyhNUih0KSsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJuIEFlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUociksaT1uLnJhbms7bXIoaSl8fChlW2ldW24ub3JkZXJdPXIpfSksZX1mdW5jdGlvbiBMaWUodCl7dmFyIGU9TmwoSmUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiB0Lm5vZGUocikucmFua30pKTtBZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49dC5ub2RlKHIpO0J0KG4sInJhbmsiKSYmKG4ucmFuay09ZSl9KX1mdW5jdGlvbiBSaWUodCl7dmFyIGU9TmwoSmUodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3JldHVybiB0Lm5vZGUoYSkucmFua30pKSxyPVtdO0FlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSkucmFuay1lO3Jbc118fChyW3NdPVtdKSxyW3NdLnB1c2goYSl9KTt2YXIgbj0wLGk9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO0FlKHIsZnVuY3Rpb24oYSxzKXttcihhKSYmcyVpIT09MD8tLW46biYmQWUoYSxmdW5jdGlvbihsKXt0Lm5vZGUobCkucmFuays9bn0pfSl9ZnVuY3Rpb24gTlIodCxlLHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSxEYyh0LCJib3JkZXIiLGksZSl9ZnVuY3Rpb24gTVIodCl7cmV0dXJuICRzKEplKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSkucmFuaztpZighbXIocikpcmV0dXJuIHJ9KSl9ZnVuY3Rpb24gTmllKHQsZSl7dmFyIHI9e2xoczpbXSxyaHM6W119O3JldHVybiBBZSh0LGZ1bmN0aW9uKG4pe2Uobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBNaWUodCxlKXt2YXIgcj1RdygpO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7Y29uc29sZS5sb2codCsiIHRpbWU6ICIrKFF3KCktcikrIm1zIil9fWZ1bmN0aW9uIElpZSh0LGUpe3JldHVybiBlKCl9dmFyIExjPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtXbygpO28oRGMsImFkZER1bW15Tm9kZSIpO28oRGllLCJzaW1wbGlmeSIpO28ocGssImFzTm9uQ29tcG91bmRHcmFwaCIpO28oUlIsImludGVyc2VjdFJlY3QiKTtvKG9mLCJidWlsZExheWVyTWF0cml4Iik7byhMaWUsIm5vcm1hbGl6ZVJhbmtzIik7byhSaWUsInJlbW92ZUVtcHR5UmFua3MiKTtvKE5SLCJhZGRCb3JkZXJOb2RlIik7byhNUiwibWF4UmFuayIpO28oTmllLCJwYXJ0aXRpb24iKTtvKE1pZSwidGltZSIpO28oSWllLCJub3RpbWUiKX0pO2Z1bmN0aW9uIFBpZSh0KXtmdW5jdGlvbiBlKHIpe3ZhciBuPXQuY2hpbGRyZW4ociksaT10Lm5vZGUocik7aWYobi5sZW5ndGgmJkFlKG4sZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBhPWkubWluUmFuayxzPWkubWF4UmFuaysxO2E8czsrK2EpT2llKHQsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxhKSxPaWUodCwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxhKX19byhlLCJkZnMiKSxBZSh0LmNoaWxkcmVuKCksZSl9ZnVuY3Rpb24gT2llKHQsZSxyLG4saSxhKXt2YXIgcz17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOmEsYm9yZGVyVHlwZTplfSxsPWlbZV1bYS0xXSx1PURjKHQsImJvcmRlciIscyxyKTtpW2VdW2FdPXUsdC5zZXRQYXJlbnQodSxuKSxsJiZ0LnNldEVkZ2UobCx1LHt3ZWlnaHQ6MX0pfXZhciBCaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0xjKCk7byhQaWUsImFkZEJvcmRlclNlZ21lbnRzIik7byhPaWUsImFkZEJvcmRlck5vZGUiKX0pO2Z1bmN0aW9uICRpZSh0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyhlPT09ImxyInx8ZT09PSJybCIpJiZHaWUodCl9ZnVuY3Rpb24gemllKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGU9PT0iYnQifHxlPT09InJsIikmJndPZSh0KSwoZT09PSJsciJ8fGU9PT0icmwiKSYmKGtPZSh0KSxHaWUodCkpfWZ1bmN0aW9uIEdpZSh0KXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7RmllKHQubm9kZShlKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7RmllKHQuZWRnZShlKSl9KX1mdW5jdGlvbiBGaWUodCl7dmFyIGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWV9ZnVuY3Rpb24gd09lKHQpe0FlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtJUih0Lm5vZGUoZSkpfSksQWUodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtBZShyLnBvaW50cyxJUiksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsInkiKSYmSVIocil9KX1mdW5jdGlvbiBJUih0KXt0Lnk9LXQueX1mdW5jdGlvbiBrT2UodCl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe09SKHQubm9kZShlKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO0FlKHIucG9pbnRzLE9SKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpJiZPUihyKX0pfWZ1bmN0aW9uIE9SKHQpe3ZhciBlPXQueDt0Lng9dC55LHQueT1lfXZhciBWaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oJGllLCJhZGp1c3QiKTtvKHppZSwidW5kbyIpO28oR2llLCJzd2FwV2lkdGhIZWlnaHQiKTtvKEZpZSwic3dhcFdpZHRoSGVpZ2h0T25lIik7byh3T2UsInJldmVyc2VZIik7byhJUiwicmV2ZXJzZVlPbmUiKTtvKGtPZSwic3dhcFhZIik7byhPUiwic3dhcFhZT25lIil9KTtmdW5jdGlvbiBVaWUodCl7dC5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtTT2UodCxlKX0pfWZ1bmN0aW9uIFNPZSh0LGUpe3ZhciByPWUudixuPXQubm9kZShyKS5yYW5rLGk9ZS53LGE9dC5ub2RlKGkpLnJhbmsscz1lLm5hbWUsbD10LmVkZ2UoZSksdT1sLmxhYmVsUmFuaztpZihhIT09bisxKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIGg9dm9pZCAwLGYsZDtmb3IoZD0wLCsrbjtuPGE7KytkLCsrbilsLnBvaW50cz1bXSxoPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpsLGVkZ2VPYmo6ZSxyYW5rOm59LGY9RGModCwiZWRnZSIsaCwiX2QiKSxuPT09dSYmKGgud2lkdGg9bC53aWR0aCxoLmhlaWdodD1sLmhlaWdodCxoLmR1bW15PSJlZGdlLWxhYmVsIixoLmxhYmVscG9zPWwubGFiZWxwb3MpLHQuc2V0RWRnZShyLGYse3dlaWdodDpsLndlaWdodH0scyksZD09PTAmJnQuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGYpLHI9Zjt0LnNldEVkZ2UocixpLHt3ZWlnaHQ6bC53ZWlnaHR9LHMpfX1mdW5jdGlvbiBIaWUodCl7QWUodC5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKSxuPXIuZWRnZUxhYmVsLGk7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosbik7ci5kdW1teTspaT10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLG4ucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksci5kdW1teT09PSJlZGdlLWxhYmVsIiYmKG4ueD1yLngsbi55PXIueSxuLndpZHRoPXIud2lkdGgsbi5oZWlnaHQ9ci5oZWlnaHQpLGU9aSxyPXQubm9kZShlKX0pfXZhciBQUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7TGMoKTtvKFVpZSwicnVuIik7byhTT2UsIm5vcm1hbGl6ZUVkZ2UiKTtvKEhpZSwidW5kbyIpfSk7ZnVuY3Rpb24gJDIodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT10Lm5vZGUobik7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikpcmV0dXJuIGkucmFuaztlW25dPSEwO3ZhciBhPU5sKEplKHQub3V0RWRnZXMobiksZnVuY3Rpb24ocyl7cmV0dXJuIHIocy53KS10LmVkZ2UocykubWlubGVufSkpO3JldHVybihhPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHxhPT09dm9pZCAwfHxhPT09bnVsbCkmJihhPTApLGkucmFuaz1hfW8ociwiZGZzIiksQWUodC5zb3VyY2VzKCkscil9ZnVuY3Rpb24gZXAodCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59dmFyIG1rPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKCQyLCJsb25nZXN0UGF0aCIpO28oZXAsInNsYWNrIil9KTtmdW5jdGlvbiBnayh0KXt2YXIgZT1uZXcgc24oe2RpcmVjdGVkOiExfSkscj10Lm5vZGVzKClbMF0sbj10Lm5vZGVDb3VudCgpO2Uuc2V0Tm9kZShyLHt9KTtmb3IodmFyIGksYTtDT2UoZSx0KTxuOylpPUFPZShlLHQpLGE9ZS5oYXNOb2RlKGkudik/ZXAodCxpKTotZXAodCxpKSxfT2UoZSx0LGEpO3JldHVybiBlfWZ1bmN0aW9uIENPZSh0LGUpe2Z1bmN0aW9uIHIobil7QWUoZS5ub2RlRWRnZXMobiksZnVuY3Rpb24oaSl7dmFyIGE9aS52LHM9bj09PWE/aS53OmE7IXQuaGFzTm9kZShzKSYmIWVwKGUsaSkmJih0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKG4scyx7fSkscihzKSl9KX1yZXR1cm4gbyhyLCJkZnMiKSxBZSh0Lm5vZGVzKCksciksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBBT2UodCxlKXtyZXR1cm4gS2QoZS5lZGdlcygpLGZ1bmN0aW9uKHIpe2lmKHQuaGFzTm9kZShyLnYpIT09dC5oYXNOb2RlKHIudykpcmV0dXJuIGVwKGUscil9KX1mdW5jdGlvbiBfT2UodCxlLHIpe0FlKHQubm9kZXMoKSxmdW5jdGlvbihuKXtlLm5vZGUobikucmFuays9cn0pfXZhciBCUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7V28oKTttaygpO28oZ2ssImZlYXNpYmxlVHJlZSIpO28oQ09lLCJ0aWdodFRyZWUiKTtvKEFPZSwiZmluZE1pblNsYWNrRWRnZSIpO28oX09lLCJzaGlmdFJhbmtzIil9KTt2YXIgcWllPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgRlI9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBlWHQsJFI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0ZSKCk7ZVh0PU5zKDEpfSk7dmFyIFlpZT1OKCgpPT57InVzZSBzdHJpY3QiOyRSKCl9KTt2YXIgelI9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBYaWU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6UigpfSk7dmFyIGhYdCxqaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO2hYdD1OcygxKX0pO2Z1bmN0aW9uIEdSKHQpe3ZhciBlPXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKGEpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpKXRocm93IG5ldyB6MjtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxhKXx8KHJbYV09ITAsZVthXT0hMCxBZSh0LnByZWRlY2Vzc29ycyhhKSxpKSxkZWxldGUgclthXSxuLnB1c2goYSkpfWlmKG8oaSwidmlzaXQiKSxBZSh0LnNpbmtzKCksaSksU1IoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyB6MjtyZXR1cm4gbn1mdW5jdGlvbiB6Migpe312YXIgVlI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0dSLkN5Y2xlRXhjZXB0aW9uPXoyO28oR1IsInRvcHNvcnQiKTtvKHoyLCJDeWNsZUV4Y2VwdGlvbiIpO3oyLnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgS2llPU4oKCk9PnsidXNlIHN0cmljdCI7VlIoKX0pO2Z1bmN0aW9uIHlrKHQsZSxyKXtQdChlKXx8KGU9W2VdKTt2YXIgbj0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLGk9W10sYT17fTtyZXR1cm4gQWUoZSxmdW5jdGlvbihzKXtpZighdC5oYXNOb2RlKHMpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK3MpO1FpZSh0LHMscj09PSJwb3N0IixhLG4saSl9KSxpfWZ1bmN0aW9uIFFpZSh0LGUscixuLGksYSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSl8fChuW2VdPSEwLHJ8fGEucHVzaChlKSxBZShpKGUpLGZ1bmN0aW9uKHMpe1FpZSh0LHMscixuLGksYSl9KSxyJiZhLnB1c2goZSkpfXZhciBVUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byh5aywiZGZzIik7byhRaWUsImRvRGZzIil9KTtmdW5jdGlvbiBIUih0LGUpe3JldHVybiB5ayh0LGUsInBvc3QiKX12YXIgWmllPU4oKCk9PnsidXNlIHN0cmljdCI7VVIoKTtvKEhSLCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIFdSKHQsZSl7cmV0dXJuIHlrKHQsZSwicHJlIil9dmFyIEppZT1OKCgpPT57InVzZSBzdHJpY3QiO1VSKCk7byhXUiwicHJlb3JkZXIiKX0pO3ZhciBlYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGUigpO2hrKCl9KTt2YXIgdGFlPU4oKCk9PnsidXNlIHN0cmljdCI7cWllKCk7JFIoKTtZaWUoKTtYaWUoKTtqaWUoKTtLaWUoKTtaaWUoKTtKaWUoKTtlYWUoKTt6UigpO1ZSKCl9KTtmdW5jdGlvbiBjZih0KXt0PURpZSh0KSwkMih0KTt2YXIgZT1nayh0KTtZUihlKSxxUihlLHQpO2Zvcih2YXIgcixuO3I9YWFlKGUpOyluPXNhZShlLHQsciksb2FlKGUsdCxyLG4pfWZ1bmN0aW9uIHFSKHQsZSl7dmFyIHI9SFIodCx0Lm5vZGVzKCkpO3I9ci5zbGljZSgwLHIubGVuZ3RoLTEpLEFlKHIsZnVuY3Rpb24obil7TU9lKHQsZSxuKX0pfWZ1bmN0aW9uIE1PZSh0LGUscil7dmFyIG49dC5ub2RlKHIpLGk9bi5wYXJlbnQ7dC5lZGdlKHIsaSkuY3V0dmFsdWU9bmFlKHQsZSxyKX1mdW5jdGlvbiBuYWUodCxlLHIpe3ZhciBuPXQubm9kZShyKSxpPW4ucGFyZW50LGE9ITAscz1lLmVkZ2UocixpKSxsPTA7cmV0dXJuIHN8fChhPSExLHM9ZS5lZGdlKGkscikpLGw9cy53ZWlnaHQsQWUoZS5ub2RlRWRnZXMociksZnVuY3Rpb24odSl7dmFyIGg9dS52PT09cixmPWg/dS53OnUudjtpZihmIT09aSl7dmFyIGQ9aD09PWEscD1lLmVkZ2UodSkud2VpZ2h0O2lmKGwrPWQ/cDotcCxPT2UodCxyLGYpKXt2YXIgbT10LmVkZ2UocixmKS5jdXR2YWx1ZTtsKz1kPy1tOm19fX0pLGx9ZnVuY3Rpb24gWVIodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSksaWFlKHQse30sMSxlKX1mdW5jdGlvbiBpYWUodCxlLHIsbixpKXt2YXIgYT1yLHM9dC5ub2RlKG4pO3JldHVybiBlW25dPSEwLEFlKHQubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKGwpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGwpfHwocj1pYWUodCxlLHIsbCxuKSl9KSxzLmxvdz1hLHMubGltPXIrKyxpP3MucGFyZW50PWk6ZGVsZXRlIHMucGFyZW50LHJ9ZnVuY3Rpb24gYWFlKHQpe3JldHVybiBscyh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gc2FlKHQsZSxyKXt2YXIgbj1yLnYsaT1yLnc7ZS5oYXNFZGdlKG4saSl8fChuPXIudyxpPXIudik7dmFyIGE9dC5ub2RlKG4pLHM9dC5ub2RlKGkpLGw9YSx1PSExO2EubGltPnMubGltJiYobD1zLHU9ITApO3ZhciBoPVlyKGUuZWRnZXMoKSxmdW5jdGlvbihmKXtyZXR1cm4gdT09PXJhZSh0LHQubm9kZShmLnYpLGwpJiZ1IT09cmFlKHQsdC5ub2RlKGYudyksbCl9KTtyZXR1cm4gS2QoaCxmdW5jdGlvbihmKXtyZXR1cm4gZXAoZSxmKX0pfWZ1bmN0aW9uIG9hZSh0LGUscixuKXt2YXIgaT1yLnYsYT1yLnc7dC5yZW1vdmVFZGdlKGksYSksdC5zZXRFZGdlKG4udixuLncse30pLFlSKHQpLHFSKHQsZSksSU9lKHQsZSl9ZnVuY3Rpb24gSU9lKHQsZSl7dmFyIHI9bHModC5ub2RlcygpLGZ1bmN0aW9uKGkpe3JldHVybiFlLm5vZGUoaSkucGFyZW50fSksbj1XUih0LHIpO249bi5zbGljZSgxKSxBZShuLGZ1bmN0aW9uKGkpe3ZhciBhPXQubm9kZShpKS5wYXJlbnQscz1lLmVkZ2UoaSxhKSxsPSExO3N8fChzPWUuZWRnZShhLGkpLGw9ITApLGUubm9kZShpKS5yYW5rPWUubm9kZShhKS5yYW5rKyhsP3MubWlubGVuOi1zLm1pbmxlbil9KX1mdW5jdGlvbiBPT2UodCxlLHIpe3JldHVybiB0Lmhhc0VkZ2UoZSxyKX1mdW5jdGlvbiByYWUodCxlLHIpe3JldHVybiByLmxvdzw9ZS5saW0mJmUubGltPD1yLmxpbX12YXIgbGFlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTt0YWUoKTtMYygpO0JSKCk7bWsoKTtjZi5pbml0TG93TGltVmFsdWVzPVlSO2NmLmluaXRDdXRWYWx1ZXM9cVI7Y2YuY2FsY0N1dFZhbHVlPW5hZTtjZi5sZWF2ZUVkZ2U9YWFlO2NmLmVudGVyRWRnZT1zYWU7Y2YuZXhjaGFuZ2VFZGdlcz1vYWU7byhjZiwibmV0d29ya1NpbXBsZXgiKTtvKHFSLCJpbml0Q3V0VmFsdWVzIik7byhNT2UsImFzc2lnbkN1dFZhbHVlIik7byhuYWUsImNhbGNDdXRWYWx1ZSIpO28oWVIsImluaXRMb3dMaW1WYWx1ZXMiKTtvKGlhZSwiZGZzQXNzaWduTG93TGltIik7byhhYWUsImxlYXZlRWRnZSIpO28oc2FlLCJlbnRlckVkZ2UiKTtvKG9hZSwiZXhjaGFuZ2VFZGdlcyIpO28oSU9lLCJ1cGRhdGVSYW5rcyIpO28oT09lLCJpc1RyZWVFZGdlIik7byhyYWUsImlzRGVzY2VuZGFudCIpfSk7ZnVuY3Rpb24gWFIodCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpjYWUodCk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjpCT2UodCk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOlBPZSh0KTticmVhaztkZWZhdWx0OmNhZSh0KX19ZnVuY3Rpb24gQk9lKHQpeyQyKHQpLGdrKHQpfWZ1bmN0aW9uIGNhZSh0KXtjZih0KX12YXIgUE9lLGpSPU4oKCk9PnsidXNlIHN0cmljdCI7QlIoKTtsYWUoKTttaygpO28oWFIsInJhbmsiKTtQT2U9JDI7byhCT2UsInRpZ2h0VHJlZVJhbmtlciIpO28oY2FlLCJuZXR3b3JrU2ltcGxleFJhbmtlciIpfSk7ZnVuY3Rpb24gdWFlKHQpe3ZhciBlPURjKHQsInJvb3QiLHt9LCJfcm9vdCIpLHI9Rk9lKHQpLG49JHMoYnIocikpLTEsaT0yKm4rMTt0LmdyYXBoKCkubmVzdGluZ1Jvb3Q9ZSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocyl7dC5lZGdlKHMpLm1pbmxlbio9aX0pO3ZhciBhPSRPZSh0KSsxO0FlKHQuY2hpbGRyZW4oKSxmdW5jdGlvbihzKXtoYWUodCxlLGksYSxuLHIscyl9KSx0LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9aX1mdW5jdGlvbiBoYWUodCxlLHIsbixpLGEscyl7dmFyIGw9dC5jaGlsZHJlbihzKTtpZighbC5sZW5ndGgpe3MhPT1lJiZ0LnNldEVkZ2UoZSxzLHt3ZWlnaHQ6MCxtaW5sZW46cn0pO3JldHVybn12YXIgdT1OUih0LCJfYnQiKSxoPU5SKHQsIl9iYiIpLGY9dC5ub2RlKHMpO3Quc2V0UGFyZW50KHUscyksZi5ib3JkZXJUb3A9dSx0LnNldFBhcmVudChoLHMpLGYuYm9yZGVyQm90dG9tPWgsQWUobCxmdW5jdGlvbihkKXtoYWUodCxlLHIsbixpLGEsZCk7dmFyIHA9dC5ub2RlKGQpLG09cC5ib3JkZXJUb3A/cC5ib3JkZXJUb3A6ZCxnPXAuYm9yZGVyQm90dG9tP3AuYm9yZGVyQm90dG9tOmQseT1wLmJvcmRlclRvcD9uOjIqbix2PW0hPT1nPzE6aS1hW3NdKzE7dC5zZXRFZGdlKHUsbSx7d2VpZ2h0OnksbWlubGVuOnYsbmVzdGluZ0VkZ2U6ITB9KSx0LnNldEVkZ2UoZyxoLHt3ZWlnaHQ6eSxtaW5sZW46dixuZXN0aW5nRWRnZTohMH0pfSksdC5wYXJlbnQocyl8fHQuc2V0RWRnZShlLHUse3dlaWdodDowLG1pbmxlbjppK2Fbc119KX1mdW5jdGlvbiBGT2UodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXQuY2hpbGRyZW4obik7YSYmYS5sZW5ndGgmJkFlKGEsZnVuY3Rpb24ocyl7cihzLGkrMSl9KSxlW25dPWl9cmV0dXJuIG8ociwiZGZzIiksQWUodC5jaGlsZHJlbigpLGZ1bmN0aW9uKG4pe3IobiwxKX0pLGV9ZnVuY3Rpb24gJE9lKHQpe3JldHVybiBYcih0LmVkZ2VzKCksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSt0LmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBmYWUodCl7dmFyIGU9dC5ncmFwaCgpO3QucmVtb3ZlTm9kZShlLm5lc3RpbmdSb290KSxkZWxldGUgZS5uZXN0aW5nUm9vdCxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpO24ubmVzdGluZ0VkZ2UmJnQucmVtb3ZlRWRnZShyKX0pfXZhciBkYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0xjKCk7byh1YWUsInJ1biIpO28oaGFlLCJkZnMiKTtvKEZPZSwidHJlZURlcHRocyIpO28oJE9lLCJzdW1XZWlnaHRzIik7byhmYWUsImNsZWFudXAiKX0pO2Z1bmN0aW9uIHBhZSh0LGUscil7dmFyIG49e30saTtBZShyLGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz10LnBhcmVudChhKSxsLHU7czspe2lmKGw9dC5wYXJlbnQocyksbD8odT1uW2xdLG5bbF09cyk6KHU9aSxpPXMpLHUmJnUhPT1zKXtlLnNldEVkZ2UodSxzKTtyZXR1cm59cz1sfX0pfXZhciBtYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28ocGFlLCJhZGRTdWJncmFwaENvbnN0cmFpbnRzIil9KTtmdW5jdGlvbiBnYWUodCxlLHIpe3ZhciBuPUdPZSh0KSxpPW5ldyBzbih7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpufSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihhKXtyZXR1cm4gdC5ub2RlKGEpfSk7cmV0dXJuIEFlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSksbD10LnBhcmVudChhKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoaS5zZXROb2RlKGEpLGkuc2V0UGFyZW50KGEsbHx8biksQWUodFtyXShhKSxmdW5jdGlvbih1KXt2YXIgaD11LnY9PT1hP3Uudzp1LnYsZj1pLmVkZ2UoaCxhKSxkPW1yKGYpPzA6Zi53ZWlnaHQ7aS5zZXRFZGdlKGgsYSx7d2VpZ2h0OnQuZWRnZSh1KS53ZWlnaHQrZH0pfSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIm1pblJhbmsiKSYmaS5zZXROb2RlKGEse2JvcmRlckxlZnQ6cy5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OnMuYm9yZGVyUmlnaHRbZV19KSl9KSxpfWZ1bmN0aW9uIEdPZSh0KXtmb3IodmFyIGU7dC5oYXNOb2RlKGU9WmQoIl9yb290IikpOyk7cmV0dXJuIGV9dmFyIHlhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7V28oKTtvKGdhZSwiYnVpbGRMYXllckdyYXBoIik7byhHT2UsImNyZWF0ZVJvb3ROb2RlIil9KTtmdW5jdGlvbiB2YWUodCxlKXtmb3IodmFyIHI9MCxuPTE7bjxlLmxlbmd0aDsrK24pcis9Vk9lKHQsZVtuLTFdLGVbbl0pO3JldHVybiByfWZ1bmN0aW9uIFZPZSh0LGUscil7Zm9yKHZhciBuPXVrKHIsSmUocixmdW5jdGlvbihoLGYpe3JldHVybiBmfSkpLGk9cXIoSmUoZSxmdW5jdGlvbihoKXtyZXR1cm4gX2MoSmUodC5vdXRFZGdlcyhoKSxmdW5jdGlvbihmKXtyZXR1cm57cG9zOm5bZi53XSx3ZWlnaHQ6dC5lZGdlKGYpLndlaWdodH19KSwicG9zIil9KSksYT0xO2E8ci5sZW5ndGg7KWE8PD0xO3ZhciBzPTIqYS0xO2EtPTE7dmFyIGw9SmUobmV3IEFycmF5KHMpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSx1PTA7cmV0dXJuIEFlKGkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1oLnBvcythO2xbZl0rPWgud2VpZ2h0O2Zvcih2YXIgZD0wO2Y+MDspZiUyJiYoZCs9bFtmKzFdKSxmPWYtMT4+MSxsW2ZdKz1oLndlaWdodDt1Kz1oLndlaWdodCpkfSkpLHV9dmFyIHhhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byh2YWUsImNyb3NzQ291bnQiKTtvKFZPZSwidHdvTGF5ZXJDcm9zc0NvdW50Iil9KTtmdW5jdGlvbiBiYWUodCl7dmFyIGU9e30scj1Zcih0Lm5vZGVzKCksZnVuY3Rpb24obCl7cmV0dXJuIXQuY2hpbGRyZW4obCkubGVuZ3RofSksbj0kcyhKZShyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pKSxpPUplKEhvKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIGEobCl7aWYoIUJ0KGUsbCkpe2VbbF09ITA7dmFyIHU9dC5ub2RlKGwpO2lbdS5yYW5rXS5wdXNoKGwpLEFlKHQuc3VjY2Vzc29ycyhsKSxhKX19byhhLCJkZnMiKTt2YXIgcz1fYyhyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pO3JldHVybiBBZShzLGEpLGl9dmFyIFRhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byhiYWUsImluaXRPcmRlciIpfSk7ZnVuY3Rpb24gd2FlKHQsZSl7cmV0dXJuIEplKGUsZnVuY3Rpb24ocil7dmFyIG49dC5pbkVkZ2VzKHIpO2lmKG4ubGVuZ3RoKXt2YXIgaT1YcihuLGZ1bmN0aW9uKGEscyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7cmV0dXJue3N1bTphLnN1bStsLndlaWdodCp1Lm9yZGVyLHdlaWdodDphLndlaWdodCtsLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OnIsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6cn19KX12YXIga2FlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKHdhZSwiYmFyeWNlbnRlciIpfSk7ZnVuY3Rpb24gRWFlKHQsZSl7dmFyIHI9e307QWUodCxmdW5jdGlvbihpLGEpe3ZhciBzPXJbaS52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W2kudl0saTphfTttcihpLmJhcnljZW50ZXIpfHwocy5iYXJ5Y2VudGVyPWkuYmFyeWNlbnRlcixzLndlaWdodD1pLndlaWdodCl9KSxBZShlLmVkZ2VzKCksZnVuY3Rpb24oaSl7dmFyIGE9cltpLnZdLHM9cltpLnddOyFtcihhKSYmIW1yKHMpJiYocy5pbmRlZ3JlZSsrLGEub3V0LnB1c2gocltpLnddKSl9KTt2YXIgbj1ZcihyLGZ1bmN0aW9uKGkpe3JldHVybiFpLmluZGVncmVlfSk7cmV0dXJuIFVPZShuKX1mdW5jdGlvbiBVT2UodCl7dmFyIGU9W107ZnVuY3Rpb24gcihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5tZXJnZWR8fChtcihzLmJhcnljZW50ZXIpfHxtcihhLmJhcnljZW50ZXIpfHxzLmJhcnljZW50ZXI+PWEuYmFyeWNlbnRlcikmJkhPZShhLHMpfX1vKHIsImhhbmRsZUluIik7ZnVuY3Rpb24gbihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5pbi5wdXNoKGEpLC0tcy5pbmRlZ3JlZT09PTAmJnQucHVzaChzKX19Zm9yKG8obiwiaGFuZGxlT3V0Iik7dC5sZW5ndGg7KXt2YXIgaT10LnBvcCgpO2UucHVzaChpKSxBZShpLmluLnJldmVyc2UoKSxyKGkpKSxBZShpLm91dCxuKGkpKX1yZXR1cm4gSmUoWXIoZSxmdW5jdGlvbihhKXtyZXR1cm4hYS5tZXJnZWR9KSxmdW5jdGlvbihhKXtyZXR1cm4gUWQoYSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBIT2UodCxlKXt2YXIgcj0wLG49MDt0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS53ZWlnaHQmJihyKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQsbis9ZS53ZWlnaHQpLHQudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPXIvbix0LndlaWdodD1uLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH12YXIgU2FlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKEVhZSwicmVzb2x2ZUNvbmZsaWN0cyIpO28oVU9lLCJkb1Jlc29sdmVDb25mbGljdHMiKTtvKEhPZSwibWVyZ2VFbnRyaWVzIil9KTtmdW5jdGlvbiBBYWUodCxlKXt2YXIgcj1OaWUodCxmdW5jdGlvbihmKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsImJhcnljZW50ZXIiKX0pLG49ci5saHMsaT1fYyhyLnJocyxmdW5jdGlvbihmKXtyZXR1cm4tZi5pfSksYT1bXSxzPTAsbD0wLHU9MDtuLnNvcnQoV09lKCEhZSkpLHU9Q2FlKGEsaSx1KSxBZShuLGZ1bmN0aW9uKGYpe3UrPWYudnMubGVuZ3RoLGEucHVzaChmLnZzKSxzKz1mLmJhcnljZW50ZXIqZi53ZWlnaHQsbCs9Zi53ZWlnaHQsdT1DYWUoYSxpLHUpfSk7dmFyIGg9e3ZzOnFyKGEpfTtyZXR1cm4gbCYmKGguYmFyeWNlbnRlcj1zL2wsaC53ZWlnaHQ9bCksaH1mdW5jdGlvbiBDYWUodCxlLHIpe2Zvcih2YXIgbjtlLmxlbmd0aCYmKG49bWEoZSkpLmk8PXI7KWUucG9wKCksdC5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBXT2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6ZS5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOnQ/ci5pLWUuaTplLmktci5pfX12YXIgX2FlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtMYygpO28oQWFlLCJzb3J0Iik7byhDYWUsImNvbnN1bWVVbnNvcnRhYmxlIik7byhXT2UsImNvbXBhcmVXaXRoQmlhcyIpfSk7ZnVuY3Rpb24gS1IodCxlLHIsbil7dmFyIGk9dC5jaGlsZHJlbihlKSxhPXQubm9kZShlKSxzPWE/YS5ib3JkZXJMZWZ0OnZvaWQgMCxsPWE/YS5ib3JkZXJSaWdodDp2b2lkIDAsdT17fTtzJiYoaT1ZcihpLGZ1bmN0aW9uKGcpe3JldHVybiBnIT09cyYmZyE9PWx9KSk7dmFyIGg9d2FlKHQsaSk7QWUoaCxmdW5jdGlvbihnKXtpZih0LmNoaWxkcmVuKGcudikubGVuZ3RoKXt2YXIgeT1LUih0LGcudixyLG4pO3VbZy52XT15LE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LCJiYXJ5Y2VudGVyIikmJllPZShnLHkpfX0pO3ZhciBmPUVhZShoLHIpO3FPZShmLHUpO3ZhciBkPUFhZShmLG4pO2lmKHMmJihkLnZzPXFyKFtzLGQudnMsbF0pLHQucHJlZGVjZXNzb3JzKHMpLmxlbmd0aCkpe3ZhciBwPXQubm9kZSh0LnByZWRlY2Vzc29ycyhzKVswXSksbT10Lm5vZGUodC5wcmVkZWNlc3NvcnMobClbMF0pO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLCJiYXJ5Y2VudGVyIil8fChkLmJhcnljZW50ZXI9MCxkLndlaWdodD0wKSxkLmJhcnljZW50ZXI9KGQuYmFyeWNlbnRlcipkLndlaWdodCtwLm9yZGVyK20ub3JkZXIpLyhkLndlaWdodCsyKSxkLndlaWdodCs9Mn1yZXR1cm4gZH1mdW5jdGlvbiBxT2UodCxlKXtBZSh0LGZ1bmN0aW9uKHIpe3IudnM9cXIoci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGVbbl0/ZVtuXS52czpufSkpfSl9ZnVuY3Rpb24gWU9lKHQsZSl7bXIodC5iYXJ5Y2VudGVyKT8odC5iYXJ5Y2VudGVyPWUuYmFyeWNlbnRlcix0LndlaWdodD1lLndlaWdodCk6KHQuYmFyeWNlbnRlcj0odC5iYXJ5Y2VudGVyKnQud2VpZ2h0K2UuYmFyeWNlbnRlciplLndlaWdodCkvKHQud2VpZ2h0K2Uud2VpZ2h0KSx0LndlaWdodCs9ZS53ZWlnaHQpfXZhciBEYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO2thZSgpO1NhZSgpO19hZSgpO28oS1IsInNvcnRTdWJncmFwaCIpO28ocU9lLCJleHBhbmRTdWJncmFwaHMiKTtvKFlPZSwibWVyZ2VCYXJ5Y2VudGVycyIpfSk7ZnVuY3Rpb24gTmFlKHQpe3ZhciBlPU1SKHQpLHI9TGFlKHQsSG8oMSxlKzEpLCJpbkVkZ2VzIiksbj1MYWUodCxIbyhlLTEsLTEsLTEpLCJvdXRFZGdlcyIpLGk9YmFlKHQpO1JhZSh0LGkpO2Zvcih2YXIgYT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscyxsPTAsdT0wO3U8NDsrK2wsKyt1KXtYT2UobCUyP3I6bixsJTQ+PTIpLGk9b2YodCk7dmFyIGg9dmFlKHQsaSk7aDxhJiYodT0wLHM9ZVIoaSksYT1oKX1SYWUodCxzKX1mdW5jdGlvbiBMYWUodCxlLHIpe3JldHVybiBKZShlLGZ1bmN0aW9uKG4pe3JldHVybiBnYWUodCxuLHIpfSl9ZnVuY3Rpb24gWE9lKHQsZSl7dmFyIHI9bmV3IHNuO0FlKHQsZnVuY3Rpb24obil7dmFyIGk9bi5ncmFwaCgpLnJvb3QsYT1LUihuLGkscixlKTtBZShhLnZzLGZ1bmN0aW9uKHMsbCl7bi5ub2RlKHMpLm9yZGVyPWx9KSxwYWUobixyLGEudnMpfSl9ZnVuY3Rpb24gUmFlKHQsZSl7QWUoZSxmdW5jdGlvbihyKXtBZShyLGZ1bmN0aW9uKG4saSl7dC5ub2RlKG4pLm9yZGVyPWl9KX0pfXZhciBNYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1dvKCk7TGMoKTttYWUoKTt5YWUoKTt4YWUoKTtUYWUoKTtEYWUoKTtvKE5hZSwib3JkZXIiKTtvKExhZSwiYnVpbGRMYXllckdyYXBocyIpO28oWE9lLCJzd2VlcExheWVyR3JhcGhzIik7byhSYWUsImFzc2lnbk9yZGVyIil9KTtmdW5jdGlvbiBJYWUodCl7dmFyIGU9S09lKHQpO0FlKHQuZ3JhcGgoKS5kdW1teUNoYWlucyxmdW5jdGlvbihyKXtmb3IodmFyIG49dC5ub2RlKHIpLGk9bi5lZGdlT2JqLGE9ak9lKHQsZSxpLnYsaS53KSxzPWEucGF0aCxsPWEubGNhLHU9MCxoPXNbdV0sZj0hMDtyIT09aS53Oyl7aWYobj10Lm5vZGUociksZil7Zm9yKDsoaD1zW3VdKSE9PWwmJnQubm9kZShoKS5tYXhSYW5rPG4ucmFuazspdSsrO2g9PT1sJiYoZj0hMSl9aWYoIWYpe2Zvcig7dTxzLmxlbmd0aC0xJiZ0Lm5vZGUoaD1zW3UrMV0pLm1pblJhbms8PW4ucmFuazspdSsrO2g9c1t1XX10LnNldFBhcmVudChyLGgpLHI9dC5zdWNjZXNzb3JzKHIpWzBdfX0pfWZ1bmN0aW9uIGpPZSh0LGUscixuKXt2YXIgaT1bXSxhPVtdLHM9TWF0aC5taW4oZVtyXS5sb3csZVtuXS5sb3cpLGw9TWF0aC5tYXgoZVtyXS5saW0sZVtuXS5saW0pLHUsaDt1PXI7ZG8gdT10LnBhcmVudCh1KSxpLnB1c2godSk7d2hpbGUodSYmKGVbdV0ubG93PnN8fGw+ZVt1XS5saW0pKTtmb3IoaD11LHU9bjsodT10LnBhcmVudCh1KSkhPT1oOylhLnB1c2godSk7cmV0dXJue3BhdGg6aS5jb25jYXQoYS5yZXZlcnNlKCkpLGxjYTpofX1mdW5jdGlvbiBLT2UodCl7dmFyIGU9e30scj0wO2Z1bmN0aW9uIG4oaSl7dmFyIGE9cjtBZSh0LmNoaWxkcmVuKGkpLG4pLGVbaV09e2xvdzphLGxpbTpyKyt9fXJldHVybiBvKG4sImRmcyIpLEFlKHQuY2hpbGRyZW4oKSxuKSxlfXZhciBPYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oSWFlLCJwYXJlbnREdW1teUNoYWlucyIpO28oak9lLCJmaW5kUGF0aCIpO28oS09lLCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIFFPZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSxhKXt2YXIgcz0wLGw9MCx1PWkubGVuZ3RoLGg9bWEoYSk7cmV0dXJuIEFlKGEsZnVuY3Rpb24oZixkKXt2YXIgcD1KT2UodCxmKSxtPXA/dC5ub2RlKHApLm9yZGVyOnU7KHB8fGY9PT1oKSYmKEFlKGEuc2xpY2UobCxkKzEpLGZ1bmN0aW9uKGcpe0FlKHQucHJlZGVjZXNzb3JzKGcpLGZ1bmN0aW9uKHkpe3ZhciB2PXQubm9kZSh5KSx4PXYub3JkZXI7KHg8c3x8bTx4KSYmISh2LmR1bW15JiZ0Lm5vZGUoZykuZHVtbXkpJiZQYWUocix5LGcpfSl9KSxsPWQrMSxzPW0pfSksYX1yZXR1cm4gbyhuLCJ2aXNpdExheWVyIiksWHIoZSxuKSxyfWZ1bmN0aW9uIFpPZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oYSxzLGwsdSxoKXt2YXIgZjtBZShIbyhzLGwpLGZ1bmN0aW9uKGQpe2Y9YVtkXSx0Lm5vZGUoZikuZHVtbXkmJkFlKHQucHJlZGVjZXNzb3JzKGYpLGZ1bmN0aW9uKHApe3ZhciBtPXQubm9kZShwKTttLmR1bW15JiYobS5vcmRlcjx1fHxtLm9yZGVyPmgpJiZQYWUocixwLGYpfSl9KX1vKG4sInNjYW4iKTtmdW5jdGlvbiBpKGEscyl7dmFyIGw9LTEsdSxoPTA7cmV0dXJuIEFlKHMsZnVuY3Rpb24oZixkKXtpZih0Lm5vZGUoZikuZHVtbXk9PT0iYm9yZGVyIil7dmFyIHA9dC5wcmVkZWNlc3NvcnMoZik7cC5sZW5ndGgmJih1PXQubm9kZShwWzBdKS5vcmRlcixuKHMsaCxkLGwsdSksaD1kLGw9dSl9bihzLGgscy5sZW5ndGgsdSxhLmxlbmd0aCl9KSxzfXJldHVybiBvKGksInZpc2l0TGF5ZXIiKSxYcihlLGkpLHJ9ZnVuY3Rpb24gSk9lKHQsZSl7aWYodC5ub2RlKGUpLmR1bW15KXJldHVybiBscyh0LnByZWRlY2Vzc29ycyhlKSxmdW5jdGlvbihyKXtyZXR1cm4gdC5ub2RlKHIpLmR1bW15fSl9ZnVuY3Rpb24gUGFlKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn12YXIgaT10W2VdO2l8fCh0W2VdPWk9e30pLGlbcl09ITB9ZnVuY3Rpb24gZVBlKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn1yZXR1cm4hIXRbZV0mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0W2VdLHIpfWZ1bmN0aW9uIHRQZSh0LGUscixuKXt2YXIgaT17fSxhPXt9LHM9e307cmV0dXJuIEFlKGUsZnVuY3Rpb24obCl7QWUobCxmdW5jdGlvbih1LGgpe2lbdV09dSxhW3VdPXUsc1t1XT1ofSl9KSxBZShlLGZ1bmN0aW9uKGwpe3ZhciB1PS0xO0FlKGwsZnVuY3Rpb24oaCl7dmFyIGY9bihoKTtpZihmLmxlbmd0aCl7Zj1fYyhmLGZ1bmN0aW9uKHkpe3JldHVybiBzW3ldfSk7Zm9yKHZhciBkPShmLmxlbmd0aC0xKS8yLHA9TWF0aC5mbG9vcihkKSxtPU1hdGguY2VpbChkKTtwPD1tOysrcCl7dmFyIGc9ZltwXTthW2hdPT09aCYmdTxzW2ddJiYhZVBlKHIsaCxnKSYmKGFbZ109aCxhW2hdPWlbaF09aVtnXSx1PXNbZ10pfX19KX0pLHtyb290OmksYWxpZ246YX19ZnVuY3Rpb24gclBlKHQsZSxyLG4saSl7dmFyIGE9e30scz1uUGUodCxlLHIsaSksbD1pPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIHUoZCxwKXtmb3IodmFyIG09cy5ub2RlcygpLGc9bS5wb3AoKSx5PXt9O2c7KXlbZ10/ZChnKTooeVtnXT0hMCxtLnB1c2goZyksbT1tLmNvbmNhdChwKGcpKSksZz1tLnBvcCgpfW8odSwiaXRlcmF0ZSIpO2Z1bmN0aW9uIGgoZCl7YVtkXT1zLmluRWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKHAsbSl7cmV0dXJuIE1hdGgubWF4KHAsYVttLnZdK3MuZWRnZShtKSl9LDApfW8oaCwicGFzczEiKTtmdW5jdGlvbiBmKGQpe3ZhciBwPXMub3V0RWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKGcseSl7cmV0dXJuIE1hdGgubWluKGcsYVt5LnddLXMuZWRnZSh5KSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksbT10Lm5vZGUoZCk7cCE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbS5ib3JkZXJUeXBlIT09bCYmKGFbZF09TWF0aC5tYXgoYVtkXSxwKSl9cmV0dXJuIG8oZiwicGFzczIiKSx1KGgscy5wcmVkZWNlc3NvcnMuYmluZChzKSksdShmLHMuc3VjY2Vzc29ycy5iaW5kKHMpKSxBZShuLGZ1bmN0aW9uKGQpe2FbZF09YVtyW2RdXX0pLGF9ZnVuY3Rpb24gblBlKHQsZSxyLG4pe3ZhciBpPW5ldyBzbixhPXQuZ3JhcGgoKSxzPW9QZShhLm5vZGVzZXAsYS5lZGdlc2VwLG4pO3JldHVybiBBZShlLGZ1bmN0aW9uKGwpe3ZhciB1O0FlKGwsZnVuY3Rpb24oaCl7dmFyIGY9cltoXTtpZihpLnNldE5vZGUoZiksdSl7dmFyIGQ9clt1XSxwPWkuZWRnZShkLGYpO2kuc2V0RWRnZShkLGYsTWF0aC5tYXgocyh0LGgsdSkscHx8MCkpfXU9aH0pfSksaX1mdW5jdGlvbiBpUGUodCxlKXtyZXR1cm4gS2QoYnIoZSksZnVuY3Rpb24ocil7dmFyIG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBtUihyLGZ1bmN0aW9uKGEscyl7dmFyIGw9bFBlKHQscykvMjtuPU1hdGgubWF4KGErbCxuKSxpPU1hdGgubWluKGEtbCxpKX0pLG4taX0pfWZ1bmN0aW9uIGFQZSh0LGUpe3ZhciByPWJyKGUpLG49TmwociksaT0kcyhyKTtBZShbInUiLCJkIl0sZnVuY3Rpb24oYSl7QWUoWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3ZhciBsPWErcyx1PXRbbF0saDtpZih1IT09ZSl7dmFyIGY9YnIodSk7aD1zPT09ImwiP24tTmwoZik6aS0kcyhmKSxoJiYodFtsXT1qZCh1LGZ1bmN0aW9uKGQpe3JldHVybiBkK2h9KSl9fSl9KX1mdW5jdGlvbiBzUGUodCxlKXtyZXR1cm4gamQodC51bCxmdW5jdGlvbihyLG4pe2lmKGUpcmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXVtuXTt2YXIgaT1fYyhKZSh0LG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gQmFlKHQpe3ZhciBlPW9mKHQpLHI9SGgoUU9lKHQsZSksWk9lKHQsZSkpLG49e30saTtBZShbInUiLCJkIl0sZnVuY3Rpb24ocyl7aT1zPT09InUiP2U6YnIoZSkucmV2ZXJzZSgpLEFlKFsibCIsInIiXSxmdW5jdGlvbihsKXtsPT09InIiJiYoaT1KZShpLGZ1bmN0aW9uKGQpe3JldHVybiBicihkKS5yZXZlcnNlKCl9KSk7dmFyIHU9KHM9PT0idSI/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLGg9dFBlKHQsaSxyLHUpLGY9clBlKHQsaSxoLnJvb3QsaC5hbGlnbixsPT09InIiKTtsPT09InIiJiYoZj1qZChmLGZ1bmN0aW9uKGQpe3JldHVybi1kfSkpLG5bcytsXT1mfSl9KTt2YXIgYT1pUGUodCxuKTtyZXR1cm4gYVBlKG4sYSksc1BlKG4sdC5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiBvUGUodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGksYSl7dmFyIHM9bi5ub2RlKGkpLGw9bi5ub2RlKGEpLHU9MCxoO2lmKHUrPXMud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywibGFiZWxwb3MiKSlzd2l0Y2gocy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9LXMud2lkdGgvMjticmVhaztjYXNlInIiOmg9cy53aWR0aC8yO2JyZWFrfWlmKGgmJih1Kz1yP2g6LWgpLGg9MCx1Kz0ocy5kdW1teT9lOnQpLzIsdSs9KGwuZHVtbXk/ZTp0KS8yLHUrPWwud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCwibGFiZWxwb3MiKSlzd2l0Y2gobC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9bC53aWR0aC8yO2JyZWFrO2Nhc2UiciI6aD0tbC53aWR0aC8yO2JyZWFrfXJldHVybiBoJiYodSs9cj9oOi1oKSxoPTAsdX19ZnVuY3Rpb24gbFBlKHQsZSl7cmV0dXJuIHQubm9kZShlKS53aWR0aH12YXIgRmFlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtXbygpO0xjKCk7byhRT2UsImZpbmRUeXBlMUNvbmZsaWN0cyIpO28oWk9lLCJmaW5kVHlwZTJDb25mbGljdHMiKTtvKEpPZSwiZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZSIpO28oUGFlLCJhZGRDb25mbGljdCIpO28oZVBlLCJoYXNDb25mbGljdCIpO28odFBlLCJ2ZXJ0aWNhbEFsaWdubWVudCIpO28oclBlLCJob3Jpem9udGFsQ29tcGFjdGlvbiIpO28oblBlLCJidWlsZEJsb2NrR3JhcGgiKTtvKGlQZSwiZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQiKTtvKGFQZSwiYWxpZ25Db29yZGluYXRlcyIpO28oc1BlLCJiYWxhbmNlIik7byhCYWUsInBvc2l0aW9uWCIpO28ob1BlLCJzZXAiKTtvKGxQZSwid2lkdGgiKX0pO2Z1bmN0aW9uICRhZSh0KXt0PXBrKHQpLGNQZSh0KSxnUihCYWUodCksZnVuY3Rpb24oZSxyKXt0Lm5vZGUocikueD1lfSl9ZnVuY3Rpb24gY1BlKHQpe3ZhciBlPW9mKHQpLHI9dC5ncmFwaCgpLnJhbmtzZXAsbj0wO0FlKGUsZnVuY3Rpb24oaSl7dmFyIGE9JHMoSmUoaSxmdW5jdGlvbihzKXtyZXR1cm4gdC5ub2RlKHMpLmhlaWdodH0pKTtBZShpLGZ1bmN0aW9uKHMpe3Qubm9kZShzKS55PW4rYS8yfSksbis9YStyfSl9dmFyIHphZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7TGMoKTtGYWUoKTtvKCRhZSwicG9zaXRpb24iKTtvKGNQZSwicG9zaXRpb25ZIil9KTtmdW5jdGlvbiBHMih0LGUpe3ZhciByPWUmJmUuZGVidWdUaW1pbmc/TWllOklpZTtyKCJsYXlvdXQiLCgpPT57dmFyIG49cigiICBidWlsZExheW91dEdyYXBoIiwoKT0+YlBlKHQpKTtyKCIgIHJ1bkxheW91dCIsKCk9PnVQZShuLHIpKSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLCgpPT5oUGUodCxuKSl9KX1mdW5jdGlvbiB1UGUodCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKCk9PlRQZSh0KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKCk9PkxQZSh0KSksZSgiICAgIGFjeWNsaWMiLCgpPT5DaWUodCkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoKT0+dWFlKHQpKSxlKCIgICAgcmFuayIsKCk9PlhSKHBrKHQpKSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLCgpPT53UGUodCkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoKT0+UmllKHQpKSxlKCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLCgpPT5mYWUodCkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKCk9PkxpZSh0KSksZSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLCgpPT5rUGUodCkpLGUoIiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzIiwoKT0+RVBlKHQpKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKCk9PlVpZSh0KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoKT0+SWFlKHQpKSxlKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLCgpPT5QaWUodCkpLGUoIiAgICBvcmRlciIsKCk9Pk5hZSh0KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKCk9PlJQZSh0KSksZSgiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLCgpPT4kaWUodCkpLGUoIiAgICBwb3NpdGlvbiIsKCk9PiRhZSh0KSksZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIiwoKT0+TlBlKHQpKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLCgpPT5EUGUodCkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKCk9PkhpZSh0KSksZSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIiwoKT0+QVBlKHQpKSxlKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLCgpPT56aWUodCkpLGUoIiAgICB0cmFuc2xhdGVHcmFwaCIsKCk9PlNQZSh0KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoKT0+Q1BlKHQpKSxlKCIgICAgcmV2ZXJzZVBvaW50cyIsKCk9Pl9QZSh0KSksZSgiICAgIGFjeWNsaWMudW5kbyIsKCk9PkFpZSh0KSl9ZnVuY3Rpb24gaFBlKHQsZSl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKSxpPWUubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LGUuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpLGk9ZS5lZGdlKHIpO24ucG9pbnRzPWkucG9pbnRzLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJ4IikmJihuLng9aS54LG4ueT1pLnkpfSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9ZnVuY3Rpb24gYlBlKHQpe3ZhciBlPW5ldyBzbih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHI9WlIodC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChIaCh7fSxkUGUsUVIocixmUGUpLFFkKHIscFBlKSkpLEFlKHQubm9kZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1aUih0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLG5mKFFSKGksbVBlKSxnUGUpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1aUih0LmVkZ2UobikpO2Uuc2V0RWRnZShuLEhoKHt9LHZQZSxRUihpLHlQZSksUWQoaSx4UGUpKSl9KSxlfWZ1bmN0aW9uIFRQZSh0KXt2YXIgZT10LmdyYXBoKCk7ZS5yYW5rc2VwLz0yLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYoZS5yYW5rZGlyPT09IlRCInx8ZS5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIHdQZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKHIud2lkdGgmJnIuaGVpZ2h0KXt2YXIgbj10Lm5vZGUoZS52KSxpPXQubm9kZShlLncpLGE9e3Jhbms6KGkucmFuay1uLnJhbmspLzIrbi5yYW5rLGV9O0RjKHQsImVkZ2UtcHJveHkiLGEsIl9lcCIpfX0pfWZ1bmN0aW9uIGtQZSh0KXt2YXIgZT0wO0FlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUocik7bi5ib3JkZXJUb3AmJihuLm1pblJhbms9dC5ub2RlKG4uYm9yZGVyVG9wKS5yYW5rLG4ubWF4UmFuaz10Lm5vZGUobi5ib3JkZXJCb3R0b20pLnJhbmssZT0kcyhlLG4ubWF4UmFuaykpfSksdC5ncmFwaCgpLm1heFJhbms9ZX1mdW5jdGlvbiBFUGUodCl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtyLmR1bW15PT09ImVkZ2UtcHJveHkiJiYodC5lZGdlKHIuZSkubGFiZWxSYW5rPXIucmFuayx0LnJlbW92ZU5vZGUoZSkpfSl9ZnVuY3Rpb24gU1BlKHQpe3ZhciBlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyPTAsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaT0wLGE9dC5ncmFwaCgpLHM9YS5tYXJnaW54fHwwLGw9YS5tYXJnaW55fHwwO2Z1bmN0aW9uIHUoaCl7dmFyIGY9aC54LGQ9aC55LHA9aC53aWR0aCxtPWguaGVpZ2h0O2U9TWF0aC5taW4oZSxmLXAvMikscj1NYXRoLm1heChyLGYrcC8yKSxuPU1hdGgubWluKG4sZC1tLzIpLGk9TWF0aC5tYXgoaSxkK20vMil9byh1LCJnZXRFeHRyZW1lcyIpLEFlKHQubm9kZXMoKSxmdW5jdGlvbihoKXt1KHQubm9kZShoKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5lZGdlKGgpO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJ4IikmJnUoZil9KSxlLT1zLG4tPWwsQWUodC5ub2RlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQubm9kZShoKTtmLngtPWUsZi55LT1ufSksQWUodC5lZGdlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQuZWRnZShoKTtBZShmLnBvaW50cyxmdW5jdGlvbihkKXtkLngtPWUsZC55LT1ufSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsIngiKSYmKGYueC09ZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsInkiKSYmKGYueS09bil9KSxhLndpZHRoPXItZStzLGEuaGVpZ2h0PWktbitsfWZ1bmN0aW9uIENQZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49dC5ub2RlKGUudiksaT10Lm5vZGUoZS53KSxhLHM7ci5wb2ludHM/KGE9ci5wb2ludHNbMF0scz1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxhPWkscz1uKSxyLnBvaW50cy51bnNoaWZ0KFJSKG4sYSkpLHIucG9pbnRzLnB1c2goUlIoaSxzKSl9KX1mdW5jdGlvbiBBUGUodCl7QWUodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIF9QZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO3IucmV2ZXJzZWQmJnIucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIERQZSh0KXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7aWYodC5jaGlsZHJlbihlKS5sZW5ndGgpe3ZhciByPXQubm9kZShlKSxuPXQubm9kZShyLmJvcmRlclRvcCksaT10Lm5vZGUoci5ib3JkZXJCb3R0b20pLGE9dC5ub2RlKG1hKHIuYm9yZGVyTGVmdCkpLHM9dC5ub2RlKG1hKHIuYm9yZGVyUmlnaHQpKTtyLndpZHRoPU1hdGguYWJzKHMueC1hLngpLHIuaGVpZ2h0PU1hdGguYWJzKGkueS1uLnkpLHIueD1hLngrci53aWR0aC8yLHIueT1uLnkrci5oZWlnaHQvMn19KSxBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dC5ub2RlKGUpLmR1bW15PT09ImJvcmRlciImJnQucmVtb3ZlTm9kZShlKX0pfWZ1bmN0aW9uIExQZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgcj10Lm5vZGUoZS52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KX1mdW5jdGlvbiBSUGUodCl7dmFyIGU9b2YodCk7QWUoZSxmdW5jdGlvbihyKXt2YXIgbj0wO0FlKHIsZnVuY3Rpb24oaSxhKXt2YXIgcz10Lm5vZGUoaSk7cy5vcmRlcj1hK24sQWUocy5zZWxmRWRnZXMsZnVuY3Rpb24obCl7RGModCwic2VsZmVkZ2UiLHt3aWR0aDpsLmxhYmVsLndpZHRoLGhlaWdodDpsLmxhYmVsLmhlaWdodCxyYW5rOnMucmFuayxvcmRlcjphKyArK24sZTpsLmUsbGFiZWw6bC5sYWJlbH0sIl9zZSIpfSksZGVsZXRlIHMuc2VsZkVkZ2VzfSl9KX1mdW5jdGlvbiBOUGUodCl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtpZihyLmR1bW15PT09InNlbGZlZGdlIil7dmFyIG49dC5ub2RlKHIuZS52KSxpPW4ueCtuLndpZHRoLzIsYT1uLnkscz1yLngtaSxsPW4uaGVpZ2h0LzI7dC5zZXRFZGdlKHIuZSxyLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksci5sYWJlbC5wb2ludHM9W3t4OmkrMipzLzMseTphLWx9LHt4OmkrNSpzLzYseTphLWx9LHt4Omkrcyx5OmF9LHt4OmkrNSpzLzYseTphK2x9LHt4OmkrMipzLzMseTphK2x9XSxyLmxhYmVsLng9ci54LHIubGFiZWwueT1yLnl9fSl9ZnVuY3Rpb24gUVIodCxlKXtyZXR1cm4gamQoUWQodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIFpSKHQpe3ZhciBlPXt9O3JldHVybiBBZSh0LGZ1bmN0aW9uKHIsbil7ZVtuLnRvTG93ZXJDYXNlKCldPXJ9KSxlfXZhciBmUGUsZFBlLHBQZSxtUGUsZ1BlLHlQZSx2UGUseFBlLEdhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7V28oKTtCaWUoKTtWaWUoKTtMUigpO1BSKCk7alIoKTtkYWUoKTtNYWUoKTtPYWUoKTt6YWUoKTtMYygpO28oRzIsImxheW91dCIpO28odVBlLCJydW5MYXlvdXQiKTtvKGhQZSwidXBkYXRlSW5wdXRHcmFwaCIpO2ZQZT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sZFBlPXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LHBQZT1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLG1QZT1bIndpZHRoIiwiaGVpZ2h0Il0sZ1BlPXt3aWR0aDowLGhlaWdodDowfSx5UGU9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sdlBlPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0seFBlPVsibGFiZWxwb3MiXTtvKGJQZSwiYnVpbGRMYXlvdXRHcmFwaCIpO28oVFBlLCJtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIik7byh3UGUsImluamVjdEVkZ2VMYWJlbFByb3hpZXMiKTtvKGtQZSwiYXNzaWduUmFua01pbk1heCIpO28oRVBlLCJyZW1vdmVFZGdlTGFiZWxQcm94aWVzIik7byhTUGUsInRyYW5zbGF0ZUdyYXBoIik7byhDUGUsImFzc2lnbk5vZGVJbnRlcnNlY3RzIik7byhBUGUsImZpeHVwRWRnZUxhYmVsQ29vcmRzIik7byhfUGUsInJldmVyc2VQb2ludHNGb3JSZXZlcnNlZEVkZ2VzIik7byhEUGUsInJlbW92ZUJvcmRlck5vZGVzIik7byhMUGUsInJlbW92ZVNlbGZFZGdlcyIpO28oUlBlLCJpbnNlcnRTZWxmRWRnZXMiKTtvKE5QZSwicG9zaXRpb25TZWxmRWRnZXMiKTtvKFFSLCJzZWxlY3ROdW1iZXJBdHRycyIpO28oWlIsImNhbm9uaWNhbGl6ZSIpfSk7dmFyIEpSPU4oKCk9PnsidXNlIHN0cmljdCI7TFIoKTtHYWUoKTtQUigpO2pSKCl9KTtmdW5jdGlvbiBxbyh0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczpNUGUodCksZWRnZXM6SVBlKHQpfTtyZXR1cm4gbXIodC5ncmFwaCgpKXx8KGUudmFsdWU9YW4odC5ncmFwaCgpKSksZX1mdW5jdGlvbiBNUGUodCl7cmV0dXJuIEplKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSksbj10LnBhcmVudChlKSxpPXt2OmV9O3JldHVybiBtcihyKXx8KGkudmFsdWU9ciksbXIobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gSVBlKHQpe3JldHVybiBKZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49e3Y6ZS52LHc6ZS53fTtyZXR1cm4gbXIoZS5uYW1lKXx8KG4ubmFtZT1lLm5hbWUpLG1yKHIpfHwobi52YWx1ZT1yKSxufSl9dmFyIGVOPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtoaygpO28ocW8sIndyaXRlIik7byhNUGUsIndyaXRlTm9kZXMiKTtvKElQZSwid3JpdGVFZGdlcyIpfSk7dmFyIFRyLHRwLEhhZSxXYWUsdmssT1BlLHFhZSxZYWUsUFBlLFltLFVhZSxYYWUsamFlLEthZSxRYWUsWmFlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtXbygpO2VOKCk7VHI9bmV3IE1hcCx0cD1uZXcgTWFwLEhhZT1uZXcgTWFwLFdhZT1vKCgpPT57dHAuY2xlYXIoKSxIYWUuY2xlYXIoKSxUci5jbGVhcigpfSwiY2xlYXIiKSx2az1vKCh0LGUpPT57bGV0IHI9dHAuZ2V0KGUpfHxbXTtyZXR1cm4gWC50cmFjZSgiSW4gaXNEZXNjZW5kYW50IixlLCIgIix0LCIgPSAiLHIuaW5jbHVkZXModCkpLHIuaW5jbHVkZXModCl9LCJpc0Rlc2NlbmRhbnQiKSxPUGU9bygodCxlKT0+e2xldCByPXRwLmdldChlKXx8W107cmV0dXJuIFguaW5mbygiRGVzY2VuZGFudHMgb2YgIixlLCIgaXMgIixyKSxYLmluZm8oIkVkZ2UgaXMgIix0KSx0LnY9PT1lfHx0Lnc9PT1lPyExOnI/ci5pbmNsdWRlcyh0LnYpfHx2ayh0LnYsZSl8fHZrKHQudyxlKXx8ci5pbmNsdWRlcyh0LncpOihYLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVzY2VuZGFudHMiKSwhMSl9LCJlZGdlSW5DbHVzdGVyIikscWFlPW8oKHQsZSxyLG4pPT57WC53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsdCwicm9vdCIsbiwiZGF0YSIsZS5ub2RlKHQpLG4pO2xldCBpPWUuY2hpbGRyZW4odCl8fFtdO3QhPT1uJiZpLnB1c2godCksWC53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIix0LCJub2RlcyIsaSksaS5mb3JFYWNoKGE9PntpZihlLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXFhZShhLGUscixuKTtlbHNle2xldCBzPWUubm9kZShhKTtYLmluZm8oImNwICIsYSwiIHRvICIsbiwiIHdpdGggcGFyZW50ICIsdCksci5zZXROb2RlKGEscyksbiE9PWUucGFyZW50KGEpJiYoWC53YXJuKCJTZXR0aW5nIHBhcmVudCIsYSxlLnBhcmVudChhKSksci5zZXRQYXJlbnQoYSxlLnBhcmVudChhKSkpLHQhPT1uJiZhIT09dD8oWC5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLGEsdCksci5zZXRQYXJlbnQoYSx0KSk6KFguaW5mbygiSW4gY29weSAiLHQsInJvb3QiLG4sImRhdGEiLGUubm9kZSh0KSxuKSxYLmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixhLCJjbHVzdGVyIT09cm9vdElkIix0IT09biwibm9kZSE9PWNsdXN0ZXJJZCIsYSE9PXQpKTtsZXQgbD1lLmVkZ2VzKGEpO1guZGVidWcoIkNvcHlpbmcgRWRnZXMiLGwpLGwuZm9yRWFjaCh1PT57WC5pbmZvKCJFZGdlIix1KTtsZXQgaD1lLmVkZ2UodS52LHUudyx1Lm5hbWUpO1guaW5mbygiRWRnZSBkYXRhIixoLG4pO3RyeXtPUGUodSxuKT8oWC5pbmZvKCJDb3B5aW5nIGFzICIsdS52LHUudyxoLHUubmFtZSksci5zZXRFZGdlKHUudix1LncsaCx1Lm5hbWUpLFguaW5mbygibmV3R3JhcGggZWRnZXMgIixyLmVkZ2VzKCksci5lZGdlKHIuZWRnZXMoKVswXSkpKTpYLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLHUudiwiLS0+Iix1LncsIiByb290SWQ6ICIsbiwiIGNsdXN0ZXJJZDoiLHQpfWNhdGNoKGYpe1guZXJyb3IoZil9fSl9WC5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksZS5yZW1vdmVOb2RlKGEpfSl9LCJjb3B5IiksWWFlPW8oKHQsZSk9PntsZXQgcj1lLmNoaWxkcmVuKHQpLG49Wy4uLnJdO2ZvcihsZXQgaSBvZiByKUhhZS5zZXQoaSx0KSxuPVsuLi5uLC4uLllhZShpLGUpXTtyZXR1cm4gbn0sImV4dHJhY3REZXNjZW5kYW50cyIpLFBQZT1vKCh0LGUscik9PntsZXQgbj10LmVkZ2VzKCkuZmlsdGVyKHU9PnUudj09PWV8fHUudz09PWUpLGk9dC5lZGdlcygpLmZpbHRlcih1PT51LnY9PT1yfHx1Lnc9PT1yKSxhPW4ubWFwKHU9Pih7djp1LnY9PT1lP3I6dS52LHc6dS53PT09ZT9lOnUud30pKSxzPWkubWFwKHU9Pih7djp1LnYsdzp1Lnd9KSk7cmV0dXJuIGEuZmlsdGVyKHU9PnMuc29tZShoPT51LnY9PT1oLnYmJnUudz09PWgudykpfSwiZmluZENvbW1vbkVkZ2VzIiksWW09bygodCxlLHIpPT57bGV0IG49ZS5jaGlsZHJlbih0KTtpZihYLnRyYWNlKCJTZWFyY2hpbmcgY2hpbGRyZW4gb2YgaWQgIix0LG4pLG4ubGVuZ3RoPDEpcmV0dXJuIHQ7bGV0IGk7Zm9yKGxldCBhIG9mIG4pe2xldCBzPVltKGEsZSxyKSxsPVBQZShlLHIscyk7aWYocylpZihsLmxlbmd0aD4wKWk9cztlbHNlIHJldHVybiBzfXJldHVybiBpfSwiZmluZE5vbkNsdXN0ZXJDaGlsZCIpLFVhZT1vKHQ9PiFUci5oYXModCl8fCFUci5nZXQodCkuZXh0ZXJuYWxDb25uZWN0aW9ucz90OlRyLmhhcyh0KT9Uci5nZXQodCkuaWQ6dCwiZ2V0QW5jaG9ySWQiKSxYYWU9bygodCxlKT0+e2lmKCF0fHxlPjEwKXtYLmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTtyZXR1cm59ZWxzZSBYLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO3Qubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3QuY2hpbGRyZW4ocikubGVuZ3RoPjAmJihYLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsciwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLFltKHIsdCxyKSksdHAuc2V0KHIsWWFlKHIsdCkpLFRyLnNldChyLHtpZDpZbShyLHQsciksY2x1c3RlckRhdGE6dC5ub2RlKHIpfSkpfSksdC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5jaGlsZHJlbihyKSxpPXQuZWRnZXMoKTtuLmxlbmd0aD4wPyhYLmRlYnVnKCJDbHVzdGVyIGlkZW50aWZpZWQiLHIsdHApLGkuZm9yRWFjaChhPT57bGV0IHM9dmsoYS52LHIpLGw9dmsoYS53LHIpO3NebCYmKFgud2FybigiRWRnZTogIixhLCIgbGVhdmVzIGNsdXN0ZXIgIixyKSxYLndhcm4oIkRlc2NlbmRhbnRzIG9mIFhYWCAiLHIsIjogIix0cC5nZXQocikpLFRyLmdldChyKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX0pKTpYLmRlYnVnKCJOb3QgYSBjbHVzdGVyICIscix0cCl9KTtmb3IobGV0IHIgb2YgVHIua2V5cygpKXtsZXQgbj1Uci5nZXQocikuaWQsaT10LnBhcmVudChuKTtpIT09ciYmVHIuaGFzKGkpJiYhVHIuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJihUci5nZXQocikuaWQ9aSl9dC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5lZGdlKHIpO1gud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkocikpLFgud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKHIpKSk7bGV0IGk9ci52LGE9ci53O2lmKFgud2FybigiRml4IFhYWCIsVHIsImlkczoiLHIudixyLncsIlRyYW5zbGF0aW5nOiAiLFRyLmdldChyLnYpLCIgLS0tICIsVHIuZ2V0KHIudykpLFRyLmdldChyLnYpfHxUci5nZXQoci53KSl7aWYoWC53YXJuKCJGaXhpbmcgYW5kIHRyeWluZyAtIHJlbW92aW5nIFhYWCIsci52LHIudyxyLm5hbWUpLGk9VWFlKHIudiksYT1VYWUoci53KSx0LnJlbW92ZUVkZ2Uoci52LHIudyxyLm5hbWUpLGkhPT1yLnYpe2xldCBzPXQucGFyZW50KGkpO1RyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4uZnJvbUNsdXN0ZXI9ci52fWlmKGEhPT1yLncpe2xldCBzPXQucGFyZW50KGEpO1RyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4udG9DbHVzdGVyPXIud31YLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLGksYSxyLm5hbWUpLHQuc2V0RWRnZShpLGEsbixyLm5hbWUpfX0pLFgud2FybigiQWRqdXN0ZWQgR3JhcGgiLHFvKHQpKSxqYWUodCwwKSxYLnRyYWNlKFRyKX0sImFkanVzdENsdXN0ZXJzQW5kRWRnZXMiKSxqYWU9bygodCxlKT0+e2lmKFgud2FybigiZXh0cmFjdG9yIC0gIixlLHFvKHQpLHQuY2hpbGRyZW4oIkQiKSksZT4xMCl7WC5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IHI9dC5ub2RlcygpLG49ITE7Zm9yKGxldCBpIG9mIHIpe2xldCBhPXQuY2hpbGRyZW4oaSk7bj1ufHxhLmxlbmd0aD4wfWlmKCFuKXtYLmRlYnVnKCJEb25lLCBubyBub2RlIGhhcyBjaGlsZHJlbiIsdC5ub2RlcygpKTtyZXR1cm59WC5kZWJ1ZygiTm9kZXMgPSAiLHIsZSk7Zm9yKGxldCBpIG9mIHIpaWYoWC5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIixpLFRyLFRyLmhhcyhpKSYmIVRyLmdldChpKS5leHRlcm5hbENvbm5lY3Rpb25zLCF0LnBhcmVudChpKSx0Lm5vZGUoaSksdC5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixlKSwhVHIuaGFzKGkpKVguZGVidWcoIk5vdCBhIGNsdXN0ZXIiLGksZSk7ZWxzZSBpZighVHIuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJnQuY2hpbGRyZW4oaSkmJnQuY2hpbGRyZW4oaSkubGVuZ3RoPjApe1gud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixpLGUpO2xldCBzPXQuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7VHIuZ2V0KGkpPy5jbHVzdGVyRGF0YT8uZGlyJiYocz1Uci5nZXQoaSkuY2x1c3RlckRhdGEuZGlyLFgud2FybigiRml4aW5nIGRpciIsVHIuZ2V0KGkpLmNsdXN0ZXJEYXRhLmRpcixzKSk7bGV0IGw9bmV3IHNuKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cyxub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1gud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5Iixxbyh0KSkscWFlKGksdCxsLGkpLHQuc2V0Tm9kZShpLHtjbHVzdGVyTm9kZTohMCxpZDppLGNsdXN0ZXJEYXRhOlRyLmdldChpKS5jbHVzdGVyRGF0YSxsYWJlbDpUci5nZXQoaSkubGFiZWwsZ3JhcGg6bH0pLFgud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsaSwiKSIscW8obCkpLFguZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5Iixxbyh0KSl9ZWxzZSBYLndhcm4oIkNsdXN0ZXIgKiogIixpLCIgKipub3QgbWVldGluZyB0aGUgY3JpdGVyaWEgIWV4dGVybmFsQ29ubmVjdGlvbnM6IiwhVHIuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIXQucGFyZW50KGkpLCIgY2hpbGRyZW4gIix0LmNoaWxkcmVuKGkpJiZ0LmNoaWxkcmVuKGkpLmxlbmd0aD4wLHQuY2hpbGRyZW4oIkQiKSxlKSxYLmRlYnVnKFRyKTtyPXQubm9kZXMoKSxYLndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixyKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dC5ub2RlKGkpO1gud2FybigiIE5vdyBuZXh0IGxldmVsIixpLGEpLGE/LmNsdXN0ZXJOb2RlJiZqYWUoYS5ncmFwaCxlKzEpfX0sImV4dHJhY3RvciIpLEthZT1vKCh0LGUpPT57aWYoZS5sZW5ndGg9PT0wKXJldHVybltdO2xldCByPU9iamVjdC5hc3NpZ24oW10sZSk7cmV0dXJuIGUuZm9yRWFjaChuPT57bGV0IGk9dC5jaGlsZHJlbihuKSxhPUthZSh0LGkpO3I9Wy4uLnIsLi4uYV19KSxyfSwic29ydGVyIiksUWFlPW8odD0+S2FlKHQsdC5jaGlsZHJlbigpKSwic29ydE5vZGVzQnlIaWVyYXJjaHkiKX0pO3ZhciBlc2U9e307dXIoZXNlLHtyZW5kZXI6KCk9PkJQZX0pO3ZhciBKYWUsQlBlLHRzZT1OKCgpPT57InVzZSBzdHJpY3QiO0pSKCk7ZU4oKTtXbygpO0ZMKCk7RnQoKTtaYWUoKTttdygpO2F3KCk7QkwoKTt5dCgpO1IyKCk7R3QoKTtKYWU9byhhc3luYyh0LGUscixuLGksYSk9PntYLndhcm4oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6WEFYIixxbyhlKSxpKTtsZXQgcz1lLmdyYXBoKCkucmFua2RpcjtYLnRyYWNlKCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjoiLHMpO2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7ZS5ub2RlcygpP1guaW5mbygiUmVjdXJzaXZlIHJlbmRlciBYWFgiLGUubm9kZXMoKSk6WC5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLGUpLGUuZWRnZXMoKS5sZW5ndGg+MCYmWC5pbmZvKCJSZWN1cnNpdmUgZWRnZXMiLGUuZWRnZShlLmVkZ2VzKClbMF0pKTtsZXQgdT1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxoPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxmPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZD1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChlLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtpZihpIT09dm9pZCAwKXtsZXQgeD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkuY2x1c3RlckRhdGEpKTtYLnRyYWNlKGBTZXR0aW5nIGRhdGEgZm9yIHBhcmVudCBjbHVzdGVyIFhYWAogTm9kZS5pZCA9IGAseSxgCiBkYXRhPWAseC5oZWlnaHQsYApQYXJlbnQgY2x1c3RlcmAsaS5oZWlnaHQpLGUuc2V0Tm9kZShpLmlkLHgpLGUucGFyZW50KHkpfHwoWC50cmFjZSgiU2V0dGluZyBwYXJlbnQiLHksaS5pZCksZS5zZXRQYXJlbnQoeSxpLmlkLHgpKX1pZihYLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIit5KyI6ICIrSlNPTi5zdHJpbmdpZnkoZS5ub2RlKHkpKSksdj8uY2x1c3Rlck5vZGUpe1guaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIFhCWCIseSx2LndpZHRoLGUubm9kZSh5KSk7bGV0e3JhbmtzZXA6eCxub2Rlc2VwOmJ9PWUuZ3JhcGgoKTt2LmdyYXBoLnNldEdyYXBoKHsuLi52LmdyYXBoLmdyYXBoKCkscmFua3NlcDp4KzI1LG5vZGVzZXA6Yn0pO2xldCBUPWF3YWl0IEphZShkLHYuZ3JhcGgscixuLGUubm9kZSh5KSxhKSxTPVQuZWxlbTtLZSh2LFMpLHYuZGlmZj1ULmRpZmZ8fDAsWC5pbmZvKCJOZXcgY29tcG91bmQgbm9kZSBhZnRlciByZWN1cnNpdmUgcmVuZGVyIFhBWCIseSwid2lkdGgiLHYud2lkdGgsImhlaWdodCIsdi5oZWlnaHQpLHZlZShTLHYpfWVsc2UgZS5jaGlsZHJlbih5KS5sZW5ndGg+MD8oWC50cmFjZSgiQ2x1c3RlciAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWEJYIix5LHYuaWQsdix2LndpZHRoLCJHcmFwaDoiLGUpLFgudHJhY2UoWW0odi5pZCxlKSksVHIuc2V0KHYuaWQse2lkOlltKHYuaWQsZSksbm9kZTp2fSkpOihYLnRyYWNlKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYQVgiLHksZCxlLm5vZGUoeSkscyksYXdhaXQgQW0oZCxlLm5vZGUoeSkse2NvbmZpZzphLGRpcjpzfSkpfSkpLGF3YWl0IG8oYXN5bmMoKT0+e2xldCB5PWUuZWRnZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24odil7bGV0IHg9ZS5lZGdlKHYudix2Lncsdi5uYW1lKTtYLmluZm8oIkVkZ2UgIit2LnYrIiAtPiAiK3YudysiOiAiK0pTT04uc3RyaW5naWZ5KHYpKSxYLmluZm8oIkVkZ2UgIit2LnYrIiAtPiAiK3YudysiOiAiLHYsIiAiLEpTT04uc3RyaW5naWZ5KGUuZWRnZSh2KSkpLFguaW5mbygiRml4IixUciwiaWRzOiIsdi52LHYudywiVHJhbnNsYXRpbmc6ICIsVHIuZ2V0KHYudiksVHIuZ2V0KHYudykpLGF3YWl0IHV3KGYseCl9KTthd2FpdCBQcm9taXNlLmFsbCh5KX0sInByb2Nlc3NFZGdlcyIpKCksWC5pbmZvKCJHcmFwaCBiZWZvcmUgbGF5b3V0OiIsSlNPTi5zdHJpbmdpZnkocW8oZSkpKSxYLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBYWFgiKSxYLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyBYWFgiKSxYLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBYWFgiKSxHMihlKSxYLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLEpTT04uc3RyaW5naWZ5KHFvKGUpKSk7bGV0IG09MCx7c3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOmd9PUJ1KGEpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChRYWUoZSkubWFwKGFzeW5jIGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtpZihYLmluZm8oIlBvc2l0aW9uIFhCWCA9PiAiK3krIjogKCIrdi54LCIsIit2LnksIikgd2lkdGg6ICIsdi53aWR0aCwiIGhlaWdodDogIix2LmhlaWdodCksdj8uY2x1c3Rlck5vZGUpdi55Kz1nLFguaW5mbygiQSB0YWludGVkIGNsdXN0ZXIgbm9kZSBYQlgxIix5LHYuaWQsdi53aWR0aCx2LmhlaWdodCx2Lngsdi55LGUucGFyZW50KHkpKSxUci5nZXQodi5pZCkubm9kZT12LE0yKHYpO2Vsc2UgaWYoZS5jaGlsZHJlbih5KS5sZW5ndGg+MCl7WC5pbmZvKCJBIHB1cmUgY2x1c3RlciBub2RlIFhCWDEiLHksdi5pZCx2Lngsdi55LHYud2lkdGgsdi5oZWlnaHQsZS5wYXJlbnQoeSkpLHYuaGVpZ2h0Kz1nLGUubm9kZSh2LnBhcmVudElkKTtsZXQgeD12Py5wYWRkaW5nLzJ8fDAsYj12Py5sYWJlbEJCb3g/LmhlaWdodHx8MCxUPWIteHx8MDtYLmRlYnVnKCJPZmZzZXRZIixULCJsYWJlbEhlaWdodCIsYiwiaGFsZlBhZGRpbmciLHgpLGF3YWl0IENtKHUsdiksVHIuZ2V0KHYuaWQpLm5vZGU9dn1lbHNle2xldCB4PWUubm9kZSh2LnBhcmVudElkKTt2LnkrPWcvMixYLmluZm8oIkEgcmVndWxhciBub2RlIFhCWDEgLSB1c2luZyB0aGUgcGFkZGluZyIsdi5pZCwicGFyZW50Iix2LnBhcmVudElkLHYud2lkdGgsdi5oZWlnaHQsdi54LHYueSwib2Zmc2V0WSIsdi5vZmZzZXRZLCJwYXJlbnQiLHgseD8ub2Zmc2V0WSx2KSxNMih2KX19KSksZS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oeSl7bGV0IHY9ZS5lZGdlKHkpO1guaW5mbygiRWRnZSAiK3kudisiIC0+ICIreS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodiksdiksdi5wb2ludHMuZm9yRWFjaChTPT5TLnkrPWcvMik7bGV0IHg9ZS5ub2RlKHkudik7dmFyIGI9ZS5ub2RlKHkudyk7bGV0IFQ9ZncoaCx2LFRyLHIseCxiLG4pO2h3KHYsVCl9KSxlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih5KXtsZXQgdj1lLm5vZGUoeSk7WC5pbmZvKHksdi50eXBlLHYuZGlmZiksdi5pc0dyb3VwJiYobT12LmRpZmYpfSksWC53YXJuKCJSZXR1cm5pbmcgZnJvbSByZWN1cnNpdmUgcmVuZGVyIFhBWCIsbCxtKSx7ZWxlbTpsLGRpZmY6bX19LCJyZWN1cnNpdmVSZW5kZXIiKSxCUGU9byhhc3luYyh0LGUpPT57bGV0IHI9bmV3IHNuKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6dC5kaXJlY3Rpb24sbm9kZXNlcDp0LmNvbmZpZz8ubm9kZVNwYWNpbmd8fHQuY29uZmlnPy5mbG93Y2hhcnQ/Lm5vZGVTcGFjaW5nfHx0Lm5vZGVTcGFjaW5nLHJhbmtzZXA6dC5jb25maWc/LnJhbmtTcGFjaW5nfHx0LmNvbmZpZz8uZmxvd2NoYXJ0Py5yYW5rU3BhY2luZ3x8dC5yYW5rU3BhY2luZyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSksbj1lLnNlbGVjdCgiZyIpO2R3KG4sdC5tYXJrZXJzLHQudHlwZSx0LmRpYWdyYW1JZCkseGVlKCkseWVlKCksaGVlKCksV2FlKCksdC5ub2Rlcy5mb3JFYWNoKGE9PntyLnNldE5vZGUoYS5pZCx7Li4uYX0pLGEucGFyZW50SWQmJnIuc2V0UGFyZW50KGEuaWQsYS5wYXJlbnRJZCl9KSxYLmRlYnVnKCJFZGdlczoiLHQuZWRnZXMpLHQuZWRnZXMuZm9yRWFjaChhPT57aWYoYS5zdGFydD09PWEuZW5kKXtsZXQgcz1hLnN0YXJ0LGw9cysiLS0tIitzKyItLS0xIix1PXMrIi0tLSIrcysiLS0tMiIsaD1yLm5vZGUocyk7ci5zZXROb2RlKGwse2RvbUlkOmwsaWQ6bCxwYXJlbnRJZDpoLnBhcmVudElkLGxhYmVsU3R5bGU6IiIsbGFiZWw6IiIscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIiLHdpZHRoOjEwLGhlaWdodDoxMH0pLHIuc2V0UGFyZW50KGwsaC5wYXJlbnRJZCksci5zZXROb2RlKHUse2RvbUlkOnUsaWQ6dSxwYXJlbnRJZDpoLnBhcmVudElkLGxhYmVsU3R5bGU6IiIscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLGxhYmVsOiIiLHN0eWxlOiIiLHdpZHRoOjEwLGhlaWdodDoxMH0pLHIuc2V0UGFyZW50KHUsaC5wYXJlbnRJZCk7bGV0IGY9c3RydWN0dXJlZENsb25lKGEpLGQ9c3RydWN0dXJlZENsb25lKGEpLHA9c3RydWN0dXJlZENsb25lKGEpO2YubGFiZWw9IiIsZi5hcnJvd1R5cGVFbmQ9Im5vbmUiLGYuaWQ9cysiLWN5Y2xpYy1zcGVjaWFsLTEiLGQuYXJyb3dUeXBlU3RhcnQ9Im5vbmUiLGQuYXJyb3dUeXBlRW5kPSJub25lIixkLmlkPXMrIi1jeWNsaWMtc3BlY2lhbC1taWQiLHAubGFiZWw9IiIsaC5pc0dyb3VwJiYoZi5mcm9tQ2x1c3Rlcj1zLHAudG9DbHVzdGVyPXMpLHAuaWQ9cysiLWN5Y2xpYy1zcGVjaWFsLTIiLHAuYXJyb3dUeXBlU3RhcnQ9Im5vbmUiLHIuc2V0RWRnZShzLGwsZixzKyItY3ljbGljLXNwZWNpYWwtMCIpLHIuc2V0RWRnZShsLHUsZCxzKyItY3ljbGljLXNwZWNpYWwtMSIpLHIuc2V0RWRnZSh1LHMscCxzKyItY3ljPGxpYy1zcGVjaWFsLTIiKX1lbHNlIHIuc2V0RWRnZShhLnN0YXJ0LGEuZW5kLHsuLi5hfSxhLmlkKX0pLFgud2FybigiR3JhcGggYXQgZmlyc3Q6IixKU09OLnN0cmluZ2lmeShxbyhyKSkpLFhhZShyKSxYLndhcm4oIkdyYXBoIGFmdGVyIFhBWDoiLEpTT04uc3RyaW5naWZ5KHFvKHIpKSk7bGV0IGk9bWUoKTthd2FpdCBKYWUobixyLHQudHlwZSx0LmRpYWdyYW1JZCx2b2lkIDAsaSl9LCJyZW5kZXIiKX0pO3ZhciBWMix0TixGUGUsUmMsdWYscnA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUZWUoKTt5dCgpO1YyPXt9LHROPW8odD0+e2ZvcihsZXQgZSBvZiB0KVYyW2UubmFtZV09ZX0sInJlZ2lzdGVyTGF5b3V0TG9hZGVycyIpLEZQZT1vKCgpPT57dE4oW3tuYW1lOiJkYWdyZSIsbG9hZGVyOm8oYXN5bmMoKT0+YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHRzZSgpLGVzZSkpLCJsb2FkZXIiKX1dKX0sInJlZ2lzdGVyRGVmYXVsdExheW91dExvYWRlcnMiKTtGUGUoKTtSYz1vKGFzeW5jKHQsZSk9PntpZighKHQubGF5b3V0QWxnb3JpdGhtIGluIFYyKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGF5b3V0IGFsZ29yaXRobTogJHt0LmxheW91dEFsZ29yaXRobX1gKTtsZXQgcj1WMlt0LmxheW91dEFsZ29yaXRobV07cmV0dXJuKGF3YWl0IHIubG9hZGVyKCkpLnJlbmRlcih0LGUsYmVlLHthbGdvcml0aG06ci5hbGdvcml0aG19KX0sInJlbmRlciIpLHVmPW8oKHQ9IiIse2ZhbGxiYWNrOmU9ImRhZ3JlIn09e30pPT57aWYodCBpbiBWMilyZXR1cm4gdDtpZihlIGluIFYyKXJldHVybiBYLndhcm4oYExheW91dCBhbGdvcml0aG0gJHt0fSBpcyBub3QgcmVnaXN0ZXJlZC4gVXNpbmcgJHtlfSBhcyBmYWxsYmFjay5gKSxlO3Rocm93IG5ldyBFcnJvcihgQm90aCBsYXlvdXQgYWxnb3JpdGhtcyAke3R9IGFuZCAke2V9IGFyZSBub3QgcmVnaXN0ZXJlZC5gKX0sImdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG0iKX0pO3ZhciBZbywkUGUselBlLG5wPU4oKCk9PnsidXNlIHN0cmljdCI7eGkoKTt5dCgpO1lvPW8oKHQsZSxyLG4pPT57dC5hdHRyKCJjbGFzcyIscik7bGV0e3dpZHRoOmksaGVpZ2h0OmEseDpzLHk6bH09JFBlKHQsZSk7Zm4odCxhLGksbik7bGV0IHU9elBlKHMsbCxpLGEsZSk7dC5hdHRyKCJ2aWV3Qm94Iix1KSxYLmRlYnVnKGB2aWV3Qm94IGNvbmZpZ3VyZWQ6ICR7dX0gd2l0aCBwYWRkaW5nOiAke2V9YCl9LCJzZXR1cFZpZXdQb3J0Rm9yU1ZHIiksJFBlPW8oKHQsZSk9PntsZXQgcj10Lm5vZGUoKT8uZ2V0QkJveCgpfHx7d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfTtyZXR1cm57d2lkdGg6ci53aWR0aCtlKjIsaGVpZ2h0OnIuaGVpZ2h0K2UqMix4OnIueCx5OnIueX19LCJjYWxjdWxhdGVEaW1lbnNpb25zV2l0aFBhZGRpbmciKSx6UGU9bygodCxlLHIsbixpKT0+YCR7dC1pfSAke2UtaX0gJHtyfSAke259YCwiY3JlYXRlVmlld0JveCIpfSk7dmFyIEdQZSxWUGUscnNlLG5zZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R3QoKTt5dCgpO1NtKCk7cnAoKTtucCgpO2VyKCk7R1BlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksVlBlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpO2xldHtzZWN1cml0eUxldmVsOmksZmxvd2NoYXJ0OmEsbGF5b3V0OnN9PW1lKCksbDtpPT09InNhbmRib3giJiYobD1HZSgiI2kiK2UpKTtsZXQgdT1pPT09InNhbmRib3giP2wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7WC5kZWJ1ZygiQmVmb3JlIGdldERhdGE6ICIpO2xldCBoPW4uZGIuZ2V0RGF0YSgpO1guZGVidWcoIkRhdGE6ICIsaCk7bGV0IGY9d2MoZSxpKSxkPW4uZGIuZ2V0RGlyZWN0aW9uKCk7aC50eXBlPW4udHlwZSxoLmxheW91dEFsZ29yaXRobT11ZihzKSxoLmxheW91dEFsZ29yaXRobT09PSJkYWdyZSImJnM9PT0iZWxrIiYmWC53YXJuKCJmbG93Y2hhcnQtZWxrIHdhcyBtb3ZlZCB0byBhbiBleHRlcm5hbCBwYWNrYWdlIGluIE1lcm1haWQgdjExLiBQbGVhc2UgcmVmZXIgW3JlbGVhc2Ugbm90ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tZXJtYWlkLWpzL21lcm1haWQvcmVsZWFzZXMvdGFnL3YxMS4wLjApIGZvciBtb3JlIGRldGFpbHMuIFRoaXMgZGlhZ3JhbSB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGBkYWdyZWAgbGF5b3V0IGFzIGEgZmFsbGJhY2suIiksaC5kaXJlY3Rpb249ZCxoLm5vZGVTcGFjaW5nPWE/Lm5vZGVTcGFjaW5nfHw1MCxoLnJhbmtTcGFjaW5nPWE/LnJhbmtTcGFjaW5nfHw1MCxoLm1hcmtlcnM9WyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0saC5kaWFncmFtSWQ9ZSxYLmRlYnVnKCJSRUYxOiIsaCksYXdhaXQgUmMoaCxmKTtsZXQgcD1oLmNvbmZpZy5mbG93Y2hhcnQ/LmRpYWdyYW1QYWRkaW5nPz84O1Z0Lmluc2VydFRpdGxlKGYsImZsb3djaGFydFRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW58fDAsbi5kYi5nZXREaWFncmFtVGl0bGUoKSksWW8oZixwLCJmbG93Y2hhcnQiLGE/LnVzZU1heFdpZHRofHwhMSk7Zm9yKGxldCBtIG9mIGgubm9kZXMpe2xldCBnPUdlKGAjJHtlfSBbaWQ9IiR7bS5pZH0iXWApO2lmKCFnfHwhbS5saW5rKWNvbnRpbnVlO2xldCB5PXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKTt5LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixtLmNzc0NsYXNzZXMpLHkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxpPT09InNhbmRib3giP3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IiwiX3RvcCIpOm0ubGlua1RhcmdldCYmeS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG0ubGlua1RhcmdldCk7bGV0IHY9Zy5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4geX0sIjpmaXJzdC1jaGlsZCIpLHg9Zy5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTt4JiZ2LmFwcGVuZChmdW5jdGlvbigpe3JldHVybiB4Lm5vZGUoKX0pO2xldCBiPWcuc2VsZWN0KCIubGFiZWwiKTtiJiZ2LmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBiLm5vZGUoKX0pfX0sImRyYXciKSxyc2U9e2dldENsYXNzZXM6R1BlLGRyYXc6VlBlfX0pO3ZhciByTixuTixpc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyTj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oSHIsZXQsZ3QsS3Qpe2ZvcihndD1ndHx8e30sS3Q9SHIubGVuZ3RoO0t0LS07Z3RbSHJbS3RdXT1ldCk7cmV0dXJuIGd0fSwibyIpLGU9WzEsNF0scj1bMSwzXSxuPVsxLDVdLGk9WzEsOCw5LDEwLDExLDI3LDM0LDM2LDM4LDQ0LDYwLDg0LDg1LDg2LDg3LDg4LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTYsMTIxLDEyMiwxMjMsMTI0XSxhPVsyLDJdLHM9WzEsMTNdLGw9WzEsMTRdLHU9WzEsMTVdLGg9WzEsMTZdLGY9WzEsMjNdLGQ9WzEsMjVdLHA9WzEsMjZdLG09WzEsMjddLGc9WzEsNDldLHk9WzEsNDhdLHY9WzEsMjldLHg9WzEsMzBdLGI9WzEsMzFdLFQ9WzEsMzJdLFM9WzEsMzNdLHc9WzEsNDRdLEU9WzEsNDZdLF89WzEsNDJdLEM9WzEsNDddLEQ9WzEsNDNdLE89WzEsNTBdLFI9WzEsNDVdLGs9WzEsNTFdLEw9WzEsNTJdLEE9WzEsMzRdLEk9WzEsMzVdLE09WzEsMzZdLFA9WzEsMzddLEI9WzEsNTddLEY9WzEsOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQ0LDYwLDg0LDg1LDg2LDg3LDg4LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTYsMTIxLDEyMiwxMjMsMTI0XSx6PVsxLDYxXSwkPVsxLDYwXSxVPVsxLDYyXSxLPVs4LDksMTEsNzUsNzcsNzhdLGVlPVsxLDc4XSxZPVsxLDkxXSxjZT1bMSw5Nl0sWj1bMSw5NV0sdWU9WzEsOTJdLFE9WzEsODhdLGo9WzEsOTRdLG5lPVsxLDkwXSx0ZT1bMSw5N10saGU9WzEsOTNdLGxlPVsxLDk4XSxKPVsxLDg5XSxTZT1bOCw5LDEwLDExLDQwLDc1LDc3LDc4XSxzZT1bOCw5LDEwLDExLDQwLDQ2LDc1LDc3LDc4XSxhZT1bOCw5LDEwLDExLDI5LDQwLDQ0LDQ2LDQ4LDUwLDUyLDU0LDU2LDU4LDYwLDYzLDY1LDY3LDY4LDcwLDc1LDc3LDc4LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLE9lPVs4LDksMTEsNDQsNjAsNzUsNzcsNzgsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0seWU9WzQ0LDYwLDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLEJlPVsxLDEyMV0sSGU9WzEsMTIyXSx6ZT1bMSwxMjRdLExlPVsxLDEyM10sSWU9WzQ0LDYwLDYyLDc0LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLHhlPVsxLDEzM10scT1bMSwxNDddLGRlPVsxLDE0OF0saWU9WzEsMTQ5XSxvZT1bMSwxNTBdLFY9WzEsMTM1XSxUZT1bMSwxMzddLFc9WzEsMTQxXSxwZT1bMSwxNDJdLHZlPVsxLDE0M10sUGU9WzEsMTQ0XSxfZT1bMSwxNDVdLGJlPVsxLDE0Nl0sVmU9WzEsMTUxXSxEZT1bMSwxNTJdLHFlPVsxLDEzMV0sYXQ9WzEsMTMyXSxSdD1bMSwxMzldLHN0PVsxLDEzNF0sVWU9WzEsMTM4XSxjdD1bMSwxMzZdLFdlPVs4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDQsNjAsODQsODUsODYsODcsODgsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNiwxMjEsMTIyLDEyMywxMjRdLG90PVsxLDE1NF0sWXQ9WzEsMTU2XSxUdD1bOCw5LDExXSxNdD1bOCw5LDEwLDExLDE0LDQ0LDYwLDg5LDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0sYnQ9WzEsMTc2XSx1dD1bMSwxNzJdLFN0PVsxLDE3M10sZnQ9WzEsMTc3XSx2dD1bMSwxNzRdLG50PVsxLDE3NV0scG49Wzc3LDExNiwxMTldLGt0PVs4LDksMTAsMTEsMTIsMTQsMjcsMjksMzIsNDQsNjAsNzUsODQsODUsODYsODcsODgsODksOTAsMTA1LDEwOSwxMTEsMTE0LDExNSwxMTZdLE9uPVsxMCwxMDZdLHRuPVszMSw0OSw1MSw1Myw1NSw1Nyw2Miw2NCw2Niw2Nyw2OSw3MSwxMTYsMTE3LDExOF0sTXI9WzEsMjQ3XSxJcj1bMSwyNDVdLFBuPVsxLDI0OV0sRHQ9WzEsMjQzXSxDZT1bMSwyNDRdLHR0PVsxLDI0Nl0sQ3Q9WzEsMjQ4XSxncj1bMSwyNTBdLHJuPVsxLDI2OF0seW49WzgsOSwxMSwxMDZdLFpyPVs4LDksMTAsMTEsNjAsODQsMTA1LDEwNiwxMDksMTEwLDExMSwxMTJdLE9pPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdyYXBoQ29uZmlnOjQsZG9jdW1lbnQ6NSxsaW5lOjYsc3RhdGVtZW50OjcsU0VNSTo4LE5FV0xJTkU6OSxTUEFDRToxMCxFT0Y6MTEsR1JBUEg6MTIsTk9ESVI6MTMsRElSOjE0LEZpcnN0U3RtdFNlcGFyYXRvcjoxNSxlbmRpbmc6MTYsZW5kVG9rZW46MTcsc3BhY2VMaXN0OjE4LHNwYWNlTGlzdE5ld2xpbmU6MTksdmVydGV4U3RhdGVtZW50OjIwLHNlcGFyYXRvcjoyMSxzdHlsZVN0YXRlbWVudDoyMixsaW5rU3R5bGVTdGF0ZW1lbnQ6MjMsY2xhc3NEZWZTdGF0ZW1lbnQ6MjQsY2xhc3NTdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsc3ViZ3JhcGg6MjcsdGV4dE5vVGFnczoyOCxTUVM6MjksdGV4dDozMCxTUUU6MzEsZW5kOjMyLGRpcmVjdGlvbjozMyxhY2NfdGl0bGU6MzQsYWNjX3RpdGxlX3ZhbHVlOjM1LGFjY19kZXNjcjozNixhY2NfZGVzY3JfdmFsdWU6MzcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozOCxzaGFwZURhdGE6MzksU0hBUEVfREFUQTo0MCxsaW5rOjQxLG5vZGU6NDIsc3R5bGVkVmVydGV4OjQzLEFNUDo0NCx2ZXJ0ZXg6NDUsU1RZTEVfU0VQQVJBVE9SOjQ2LGlkU3RyaW5nOjQ3LERPVUJMRUNJUkNMRVNUQVJUOjQ4LERPVUJMRUNJUkNMRUVORDo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQ6NTgsIk5PREVfU1RSSU5HW2ZpZWxkXSI6NTksQ09MT046NjAsIk5PREVfU1RSSU5HW3ZhbHVlXSI6NjEsUElQRTo2MixDWUxJTkRFUlNUQVJUOjYzLENZTElOREVSRU5EOjY0LERJQU1PTkRfU1RBUlQ6NjUsRElBTU9ORF9TVE9QOjY2LFRBR0VORDo2NyxUUkFQU1RBUlQ6NjgsVFJBUEVORDo2OSxJTlZUUkFQU1RBUlQ6NzAsSU5WVFJBUEVORDo3MSxsaW5rU3RhdGVtZW50OjcyLGFycm93VGV4dDo3MyxURVNUU1RSOjc0LFNUQVJUX0xJTks6NzUsZWRnZVRleHQ6NzYsTElOSzo3NyxMSU5LX0lEOjc4LGVkZ2VUZXh0VG9rZW46NzksU1RSOjgwLE1EX1NUUjo4MSx0ZXh0VG9rZW46ODIsa2V5d29yZHM6ODMsU1RZTEU6ODQsTElOS1NUWUxFOjg1LENMQVNTREVGOjg2LENMQVNTOjg3LENMSUNLOjg4LERPV046ODksVVA6OTAsdGV4dE5vVGFnc1Rva2VuOjkxLHN0eWxlc09wdDo5MiwiaWRTdHJpbmdbdmVydGV4XSI6OTMsImlkU3RyaW5nW2NsYXNzXSI6OTQsQ0FMTEJBQ0tOQU1FOjk1LENBTExCQUNLQVJHUzo5NixIUkVGOjk3LExJTktfVEFSR0VUOjk4LCJTVFJbbGlua10iOjk5LCJTVFJbdG9vbHRpcF0iOjEwMCxhbHBoYU51bToxMDEsREVGQVVMVDoxMDIsbnVtTGlzdDoxMDMsSU5URVJQT0xBVEU6MTA0LE5VTToxMDUsQ09NTUE6MTA2LHN0eWxlOjEwNyxzdHlsZUNvbXBvbmVudDoxMDgsTk9ERV9TVFJJTkc6MTA5LFVOSVQ6MTEwLEJSS1Q6MTExLFBDVDoxMTIsaWRTdHJpbmdUb2tlbjoxMTMsTUlOVVM6MTE0LE1VTFQ6MTE1LFVOSUNPREVfVEVYVDoxMTYsVEVYVDoxMTcsVEFHU1RBUlQ6MTE4LEVER0VfVEVYVDoxMTksYWxwaGFOdW1Ub2tlbjoxMjAsZGlyZWN0aW9uX3RiOjEyMSxkaXJlY3Rpb25fYnQ6MTIyLGRpcmVjdGlvbl9ybDoxMjMsZGlyZWN0aW9uX2xyOjEyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDA6IlNIQVBFX0RBVEEiLDQ0OiJBTVAiLDQ2OiJTVFlMRV9TRVBBUkFUT1IiLDQ4OiJET1VCTEVDSVJDTEVTVEFSVCIsNDk6IkRPVUJMRUNJUkNMRUVORCIsNTA6IlBTIiw1MToiUEUiLDUyOiIoLSIsNTM6Ii0pIiw1NDoiU1RBRElVTVNUQVJUIiw1NToiU1RBRElVTUVORCIsNTY6IlNVQlJPVVRJTkVTVEFSVCIsNTc6IlNVQlJPVVRJTkVFTkQiLDU4OiJWRVJURVhfV0lUSF9QUk9QU19TVEFSVCIsNTk6Ik5PREVfU1RSSU5HW2ZpZWxkXSIsNjA6IkNPTE9OIiw2MToiTk9ERV9TVFJJTkdbdmFsdWVdIiw2MjoiUElQRSIsNjM6IkNZTElOREVSU1RBUlQiLDY0OiJDWUxJTkRFUkVORCIsNjU6IkRJQU1PTkRfU1RBUlQiLDY2OiJESUFNT05EX1NUT1AiLDY3OiJUQUdFTkQiLDY4OiJUUkFQU1RBUlQiLDY5OiJUUkFQRU5EIiw3MDoiSU5WVFJBUFNUQVJUIiw3MToiSU5WVFJBUEVORCIsNzQ6IlRFU1RTVFIiLDc1OiJTVEFSVF9MSU5LIiw3NzoiTElOSyIsNzg6IkxJTktfSUQiLDgwOiJTVFIiLDgxOiJNRF9TVFIiLDg0OiJTVFlMRSIsODU6IkxJTktTVFlMRSIsODY6IkNMQVNTREVGIiw4NzoiQ0xBU1MiLDg4OiJDTElDSyIsODk6IkRPV04iLDkwOiJVUCIsOTM6ImlkU3RyaW5nW3ZlcnRleF0iLDk0OiJpZFN0cmluZ1tjbGFzc10iLDk1OiJDQUxMQkFDS05BTUUiLDk2OiJDQUxMQkFDS0FSR1MiLDk3OiJIUkVGIiw5ODoiTElOS19UQVJHRVQiLDk5OiJTVFJbbGlua10iLDEwMDoiU1RSW3Rvb2x0aXBdIiwxMDI6IkRFRkFVTFQiLDEwNDoiSU5URVJQT0xBVEUiLDEwNToiTlVNIiwxMDY6IkNPTU1BIiwxMDk6Ik5PREVfU1RSSU5HIiwxMTA6IlVOSVQiLDExMToiQlJLVCIsMTEyOiJQQ1QiLDExNDoiTUlOVVMiLDExNToiTVVMVCIsMTE2OiJVTklDT0RFX1RFWFQiLDExNzoiVEVYVCIsMTE4OiJUQUdTVEFSVCIsMTE5OiJFREdFX1RFWFQiLDEyMToiZGlyZWN0aW9uX3RiIiwxMjI6ImRpcmVjdGlvbl9idCIsMTIzOiJkaXJlY3Rpb25fcmwiLDEyNDoiZGlyZWN0aW9uX2xyIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFs1LDBdLFs1LDJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFsxNiwyXSxbMTYsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE5LDJdLFsxOSwyXSxbMTksMV0sWzE5LDFdLFsxOCwyXSxbMTgsMV0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsOV0sWzcsNl0sWzcsNF0sWzcsMV0sWzcsMl0sWzcsMl0sWzcsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzM5LDJdLFszOSwxXSxbMjAsNF0sWzIwLDNdLFsyMCw0XSxbMjAsMl0sWzIwLDJdLFsyMCwxXSxbNDIsMV0sWzQyLDZdLFs0Miw1XSxbNDMsMV0sWzQzLDNdLFs0NSw0XSxbNDUsNF0sWzQ1LDZdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw4XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNl0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsMV0sWzQxLDJdLFs0MSwzXSxbNDEsM10sWzQxLDFdLFs0MSwzXSxbNDEsNF0sWzc2LDFdLFs3NiwyXSxbNzYsMV0sWzc2LDFdLFs3MiwxXSxbNzIsMl0sWzczLDNdLFszMCwxXSxbMzAsMl0sWzMwLDFdLFszMCwxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFsyOCwxXSxbMjgsMl0sWzI4LDFdLFsyOCwxXSxbMjQsNV0sWzI1LDVdLFsyNiwyXSxbMjYsNF0sWzI2LDNdLFsyNiw1XSxbMjYsM10sWzI2LDVdLFsyNiw1XSxbMjYsN10sWzI2LDJdLFsyNiw0XSxbMjYsMl0sWzI2LDRdLFsyNiw0XSxbMjYsNl0sWzIyLDVdLFsyMyw1XSxbMjMsNV0sWzIzLDldLFsyMyw5XSxbMjMsN10sWzIzLDddLFsxMDMsMV0sWzEwMywzXSxbOTIsMV0sWzkyLDNdLFsxMDcsMV0sWzEwNywyXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs3OSwxXSxbNzksMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFs0NywxXSxbNDcsMl0sWzEwMSwxXSxbMTAxLDJdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGV0LGd0LEt0LGx0LENuLGdlLFFmKXt2YXIgd2U9Z2UubGVuZ3RoLTE7c3dpdGNoKENuKXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoZ2Vbd2VdKXx8Z2Vbd2VdLmxlbmd0aD4wKSYmZ2Vbd2UtMV0ucHVzaChnZVt3ZV0pLHRoaXMuJD1nZVt3ZS0xXTticmVhaztjYXNlIDQ6Y2FzZSAxODM6dGhpcy4kPWdlW3dlXTticmVhaztjYXNlIDExOmx0LnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOmx0LnNldERpcmVjdGlvbihnZVt3ZS0xXSksdGhpcy4kPWdlW3dlLTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWdlW3dlLTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9bHQuYWRkU3ViR3JhcGgoZ2Vbd2UtNl0sZ2Vbd2UtMV0sZ2Vbd2UtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPWx0LmFkZFN1YkdyYXBoKGdlW3dlLTNdLGdlW3dlLTFdLGdlW3dlLTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD1sdC5hZGRTdWJHcmFwaCh2b2lkIDAsZ2Vbd2UtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1nZVt3ZV0udHJpbSgpLGx0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1nZVt3ZV0udHJpbSgpLGx0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9Z2Vbd2UtMV0rZ2Vbd2VdO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPWdlW3dlXTticmVhaztjYXNlIDQ1Omx0LmFkZFZlcnRleChnZVt3ZS0xXVtnZVt3ZS0xXS5sZW5ndGgtMV0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZ2Vbd2VdKSxsdC5hZGRMaW5rKGdlW3dlLTNdLnN0bXQsZ2Vbd2UtMV0sZ2Vbd2UtMl0pLHRoaXMuJD17c3RtdDpnZVt3ZS0xXSxub2RlczpnZVt3ZS0xXS5jb25jYXQoZ2Vbd2UtM10ubm9kZXMpfTticmVhaztjYXNlIDQ2Omx0LmFkZExpbmsoZ2Vbd2UtMl0uc3RtdCxnZVt3ZV0sZ2Vbd2UtMV0pLHRoaXMuJD17c3RtdDpnZVt3ZV0sbm9kZXM6Z2Vbd2VdLmNvbmNhdChnZVt3ZS0yXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDc6bHQuYWRkTGluayhnZVt3ZS0zXS5zdG10LGdlW3dlLTFdLGdlW3dlLTJdKSx0aGlzLiQ9e3N0bXQ6Z2Vbd2UtMV0sbm9kZXM6Z2Vbd2UtMV0uY29uY2F0KGdlW3dlLTNdLm5vZGVzKX07YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9e3N0bXQ6Z2Vbd2UtMV0sbm9kZXM6Z2Vbd2UtMV19O2JyZWFrO2Nhc2UgNDk6bHQuYWRkVmVydGV4KGdlW3dlLTFdW2dlW3dlLTFdLmxlbmd0aC0xXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxnZVt3ZV0pLHRoaXMuJD17c3RtdDpnZVt3ZS0xXSxub2RlczpnZVt3ZS0xXSxzaGFwZURhdGE6Z2Vbd2VdfTticmVhaztjYXNlIDUwOnRoaXMuJD17c3RtdDpnZVt3ZV0sbm9kZXM6Z2Vbd2VdfTticmVhaztjYXNlIDUxOnRoaXMuJD1bZ2Vbd2VdXTticmVhaztjYXNlIDUyOmx0LmFkZFZlcnRleChnZVt3ZS01XVtnZVt3ZS01XS5sZW5ndGgtMV0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZ2Vbd2UtNF0pLHRoaXMuJD1nZVt3ZS01XS5jb25jYXQoZ2Vbd2VdKTticmVhaztjYXNlIDUzOnRoaXMuJD1nZVt3ZS00XS5jb25jYXQoZ2Vbd2VdKTticmVhaztjYXNlIDU0OnRoaXMuJD1nZVt3ZV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9Z2Vbd2UtMl0sbHQuc2V0Q2xhc3MoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDU2OnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPWdlW3dlLTNdLGx0LmFkZFZlcnRleChnZVt3ZS0zXSxnZVt3ZS0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9Z2Vbd2UtNV0sbHQuYWRkVmVydGV4KGdlW3dlLTVdLGdlW3dlLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU5OnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDYwOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDYxOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYyOnRoaXMuJD1nZVt3ZS03XSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtN10sZ2Vbd2UtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW2dlW3dlLTVdLGdlW3dlLTNdXV0pKTticmVhaztjYXNlIDYzOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9Z2Vbd2UtM10sbHQuYWRkVmVydGV4KGdlW3dlLTNdLGdlW3dlLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWdlW3dlLTNdLGx0LmFkZFZlcnRleChnZVt3ZS0zXSxnZVt3ZS0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPWdlW3dlLTVdLGx0LmFkZFZlcnRleChnZVt3ZS01XSxnZVt3ZS0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWdlW3dlLTNdLGx0LmFkZFZlcnRleChnZVt3ZS0zXSxnZVt3ZS0xXSwib2RkIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9Z2Vbd2UtM10sbHQuYWRkVmVydGV4KGdlW3dlLTNdLGdlW3dlLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY5OnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDcwOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDcxOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWdlW3dlXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2VdKTticmVhaztjYXNlIDczOmdlW3dlLTFdLnRleHQ9Z2Vbd2VdLHRoaXMuJD1nZVt3ZS0xXTticmVhaztjYXNlIDc0OmNhc2UgNzU6Z2Vbd2UtMl0udGV4dD1nZVt3ZS0xXSx0aGlzLiQ9Z2Vbd2UtMl07YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9Z2Vbd2VdO2JyZWFrO2Nhc2UgNzc6dmFyIEVpPWx0LmRlc3RydWN0TGluayhnZVt3ZV0sZ2Vbd2UtMl0pO3RoaXMuJD17dHlwZTpFaS50eXBlLHN0cm9rZTpFaS5zdHJva2UsbGVuZ3RoOkVpLmxlbmd0aCx0ZXh0OmdlW3dlLTFdfTticmVhaztjYXNlIDc4OnZhciBFaT1sdC5kZXN0cnVjdExpbmsoZ2Vbd2VdLGdlW3dlLTJdKTt0aGlzLiQ9e3R5cGU6RWkudHlwZSxzdHJva2U6RWkuc3Ryb2tlLGxlbmd0aDpFaS5sZW5ndGgsdGV4dDpnZVt3ZS0xXSxpZDpnZVt3ZS0zXX07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpnZVt3ZS0xXS50ZXh0KyIiK2dlW3dlXSx0eXBlOmdlW3dlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0OmdlW3dlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDgyOnRoaXMuJD17dGV4dDpnZVt3ZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDgzOnZhciBFaT1sdC5kZXN0cnVjdExpbmsoZ2Vbd2VdKTt0aGlzLiQ9e3R5cGU6RWkudHlwZSxzdHJva2U6RWkuc3Ryb2tlLGxlbmd0aDpFaS5sZW5ndGh9O2JyZWFrO2Nhc2UgODQ6dmFyIEVpPWx0LmRlc3RydWN0TGluayhnZVt3ZV0pO3RoaXMuJD17dHlwZTpFaS50eXBlLHN0cm9rZTpFaS5zdHJva2UsbGVuZ3RoOkVpLmxlbmd0aCxpZDpnZVt3ZS0xXX07YnJlYWs7Y2FzZSA4NTp0aGlzLiQ9Z2Vbd2UtMV07YnJlYWs7Y2FzZSA4Njp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDg3OnRoaXMuJD17dGV4dDpnZVt3ZS0xXS50ZXh0KyIiK2dlW3dlXSx0eXBlOmdlW3dlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODg6dGhpcy4kPXt0ZXh0OmdlW3dlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDg5OmNhc2UgMTA0OnRoaXMuJD17dGV4dDpnZVt3ZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDEwMTp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDEwMjp0aGlzLiQ9e3RleHQ6Z2Vbd2UtMV0udGV4dCsiIitnZVt3ZV0sdHlwZTpnZVt3ZS0xXS50eXBlfTticmVhaztjYXNlIDEwMzp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDEwNTp0aGlzLiQ9Z2Vbd2UtNF0sbHQuYWRkQ2xhc3MoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDEwNjp0aGlzLiQ9Z2Vbd2UtNF0sbHQuc2V0Q2xhc3MoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDEwNzpjYXNlIDExNTp0aGlzLiQ9Z2Vbd2UtMV0sbHQuc2V0Q2xpY2tFdmVudChnZVt3ZS0xXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTA4OmNhc2UgMTE2OnRoaXMuJD1nZVt3ZS0zXSxsdC5zZXRDbGlja0V2ZW50KGdlW3dlLTNdLGdlW3dlLTJdKSxsdC5zZXRUb29sdGlwKGdlW3dlLTNdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMDk6dGhpcy4kPWdlW3dlLTJdLGx0LnNldENsaWNrRXZlbnQoZ2Vbd2UtMl0sZ2Vbd2UtMV0sZ2Vbd2VdKTticmVhaztjYXNlIDExMDp0aGlzLiQ9Z2Vbd2UtNF0sbHQuc2V0Q2xpY2tFdmVudChnZVt3ZS00XSxnZVt3ZS0zXSxnZVt3ZS0yXSksbHQuc2V0VG9vbHRpcChnZVt3ZS00XSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1nZVt3ZS0yXSxsdC5zZXRMaW5rKGdlW3dlLTJdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWdlW3dlLTRdLGx0LnNldExpbmsoZ2Vbd2UtNF0sZ2Vbd2UtMl0pLGx0LnNldFRvb2x0aXAoZ2Vbd2UtNF0sZ2Vbd2VdKTticmVhaztjYXNlIDExMzp0aGlzLiQ9Z2Vbd2UtNF0sbHQuc2V0TGluayhnZVt3ZS00XSxnZVt3ZS0yXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTE0OnRoaXMuJD1nZVt3ZS02XSxsdC5zZXRMaW5rKGdlW3dlLTZdLGdlW3dlLTRdLGdlW3dlXSksbHQuc2V0VG9vbHRpcChnZVt3ZS02XSxnZVt3ZS0yXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWdlW3dlLTFdLGx0LnNldExpbmsoZ2Vbd2UtMV0sZ2Vbd2VdKTticmVhaztjYXNlIDExODp0aGlzLiQ9Z2Vbd2UtM10sbHQuc2V0TGluayhnZVt3ZS0zXSxnZVt3ZS0yXSksbHQuc2V0VG9vbHRpcChnZVt3ZS0zXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1nZVt3ZS0zXSxsdC5zZXRMaW5rKGdlW3dlLTNdLGdlW3dlLTJdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMjA6dGhpcy4kPWdlW3dlLTVdLGx0LnNldExpbmsoZ2Vbd2UtNV0sZ2Vbd2UtNF0sZ2Vbd2VdKSxsdC5zZXRUb29sdGlwKGdlW3dlLTVdLGdlW3dlLTJdKTticmVhaztjYXNlIDEyMTp0aGlzLiQ9Z2Vbd2UtNF0sbHQuYWRkVmVydGV4KGdlW3dlLTJdLHZvaWQgMCx2b2lkIDAsZ2Vbd2VdKTticmVhaztjYXNlIDEyMjp0aGlzLiQ9Z2Vbd2UtNF0sbHQudXBkYXRlTGluayhbZ2Vbd2UtMl1dLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWdlW3dlLTRdLGx0LnVwZGF0ZUxpbmsoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDEyNDp0aGlzLiQ9Z2Vbd2UtOF0sbHQudXBkYXRlTGlua0ludGVycG9sYXRlKFtnZVt3ZS02XV0sZ2Vbd2UtMl0pLGx0LnVwZGF0ZUxpbmsoW2dlW3dlLTZdXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTI1OnRoaXMuJD1nZVt3ZS04XSxsdC51cGRhdGVMaW5rSW50ZXJwb2xhdGUoZ2Vbd2UtNl0sZ2Vbd2UtMl0pLGx0LnVwZGF0ZUxpbmsoZ2Vbd2UtNl0sZ2Vbd2VdKTticmVhaztjYXNlIDEyNjp0aGlzLiQ9Z2Vbd2UtNl0sbHQudXBkYXRlTGlua0ludGVycG9sYXRlKFtnZVt3ZS00XV0sZ2Vbd2VdKTticmVhaztjYXNlIDEyNzp0aGlzLiQ9Z2Vbd2UtNl0sbHQudXBkYXRlTGlua0ludGVycG9sYXRlKGdlW3dlLTRdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMjg6Y2FzZSAxMzA6dGhpcy4kPVtnZVt3ZV1dO2JyZWFrO2Nhc2UgMTI5OmNhc2UgMTMxOmdlW3dlLTJdLnB1c2goZ2Vbd2VdKSx0aGlzLiQ9Z2Vbd2UtMl07YnJlYWs7Y2FzZSAxMzM6dGhpcy4kPWdlW3dlLTFdK2dlW3dlXTticmVhaztjYXNlIDE4MTp0aGlzLiQ9Z2Vbd2VdO2JyZWFrO2Nhc2UgMTgyOnRoaXMuJD1nZVt3ZS0xXSsiIitnZVt3ZV07YnJlYWs7Y2FzZSAxODQ6dGhpcy4kPWdlW3dlLTFdKyIiK2dlW3dlXTticmVhaztjYXNlIDE4NTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAxODY6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMTg3OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDE4ODp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDk6ZSwxMDpyLDEyOm59LHsxOlszXX0sdChpLGEsezU6Nn0pLHs0OjcsOTplLDEwOnIsMTI6bn0sezQ6OCw5OmUsMTA6ciwxMjpufSx7MTM6WzEsOV0sMTQ6WzEsMTBdfSx7MTpbMiwxXSw2OjExLDc6MTIsODpzLDk6bCwxMDp1LDExOmgsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6ZiwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODQ6diw4NTp4LDg2OmIsODc6VCw4ODpTLDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMLDEyMTpBLDEyMjpJLDEyMzpNLDEyNDpQfSx0KGksWzIsOV0pLHQoaSxbMiwxMF0pLHQoaSxbMiwxMV0pLHs4OlsxLDU0XSw5OlsxLDU1XSwxMDpCLDE1OjUzLDE4OjU2fSx0KEYsWzIsM10pLHQoRixbMiw0XSksdChGLFsyLDVdKSx0KEYsWzIsNl0pLHQoRixbMiw3XSksdChGLFsyLDhdKSx7ODp6LDk6JCwxMTpVLDIxOjU4LDQxOjU5LDcyOjYzLDc1OlsxLDY0XSw3NzpbMSw2Nl0sNzg6WzEsNjVdfSx7ODp6LDk6JCwxMTpVLDIxOjY3fSx7ODp6LDk6JCwxMTpVLDIxOjY4fSx7ODp6LDk6JCwxMTpVLDIxOjY5fSx7ODp6LDk6JCwxMTpVLDIxOjcwfSx7ODp6LDk6JCwxMTpVLDIxOjcxfSx7ODp6LDk6JCwxMDpbMSw3Ml0sMTE6VSwyMTo3M30sdChGLFsyLDM2XSksezM1OlsxLDc0XX0sezM3OlsxLDc1XX0sdChGLFsyLDM5XSksdChLLFsyLDUwXSx7MTg6NzYsMzk6NzcsMTA6Qiw0MDplZX0pLHsxMDpbMSw3OV19LHsxMDpbMSw4MF19LHsxMDpbMSw4MV19LHsxMDpbMSw4Ml19LHsxNDpZLDQ0OmNlLDYwOlosODA6WzEsODZdLDg5OnVlLDk1OlsxLDgzXSw5NzpbMSw4NF0sMTAxOjg1LDEwNTpRLDEwNjpqLDEwOTpuZSwxMTE6dGUsMTE0OmhlLDExNTpsZSwxMTY6SiwxMjA6ODd9LHQoRixbMiwxODVdKSx0KEYsWzIsMTg2XSksdChGLFsyLDE4N10pLHQoRixbMiwxODhdKSx0KFNlLFsyLDUxXSksdChTZSxbMiw1NF0sezQ2OlsxLDk5XX0pLHQoc2UsWzIsNzJdLHsxMTM6MTEyLDI5OlsxLDEwMF0sNDQ6Zyw0ODpbMSwxMDFdLDUwOlsxLDEwMl0sNTI6WzEsMTAzXSw1NDpbMSwxMDRdLDU2OlsxLDEwNV0sNTg6WzEsMTA2XSw2MDp5LDYzOlsxLDEwN10sNjU6WzEsMTA4XSw2NzpbMSwxMDldLDY4OlsxLDExMF0sNzA6WzEsMTExXSw4OTp3LDEwMjpFLDEwNTpfLDEwNjpDLDEwOTpELDExMTpPLDExNDpSLDExNTprLDExNjpMfSksdChhZSxbMiwxODFdKSx0KGFlLFsyLDE0Ml0pLHQoYWUsWzIsMTQzXSksdChhZSxbMiwxNDRdKSx0KGFlLFsyLDE0NV0pLHQoYWUsWzIsMTQ2XSksdChhZSxbMiwxNDddKSx0KGFlLFsyLDE0OF0pLHQoYWUsWzIsMTQ5XSksdChhZSxbMiwxNTBdKSx0KGFlLFsyLDE1MV0pLHQoYWUsWzIsMTUyXSksdChpLFsyLDEyXSksdChpLFsyLDE4XSksdChpLFsyLDE5XSksezk6WzEsMTEzXX0sdChPZSxbMiwyNl0sezE4OjExNCwxMDpCfSksdChGLFsyLDI3XSksezQyOjExNSw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHQoRixbMiw0MF0pLHQoRixbMiw0MV0pLHQoRixbMiw0Ml0pLHQoeWUsWzIsNzZdLHs3MzoxMTYsNjI6WzEsMTE4XSw3NDpbMSwxMTddfSksezc2OjExOSw3OToxMjAsODA6QmUsODE6SGUsMTE2OnplLDExOTpMZX0sezc1OlsxLDEyNV0sNzc6WzEsMTI2XX0sdChJZSxbMiw4M10pLHQoRixbMiwyOF0pLHQoRixbMiwyOV0pLHQoRixbMiwzMF0pLHQoRixbMiwzMV0pLHQoRixbMiwzMl0pLHsxMDp4ZSwxMjpxLDE0OmRlLDI3OmllLDI4OjEyNywzMjpvZSw0NDpWLDYwOlRlLDc1OlcsODA6WzEsMTI5XSw4MTpbMSwxMzBdLDgzOjE0MCw4NDpwZSw4NTp2ZSw4NjpQZSw4NzpfZSw4ODpiZSw4OTpWZSw5MDpEZSw5MToxMjgsMTA1OnFlLDEwOTphdCwxMTE6UnQsMTE0OnN0LDExNTpVZSwxMTY6Y3R9LHQoV2UsYSx7NToxNTN9KSx0KEYsWzIsMzddKSx0KEYsWzIsMzhdKSx0KEssWzIsNDhdLHs0NDpvdH0pLHQoSyxbMiw0OV0sezE4OjE1NSwxMDpCLDQwOll0fSksdChTZSxbMiw0NF0pLHs0NDpnLDQ3OjE1Nyw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx7MTAyOlsxLDE1OF0sMTAzOjE1OSwxMDU6WzEsMTYwXX0sezQ0OmcsNDc6MTYxLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHs0NDpnLDQ3OjE2Miw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx0KFR0LFsyLDEwN10sezEwOlsxLDE2M10sOTY6WzEsMTY0XX0pLHs4MDpbMSwxNjVdfSx0KFR0LFsyLDExNV0sezEyMDoxNjcsMTA6WzEsMTY2XSwxNDpZLDQ0OmNlLDYwOlosODk6dWUsMTA1OlEsMTA2OmosMTA5Om5lLDExMTp0ZSwxMTQ6aGUsMTE1OmxlLDExNjpKfSksdChUdCxbMiwxMTddLHsxMDpbMSwxNjhdfSksdChNdCxbMiwxODNdKSx0KE10LFsyLDE3MF0pLHQoTXQsWzIsMTcxXSksdChNdCxbMiwxNzJdKSx0KE10LFsyLDE3M10pLHQoTXQsWzIsMTc0XSksdChNdCxbMiwxNzVdKSx0KE10LFsyLDE3Nl0pLHQoTXQsWzIsMTc3XSksdChNdCxbMiwxNzhdKSx0KE10LFsyLDE3OV0pLHQoTXQsWzIsMTgwXSksezQ0OmcsNDc6MTY5LDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHszMDoxNzAsNjc6YnQsODA6dXQsODE6U3QsODI6MTcxLDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MTc4LDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4MCw1MDpbMSwxNzldLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4MSw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHszMDoxODIsNjc6YnQsODA6dXQsODE6U3QsODI6MTcxLDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MTgzLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezEwOTpbMSwxODRdfSx7MzA6MTg1LDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4Niw2NTpbMSwxODddLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4OCw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHszMDoxODksNjc6YnQsODA6dXQsODE6U3QsODI6MTcxLDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MTkwLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sdChhZSxbMiwxODJdKSx0KGksWzIsMjBdKSx0KE9lLFsyLDI1XSksdChLLFsyLDQ2XSx7Mzk6MTkxLDE4OjE5MiwxMDpCLDQwOmVlfSksdCh5ZSxbMiw3M10sezEwOlsxLDE5M119KSx7MTA6WzEsMTk0XX0sezMwOjE5NSw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHs3NzpbMSwxOTZdLDc5OjE5NywxMTY6emUsMTE5OkxlfSx0KHBuLFsyLDc5XSksdChwbixbMiw4MV0pLHQocG4sWzIsODJdKSx0KHBuLFsyLDE2OF0pLHQocG4sWzIsMTY5XSksezc2OjE5OCw3OToxMjAsODA6QmUsODE6SGUsMTE2OnplLDExOTpMZX0sdChJZSxbMiw4NF0pLHs4OnosOTokLDEwOnhlLDExOlUsMTI6cSwxNDpkZSwyMToyMDAsMjc6aWUsMjk6WzEsMTk5XSwzMjpvZSw0NDpWLDYwOlRlLDc1OlcsODM6MTQwLDg0OnBlLDg1OnZlLDg2OlBlLDg3Ol9lLDg4OmJlLDg5OlZlLDkwOkRlLDkxOjIwMSwxMDU6cWUsMTA5OmF0LDExMTpSdCwxMTQ6c3QsMTE1OlVlLDExNjpjdH0sdChrdCxbMiwxMDFdKSx0KGt0LFsyLDEwM10pLHQoa3QsWzIsMTA0XSksdChrdCxbMiwxNTddKSx0KGt0LFsyLDE1OF0pLHQoa3QsWzIsMTU5XSksdChrdCxbMiwxNjBdKSx0KGt0LFsyLDE2MV0pLHQoa3QsWzIsMTYyXSksdChrdCxbMiwxNjNdKSx0KGt0LFsyLDE2NF0pLHQoa3QsWzIsMTY1XSksdChrdCxbMiwxNjZdKSx0KGt0LFsyLDE2N10pLHQoa3QsWzIsOTBdKSx0KGt0LFsyLDkxXSksdChrdCxbMiw5Ml0pLHQoa3QsWzIsOTNdKSx0KGt0LFsyLDk0XSksdChrdCxbMiw5NV0pLHQoa3QsWzIsOTZdKSx0KGt0LFsyLDk3XSksdChrdCxbMiw5OF0pLHQoa3QsWzIsOTldKSx0KGt0LFsyLDEwMF0pLHs2OjExLDc6MTIsODpzLDk6bCwxMDp1LDExOmgsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6ZiwzMjpbMSwyMDJdLDMzOjI0LDM0OmQsMzY6cCwzODptLDQyOjI4LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4NDp2LDg1OngsODY6Yiw4NzpULDg4OlMsODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2OkwsMTIxOkEsMTIyOkksMTIzOk0sMTI0OlB9LHsxMDpCLDE4OjIwM30sezQ0OlsxLDIwNF19LHQoU2UsWzIsNDNdKSx7MTA6WzEsMjA1XSw0NDpnLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6MTEyLDExNDpSLDExNTprLDExNjpMfSx7MTA6WzEsMjA2XX0sezEwOlsxLDIwN10sMTA2OlsxLDIwOF19LHQoT24sWzIsMTI4XSksezEwOlsxLDIwOV0sNDQ6Zyw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjExMiwxMTQ6UiwxMTU6aywxMTY6TH0sezEwOlsxLDIxMF0sNDQ6Zyw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjExMiwxMTQ6UiwxMTU6aywxMTY6TH0sezgwOlsxLDIxMV19LHQoVHQsWzIsMTA5XSx7MTA6WzEsMjEyXX0pLHQoVHQsWzIsMTExXSx7MTA6WzEsMjEzXX0pLHs4MDpbMSwyMTRdfSx0KE10LFsyLDE4NF0pLHs4MDpbMSwyMTVdLDk4OlsxLDIxNl19LHQoU2UsWzIsNTVdLHsxMTM6MTEyLDQ0OmcsNjA6eSw4OTp3LDEwMjpFLDEwNTpfLDEwNjpDLDEwOTpELDExMTpPLDExNDpSLDExNTprLDExNjpMfSksezMxOlsxLDIxN10sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx0KHRuLFsyLDg2XSksdCh0bixbMiw4OF0pLHQodG4sWzIsODldKSx0KHRuLFsyLDE1M10pLHQodG4sWzIsMTU0XSksdCh0bixbMiwxNTVdKSx0KHRuLFsyLDE1Nl0pLHs0OTpbMSwyMTldLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjIyMCw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHs1MTpbMSwyMjFdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezUzOlsxLDIyMl0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7NTU6WzEsMjIzXSw2NzpidCw4MjoyMTgsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHs1NzpbMSwyMjRdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezYwOlsxLDIyNV19LHs2NDpbMSwyMjZdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezY2OlsxLDIyN10sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MjI4LDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMxOlsxLDIyOV0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7Njc6YnQsNjk6WzEsMjMwXSw3MTpbMSwyMzFdLDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezY3OmJ0LDY5OlsxLDIzM10sNzE6WzEsMjMyXSw4MjoyMTgsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoSyxbMiw0NV0sezE4OjE1NSwxMDpCLDQwOll0fSksdChLLFsyLDQ3XSx7NDQ6b3R9KSx0KHllLFsyLDc1XSksdCh5ZSxbMiw3NF0pLHs2MjpbMSwyMzRdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sdCh5ZSxbMiw3N10pLHQocG4sWzIsODBdKSx7Nzc6WzEsMjM1XSw3OToxOTcsMTE2OnplLDExOTpMZX0sezMwOjIzNiw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoV2UsYSx7NToyMzd9KSx0KGt0LFsyLDEwMl0pLHQoRixbMiwzNV0pLHs0MzoyMzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx7MTA6QiwxODoyMzl9LHsxMDpNciw2MDpJciw4NDpQbiw5MjoyNDAsMTA1OkR0LDEwNzoyNDEsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHsxMDpNciw2MDpJciw4NDpQbiw5MjoyNTEsMTA0OlsxLDI1Ml0sMTA1OkR0LDEwNzoyNDEsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHsxMDpNciw2MDpJciw4NDpQbiw5MjoyNTMsMTA0OlsxLDI1NF0sMTA1OkR0LDEwNzoyNDEsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHsxMDU6WzEsMjU1XX0sezEwOk1yLDYwOklyLDg0OlBuLDkyOjI1NiwxMDU6RHQsMTA3OjI0MSwxMDg6MjQyLDEwOTpDZSwxMTA6dHQsMTExOkN0LDExMjpncn0sezQ0OmcsNDc6MjU3LDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHQoVHQsWzIsMTA4XSksezgwOlsxLDI1OF19LHs4MDpbMSwyNTldLDk4OlsxLDI2MF19LHQoVHQsWzIsMTE2XSksdChUdCxbMiwxMThdLHsxMDpbMSwyNjFdfSksdChUdCxbMiwxMTldKSx0KHNlLFsyLDU2XSksdCh0bixbMiw4N10pLHQoc2UsWzIsNTddKSx7NTE6WzEsMjYyXSw2NzpidCw4MjoyMTgsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoc2UsWzIsNjRdKSx0KHNlLFsyLDU5XSksdChzZSxbMiw2MF0pLHQoc2UsWzIsNjFdKSx7MTA5OlsxLDI2M119LHQoc2UsWzIsNjNdKSx0KHNlLFsyLDY1XSksezY2OlsxLDI2NF0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx0KHNlLFsyLDY3XSksdChzZSxbMiw2OF0pLHQoc2UsWzIsNzBdKSx0KHNlLFsyLDY5XSksdChzZSxbMiw3MV0pLHQoWzEwLDQ0LDYwLDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLFsyLDg1XSksdCh5ZSxbMiw3OF0pLHszMTpbMSwyNjVdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMyOlsxLDI2Nl0sMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg0OnYsODU6eCw4NjpiLDg3OlQsODg6Uyw4OTp3LDEwMjpFLDEwNTpfLDEwNjpDLDEwOTpELDExMTpPLDExMzo0MSwxMTQ6UiwxMTU6aywxMTY6TCwxMjE6QSwxMjI6SSwxMjM6TSwxMjQ6UH0sdChTZSxbMiw1M10pLHs0MzoyNjcsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx0KFR0LFsyLDEyMV0sezEwNjpybn0pLHQoeW4sWzIsMTMwXSx7MTA4OjI2OSwxMDpNciw2MDpJciw4NDpQbiwxMDU6RHQsMTA5OkNlLDExMDp0dCwxMTE6Q3QsMTEyOmdyfSksdChacixbMiwxMzJdKSx0KFpyLFsyLDEzNF0pLHQoWnIsWzIsMTM1XSksdChacixbMiwxMzZdKSx0KFpyLFsyLDEzN10pLHQoWnIsWzIsMTM4XSksdChacixbMiwxMzldKSx0KFpyLFsyLDE0MF0pLHQoWnIsWzIsMTQxXSksdChUdCxbMiwxMjJdLHsxMDY6cm59KSx7MTA6WzEsMjcwXX0sdChUdCxbMiwxMjNdLHsxMDY6cm59KSx7MTA6WzEsMjcxXX0sdChPbixbMiwxMjldKSx0KFR0LFsyLDEwNV0sezEwNjpybn0pLHQoVHQsWzIsMTA2XSx7MTEzOjExMiw0NDpnLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTQ6UiwxMTU6aywxMTY6TH0pLHQoVHQsWzIsMTEwXSksdChUdCxbMiwxMTJdLHsxMDpbMSwyNzJdfSksdChUdCxbMiwxMTNdKSx7OTg6WzEsMjczXX0sezUxOlsxLDI3NF19LHs2MjpbMSwyNzVdfSx7NjY6WzEsMjc2XX0sezg6eiw5OiQsMTE6VSwyMToyNzd9LHQoRixbMiwzNF0pLHQoU2UsWzIsNTJdKSx7MTA6TXIsNjA6SXIsODQ6UG4sMTA1OkR0LDEwNzoyNzgsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHQoWnIsWzIsMTMzXSksezE0OlksNDQ6Y2UsNjA6Wiw4OTp1ZSwxMDE6Mjc5LDEwNTpRLDEwNjpqLDEwOTpuZSwxMTE6dGUsMTE0OmhlLDExNTpsZSwxMTY6SiwxMjA6ODd9LHsxNDpZLDQ0OmNlLDYwOlosODk6dWUsMTAxOjI4MCwxMDU6USwxMDY6aiwxMDk6bmUsMTExOnRlLDExNDpoZSwxMTU6bGUsMTE2OkosMTIwOjg3fSx7OTg6WzEsMjgxXX0sdChUdCxbMiwxMjBdKSx0KHNlLFsyLDU4XSksezMwOjI4Miw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoc2UsWzIsNjZdKSx0KFdlLGEsezU6MjgzfSksdCh5bixbMiwxMzFdLHsxMDg6MjY5LDEwOk1yLDYwOklyLDg0OlBuLDEwNTpEdCwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9KSx0KFR0LFsyLDEyNl0sezEyMDoxNjcsMTA6WzEsMjg0XSwxNDpZLDQ0OmNlLDYwOlosODk6dWUsMTA1OlEsMTA2OmosMTA5Om5lLDExMTp0ZSwxMTQ6aGUsMTE1OmxlLDExNjpKfSksdChUdCxbMiwxMjddLHsxMjA6MTY3LDEwOlsxLDI4NV0sMTQ6WSw0NDpjZSw2MDpaLDg5OnVlLDEwNTpRLDEwNjpqLDEwOTpuZSwxMTE6dGUsMTE0OmhlLDExNTpsZSwxMTY6Sn0pLHQoVHQsWzIsMTE0XSksezMxOlsxLDI4Nl0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMjg3XSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODQ6diw4NTp4LDg2OmIsODc6VCw4ODpTLDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMLDEyMTpBLDEyMjpJLDEyMzpNLDEyNDpQfSx7MTA6TXIsNjA6SXIsODQ6UG4sOTI6Mjg4LDEwNTpEdCwxMDc6MjQxLDEwODoyNDIsMTA5OkNlLDExMDp0dCwxMTE6Q3QsMTEyOmdyfSx7MTA6TXIsNjA6SXIsODQ6UG4sOTI6Mjg5LDEwNTpEdCwxMDc6MjQxLDEwODoyNDIsMTA5OkNlLDExMDp0dCwxMTE6Q3QsMTEyOmdyfSx0KHNlLFsyLDYyXSksdChGLFsyLDMzXSksdChUdCxbMiwxMjRdLHsxMDY6cm59KSx0KFR0LFsyLDEyNV0sezEwNjpybn0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZXQsZ3Qpe2lmKGd0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoZXQpO2Vsc2V7dmFyIEt0PW5ldyBFcnJvcihldCk7dGhyb3cgS3QuaGFzaD1ndCxLdH19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihldCl7dmFyIGd0PXRoaXMsS3Q9WzBdLGx0PVtdLENuPVtudWxsXSxnZT1bXSxRZj10aGlzLnRhYmxlLHdlPSIiLEVpPTAsbCQ9MCxjJD0wLHRiZT0yLHUkPTEscmJlPWdlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGppPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksWmY9e3l5Ont9fTtmb3IodmFyICRDIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksJEMpJiYoWmYueXlbJENdPXRoaXMueXlbJENdKTtqaS5zZXRJbnB1dChldCxaZi55eSksWmYueXkubGV4ZXI9amksWmYueXkucGFyc2VyPXRoaXMsdHlwZW9mIGppLnl5bGxvYz4idSImJihqaS55eWxsb2M9e30pO3ZhciB6Qz1qaS55eWxsb2M7Z2UucHVzaCh6Qyk7dmFyIG5iZT1qaS5vcHRpb25zJiZqaS5vcHRpb25zLnJhbmdlczt0eXBlb2YgWmYueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9WmYueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUWl0KFhzKXtLdC5sZW5ndGg9S3QubGVuZ3RoLTIqWHMsQ24ubGVuZ3RoPUNuLmxlbmd0aC1YcyxnZS5sZW5ndGg9Z2UubGVuZ3RoLVhzfW8oUWl0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIGliZSgpe3ZhciBYcztyZXR1cm4gWHM9bHQucG9wKCl8fGppLmxleCgpfHx1JCx0eXBlb2YgWHMhPSJudW1iZXIiJiYoWHMgaW5zdGFuY2VvZiBBcnJheSYmKGx0PVhzLFhzPWx0LnBvcCgpKSxYcz1ndC5zeW1ib2xzX1tYc118fFhzKSxYc31vKGliZSwibGV4Iik7Zm9yKHZhciBLYSxHQyxKZix3byxaaXQsVkMsYzA9e30sejQsbnUsaCQsRzQ7Oyl7aWYoSmY9S3RbS3QubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbSmZdP3dvPXRoaXMuZGVmYXVsdEFjdGlvbnNbSmZdOigoS2E9PT1udWxsfHx0eXBlb2YgS2E+InUiKSYmKEthPWliZSgpKSx3bz1RZltKZl0mJlFmW0pmXVtLYV0pLHR5cGVvZiB3bz4idSJ8fCF3by5sZW5ndGh8fCF3b1swXSl7dmFyIFVDPSIiO0c0PVtdO2Zvcih6NCBpbiBRZltKZl0pdGhpcy50ZXJtaW5hbHNfW3o0XSYmejQ+dGJlJiZHNC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bejRdKyInIik7amkuc2hvd1Bvc2l0aW9uP1VDPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEVpKzEpK2A6CmAramkuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtHNC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0thXXx8S2EpKyInIjpVQz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhFaSsxKSsiOiBVbmV4cGVjdGVkICIrKEthPT11JD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tLYV18fEthKSsiJyIpLHRoaXMucGFyc2VFcnJvcihVQyx7dGV4dDpqaS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bS2FdfHxLYSxsaW5lOmppLnl5bGluZW5vLGxvYzp6QyxleHBlY3RlZDpHNH0pfWlmKHdvWzBdaW5zdGFuY2VvZiBBcnJheSYmd28ubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitKZisiLCB0b2tlbjogIitLYSk7c3dpdGNoKHdvWzBdKXtjYXNlIDE6S3QucHVzaChLYSksQ24ucHVzaChqaS55eXRleHQpLGdlLnB1c2goamkueXlsbG9jKSxLdC5wdXNoKHdvWzFdKSxLYT1udWxsLEdDPyhLYT1HQyxHQz1udWxsKToobCQ9amkueXlsZW5nLHdlPWppLnl5dGV4dCxFaT1qaS55eWxpbmVubyx6Qz1qaS55eWxsb2MsYyQ+MCYmYyQtLSk7YnJlYWs7Y2FzZSAyOmlmKG51PXRoaXMucHJvZHVjdGlvbnNfW3dvWzFdXVsxXSxjMC4kPUNuW0NuLmxlbmd0aC1udV0sYzAuXyQ9e2ZpcnN0X2xpbmU6Z2VbZ2UubGVuZ3RoLShudXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmdlW2dlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmdlW2dlLmxlbmd0aC0obnV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Z2VbZ2UubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxuYmUmJihjMC5fJC5yYW5nZT1bZ2VbZ2UubGVuZ3RoLShudXx8MSldLnJhbmdlWzBdLGdlW2dlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFZDPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShjMCxbd2UsbCQsRWksWmYueXksd29bMV0sQ24sZ2VdLmNvbmNhdChyYmUpKSx0eXBlb2YgVkM8InUiKXJldHVybiBWQztudSYmKEt0PUt0LnNsaWNlKDAsLTEqbnUqMiksQ249Q24uc2xpY2UoMCwtMSpudSksZ2U9Z2Uuc2xpY2UoMCwtMSpudSkpLEt0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bd29bMV1dWzBdKSxDbi5wdXNoKGMwLiQpLGdlLnB1c2goYzAuXyQpLGgkPVFmW0t0W0t0Lmxlbmd0aC0yXV1bS3RbS3QubGVuZ3RoLTFdXSxLdC5wdXNoKGgkKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZWk9ZnVuY3Rpb24oKXt2YXIgSHI9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihndCxLdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihndCxLdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZ3QpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oZXQsZ3Qpe3JldHVybiB0aGlzLnl5PWd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ldCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBldD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9ZXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWV0LHRoaXMubWF0Y2hlZCs9ZXQ7dmFyIGd0PWV0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gZ3Q/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGV0fSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKGV0KXt2YXIgZ3Q9ZXQubGVuZ3RoLEt0PWV0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9ZXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWd0KSx0aGlzLm9mZnNldC09Z3Q7dmFyIGx0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEt0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09S3QubGVuZ3RoLTEpO3ZhciBDbj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46S3Q/KEt0Lmxlbmd0aD09PWx0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrbHRbbHQubGVuZ3RoLUt0Lmxlbmd0aF0ubGVuZ3RoLUt0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZ3R9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQ25bMF0sQ25bMF0rdGhpcy55eWxlbmctZ3RdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihldCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGV0KSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgZXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihldC5sZW5ndGg+MjA/Ii4uLiI6IiIpK2V0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGV0PXRoaXMubWF0Y2g7cmV0dXJuIGV0Lmxlbmd0aDwyMCYmKGV0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ldC5sZW5ndGgpKSwoZXQuc3Vic3RyKDAsMjApKyhldC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBldD10aGlzLnBhc3RJbnB1dCgpLGd0PW5ldyBBcnJheShldC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBldCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZ3QrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKGV0LGd0KXt2YXIgS3QsbHQsQ247aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKENuPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKENuLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGx0PWV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxsdCYmKHRoaXMueXlsaW5lbm8rPWx0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmx0P2x0W2x0Lmxlbmd0aC0xXS5sZW5ndGgtbHRbbHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rZXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9ZXRbMF0sdGhpcy5tYXRjaCs9ZXRbMF0sdGhpcy5tYXRjaGVzPWV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1ldFswXSxLdD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxndCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxLdClyZXR1cm4gS3Q7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGdlIGluIENuKXRoaXNbZ2VdPUNuW2dlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgZXQsZ3QsS3QsbHQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQ249dGhpcy5fY3VycmVudFJ1bGVzKCksZ2U9MDtnZTxDbi5sZW5ndGg7Z2UrKylpZihLdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0NuW2dlXV0pLEt0JiYoIWd0fHxLdFswXS5sZW5ndGg+Z3RbMF0ubGVuZ3RoKSl7aWYoZ3Q9S3QsbHQ9Z2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoZXQ9dGhpcy50ZXN0X21hdGNoKEt0LENuW2dlXSksZXQhPT0hMSlyZXR1cm4gZXQ7aWYodGhpcy5fYmFja3RyYWNrKXtndD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBndD8oZXQ9dGhpcy50ZXN0X21hdGNoKGd0LENuW2x0XSksZXQhPT0hMT9ldDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBndD10aGlzLm5leHQoKTtyZXR1cm4gZ3R8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKGd0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZ3QpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGd0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oZ3Qpe3JldHVybiBndD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGd0fHwwKSxndD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2d0XToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKGd0KXt0aGlzLmJlZ2luKGd0KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGd0LEt0LGx0LENuKXt2YXIgZ2U9Q247c3dpdGNoKGx0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDM0O2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzY7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhIiksS3QueXl0ZXh0PSIiLDQwO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YVN0ciIpLDQwO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQwO2JyZWFrO2Nhc2UgMTA6bGV0IFFmPS9cblxzKi9nO3JldHVybiBLdC55eXRleHQ9S3QueXl0ZXh0LnJlcGxhY2UoUWYsIjxici8+IiksNDA7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gNDA7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDE2OnJldHVybiA5NTtjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5NjtjYXNlIDE5OnJldHVybiJNRF9TVFIiO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnJldHVybiA4NDtjYXNlIDI2OnJldHVybiAxMDI7Y2FzZSAyNzpyZXR1cm4gODU7Y2FzZSAyODpyZXR1cm4gMTA0O2Nhc2UgMjk6cmV0dXJuIDg2O2Nhc2UgMzA6cmV0dXJuIDg3O2Nhc2UgMzE6cmV0dXJuIDk3O2Nhc2UgMzI6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiA4ODtjYXNlIDM1OnJldHVybiBndC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM2OnJldHVybiBndC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM3OnJldHVybiBndC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM4OnJldHVybiAyNztjYXNlIDM5OnJldHVybiAzMjtjYXNlIDQwOnJldHVybiA5ODtjYXNlIDQxOnJldHVybiA5ODtjYXNlIDQyOnJldHVybiA5ODtjYXNlIDQzOnJldHVybiA5ODtjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTM7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIDEyMTtjYXNlIDU2OnJldHVybiAxMjI7Y2FzZSA1NzpyZXR1cm4gMTIzO2Nhc2UgNTg6cmV0dXJuIDEyNDtjYXNlIDU5OnJldHVybiA3ODtjYXNlIDYwOnJldHVybiAxMDU7Y2FzZSA2MTpyZXR1cm4gMTExO2Nhc2UgNjI6cmV0dXJuIDQ2O2Nhc2UgNjM6cmV0dXJuIDYwO2Nhc2UgNjQ6cmV0dXJuIDQ0O2Nhc2UgNjU6cmV0dXJuIDg7Y2FzZSA2NjpyZXR1cm4gMTA2O2Nhc2UgNjc6cmV0dXJuIDExNTtjYXNlIDY4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA2OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3MDpyZXR1cm4gMTE5O2Nhc2UgNzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NzticmVhaztjYXNlIDcyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGhpY2tFZGdlVGV4dCIpLDc1O2JyZWFrO2Nhc2UgNzM6cmV0dXJuIDExOTtjYXNlIDc0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA3NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRvdHRlZEVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gMTE5O2Nhc2UgNzc6cmV0dXJuIDc3O2Nhc2UgNzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MzticmVhaztjYXNlIDc5OnJldHVybiJURVhUIjtjYXNlIDgwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWxsaXBzZVRleHQiKSw1MjticmVhaztjYXNlIDgxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTU7YnJlYWs7Y2FzZSA4MjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NDticmVhaztjYXNlIDgzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTc7YnJlYWs7Y2FzZSA4NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NjticmVhaztjYXNlIDg1OnJldHVybiA1ODtjYXNlIDg2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY3O2JyZWFrO2Nhc2UgODc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NDticmVhaztjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYzO2JyZWFrO2Nhc2UgODk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDkwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ4O2JyZWFrO2Nhc2UgOTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2OTticmVhaztjYXNlIDkyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzE7YnJlYWs7Y2FzZSA5MzpyZXR1cm4gMTE3O2Nhc2UgOTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY4O2JyZWFrO2Nhc2UgOTU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDcwO2JyZWFrO2Nhc2UgOTY6cmV0dXJuIDExODtjYXNlIDk3OnJldHVybiA2NztjYXNlIDk4OnJldHVybiA5MDtjYXNlIDk5OnJldHVybiJTRVAiO2Nhc2UgMTAwOnJldHVybiA4OTtjYXNlIDEwMTpyZXR1cm4gMTE1O2Nhc2UgMTAyOnJldHVybiAxMTE7Y2FzZSAxMDM6cmV0dXJuIDQ0O2Nhc2UgMTA0OnJldHVybiAxMDk7Y2FzZSAxMDU6cmV0dXJuIDExNDtjYXNlIDEwNjpyZXR1cm4gMTE2O2Nhc2UgMTA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7YnJlYWs7Y2FzZSAxMDg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjI7YnJlYWs7Y2FzZSAxMDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MTticmVhaztjYXNlIDExMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1MDticmVhaztjYXNlIDExMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2JyZWFrO2Nhc2UgMTEyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2JyZWFrO2Nhc2UgMTEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjY7YnJlYWs7Y2FzZSAxMTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjU7YnJlYWs7Y2FzZSAxMTU6cmV0dXJuIlRFWFQiO2Nhc2UgMTE2OnJldHVybiJRVU9URSI7Y2FzZSAxMTc6cmV0dXJuIDk7Y2FzZSAxMTg6cmV0dXJuIDEwO2Nhc2UgMTE5OnJldHVybiAxMX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86QFx7KS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W15cIl0rKS8sL14oPzpbXn1eIl0rKS8sL14oPzpcfSkvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbXmAiXSspLywvXig/OltgXVsiXSkvLC9eKD86WyJdW2BdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpmbG93Y2hhcnQtZWxrXGIpLywvXig/OmdyYXBoXGIpLywvXig/OmZsb3djaGFydFxiKS8sL14oPzpzdWJncmFwaFxiKS8sL14oPzplbmRcYlxzKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzooXHI/XG4pKlxzKlxuKS8sL14oPzpccypMUlxiKS8sL14oPzpccypSTFxiKS8sL14oPzpccypUQlxiKS8sL14oPzpccypCVFxiKS8sL14oPzpccypURFxiKS8sL14oPzpccypCUlxiKS8sL14oPzpccyo8KS8sL14oPzpccyo+KS8sL14oPzpccypcXikvLC9eKD86XHMqdlxiKS8sL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzpbXlxzXCJdK0AoPz1bXlx7XCJdKSkvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpbXi1dfC0oPyEtKSspLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OltePV18PSg/ISkpLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbXlwuXXxcLig/ISkpLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlstL1wpXVtcKV0pLywvXig/OlteXChcKVxbXF1ce1x9XXwhXCkrKS8sL14oPzpcKC0pLywvXig/OlxdXCkpLywvXig/OlwoXFspLywvXig/OlxdXF0pLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/Oj4pLywvXig/OlwpXF0pLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XChcKFwoKS8sL14oPzpbXFwoPz1cXSldW1xdXSkvLC9eKD86XC8oPz1cXSlcXSkvLC9eKD86XC8oPyFcXSl8XFwoPyFcXSl8W15cXFxbXF1cKFwpXHtcfVwvXSspLywvXig/OlxbXC8pLywvXig/OlxbXFwpLywvXig/OjwpLywvXig/Oj4pLywvXig/OlxeKS8sL14oPzpcXFx8KS8sL14oPzp2XGIpLywvXig/OlwqKS8sL14oPzojKS8sL14oPzomKS8sL14oPzooW0EtWmEtejAtOSEiXCMkJSYnKitcLmA/XFxfXC9dfC0oPz1bXlw+XC1cLl0pfCg/ISkpKykvLC9eKD86LSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XHwpLywvXig/OlwpKS8sL14oPzpcKCkvLC9eKD86XF0pLywvXig/OlxbKS8sL14oPzooXH0pKS8sL14oPzpceykvLC9eKD86W15cW1xdXChcKVx7XH1cfFwiXSspLywvXig/OiIpLywvXig/Oihccj9cbikrKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOntzaGFwZURhdGFFbmRCcmFja2V0OntydWxlczpbMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YVN0cjp7cnVsZXM6WzksMTAsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YTp7cnVsZXM6WzgsMTEsMTIsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzE3LDE4LDIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNCwxNSwxNiwyMSwyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzIxLDI0LDMzLDM0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDc0LDc2LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMjEsMjQsNzEsNzMsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMjEsMjQsNjgsNzAsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTEsOTIsOTMsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMjEsMjQsNzcsNzgsNzksODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsyMSwyNCw3Nyw4MCw4MSw4Miw4Myw4NCw4Nyw4OCw4OSw5MCw5NCw5NSwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNV0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsyMSwyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMjEsMjQsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzE5LDIwLDIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyMSwyMiwyMywyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTMsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzEsNzIsNzQsNzUsNzcsODAsODIsODQsODUsODYsODgsOTAsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwOCwxMTAsMTEyLDExNCwxMTYsMTE3LDExOCwxMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gSHJ9KCk7T2kubGV4ZXI9ZWk7ZnVuY3Rpb24gU24oKXt0aGlzLnl5PXt9fXJldHVybiBvKFNuLCJQYXJzZXIiKSxTbi5wcm90b3R5cGU9T2ksT2kuUGFyc2VyPVNuLG5ldyBTbn0oKTtyTi5wYXJzZXI9ck47bk49ck59KTt2YXIgYXNlLHNzZSxvc2U9TigoKT0+eyJ1c2Ugc3RyaWN0Ijtpc2UoKTthc2U9T2JqZWN0LmFzc2lnbih7fSxuTik7YXNlLnBhcnNlPXQ9PntsZXQgZT10LnJlcGxhY2UoL31ccypcbi9nLGB9CmApO3JldHVybiBuTi5wYXJzZShlKX07c3NlPWFzZX0pO3ZhciBOYyxYbT1OKCgpPT57InVzZSBzdHJpY3QiO05jPW8oKCk9PmAKICAvKiBGb250IEF3ZXNvbWUgaWNvbiBzdHlsaW5nIC0gY29uc29saWRhdGVkICovCiAgLmxhYmVsLWljb24gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgaGVpZ2h0OiAxZW07CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB9CiAgCiAgLm5vZGUgLmxhYmVsLWljb24gcGF0aCB7CiAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICBzdHJva2U6IHJldmVydDsKICAgIHN0cm9rZS13aWR0aDogcmV2ZXJ0OwogIH0KYCwiZ2V0SWNvblN0eWxlcyIpfSk7dmFyIFVQZSxIUGUsbHNlLGNzZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7WG0oKTtVUGU9bygodCxlKT0+e2xldCByPWlkLG49cih0LCJyIiksaT1yKHQsImciKSxhPXIodCwiYiIpO3JldHVybiBRYShuLGksYSxlKX0sImZhZGUiKSxIUGU9byh0PT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbiBwIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIH0KCiAgLmxhYmVsIHRleHQsc3BhbiB7CiAgICBmaWxsOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAucm91Z2gtbm9kZSAubGFiZWwgdGV4dCAsIC5ub2RlIC5sYWJlbCB0ZXh0LCAuaW1hZ2Utc2hhcGUgLmxhYmVsLCAuaWNvbi1zaGFwZSAubGFiZWwgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1vdXRlci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIC8vIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LWlubmVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAvLyB9CgogIC5ub2RlIC5rYXRleCBwYXRoIHsKICAgIGZpbGw6ICMwMDA7CiAgICBzdHJva2U6ICMwMDA7CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5yb3VnaC1ub2RlIC5sYWJlbCwubm9kZSAubGFiZWwsIC5pbWFnZS1zaGFwZSAubGFiZWwsIC5pY29uLXNoYXBlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKCiAgLnJvb3QgLmFuY2hvciBwYXRoIHsKICAgIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHt0LmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLyogRm9yIGh0bWwgbGFiZWxzIG9ubHkgKi8KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtVUGUodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLC41KX07CiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOgogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke3QuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7dC5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CgogIHJlY3QudGV4dCB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlLXdpZHRoOiAwOwogIH0KCiAgLmljb24tc2hhcGUsIC5pbWFnZS1zaGFwZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICBwIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBwYWRkaW5nOiAycHg7CiAgICB9CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgJHtOYygpfQpgLCJnZXRTdHlsZXMiKSxsc2U9SFBlfSk7dmFyIHhrPXt9O3VyKHhrLHtkaWFncmFtOigpPT5XUGV9KTt2YXIgV1BlLGJrPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtsZWUoKTtuc2UoKTtvc2UoKTtjc2UoKTtXUGU9e3BhcnNlcjpzc2UsZ2V0IGRiKCl7cmV0dXJuIG5ldyBpd30scmVuZGVyZXI6cnNlLHN0eWxlczpsc2UsaW5pdDpvKHQ9Pnt0LmZsb3djaGFydHx8KHQuZmxvd2NoYXJ0PXt9KSx0LmxheW91dCYmbnYoe2xheW91dDp0LmxheW91dH0pLHQuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLG52KHtmbG93Y2hhcnQ6e2Fycm93TWFya2VyQWJzb2x1dGU6dC5hcnJvd01hcmtlckFic29sdXRlfX0pfSwiaW5pdCIpfX0pO3ZhciBpTixwc2UsbXNlPU4oKCk9PnsidXNlIHN0cmljdCI7aU49ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKHRlLGhlLGxlLEope2ZvcihsZT1sZXx8e30sSj10ZS5sZW5ndGg7Si0tO2xlW3RlW0pdXT1oZSk7cmV0dXJuIGxlfSwibyIpLGU9WzYsOCwxMCwyMiwyNCwyNiwyOCwzMywzNCwzNSwzNiwzNyw0MCw0Myw0NCw1MF0scj1bMSwxMF0sbj1bMSwxMV0saT1bMSwxMl0sYT1bMSwxM10scz1bMSwyMF0sbD1bMSwyMV0sdT1bMSwyMl0saD1bMSwyM10sZj1bMSwyNF0sZD1bMSwxOV0scD1bMSwyNV0sbT1bMSwyNl0sZz1bMSwxOF0seT1bMSwzM10sdj1bMSwzNF0seD1bMSwzNV0sYj1bMSwzNl0sVD1bMSwzN10sUz1bNiw4LDEwLDEzLDE1LDE3LDIwLDIxLDIyLDI0LDI2LDI4LDMzLDM0LDM1LDM2LDM3LDQwLDQzLDQ0LDUwLDYzLDY0LDY1LDY2LDY3XSx3PVsxLDQyXSxFPVsxLDQzXSxfPVsxLDUyXSxDPVs0MCw1MCw2OCw2OV0sRD1bMSw2M10sTz1bMSw2MV0sUj1bMSw1OF0saz1bMSw2Ml0sTD1bMSw2NF0sQT1bNiw4LDEwLDEzLDE3LDIyLDI0LDI2LDI4LDMzLDM0LDM1LDM2LDM3LDQwLDQxLDQyLDQzLDQ0LDQ4LDQ5LDUwLDYzLDY0LDY1LDY2LDY3XSxJPVs2Myw2NCw2NSw2Niw2N10sTT1bMSw4MV0sUD1bMSw4MF0sQj1bMSw3OF0sRj1bMSw3OV0sej1bNiwxMCw0Miw0N10sJD1bNiwxMCwxMyw0MSw0Miw0Nyw0OCw0OV0sVT1bMSw4OV0sSz1bMSw4OF0sZWU9WzEsODddLFk9WzE5LDU2XSxjZT1bMSw5OF0sWj1bMSw5N10sdWU9WzE5LDU2LDU4LDYwXSxRPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLENPTE9OOjEzLHJvbGU6MTQsU1RZTEVfU0VQQVJBVE9SOjE1LGlkTGlzdDoxNixCTE9DS19TVEFSVDoxNyxhdHRyaWJ1dGVzOjE4LEJMT0NLX1NUT1A6MTksU1FTOjIwLFNRRToyMSx0aXRsZToyMix0aXRsZV92YWx1ZToyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxkaXJlY3Rpb246MjksY2xhc3NEZWZTdGF0ZW1lbnQ6MzAsY2xhc3NTdGF0ZW1lbnQ6MzEsc3R5bGVTdGF0ZW1lbnQ6MzIsZGlyZWN0aW9uX3RiOjMzLGRpcmVjdGlvbl9idDozNCxkaXJlY3Rpb25fcmw6MzUsZGlyZWN0aW9uX2xyOjM2LENMQVNTREVGOjM3LHN0eWxlc09wdDozOCxzZXBhcmF0b3I6MzksVU5JQ09ERV9URVhUOjQwLFNUWUxFX1RFWFQ6NDEsQ09NTUE6NDIsQ0xBU1M6NDMsU1RZTEU6NDQsc3R5bGU6NDUsc3R5bGVDb21wb25lbnQ6NDYsU0VNSTo0NyxOVU06NDgsQlJLVDo0OSxFTlRJVFlfTkFNRTo1MCxhdHRyaWJ1dGU6NTEsYXR0cmlidXRlVHlwZTo1MixhdHRyaWJ1dGVOYW1lOjUzLGF0dHJpYnV0ZUtleVR5cGVMaXN0OjU0LGF0dHJpYnV0ZUNvbW1lbnQ6NTUsQVRUUklCVVRFX1dPUkQ6NTYsYXR0cmlidXRlS2V5VHlwZTo1NywiLCI6NTgsQVRUUklCVVRFX0tFWTo1OSxDT01NRU5UOjYwLGNhcmRpbmFsaXR5OjYxLHJlbFR5cGU6NjIsWkVST19PUl9PTkU6NjMsWkVST19PUl9NT1JFOjY0LE9ORV9PUl9NT1JFOjY1LE9OTFlfT05FOjY2LE1EX1BBUkVOVDo2NyxOT05fSURFTlRJRllJTkc6NjgsSURFTlRJRllJTkc6NjksV09SRDo3MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDEzOiJDT0xPTiIsMTU6IlNUWUxFX1NFUEFSQVRPUiIsMTc6IkJMT0NLX1NUQVJUIiwxOToiQkxPQ0tfU1RPUCIsMjA6IlNRUyIsMjE6IlNRRSIsMjI6InRpdGxlIiwyMzoidGl0bGVfdmFsdWUiLDI0OiJhY2NfdGl0bGUiLDI1OiJhY2NfdGl0bGVfdmFsdWUiLDI2OiJhY2NfZGVzY3IiLDI3OiJhY2NfZGVzY3JfdmFsdWUiLDI4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzMzoiZGlyZWN0aW9uX3RiIiwzNDoiZGlyZWN0aW9uX2J0IiwzNToiZGlyZWN0aW9uX3JsIiwzNjoiZGlyZWN0aW9uX2xyIiwzNzoiQ0xBU1NERUYiLDQwOiJVTklDT0RFX1RFWFQiLDQxOiJTVFlMRV9URVhUIiw0MjoiQ09NTUEiLDQzOiJDTEFTUyIsNDQ6IlNUWUxFIiw0NzoiU0VNSSIsNDg6Ik5VTSIsNDk6IkJSS1QiLDUwOiJFTlRJVFlfTkFNRSIsNTY6IkFUVFJJQlVURV9XT1JEIiw1ODoiLCIsNTk6IkFUVFJJQlVURV9LRVkiLDYwOiJDT01NRU5UIiw2MzoiWkVST19PUl9PTkUiLDY0OiJaRVJPX09SX01PUkUiLDY1OiJPTkVfT1JfTU9SRSIsNjY6Ik9OTFlfT05FIiw2NzoiTURfUEFSRU5UIiw2ODoiTk9OX0lERU5USUZZSU5HIiw2OToiSURFTlRJRllJTkciLDcwOiJXT1JEIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDVdLFs5LDldLFs5LDddLFs5LDddLFs5LDRdLFs5LDZdLFs5LDNdLFs5LDVdLFs5LDFdLFs5LDNdLFs5LDddLFs5LDldLFs5LDZdLFs5LDhdLFs5LDRdLFs5LDZdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMzAsNF0sWzE2LDFdLFsxNiwxXSxbMTYsM10sWzE2LDNdLFszMSwzXSxbMzIsNF0sWzM4LDFdLFszOCwzXSxbNDUsMV0sWzQ1LDJdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0NiwxXSxbNDYsMV0sWzQ2LDFdLFs0NiwxXSxbMTEsMV0sWzExLDFdLFsxOCwxXSxbMTgsMl0sWzUxLDJdLFs1MSwzXSxbNTEsM10sWzUxLDRdLFs1MiwxXSxbNTMsMV0sWzU0LDFdLFs1NCwzXSxbNTcsMV0sWzU1LDFdLFsxMiwzXSxbNjEsMV0sWzYxLDFdLFs2MSwxXSxbNjEsMV0sWzYxLDFdLFs2MiwxXSxbNjIsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihoZSxsZSxKLFNlLHNlLGFlLE9lKXt2YXIgeWU9YWUubGVuZ3RoLTE7c3dpdGNoKHNlKXtjYXNlIDE6YnJlYWs7Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6YWVbeWUtMV0ucHVzaChhZVt5ZV0pLHRoaXMuJD1hZVt5ZS0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1hZVt5ZV07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OlNlLmFkZEVudGl0eShhZVt5ZS00XSksU2UuYWRkRW50aXR5KGFlW3llLTJdKSxTZS5hZGRSZWxhdGlvbnNoaXAoYWVbeWUtNF0sYWVbeWVdLGFlW3llLTJdLGFlW3llLTNdKTticmVhaztjYXNlIDk6U2UuYWRkRW50aXR5KGFlW3llLThdKSxTZS5hZGRFbnRpdHkoYWVbeWUtNF0pLFNlLmFkZFJlbGF0aW9uc2hpcChhZVt5ZS04XSxhZVt5ZV0sYWVbeWUtNF0sYWVbeWUtNV0pLFNlLnNldENsYXNzKFthZVt5ZS04XV0sYWVbeWUtNl0pLFNlLnNldENsYXNzKFthZVt5ZS00XV0sYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMTA6U2UuYWRkRW50aXR5KGFlW3llLTZdKSxTZS5hZGRFbnRpdHkoYWVbeWUtMl0pLFNlLmFkZFJlbGF0aW9uc2hpcChhZVt5ZS02XSxhZVt5ZV0sYWVbeWUtMl0sYWVbeWUtM10pLFNlLnNldENsYXNzKFthZVt5ZS02XV0sYWVbeWUtNF0pO2JyZWFrO2Nhc2UgMTE6U2UuYWRkRW50aXR5KGFlW3llLTZdKSxTZS5hZGRFbnRpdHkoYWVbeWUtNF0pLFNlLmFkZFJlbGF0aW9uc2hpcChhZVt5ZS02XSxhZVt5ZV0sYWVbeWUtNF0sYWVbeWUtNV0pLFNlLnNldENsYXNzKFthZVt5ZS00XV0sYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMTI6U2UuYWRkRW50aXR5KGFlW3llLTNdKSxTZS5hZGRBdHRyaWJ1dGVzKGFlW3llLTNdLGFlW3llLTFdKTticmVhaztjYXNlIDEzOlNlLmFkZEVudGl0eShhZVt5ZS01XSksU2UuYWRkQXR0cmlidXRlcyhhZVt5ZS01XSxhZVt5ZS0xXSksU2Uuc2V0Q2xhc3MoW2FlW3llLTVdXSxhZVt5ZS0zXSk7YnJlYWs7Y2FzZSAxNDpTZS5hZGRFbnRpdHkoYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMTU6U2UuYWRkRW50aXR5KGFlW3llLTRdKSxTZS5zZXRDbGFzcyhbYWVbeWUtNF1dLGFlW3llLTJdKTticmVhaztjYXNlIDE2OlNlLmFkZEVudGl0eShhZVt5ZV0pO2JyZWFrO2Nhc2UgMTc6U2UuYWRkRW50aXR5KGFlW3llLTJdKSxTZS5zZXRDbGFzcyhbYWVbeWUtMl1dLGFlW3llXSk7YnJlYWs7Y2FzZSAxODpTZS5hZGRFbnRpdHkoYWVbeWUtNl0sYWVbeWUtNF0pLFNlLmFkZEF0dHJpYnV0ZXMoYWVbeWUtNl0sYWVbeWUtMV0pO2JyZWFrO2Nhc2UgMTk6U2UuYWRkRW50aXR5KGFlW3llLThdLGFlW3llLTZdKSxTZS5hZGRBdHRyaWJ1dGVzKGFlW3llLThdLGFlW3llLTFdKSxTZS5zZXRDbGFzcyhbYWVbeWUtOF1dLGFlW3llLTNdKTticmVhaztjYXNlIDIwOlNlLmFkZEVudGl0eShhZVt5ZS01XSxhZVt5ZS0zXSk7YnJlYWs7Y2FzZSAyMTpTZS5hZGRFbnRpdHkoYWVbeWUtN10sYWVbeWUtNV0pLFNlLnNldENsYXNzKFthZVt5ZS03XV0sYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMjI6U2UuYWRkRW50aXR5KGFlW3llLTNdLGFlW3llLTFdKTticmVhaztjYXNlIDIzOlNlLmFkZEVudGl0eShhZVt5ZS01XSxhZVt5ZS0zXSksU2Uuc2V0Q2xhc3MoW2FlW3llLTVdXSxhZVt5ZV0pO2JyZWFrO2Nhc2UgMjQ6Y2FzZSAyNTp0aGlzLiQ9YWVbeWVdLnRyaW0oKSxTZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzp0aGlzLiQ9YWVbeWVdLnRyaW0oKSxTZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6U2Uuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgMzM6U2Uuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgMzQ6U2Uuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgMzU6U2Uuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPWFlW3llLTNdLFNlLmFkZENsYXNzKGFlW3llLTJdLGFlW3llLTFdKTticmVhaztjYXNlIDM3OmNhc2UgMzg6Y2FzZSA1NjpjYXNlIDY0OnRoaXMuJD1bYWVbeWVdXTticmVhaztjYXNlIDM5OmNhc2UgNDA6dGhpcy4kPWFlW3llLTJdLmNvbmNhdChbYWVbeWVdXSk7YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9YWVbeWUtMl0sU2Uuc2V0Q2xhc3MoYWVbeWUtMV0sYWVbeWVdKTticmVhaztjYXNlIDQyOnRoaXMuJD1hZVt5ZS0zXSxTZS5hZGRDc3NTdHlsZXMoYWVbeWUtMl0sYWVbeWUtMV0pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPVthZVt5ZV1dO2JyZWFrO2Nhc2UgNDQ6YWVbeWUtMl0ucHVzaChhZVt5ZV0pLHRoaXMuJD1hZVt5ZS0yXTticmVhaztjYXNlIDQ2OnRoaXMuJD1hZVt5ZS0xXSthZVt5ZV07YnJlYWs7Y2FzZSA1NDpjYXNlIDc2OmNhc2UgNzc6dGhpcy4kPWFlW3llXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgNTU6Y2FzZSA3ODp0aGlzLiQ9YWVbeWVdO2JyZWFrO2Nhc2UgNTc6YWVbeWVdLnB1c2goYWVbeWUtMV0pLHRoaXMuJD1hZVt5ZV07YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9e3R5cGU6YWVbeWUtMV0sbmFtZTphZVt5ZV19O2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXt0eXBlOmFlW3llLTJdLG5hbWU6YWVbeWUtMV0sa2V5czphZVt5ZV19O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXt0eXBlOmFlW3llLTJdLG5hbWU6YWVbeWUtMV0sY29tbWVudDphZVt5ZV19O2JyZWFrO2Nhc2UgNjE6dGhpcy4kPXt0eXBlOmFlW3llLTNdLG5hbWU6YWVbeWUtMl0sa2V5czphZVt5ZS0xXSxjb21tZW50OmFlW3llXX07YnJlYWs7Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjY6dGhpcy4kPWFlW3llXTticmVhaztjYXNlIDY1OmFlW3llLTJdLnB1c2goYWVbeWVdKSx0aGlzLiQ9YWVbeWUtMl07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9YWVbeWVdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e2NhcmRBOmFlW3llXSxyZWxUeXBlOmFlW3llLTFdLGNhcmRCOmFlW3llLTJdfTticmVhaztjYXNlIDY5OnRoaXMuJD1TZS5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDcwOnRoaXMuJD1TZS5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuTURfUEFSRU5UO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPVNlLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDc1OnRoaXMuJD1TZS5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjksMjI6ciwyNDpuLDI2OmksMjg6YSwyOToxNCwzMDoxNSwzMToxNiwzMjoxNywzMzpzLDM0OmwsMzU6dSwzNjpoLDM3OmYsNDA6ZCw0MzpwLDQ0Om0sNTA6Z30sdChlLFsyLDddLHsxOlsyLDFdfSksdChlLFsyLDNdKSx7OToyNywxMTo5LDIyOnIsMjQ6biwyNjppLDI4OmEsMjk6MTQsMzA6MTUsMzE6MTYsMzI6MTcsMzM6cywzNDpsLDM1OnUsMzY6aCwzNzpmLDQwOmQsNDM6cCw0NDptLDUwOmd9LHQoZSxbMiw1XSksdChlLFsyLDZdKSx0KGUsWzIsMTZdLHsxMjoyOCw2MTozMiwxNTpbMSwyOV0sMTc6WzEsMzBdLDIwOlsxLDMxXSw2Mzp5LDY0OnYsNjU6eCw2NjpiLDY3OlR9KSx7MjM6WzEsMzhdfSx7MjU6WzEsMzldfSx7Mjc6WzEsNDBdfSx0KGUsWzIsMjddKSx0KGUsWzIsMjhdKSx0KGUsWzIsMjldKSx0KGUsWzIsMzBdKSx0KGUsWzIsMzFdKSx0KFMsWzIsNTRdKSx0KFMsWzIsNTVdKSx0KGUsWzIsMzJdKSx0KGUsWzIsMzNdKSx0KGUsWzIsMzRdKSx0KGUsWzIsMzVdKSx7MTY6NDEsNDA6dyw0MTpFfSx7MTY6NDQsNDA6dyw0MTpFfSx7MTY6NDUsNDA6dyw0MTpFfSx0KGUsWzIsNF0pLHsxMTo0Niw0MDpkLDUwOmd9LHsxNjo0Nyw0MDp3LDQxOkV9LHsxODo0OCwxOTpbMSw0OV0sNTE6NTAsNTI6NTEsNTY6X30sezExOjUzLDQwOmQsNTA6Z30sezYyOjU0LDY4OlsxLDU1XSw2OTpbMSw1Nl19LHQoQyxbMiw2OV0pLHQoQyxbMiw3MF0pLHQoQyxbMiw3MV0pLHQoQyxbMiw3Ml0pLHQoQyxbMiw3M10pLHQoZSxbMiwyNF0pLHQoZSxbMiwyNV0pLHQoZSxbMiwyNl0pLHsxMzpELDM4OjU3LDQxOk8sNDI6Uiw0NTo1OSw0Njo2MCw0ODprLDQ5Okx9LHQoQSxbMiwzN10pLHQoQSxbMiwzOF0pLHsxNjo2NSw0MDp3LDQxOkUsNDI6Un0sezEzOkQsMzg6NjYsNDE6Tyw0MjpSLDQ1OjU5LDQ2OjYwLDQ4OmssNDk6TH0sezEzOlsxLDY3XSwxNTpbMSw2OF19LHQoZSxbMiwxN10sezYxOjMyLDEyOjY5LDE3OlsxLDcwXSw0MjpSLDYzOnksNjQ6diw2NTp4LDY2OmIsNjc6VH0pLHsxOTpbMSw3MV19LHQoZSxbMiwxNF0pLHsxODo3MiwxOTpbMiw1Nl0sNTE6NTAsNTI6NTEsNTY6X30sezUzOjczLDU2OlsxLDc0XX0sezU2OlsyLDYyXX0sezIxOlsxLDc1XX0sezYxOjc2LDYzOnksNjQ6diw2NTp4LDY2OmIsNjc6VH0sdChJLFsyLDc0XSksdChJLFsyLDc1XSksezY6TSwxMDpQLDM5Ojc3LDQyOkIsNDc6Rn0sezQwOlsxLDgyXSw0MTpbMSw4M119LHQoeixbMiw0M10sezQ2Ojg0LDEzOkQsNDE6Tyw0ODprLDQ5Okx9KSx0KCQsWzIsNDVdKSx0KCQsWzIsNTBdKSx0KCQsWzIsNTFdKSx0KCQsWzIsNTJdKSx0KCQsWzIsNTNdKSx0KGUsWzIsNDFdLHs0MjpSfSksezY6TSwxMDpQLDM5Ojg1LDQyOkIsNDc6Rn0sezE0Ojg2LDQwOlUsNTA6Syw3MDplZX0sezE2OjkwLDQwOncsNDE6RX0sezExOjkxLDQwOmQsNTA6Z30sezE4OjkyLDE5OlsxLDkzXSw1MTo1MCw1Mjo1MSw1NjpffSx0KGUsWzIsMTJdKSx7MTk6WzIsNTddfSx0KFksWzIsNThdLHs1NDo5NCw1NTo5NSw1Nzo5Niw1OTpjZSw2MDpafSksdChbMTksNTYsNTksNjBdLFsyLDYzXSksdChlLFsyLDIyXSx7MTU6WzEsMTAwXSwxNzpbMSw5OV19KSx0KFs0MCw1MF0sWzIsNjhdKSx0KGUsWzIsMzZdKSx7MTM6RCw0MTpPLDQ1OjEwMSw0Njo2MCw0ODprLDQ5Okx9LHQoZSxbMiw0N10pLHQoZSxbMiw0OF0pLHQoZSxbMiw0OV0pLHQoQSxbMiwzOV0pLHQoQSxbMiw0MF0pLHQoJCxbMiw0Nl0pLHQoZSxbMiw0Ml0pLHQoZSxbMiw4XSksdChlLFsyLDc2XSksdChlLFsyLDc3XSksdChlLFsyLDc4XSksezEzOlsxLDEwMl0sNDI6Un0sezEzOlsxLDEwNF0sMTU6WzEsMTAzXX0sezE5OlsxLDEwNV19LHQoZSxbMiwxNV0pLHQoWSxbMiw1OV0sezU1OjEwNiw1ODpbMSwxMDddLDYwOlp9KSx0KFksWzIsNjBdKSx0KHVlLFsyLDY0XSksdChZLFsyLDY3XSksdCh1ZSxbMiw2Nl0pLHsxODoxMDgsMTk6WzEsMTA5XSw1MTo1MCw1Mjo1MSw1NjpffSx7MTY6MTEwLDQwOncsNDE6RX0sdCh6LFsyLDQ0XSx7NDY6ODQsMTM6RCw0MTpPLDQ4OmssNDk6TH0pLHsxNDoxMTEsNDA6VSw1MDpLLDcwOmVlfSx7MTY6MTEyLDQwOncsNDE6RX0sezE0OjExMyw0MDpVLDUwOkssNzA6ZWV9LHQoZSxbMiwxM10pLHQoWSxbMiw2MV0pLHs1NzoxMTQsNTk6Y2V9LHsxOTpbMSwxMTVdfSx0KGUsWzIsMjBdKSx0KGUsWzIsMjNdLHsxNzpbMSwxMTZdLDQyOlJ9KSx0KGUsWzIsMTFdKSx7MTM6WzEsMTE3XSw0MjpSfSx0KGUsWzIsMTBdKSx0KHVlLFsyLDY1XSksdChlLFsyLDE4XSksezE4OjExOCwxOTpbMSwxMTldLDUxOjUwLDUyOjUxLDU2Ol99LHsxNDoxMjAsNDA6VSw1MDpLLDcwOmVlfSx7MTk6WzEsMTIxXX0sdChlLFsyLDIxXSksdChlLFsyLDldKSx0KGUsWzIsMTldKV0sZGVmYXVsdEFjdGlvbnM6ezUyOlsyLDYyXSw3MjpbMiw1N119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihoZSxsZSl7aWYobGUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShoZSk7ZWxzZXt2YXIgSj1uZXcgRXJyb3IoaGUpO3Rocm93IEouaGFzaD1sZSxKfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKGhlKXt2YXIgbGU9dGhpcyxKPVswXSxTZT1bXSxzZT1bbnVsbF0sYWU9W10sT2U9dGhpcy50YWJsZSx5ZT0iIixCZT0wLEhlPTAsemU9MCxMZT0yLEllPTEseGU9YWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGRlPXt5eTp7fX07Zm9yKHZhciBpZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGllKSYmKGRlLnl5W2llXT10aGlzLnl5W2llXSk7cS5zZXRJbnB1dChoZSxkZS55eSksZGUueXkubGV4ZXI9cSxkZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgcS55eWxsb2M+InUiJiYocS55eWxsb2M9e30pO3ZhciBvZT1xLnl5bGxvYzthZS5wdXNoKG9lKTt2YXIgVj1xLm9wdGlvbnMmJnEub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGRlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWRlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFRlKGN0KXtKLmxlbmd0aD1KLmxlbmd0aC0yKmN0LHNlLmxlbmd0aD1zZS5sZW5ndGgtY3QsYWUubGVuZ3RoPWFlLmxlbmd0aC1jdH1vKFRlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIFcoKXt2YXIgY3Q7cmV0dXJuIGN0PVNlLnBvcCgpfHxxLmxleCgpfHxJZSx0eXBlb2YgY3QhPSJudW1iZXIiJiYoY3QgaW5zdGFuY2VvZiBBcnJheSYmKFNlPWN0LGN0PVNlLnBvcCgpKSxjdD1sZS5zeW1ib2xzX1tjdF18fGN0KSxjdH1vKFcsImxleCIpO2Zvcih2YXIgcGUsdmUsUGUsX2UsYmUsVmUsRGU9e30scWUsYXQsUnQsc3Q7Oyl7aWYoUGU9SltKLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1BlXT9fZT10aGlzLmRlZmF1bHRBY3Rpb25zW1BlXTooKHBlPT09bnVsbHx8dHlwZW9mIHBlPiJ1IikmJihwZT1XKCkpLF9lPU9lW1BlXSYmT2VbUGVdW3BlXSksdHlwZW9mIF9lPiJ1Inx8IV9lLmxlbmd0aHx8IV9lWzBdKXt2YXIgVWU9IiI7c3Q9W107Zm9yKHFlIGluIE9lW1BlXSl0aGlzLnRlcm1pbmFsc19bcWVdJiZxZT5MZSYmc3QucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3FlXSsiJyIpO3Euc2hvd1Bvc2l0aW9uP1VlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEJlKzEpK2A6CmArcS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3N0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bcGVdfHxwZSkrIiciOlVlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEJlKzEpKyI6IFVuZXhwZWN0ZWQgIisocGU9PUllPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3BlXXx8cGUpKyInIiksdGhpcy5wYXJzZUVycm9yKFVlLHt0ZXh0OnEubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3BlXXx8cGUsbGluZTpxLnl5bGluZW5vLGxvYzpvZSxleHBlY3RlZDpzdH0pfWlmKF9lWzBdaW5zdGFuY2VvZiBBcnJheSYmX2UubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitQZSsiLCB0b2tlbjogIitwZSk7c3dpdGNoKF9lWzBdKXtjYXNlIDE6Si5wdXNoKHBlKSxzZS5wdXNoKHEueXl0ZXh0KSxhZS5wdXNoKHEueXlsbG9jKSxKLnB1c2goX2VbMV0pLHBlPW51bGwsdmU/KHBlPXZlLHZlPW51bGwpOihIZT1xLnl5bGVuZyx5ZT1xLnl5dGV4dCxCZT1xLnl5bGluZW5vLG9lPXEueXlsbG9jLHplPjAmJnplLS0pO2JyZWFrO2Nhc2UgMjppZihhdD10aGlzLnByb2R1Y3Rpb25zX1tfZVsxXV1bMV0sRGUuJD1zZVtzZS5sZW5ndGgtYXRdLERlLl8kPXtmaXJzdF9saW5lOmFlW2FlLmxlbmd0aC0oYXR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphZVthZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphZVthZS5sZW5ndGgtKGF0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFlW2FlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sViYmKERlLl8kLnJhbmdlPVthZVthZS5sZW5ndGgtKGF0fHwxKV0ucmFuZ2VbMF0sYWVbYWUubGVuZ3RoLTFdLnJhbmdlWzFdXSksVmU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KERlLFt5ZSxIZSxCZSxkZS55eSxfZVsxXSxzZSxhZV0uY29uY2F0KHhlKSksdHlwZW9mIFZlPCJ1IilyZXR1cm4gVmU7YXQmJihKPUouc2xpY2UoMCwtMSphdCoyKSxzZT1zZS5zbGljZSgwLC0xKmF0KSxhZT1hZS5zbGljZSgwLC0xKmF0KSksSi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW19lWzFdXVswXSksc2UucHVzaChEZS4kKSxhZS5wdXNoKERlLl8kKSxSdD1PZVtKW0oubGVuZ3RoLTJdXVtKW0oubGVuZ3RoLTFdXSxKLnB1c2goUnQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxqPWZ1bmN0aW9uKCl7dmFyIHRlPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24obGUsSil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihsZSxKKTtlbHNlIHRocm93IG5ldyBFcnJvcihsZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihoZSxsZSl7cmV0dXJuIHRoaXMueXk9bGV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1oZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9aGUsdGhpcy5tYXRjaGVkKz1oZTt2YXIgbGU9aGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBsZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksaGV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oaGUpe3ZhciBsZT1oZS5sZW5ndGgsSj1oZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWhlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1sZSksdGhpcy5vZmZzZXQtPWxlO3ZhciBTZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxKLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Si5sZW5ndGgtMSk7dmFyIHNlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpKPyhKLmxlbmd0aD09PVNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrU2VbU2UubGVuZ3RoLUoubGVuZ3RoXS5sZW5ndGgtSlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWxlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3NlWzBdLHNlWzBdK3RoaXMueXlsZW5nLWxlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oaGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShoZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oaGUubGVuZ3RoPjIwPyIuLi4iOiIiKStoZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBoZT10aGlzLm1hdGNoO3JldHVybiBoZS5sZW5ndGg8MjAmJihoZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtaGUubGVuZ3RoKSksKGhlLnN1YnN0cigwLDIwKSsoaGUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgaGU9dGhpcy5wYXN0SW5wdXQoKSxsZT1uZXcgQXJyYXkoaGUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gaGUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2xlKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihoZSxsZSl7dmFyIEosU2Usc2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHNlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHNlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFNlPWhlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxTZSYmKHRoaXMueXlsaW5lbm8rPVNlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlNlP1NlW1NlLmxlbmd0aC0xXS5sZW5ndGgtU2VbU2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4raGVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9aGVbMF0sdGhpcy5tYXRjaCs9aGVbMF0sdGhpcy5tYXRjaGVzPWhlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGhlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1oZVswXSxKPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEopcmV0dXJuIEo7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGFlIGluIHNlKXRoaXNbYWVdPXNlW2FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgaGUsbGUsSixTZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBzZT10aGlzLl9jdXJyZW50UnVsZXMoKSxhZT0wO2FlPHNlLmxlbmd0aDthZSsrKWlmKEo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tzZVthZV1dKSxKJiYoIWxlfHxKWzBdLmxlbmd0aD5sZVswXS5sZW5ndGgpKXtpZihsZT1KLFNlPWFlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGhlPXRoaXMudGVzdF9tYXRjaChKLHNlW2FlXSksaGUhPT0hMSlyZXR1cm4gaGU7aWYodGhpcy5fYmFja3RyYWNrKXtsZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBsZT8oaGU9dGhpcy50ZXN0X21hdGNoKGxlLHNlW1NlXSksaGUhPT0hMT9oZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBsZT10aGlzLm5leHQoKTtyZXR1cm4gbGV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKGxlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobGUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGxlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGxlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24obGUpe3JldHVybiBsZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGxlfHwwKSxsZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW2xlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKGxlKXt0aGlzLmJlZ2luKGxlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGxlLEosU2Usc2Upe3ZhciBhZT1zZTtzd2l0Y2goU2Upe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjQ7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDMzO2Nhc2UgODpyZXR1cm4gMzQ7Y2FzZSA5OnJldHVybiAzNTtjYXNlIDEwOnJldHVybiAzNjtjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpyZXR1cm4gNTA7Y2FzZSAxNTpyZXR1cm4gNzA7Y2FzZSAxNjpyZXR1cm4gNDtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDE3O2JyZWFrO2Nhc2UgMTg6cmV0dXJuIDQ5O2Nhc2UgMTk6cmV0dXJuIDQ5O2Nhc2UgMjA6cmV0dXJuIDQyO2Nhc2UgMjE6cmV0dXJuIDE1O2Nhc2UgMjI6cmV0dXJuIDEzO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyNDpyZXR1cm4gNTk7Y2FzZSAyNTpyZXR1cm4gNTY7Y2FzZSAyNjpyZXR1cm4gNTY7Y2FzZSAyNzpyZXR1cm4gNjA7Y2FzZSAyODpicmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gSi55eXRleHRbMF07Y2FzZSAzMTpyZXR1cm4gMjA7Y2FzZSAzMjpyZXR1cm4gMjE7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigic3R5bGUiKSw0NDticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTA7YnJlYWs7Y2FzZSAzNTpicmVhaztjYXNlIDM2OnJldHVybiAxMztjYXNlIDM3OnJldHVybiA0MjtjYXNlIDM4OnJldHVybiA0OTtjYXNlIDM5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDM3O2JyZWFrO2Nhc2UgNDA6cmV0dXJuIDQzO2Nhc2UgNDE6cmV0dXJuIDYzO2Nhc2UgNDI6cmV0dXJuIDY1O2Nhc2UgNDM6cmV0dXJuIDY1O2Nhc2UgNDQ6cmV0dXJuIDY1O2Nhc2UgNDU6cmV0dXJuIDYzO2Nhc2UgNDY6cmV0dXJuIDYzO2Nhc2UgNDc6cmV0dXJuIDY0O2Nhc2UgNDg6cmV0dXJuIDY0O2Nhc2UgNDk6cmV0dXJuIDY0O2Nhc2UgNTA6cmV0dXJuIDY0O2Nhc2UgNTE6cmV0dXJuIDY0O2Nhc2UgNTI6cmV0dXJuIDY1O2Nhc2UgNTM6cmV0dXJuIDY0O2Nhc2UgNTQ6cmV0dXJuIDY1O2Nhc2UgNTU6cmV0dXJuIDY2O2Nhc2UgNTY6cmV0dXJuIDY2O2Nhc2UgNTc6cmV0dXJuIDY2O2Nhc2UgNTg6cmV0dXJuIDY2O2Nhc2UgNTk6cmV0dXJuIDYzO2Nhc2UgNjA6cmV0dXJuIDY0O2Nhc2UgNjE6cmV0dXJuIDY1O2Nhc2UgNjI6cmV0dXJuIDY3O2Nhc2UgNjM6cmV0dXJuIDY4O2Nhc2UgNjQ6cmV0dXJuIDY5O2Nhc2UgNjU6cmV0dXJuIDY5O2Nhc2UgNjY6cmV0dXJuIDY4O2Nhc2UgNjc6cmV0dXJuIDY4O2Nhc2UgNjg6cmV0dXJuIDY4O2Nhc2UgNjk6cmV0dXJuIDQxO2Nhc2UgNzA6cmV0dXJuIDQ3O2Nhc2UgNzE6cmV0dXJuIDQwO2Nhc2UgNzI6cmV0dXJuIDQ4O2Nhc2UgNzM6cmV0dXJuIEoueXl0ZXh0WzBdO2Nhc2UgNzQ6cmV0dXJuIDZ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzpbXHNdKykvaSwvXig/OiJbXiIlXHJcblx2XGJcXF0rIikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzplckRpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86IykvaSwvXig/OiMpL2ksL14oPzosKS9pLC9eKD86Ojo6KS9pLC9eKD86OikvaSwvXig/OlxzKykvaSwvXig/OlxiKCg/OlBLKXwoPzpGSyl8KD86VUspKVxiKS9pLC9eKD86KFteXHNdKilbfl0uKlt+XShbXlxzXSopKS9pLC9eKD86KFtcKkEtWmEtel9cdTAwQzAtXHVGRkZGXVtBLVphLXowLTlcLVxfXFtcXVwoXClcdTAwQzAtXHVGRkZGXCpdKikpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpcWykvaSwvXig/OlxdKS9pLC9eKD86c3R5bGVcYikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86OikvaSwvXig/OiwpL2ksL14oPzojKS9pLC9eKD86Y2xhc3NEZWZcYikvaSwvXig/OmNsYXNzXGIpL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86KFteXHgwMC1ceDdGXXxcd3wtfFwqKSspL2ksL14oPzo7KS9pLC9eKD86KFteXHgwMC1ceDdGXXxcd3wtfFwqKSspL2ksL14oPzpbMC05XSkvaSwvXig/Oi4pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntzdHlsZTp7cnVsZXM6WzM0LDM1LDM2LDM3LDM4LDY5LDcwXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMjMsMjQsMjUsMjYsMjcsMjgsMjksMzBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDMxLDMyLDMzLDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDcxLDcyLDczLDc0XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHRlfSgpO1EubGV4ZXI9ajtmdW5jdGlvbiBuZSgpe3RoaXMueXk9e319cmV0dXJuIG8obmUsIlBhcnNlciIpLG5lLnByb3RvdHlwZT1RLFEuUGFyc2VyPW5lLG5ldyBuZX0oKTtpTi5wYXJzZXI9aU47cHNlPWlOfSk7dmFyIFRrLGdzZT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7R3QoKTtjaSgpO2VyKCk7VGs9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVudGl0aWVzPW5ldyBNYXA7dGhpcy5yZWxhdGlvbnNoaXBzPVtdO3RoaXMuY2xhc3Nlcz1uZXcgTWFwO3RoaXMuZGlyZWN0aW9uPSJUQiI7dGhpcy5DYXJkaW5hbGl0eT17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn07dGhpcy5JZGVudGlmaWNhdGlvbj17Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9O3RoaXMuc2V0QWNjVGl0bGU9QXI7dGhpcy5nZXRBY2NUaXRsZT1Ecjt0aGlzLnNldEFjY0Rlc2NyaXB0aW9uPUxyO3RoaXMuZ2V0QWNjRGVzY3JpcHRpb249UnI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5nZXRDb25maWc9bygoKT0+bWUoKS5lciwiZ2V0Q29uZmlnIik7dGhpcy5jbGVhcigpLHRoaXMuYWRkRW50aXR5PXRoaXMuYWRkRW50aXR5LmJpbmQodGhpcyksdGhpcy5hZGRBdHRyaWJ1dGVzPXRoaXMuYWRkQXR0cmlidXRlcy5iaW5kKHRoaXMpLHRoaXMuYWRkUmVsYXRpb25zaGlwPXRoaXMuYWRkUmVsYXRpb25zaGlwLmJpbmQodGhpcyksdGhpcy5zZXREaXJlY3Rpb249dGhpcy5zZXREaXJlY3Rpb24uYmluZCh0aGlzKSx0aGlzLmFkZENzc1N0eWxlcz10aGlzLmFkZENzc1N0eWxlcy5iaW5kKHRoaXMpLHRoaXMuYWRkQ2xhc3M9dGhpcy5hZGRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0Q2xhc3M9dGhpcy5zZXRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0QWNjVGl0bGU9dGhpcy5zZXRBY2NUaXRsZS5iaW5kKHRoaXMpLHRoaXMuc2V0QWNjRGVzY3JpcHRpb249dGhpcy5zZXRBY2NEZXNjcmlwdGlvbi5iaW5kKHRoaXMpfXN0YXRpY3tvKHRoaXMsIkVyREIiKX1hZGRFbnRpdHkoZSxyPSIiKXtyZXR1cm4gdGhpcy5lbnRpdGllcy5oYXMoZSk/IXRoaXMuZW50aXRpZXMuZ2V0KGUpPy5hbGlhcyYmciYmKHRoaXMuZW50aXRpZXMuZ2V0KGUpLmFsaWFzPXIsWC5pbmZvKGBBZGQgYWxpYXMgJyR7cn0nIHRvIGVudGl0eSAnJHtlfSdgKSk6KHRoaXMuZW50aXRpZXMuc2V0KGUse2lkOmBlbnRpdHktJHtlfS0ke3RoaXMuZW50aXRpZXMuc2l6ZX1gLGxhYmVsOmUsYXR0cmlidXRlczpbXSxhbGlhczpyLHNoYXBlOiJlckJveCIsbG9vazptZSgpLmxvb2s/PyJkZWZhdWx0Iixjc3NDbGFzc2VzOiJkZWZhdWx0Iixjc3NTdHlsZXM6W119KSxYLmluZm8oIkFkZGVkIG5ldyBlbnRpdHkgOiIsZSkpLHRoaXMuZW50aXRpZXMuZ2V0KGUpfWdldEVudGl0eShlKXtyZXR1cm4gdGhpcy5lbnRpdGllcy5nZXQoZSl9Z2V0RW50aXRpZXMoKXtyZXR1cm4gdGhpcy5lbnRpdGllc31nZXRDbGFzc2VzKCl7cmV0dXJuIHRoaXMuY2xhc3Nlc31hZGRBdHRyaWJ1dGVzKGUscil7bGV0IG49dGhpcy5hZGRFbnRpdHkoZSksaTtmb3IoaT1yLmxlbmd0aC0xO2k+PTA7aS0tKXJbaV0ua2V5c3x8KHJbaV0ua2V5cz1bXSkscltpXS5jb21tZW50fHwocltpXS5jb21tZW50PSIiKSxuLmF0dHJpYnV0ZXMucHVzaChyW2ldKSxYLmRlYnVnKCJBZGRlZCBhdHRyaWJ1dGUgIixyW2ldLm5hbWUpfWFkZFJlbGF0aW9uc2hpcChlLHIsbixpKXtsZXQgYT10aGlzLmVudGl0aWVzLmdldChlKSxzPXRoaXMuZW50aXRpZXMuZ2V0KG4pO2lmKCFhfHwhcylyZXR1cm47bGV0IGw9e2VudGl0eUE6YS5pZCxyb2xlQTpyLGVudGl0eUI6cy5pZCxyZWxTcGVjOml9O3RoaXMucmVsYXRpb25zaGlwcy5wdXNoKGwpLFguZGVidWcoIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgOiIsbCl9Z2V0UmVsYXRpb25zaGlwcygpe3JldHVybiB0aGlzLnJlbGF0aW9uc2hpcHN9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9ufXNldERpcmVjdGlvbihlKXt0aGlzLmRpcmVjdGlvbj1lfWdldENvbXBpbGVkU3R5bGVzKGUpe2xldCByPVtdO2ZvcihsZXQgbiBvZiBlKXtsZXQgaT10aGlzLmNsYXNzZXMuZ2V0KG4pO2k/LnN0eWxlcyYmKHI9Wy4uLnIsLi4uaS5zdHlsZXM/P1tdXS5tYXAoYT0+YS50cmltKCkpKSxpPy50ZXh0U3R5bGVzJiYocj1bLi4uciwuLi5pLnRleHRTdHlsZXM/P1tdXS5tYXAoYT0+YS50cmltKCkpKX1yZXR1cm4gcn1hZGRDc3NTdHlsZXMoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5lbnRpdGllcy5nZXQobik7aWYoIXJ8fCFpKXJldHVybjtmb3IobGV0IGEgb2YgcilpLmNzc1N0eWxlcy5wdXNoKGEpfX1hZGRDbGFzcyhlLHIpe2UuZm9yRWFjaChuPT57bGV0IGk9dGhpcy5jbGFzc2VzLmdldChuKTtpPT09dm9pZCAwJiYoaT17aWQ6bixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sdGhpcy5jbGFzc2VzLnNldChuLGkpKSxyJiZyLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoL2NvbG9yLy5leGVjKGEpKXtsZXQgcz1hLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKTtpLnRleHRTdHlsZXMucHVzaChzKX1pLnN0eWxlcy5wdXNoKGEpfSl9KX1zZXRDbGFzcyhlLHIpe2ZvcihsZXQgbiBvZiBlKXtsZXQgaT10aGlzLmVudGl0aWVzLmdldChuKTtpZihpKWZvcihsZXQgYSBvZiByKWkuY3NzQ2xhc3Nlcys9IiAiK2F9fWNsZWFyKCl7dGhpcy5lbnRpdGllcz1uZXcgTWFwLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLHRoaXMucmVsYXRpb25zaGlwcz1bXSxrcigpfWdldERhdGEoKXtsZXQgZT1bXSxyPVtdLG49bWUoKTtmb3IobGV0IGEgb2YgdGhpcy5lbnRpdGllcy5rZXlzKCkpe2xldCBzPXRoaXMuZW50aXRpZXMuZ2V0KGEpO3MmJihzLmNzc0NvbXBpbGVkU3R5bGVzPXRoaXMuZ2V0Q29tcGlsZWRTdHlsZXMocy5jc3NDbGFzc2VzLnNwbGl0KCIgIikpLGUucHVzaChzKSl9bGV0IGk9MDtmb3IobGV0IGEgb2YgdGhpcy5yZWxhdGlvbnNoaXBzKXtsZXQgcz17aWQ6V2goYS5lbnRpdHlBLGEuZW50aXR5Qix7cHJlZml4OiJpZCIsY291bnRlcjppKyt9KSx0eXBlOiJub3JtYWwiLGN1cnZlOiJiYXNpcyIsc3RhcnQ6YS5lbnRpdHlBLGVuZDphLmVudGl0eUIsbGFiZWw6YS5yb2xlQSxsYWJlbHBvczoiYyIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InJlbGF0aW9uc2hpcExpbmUiLGFycm93VHlwZVN0YXJ0OmEucmVsU3BlYy5jYXJkQi50b0xvd2VyQ2FzZSgpLGFycm93VHlwZUVuZDphLnJlbFNwZWMuY2FyZEEudG9Mb3dlckNhc2UoKSxwYXR0ZXJuOmEucmVsU3BlYy5yZWxUeXBlPT0iSURFTlRJRllJTkciPyJzb2xpZCI6ImRhc2hlZCIsbG9vazpuLmxvb2t9O3IucHVzaChzKX1yZXR1cm57bm9kZXM6ZSxlZGdlczpyLG90aGVyOnt9LGNvbmZpZzpuLGRpcmVjdGlvbjoiVEIifX19fSk7dmFyIGFOPXt9O3VyKGFOLHtkcmF3OigpPT5aUGV9KTt2YXIgWlBlLHlzZT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtTbSgpO3JwKCk7bnAoKTtlcigpO2ZyKCk7WlBlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyBlciBkaWFncmFtICh1bmlmaWVkKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxlcjphLGxheW91dDpzfT1tZSgpLGw9bi5kYi5nZXREYXRhKCksdT13YyhlLGkpO2wudHlwZT1uLnR5cGUsbC5sYXlvdXRBbGdvcml0aG09dWYocyksbC5jb25maWcuZmxvd2NoYXJ0Lm5vZGVTcGFjaW5nPWE/Lm5vZGVTcGFjaW5nfHwxNDAsbC5jb25maWcuZmxvd2NoYXJ0LnJhbmtTcGFjaW5nPWE/LnJhbmtTcGFjaW5nfHw4MCxsLmRpcmVjdGlvbj1uLmRiLmdldERpcmVjdGlvbigpLGwubWFya2Vycz1bIm9ubHlfb25lIiwiemVyb19vcl9vbmUiLCJvbmVfb3JfbW9yZSIsInplcm9fb3JfbW9yZSJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgUmMobCx1KSxsLmxheW91dEFsZ29yaXRobT09PSJlbGsiJiZ1LnNlbGVjdCgiLmVkZ2VzIikubG93ZXIoKTtsZXQgaD11LnNlbGVjdEFsbCgnW2lkKj0iLWJhY2tncm91bmQiXScpO0FycmF5LmZyb20oaCkubGVuZ3RoPjAmJmguZWFjaChmdW5jdGlvbigpe2xldCBkPUdlKHRoaXMpLG09ZC5hdHRyKCJpZCIpLnJlcGxhY2UoIi1iYWNrZ3JvdW5kIiwiIiksZz11LnNlbGVjdChgIyR7Q1NTLmVzY2FwZShtKX1gKTtpZighZy5lbXB0eSgpKXtsZXQgeT1nLmF0dHIoInRyYW5zZm9ybSIpO2QuYXR0cigidHJhbnNmb3JtIix5KX19KTtsZXQgZj04O1Z0Lmluc2VydFRpdGxlKHUsImVyRGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLFlvKHUsZiwiZXJEaWFncmFtIixhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpfSk7dmFyIEpQZSxlQmUsdnNlLHhzZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7SlBlPW8oKHQsZSk9PntsZXQgcj1pZCxuPXIodCwiciIpLGk9cih0LCJnIiksYT1yKHQsImIiKTtyZXR1cm4gUWEobixpLGEsZSl9LCJmYWRlIiksZUJlPW8odD0+YAogIC5lbnRpdHlCb3ggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAucmVsYXRpb25zaGlwTGFiZWxCb3ggewogICAgZmlsbDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgb3BhY2l0eTogMC43OwogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgICByZWN0IHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICB9CgogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke0pQZSh0LnRlcnRpYXJ5Q29sb3IsLjUpfTsKICB9CgogIC5lZGdlTGFiZWwgLmxhYmVsIHsKICAgIGZpbGw6ICR7dC5ub2RlQm9yZGVyfTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICB9CgogIC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQoKICAuZWRnZS1wYXR0ZXJuLWRhc2hlZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA4LDg7CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24KICB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAubWFya2VyIHsKICAgIGZpbGw6IG5vbmUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CmAsImdldFN0eWxlcyIpLHZzZT1lQmV9KTt2YXIgYnNlPXt9O3VyKGJzZSx7ZGlhZ3JhbTooKT0+dEJlfSk7dmFyIHRCZSxUc2U9TigoKT0+eyJ1c2Ugc3RyaWN0Ijttc2UoKTtnc2UoKTt5c2UoKTt4c2UoKTt0QmU9e3BhcnNlcjpwc2UsZ2V0IGRiKCl7cmV0dXJuIG5ldyBUa30scmVuZGVyZXI6YU4sc3R5bGVzOnZzZX19KTtmdW5jdGlvbiBzaSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdHlwZW9mIHQuJHR5cGU9PSJzdHJpbmcifWZ1bmN0aW9uIHlhKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC4kcmVmVGV4dD09InN0cmluZyJ9ZnVuY3Rpb24gc04odCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0Lm5hbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC50eXBlPT0ic3RyaW5nIiYmdHlwZW9mIHQucGF0aD09InN0cmluZyJ9ZnVuY3Rpb24gYXAodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnNpKHQuY29udGFpbmVyKSYmeWEodC5yZWZlcmVuY2UpJiZ0eXBlb2YgdC5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBNbCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmQXJyYXkuaXNBcnJheSh0LmNvbnRlbnQpfWZ1bmN0aW9uIGhmKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC50b2tlblR5cGU9PSJvYmplY3QifWZ1bmN0aW9uIFUyKHQpe3JldHVybiBNbCh0KSYmdHlwZW9mIHQuZnVsbFRleHQ9PSJzdHJpbmcifXZhciBpcCxJbD1OKCgpPT57InVzZSBzdHJpY3QiO28oc2ksImlzQXN0Tm9kZSIpO28oeWEsImlzUmVmZXJlbmNlIik7byhzTiwiaXNBc3ROb2RlRGVzY3JpcHRpb24iKTtvKGFwLCJpc0xpbmtpbmdFcnJvciIpO2lwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0QXN0UmVmbGVjdGlvbiIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zdWJ0eXBlcz17fSx0aGlzLmFsbFN1YnR5cGVzPXt9fWlzSW5zdGFuY2UoZSxyKXtyZXR1cm4gc2koZSkmJnRoaXMuaXNTdWJ0eXBlKGUuJHR5cGUscil9aXNTdWJ0eXBlKGUscil7aWYoZT09PXIpcmV0dXJuITA7bGV0IG49dGhpcy5zdWJ0eXBlc1tlXTtufHwobj10aGlzLnN1YnR5cGVzW2VdPXt9KTtsZXQgaT1uW3JdO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7e2xldCBhPXRoaXMuY29tcHV0ZUlzU3VidHlwZShlLHIpO3JldHVybiBuW3JdPWEsYX19Z2V0QWxsU3ViVHlwZXMoZSl7bGV0IHI9dGhpcy5hbGxTdWJ0eXBlc1tlXTtpZihyKXJldHVybiByO3tsZXQgbj10aGlzLmdldEFsbFR5cGVzKCksaT1bXTtmb3IobGV0IGEgb2Ygbil0aGlzLmlzU3VidHlwZShhLGUpJiZpLnB1c2goYSk7cmV0dXJuIHRoaXMuYWxsU3VidHlwZXNbZV09aSxpfX19O28oTWwsImlzQ29tcG9zaXRlQ3N0Tm9kZSIpO28oaGYsImlzTGVhZkNzdE5vZGUiKTtvKFUyLCJpc1Jvb3RDc3ROb2RlIil9KTtmdW5jdGlvbiBhQmUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OnR5cGVvZiB0PiJ1Ij8idW5kZWZpbmVkIjp0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIj90LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHdrKHQpe3JldHVybiEhdCYmdHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1mdW5jdGlvbiBlbiguLi50KXtpZih0Lmxlbmd0aD09PTEpe2xldCBlPXRbMF07aWYoZSBpbnN0YW5jZW9mIGNvKXJldHVybiBlO2lmKHdrKGUpKXJldHVybiBuZXcgY28oKCk9PmVbU3ltYm9sLml0ZXJhdG9yXSgpLHI9PnIubmV4dCgpKTtpZih0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiKXJldHVybiBuZXcgY28oKCk9Pih7aW5kZXg6MH0pLHI9PnIuaW5kZXg8ZS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6ZVtyLmluZGV4KytdfTpCYSl9cmV0dXJuIHQubGVuZ3RoPjE/bmV3IGNvKCgpPT4oe2NvbGxJbmRleDowLGFyckluZGV4OjB9KSxlPT57ZG97aWYoZS5pdGVyYXRvcil7bGV0IHI9ZS5pdGVyYXRvci5uZXh0KCk7aWYoIXIuZG9uZSlyZXR1cm4gcjtlLml0ZXJhdG9yPXZvaWQgMH1pZihlLmFycmF5KXtpZihlLmFyckluZGV4PGUuYXJyYXkubGVuZ3RoKXJldHVybntkb25lOiExLHZhbHVlOmUuYXJyYXlbZS5hcnJJbmRleCsrXX07ZS5hcnJheT12b2lkIDAsZS5hcnJJbmRleD0wfWlmKGUuY29sbEluZGV4PHQubGVuZ3RoKXtsZXQgcj10W2UuY29sbEluZGV4KytdO3drKHIpP2UuaXRlcmF0b3I9cltTeW1ib2wuaXRlcmF0b3JdKCk6ciYmdHlwZW9mIHIubGVuZ3RoPT0ibnVtYmVyIiYmKGUuYXJyYXk9cil9fXdoaWxlKGUuaXRlcmF0b3J8fGUuYXJyYXl8fGUuY29sbEluZGV4PHQubGVuZ3RoKTtyZXR1cm4gQmF9KTpIMn12YXIgY28sSDIsQmEsTWMsam0sR3M9TigoKT0+eyJ1c2Ugc3RyaWN0Ijtjbz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlN0cmVhbUltcGwiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuc3RhcnRGbj1lLHRoaXMubmV4dEZuPXJ9aXRlcmF0b3IoKXtsZXQgZT17c3RhdGU6dGhpcy5zdGFydEZuKCksbmV4dDpvKCgpPT50aGlzLm5leHRGbihlLnN0YXRlKSwibmV4dCIpLFtTeW1ib2wuaXRlcmF0b3JdOigpPT5lfTtyZXR1cm4gZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLml0ZXJhdG9yKCl9aXNFbXB0eSgpe3JldHVybiEhdGhpcy5pdGVyYXRvcigpLm5leHQoKS5kb25lfWNvdW50KCl7bGV0IGU9dGhpcy5pdGVyYXRvcigpLHI9MCxuPWUubmV4dCgpO2Zvcig7IW4uZG9uZTspcisrLG49ZS5uZXh0KCk7cmV0dXJuIHJ9dG9BcnJheSgpe2xldCBlPVtdLHI9dGhpcy5pdGVyYXRvcigpLG47ZG8gbj1yLm5leHQoKSxuLnZhbHVlIT09dm9pZCAwJiZlLnB1c2gobi52YWx1ZSk7d2hpbGUoIW4uZG9uZSk7cmV0dXJuIGV9dG9TZXQoKXtyZXR1cm4gbmV3IFNldCh0aGlzKX10b01hcChlLHIpe2xldCBuPXRoaXMubWFwKGk9PltlP2UoaSk6aSxyP3IoaSk6aV0pO3JldHVybiBuZXcgTWFwKG4pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuam9pbigpfWNvbmNhdChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7Zmlyc3Q6dGhpcy5zdGFydEZuKCksZmlyc3REb25lOiExLGl0ZXJhdG9yOmVbU3ltYm9sLml0ZXJhdG9yXSgpfSkscj0+e2xldCBuO2lmKCFyLmZpcnN0RG9uZSl7ZG8gaWYobj10aGlzLm5leHRGbihyLmZpcnN0KSwhbi5kb25lKXJldHVybiBuO3doaWxlKCFuLmRvbmUpO3IuZmlyc3REb25lPSEwfWRvIGlmKG49ci5pdGVyYXRvci5uZXh0KCksIW4uZG9uZSlyZXR1cm4gbjt3aGlsZSghbi5kb25lKTtyZXR1cm4gQmF9KX1qb2luKGU9IiwiKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj0iIixpLGE9ITE7ZG8gaT1yLm5leHQoKSxpLmRvbmV8fChhJiYobis9ZSksbis9YUJlKGkudmFsdWUpKSxhPSEwO3doaWxlKCFpLmRvbmUpO3JldHVybiBufWluZGV4T2YoZSxyPTApe2xldCBuPXRoaXMuaXRlcmF0b3IoKSxpPTAsYT1uLm5leHQoKTtmb3IoOyFhLmRvbmU7KXtpZihpPj1yJiZhLnZhbHVlPT09ZSlyZXR1cm4gaTthPW4ubmV4dCgpLGkrK31yZXR1cm4tMX1ldmVyeShlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj1yLm5leHQoKTtmb3IoOyFuLmRvbmU7KXtpZighZShuLnZhbHVlKSlyZXR1cm4hMTtuPXIubmV4dCgpfXJldHVybiEwfXNvbWUoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYoZShuLnZhbHVlKSlyZXR1cm4hMDtuPXIubmV4dCgpfXJldHVybiExfWZvckVhY2goZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49MCxpPXIubmV4dCgpO2Zvcig7IWkuZG9uZTspZShpLnZhbHVlLG4pLGk9ci5uZXh0KCksbisrfW1hcChlKXtyZXR1cm4gbmV3IHQodGhpcy5zdGFydEZuLHI9PntsZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIpO3JldHVybiBuP0JhOntkb25lOiExLHZhbHVlOmUoaSl9fSl9ZmlsdGVyKGUpe3JldHVybiBuZXcgdCh0aGlzLnN0YXJ0Rm4scj0+e2xldCBuO2RvIGlmKG49dGhpcy5uZXh0Rm4ociksIW4uZG9uZSYmZShuLnZhbHVlKSlyZXR1cm4gbjt3aGlsZSghbi5kb25lKTtyZXR1cm4gQmF9KX1ub25OdWxsYWJsZSgpe3JldHVybiB0aGlzLmZpbHRlcihlPT5lIT1udWxsKX1yZWR1Y2UoZSxyKXtsZXQgbj10aGlzLml0ZXJhdG9yKCksaT1yLGE9bi5uZXh0KCk7Zm9yKDshYS5kb25lOylpPT09dm9pZCAwP2k9YS52YWx1ZTppPWUoaSxhLnZhbHVlKSxhPW4ubmV4dCgpO3JldHVybiBpfXJlZHVjZVJpZ2h0KGUscil7cmV0dXJuIHRoaXMucmVjdXJzaXZlUmVkdWNlKHRoaXMuaXRlcmF0b3IoKSxlLHIpfXJlY3Vyc2l2ZVJlZHVjZShlLHIsbil7bGV0IGk9ZS5uZXh0KCk7aWYoaS5kb25lKXJldHVybiBuO2xldCBhPXRoaXMucmVjdXJzaXZlUmVkdWNlKGUscixuKTtyZXR1cm4gYT09PXZvaWQgMD9pLnZhbHVlOnIoYSxpLnZhbHVlKX1maW5kKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKGUobi52YWx1ZSkpcmV0dXJuIG4udmFsdWU7bj1yLm5leHQoKX19ZmluZEluZGV4KGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPTAsaT1yLm5leHQoKTtmb3IoOyFpLmRvbmU7KXtpZihlKGkudmFsdWUpKXJldHVybiBuO2k9ci5uZXh0KCksbisrfXJldHVybi0xfWluY2x1ZGVzKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKG4udmFsdWU9PT1lKXJldHVybiEwO249ci5uZXh0KCl9cmV0dXJuITF9ZmxhdE1hcChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7dGhpczp0aGlzLnN0YXJ0Rm4oKX0pLHI9Pntkb3tpZihyLml0ZXJhdG9yKXtsZXQgYT1yLml0ZXJhdG9yLm5leHQoKTtpZihhLmRvbmUpci5pdGVyYXRvcj12b2lkIDA7ZWxzZSByZXR1cm4gYX1sZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIudGhpcyk7aWYoIW4pe2xldCBhPWUoaSk7aWYod2soYSkpci5pdGVyYXRvcj1hW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHJldHVybntkb25lOiExLHZhbHVlOmF9fX13aGlsZShyLml0ZXJhdG9yKTtyZXR1cm4gQmF9KX1mbGF0KGUpe2lmKGU9PT12b2lkIDAmJihlPTEpLGU8PTApcmV0dXJuIHRoaXM7bGV0IHI9ZT4xP3RoaXMuZmxhdChlLTEpOnRoaXM7cmV0dXJuIG5ldyB0KCgpPT4oe3RoaXM6ci5zdGFydEZuKCl9KSxuPT57ZG97aWYobi5pdGVyYXRvcil7bGV0IHM9bi5pdGVyYXRvci5uZXh0KCk7aWYocy5kb25lKW4uaXRlcmF0b3I9dm9pZCAwO2Vsc2UgcmV0dXJuIHN9bGV0e2RvbmU6aSx2YWx1ZTphfT1yLm5leHRGbihuLnRoaXMpO2lmKCFpKWlmKHdrKGEpKW4uaXRlcmF0b3I9YVtTeW1ib2wuaXRlcmF0b3JdKCk7ZWxzZSByZXR1cm57ZG9uZTohMSx2YWx1ZTphfX13aGlsZShuLml0ZXJhdG9yKTtyZXR1cm4gQmF9KX1oZWFkKCl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLm5leHQoKTtpZighci5kb25lKXJldHVybiByLnZhbHVlfXRhaWwoZT0xKXtyZXR1cm4gbmV3IHQoKCk9PntsZXQgcj10aGlzLnN0YXJ0Rm4oKTtmb3IobGV0IG49MDtuPGU7bisrKWlmKHRoaXMubmV4dEZuKHIpLmRvbmUpcmV0dXJuIHI7cmV0dXJuIHJ9LHRoaXMubmV4dEZuKX1saW1pdChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7c2l6ZTowLHN0YXRlOnRoaXMuc3RhcnRGbigpfSkscj0+KHIuc2l6ZSsrLHIuc2l6ZT5lP0JhOnRoaXMubmV4dEZuKHIuc3RhdGUpKSl9ZGlzdGluY3QoZSl7cmV0dXJuIG5ldyB0KCgpPT4oe3NldDpuZXcgU2V0LGludGVybmFsU3RhdGU6dGhpcy5zdGFydEZuKCl9KSxyPT57bGV0IG47ZG8gaWYobj10aGlzLm5leHRGbihyLmludGVybmFsU3RhdGUpLCFuLmRvbmUpe2xldCBpPWU/ZShuLnZhbHVlKTpuLnZhbHVlO2lmKCFyLnNldC5oYXMoaSkpcmV0dXJuIHIuc2V0LmFkZChpKSxufXdoaWxlKCFuLmRvbmUpO3JldHVybiBCYX0pfWV4Y2x1ZGUoZSxyKXtsZXQgbj1uZXcgU2V0O2ZvcihsZXQgaSBvZiBlKXtsZXQgYT1yP3IoaSk6aTtuLmFkZChhKX1yZXR1cm4gdGhpcy5maWx0ZXIoaT0+e2xldCBhPXI/cihpKTppO3JldHVybiFuLmhhcyhhKX0pfX07byhhQmUsInRvU3RyaW5nIik7byh3aywiaXNJdGVyYWJsZSIpO0gyPW5ldyBjbygoKT0+e30sKCk9PkJhKSxCYT1PYmplY3QuZnJlZXplKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pO28oZW4sInN0cmVhbSIpO01jPWNsYXNzIGV4dGVuZHMgY297c3RhdGlje28odGhpcywiVHJlZVN0cmVhbUltcGwiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKCk9Pih7aXRlcmF0b3JzOm4/LmluY2x1ZGVSb290P1tbZV1bU3ltYm9sLml0ZXJhdG9yXSgpXTpbcihlKVtTeW1ib2wuaXRlcmF0b3JdKCldLHBydW5lZDohMX0pLGk9Pntmb3IoaS5wcnVuZWQmJihpLml0ZXJhdG9ycy5wb3AoKSxpLnBydW5lZD0hMSk7aS5pdGVyYXRvcnMubGVuZ3RoPjA7KXtsZXQgcz1pLml0ZXJhdG9yc1tpLml0ZXJhdG9ycy5sZW5ndGgtMV0ubmV4dCgpO2lmKHMuZG9uZSlpLml0ZXJhdG9ycy5wb3AoKTtlbHNlIHJldHVybiBpLml0ZXJhdG9ycy5wdXNoKHIocy52YWx1ZSlbU3ltYm9sLml0ZXJhdG9yXSgpKSxzfXJldHVybiBCYX0pfWl0ZXJhdG9yKCl7bGV0IGU9e3N0YXRlOnRoaXMuc3RhcnRGbigpLG5leHQ6bygoKT0+dGhpcy5uZXh0Rm4oZS5zdGF0ZSksIm5leHQiKSxwcnVuZTpvKCgpPT57ZS5zdGF0ZS5wcnVuZWQ9ITB9LCJwcnVuZSIpLFtTeW1ib2wuaXRlcmF0b3JdOigpPT5lfTtyZXR1cm4gZX19OyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+cytsLDApfW8oZSwic3VtIiksdC5zdW09ZTtmdW5jdGlvbiByKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+cypsLDApfW8ociwicHJvZHVjdCIpLHQucHJvZHVjdD1yO2Z1bmN0aW9uIG4oYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5NYXRoLm1pbihzLGwpKX1vKG4sIm1pbiIpLHQubWluPW47ZnVuY3Rpb24gaShhKXtyZXR1cm4gYS5yZWR1Y2UoKHMsbCk9Pk1hdGgubWF4KHMsbCkpfW8oaSwibWF4IiksdC5tYXg9aX0pKGptfHwoam09e30pKX0pO3ZhciBFaz17fTt1cihFayx7RGVmYXVsdE5hbWVSZWdleHA6KCk9PmtrLFJhbmdlQ29tcGFyaXNvbjooKT0+SWMsY29tcGFyZVJhbmdlOigpPT5Tc2UsZmluZENvbW1lbnROb2RlOigpPT51TixmaW5kRGVjbGFyYXRpb25Ob2RlQXRPZmZzZXQ6KCk9Pm9CZSxmaW5kTGVhZk5vZGVBdE9mZnNldDooKT0+aE4sZmluZExlYWZOb2RlQmVmb3JlT2Zmc2V0OigpPT5Dc2UsZmxhdHRlbkNzdDooKT0+c0JlLGdldEludGVyaW9yTm9kZXM6KCk9PnVCZSxnZXROZXh0Tm9kZTooKT0+bEJlLGdldFByZXZpb3VzTm9kZTooKT0+X3NlLGdldFN0YXJ0bGluZU5vZGU6KCk9PmNCZSxpblJhbmdlOigpPT5jTixpc0NoaWxkTm9kZTooKT0+bE4saXNDb21tZW50Tm9kZTooKT0+b04sc3RyZWFtQ3N0OigpPT5zcCx0b0RvY3VtZW50U2VnbWVudDooKT0+b3AsdG9rZW5Ub1JhbmdlOigpPT5LbX0pO2Z1bmN0aW9uIHNwKHQpe3JldHVybiBuZXcgTWModCxlPT5NbChlKT9lLmNvbnRlbnQ6W10se2luY2x1ZGVSb290OiEwfSl9ZnVuY3Rpb24gc0JlKHQpe3JldHVybiBzcCh0KS5maWx0ZXIoaGYpfWZ1bmN0aW9uIGxOKHQsZSl7Zm9yKDt0LmNvbnRhaW5lcjspaWYodD10LmNvbnRhaW5lcix0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBLbSh0KXtyZXR1cm57c3RhcnQ6e2NoYXJhY3Rlcjp0LnN0YXJ0Q29sdW1uLTEsbGluZTp0LnN0YXJ0TGluZS0xfSxlbmQ6e2NoYXJhY3Rlcjp0LmVuZENvbHVtbixsaW5lOnQuZW5kTGluZS0xfX19ZnVuY3Rpb24gb3AodCl7aWYoIXQpcmV0dXJuO2xldHtvZmZzZXQ6ZSxlbmQ6cixyYW5nZTpufT10O3JldHVybntyYW5nZTpuLG9mZnNldDplLGVuZDpyLGxlbmd0aDpyLWV9fWZ1bmN0aW9uIFNzZSh0LGUpe2lmKHQuZW5kLmxpbmU8ZS5zdGFydC5saW5lfHx0LmVuZC5saW5lPT09ZS5zdGFydC5saW5lJiZ0LmVuZC5jaGFyYWN0ZXI8PWUuc3RhcnQuY2hhcmFjdGVyKXJldHVybiBJYy5CZWZvcmU7aWYodC5zdGFydC5saW5lPmUuZW5kLmxpbmV8fHQuc3RhcnQubGluZT09PWUuZW5kLmxpbmUmJnQuc3RhcnQuY2hhcmFjdGVyPj1lLmVuZC5jaGFyYWN0ZXIpcmV0dXJuIEljLkFmdGVyO2xldCByPXQuc3RhcnQubGluZT5lLnN0YXJ0LmxpbmV8fHQuc3RhcnQubGluZT09PWUuc3RhcnQubGluZSYmdC5zdGFydC5jaGFyYWN0ZXI+PWUuc3RhcnQuY2hhcmFjdGVyLG49dC5lbmQubGluZTxlLmVuZC5saW5lfHx0LmVuZC5saW5lPT09ZS5lbmQubGluZSYmdC5lbmQuY2hhcmFjdGVyPD1lLmVuZC5jaGFyYWN0ZXI7cmV0dXJuIHImJm4/SWMuSW5zaWRlOnI/SWMuT3ZlcmxhcEJhY2s6bj9JYy5PdmVybGFwRnJvbnQ6SWMuT3V0c2lkZX1mdW5jdGlvbiBjTih0LGUpe3JldHVybiBTc2UodCxlKT5JYy5BZnRlcn1mdW5jdGlvbiBvQmUodCxlLHI9a2spe2lmKHQpe2lmKGU+MCl7bGV0IG49ZS10Lm9mZnNldCxpPXQudGV4dC5jaGFyQXQobik7ci50ZXN0KGkpfHxlLS19cmV0dXJuIGhOKHQsZSl9fWZ1bmN0aW9uIHVOKHQsZSl7aWYodCl7bGV0IHI9X3NlKHQsITApO2lmKHImJm9OKHIsZSkpcmV0dXJuIHI7aWYoVTIodCkpe2xldCBuPXQuY29udGVudC5maW5kSW5kZXgoaT0+IWkuaGlkZGVuKTtmb3IobGV0IGk9bi0xO2k+PTA7aS0tKXtsZXQgYT10LmNvbnRlbnRbaV07aWYob04oYSxlKSlyZXR1cm4gYX19fX1mdW5jdGlvbiBvTih0LGUpe3JldHVybiBoZih0KSYmZS5pbmNsdWRlcyh0LnRva2VuVHlwZS5uYW1lKX1mdW5jdGlvbiBoTih0LGUpe2lmKGhmKHQpKXJldHVybiB0O2lmKE1sKHQpKXtsZXQgcj1Bc2UodCxlLCExKTtpZihyKXJldHVybiBoTihyLGUpfX1mdW5jdGlvbiBDc2UodCxlKXtpZihoZih0KSlyZXR1cm4gdDtpZihNbCh0KSl7bGV0IHI9QXNlKHQsZSwhMCk7aWYocilyZXR1cm4gQ3NlKHIsZSl9fWZ1bmN0aW9uIEFzZSh0LGUscil7bGV0IG49MCxpPXQuY29udGVudC5sZW5ndGgtMSxhO2Zvcig7bjw9aTspe2xldCBzPU1hdGguZmxvb3IoKG4raSkvMiksbD10LmNvbnRlbnRbc107aWYobC5vZmZzZXQ8PWUmJmwuZW5kPmUpcmV0dXJuIGw7bC5lbmQ8PWU/KGE9cj9sOnZvaWQgMCxuPXMrMSk6aT1zLTF9cmV0dXJuIGF9ZnVuY3Rpb24gX3NlKHQsZT0hMCl7Zm9yKDt0LmNvbnRhaW5lcjspe2xldCByPXQuY29udGFpbmVyLG49ci5jb250ZW50LmluZGV4T2YodCk7Zm9yKDtuPjA7KXtuLS07bGV0IGk9ci5jb250ZW50W25dO2lmKGV8fCFpLmhpZGRlbilyZXR1cm4gaX10PXJ9fWZ1bmN0aW9uIGxCZSh0LGU9ITApe2Zvcig7dC5jb250YWluZXI7KXtsZXQgcj10LmNvbnRhaW5lcixuPXIuY29udGVudC5pbmRleE9mKHQpLGk9ci5jb250ZW50Lmxlbmd0aC0xO2Zvcig7bjxpOyl7bisrO2xldCBhPXIuY29udGVudFtuXTtpZihlfHwhYS5oaWRkZW4pcmV0dXJuIGF9dD1yfX1mdW5jdGlvbiBjQmUodCl7aWYodC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI9PT0wKXJldHVybiB0O2xldCBlPXQucmFuZ2Uuc3RhcnQubGluZSxyPXQsbjtmb3IoO3QuY29udGFpbmVyOyl7bGV0IGk9dC5jb250YWluZXIsYT1uPz9pLmNvbnRlbnQuaW5kZXhPZih0KTtpZihhPT09MD8odD1pLG49dm9pZCAwKToobj1hLTEsdD1pLmNvbnRlbnRbbl0pLHQucmFuZ2Uuc3RhcnQubGluZSE9PWUpYnJlYWs7cj10fXJldHVybiByfWZ1bmN0aW9uIHVCZSh0LGUpe2xldCByPWhCZSh0LGUpO3JldHVybiByP3IucGFyZW50LmNvbnRlbnQuc2xpY2Uoci5hKzEsci5iKTpbXX1mdW5jdGlvbiBoQmUodCxlKXtsZXQgcj1Fc2UodCksbj1Fc2UoZSksaTtmb3IobGV0IGE9MDthPHIubGVuZ3RoJiZhPG4ubGVuZ3RoO2ErKyl7bGV0IHM9clthXSxsPW5bYV07aWYocy5wYXJlbnQ9PT1sLnBhcmVudClpPXtwYXJlbnQ6cy5wYXJlbnQsYTpzLmluZGV4LGI6bC5pbmRleH07ZWxzZSBicmVha31yZXR1cm4gaX1mdW5jdGlvbiBFc2UodCl7bGV0IGU9W107Zm9yKDt0LmNvbnRhaW5lcjspe2xldCByPXQuY29udGFpbmVyLG49ci5jb250ZW50LmluZGV4T2YodCk7ZS5wdXNoKHtwYXJlbnQ6cixpbmRleDpufSksdD1yfXJldHVybiBlLnJldmVyc2UoKX12YXIgSWMsa2ssT2w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJbCgpO0dzKCk7byhzcCwic3RyZWFtQ3N0Iik7byhzQmUsImZsYXR0ZW5Dc3QiKTtvKGxOLCJpc0NoaWxkTm9kZSIpO28oS20sInRva2VuVG9SYW5nZSIpO28ob3AsInRvRG9jdW1lbnRTZWdtZW50Iik7KGZ1bmN0aW9uKHQpe3RbdC5CZWZvcmU9MF09IkJlZm9yZSIsdFt0LkFmdGVyPTFdPSJBZnRlciIsdFt0Lk92ZXJsYXBGcm9udD0yXT0iT3ZlcmxhcEZyb250Iix0W3QuT3ZlcmxhcEJhY2s9M109Ik92ZXJsYXBCYWNrIix0W3QuSW5zaWRlPTRdPSJJbnNpZGUiLHRbdC5PdXRzaWRlPTVdPSJPdXRzaWRlIn0pKEljfHwoSWM9e30pKTtvKFNzZSwiY29tcGFyZVJhbmdlIik7byhjTiwiaW5SYW5nZSIpO2trPS9eW1x3XHB7TH1dJC91O28ob0JlLCJmaW5kRGVjbGFyYXRpb25Ob2RlQXRPZmZzZXQiKTtvKHVOLCJmaW5kQ29tbWVudE5vZGUiKTtvKG9OLCJpc0NvbW1lbnROb2RlIik7byhoTiwiZmluZExlYWZOb2RlQXRPZmZzZXQiKTtvKENzZSwiZmluZExlYWZOb2RlQmVmb3JlT2Zmc2V0Iik7byhBc2UsImJpbmFyeVNlYXJjaCIpO28oX3NlLCJnZXRQcmV2aW91c05vZGUiKTtvKGxCZSwiZ2V0TmV4dE5vZGUiKTtvKGNCZSwiZ2V0U3RhcnRsaW5lTm9kZSIpO28odUJlLCJnZXRJbnRlcmlvck5vZGVzIik7byhoQmUsImdldENvbW1vblBhcmVudCIpO28oRXNlLCJnZXRQYXJlbnRDaGFpbiIpfSk7ZnVuY3Rpb24gT2ModCl7dGhyb3cgbmV3IEVycm9yKCJFcnJvciEgVGhlIGlucHV0IHZhbHVlIHdhcyBub3QgaGFuZGxlZC4iKX12YXIgbHAsU2s9TigoKT0+eyJ1c2Ugc3RyaWN0IjtscD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIkVycm9yV2l0aExvY2F0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlP2Ake3J9IGF0ICR7ZS5yYW5nZS5zdGFydC5saW5lfToke2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyfWA6cil9fTtvKE9jLCJhc3NlcnRVbnJlYWNoYWJsZSIpfSk7dmFyIEoyPXt9O3VyKEoyLHtBYnN0cmFjdEVsZW1lbnQ6KCk9PkptLEFic3RyYWN0UnVsZTooKT0+UW0sQWJzdHJhY3RUeXBlOigpPT5abSxBY3Rpb246KCk9PnZnLEFsdGVybmF0aXZlczooKT0+eGcsQXJyYXlMaXRlcmFsOigpPT5lZyxBcnJheVR5cGU6KCk9PnRnLEFzc2lnbm1lbnQ6KCk9PmJnLEJvb2xlYW5MaXRlcmFsOigpPT5yZyxDaGFyYWN0ZXJSYW5nZTooKT0+VGcsQ29uZGl0aW9uOigpPT5XMixDb25qdW5jdGlvbjooKT0+bmcsQ3Jvc3NSZWZlcmVuY2U6KCk9PndnLERpc2p1bmN0aW9uOigpPT5pZyxFbmRPZkZpbGU6KCk9PmtnLEdyYW1tYXI6KCk9PmFnLEdyYW1tYXJJbXBvcnQ6KCk9PlkyLEdyb3VwOigpPT5FZyxJbmZlcnJlZFR5cGU6KCk9PnNnLEludGVyZmFjZTooKT0+b2csS2V5d29yZDooKT0+U2csTGFuZ2l1bUdyYW1tYXJBc3RSZWZsZWN0aW9uOigpPT5PZyxMYW5naXVtR3JhbW1hclRlcm1pbmFsczooKT0+ZkJlLE5hbWVkQXJndW1lbnQ6KCk9PlgyLE5lZ2F0ZWRUb2tlbjooKT0+Q2csTmVnYXRpb246KCk9PmxnLE51bWJlckxpdGVyYWw6KCk9PmNnLFBhcmFtZXRlcjooKT0+dWcsUGFyYW1ldGVyUmVmZXJlbmNlOigpPT5oZyxQYXJzZXJSdWxlOigpPT5mZyxSZWZlcmVuY2VUeXBlOigpPT5kZyxSZWdleFRva2VuOigpPT5BZyxSZXR1cm5UeXBlOigpPT5qMixSdWxlQ2FsbDooKT0+X2csU2ltcGxlVHlwZTooKT0+cGcsU3RyaW5nTGl0ZXJhbDooKT0+bWcsVGVybWluYWxBbHRlcm5hdGl2ZXM6KCk9PkRnLFRlcm1pbmFsR3JvdXA6KCk9PkxnLFRlcm1pbmFsUnVsZTooKT0+Y3AsVGVybWluYWxSdWxlQ2FsbDooKT0+UmcsVHlwZTooKT0+Z2csVHlwZUF0dHJpYnV0ZTooKT0+SzIsVHlwZURlZmluaXRpb246KCk9PkNrLFVuaW9uVHlwZTooKT0+eWcsVW5vcmRlcmVkR3JvdXA6KCk9Pk5nLFVudGlsVG9rZW46KCk9Pk1nLFZhbHVlTGl0ZXJhbDooKT0+cTIsV2lsZGNhcmQ6KCk9PklnLGlzQWJzdHJhY3RFbGVtZW50OigpPT5RMixpc0Fic3RyYWN0UnVsZTooKT0+ZEJlLGlzQWJzdHJhY3RUeXBlOigpPT5wQmUsaXNBY3Rpb246KCk9PiR1LGlzQWx0ZXJuYXRpdmVzOigpPT5Mayxpc0FycmF5TGl0ZXJhbDooKT0+eEJlLGlzQXJyYXlUeXBlOigpPT5mTixpc0Fzc2lnbm1lbnQ6KCk9PlBsLGlzQm9vbGVhbkxpdGVyYWw6KCk9PmROLGlzQ2hhcmFjdGVyUmFuZ2U6KCk9PlROLGlzQ29uZGl0aW9uOigpPT5tQmUsaXNDb25qdW5jdGlvbjooKT0+cE4saXNDcm9zc1JlZmVyZW5jZTooKT0+dXAsaXNEaXNqdW5jdGlvbjooKT0+bU4saXNFbmRPZkZpbGU6KCk9PndOLGlzRmVhdHVyZU5hbWU6KCk9PmdCZSxpc0dyYW1tYXI6KCk9PmJCZSxpc0dyYW1tYXJJbXBvcnQ6KCk9PlRCZSxpc0dyb3VwOigpPT5mZixpc0luZmVycmVkVHlwZTooKT0+QWssaXNJbnRlcmZhY2U6KCk9Pl9rLGlzS2V5d29yZDooKT0+WG8saXNOYW1lZEFyZ3VtZW50OigpPT53QmUsaXNOZWdhdGVkVG9rZW46KCk9PmtOLGlzTmVnYXRpb246KCk9PmdOLGlzTnVtYmVyTGl0ZXJhbDooKT0+a0JlLGlzUGFyYW1ldGVyOigpPT5FQmUsaXNQYXJhbWV0ZXJSZWZlcmVuY2U6KCk9PnlOLGlzUGFyc2VyUnVsZTooKT0+RmEsaXNQcmltaXRpdmVUeXBlOigpPT5Ec2UsaXNSZWZlcmVuY2VUeXBlOigpPT52Tixpc1JlZ2V4VG9rZW46KCk9PkVOLGlzUmV0dXJuVHlwZTooKT0+eE4saXNSdWxlQ2FsbDooKT0+QmwsaXNTaW1wbGVUeXBlOigpPT5Eayxpc1N0cmluZ0xpdGVyYWw6KCk9PlNCZSxpc1Rlcm1pbmFsQWx0ZXJuYXRpdmVzOigpPT5TTixpc1Rlcm1pbmFsR3JvdXA6KCk9PkNOLGlzVGVybWluYWxSdWxlOigpPT51byxpc1Rlcm1pbmFsUnVsZUNhbGw6KCk9PlJrLGlzVHlwZTooKT0+WjIsaXNUeXBlQXR0cmlidXRlOigpPT5DQmUsaXNUeXBlRGVmaW5pdGlvbjooKT0+eUJlLGlzVW5pb25UeXBlOigpPT5iTixpc1Vub3JkZXJlZEdyb3VwOigpPT5Oayxpc1VudGlsVG9rZW46KCk9PkFOLGlzVmFsdWVMaXRlcmFsOigpPT52QmUsaXNXaWxkY2FyZDooKT0+X04scmVmbGVjdGlvbjooKT0+Y3J9KTtmdW5jdGlvbiBkQmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxRbSl9ZnVuY3Rpb24gcEJlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsWm0pfWZ1bmN0aW9uIG1CZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LFcyKX1mdW5jdGlvbiBnQmUodCl7cmV0dXJuIERzZSh0KXx8dD09PSJjdXJyZW50Inx8dD09PSJlbnRyeSJ8fHQ9PT0iZXh0ZW5kcyJ8fHQ9PT0iZmFsc2UifHx0PT09ImZyYWdtZW50Inx8dD09PSJncmFtbWFyInx8dD09PSJoaWRkZW4ifHx0PT09ImltcG9ydCJ8fHQ9PT0iaW50ZXJmYWNlInx8dD09PSJyZXR1cm5zInx8dD09PSJ0ZXJtaW5hbCJ8fHQ9PT0idHJ1ZSJ8fHQ9PT0idHlwZSJ8fHQ9PT0iaW5mZXIifHx0PT09ImluZmVycyJ8fHQ9PT0id2l0aCJ8fHR5cGVvZiB0PT0ic3RyaW5nIiYmL1xeP1tfYS16QS1aXVtcd19dKi8udGVzdCh0KX1mdW5jdGlvbiBEc2UodCl7cmV0dXJuIHQ9PT0ic3RyaW5nInx8dD09PSJudW1iZXIifHx0PT09ImJvb2xlYW4ifHx0PT09IkRhdGUifHx0PT09ImJpZ2ludCJ9ZnVuY3Rpb24geUJlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsQ2spfWZ1bmN0aW9uIHZCZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHEyKX1mdW5jdGlvbiBRMih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LEptKX1mdW5jdGlvbiB4QmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxlZyl9ZnVuY3Rpb24gZk4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCx0Zyl9ZnVuY3Rpb24gZE4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxyZyl9ZnVuY3Rpb24gcE4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxuZyl9ZnVuY3Rpb24gbU4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxpZyl9ZnVuY3Rpb24gYkJlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsYWcpfWZ1bmN0aW9uIFRCZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LFkyKX1mdW5jdGlvbiBBayh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHNnKX1mdW5jdGlvbiBfayh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LG9nKX1mdW5jdGlvbiB3QmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxYMil9ZnVuY3Rpb24gZ04odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxsZyl9ZnVuY3Rpb24ga0JlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsY2cpfWZ1bmN0aW9uIEVCZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHVnKX1mdW5jdGlvbiB5Tih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGhnKX1mdW5jdGlvbiBGYSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGZnKX1mdW5jdGlvbiB2Tih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGRnKX1mdW5jdGlvbiB4Tih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGoyKX1mdW5jdGlvbiBEayh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHBnKX1mdW5jdGlvbiBTQmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxtZyl9ZnVuY3Rpb24gdW8odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxjcCl9ZnVuY3Rpb24gWjIodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxnZyl9ZnVuY3Rpb24gQ0JlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsSzIpfWZ1bmN0aW9uIGJOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQseWcpfWZ1bmN0aW9uICR1KHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsdmcpfWZ1bmN0aW9uIExrKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQseGcpfWZ1bmN0aW9uIFBsKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsYmcpfWZ1bmN0aW9uIFROKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsVGcpfWZ1bmN0aW9uIHVwKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsd2cpfWZ1bmN0aW9uIHdOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsa2cpfWZ1bmN0aW9uIGZmKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsRWcpfWZ1bmN0aW9uIFhvKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsU2cpfWZ1bmN0aW9uIGtOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsQ2cpfWZ1bmN0aW9uIEVOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsQWcpfWZ1bmN0aW9uIEJsKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsX2cpfWZ1bmN0aW9uIFNOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsRGcpfWZ1bmN0aW9uIENOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsTGcpfWZ1bmN0aW9uIFJrKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsUmcpfWZ1bmN0aW9uIE5rKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsTmcpfWZ1bmN0aW9uIEFOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsTWcpfWZ1bmN0aW9uIF9OKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsSWcpfXZhciBmQmUsUW0sWm0sVzIsQ2sscTIsSm0sZWcsdGcscmcsbmcsaWcsYWcsWTIsc2csb2csWDIsbGcsY2csdWcsaGcsZmcsZGcsajIscGcsbWcsY3AsZ2csSzIseWcsdmcseGcsYmcsVGcsd2csa2csRWcsU2csQ2csQWcsX2csRGcsTGcsUmcsTmcsTWcsSWcsT2csY3IsUGM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJbCgpO2ZCZT17SUQ6L1xeP1tfYS16QS1aXVtcd19dKi8sU1RSSU5HOi8iKFxcLnxbXiJcXF0pKiJ8JyhcXC58W14nXFxdKSonLyxOVU1CRVI6L05hTnwtPygoXGQqXC5cZCt8XGQrKShbRWVdWystXT9cZCspP3xJbmZpbml0eSkvLFJlZ2V4TGl0ZXJhbDovXC8oPyFbKis/XSkoPzpbXlxyXG5cWy9cXF18XFwufFxbKD86W15cclxuXF1cXF18XFwuKSpcXSkrXC9bYS16XSovLFdTOi9ccysvLE1MX0NPTU1FTlQ6L1wvXCpbXHNcU10qP1wqXC8vLFNMX0NPTU1FTlQ6L1wvXC9bXlxuXHJdKi99LFFtPSJBYnN0cmFjdFJ1bGUiO28oZEJlLCJpc0Fic3RyYWN0UnVsZSIpO1ptPSJBYnN0cmFjdFR5cGUiO28ocEJlLCJpc0Fic3RyYWN0VHlwZSIpO1cyPSJDb25kaXRpb24iO28obUJlLCJpc0NvbmRpdGlvbiIpO28oZ0JlLCJpc0ZlYXR1cmVOYW1lIik7byhEc2UsImlzUHJpbWl0aXZlVHlwZSIpO0NrPSJUeXBlRGVmaW5pdGlvbiI7byh5QmUsImlzVHlwZURlZmluaXRpb24iKTtxMj0iVmFsdWVMaXRlcmFsIjtvKHZCZSwiaXNWYWx1ZUxpdGVyYWwiKTtKbT0iQWJzdHJhY3RFbGVtZW50IjtvKFEyLCJpc0Fic3RyYWN0RWxlbWVudCIpO2VnPSJBcnJheUxpdGVyYWwiO28oeEJlLCJpc0FycmF5TGl0ZXJhbCIpO3RnPSJBcnJheVR5cGUiO28oZk4sImlzQXJyYXlUeXBlIik7cmc9IkJvb2xlYW5MaXRlcmFsIjtvKGROLCJpc0Jvb2xlYW5MaXRlcmFsIik7bmc9IkNvbmp1bmN0aW9uIjtvKHBOLCJpc0Nvbmp1bmN0aW9uIik7aWc9IkRpc2p1bmN0aW9uIjtvKG1OLCJpc0Rpc2p1bmN0aW9uIik7YWc9IkdyYW1tYXIiO28oYkJlLCJpc0dyYW1tYXIiKTtZMj0iR3JhbW1hckltcG9ydCI7byhUQmUsImlzR3JhbW1hckltcG9ydCIpO3NnPSJJbmZlcnJlZFR5cGUiO28oQWssImlzSW5mZXJyZWRUeXBlIik7b2c9IkludGVyZmFjZSI7byhfaywiaXNJbnRlcmZhY2UiKTtYMj0iTmFtZWRBcmd1bWVudCI7byh3QmUsImlzTmFtZWRBcmd1bWVudCIpO2xnPSJOZWdhdGlvbiI7byhnTiwiaXNOZWdhdGlvbiIpO2NnPSJOdW1iZXJMaXRlcmFsIjtvKGtCZSwiaXNOdW1iZXJMaXRlcmFsIik7dWc9IlBhcmFtZXRlciI7byhFQmUsImlzUGFyYW1ldGVyIik7aGc9IlBhcmFtZXRlclJlZmVyZW5jZSI7byh5TiwiaXNQYXJhbWV0ZXJSZWZlcmVuY2UiKTtmZz0iUGFyc2VyUnVsZSI7byhGYSwiaXNQYXJzZXJSdWxlIik7ZGc9IlJlZmVyZW5jZVR5cGUiO28odk4sImlzUmVmZXJlbmNlVHlwZSIpO2oyPSJSZXR1cm5UeXBlIjtvKHhOLCJpc1JldHVyblR5cGUiKTtwZz0iU2ltcGxlVHlwZSI7byhEaywiaXNTaW1wbGVUeXBlIik7bWc9IlN0cmluZ0xpdGVyYWwiO28oU0JlLCJpc1N0cmluZ0xpdGVyYWwiKTtjcD0iVGVybWluYWxSdWxlIjtvKHVvLCJpc1Rlcm1pbmFsUnVsZSIpO2dnPSJUeXBlIjtvKFoyLCJpc1R5cGUiKTtLMj0iVHlwZUF0dHJpYnV0ZSI7byhDQmUsImlzVHlwZUF0dHJpYnV0ZSIpO3lnPSJVbmlvblR5cGUiO28oYk4sImlzVW5pb25UeXBlIik7dmc9IkFjdGlvbiI7bygkdSwiaXNBY3Rpb24iKTt4Zz0iQWx0ZXJuYXRpdmVzIjtvKExrLCJpc0FsdGVybmF0aXZlcyIpO2JnPSJBc3NpZ25tZW50IjtvKFBsLCJpc0Fzc2lnbm1lbnQiKTtUZz0iQ2hhcmFjdGVyUmFuZ2UiO28oVE4sImlzQ2hhcmFjdGVyUmFuZ2UiKTt3Zz0iQ3Jvc3NSZWZlcmVuY2UiO28odXAsImlzQ3Jvc3NSZWZlcmVuY2UiKTtrZz0iRW5kT2ZGaWxlIjtvKHdOLCJpc0VuZE9mRmlsZSIpO0VnPSJHcm91cCI7byhmZiwiaXNHcm91cCIpO1NnPSJLZXl3b3JkIjtvKFhvLCJpc0tleXdvcmQiKTtDZz0iTmVnYXRlZFRva2VuIjtvKGtOLCJpc05lZ2F0ZWRUb2tlbiIpO0FnPSJSZWdleFRva2VuIjtvKEVOLCJpc1JlZ2V4VG9rZW4iKTtfZz0iUnVsZUNhbGwiO28oQmwsImlzUnVsZUNhbGwiKTtEZz0iVGVybWluYWxBbHRlcm5hdGl2ZXMiO28oU04sImlzVGVybWluYWxBbHRlcm5hdGl2ZXMiKTtMZz0iVGVybWluYWxHcm91cCI7byhDTiwiaXNUZXJtaW5hbEdyb3VwIik7Umc9IlRlcm1pbmFsUnVsZUNhbGwiO28oUmssImlzVGVybWluYWxSdWxlQ2FsbCIpO05nPSJVbm9yZGVyZWRHcm91cCI7byhOaywiaXNVbm9yZGVyZWRHcm91cCIpO01nPSJVbnRpbFRva2VuIjtvKEFOLCJpc1VudGlsVG9rZW4iKTtJZz0iV2lsZGNhcmQiO28oX04sImlzV2lsZGNhcmQiKTtPZz1jbGFzcyBleHRlbmRzIGlwe3N0YXRpY3tvKHRoaXMsIkxhbmdpdW1HcmFtbWFyQXN0UmVmbGVjdGlvbiIpfWdldEFsbFR5cGVzKCl7cmV0dXJuW0ptLFFtLFptLHZnLHhnLGVnLHRnLGJnLHJnLFRnLFcyLG5nLHdnLGlnLGtnLGFnLFkyLEVnLHNnLG9nLFNnLFgyLENnLGxnLGNnLHVnLGhnLGZnLGRnLEFnLGoyLF9nLHBnLG1nLERnLExnLGNwLFJnLGdnLEsyLENrLHlnLE5nLE1nLHEyLElnXX1jb21wdXRlSXNTdWJ0eXBlKGUscil7c3dpdGNoKGUpe2Nhc2Ugdmc6Y2FzZSB4ZzpjYXNlIGJnOmNhc2UgVGc6Y2FzZSB3ZzpjYXNlIGtnOmNhc2UgRWc6Y2FzZSBTZzpjYXNlIENnOmNhc2UgQWc6Y2FzZSBfZzpjYXNlIERnOmNhc2UgTGc6Y2FzZSBSZzpjYXNlIE5nOmNhc2UgTWc6Y2FzZSBJZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoSm0scik7Y2FzZSBlZzpjYXNlIGNnOmNhc2UgbWc6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKHEyLHIpO2Nhc2UgdGc6Y2FzZSBkZzpjYXNlIHBnOmNhc2UgeWc6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKENrLHIpO2Nhc2Ugcmc6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFcyLHIpfHx0aGlzLmlzU3VidHlwZShxMixyKTtjYXNlIG5nOmNhc2UgaWc6Y2FzZSBsZzpjYXNlIGhnOnJldHVybiB0aGlzLmlzU3VidHlwZShXMixyKTtjYXNlIHNnOmNhc2Ugb2c6Y2FzZSBnZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoWm0scik7Y2FzZSBmZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoUW0scil8fHRoaXMuaXNTdWJ0eXBlKFptLHIpO2Nhc2UgY3A6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFFtLHIpO2RlZmF1bHQ6cmV0dXJuITF9fWdldFJlZmVyZW5jZVR5cGUoZSl7bGV0IHI9YCR7ZS5jb250YWluZXIuJHR5cGV9OiR7ZS5wcm9wZXJ0eX1gO3N3aXRjaChyKXtjYXNlIkFjdGlvbjp0eXBlIjpjYXNlIkNyb3NzUmVmZXJlbmNlOnR5cGUiOmNhc2UiSW50ZXJmYWNlOnN1cGVyVHlwZXMiOmNhc2UiUGFyc2VyUnVsZTpyZXR1cm5UeXBlIjpjYXNlIlNpbXBsZVR5cGU6dHlwZVJlZiI6cmV0dXJuIFptO2Nhc2UiR3JhbW1hcjpoaWRkZW5Ub2tlbnMiOmNhc2UiUGFyc2VyUnVsZTpoaWRkZW5Ub2tlbnMiOmNhc2UiUnVsZUNhbGw6cnVsZSI6cmV0dXJuIFFtO2Nhc2UiR3JhbW1hcjp1c2VkR3JhbW1hcnMiOnJldHVybiBhZztjYXNlIk5hbWVkQXJndW1lbnQ6cGFyYW1ldGVyIjpjYXNlIlBhcmFtZXRlclJlZmVyZW5jZTpwYXJhbWV0ZXIiOnJldHVybiB1ZztjYXNlIlRlcm1pbmFsUnVsZUNhbGw6cnVsZSI6cmV0dXJuIGNwO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke3J9IGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSBpZC5gKX19Z2V0VHlwZU1ldGFEYXRhKGUpe3N3aXRjaChlKXtjYXNlIEptOnJldHVybntuYW1lOkptLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UgZWc6cmV0dXJue25hbWU6ZWcscHJvcGVydGllczpbe25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSB0ZzpyZXR1cm57bmFtZTp0Zyxwcm9wZXJ0aWVzOlt7bmFtZToiZWxlbWVudFR5cGUifV19O2Nhc2Ugcmc6cmV0dXJue25hbWU6cmcscHJvcGVydGllczpbe25hbWU6InRydWUiLGRlZmF1bHRWYWx1ZTohMX1dfTtjYXNlIG5nOnJldHVybntuYW1lOm5nLHByb3BlcnRpZXM6W3tuYW1lOiJsZWZ0In0se25hbWU6InJpZ2h0In1dfTtjYXNlIGlnOnJldHVybntuYW1lOmlnLHByb3BlcnRpZXM6W3tuYW1lOiJsZWZ0In0se25hbWU6InJpZ2h0In1dfTtjYXNlIGFnOnJldHVybntuYW1lOmFnLHByb3BlcnRpZXM6W3tuYW1lOiJkZWZpbmVzSGlkZGVuVG9rZW5zIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJoaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImltcG9ydHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImludGVyZmFjZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImlzRGVjbGFyZWQiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6Im5hbWUifSx7bmFtZToicnVsZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InR5cGVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ1c2VkR3JhbW1hcnMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIFkyOnJldHVybntuYW1lOlkyLHByb3BlcnRpZXM6W3tuYW1lOiJwYXRoIn1dfTtjYXNlIHNnOnJldHVybntuYW1lOnNnLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn1dfTtjYXNlIG9nOnJldHVybntuYW1lOm9nLHByb3BlcnRpZXM6W3tuYW1lOiJhdHRyaWJ1dGVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJuYW1lIn0se25hbWU6InN1cGVyVHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIFgyOnJldHVybntuYW1lOlgyLHByb3BlcnRpZXM6W3tuYW1lOiJjYWxsZWRCeU5hbWUiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InBhcmFtZXRlciJ9LHtuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBsZzpyZXR1cm57bmFtZTpsZyxwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UgY2c6cmV0dXJue25hbWU6Y2cscHJvcGVydGllczpbe25hbWU6InZhbHVlIn1dfTtjYXNlIHVnOnJldHVybntuYW1lOnVnLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn1dfTtjYXNlIGhnOnJldHVybntuYW1lOmhnLHByb3BlcnRpZXM6W3tuYW1lOiJwYXJhbWV0ZXIifV19O2Nhc2UgZmc6cmV0dXJue25hbWU6ZmcscHJvcGVydGllczpbe25hbWU6ImRhdGFUeXBlIn0se25hbWU6ImRlZmluZXNIaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImRlZmluaXRpb24ifSx7bmFtZToiZW50cnkiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImZyYWdtZW50IixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJoaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImluZmVycmVkVHlwZSJ9LHtuYW1lOiJuYW1lIn0se25hbWU6InBhcmFtZXRlcnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InJldHVyblR5cGUifSx7bmFtZToid2lsZGNhcmQiLGRlZmF1bHRWYWx1ZTohMX1dfTtjYXNlIGRnOnJldHVybntuYW1lOmRnLHByb3BlcnRpZXM6W3tuYW1lOiJyZWZlcmVuY2VUeXBlIn1dfTtjYXNlIGoyOnJldHVybntuYW1lOmoyLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn1dfTtjYXNlIHBnOnJldHVybntuYW1lOnBnLHByb3BlcnRpZXM6W3tuYW1lOiJwcmltaXRpdmVUeXBlIn0se25hbWU6InN0cmluZ1R5cGUifSx7bmFtZToidHlwZVJlZiJ9XX07Y2FzZSBtZzpyZXR1cm57bmFtZTptZyxwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UgY3A6cmV0dXJue25hbWU6Y3AscHJvcGVydGllczpbe25hbWU6ImRlZmluaXRpb24ifSx7bmFtZToiZnJhZ21lbnQiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlbiIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIGdnOnJldHVybntuYW1lOmdnLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UgSzI6cmV0dXJue25hbWU6SzIscHJvcGVydGllczpbe25hbWU6ImRlZmF1bHRWYWx1ZSJ9LHtuYW1lOiJpc09wdGlvbmFsIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UgeWc6cmV0dXJue25hbWU6eWcscHJvcGVydGllczpbe25hbWU6InR5cGVzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSB2ZzpyZXR1cm57bmFtZTp2Zyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZmVhdHVyZSJ9LHtuYW1lOiJpbmZlcnJlZFR5cGUifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6Im9wZXJhdG9yIn0se25hbWU6InR5cGUifV19O2Nhc2UgeGc6cmV0dXJue25hbWU6eGcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UgYmc6cmV0dXJue25hbWU6YmcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImZlYXR1cmUifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6Im9wZXJhdG9yIn0se25hbWU6InRlcm1pbmFsIn1dfTtjYXNlIFRnOnJldHVybntuYW1lOlRnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsZWZ0In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJyaWdodCJ9XX07Y2FzZSB3ZzpyZXR1cm57bmFtZTp3Zyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZGVwcmVjYXRlZFN5bnRheCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InRlcm1pbmFsIn0se25hbWU6InR5cGUifV19O2Nhc2Uga2c6cmV0dXJue25hbWU6a2cscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBFZzpyZXR1cm57bmFtZTpFZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imd1YXJkQ29uZGl0aW9uIn0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBTZzpyZXR1cm57bmFtZTpTZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIENnOnJldHVybntuYW1lOkNnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidGVybWluYWwifV19O2Nhc2UgQWc6cmV0dXJue25hbWU6QWcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJyZWdleCJ9XX07Y2FzZSBfZzpyZXR1cm57bmFtZTpfZyxwcm9wZXJ0aWVzOlt7bmFtZToiYXJndW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToicnVsZSJ9XX07Y2FzZSBEZzpyZXR1cm57bmFtZTpEZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBMZzpyZXR1cm57bmFtZTpMZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBSZzpyZXR1cm57bmFtZTpSZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJ1bGUifV19O2Nhc2UgTmc6cmV0dXJue25hbWU6TmcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UgTWc6cmV0dXJue25hbWU6TWcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJ0ZXJtaW5hbCJ9XX07Y2FzZSBJZzpyZXR1cm57bmFtZTpJZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn1dfTtkZWZhdWx0OnJldHVybntuYW1lOmUscHJvcGVydGllczpbXX19fX0sY3I9bmV3IE9nfSk7dmFyIElrPXt9O3VyKElrLHthc3NpZ25NYW5kYXRvcnlQcm9wZXJ0aWVzOigpPT5STixjb3B5QXN0Tm9kZTooKT0+TE4sZmluZExvY2FsUmVmZXJlbmNlczooKT0+X0JlLGZpbmRSb290Tm9kZTooKT0+ZXgsZ2V0Q29udGFpbmVyT2ZUeXBlOigpPT5ocCxnZXREb2N1bWVudDooKT0+JGEsaGFzQ29udGFpbmVyT2ZUeXBlOigpPT5BQmUsbGlua0NvbnRlbnRUb0NvbnRhaW5lcjooKT0+TWssc3RyZWFtQWxsQ29udGVudHM6KCk9PkJjLHN0cmVhbUFzdDooKT0+am8sc3RyZWFtQ29udGVudHM6KCk9PnR4LHN0cmVhbVJlZmVyZW5jZXM6KCk9PlBnfSk7ZnVuY3Rpb24gTWsodCl7Zm9yKGxldFtlLHJdb2YgT2JqZWN0LmVudHJpZXModCkpZS5zdGFydHNXaXRoKCIkIil8fChBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaCgobixpKT0+e3NpKG4pJiYobi4kY29udGFpbmVyPXQsbi4kY29udGFpbmVyUHJvcGVydHk9ZSxuLiRjb250YWluZXJJbmRleD1pKX0pOnNpKHIpJiYoci4kY29udGFpbmVyPXQsci4kY29udGFpbmVyUHJvcGVydHk9ZSkpfWZ1bmN0aW9uIGhwKHQsZSl7bGV0IHI9dDtmb3IoO3I7KXtpZihlKHIpKXJldHVybiByO3I9ci4kY29udGFpbmVyfX1mdW5jdGlvbiBBQmUodCxlKXtsZXQgcj10O2Zvcig7cjspe2lmKGUocikpcmV0dXJuITA7cj1yLiRjb250YWluZXJ9cmV0dXJuITF9ZnVuY3Rpb24gJGEodCl7bGV0IHI9ZXgodCkuJGRvY3VtZW50O2lmKCFyKXRocm93IG5ldyBFcnJvcigiQVNUIG5vZGUgaGFzIG5vIGRvY3VtZW50LiIpO3JldHVybiByfWZ1bmN0aW9uIGV4KHQpe2Zvcig7dC4kY29udGFpbmVyOyl0PXQuJGNvbnRhaW5lcjtyZXR1cm4gdH1mdW5jdGlvbiB0eCh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuIik7bGV0IHI9ZT8ucmFuZ2U7cmV0dXJuIG5ldyBjbygoKT0+KHtrZXlzOk9iamVjdC5rZXlzKHQpLGtleUluZGV4OjAsYXJyYXlJbmRleDowfSksbj0+e2Zvcig7bi5rZXlJbmRleDxuLmtleXMubGVuZ3RoOyl7bGV0IGk9bi5rZXlzW24ua2V5SW5kZXhdO2lmKCFpLnN0YXJ0c1dpdGgoIiQiKSl7bGV0IGE9dFtpXTtpZihzaShhKSl7aWYobi5rZXlJbmRleCsrLEROKGEscikpcmV0dXJue2RvbmU6ITEsdmFsdWU6YX19ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXtmb3IoO24uYXJyYXlJbmRleDxhLmxlbmd0aDspe2xldCBzPW4uYXJyYXlJbmRleCsrLGw9YVtzXTtpZihzaShsKSYmRE4obCxyKSlyZXR1cm57ZG9uZTohMSx2YWx1ZTpsfX1uLmFycmF5SW5kZXg9MH19bi5rZXlJbmRleCsrfXJldHVybiBCYX0pfWZ1bmN0aW9uIEJjKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJSb290IG5vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLiIpO3JldHVybiBuZXcgTWModCxyPT50eChyLGUpKX1mdW5jdGlvbiBqbyh0LGUpe2lmKHQpe2lmKGU/LnJhbmdlJiYhRE4odCxlLnJhbmdlKSlyZXR1cm4gbmV3IE1jKHQsKCk9PltdKX1lbHNlIHRocm93IG5ldyBFcnJvcigiUm9vdCBub2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4iKTtyZXR1cm4gbmV3IE1jKHQscj0+dHgocixlKSx7aW5jbHVkZVJvb3Q6ITB9KX1mdW5jdGlvbiBETih0LGUpe3ZhciByO2lmKCFlKXJldHVybiEwO2xldCBuPShyPXQuJGNzdE5vZGUpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5yYW5nZTtyZXR1cm4gbj9jTihuLGUpOiExfWZ1bmN0aW9uIFBnKHQpe3JldHVybiBuZXcgY28oKCk9Pih7a2V5czpPYmplY3Qua2V5cyh0KSxrZXlJbmRleDowLGFycmF5SW5kZXg6MH0pLGU9Pntmb3IoO2Uua2V5SW5kZXg8ZS5rZXlzLmxlbmd0aDspe2xldCByPWUua2V5c1tlLmtleUluZGV4XTtpZighci5zdGFydHNXaXRoKCIkIikpe2xldCBuPXRbcl07aWYoeWEobikpcmV0dXJuIGUua2V5SW5kZXgrKyx7ZG9uZTohMSx2YWx1ZTp7cmVmZXJlbmNlOm4sY29udGFpbmVyOnQscHJvcGVydHk6cn19O2lmKEFycmF5LmlzQXJyYXkobikpe2Zvcig7ZS5hcnJheUluZGV4PG4ubGVuZ3RoOyl7bGV0IGk9ZS5hcnJheUluZGV4KyssYT1uW2ldO2lmKHlhKGEpKXJldHVybntkb25lOiExLHZhbHVlOntyZWZlcmVuY2U6YSxjb250YWluZXI6dCxwcm9wZXJ0eTpyLGluZGV4Oml9fX1lLmFycmF5SW5kZXg9MH19ZS5rZXlJbmRleCsrfXJldHVybiBCYX0pfWZ1bmN0aW9uIF9CZSh0LGU9JGEodCkucGFyc2VSZXN1bHQudmFsdWUpe2xldCByPVtdO3JldHVybiBqbyhlKS5mb3JFYWNoKG49PntQZyhuKS5mb3JFYWNoKGk9PntpLnJlZmVyZW5jZS5yZWY9PT10JiZyLnB1c2goaS5yZWZlcmVuY2UpfSl9KSxlbihyKX1mdW5jdGlvbiBSTih0LGUpe2xldCByPXQuZ2V0VHlwZU1ldGFEYXRhKGUuJHR5cGUpLG49ZTtmb3IobGV0IGkgb2Ygci5wcm9wZXJ0aWVzKWkuZGVmYXVsdFZhbHVlIT09dm9pZCAwJiZuW2kubmFtZV09PT12b2lkIDAmJihuW2kubmFtZV09THNlKGkuZGVmYXVsdFZhbHVlKSl9ZnVuY3Rpb24gTHNlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1suLi50Lm1hcChMc2UpXTp0fWZ1bmN0aW9uIExOKHQsZSl7bGV0IHI9eyR0eXBlOnQuJHR5cGV9O2ZvcihsZXRbbixpXW9mIE9iamVjdC5lbnRyaWVzKHQpKWlmKCFuLnN0YXJ0c1dpdGgoIiQiKSlpZihzaShpKSlyW25dPUxOKGksZSk7ZWxzZSBpZih5YShpKSlyW25dPWUocixuLGkuJHJlZk5vZGUsaS4kcmVmVGV4dCk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGkpKXtsZXQgYT1bXTtmb3IobGV0IHMgb2YgaSlzaShzKT9hLnB1c2goTE4ocyxlKSk6eWEocyk/YS5wdXNoKGUocixuLHMuJHJlZk5vZGUscy4kcmVmVGV4dCkpOmEucHVzaChzKTtyW25dPWF9ZWxzZSByW25dPWk7cmV0dXJuIE1rKHIpLHJ9dmFyIGNzPU4oKCk9PnsidXNlIHN0cmljdCI7SWwoKTtHcygpO09sKCk7byhNaywibGlua0NvbnRlbnRUb0NvbnRhaW5lciIpO28oaHAsImdldENvbnRhaW5lck9mVHlwZSIpO28oQUJlLCJoYXNDb250YWluZXJPZlR5cGUiKTtvKCRhLCJnZXREb2N1bWVudCIpO28oZXgsImZpbmRSb290Tm9kZSIpO28odHgsInN0cmVhbUNvbnRlbnRzIik7byhCYywic3RyZWFtQWxsQ29udGVudHMiKTtvKGpvLCJzdHJlYW1Bc3QiKTtvKEROLCJpc0FzdE5vZGVJblJhbmdlIik7byhQZywic3RyZWFtUmVmZXJlbmNlcyIpO28oX0JlLCJmaW5kTG9jYWxSZWZlcmVuY2VzIik7byhSTiwiYXNzaWduTWFuZGF0b3J5UHJvcGVydGllcyIpO28oTHNlLCJjb3B5RGVmYXVsdFZhbHVlIik7byhMTiwiY29weUFzdE5vZGUiKX0pO2Z1bmN0aW9uIHNyKHQpe3JldHVybiB0LmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gT2sodCxlKXtBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChmdW5jdGlvbihyKXtlLnB1c2gocil9KTplLnB1c2godCl9ZnVuY3Rpb24gQmcodCxlKXtpZih0W2VdPT09ITApdGhyb3ciZHVwbGljYXRlIGZsYWcgIitlO2xldCByPXRbZV07dFtlXT0hMH1mdW5jdGlvbiBmcCh0KXtpZih0PT09dm9pZCAwKXRocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKTtyZXR1cm4hMH1mdW5jdGlvbiByeCgpe3Rocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKX1mdW5jdGlvbiBOTih0KXtyZXR1cm4gdC50eXBlPT09IkNoYXJhY3RlciJ9dmFyIE1OPU4oKCk9PnsidXNlIHN0cmljdCI7byhzciwiY2MiKTtvKE9rLCJpbnNlcnRUb1NldCIpO28oQmcsImFkZEZsYWciKTtvKGZwLCJBU1NFUlRfRVhJU1RTIik7byhyeCwiQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUiKTtvKE5OLCJpc0NoYXJhY3RlciIpfSk7dmFyIG54LGl4LElOLFJzZT1OKCgpPT57InVzZSBzdHJpY3QiO01OKCk7bng9W107Zm9yKGxldCB0PXNyKCIwIik7dDw9c3IoIjkiKTt0KyspbngucHVzaCh0KTtpeD1bc3IoIl8iKV0uY29uY2F0KG54KTtmb3IobGV0IHQ9c3IoImEiKTt0PD1zcigieiIpO3QrKylpeC5wdXNoKHQpO2ZvcihsZXQgdD1zcigiQSIpO3Q8PXNyKCJaIik7dCsrKWl4LnB1c2godCk7SU49W3NyKCIgIiksc3IoIlxmIiksc3IoYApgKSxzcigiXHIiKSxzcigiCSIpLHNyKCJcdiIpLHNyKCIJIiksc3IoIlx4QTAiKSxzcigiXHUxNjgwIiksc3IoIlx1MjAwMCIpLHNyKCJcdTIwMDEiKSxzcigiXHUyMDAyIiksc3IoIlx1MjAwMyIpLHNyKCJcdTIwMDQiKSxzcigiXHUyMDA1Iiksc3IoIlx1MjAwNiIpLHNyKCJcdTIwMDciKSxzcigiXHUyMDA4Iiksc3IoIlx1MjAwOSIpLHNyKCJcdTIwMEEiKSxzcigiXHUyMDI4Iiksc3IoIlx1MjAyOSIpLHNyKCJcdTIwMkYiKSxzcigiXHUyMDVGIiksc3IoIlx1MzAwMCIpLHNyKCJcdUZFRkYiKV19KTt2YXIgREJlLFBrLExCZSxkcCxOc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNTigpO1JzZSgpO0RCZT0vWzAtOWEtZkEtRl0vLFBrPS9bMC05XS8sTEJlPS9bMS05XS8sZHA9Y2xhc3N7c3RhdGlje28odGhpcywiUmVnRXhwUGFyc2VyIil9Y29uc3RydWN0b3IoKXt0aGlzLmlkeD0wLHRoaXMuaW5wdXQ9IiIsdGhpcy5ncm91cElkeD0wfXNhdmVTdGF0ZSgpe3JldHVybntpZHg6dGhpcy5pZHgsaW5wdXQ6dGhpcy5pbnB1dCxncm91cElkeDp0aGlzLmdyb3VwSWR4fX1yZXN0b3JlU3RhdGUoZSl7dGhpcy5pZHg9ZS5pZHgsdGhpcy5pbnB1dD1lLmlucHV0LHRoaXMuZ3JvdXBJZHg9ZS5ncm91cElkeH1wYXR0ZXJuKGUpe3RoaXMuaWR4PTAsdGhpcy5pbnB1dD1lLHRoaXMuZ3JvdXBJZHg9MCx0aGlzLmNvbnN1bWVDaGFyKCIvIik7bGV0IHI9dGhpcy5kaXNqdW5jdGlvbigpO3RoaXMuY29uc3VtZUNoYXIoIi8iKTtsZXQgbj17dHlwZToiRmxhZ3MiLGxvYzp7YmVnaW46dGhpcy5pZHgsZW5kOmUubGVuZ3RofSxnbG9iYWw6ITEsaWdub3JlQ2FzZTohMSxtdWx0aUxpbmU6ITEsdW5pY29kZTohMSxzdGlja3k6ITF9O2Zvcig7dGhpcy5pc1JlZ0V4cEZsYWcoKTspc3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImciOkJnKG4sImdsb2JhbCIpO2JyZWFrO2Nhc2UiaSI6QmcobiwiaWdub3JlQ2FzZSIpO2JyZWFrO2Nhc2UibSI6QmcobiwibXVsdGlMaW5lIik7YnJlYWs7Y2FzZSJ1IjpCZyhuLCJ1bmljb2RlIik7YnJlYWs7Y2FzZSJ5IjpCZyhuLCJzdGlja3kiKTticmVha31pZih0aGlzLmlkeCE9PXRoaXMuaW5wdXQubGVuZ3RoKXRocm93IEVycm9yKCJSZWR1bmRhbnQgaW5wdXQ6ICIrdGhpcy5pbnB1dC5zdWJzdHJpbmcodGhpcy5pZHgpKTtyZXR1cm57dHlwZToiUGF0dGVybiIsZmxhZ3M6bix2YWx1ZTpyLGxvYzp0aGlzLmxvYygwKX19ZGlzanVuY3Rpb24oKXtsZXQgZT1bXSxyPXRoaXMuaWR4O2ZvcihlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTt0aGlzLnBlZWtDaGFyKCk9PT0ifCI7KXRoaXMuY29uc3VtZUNoYXIoInwiKSxlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTtyZXR1cm57dHlwZToiRGlzanVuY3Rpb24iLHZhbHVlOmUsbG9jOnRoaXMubG9jKHIpfX1hbHRlcm5hdGl2ZSgpe2xldCBlPVtdLHI9dGhpcy5pZHg7Zm9yKDt0aGlzLmlzVGVybSgpOyllLnB1c2godGhpcy50ZXJtKCkpO3JldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsdmFsdWU6ZSxsb2M6dGhpcy5sb2Mocil9fXRlcm0oKXtyZXR1cm4gdGhpcy5pc0Fzc2VydGlvbigpP3RoaXMuYXNzZXJ0aW9uKCk6dGhpcy5hdG9tKCl9YXNzZXJ0aW9uKCl7bGV0IGU9dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIl4iOnJldHVybnt0eXBlOiJTdGFydEFuY2hvciIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIiQiOnJldHVybnt0eXBlOiJFbmRBbmNob3IiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJcXCI6c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImIiOnJldHVybnt0eXBlOiJXb3JkQm91bmRhcnkiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJCIjpyZXR1cm57dHlwZToiTm9uV29yZEJvdW5kYXJ5Iixsb2M6dGhpcy5sb2MoZSl9fXRocm93IEVycm9yKCJJbnZhbGlkIEFzc2VydGlvbiBFc2NhcGUiKTtjYXNlIigiOnRoaXMuY29uc3VtZUNoYXIoIj8iKTtsZXQgcjtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiPSI6cj0iTG9va2FoZWFkIjticmVhaztjYXNlIiEiOnI9Ik5lZ2F0aXZlTG9va2FoZWFkIjticmVha31mcChyKTtsZXQgbj10aGlzLmRpc2p1bmN0aW9uKCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIikiKSx7dHlwZTpyLHZhbHVlOm4sbG9jOnRoaXMubG9jKGUpfX1yZXR1cm4gcngoKX1xdWFudGlmaWVyKGU9ITEpe2xldCByLG49dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIioiOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MS8wfTticmVhaztjYXNlIisiOnI9e2F0TGVhc3Q6MSxhdE1vc3Q6MS8wfTticmVhaztjYXNlIj8iOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MX07YnJlYWs7Y2FzZSJ7IjpsZXQgaT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCk7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIn0iOnI9e2F0TGVhc3Q6aSxhdE1vc3Q6aX07YnJlYWs7Y2FzZSIsIjpsZXQgYTt0aGlzLmlzRGlnaXQoKT8oYT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCkscj17YXRMZWFzdDppLGF0TW9zdDphfSk6cj17YXRMZWFzdDppLGF0TW9zdDoxLzB9LHRoaXMuY29uc3VtZUNoYXIoIn0iKTticmVha31pZihlPT09ITAmJnI9PT12b2lkIDApcmV0dXJuO2ZwKHIpO2JyZWFrfWlmKCEoZT09PSEwJiZyPT09dm9pZCAwKSYmZnAocikpcmV0dXJuIHRoaXMucGVla0NoYXIoMCk9PT0iPyI/KHRoaXMuY29uc3VtZUNoYXIoIj8iKSxyLmdyZWVkeT0hMSk6ci5ncmVlZHk9ITAsci50eXBlPSJRdWFudGlmaWVyIixyLmxvYz10aGlzLmxvYyhuKSxyfWF0b20oKXtsZXQgZSxyPXRoaXMuaWR4O3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiLiI6ZT10aGlzLmRvdEFsbCgpO2JyZWFrO2Nhc2UiXFwiOmU9dGhpcy5hdG9tRXNjYXBlKCk7YnJlYWs7Y2FzZSJbIjplPXRoaXMuY2hhcmFjdGVyQ2xhc3MoKTticmVhaztjYXNlIigiOmU9dGhpcy5ncm91cCgpO2JyZWFrfXJldHVybiBlPT09dm9pZCAwJiZ0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpJiYoZT10aGlzLnBhdHRlcm5DaGFyYWN0ZXIoKSksZnAoZSk/KGUubG9jPXRoaXMubG9jKHIpLHRoaXMuaXNRdWFudGlmaWVyKCkmJihlLnF1YW50aWZpZXI9dGhpcy5xdWFudGlmaWVyKCkpLGUpOnJ4KCl9ZG90QWxsKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIi4iKSx7dHlwZToiU2V0Iixjb21wbGVtZW50OiEwLHZhbHVlOltzcihgCmApLHNyKCJcciIpLHNyKCJcdTIwMjgiKSxzcigiXHUyMDI5IildfX1hdG9tRXNjYXBlKCl7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIlxcIiksdGhpcy5wZWVrQ2hhcigpKXtjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5IjpyZXR1cm4gdGhpcy5kZWNpbWFsRXNjYXBlQXRvbSgpO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlInMiOmNhc2UiUyI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7Y2FzZSJmIjpjYXNlIm4iOmNhc2UiciI6Y2FzZSJ0IjpjYXNlInYiOnJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7Y2FzZSJjIjpyZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO2Nhc2UiMCI6cmV0dXJuIHRoaXMubnVsQ2hhcmFjdGVyQXRvbSgpO2Nhc2UieCI6cmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7Y2FzZSJ1IjpyZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pZGVudGl0eUVzY2FwZUF0b20oKX19ZGVjaW1hbEVzY2FwZUF0b20oKXtyZXR1cm57dHlwZToiR3JvdXBCYWNrUmVmZXJlbmNlIix2YWx1ZTp0aGlzLnBvc2l0aXZlSW50ZWdlcigpfX1jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpe2xldCBlLHI9ITE7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImQiOmU9bng7YnJlYWs7Y2FzZSJEIjplPW54LHI9ITA7YnJlYWs7Y2FzZSJzIjplPUlOO2JyZWFrO2Nhc2UiUyI6ZT1JTixyPSEwO2JyZWFrO2Nhc2UidyI6ZT1peDticmVhaztjYXNlIlciOmU9aXgscj0hMDticmVha31yZXR1cm4gZnAoZSk/e3R5cGU6IlNldCIsdmFsdWU6ZSxjb21wbGVtZW50OnJ9OnJ4KCl9Y29udHJvbEVzY2FwZUF0b20oKXtsZXQgZTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZiI6ZT1zcigiXGYiKTticmVhaztjYXNlIm4iOmU9c3IoYApgKTticmVhaztjYXNlInIiOmU9c3IoIlxyIik7YnJlYWs7Y2FzZSJ0IjplPXNyKCIJIik7YnJlYWs7Y2FzZSJ2IjplPXNyKCJcdiIpO2JyZWFrfXJldHVybiBmcChlKT97dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTplfTpyeCgpfWNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCl7dGhpcy5jb25zdW1lQ2hhcigiYyIpO2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKC9bYS16QS1aXS8udGVzdChlKT09PSExKXRocm93IEVycm9yKCJJbnZhbGlkICIpO3JldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmUudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApLTY0fX1udWxDaGFyYWN0ZXJBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIjAiKSx7dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpzcigiXDAiKX19aGV4RXNjYXBlU2VxdWVuY2VBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIngiKSx0aGlzLnBhcnNlSGV4RGlnaXRzKDIpfXJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigidSIpLHRoaXMucGFyc2VIZXhEaWdpdHMoNCl9aWRlbnRpdHlFc2NhcGVBdG9tKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6c3IoZSl9fWNsYXNzUGF0dGVybkNoYXJhY3RlckF0b20oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigpKXtjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6Y2FzZSJcXCI6Y2FzZSJdIjp0aHJvdyBFcnJvcigiVEJEIik7ZGVmYXVsdDpsZXQgZT10aGlzLnBvcENoYXIoKTtyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpzcihlKX19fWNoYXJhY3RlckNsYXNzKCl7bGV0IGU9W10scj0hMTtmb3IodGhpcy5jb25zdW1lQ2hhcigiWyIpLHRoaXMucGVla0NoYXIoMCk9PT0iXiImJih0aGlzLmNvbnN1bWVDaGFyKCJeIikscj0hMCk7dGhpcy5pc0NsYXNzQXRvbSgpOyl7bGV0IG49dGhpcy5jbGFzc0F0b20oKSxpPW4udHlwZT09PSJDaGFyYWN0ZXIiO2lmKE5OKG4pJiZ0aGlzLmlzUmFuZ2VEYXNoKCkpe3RoaXMuY29uc3VtZUNoYXIoIi0iKTtsZXQgYT10aGlzLmNsYXNzQXRvbSgpLHM9YS50eXBlPT09IkNoYXJhY3RlciI7aWYoTk4oYSkpe2lmKGEudmFsdWU8bi52YWx1ZSl0aHJvdyBFcnJvcigiUmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzcyIpO2UucHVzaCh7ZnJvbTpuLnZhbHVlLHRvOmEudmFsdWV9KX1lbHNlIE9rKG4udmFsdWUsZSksZS5wdXNoKHNyKCItIikpLE9rKGEudmFsdWUsZSl9ZWxzZSBPayhuLnZhbHVlLGUpfXJldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJdIikse3R5cGU6IlNldCIsY29tcGxlbWVudDpyLHZhbHVlOmV9fWNsYXNzQXRvbSgpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnRocm93IEVycm9yKCJUQkQiKTtjYXNlIlxcIjpyZXR1cm4gdGhpcy5jbGFzc0VzY2FwZSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpfX1jbGFzc0VzY2FwZSgpe3N3aXRjaCh0aGlzLmNvbnN1bWVDaGFyKCJcXCIpLHRoaXMucGVla0NoYXIoKSl7Y2FzZSJiIjpyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiYiIpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOnNyKCJcYiIpfTtjYXNlImQiOmNhc2UiRCI6Y2FzZSJzIjpjYXNlIlMiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdGhpcy5jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpO2Nhc2UiZiI6Y2FzZSJuIjpjYXNlInIiOmNhc2UidCI6Y2FzZSJ2IjpyZXR1cm4gdGhpcy5jb250cm9sRXNjYXBlQXRvbSgpO2Nhc2UiYyI6cmV0dXJuIHRoaXMuY29udHJvbExldHRlckVzY2FwZUF0b20oKTtjYXNlIjAiOnJldHVybiB0aGlzLm51bENoYXJhY3RlckF0b20oKTtjYXNlIngiOnJldHVybiB0aGlzLmhleEVzY2FwZVNlcXVlbmNlQXRvbSgpO2Nhc2UidSI6cmV0dXJuIHRoaXMucmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlQXRvbSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuaWRlbnRpdHlFc2NhcGVBdG9tKCl9fWdyb3VwKCl7bGV0IGU9ITA7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIigiKSx0aGlzLnBlZWtDaGFyKDApKXtjYXNlIj8iOnRoaXMuY29uc3VtZUNoYXIoIj8iKSx0aGlzLmNvbnN1bWVDaGFyKCI6IiksZT0hMTticmVhaztkZWZhdWx0OnRoaXMuZ3JvdXBJZHgrKzticmVha31sZXQgcj10aGlzLmRpc2p1bmN0aW9uKCk7dGhpcy5jb25zdW1lQ2hhcigiKSIpO2xldCBuPXt0eXBlOiJHcm91cCIsY2FwdHVyaW5nOmUsdmFsdWU6cn07cmV0dXJuIGUmJihuLmlkeD10aGlzLmdyb3VwSWR4KSxufXBvc2l0aXZlSW50ZWdlcigpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKExCZS50ZXN0KGUpPT09ITEpdGhyb3cgRXJyb3IoIkV4cGVjdGluZyBhIHBvc2l0aXZlIGludGVnZXIiKTtmb3IoO1BrLnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1pbnRlZ2VySW5jbHVkaW5nWmVybygpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKFBrLnRlc3QoZSk9PT0hMSl0aHJvdyBFcnJvcigiRXhwZWN0aW5nIGFuIGludGVnZXIiKTtmb3IoO1BrLnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1wYXR0ZXJuQ2hhcmFjdGVyKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7c3dpdGNoKGUpe2Nhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpjYXNlIl4iOmNhc2UiJCI6Y2FzZSJcXCI6Y2FzZSIuIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpjYXNlIigiOmNhc2UiKSI6Y2FzZSJbIjpjYXNlInwiOnRocm93IEVycm9yKCJUQkQiKTtkZWZhdWx0OnJldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOnNyKGUpfX19aXNSZWdFeHBGbGFnKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoMCkpe2Nhc2UiZyI6Y2FzZSJpIjpjYXNlIm0iOmNhc2UidSI6Y2FzZSJ5IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1pc1JhbmdlRGFzaCgpe3JldHVybiB0aGlzLnBlZWtDaGFyKCk9PT0iLSImJnRoaXMuaXNDbGFzc0F0b20oMSl9aXNEaWdpdCgpe3JldHVybiBQay50ZXN0KHRoaXMucGVla0NoYXIoMCkpfWlzQ2xhc3NBdG9tKGU9MCl7c3dpdGNoKHRoaXMucGVla0NoYXIoZSkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWlzVGVybSgpe3JldHVybiB0aGlzLmlzQXRvbSgpfHx0aGlzLmlzQXNzZXJ0aW9uKCl9aXNBdG9tKCl7aWYodGhpcy5pc1BhdHRlcm5DaGFyYWN0ZXIoKSlyZXR1cm4hMDtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSIuIjpjYXNlIlxcIjpjYXNlIlsiOmNhc2UiKCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19aXNBc3NlcnRpb24oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSJeIjpjYXNlIiQiOnJldHVybiEwO2Nhc2UiXFwiOnN3aXRjaCh0aGlzLnBlZWtDaGFyKDEpKXtjYXNlImIiOmNhc2UiQiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIigiOnJldHVybiB0aGlzLnBlZWtDaGFyKDEpPT09Ij8iJiYodGhpcy5wZWVrQ2hhcigyKT09PSI9Inx8dGhpcy5wZWVrQ2hhcigyKT09PSIhIik7ZGVmYXVsdDpyZXR1cm4hMX19aXNRdWFudGlmaWVyKCl7bGV0IGU9dGhpcy5zYXZlU3RhdGUoKTt0cnl7cmV0dXJuIHRoaXMucXVhbnRpZmllcighMCkhPT12b2lkIDB9Y2F0Y2h7cmV0dXJuITF9ZmluYWxseXt0aGlzLnJlc3RvcmVTdGF0ZShlKX19aXNQYXR0ZXJuQ2hhcmFjdGVyKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSJeIjpjYXNlIiQiOmNhc2UiXFwiOmNhc2UiLiI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiPyI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiWyI6Y2FzZSJ8IjpjYXNlIi8iOmNhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1wYXJzZUhleERpZ2l0cyhlKXtsZXQgcj0iIjtmb3IobGV0IGk9MDtpPGU7aSsrKXtsZXQgYT10aGlzLnBvcENoYXIoKTtpZihEQmUudGVzdChhKT09PSExKXRocm93IEVycm9yKCJFeHBlY3RpbmcgYSBIZXhEZWNpbWFsIGRpZ2l0cyIpO3IrPWF9cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6cGFyc2VJbnQociwxNil9fXBlZWtDaGFyKGU9MCl7cmV0dXJuIHRoaXMuaW5wdXRbdGhpcy5pZHgrZV19cG9wQ2hhcigpe2xldCBlPXRoaXMucGVla0NoYXIoMCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIodm9pZCAwKSxlfWNvbnN1bWVDaGFyKGUpe2lmKGUhPT12b2lkIDAmJnRoaXMuaW5wdXRbdGhpcy5pZHhdIT09ZSl0aHJvdyBFcnJvcigiRXhwZWN0ZWQ6ICciK2UrIicgYnV0IGZvdW5kOiAnIit0aGlzLmlucHV0W3RoaXMuaWR4XSsiJyBhdCBvZmZzZXQ6ICIrdGhpcy5pZHgpO2lmKHRoaXMuaWR4Pj10aGlzLmlucHV0Lmxlbmd0aCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKTt0aGlzLmlkeCsrfWxvYyhlKXtyZXR1cm57YmVnaW46ZSxlbmQ6dGhpcy5pZHh9fX19KTt2YXIgRmMsTXNlPU4oKCk9PnsidXNlIHN0cmljdCI7RmM9Y2xhc3N7c3RhdGlje28odGhpcywiQmFzZVJlZ0V4cFZpc2l0b3IiKX12aXNpdENoaWxkcmVuKGUpe2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO2UuaGFzT3duUHJvcGVydHkocikmJihuLnR5cGUhPT12b2lkIDA/dGhpcy52aXNpdChuKTpBcnJheS5pc0FycmF5KG4pJiZuLmZvckVhY2goaT0+e3RoaXMudmlzaXQoaSl9LHRoaXMpKX19dmlzaXQoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJQYXR0ZXJuIjp0aGlzLnZpc2l0UGF0dGVybihlKTticmVhaztjYXNlIkZsYWdzIjp0aGlzLnZpc2l0RmxhZ3MoZSk7YnJlYWs7Y2FzZSJEaXNqdW5jdGlvbiI6dGhpcy52aXNpdERpc2p1bmN0aW9uKGUpO2JyZWFrO2Nhc2UiQWx0ZXJuYXRpdmUiOnRoaXMudmlzaXRBbHRlcm5hdGl2ZShlKTticmVhaztjYXNlIlN0YXJ0QW5jaG9yIjp0aGlzLnZpc2l0U3RhcnRBbmNob3IoZSk7YnJlYWs7Y2FzZSJFbmRBbmNob3IiOnRoaXMudmlzaXRFbmRBbmNob3IoZSk7YnJlYWs7Y2FzZSJXb3JkQm91bmRhcnkiOnRoaXMudmlzaXRXb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJOb25Xb3JkQm91bmRhcnkiOnRoaXMudmlzaXROb25Xb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJMb29rYWhlYWQiOnRoaXMudmlzaXRMb29rYWhlYWQoZSk7YnJlYWs7Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6dGhpcy52aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpO2JyZWFrO2Nhc2UiQ2hhcmFjdGVyIjp0aGlzLnZpc2l0Q2hhcmFjdGVyKGUpO2JyZWFrO2Nhc2UiU2V0Ijp0aGlzLnZpc2l0U2V0KGUpO2JyZWFrO2Nhc2UiR3JvdXAiOnRoaXMudmlzaXRHcm91cChlKTticmVhaztjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6dGhpcy52aXNpdEdyb3VwQmFja1JlZmVyZW5jZShlKTticmVhaztjYXNlIlF1YW50aWZpZXIiOnRoaXMudmlzaXRRdWFudGlmaWVyKGUpO2JyZWFrfXRoaXMudmlzaXRDaGlsZHJlbihlKX12aXNpdFBhdHRlcm4oZSl7fXZpc2l0RmxhZ3MoZSl7fXZpc2l0RGlzanVuY3Rpb24oZSl7fXZpc2l0QWx0ZXJuYXRpdmUoZSl7fXZpc2l0U3RhcnRBbmNob3IoZSl7fXZpc2l0RW5kQW5jaG9yKGUpe312aXNpdFdvcmRCb3VuZGFyeShlKXt9dmlzaXROb25Xb3JkQm91bmRhcnkoZSl7fXZpc2l0TG9va2FoZWFkKGUpe312aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpe312aXNpdENoYXJhY3RlcihlKXt9dmlzaXRTZXQoZSl7fXZpc2l0R3JvdXAoZSl7fXZpc2l0R3JvdXBCYWNrUmVmZXJlbmNlKGUpe312aXNpdFF1YW50aWZpZXIoZSl7fX19KTt2YXIgYXg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtOc2UoKTtNc2UoKX0pO3ZhciBCaz17fTt1cihCayx7TkVXTElORV9SRUdFWFA6KCk9PlBOLGVzY2FwZVJlZ0V4cDooKT0+bXAsZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybjooKT0+Rk4sZ2V0VGVybWluYWxQYXJ0czooKT0+UkJlLGlzTXVsdGlsaW5lQ29tbWVudDooKT0+Qk4saXNXaGl0ZXNwYWNlOigpPT5GZyxwYXJ0aWFsTWF0Y2hlczooKT0+JE4scGFydGlhbFJlZ0V4cDooKT0+UHNlLHdoaXRlc3BhY2VDaGFyYWN0ZXJzOigpPT5Pc2V9KTtmdW5jdGlvbiBSQmUodCl7dHJ5e3R5cGVvZiB0IT0ic3RyaW5nIiYmKHQ9dC5zb3VyY2UpLHQ9YC8ke3R9L2A7bGV0IGU9SXNlLnBhdHRlcm4odCkscj1bXTtmb3IobGV0IG4gb2YgZS52YWx1ZS52YWx1ZSlwcC5yZXNldCh0KSxwcC52aXNpdChuKSxyLnB1c2goe3N0YXJ0OnBwLnN0YXJ0UmVnZXhwLGVuZDpwcC5lbmRSZWdleH0pO3JldHVybiByfWNhdGNoe3JldHVybltdfX1mdW5jdGlvbiBCTih0KXt0cnl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9bmV3IFJlZ0V4cCh0KSksdD10LnRvU3RyaW5nKCkscHAucmVzZXQodCkscHAudmlzaXQoSXNlLnBhdHRlcm4odCkpLHBwLm11bHRpbGluZX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gRmcodCl7bGV0IGU9dHlwZW9mIHQ9PSJzdHJpbmciP25ldyBSZWdFeHAodCk6dDtyZXR1cm4gT3NlLnNvbWUocj0+ZS50ZXN0KHIpKX1mdW5jdGlvbiBtcCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpfWZ1bmN0aW9uIEZOKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodCxlPT4vXHcvLnRlc3QoZSk/YFske2UudG9Mb3dlckNhc2UoKX0ke2UudG9VcHBlckNhc2UoKX1dYDptcChlKSkuam9pbigiIil9ZnVuY3Rpb24gJE4odCxlKXtsZXQgcj1Qc2UodCksbj1lLm1hdGNoKHIpO3JldHVybiEhbiYmblswXS5sZW5ndGg+MH1mdW5jdGlvbiBQc2UodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD1uZXcgUmVnRXhwKHQpKTtsZXQgZT10LHI9dC5zb3VyY2Usbj0wO2Z1bmN0aW9uIGkoKXtsZXQgYT0iIixzO2Z1bmN0aW9uIGwoaCl7YSs9ci5zdWJzdHIobixoKSxuKz1ofW8obCwiYXBwZW5kUmF3Iik7ZnVuY3Rpb24gdShoKXthKz0iKD86IityLnN1YnN0cihuLGgpKyJ8JCkiLG4rPWh9Zm9yKG8odSwiYXBwZW5kT3B0aW9uYWwiKTtuPHIubGVuZ3RoOylzd2l0Y2gocltuXSl7Y2FzZSJcXCI6c3dpdGNoKHJbbisxXSl7Y2FzZSJjIjp1KDMpO2JyZWFrO2Nhc2UieCI6dSg0KTticmVhaztjYXNlInUiOmUudW5pY29kZT9yW24rMl09PT0ieyI/dShyLmluZGV4T2YoIn0iLG4pLW4rMSk6dSg2KTp1KDIpO2JyZWFrO2Nhc2UicCI6Y2FzZSJQIjplLnVuaWNvZGU/dShyLmluZGV4T2YoIn0iLG4pLW4rMSk6dSgyKTticmVhaztjYXNlImsiOnUoci5pbmRleE9mKCI+IixuKS1uKzEpO2JyZWFrO2RlZmF1bHQ6dSgyKTticmVha31icmVhaztjYXNlIlsiOnM9L1xbKD86XFwufC4pKj9cXS9nLHMubGFzdEluZGV4PW4scz1zLmV4ZWMocil8fFtdLHUoc1swXS5sZW5ndGgpO2JyZWFrO2Nhc2UifCI6Y2FzZSJeIjpjYXNlIiQiOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIj8iOmwoMSk7YnJlYWs7Y2FzZSJ7IjpzPS9ce1xkKyw/XGQqXH0vZyxzLmxhc3RJbmRleD1uLHM9cy5leGVjKHIpLHM/bChzWzBdLmxlbmd0aCk6dSgxKTticmVhaztjYXNlIigiOmlmKHJbbisxXT09PSI/Iilzd2l0Y2gocltuKzJdKXtjYXNlIjoiOmErPSIoPzoiLG4rPTMsYSs9aSgpKyJ8JCkiO2JyZWFrO2Nhc2UiPSI6YSs9Iig/PSIsbis9MyxhKz1pKCkrIikiO2JyZWFrO2Nhc2UiISI6cz1uLG4rPTMsaSgpLGErPXIuc3Vic3RyKHMsbi1zKTticmVhaztjYXNlIjwiOnN3aXRjaChyW24rM10pe2Nhc2UiPSI6Y2FzZSIhIjpzPW4sbis9NCxpKCksYSs9ci5zdWJzdHIocyxuLXMpO2JyZWFrO2RlZmF1bHQ6bChyLmluZGV4T2YoIj4iLG4pLW4rMSksYSs9aSgpKyJ8JCkiO2JyZWFrfWJyZWFrfWVsc2UgbCgxKSxhKz1pKCkrInwkKSI7YnJlYWs7Y2FzZSIpIjpyZXR1cm4rK24sYTtkZWZhdWx0OnUoMSk7YnJlYWt9cmV0dXJuIGF9cmV0dXJuIG8oaSwicHJvY2VzcyIpLG5ldyBSZWdFeHAoaSgpLHQuZmxhZ3MpfXZhciBQTixJc2UsT04scHAsT3NlLCRnPU4oKCk9PnsidXNlIHN0cmljdCI7YXgoKTtQTj0vXHI/XG4vZ20sSXNlPW5ldyBkcCxPTj1jbGFzcyBleHRlbmRzIEZje3N0YXRpY3tvKHRoaXMsIlRlcm1pbmFsUmVnRXhwVmlzaXRvciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXSx0aGlzLm11bHRpbGluZT0hMX1nZXQgZW5kUmVnZXgoKXtyZXR1cm4gdGhpcy5lbmRSZWdleHBTdGFjay5qb2luKCIiKX1yZXNldChlKXt0aGlzLm11bHRpbGluZT0hMSx0aGlzLnJlZ2V4PWUsdGhpcy5zdGFydFJlZ2V4cD0iIix0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXX12aXNpdEdyb3VwKGUpe2UucXVhbnRpZmllciYmKHRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdKX12aXNpdENoYXJhY3RlcihlKXtsZXQgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUudmFsdWUpO2lmKCF0aGlzLm11bHRpbGluZSYmcj09PWAKYCYmKHRoaXMubXVsdGlsaW5lPSEwKSxlLnF1YW50aWZpZXIpdGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W107ZWxzZXtsZXQgbj1tcChyKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gobiksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9bil9fXZpc2l0U2V0KGUpe2lmKCF0aGlzLm11bHRpbGluZSl7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKSxuPW5ldyBSZWdFeHAocik7dGhpcy5tdWx0aWxpbmU9ISFgCmAubWF0Y2gobil9aWYoZS5xdWFudGlmaWVyKXRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdO2Vsc2V7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gociksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9cil9fXZpc2l0Q2hpbGRyZW4oZSl7ZS50eXBlPT09Ikdyb3VwIiYmZS5xdWFudGlmaWVyfHxzdXBlci52aXNpdENoaWxkcmVuKGUpfX0scHA9bmV3IE9OO28oUkJlLCJnZXRUZXJtaW5hbFBhcnRzIik7byhCTiwiaXNNdWx0aWxpbmVDb21tZW50Iik7T3NlPWBcZgpccglcdiBceEEwXHUxNjgwXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDI4XHUyMDI5XHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGYC5zcGxpdCgiIik7byhGZywiaXNXaGl0ZXNwYWNlIik7byhtcCwiZXNjYXBlUmVnRXhwIik7byhGTiwiZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybiIpO28oJE4sInBhcnRpYWxNYXRjaGVzIik7byhQc2UsInBhcnRpYWxSZWdFeHAiKX0pO3ZhciAkaz17fTt1cigkayx7ZmluZEFzc2lnbm1lbnQ6KCk9PlhOLGZpbmROYW1lQXNzaWdubWVudDooKT0+RmssZmluZE5vZGVGb3JLZXl3b3JkOigpPT5xTixmaW5kTm9kZUZvclByb3BlcnR5OigpPT5veCxmaW5kTm9kZXNGb3JLZXl3b3JkOigpPT5OQmUsZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsOigpPT5ZTixmaW5kTm9kZXNGb3JQcm9wZXJ0eTooKT0+SE4sZ2V0QWN0aW9uQXRFbGVtZW50OigpPT5Hc2UsZ2V0QWN0aW9uVHlwZTooKT0+VXNlLGdldEFsbFJlYWNoYWJsZVJ1bGVzOigpPT5zeCxnZXRDcm9zc1JlZmVyZW5jZVRlcm1pbmFsOigpPT5WTixnZXRFbnRyeVJ1bGU6KCk9PkJzZSxnZXRFeHBsaWNpdFJ1bGVUeXBlOigpPT56ZyxnZXRIaWRkZW5SdWxlczooKT0+RnNlLGdldFJ1bGVUeXBlOigpPT5qTixnZXRSdWxlVHlwZU5hbWU6KCk9PkJCZSxnZXRUeXBlTmFtZTooKT0+Y3gsaXNBcnJheUNhcmRpbmFsaXR5OigpPT5JQmUsaXNBcnJheU9wZXJhdG9yOigpPT5PQmUsaXNDb21tZW50VGVybWluYWw6KCk9PlVOLGlzRGF0YVR5cGU6KCk9PlBCZSxpc0RhdGFUeXBlUnVsZTooKT0+bHgsaXNPcHRpb25hbENhcmRpbmFsaXR5OigpPT5NQmUsdGVybWluYWxSZWdleDooKT0+R2d9KTtmdW5jdGlvbiBCc2UodCl7cmV0dXJuIHQucnVsZXMuZmluZChlPT5GYShlKSYmZS5lbnRyeSl9ZnVuY3Rpb24gRnNlKHQpe3JldHVybiB0LnJ1bGVzLmZpbHRlcihlPT51byhlKSYmZS5oaWRkZW4pfWZ1bmN0aW9uIHN4KHQsZSl7bGV0IHI9bmV3IFNldCxuPUJzZSh0KTtpZighbilyZXR1cm4gbmV3IFNldCh0LnJ1bGVzKTtsZXQgaT1bbl0uY29uY2F0KEZzZSh0KSk7Zm9yKGxldCBzIG9mIGkpJHNlKHMscixlKTtsZXQgYT1uZXcgU2V0O2ZvcihsZXQgcyBvZiB0LnJ1bGVzKShyLmhhcyhzLm5hbWUpfHx1byhzKSYmcy5oaWRkZW4pJiZhLmFkZChzKTtyZXR1cm4gYX1mdW5jdGlvbiAkc2UodCxlLHIpe2UuYWRkKHQubmFtZSksQmModCkuZm9yRWFjaChuPT57aWYoQmwobil8fHImJlJrKG4pKXtsZXQgaT1uLnJ1bGUucmVmO2kmJiFlLmhhcyhpLm5hbWUpJiYkc2UoaSxlLHIpfX0pfWZ1bmN0aW9uIFZOKHQpe2lmKHQudGVybWluYWwpcmV0dXJuIHQudGVybWluYWw7aWYodC50eXBlLnJlZil7bGV0IGU9RmsodC50eXBlLnJlZik7cmV0dXJuIGU/LnRlcm1pbmFsfX1mdW5jdGlvbiBVTih0KXtyZXR1cm4gdC5oaWRkZW4mJiFGZyhHZyh0KSl9ZnVuY3Rpb24gSE4odCxlKXtyZXR1cm4hdHx8IWU/W106V04odCxlLHQuYXN0Tm9kZSwhMCl9ZnVuY3Rpb24gb3godCxlLHIpe2lmKCF0fHwhZSlyZXR1cm47bGV0IG49V04odCxlLHQuYXN0Tm9kZSwhMCk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBXTih0LGUscixuKXtpZighbil7bGV0IGk9aHAodC5ncmFtbWFyU291cmNlLFBsKTtpZihpJiZpLmZlYXR1cmU9PT1lKXJldHVyblt0XX1yZXR1cm4gTWwodCkmJnQuYXN0Tm9kZT09PXI/dC5jb250ZW50LmZsYXRNYXAoaT0+V04oaSxlLHIsITEpKTpbXX1mdW5jdGlvbiBOQmUodCxlKXtyZXR1cm4gdD9ZTih0LGUsdD8uYXN0Tm9kZSk6W119ZnVuY3Rpb24gcU4odCxlLHIpe2lmKCF0KXJldHVybjtsZXQgbj1ZTih0LGUsdD8uYXN0Tm9kZSk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBZTih0LGUscil7aWYodC5hc3ROb2RlIT09cilyZXR1cm5bXTtpZihYbyh0LmdyYW1tYXJTb3VyY2UpJiZ0LmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lKXJldHVyblt0XTtsZXQgbj1zcCh0KS5pdGVyYXRvcigpLGksYT1bXTtkbyBpZihpPW4ubmV4dCgpLCFpLmRvbmUpe2xldCBzPWkudmFsdWU7cy5hc3ROb2RlPT09cj9YbyhzLmdyYW1tYXJTb3VyY2UpJiZzLmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lJiZhLnB1c2gocyk6bi5wcnVuZSgpfXdoaWxlKCFpLmRvbmUpO3JldHVybiBhfWZ1bmN0aW9uIFhOKHQpe3ZhciBlO2xldCByPXQuYXN0Tm9kZTtmb3IoO3I9PT0oKGU9dC5jb250YWluZXIpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5hc3ROb2RlKTspe2xldCBuPWhwKHQuZ3JhbW1hclNvdXJjZSxQbCk7aWYobilyZXR1cm4gbjt0PXQuY29udGFpbmVyfX1mdW5jdGlvbiBGayh0KXtsZXQgZT10O3JldHVybiBBayhlKSYmKCR1KGUuJGNvbnRhaW5lcik/ZT1lLiRjb250YWluZXIuJGNvbnRhaW5lcjpGYShlLiRjb250YWluZXIpP2U9ZS4kY29udGFpbmVyOk9jKGUuJGNvbnRhaW5lcikpLHpzZSh0LGUsbmV3IE1hcCl9ZnVuY3Rpb24genNlKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKGEscyl7bGV0IGw7cmV0dXJuIGhwKGEsUGwpfHwobD16c2UocyxzLHIpKSxyLnNldCh0LGwpLGx9aWYobyhpLCJnbyIpLHIuaGFzKHQpKXJldHVybiByLmdldCh0KTtyLnNldCh0LHZvaWQgMCk7Zm9yKGxldCBhIG9mIEJjKGUpKXtpZihQbChhKSYmYS5mZWF0dXJlLnRvTG93ZXJDYXNlKCk9PT0ibmFtZSIpcmV0dXJuIHIuc2V0KHQsYSksYTtpZihCbChhKSYmRmEoYS5ydWxlLnJlZikpcmV0dXJuIGkoYSxhLnJ1bGUucmVmKTtpZihEayhhKSYmKCEoKG49YS50eXBlUmVmKT09PW51bGx8fG49PT12b2lkIDApJiZuLnJlZikpcmV0dXJuIGkoYSxhLnR5cGVSZWYucmVmKX19ZnVuY3Rpb24gR3NlKHQpe2xldCBlPXQuJGNvbnRhaW5lcjtpZihmZihlKSl7bGV0IHI9ZS5lbGVtZW50cyxuPXIuaW5kZXhPZih0KTtmb3IobGV0IGk9bi0xO2k+PTA7aS0tKXtsZXQgYT1yW2ldO2lmKCR1KGEpKXJldHVybiBhO3tsZXQgcz1CYyhyW2ldKS5maW5kKCR1KTtpZihzKXJldHVybiBzfX19aWYoUTIoZSkpcmV0dXJuIEdzZShlKX1mdW5jdGlvbiBNQmUodCxlKXtyZXR1cm4gdD09PSI/Inx8dD09PSIqInx8ZmYoZSkmJiEhZS5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiBJQmUodCl7cmV0dXJuIHQ9PT0iKiJ8fHQ9PT0iKyJ9ZnVuY3Rpb24gT0JlKHQpe3JldHVybiB0PT09Iis9In1mdW5jdGlvbiBseCh0KXtyZXR1cm4gVnNlKHQsbmV3IFNldCl9ZnVuY3Rpb24gVnNlKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7ZS5hZGQodCk7Zm9yKGxldCByIG9mIEJjKHQpKWlmKEJsKHIpKXtpZighci5ydWxlLnJlZnx8RmEoci5ydWxlLnJlZikmJiFWc2Uoci5ydWxlLnJlZixlKSlyZXR1cm4hMX1lbHNle2lmKFBsKHIpKXJldHVybiExO2lmKCR1KHIpKXJldHVybiExfXJldHVybiEhdC5kZWZpbml0aW9ufWZ1bmN0aW9uIFBCZSh0KXtyZXR1cm4gR04odC50eXBlLG5ldyBTZXQpfWZ1bmN0aW9uIEdOKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7aWYoZS5hZGQodCksZk4odCkpcmV0dXJuITE7aWYodk4odCkpcmV0dXJuITE7aWYoYk4odCkpcmV0dXJuIHQudHlwZXMuZXZlcnkocj0+R04ocixlKSk7aWYoRGsodCkpe2lmKHQucHJpbWl0aXZlVHlwZSE9PXZvaWQgMClyZXR1cm4hMDtpZih0LnN0cmluZ1R5cGUhPT12b2lkIDApcmV0dXJuITA7aWYodC50eXBlUmVmIT09dm9pZCAwKXtsZXQgcj10LnR5cGVSZWYucmVmO3JldHVybiBaMihyKT9HTihyLnR5cGUsZSk6ITF9ZWxzZSByZXR1cm4hMX1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHpnKHQpe2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKHQuZGF0YVR5cGUpcmV0dXJuIHQuZGF0YVR5cGU7aWYodC5yZXR1cm5UeXBlKXtsZXQgZT10LnJldHVyblR5cGUucmVmO2lmKGUpe2lmKEZhKGUpKXJldHVybiBlLm5hbWU7aWYoX2soZSl8fFoyKGUpKXJldHVybiBlLm5hbWV9fX1mdW5jdGlvbiBjeCh0KXt2YXIgZTtpZihGYSh0KSlyZXR1cm4gbHgodCk/dC5uYW1lOihlPXpnKHQpKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0Lm5hbWU7aWYoX2sodCl8fFoyKHQpfHx4Tih0KSlyZXR1cm4gdC5uYW1lO2lmKCR1KHQpKXtsZXQgcj1Vc2UodCk7aWYocilyZXR1cm4gcn1lbHNlIGlmKEFrKHQpKXJldHVybiB0Lm5hbWU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IG5hbWUgb2YgVW5rbm93biBUeXBlIil9ZnVuY3Rpb24gVXNlKHQpe3ZhciBlO2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKCEoKGU9dC50eXBlKT09PW51bGx8fGU9PT12b2lkIDApJiZlLnJlZilyZXR1cm4gY3godC50eXBlLnJlZil9ZnVuY3Rpb24gQkJlKHQpe3ZhciBlLHIsbjtyZXR1cm4gdW8odCk/KHI9KGU9dC50eXBlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUubmFtZSkhPT1udWxsJiZyIT09dm9pZCAwP3I6InN0cmluZyI6bHgodCk/dC5uYW1lOihuPXpnKHQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0Lm5hbWV9ZnVuY3Rpb24gak4odCl7dmFyIGUscixuO3JldHVybiB1byh0KT8ocj0oZT10LnR5cGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5uYW1lKSE9PW51bGwmJnIhPT12b2lkIDA/cjoic3RyaW5nIjoobj16Zyh0KSkhPT1udWxsJiZuIT09dm9pZCAwP246dC5uYW1lfWZ1bmN0aW9uIEdnKHQpe2xldCBlPXtzOiExLGk6ITEsdTohMX0scj1WZyh0LmRlZmluaXRpb24sZSksbj1PYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFssaV0pPT5pKS5tYXAoKFtpXSk9PmkpLmpvaW4oIiIpO3JldHVybiBuZXcgUmVnRXhwKHIsbil9ZnVuY3Rpb24gVmcodCxlKXtpZihTTih0KSlyZXR1cm4gRkJlKHQpO2lmKENOKHQpKXJldHVybiAkQmUodCk7aWYoVE4odCkpcmV0dXJuIFZCZSh0KTtpZihSayh0KSl7bGV0IHI9dC5ydWxlLnJlZjtpZighcil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcnVsZSByZWZlcmVuY2UuIik7cmV0dXJuIHp1KFZnKHIuZGVmaW5pdGlvbikse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZWxzZXtpZihrTih0KSlyZXR1cm4gR0JlKHQpO2lmKEFOKHQpKXJldHVybiB6QmUodCk7aWYoRU4odCkpe2xldCByPXQucmVnZXgubGFzdEluZGV4T2YoIi8iKSxuPXQucmVnZXguc3Vic3RyaW5nKDEsciksaT10LnJlZ2V4LnN1YnN0cmluZyhyKzEpO3JldHVybiBlJiYoZS5pPWkuaW5jbHVkZXMoImkiKSxlLnM9aS5pbmNsdWRlcygicyIpLGUudT1pLmluY2x1ZGVzKCJ1IikpLHp1KG4se2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KX1lbHNle2lmKF9OKHQpKXJldHVybiB6dShLTix7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KTt0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVybWluYWwgZWxlbWVudDogJHt0Py4kdHlwZX1gKX19fWZ1bmN0aW9uIEZCZSh0KXtyZXR1cm4genUodC5lbGVtZW50cy5tYXAoZT0+VmcoZSkpLmpvaW4oInwiKSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiAkQmUodCl7cmV0dXJuIHp1KHQuZWxlbWVudHMubWFwKGU9PlZnKGUpKS5qb2luKCIiKSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiB6QmUodCl7cmV0dXJuIHp1KGAke0tOfSo/JHtWZyh0LnRlcm1pbmFsKX1gLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIEdCZSh0KXtyZXR1cm4genUoYCg/ISR7VmcodC50ZXJtaW5hbCl9KSR7S059Kj9gLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIFZCZSh0KXtyZXR1cm4gdC5yaWdodD96dShgWyR7ek4odC5sZWZ0KX0tJHt6Tih0LnJpZ2h0KX1dYCx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWQsd3JhcDohMX0pOnp1KHpOKHQubGVmdCkse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KX1mdW5jdGlvbiB6Tih0KXtyZXR1cm4gbXAodC52YWx1ZSl9ZnVuY3Rpb24genUodCxlKXt2YXIgcjtyZXR1cm4oZS53cmFwIT09ITF8fGUubG9va2FoZWFkKSYmKHQ9YCgkeyhyPWUubG9va2FoZWFkKSE9PW51bGwmJnIhPT12b2lkIDA/cjoiIn0ke3R9KWApLGUuY2FyZGluYWxpdHk/YCR7dH0ke2UuY2FyZGluYWxpdHl9YDp0fXZhciBLTixGbD1OKCgpPT57InVzZSBzdHJpY3QiO1NrKCk7UGMoKTtJbCgpO2NzKCk7T2woKTskZygpO28oQnNlLCJnZXRFbnRyeVJ1bGUiKTtvKEZzZSwiZ2V0SGlkZGVuUnVsZXMiKTtvKHN4LCJnZXRBbGxSZWFjaGFibGVSdWxlcyIpO28oJHNlLCJydWxlRGZzIik7byhWTiwiZ2V0Q3Jvc3NSZWZlcmVuY2VUZXJtaW5hbCIpO28oVU4sImlzQ29tbWVudFRlcm1pbmFsIik7byhITiwiZmluZE5vZGVzRm9yUHJvcGVydHkiKTtvKG94LCJmaW5kTm9kZUZvclByb3BlcnR5Iik7byhXTiwiZmluZE5vZGVzRm9yUHJvcGVydHlJbnRlcm5hbCIpO28oTkJlLCJmaW5kTm9kZXNGb3JLZXl3b3JkIik7byhxTiwiZmluZE5vZGVGb3JLZXl3b3JkIik7byhZTiwiZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsIik7byhYTiwiZmluZEFzc2lnbm1lbnQiKTtvKEZrLCJmaW5kTmFtZUFzc2lnbm1lbnQiKTtvKHpzZSwiZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwiKTtvKEdzZSwiZ2V0QWN0aW9uQXRFbGVtZW50Iik7byhNQmUsImlzT3B0aW9uYWxDYXJkaW5hbGl0eSIpO28oSUJlLCJpc0FycmF5Q2FyZGluYWxpdHkiKTtvKE9CZSwiaXNBcnJheU9wZXJhdG9yIik7byhseCwiaXNEYXRhVHlwZVJ1bGUiKTtvKFZzZSwiaXNEYXRhVHlwZVJ1bGVJbnRlcm5hbCIpO28oUEJlLCJpc0RhdGFUeXBlIik7byhHTiwiaXNEYXRhVHlwZUludGVybmFsIik7byh6ZywiZ2V0RXhwbGljaXRSdWxlVHlwZSIpO28oY3gsImdldFR5cGVOYW1lIik7byhVc2UsImdldEFjdGlvblR5cGUiKTtvKEJCZSwiZ2V0UnVsZVR5cGVOYW1lIik7byhqTiwiZ2V0UnVsZVR5cGUiKTtvKEdnLCJ0ZXJtaW5hbFJlZ2V4Iik7S049L1tcc1xTXS8uc291cmNlO28oVmcsImFic3RyYWN0RWxlbWVudFRvUmVnZXgiKTtvKEZCZSwidGVybWluYWxBbHRlcm5hdGl2ZXNUb1JlZ2V4Iik7bygkQmUsInRlcm1pbmFsR3JvdXBUb1JlZ2V4Iik7byh6QmUsInVudGlsVG9rZW5Ub1JlZ2V4Iik7byhHQmUsIm5lZ2F0ZVRva2VuVG9SZWdleCIpO28oVkJlLCJjaGFyYWN0ZXJSYW5nZVRvUmVnZXgiKTtvKHpOLCJrZXl3b3JkVG9SZWdleCIpO28oenUsIndpdGhDYXJkaW5hbGl0eSIpfSk7ZnVuY3Rpb24gUU4odCl7bGV0IGU9W10scj10LkdyYW1tYXI7Zm9yKGxldCBuIG9mIHIucnVsZXMpdW8obikmJlVOKG4pJiZCTihHZyhuKSkmJmUucHVzaChuLm5hbWUpO3JldHVybnttdWx0aWxpbmVDb21tZW50UnVsZXM6ZSxuYW1lUmVnZXhwOmtrfX12YXIgWk49TigoKT0+eyJ1c2Ugc3RyaWN0IjtPbCgpO0ZsKCk7JGcoKTtQYygpO28oUU4sImNyZWF0ZUdyYW1tYXJDb25maWciKX0pO3ZhciBKTj1OKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gVWcodCl7Y29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihgRXJyb3I6ICR7dH1gKX1mdW5jdGlvbiB1eCh0KXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihgV2FybmluZzogJHt0fWApfXZhciBIc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFVnLCJQUklOVF9FUlJPUiIpO28odXgsIlBSSU5UX1dBUk5JTkciKX0pO2Z1bmN0aW9uIGh4KHQpe2xldCBlPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHI9dCgpO3JldHVybnt0aW1lOm5ldyBEYXRlKCkuZ2V0VGltZSgpLWUsdmFsdWU6cn19dmFyIFdzZT1OKCgpPT57InVzZSBzdHJpY3QiO28oaHgsInRpbWVyIil9KTtmdW5jdGlvbiBmeCh0KXtmdW5jdGlvbiBlKCl7fW8oZSwiRmFrZUNvbnN0cnVjdG9yIiksZS5wcm90b3R5cGU9dDtsZXQgcj1uZXcgZTtmdW5jdGlvbiBuKCl7cmV0dXJuIHR5cGVvZiByLmJhcn1yZXR1cm4gbyhuLCJmYWtlQWNjZXNzIiksbigpLG4oKSx0OygwLGV2YWwpKHQpfXZhciBxc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ4LCJ0b0Zhc3RQcm9wZXJ0aWVzIil9KTt2YXIgSGc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtIc2UoKTtXc2UoKTtxc2UoKX0pO2Z1bmN0aW9uIFVCZSh0KXtyZXR1cm4gSEJlKHQpP3QuTEFCRUw6dC5uYW1lfWZ1bmN0aW9uIEhCZSh0KXtyZXR1cm4gVGkodC5MQUJFTCkmJnQuTEFCRUwhPT0iIn1mdW5jdGlvbiB6ayh0KXtyZXR1cm4gSmUodCxXZyl9ZnVuY3Rpb24gV2codCl7ZnVuY3Rpb24gZShyKXtyZXR1cm4gSmUocixXZyl9aWYobyhlLCJjb252ZXJ0RGVmaW5pdGlvbiIpLHQgaW5zdGFuY2VvZiBvbil7bGV0IHI9e3R5cGU6Ik5vblRlcm1pbmFsIixuYW1lOnQubm9uVGVybWluYWxOYW1lLGlkeDp0LmlkeH07cmV0dXJuIFRpKHQubGFiZWwpJiYoci5sYWJlbD10LmxhYmVsKSxyfWVsc2V7aWYodCBpbnN0YW5jZW9mIERuKXJldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBsbilyZXR1cm57dHlwZToiT3B0aW9uIixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBMbilyZXR1cm57dHlwZToiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgUm4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOldnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgVG4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOldnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgUHIpcmV0dXJue3R5cGU6IlJlcGV0aXRpb24iLGlkeDp0LmlkeCxkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIHduKXJldHVybnt0eXBlOiJBbHRlcm5hdGlvbiIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRXIpe2xldCByPXt0eXBlOiJUZXJtaW5hbCIsbmFtZTp0LnRlcm1pbmFsVHlwZS5uYW1lLGxhYmVsOlVCZSh0LnRlcm1pbmFsVHlwZSksaWR4OnQuaWR4fTtUaSh0LmxhYmVsKSYmKHIudGVybWluYWxMYWJlbD10LmxhYmVsKTtsZXQgbj10LnRlcm1pbmFsVHlwZS5QQVRURVJOO3JldHVybiB0LnRlcm1pbmFsVHlwZS5QQVRURVJOJiYoci5wYXR0ZXJuPVVvKG4pP24uc291cmNlOm4pLHJ9ZWxzZXtpZih0IGluc3RhbmNlb2YgdXMpcmV0dXJue3R5cGU6IlJ1bGUiLG5hbWU6dC5uYW1lLG9yZ1RleHQ6dC5vcmdUZXh0LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19fXZhciBobyxvbix1cyxEbixsbixMbixSbixQcixUbix3bixFcixHaz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byhVQmUsInRva2VuTGFiZWwiKTtvKEhCZSwiaGFzVG9rZW5MYWJlbCIpO2hvPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0UHJvZHVjdGlvbiIpfWdldCBkZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmluaXRpb259c2V0IGRlZmluaXRpb24oZSl7dGhpcy5fZGVmaW5pdGlvbj1lfWNvbnN0cnVjdG9yKGUpe3RoaXMuX2RlZmluaXRpb249ZX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKSxBZSh0aGlzLmRlZmluaXRpb24scj0+e3IuYWNjZXB0KGUpfSl9fSxvbj1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIk5vblRlcm1pbmFsIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoW10pLHRoaXMuaWR4PTEscGEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1zZXQgZGVmaW5pdGlvbihlKXt9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2VkUnVsZSE9PXZvaWQgMD90aGlzLnJlZmVyZW5jZWRSdWxlLmRlZmluaXRpb246W119YWNjZXB0KGUpe2UudmlzaXQodGhpcyl9fSx1cz1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIlJ1bGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMub3JnVGV4dD0iIixwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sRG49Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJBbHRlcm5hdGl2ZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZ25vcmVBbWJpZ3VpdGllcz0hMSxwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sbG49Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJPcHRpb24iKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEscGEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX19LExuPWNsYXNzIGV4dGVuZHMgaG97c3RhdGlje28odGhpcywiUmVwZXRpdGlvbk1hbmRhdG9yeSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSxwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sUm49Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSxwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sUHI9Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHBhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxUbj1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHBhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSx3bj1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIkFsdGVybmF0aW9uIil9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5fZGVmaW5pdGlvbn1zZXQgZGVmaW5pdGlvbihlKXt0aGlzLl9kZWZpbml0aW9uPWV9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHRoaXMuaWdub3JlQW1iaWd1aXRpZXM9ITEsdGhpcy5oYXNQcmVkaWNhdGVzPSExLHBhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxFcj1jbGFzc3tzdGF0aWN7byh0aGlzLCJUZXJtaW5hbCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWR4PTEscGEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKX19O28oemssInNlcmlhbGl6ZUdyYW1tYXIiKTtvKFdnLCJzZXJpYWxpemVQcm9kdWN0aW9uIil9KTt2YXIgaHMsWXNlPU4oKCk9PnsidXNlIHN0cmljdCI7R2soKTtocz1jbGFzc3tzdGF0aWN7byh0aGlzLCJHQXN0VmlzaXRvciIpfXZpc2l0KGUpe2xldCByPWU7c3dpdGNoKHIuY29uc3RydWN0b3Ipe2Nhc2Ugb246cmV0dXJuIHRoaXMudmlzaXROb25UZXJtaW5hbChyKTtjYXNlIERuOnJldHVybiB0aGlzLnZpc2l0QWx0ZXJuYXRpdmUocik7Y2FzZSBsbjpyZXR1cm4gdGhpcy52aXNpdE9wdGlvbihyKTtjYXNlIExuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShyKTtjYXNlIFJuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iocik7Y2FzZSBUbjpyZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKHIpO2Nhc2UgUHI6cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uKHIpO2Nhc2Ugd246cmV0dXJuIHRoaXMudmlzaXRBbHRlcm5hdGlvbihyKTtjYXNlIEVyOnJldHVybiB0aGlzLnZpc2l0VGVybWluYWwocik7Y2FzZSB1czpyZXR1cm4gdGhpcy52aXNpdFJ1bGUocik7ZGVmYXVsdDp0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19dmlzaXROb25UZXJtaW5hbChlKXt9dmlzaXRBbHRlcm5hdGl2ZShlKXt9dmlzaXRPcHRpb24oZSl7fXZpc2l0UmVwZXRpdGlvbihlKXt9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe312aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe312aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe312aXNpdEFsdGVybmF0aW9uKGUpe312aXNpdFRlcm1pbmFsKGUpe312aXNpdFJ1bGUoZSl7fX19KTtmdW5jdGlvbiBlTSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERufHx0IGluc3RhbmNlb2YgbG58fHQgaW5zdGFuY2VvZiBQcnx8dCBpbnN0YW5jZW9mIExufHx0IGluc3RhbmNlb2YgUm58fHQgaW5zdGFuY2VvZiBUbnx8dCBpbnN0YW5jZW9mIEVyfHx0IGluc3RhbmNlb2YgdXN9ZnVuY3Rpb24gZ3AodCxlPVtdKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGxufHx0IGluc3RhbmNlb2YgUHJ8fHQgaW5zdGFuY2VvZiBUbj8hMDp0IGluc3RhbmNlb2Ygd24/QjIodC5kZWZpbml0aW9uLG49PmdwKG4sZSkpOnQgaW5zdGFuY2VvZiBvbiYmWG4oZSx0KT8hMTp0IGluc3RhbmNlb2YgaG8/KHQgaW5zdGFuY2VvZiBvbiYmZS5wdXNoKHQpLFBhKHQuZGVmaW5pdGlvbixuPT5ncChuLGUpKSk6ITF9ZnVuY3Rpb24gdE0odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB3bn1mdW5jdGlvbiBWcyh0KXtpZih0IGluc3RhbmNlb2Ygb24pcmV0dXJuIlNVQlJVTEUiO2lmKHQgaW5zdGFuY2VvZiBsbilyZXR1cm4iT1BUSU9OIjtpZih0IGluc3RhbmNlb2Ygd24pcmV0dXJuIk9SIjtpZih0IGluc3RhbmNlb2YgTG4pcmV0dXJuIkFUX0xFQVNUX09ORSI7aWYodCBpbnN0YW5jZW9mIFJuKXJldHVybiJBVF9MRUFTVF9PTkVfU0VQIjtpZih0IGluc3RhbmNlb2YgVG4pcmV0dXJuIk1BTllfU0VQIjtpZih0IGluc3RhbmNlb2YgUHIpcmV0dXJuIk1BTlkiO2lmKHQgaW5zdGFuY2VvZiBFcilyZXR1cm4iQ09OU1VNRSI7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9dmFyIFhzZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7R2soKTtvKGVNLCJpc1NlcXVlbmNlUHJvZCIpO28oZ3AsImlzT3B0aW9uYWxQcm9kIik7byh0TSwiaXNCcmFuY2hpbmdQcm9kIik7byhWcywiZ2V0UHJvZHVjdGlvbkRzbE5hbWUiKX0pO3ZhciBmcz1OKCgpPT57InVzZSBzdHJpY3QiO0drKCk7WXNlKCk7WHNlKCl9KTtmdW5jdGlvbiBqc2UodCxlLHIpe3JldHVybltuZXcgbG4oe2RlZmluaXRpb246W25ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSldLmNvbmNhdCh0LmRlZmluaXRpb24pfSldLmNvbmNhdChlLHIpfXZhciBHdSxWaz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7ZnMoKTtHdT1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZXN0V2Fsa2VyIil9d2FsayhlLHI9W10pe0FlKGUuZGVmaW5pdGlvbiwobixpKT0+e2xldCBhPWJpKGUuZGVmaW5pdGlvbixpKzEpO2lmKG4gaW5zdGFuY2VvZiBvbil0aGlzLndhbGtQcm9kUmVmKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBFcil0aGlzLndhbGtUZXJtaW5hbChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgRG4pdGhpcy53YWxrRmxhdChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgbG4pdGhpcy53YWxrT3B0aW9uKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBMbil0aGlzLndhbGtBdExlYXN0T25lKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBSbil0aGlzLndhbGtBdExlYXN0T25lU2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBUbil0aGlzLndhbGtNYW55U2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBQcil0aGlzLndhbGtNYW55KG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiB3bil0aGlzLndhbGtPcihuLGEscik7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pfXdhbGtUZXJtaW5hbChlLHIsbil7fXdhbGtQcm9kUmVmKGUscixuKXt9d2Fsa0ZsYXQoZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtPcHRpb24oZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtBdExlYXN0T25lKGUscixuKXtsZXQgaT1bbmV3IGxuKHtkZWZpbml0aW9uOmUuZGVmaW5pdGlvbn0pXS5jb25jYXQocixuKTt0aGlzLndhbGsoZSxpKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7bGV0IGk9anNlKGUscixuKTt0aGlzLndhbGsoZSxpKX13YWxrTWFueShlLHIsbil7bGV0IGk9W25ldyBsbih7ZGVmaW5pdGlvbjplLmRlZmluaXRpb259KV0uY29uY2F0KHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa01hbnlTZXAoZSxyLG4pe2xldCBpPWpzZShlLHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa09yKGUscixuKXtsZXQgaT1yLmNvbmNhdChuKTtBZShlLmRlZmluaXRpb24sYT0+e2xldCBzPW5ldyBEbih7ZGVmaW5pdGlvbjpbYV19KTt0aGlzLndhbGsocyxpKX0pfX07byhqc2UsInJlc3RGb3JSZXBldGl0aW9uV2l0aFNlcGFyYXRvciIpfSk7ZnVuY3Rpb24geXAodCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiB5cCh0LnJlZmVyZW5jZWRSdWxlKTtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIFlCZSh0KTtpZihlTSh0KSlyZXR1cm4gV0JlKHQpO2lmKHRNKHQpKXJldHVybiBxQmUodCk7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gV0JlKHQpe2xldCBlPVtdLHI9dC5kZWZpbml0aW9uLG49MCxpPXIubGVuZ3RoPm4sYSxzPSEwO2Zvcig7aSYmczspYT1yW25dLHM9Z3AoYSksZT1lLmNvbmNhdCh5cChhKSksbj1uKzEsaT1yLmxlbmd0aD5uO3JldHVybiBxbShlKX1mdW5jdGlvbiBxQmUodCl7bGV0IGU9SmUodC5kZWZpbml0aW9uLHI9PnlwKHIpKTtyZXR1cm4gcW0ocXIoZSkpfWZ1bmN0aW9uIFlCZSh0KXtyZXR1cm5bdC50ZXJtaW5hbFR5cGVdfXZhciByTT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7ZnMoKTtvKHlwLCJmaXJzdCIpO28oV0JlLCJmaXJzdEZvclNlcXVlbmNlIik7byhxQmUsImZpcnN0Rm9yQnJhbmNoaW5nIik7byhZQmUsImZpcnN0Rm9yVGVybWluYWwiKX0pO3ZhciBVayxuTT1OKCgpPT57InVzZSBzdHJpY3QiO1VrPSJffklOfl8ifSk7ZnVuY3Rpb24gS3NlKHQpe2xldCBlPXt9O3JldHVybiBBZSh0LHI9PntsZXQgbj1uZXcgaU0ocikuc3RhcnRXYWxraW5nKCk7cGEoZSxuKX0pLGV9ZnVuY3Rpb24gWEJlKHQsZSl7cmV0dXJuIHQubmFtZStlK1VrfXZhciBpTSxRc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWaygpO3JNKCk7cXQoKTtuTSgpO2ZzKCk7aU09Y2xhc3MgZXh0ZW5kcyBHdXtzdGF0aWN7byh0aGlzLCJSZXN5bmNGb2xsb3dzV2Fsa2VyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLmZvbGxvd3M9e319c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMuZm9sbG93c313YWxrVGVybWluYWwoZSxyLG4pe313YWxrUHJvZFJlZihlLHIsbil7bGV0IGk9WEJlKGUucmVmZXJlbmNlZFJ1bGUsZS5pZHgpK3RoaXMudG9wUHJvZC5uYW1lLGE9ci5jb25jYXQobikscz1uZXcgRG4oe2RlZmluaXRpb246YX0pLGw9eXAocyk7dGhpcy5mb2xsb3dzW2ldPWx9fTtvKEtzZSwiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIpO28oWEJlLCJidWlsZEJldHdlZW5Qcm9kc0ZvbGxvd1ByZWZpeCIpfSk7ZnVuY3Rpb24gcWcodCl7bGV0IGU9dC50b1N0cmluZygpO2lmKEhrLmhhc093blByb3BlcnR5KGUpKXJldHVybiBIa1tlXTt7bGV0IHI9akJlLnBhdHRlcm4oZSk7cmV0dXJuIEhrW2VdPXIscn19ZnVuY3Rpb24gWnNlKCl7SGs9e319dmFyIEhrLGpCZSxXaz1OKCgpPT57InVzZSBzdHJpY3QiO2F4KCk7SGs9e30sakJlPW5ldyBkcDtvKHFnLCJnZXRSZWdFeHBBc3QiKTtvKFpzZSwiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIpfSk7ZnVuY3Rpb24gdG9lKHQsZT0hMSl7dHJ5e2xldCByPXFnKHQpO3JldHVybiBhTShyLnZhbHVlLHt9LHIuZmxhZ3MuaWdub3JlQ2FzZSl9Y2F0Y2gocil7aWYoci5tZXNzYWdlPT09ZW9lKWUmJnV4KGAke2R4fQlVbmFibGUgdG8gb3B0aW1pemU6IDwgJHt0LnRvU3RyaW5nKCl9ID4KCUNvbXBsZW1lbnQgU2V0cyBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBvcHRpbWl6ZWQuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDT01QTEVNRU5UIGZvciBkZXRhaWxzLmApO2Vsc2V7bGV0IG49IiI7ZSYmKG49YAoJVGhpcyB3aWxsIGRpc2FibGUgdGhlIGxleGVyJ3MgZmlyc3QgY2hhciBvcHRpbWl6YXRpb25zLgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjUkVHRVhQX1BBUlNJTkcgZm9yIGRldGFpbHMuYCksVWcoYCR7ZHh9CglGYWlsZWQgcGFyc2luZzogPCAke3QudG9TdHJpbmcoKX0gPgoJVXNpbmcgdGhlIEBjaGV2cm90YWluL3JlZ2V4cC10by1hc3QgbGlicmFyeQoJUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzYCtuKX19cmV0dXJuW119ZnVuY3Rpb24gYU0odCxlLHIpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlzanVuY3Rpb24iOmZvcihsZXQgaT0wO2k8dC52YWx1ZS5sZW5ndGg7aSsrKWFNKHQudmFsdWVbaV0sZSxyKTticmVhaztjYXNlIkFsdGVybmF0aXZlIjpsZXQgbj10LnZhbHVlO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1uW2ldO3N3aXRjaChhLnR5cGUpe2Nhc2UiRW5kQW5jaG9yIjpjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6Y2FzZSJMb29rYWhlYWQiOmNhc2UiTmVnYXRpdmVMb29rYWhlYWQiOmNhc2UiU3RhcnRBbmNob3IiOmNhc2UiV29yZEJvdW5kYXJ5IjpjYXNlIk5vbldvcmRCb3VuZGFyeSI6Y29udGludWV9bGV0IHM9YTtzd2l0Y2gocy50eXBlKXtjYXNlIkNoYXJhY3RlciI6cWsocy52YWx1ZSxlLHIpO2JyZWFrO2Nhc2UiU2V0IjppZihzLmNvbXBsZW1lbnQ9PT0hMCl0aHJvdyBFcnJvcihlb2UpO0FlKHMudmFsdWUsdT0+e2lmKHR5cGVvZiB1PT0ibnVtYmVyIilxayh1LGUscik7ZWxzZXtsZXQgaD11O2lmKHI9PT0hMClmb3IobGV0IGY9aC5mcm9tO2Y8PWgudG87ZisrKXFrKGYsZSxyKTtlbHNle2ZvcihsZXQgZj1oLmZyb207Zjw9aC50byYmZjxZZztmKyspcWsoZixlLHIpO2lmKGgudG8+PVlnKXtsZXQgZj1oLmZyb20+PVlnP2guZnJvbTpZZyxkPWgudG8scD0kYyhmKSxtPSRjKGQpO2ZvcihsZXQgZz1wO2c8PW07ZysrKWVbZ109Z319fX0pO2JyZWFrO2Nhc2UiR3JvdXAiOmFNKHMudmFsdWUsZSxyKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJOb24gRXhoYXVzdGl2ZSBNYXRjaCIpfWxldCBsPXMucXVhbnRpZmllciE9PXZvaWQgMCYmcy5xdWFudGlmaWVyLmF0TGVhc3Q9PT0wO2lmKHMudHlwZT09PSJHcm91cCImJnNNKHMpPT09ITF8fHMudHlwZSE9PSJHcm91cCImJmw9PT0hMSlicmVha31icmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCEiKX1yZXR1cm4gYnIoZSl9ZnVuY3Rpb24gcWsodCxlLHIpe2xldCBuPSRjKHQpO2Vbbl09bixyPT09ITAmJktCZSh0LGUpfWZ1bmN0aW9uIEtCZSh0LGUpe2xldCByPVN0cmluZy5mcm9tQ2hhckNvZGUodCksbj1yLnRvVXBwZXJDYXNlKCk7aWYobiE9PXIpe2xldCBpPSRjKG4uY2hhckNvZGVBdCgwKSk7ZVtpXT1pfWVsc2V7bGV0IGk9ci50b0xvd2VyQ2FzZSgpO2lmKGkhPT1yKXtsZXQgYT0kYyhpLmNoYXJDb2RlQXQoMCkpO2VbYV09YX19fWZ1bmN0aW9uIEpzZSh0LGUpe3JldHVybiBscyh0LnZhbHVlLHI9PntpZih0eXBlb2Ygcj09Im51bWJlciIpcmV0dXJuIFhuKGUscik7e2xldCBuPXI7cmV0dXJuIGxzKGUsaT0+bi5mcm9tPD1pJiZpPD1uLnRvKSE9PXZvaWQgMH19KX1mdW5jdGlvbiBzTSh0KXtsZXQgZT10LnF1YW50aWZpZXI7cmV0dXJuIGUmJmUuYXRMZWFzdD09PTA/ITA6dC52YWx1ZT9QdCh0LnZhbHVlKT9QYSh0LnZhbHVlLHNNKTpzTSh0LnZhbHVlKTohMX1mdW5jdGlvbiBZayh0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2xldCByPXFnKGUpLG49bmV3IG9NKHQpO3JldHVybiBuLnZpc2l0KHIpLG4uZm91bmR9ZWxzZSByZXR1cm4gbHMoZSxyPT5Ybih0LHIuY2hhckNvZGVBdCgwKSkpIT09dm9pZCAwfXZhciBlb2UsZHgsb00scm9lPU4oKCk9PnsidXNlIHN0cmljdCI7YXgoKTtxdCgpO0hnKCk7V2soKTtsTSgpO2VvZT0iQ29tcGxlbWVudCBTZXRzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBmaXJzdCBjaGFyIG9wdGltaXphdGlvbiIsZHg9YFVuYWJsZSB0byB1c2UgImZpcnN0IGNoYXIiIGxleGVyIG9wdGltaXphdGlvbnM6CmA7byh0b2UsImdldE9wdGltaXplZFN0YXJ0Q29kZXNJbmRpY2VzIik7byhhTSwiZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyIpO28ocWssImFkZE9wdGltaXplZElkeFRvUmVzdWx0Iik7byhLQmUsImhhbmRsZUlnbm9yZUNhc2UiKTtvKEpzZSwiZmluZENvZGUiKTtvKHNNLCJpc1dob2xlT3B0aW9uYWwiKTtvTT1jbGFzcyBleHRlbmRzIEZje3N0YXRpY3tvKHRoaXMsIkNoYXJDb2RlRmluZGVyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRhcmdldENoYXJDb2Rlcz1lLHRoaXMuZm91bmQ9ITF9dmlzaXRDaGlsZHJlbihlKXtpZih0aGlzLmZvdW5kIT09ITApe3N3aXRjaChlLnR5cGUpe2Nhc2UiTG9va2FoZWFkIjp0aGlzLnZpc2l0TG9va2FoZWFkKGUpO3JldHVybjtjYXNlIk5lZ2F0aXZlTG9va2FoZWFkIjp0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSk7cmV0dXJufXN1cGVyLnZpc2l0Q2hpbGRyZW4oZSl9fXZpc2l0Q2hhcmFjdGVyKGUpe1huKHRoaXMudGFyZ2V0Q2hhckNvZGVzLGUudmFsdWUpJiYodGhpcy5mb3VuZD0hMCl9dmlzaXRTZXQoZSl7ZS5jb21wbGVtZW50P0pzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKT09PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApOkpzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKSE9PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApfX07byhZaywiY2FuTWF0Y2hDaGFyQ29kZSIpfSk7ZnVuY3Rpb24gYW9lKHQsZSl7ZT1uZihlLHt1c2VTdGlja3k6dU0sZGVidWc6ITEsc2FmZU1vZGU6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOlsiXHIiLGAKYF0sdHJhY2VyOm8oKGIsVCk9PlQoKSwidHJhY2VyIil9KTtsZXQgcj1lLnRyYWNlcjtyKCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIiwoKT0+e3BGZSgpfSk7bGV0IG47cigiUmVqZWN0IExleGVyLk5BIiwoKT0+e249c2YodCxiPT5iW3ZwXT09PUtuLk5BKX0pO2xldCBpPSExLGE7cigiVHJhbnNmb3JtIFBhdHRlcm5zIiwoKT0+e2k9ITEsYT1KZShuLGI9PntsZXQgVD1iW3ZwXTtpZihVbyhUKSl7bGV0IFM9VC5zb3VyY2U7cmV0dXJuIFMubGVuZ3RoPT09MSYmUyE9PSJeIiYmUyE9PSIkIiYmUyE9PSIuIiYmIVQuaWdub3JlQ2FzZT9TOlMubGVuZ3RoPT09MiYmU1swXT09PSJcXCImJiFYbihbImQiLCJEIiwicyIsIlMiLCJ0IiwiciIsIm4iLCJ0IiwiMCIsImMiLCJiIiwiQiIsImYiLCJ2IiwidyIsIlciXSxTWzFdKT9TWzFdOmUudXNlU3RpY2t5P2lvZShUKTpub2UoVCl9ZWxzZXtpZihBaShUKSlyZXR1cm4gaT0hMCx7ZXhlYzpUfTtpZih0eXBlb2YgVD09Im9iamVjdCIpcmV0dXJuIGk9ITAsVDtpZih0eXBlb2YgVD09InN0cmluZyIpe2lmKFQubGVuZ3RoPT09MSlyZXR1cm4gVDt7bGV0IFM9VC5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLHc9bmV3IFJlZ0V4cChTKTtyZXR1cm4gZS51c2VTdGlja3k/aW9lKHcpOm5vZSh3KX19ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KX0pO2xldCBzLGwsdSxoLGY7cigibWlzYyBtYXBwaW5nIiwoKT0+e3M9SmUobixiPT5iLnRva2VuVHlwZUlkeCksbD1KZShuLGI9PntsZXQgVD1iLkdST1VQO2lmKFQhPT1Lbi5TS0lQUEVEKXtpZihUaShUKSlyZXR1cm4gVDtpZihtcihUKSlyZXR1cm4hMTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KSx1PUplKG4sYj0+e2xldCBUPWIuTE9OR0VSX0FMVDtpZihUKXJldHVybiBQdChUKT9KZShULHc9PmlrKG4sdykpOltpayhuLFQpXX0pLGg9SmUobixiPT5iLlBVU0hfTU9ERSksZj1KZShuLGI9PkJ0KGIsIlBPUF9NT0RFIikpfSk7bGV0IGQ7cigiTGluZSBUZXJtaW5hdG9yIEhhbmRsaW5nIiwoKT0+e2xldCBiPWRvZShlLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyk7ZD1KZShuLFQ9PiExKSxlLnBvc2l0aW9uVHJhY2tpbmchPT0ib25seU9mZnNldCImJihkPUplKG4sVD0+QnQoVCwiTElORV9CUkVBS1MiKT8hIVQuTElORV9CUkVBS1M6Zm9lKFQsYik9PT0hMSYmWWsoYixULlBBVFRFUk4pKSl9KTtsZXQgcCxtLGcseTtyKCJNaXNjIE1hcHBpbmcgIzIiLCgpPT57cD1KZShuLHVvZSksbT1KZShhLGZGZSksZz1YcihuLChiLFQpPT57bGV0IFM9VC5HUk9VUDtyZXR1cm4gVGkoUykmJlMhPT1Lbi5TS0lQUEVEJiYoYltTXT1bXSksYn0se30pLHk9SmUoYSwoYixUKT0+KHtwYXR0ZXJuOmFbVF0sbG9uZ2VyQWx0OnVbVF0sY2FuTGluZVRlcm1pbmF0b3I6ZFtUXSxpc0N1c3RvbTpwW1RdLHNob3J0Om1bVF0sZ3JvdXA6bFtUXSxwdXNoOmhbVF0scG9wOmZbVF0sdG9rZW5UeXBlSWR4OnNbVF0sdG9rZW5UeXBlOm5bVF19KSl9KTtsZXQgdj0hMCx4PVtdO3JldHVybiBlLnNhZmVNb2RlfHxyKCJGaXJzdCBDaGFyIE9wdGltaXphdGlvbiIsKCk9Pnt4PVhyKG4sKGIsVCxTKT0+e2lmKHR5cGVvZiBULlBBVFRFUk49PSJzdHJpbmciKXtsZXQgdz1ULlBBVFRFUk4uY2hhckNvZGVBdCgwKSxFPSRjKHcpO2NNKGIsRSx5W1NdKX1lbHNlIGlmKFB0KFQuU1RBUlRfQ0hBUlNfSElOVCkpe2xldCB3O0FlKFQuU1RBUlRfQ0hBUlNfSElOVCxFPT57bGV0IF89dHlwZW9mIEU9PSJzdHJpbmciP0UuY2hhckNvZGVBdCgwKTpFLEM9JGMoXyk7dyE9PUMmJih3PUMsY00oYixDLHlbU10pKX0pfWVsc2UgaWYoVW8oVC5QQVRURVJOKSlpZihULlBBVFRFUk4udW5pY29kZSl2PSExLGUuZW5zdXJlT3B0aW1pemF0aW9ucyYmVWcoYCR7ZHh9CVVuYWJsZSB0byBhbmFseXplIDwgJHtULlBBVFRFUk4udG9TdHJpbmcoKX0gPiBwYXR0ZXJuLgoJVGhlIHJlZ2V4cCB1bmljb2RlIGZsYWcgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIHJlZ2V4cC10by1hc3QgbGlicmFyeS4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI1VOSUNPREVfT1BUSU1JWkVgKTtlbHNle2xldCB3PXRvZShULlBBVFRFUk4sZS5lbnN1cmVPcHRpbWl6YXRpb25zKTtocih3KSYmKHY9ITEpLEFlKHcsRT0+e2NNKGIsRSx5W1NdKX0pfWVsc2UgZS5lbnN1cmVPcHRpbWl6YXRpb25zJiZVZyhgJHtkeH0JVG9rZW5UeXBlOiA8JHtULm5hbWV9PiBpcyB1c2luZyBhIGN1c3RvbSB0b2tlbiBwYXR0ZXJuIHdpdGhvdXQgcHJvdmlkaW5nIDxzdGFydF9jaGFyc19oaW50PiBwYXJhbWV0ZXIuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fT1BUSU1JWkVgKSx2PSExO3JldHVybiBifSxbXSl9KSx7ZW1wdHlHcm91cHM6ZyxwYXR0ZXJuSWR4VG9Db25maWc6eSxjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnOngsaGFzQ3VzdG9tOmksY2FuQmVPcHRpbWl6ZWQ6dn19ZnVuY3Rpb24gc29lKHQsZSl7bGV0IHI9W10sbj1aQmUodCk7cj1yLmNvbmNhdChuLmVycm9ycyk7bGV0IGk9SkJlKG4udmFsaWQpLGE9aS52YWxpZDtyZXR1cm4gcj1yLmNvbmNhdChpLmVycm9ycykscj1yLmNvbmNhdChRQmUoYSkpLHI9ci5jb25jYXQob0ZlKGEpKSxyPXIuY29uY2F0KGxGZShhLGUpKSxyPXIuY29uY2F0KGNGZShhKSkscn1mdW5jdGlvbiBRQmUodCl7bGV0IGU9W10scj1Zcih0LG49PlVvKG5bdnBdKSk7cmV0dXJuIGU9ZS5jb25jYXQodEZlKHIpKSxlPWUuY29uY2F0KGlGZShyKSksZT1lLmNvbmNhdChhRmUocikpLGU9ZS5jb25jYXQoc0ZlKHIpKSxlPWUuY29uY2F0KHJGZShyKSksZX1mdW5jdGlvbiBaQmUodCl7bGV0IGU9WXIodCxpPT4hQnQoaSx2cCkpLHI9SmUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIG1pc3Npbmcgc3RhdGljICdQQVRURVJOJyBwcm9wZXJ0eSIsdHlwZTpqbi5NSVNTSU5HX1BBVFRFUk4sdG9rZW5UeXBlczpbaV19KSksbj1hZih0LGUpO3JldHVybntlcnJvcnM6cix2YWxpZDpufX1mdW5jdGlvbiBKQmUodCl7bGV0IGU9WXIodCxpPT57bGV0IGE9aVt2cF07cmV0dXJuIVVvKGEpJiYhQWkoYSkmJiFCdChhLCJleGVjIikmJiFUaShhKX0pLHI9SmUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIHN0YXRpYyAnUEFUVEVSTicgY2FuIG9ubHkgYmUgYSBSZWdFeHAsIGEgRnVuY3Rpb24gbWF0Y2hpbmcgdGhlIHtDdXN0b21QYXR0ZXJuTWF0Y2hlckZ1bmN9IHR5cGUgb3IgYW4gT2JqZWN0IG1hdGNoaW5nIHRoZSB7SUN1c3RvbVBhdHRlcm59IGludGVyZmFjZS4iLHR5cGU6am4uSU5WQUxJRF9QQVRURVJOLHRva2VuVHlwZXM6W2ldfSkpLG49YWYodCxlKTtyZXR1cm57ZXJyb3JzOnIsdmFsaWQ6bn19ZnVuY3Rpb24gdEZlKHQpe2NsYXNzIGUgZXh0ZW5kcyBGY3tzdGF0aWN7byh0aGlzLCJFbmRBbmNob3JGaW5kZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5mb3VuZD0hMX12aXNpdEVuZEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXFnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4gZUZlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBKZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBlbmQgb2YgaW5wdXQgYW5jaG9yICckJwoJU2VlIGNoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQU5DSE9SUwlmb3IgZGV0YWlscy5gLHR5cGU6am4uRU9JX0FOQ0hPUl9GT1VORCx0b2tlblR5cGVzOltpXX0pKX1mdW5jdGlvbiByRmUodCl7bGV0IGU9WXIodCxuPT5uLlBBVFRFUk4udGVzdCgiIikpO3JldHVybiBKZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtdXN0IG5vdCBtYXRjaCBhbiBlbXB0eSBzdHJpbmciLHR5cGU6am4uRU1QVFlfTUFUQ0hfUEFUVEVSTix0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBpRmUodCl7Y2xhc3MgZSBleHRlbmRzIEZje3N0YXRpY3tvKHRoaXMsIlN0YXJ0QW5jaG9yRmluZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZm91bmQ9ITF9dmlzaXRTdGFydEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXFnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4gbkZlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBKZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBzdGFydCBvZiBpbnB1dCBhbmNob3IgJ14nCglTZWUgaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0FOQ0hPUlMJZm9yIGRldGFpbHMuYCx0eXBlOmpuLlNPSV9BTkNIT1JfRk9VTkQsdG9rZW5UeXBlczpbaV19KSl9ZnVuY3Rpb24gYUZlKHQpe2xldCBlPVlyKHQsbj0+e2xldCBpPW5bdnBdO3JldHVybiBpIGluc3RhbmNlb2YgUmVnRXhwJiYoaS5tdWx0aWxpbmV8fGkuZ2xvYmFsKX0pO3JldHVybiBKZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtYXkgTk9UIGNvbnRhaW4gZ2xvYmFsKCdnJykgb3IgbXVsdGlsaW5lKCdtJykiLHR5cGU6am4uVU5TVVBQT1JURURfRkxBR1NfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gc0ZlKHQpe2xldCBlPVtdLHI9SmUodCxhPT5Ycih0LChzLGwpPT4oYS5QQVRURVJOLnNvdXJjZT09PWwuUEFUVEVSTi5zb3VyY2UmJiFYbihlLGwpJiZsLlBBVFRFUk4hPT1Lbi5OQSYmKGUucHVzaChsKSxzLnB1c2gobCkpLHMpLFtdKSk7cj1BYyhyKTtsZXQgbj1ZcihyLGE9PmEubGVuZ3RoPjEpO3JldHVybiBKZShuLGE9PntsZXQgcz1KZShhLHU9PnUubmFtZSk7cmV0dXJue21lc3NhZ2U6YFRoZSBzYW1lIFJlZ0V4cCBwYXR0ZXJuIC0+JHtpYShhKS5QQVRURVJOfTwtaGFzIGJlZW4gdXNlZCBpbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBUb2tlbiBUeXBlczogJHtzLmpvaW4oIiwgIil9IDwtYCx0eXBlOmpuLkRVUExJQ0FURV9QQVRURVJOU19GT1VORCx0b2tlblR5cGVzOmF9fSl9ZnVuY3Rpb24gb0ZlKHQpe2xldCBlPVlyKHQsbj0+e2lmKCFCdChuLCJHUk9VUCIpKXJldHVybiExO2xldCBpPW4uR1JPVVA7cmV0dXJuIGkhPT1Lbi5TS0lQUEVEJiZpIT09S24uTkEmJiFUaShpKX0pO3JldHVybiBKZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdHUk9VUCcgY2FuIG9ubHkgYmUgTGV4ZXIuU0tJUFBFRC9MZXhlci5OQS9BIFN0cmluZyIsdHlwZTpqbi5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gbEZlKHQsZSl7bGV0IHI9WXIodCxpPT5pLlBVU0hfTU9ERSE9PXZvaWQgMCYmIVhuKGUsaS5QVVNIX01PREUpKTtyZXR1cm4gSmUocixpPT4oe21lc3NhZ2U6YFRva2VuIFR5cGU6IC0+JHtpLm5hbWV9PC0gc3RhdGljICdQVVNIX01PREUnIHZhbHVlIGNhbm5vdCByZWZlciB0byBhIExleGVyIE1vZGUgLT4ke2kuUFVTSF9NT0RFfTwtd2hpY2ggZG9lcyBub3QgZXhpc3RgLHR5cGU6am4uUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNULHRva2VuVHlwZXM6W2ldfSkpfWZ1bmN0aW9uIGNGZSh0KXtsZXQgZT1bXSxyPVhyKHQsKG4saSxhKT0+e2xldCBzPWkuUEFUVEVSTjtyZXR1cm4gcz09PUtuLk5BfHwoVGkocyk/bi5wdXNoKHtzdHI6cyxpZHg6YSx0b2tlblR5cGU6aX0pOlVvKHMpJiZoRmUocykmJm4ucHVzaCh7c3RyOnMuc291cmNlLGlkeDphLHRva2VuVHlwZTppfSkpLG59LFtdKTtyZXR1cm4gQWUodCwobixpKT0+e0FlKHIsKHtzdHI6YSxpZHg6cyx0b2tlblR5cGU6bH0pPT57aWYoaTxzJiZ1RmUoYSxuLlBBVFRFUk4pKXtsZXQgdT1gVG9rZW46IC0+JHtsLm5hbWV9PC0gY2FuIG5ldmVyIGJlIG1hdGNoZWQuCkJlY2F1c2UgaXQgYXBwZWFycyBBRlRFUiB0aGUgVG9rZW4gVHlwZSAtPiR7bi5uYW1lfTwtaW4gdGhlIGxleGVyJ3MgZGVmaW5pdGlvbi4KU2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNVTlJFQUNIQUJMRWA7ZS5wdXNoKHttZXNzYWdlOnUsdHlwZTpqbi5VTlJFQUNIQUJMRV9QQVRURVJOLHRva2VuVHlwZXM6W24sbF19KX19KX0pLGV9ZnVuY3Rpb24gdUZlKHQsZSl7aWYoVW8oZSkpe2xldCByPWUuZXhlYyh0KTtyZXR1cm4gciE9PW51bGwmJnIuaW5kZXg9PT0wfWVsc2V7aWYoQWkoZSkpcmV0dXJuIGUodCwwLFtdLHt9KTtpZihCdChlLCJleGVjIikpcmV0dXJuIGUuZXhlYyh0LDAsW10se30pO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZT09PXQ7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9fWZ1bmN0aW9uIGhGZSh0KXtyZXR1cm4gbHMoWyIuIiwiXFwiLCJbIiwiXSIsInwiLCJeIiwiJCIsIigiLCIpIiwiPyIsIioiLCIrIiwieyJdLHI9PnQuc291cmNlLmluZGV4T2YocikhPT0tMSk9PT12b2lkIDB9ZnVuY3Rpb24gbm9lKHQpe2xldCBlPXQuaWdub3JlQ2FzZT8iaSI6IiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke3Quc291cmNlfSlgLGUpfWZ1bmN0aW9uIGlvZSh0KXtsZXQgZT10Lmlnbm9yZUNhc2U/Iml5IjoieSI7cmV0dXJuIG5ldyBSZWdFeHAoYCR7dC5zb3VyY2V9YCxlKX1mdW5jdGlvbiBvb2UodCxlLHIpe2xldCBuPVtdO3JldHVybiBCdCh0LFhnKXx8bi5wdXNoKHttZXNzYWdlOiJBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhIDwiK1hnK2A+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uCmAsdHlwZTpqbi5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFfSksQnQodCxYayl8fG4ucHVzaCh7bWVzc2FnZToiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8IitYaytgPiBwcm9wZXJ0eSBpbiBpdHMgZGVmaW5pdGlvbgpgLHR5cGU6am4uTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZfSksQnQodCxYaykmJkJ0KHQsWGcpJiYhQnQodC5tb2Rlcyx0LmRlZmF1bHRNb2RlKSYmbi5wdXNoKHttZXNzYWdlOmBBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhICR7WGd9OiA8JHt0LmRlZmF1bHRNb2RlfT53aGljaCBkb2VzIG5vdCBleGlzdApgLHR5cGU6am4uTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1R9KSxCdCh0LFhrKSYmQWUodC5tb2RlcywoaSxhKT0+e0FlKGksKHMsbCk9PntpZihtcihzKSluLnB1c2goe21lc3NhZ2U6YEEgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHVzaW5nIGFuIHVuZGVmaW5lZCBUb2tlbiBUeXBlLiBNb2RlOjwke2F9PiBhdCBpbmRleDogPCR7bH0+CmAsdHlwZTpqbi5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRH0pO2Vsc2UgaWYoQnQocywiTE9OR0VSX0FMVCIpKXtsZXQgdT1QdChzLkxPTkdFUl9BTFQpP3MuTE9OR0VSX0FMVDpbcy5MT05HRVJfQUxUXTtBZSh1LGg9PnshbXIoaCkmJiFYbihpLGgpJiZuLnB1c2goe21lc3NhZ2U6YEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgbG9uZ2VyX2FsdCA8JHtoLm5hbWV9PiBvbiB0b2tlbiA8JHtzLm5hbWV9PiBvdXRzaWRlIG9mIG1vZGUgPCR7YX0+CmAsdHlwZTpqbi5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERX0pfSl9fSl9KSxufWZ1bmN0aW9uIGxvZSh0LGUscil7bGV0IG49W10saT0hMSxhPUFjKHFyKGJyKHQubW9kZXMpKSkscz1zZihhLHU9PnVbdnBdPT09S24uTkEpLGw9ZG9lKHIpO3JldHVybiBlJiZBZShzLHU9PntsZXQgaD1mb2UodSxsKTtpZihoIT09ITEpe2xldCBkPXttZXNzYWdlOmRGZSh1LGgpLHR5cGU6aC5pc3N1ZSx0b2tlblR5cGU6dX07bi5wdXNoKGQpfWVsc2UgQnQodSwiTElORV9CUkVBS1MiKT91LkxJTkVfQlJFQUtTPT09ITAmJihpPSEwKTpZayhsLHUuUEFUVEVSTikmJihpPSEwKX0pLGUmJiFpJiZuLnB1c2goe21lc3NhZ2U6YFdhcm5pbmc6IE5vIExJTkVfQlJFQUtTIEZvdW5kLgoJVGhpcyBMZXhlciBoYXMgYmVlbiBkZWZpbmVkIHRvIHRyYWNrIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiwKCUJ1dCBub25lIG9mIHRoZSBUb2tlbiBUeXBlcyBjYW4gYmUgaWRlbnRpZmllZCBhcyBtYXRjaGluZyBhIGxpbmUgdGVybWluYXRvci4KCVNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTElORV9CUkVBS1MgCglmb3IgZGV0YWlscy5gLHR5cGU6am4uTk9fTElORV9CUkVBS1NfRkxBR1N9KSxufWZ1bmN0aW9uIGNvZSh0KXtsZXQgZT17fSxyPXpyKHQpO3JldHVybiBBZShyLG49PntsZXQgaT10W25dO2lmKFB0KGkpKWVbbl09W107ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pLGV9ZnVuY3Rpb24gdW9lKHQpe2xldCBlPXQuUEFUVEVSTjtpZihVbyhlKSlyZXR1cm4hMTtpZihBaShlKSlyZXR1cm4hMDtpZihCdChlLCJleGVjIikpcmV0dXJuITA7aWYoVGkoZSkpcmV0dXJuITE7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gZkZlKHQpe3JldHVybiBUaSh0KSYmdC5sZW5ndGg9PT0xP3QuY2hhckNvZGVBdCgwKTohMX1mdW5jdGlvbiBmb2UodCxlKXtpZihCdCh0LCJMSU5FX0JSRUFLUyIpKXJldHVybiExO2lmKFVvKHQuUEFUVEVSTikpe3RyeXtZayhlLHQuUEFUVEVSTil9Y2F0Y2gocil7cmV0dXJue2lzc3VlOmpuLklERU5USUZZX1RFUk1JTkFUT1IsZXJyTXNnOnIubWVzc2FnZX19cmV0dXJuITF9ZWxzZXtpZihUaSh0LlBBVFRFUk4pKXJldHVybiExO2lmKHVvZSh0KSlyZXR1cm57aXNzdWU6am4uQ1VTVE9NX0xJTkVfQlJFQUt9O3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX1mdW5jdGlvbiBkRmUodCxlKXtpZihlLmlzc3VlPT09am4uSURFTlRJRllfVEVSTUlOQVRPUilyZXR1cm5gV2FybmluZzogdW5hYmxlIHRvIGlkZW50aWZ5IGxpbmUgdGVybWluYXRvciB1c2FnZSBpbiBwYXR0ZXJuLgoJVGhlIHByb2JsZW0gaXMgaW4gdGhlIDwke3QubmFtZX0+IFRva2VuIFR5cGUKCSBSb290IGNhdXNlOiAke2UuZXJyTXNnfS4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0lERU5USUZZX1RFUk1JTkFUT1JgO2lmKGUuaXNzdWU9PT1qbi5DVVNUT01fTElORV9CUkVBSylyZXR1cm5gV2FybmluZzogQSBDdXN0b20gVG9rZW4gUGF0dGVybiBzaG91bGQgc3BlY2lmeSB0aGUgPGxpbmVfYnJlYWtzPiBvcHRpb24uCglUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dC5uYW1lfT4gVG9rZW4gVHlwZQoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ1VTVE9NX0xJTkVfQlJFQUtgO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIGRvZSh0KXtyZXR1cm4gSmUodCxyPT5UaShyKT9yLmNoYXJDb2RlQXQoMCk6cil9ZnVuY3Rpb24gY00odCxlLHIpe3RbZV09PT12b2lkIDA/dFtlXT1bcl06dFtlXS5wdXNoKHIpfWZ1bmN0aW9uICRjKHQpe3JldHVybiB0PFlnP3Q6amtbdF19ZnVuY3Rpb24gcEZlKCl7aWYoaHIoamspKXtqaz1uZXcgQXJyYXkoNjU1MzYpO2ZvcihsZXQgdD0wO3Q8NjU1MzY7dCsrKWprW3RdPXQ+MjU1PzI1NSt+fih0LzI1NSk6dH19dmFyIHZwLFhnLFhrLHVNLGVGZSxuRmUsaG9lLFlnLGprLGxNPU4oKCk9PnsidXNlIHN0cmljdCI7YXgoKTtweCgpO3F0KCk7SGcoKTtyb2UoKTtXaygpO3ZwPSJQQVRURVJOIixYZz0iZGVmYXVsdE1vZGUiLFhrPSJtb2RlcyIsdU09dHlwZW9mIG5ldyBSZWdFeHAoIig/OikiKS5zdGlja3k9PSJib29sZWFuIjtvKGFvZSwiYW5hbHl6ZVRva2VuVHlwZXMiKTtvKHNvZSwidmFsaWRhdGVQYXR0ZXJucyIpO28oUUJlLCJ2YWxpZGF0ZVJlZ0V4cFBhdHRlcm4iKTtvKFpCZSwiZmluZE1pc3NpbmdQYXR0ZXJucyIpO28oSkJlLCJmaW5kSW52YWxpZFBhdHRlcm5zIik7ZUZlPS9bXlxcXVskXS87byh0RmUsImZpbmRFbmRPZklucHV0QW5jaG9yIik7byhyRmUsImZpbmRFbXB0eU1hdGNoUmVnRXhwcyIpO25GZT0vW15cXFtdW1xeXXxeXF4vO28oaUZlLCJmaW5kU3RhcnRPZklucHV0QW5jaG9yIik7byhhRmUsImZpbmRVbnN1cHBvcnRlZEZsYWdzIik7byhzRmUsImZpbmREdXBsaWNhdGVQYXR0ZXJucyIpO28ob0ZlLCJmaW5kSW52YWxpZEdyb3VwVHlwZSIpO28obEZlLCJmaW5kTW9kZXNUaGF0RG9Ob3RFeGlzdCIpO28oY0ZlLCJmaW5kVW5yZWFjaGFibGVQYXR0ZXJucyIpO28odUZlLCJ0ZXN0VG9rZW5UeXBlIik7byhoRmUsIm5vTWV0YUNoYXIiKTtvKG5vZSwiYWRkU3RhcnRPZklucHV0Iik7byhpb2UsImFkZFN0aWNreUZsYWciKTtvKG9vZSwicGVyZm9ybVJ1bnRpbWVDaGVja3MiKTtvKGxvZSwicGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzIik7byhjb2UsImNsb25lRW1wdHlHcm91cHMiKTtvKHVvZSwiaXNDdXN0b21QYXR0ZXJuIik7byhmRmUsImlzU2hvcnRQYXR0ZXJuIik7aG9lPXt0ZXN0Om8oZnVuY3Rpb24odCl7bGV0IGU9dC5sZW5ndGg7Zm9yKGxldCByPXRoaXMubGFzdEluZGV4O3I8ZTtyKyspe2xldCBuPXQuY2hhckNvZGVBdChyKTtpZihuPT09MTApcmV0dXJuIHRoaXMubGFzdEluZGV4PXIrMSwhMDtpZihuPT09MTMpcmV0dXJuIHQuY2hhckNvZGVBdChyKzEpPT09MTA/dGhpcy5sYXN0SW5kZXg9cisyOnRoaXMubGFzdEluZGV4PXIrMSwhMH1yZXR1cm4hMX0sInRlc3QiKSxsYXN0SW5kZXg6MH07byhmb2UsImNoZWNrTGluZUJyZWFrc0lzc3VlcyIpO28oZEZlLCJidWlsZExpbmVCcmVha0lzc3VlTWVzc2FnZSIpO28oZG9lLCJnZXRDaGFyQ29kZXMiKTtvKGNNLCJhZGRUb01hcE9mQXJyYXlzIik7WWc9MjU2LGprPVtdO28oJGMsImNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleCIpO28ocEZlLCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIil9KTtmdW5jdGlvbiBWdSh0LGUpe2xldCByPXQudG9rZW5UeXBlSWR4O3JldHVybiByPT09ZS50b2tlblR5cGVJZHg/ITA6ZS5pc1BhcmVudD09PSEwJiZlLmNhdGVnb3J5TWF0Y2hlc01hcFtyXT09PSEwfWZ1bmN0aW9uIGpnKHQsZSl7cmV0dXJuIHQudG9rZW5UeXBlSWR4PT09ZS50b2tlblR5cGVJZHh9ZnVuY3Rpb24gVXUodCl7bGV0IGU9bUZlKHQpO2dGZShlKSx2RmUoZSkseUZlKGUpLEFlKGUscj0+e3IuaXNQYXJlbnQ9ci5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoPjB9KX1mdW5jdGlvbiBtRmUodCl7bGV0IGU9YW4odCkscj10LG49ITA7Zm9yKDtuOyl7cj1BYyhxcihKZShyLGE9PmEuQ0FURUdPUklFUykpKTtsZXQgaT1hZihyLGUpO2U9ZS5jb25jYXQoaSksaHIoaSk/bj0hMTpyPWl9cmV0dXJuIGV9ZnVuY3Rpb24gZ0ZlKHQpe0FlKHQsZT0+e2hNKGUpfHwoZ29lW3BvZV09ZSxlLnRva2VuVHlwZUlkeD1wb2UrKyksbW9lKGUpJiYhUHQoZS5DQVRFR09SSUVTKSYmKGUuQ0FURUdPUklFUz1bZS5DQVRFR09SSUVTXSksbW9lKGUpfHwoZS5DQVRFR09SSUVTPVtdKSx4RmUoZSl8fChlLmNhdGVnb3J5TWF0Y2hlcz1bXSksYkZlKGUpfHwoZS5jYXRlZ29yeU1hdGNoZXNNYXA9e30pfSl9ZnVuY3Rpb24geUZlKHQpe0FlKHQsZT0+e2UuY2F0ZWdvcnlNYXRjaGVzPVtdLEFlKGUuY2F0ZWdvcnlNYXRjaGVzTWFwLChyLG4pPT57ZS5jYXRlZ29yeU1hdGNoZXMucHVzaChnb2Vbbl0udG9rZW5UeXBlSWR4KX0pfSl9ZnVuY3Rpb24gdkZlKHQpe0FlKHQsZT0+e3lvZShbXSxlKX0pfWZ1bmN0aW9uIHlvZSh0LGUpe0FlKHQscj0+e2UuY2F0ZWdvcnlNYXRjaGVzTWFwW3IudG9rZW5UeXBlSWR4XT0hMH0pLEFlKGUuQ0FURUdPUklFUyxyPT57bGV0IG49dC5jb25jYXQoZSk7WG4obixyKXx8eW9lKG4scil9KX1mdW5jdGlvbiBoTSh0KXtyZXR1cm4gQnQodCwidG9rZW5UeXBlSWR4Iil9ZnVuY3Rpb24gbW9lKHQpe3JldHVybiBCdCh0LCJDQVRFR09SSUVTIil9ZnVuY3Rpb24geEZlKHQpe3JldHVybiBCdCh0LCJjYXRlZ29yeU1hdGNoZXMiKX1mdW5jdGlvbiBiRmUodCl7cmV0dXJuIEJ0KHQsImNhdGVnb3J5TWF0Y2hlc01hcCIpfWZ1bmN0aW9uIHZvZSh0KXtyZXR1cm4gQnQodCwidG9rZW5UeXBlSWR4Iil9dmFyIHBvZSxnb2UseHA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oVnUsInRva2VuU3RydWN0dXJlZE1hdGNoZXIiKTtvKGpnLCJ0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzIik7cG9lPTEsZ29lPXt9O28oVXUsImF1Z21lbnRUb2tlblR5cGVzIik7byhtRmUsImV4cGFuZENhdGVnb3JpZXMiKTtvKGdGZSwiYXNzaWduVG9rZW5EZWZhdWx0UHJvcHMiKTtvKHlGZSwiYXNzaWduQ2F0ZWdvcmllc1Rva2Vuc1Byb3AiKTtvKHZGZSwiYXNzaWduQ2F0ZWdvcmllc01hcFByb3AiKTtvKHlvZSwic2luZ2xlQXNzaWduQ2F0ZWdvcmllc1Rva3NNYXAiKTtvKGhNLCJoYXNTaG9ydEtleVByb3BlcnR5Iik7byhtb2UsImhhc0NhdGVnb3JpZXNQcm9wZXJ0eSIpO28oeEZlLCJoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc1Byb3BlcnR5Iik7byhiRmUsImhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzTWFwUHJvcGVydHkiKTtvKHZvZSwiaXNUb2tlblR5cGUiKX0pO3ZhciBLZyxmTT1OKCgpPT57InVzZSBzdHJpY3QiO0tnPXtidWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZSh0KXtyZXR1cm5gVW5hYmxlIHRvIHBvcCBMZXhlciBNb2RlIGFmdGVyIGVuY291bnRlcmluZyBUb2tlbiAtPiR7dC5pbWFnZX08LSBUaGUgTW9kZSBTdGFjayBpcyBlbXB0eWB9LGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKHQsZSxyLG4saSl7cmV0dXJuYHVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAtPiR7dC5jaGFyQXQoZSl9PC0gYXQgb2Zmc2V0OiAke2V9LCBza2lwcGVkICR7cn0gY2hhcmFjdGVycy5gfX19KTt2YXIgam4sbXgsS24scHg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtsTSgpO3F0KCk7SGcoKTt4cCgpO2ZNKCk7V2soKTsoZnVuY3Rpb24odCl7dFt0Lk1JU1NJTkdfUEFUVEVSTj0wXT0iTUlTU0lOR19QQVRURVJOIix0W3QuSU5WQUxJRF9QQVRURVJOPTFdPSJJTlZBTElEX1BBVFRFUk4iLHRbdC5FT0lfQU5DSE9SX0ZPVU5EPTJdPSJFT0lfQU5DSE9SX0ZPVU5EIix0W3QuVU5TVVBQT1JURURfRkxBR1NfRk9VTkQ9M109IlVOU1VQUE9SVEVEX0ZMQUdTX0ZPVU5EIix0W3QuRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5EPTRdPSJEVVBMSUNBVEVfUEFUVEVSTlNfRk9VTkQiLHRbdC5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQ9NV09IklOVkFMSURfR1JPVVBfVFlQRV9GT1VORCIsdFt0LlBVU0hfTU9ERV9ET0VTX05PVF9FWElTVD02XT0iUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNUIix0W3QuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERT03XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERSIsdFt0Lk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWT04XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZIix0W3QuTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1Q9OV09Ik1VTFRJX01PREVfTEVYRVJfREVGQVVMVF9NT0RFX1ZBTFVFX0RPRVNfTk9UX0VYSVNUIix0W3QuTEVYRVJfREVGSU5JVElPTl9DQU5OT1RfQ09OVEFJTl9VTkRFRklORUQ9MTBdPSJMRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRCIsdFt0LlNPSV9BTkNIT1JfRk9VTkQ9MTFdPSJTT0lfQU5DSE9SX0ZPVU5EIix0W3QuRU1QVFlfTUFUQ0hfUEFUVEVSTj0xMl09IkVNUFRZX01BVENIX1BBVFRFUk4iLHRbdC5OT19MSU5FX0JSRUFLU19GTEFHUz0xM109Ik5PX0xJTkVfQlJFQUtTX0ZMQUdTIix0W3QuVU5SRUFDSEFCTEVfUEFUVEVSTj0xNF09IlVOUkVBQ0hBQkxFX1BBVFRFUk4iLHRbdC5JREVOVElGWV9URVJNSU5BVE9SPTE1XT0iSURFTlRJRllfVEVSTUlOQVRPUiIsdFt0LkNVU1RPTV9MSU5FX0JSRUFLPTE2XT0iQ1VTVE9NX0xJTkVfQlJFQUsiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERT0xN109Ik1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFIn0pKGpufHwoam49e30pKTtteD17ZGVmZXJEZWZpbml0aW9uRXJyb3JzSGFuZGxpbmc6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JzUGF0dGVybjovXG58XHJcbj8vZyxsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6W2AKYCwiXHIiXSxlbnN1cmVPcHRpbWl6YXRpb25zOiExLHNhZmVNb2RlOiExLGVycm9yTWVzc2FnZVByb3ZpZGVyOktnLHRyYWNlSW5pdFBlcmY6ITEsc2tpcFZhbGlkYXRpb25zOiExLHJlY292ZXJ5RW5hYmxlZDohMH07T2JqZWN0LmZyZWV6ZShteCk7S249Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXIiKX1jb25zdHJ1Y3RvcihlLHI9bXgpe2lmKHRoaXMubGV4ZXJEZWZpbml0aW9uPWUsdGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nPVtdLHRoaXMucGF0dGVybklkeFRvQ29uZmlnPXt9LHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZz17fSx0aGlzLm1vZGVzPVtdLHRoaXMuZW1wdHlHcm91cHM9e30sdGhpcy50cmFja1N0YXJ0TGluZXM9ITAsdGhpcy50cmFja0VuZExpbmVzPSEwLHRoaXMuaGFzQ3VzdG9tPSExLHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkPXt9LHRoaXMuVFJBQ0VfSU5JVD0oaSxhKT0+e2lmKHRoaXMudHJhY2VJbml0UGVyZj09PSEwKXt0aGlzLnRyYWNlSW5pdEluZGVudCsrO2xldCBzPW5ldyBBcnJheSh0aGlzLnRyYWNlSW5pdEluZGVudCsxKS5qb2luKCIJIik7dGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmY29uc29sZS5sb2coYCR7c30tLT4gPCR7aX0+YCk7bGV0e3RpbWU6bCx2YWx1ZTp1fT1oeChhKSxoPWw+MTA/Y29uc29sZS53YXJuOmNvbnNvbGUubG9nO3JldHVybiB0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZoKGAke3N9PC0tIDwke2l9PiB0aW1lOiAke2x9bXNgKSx0aGlzLnRyYWNlSW5pdEluZGVudC0tLHV9ZWxzZSByZXR1cm4gYSgpfSx0eXBlb2Ygcj09ImJvb2xlYW4iKXRocm93IEVycm9yKGBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMZXhlciBjb25zdHJ1Y3RvciBpcyBub3cgYW4gSUxleGVyQ29uZmlnIE9iamVjdC4KYSBib29sZWFuIDJuZCBhcmd1bWVudCBpcyBubyBsb25nZXIgc3VwcG9ydGVkYCk7dGhpcy5jb25maWc9cGEoe30sbXgscik7bGV0IG49dGhpcy5jb25maWcudHJhY2VJbml0UGVyZjtuPT09ITA/KHRoaXMudHJhY2VJbml0TWF4SWRlbnQ9MS8wLHRoaXMudHJhY2VJbml0UGVyZj0hMCk6dHlwZW9mIG49PSJudW1iZXIiJiYodGhpcy50cmFjZUluaXRNYXhJZGVudD1uLHRoaXMudHJhY2VJbml0UGVyZj0hMCksdGhpcy50cmFjZUluaXRJbmRlbnQ9LTEsdGhpcy5UUkFDRV9JTklUKCJMZXhlciBDb25zdHJ1Y3RvciIsKCk9PntsZXQgaSxhPSEwO3RoaXMuVFJBQ0VfSU5JVCgiTGV4ZXIgQ29uZmlnIGhhbmRsaW5nIiwoKT0+e2lmKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49PT1teC5saW5lVGVybWluYXRvcnNQYXR0ZXJuKXRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49aG9lO2Vsc2UgaWYodGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPT09bXgubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKXRocm93IEVycm9yKGBFcnJvcjogTWlzc2luZyA8bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPiBwcm9wZXJ0eSBvbiB0aGUgTGV4ZXIgY29uZmlnLgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTUlTU0lOR19MSU5FX1RFUk1fQ0hBUlNgKTtpZihyLnNhZmVNb2RlJiZyLmVuc3VyZU9wdGltaXphdGlvbnMpdGhyb3cgRXJyb3IoJyJzYWZlTW9kZSIgYW5kICJlbnN1cmVPcHRpbWl6YXRpb25zIiBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLicpO3RoaXMudHJhY2tTdGFydExpbmVzPS9mdWxsfG9ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZyksdGhpcy50cmFja0VuZExpbmVzPS9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSxQdChlKT9pPXttb2Rlczp7ZGVmYXVsdE1vZGU6YW4oZSl9LGRlZmF1bHRNb2RlOlhnfTooYT0hMSxpPWFuKGUpKX0pLHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucz09PSExJiYodGhpcy5UUkFDRV9JTklUKCJwZXJmb3JtUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycz10aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycy5jb25jYXQob29lKGksdGhpcy50cmFja1N0YXJ0TGluZXMsdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSl9KSx0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1XYXJuaW5nUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmc9dGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLmNvbmNhdChsb2UoaSx0aGlzLnRyYWNrU3RhcnRMaW5lcyx0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKX0pKSxpLm1vZGVzPWkubW9kZXM/aS5tb2Rlczp7fSxBZShpLm1vZGVzLChsLHUpPT57aS5tb2Rlc1t1XT1zZihsLGg9Pm1yKGgpKX0pO2xldCBzPXpyKGkubW9kZXMpO2lmKEFlKGkubW9kZXMsKGwsdSk9Pnt0aGlzLlRSQUNFX0lOSVQoYE1vZGU6IDwke3V9PiBwcm9jZXNzaW5nYCwoKT0+e2lmKHRoaXMubW9kZXMucHVzaCh1KSx0aGlzLmNvbmZpZy5za2lwVmFsaWRhdGlvbnM9PT0hMSYmdGhpcy5UUkFDRV9JTklUKCJ2YWxpZGF0ZVBhdHRlcm5zIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzPXRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdChzb2UobCxzKSl9KSxocih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe1V1KGwpO2xldCBoO3RoaXMuVFJBQ0VfSU5JVCgiYW5hbHl6ZVRva2VuVHlwZXMiLCgpPT57aD1hb2UobCx7bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOnRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyxwb3NpdGlvblRyYWNraW5nOnIucG9zaXRpb25UcmFja2luZyxlbnN1cmVPcHRpbWl6YXRpb25zOnIuZW5zdXJlT3B0aW1pemF0aW9ucyxzYWZlTW9kZTpyLnNhZmVNb2RlLHRyYWNlcjp0aGlzLlRSQUNFX0lOSVR9KX0pLHRoaXMucGF0dGVybklkeFRvQ29uZmlnW3VdPWgucGF0dGVybklkeFRvQ29uZmlnLHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1t1XT1oLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcsdGhpcy5lbXB0eUdyb3Vwcz1wYSh7fSx0aGlzLmVtcHR5R3JvdXBzLGguZW1wdHlHcm91cHMpLHRoaXMuaGFzQ3VzdG9tPWguaGFzQ3VzdG9tfHx0aGlzLmhhc0N1c3RvbSx0aGlzLmNhbk1vZGVCZU9wdGltaXplZFt1XT1oLmNhbkJlT3B0aW1pemVkfX0pfSksdGhpcy5kZWZhdWx0TW9kZT1pLmRlZmF1bHRNb2RlLCFocih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykmJiF0aGlzLmNvbmZpZy5kZWZlckRlZmluaXRpb25FcnJvcnNIYW5kbGluZyl7bGV0IHU9SmUodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsaD0+aC5tZXNzYWdlKS5qb2luKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkZXRlY3RlZCBpbiBkZWZpbml0aW9uIG9mIExleGVyOgpgK3UpfUFlKHRoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZyxsPT57dXgobC5tZXNzYWdlKX0pLHRoaXMuVFJBQ0VfSU5JVCgiQ2hvb3Npbmcgc3ViLW1ldGhvZHMgaW1wbGVtZW50YXRpb25zIiwoKT0+e2lmKHVNPyh0aGlzLmNob3BJbnB1dD10YSx0aGlzLm1hdGNoPXRoaXMubWF0Y2hXaXRoVGVzdCk6KHRoaXMudXBkYXRlTGFzdEluZGV4PWFpLHRoaXMubWF0Y2g9dGhpcy5tYXRjaFdpdGhFeGVjKSxhJiYodGhpcy5oYW5kbGVNb2Rlcz1haSksdGhpcy50cmFja1N0YXJ0TGluZXM9PT0hMSYmKHRoaXMuY29tcHV0ZU5ld0NvbHVtbj10YSksdGhpcy50cmFja0VuZExpbmVzPT09ITEmJih0aGlzLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uPWFpKSwvZnVsbC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlRnVsbFRva2VuO2Vsc2UgaWYoL29ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlU3RhcnRPbmx5VG9rZW47ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlT2Zmc2V0T25seVRva2VuO2Vsc2UgdGhyb3cgRXJyb3IoYEludmFsaWQgPHBvc2l0aW9uVHJhY2tpbmc+IGNvbmZpZyBvcHRpb246ICIke3RoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmd9ImApO3RoaXMuaGFzQ3VzdG9tPyh0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ1B1c2gsdGhpcy5oYW5kbGVQYXlsb2FkPXRoaXMuaGFuZGxlUGF5bG9hZFdpdGhDdXN0b20pOih0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ01lbWJlckFjY2Vzcyx0aGlzLmhhbmRsZVBheWxvYWQ9dGhpcy5oYW5kbGVQYXlsb2FkTm9DdXN0b20pfSksdGhpcy5UUkFDRV9JTklUKCJGYWlsZWQgT3B0aW1pemF0aW9uIFdhcm5pbmdzIiwoKT0+e2xldCBsPVhyKHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkLCh1LGgsZik9PihoPT09ITEmJnUucHVzaChmKSx1KSxbXSk7aWYoci5lbnN1cmVPcHRpbWl6YXRpb25zJiYhaHIobCkpdGhyb3cgRXJyb3IoYExleGVyIE1vZGVzOiA8ICR7bC5qb2luKCIsICIpfSA+IGNhbm5vdCBiZSBvcHRpbWl6ZWQuCgkgRGlzYWJsZSB0aGUgImVuc3VyZU9wdGltaXphdGlvbnMiIGxleGVyIGNvbmZpZyBmbGFnIHRvIHNpbGVudGx5IGlnbm9yZSB0aGlzIGFuZCBydW4gdGhlIGxleGVyIGluIGFuIHVuLW9wdGltaXplZCBtb2RlLgoJIE9yIGluc3BlY3QgdGhlIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzIG9uIGhvdyB0byByZXNvbHZlIHRoZXNlIGlzc3Vlcy5gKX0pLHRoaXMuVFJBQ0VfSU5JVCgiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIsKCk9Pntac2UoKX0pLHRoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcGVydGllcyIsKCk9PntmeCh0aGlzKX0pfSl9dG9rZW5pemUoZSxyPXRoaXMuZGVmYXVsdE1vZGUpe2lmKCFocih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe2xldCBpPUplKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLGE9PmEubWVzc2FnZSkuam9pbihgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYCk7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gVG9rZW5pemUgYmVjYXVzZSBFcnJvcnMgZGV0ZWN0ZWQgaW4gZGVmaW5pdGlvbiBvZiBMZXhlcjoKYCtpKX1yZXR1cm4gdGhpcy50b2tlbml6ZUludGVybmFsKGUscil9dG9rZW5pemVJbnRlcm5hbChlLHIpe2xldCBuLGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHYseCxiLFQ9ZSxTPVQubGVuZ3RoLHc9MCxFPTAsXz10aGlzLmhhc0N1c3RvbT8wOk1hdGguZmxvb3IoZS5sZW5ndGgvMTApLEM9bmV3IEFycmF5KF8pLEQ9W10sTz10aGlzLnRyYWNrU3RhcnRMaW5lcz8xOnZvaWQgMCxSPXRoaXMudHJhY2tTdGFydExpbmVzPzE6dm9pZCAwLGs9Y29lKHRoaXMuZW1wdHlHcm91cHMpLEw9dGhpcy50cmFja1N0YXJ0TGluZXMsQT10aGlzLmNvbmZpZy5saW5lVGVybWluYXRvcnNQYXR0ZXJuLEk9MCxNPVtdLFA9W10sQj1bXSxGPVtdO09iamVjdC5mcmVlemUoRik7bGV0IHo7ZnVuY3Rpb24gJCgpe3JldHVybiBNfW8oJCwiZ2V0UG9zc2libGVQYXR0ZXJuc1Nsb3ciKTtmdW5jdGlvbiBVKFope2xldCB1ZT0kYyhaKSxRPVBbdWVdO3JldHVybiBRPT09dm9pZCAwP0Y6UX1vKFUsImdldFBvc3NpYmxlUGF0dGVybnNPcHRpbWl6ZWQiKTtsZXQgSz1vKFo9PntpZihCLmxlbmd0aD09PTEmJloudG9rZW5UeXBlLlBVU0hfTU9ERT09PXZvaWQgMCl7bGV0IHVlPXRoaXMuY29uZmlnLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKFopO0QucHVzaCh7b2Zmc2V0Olouc3RhcnRPZmZzZXQsbGluZTpaLnN0YXJ0TGluZSxjb2x1bW46Wi5zdGFydENvbHVtbixsZW5ndGg6Wi5pbWFnZS5sZW5ndGgsbWVzc2FnZTp1ZX0pfWVsc2V7Qi5wb3AoKTtsZXQgdWU9bWEoQik7TT10aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1t1ZV0sUD10aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWdbdWVdLEk9TS5sZW5ndGg7bGV0IFE9dGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWRbdWVdJiZ0aGlzLmNvbmZpZy5zYWZlTW9kZT09PSExO1AmJlE/ej1VOno9JH19LCJwb3BfbW9kZSIpO2Z1bmN0aW9uIGVlKFope0IucHVzaChaKSxQPXRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1taXSxNPXRoaXMucGF0dGVybklkeFRvQ29uZmlnW1pdLEk9TS5sZW5ndGgsST1NLmxlbmd0aDtsZXQgdWU9dGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWRbWl0mJnRoaXMuY29uZmlnLnNhZmVNb2RlPT09ITE7UCYmdWU/ej1VOno9JH1vKGVlLCJwdXNoX21vZGUiKSxlZS5jYWxsKHRoaXMscik7bGV0IFksY2U9dGhpcy5jb25maWcucmVjb3ZlcnlFbmFibGVkO2Zvcig7dzxTOyl7dT1udWxsO2xldCBaPVQuY2hhckNvZGVBdCh3KSx1ZT16KFopLFE9dWUubGVuZ3RoO2ZvcihuPTA7bjxRO24rKyl7WT11ZVtuXTtsZXQgaj1ZLnBhdHRlcm47aD1udWxsO2xldCBuZT1ZLnNob3J0O2lmKG5lIT09ITE/Wj09PW5lJiYodT1qKTpZLmlzQ3VzdG9tPT09ITA/KGI9ai5leGVjKFQsdyxDLGspLGIhPT1udWxsPyh1PWJbMF0sYi5wYXlsb2FkIT09dm9pZCAwJiYoaD1iLnBheWxvYWQpKTp1PW51bGwpOih0aGlzLnVwZGF0ZUxhc3RJbmRleChqLHcpLHU9dGhpcy5tYXRjaChqLGUsdykpLHUhPT1udWxsKXtpZihsPVkubG9uZ2VyQWx0LGwhPT12b2lkIDApe2xldCB0ZT1sLmxlbmd0aDtmb3IoYT0wO2E8dGU7YSsrKXtsZXQgaGU9TVtsW2FdXSxsZT1oZS5wYXR0ZXJuO2lmKGY9bnVsbCxoZS5pc0N1c3RvbT09PSEwPyhiPWxlLmV4ZWMoVCx3LEMsayksYiE9PW51bGw/KHM9YlswXSxiLnBheWxvYWQhPT12b2lkIDAmJihmPWIucGF5bG9hZCkpOnM9bnVsbCk6KHRoaXMudXBkYXRlTGFzdEluZGV4KGxlLHcpLHM9dGhpcy5tYXRjaChsZSxlLHcpKSxzJiZzLmxlbmd0aD51Lmxlbmd0aCl7dT1zLGg9ZixZPWhlO2JyZWFrfX19YnJlYWt9fWlmKHUhPT1udWxsKXtpZihkPXUubGVuZ3RoLHA9WS5ncm91cCxwIT09dm9pZCAwJiYobT1ZLnRva2VuVHlwZUlkeCxnPXRoaXMuY3JlYXRlVG9rZW5JbnN0YW5jZSh1LHcsbSxZLnRva2VuVHlwZSxPLFIsZCksdGhpcy5oYW5kbGVQYXlsb2FkKGcsaCkscD09PSExP0U9dGhpcy5hZGRUb2tlbihDLEUsZyk6a1twXS5wdXNoKGcpKSxlPXRoaXMuY2hvcElucHV0KGUsZCksdz13K2QsUj10aGlzLmNvbXB1dGVOZXdDb2x1bW4oUixkKSxMPT09ITAmJlkuY2FuTGluZVRlcm1pbmF0b3I9PT0hMCl7bGV0IGo9MCxuZSx0ZTtBLmxhc3RJbmRleD0wO2RvIG5lPUEudGVzdCh1KSxuZT09PSEwJiYodGU9QS5sYXN0SW5kZXgtMSxqKyspO3doaWxlKG5lPT09ITApO2ohPT0wJiYoTz1PK2osUj1kLXRlLHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24oZyxwLHRlLGosTyxSLGQpKX10aGlzLmhhbmRsZU1vZGVzKFksSyxlZSxnKX1lbHNle2xldCBqPXcsbmU9Tyx0ZT1SLGhlPWNlPT09ITE7Zm9yKDtoZT09PSExJiZ3PFM7KWZvcihlPXRoaXMuY2hvcElucHV0KGUsMSksdysrLGk9MDtpPEk7aSsrKXtsZXQgbGU9TVtpXSxKPWxlLnBhdHRlcm4sU2U9bGUuc2hvcnQ7aWYoU2UhPT0hMT9ULmNoYXJDb2RlQXQodyk9PT1TZSYmKGhlPSEwKTpsZS5pc0N1c3RvbT09PSEwP2hlPUouZXhlYyhULHcsQyxrKSE9PW51bGw6KHRoaXMudXBkYXRlTGFzdEluZGV4KEosdyksaGU9Si5leGVjKGUpIT09bnVsbCksaGU9PT0hMClicmVha31pZih5PXctaixSPXRoaXMuY29tcHV0ZU5ld0NvbHVtbihSLHkpLHg9dGhpcy5jb25maWcuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UoVCxqLHksbmUsdGUpLEQucHVzaCh7b2Zmc2V0OmosbGluZTpuZSxjb2x1bW46dGUsbGVuZ3RoOnksbWVzc2FnZTp4fSksY2U9PT0hMSlicmVha319cmV0dXJuIHRoaXMuaGFzQ3VzdG9tfHwoQy5sZW5ndGg9RSkse3Rva2VuczpDLGdyb3VwczprLGVycm9yczpEfX1oYW5kbGVNb2RlcyhlLHIsbixpKXtpZihlLnBvcD09PSEwKXtsZXQgYT1lLnB1c2g7cihpKSxhIT09dm9pZCAwJiZuLmNhbGwodGhpcyxhKX1lbHNlIGUucHVzaCE9PXZvaWQgMCYmbi5jYWxsKHRoaXMsZS5wdXNoKX1jaG9wSW5wdXQoZSxyKXtyZXR1cm4gZS5zdWJzdHJpbmcocil9dXBkYXRlTGFzdEluZGV4KGUscil7ZS5sYXN0SW5kZXg9cn11cGRhdGVUb2tlbkVuZExpbmVDb2x1bW5Mb2NhdGlvbihlLHIsbixpLGEscyxsKXtsZXQgdSxoO3IhPT12b2lkIDAmJih1PW49PT1sLTEsaD11Py0xOjAsaT09PTEmJnU9PT0hMHx8KGUuZW5kTGluZT1hK2gsZS5lbmRDb2x1bW49cy0xKy1oKSl9Y29tcHV0ZU5ld0NvbHVtbihlLHIpe3JldHVybiBlK3J9Y3JlYXRlT2Zmc2V0T25seVRva2VuKGUscixuLGkpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZVN0YXJ0T25seVRva2VuKGUscixuLGksYSxzKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLHN0YXJ0TGluZTphLHN0YXJ0Q29sdW1uOnMsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZUZ1bGxUb2tlbihlLHIsbixpLGEscyxsKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLGVuZE9mZnNldDpyK2wtMSxzdGFydExpbmU6YSxlbmRMaW5lOmEsc3RhcnRDb2x1bW46cyxlbmRDb2x1bW46cytsLTEsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWFkZFRva2VuVXNpbmdQdXNoKGUscixuKXtyZXR1cm4gZS5wdXNoKG4pLHJ9YWRkVG9rZW5Vc2luZ01lbWJlckFjY2VzcyhlLHIsbil7cmV0dXJuIGVbcl09bixyKysscn1oYW5kbGVQYXlsb2FkTm9DdXN0b20oZSxyKXt9aGFuZGxlUGF5bG9hZFdpdGhDdXN0b20oZSxyKXtyIT09bnVsbCYmKGUucGF5bG9hZD1yKX1tYXRjaFdpdGhUZXN0KGUscixuKXtyZXR1cm4gZS50ZXN0KHIpPT09ITA/ci5zdWJzdHJpbmcobixlLmxhc3RJbmRleCk6bnVsbH1tYXRjaFdpdGhFeGVjKGUscil7bGV0IG49ZS5leGVjKHIpO3JldHVybiBuIT09bnVsbD9uWzBdOm51bGx9fTtLbi5TS0lQUEVEPSJUaGlzIG1hcmtzIGEgc2tpcHBlZCBUb2tlbiBwYXR0ZXJuLCB0aGlzIG1lYW5zIGVhY2ggdG9rZW4gaWRlbnRpZmllZCBieSBpdCB3aWxsYmUgY29uc3VtZWQgYW5kIHRoZW4gdGhyb3duIGludG8gb2JsaXZpb24sIHRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgdG8gY29tcGxldGVseSBpZ25vcmUgd2hpdGVzcGFjZS4iO0tuLk5BPS9OT1RfQVBQTElDQUJMRS99KTtmdW5jdGlvbiBIdSh0KXtyZXR1cm4gZE0odCk/dC5MQUJFTDp0Lm5hbWV9ZnVuY3Rpb24gZE0odCl7cmV0dXJuIFRpKHQuTEFCRUwpJiZ0LkxBQkVMIT09IiJ9ZnVuY3Rpb24gZGYodCl7cmV0dXJuIHdGZSh0KX1mdW5jdGlvbiB3RmUodCl7bGV0IGU9dC5wYXR0ZXJuLHI9e307aWYoci5uYW1lPXQubmFtZSxtcihlKXx8KHIuUEFUVEVSTj1lKSxCdCh0LFRGZSkpdGhyb3dgVGhlIHBhcmVudCBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgpTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzLzU2NCNpc3N1ZWNvbW1lbnQtMzQ5MDYyMzQ2IGZvciBkZXRhaWxzLmA7cmV0dXJuIEJ0KHQseG9lKSYmKHIuQ0FURUdPUklFUz10W3hvZV0pLFV1KFtyXSksQnQodCxib2UpJiYoci5MQUJFTD10W2JvZV0pLEJ0KHQsVG9lKSYmKHIuR1JPVVA9dFtUb2VdKSxCdCh0LGtvZSkmJihyLlBPUF9NT0RFPXRba29lXSksQnQodCx3b2UpJiYoci5QVVNIX01PREU9dFt3b2VdKSxCdCh0LEVvZSkmJihyLkxPTkdFUl9BTFQ9dFtFb2VdKSxCdCh0LFNvZSkmJihyLkxJTkVfQlJFQUtTPXRbU29lXSksQnQodCxDb2UpJiYoci5TVEFSVF9DSEFSU19ISU5UPXRbQ29lXSkscn1mdW5jdGlvbiBXdSh0LGUscixuLGksYSxzLGwpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsZW5kT2Zmc2V0Om4sc3RhcnRMaW5lOmksZW5kTGluZTphLHN0YXJ0Q29sdW1uOnMsZW5kQ29sdW1uOmwsdG9rZW5UeXBlSWR4OnQudG9rZW5UeXBlSWR4LHRva2VuVHlwZTp0fX1mdW5jdGlvbiBneCh0LGUpe3JldHVybiBWdSh0LGUpfXZhciBURmUseG9lLGJvZSxUb2Usd29lLGtvZSxFb2UsU29lLENvZSxmbyxicD1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7cHgoKTt4cCgpO28oSHUsInRva2VuTGFiZWwiKTtvKGRNLCJoYXNUb2tlbkxhYmVsIik7VEZlPSJwYXJlbnQiLHhvZT0iY2F0ZWdvcmllcyIsYm9lPSJsYWJlbCIsVG9lPSJncm91cCIsd29lPSJwdXNoX21vZGUiLGtvZT0icG9wX21vZGUiLEVvZT0ibG9uZ2VyX2FsdCIsU29lPSJsaW5lX2JyZWFrcyIsQ29lPSJzdGFydF9jaGFyc19oaW50IjtvKGRmLCJjcmVhdGVUb2tlbiIpO28od0ZlLCJjcmVhdGVUb2tlbkludGVybmFsIik7Zm89ZGYoe25hbWU6IkVPRiIscGF0dGVybjpLbi5OQX0pO1V1KFtmb10pO28oV3UsImNyZWF0ZVRva2VuSW5zdGFuY2UiKTtvKGd4LCJ0b2tlbk1hdGNoZXIiKX0pO3ZhciBxdSxBb2UsJGwsUWc9TigoKT0+eyJ1c2Ugc3RyaWN0IjticCgpO3F0KCk7ZnMoKTtxdT17YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6dCxhY3R1YWw6ZSxwcmV2aW91czpyLHJ1bGVOYW1lOm59KXtyZXR1cm5gRXhwZWN0aW5nICR7ZE0odCk/YC0tPiAke0h1KHQpfSA8LS1gOmB0b2tlbiBvZiB0eXBlIC0tPiAke3QubmFtZX0gPC0tYH0gYnV0IGZvdW5kIC0tPiAnJHtlLmltYWdlfScgPC0tYH0sYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OnQscnVsZU5hbWU6ZX0pe3JldHVybiJSZWR1bmRhbnQgaW5wdXQsIGV4cGVjdGluZyBFT0YgYnV0IGZvdW5kOiAiK3QuaW1hZ2V9LGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKHtleHBlY3RlZFBhdGhzUGVyQWx0OnQsYWN0dWFsOmUscHJldmlvdXM6cixjdXN0b21Vc2VyRGVzY3JpcHRpb246bixydWxlTmFtZTppfSl7bGV0IGE9IkV4cGVjdGluZzogIixsPWAKYnV0IGZvdW5kOiAnYCtpYShlKS5pbWFnZSsiJyI7aWYobilyZXR1cm4gYStuK2w7e2xldCB1PVhyKHQsKHAsbSk9PnAuY29uY2F0KG0pLFtdKSxoPUplKHUscD0+YFske0plKHAsbT0+SHUobSkpLmpvaW4oIiwgIil9XWApLGQ9YG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6CiR7SmUoaCwocCxtKT0+YCAgJHttKzF9LiAke3B9YCkuam9pbihgCmApfWA7cmV0dXJuIGErZCtsfX0sYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtleHBlY3RlZEl0ZXJhdGlvblBhdGhzOnQsYWN0dWFsOmUsY3VzdG9tVXNlckRlc2NyaXB0aW9uOnIscnVsZU5hbWU6bn0pe2xldCBpPSJFeHBlY3Rpbmc6ICIscz1gCmJ1dCBmb3VuZDogJ2AraWEoZSkuaW1hZ2UrIiciO2lmKHIpcmV0dXJuIGkrcitzO3tsZXQgdT1gZXhwZWN0aW5nIGF0IGxlYXN0IG9uZSBpdGVyYXRpb24gd2hpY2ggc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlIHBvc3NpYmxlIFRva2VuIHNlcXVlbmNlczo6CiAgPCR7SmUodCxoPT5gWyR7SmUoaCxmPT5IdShmKSkuam9pbigiLCIpfV1gKS5qb2luKCIgLCIpfT5gO3JldHVybiBpK3Urc319fTtPYmplY3QuZnJlZXplKHF1KTtBb2U9e2J1aWxkUnVsZU5vdEZvdW5kRXJyb3IodCxlKXtyZXR1cm4iSW52YWxpZCBncmFtbWFyLCByZWZlcmVuY2UgdG8gYSBydWxlIHdoaWNoIGlzIG5vdCBkZWZpbmVkOiAtPiIrZS5ub25UZXJtaW5hbE5hbWUrYDwtCmluc2lkZSB0b3AgbGV2ZWwgcnVsZTogLT5gK3QubmFtZSsiPC0ifX0sJGw9e2J1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0LGUpe2Z1bmN0aW9uIHIoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBFcj9mLnRlcm1pbmFsVHlwZS5uYW1lOmYgaW5zdGFuY2VvZiBvbj9mLm5vblRlcm1pbmFsTmFtZToiIn1vKHIsImdldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50Iik7bGV0IG49dC5uYW1lLGk9aWEoZSksYT1pLmlkeCxzPVZzKGkpLGw9cihpKSx1PWE+MCxoPWAtPiR7c30ke3U/YToiIn08LSAke2w/YHdpdGggYXJndW1lbnQ6IC0+JHtsfTwtYDoiIn0KICAgICAgICAgICAgICAgICAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSAoJHtlLmxlbmd0aH0gdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4ke259PC0uICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9GQVEuaHRtbCNOVU1FUklDQUxfU1VGRklYRVMgCiAgICAgICAgICAgICAgICAgIGA7cmV0dXJuIGg9aC5yZXBsYWNlKC9bIFx0XSsvZywiICIpLGg9aC5yZXBsYWNlKC9cc1xzKy9nLGAKYCksaH0sYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKHQpe3JldHVybmBOYW1lc3BhY2UgY29uZmxpY3QgZm91bmQgaW4gZ3JhbW1hci4KVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8JHt0Lm5hbWV9Pi4KVG8gcmVzb2x2ZSB0aGlzIG1ha2Ugc3VyZSBlYWNoIFRlcm1pbmFsIGFuZCBOb24tVGVybWluYWwgbmFtZXMgYXJlIHVuaXF1ZQpUaGlzIGlzIGVhc3kgdG8gYWNjb21wbGlzaCBieSB1c2luZyB0aGUgY29udmVudGlvbiB0aGF0IFRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlcgphbmQgTm9uLVRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci5gfSxidWlsZEFsdGVybmF0aW9uUHJlZml4QW1iaWd1aXR5RXJyb3IodCl7bGV0IGU9SmUodC5wcmVmaXhQYXRoLGk9Pkh1KGkpKS5qb2luKCIsICIpLHI9dC5hbHRlcm5hdGlvbi5pZHg9PT0wPyIiOnQuYWx0ZXJuYXRpb24uaWR4O3JldHVybmBBbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzOiA8JHt0LmFtYmlndWl0eUluZGljZXMuam9pbigiICwiKX0+IGR1ZSB0byBjb21tb24gbG9va2FoZWFkIHByZWZpeAppbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuClNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQ09NTU9OX1BSRUZJWApGb3IgRnVydGhlciBkZXRhaWxzLmB9LGJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih0KXtsZXQgZT1KZSh0LnByZWZpeFBhdGgsaT0+SHUoaSkpLmpvaW4oIiwgIikscj10LmFsdGVybmF0aW9uLmlkeD09PTA/IiI6dC5hbHRlcm5hdGlvbi5pZHgsbj1gQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7dC5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oIiAsIil9PiBpbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuCmA7cmV0dXJuIG49bitgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTCkZvciBGdXJ0aGVyIGRldGFpbHMuYCxufSxidWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHQpe2xldCBlPVZzKHQucmVwZXRpdGlvbik7cmV0dXJuIHQucmVwZXRpdGlvbi5pZHghPT0wJiYoZSs9dC5yZXBldGl0aW9uLmlkeCksYFRoZSByZXBldGl0aW9uIDwke2V9PiB3aXRoaW4gUnVsZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gY2FuIG5ldmVyIGNvbnN1bWUgYW55IHRva2Vucy4KVGhpcyBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuYH0sYnVpbGRUb2tlbk5hbWVFcnJvcih0KXtyZXR1cm4iZGVwcmVjYXRlZCJ9LGJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHQpe3JldHVybmBBbWJpZ3VvdXMgZW1wdHkgYWx0ZXJuYXRpdmU6IDwke3QuZW1wdHlDaG9pY2VJZHgrMX0+IGluIDxPUiR7dC5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuCk9ubHkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgbWF5IGJlIGFuIGVtcHR5IGFsdGVybmF0aXZlLmB9LGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHQpe3JldHVybmBBbiBBbHRlcm5hdGlvbiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMjU2IGFsdGVybmF0aXZlczoKPE9SJHt0LmFsdGVybmF0aW9uLmlkeH0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZS4KIGhhcyAke3QuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGgrMX0gYWx0ZXJuYXRpdmVzLmB9LGJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKHQpe2xldCBlPXQudG9wTGV2ZWxSdWxlLm5hbWUscj1KZSh0LmxlZnRSZWN1cnNpb25QYXRoLGE9PmEubmFtZSksbj1gJHtlfSAtLT4gJHtyLmNvbmNhdChbZV0pLmpvaW4oIiAtLT4gIil9YDtyZXR1cm5gTGVmdCBSZWN1cnNpb24gZm91bmQgaW4gZ3JhbW1hci4KcnVsZTogPCR7ZX0+IGNhbiBiZSBpbnZva2VkIGZyb20gaXRzZWxmIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQp3aXRob3V0IGNvbnN1bWluZyBhbnkgVG9rZW5zLiBUaGUgZ3JhbW1hciBwYXRoIHRoYXQgY2F1c2VzIHRoaXMgaXM6IAogJHtufQogVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNpb24uCnNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTExfcGFyc2VyI0xlZnRfZmFjdG9yaW5nLmB9LGJ1aWxkSW52YWxpZFJ1bGVOYW1lRXJyb3IodCl7cmV0dXJuImRlcHJlY2F0ZWQifSxidWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3IodCl7bGV0IGU7cmV0dXJuIHQudG9wTGV2ZWxSdWxlIGluc3RhbmNlb2YgdXM/ZT10LnRvcExldmVsUnVsZS5uYW1lOmU9dC50b3BMZXZlbFJ1bGUsYER1cGxpY2F0ZSBkZWZpbml0aW9uLCBydWxlOiAtPiR7ZX08LSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGdyYW1tYXI6IC0+JHt0LmdyYW1tYXJOYW1lfTwtYH19fSk7ZnVuY3Rpb24gX29lKHQsZSl7bGV0IHI9bmV3IHBNKHQsZSk7cmV0dXJuIHIucmVzb2x2ZVJlZnMoKSxyLmVycm9yc312YXIgcE0sRG9lPU4oKCk9PnsidXNlIHN0cmljdCI7VXMoKTtxdCgpO2ZzKCk7byhfb2UsInJlc29sdmVHcmFtbWFyIik7cE09Y2xhc3MgZXh0ZW5kcyBoc3tzdGF0aWN7byh0aGlzLCJHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMubmFtZVRvVG9wUnVsZT1lLHRoaXMuZXJyTXNnUHJvdmlkZXI9cix0aGlzLmVycm9ycz1bXX1yZXNvbHZlUmVmcygpe0FlKGJyKHRoaXMubmFtZVRvVG9wUnVsZSksZT0+e3RoaXMuY3VyclRvcExldmVsPWUsZS5hY2NlcHQodGhpcyl9KX12aXNpdE5vblRlcm1pbmFsKGUpe2xldCByPXRoaXMubmFtZVRvVG9wUnVsZVtlLm5vblRlcm1pbmFsTmFtZV07aWYocillLnJlZmVyZW5jZWRSdWxlPXI7ZWxzZXtsZXQgbj10aGlzLmVyck1zZ1Byb3ZpZGVyLmJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodGhpcy5jdXJyVG9wTGV2ZWwsZSk7dGhpcy5lcnJvcnMucHVzaCh7bWVzc2FnZTpuLHR5cGU6VmkuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRixydWxlTmFtZTp0aGlzLmN1cnJUb3BMZXZlbC5uYW1lLHVucmVzb2x2ZWRSZWZOYW1lOmUubm9uVGVybWluYWxOYW1lfSl9fX19KTtmdW5jdGlvbiBKayh0LGUscj1bXSl7cj1hbihyKTtsZXQgbj1bXSxpPTA7ZnVuY3Rpb24gYShsKXtyZXR1cm4gbC5jb25jYXQoYmkodCxpKzEpKX1vKGEsInJlbWFpbmluZ1BhdGhXaXRoIik7ZnVuY3Rpb24gcyhsKXtsZXQgdT1KayhhKGwpLGUscik7cmV0dXJuIG4uY29uY2F0KHUpfWZvcihvKHMsImdldEFsdGVybmF0aXZlc0ZvclByb2QiKTtyLmxlbmd0aDxlJiZpPHQubGVuZ3RoOyl7bGV0IGw9dFtpXTtpZihsIGluc3RhbmNlb2YgRG4pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2Ygb24pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2YgbG4pbj1zKGwuZGVmaW5pdGlvbik7ZWxzZSBpZihsIGluc3RhbmNlb2YgTG4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBQcih7ZGVmaW5pdGlvbjpsLmRlZmluaXRpb259KV0pO3JldHVybiBzKHUpfWVsc2UgaWYobCBpbnN0YW5jZW9mIFJuKXtsZXQgdT1bbmV3IERuKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pLG5ldyBQcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV07cmV0dXJuIHModSl9ZWxzZSBpZihsIGluc3RhbmNlb2YgVG4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBQcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV0pO249cyh1KX1lbHNlIGlmKGwgaW5zdGFuY2VvZiBQcil7bGV0IHU9bC5kZWZpbml0aW9uLmNvbmNhdChbbmV3IFByKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pXSk7bj1zKHUpfWVsc2V7aWYobCBpbnN0YW5jZW9mIHduKXJldHVybiBBZShsLmRlZmluaXRpb24sdT0+e2hyKHUuZGVmaW5pdGlvbik9PT0hMSYmKG49cyh1LmRlZmluaXRpb24pKX0pLG47aWYobCBpbnN0YW5jZW9mIEVyKXIucHVzaChsLnRlcm1pbmFsVHlwZSk7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1pKyt9cmV0dXJuIG4ucHVzaCh7cGFydGlhbFBhdGg6cixzdWZmaXhEZWY6YmkodCxpKX0pLG59ZnVuY3Rpb24gZUUodCxlLHIsbil7bGV0IGk9IkVYSVRfTk9ORV9URVJNSU5BTCIsYT1baV0scz0iRVhJVF9BTFRFUk5BVElWRSIsbD0hMSx1PWUubGVuZ3RoLGg9dS1uLTEsZj1bXSxkPVtdO2ZvcihkLnB1c2goe2lkeDotMSxkZWY6dCxydWxlU3RhY2s6W10sb2NjdXJyZW5jZVN0YWNrOltdfSk7IWhyKGQpOyl7bGV0IHA9ZC5wb3AoKTtpZihwPT09cyl7bCYmbWEoZCkuaWR4PD1oJiZkLnBvcCgpO2NvbnRpbnVlfWxldCBtPXAuZGVmLGc9cC5pZHgseT1wLnJ1bGVTdGFjayx2PXAub2NjdXJyZW5jZVN0YWNrO2lmKGhyKG0pKWNvbnRpbnVlO2xldCB4PW1bMF07aWYoeD09PWkpe2xldCBiPXtpZHg6ZyxkZWY6YmkobSkscnVsZVN0YWNrOkZ1KHkpLG9jY3VycmVuY2VTdGFjazpGdSh2KX07ZC5wdXNoKGIpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIEVyKWlmKGc8dS0xKXtsZXQgYj1nKzEsVD1lW2JdO2lmKHIoVCx4LnRlcm1pbmFsVHlwZSkpe2xldCBTPXtpZHg6YixkZWY6YmkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChTKX19ZWxzZSBpZihnPT09dS0xKWYucHVzaCh7bmV4dFRva2VuVHlwZTp4LnRlcm1pbmFsVHlwZSxuZXh0VG9rZW5PY2N1cnJlbmNlOnguaWR4LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fSksbD0hMDtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIG9uKXtsZXQgYj1hbih5KTtiLnB1c2goeC5ub25UZXJtaW5hbE5hbWUpO2xldCBUPWFuKHYpO1QucHVzaCh4LmlkeCk7bGV0IFM9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGEsYmkobSkpLHJ1bGVTdGFjazpiLG9jY3VycmVuY2VTdGFjazpUfTtkLnB1c2goUyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgbG4pe2xldCBiPXtpZHg6ZyxkZWY6YmkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IFQ9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGJpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKFQpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIExuKXtsZXQgYj1uZXcgUHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLFQ9eC5kZWZpbml0aW9uLmNvbmNhdChbYl0sYmkobSkpLFM9e2lkeDpnLGRlZjpULHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goUyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgUm4pe2xldCBiPW5ldyBFcih7dGVybWluYWxUeXBlOnguc2VwYXJhdG9yfSksVD1uZXcgUHIoe2RlZmluaXRpb246W2JdLmNvbmNhdCh4LmRlZmluaXRpb24pLGlkeDp4LmlkeH0pLFM9eC5kZWZpbml0aW9uLmNvbmNhdChbVF0sYmkobSkpLHc9e2lkeDpnLGRlZjpTLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2godyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgVG4pe2xldCBiPXtpZHg6ZyxkZWY6YmkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IFQ9bmV3IEVyKHt0ZXJtaW5hbFR5cGU6eC5zZXBhcmF0b3J9KSxTPW5ldyBQcih7ZGVmaW5pdGlvbjpbVF0uY29uY2F0KHguZGVmaW5pdGlvbiksaWR4OnguaWR4fSksdz14LmRlZmluaXRpb24uY29uY2F0KFtTXSxiaShtKSksRT17aWR4OmcsZGVmOncscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChFKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBQcil7bGV0IGI9e2lkeDpnLGRlZjpiaShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKGIpLGQucHVzaChzKTtsZXQgVD1uZXcgUHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLFM9eC5kZWZpbml0aW9uLmNvbmNhdChbVF0sYmkobSkpLHc9e2lkeDpnLGRlZjpTLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2godyl9ZWxzZSBpZih4IGluc3RhbmNlb2Ygd24pZm9yKGxldCBiPXguZGVmaW5pdGlvbi5sZW5ndGgtMTtiPj0wO2ItLSl7bGV0IFQ9eC5kZWZpbml0aW9uW2JdLFM9e2lkeDpnLGRlZjpULmRlZmluaXRpb24uY29uY2F0KGJpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKFMpLGQucHVzaChzKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBEbilkLnB1c2goe2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGJpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn0pO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIHVzKWQucHVzaChrRmUoeCxnLHksdikpO2Vsc2UgdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9cmV0dXJuIGZ9ZnVuY3Rpb24ga0ZlKHQsZSxyLG4pe2xldCBpPWFuKHIpO2kucHVzaCh0Lm5hbWUpO2xldCBhPWFuKG4pO3JldHVybiBhLnB1c2goMSkse2lkeDplLGRlZjp0LmRlZmluaXRpb24scnVsZVN0YWNrOmksb2NjdXJyZW5jZVN0YWNrOmF9fXZhciBtTSxLayxaZyxRayx5eCxaayx2eCx4eD1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7ck0oKTtWaygpO2ZzKCk7bU09Y2xhc3MgZXh0ZW5kcyBHdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE5leHRQb3NzaWJsZVRva2Vuc1dhbGtlciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnBhdGg9cix0aGlzLnBvc3NpYmxlVG9rVHlwZXM9W10sdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmZvdW5kPSExLHRoaXMuaXNBdEVuZE9mUGF0aD0hMX1zdGFydFdhbGtpbmcoKXtpZih0aGlzLmZvdW5kPSExLHRoaXMucGF0aC5ydWxlU3RhY2tbMF0hPT10aGlzLnRvcFByb2QubmFtZSl0aHJvdyBFcnJvcigiVGhlIHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgd2Fsa2VyJ3MgdG9wIFJ1bGUhIik7cmV0dXJuIHRoaXMucnVsZVN0YWNrPWFuKHRoaXMucGF0aC5ydWxlU3RhY2spLnJldmVyc2UoKSx0aGlzLm9jY3VycmVuY2VTdGFjaz1hbih0aGlzLnBhdGgub2NjdXJyZW5jZVN0YWNrKS5yZXZlcnNlKCksdGhpcy5ydWxlU3RhY2sucG9wKCksdGhpcy5vY2N1cnJlbmNlU3RhY2sucG9wKCksdGhpcy51cGRhdGVFeHBlY3RlZE5leHQoKSx0aGlzLndhbGsodGhpcy50b3BQcm9kKSx0aGlzLnBvc3NpYmxlVG9rVHlwZXN9d2FsayhlLHI9W10pe3RoaXMuZm91bmR8fHN1cGVyLndhbGsoZSxyKX13YWxrUHJvZFJlZihlLHIsbil7aWYoZS5yZWZlcmVuY2VkUnVsZS5uYW1lPT09dGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUmJmUuaWR4PT09dGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2Upe2xldCBpPXIuY29uY2F0KG4pO3RoaXMudXBkYXRlRXhwZWN0ZWROZXh0KCksdGhpcy53YWxrKGUucmVmZXJlbmNlZFJ1bGUsaSl9fXVwZGF0ZUV4cGVjdGVkTmV4dCgpe2hyKHRoaXMucnVsZVN0YWNrKT8odGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmlzQXRFbmRPZlBhdGg9ITApOih0aGlzLm5leHRQcm9kdWN0aW9uTmFtZT10aGlzLnJ1bGVTdGFjay5wb3AoKSx0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT10aGlzLm9jY3VycmVuY2VTdGFjay5wb3AoKSl9fSxLaz1jbGFzcyBleHRlbmRzIG1Ne3N0YXRpY3tvKHRoaXMsIk5leHRBZnRlclRva2VuV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlLHIpLHRoaXMucGF0aD1yLHRoaXMubmV4dFRlcm1pbmFsTmFtZT0iIix0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9MCx0aGlzLm5leHRUZXJtaW5hbE5hbWU9dGhpcy5wYXRoLmxhc3RUb2submFtZSx0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9dGhpcy5wYXRoLmxhc3RUb2tPY2N1cnJlbmNlfXdhbGtUZXJtaW5hbChlLHIsbil7aWYodGhpcy5pc0F0RW5kT2ZQYXRoJiZlLnRlcm1pbmFsVHlwZS5uYW1lPT09dGhpcy5uZXh0VGVybWluYWxOYW1lJiZlLmlkeD09PXRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSYmIXRoaXMuZm91bmQpe2xldCBpPXIuY29uY2F0KG4pLGE9bmV3IERuKHtkZWZpbml0aW9uOml9KTt0aGlzLnBvc3NpYmxlVG9rVHlwZXM9eXAoYSksdGhpcy5mb3VuZD0hMH19fSxaZz1jbGFzcyBleHRlbmRzIEd1e3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMudG9wUnVsZT1lLHRoaXMub2NjdXJyZW5jZT1yLHRoaXMucmVzdWx0PXt0b2tlbjp2b2lkIDAsb2NjdXJyZW5jZTp2b2lkIDAsaXNFbmRPZlJ1bGU6dm9pZCAwfX1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUnVsZSksdGhpcy5yZXN1bHR9fSxRaz1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVdhbGtlciIpfXdhbGtNYW55KGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueShlLHIsbil9fSx5eD1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVNlcFdhbGtlciIpfXdhbGtNYW55U2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueVNlcChlLHIsbil9fSxaaz1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVdhbGtlciIpfXdhbGtBdExlYXN0T25lKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZShlLHIsbil9fSx2eD1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlciIpfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZVNlcChlLHIsbil9fTtvKEprLCJwb3NzaWJsZVBhdGhzRnJvbSIpO28oZUUsIm5leHRQb3NzaWJsZVRva2Vuc0FmdGVyIik7byhrRmUsImV4cGFuZFRvcExldmVsUnVsZSIpfSk7ZnVuY3Rpb24gYngodCl7aWYodCBpbnN0YW5jZW9mIGxufHx0PT09Ik9wdGlvbiIpcmV0dXJuIFFuLk9QVElPTjtpZih0IGluc3RhbmNlb2YgUHJ8fHQ9PT0iUmVwZXRpdGlvbiIpcmV0dXJuIFFuLlJFUEVUSVRJT047aWYodCBpbnN0YW5jZW9mIExufHx0PT09IlJlcGV0aXRpb25NYW5kYXRvcnkiKXJldHVybiBRbi5SRVBFVElUSU9OX01BTkRBVE9SWTtpZih0IGluc3RhbmNlb2YgUm58fHQ9PT0iUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiKXJldHVybiBRbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUjtpZih0IGluc3RhbmNlb2YgVG58fHQ9PT0iUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiKXJldHVybiBRbi5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SO2lmKHQgaW5zdGFuY2VvZiB3bnx8dD09PSJBbHRlcm5hdGlvbiIpcmV0dXJuIFFuLkFMVEVSTkFUSU9OO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIHJFKHQpe2xldHtvY2N1cnJlbmNlOmUscnVsZTpyLHByb2RUeXBlOm4sbWF4TG9va2FoZWFkOml9PXQsYT1ieChuKTtyZXR1cm4gYT09PVFuLkFMVEVSTkFUSU9OP0pnKGUscixpKTplMShlLHIsYSxpKX1mdW5jdGlvbiBSb2UodCxlLHIsbixpLGEpe2xldCBzPUpnKHQsZSxyKSxsPUJvZShzKT9qZzpWdTtyZXR1cm4gYShzLG4sbCxpKX1mdW5jdGlvbiBOb2UodCxlLHIsbixpLGEpe2xldCBzPWUxKHQsZSxpLHIpLGw9Qm9lKHMpP2pnOlZ1O3JldHVybiBhKHNbMF0sbCxuKX1mdW5jdGlvbiBNb2UodCxlLHIsbil7bGV0IGk9dC5sZW5ndGgsYT1QYSh0LHM9PlBhKHMsbD0+bC5sZW5ndGg9PT0xKSk7aWYoZSlyZXR1cm4gZnVuY3Rpb24ocyl7bGV0IGw9SmUocyx1PT51LkdBVEUpO2ZvcihsZXQgdT0wO3U8aTt1Kyspe2xldCBoPXRbdV0sZj1oLmxlbmd0aCxkPWxbdV07aWYoIShkIT09dm9pZCAwJiZkLmNhbGwodGhpcyk9PT0hMSkpZTpmb3IobGV0IHA9MDtwPGY7cCsrKXtsZXQgbT1oW3BdLGc9bS5sZW5ndGg7Zm9yKGxldCB5PTA7eTxnO3krKyl7bGV0IHY9dGhpcy5MQSh5KzEpO2lmKHIodixtW3ldKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHV9fX07aWYoYSYmIW4pe2xldCBzPUplKHQsdT0+cXIodSkpLGw9WHIocywodSxoLGYpPT4oQWUoaCxkPT57QnQodSxkLnRva2VuVHlwZUlkeCl8fCh1W2QudG9rZW5UeXBlSWR4XT1mKSxBZShkLmNhdGVnb3J5TWF0Y2hlcyxwPT57QnQodSxwKXx8KHVbcF09Zil9KX0pLHUpLHt9KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgdT10aGlzLkxBKDEpO3JldHVybiBsW3UudG9rZW5UeXBlSWR4XX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtmb3IobGV0IHM9MDtzPGk7cysrKXtsZXQgbD10W3NdLHU9bC5sZW5ndGg7ZTpmb3IobGV0IGg9MDtoPHU7aCsrKXtsZXQgZj1sW2hdLGQ9Zi5sZW5ndGg7Zm9yKGxldCBwPTA7cDxkO3ArKyl7bGV0IG09dGhpcy5MQShwKzEpO2lmKHIobSxmW3BdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHN9fX19ZnVuY3Rpb24gSW9lKHQsZSxyKXtsZXQgbj1QYSh0LGE9PmEubGVuZ3RoPT09MSksaT10Lmxlbmd0aDtpZihuJiYhcil7bGV0IGE9cXIodCk7aWYoYS5sZW5ndGg9PT0xJiZocihhWzBdLmNhdGVnb3J5TWF0Y2hlcykpe2xldCBsPWFbMF0udG9rZW5UeXBlSWR4O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeD09PWx9fWVsc2V7bGV0IHM9WHIoYSwobCx1LGgpPT4obFt1LnRva2VuVHlwZUlkeF09ITAsQWUodS5jYXRlZ29yeU1hdGNoZXMsZj0+e2xbZl09ITB9KSxsKSxbXSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGw9dGhpcy5MQSgxKTtyZXR1cm4gc1tsLnRva2VuVHlwZUlkeF09PT0hMH19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7ZTpmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9dGhpcy5MQSh1KzEpO2lmKGUoaCxzW3VdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIExvZSh0KXtsZXQgZT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfWZ1bmN0aW9uIGdNKHQpe2xldCBlPVsiIl07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl0saT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpLnB1c2gocysiXyIrbi50b2tlblR5cGVJZHgpO2ZvcihsZXQgbD0wO2w8bi5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoO2wrKyl7bGV0IHU9Il8iK24uY2F0ZWdvcnlNYXRjaGVzW2xdO2kucHVzaChzK3UpfX1lPWl9cmV0dXJuIGV9ZnVuY3Rpb24gRUZlKHQsZSxyKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7aWYobj09PXIpY29udGludWU7bGV0IGk9dFtuXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpZihpW3NdPT09ITApcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIE9vZSh0LGUpe2xldCByPUplKHQscz0+SmsoW3NdLDEpKSxuPUxvZShyLmxlbmd0aCksaT1KZShyLHM9PntsZXQgbD17fTtyZXR1cm4gQWUocyx1PT57bGV0IGg9Z00odS5wYXJ0aWFsUGF0aCk7QWUoaCxmPT57bFtmXT0hMH0pfSksbH0pLGE9cjtmb3IobGV0IHM9MTtzPD1lO3MrKyl7bGV0IGw9YTthPUxvZShsLmxlbmd0aCk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBoPWxbdV07Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2xldCBkPWhbZl0ucGFydGlhbFBhdGgscD1oW2ZdLnN1ZmZpeERlZixtPWdNKGQpO2lmKEVGZShpLG0sdSl8fGhyKHApfHxkLmxlbmd0aD09PWUpe2xldCB5PW5bdV07aWYobkUoeSxkKT09PSExKXt5LnB1c2goZCk7Zm9yKGxldCB2PTA7djxtLmxlbmd0aDt2Kyspe2xldCB4PW1bdl07aVt1XVt4XT0hMH19fWVsc2V7bGV0IHk9SmsocCxzKzEsZCk7YVt1XT1hW3VdLmNvbmNhdCh5KSxBZSh5LHY9PntsZXQgeD1nTSh2LnBhcnRpYWxQYXRoKTtBZSh4LGI9PntpW3VdW2JdPSEwfSl9KX19fX1yZXR1cm4gbn1mdW5jdGlvbiBKZyh0LGUscixuKXtsZXQgaT1uZXcgdEUodCxRbi5BTFRFUk5BVElPTixuKTtyZXR1cm4gZS5hY2NlcHQoaSksT29lKGkucmVzdWx0LHIpfWZ1bmN0aW9uIGUxKHQsZSxyLG4pe2xldCBpPW5ldyB0RSh0LHIpO2UuYWNjZXB0KGkpO2xldCBhPWkucmVzdWx0LGw9bmV3IHlNKGUsdCxyKS5zdGFydFdhbGtpbmcoKSx1PW5ldyBEbih7ZGVmaW5pdGlvbjphfSksaD1uZXcgRG4oe2RlZmluaXRpb246bH0pO3JldHVybiBPb2UoW3UsaF0sbil9ZnVuY3Rpb24gbkUodCxlKXtlOmZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgpe2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldLHM9bltpXTtpZigoYT09PXN8fHMuY2F0ZWdvcnlNYXRjaGVzTWFwW2EudG9rZW5UeXBlSWR4XSE9PXZvaWQgMCk9PT0hMSljb250aW51ZSBlfXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBQb2UodCxlKXtyZXR1cm4gdC5sZW5ndGg8ZS5sZW5ndGgmJlBhKHQsKHIsbik9PntsZXQgaT1lW25dO3JldHVybiByPT09aXx8aS5jYXRlZ29yeU1hdGNoZXNNYXBbci50b2tlblR5cGVJZHhdfSl9ZnVuY3Rpb24gQm9lKHQpe3JldHVybiBQYSh0LGU9PlBhKGUscj0+UGEocixuPT5ocihuLmNhdGVnb3J5TWF0Y2hlcykpKSl9dmFyIFFuLHlNLHRFLHQxPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTt4eCgpO1ZrKCk7eHAoKTtmcygpOyhmdW5jdGlvbih0KXt0W3QuT1BUSU9OPTBdPSJPUFRJT04iLHRbdC5SRVBFVElUSU9OPTFdPSJSRVBFVElUSU9OIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUlk9Ml09IlJFUEVUSVRJT05fTUFOREFUT1JZIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1I9M109IlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SIix0W3QuUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUj00XT0iUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUiIsdFt0LkFMVEVSTkFUSU9OPTVdPSJBTFRFUk5BVElPTiJ9KShRbnx8KFFuPXt9KSk7byhieCwiZ2V0UHJvZFR5cGUiKTtvKHJFLCJnZXRMb29rYWhlYWRQYXRocyIpO28oUm9lLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPciIpO28oTm9lLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPcHRpb25hbFByb2QiKTtvKE1vZSwiYnVpbGRBbHRlcm5hdGl2ZXNMb29rQWhlYWRGdW5jIik7byhJb2UsImJ1aWxkU2luZ2xlQWx0ZXJuYXRpdmVMb29rYWhlYWRGdW5jdGlvbiIpO3lNPWNsYXNzIGV4dGVuZHMgR3V7c3RhdGlje28odGhpcywiUmVzdERlZmluaXRpb25GaW5kZXJXYWxrZXIiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnRhcmdldE9jY3VycmVuY2U9cix0aGlzLnRhcmdldFByb2RUeXBlPW59c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMucmVzdERlZn1jaGVja0lzVGFyZ2V0KGUscixuLGkpe3JldHVybiBlLmlkeD09PXRoaXMudGFyZ2V0T2NjdXJyZW5jZSYmdGhpcy50YXJnZXRQcm9kVHlwZT09PXI/KHRoaXMucmVzdERlZj1uLmNvbmNhdChpKSwhMCk6ITF9d2Fsa09wdGlvbihlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uT1BUSU9OLHIsbil8fHN1cGVyLndhbGtPcHRpb24oZSxyLG4pfXdhbGtBdExlYXN0T25lKGUscixuKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5SRVBFVElUSU9OX01BTkRBVE9SWSxyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnkoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFFuLlJFUEVUSVRJT04scixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnlTZXAoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFFuLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9fSx0RT1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIkluc2lkZURlZmluaXRpb25GaW5kZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKCksdGhpcy50YXJnZXRPY2N1cnJlbmNlPWUsdGhpcy50YXJnZXRQcm9kVHlwZT1yLHRoaXMudGFyZ2V0UmVmPW4sdGhpcy5yZXN1bHQ9W119Y2hlY2tJc1RhcmdldChlLHIpe2UuaWR4PT09dGhpcy50YXJnZXRPY2N1cnJlbmNlJiZ0aGlzLnRhcmdldFByb2RUeXBlPT09ciYmKHRoaXMudGFyZ2V0UmVmPT09dm9pZCAwfHxlPT09dGhpcy50YXJnZXRSZWYpJiYodGhpcy5yZXN1bHQ9ZS5kZWZpbml0aW9uKX12aXNpdE9wdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5PUFRJT04pfXZpc2l0UmVwZXRpdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5SRVBFVElUSU9OKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUlkpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUil9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5BTFRFUk5BVElPTil9fTtvKExvZSwiaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMiKTtvKGdNLCJwYXRoVG9IYXNoS2V5cyIpO28oRUZlLCJpc1VuaXF1ZVByZWZpeEhhc2giKTtvKE9vZSwibG9va0FoZWFkU2VxdWVuY2VGcm9tQWx0ZXJuYXRpdmVzIik7byhKZywiZ2V0TG9va2FoZWFkUGF0aHNGb3JPciIpO28oZTEsImdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kIik7byhuRSwiY29udGFpbnNQYXRoIik7byhQb2UsImlzU3RyaWN0UHJlZml4T2ZQYXRoIik7byhCb2UsImFyZVRva2VuQ2F0ZWdvcmllc05vdFVzZWQiKX0pO2Z1bmN0aW9uIEZvZSh0KXtsZXQgZT10Lmxvb2thaGVhZFN0cmF0ZWd5LnZhbGlkYXRlKHtydWxlczp0LnJ1bGVzLHRva2VuVHlwZXM6dC50b2tlblR5cGVzLGdyYW1tYXJOYW1lOnQuZ3JhbW1hck5hbWV9KTtyZXR1cm4gSmUoZSxyPT5PYmplY3QuYXNzaWduKHt0eXBlOlZpLkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTn0scikpfWZ1bmN0aW9uICRvZSh0LGUscixuKXtsZXQgaT1nYSh0LHU9PlNGZSh1LHIpKSxhPVJGZSh0LGUscikscz1nYSh0LHU9Pl9GZSh1LHIpKSxsPWdhKHQsdT0+QUZlKHUsdCxuLHIpKTtyZXR1cm4gaS5jb25jYXQoYSxzLGwpfWZ1bmN0aW9uIFNGZSh0LGUpe2xldCByPW5ldyB2TTt0LmFjY2VwdChyKTtsZXQgbj1yLmFsbFByb2R1Y3Rpb25zLGk9eVIobixDRmUpLGE9enMoaSxsPT5sLmxlbmd0aD4xKTtyZXR1cm4gSmUoYnIoYSksbD0+e2xldCB1PWlhKGwpLGg9ZS5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IodCxsKSxmPVZzKHUpLGQ9e21lc3NhZ2U6aCx0eXBlOlZpLkRVUExJQ0FURV9QUk9EVUNUSU9OUyxydWxlTmFtZTp0Lm5hbWUsZHNsTmFtZTpmLG9jY3VycmVuY2U6dS5pZHh9LHA9em9lKHUpO3JldHVybiBwJiYoZC5wYXJhbWV0ZXI9cCksZH0pfWZ1bmN0aW9uIENGZSh0KXtyZXR1cm5gJHtWcyh0KX1fI18ke3QuaWR4fV8jXyR7em9lKHQpfWB9ZnVuY3Rpb24gem9lKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXI/dC50ZXJtaW5hbFR5cGUubmFtZTp0IGluc3RhbmNlb2Ygb24/dC5ub25UZXJtaW5hbE5hbWU6IiJ9ZnVuY3Rpb24gQUZlKHQsZSxyLG4pe2xldCBpPVtdO2lmKFhyKGUsKHMsbCk9PmwubmFtZT09PXQubmFtZT9zKzE6cywwKT4xKXtsZXQgcz1uLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOnQsZ3JhbW1hck5hbWU6cn0pO2kucHVzaCh7bWVzc2FnZTpzLHR5cGU6VmkuRFVQTElDQVRFX1JVTEVfTkFNRSxydWxlTmFtZTp0Lm5hbWV9KX1yZXR1cm4gaX1mdW5jdGlvbiBHb2UodCxlLHIpe2xldCBuPVtdLGk7cmV0dXJuIFhuKGUsdCl8fChpPWBJbnZhbGlkIHJ1bGUgb3ZlcnJpZGUsIHJ1bGU6IC0+JHt0fTwtIGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHRoZSBncmFtbWFyOiAtPiR7cn08LWFzIGl0IGlzIG5vdCBkZWZpbmVkIGluIGFueSBvZiB0aGUgc3VwZXIgZ3JhbW1hcnMgYCxuLnB1c2goe21lc3NhZ2U6aSx0eXBlOlZpLklOVkFMSURfUlVMRV9PVkVSUklERSxydWxlTmFtZTp0fSkpLG59ZnVuY3Rpb24gYk0odCxlLHIsbj1bXSl7bGV0IGk9W10sYT1pRShlLmRlZmluaXRpb24pO2lmKGhyKGEpKXJldHVybltdO3tsZXQgcz10Lm5hbWU7WG4oYSx0KSYmaS5wdXNoKHttZXNzYWdlOnIuYnVpbGRMZWZ0UmVjdXJzaW9uRXJyb3Ioe3RvcExldmVsUnVsZTp0LGxlZnRSZWN1cnNpb25QYXRoOm59KSx0eXBlOlZpLkxFRlRfUkVDVVJTSU9OLHJ1bGVOYW1lOnN9KTtsZXQgdT1hZihhLG4uY29uY2F0KFt0XSkpLGg9Z2EodSxmPT57bGV0IGQ9YW4obik7cmV0dXJuIGQucHVzaChmKSxiTSh0LGYscixkKX0pO3JldHVybiBpLmNvbmNhdChoKX19ZnVuY3Rpb24gaUUodCl7bGV0IGU9W107aWYoaHIodCkpcmV0dXJuIGU7bGV0IHI9aWEodCk7aWYociBpbnN0YW5jZW9mIG9uKWUucHVzaChyLnJlZmVyZW5jZWRSdWxlKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBEbnx8ciBpbnN0YW5jZW9mIGxufHxyIGluc3RhbmNlb2YgTG58fHIgaW5zdGFuY2VvZiBSbnx8ciBpbnN0YW5jZW9mIFRufHxyIGluc3RhbmNlb2YgUHIpZT1lLmNvbmNhdChpRShyLmRlZmluaXRpb24pKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiB3billPXFyKEplKHIuZGVmaW5pdGlvbixhPT5pRShhLmRlZmluaXRpb24pKSk7ZWxzZSBpZighKHIgaW5zdGFuY2VvZiBFcikpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7bGV0IG49Z3AociksaT10Lmxlbmd0aD4xO2lmKG4mJmkpe2xldCBhPWJpKHQpO3JldHVybiBlLmNvbmNhdChpRShhKSl9ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBWb2UodCxlKXtsZXQgcj1uZXcgVHg7dC5hY2NlcHQocik7bGV0IG49ci5hbHRlcm5hdGlvbnM7cmV0dXJuIGdhKG4sYT0+e2xldCBzPUZ1KGEuZGVmaW5pdGlvbik7cmV0dXJuIGdhKHMsKGwsdSk9PntsZXQgaD1lRShbbF0sW10sVnUsMSk7cmV0dXJuIGhyKGgpP1t7bWVzc2FnZTplLmJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphLGVtcHR5Q2hvaWNlSWR4OnV9KSx0eXBlOlZpLk5PTkVfTEFTVF9FTVBUWV9BTFQscnVsZU5hbWU6dC5uYW1lLG9jY3VycmVuY2U6YS5pZHgsYWx0ZXJuYXRpdmU6dSsxfV06W119KX0pfWZ1bmN0aW9uIFVvZSh0LGUscil7bGV0IG49bmV3IFR4O3QuYWNjZXB0KG4pO2xldCBpPW4uYWx0ZXJuYXRpb25zO3JldHVybiBpPXNmKGkscz0+cy5pZ25vcmVBbWJpZ3VpdGllcz09PSEwKSxnYShpLHM9PntsZXQgbD1zLmlkeCx1PXMubWF4TG9va2FoZWFkfHxlLGg9SmcobCx0LHUscyksZj1ERmUoaCxzLHQsciksZD1MRmUoaCxzLHQscik7cmV0dXJuIGYuY29uY2F0KGQpfSl9ZnVuY3Rpb24gX0ZlKHQsZSl7bGV0IHI9bmV3IFR4O3QuYWNjZXB0KHIpO2xldCBuPXIuYWx0ZXJuYXRpb25zO3JldHVybiBnYShuLGE9PmEuZGVmaW5pdGlvbi5sZW5ndGg+MjU1P1t7bWVzc2FnZTplLmJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphfSksdHlwZTpWaS5UT09fTUFOWV9BTFRTLHJ1bGVOYW1lOnQubmFtZSxvY2N1cnJlbmNlOmEuaWR4fV06W10pfWZ1bmN0aW9uIEhvZSh0LGUscil7bGV0IG49W107cmV0dXJuIEFlKHQsaT0+e2xldCBhPW5ldyB4TTtpLmFjY2VwdChhKTtsZXQgcz1hLmFsbFByb2R1Y3Rpb25zO0FlKHMsbD0+e2xldCB1PWJ4KGwpLGg9bC5tYXhMb29rYWhlYWR8fGUsZj1sLmlkeCxwPWUxKGYsaSx1LGgpWzBdO2lmKGhyKHFyKHApKSl7bGV0IG09ci5idWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6aSxyZXBldGl0aW9uOmx9KTtuLnB1c2goe21lc3NhZ2U6bSx0eXBlOlZpLk5PX05PTl9FTVBUWV9MT09LQUhFQUQscnVsZU5hbWU6aS5uYW1lfSl9fSl9KSxufWZ1bmN0aW9uIERGZSh0LGUscixuKXtsZXQgaT1bXSxhPVhyKHQsKGwsdSxoKT0+KGUuZGVmaW5pdGlvbltoXS5pZ25vcmVBbWJpZ3VpdGllcz09PSEwfHxBZSh1LGY9PntsZXQgZD1baF07QWUodCwocCxtKT0+e2ghPT1tJiZuRShwLGYpJiZlLmRlZmluaXRpb25bbV0uaWdub3JlQW1iaWd1aXRpZXMhPT0hMCYmZC5wdXNoKG0pfSksZC5sZW5ndGg+MSYmIW5FKGksZikmJihpLnB1c2goZiksbC5wdXNoKHthbHRzOmQscGF0aDpmfSkpfSksbCksW10pO3JldHVybiBKZShhLGw9PntsZXQgdT1KZShsLmFsdHMsZj0+ZisxKTtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOnUscHJlZml4UGF0aDpsLnBhdGh9KSx0eXBlOlZpLkFNQklHVU9VU19BTFRTLHJ1bGVOYW1lOnIubmFtZSxvY2N1cnJlbmNlOmUuaWR4LGFsdGVybmF0aXZlczpsLmFsdHN9fSl9ZnVuY3Rpb24gTEZlKHQsZSxyLG4pe2xldCBpPVhyKHQsKHMsbCx1KT0+e2xldCBoPUplKGwsZj0+KHtpZHg6dSxwYXRoOmZ9KSk7cmV0dXJuIHMuY29uY2F0KGgpfSxbXSk7cmV0dXJuIEFjKGdhKGkscz0+e2lmKGUuZGVmaW5pdGlvbltzLmlkeF0uaWdub3JlQW1iaWd1aXRpZXM9PT0hMClyZXR1cm5bXTtsZXQgdT1zLmlkeCxoPXMucGF0aCxmPVlyKGkscD0+ZS5kZWZpbml0aW9uW3AuaWR4XS5pZ25vcmVBbWJpZ3VpdGllcyE9PSEwJiZwLmlkeDx1JiZQb2UocC5wYXRoLGgpKTtyZXR1cm4gSmUoZixwPT57bGV0IG09W3AuaWR4KzEsdSsxXSxnPWUuaWR4PT09MD8iIjplLmlkeDtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25QcmVmaXhBbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOm0scHJlZml4UGF0aDpwLnBhdGh9KSx0eXBlOlZpLkFNQklHVU9VU19QUkVGSVhfQUxUUyxydWxlTmFtZTpyLm5hbWUsb2NjdXJyZW5jZTpnLGFsdGVybmF0aXZlczptfX0pfSkpfWZ1bmN0aW9uIFJGZSh0LGUscil7bGV0IG49W10saT1KZShlLGE9PmEubmFtZSk7cmV0dXJuIEFlKHQsYT0+e2xldCBzPWEubmFtZTtpZihYbihpLHMpKXtsZXQgbD1yLmJ1aWxkTmFtZXNwYWNlQ29uZmxpY3RFcnJvcihhKTtuLnB1c2goe21lc3NhZ2U6bCx0eXBlOlZpLkNPTkZMSUNUX1RPS0VOU19SVUxFU19OQU1FU1BBQ0UscnVsZU5hbWU6c30pfX0pLG59dmFyIHZNLFR4LHhNLHd4PU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtVcygpO2ZzKCk7dDEoKTt4eCgpO3hwKCk7byhGb2UsInZhbGlkYXRlTG9va2FoZWFkIik7bygkb2UsInZhbGlkYXRlR3JhbW1hciIpO28oU0ZlLCJ2YWxpZGF0ZUR1cGxpY2F0ZVByb2R1Y3Rpb25zIik7byhDRmUsImlkZW50aWZ5UHJvZHVjdGlvbkZvckR1cGxpY2F0ZXMiKTtvKHpvZSwiZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQiKTt2TT1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIk9jY3VycmVuY2VWYWxpZGF0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXROb25UZXJtaW5hbChlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRPcHRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdEFsdGVybmF0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFRlcm1pbmFsKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX19O28oQUZlLCJ2YWxpZGF0ZVJ1bGVEb2VzTm90QWxyZWFkeUV4aXN0Iik7byhHb2UsInZhbGlkYXRlUnVsZUlzT3ZlcnJpZGRlbiIpO28oYk0sInZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uIik7byhpRSwiZ2V0Rmlyc3ROb25lVGVybWluYWwiKTtUeD1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIk9yQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWx0ZXJuYXRpb25zPVtdfXZpc2l0QWx0ZXJuYXRpb24oZSl7dGhpcy5hbHRlcm5hdGlvbnMucHVzaChlKX19O28oVm9lLCJ2YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZSIpO28oVW9lLCJ2YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzIik7eE09Y2xhc3MgZXh0ZW5kcyBoc3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfX07byhfRmUsInZhbGlkYXRlVG9vTWFueUFsdHMiKTtvKEhvZSwidmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoIik7byhERmUsImNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMiKTtvKExGZSwiY2hlY2tQcmVmaXhBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyIpO28oUkZlLCJjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSIpfSk7ZnVuY3Rpb24gV29lKHQpe2xldCBlPW5mKHQse2Vyck1zZ1Byb3ZpZGVyOkFvZX0pLHI9e307cmV0dXJuIEFlKHQucnVsZXMsbj0+e3Jbbi5uYW1lXT1ufSksX29lKHIsZS5lcnJNc2dQcm92aWRlcil9ZnVuY3Rpb24gcW9lKHQpe3JldHVybiB0PW5mKHQse2Vyck1zZ1Byb3ZpZGVyOiRsfSksJG9lKHQucnVsZXMsdC50b2tlblR5cGVzLHQuZXJyTXNnUHJvdmlkZXIsdC5ncmFtbWFyTmFtZSl9dmFyIFlvZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7RG9lKCk7d3goKTtRZygpO28oV29lLCJyZXNvbHZlR3JhbW1hciIpO28ocW9lLCJ2YWxpZGF0ZUdyYW1tYXIiKX0pO2Z1bmN0aW9uIHBmKHQpe3JldHVybiBYbihab2UsdC5uYW1lKX12YXIgWG9lLGpvZSxLb2UsUW9lLFpvZSxyMSxUcCxreCxFeCxTeCxuMT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7WG9lPSJNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24iLGpvZT0iTm9WaWFibGVBbHRFeGNlcHRpb24iLEtvZT0iRWFybHlFeGl0RXhjZXB0aW9uIixRb2U9Ik5vdEFsbElucHV0UGFyc2VkRXhjZXB0aW9uIixab2U9W1hvZSxqb2UsS29lLFFvZV07T2JqZWN0LmZyZWV6ZShab2UpO28ocGYsImlzUmVjb2duaXRpb25FeGNlcHRpb24iKTtyMT1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlJlY29nbml0aW9uRXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuPXIsdGhpcy5yZXN5bmNlZFRva2Vucz1bXSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9fSxUcD1jbGFzcyBleHRlbmRzIHIxe3N0YXRpY3tvKHRoaXMsIk1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlLHIpLHRoaXMucHJldmlvdXNUb2tlbj1uLHRoaXMubmFtZT1Yb2V9fSxreD1jbGFzcyBleHRlbmRzIHIxe3N0YXRpY3tvKHRoaXMsIk5vVmlhYmxlQWx0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPWpvZX19LEV4PWNsYXNzIGV4dGVuZHMgcjF7c3RhdGlje28odGhpcywiTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUsciksdGhpcy5uYW1lPVFvZX19LFN4PWNsYXNzIGV4dGVuZHMgcjF7c3RhdGlje28odGhpcywiRWFybHlFeGl0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPUtvZX19fSk7ZnVuY3Rpb24gTkZlKHQsZSxyLG4saSxhLHMpe2xldCBsPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKG4saSksdT10aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF07aWYodT09PXZvaWQgMCl7bGV0IHA9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksbT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3BdO3U9bmV3IGEobSxpKS5zdGFydFdhbGtpbmcoKSx0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF09dX1sZXQgaD11LnRva2VuLGY9dS5vY2N1cnJlbmNlLGQ9dS5pc0VuZE9mUnVsZTt0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSYmZCYmaD09PXZvaWQgMCYmKGg9Zm8sZj0xKSwhKGg9PT12b2lkIDB8fGY9PT12b2lkIDApJiZ0aGlzLnNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChoLGYscykmJnRoaXMudHJ5SW5SZXBldGl0aW9uUmVjb3ZlcnkodCxlLHIsaCl9dmFyIFRNLGtNLHdNLGFFLEVNPU4oKCk9PnsidXNlIHN0cmljdCI7YnAoKTtxdCgpO24xKCk7bk0oKTtVcygpO1RNPXt9LGtNPSJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIsd009Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT1rTX19LGFFPWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlY292ZXJhYmxlIil9aW5pdFJlY292ZXJhYmxlKGUpe3RoaXMuZmlyc3RBZnRlclJlcE1hcD17fSx0aGlzLnJlc3luY0ZvbGxvd3M9e30sdGhpcy5yZWNvdmVyeUVuYWJsZWQ9QnQoZSwicmVjb3ZlcnlFbmFibGVkIik/ZS5yZWNvdmVyeUVuYWJsZWQ6ZHMucmVjb3ZlcnlFbmFibGVkLHRoaXMucmVjb3ZlcnlFbmFibGVkJiYodGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3Zlcnk9TkZlKX1nZXRUb2tlblRvSW5zZXJ0KGUpe2xldCByPVd1KGUsIiIsTmFOLE5hTixOYU4sTmFOLE5hTixOYU4pO3JldHVybiByLmlzSW5zZXJ0ZWRJblJlY292ZXJ5PSEwLHJ9Y2FuVG9rZW5UeXBlQmVJbnNlcnRlZEluUmVjb3ZlcnkoZSl7cmV0dXJuITB9Y2FuVG9rZW5UeXBlQmVEZWxldGVkSW5SZWNvdmVyeShlKXtyZXR1cm4hMH10cnlJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpKXtsZXQgYT10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKSxzPXRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpLGw9W10sdT0hMSxoPXRoaXMuTEEoMSksZj10aGlzLkxBKDEpLGQ9bygoKT0+e2xldCBwPXRoaXMuTEEoMCksbT10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmksYWN0dWFsOmgscHJldmlvdXM6cCxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKX0pLGc9bmV3IFRwKG0saCx0aGlzLkxBKDApKTtnLnJlc3luY2VkVG9rZW5zPUZ1KGwpLHRoaXMuU0FWRV9FUlJPUihnKX0sImdlbmVyYXRlRXJyb3JNZXNzYWdlIik7Zm9yKDshdTspaWYodGhpcy50b2tlbk1hdGNoZXIoZixpKSl7ZCgpO3JldHVybn1lbHNlIGlmKG4uY2FsbCh0aGlzKSl7ZCgpLGUuYXBwbHkodGhpcyxyKTtyZXR1cm59ZWxzZSB0aGlzLnRva2VuTWF0Y2hlcihmLGEpP3U9ITA6KGY9dGhpcy5TS0lQX1RPS0VOKCksdGhpcy5hZGRUb1Jlc3luY1Rva2VucyhmLGwpKTt0aGlzLmltcG9ydExleGVyU3RhdGUocyl9c2hvdWxkSW5SZXBldGl0aW9uUmVjb3ZlcnlCZVRyaWVkKGUscixuKXtyZXR1cm4hKG49PT0hMXx8dGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSxlKXx8dGhpcy5pc0JhY2tUcmFja2luZygpfHx0aGlzLmNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHRoaXMuZ2V0Rm9sbG93c0ZvckluUnVsZVJlY292ZXJ5KGUscikpKX1nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKXtsZXQgbj10aGlzLmdldEN1cnJlbnRHcmFtbWFyUGF0aChlLHIpO3JldHVybiB0aGlzLmdldE5leHRQb3NzaWJsZVRva2VuVHlwZXMobil9dHJ5SW5SdWxlUmVjb3ZlcnkoZSxyKXtpZih0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKSlyZXR1cm4gdGhpcy5nZXRUb2tlblRvSW5zZXJ0KGUpO2lmKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGUpKXtsZXQgbj10aGlzLlNLSVBfVE9LRU4oKTtyZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKSxufXRocm93IG5ldyB3TSgic2FkIHNhZCBwYW5kYSIpfWNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHIpe3JldHVybiB0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKXx8dGhpcy5jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuRGVsZXRpb24oZSl9Y2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihlLHIpe2lmKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGUpfHxocihyKSlyZXR1cm4hMTtsZXQgbj10aGlzLkxBKDEpO3JldHVybiBscyhyLGE9PnRoaXMudG9rZW5NYXRjaGVyKG4sYSkpIT09dm9pZCAwfWNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihlKXtyZXR1cm4gdGhpcy5jYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KGUpP3RoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMiksZSk6ITF9aXNJbkN1cnJlbnRSdWxlUmVTeW5jU2V0KGUpe2xldCByPXRoaXMuZ2V0Q3VyckZvbGxvd0tleSgpLG49dGhpcy5nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KHIpO3JldHVybiBYbihuLGUpfWZpbmRSZVN5bmNUb2tlblR5cGUoKXtsZXQgZT10aGlzLmZsYXR0ZW5Gb2xsb3dTZXQoKSxyPXRoaXMuTEEoMSksbj0yO2Zvcig7Oyl7bGV0IGk9bHMoZSxhPT5neChyLGEpKTtpZihpIT09dm9pZCAwKXJldHVybiBpO3I9dGhpcy5MQShuKSxuKyt9fWdldEN1cnJGb2xsb3dLZXkoKXtpZih0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSlyZXR1cm4gVE07bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCkscj10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKSxuPXRoaXMuZ2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtyZXR1cm57cnVsZU5hbWU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKSxpZHhJbkNhbGxpbmdSdWxlOnIsaW5SdWxlOnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUobil9fWJ1aWxkRnVsbEZvbGxvd0tleVN0YWNrKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLLHI9dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7cmV0dXJuIEplKGUsKG4saSk9Pmk9PT0wP1RNOntydWxlTmFtZTp0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKG4pLGlkeEluQ2FsbGluZ1J1bGU6cltpXSxpblJ1bGU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlW2ktMV0pfSl9ZmxhdHRlbkZvbGxvd1NldCgpe2xldCBlPUplKHRoaXMuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKSxyPT50aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkocikpO3JldHVybiBxcihlKX1nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KGUpe2lmKGU9PT1UTSlyZXR1cm5bZm9dO2xldCByPWUucnVsZU5hbWUrZS5pZHhJbkNhbGxpbmdSdWxlK1VrK2UuaW5SdWxlO3JldHVybiB0aGlzLnJlc3luY0ZvbGxvd3Nbcl19YWRkVG9SZXN5bmNUb2tlbnMoZSxyKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIoZSxmbyl8fHIucHVzaChlKSxyfXJlU3luY1RvKGUpe2xldCByPVtdLG49dGhpcy5MQSgxKTtmb3IoO3RoaXMudG9rZW5NYXRjaGVyKG4sZSk9PT0hMTspbj10aGlzLlNLSVBfVE9LRU4oKSx0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKG4scik7cmV0dXJuIEZ1KHIpfWF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpLGEscyxsKXt9Z2V0Q3VycmVudEdyYW1tYXJQYXRoKGUscil7bGV0IG49dGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCksaT1hbih0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyk7cmV0dXJue3J1bGVTdGFjazpuLG9jY3VycmVuY2VTdGFjazppLGxhc3RUb2s6ZSxsYXN0VG9rT2NjdXJyZW5jZTpyfX1nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCl7cmV0dXJuIEplKHRoaXMuUlVMRV9TVEFDSyxlPT50aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGUpKX19O28oTkZlLCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkiKX0pO2Z1bmN0aW9uIHNFKHQsZSxyKXtyZXR1cm4gcnxlfHR9dmFyIG9FPU4oKCk9PnsidXNlIHN0cmljdCI7byhzRSwiZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkIil9KTt2YXIgWXUsU009TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1FnKCk7VXMoKTt3eCgpO3QxKCk7WXU9Y2xhc3N7c3RhdGlje28odGhpcywiTExrTG9va2FoZWFkU3RyYXRlZ3kiKX1jb25zdHJ1Y3RvcihlKXt2YXIgcjt0aGlzLm1heExvb2thaGVhZD0ocj1lPy5tYXhMb29rYWhlYWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOmRzLm1heExvb2thaGVhZH12YWxpZGF0ZShlKXtsZXQgcj10aGlzLnZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKGUucnVsZXMpO2lmKGhyKHIpKXtsZXQgbj10aGlzLnZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhlLnJ1bGVzKSxpPXRoaXMudmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcyhlLnJ1bGVzLHRoaXMubWF4TG9va2FoZWFkKSxhPXRoaXMudmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKGUucnVsZXMsdGhpcy5tYXhMb29rYWhlYWQpO3JldHVyblsuLi5yLC4uLm4sLi4uaSwuLi5hXX1yZXR1cm4gcn12YWxpZGF0ZU5vTGVmdFJlY3Vyc2lvbihlKXtyZXR1cm4gZ2EoZSxyPT5iTShyLHIsJGwpKX12YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZXMoZSl7cmV0dXJuIGdhKGUscj0+Vm9lKHIsJGwpKX12YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzKGUscil7cmV0dXJuIGdhKGUsbj0+VW9lKG4sciwkbCkpfXZhbGlkYXRlU29tZU5vbkVtcHR5TG9va2FoZWFkUGF0aChlLHIpe3JldHVybiBIb2UoZSxyLCRsKX1idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKGUpe3JldHVybiBSb2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5oYXNQcmVkaWNhdGVzLGUuZHluYW1pY1Rva2Vuc0VuYWJsZWQsTW9lKX1idWlsZExvb2thaGVhZEZvck9wdGlvbmFsKGUpe3JldHVybiBOb2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5keW5hbWljVG9rZW5zRW5hYmxlZCxieChlLnByb2RUeXBlKSxJb2UpfX19KTtmdW5jdGlvbiBNRmUodCl7bEUucmVzZXQoKSx0LmFjY2VwdChsRSk7bGV0IGU9bEUuZHNsTWV0aG9kcztyZXR1cm4gbEUucmVzZXQoKSxlfXZhciBjRSxDTSxsRSxKb2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1VzKCk7b0UoKTtmcygpO1NNKCk7Y0U9Y2xhc3N7c3RhdGlje28odGhpcywiTG9va3NBaGVhZCIpfWluaXRMb29rc0FoZWFkKGUpe3RoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQ9QnQoZSwiZHluYW1pY1Rva2Vuc0VuYWJsZWQiKT9lLmR5bmFtaWNUb2tlbnNFbmFibGVkOmRzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHRoaXMubWF4TG9va2FoZWFkPUJ0KGUsIm1heExvb2thaGVhZCIpP2UubWF4TG9va2FoZWFkOmRzLm1heExvb2thaGVhZCx0aGlzLmxvb2thaGVhZFN0cmF0ZWd5PUJ0KGUsImxvb2thaGVhZFN0cmF0ZWd5Iik/ZS5sb29rYWhlYWRTdHJhdGVneTpuZXcgWXUoe21heExvb2thaGVhZDp0aGlzLm1heExvb2thaGVhZH0pLHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZT1uZXcgTWFwfXByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoZSl7QWUoZSxyPT57dGhpcy5UUkFDRV9JTklUKGAke3IubmFtZX0gUnVsZSBMb29rYWhlYWRgLCgpPT57bGV0e2FsdGVybmF0aW9uOm4scmVwZXRpdGlvbjppLG9wdGlvbjphLHJlcGV0aXRpb25NYW5kYXRvcnk6cyxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpsLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOnV9PU1GZShyKTtBZShuLGg9PntsZXQgZj1oLmlkeD09PTA/IiI6aC5pZHg7dGhpcy5UUkFDRV9JTklUKGAke1ZzKGgpfSR7Zn1gLCgpPT57bGV0IGQ9dGhpcy5sb29rYWhlYWRTdHJhdGVneS5idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKHtwcm9kT2NjdXJyZW5jZTpoLmlkeCxydWxlOnIsbWF4TG9va2FoZWFkOmgubWF4TG9va2FoZWFkfHx0aGlzLm1heExvb2thaGVhZCxoYXNQcmVkaWNhdGVzOmguaGFzUHJlZGljYXRlcyxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkfSkscD1zRSh0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnRbci5uYW1lXSwyNTYsaC5pZHgpO3RoaXMuc2V0TGFGdW5jQ2FjaGUocCxkKX0pfSksQWUoaSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDc2OCwiUmVwZXRpdGlvbiIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksQWUoYSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDUxMiwiT3B0aW9uIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxBZShzLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTAyNCwiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksQWUobCxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDE1MzYsIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxBZSh1LGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTI4MCwiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiLGgubWF4TG9va2FoZWFkLFZzKGgpKX0pfSl9KX1jb21wdXRlTG9va2FoZWFkRnVuYyhlLHIsbixpLGEscyl7dGhpcy5UUkFDRV9JTklUKGAke3N9JHtyPT09MD8iIjpyfWAsKCk9PntsZXQgbD10aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwoe3Byb2RPY2N1cnJlbmNlOnIscnVsZTplLG1heExvb2thaGVhZDphfHx0aGlzLm1heExvb2thaGVhZCxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHByb2RUeXBlOml9KSx1PXNFKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlLm5hbWVdLG4scik7dGhpcy5zZXRMYUZ1bmNDYWNoZSh1LGwpfSl9Z2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKGUscil7bGV0IG49dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHNFKG4sZSxyKX1nZXRMYUZ1bmNGcm9tQ2FjaGUoZSl7cmV0dXJuIHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZS5nZXQoZSl9c2V0TGFGdW5jQ2FjaGUoZSxyKXt0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUuc2V0KGUscil9fSxDTT1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIkRzbE1ldGhvZHNDb2xsZWN0b3JWaXNpdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZHNsTWV0aG9kcz17b3B0aW9uOltdLGFsdGVybmF0aW9uOltdLHJlcGV0aXRpb246W10scmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6W10scmVwZXRpdGlvbk1hbmRhdG9yeTpbXSxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpbXX19cmVzZXQoKXt0aGlzLmRzbE1ldGhvZHM9e29wdGlvbjpbXSxhbHRlcm5hdGlvbjpbXSxyZXBldGl0aW9uOltdLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOltdLHJlcGV0aXRpb25NYW5kYXRvcnk6W10scmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I6W119fXZpc2l0T3B0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5vcHRpb24ucHVzaChlKX12aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uV2l0aFNlcGFyYXRvci5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeS5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uLnB1c2goZSl9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmRzbE1ldGhvZHMuYWx0ZXJuYXRpb24ucHVzaChlKX19LGxFPW5ldyBDTTtvKE1GZSwiY29sbGVjdE1ldGhvZHMiKX0pO2Z1bmN0aW9uIERNKHQsZSl7aXNOYU4odC5zdGFydE9mZnNldCk9PT0hMD8odC5zdGFydE9mZnNldD1lLnN0YXJ0T2Zmc2V0LHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KTp0LmVuZE9mZnNldDxlLmVuZE9mZnNldCYmKHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KX1mdW5jdGlvbiBMTSh0LGUpe2lzTmFOKHQuc3RhcnRPZmZzZXQpPT09ITA/KHQuc3RhcnRPZmZzZXQ9ZS5zdGFydE9mZnNldCx0LnN0YXJ0Q29sdW1uPWUuc3RhcnRDb2x1bW4sdC5zdGFydExpbmU9ZS5zdGFydExpbmUsdC5lbmRPZmZzZXQ9ZS5lbmRPZmZzZXQsdC5lbmRDb2x1bW49ZS5lbmRDb2x1bW4sdC5lbmRMaW5lPWUuZW5kTGluZSk6dC5lbmRPZmZzZXQ8ZS5lbmRPZmZzZXQmJih0LmVuZE9mZnNldD1lLmVuZE9mZnNldCx0LmVuZENvbHVtbj1lLmVuZENvbHVtbix0LmVuZExpbmU9ZS5lbmRMaW5lKX1mdW5jdGlvbiBlbGUodCxlLHIpe3QuY2hpbGRyZW5bcl09PT12b2lkIDA/dC5jaGlsZHJlbltyXT1bZV06dC5jaGlsZHJlbltyXS5wdXNoKGUpfWZ1bmN0aW9uIHRsZSh0LGUscil7dC5jaGlsZHJlbltlXT09PXZvaWQgMD90LmNoaWxkcmVuW2VdPVtyXTp0LmNoaWxkcmVuW2VdLnB1c2gocil9dmFyIHJsZT1OKCgpPT57InVzZSBzdHJpY3QiO28oRE0sInNldE5vZGVMb2NhdGlvbk9ubHlPZmZzZXQiKTtvKExNLCJzZXROb2RlTG9jYXRpb25GdWxsIik7byhlbGUsImFkZFRlcm1pbmFsVG9Dc3QiKTtvKHRsZSwiYWRkTm9uZVRlcm1pbmFsVG9Dc3QiKX0pO2Z1bmN0aW9uIFJNKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsSUZlLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTplfSl9dmFyIElGZSxubGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJRmU9Im5hbWUiO28oUk0sImRlZmluZU5hbWVQcm9wIil9KTtmdW5jdGlvbiBPRmUodCxlKXtsZXQgcj16cih0KSxuPXIubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBhPXJbaV0scz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9c1t1XTtoLnRva2VuVHlwZUlkeD09PXZvaWQgMCYmdGhpc1toLm5hbWVdKGguY2hpbGRyZW4sZSl9fX1mdW5jdGlvbiBpbGUodCxlKXtsZXQgcj1vKGZ1bmN0aW9uKCl7fSwiZGVyaXZlZENvbnN0cnVjdG9yIik7Uk0ocix0KyJCYXNlU2VtYW50aWNzIik7bGV0IG49e3Zpc2l0Om8oZnVuY3Rpb24oaSxhKXtpZihQdChpKSYmKGk9aVswXSksIW1yKGkpKXJldHVybiB0aGlzW2kubmFtZV0oaS5jaGlsZHJlbixhKX0sInZpc2l0IiksdmFsaWRhdGVWaXNpdG9yOm8oZnVuY3Rpb24oKXtsZXQgaT1QRmUodGhpcyxlKTtpZighaHIoaSkpe2xldCBhPUplKGkscz0+cy5tc2cpO3Rocm93IEVycm9yKGBFcnJvcnMgRGV0ZWN0ZWQgaW4gQ1NUIFZpc2l0b3IgPCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfT46Cgkke2Euam9pbihgCgpgKS5yZXBsYWNlKC9cbi9nLGAKCWApfWApfX0sInZhbGlkYXRlVmlzaXRvciIpfTtyZXR1cm4gci5wcm90b3R5cGU9bixyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIuX1JVTEVfTkFNRVM9ZSxyfWZ1bmN0aW9uIGFsZSh0LGUscil7bGV0IG49byhmdW5jdGlvbigpe30sImRlcml2ZWRDb25zdHJ1Y3RvciIpO1JNKG4sdCsiQmFzZVNlbWFudGljc1dpdGhEZWZhdWx0cyIpO2xldCBpPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpO3JldHVybiBBZShlLGE9PntpW2FdPU9GZX0pLG4ucHJvdG90eXBlPWksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixufWZ1bmN0aW9uIFBGZSh0LGUpe3JldHVybiBCRmUodCxlKX1mdW5jdGlvbiBCRmUodCxlKXtsZXQgcj1ZcihlLGk9PkFpKHRbaV0pPT09ITEpLG49SmUocixpPT4oe21zZzpgTWlzc2luZyB2aXNpdG9yIG1ldGhvZDogPCR7aX0+IG9uICR7dC5jb25zdHJ1Y3Rvci5uYW1lfSBDU1QgVmlzaXRvci5gLHR5cGU6Tk0uTUlTU0lOR19NRVRIT0QsbWV0aG9kTmFtZTppfSkpO3JldHVybiBBYyhuKX12YXIgTk0sc2xlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtubGUoKTtvKE9GZSwiZGVmYXVsdFZpc2l0Iik7byhpbGUsImNyZWF0ZUJhc2VTZW1hbnRpY1Zpc2l0b3JDb25zdHJ1Y3RvciIpO28oYWxlLCJjcmVhdGVCYXNlVmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzIik7KGZ1bmN0aW9uKHQpe3RbdC5SRURVTkRBTlRfTUVUSE9EPTBdPSJSRURVTkRBTlRfTUVUSE9EIix0W3QuTUlTU0lOR19NRVRIT0Q9MV09Ik1JU1NJTkdfTUVUSE9EIn0pKE5NfHwoTk09e30pKTtvKFBGZSwidmFsaWRhdGVWaXNpdG9yIik7byhCRmUsInZhbGlkYXRlTWlzc2luZ0NzdE1ldGhvZHMiKX0pO3ZhciBkRSxvbGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtybGUoKTtxdCgpO3NsZSgpO1VzKCk7ZEU9Y2xhc3N7c3RhdGlje28odGhpcywiVHJlZUJ1aWxkZXIiKX1pbml0VHJlZUJ1aWxkZXIoZSl7aWYodGhpcy5DU1RfU1RBQ0s9W10sdGhpcy5vdXRwdXRDc3Q9ZS5vdXRwdXRDc3QsdGhpcy5ub2RlTG9jYXRpb25UcmFja2luZz1CdChlLCJub2RlTG9jYXRpb25UcmFja2luZyIpP2Uubm9kZUxvY2F0aW9uVHJhY2tpbmc6ZHMubm9kZUxvY2F0aW9uVHJhY2tpbmcsIXRoaXMub3V0cHV0Q3N0KXRoaXMuY3N0SW52b2NhdGlvblN0YXRlVXBkYXRlPWFpLHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlPWFpLHRoaXMuY3N0UG9zdFRlcm1pbmFsPWFpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsPWFpLHRoaXMuY3N0UG9zdFJ1bGU9YWk7ZWxzZSBpZigvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPUxNLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9TE0sdGhpcy5jc3RQb3N0UnVsZT1haSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49YWksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1haSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVGdWxsLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcik7ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPURNLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9RE0sdGhpcy5jc3RQb3N0UnVsZT1haSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49YWksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1haSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0LHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25Pbmx5T2Zmc2V0UmVndWxhcik7ZWxzZSBpZigvbm9uZS9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49YWksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1haSx0aGlzLmNzdFBvc3RSdWxlPWFpLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj1haTtlbHNlIHRocm93IEVycm9yKGBJbnZhbGlkIDxub2RlTG9jYXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIiR7ZS5ub2RlTG9jYXRpb25UcmFja2luZ30iYCl9c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKGUpe2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0OnRoaXMuTEEoMSkuc3RhcnRPZmZzZXQsZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sc3RhcnRMaW5lOk5hTixzdGFydENvbHVtbjpOYU4sZW5kT2Zmc2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlZ3VsYXIoZSl7bGV0IHI9dGhpcy5MQSgxKTtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpyLnN0YXJ0T2Zmc2V0LHN0YXJ0TGluZTpyLnN0YXJ0TGluZSxzdGFydENvbHVtbjpyLnN0YXJ0Q29sdW1uLGVuZE9mZnNldDpOYU4sZW5kTGluZTpOYU4sZW5kQ29sdW1uOk5hTn19Y3N0SW52b2NhdGlvblN0YXRlVXBkYXRlKGUpe2xldCByPXtuYW1lOmUsY2hpbGRyZW46T2JqZWN0LmNyZWF0ZShudWxsKX07dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uKHIpLHRoaXMuQ1NUX1NUQUNLLnB1c2gocil9Y3N0RmluYWxseVN0YXRlVXBkYXRlKCl7dGhpcy5DU1RfU1RBQ0sucG9wKCl9Y3N0UG9zdFJ1bGVGdWxsKGUpe2xldCByPXRoaXMuTEEoMCksbj1lLmxvY2F0aW9uO24uc3RhcnRPZmZzZXQ8PXIuc3RhcnRPZmZzZXQ/KG4uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0LG4uZW5kTGluZT1yLmVuZExpbmUsbi5lbmRDb2x1bW49ci5lbmRDb2x1bW4pOihuLnN0YXJ0T2Zmc2V0PU5hTixuLnN0YXJ0TGluZT1OYU4sbi5zdGFydENvbHVtbj1OYU4pfWNzdFBvc3RSdWxlT25seU9mZnNldChlKXtsZXQgcj10aGlzLkxBKDApLG49ZS5sb2NhdGlvbjtuLnN0YXJ0T2Zmc2V0PD1yLnN0YXJ0T2Zmc2V0P24uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0Om4uc3RhcnRPZmZzZXQ9TmFOfWNzdFBvc3RUZXJtaW5hbChlLHIpe2xldCBuPXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtlbGUobixyLGUpLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuKG4ubG9jYXRpb24scil9Y3N0UG9zdE5vblRlcm1pbmFsKGUscil7bGV0IG49dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO3RsZShuLHIsZSksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZShuLmxvY2F0aW9uLGUubG9jYXRpb24pfWdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKXtpZihtcih0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKXtsZXQgZT1pbGUodGhpcy5jbGFzc05hbWUsenIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3JldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3I9ZSxlfXJldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3J9Z2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cygpe2lmKG1yKHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcikpe2xldCBlPWFsZSh0aGlzLmNsYXNzTmFtZSx6cih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0aGlzLmdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSk7cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcj1lLGV9cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcn1nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTFdfWdldFByZXZpb3VzRXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTJdfWdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKXtsZXQgZT10aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSztyZXR1cm4gZVtlLmxlbmd0aC0xXX19fSk7dmFyIHBFLGxsZT1OKCgpPT57InVzZSBzdHJpY3QiO1VzKCk7cEU9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXJBZGFwdGVyIil9aW5pdExleGVyQWRhcHRlcigpe3RoaXMudG9rVmVjdG9yPVtdLHRoaXMudG9rVmVjdG9yTGVuZ3RoPTAsdGhpcy5jdXJySWR4PS0xfXNldCBpbnB1dChlKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUhPT0hMCl0aHJvdyBFcnJvcigiTWlzc2luZyA8cGVyZm9ybVNlbGZBbmFseXNpcz4gaW52b2NhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBQYXJzZXIncyBjb25zdHJ1Y3Rvci4iKTt0aGlzLnJlc2V0KCksdGhpcy50b2tWZWN0b3I9ZSx0aGlzLnRva1ZlY3Rvckxlbmd0aD1lLmxlbmd0aH1nZXQgaW5wdXQoKXtyZXR1cm4gdGhpcy50b2tWZWN0b3J9U0tJUF9UT0tFTigpe3JldHVybiB0aGlzLmN1cnJJZHg8PXRoaXMudG9rVmVjdG9yLmxlbmd0aC0yPyh0aGlzLmNvbnN1bWVUb2tlbigpLHRoaXMuTEEoMSkpOmkxfUxBKGUpe2xldCByPXRoaXMuY3VycklkeCtlO3JldHVybiByPDB8fHRoaXMudG9rVmVjdG9yTGVuZ3RoPD1yP2kxOnRoaXMudG9rVmVjdG9yW3JdfWNvbnN1bWVUb2tlbigpe3RoaXMuY3VycklkeCsrfWV4cG9ydExleGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJySWR4fWltcG9ydExleGVyU3RhdGUoZSl7dGhpcy5jdXJySWR4PWV9cmVzZXRMZXhlclN0YXRlKCl7dGhpcy5jdXJySWR4PS0xfW1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpe3RoaXMuY3VycklkeD10aGlzLnRva1ZlY3Rvci5sZW5ndGgtMX1nZXRMZXhlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpfX19KTt2YXIgbUUsY2xlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtuMSgpO1VzKCk7UWcoKTt3eCgpO2ZzKCk7bUU9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckFwaSIpfUFDVElPTihlKXtyZXR1cm4gZS5jYWxsKHRoaXMpfWNvbnN1bWUoZSxyLG4pe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChyLGUsbil9c3VicnVsZShlLHIsbil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHIsZSxuKX1vcHRpb24oZSxyKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChyLGUpfW9yKGUscil7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChyLGUpfW1hbnkoZSxyKXtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWwoZSxyKX1hdExlYXN0T25lKGUscil7cmV0dXJuIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKGUscil9Q09OU1VNRShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDAscil9Q09OU1VNRTEoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSwxLHIpfUNPTlNVTUUyKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsMixyKX1DT05TVU1FMyhlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDMscil9Q09OU1VNRTQoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw0LHIpfUNPTlNVTUU1KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsNSxyKX1DT05TVU1FNihlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDYscil9Q09OU1VNRTcoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw3LHIpfUNPTlNVTUU4KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsOCxyKX1DT05TVU1FOShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDkscil9U1VCUlVMRShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDAscil9U1VCUlVMRTEoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSwxLHIpfVNVQlJVTEUyKGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsMixyKX1TVUJSVUxFMyhlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDMscil9U1VCUlVMRTQoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw0LHIpfVNVQlJVTEU1KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsNSxyKX1TVUJSVUxFNihlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDYscil9U1VCUlVMRTcoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw3LHIpfVNVQlJVTEU4KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsOCxyKX1TVUJSVUxFOShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDkscil9T1BUSU9OKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMCl9T1BUSU9OMShlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDEpfU9QVElPTjIoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSwyKX1PUFRJT04zKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMyl9T1BUSU9ONChlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDQpfU9QVElPTjUoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw1KX1PUFRJT042KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsNil9T1BUSU9ONyhlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDcpfU9QVElPTjgoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw4KX1PUFRJT045KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsOSl9T1IoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDApfU9SMShlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsMSl9T1IyKGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSwyKX1PUjMoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDMpfU9SNChlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNCl9T1I1KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw1KX1PUjYoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDYpfU9SNyhlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNyl9T1I4KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw4KX1PUjkoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDkpfU1BTlkoZSl7dGhpcy5tYW55SW50ZXJuYWwoMCxlKX1NQU5ZMShlKXt0aGlzLm1hbnlJbnRlcm5hbCgxLGUpfU1BTlkyKGUpe3RoaXMubWFueUludGVybmFsKDIsZSl9TUFOWTMoZSl7dGhpcy5tYW55SW50ZXJuYWwoMyxlKX1NQU5ZNChlKXt0aGlzLm1hbnlJbnRlcm5hbCg0LGUpfU1BTlk1KGUpe3RoaXMubWFueUludGVybmFsKDUsZSl9TUFOWTYoZSl7dGhpcy5tYW55SW50ZXJuYWwoNixlKX1NQU5ZNyhlKXt0aGlzLm1hbnlJbnRlcm5hbCg3LGUpfU1BTlk4KGUpe3RoaXMubWFueUludGVybmFsKDgsZSl9TUFOWTkoZSl7dGhpcy5tYW55SW50ZXJuYWwoOSxlKX1NQU5ZX1NFUChlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDAsZSl9TUFOWV9TRVAxKGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1NQU5ZX1NFUDIoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgyLGUpfU1BTllfU0VQMyhlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDMsZSl9TUFOWV9TRVA0KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1NQU5ZX1NFUDUoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg1LGUpfU1BTllfU0VQNihlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDYsZSl9TUFOWV9TRVA3KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1NQU5ZX1NFUDgoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg4LGUpfU1BTllfU0VQOShlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDksZSl9QVRfTEVBU1RfT05FKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDAsZSl9QVRfTEVBU1RfT05FMShlKXtyZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkUyKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FMyhlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORTQoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkU1KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FNihlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORTcoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkU4KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FOShlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg5LGUpfUFUX0xFQVNUX09ORV9TRVAoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgwLGUpfUFUX0xFQVNUX09ORV9TRVAxKGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkVfU0VQMihlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FX1NFUDMoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORV9TRVA0KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkVfU0VQNShlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FX1NFUDYoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORV9TRVA3KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkVfU0VQOChlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FX1NFUDkoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg5LGUpfVJVTEUoZSxyLG49YTEpe2lmKFhuKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsZSkpe2xldCBzPXttZXNzYWdlOiRsLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOmUsZ3JhbW1hck5hbWU6dGhpcy5jbGFzc05hbWV9KSx0eXBlOlZpLkRVUExJQ0FURV9SVUxFX05BTUUscnVsZU5hbWU6ZX07dGhpcy5kZWZpbml0aW9uRXJyb3JzLnB1c2gocyl9dGhpcy5kZWZpbmVkUnVsZXNOYW1lcy5wdXNoKGUpO2xldCBpPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09aSxpfU9WRVJSSURFX1JVTEUoZSxyLG49YTEpe2xldCBpPUdvZShlLHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsdGhpcy5jbGFzc05hbWUpO3RoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KGkpO2xldCBhPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09YSxhfUJBQ0tUUkFDSyhlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wdXNoKDEpO2xldCBuPXRoaXMuc2F2ZVJlY29nU3RhdGUoKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxyKSwhMH1jYXRjaChpKXtpZihwZihpKSlyZXR1cm4hMTt0aHJvdyBpfWZpbmFsbHl7dGhpcy5yZWxvYWRSZWNvZ1N0YXRlKG4pLHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wb3AoKX19fWdldEdBc3RQcm9kdWN0aW9ucygpe3JldHVybiB0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlfWdldFNlcmlhbGl6ZWRHYXN0UHJvZHVjdGlvbnMoKXtyZXR1cm4gemsoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfX19KTt2YXIgZ0UsdWxlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvRSgpO24xKCk7dDEoKTt4eCgpO1VzKCk7RU0oKTticCgpO3hwKCk7Z0U9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckVuZ2luZSIpfWluaXRSZWNvZ25pemVyRW5naW5lKGUscil7aWYodGhpcy5jbGFzc05hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbD17fSx0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnQ9e30sdGhpcy5ydWxlU2hvcnROYW1lSWR4PTI1Nix0aGlzLnRva2VuTWF0Y2hlcj1qZyx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmRlZmluZWRSdWxlc05hbWVzPVtdLHRoaXMudG9rZW5zTWFwPXt9LHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjaz1bXSx0aGlzLlJVTEVfU1RBQ0s9W10sdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s9W10sdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZT17fSxCdChyLCJzZXJpYWxpemVkR3JhbW1hciIpKXRocm93IEVycm9yKGBUaGUgUGFyc2VyJ3MgY29uZmlndXJhdGlvbiBjYW4gbm8gbG9uZ2VyIGNvbnRhaW4gYSA8c2VyaWFsaXplZEdyYW1tYXI+IHByb3BlcnR5LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNi0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCk7aWYoUHQoZSkpe2lmKGhyKGUpKXRocm93IEVycm9yKGBBIFRva2VuIFZvY2FidWxhcnkgY2Fubm90IGJlIGVtcHR5LgoJTm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBmb3IgdGhlIHBhcnNlciBjb25zdHJ1Y3RvcgoJaXMgbm8gbG9uZ2VyIGEgVG9rZW4gdmVjdG9yIChzaW5jZSB2NC4wKS5gKTtpZih0eXBlb2YgZVswXS5zdGFydE9mZnNldD09Im51bWJlciIpdGhyb3cgRXJyb3IoYFRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNC0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCl9aWYoUHQoZSkpdGhpcy50b2tlbnNNYXA9WHIoZSwoYSxzKT0+KGFbcy5uYW1lXT1zLGEpLHt9KTtlbHNlIGlmKEJ0KGUsIm1vZGVzIikmJlBhKHFyKGJyKGUubW9kZXMpKSx2b2UpKXtsZXQgYT1xcihicihlLm1vZGVzKSkscz1xbShhKTt0aGlzLnRva2Vuc01hcD1YcihzLChsLHUpPT4obFt1Lm5hbWVdPXUsbCkse30pfWVsc2UgaWYoYm4oZSkpdGhpcy50b2tlbnNNYXA9YW4oZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIjx0b2tlbnNEaWN0aW9uYXJ5PiBhcmd1bWVudCBtdXN0IGJlIEFuIEFycmF5IG9mIFRva2VuIGNvbnN0cnVjdG9ycywgQSBkaWN0aW9uYXJ5IG9mIFRva2VuIGNvbnN0cnVjdG9ycyBvciBhbiBJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uIik7dGhpcy50b2tlbnNNYXAuRU9GPWZvO2xldCBuPUJ0KGUsIm1vZGVzIik/cXIoYnIoZS5tb2RlcykpOmJyKGUpLGk9UGEobixhPT5ocihhLmNhdGVnb3J5TWF0Y2hlcykpO3RoaXMudG9rZW5NYXRjaGVyPWk/amc6VnUsVXUoYnIodGhpcy50b2tlbnNNYXApKX1kZWZpbmVSdWxlKGUscixuKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUpdGhyb3cgRXJyb3IoYEdyYW1tYXIgcnVsZSA8JHtlfT4gbWF5IG5vdCBiZSBkZWZpbmVkIGFmdGVyIHRoZSAncGVyZm9ybVNlbGZBbmFseXNpcycgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCcKTWFrZSBzdXJlIHRoYXQgYWxsIGdyYW1tYXIgcnVsZSBkZWZpbml0aW9ucyBhcmUgZG9uZSBiZWZvcmUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIGlzIGNhbGxlZC5gKTtsZXQgaT1CdChuLCJyZXN5bmNFbmFibGVkIik/bi5yZXN5bmNFbmFibGVkOmExLnJlc3luY0VuYWJsZWQsYT1CdChuLCJyZWNvdmVyeVZhbHVlRnVuYyIpP24ucmVjb3ZlcnlWYWx1ZUZ1bmM6YTEucmVjb3ZlcnlWYWx1ZUZ1bmMscz10aGlzLnJ1bGVTaG9ydE5hbWVJZHg8PDEyO3RoaXMucnVsZVNob3J0TmFtZUlkeCsrLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtzXT1lLHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlXT1zO2xldCBsO3JldHVybiB0aGlzLm91dHB1dENzdD09PSEwP2w9byhmdW5jdGlvbiguLi5mKXt0cnl7dGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHMsZSx0aGlzLnN1YnJ1bGVJZHgpLHIuYXBwbHkodGhpcyxmKTtsZXQgZD10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY3N0UG9zdFJ1bGUoZCksZH1jYXRjaChkKXtyZXR1cm4gdGhpcy5pbnZva2VSdWxlQ2F0Y2goZCxpLGEpfWZpbmFsbHl7dGhpcy5ydWxlRmluYWxseVN0YXRlVXBkYXRlKCl9fSwiaW52b2tlUnVsZVdpdGhUcnkiKTpsPW8oZnVuY3Rpb24oLi4uZil7dHJ5e3JldHVybiB0aGlzLnJ1bGVJbnZvY2F0aW9uU3RhdGVVcGRhdGUocyxlLHRoaXMuc3VicnVsZUlkeCksci5hcHBseSh0aGlzLGYpfWNhdGNoKGQpe3JldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChkLGksYSl9ZmluYWxseXt0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKX19LCJpbnZva2VSdWxlV2l0aFRyeUNzdCIpLE9iamVjdC5hc3NpZ24obCx7cnVsZU5hbWU6ZSxvcmlnaW5hbEdyYW1tYXJBY3Rpb246cn0pfWludm9rZVJ1bGVDYXRjaChlLHIsbil7bGV0IGk9dGhpcy5SVUxFX1NUQUNLLmxlbmd0aD09PTEsYT1yJiYhdGhpcy5pc0JhY2tUcmFja2luZygpJiZ0aGlzLnJlY292ZXJ5RW5hYmxlZDtpZihwZihlKSl7bGV0IHM9ZTtpZihhKXtsZXQgbD10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKTtpZih0aGlzLmlzSW5DdXJyZW50UnVsZVJlU3luY1NldChsKSlpZihzLnJlc3luY2VkVG9rZW5zPXRoaXMucmVTeW5jVG8obCksdGhpcy5vdXRwdXRDc3Qpe2xldCB1PXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtyZXR1cm4gdS5yZWNvdmVyZWROb2RlPSEwLHV9ZWxzZSByZXR1cm4gbihlKTtlbHNle2lmKHRoaXMub3V0cHV0Q3N0KXtsZXQgdT10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07dS5yZWNvdmVyZWROb2RlPSEwLHMucGFydGlhbENzdFJlc3VsdD11fXRocm93IHN9fWVsc2V7aWYoaSlyZXR1cm4gdGhpcy5tb3ZlVG9UZXJtaW5hdGVkU3RhdGUoKSxuKGUpO3Rocm93IHN9fWVsc2UgdGhyb3cgZX1vcHRpb25JbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDUxMixyKTtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKX1vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT10aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKSxhO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXthPWUuREVGO2xldCBzPWUuR0FURTtpZihzIT09dm9pZCAwKXtsZXQgbD1pO2k9bygoKT0+cy5jYWxsKHRoaXMpJiZsLmNhbGwodGhpcyksImxvb2tBaGVhZEZ1bmMiKX19ZWxzZSBhPWU7aWYoaS5jYWxsKHRoaXMpPT09ITApcmV0dXJuIGEuY2FsbCh0aGlzKX1hdExlYXN0T25lSW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMDI0LGUpO3JldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbExvZ2ljKGUscixuKX1hdExlYXN0T25lSW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUobiksYTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil7YT1yLkRFRjtsZXQgcz1yLkdBVEU7aWYocyE9PXZvaWQgMCl7bGV0IGw9aTtpPW8oKCk9PnMuY2FsbCh0aGlzKSYmbC5jYWxsKHRoaXMpLCJsb29rQWhlYWRGdW5jIil9fWVsc2UgYT1yO2lmKGkuY2FsbCh0aGlzKT09PSEwKXtsZXQgcz10aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhKTtmb3IoO2kuY2FsbCh0aGlzKT09PSEwJiZzPT09ITA7KXM9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oYSl9ZWxzZSB0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUlksci5FUlJfTVNHKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCxbZSxyXSxpLDEwMjQsZSxaayl9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxNTM2LGUpO3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksdnhdLGwsMTUzNixlLHZ4KX1lbHNlIHRocm93IHRoaXMucmFpc2VFYXJseUV4aXRFeGNlcHRpb24oZSxRbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUixyLkVSUl9NU0cpfW1hbnlJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDc2OCxlKTtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueUludGVybmFsTG9naWMoZSxyLG4pe2xldCBpPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLGE7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpe2E9ci5ERUY7bGV0IGw9ci5HQVRFO2lmKGwhPT12b2lkIDApe2xldCB1PWk7aT1vKCgpPT5sLmNhbGwodGhpcykmJnUuY2FsbCh0aGlzKSwibG9va2FoZWFkRnVuY3Rpb24iKX19ZWxzZSBhPXI7bGV0IHM9ITA7Zm9yKDtpLmNhbGwodGhpcyk9PT0hMCYmcz09PSEwOylzPXRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGEpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLFtlLHJdLGksNzY4LGUsUWsscyl9bWFueVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMjgwLGUpO3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGkseXhdLGwsMTI4MCxlLHl4KX19cmVwZXRpdGlvblNlcFNlY29uZEludGVybmFsKGUscixuLGksYSl7Zm9yKDtuKCk7KXRoaXMuQ09OU1VNRShyKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UscixuLGksYV0sbiwxNTM2LGUsYSl9ZG9TaW5nbGVSZXBldGl0aW9uKGUpe2xldCByPXRoaXMuZ2V0TGV4ZXJQb3NpdGlvbigpO3JldHVybiBlLmNhbGwodGhpcyksdGhpcy5nZXRMZXhlclBvc2l0aW9uKCk+cn1vckludGVybmFsKGUscil7bGV0IG49dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoMjU2LHIpLGk9UHQoZSk/ZTplLkRFRixzPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLmNhbGwodGhpcyxpKTtpZihzIT09dm9pZCAwKXJldHVybiBpW3NdLkFMVC5jYWxsKHRoaXMpO3RoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihyLGUuRVJSX01TRyl9cnVsZUZpbmFsbHlTdGF0ZVVwZGF0ZSgpe2lmKHRoaXMuUlVMRV9TVEFDSy5wb3AoKSx0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSy5wb3AoKSx0aGlzLmNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSgpLHRoaXMuUlVMRV9TVEFDSy5sZW5ndGg9PT0wJiZ0aGlzLmlzQXRFbmRPZklucHV0KCk9PT0hMSl7bGV0IGU9dGhpcy5MQSgxKSxyPXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OmUscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KTt0aGlzLlNBVkVfRVJST1IobmV3IEV4KHIsZSkpfX1zdWJydWxlSW50ZXJuYWwoZSxyLG4pe2xldCBpO3RyeXtsZXQgYT1uIT09dm9pZCAwP24uQVJHUzp2b2lkIDA7cmV0dXJuIHRoaXMuc3VicnVsZUlkeD1yLGk9ZS5hcHBseSh0aGlzLGEpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsKGksbiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUucnVsZU5hbWUpLGl9Y2F0Y2goYSl7dGhyb3cgdGhpcy5zdWJydWxlSW50ZXJuYWxFcnJvcihhLG4sZS5ydWxlTmFtZSl9fXN1YnJ1bGVJbnRlcm5hbEVycm9yKGUscixuKXt0aHJvdyBwZihlKSYmZS5wYXJ0aWFsQ3N0UmVzdWx0IT09dm9pZCAwJiYodGhpcy5jc3RQb3N0Tm9uVGVybWluYWwoZS5wYXJ0aWFsQ3N0UmVzdWx0LHIhPT12b2lkIDAmJnIuTEFCRUwhPT12b2lkIDA/ci5MQUJFTDpuKSxkZWxldGUgZS5wYXJ0aWFsQ3N0UmVzdWx0KSxlfWNvbnN1bWVJbnRlcm5hbChlLHIsbil7bGV0IGk7dHJ5e2xldCBhPXRoaXMuTEEoMSk7dGhpcy50b2tlbk1hdGNoZXIoYSxlKT09PSEwPyh0aGlzLmNvbnN1bWVUb2tlbigpLGk9YSk6dGhpcy5jb25zdW1lSW50ZXJuYWxFcnJvcihlLGEsbil9Y2F0Y2goYSl7aT10aGlzLmNvbnN1bWVJbnRlcm5hbFJlY292ZXJ5KGUscixhKX1yZXR1cm4gdGhpcy5jc3RQb3N0VGVybWluYWwobiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUubmFtZSxpKSxpfWNvbnN1bWVJbnRlcm5hbEVycm9yKGUscixuKXtsZXQgaSxhPXRoaXMuTEEoMCk7dGhyb3cgbiE9PXZvaWQgMCYmbi5FUlJfTVNHP2k9bi5FUlJfTVNHOmk9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtleHBlY3RlZDplLGFjdHVhbDpyLHByZXZpb3VzOmEscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KSx0aGlzLlNBVkVfRVJST1IobmV3IFRwKGkscixhKSl9Y29uc3VtZUludGVybmFsUmVjb3ZlcnkoZSxyLG4pe2lmKHRoaXMucmVjb3ZlcnlFbmFibGVkJiZuLm5hbWU9PT0iTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uIiYmIXRoaXMuaXNCYWNrVHJhY2tpbmcoKSl7bGV0IGk9dGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKTt0cnl7cmV0dXJuIHRoaXMudHJ5SW5SdWxlUmVjb3ZlcnkoZSxpKX1jYXRjaChhKXt0aHJvdyBhLm5hbWU9PT1rTT9uOmF9fWVsc2UgdGhyb3cgbn1zYXZlUmVjb2dTdGF0ZSgpe2xldCBlPXRoaXMuZXJyb3JzLHI9YW4odGhpcy5SVUxFX1NUQUNLKTtyZXR1cm57ZXJyb3JzOmUsbGV4ZXJTdGF0ZTp0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxSVUxFX1NUQUNLOnIsQ1NUX1NUQUNLOnRoaXMuQ1NUX1NUQUNLfX1yZWxvYWRSZWNvZ1N0YXRlKGUpe3RoaXMuZXJyb3JzPWUuZXJyb3JzLHRoaXMuaW1wb3J0TGV4ZXJTdGF0ZShlLmxleGVyU3RhdGUpLHRoaXMuUlVMRV9TVEFDSz1lLlJVTEVfU1RBQ0t9cnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShlLHIsbil7dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0sucHVzaChuKSx0aGlzLlJVTEVfU1RBQ0sucHVzaChlKSx0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShyKX1pc0JhY2tUcmFja2luZygpe3JldHVybiB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2subGVuZ3RoIT09MH1nZXRDdXJyUnVsZUZ1bGxOYW1lKCl7bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtlXX1zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKXtyZXR1cm4gdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsW2VdfWlzQXRFbmRPZklucHV0KCl7cmV0dXJuIHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksZm8pfXJlc2V0KCl7dGhpcy5yZXNldExleGVyU3RhdGUoKSx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmlzQmFja1RyYWNraW5nU3RhY2s9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5SVUxFX1NUQUNLPVtdLHRoaXMuQ1NUX1NUQUNLPVtdLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLPVtdfX19KTt2YXIgeUUsaGxlPU4oKCk9PnsidXNlIHN0cmljdCI7bjEoKTtxdCgpO3QxKCk7VXMoKTt5RT1jbGFzc3tzdGF0aWN7byh0aGlzLCJFcnJvckhhbmRsZXIiKX1pbml0RXJyb3JIYW5kbGVyKGUpe3RoaXMuX2Vycm9ycz1bXSx0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPUJ0KGUsImVycm9yTWVzc2FnZVByb3ZpZGVyIik/ZS5lcnJvck1lc3NhZ2VQcm92aWRlcjpkcy5lcnJvck1lc3NhZ2VQcm92aWRlcn1TQVZFX0VSUk9SKGUpe2lmKHBmKGUpKXJldHVybiBlLmNvbnRleHQ9e3J1bGVTdGFjazp0aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxydWxlT2NjdXJyZW5jZVN0YWNrOmFuKHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLKX0sdGhpcy5fZXJyb3JzLnB1c2goZSksZTt0aHJvdyBFcnJvcigiVHJ5aW5nIHRvIHNhdmUgYW4gRXJyb3Igd2hpY2ggaXMgbm90IGEgUmVjb2duaXRpb25FeGNlcHRpb24iKX1nZXQgZXJyb3JzKCl7cmV0dXJuIGFuKHRoaXMuX2Vycm9ycyl9c2V0IGVycm9ycyhlKXt0aGlzLl9lcnJvcnM9ZX1yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihlLHIsbil7bGV0IGk9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksYT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW2ldLGw9ZTEoZSxhLHIsdGhpcy5tYXhMb29rYWhlYWQpWzBdLHU9W107Zm9yKGxldCBmPTE7Zjw9dGhpcy5tYXhMb29rYWhlYWQ7ZisrKXUucHVzaCh0aGlzLkxBKGYpKTtsZXQgaD10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkRWFybHlFeGl0TWVzc2FnZSh7ZXhwZWN0ZWRJdGVyYXRpb25QYXRoczpsLGFjdHVhbDp1LHByZXZpb3VzOnRoaXMuTEEoMCksY3VzdG9tVXNlckRlc2NyaXB0aW9uOm4scnVsZU5hbWU6aX0pO3Rocm93IHRoaXMuU0FWRV9FUlJPUihuZXcgU3goaCx0aGlzLkxBKDEpLHRoaXMuTEEoMCkpKX1yYWlzZU5vQWx0RXhjZXB0aW9uKGUscil7bGV0IG49dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW25dLGE9SmcoZSxpLHRoaXMubWF4TG9va2FoZWFkKSxzPVtdO2ZvcihsZXQgaD0xO2g8PXRoaXMubWF4TG9va2FoZWFkO2grKylzLnB1c2godGhpcy5MQShoKSk7bGV0IGw9dGhpcy5MQSgwKSx1PXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe2V4cGVjdGVkUGF0aHNQZXJBbHQ6YSxhY3R1YWw6cyxwcmV2aW91czpsLGN1c3RvbVVzZXJEZXNjcmlwdGlvbjpyLHJ1bGVOYW1lOnRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBreCh1LHRoaXMuTEEoMSksbCkpfX19KTt2YXIgdkUsZmxlPU4oKCk9PnsidXNlIHN0cmljdCI7eHgoKTtxdCgpO3ZFPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNvbnRlbnRBc3Npc3QiKX1pbml0Q29udGVudEFzc2lzdCgpe31jb21wdXRlQ29udGVudEFzc2lzdChlLHIpe2xldCBuPXRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGVbZV07aWYobXIobikpdGhyb3cgRXJyb3IoYFJ1bGUgLT4ke2V9PC0gZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBncmFtbWFyLmApO3JldHVybiBlRShbbl0scix0aGlzLnRva2VuTWF0Y2hlcix0aGlzLm1heExvb2thaGVhZCl9Z2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhlKXtsZXQgcj1pYShlLnJ1bGVTdGFjayksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3JdO3JldHVybiBuZXcgS2soaSxlKS5zdGFydFdhbGtpbmcoKX19fSk7ZnVuY3Rpb24gQXgodCxlLHIsbj0hMSl7YkUocik7bGV0IGk9bWEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9QWkoZSk/ZTplLkRFRixzPW5ldyB0KHtkZWZpbml0aW9uOltdLGlkeDpyfSk7cmV0dXJuIG4mJihzLnNlcGFyYXRvcj1lLlNFUCksQnQoZSwiTUFYX0xPT0tBSEVBRCIpJiYocy5tYXhMb29rYWhlYWQ9ZS5NQVhfTE9PS0FIRUFEKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHMpLGEuY2FsbCh0aGlzKSxpLmRlZmluaXRpb24ucHVzaChzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxURX1mdW5jdGlvbiB6RmUodCxlKXtiRShlKTtsZXQgcj1tYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksbj1QdCh0KT09PSExLGk9bj09PSExP3Q6dC5ERUYsYT1uZXcgd24oe2RlZmluaXRpb246W10saWR4OmUsaWdub3JlQW1iaWd1aXRpZXM6biYmdC5JR05PUkVfQU1CSUdVSVRJRVM9PT0hMH0pO0J0KHQsIk1BWF9MT09LQUhFQUQiKSYmKGEubWF4TG9va2FoZWFkPXQuTUFYX0xPT0tBSEVBRCk7bGV0IHM9QjIoaSxsPT5BaShsLkdBVEUpKTtyZXR1cm4gYS5oYXNQcmVkaWNhdGVzPXMsci5kZWZpbml0aW9uLnB1c2goYSksQWUoaSxsPT57bGV0IHU9bmV3IERuKHtkZWZpbml0aW9uOltdfSk7YS5kZWZpbml0aW9uLnB1c2godSksQnQobCwiSUdOT1JFX0FNQklHVUlUSUVTIik/dS5pZ25vcmVBbWJpZ3VpdGllcz1sLklHTk9SRV9BTUJJR1VJVElFUzpCdChsLCJHQVRFIikmJih1Lmlnbm9yZUFtYmlndWl0aWVzPSEwKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHUpLGwuQUxULmNhbGwodGhpcyksdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sucG9wKCl9KSxURX1mdW5jdGlvbiBtbGUodCl7cmV0dXJuIHQ9PT0wPyIiOmAke3R9YH1mdW5jdGlvbiBiRSh0KXtpZih0PDB8fHQ+cGxlKXtsZXQgZT1uZXcgRXJyb3IoYEludmFsaWQgRFNMIE1ldGhvZCBpZHggdmFsdWU6IDwke3R9PgoJSWR4IHZhbHVlIG11c3QgYmUgYSBub25lIG5lZ2F0aXZlIHZhbHVlIHNtYWxsZXIgdGhhbiAke3BsZSsxfWApO3Rocm93IGUuS05PV05fUkVDT1JERVJfRVJST1I9ITAsZX19dmFyIFRFLGRsZSxwbGUsZ2xlLHlsZSwkRmUseEUsdmxlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtmcygpO3B4KCk7eHAoKTticCgpO1VzKCk7b0UoKTtURT17ZGVzY3JpcHRpb246IlRoaXMgT2JqZWN0IGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGR1cmluZyBSZWNvcmRpbmcgUGhhc2UifTtPYmplY3QuZnJlZXplKFRFKTtkbGU9ITAscGxlPU1hdGgucG93KDIsOCktMSxnbGU9ZGYoe25hbWU6IlJFQ09SRElOR19QSEFTRV9UT0tFTiIscGF0dGVybjpLbi5OQX0pO1V1KFtnbGVdKTt5bGU9V3UoZ2xlLGBUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2UKCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvaW50ZXJuYWxzLmh0bWwjZ3JhbW1hci1yZWNvcmRpbmcgZm9yIGRldGFpbHNgLC0xLC0xLC0xLC0xLC0xLC0xKTtPYmplY3QuZnJlZXplKHlsZSk7JEZlPXtuYW1lOmBUaGlzIENTVE5vZGUgaW5kaWNhdGVzIHRoZSBQYXJzZXIgaXMgaW4gUmVjb3JkaW5nIFBoYXNlCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzYCxjaGlsZHJlbjp7fX0seEU9Y2xhc3N7c3RhdGlje28odGhpcywiR2FzdFJlY29yZGVyIil9aW5pdEdhc3RSZWNvcmRlcihlKXt0aGlzLnJlY29yZGluZ1Byb2RTdGFjaz1bXSx0aGlzLlJFQ09SRElOR19QSEFTRT0hMX1lbmFibGVSZWNvcmRpbmcoKXt0aGlzLlJFQ09SRElOR19QSEFTRT0hMCx0aGlzLlRSQUNFX0lOSVQoIkVuYWJsZSBSZWNvcmRpbmciLCgpPT57Zm9yKGxldCBlPTA7ZTwxMDtlKyspe2xldCByPWU+MD9lOiIiO3RoaXNbYENPTlNVTUUke3J9YF09ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQobixlLGkpfSx0aGlzW2BTVUJSVUxFJHtyfWBdPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKG4sZSxpKX0sdGhpc1tgT1BUSU9OJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsUmVjb3JkKG4sZSl9LHRoaXNbYE9SJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQobixlKX0sdGhpc1tgTUFOWSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BNQU5ZX1NFUCR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUsbil9LHRoaXNbYEFUX0xFQVNUX09ORSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BBVF9MRUFTVF9PTkVfU0VQJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxuKX19dGhpcy5jb25zdW1lPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQocixlLG4pfSx0aGlzLnN1YnJ1bGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbFJlY29yZChyLGUsbil9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5vcj1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5tYW55PWZ1bmN0aW9uKGUscil7dGhpcy5tYW55SW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5hdExlYXN0T25lPWZ1bmN0aW9uKGUscil7dGhpcy5hdExlYXN0T25lSW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5BQ1RJT049dGhpcy5BQ1RJT05fUkVDT1JELHRoaXMuQkFDS1RSQUNLPXRoaXMuQkFDS1RSQUNLX1JFQ09SRCx0aGlzLkxBPXRoaXMuTEFfUkVDT1JEfSl9ZGlzYWJsZVJlY29yZGluZygpe3RoaXMuUkVDT1JESU5HX1BIQVNFPSExLHRoaXMuVFJBQ0VfSU5JVCgiRGVsZXRpbmcgUmVjb3JkaW5nIG1ldGhvZHMiLCgpPT57bGV0IGU9dGhpcztmb3IobGV0IHI9MDtyPDEwO3IrKyl7bGV0IG49cj4wP3I6IiI7ZGVsZXRlIGVbYENPTlNVTUUke259YF0sZGVsZXRlIGVbYFNVQlJVTEUke259YF0sZGVsZXRlIGVbYE9QVElPTiR7bn1gXSxkZWxldGUgZVtgT1Ike259YF0sZGVsZXRlIGVbYE1BTlkke259YF0sZGVsZXRlIGVbYE1BTllfU0VQJHtufWBdLGRlbGV0ZSBlW2BBVF9MRUFTVF9PTkUke259YF0sZGVsZXRlIGVbYEFUX0xFQVNUX09ORV9TRVAke259YF19ZGVsZXRlIGUuY29uc3VtZSxkZWxldGUgZS5zdWJydWxlLGRlbGV0ZSBlLm9wdGlvbixkZWxldGUgZS5vcixkZWxldGUgZS5tYW55LGRlbGV0ZSBlLmF0TGVhc3RPbmUsZGVsZXRlIGUuQUNUSU9OLGRlbGV0ZSBlLkJBQ0tUUkFDSyxkZWxldGUgZS5MQX0pfUFDVElPTl9SRUNPUkQoZSl7fUJBQ0tUUkFDS19SRUNPUkQoZSxyKXtyZXR1cm4oKT0+ITB9TEFfUkVDT1JEKGUpe3JldHVybiBpMX10b3BMZXZlbFJ1bGVSZWNvcmQoZSxyKXt0cnl7bGV0IG49bmV3IHVzKHtkZWZpbml0aW9uOltdLG5hbWU6ZX0pO3JldHVybiBuLm5hbWU9ZSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG4pLHIuY2FsbCh0aGlzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxufWNhdGNoKG4pe2lmKG4uS05PV05fUkVDT1JERVJfRVJST1IhPT0hMCl0cnl7bi5tZXNzYWdlPW4ubWVzc2FnZStgCgkgVGhpcyBlcnJvciB3YXMgdGhyb3duIGR1cmluZyB0aGUgImdyYW1tYXIgcmVjb3JkaW5nIHBoYXNlIiBGb3IgbW9yZSBpbmZvIHNlZToKCWh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nYH1jYXRjaHt0aHJvdyBufXRocm93IG59fW9wdGlvbkludGVybmFsUmVjb3JkKGUscil7cmV0dXJuIEF4LmNhbGwodGhpcyxsbixlLHIpfWF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLHIpe0F4LmNhbGwodGhpcyxMbixyLGUpfWF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7QXguY2FsbCh0aGlzLFJuLHIsZSxkbGUpfW1hbnlJbnRlcm5hbFJlY29yZChlLHIpe0F4LmNhbGwodGhpcyxQcixyLGUpfW1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7QXguY2FsbCh0aGlzLFRuLHIsZSxkbGUpfW9ySW50ZXJuYWxSZWNvcmQoZSxyKXtyZXR1cm4gekZlLmNhbGwodGhpcyxlLHIpfXN1YnJ1bGVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoYkUociksIWV8fEJ0KGUsInJ1bGVOYW1lIik9PT0hMSl7bGV0IGw9bmV3IEVycm9yKGA8U1VCUlVMRSR7bWxlKHIpfT4gYXJndW1lbnQgaXMgaW52YWxpZCBleHBlY3RpbmcgYSBQYXJzZXIgbWV0aG9kIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeShlKX0+CiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO3Rocm93IGwuS05PV05fUkVDT1JERVJfRVJST1I9ITAsbH1sZXQgaT1tYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksYT1lLnJ1bGVOYW1lLHM9bmV3IG9uKHtpZHg6cixub25UZXJtaW5hbE5hbWU6YSxsYWJlbDpuPy5MQUJFTCxyZWZlcmVuY2VkUnVsZTp2b2lkIDB9KTtyZXR1cm4gaS5kZWZpbml0aW9uLnB1c2gocyksdGhpcy5vdXRwdXRDc3Q/JEZlOlRFfWNvbnN1bWVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoYkUociksIWhNKGUpKXtsZXQgcz1uZXcgRXJyb3IoYDxDT05TVU1FJHttbGUocil9PiBhcmd1bWVudCBpcyBpbnZhbGlkIGV4cGVjdGluZyBhIFRva2VuVHlwZSByZWZlcmVuY2UgYnV0IGdvdDogPCR7SlNPTi5zdHJpbmdpZnkoZSl9PgogaW5zaWRlIHRvcCBsZXZlbCBydWxlOiA8JHt0aGlzLnJlY29yZGluZ1Byb2RTdGFja1swXS5uYW1lfT5gKTt0aHJvdyBzLktOT1dOX1JFQ09SREVSX0VSUk9SPSEwLHN9bGV0IGk9bWEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9bmV3IEVyKHtpZHg6cix0ZXJtaW5hbFR5cGU6ZSxsYWJlbDpuPy5MQUJFTH0pO3JldHVybiBpLmRlZmluaXRpb24ucHVzaChhKSx5bGV9fTtvKEF4LCJyZWNvcmRQcm9kIik7byh6RmUsInJlY29yZE9yUHJvZCIpO28obWxlLCJnZXRJZHhTdWZmaXgiKTtvKGJFLCJhc3NlcnRNZXRob2RJZHhJc1ZhbGlkIil9KTt2YXIgd0UseGxlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtIZygpO1VzKCk7d0U9Y2xhc3N7c3RhdGlje28odGhpcywiUGVyZm9ybWFuY2VUcmFjZXIiKX1pbml0UGVyZm9ybWFuY2VUcmFjZXIoZSl7aWYoQnQoZSwidHJhY2VJbml0UGVyZiIpKXtsZXQgcj1lLnRyYWNlSW5pdFBlcmYsbj10eXBlb2Ygcj09Im51bWJlciI7dGhpcy50cmFjZUluaXRNYXhJZGVudD1uP3I6MS8wLHRoaXMudHJhY2VJbml0UGVyZj1uP3I+MDpyfWVsc2UgdGhpcy50cmFjZUluaXRNYXhJZGVudD0wLHRoaXMudHJhY2VJbml0UGVyZj1kcy50cmFjZUluaXRQZXJmO3RoaXMudHJhY2VJbml0SW5kZW50PS0xfVRSQUNFX0lOSVQoZSxyKXtpZih0aGlzLnRyYWNlSW5pdFBlcmY9PT0hMCl7dGhpcy50cmFjZUluaXRJbmRlbnQrKztsZXQgbj1uZXcgQXJyYXkodGhpcy50cmFjZUluaXRJbmRlbnQrMSkuam9pbigiCSIpO3RoaXMudHJhY2VJbml0SW5kZW50PHRoaXMudHJhY2VJbml0TWF4SWRlbnQmJmNvbnNvbGUubG9nKGAke259LS0+IDwke2V9PmApO2xldHt0aW1lOmksdmFsdWU6YX09aHgocikscz1pPjEwP2NvbnNvbGUud2Fybjpjb25zb2xlLmxvZztyZXR1cm4gdGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmcyhgJHtufTwtLSA8JHtlfT4gdGltZTogJHtpfW1zYCksdGhpcy50cmFjZUluaXRJbmRlbnQtLSxhfWVsc2UgcmV0dXJuIHIoKX19fSk7ZnVuY3Rpb24gYmxlKHQsZSl7ZS5mb3JFYWNoKHI9PntsZXQgbj1yLnByb3RvdHlwZTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5mb3JFYWNoKGk9PntpZihpPT09ImNvbnN0cnVjdG9yIilyZXR1cm47bGV0IGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpO2EmJihhLmdldHx8YS5zZXQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxpLGEpOnQucHJvdG90eXBlW2ldPXIucHJvdG90eXBlW2ldfSl9KX12YXIgVGxlPU4oKCk9PnsidXNlIHN0cmljdCI7byhibGUsImFwcGx5TWl4aW5zIil9KTtmdW5jdGlvbiBrRSh0PXZvaWQgMCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBpMSxkcyxhMSxWaSxfeCxEeCxVcz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7SGcoKTtRc2UoKTticCgpO1FnKCk7WW9lKCk7RU0oKTtKb2UoKTtvbGUoKTtsbGUoKTtjbGUoKTt1bGUoKTtobGUoKTtmbGUoKTt2bGUoKTt4bGUoKTtUbGUoKTt3eCgpO2kxPVd1KGZvLCIiLE5hTixOYU4sTmFOLE5hTixOYU4sTmFOKTtPYmplY3QuZnJlZXplKGkxKTtkcz1PYmplY3QuZnJlZXplKHtyZWNvdmVyeUVuYWJsZWQ6ITEsbWF4TG9va2FoZWFkOjMsZHluYW1pY1Rva2Vuc0VuYWJsZWQ6ITEsb3V0cHV0Q3N0OiEwLGVycm9yTWVzc2FnZVByb3ZpZGVyOnF1LG5vZGVMb2NhdGlvblRyYWNraW5nOiJub25lIix0cmFjZUluaXRQZXJmOiExLHNraXBWYWxpZGF0aW9uczohMX0pLGExPU9iamVjdC5mcmVlemUoe3JlY292ZXJ5VmFsdWVGdW5jOm8oKCk9Pnt9LCJyZWNvdmVyeVZhbHVlRnVuYyIpLHJlc3luY0VuYWJsZWQ6ITB9KTsoZnVuY3Rpb24odCl7dFt0LklOVkFMSURfUlVMRV9OQU1FPTBdPSJJTlZBTElEX1JVTEVfTkFNRSIsdFt0LkRVUExJQ0FURV9SVUxFX05BTUU9MV09IkRVUExJQ0FURV9SVUxFX05BTUUiLHRbdC5JTlZBTElEX1JVTEVfT1ZFUlJJREU9Ml09IklOVkFMSURfUlVMRV9PVkVSUklERSIsdFt0LkRVUExJQ0FURV9QUk9EVUNUSU9OUz0zXT0iRFVQTElDQVRFX1BST0RVQ1RJT05TIix0W3QuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRj00XT0iVU5SRVNPTFZFRF9TVUJSVUxFX1JFRiIsdFt0LkxFRlRfUkVDVVJTSU9OPTVdPSJMRUZUX1JFQ1VSU0lPTiIsdFt0Lk5PTkVfTEFTVF9FTVBUWV9BTFQ9Nl09Ik5PTkVfTEFTVF9FTVBUWV9BTFQiLHRbdC5BTUJJR1VPVVNfQUxUUz03XT0iQU1CSUdVT1VTX0FMVFMiLHRbdC5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFPThdPSJDT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFIix0W3QuSU5WQUxJRF9UT0tFTl9OQU1FPTldPSJJTlZBTElEX1RPS0VOX05BTUUiLHRbdC5OT19OT05fRU1QVFlfTE9PS0FIRUFEPTEwXT0iTk9fTk9OX0VNUFRZX0xPT0tBSEVBRCIsdFt0LkFNQklHVU9VU19QUkVGSVhfQUxUUz0xMV09IkFNQklHVU9VU19QUkVGSVhfQUxUUyIsdFt0LlRPT19NQU5ZX0FMVFM9MTJdPSJUT09fTUFOWV9BTFRTIix0W3QuQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OPTEzXT0iQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OIn0pKFZpfHwoVmk9e30pKTtvKGtFLCJFTVBUWV9BTFQiKTtfeD1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlBhcnNlciIpfXN0YXRpYyBwZXJmb3JtU2VsZkFuYWx5c2lzKGUpe3Rocm93IEVycm9yKCJUaGUgKipzdGF0aWMqKiBgcGVyZm9ybVNlbGZBbmFseXNpc2AgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCVxuVXNlIHRoZSAqKmluc3RhbmNlKiogbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbnN0ZWFkLiIpfXBlcmZvcm1TZWxmQW5hbHlzaXMoKXt0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1TZWxmQW5hbHlzaXMiLCgpPT57bGV0IGU7dGhpcy5zZWxmQW5hbHlzaXNEb25lPSEwO2xldCByPXRoaXMuY2xhc3NOYW1lO3RoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcHMiLCgpPT57ZngodGhpcyl9KSx0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVjb3JkaW5nIiwoKT0+e3RyeXt0aGlzLmVuYWJsZVJlY29yZGluZygpLEFlKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsaT0+e2xldCBzPXRoaXNbaV0ub3JpZ2luYWxHcmFtbWFyQWN0aW9uLGw7dGhpcy5UUkFDRV9JTklUKGAke2l9IFJ1bGVgLCgpPT57bD10aGlzLnRvcExldmVsUnVsZVJlY29yZChpLHMpfSksdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtpXT1sfSl9ZmluYWxseXt0aGlzLmRpc2FibGVSZWNvcmRpbmcoKX19KTtsZXQgbj1bXTtpZih0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVzb2x2aW5nIiwoKT0+e249V29lKHtydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKX0pLHRoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KG4pfSksdGhpcy5UUkFDRV9JTklUKCJHcmFtbWFyIFZhbGlkYXRpb25zIiwoKT0+e2lmKGhyKG4pJiZ0aGlzLnNraXBWYWxpZGF0aW9ucz09PSExKXtsZXQgaT1xb2Uoe3J1bGVzOmJyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLHRva2VuVHlwZXM6YnIodGhpcy50b2tlbnNNYXApLGVyck1zZ1Byb3ZpZGVyOiRsLGdyYW1tYXJOYW1lOnJ9KSxhPUZvZSh7bG9va2FoZWFkU3RyYXRlZ3k6dGhpcy5sb29rYWhlYWRTdHJhdGVneSxydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0b2tlblR5cGVzOmJyKHRoaXMudG9rZW5zTWFwKSxncmFtbWFyTmFtZTpyfSk7dGhpcy5kZWZpbml0aW9uRXJyb3JzPXRoaXMuZGVmaW5pdGlvbkVycm9ycy5jb25jYXQoaSxhKX19KSxocih0aGlzLmRlZmluaXRpb25FcnJvcnMpJiYodGhpcy5yZWNvdmVyeUVuYWJsZWQmJnRoaXMuVFJBQ0VfSU5JVCgiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIsKCk9PntsZXQgaT1Lc2UoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3RoaXMucmVzeW5jRm9sbG93cz1pfSksdGhpcy5UUkFDRV9JTklUKCJDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zIiwoKT0+e3ZhciBpLGE7KGE9KGk9dGhpcy5sb29rYWhlYWRTdHJhdGVneSkuaW5pdGlhbGl6ZSk9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwoaSx7cnVsZXM6YnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSl9KSx0aGlzLnByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfSkpLCF0LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HJiYhaHIodGhpcy5kZWZpbml0aW9uRXJyb3JzKSl0aHJvdyBlPUplKHRoaXMuZGVmaW5pdGlvbkVycm9ycyxpPT5pLm1lc3NhZ2UpLG5ldyBFcnJvcihgUGFyc2VyIERlZmluaXRpb24gRXJyb3JzIGRldGVjdGVkOgogJHtlLmpvaW4oYAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmApfWApfSl9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5zZWxmQW5hbHlzaXNEb25lPSExO2xldCBuPXRoaXM7aWYobi5pbml0RXJyb3JIYW5kbGVyKHIpLG4uaW5pdExleGVyQWRhcHRlcigpLG4uaW5pdExvb2tzQWhlYWQociksbi5pbml0UmVjb2duaXplckVuZ2luZShlLHIpLG4uaW5pdFJlY292ZXJhYmxlKHIpLG4uaW5pdFRyZWVCdWlsZGVyKHIpLG4uaW5pdENvbnRlbnRBc3Npc3QoKSxuLmluaXRHYXN0UmVjb3JkZXIociksbi5pbml0UGVyZm9ybWFuY2VUcmFjZXIociksQnQociwiaWdub3JlZElzc3VlcyIpKXRocm93IG5ldyBFcnJvcihgVGhlIDxpZ25vcmVkSXNzdWVzPiBJUGFyc2VyQ29uZmlnIHByb3BlcnR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuCglQbGVhc2UgdXNlIHRoZSA8SUdOT1JFX0FNQklHVUlUSUVTPiBmbGFnIG9uIHRoZSByZWxldmFudCBEU0wgbWV0aG9kIGluc3RlYWQuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0lHTk9SSU5HX0FNQklHVUlUSUVTCglGb3IgZnVydGhlciBkZXRhaWxzLmApO3RoaXMuc2tpcFZhbGlkYXRpb25zPUJ0KHIsInNraXBWYWxpZGF0aW9ucyIpP3Iuc2tpcFZhbGlkYXRpb25zOmRzLnNraXBWYWxpZGF0aW9uc319O194LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HPSExO2JsZShfeCxbYUUsY0UsZEUscEUsZ0UsbUUseUUsdkUseEUsd0VdKTtEeD1jbGFzcyBleHRlbmRzIF94e3N0YXRpY3tvKHRoaXMsIkVtYmVkZGVkQWN0aW9uc1BhcnNlciIpfWNvbnN0cnVjdG9yKGUscj1kcyl7bGV0IG49YW4ocik7bi5vdXRwdXRDc3Q9ITEsc3VwZXIoZSxuKX19fSk7dmFyIHdsZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZzKCl9KTt2YXIga2xlPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgRWxlPU4oKCk9PnsidXNlIHN0cmljdCI7d2xlKCk7a2xlKCl9KTt2YXIgU2xlPU4oKCk9PnsidXNlIHN0cmljdCI7Sk4oKX0pO3ZhciBtZj1OKCgpPT57InVzZSBzdHJpY3QiO0pOKCk7VXMoKTtweCgpO2JwKCk7dDEoKTtTTSgpO1FnKCk7bjEoKTtmTSgpO2ZzKCk7ZnMoKTtFbGUoKTtTbGUoKX0pO2Z1bmN0aW9uIHdwKHQsZSxyKXtyZXR1cm5gJHt0Lm5hbWV9XyR7ZX1fJHtyfWB9ZnVuY3Rpb24gRGxlKHQpe2xldCBlPXtkZWNpc2lvbk1hcDp7fSxkZWNpc2lvblN0YXRlczpbXSxydWxlVG9TdGFydFN0YXRlOm5ldyBNYXAscnVsZVRvU3RvcFN0YXRlOm5ldyBNYXAsc3RhdGVzOltdfTtZRmUoZSx0KTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgaT10W25dLGE9a3AoZSxpLGkpO2EhPT12b2lkIDAmJmkkZShlLGksYSl9cmV0dXJuIGV9ZnVuY3Rpb24gWUZlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGk9ZVtuXSxhPWFhKHQsaSx2b2lkIDAse3R5cGU6VkZlfSkscz1hYSh0LGksdm9pZCAwLHt0eXBlOmwxfSk7YS5zdG9wPXMsdC5ydWxlVG9TdGFydFN0YXRlLnNldChpLGEpLHQucnVsZVRvU3RvcFN0YXRlLnNldChpLHMpfX1mdW5jdGlvbiBMbGUodCxlLHIpe3JldHVybiByIGluc3RhbmNlb2YgRXI/SU0odCxlLHIudGVybWluYWxUeXBlLHIpOnIgaW5zdGFuY2VvZiBvbj9uJGUodCxlLHIpOnIgaW5zdGFuY2VvZiB3bj9aRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBsbj9KRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBQcj9YRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBUbj9qRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBMbj9LRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBSbj9RRmUodCxlLHIpOmtwKHQsZSxyKX1mdW5jdGlvbiBYRmUodCxlLHIpe2xldCBuPWFhKHQsZSxyLHt0eXBlOkFsZX0pO3lmKHQsbik7bGV0IGk9YzEodCxlLG4scixrcCh0LGUscikpO3JldHVybiBObGUodCxlLHIsaSl9ZnVuY3Rpb24gakZlKHQsZSxyKXtsZXQgbj1hYSh0LGUscix7dHlwZTpBbGV9KTt5Zih0LG4pO2xldCBpPWMxKHQsZSxuLHIsa3AodCxlLHIpKSxhPUlNKHQsZSxyLnNlcGFyYXRvcixyKTtyZXR1cm4gTmxlKHQsZSxyLGksYSl9ZnVuY3Rpb24gS0ZlKHQsZSxyKXtsZXQgbj1hYSh0LGUscix7dHlwZTpDbGV9KTt5Zih0LG4pO2xldCBpPWMxKHQsZSxuLHIsa3AodCxlLHIpKTtyZXR1cm4gUmxlKHQsZSxyLGkpfWZ1bmN0aW9uIFFGZSh0LGUscil7bGV0IG49YWEodCxlLHIse3R5cGU6Q2xlfSk7eWYodCxuKTtsZXQgaT1jMSh0LGUsbixyLGtwKHQsZSxyKSksYT1JTSh0LGUsci5zZXBhcmF0b3Iscik7cmV0dXJuIFJsZSh0LGUscixpLGEpfWZ1bmN0aW9uIFpGZSh0LGUscil7bGV0IG49YWEodCxlLHIse3R5cGU6Z2Z9KTt5Zih0LG4pO2xldCBpPUplKHIuZGVmaW5pdGlvbixzPT5MbGUodCxlLHMpKTtyZXR1cm4gYzEodCxlLG4sciwuLi5pKX1mdW5jdGlvbiBKRmUodCxlLHIpe2xldCBuPWFhKHQsZSxyLHt0eXBlOmdmfSk7eWYodCxuKTtsZXQgaT1jMSh0LGUsbixyLGtwKHQsZSxyKSk7cmV0dXJuIGUkZSh0LGUscixpKX1mdW5jdGlvbiBrcCh0LGUscil7bGV0IG49WXIoSmUoci5kZWZpbml0aW9uLGk9PkxsZSh0LGUsaSkpLGk9PmkhPT12b2lkIDApO3JldHVybiBuLmxlbmd0aD09PTE/blswXTpuLmxlbmd0aD09PTA/dm9pZCAwOnIkZSh0LG4pfWZ1bmN0aW9uIFJsZSh0LGUscixuLGkpe2xldCBhPW4ubGVmdCxzPW4ucmlnaHQsbD1hYSh0LGUscix7dHlwZTpxRmV9KTt5Zih0LGwpO2xldCB1PWFhKHQsZSxyLHt0eXBlOl9sZX0pO3JldHVybiBhLmxvb3BiYWNrPWwsdS5sb29wYmFjaz1sLHQuZGVjaXNpb25NYXBbd3AoZSxpPyJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb25NYW5kYXRvcnkiLHIuaWR4KV09bCxEaShzLGwpLGk9PT12b2lkIDA/KERpKGwsYSksRGkobCx1KSk6KERpKGwsdSksRGkobCxpLmxlZnQpLERpKGkucmlnaHQsYSkpLHtsZWZ0OmEscmlnaHQ6dX19ZnVuY3Rpb24gTmxlKHQsZSxyLG4saSl7bGV0IGE9bi5sZWZ0LHM9bi5yaWdodCxsPWFhKHQsZSxyLHt0eXBlOldGZX0pO3lmKHQsbCk7bGV0IHU9YWEodCxlLHIse3R5cGU6X2xlfSksaD1hYSh0LGUscix7dHlwZTpIRmV9KTtyZXR1cm4gbC5sb29wYmFjaz1oLHUubG9vcGJhY2s9aCxEaShsLGEpLERpKGwsdSksRGkocyxoKSxpIT09dm9pZCAwPyhEaShoLHUpLERpKGgsaS5sZWZ0KSxEaShpLnJpZ2h0LGEpKTpEaShoLGwpLHQuZGVjaXNpb25NYXBbd3AoZSxpPyJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb24iLHIuaWR4KV09bCx7bGVmdDpsLHJpZ2h0OnV9fWZ1bmN0aW9uIGUkZSh0LGUscixuKXtsZXQgaT1uLmxlZnQsYT1uLnJpZ2h0O3JldHVybiBEaShpLGEpLHQuZGVjaXNpb25NYXBbd3AoZSwiT3B0aW9uIixyLmlkeCldPWksbn1mdW5jdGlvbiB5Zih0LGUpe3JldHVybiB0LmRlY2lzaW9uU3RhdGVzLnB1c2goZSksZS5kZWNpc2lvbj10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aC0xLGUuZGVjaXNpb259ZnVuY3Rpb24gYzEodCxlLHIsbiwuLi5pKXtsZXQgYT1hYSh0LGUsbix7dHlwZTpVRmUsc3RhcnQ6cn0pO3IuZW5kPWE7Zm9yKGxldCBsIG9mIGkpbCE9PXZvaWQgMD8oRGkocixsLmxlZnQpLERpKGwucmlnaHQsYSkpOkRpKHIsYSk7bGV0IHM9e2xlZnQ6cixyaWdodDphfTtyZXR1cm4gdC5kZWNpc2lvbk1hcFt3cChlLHQkZShuKSxuLmlkeCldPXIsc31mdW5jdGlvbiB0JGUodCl7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJBbHRlcm5hdGlvbiI7aWYodCBpbnN0YW5jZW9mIGxuKXJldHVybiJPcHRpb24iO2lmKHQgaW5zdGFuY2VvZiBQcilyZXR1cm4iUmVwZXRpdGlvbiI7aWYodCBpbnN0YW5jZW9mIFRuKXJldHVybiJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJSZXBldGl0aW9uTWFuZGF0b3J5IjtpZih0IGluc3RhbmNlb2YgUm4pcmV0dXJuIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIjt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJvZHVjdGlvbiB0eXBlIGVuY291bnRlcmVkIil9ZnVuY3Rpb24gciRlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxyLTE7YSsrKXtsZXQgcz1lW2FdLGw7cy5sZWZ0LnRyYW5zaXRpb25zLmxlbmd0aD09PTEmJihsPXMubGVmdC50cmFuc2l0aW9uc1swXSk7bGV0IHU9bCBpbnN0YW5jZW9mIG8xLGg9bCxmPWVbYSsxXS5sZWZ0O3MubGVmdC50eXBlPT09Z2YmJnMucmlnaHQudHlwZT09PWdmJiZsIT09dm9pZCAwJiYodSYmaC5mb2xsb3dTdGF0ZT09PXMucmlnaHR8fGwudGFyZ2V0PT09cy5yaWdodCk/KHU/aC5mb2xsb3dTdGF0ZT1mOmwudGFyZ2V0PWYsYSRlKHQscy5yaWdodCkpOkRpKHMucmlnaHQsZil9bGV0IG49ZVswXSxpPWVbci0xXTtyZXR1cm57bGVmdDpuLmxlZnQscmlnaHQ6aS5yaWdodH19ZnVuY3Rpb24gSU0odCxlLHIsbil7bGV0IGk9YWEodCxlLG4se3R5cGU6Z2Z9KSxhPWFhKHQsZSxuLHt0eXBlOmdmfSk7cmV0dXJuIE9NKGksbmV3IHMxKGEscikpLHtsZWZ0OmkscmlnaHQ6YX19ZnVuY3Rpb24gbiRlKHQsZSxyKXtsZXQgbj1yLnJlZmVyZW5jZWRSdWxlLGk9dC5ydWxlVG9TdGFydFN0YXRlLmdldChuKSxhPWFhKHQsZSxyLHt0eXBlOmdmfSkscz1hYSh0LGUscix7dHlwZTpnZn0pLGw9bmV3IG8xKGksbixzKTtyZXR1cm4gT00oYSxsKSx7bGVmdDphLHJpZ2h0OnN9fWZ1bmN0aW9uIGkkZSh0LGUscil7bGV0IG49dC5ydWxlVG9TdGFydFN0YXRlLmdldChlKTtEaShuLHIubGVmdCk7bGV0IGk9dC5ydWxlVG9TdG9wU3RhdGUuZ2V0KGUpO3JldHVybiBEaShyLnJpZ2h0LGkpLHtsZWZ0Om4scmlnaHQ6aX19ZnVuY3Rpb24gRGkodCxlKXtsZXQgcj1uZXcgUngoZSk7T00odCxyKX1mdW5jdGlvbiBhYSh0LGUscixuKXtsZXQgaT1PYmplY3QuYXNzaWduKHthdG46dCxwcm9kdWN0aW9uOnIsZXBzaWxvbk9ubHlUcmFuc2l0aW9uczohMSxydWxlOmUsdHJhbnNpdGlvbnM6W10sbmV4dFRva2VuV2l0aGluUnVsZTpbXSxzdGF0ZU51bWJlcjp0LnN0YXRlcy5sZW5ndGh9LG4pO3JldHVybiB0LnN0YXRlcy5wdXNoKGkpLGl9ZnVuY3Rpb24gT00odCxlKXt0LnRyYW5zaXRpb25zLmxlbmd0aD09PTAmJih0LmVwc2lsb25Pbmx5VHJhbnNpdGlvbnM9ZS5pc0Vwc2lsb24oKSksdC50cmFuc2l0aW9ucy5wdXNoKGUpfWZ1bmN0aW9uIGEkZSh0LGUpe3Quc3RhdGVzLnNwbGljZSh0LnN0YXRlcy5pbmRleE9mKGUpLDEpfXZhciBnZixWRmUsQ2xlLEFsZSxsMSxVRmUsSEZlLFdGZSxxRmUsX2xlLEx4LHMxLFJ4LG8xLE1sZT1OKCgpPT57InVzZSBzdHJpY3QiO1VtKCk7ZlIoKTttZigpO28od3AsImJ1aWxkQVROS2V5Iik7Z2Y9MSxWRmU9MixDbGU9NCxBbGU9NSxsMT03LFVGZT04LEhGZT05LFdGZT0xMCxxRmU9MTEsX2xlPTEyLEx4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0VHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGFyZ2V0PWV9aXNFcHNpbG9uKCl7cmV0dXJuITF9fSxzMT1jbGFzcyBleHRlbmRzIEx4e3N0YXRpY3tvKHRoaXMsIkF0b21UcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuVHlwZT1yfX0sUng9Y2xhc3MgZXh0ZW5kcyBMeHtzdGF0aWN7byh0aGlzLCJFcHNpbG9uVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfWlzRXBzaWxvbigpe3JldHVybiEwfX0sbzE9Y2xhc3MgZXh0ZW5kcyBMeHtzdGF0aWN7byh0aGlzLCJSdWxlVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlKSx0aGlzLnJ1bGU9cix0aGlzLmZvbGxvd1N0YXRlPW59aXNFcHNpbG9uKCl7cmV0dXJuITB9fTtvKERsZSwiY3JlYXRlQVROIik7byhZRmUsImNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMiKTtvKExsZSwiYXRvbSIpO28oWEZlLCJyZXBldGl0aW9uIik7byhqRmUsInJlcGV0aXRpb25TZXAiKTtvKEtGZSwicmVwZXRpdGlvbk1hbmRhdG9yeSIpO28oUUZlLCJyZXBldGl0aW9uTWFuZGF0b3J5U2VwIik7byhaRmUsImFsdGVybmF0aW9uIik7byhKRmUsIm9wdGlvbiIpO28oa3AsImJsb2NrIik7byhSbGUsInBsdXMiKTtvKE5sZSwic3RhciIpO28oZSRlLCJvcHRpb25hbCIpO28oeWYsImRlZmluZURlY2lzaW9uU3RhdGUiKTtvKGMxLCJtYWtlQWx0cyIpO28odCRlLCJnZXRQcm9kVHlwZSIpO28ociRlLCJtYWtlQmxvY2siKTtvKElNLCJ0b2tlblJlZiIpO28obiRlLCJydWxlUmVmIik7byhpJGUsImJ1aWxkUnVsZUhhbmRsZSIpO28oRGksImVwc2lsb24iKTtvKGFhLCJuZXdTdGF0ZSIpO28oT00sImFkZFRyYW5zaXRpb24iKTtvKGEkZSwicmVtb3ZlU3RhdGUiKX0pO2Z1bmN0aW9uIFBNKHQsZT0hMCl7cmV0dXJuYCR7ZT9gYSR7dC5hbHR9YDoiIn1zJHt0LnN0YXRlLnN0YXRlTnVtYmVyfToke3Quc3RhY2subWFwKHI9PnIuc3RhdGVOdW1iZXIudG9TdHJpbmcoKSkuam9pbigiXyIpfWB9dmFyIE54LHUxLElsZT1OKCgpPT57InVzZSBzdHJpY3QiO1VtKCk7Tng9e30sdTE9Y2xhc3N7c3RhdGlje28odGhpcywiQVROQ29uZmlnU2V0Iil9Y29uc3RydWN0b3IoKXt0aGlzLm1hcD17fSx0aGlzLmNvbmZpZ3M9W119Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5jb25maWdzLmxlbmd0aH1maW5hbGl6ZSgpe3RoaXMubWFwPXt9fWFkZChlKXtsZXQgcj1QTShlKTtyIGluIHRoaXMubWFwfHwodGhpcy5tYXBbcl09dGhpcy5jb25maWdzLmxlbmd0aCx0aGlzLmNvbmZpZ3MucHVzaChlKSl9Z2V0IGVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuY29uZmlnc31nZXQgYWx0cygpe3JldHVybiBKZSh0aGlzLmNvbmZpZ3MsZT0+ZS5hbHQpfWdldCBrZXkoKXtsZXQgZT0iIjtmb3IobGV0IHIgaW4gdGhpcy5tYXApZSs9cisiOiI7cmV0dXJuIGV9fTtvKFBNLCJnZXRBVE5Db25maWdLZXkiKX0pO2Z1bmN0aW9uIHMkZSh0LGUpe2xldCByPXt9O3JldHVybiBuPT57bGV0IGk9bi50b1N0cmluZygpLGE9cltpXTtyZXR1cm4gYSE9PXZvaWQgMHx8KGE9e2F0blN0YXJ0U3RhdGU6dCxkZWNpc2lvbjplLHN0YXRlczp7fX0scltpXT1hKSxhfX1mdW5jdGlvbiBQbGUodCxlPSEwKXtsZXQgcj1uZXcgU2V0O2ZvcihsZXQgbiBvZiB0KXtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgYSBvZiBuKXtpZihhPT09dm9pZCAwKXtpZihlKWJyZWFrO3JldHVybiExfWxldCBzPVthLnRva2VuVHlwZUlkeF0uY29uY2F0KGEuY2F0ZWdvcnlNYXRjaGVzKTtmb3IobGV0IGwgb2YgcylpZihyLmhhcyhsKSl7aWYoIWkuaGFzKGwpKXJldHVybiExfWVsc2Ugci5hZGQobCksaS5hZGQobCl9fXJldHVybiEwfWZ1bmN0aW9uIG8kZSh0KXtsZXQgZT10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aCxyPUFycmF5KGUpO2ZvcihsZXQgbj0wO248ZTtuKyspcltuXT1zJGUodC5kZWNpc2lvblN0YXRlc1tuXSxuKTtyZXR1cm4gcn1mdW5jdGlvbiBCTSh0LGUscixuKXtsZXQgaT10W2VdKHIpLGE9aS5zdGFydDtpZihhPT09dm9pZCAwKXtsZXQgbD12JGUoaS5hdG5TdGFydFN0YXRlKTthPSRsZShpLEZsZShsKSksaS5zdGFydD1hfXJldHVybiBsJGUuYXBwbHkodGhpcyxbaSxhLHIsbl0pfWZ1bmN0aW9uIGwkZSh0LGUscixuKXtsZXQgaT1lLGE9MSxzPVtdLGw9dGhpcy5MQShhKyspO2Zvcig7Oyl7bGV0IHU9cCRlKGksbCk7aWYodT09PXZvaWQgMCYmKHU9YyRlLmFwcGx5KHRoaXMsW3QsaSxsLGEscixuXSkpLHU9PT1OeClyZXR1cm4gZCRlKHMsaSxsKTtpZih1LmlzQWNjZXB0U3RhdGU9PT0hMClyZXR1cm4gdS5wcmVkaWN0aW9uO2k9dSxzLnB1c2gobCksbD10aGlzLkxBKGErKyl9fWZ1bmN0aW9uIGMkZSh0LGUscixuLGksYSl7bGV0IHM9bSRlKGUuY29uZmlncyxyLGkpO2lmKHMuc2l6ZT09PTApcmV0dXJuIEJsZSh0LGUscixOeCksTng7bGV0IGw9RmxlKHMpLHU9eSRlKHMsaSk7aWYodSE9PXZvaWQgMClsLmlzQWNjZXB0U3RhdGU9ITAsbC5wcmVkaWN0aW9uPXUsbC5jb25maWdzLnVuaXF1ZUFsdD11O2Vsc2UgaWYodyRlKHMpKXtsZXQgaD1ObChzLmFsdHMpO2wuaXNBY2NlcHRTdGF0ZT0hMCxsLnByZWRpY3Rpb249aCxsLmNvbmZpZ3MudW5pcXVlQWx0PWgsdSRlLmFwcGx5KHRoaXMsW3QsbixzLmFsdHMsYV0pfXJldHVybiBsPUJsZSh0LGUscixsKSxsfWZ1bmN0aW9uIHUkZSh0LGUscixuKXtsZXQgaT1bXTtmb3IobGV0IGg9MTtoPD1lO2grKylpLnB1c2godGhpcy5MQShoKS50b2tlblR5cGUpO2xldCBhPXQuYXRuU3RhcnRTdGF0ZSxzPWEucnVsZSxsPWEucHJvZHVjdGlvbix1PWgkZSh7dG9wTGV2ZWxSdWxlOnMsYW1iaWd1aXR5SW5kaWNlczpyLHByb2R1Y3Rpb246bCxwcmVmaXhQYXRoOml9KTtuKHUpfWZ1bmN0aW9uIGgkZSh0KXtsZXQgZT1KZSh0LnByZWZpeFBhdGgsaT0+SHUoaSkpLmpvaW4oIiwgIikscj10LnByb2R1Y3Rpb24uaWR4PT09MD8iIjp0LnByb2R1Y3Rpb24uaWR4LG49YEFtYmlndW91cyBBbHRlcm5hdGl2ZXMgRGV0ZWN0ZWQ6IDwke3QuYW1iaWd1aXR5SW5kaWNlcy5qb2luKCIsICIpfT4gaW4gPCR7ZiRlKHQucHJvZHVjdGlvbil9JHtyfT4gaW5zaWRlIDwke3QudG9wTGV2ZWxSdWxlLm5hbWV9PiBSdWxlLAo8JHtlfT4gbWF5IGFwcGVhcnMgYXMgYSBwcmVmaXggcGF0aCBpbiBhbGwgdGhlc2UgYWx0ZXJuYXRpdmVzLgpgO3JldHVybiBuPW4rYFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQU1CSUdVT1VTX0FMVEVSTkFUSVZFUwpGb3IgRnVydGhlciBkZXRhaWxzLmAsbn1mdW5jdGlvbiBmJGUodCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiJTVUJSVUxFIjtpZih0IGluc3RhbmNlb2YgbG4pcmV0dXJuIk9QVElPTiI7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJPUiI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJBVF9MRUFTVF9PTkUiO2lmKHQgaW5zdGFuY2VvZiBSbilyZXR1cm4iQVRfTEVBU1RfT05FX1NFUCI7aWYodCBpbnN0YW5jZW9mIFRuKXJldHVybiJNQU5ZX1NFUCI7aWYodCBpbnN0YW5jZW9mIFByKXJldHVybiJNQU5ZIjtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIkNPTlNVTUUiO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIGQkZSh0LGUscil7bGV0IG49Z2EoZS5jb25maWdzLmVsZW1lbnRzLGE9PmEuc3RhdGUudHJhbnNpdGlvbnMpLGk9ZGllKG4uZmlsdGVyKGE9PmEgaW5zdGFuY2VvZiBzMSkubWFwKGE9PmEudG9rZW5UeXBlKSxhPT5hLnRva2VuVHlwZUlkeCk7cmV0dXJue2FjdHVhbFRva2VuOnIscG9zc2libGVUb2tlblR5cGVzOmksdG9rZW5QYXRoOnR9fWZ1bmN0aW9uIHAkZSh0LGUpe3JldHVybiB0LmVkZ2VzW2UudG9rZW5UeXBlSWR4XX1mdW5jdGlvbiBtJGUodCxlLHIpe2xldCBuPW5ldyB1MSxpPVtdO2ZvcihsZXQgcyBvZiB0LmVsZW1lbnRzKXtpZihyLmlzKHMuYWx0KT09PSExKWNvbnRpbnVlO2lmKHMuc3RhdGUudHlwZT09PWwxKXtpLnB1c2gocyk7Y29udGludWV9bGV0IGw9cy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9cy5zdGF0ZS50cmFuc2l0aW9uc1t1XSxmPWckZShoLGUpO2YhPT12b2lkIDAmJm4uYWRkKHtzdGF0ZTpmLGFsdDpzLmFsdCxzdGFjazpzLnN0YWNrfSl9fWxldCBhO2lmKGkubGVuZ3RoPT09MCYmbi5zaXplPT09MSYmKGE9biksYT09PXZvaWQgMCl7YT1uZXcgdTE7Zm9yKGxldCBzIG9mIG4uZWxlbWVudHMpU0UocyxhKX1pZihpLmxlbmd0aD4wJiYhYiRlKGEpKWZvcihsZXQgcyBvZiBpKWEuYWRkKHMpO3JldHVybiBhfWZ1bmN0aW9uIGckZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiBzMSYmZ3goZSx0LnRva2VuVHlwZSkpcmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIHkkZSh0LGUpe2xldCByO2ZvcihsZXQgbiBvZiB0LmVsZW1lbnRzKWlmKGUuaXMobi5hbHQpPT09ITApe2lmKHI9PT12b2lkIDApcj1uLmFsdDtlbHNlIGlmKHIhPT1uLmFsdClyZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gRmxlKHQpe3JldHVybntjb25maWdzOnQsZWRnZXM6e30saXNBY2NlcHRTdGF0ZTohMSxwcmVkaWN0aW9uOi0xfX1mdW5jdGlvbiBCbGUodCxlLHIsbil7cmV0dXJuIG49JGxlKHQsbiksZS5lZGdlc1tyLnRva2VuVHlwZUlkeF09bixufWZ1bmN0aW9uICRsZSh0LGUpe2lmKGU9PT1OeClyZXR1cm4gZTtsZXQgcj1lLmNvbmZpZ3Mua2V5LG49dC5zdGF0ZXNbcl07cmV0dXJuIG4hPT12b2lkIDA/bjooZS5jb25maWdzLmZpbmFsaXplKCksdC5zdGF0ZXNbcl09ZSxlKX1mdW5jdGlvbiB2JGUodCl7bGV0IGU9bmV3IHUxLHI9dC50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGE9e3N0YXRlOnQudHJhbnNpdGlvbnNbbl0udGFyZ2V0LGFsdDpuLHN0YWNrOltdfTtTRShhLGUpfXJldHVybiBlfWZ1bmN0aW9uIFNFKHQsZSl7bGV0IHI9dC5zdGF0ZTtpZihyLnR5cGU9PT1sMSl7aWYodC5zdGFjay5sZW5ndGg+MCl7bGV0IGk9Wy4uLnQuc3RhY2tdLHM9e3N0YXRlOmkucG9wKCksYWx0OnQuYWx0LHN0YWNrOml9O1NFKHMsZSl9ZWxzZSBlLmFkZCh0KTtyZXR1cm59ci5lcHNpbG9uT25seVRyYW5zaXRpb25zfHxlLmFkZCh0KTtsZXQgbj1yLnRyYW5zaXRpb25zLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgYT1yLnRyYW5zaXRpb25zW2ldLHM9eCRlKHQsYSk7cyE9PXZvaWQgMCYmU0UocyxlKX19ZnVuY3Rpb24geCRlKHQsZSl7aWYoZSBpbnN0YW5jZW9mIFJ4KXJldHVybntzdGF0ZTplLnRhcmdldCxhbHQ6dC5hbHQsc3RhY2s6dC5zdGFja307aWYoZSBpbnN0YW5jZW9mIG8xKXtsZXQgcj1bLi4udC5zdGFjayxlLmZvbGxvd1N0YXRlXTtyZXR1cm57c3RhdGU6ZS50YXJnZXQsYWx0OnQuYWx0LHN0YWNrOnJ9fX1mdW5jdGlvbiBiJGUodCl7Zm9yKGxldCBlIG9mIHQuZWxlbWVudHMpaWYoZS5zdGF0ZS50eXBlPT09bDEpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVCRlKHQpe2ZvcihsZXQgZSBvZiB0LmVsZW1lbnRzKWlmKGUuc3RhdGUudHlwZSE9PWwxKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHckZSh0KXtpZihUJGUodCkpcmV0dXJuITA7bGV0IGU9ayRlKHQuZWxlbWVudHMpO3JldHVybiBFJGUoZSkmJiFTJGUoZSl9ZnVuY3Rpb24gayRlKHQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBuPVBNKHIsITEpLGk9ZS5nZXQobik7aT09PXZvaWQgMCYmKGk9e30sZS5zZXQobixpKSksaVtyLmFsdF09ITB9cmV0dXJuIGV9ZnVuY3Rpb24gRSRlKHQpe2ZvcihsZXQgZSBvZiBBcnJheS5mcm9tKHQudmFsdWVzKCkpKWlmKE9iamVjdC5rZXlzKGUpLmxlbmd0aD4xKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFMkZSh0KXtmb3IobGV0IGUgb2YgQXJyYXkuZnJvbSh0LnZhbHVlcygpKSlpZihPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0xKXJldHVybiEwO3JldHVybiExfXZhciBFRSxPbGUsTXgsemxlPU4oKCk9PnsidXNlIHN0cmljdCI7bWYoKTtNbGUoKTtJbGUoKTtiUigpO3BSKCk7cGllKCk7VW0oKTtTdygpO2VrKCk7YWsoKTtFUigpO28ocyRlLCJjcmVhdGVERkFDYWNoZSIpO0VFPWNsYXNze3N0YXRpY3tvKHRoaXMsIlByZWRpY2F0ZVNldCIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmVkaWNhdGVzPVtdfWlzKGUpe3JldHVybiBlPj10aGlzLnByZWRpY2F0ZXMubGVuZ3RofHx0aGlzLnByZWRpY2F0ZXNbZV19c2V0KGUscil7dGhpcy5wcmVkaWNhdGVzW2VdPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIixyPXRoaXMucHJlZGljYXRlcy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyllKz10aGlzLnByZWRpY2F0ZXNbbl09PT0hMD8iMSI6IjAiO3JldHVybiBlfX0sT2xlPW5ldyBFRSxNeD1jbGFzcyBleHRlbmRzIFl1e3N0YXRpY3tvKHRoaXMsIkxMU3Rhckxvb2thaGVhZFN0cmF0ZWd5Iil9Y29uc3RydWN0b3IoZSl7dmFyIHI7c3VwZXIoKSx0aGlzLmxvZ2dpbmc9KHI9ZT8ubG9nZ2luZykhPT1udWxsJiZyIT09dm9pZCAwP3I6bj0+Y29uc29sZS5sb2cobil9aW5pdGlhbGl6ZShlKXt0aGlzLmF0bj1EbGUoZS5ydWxlcyksdGhpcy5kZmFzPW8kZSh0aGlzLmF0bil9dmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcygpe3JldHVybltdfXZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcygpe3JldHVybltdfWJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oZSl7bGV0e3Byb2RPY2N1cnJlbmNlOnIscnVsZTpuLGhhc1ByZWRpY2F0ZXM6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9d3AobiwiQWx0ZXJuYXRpb24iLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1KZShyRSh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOiJBbHRlcm5hdGlvbiIscnVsZTpufSkscD0+SmUocCxtPT5tWzBdKSk7aWYoUGxlKGQsITEpJiYhYSl7bGV0IHA9WHIoZCwobSxnLHkpPT4oQWUoZyx2PT57diYmKG1bdi50b2tlblR5cGVJZHhdPXksQWUodi5jYXRlZ29yeU1hdGNoZXMseD0+e21beF09eX0pKX0pLG0pLHt9KTtyZXR1cm4gaT9mdW5jdGlvbihtKXt2YXIgZztsZXQgeT10aGlzLkxBKDEpLHY9cFt5LnRva2VuVHlwZUlkeF07aWYobSE9PXZvaWQgMCYmdiE9PXZvaWQgMCl7bGV0IHg9KGc9bVt2XSk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLkdBVEU7aWYoeCE9PXZvaWQgMCYmeC5jYWxsKHRoaXMpPT09ITEpcmV0dXJufXJldHVybiB2fTpmdW5jdGlvbigpe2xldCBtPXRoaXMuTEEoMSk7cmV0dXJuIHBbbS50b2tlblR5cGVJZHhdfX1lbHNlIHJldHVybiBpP2Z1bmN0aW9uKHApe2xldCBtPW5ldyBFRSxnPXA9PT12b2lkIDA/MDpwLmxlbmd0aDtmb3IobGV0IHY9MDt2PGc7disrKXtsZXQgeD1wPy5bdl0uR0FURTttLnNldCh2LHg9PT12b2lkIDB8fHguY2FsbCh0aGlzKSl9bGV0IHk9Qk0uY2FsbCh0aGlzLHMsZixtLGwpO3JldHVybiB0eXBlb2YgeT09Im51bWJlciI/eTp2b2lkIDB9OmZ1bmN0aW9uKCl7bGV0IHA9Qk0uY2FsbCh0aGlzLHMsZixPbGUsbCk7cmV0dXJuIHR5cGVvZiBwPT0ibnVtYmVyIj9wOnZvaWQgMH19YnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbChlKXtsZXR7cHJvZE9jY3VycmVuY2U6cixydWxlOm4scHJvZFR5cGU6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9d3AobixpLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1KZShyRSh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOmkscnVsZTpufSkscD0+SmUocCxtPT5tWzBdKSk7aWYoUGxlKGQpJiZkWzBdWzBdJiYhYSl7bGV0IHA9ZFswXSxtPXFyKHApO2lmKG0ubGVuZ3RoPT09MSYmaHIobVswXS5jYXRlZ29yeU1hdGNoZXMpKXtsZXQgeT1tWzBdLnRva2VuVHlwZUlkeDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MQSgxKS50b2tlblR5cGVJZHg9PT15fX1lbHNle2xldCBnPVhyKG0sKHksdik9Pih2IT09dm9pZCAwJiYoeVt2LnRva2VuVHlwZUlkeF09ITAsQWUodi5jYXRlZ29yeU1hdGNoZXMseD0+e3lbeF09ITB9KSkseSkse30pO3JldHVybiBmdW5jdGlvbigpe2xldCB5PXRoaXMuTEEoMSk7cmV0dXJuIGdbeS50b2tlblR5cGVJZHhdPT09ITB9fX1yZXR1cm4gZnVuY3Rpb24oKXtsZXQgcD1CTS5jYWxsKHRoaXMscyxmLE9sZSxsKTtyZXR1cm4gdHlwZW9mIHA9PSJvYmplY3QiPyExOnA9PT0wfX19O28oUGxlLCJpc0xMMVNlcXVlbmNlIik7byhvJGUsImluaXRBVE5TaW11bGF0b3IiKTtvKEJNLCJhZGFwdGl2ZVByZWRpY3QiKTtvKGwkZSwicGVyZm9ybUxvb2thaGVhZCIpO28oYyRlLCJjb21wdXRlTG9va2FoZWFkVGFyZ2V0Iik7byh1JGUsInJlcG9ydExvb2thaGVhZEFtYmlndWl0eSIpO28oaCRlLCJidWlsZEFtYmlndWl0eUVycm9yIik7byhmJGUsImdldFByb2R1Y3Rpb25Ec2xOYW1lIik7byhkJGUsImJ1aWxkQWRhcHRpdmVQcmVkaWN0RXJyb3IiKTtvKHAkZSwiZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZSIpO28obSRlLCJjb21wdXRlUmVhY2hTZXQiKTtvKGckZSwiZ2V0UmVhY2hhYmxlVGFyZ2V0Iik7byh5JGUsImdldFVuaXF1ZUFsdCIpO28oRmxlLCJuZXdERkFTdGF0ZSIpO28oQmxlLCJhZGRERkFFZGdlIik7bygkbGUsImFkZERGQVN0YXRlIik7byh2JGUsImNvbXB1dGVTdGFydFN0YXRlIik7byhTRSwiY2xvc3VyZSIpO28oeCRlLCJnZXRFcHNpbG9uVGFyZ2V0Iik7byhiJGUsImhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZSIpO28oVCRlLCJhbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyIpO28odyRlLCJoYXNDb25mbGljdFRlcm1pbmF0aW5nUHJlZGljdGlvbiIpO28oayRlLCJnZXRDb25mbGljdGluZ0FsdFNldHMiKTtvKEUkZSwiaGFzQ29uZmxpY3RpbmdBbHRTZXQiKTtvKFMkZSwiaGFzU3RhdGVBc3NvY2lhdGVkV2l0aE9uZUFsdCIpfSk7dmFyIEdsZT1OKCgpPT57InVzZSBzdHJpY3QiO3psZSgpfSk7dmFyIFZsZSxGTSxVbGUsQ0UsanIsQnIsQUUsSGxlLCRNLFdsZSxxbGUsWWxlLFhsZSx6TSxqbGUsS2xlLFFsZSxfRSxoMSxmMSxHTSxkMSxabGUsVk0sVU0sSE0sV00scU0sSmxlLGVjZSxZTSx0Y2UsWE0sSXgscmNlLG5jZSxpY2UsYWNlLHNjZSxvY2UsbGNlLGNjZSxERSx1Y2UsaGNlLGZjZSxkY2UscGNlLG1jZSxnY2UseWNlLHZjZSx4Y2UsYmNlLExFLFRjZSx3Y2Usa2NlLEVjZSxTY2UsQ2NlLEFjZSxfY2UsRGNlLExjZSxSY2UsTmNlLE1jZSxqTSxLTSxJY2UsT2NlLFBjZSxCY2UsRmNlLCRjZSx6Y2UsR2NlLFZjZSxRTSwkZSxaTT1OKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKFZsZXx8KFZsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKEZNfHwoRk09e30pKTsoZnVuY3Rpb24odCl7dC5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoVWxlfHwoVWxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuTUlOX1ZBTFVFPTAsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoQ0V8fChDRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJuIG49PT1OdW1iZXIuTUFYX1ZBTFVFJiYobj1DRS5NQVhfVkFMVUUpLGk9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoaT1DRS5NQVhfVkFMVUUpLHtsaW5lOm4sY2hhcmFjdGVyOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLm9iamVjdExpdGVyYWwoaSkmJiRlLnVpbnRlZ2VyKGkubGluZSkmJiRlLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1vKHIsImlzIiksdC5pcz1yfSkoanJ8fChqcj17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe2lmKCRlLnVpbnRlZ2VyKG4pJiYkZS51aW50ZWdlcihpKSYmJGUudWludGVnZXIoYSkmJiRlLnVpbnRlZ2VyKHMpKXJldHVybntzdGFydDpqci5jcmVhdGUobixpKSxlbmQ6anIuY3JlYXRlKGEscyl9O2lmKGpyLmlzKG4pJiZqci5pcyhpKSlyZXR1cm57c3RhcnQ6bixlbmQ6aX07dGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtufSwgJHtpfSwgJHthfSwgJHtzfV1gKX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiZqci5pcyhpLnN0YXJ0KSYmanIuaXMoaS5lbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShCcnx8KEJyPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4scmFuZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmQnIuaXMoaS5yYW5nZSkmJigkZS5zdHJpbmcoaS51cmkpfHwkZS51bmRlZmluZWQoaS51cmkpKX1vKHIsImlzIiksdC5pcz1yfSkoQUV8fChBRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt0YXJnZXRVcmk6bix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOmEsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmQnIuaXMoaS50YXJnZXRSYW5nZSkmJiRlLnN0cmluZyhpLnRhcmdldFVyaSkmJkJyLmlzKGkudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpJiYoQnIuaXMoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fCRlLnVuZGVmaW5lZChpLm9yaWdpblNlbGVjdGlvblJhbmdlKSl9byhyLCJpcyIpLHQuaXM9cn0pKEhsZXx8KEhsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybntyZWQ6bixncmVlbjppLGJsdWU6YSxhbHBoYTpzfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiYkZS5udW1iZXJSYW5nZShpLnJlZCwwLDEpJiYkZS5udW1iZXJSYW5nZShpLmdyZWVuLDAsMSkmJiRlLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiYkZS5udW1iZXJSYW5nZShpLmFscGhhLDAsMSl9byhyLCJpcyIpLHQuaXM9cn0pKCRNfHwoJE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLGNvbG9yOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLm9iamVjdExpdGVyYWwoaSkmJkJyLmlzKGkucmFuZ2UpJiYkTS5pcyhpLmNvbG9yKX1vKHIsImlzIiksdC5pcz1yfSkoV2xlfHwoV2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntsYWJlbDpuLHRleHRFZGl0OmksYWRkaXRpb25hbFRleHRFZGl0czphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiYkZS5zdHJpbmcoaS5sYWJlbCkmJigkZS51bmRlZmluZWQoaS50ZXh0RWRpdCl8fGYxLmlzKGkpKSYmKCRlLnVuZGVmaW5lZChpLmFkZGl0aW9uYWxUZXh0RWRpdHMpfHwkZS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxmMS5pcykpfW8ociwiaXMiKSx0LmlzPXJ9KShxbGV8fChxbGU9e30pKTsoZnVuY3Rpb24odCl7dC5Db21tZW50PSJjb21tZW50Iix0LkltcG9ydHM9ImltcG9ydHMiLHQuUmVnaW9uPSJyZWdpb24ifSkoWWxlfHwoWWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyxsLHUpe2xldCBoPXtzdGFydExpbmU6bixlbmRMaW5lOml9O3JldHVybiAkZS5kZWZpbmVkKGEpJiYoaC5zdGFydENoYXJhY3Rlcj1hKSwkZS5kZWZpbmVkKHMpJiYoaC5lbmRDaGFyYWN0ZXI9cyksJGUuZGVmaW5lZChsKSYmKGgua2luZD1sKSwkZS5kZWZpbmVkKHUpJiYoaC5jb2xsYXBzZWRUZXh0PXUpLGh9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmJGUudWludGVnZXIoaS5zdGFydExpbmUpJiYkZS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJigkZS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fCRlLnVpbnRlZ2VyKGkuc3RhcnRDaGFyYWN0ZXIpKSYmKCRlLnVuZGVmaW5lZChpLmVuZENoYXJhY3Rlcil8fCRlLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJigkZS51bmRlZmluZWQoaS5raW5kKXx8JGUuc3RyaW5nKGkua2luZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShYbGV8fChYbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntsb2NhdGlvbjpuLG1lc3NhZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmQUUuaXMoaS5sb2NhdGlvbikmJiRlLnN0cmluZyhpLm1lc3NhZ2UpfW8ociwiaXMiKSx0LmlzPXJ9KSh6TXx8KHpNPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRXJyb3I9MSx0Lldhcm5pbmc9Mix0LkluZm9ybWF0aW9uPTMsdC5IaW50PTR9KShqbGV8fChqbGU9e30pKTsoZnVuY3Rpb24odCl7dC5Vbm5lY2Vzc2FyeT0xLHQuRGVwcmVjYXRlZD0yfSkoS2xlfHwoS2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChuKSYmJGUuc3RyaW5nKG4uaHJlZil9byhlLCJpcyIpLHQuaXM9ZX0pKFFsZXx8KFFsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMsbCx1KXtsZXQgaD17cmFuZ2U6bixtZXNzYWdlOml9O3JldHVybiAkZS5kZWZpbmVkKGEpJiYoaC5zZXZlcml0eT1hKSwkZS5kZWZpbmVkKHMpJiYoaC5jb2RlPXMpLCRlLmRlZmluZWQobCkmJihoLnNvdXJjZT1sKSwkZS5kZWZpbmVkKHUpJiYoaC5yZWxhdGVkSW5mb3JtYXRpb249dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXt2YXIgaTtsZXQgYT1uO3JldHVybiAkZS5kZWZpbmVkKGEpJiZCci5pcyhhLnJhbmdlKSYmJGUuc3RyaW5nKGEubWVzc2FnZSkmJigkZS5udW1iZXIoYS5zZXZlcml0eSl8fCRlLnVuZGVmaW5lZChhLnNldmVyaXR5KSkmJigkZS5pbnRlZ2VyKGEuY29kZSl8fCRlLnN0cmluZyhhLmNvZGUpfHwkZS51bmRlZmluZWQoYS5jb2RlKSkmJigkZS51bmRlZmluZWQoYS5jb2RlRGVzY3JpcHRpb24pfHwkZS5zdHJpbmcoKGk9YS5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5ocmVmKSkmJigkZS5zdHJpbmcoYS5zb3VyY2UpfHwkZS51bmRlZmluZWQoYS5zb3VyY2UpKSYmKCRlLnVuZGVmaW5lZChhLnJlbGF0ZWRJbmZvcm1hdGlvbil8fCRlLnR5cGVkQXJyYXkoYS5yZWxhdGVkSW5mb3JtYXRpb24sek0uaXMpKX1vKHIsImlzIiksdC5pcz1yfSkoX0V8fChfRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSwuLi5hKXtsZXQgcz17dGl0bGU6bixjb21tYW5kOml9O3JldHVybiAkZS5kZWZpbmVkKGEpJiZhLmxlbmd0aD4wJiYocy5hcmd1bWVudHM9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiYkZS5zdHJpbmcoaS50aXRsZSkmJiRlLnN0cmluZyhpLmNvbW1hbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShoMXx8KGgxPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OnN9fW8oZSwicmVwbGFjZSIpLHQucmVwbGFjZT1lO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6c319byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDoiIn19byhuLCJkZWwiKSx0LmRlbD1uO2Z1bmN0aW9uIGkoYSl7bGV0IHM9YTtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChzKSYmJGUuc3RyaW5nKHMubmV3VGV4dCkmJkJyLmlzKHMucmFuZ2UpfW8oaSwiaXMiKSx0LmlzPWl9KShmMXx8KGYxPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtsYWJlbDpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKHMubmVlZHNDb25maXJtYXRpb249aSksYSE9PXZvaWQgMCYmKHMuZGVzY3JpcHRpb249YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiYkZS5zdHJpbmcoaS5sYWJlbCkmJigkZS5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKCRlLnN0cmluZyhpLmRlc2NyaXB0aW9uKXx8aS5kZXNjcmlwdGlvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKEdNfHwoR009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiAkZS5zdHJpbmcobil9byhlLCJpcyIpLHQuaXM9ZX0pKGQxfHwoZDE9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzLGFubm90YXRpb25JZDpsfX1vKGUsInJlcGxhY2UiKSx0LnJlcGxhY2U9ZTtmdW5jdGlvbiByKGEscyxsKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6cyxhbm5vdGF0aW9uSWQ6bH19byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDpzfX1vKG4sImRlbCIpLHQuZGVsPW47ZnVuY3Rpb24gaShhKXtsZXQgcz1hO3JldHVybiBmMS5pcyhzKSYmKEdNLmlzKHMuYW5ub3RhdGlvbklkKXx8ZDEuaXMocy5hbm5vdGF0aW9uSWQpKX1vKGksImlzIiksdC5pcz1pfSkoWmxlfHwoWmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dGV4dERvY3VtZW50Om4sZWRpdHM6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmWU0uaXMoaS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGkuZWRpdHMpfW8ociwiaXMiKSx0LmlzPXJ9KShWTXx8KFZNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtraW5kOiJjcmVhdGUiLHVyaTpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKGkub3ZlcndyaXRlIT09dm9pZCAwfHxpLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1pKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmJGUuc3RyaW5nKGkudXJpKSYmKGkub3B0aW9ucz09PXZvaWQgMHx8KGkub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fCRlLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHwkZS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxkMS5pcyhpLmFubm90YXRpb25JZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShVTXx8KFVNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7bGV0IGw9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOm4sbmV3VXJpOml9O3JldHVybiBhIT09dm9pZCAwJiYoYS5vdmVyd3JpdGUhPT12b2lkIDB8fGEuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYobC5vcHRpb25zPWEpLHMhPT12b2lkIDAmJihsLmFubm90YXRpb25JZD1zKSxsfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJyZW5hbWUiJiYkZS5zdHJpbmcoaS5vbGRVcmkpJiYkZS5zdHJpbmcoaS5uZXdVcmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8JGUuYm9vbGVhbihpLm9wdGlvbnMub3ZlcndyaXRlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fCRlLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGQxLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKEhNfHwoSE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2tpbmQ6ImRlbGV0ZSIsdXJpOm59O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYocy5vcHRpb25zPWkpLGEhPT12b2lkIDAmJihzLmFubm90YXRpb25JZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJkZWxldGUiJiYkZS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8JGUuYm9vbGVhbihpLm9wdGlvbnMucmVjdXJzaXZlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fCRlLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGQxLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKFdNfHwoV009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYobi5jaGFuZ2VzIT09dm9pZCAwfHxuLmRvY3VtZW50Q2hhbmdlcyE9PXZvaWQgMCkmJihuLmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMHx8bi5kb2N1bWVudENoYW5nZXMuZXZlcnkoaT0+JGUuc3RyaW5nKGkua2luZCk/VU0uaXMoaSl8fEhNLmlzKGkpfHxXTS5pcyhpKTpWTS5pcyhpKSkpfW8oZSwiaXMiKSx0LmlzPWV9KShxTXx8KHFNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJue3VyaTpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiYkZS5zdHJpbmcoaS51cmkpfW8ociwiaXMiKSx0LmlzPXJ9KShKbGV8fChKbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt1cmk6bix2ZXJzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJiRlLnN0cmluZyhpLnVyaSkmJiRlLmludGVnZXIoaS52ZXJzaW9uKX1vKHIsImlzIiksdC5pcz1yfSkoZWNlfHwoZWNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4sdmVyc2lvbjppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiYkZS5zdHJpbmcoaS51cmkpJiYoaS52ZXJzaW9uPT09bnVsbHx8JGUuaW50ZWdlcihpLnZlcnNpb24pKX1vKHIsImlzIiksdC5pcz1yfSkoWU18fChZTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt1cmk6bixsYW5ndWFnZUlkOmksdmVyc2lvbjphLHRleHQ6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmJGUuc3RyaW5nKGkudXJpKSYmJGUuc3RyaW5nKGkubGFuZ3VhZ2VJZCkmJiRlLmludGVnZXIoaS52ZXJzaW9uKSYmJGUuc3RyaW5nKGkudGV4dCl9byhyLCJpcyIpLHQuaXM9cn0pKHRjZXx8KHRjZT17fSkpOyhmdW5jdGlvbih0KXt0LlBsYWluVGV4dD0icGxhaW50ZXh0Iix0Lk1hcmtkb3duPSJtYXJrZG93biI7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuPT09dC5QbGFpblRleHR8fG49PT10Lk1hcmtkb3dufW8oZSwiaXMiKSx0LmlzPWV9KShYTXx8KFhNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChyKSYmWE0uaXMobi5raW5kKSYmJGUuc3RyaW5nKG4udmFsdWUpfW8oZSwiaXMiKSx0LmlzPWV9KShJeHx8KEl4PXt9KSk7KGZ1bmN0aW9uKHQpe3QuVGV4dD0xLHQuTWV0aG9kPTIsdC5GdW5jdGlvbj0zLHQuQ29uc3RydWN0b3I9NCx0LkZpZWxkPTUsdC5WYXJpYWJsZT02LHQuQ2xhc3M9Nyx0LkludGVyZmFjZT04LHQuTW9kdWxlPTksdC5Qcm9wZXJ0eT0xMCx0LlVuaXQ9MTEsdC5WYWx1ZT0xMix0LkVudW09MTMsdC5LZXl3b3JkPTE0LHQuU25pcHBldD0xNSx0LkNvbG9yPTE2LHQuRmlsZT0xNyx0LlJlZmVyZW5jZT0xOCx0LkZvbGRlcj0xOSx0LkVudW1NZW1iZXI9MjAsdC5Db25zdGFudD0yMSx0LlN0cnVjdD0yMix0LkV2ZW50PTIzLHQuT3BlcmF0b3I9MjQsdC5UeXBlUGFyYW1ldGVyPTI1fSkocmNlfHwocmNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuUGxhaW5UZXh0PTEsdC5TbmlwcGV0PTJ9KShuY2V8fChuY2U9e30pKTsoZnVuY3Rpb24odCl7dC5EZXByZWNhdGVkPTF9KShpY2V8fChpY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue25ld1RleHQ6bixpbnNlcnQ6aSxyZXBsYWNlOmF9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJiRlLnN0cmluZyhpLm5ld1RleHQpJiZCci5pcyhpLmluc2VydCkmJkJyLmlzKGkucmVwbGFjZSl9byhyLCJpcyIpLHQuaXM9cn0pKGFjZXx8KGFjZT17fSkpOyhmdW5jdGlvbih0KXt0LmFzSXM9MSx0LmFkanVzdEluZGVudGF0aW9uPTJ9KShzY2V8fChzY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYoJGUuc3RyaW5nKG4uZGV0YWlsKXx8bi5kZXRhaWw9PT12b2lkIDApJiYoJGUuc3RyaW5nKG4uZGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1vKGUsImlzIiksdC5pcz1lfSkob2NlfHwob2NlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2xhYmVsOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGxjZXx8KGxjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue2l0ZW1zOnJ8fFtdLGlzSW5jb21wbGV0ZTohIW59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGNjZXx8KGNjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiBuLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1vKGUsImZyb21QbGFpblRleHQiKSx0LmZyb21QbGFpblRleHQ9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLnN0cmluZyhpKXx8JGUub2JqZWN0TGl0ZXJhbChpKSYmJGUuc3RyaW5nKGkubGFuZ3VhZ2UpJiYkZS5zdHJpbmcoaS52YWx1ZSl9byhyLCJpcyIpLHQuaXM9cn0pKERFfHwoREU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiEhbiYmJGUub2JqZWN0TGl0ZXJhbChuKSYmKEl4LmlzKG4uY29udGVudHMpfHxERS5pcyhuLmNvbnRlbnRzKXx8JGUudHlwZWRBcnJheShuLmNvbnRlbnRzLERFLmlzKSkmJihyLnJhbmdlPT09dm9pZCAwfHxCci5pcyhyLnJhbmdlKSl9byhlLCJpcyIpLHQuaXM9ZX0pKHVjZXx8KHVjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJuIG4/e2xhYmVsOnIsZG9jdW1lbnRhdGlvbjpufTp7bGFiZWw6cn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoaGNlfHwoaGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLC4uLmkpe2xldCBhPXtsYWJlbDpyfTtyZXR1cm4gJGUuZGVmaW5lZChuKSYmKGEuZG9jdW1lbnRhdGlvbj1uKSwkZS5kZWZpbmVkKGkpP2EucGFyYW1ldGVycz1pOmEucGFyYW1ldGVycz1bXSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGZjZXx8KGZjZT17fSkpOyhmdW5jdGlvbih0KXt0LlRleHQ9MSx0LlJlYWQ9Mix0LldyaXRlPTN9KShkY2V8fChkY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4pe2xldCBpPXtyYW5nZTpyfTtyZXR1cm4gJGUubnVtYmVyKG4pJiYoaS5raW5kPW4pLGl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkocGNlfHwocGNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRmlsZT0xLHQuTW9kdWxlPTIsdC5OYW1lc3BhY2U9Myx0LlBhY2thZ2U9NCx0LkNsYXNzPTUsdC5NZXRob2Q9Nix0LlByb3BlcnR5PTcsdC5GaWVsZD04LHQuQ29uc3RydWN0b3I9OSx0LkVudW09MTAsdC5JbnRlcmZhY2U9MTEsdC5GdW5jdGlvbj0xMix0LlZhcmlhYmxlPTEzLHQuQ29uc3RhbnQ9MTQsdC5TdHJpbmc9MTUsdC5OdW1iZXI9MTYsdC5Cb29sZWFuPTE3LHQuQXJyYXk9MTgsdC5PYmplY3Q9MTksdC5LZXk9MjAsdC5OdWxsPTIxLHQuRW51bU1lbWJlcj0yMix0LlN0cnVjdD0yMyx0LkV2ZW50PTI0LHQuT3BlcmF0b3I9MjUsdC5UeXBlUGFyYW1ldGVyPTI2fSkobWNlfHwobWNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRGVwcmVjYXRlZD0xfSkoZ2NlfHwoZ2NlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSxzKXtsZXQgbD17bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOmEscmFuZ2U6aX19O3JldHVybiBzJiYobC5jb250YWluZXJOYW1lPXMpLGx9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoeWNlfHwoeWNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSl7cmV0dXJuIGEhPT12b2lkIDA/e25hbWU6cixraW5kOm4sbG9jYXRpb246e3VyaTppLHJhbmdlOmF9fTp7bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOml9fX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KSh2Y2V8fCh2Y2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSxzLGwsdSl7bGV0IGg9e25hbWU6bixkZXRhaWw6aSxraW5kOmEscmFuZ2U6cyxzZWxlY3Rpb25SYW5nZTpsfTtyZXR1cm4gdSE9PXZvaWQgMCYmKGguY2hpbGRyZW49dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiYkZS5zdHJpbmcoaS5uYW1lKSYmJGUubnVtYmVyKGkua2luZCkmJkJyLmlzKGkucmFuZ2UpJiZCci5pcyhpLnNlbGVjdGlvblJhbmdlKSYmKGkuZGV0YWlsPT09dm9pZCAwfHwkZS5zdHJpbmcoaS5kZXRhaWwpKSYmKGkuZGVwcmVjYXRlZD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfW8ociwiaXMiKSx0LmlzPXJ9KSh4Y2V8fCh4Y2U9e30pKTsoZnVuY3Rpb24odCl7dC5FbXB0eT0iIix0LlF1aWNrRml4PSJxdWlja2ZpeCIsdC5SZWZhY3Rvcj0icmVmYWN0b3IiLHQuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0Iix0LlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLHQuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIix0LlNvdXJjZT0ic291cmNlIix0LlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsdC5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwifSkoYmNlfHwoYmNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuSW52b2tlZD0xLHQuQXV0b21hdGljPTJ9KShMRXx8KExFPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtkaWFnbm9zdGljczpufTtyZXR1cm4gaSE9bnVsbCYmKHMub25seT1pKSxhIT1udWxsJiYocy50cmlnZ2VyS2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJiRlLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxfRS5pcykmJihpLm9ubHk9PT12b2lkIDB8fCRlLnR5cGVkQXJyYXkoaS5vbmx5LCRlLnN0cmluZykpJiYoaS50cmlnZ2VyS2luZD09PXZvaWQgMHx8aS50cmlnZ2VyS2luZD09PUxFLkludm9rZWR8fGkudHJpZ2dlcktpbmQ9PT1MRS5BdXRvbWF0aWMpfW8ociwiaXMiKSx0LmlzPXJ9KShUY2V8fChUY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e3RpdGxlOm59LGw9ITA7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj8obD0hMSxzLmtpbmQ9aSk6aDEuaXMoaSk/cy5jb21tYW5kPWk6cy5lZGl0PWksbCYmYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJiRlLnN0cmluZyhpLnRpdGxlKSYmKGkuZGlhZ25vc3RpY3M9PT12b2lkIDB8fCRlLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxfRS5pcykpJiYoaS5raW5kPT09dm9pZCAwfHwkZS5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fGgxLmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLmlzUHJlZmVycmVkKSkmJihpLmVkaXQ9PT12b2lkIDB8fHFNLmlzKGkuZWRpdCkpfW8ociwiaXMiKSx0LmlzPXJ9KSh3Y2V8fCh3Y2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe2xldCBhPXtyYW5nZTpufTtyZXR1cm4gJGUuZGVmaW5lZChpKSYmKGEuZGF0YT1pKSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJkJyLmlzKGkucmFuZ2UpJiYoJGUudW5kZWZpbmVkKGkuY29tbWFuZCl8fGgxLmlzKGkuY29tbWFuZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShrY2V8fChrY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt0YWJTaXplOm4saW5zZXJ0U3BhY2VzOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJiRlLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJiRlLmJvb2xlYW4oaS5pbnNlcnRTcGFjZXMpfW8ociwiaXMiKSx0LmlzPXJ9KShFY2V8fChFY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue3JhbmdlOm4sdGFyZ2V0OmksZGF0YTphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiZCci5pcyhpLnJhbmdlKSYmKCRlLnVuZGVmaW5lZChpLnRhcmdldCl8fCRlLnN0cmluZyhpLnRhcmdldCkpfW8ociwiaXMiKSx0LmlzPXJ9KShTY2V8fChTY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLHBhcmVudDppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiZCci5pcyhpLnJhbmdlKSYmKGkucGFyZW50PT09dm9pZCAwfHx0LmlzKGkucGFyZW50KSl9byhyLCJpcyIpLHQuaXM9cn0pKENjZXx8KENjZT17fSkpOyhmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZT0ibmFtZXNwYWNlIix0LnR5cGU9InR5cGUiLHQuY2xhc3M9ImNsYXNzIix0LmVudW09ImVudW0iLHQuaW50ZXJmYWNlPSJpbnRlcmZhY2UiLHQuc3RydWN0PSJzdHJ1Y3QiLHQudHlwZVBhcmFtZXRlcj0idHlwZVBhcmFtZXRlciIsdC5wYXJhbWV0ZXI9InBhcmFtZXRlciIsdC52YXJpYWJsZT0idmFyaWFibGUiLHQucHJvcGVydHk9InByb3BlcnR5Iix0LmVudW1NZW1iZXI9ImVudW1NZW1iZXIiLHQuZXZlbnQ9ImV2ZW50Iix0LmZ1bmN0aW9uPSJmdW5jdGlvbiIsdC5tZXRob2Q9Im1ldGhvZCIsdC5tYWNybz0ibWFjcm8iLHQua2V5d29yZD0ia2V5d29yZCIsdC5tb2RpZmllcj0ibW9kaWZpZXIiLHQuY29tbWVudD0iY29tbWVudCIsdC5zdHJpbmc9InN0cmluZyIsdC5udW1iZXI9Im51bWJlciIsdC5yZWdleHA9InJlZ2V4cCIsdC5vcGVyYXRvcj0ib3BlcmF0b3IiLHQuZGVjb3JhdG9yPSJkZWNvcmF0b3IifSkoQWNlfHwoQWNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuZGVjbGFyYXRpb249ImRlY2xhcmF0aW9uIix0LmRlZmluaXRpb249ImRlZmluaXRpb24iLHQucmVhZG9ubHk9InJlYWRvbmx5Iix0LnN0YXRpYz0ic3RhdGljIix0LmRlcHJlY2F0ZWQ9ImRlcHJlY2F0ZWQiLHQuYWJzdHJhY3Q9ImFic3RyYWN0Iix0LmFzeW5jPSJhc3luYyIsdC5tb2RpZmljYXRpb249Im1vZGlmaWNhdGlvbiIsdC5kb2N1bWVudGF0aW9uPSJkb2N1bWVudGF0aW9uIix0LmRlZmF1bHRMaWJyYXJ5PSJkZWZhdWx0TGlicmFyeSJ9KShfY2V8fChfY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKG4pJiYobi5yZXN1bHRJZD09PXZvaWQgMHx8dHlwZW9mIG4ucmVzdWx0SWQ9PSJzdHJpbmciKSYmQXJyYXkuaXNBcnJheShuLmRhdGEpJiYobi5kYXRhLmxlbmd0aD09PTB8fHR5cGVvZiBuLmRhdGFbMF09PSJudW1iZXIiKX1vKGUsImlzIiksdC5pcz1lfSkoRGNlfHwoRGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bix0ZXh0Oml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJkJyLmlzKGkucmFuZ2UpJiYkZS5zdHJpbmcoaS50ZXh0KX1vKHIsImlzIiksdC5pcz1yfSkoTGNlfHwoTGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntyYW5nZTpuLHZhcmlhYmxlTmFtZTppLGNhc2VTZW5zaXRpdmVMb29rdXA6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSE9bnVsbCYmQnIuaXMoaS5yYW5nZSkmJiRlLmJvb2xlYW4oaS5jYXNlU2Vuc2l0aXZlTG9va3VwKSYmKCRlLnN0cmluZyhpLnZhcmlhYmxlTmFtZSl8fGkudmFyaWFibGVOYW1lPT09dm9pZCAwKX1vKHIsImlzIiksdC5pcz1yfSkoUmNlfHwoUmNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bixleHByZXNzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJkJyLmlzKGkucmFuZ2UpJiYoJGUuc3RyaW5nKGkuZXhwcmVzc2lvbil8fGkuZXhwcmVzc2lvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKE5jZXx8KE5jZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue2ZyYW1lSWQ6bixzdG9wcGVkTG9jYXRpb246aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmQnIuaXMobi5zdG9wcGVkTG9jYXRpb24pfW8ociwiaXMiKSx0LmlzPXJ9KShNY2V8fChNY2U9e30pKTsoZnVuY3Rpb24odCl7dC5UeXBlPTEsdC5QYXJhbWV0ZXI9MjtmdW5jdGlvbiBlKHIpe3JldHVybiByPT09MXx8cj09PTJ9byhlLCJpcyIpLHQuaXM9ZX0pKGpNfHwoak09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm57dmFsdWU6bn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8JGUuc3RyaW5nKGkudG9vbHRpcCl8fEl4LmlzKGkudG9vbHRpcCkpJiYoaS5sb2NhdGlvbj09PXZvaWQgMHx8QUUuaXMoaS5sb2NhdGlvbikpJiYoaS5jb21tYW5kPT09dm9pZCAwfHxoMS5pcyhpLmNvbW1hbmQpKX1vKHIsImlzIiksdC5pcz1yfSkoS018fChLTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtsZXQgcz17cG9zaXRpb246bixsYWJlbDppfTtyZXR1cm4gYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLm9iamVjdExpdGVyYWwoaSkmJmpyLmlzKGkucG9zaXRpb24pJiYoJGUuc3RyaW5nKGkubGFiZWwpfHwkZS50eXBlZEFycmF5KGkubGFiZWwsS00uaXMpKSYmKGkua2luZD09PXZvaWQgMHx8ak0uaXMoaS5raW5kKSkmJmkudGV4dEVkaXRzPT09dm9pZCAwfHwkZS50eXBlZEFycmF5KGkudGV4dEVkaXRzLGYxLmlzKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8JGUuc3RyaW5nKGkudG9vbHRpcCl8fEl4LmlzKGkudG9vbHRpcCkpJiYoaS5wYWRkaW5nTGVmdD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLnBhZGRpbmdMZWZ0KSkmJihpLnBhZGRpbmdSaWdodD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLnBhZGRpbmdSaWdodCkpfW8ociwiaXMiKSx0LmlzPXJ9KShJY2V8fChJY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57a2luZDoic25pcHBldCIsdmFsdWU6cn19byhlLCJjcmVhdGVTbmlwcGV0IiksdC5jcmVhdGVTbmlwcGV0PWV9KShPY2V8fChPY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4saSxhKXtyZXR1cm57aW5zZXJ0VGV4dDpyLGZpbHRlclRleHQ6bixyYW5nZTppLGNvbW1hbmQ6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoUGNlfHwoUGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2l0ZW1zOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKEJjZXx8KEJjZT17fSkpOyhmdW5jdGlvbih0KXt0Lkludm9rZWQ9MCx0LkF1dG9tYXRpYz0xfSkoRmNlfHwoRmNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm57cmFuZ2U6cix0ZXh0Om59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKCRjZXx8KCRjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue3RyaWdnZXJLaW5kOnIsc2VsZWN0ZWRDb21wbGV0aW9uSW5mbzpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KSh6Y2V8fCh6Y2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKG4pJiZGTS5pcyhuLnVyaSkmJiRlLnN0cmluZyhuLm5hbWUpfW8oZSwiaXMiKSx0LmlzPWV9KShHY2V8fChHY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCx1KXtyZXR1cm4gbmV3IFFNKGEscyxsLHUpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGEpe2xldCBzPWE7cmV0dXJuISEoJGUuZGVmaW5lZChzKSYmJGUuc3RyaW5nKHMudXJpKSYmKCRlLnVuZGVmaW5lZChzLmxhbmd1YWdlSWQpfHwkZS5zdHJpbmcocy5sYW5ndWFnZUlkKSkmJiRlLnVpbnRlZ2VyKHMubGluZUNvdW50KSYmJGUuZnVuYyhzLmdldFRleHQpJiYkZS5mdW5jKHMucG9zaXRpb25BdCkmJiRlLmZ1bmMocy5vZmZzZXRBdCkpfW8ociwiaXMiKSx0LmlzPXI7ZnVuY3Rpb24gbihhLHMpe2xldCBsPWEuZ2V0VGV4dCgpLHU9aShzLChmLGQpPT57bGV0IHA9Zi5yYW5nZS5zdGFydC5saW5lLWQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/Zi5yYW5nZS5zdGFydC5jaGFyYWN0ZXItZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLGg9bC5sZW5ndGg7Zm9yKGxldCBmPXUubGVuZ3RoLTE7Zj49MDtmLS0pe2xldCBkPXVbZl0scD1hLm9mZnNldEF0KGQucmFuZ2Uuc3RhcnQpLG09YS5vZmZzZXRBdChkLnJhbmdlLmVuZCk7aWYobTw9aClsPWwuc3Vic3RyaW5nKDAscCkrZC5uZXdUZXh0K2wuc3Vic3RyaW5nKG0sbC5sZW5ndGgpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7aD1wfXJldHVybiBsfW8obiwiYXBwbHlFZGl0cyIpLHQuYXBwbHlFZGl0cz1uO2Z1bmN0aW9uIGkoYSxzKXtpZihhLmxlbmd0aDw9MSlyZXR1cm4gYTtsZXQgbD1hLmxlbmd0aC8yfDAsdT1hLnNsaWNlKDAsbCksaD1hLnNsaWNlKGwpO2kodSxzKSxpKGgscyk7bGV0IGY9MCxkPTAscD0wO2Zvcig7Zjx1Lmxlbmd0aCYmZDxoLmxlbmd0aDspcyh1W2ZdLGhbZF0pPD0wP2FbcCsrXT11W2YrK106YVtwKytdPWhbZCsrXTtmb3IoO2Y8dS5sZW5ndGg7KWFbcCsrXT11W2YrK107Zm9yKDtkPGgubGVuZ3RoOylhW3ArK109aFtkKytdO3JldHVybiBhfW8oaSwibWVyZ2VTb3J0Iil9KShWY2V8fChWY2U9e30pKTtRTT1jbGFzc3tzdGF0aWN7byh0aGlzLCJGdWxsVGV4dERvY3VtZW50Iil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD1yLHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCByPXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcocixuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSxyKXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldExpbmVPZmZzZXRzKCl7aWYodGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDApe2xldCBlPVtdLHI9dGhpcy5fY29udGVudCxuPSEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtuJiYoZS5wdXNoKGkpLG49ITEpO2xldCBhPXIuY2hhckF0KGkpO249YT09PSJcciJ8fGE9PT1gCmAsYT09PSJcciImJmkrMTxyLmxlbmd0aCYmci5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfW4mJnIubGVuZ3RoPjAmJmUucHVzaChyLmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAsaT1yLmxlbmd0aDtpZihpPT09MClyZXR1cm4ganIuY3JlYXRlKDAsZSk7Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Jbc10+ZT9pPXM6bj1zKzF9bGV0IGE9bi0xO3JldHVybiBqci5jcmVhdGUoYSxlLXJbYV0pfW9mZnNldEF0KGUpe2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXIubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj1yW2UubGluZV0saT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9fTsoZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiByKG0pe3JldHVybiB0eXBlb2YgbTwidSJ9byhyLCJkZWZpbmVkIiksdC5kZWZpbmVkPXI7ZnVuY3Rpb24gbihtKXtyZXR1cm4gdHlwZW9mIG0+InUifW8obiwidW5kZWZpbmVkIiksdC51bmRlZmluZWQ9bjtmdW5jdGlvbiBpKG0pe3JldHVybiBtPT09ITB8fG09PT0hMX1vKGksImJvb2xlYW4iKSx0LmJvb2xlYW49aTtmdW5jdGlvbiBhKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBTdHJpbmddIn1vKGEsInN0cmluZyIpLHQuc3RyaW5nPWE7ZnVuY3Rpb24gcyhtKXtyZXR1cm4gZS5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSJ9byhzLCJudW1iZXIiKSx0Lm51bWJlcj1zO2Z1bmN0aW9uIGwobSxnLHkpe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmZzw9bSYmbTw9eX1vKGwsIm51bWJlclJhbmdlIiksdC5udW1iZXJSYW5nZT1sO2Z1bmN0aW9uIHUobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9bSYmbTw9MjE0NzQ4MzY0N31vKHUsImludGVnZXIiKSx0LmludGVnZXI9dTtmdW5jdGlvbiBoKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9bSYmbTw9MjE0NzQ4MzY0N31vKGgsInVpbnRlZ2VyIiksdC51aW50ZWdlcj1oO2Z1bmN0aW9uIGYobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9byhmLCJmdW5jIiksdC5mdW5jPWY7ZnVuY3Rpb24gZChtKXtyZXR1cm4gbSE9PW51bGwmJnR5cGVvZiBtPT0ib2JqZWN0In1vKGQsIm9iamVjdExpdGVyYWwiKSx0Lm9iamVjdExpdGVyYWw9ZDtmdW5jdGlvbiBwKG0sZyl7cmV0dXJuIEFycmF5LmlzQXJyYXkobSkmJm0uZXZlcnkoZyl9byhwLCJ0eXBlZEFycmF5IiksdC50eXBlZEFycmF5PXB9KSgkZXx8KCRlPXt9KSl9KTt2YXIgT3gsUHgsRXAsU3AsSk0scDEsUkU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaTSgpO09sKCk7T3g9Y2xhc3N7c3RhdGlje28odGhpcywiQ3N0Tm9kZUJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMubm9kZVN0YWNrPVtdfWdldCBjdXJyZW50KCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoLTFdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0aGlzLnJvb3ROb2RlfWJ1aWxkUm9vdE5vZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGU9bmV3IHAxKGUpLHRoaXMucm9vdE5vZGUucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMubm9kZVN0YWNrPVt0aGlzLnJvb3ROb2RlXSx0aGlzLnJvb3ROb2RlfWJ1aWxkQ29tcG9zaXRlTm9kZShlKXtsZXQgcj1uZXcgU3A7cmV0dXJuIHIuZ3JhbW1hclNvdXJjZT1lLHIucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gociksdGhpcy5ub2RlU3RhY2sucHVzaChyKSxyfWJ1aWxkTGVhZk5vZGUoZSxyKXtsZXQgbj1uZXcgRXAoZS5zdGFydE9mZnNldCxlLmltYWdlLmxlbmd0aCxLbShlKSxlLnRva2VuVHlwZSwhcik7cmV0dXJuIG4uZ3JhbW1hclNvdXJjZT1yLG4ucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gobiksbn1yZW1vdmVOb2RlKGUpe2xldCByPWUuY29udGFpbmVyO2lmKHIpe2xldCBuPXIuY29udGVudC5pbmRleE9mKGUpO24+PTAmJnIuY29udGVudC5zcGxpY2UobiwxKX19YWRkSGlkZGVuTm9kZXMoZSl7bGV0IHI9W107Zm9yKGxldCBhIG9mIGUpe2xldCBzPW5ldyBFcChhLnN0YXJ0T2Zmc2V0LGEuaW1hZ2UubGVuZ3RoLEttKGEpLGEudG9rZW5UeXBlLCEwKTtzLnJvb3Q9dGhpcy5yb290Tm9kZSxyLnB1c2gocyl9bGV0IG49dGhpcy5jdXJyZW50LGk9ITE7aWYobi5jb250ZW50Lmxlbmd0aD4wKXtuLmNvbnRlbnQucHVzaCguLi5yKTtyZXR1cm59Zm9yKDtuLmNvbnRhaW5lcjspe2xldCBhPW4uY29udGFpbmVyLmNvbnRlbnQuaW5kZXhPZihuKTtpZihhPjApe24uY29udGFpbmVyLmNvbnRlbnQuc3BsaWNlKGEsMCwuLi5yKSxpPSEwO2JyZWFrfW49bi5jb250YWluZXJ9aXx8dGhpcy5yb290Tm9kZS5jb250ZW50LnVuc2hpZnQoLi4ucil9Y29uc3RydWN0KGUpe2xldCByPXRoaXMuY3VycmVudDt0eXBlb2YgZS4kdHlwZT09InN0cmluZyImJih0aGlzLmN1cnJlbnQuYXN0Tm9kZT1lKSxlLiRjc3ROb2RlPXI7bGV0IG49dGhpcy5ub2RlU3RhY2sucG9wKCk7bj8uY29udGVudC5sZW5ndGg9PT0wJiZ0aGlzLnJlbW92ZU5vZGUobil9fSxQeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJBYnN0cmFjdENzdE5vZGUiKX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfWdldCBmZWF0dXJlKCl7cmV0dXJuIHRoaXMuZ3JhbW1hclNvdXJjZX1nZXQgaGlkZGVuKCl7cmV0dXJuITF9Z2V0IGFzdE5vZGUoKXt2YXIgZSxyO2xldCBuPXR5cGVvZigoZT10aGlzLl9hc3ROb2RlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuJHR5cGUpPT0ic3RyaW5nIj90aGlzLl9hc3ROb2RlOihyPXRoaXMuY29udGFpbmVyKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuYXN0Tm9kZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbm9kZSBoYXMgbm8gYXNzb2NpYXRlZCBBU1QgZWxlbWVudCIpO3JldHVybiBufXNldCBhc3ROb2RlKGUpe3RoaXMuX2FzdE5vZGU9ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmFzdE5vZGV9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5yb290LmZ1bGxUZXh0LnN1YnN0cmluZyh0aGlzLm9mZnNldCx0aGlzLmVuZCl9fSxFcD1jbGFzcyBleHRlbmRzIFB4e3N0YXRpY3tvKHRoaXMsIkxlYWZDc3ROb2RlSW1wbCIpfWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofWdldCBlbmQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0K3RoaXMuX2xlbmd0aH1nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1nZXQgdG9rZW5UeXBlKCl7cmV0dXJuIHRoaXMuX3Rva2VuVHlwZX1nZXQgcmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmFuZ2V9Y29uc3RydWN0b3IoZSxyLG4saSxhPSExKXtzdXBlcigpLHRoaXMuX2hpZGRlbj1hLHRoaXMuX29mZnNldD1lLHRoaXMuX3Rva2VuVHlwZT1pLHRoaXMuX2xlbmd0aD1yLHRoaXMuX3JhbmdlPW59fSxTcD1jbGFzcyBleHRlbmRzIFB4e3N0YXRpY3tvKHRoaXMsIkNvbXBvc2l0ZUNzdE5vZGVJbXBsIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29udGVudD1uZXcgSk0odGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY29udGVudH1nZXQgb2Zmc2V0KCl7dmFyIGUscjtyZXR1cm4ocj0oZT10aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9mZnNldCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMub2Zmc2V0fWdldCBlbmQoKXt2YXIgZSxyO3JldHVybihyPShlPXRoaXMubGFzdE5vbkhpZGRlbk5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5lbmQpIT09bnVsbCYmciE9PXZvaWQgMD9yOjB9Z2V0IHJhbmdlKCl7bGV0IGU9dGhpcy5maXJzdE5vbkhpZGRlbk5vZGUscj10aGlzLmxhc3ROb25IaWRkZW5Ob2RlO2lmKGUmJnIpe2lmKHRoaXMuX3JhbmdlQ2FjaGU9PT12b2lkIDApe2xldHtyYW5nZTpufT1lLHtyYW5nZTppfT1yO3RoaXMuX3JhbmdlQ2FjaGU9e3N0YXJ0Om4uc3RhcnQsZW5kOmkuZW5kLmxpbmU8bi5zdGFydC5saW5lP24uc3RhcnQ6aS5lbmR9fXJldHVybiB0aGlzLl9yYW5nZUNhY2hlfWVsc2UgcmV0dXJue3N0YXJ0OmpyLmNyZWF0ZSgwLDApLGVuZDpqci5jcmVhdGUoMCwwKX19Z2V0IGZpcnN0Tm9uSGlkZGVuTm9kZSgpe2ZvcihsZXQgZSBvZiB0aGlzLmNvbnRlbnQpaWYoIWUuaGlkZGVuKXJldHVybiBlO3JldHVybiB0aGlzLmNvbnRlbnRbMF19Z2V0IGxhc3ROb25IaWRkZW5Ob2RlKCl7Zm9yKGxldCBlPXRoaXMuY29udGVudC5sZW5ndGgtMTtlPj0wO2UtLSl7bGV0IHI9dGhpcy5jb250ZW50W2VdO2lmKCFyLmhpZGRlbilyZXR1cm4gcn1yZXR1cm4gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGgtMV19fSxKTT1jbGFzcyB0IGV4dGVuZHMgQXJyYXl7c3RhdGlje28odGhpcywiQ3N0Tm9kZUNvbnRhaW5lciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx0LnByb3RvdHlwZSl9cHVzaCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnB1c2goLi4uZSl9dW5zaGlmdCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnVuc2hpZnQoLi4uZSl9c3BsaWNlKGUsciwuLi5uKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKG4pLHN1cGVyLnNwbGljZShlLHIsLi4ubil9YWRkUGFyZW50cyhlKXtmb3IobGV0IHIgb2YgZSlyLmNvbnRhaW5lcj10aGlzLnBhcmVudH19LHAxPWNsYXNzIGV4dGVuZHMgU3B7c3RhdGlje28odGhpcywiUm9vdENzdE5vZGVJbXBsIil9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5fdGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsdGhpcy5lbmQpfWdldCBmdWxsVGV4dCgpe3JldHVybiB0aGlzLl90ZXh0fWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fdGV4dD0iIix0aGlzLl90ZXh0PWU/PyIifX19KTtmdW5jdGlvbiBlSSh0KXtyZXR1cm4gdC4kdHlwZT09PU5FfXZhciBORSxVY2UsSGNlLEJ4LEZ4LE1FLG0xLCR4LEMkZSx0SSx6eD1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7R2xlKCk7UGMoKTtGbCgpO2NzKCk7UkUoKTtORT1TeW1ib2woIkRhdGF0eXBlIik7byhlSSwiaXNEYXRhVHlwZU5vZGUiKTtVY2U9Ilx1MjAwQiIsSGNlPW8odD0+dC5lbmRzV2l0aChVY2UpP3Q6dCtVY2UsIndpdGhSdWxlU3VmZml4IiksQng9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RMYW5naXVtUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fdW5vcmRlcmVkR3JvdXBzPW5ldyBNYXAsdGhpcy5hbGxSdWxlcz1uZXcgTWFwLHRoaXMubGV4ZXI9ZS5wYXJzZXIuTGV4ZXI7bGV0IHI9dGhpcy5sZXhlci5kZWZpbml0aW9uLG49ZS5MYW5ndWFnZU1ldGFEYXRhLm1vZGU9PT0icHJvZHVjdGlvbiI7dGhpcy53cmFwcGVyPW5ldyB0SShyLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLnBhcnNlci5QYXJzZXJDb25maWcpLHtza2lwVmFsaWRhdGlvbnM6bixlcnJvck1lc3NhZ2VQcm92aWRlcjplLnBhcnNlci5QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcn0pKX1hbHRlcm5hdGl2ZXMoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9yKGUscil9b3B0aW9uYWwoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9wdGlvbihlLHIpfW1hbnkoZSxyKXt0aGlzLndyYXBwZXIud3JhcE1hbnkoZSxyKX1hdExlYXN0T25lKGUscil7dGhpcy53cmFwcGVyLndyYXBBdExlYXN0T25lKGUscil9Z2V0UnVsZShlKXtyZXR1cm4gdGhpcy5hbGxSdWxlcy5nZXQoZSl9aXNSZWNvcmRpbmcoKXtyZXR1cm4gdGhpcy53cmFwcGVyLklTX1JFQ09SRElOR31nZXQgdW5vcmRlcmVkR3JvdXBzKCl7cmV0dXJuIHRoaXMuX3Vub3JkZXJlZEdyb3Vwc31nZXRSdWxlU3RhY2soKXtyZXR1cm4gdGhpcy53cmFwcGVyLlJVTEVfU1RBQ0t9ZmluYWxpemUoKXt0aGlzLndyYXBwZXIud3JhcFNlbGZBbmFseXNpcygpfX0sRng9Y2xhc3MgZXh0ZW5kcyBCeHtzdGF0aWN7byh0aGlzLCJMYW5naXVtUGFyc2VyIil9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5vZGVCdWlsZGVyPW5ldyBPeCx0aGlzLnN0YWNrPVtdLHRoaXMuYXNzaWdubWVudE1hcD1uZXcgTWFwLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXIsdGhpcy5jb252ZXJ0ZXI9ZS5wYXJzZXIuVmFsdWVDb252ZXJ0ZXIsdGhpcy5hc3RSZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb259cnVsZShlLHIpe2xldCBuPXRoaXMuY29tcHV0ZVJ1bGVUeXBlKGUpLGk9dGhpcy53cmFwcGVyLkRFRklORV9SVUxFKEhjZShlLm5hbWUpLHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihuLHIpLmJpbmQodGhpcykpO3JldHVybiB0aGlzLmFsbFJ1bGVzLnNldChlLm5hbWUsaSksZS5lbnRyeSYmKHRoaXMubWFpblJ1bGU9aSksaX1jb21wdXRlUnVsZVR5cGUoZSl7aWYoIWUuZnJhZ21lbnQpe2lmKGx4KGUpKXJldHVybiBORTt7bGV0IHI9emcoZSk7cmV0dXJuIHI/P2UubmFtZX19fXBhcnNlKGUscj17fSl7dGhpcy5ub2RlQnVpbGRlci5idWlsZFJvb3ROb2RlKGUpO2xldCBuPXRoaXMubGV4ZXJSZXN1bHQ9dGhpcy5sZXhlci50b2tlbml6ZShlKTt0aGlzLndyYXBwZXIuaW5wdXQ9bi50b2tlbnM7bGV0IGk9ci5ydWxlP3RoaXMuYWxsUnVsZXMuZ2V0KHIucnVsZSk6dGhpcy5tYWluUnVsZTtpZighaSl0aHJvdyBuZXcgRXJyb3Ioci5ydWxlP2BObyBydWxlIGZvdW5kIHdpdGggbmFtZSAnJHtyLnJ1bGV9J2A6Ik5vIG1haW4gcnVsZSBhdmFpbGFibGUuIik7bGV0IGE9aS5jYWxsKHRoaXMud3JhcHBlcix7fSk7cmV0dXJuIHRoaXMubm9kZUJ1aWxkZXIuYWRkSGlkZGVuTm9kZXMobi5oaWRkZW4pLHRoaXMudW5vcmRlcmVkR3JvdXBzLmNsZWFyKCksdGhpcy5sZXhlclJlc3VsdD12b2lkIDAse3ZhbHVlOmEsbGV4ZXJFcnJvcnM6bi5lcnJvcnMsbGV4ZXJSZXBvcnQ6bi5yZXBvcnQscGFyc2VyRXJyb3JzOnRoaXMud3JhcHBlci5lcnJvcnN9fXN0YXJ0SW1wbGVtZW50YXRpb24oZSxyKXtyZXR1cm4gbj0+e2xldCBpPSF0aGlzLmlzUmVjb3JkaW5nKCkmJmUhPT12b2lkIDA7aWYoaSl7bGV0IHM9eyR0eXBlOmV9O3RoaXMuc3RhY2sucHVzaChzKSxlPT09TkUmJihzLnZhbHVlPSIiKX1sZXQgYTt0cnl7YT1yKG4pfWNhdGNoe2E9dm9pZCAwfXJldHVybiBhPT09dm9pZCAwJiZpJiYoYT10aGlzLmNvbnN0cnVjdCgpKSxhfX1leHRyYWN0SGlkZGVuVG9rZW5zKGUpe2xldCByPXRoaXMubGV4ZXJSZXN1bHQuaGlkZGVuO2lmKCFyLmxlbmd0aClyZXR1cm5bXTtsZXQgbj1lLnN0YXJ0T2Zmc2V0O2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0uc3RhcnRPZmZzZXQ+bilyZXR1cm4gci5zcGxpY2UoMCxpKTtyZXR1cm4gci5zcGxpY2UoMCxyLmxlbmd0aCl9Y29uc3VtZShlLHIsbil7bGV0IGk9dGhpcy53cmFwcGVyLndyYXBDb25zdW1lKGUscik7aWYoIXRoaXMuaXNSZWNvcmRpbmcoKSYmdGhpcy5pc1ZhbGlkVG9rZW4oaSkpe2xldCBhPXRoaXMuZXh0cmFjdEhpZGRlblRva2VucyhpKTt0aGlzLm5vZGVCdWlsZGVyLmFkZEhpZGRlbk5vZGVzKGEpO2xldCBzPXRoaXMubm9kZUJ1aWxkZXIuYnVpbGRMZWFmTm9kZShpLG4pLHthc3NpZ25tZW50OmwsaXNDcm9zc1JlZjp1fT10aGlzLmdldEFzc2lnbm1lbnQobiksaD10aGlzLmN1cnJlbnQ7aWYobCl7bGV0IGY9WG8obik/aS5pbWFnZTp0aGlzLmNvbnZlcnRlci5jb252ZXJ0KGkuaW1hZ2Uscyk7dGhpcy5hc3NpZ24obC5vcGVyYXRvcixsLmZlYXR1cmUsZixzLHUpfWVsc2UgaWYoZUkoaCkpe2xldCBmPWkuaW1hZ2U7WG8obil8fChmPXRoaXMuY29udmVydGVyLmNvbnZlcnQoZixzKS50b1N0cmluZygpKSxoLnZhbHVlKz1mfX19aXNWYWxpZFRva2VuKGUpe3JldHVybiFlLmlzSW5zZXJ0ZWRJblJlY292ZXJ5JiYhaXNOYU4oZS5zdGFydE9mZnNldCkmJnR5cGVvZiBlLmVuZE9mZnNldD09Im51bWJlciImJiFpc05hTihlLmVuZE9mZnNldCl9c3VicnVsZShlLHIsbixpLGEpe2xldCBzOyF0aGlzLmlzUmVjb3JkaW5nKCkmJiFuJiYocz10aGlzLm5vZGVCdWlsZGVyLmJ1aWxkQ29tcG9zaXRlTm9kZShpKSk7bGV0IGw9dGhpcy53cmFwcGVyLndyYXBTdWJydWxlKGUscixhKTshdGhpcy5pc1JlY29yZGluZygpJiZzJiZzLmxlbmd0aD4wJiZ0aGlzLnBlcmZvcm1TdWJydWxlQXNzaWdubWVudChsLGkscyl9cGVyZm9ybVN1YnJ1bGVBc3NpZ25tZW50KGUscixuKXtsZXR7YXNzaWdubWVudDppLGlzQ3Jvc3NSZWY6YX09dGhpcy5nZXRBc3NpZ25tZW50KHIpO2lmKGkpdGhpcy5hc3NpZ24oaS5vcGVyYXRvcixpLmZlYXR1cmUsZSxuLGEpO2Vsc2UgaWYoIWkpe2xldCBzPXRoaXMuY3VycmVudDtpZihlSShzKSlzLnZhbHVlKz1lLnRvU3RyaW5nKCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCImJmUpe2xldCB1PXRoaXMuYXNzaWduV2l0aG91dE92ZXJyaWRlKGUscyk7dGhpcy5zdGFjay5wb3AoKSx0aGlzLnN0YWNrLnB1c2godSl9fX1hY3Rpb24oZSxyKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgbj10aGlzLmN1cnJlbnQ7aWYoci5mZWF0dXJlJiZyLm9wZXJhdG9yKXtuPXRoaXMuY29uc3RydWN0KCksdGhpcy5ub2RlQnVpbGRlci5yZW1vdmVOb2RlKG4uJGNzdE5vZGUpLHRoaXMubm9kZUJ1aWxkZXIuYnVpbGRDb21wb3NpdGVOb2RlKHIpLmNvbnRlbnQucHVzaChuLiRjc3ROb2RlKTtsZXQgYT17JHR5cGU6ZX07dGhpcy5zdGFjay5wdXNoKGEpLHRoaXMuYXNzaWduKHIub3BlcmF0b3Isci5mZWF0dXJlLG4sbi4kY3N0Tm9kZSwhMSl9ZWxzZSBuLiR0eXBlPWV9fWNvbnN0cnVjdCgpe2lmKHRoaXMuaXNSZWNvcmRpbmcoKSlyZXR1cm47bGV0IGU9dGhpcy5jdXJyZW50O3JldHVybiBNayhlKSx0aGlzLm5vZGVCdWlsZGVyLmNvbnN0cnVjdChlKSx0aGlzLnN0YWNrLnBvcCgpLGVJKGUpP3RoaXMuY29udmVydGVyLmNvbnZlcnQoZS52YWx1ZSxlLiRjc3ROb2RlKTooUk4odGhpcy5hc3RSZWZsZWN0aW9uLGUpLGUpfWdldEFzc2lnbm1lbnQoZSl7aWYoIXRoaXMuYXNzaWdubWVudE1hcC5oYXMoZSkpe2xldCByPWhwKGUsUGwpO3RoaXMuYXNzaWdubWVudE1hcC5zZXQoZSx7YXNzaWdubWVudDpyLGlzQ3Jvc3NSZWY6cj91cChyLnRlcm1pbmFsKTohMX0pfXJldHVybiB0aGlzLmFzc2lnbm1lbnRNYXAuZ2V0KGUpfWFzc2lnbihlLHIsbixpLGEpe2xldCBzPXRoaXMuY3VycmVudCxsO3N3aXRjaChhJiZ0eXBlb2Ygbj09InN0cmluZyI/bD10aGlzLmxpbmtlci5idWlsZFJlZmVyZW5jZShzLHIsaSxuKTpsPW4sZSl7Y2FzZSI9Ijp7c1tyXT1sO2JyZWFrfWNhc2UiPz0iOntzW3JdPSEwO2JyZWFrfWNhc2UiKz0iOkFycmF5LmlzQXJyYXkoc1tyXSl8fChzW3JdPVtdKSxzW3JdLnB1c2gobCl9fWFzc2lnbldpdGhvdXRPdmVycmlkZShlLHIpe2ZvcihsZXRbaSxhXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgcz1lW2ldO3M9PT12b2lkIDA/ZVtpXT1hOkFycmF5LmlzQXJyYXkocykmJkFycmF5LmlzQXJyYXkoYSkmJihhLnB1c2goLi4ucyksZVtpXT1hKX1sZXQgbj1lLiRjc3ROb2RlO3JldHVybiBuJiYobi5hc3ROb2RlPXZvaWQgMCxlLiRjc3ROb2RlPXZvaWQgMCksZX1nZXQgZGVmaW5pdGlvbkVycm9ycygpe3JldHVybiB0aGlzLndyYXBwZXIuZGVmaW5pdGlvbkVycm9yc319LE1FPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0UGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX1idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKGUpe3JldHVybiBxdS5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKGUpfWJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKGUpe3JldHVybiBxdS5idWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZShlKX1idWlsZE5vVmlhYmxlQWx0TWVzc2FnZShlKXtyZXR1cm4gcXUuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2UoZSl9YnVpbGRFYXJseUV4aXRNZXNzYWdlKGUpe3JldHVybiBxdS5idWlsZEVhcmx5RXhpdE1lc3NhZ2UoZSl9fSxtMT1jbGFzcyBleHRlbmRzIE1Fe3N0YXRpY3tvKHRoaXMsIkxhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmUsYWN0dWFsOnJ9KXtyZXR1cm5gRXhwZWN0aW5nICR7ZS5MQUJFTD8iYCIrZS5MQUJFTCsiYCI6ZS5uYW1lLmVuZHNXaXRoKCI6S1ciKT9ga2V5d29yZCAnJHtlLm5hbWUuc3Vic3RyaW5nKDAsZS5uYW1lLmxlbmd0aC0zKX0nYDpgdG9rZW4gb2YgdHlwZSAnJHtlLm5hbWV9J2B9IGJ1dCBmb3VuZCBcYCR7ci5pbWFnZX1cYC5gfWJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHtmaXJzdFJlZHVuZGFudDplfSl7cmV0dXJuYEV4cGVjdGluZyBlbmQgb2YgZmlsZSBidXQgZm91bmQgXGAke2UuaW1hZ2V9XGAuYH19LCR4PWNsYXNzIGV4dGVuZHMgQnh7c3RhdGlje28odGhpcywiTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50b2tlbnM9W10sdGhpcy5lbGVtZW50U3RhY2s9W10sdGhpcy5sYXN0RWxlbWVudFN0YWNrPVtdLHRoaXMubmV4dFRva2VuSW5kZXg9MCx0aGlzLnN0YWNrU2l6ZT0wfWFjdGlvbigpe31jb25zdHJ1Y3QoKXt9cGFyc2UoZSl7dGhpcy5yZXNldFN0YXRlKCk7bGV0IHI9dGhpcy5sZXhlci50b2tlbml6ZShlLHttb2RlOiJwYXJ0aWFsIn0pO3JldHVybiB0aGlzLnRva2Vucz1yLnRva2Vucyx0aGlzLndyYXBwZXIuaW5wdXQ9Wy4uLnRoaXMudG9rZW5zXSx0aGlzLm1haW5SdWxlLmNhbGwodGhpcy53cmFwcGVyLHt9KSx0aGlzLnVub3JkZXJlZEdyb3Vwcy5jbGVhcigpLHt0b2tlbnM6dGhpcy50b2tlbnMsZWxlbWVudFN0YWNrOlsuLi50aGlzLmxhc3RFbGVtZW50U3RhY2tdLHRva2VuSW5kZXg6dGhpcy5uZXh0VG9rZW5JbmRleH19cnVsZShlLHIpe2xldCBuPXRoaXMud3JhcHBlci5ERUZJTkVfUlVMRShIY2UoZS5uYW1lKSx0aGlzLnN0YXJ0SW1wbGVtZW50YXRpb24ocikuYmluZCh0aGlzKSk7cmV0dXJuIHRoaXMuYWxsUnVsZXMuc2V0KGUubmFtZSxuKSxlLmVudHJ5JiYodGhpcy5tYWluUnVsZT1uKSxufXJlc2V0U3RhdGUoKXt0aGlzLmVsZW1lbnRTdGFjaz1bXSx0aGlzLmxhc3RFbGVtZW50U3RhY2s9W10sdGhpcy5uZXh0VG9rZW5JbmRleD0wLHRoaXMuc3RhY2tTaXplPTB9c3RhcnRJbXBsZW1lbnRhdGlvbihlKXtyZXR1cm4gcj0+e2xldCBuPXRoaXMua2VlcFN0YWNrU2l6ZSgpO3RyeXtlKHIpfWZpbmFsbHl7dGhpcy5yZXNldFN0YWNrU2l6ZShuKX19fXJlbW92ZVVuZXhwZWN0ZWRFbGVtZW50cygpe3RoaXMuZWxlbWVudFN0YWNrLnNwbGljZSh0aGlzLnN0YWNrU2l6ZSl9a2VlcFN0YWNrU2l6ZSgpe2xldCBlPXRoaXMuZWxlbWVudFN0YWNrLmxlbmd0aDtyZXR1cm4gdGhpcy5zdGFja1NpemU9ZSxlfXJlc2V0U3RhY2tTaXplKGUpe3RoaXMucmVtb3ZlVW5leHBlY3RlZEVsZW1lbnRzKCksdGhpcy5zdGFja1NpemU9ZX1jb25zdW1lKGUscixuKXt0aGlzLndyYXBwZXIud3JhcENvbnN1bWUoZSxyKSx0aGlzLmlzUmVjb3JkaW5nKCl8fCh0aGlzLmxhc3RFbGVtZW50U3RhY2s9Wy4uLnRoaXMuZWxlbWVudFN0YWNrLG5dLHRoaXMubmV4dFRva2VuSW5kZXg9dGhpcy5jdXJySWR4KzEpfXN1YnJ1bGUoZSxyLG4saSxhKXt0aGlzLmJlZm9yZShpKSx0aGlzLndyYXBwZXIud3JhcFN1YnJ1bGUoZSxyLGEpLHRoaXMuYWZ0ZXIoaSl9YmVmb3JlKGUpe3RoaXMuaXNSZWNvcmRpbmcoKXx8dGhpcy5lbGVtZW50U3RhY2sucHVzaChlKX1hZnRlcihlKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgcj10aGlzLmVsZW1lbnRTdGFjay5sYXN0SW5kZXhPZihlKTtyPj0wJiZ0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2Uocil9fWdldCBjdXJySWR4KCl7cmV0dXJuIHRoaXMud3JhcHBlci5jdXJySWR4fX0sQyRlPXtyZWNvdmVyeUVuYWJsZWQ6ITAsbm9kZUxvY2F0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczohMCxlcnJvck1lc3NhZ2VQcm92aWRlcjpuZXcgbTF9LHRJPWNsYXNzIGV4dGVuZHMgRHh7c3RhdGlje28odGhpcywiQ2hldnJvdGFpbldyYXBwZXIiKX1jb25zdHJ1Y3RvcihlLHIpe2xldCBuPXImJiJtYXhMb29rYWhlYWQiaW4gcjtzdXBlcihlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEMkZSkse2xvb2thaGVhZFN0cmF0ZWd5Om4/bmV3IFl1KHttYXhMb29rYWhlYWQ6ci5tYXhMb29rYWhlYWR9KTpuZXcgTXgoe2xvZ2dpbmc6ci5za2lwVmFsaWRhdGlvbnM/KCk9Pnt9OnZvaWQgMH0pfSkscikpfWdldCBJU19SRUNPUkRJTkcoKXtyZXR1cm4gdGhpcy5SRUNPUkRJTkdfUEhBU0V9REVGSU5FX1JVTEUoZSxyKXtyZXR1cm4gdGhpcy5SVUxFKGUscil9d3JhcFNlbGZBbmFseXNpcygpe3RoaXMucGVyZm9ybVNlbGZBbmFseXNpcygpfXdyYXBDb25zdW1lKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZShlLHIpfXdyYXBTdWJydWxlKGUscixuKXtyZXR1cm4gdGhpcy5zdWJydWxlKGUscix7QVJHUzpbbl19KX13cmFwT3IoZSxyKXt0aGlzLm9yKGUscil9d3JhcE9wdGlvbihlLHIpe3RoaXMub3B0aW9uKGUscil9d3JhcE1hbnkoZSxyKXt0aGlzLm1hbnkoZSxyKX13cmFwQXRMZWFzdE9uZShlLHIpe3RoaXMuYXRMZWFzdE9uZShlLHIpfX19KTtmdW5jdGlvbiBHeCh0LGUscil7cmV0dXJuIEEkZSh7cGFyc2VyOmUsdG9rZW5zOnIscnVsZU5hbWVzOm5ldyBNYXB9LHQpLGV9ZnVuY3Rpb24gQSRlKHQsZSl7bGV0IHI9c3goZSwhMSksbj1lbihlLnJ1bGVzKS5maWx0ZXIoRmEpLmZpbHRlcihpPT5yLmhhcyhpKSk7Zm9yKGxldCBpIG9mIG4pe2xldCBhPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29uc3VtZToxLG9wdGlvbmFsOjEsc3VicnVsZToxLG1hbnk6MSxvcjoxfSk7dC5wYXJzZXIucnVsZShpLENwKGEsaS5kZWZpbml0aW9uKSl9fWZ1bmN0aW9uIENwKHQsZSxyPSExKXtsZXQgbjtpZihYbyhlKSluPUkkZSh0LGUpO2Vsc2UgaWYoJHUoZSkpbj1fJGUodCxlKTtlbHNlIGlmKFBsKGUpKW49Q3AodCxlLnRlcm1pbmFsKTtlbHNlIGlmKHVwKGUpKW49V2NlKHQsZSk7ZWxzZSBpZihCbChlKSluPUQkZSh0LGUpO2Vsc2UgaWYoTGsoZSkpbj1SJGUodCxlKTtlbHNlIGlmKE5rKGUpKW49TiRlKHQsZSk7ZWxzZSBpZihmZihlKSluPU0kZSh0LGUpO2Vsc2UgaWYod04oZSkpe2xldCBpPXQuY29uc3VtZSsrO249bygoKT0+dC5wYXJzZXIuY29uc3VtZShpLGZvLGUpLCJtZXRob2QiKX1lbHNlIHRocm93IG5ldyBscChlLiRjc3ROb2RlLGBVbmV4cGVjdGVkIGVsZW1lbnQgdHlwZTogJHtlLiR0eXBlfWApO3JldHVybiBxY2UodCxyP3ZvaWQgMDpJRShlKSxuLGUuY2FyZGluYWxpdHkpfWZ1bmN0aW9uIF8kZSh0LGUpe2xldCByPWN4KGUpO3JldHVybigpPT50LnBhcnNlci5hY3Rpb24ocixlKX1mdW5jdGlvbiBEJGUodCxlKXtsZXQgcj1lLnJ1bGUucmVmO2lmKEZhKHIpKXtsZXQgbj10LnN1YnJ1bGUrKyxpPXIuZnJhZ21lbnQsYT1lLmFyZ3VtZW50cy5sZW5ndGg+MD9MJGUocixlLmFyZ3VtZW50cyk6KCk9Pih7fSk7cmV0dXJuIHM9PnQucGFyc2VyLnN1YnJ1bGUobixZY2UodCxyKSxpLGUsYShzKSl9ZWxzZSBpZih1byhyKSl7bGV0IG49dC5jb25zdW1lKyssaT1ySSh0LHIubmFtZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgaWYocilPYyhyKTtlbHNlIHRocm93IG5ldyBscChlLiRjc3ROb2RlLGBVbmRlZmluZWQgcnVsZTogJHtlLnJ1bGUuJHJlZlRleHR9YCl9ZnVuY3Rpb24gTCRlKHQsZSl7bGV0IHI9ZS5tYXAobj0+WHUobi52YWx1ZSkpO3JldHVybiBuPT57bGV0IGk9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2xldCBzPXQucGFyYW1ldGVyc1thXSxsPXJbYV07aVtzLm5hbWVdPWwobil9cmV0dXJuIGl9fWZ1bmN0aW9uIFh1KHQpe2lmKG1OKHQpKXtsZXQgZT1YdSh0LmxlZnQpLHI9WHUodC5yaWdodCk7cmV0dXJuIG49PmUobil8fHIobil9ZWxzZSBpZihwTih0KSl7bGV0IGU9WHUodC5sZWZ0KSxyPVh1KHQucmlnaHQpO3JldHVybiBuPT5lKG4pJiZyKG4pfWVsc2UgaWYoZ04odCkpe2xldCBlPVh1KHQudmFsdWUpO3JldHVybiByPT4hZShyKX1lbHNlIGlmKHlOKHQpKXtsZXQgZT10LnBhcmFtZXRlci5yZWYubmFtZTtyZXR1cm4gcj0+ciE9PXZvaWQgMCYmcltlXT09PSEwfWVsc2UgaWYoZE4odCkpe2xldCBlPSEhdC50cnVlO3JldHVybigpPT5lfU9jKHQpfWZ1bmN0aW9uIFIkZSh0LGUpe2lmKGUuZWxlbWVudHMubGVuZ3RoPT09MSlyZXR1cm4gQ3AodCxlLmVsZW1lbnRzWzBdKTt7bGV0IHI9W107Zm9yKGxldCBpIG9mIGUuZWxlbWVudHMpe2xldCBhPXtBTFQ6Q3AodCxpLCEwKX0scz1JRShpKTtzJiYoYS5HQVRFPVh1KHMpKSxyLnB1c2goYSl9bGV0IG49dC5vcisrO3JldHVybiBpPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcChhPT57bGV0IHM9e0FMVDpvKCgpPT5hLkFMVChpKSwiQUxUIil9LGw9YS5HQVRFO3JldHVybiBsJiYocy5HQVRFPSgpPT5sKGkpKSxzfSkpfX1mdW5jdGlvbiBOJGUodCxlKXtpZihlLmVsZW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIENwKHQsZS5lbGVtZW50c1swXSk7bGV0IHI9W107Zm9yKGxldCBsIG9mIGUuZWxlbWVudHMpe2xldCB1PXtBTFQ6Q3AodCxsLCEwKX0saD1JRShsKTtoJiYodS5HQVRFPVh1KGgpKSxyLnB1c2godSl9bGV0IG49dC5vcisrLGk9bygobCx1KT0+e2xldCBoPXUuZ2V0UnVsZVN0YWNrKCkuam9pbigiLSIpO3JldHVybmB1R3JvdXBfJHtsfV8ke2h9YH0sImlkRnVuYyIpLGE9byhsPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcCgodSxoKT0+e2xldCBmPXtBTFQ6bygoKT0+ITAsIkFMVCIpfSxkPXQucGFyc2VyO2YuQUxUPSgpPT57aWYodS5BTFQobCksIWQuaXNSZWNvcmRpbmcoKSl7bGV0IG09aShuLGQpO2QudW5vcmRlcmVkR3JvdXBzLmdldChtKXx8ZC51bm9yZGVyZWRHcm91cHMuc2V0KG0sW10pO2xldCBnPWQudW5vcmRlcmVkR3JvdXBzLmdldChtKTt0eXBlb2YgZz8uW2hdPiJ1IiYmKGdbaF09ITApfX07bGV0IHA9dS5HQVRFO3JldHVybiBwP2YuR0FURT0oKT0+cChsKTpmLkdBVEU9KCk9PntsZXQgbT1kLnVub3JkZXJlZEdyb3Vwcy5nZXQoaShuLGQpKTtyZXR1cm4hbT8uW2hdfSxmfSkpLCJhbHRlcm5hdGl2ZXMiKSxzPXFjZSh0LElFKGUpLGEsIioiKTtyZXR1cm4gbD0+e3MobCksdC5wYXJzZXIuaXNSZWNvcmRpbmcoKXx8dC5wYXJzZXIudW5vcmRlcmVkR3JvdXBzLmRlbGV0ZShpKG4sdC5wYXJzZXIpKX19ZnVuY3Rpb24gTSRlKHQsZSl7bGV0IHI9ZS5lbGVtZW50cy5tYXAobj0+Q3AodCxuKSk7cmV0dXJuIG49PnIuZm9yRWFjaChpPT5pKG4pKX1mdW5jdGlvbiBJRSh0KXtpZihmZih0KSlyZXR1cm4gdC5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiBXY2UodCxlLHI9ZS50ZXJtaW5hbCl7aWYocilpZihCbChyKSYmRmEoci5ydWxlLnJlZikpe2xldCBuPXIucnVsZS5yZWYsaT10LnN1YnJ1bGUrKztyZXR1cm4gYT0+dC5wYXJzZXIuc3VicnVsZShpLFljZSh0LG4pLCExLGUsYSl9ZWxzZSBpZihCbChyKSYmdW8oci5ydWxlLnJlZikpe2xldCBuPXQuY29uc3VtZSsrLGk9ckkodCxyLnJ1bGUucmVmLm5hbWUpO3JldHVybigpPT50LnBhcnNlci5jb25zdW1lKG4saSxlKX1lbHNlIGlmKFhvKHIpKXtsZXQgbj10LmNvbnN1bWUrKyxpPXJJKHQsci52YWx1ZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgYnVpbGQgY3Jvc3MgcmVmZXJlbmNlIHBhcnNlciIpO2Vsc2V7aWYoIWUudHlwZS5yZWYpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gdHlwZTogIitlLnR5cGUuJHJlZlRleHQpO2xldCBuPUZrKGUudHlwZS5yZWYpLGk9bj8udGVybWluYWw7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBuYW1lIGFzc2lnbm1lbnQgZm9yIHR5cGU6ICIrY3goZS50eXBlLnJlZikpO3JldHVybiBXY2UodCxlLGkpfX1mdW5jdGlvbiBJJGUodCxlKXtsZXQgcj10LmNvbnN1bWUrKyxuPXQudG9rZW5zW2UudmFsdWVdO2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdG9rZW4gZm9yIGtleXdvcmQ6ICIrZS52YWx1ZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUocixuLGUpfWZ1bmN0aW9uIHFjZSh0LGUscixuKXtsZXQgaT1lJiZYdShlKTtpZighbilpZihpKXtsZXQgYT10Lm9yKys7cmV0dXJuIHM9PnQucGFyc2VyLmFsdGVybmF0aXZlcyhhLFt7QUxUOm8oKCk9PnIocyksIkFMVCIpLEdBVEU6bygoKT0+aShzKSwiR0FURSIpfSx7QUxUOmtFKCksR0FURTpvKCgpPT4haShzKSwiR0FURSIpfV0pfWVsc2UgcmV0dXJuIHI7aWYobj09PSIqIil7bGV0IGE9dC5tYW55Kys7cmV0dXJuIHM9PnQucGFyc2VyLm1hbnkoYSx7REVGOm8oKCk9PnIocyksIkRFRiIpLEdBVEU6aT8oKT0+aShzKTp2b2lkIDB9KX1lbHNlIGlmKG49PT0iKyIpe2xldCBhPXQubWFueSsrO2lmKGkpe2xldCBzPXQub3IrKztyZXR1cm4gbD0+dC5wYXJzZXIuYWx0ZXJuYXRpdmVzKHMsW3tBTFQ6bygoKT0+dC5wYXJzZXIuYXRMZWFzdE9uZShhLHtERUY6bygoKT0+cihsKSwiREVGIil9KSwiQUxUIiksR0FURTpvKCgpPT5pKGwpLCJHQVRFIil9LHtBTFQ6a0UoKSxHQVRFOm8oKCk9PiFpKGwpLCJHQVRFIil9XSl9ZWxzZSByZXR1cm4gcz0+dC5wYXJzZXIuYXRMZWFzdE9uZShhLHtERUY6bygoKT0+cihzKSwiREVGIil9KX1lbHNlIGlmKG49PT0iPyIpe2xldCBhPXQub3B0aW9uYWwrKztyZXR1cm4gcz0+dC5wYXJzZXIub3B0aW9uYWwoYSx7REVGOm8oKCk9PnIocyksIkRFRiIpLEdBVEU6aT8oKT0+aShzKTp2b2lkIDB9KX1lbHNlIE9jKG4pfWZ1bmN0aW9uIFljZSh0LGUpe2xldCByPU8kZSh0LGUpLG49dC5wYXJzZXIuZ2V0UnVsZShyKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYFJ1bGUgIiR7cn0iIG5vdCBmb3VuZC4iYCk7cmV0dXJuIG59ZnVuY3Rpb24gTyRlKHQsZSl7aWYoRmEoZSkpcmV0dXJuIGUubmFtZTtpZih0LnJ1bGVOYW1lcy5oYXMoZSkpcmV0dXJuIHQucnVsZU5hbWVzLmdldChlKTt7bGV0IHI9ZSxuPXIuJGNvbnRhaW5lcixpPWUuJHR5cGU7Zm9yKDshRmEobik7KShmZihuKXx8TGsobil8fE5rKG4pKSYmKGk9bi5lbGVtZW50cy5pbmRleE9mKHIpLnRvU3RyaW5nKCkrIjoiK2kpLHI9bixuPW4uJGNvbnRhaW5lcjtyZXR1cm4gaT1uLm5hbWUrIjoiK2ksdC5ydWxlTmFtZXMuc2V0KGUsaSksaX19ZnVuY3Rpb24gckkodCxlKXtsZXQgcj10LnRva2Vuc1tlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFRva2VuICIke2V9IiBub3QgZm91bmQuImApO3JldHVybiByfXZhciBPRT1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7UGMoKTtTaygpO0dzKCk7RmwoKTtvKEd4LCJjcmVhdGVQYXJzZXIiKTtvKEEkZSwiYnVpbGRSdWxlcyIpO28oQ3AsImJ1aWxkRWxlbWVudCIpO28oXyRlLCJidWlsZEFjdGlvbiIpO28oRCRlLCJidWlsZFJ1bGVDYWxsIik7byhMJGUsImJ1aWxkUnVsZUNhbGxQcmVkaWNhdGUiKTtvKFh1LCJidWlsZFByZWRpY2F0ZSIpO28oUiRlLCJidWlsZEFsdGVybmF0aXZlcyIpO28oTiRlLCJidWlsZFVub3JkZXJlZEdyb3VwIik7byhNJGUsImJ1aWxkR3JvdXAiKTtvKElFLCJnZXRHdWFyZENvbmRpdGlvbiIpO28oV2NlLCJidWlsZENyb3NzUmVmZXJlbmNlIik7byhJJGUsImJ1aWxkS2V5d29yZCIpO28ocWNlLCJ3cmFwIik7byhZY2UsImdldFJ1bGUiKTtvKE8kZSwiZ2V0UnVsZU5hbWUiKTtvKHJJLCJnZXRUb2tlbiIpfSk7ZnVuY3Rpb24gbkkodCl7bGV0IGU9dC5HcmFtbWFyLHI9dC5wYXJzZXIuTGV4ZXIsbj1uZXcgJHgodCk7cmV0dXJuIEd4KGUsbixyLmRlZmluaXRpb24pLG4uZmluYWxpemUoKSxufXZhciBpST1OKCgpPT57InVzZSBzdHJpY3QiO3p4KCk7T0UoKTtvKG5JLCJjcmVhdGVDb21wbGV0aW9uUGFyc2VyIil9KTtmdW5jdGlvbiBhSSh0KXtsZXQgZT1YY2UodCk7cmV0dXJuIGUuZmluYWxpemUoKSxlfWZ1bmN0aW9uIFhjZSh0KXtsZXQgZT10LkdyYW1tYXIscj10LnBhcnNlci5MZXhlcixuPW5ldyBGeCh0KTtyZXR1cm4gR3goZSxuLHIuZGVmaW5pdGlvbil9dmFyIHNJPU4oKCk9PnsidXNlIHN0cmljdCI7engoKTtPRSgpO28oYUksImNyZWF0ZUxhbmdpdW1QYXJzZXIiKTtvKFhjZSwicHJlcGFyZUxhbmdpdW1QYXJzZXIiKX0pO3ZhciBqdSxQRT1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7UGMoKTtjcygpO0ZsKCk7JGcoKTtHcygpO2p1PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuZGlhZ25vc3RpY3M9W119YnVpbGRUb2tlbnMoZSxyKXtsZXQgbj1lbihzeChlLCExKSksaT10aGlzLmJ1aWxkVGVybWluYWxUb2tlbnMobiksYT10aGlzLmJ1aWxkS2V5d29yZFRva2VucyhuLGkscik7cmV0dXJuIGkuZm9yRWFjaChzPT57bGV0IGw9cy5QQVRURVJOO3R5cGVvZiBsPT0ib2JqZWN0IiYmbCYmInRlc3QiaW4gbCYmRmcobCk/YS51bnNoaWZ0KHMpOmEucHVzaChzKX0pLGF9Zmx1c2hMZXhpbmdSZXBvcnQoZSl7cmV0dXJue2RpYWdub3N0aWNzOnRoaXMucG9wRGlhZ25vc3RpY3MoKX19cG9wRGlhZ25vc3RpY3MoKXtsZXQgZT1bLi4udGhpcy5kaWFnbm9zdGljc107cmV0dXJuIHRoaXMuZGlhZ25vc3RpY3M9W10sZX1idWlsZFRlcm1pbmFsVG9rZW5zKGUpe3JldHVybiBlLmZpbHRlcih1bykuZmlsdGVyKHI9PiFyLmZyYWdtZW50KS5tYXAocj0+dGhpcy5idWlsZFRlcm1pbmFsVG9rZW4ocikpLnRvQXJyYXkoKX1idWlsZFRlcm1pbmFsVG9rZW4oZSl7bGV0IHI9R2coZSksbj10aGlzLnJlcXVpcmVzQ3VzdG9tUGF0dGVybihyKT90aGlzLnJlZ2V4UGF0dGVybkZ1bmN0aW9uKHIpOnIsaT17bmFtZTplLm5hbWUsUEFUVEVSTjpufTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiImJihpLkxJTkVfQlJFQUtTPSEwKSxlLmhpZGRlbiYmKGkuR1JPVVA9Rmcocik/S24uU0tJUFBFRDoiaGlkZGVuIiksaX1yZXF1aXJlc0N1c3RvbVBhdHRlcm4oZSl7cmV0dXJuIGUuZmxhZ3MuaW5jbHVkZXMoInUiKXx8ZS5mbGFncy5pbmNsdWRlcygicyIpPyEwOiEhKGUuc291cmNlLmluY2x1ZGVzKCI/PD0iKXx8ZS5zb3VyY2UuaW5jbHVkZXMoIj88ISIpKX1yZWdleFBhdHRlcm5GdW5jdGlvbihlKXtsZXQgcj1uZXcgUmVnRXhwKGUsZS5mbGFncysieSIpO3JldHVybihuLGkpPT4oci5sYXN0SW5kZXg9aSxyLmV4ZWMobikpfWJ1aWxkS2V5d29yZFRva2VucyhlLHIsbil7cmV0dXJuIGUuZmlsdGVyKEZhKS5mbGF0TWFwKGk9PkJjKGkpLmZpbHRlcihYbykpLmRpc3RpbmN0KGk9PmkudmFsdWUpLnRvQXJyYXkoKS5zb3J0KChpLGEpPT5hLnZhbHVlLmxlbmd0aC1pLnZhbHVlLmxlbmd0aCkubWFwKGk9PnRoaXMuYnVpbGRLZXl3b3JkVG9rZW4oaSxyLCEhbj8uY2FzZUluc2Vuc2l0aXZlKSl9YnVpbGRLZXl3b3JkVG9rZW4oZSxyLG4pe2xldCBpPXRoaXMuYnVpbGRLZXl3b3JkUGF0dGVybihlLG4pLGE9e25hbWU6ZS52YWx1ZSxQQVRURVJOOmksTE9OR0VSX0FMVDp0aGlzLmZpbmRMb25nZXJBbHQoZSxyKX07cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoYS5MSU5FX0JSRUFLUz0hMCksYX1idWlsZEtleXdvcmRQYXR0ZXJuKGUscil7cmV0dXJuIHI/bmV3IFJlZ0V4cChGTihlLnZhbHVlKSk6ZS52YWx1ZX1maW5kTG9uZ2VyQWx0KGUscil7cmV0dXJuIHIucmVkdWNlKChuLGkpPT57bGV0IGE9aT8uUEFUVEVSTjtyZXR1cm4gYT8uc291cmNlJiYkTigiXiIrYS5zb3VyY2UrIiQiLGUudmFsdWUpJiZuLnB1c2goaSksbn0sW10pfX19KTt2YXIgQXAsemMsb0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQYygpO0ZsKCk7QXA9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFZhbHVlQ29udmVydGVyIil9Y29udmVydChlLHIpe2xldCBuPXIuZ3JhbW1hclNvdXJjZTtpZih1cChuKSYmKG49Vk4obikpLEJsKG4pKXtsZXQgaT1uLnJ1bGUucmVmO2lmKCFpKXRocm93IG5ldyBFcnJvcigiVGhpcyBjc3Qgbm9kZSB3YXMgbm90IHBhcnNlZCBieSBhIHJ1bGUuIik7cmV0dXJuIHRoaXMucnVuQ29udmVydGVyKGksZSxyKX1yZXR1cm4gZX1ydW5Db252ZXJ0ZXIoZSxyLG4pe3ZhciBpO3N3aXRjaChlLm5hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJJTlQiOnJldHVybiB6Yy5jb252ZXJ0SW50KHIpO2Nhc2UiU1RSSU5HIjpyZXR1cm4gemMuY29udmVydFN0cmluZyhyKTtjYXNlIklEIjpyZXR1cm4gemMuY29udmVydElEKHIpfXN3aXRjaCgoaT1qTihlKSk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnRvTG93ZXJDYXNlKCkpe2Nhc2UibnVtYmVyIjpyZXR1cm4gemMuY29udmVydE51bWJlcihyKTtjYXNlImJvb2xlYW4iOnJldHVybiB6Yy5jb252ZXJ0Qm9vbGVhbihyKTtjYXNlImJpZ2ludCI6cmV0dXJuIHpjLmNvbnZlcnRCaWdpbnQocik7Y2FzZSJkYXRlIjpyZXR1cm4gemMuY29udmVydERhdGUocik7ZGVmYXVsdDpyZXR1cm4gcn19fTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShoKXtsZXQgZj0iIjtmb3IobGV0IGQ9MTtkPGgubGVuZ3RoLTE7ZCsrKXtsZXQgcD1oLmNoYXJBdChkKTtpZihwPT09IlxcIil7bGV0IG09aC5jaGFyQXQoKytkKTtmKz1yKG0pfWVsc2UgZis9cH1yZXR1cm4gZn1vKGUsImNvbnZlcnRTdHJpbmciKSx0LmNvbnZlcnRTdHJpbmc9ZTtmdW5jdGlvbiByKGgpe3N3aXRjaChoKXtjYXNlImIiOnJldHVybiJcYiI7Y2FzZSJmIjpyZXR1cm4iXGYiO2Nhc2UibiI6cmV0dXJuYApgO2Nhc2UiciI6cmV0dXJuIlxyIjtjYXNlInQiOnJldHVybiIJIjtjYXNlInYiOnJldHVybiJcdiI7Y2FzZSIwIjpyZXR1cm4iXDAiO2RlZmF1bHQ6cmV0dXJuIGh9fW8ociwiY29udmVydEVzY2FwZUNoYXJhY3RlciIpO2Z1bmN0aW9uIG4oaCl7cmV0dXJuIGguY2hhckF0KDApPT09Il4iP2guc3Vic3RyaW5nKDEpOmh9byhuLCJjb252ZXJ0SUQiKSx0LmNvbnZlcnRJRD1uO2Z1bmN0aW9uIGkoaCl7cmV0dXJuIHBhcnNlSW50KGgpfW8oaSwiY29udmVydEludCIpLHQuY29udmVydEludD1pO2Z1bmN0aW9uIGEoaCl7cmV0dXJuIEJpZ0ludChoKX1vKGEsImNvbnZlcnRCaWdpbnQiKSx0LmNvbnZlcnRCaWdpbnQ9YTtmdW5jdGlvbiBzKGgpe3JldHVybiBuZXcgRGF0ZShoKX1vKHMsImNvbnZlcnREYXRlIiksdC5jb252ZXJ0RGF0ZT1zO2Z1bmN0aW9uIGwoaCl7cmV0dXJuIE51bWJlcihoKX1vKGwsImNvbnZlcnROdW1iZXIiKSx0LmNvbnZlcnROdW1iZXI9bDtmdW5jdGlvbiB1KGgpe3JldHVybiBoLnRvTG93ZXJDYXNlKCk9PT0idHJ1ZSJ9byh1LCJjb252ZXJ0Qm9vbGVhbiIpLHQuY29udmVydEJvb2xlYW49dX0pKHpjfHwoemM9e30pKX0pO3ZhciBoST1QaSh1ST0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodUksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsSTtmdW5jdGlvbiBjSSgpe2lmKGxJPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTm8gcnVudGltZSBhYnN0cmFjdGlvbiBsYXllciBpbnN0YWxsZWQiKTtyZXR1cm4gbEl9byhjSSwiUkFMIik7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJ1bnRpbWUgYWJzdHJhY3Rpb24gbGF5ZXIgcHJvdmlkZWQiKTtsST1yfW8oZSwiaW5zdGFsbCIpLHQuaW5zdGFsbD1lfSkoY0l8fChjST17fSkpO3VJLmRlZmF1bHQ9Y0l9KTt2YXIgUWNlPVBpKHphPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6YSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7emEuc3RyaW5nQXJyYXk9emEuYXJyYXk9emEuZnVuYz16YS5lcnJvcj16YS5udW1iZXI9emEuc3RyaW5nPXphLmJvb2xlYW49dm9pZCAwO2Z1bmN0aW9uIFAkZSh0KXtyZXR1cm4gdD09PSEwfHx0PT09ITF9byhQJGUsImJvb2xlYW4iKTt6YS5ib29sZWFuPVAkZTtmdW5jdGlvbiBqY2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nInx8dCBpbnN0YW5jZW9mIFN0cmluZ31vKGpjZSwic3RyaW5nIik7emEuc3RyaW5nPWpjZTtmdW5jdGlvbiBCJGUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyInx8dCBpbnN0YW5jZW9mIE51bWJlcn1vKEIkZSwibnVtYmVyIik7emEubnVtYmVyPUIkZTtmdW5jdGlvbiBGJGUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFcnJvcn1vKEYkZSwiZXJyb3IiKTt6YS5lcnJvcj1GJGU7ZnVuY3Rpb24gJCRlKHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIn1vKCQkZSwiZnVuYyIpO3phLmZ1bmM9JCRlO2Z1bmN0aW9uIEtjZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1vKEtjZSwiYXJyYXkiKTt6YS5hcnJheT1LY2U7ZnVuY3Rpb24geiRlKHQpe3JldHVybiBLY2UodCkmJnQuZXZlcnkoZT0+amNlKGUpKX1vKHokZSwic3RyaW5nQXJyYXkiKTt6YS5zdHJpbmdBcnJheT16JGV9KTt2YXIgZEk9UGkoZzE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGcxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtnMS5FbWl0dGVyPWcxLkV2ZW50PXZvaWQgMDt2YXIgRyRlPWhJKCksWmNlOyhmdW5jdGlvbih0KXtsZXQgZT17ZGlzcG9zZSgpe319O3QuTm9uZT1mdW5jdGlvbigpe3JldHVybiBlfX0pKFpjZXx8KGcxLkV2ZW50PVpjZT17fSkpO3ZhciBmST1jbGFzc3tzdGF0aWN7byh0aGlzLCJDYWxsYmFja0xpc3QiKX1hZGQoZSxyPW51bGwsbil7dGhpcy5fY2FsbGJhY2tzfHwodGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX2NvbnRleHRzPVtdKSx0aGlzLl9jYWxsYmFja3MucHVzaChlKSx0aGlzLl9jb250ZXh0cy5wdXNoKHIpLEFycmF5LmlzQXJyYXkobikmJm4ucHVzaCh7ZGlzcG9zZTpvKCgpPT50aGlzLnJlbW92ZShlLHIpLCJkaXNwb3NlIil9KX1yZW1vdmUoZSxyPW51bGwpe2lmKCF0aGlzLl9jYWxsYmFja3MpcmV0dXJuO2xldCBuPSExO2ZvcihsZXQgaT0wLGE9dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDtpPGE7aSsrKWlmKHRoaXMuX2NhbGxiYWNrc1tpXT09PWUpaWYodGhpcy5fY29udGV4dHNbaV09PT1yKXt0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGksMSksdGhpcy5fY29udGV4dHMuc3BsaWNlKGksMSk7cmV0dXJufWVsc2Ugbj0hMDtpZihuKXRocm93IG5ldyBFcnJvcigiV2hlbiBhZGRpbmcgYSBsaXN0ZW5lciB3aXRoIGEgY29udGV4dCwgeW91IHNob3VsZCByZW1vdmUgaXQgd2l0aCB0aGUgc2FtZSBjb250ZXh0Iil9aW52b2tlKC4uLmUpe2lmKCF0aGlzLl9jYWxsYmFja3MpcmV0dXJuW107bGV0IHI9W10sbj10aGlzLl9jYWxsYmFja3Muc2xpY2UoMCksaT10aGlzLl9jb250ZXh0cy5zbGljZSgwKTtmb3IobGV0IGE9MCxzPW4ubGVuZ3RoO2E8czthKyspdHJ5e3IucHVzaChuW2FdLmFwcGx5KGlbYV0sZSkpfWNhdGNoKGwpeygwLEckZS5kZWZhdWx0KSgpLmNvbnNvbGUuZXJyb3IobCl9cmV0dXJuIHJ9aXNFbXB0eSgpe3JldHVybiF0aGlzLl9jYWxsYmFja3N8fHRoaXMuX2NhbGxiYWNrcy5sZW5ndGg9PT0wfWRpc3Bvc2UoKXt0aGlzLl9jYWxsYmFja3M9dm9pZCAwLHRoaXMuX2NvbnRleHRzPXZvaWQgMH19LEJFPWNsYXNzIHR7c3RhdGlje28odGhpcywiRW1pdHRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX29wdGlvbnM9ZX1nZXQgZXZlbnQoKXtyZXR1cm4gdGhpcy5fZXZlbnR8fCh0aGlzLl9ldmVudD0oZSxyLG4pPT57dGhpcy5fY2FsbGJhY2tzfHwodGhpcy5fY2FsbGJhY2tzPW5ldyBmSSksdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQmJnRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2NhbGxiYWNrcy5hZGQoZSxyKTtsZXQgaT17ZGlzcG9zZTpvKCgpPT57dGhpcy5fY2FsbGJhY2tzJiYodGhpcy5fY2FsbGJhY2tzLnJlbW92ZShlLHIpLGkuZGlzcG9zZT10Ll9ub29wLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUmJnRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUodGhpcykpfSwiZGlzcG9zZSIpfTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmbi5wdXNoKGkpLGl9KSx0aGlzLl9ldmVudH1maXJlKGUpe3RoaXMuX2NhbGxiYWNrcyYmdGhpcy5fY2FsbGJhY2tzLmludm9rZS5jYWxsKHRoaXMuX2NhbGxiYWNrcyxlKX1kaXNwb3NlKCl7dGhpcy5fY2FsbGJhY2tzJiYodGhpcy5fY2FsbGJhY2tzLmRpc3Bvc2UoKSx0aGlzLl9jYWxsYmFja3M9dm9pZCAwKX19O2cxLkVtaXR0ZXI9QkU7QkUuX25vb3A9ZnVuY3Rpb24oKXt9fSk7dmFyIEpjZT1QaSh5MT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeTEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3kxLkNhbmNlbGxhdGlvblRva2VuU291cmNlPXkxLkNhbmNlbGxhdGlvblRva2VuPXZvaWQgMDt2YXIgViRlPWhJKCksVSRlPVFjZSgpLHBJPWRJKCksRkU7KGZ1bmN0aW9uKHQpe3QuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpwSS5FdmVudC5Ob25lfSksdC5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6cEkuRXZlbnQuTm9uZX0pO2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gbiYmKG49PT10Lk5vbmV8fG49PT10LkNhbmNlbGxlZHx8VSRlLmJvb2xlYW4obi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkmJiEhbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCl9byhlLCJpcyIpLHQuaXM9ZX0pKEZFfHwoeTEuQ2FuY2VsbGF0aW9uVG9rZW49RkU9e30pKTt2YXIgSCRlPU9iamVjdC5mcmVlemUoZnVuY3Rpb24odCxlKXtsZXQgcj0oMCxWJGUuZGVmYXVsdCkoKS50aW1lci5zZXRUaW1lb3V0KHQuYmluZChlKSwwKTtyZXR1cm57ZGlzcG9zZSgpe3IuZGlzcG9zZSgpfX19KSwkRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJNdXRhYmxlVG9rZW4iKX1jb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExfWNhbmNlbCgpe3RoaXMuX2lzQ2FuY2VsbGVkfHwodGhpcy5faXNDYW5jZWxsZWQ9ITAsdGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZmlyZSh2b2lkIDApLHRoaXMuZGlzcG9zZSgpKSl9Z2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkfWdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZD9IJGU6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBwSS5FbWl0dGVyKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9dm9pZCAwKX19LG1JPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNhbmNlbGxhdGlvblRva2VuU291cmNlIil9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3ICRFKSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1GRS5DYW5jZWxsZWR9ZGlzcG9zZSgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgJEUmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1GRS5Ob25lfX07eTEuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U9bUl9KTt2YXIgeXI9e307dmFyIEtvPU4oKCk9PnsidXNlIHN0cmljdCI7Q3IoeXIsQWEoSmNlKCksMSkpfSk7ZnVuY3Rpb24gZ0koKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e3R5cGVvZiBzZXRJbW1lZGlhdGU+InUiP3NldFRpbWVvdXQodCwwKTpzZXRJbW1lZGlhdGUodCl9KX1mdW5jdGlvbiBHRSgpe3JldHVybiB6RT1wZXJmb3JtYW5jZS5ub3coKSxuZXcgeXIuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2V9ZnVuY3Rpb24gdHVlKHQpe2V1ZT10fWZ1bmN0aW9uIFZjKHQpe3JldHVybiB0PT09R2N9YXN5bmMgZnVuY3Rpb24gd2kodCl7aWYodD09PXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpcmV0dXJuO2xldCBlPXBlcmZvcm1hbmNlLm5vdygpO2lmKGUtekU+PWV1ZSYmKHpFPWUsYXdhaXQgZ0koKSx6RT1wZXJmb3JtYW5jZS5ub3coKSksdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCl0aHJvdyBHY312YXIgekUsZXVlLEdjLHBzLFFvPU4oKCk9PnsidXNlIHN0cmljdCI7S28oKTtvKGdJLCJkZWxheU5leHRUaWNrIik7ekU9MCxldWU9MTA7byhHRSwic3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uIik7byh0dWUsInNldEludGVycnVwdGlvblBlcmlvZCIpO0djPVN5bWJvbCgiT3BlcmF0aW9uQ2FuY2VsbGVkIik7byhWYywiaXNPcGVyYXRpb25DYW5jZWxsZWQiKTtvKHdpLCJpbnRlcnJ1cHRBbmRDaGVjayIpO3BzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmVycmVkIil9Y29uc3RydWN0b3IoKXt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGUscik9Pnt0aGlzLnJlc29sdmU9bj0+KGUobiksdGhpcyksdGhpcy5yZWplY3Q9bj0+KHIobiksdGhpcyl9KX19fSk7ZnVuY3Rpb24geUkodCxlKXtpZih0Lmxlbmd0aDw9MSlyZXR1cm4gdDtsZXQgcj10Lmxlbmd0aC8yfDAsbj10LnNsaWNlKDAsciksaT10LnNsaWNlKHIpO3lJKG4sZSkseUkoaSxlKTtsZXQgYT0wLHM9MCxsPTA7Zm9yKDthPG4ubGVuZ3RoJiZzPGkubGVuZ3RoOyllKG5bYV0saVtzXSk8PTA/dFtsKytdPW5bYSsrXTp0W2wrK109aVtzKytdO2Zvcig7YTxuLmxlbmd0aDspdFtsKytdPW5bYSsrXTtmb3IoO3M8aS5sZW5ndGg7KXRbbCsrXT1pW3MrK107cmV0dXJuIHR9ZnVuY3Rpb24gcnVlKHQsZSxyPTApe2xldCBuPWU/W3JdOltdO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgYT10LmNoYXJDb2RlQXQoaSk7bnVlKGEpJiYoYT09PTEzJiZpKzE8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChpKzEpPT09MTAmJmkrKyxuLnB1c2gocitpKzEpKX1yZXR1cm4gbn1mdW5jdGlvbiBudWUodCl7cmV0dXJuIHQ9PT0xM3x8dD09PTEwfWZ1bmN0aW9uIGl1ZSh0KXtsZXQgZT10LnN0YXJ0LHI9dC5lbmQ7cmV0dXJuIGUubGluZT5yLmxpbmV8fGUubGluZT09PXIubGluZSYmZS5jaGFyYWN0ZXI+ci5jaGFyYWN0ZXI/e3N0YXJ0OnIsZW5kOmV9OnR9ZnVuY3Rpb24gVyRlKHQpe2xldCBlPWl1ZSh0LnJhbmdlKTtyZXR1cm4gZSE9PXQucmFuZ2U/e25ld1RleHQ6dC5uZXdUZXh0LHJhbmdlOmV9OnR9dmFyIFZFLHYxLGF1ZT1OKCgpPT57InVzZSBzdHJpY3QiO1ZFPWNsYXNzIHR7c3RhdGlje28odGhpcywiRnVsbFRleHREb2N1bWVudCIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9cix0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1pLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtsZXQgcj10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHIsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKGUscil7Zm9yKGxldCBuIG9mIGUpaWYodC5pc0luY3JlbWVudGFsKG4pKXtsZXQgaT1pdWUobi5yYW5nZSksYT10aGlzLm9mZnNldEF0KGkuc3RhcnQpLHM9dGhpcy5vZmZzZXRBdChpLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLGEpK24udGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhzLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtsZXQgbD1NYXRoLm1heChpLnN0YXJ0LmxpbmUsMCksdT1NYXRoLm1heChpLmVuZC5saW5lLDApLGg9dGhpcy5fbGluZU9mZnNldHMsZj1ydWUobi50ZXh0LCExLGEpO2lmKHUtbD09PWYubGVuZ3RoKWZvcihsZXQgcD0wLG09Zi5sZW5ndGg7cDxtO3ArKyloW3ArbCsxXT1mW3BdO2Vsc2UgZi5sZW5ndGg8MWU0P2guc3BsaWNlKGwrMSx1LWwsLi4uZik6dGhpcy5fbGluZU9mZnNldHM9aD1oLnNsaWNlKDAsbCsxKS5jb25jYXQoZixoLnNsaWNlKHUrMSkpO2xldCBkPW4udGV4dC5sZW5ndGgtKHMtYSk7aWYoZCE9PTApZm9yKGxldCBwPWwrMStmLmxlbmd0aCxtPWgubGVuZ3RoO3A8bTtwKyspaFtwXT1oW3BdK2R9ZWxzZSBpZih0LmlzRnVsbChuKSl0aGlzLl9jb250ZW50PW4udGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fdmVyc2lvbj1yfWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwJiYodGhpcy5fbGluZU9mZnNldHM9cnVlKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxpPXIubGVuZ3RoO2lmKGk9PT0wKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7bjxpOyl7bGV0IHM9TWF0aC5mbG9vcigobitpKS8yKTtyW3NdPmU/aT1zOm49cysxfWxldCBhPW4tMTtyZXR1cm4gZT10aGlzLmVuc3VyZUJlZm9yZUVPTChlLHJbYV0pLHtsaW5lOmEsY2hhcmFjdGVyOmUtclthXX19b2Zmc2V0QXQoZSl7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49ci5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO2xldCBuPXJbZS5saW5lXTtpZihlLmNoYXJhY3Rlcjw9MClyZXR1cm4gbjtsZXQgaT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aCxhPU1hdGgubWluKG4rZS5jaGFyYWN0ZXIsaSk7cmV0dXJuIHRoaXMuZW5zdXJlQmVmb3JlRU9MKGEsbil9ZW5zdXJlQmVmb3JlRU9MKGUscil7Zm9yKDtlPnImJm51ZSh0aGlzLl9jb250ZW50LmNoYXJDb2RlQXQoZS0xKSk7KWUtLTtyZXR1cm4gZX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7bGV0IHI9ZTtyZXR1cm4gciE9bnVsbCYmdHlwZW9mIHIudGV4dD09InN0cmluZyImJnIucmFuZ2UhPT12b2lkIDAmJihyLnJhbmdlTGVuZ3RoPT09dm9pZCAwfHx0eXBlb2Ygci5yYW5nZUxlbmd0aD09Im51bWJlciIpfXN0YXRpYyBpc0Z1bGwoZSl7bGV0IHI9ZTtyZXR1cm4gciE9bnVsbCYmdHlwZW9mIHIudGV4dD09InN0cmluZyImJnIucmFuZ2U9PT12b2lkIDAmJnIucmFuZ2VMZW5ndGg9PT12b2lkIDB9fTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShpLGEscyxsKXtyZXR1cm4gbmV3IFZFKGksYSxzLGwpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGksYSxzKXtpZihpIGluc3RhbmNlb2YgVkUpcmV0dXJuIGkudXBkYXRlKGEscyksaTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9byhyLCJ1cGRhdGUiKSx0LnVwZGF0ZT1yO2Z1bmN0aW9uIG4oaSxhKXtsZXQgcz1pLmdldFRleHQoKSxsPXlJKGEubWFwKFckZSksKGYsZCk9PntsZXQgcD1mLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBwPT09MD9mLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpwfSksdT0wLGg9W107Zm9yKGxldCBmIG9mIGwpe2xldCBkPWkub2Zmc2V0QXQoZi5yYW5nZS5zdGFydCk7aWYoZDx1KXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO2Q+dSYmaC5wdXNoKHMuc3Vic3RyaW5nKHUsZCkpLGYubmV3VGV4dC5sZW5ndGgmJmgucHVzaChmLm5ld1RleHQpLHU9aS5vZmZzZXRBdChmLnJhbmdlLmVuZCl9cmV0dXJuIGgucHVzaChzLnN1YnN0cih1KSksaC5qb2luKCIiKX1vKG4sImFwcGx5RWRpdHMiKSx0LmFwcGx5RWRpdHM9bn0pKHYxfHwodjE9e30pKTtvKHlJLCJtZXJnZVNvcnQiKTtvKHJ1ZSwiY29tcHV0ZUxpbmVPZmZzZXRzIik7byhudWUsImlzRU9MIik7byhpdWUsImdldFdlbGxmb3JtZWRSYW5nZSIpO28oVyRlLCJnZXRXZWxsZm9ybWVkRWRpdCIpfSk7dmFyIHN1ZSxtcyx4MSx2ST1OKCgpPT57InVzZSBzdHJpY3QiOygoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdD17NDcwOmk9PntmdW5jdGlvbiBhKHUpe2lmKHR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodSkpfW8oYSwiZSIpO2Z1bmN0aW9uIHModSxoKXtmb3IodmFyIGYsZD0iIixwPTAsbT0tMSxnPTAseT0wO3k8PXUubGVuZ3RoOysreSl7aWYoeTx1Lmxlbmd0aClmPXUuY2hhckNvZGVBdCh5KTtlbHNle2lmKGY9PT00NylicmVhaztmPTQ3fWlmKGY9PT00Nyl7aWYoIShtPT09eS0xfHxnPT09MSkpaWYobSE9PXktMSYmZz09PTIpe2lmKGQubGVuZ3RoPDJ8fHAhPT0yfHxkLmNoYXJDb2RlQXQoZC5sZW5ndGgtMSkhPT00Nnx8ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTIpIT09NDYpe2lmKGQubGVuZ3RoPjIpe3ZhciB2PWQubGFzdEluZGV4T2YoIi8iKTtpZih2IT09ZC5sZW5ndGgtMSl7dj09PS0xPyhkPSIiLHA9MCk6cD0oZD1kLnNsaWNlKDAsdikpLmxlbmd0aC0xLWQubGFzdEluZGV4T2YoIi8iKSxtPXksZz0wO2NvbnRpbnVlfX1lbHNlIGlmKGQubGVuZ3RoPT09Mnx8ZC5sZW5ndGg9PT0xKXtkPSIiLHA9MCxtPXksZz0wO2NvbnRpbnVlfX1oJiYoZC5sZW5ndGg+MD9kKz0iLy4uIjpkPSIuLiIscD0yKX1lbHNlIGQubGVuZ3RoPjA/ZCs9Ii8iK3Uuc2xpY2UobSsxLHkpOmQ9dS5zbGljZShtKzEseSkscD15LW0tMTttPXksZz0wfWVsc2UgZj09PTQ2JiZnIT09LTE/KytnOmc9LTF9cmV0dXJuIGR9byhzLCJyIik7dmFyIGw9e3Jlc29sdmU6byhmdW5jdGlvbigpe2Zvcih2YXIgdSxoPSIiLGY9ITEsZD1hcmd1bWVudHMubGVuZ3RoLTE7ZD49LTEmJiFmO2QtLSl7dmFyIHA7ZD49MD9wPWFyZ3VtZW50c1tkXToodT09PXZvaWQgMCYmKHU9cHJvY2Vzcy5jd2QoKSkscD11KSxhKHApLHAubGVuZ3RoIT09MCYmKGg9cCsiLyIraCxmPXAuY2hhckNvZGVBdCgwKT09PTQ3KX1yZXR1cm4gaD1zKGgsIWYpLGY/aC5sZW5ndGg+MD8iLyIraDoiLyI6aC5sZW5ndGg+MD9oOiIuIn0sInJlc29sdmUiKSxub3JtYWxpemU6byhmdW5jdGlvbih1KXtpZihhKHUpLHUubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIGg9dS5jaGFyQ29kZUF0KDApPT09NDcsZj11LmNoYXJDb2RlQXQodS5sZW5ndGgtMSk9PT00NztyZXR1cm4odT1zKHUsIWgpKS5sZW5ndGghPT0wfHxofHwodT0iLiIpLHUubGVuZ3RoPjAmJmYmJih1Kz0iLyIpLGg/Ii8iK3U6dX0sIm5vcm1hbGl6ZSIpLGlzQWJzb2x1dGU6byhmdW5jdGlvbih1KXtyZXR1cm4gYSh1KSx1Lmxlbmd0aD4wJiZ1LmNoYXJDb2RlQXQoMCk9PT00N30sImlzQWJzb2x1dGUiKSxqb2luOm8oZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciB1LGg9MDtoPGFyZ3VtZW50cy5sZW5ndGg7KytoKXt2YXIgZj1hcmd1bWVudHNbaF07YShmKSxmLmxlbmd0aD4wJiYodT09PXZvaWQgMD91PWY6dSs9Ii8iK2YpfXJldHVybiB1PT09dm9pZCAwPyIuIjpsLm5vcm1hbGl6ZSh1KX0sImpvaW4iKSxyZWxhdGl2ZTpvKGZ1bmN0aW9uKHUsaCl7aWYoYSh1KSxhKGgpLHU9PT1ofHwodT1sLnJlc29sdmUodSkpPT09KGg9bC5yZXNvbHZlKGgpKSlyZXR1cm4iIjtmb3IodmFyIGY9MTtmPHUubGVuZ3RoJiZ1LmNoYXJDb2RlQXQoZik9PT00NzsrK2YpO2Zvcih2YXIgZD11Lmxlbmd0aCxwPWQtZixtPTE7bTxoLmxlbmd0aCYmaC5jaGFyQ29kZUF0KG0pPT09NDc7KyttKTtmb3IodmFyIGc9aC5sZW5ndGgtbSx5PXA8Zz9wOmcsdj0tMSx4PTA7eDw9eTsrK3gpe2lmKHg9PT15KXtpZihnPnkpe2lmKGguY2hhckNvZGVBdChtK3gpPT09NDcpcmV0dXJuIGguc2xpY2UobSt4KzEpO2lmKHg9PT0wKXJldHVybiBoLnNsaWNlKG0reCl9ZWxzZSBwPnkmJih1LmNoYXJDb2RlQXQoZit4KT09PTQ3P3Y9eDp4PT09MCYmKHY9MCkpO2JyZWFrfXZhciBiPXUuY2hhckNvZGVBdChmK3gpO2lmKGIhPT1oLmNoYXJDb2RlQXQobSt4KSlicmVhaztiPT09NDcmJih2PXgpfXZhciBUPSIiO2Zvcih4PWYrdisxO3g8PWQ7Kyt4KXghPT1kJiZ1LmNoYXJDb2RlQXQoeCkhPT00N3x8KFQubGVuZ3RoPT09MD9UKz0iLi4iOlQrPSIvLi4iKTtyZXR1cm4gVC5sZW5ndGg+MD9UK2guc2xpY2UobSt2KToobSs9dixoLmNoYXJDb2RlQXQobSk9PT00NyYmKyttLGguc2xpY2UobSkpfSwicmVsYXRpdmUiKSxfbWFrZUxvbmc6byhmdW5jdGlvbih1KXtyZXR1cm4gdX0sIl9tYWtlTG9uZyIpLGRpcm5hbWU6byhmdW5jdGlvbih1KXtpZihhKHUpLHUubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciBoPXUuY2hhckNvZGVBdCgwKSxmPWg9PT00NyxkPS0xLHA9ITAsbT11Lmxlbmd0aC0xO20+PTE7LS1tKWlmKChoPXUuY2hhckNvZGVBdChtKSk9PT00Nyl7aWYoIXApe2Q9bTticmVha319ZWxzZSBwPSExO3JldHVybiBkPT09LTE/Zj8iLyI6Ii4iOmYmJmQ9PT0xPyIvLyI6dS5zbGljZSgwLGQpfSwiZGlybmFtZSIpLGJhc2VuYW1lOm8oZnVuY3Rpb24odSxoKXtpZihoIT09dm9pZCAwJiZ0eXBlb2YgaCE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2EodSk7dmFyIGYsZD0wLHA9LTEsbT0hMDtpZihoIT09dm9pZCAwJiZoLmxlbmd0aD4wJiZoLmxlbmd0aDw9dS5sZW5ndGgpe2lmKGgubGVuZ3RoPT09dS5sZW5ndGgmJmg9PT11KXJldHVybiIiO3ZhciBnPWgubGVuZ3RoLTEseT0tMTtmb3IoZj11Lmxlbmd0aC0xO2Y+PTA7LS1mKXt2YXIgdj11LmNoYXJDb2RlQXQoZik7aWYodj09PTQ3KXtpZighbSl7ZD1mKzE7YnJlYWt9fWVsc2UgeT09PS0xJiYobT0hMSx5PWYrMSksZz49MCYmKHY9PT1oLmNoYXJDb2RlQXQoZyk/LS1nPT0tMSYmKHA9Zik6KGc9LTEscD15KSl9cmV0dXJuIGQ9PT1wP3A9eTpwPT09LTEmJihwPXUubGVuZ3RoKSx1LnNsaWNlKGQscCl9Zm9yKGY9dS5sZW5ndGgtMTtmPj0wOy0tZilpZih1LmNoYXJDb2RlQXQoZik9PT00Nyl7aWYoIW0pe2Q9ZisxO2JyZWFrfX1lbHNlIHA9PT0tMSYmKG09ITEscD1mKzEpO3JldHVybiBwPT09LTE/IiI6dS5zbGljZShkLHApfSwiYmFzZW5hbWUiKSxleHRuYW1lOm8oZnVuY3Rpb24odSl7YSh1KTtmb3IodmFyIGg9LTEsZj0wLGQ9LTEscD0hMCxtPTAsZz11Lmxlbmd0aC0xO2c+PTA7LS1nKXt2YXIgeT11LmNoYXJDb2RlQXQoZyk7aWYoeSE9PTQ3KWQ9PT0tMSYmKHA9ITEsZD1nKzEpLHk9PT00Nj9oPT09LTE/aD1nOm0hPT0xJiYobT0xKTpoIT09LTEmJihtPS0xKTtlbHNlIGlmKCFwKXtmPWcrMTticmVha319cmV0dXJuIGg9PT0tMXx8ZD09PS0xfHxtPT09MHx8bT09PTEmJmg9PT1kLTEmJmg9PT1mKzE/IiI6dS5zbGljZShoLGQpfSwiZXh0bmFtZSIpLGZvcm1hdDpvKGZ1bmN0aW9uKHUpe2lmKHU9PT1udWxsfHx0eXBlb2YgdSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHUpO3JldHVybiBmdW5jdGlvbihoLGYpe3ZhciBkPWYuZGlyfHxmLnJvb3QscD1mLmJhc2V8fChmLm5hbWV8fCIiKSsoZi5leHR8fCIiKTtyZXR1cm4gZD9kPT09Zi5yb290P2QrcDpkKyIvIitwOnB9KDAsdSl9LCJmb3JtYXQiKSxwYXJzZTpvKGZ1bmN0aW9uKHUpe2EodSk7dmFyIGg9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKHUubGVuZ3RoPT09MClyZXR1cm4gaDt2YXIgZixkPXUuY2hhckNvZGVBdCgwKSxwPWQ9PT00NztwPyhoLnJvb3Q9Ii8iLGY9MSk6Zj0wO2Zvcih2YXIgbT0tMSxnPTAseT0tMSx2PSEwLHg9dS5sZW5ndGgtMSxiPTA7eD49ZjstLXgpaWYoKGQ9dS5jaGFyQ29kZUF0KHgpKSE9PTQ3KXk9PT0tMSYmKHY9ITEseT14KzEpLGQ9PT00Nj9tPT09LTE/bT14OmIhPT0xJiYoYj0xKTptIT09LTEmJihiPS0xKTtlbHNlIGlmKCF2KXtnPXgrMTticmVha31yZXR1cm4gbT09PS0xfHx5PT09LTF8fGI9PT0wfHxiPT09MSYmbT09PXktMSYmbT09PWcrMT95IT09LTEmJihoLmJhc2U9aC5uYW1lPWc9PT0wJiZwP3Uuc2xpY2UoMSx5KTp1LnNsaWNlKGcseSkpOihnPT09MCYmcD8oaC5uYW1lPXUuc2xpY2UoMSxtKSxoLmJhc2U9dS5zbGljZSgxLHkpKTooaC5uYW1lPXUuc2xpY2UoZyxtKSxoLmJhc2U9dS5zbGljZShnLHkpKSxoLmV4dD11LnNsaWNlKG0seSkpLGc+MD9oLmRpcj11LnNsaWNlKDAsZy0xKTpwJiYoaC5kaXI9Ii8iKSxofSwicGFyc2UiKSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtsLnBvc2l4PWwsaS5leHBvcnRzPWx9fSxlPXt9O2Z1bmN0aW9uIHIoaSl7dmFyIGE9ZVtpXTtpZihhIT09dm9pZCAwKXJldHVybiBhLmV4cG9ydHM7dmFyIHM9ZVtpXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbaV0ocyxzLmV4cG9ydHMscikscy5leHBvcnRzfW8ociwiciIpLHIuZD0oaSxhKT0+e2Zvcih2YXIgcyBpbiBhKXIubyhhLHMpJiYhci5vKGkscykmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLHMse2VudW1lcmFibGU6ITAsZ2V0OmFbc119KX0sci5vPShpLGEpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKSxyLnI9aT0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9OygoKT0+e2xldCBpO3IucihuKSxyLmQobix7VVJJOm8oKCk9PnAsIlVSSSIpLFV0aWxzOm8oKCk9Pk8sIlV0aWxzIil9KSx0eXBlb2YgcHJvY2Vzcz09Im9iamVjdCI/aT1wcm9jZXNzLnBsYXRmb3JtPT09IndpbjMyIjp0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmKGk9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dzIik+PTApO2xldCBhPS9eXHdbXHdcZCsuLV0qJC8scz0vXlwvLyxsPS9eXC9cLy87ZnVuY3Rpb24gdShSLGspe2lmKCFSLnNjaGVtZSYmayl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtSLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtSLnBhdGh9IiwgcXVlcnk6ICIke1IucXVlcnl9IiwgZnJhZ21lbnQ6ICIke1IuZnJhZ21lbnR9In1gKTtpZihSLnNjaGVtZSYmIWEudGVzdChSLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKFIucGF0aCl7aWYoUi5hdXRob3JpdHkpe2lmKCFzLnRlc3QoUi5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGwudGVzdChSLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1vKHUsInMiKTtsZXQgaD0iIixmPSIvIixkPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIHB7c3RhdGlje28odGhpcywiZiIpfXN0YXRpYyBpc1VyaShrKXtyZXR1cm4gayBpbnN0YW5jZW9mIHB8fCEhayYmdHlwZW9mIGsuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIGsuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2Ygay5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIGsucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2Ygay5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2Ygay5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygay53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2Ygay50b1N0cmluZz09ImZ1bmN0aW9uIn1zY2hlbWU7YXV0aG9yaXR5O3BhdGg7cXVlcnk7ZnJhZ21lbnQ7Y29uc3RydWN0b3IoayxMLEEsSSxNLFA9ITEpe3R5cGVvZiBrPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9ay5zY2hlbWV8fGgsdGhpcy5hdXRob3JpdHk9ay5hdXRob3JpdHl8fGgsdGhpcy5wYXRoPWsucGF0aHx8aCx0aGlzLnF1ZXJ5PWsucXVlcnl8fGgsdGhpcy5mcmFnbWVudD1rLmZyYWdtZW50fHxoKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oQixGKXtyZXR1cm4gQnx8Rj9COiJmaWxlIn0oayxQKSx0aGlzLmF1dGhvcml0eT1MfHxoLHRoaXMucGF0aD1mdW5jdGlvbihCLEYpe3N3aXRjaChCKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6Rj9GWzBdIT09ZiYmKEY9ZitGKTpGPWZ9cmV0dXJuIEZ9KHRoaXMuc2NoZW1lLEF8fGgpLHRoaXMucXVlcnk9SXx8aCx0aGlzLmZyYWdtZW50PU18fGgsdSh0aGlzLFApKX1nZXQgZnNQYXRoKCl7cmV0dXJuIGIodGhpcywhMSl9d2l0aChrKXtpZighaylyZXR1cm4gdGhpcztsZXR7c2NoZW1lOkwsYXV0aG9yaXR5OkEscGF0aDpJLHF1ZXJ5Ok0sZnJhZ21lbnQ6UH09aztyZXR1cm4gTD09PXZvaWQgMD9MPXRoaXMuc2NoZW1lOkw9PT1udWxsJiYoTD1oKSxBPT09dm9pZCAwP0E9dGhpcy5hdXRob3JpdHk6QT09PW51bGwmJihBPWgpLEk9PT12b2lkIDA/ST10aGlzLnBhdGg6ST09PW51bGwmJihJPWgpLE09PT12b2lkIDA/TT10aGlzLnF1ZXJ5Ok09PT1udWxsJiYoTT1oKSxQPT09dm9pZCAwP1A9dGhpcy5mcmFnbWVudDpQPT09bnVsbCYmKFA9aCksTD09PXRoaXMuc2NoZW1lJiZBPT09dGhpcy5hdXRob3JpdHkmJkk9PT10aGlzLnBhdGgmJk09PT10aGlzLnF1ZXJ5JiZQPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBnKEwsQSxJLE0sUCl9c3RhdGljIHBhcnNlKGssTD0hMSl7bGV0IEE9ZC5leGVjKGspO3JldHVybiBBP25ldyBnKEFbMl18fGgsRShBWzRdfHxoKSxFKEFbNV18fGgpLEUoQVs3XXx8aCksRShBWzldfHxoKSxMKTpuZXcgZyhoLGgsaCxoLGgpfXN0YXRpYyBmaWxlKGspe2xldCBMPWg7aWYoaSYmKGs9ay5yZXBsYWNlKC9cXC9nLGYpKSxrWzBdPT09ZiYma1sxXT09PWYpe2xldCBBPWsuaW5kZXhPZihmLDIpO0E9PT0tMT8oTD1rLnN1YnN0cmluZygyKSxrPWYpOihMPWsuc3Vic3RyaW5nKDIsQSksaz1rLnN1YnN0cmluZyhBKXx8Zil9cmV0dXJuIG5ldyBnKCJmaWxlIixMLGssaCxoKX1zdGF0aWMgZnJvbShrKXtsZXQgTD1uZXcgZyhrLnNjaGVtZSxrLmF1dGhvcml0eSxrLnBhdGgsay5xdWVyeSxrLmZyYWdtZW50KTtyZXR1cm4gdShMLCEwKSxMfXRvU3RyaW5nKGs9ITEpe3JldHVybiBUKHRoaXMsayl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZShrKXtpZihrKXtpZihrIGluc3RhbmNlb2YgcClyZXR1cm4gazt7bGV0IEw9bmV3IGcoayk7cmV0dXJuIEwuX2Zvcm1hdHRlZD1rLmV4dGVybmFsLEwuX2ZzUGF0aD1rLl9zZXA9PT1tP2suZnNQYXRoOm51bGwsTH19cmV0dXJuIGt9fWxldCBtPWk/MTp2b2lkIDA7Y2xhc3MgZyBleHRlbmRzIHB7c3RhdGlje28odGhpcywibCIpfV9mb3JtYXR0ZWQ9bnVsbDtfZnNQYXRoPW51bGw7Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9Yih0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKGs9ITEpe3JldHVybiBrP1QodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1UKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2xldCBrPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihrLmZzUGF0aD10aGlzLl9mc1BhdGgsay5fc2VwPW0pLHRoaXMuX2Zvcm1hdHRlZCYmKGsuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihrLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGsuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGsuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoay5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoay5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxrfX1sZXQgeT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIHYoUixrLEwpe2xldCBBLEk9LTE7Zm9yKGxldCBNPTA7TTxSLmxlbmd0aDtNKyspe2xldCBQPVIuY2hhckNvZGVBdChNKTtpZihQPj05NyYmUDw9MTIyfHxQPj02NSYmUDw9OTB8fFA+PTQ4JiZQPD01N3x8UD09PTQ1fHxQPT09NDZ8fFA9PT05NXx8UD09PTEyNnx8ayYmUD09PTQ3fHxMJiZQPT09OTF8fEwmJlA9PT05M3x8TCYmUD09PTU4KUkhPT0tMSYmKEErPWVuY29kZVVSSUNvbXBvbmVudChSLnN1YnN0cmluZyhJLE0pKSxJPS0xKSxBIT09dm9pZCAwJiYoQSs9Ui5jaGFyQXQoTSkpO2Vsc2V7QT09PXZvaWQgMCYmKEE9Ui5zdWJzdHIoMCxNKSk7bGV0IEI9eVtQXTtCIT09dm9pZCAwPyhJIT09LTEmJihBKz1lbmNvZGVVUklDb21wb25lbnQoUi5zdWJzdHJpbmcoSSxNKSksST0tMSksQSs9Qik6ST09PS0xJiYoST1NKX19cmV0dXJuIEkhPT0tMSYmKEErPWVuY29kZVVSSUNvbXBvbmVudChSLnN1YnN0cmluZyhJKSkpLEEhPT12b2lkIDA/QTpSfW8odiwiZCIpO2Z1bmN0aW9uIHgoUil7bGV0IGs7Zm9yKGxldCBMPTA7TDxSLmxlbmd0aDtMKyspe2xldCBBPVIuY2hhckNvZGVBdChMKTtBPT09MzV8fEE9PT02Mz8oaz09PXZvaWQgMCYmKGs9Ui5zdWJzdHIoMCxMKSksays9eVtBXSk6ayE9PXZvaWQgMCYmKGsrPVJbTF0pfXJldHVybiBrIT09dm9pZCAwP2s6Un1vKHgsInAiKTtmdW5jdGlvbiBiKFIsayl7bGV0IEw7cmV0dXJuIEw9Ui5hdXRob3JpdHkmJlIucGF0aC5sZW5ndGg+MSYmUi5zY2hlbWU9PT0iZmlsZSI/YC8vJHtSLmF1dGhvcml0eX0ke1IucGF0aH1gOlIucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihSLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJlIucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8Ui5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZSLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmUi5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD9rP1IucGF0aC5zdWJzdHIoMSk6Ui5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrUi5wYXRoLnN1YnN0cigyKTpSLnBhdGgsaSYmKEw9TC5yZXBsYWNlKC9cLy9nLCJcXCIpKSxMfW8oYiwibSIpO2Z1bmN0aW9uIFQoUixrKXtsZXQgTD1rP3g6dixBPSIiLHtzY2hlbWU6SSxhdXRob3JpdHk6TSxwYXRoOlAscXVlcnk6QixmcmFnbWVudDpGfT1SO2lmKEkmJihBKz1JLEErPSI6IiksKE18fEk9PT0iZmlsZSIpJiYoQSs9ZixBKz1mKSxNKXtsZXQgej1NLmluZGV4T2YoIkAiKTtpZih6IT09LTEpe2xldCAkPU0uc3Vic3RyKDAseik7TT1NLnN1YnN0cih6KzEpLHo9JC5sYXN0SW5kZXhPZigiOiIpLHo9PT0tMT9BKz1MKCQsITEsITEpOihBKz1MKCQuc3Vic3RyKDAseiksITEsITEpLEErPSI6IixBKz1MKCQuc3Vic3RyKHorMSksITEsITApKSxBKz0iQCJ9TT1NLnRvTG93ZXJDYXNlKCksej1NLmxhc3RJbmRleE9mKCI6Iiksej09PS0xP0ErPUwoTSwhMSwhMCk6KEErPUwoTS5zdWJzdHIoMCx6KSwhMSwhMCksQSs9TS5zdWJzdHIoeikpfWlmKFApe2lmKFAubGVuZ3RoPj0zJiZQLmNoYXJDb2RlQXQoMCk9PT00NyYmUC5jaGFyQ29kZUF0KDIpPT09NTgpe2xldCB6PVAuY2hhckNvZGVBdCgxKTt6Pj02NSYmejw9OTAmJihQPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHorMzIpfToke1Auc3Vic3RyKDMpfWApfWVsc2UgaWYoUC5sZW5ndGg+PTImJlAuY2hhckNvZGVBdCgxKT09PTU4KXtsZXQgej1QLmNoYXJDb2RlQXQoMCk7ej49NjUmJno8PTkwJiYoUD1gJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHorMzIpfToke1Auc3Vic3RyKDIpfWApfUErPUwoUCwhMCwhMSl9cmV0dXJuIEImJihBKz0iPyIsQSs9TChCLCExLCExKSksRiYmKEErPSIjIixBKz1rP0Y6dihGLCExLCExKSksQX1vKFQsInkiKTtmdW5jdGlvbiBTKFIpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFIpfWNhdGNoe3JldHVybiBSLmxlbmd0aD4zP1Iuc3Vic3RyKDAsMykrUyhSLnN1YnN0cigzKSk6Un19byhTLCJ2Iik7bGV0IHc9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gRShSKXtyZXR1cm4gUi5tYXRjaCh3KT9SLnJlcGxhY2UodyxrPT5TKGspKTpSfW8oRSwiQyIpO3ZhciBfPXIoNDcwKTtsZXQgQz1fLnBvc2l4fHxfLEQ9Ii8iO3ZhciBPOyhmdW5jdGlvbihSKXtSLmpvaW5QYXRoPWZ1bmN0aW9uKGssLi4uTCl7cmV0dXJuIGsud2l0aCh7cGF0aDpDLmpvaW4oay5wYXRoLC4uLkwpfSl9LFIucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oaywuLi5MKXtsZXQgQT1rLnBhdGgsST0hMTtBWzBdIT09RCYmKEE9RCtBLEk9ITApO2xldCBNPUMucmVzb2x2ZShBLC4uLkwpO3JldHVybiBJJiZNWzBdPT09RCYmIWsuYXV0aG9yaXR5JiYoTT1NLnN1YnN0cmluZygxKSksay53aXRoKHtwYXRoOk19KX0sUi5kaXJuYW1lPWZ1bmN0aW9uKGspe2lmKGsucGF0aC5sZW5ndGg9PT0wfHxrLnBhdGg9PT1EKXJldHVybiBrO2xldCBMPUMuZGlybmFtZShrLnBhdGgpO3JldHVybiBMLmxlbmd0aD09PTEmJkwuY2hhckNvZGVBdCgwKT09PTQ2JiYoTD0iIiksay53aXRoKHtwYXRoOkx9KX0sUi5iYXNlbmFtZT1mdW5jdGlvbihrKXtyZXR1cm4gQy5iYXNlbmFtZShrLnBhdGgpfSxSLmV4dG5hbWU9ZnVuY3Rpb24oayl7cmV0dXJuIEMuZXh0bmFtZShrLnBhdGgpfX0pKE98fChPPXt9KSl9KSgpLHN1ZT1ufSkoKTsoe1VSSTptcyxVdGlsczp4MX09c3VlKX0pO3ZhciBncyxVYz1OKCgpPT57InVzZSBzdHJpY3QiO3ZJKCk7KGZ1bmN0aW9uKHQpe3QuYmFzZW5hbWU9eDEuYmFzZW5hbWUsdC5kaXJuYW1lPXgxLmRpcm5hbWUsdC5leHRuYW1lPXgxLmV4dG5hbWUsdC5qb2luUGF0aD14MS5qb2luUGF0aCx0LnJlc29sdmVQYXRoPXgxLnJlc29sdmVQYXRoO2Z1bmN0aW9uIGUoaSxhKXtyZXR1cm4gaT8udG9TdHJpbmcoKT09PWE/LnRvU3RyaW5nKCl9byhlLCJlcXVhbHMiKSx0LmVxdWFscz1lO2Z1bmN0aW9uIHIoaSxhKXtsZXQgcz10eXBlb2YgaT09InN0cmluZyI/aTppLnBhdGgsbD10eXBlb2YgYT09InN0cmluZyI/YTphLnBhdGgsdT1zLnNwbGl0KCIvIikuZmlsdGVyKG09Pm0ubGVuZ3RoPjApLGg9bC5zcGxpdCgiLyIpLmZpbHRlcihtPT5tLmxlbmd0aD4wKSxmPTA7Zm9yKDtmPHUubGVuZ3RoJiZ1W2ZdPT09aFtmXTtmKyspO2xldCBkPSIuLi8iLnJlcGVhdCh1Lmxlbmd0aC1mKSxwPWguc2xpY2UoZikuam9pbigiLyIpO3JldHVybiBkK3B9byhyLCJyZWxhdGl2ZSIpLHQucmVsYXRpdmU9cjtmdW5jdGlvbiBuKGkpe3JldHVybiBtcy5wYXJzZShpLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCl9byhuLCJub3JtYWxpemUiKSx0Lm5vcm1hbGl6ZT1ufSkoZ3N8fChncz17fSkpfSk7dmFyIGtuLFZ4LFV4LGIxPU4oKCk9PnsidXNlIHN0cmljdCI7YXVlKCk7YjEoKTtLbygpO0dzKCk7VWMoKTsoZnVuY3Rpb24odCl7dFt0LkNoYW5nZWQ9MF09IkNoYW5nZWQiLHRbdC5QYXJzZWQ9MV09IlBhcnNlZCIsdFt0LkluZGV4ZWRDb250ZW50PTJdPSJJbmRleGVkQ29udGVudCIsdFt0LkNvbXB1dGVkU2NvcGVzPTNdPSJDb21wdXRlZFNjb3BlcyIsdFt0LkxpbmtlZD00XT0iTGlua2VkIix0W3QuSW5kZXhlZFJlZmVyZW5jZXM9NV09IkluZGV4ZWRSZWZlcmVuY2VzIix0W3QuVmFsaWRhdGVkPTZdPSJWYWxpZGF0ZWQifSkoa258fChrbj17fSkpO1Z4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy50ZXh0RG9jdW1lbnRzPWUud29ya3NwYWNlLlRleHREb2N1bWVudHMsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyfWFzeW5jIGZyb21VcmkoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUpO3JldHVybiB0aGlzLmNyZWF0ZUFzeW5jKGUsbixyKX1mcm9tVGV4dERvY3VtZW50KGUscixuKXtyZXR1cm4gcj1yPz9tcy5wYXJzZShlLnVyaSkseXIuQ2FuY2VsbGF0aW9uVG9rZW4uaXMobik/dGhpcy5jcmVhdGVBc3luYyhyLGUsbik6dGhpcy5jcmVhdGUocixlLG4pfWZyb21TdHJpbmcoZSxyLG4pe3JldHVybiB5ci5DYW5jZWxsYXRpb25Ub2tlbi5pcyhuKT90aGlzLmNyZWF0ZUFzeW5jKHIsZSxuKTp0aGlzLmNyZWF0ZShyLGUsbil9ZnJvbU1vZGVsKGUscil7cmV0dXJuIHRoaXMuY3JlYXRlKHIseyRtb2RlbDplfSl9Y3JlYXRlKGUscixuKXtpZih0eXBlb2Ygcj09InN0cmluZyIpe2xldCBpPXRoaXMucGFyc2UoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2UgaWYoIiRtb2RlbCJpbiByKXtsZXQgaT17dmFsdWU6ci4kbW9kZWwscGFyc2VyRXJyb3JzOltdLGxleGVyRXJyb3JzOltdfTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQoaSxlKX1lbHNle2xldCBpPXRoaXMucGFyc2UoZSxyLmdldFRleHQoKSxuKTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQoaSxlLHIpfX1hc3luYyBjcmVhdGVBc3luYyhlLHIsbil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgaT1hd2FpdCB0aGlzLnBhcnNlQXN5bmMoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2V7bGV0IGk9YXdhaXQgdGhpcy5wYXJzZUFzeW5jKGUsci5nZXRUZXh0KCksbik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KGksZSxyKX19Y3JlYXRlTGFuZ2l1bURvY3VtZW50KGUscixuLGkpe2xldCBhO2lmKG4pYT17cGFyc2VSZXN1bHQ6ZSx1cmk6cixzdGF0ZTprbi5QYXJzZWQscmVmZXJlbmNlczpbXSx0ZXh0RG9jdW1lbnQ6bn07ZWxzZXtsZXQgcz10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihyLGkpO2E9e3BhcnNlUmVzdWx0OmUsdXJpOnIsc3RhdGU6a24uUGFyc2VkLHJlZmVyZW5jZXM6W10sZ2V0IHRleHREb2N1bWVudCgpe3JldHVybiBzKCl9fX1yZXR1cm4gZS52YWx1ZS4kZG9jdW1lbnQ9YSxhfWFzeW5jIHVwZGF0ZShlLHIpe3ZhciBuLGk7bGV0IGE9KG49ZS5wYXJzZVJlc3VsdC52YWx1ZS4kY3N0Tm9kZSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnJvb3QuZnVsbFRleHQscz0oaT10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5nZXQoZS51cmkudG9TdHJpbmcoKSksbD1zP3MuZ2V0VGV4dCgpOmF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUudXJpKTtpZihzKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0ZXh0RG9jdW1lbnQiLHt2YWx1ZTpzfSk7ZWxzZXtsZXQgdT10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihlLnVyaSxsKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidGV4dERvY3VtZW50Iix7Z2V0OnV9KX1yZXR1cm4gYSE9PWwmJihlLnBhcnNlUmVzdWx0PWF3YWl0IHRoaXMucGFyc2VBc3luYyhlLnVyaSxsLHIpLGUucGFyc2VSZXN1bHQudmFsdWUuJGRvY3VtZW50PWUpLGUuc3RhdGU9a24uUGFyc2VkLGV9cGFyc2UoZSxyLG4pe3JldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5wYXJzZXIuTGFuZ2l1bVBhcnNlci5wYXJzZShyLG4pfXBhcnNlQXN5bmMoZSxyLG4pe3JldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5wYXJzZXIuQXN5bmNQYXJzZXIucGFyc2UocixuKX1jcmVhdGVUZXh0RG9jdW1lbnRHZXR0ZXIoZSxyKXtsZXQgbj10aGlzLnNlcnZpY2VSZWdpc3RyeSxpO3JldHVybigpPT5pPz8oaT12MS5jcmVhdGUoZS50b1N0cmluZygpLG4uZ2V0U2VydmljZXMoZSkuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkLDAscj8/IiIpKX19LFV4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRzIil9Y29uc3RydWN0b3IoZSl7dGhpcy5kb2N1bWVudE1hcD1uZXcgTWFwLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMuc2VydmljZVJlZ2lzdHJ5PWUuU2VydmljZVJlZ2lzdHJ5fWdldCBhbGwoKXtyZXR1cm4gZW4odGhpcy5kb2N1bWVudE1hcC52YWx1ZXMoKSl9YWRkRG9jdW1lbnQoZSl7bGV0IHI9ZS51cmkudG9TdHJpbmcoKTtpZih0aGlzLmRvY3VtZW50TWFwLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYEEgZG9jdW1lbnQgd2l0aCB0aGUgVVJJICcke3J9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7dGhpcy5kb2N1bWVudE1hcC5zZXQocixlKX1nZXREb2N1bWVudChlKXtsZXQgcj1lLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuZ2V0KHIpfWFzeW5jIGdldE9yQ3JlYXRlRG9jdW1lbnQoZSxyKXtsZXQgbj10aGlzLmdldERvY3VtZW50KGUpO3JldHVybiBufHwobj1hd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbVVyaShlLHIpLHRoaXMuYWRkRG9jdW1lbnQobiksbil9Y3JlYXRlRG9jdW1lbnQoZSxyLG4pe2lmKG4pcmV0dXJuIHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tU3RyaW5nKHIsZSxuKS50aGVuKGk9Pih0aGlzLmFkZERvY3VtZW50KGkpLGkpKTt7bGV0IGk9dGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21TdHJpbmcocixlKTtyZXR1cm4gdGhpcy5hZGREb2N1bWVudChpKSxpfX1oYXNEb2N1bWVudChlKXtyZXR1cm4gdGhpcy5kb2N1bWVudE1hcC5oYXMoZS50b1N0cmluZygpKX1pbnZhbGlkYXRlRG9jdW1lbnQoZSl7bGV0IHI9ZS50b1N0cmluZygpLG49dGhpcy5kb2N1bWVudE1hcC5nZXQocik7cmV0dXJuIG4mJih0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5yZWZlcmVuY2VzLkxpbmtlci51bmxpbmsobiksbi5zdGF0ZT1rbi5DaGFuZ2VkLG4ucHJlY29tcHV0ZWRTY29wZXM9dm9pZCAwLG4uZGlhZ25vc3RpY3M9dm9pZCAwKSxufWRlbGV0ZURvY3VtZW50KGUpe2xldCByPWUudG9TdHJpbmcoKSxuPXRoaXMuZG9jdW1lbnRNYXAuZ2V0KHIpO3JldHVybiBuJiYobi5zdGF0ZT1rbi5DaGFuZ2VkLHRoaXMuZG9jdW1lbnRNYXAuZGVsZXRlKHIpKSxufX19KTt2YXIgeEksSHgsYkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbygpO0lsKCk7Y3MoKTtRbygpO2IxKCk7eEk9U3ltYm9sKCJyZWZfcmVzb2x2aW5nIiksSHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdExpbmtlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMucmVmbGVjdGlvbj1lLnNoYXJlZC5Bc3RSZWZsZWN0aW9uLHRoaXMubGFuZ2l1bURvY3VtZW50cz0oKT0+ZS5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5zY29wZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5TY29wZVByb3ZpZGVyLHRoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3J9YXN5bmMgbGluayhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7Zm9yKGxldCBuIG9mIGpvKGUucGFyc2VSZXN1bHQudmFsdWUpKWF3YWl0IHdpKHIpLFBnKG4pLmZvckVhY2goaT0+dGhpcy5kb0xpbmsoaSxlKSl9ZG9MaW5rKGUscil7dmFyIG47bGV0IGk9ZS5yZWZlcmVuY2U7aWYoaS5fcmVmPT09dm9pZCAwKXtpLl9yZWY9eEk7dHJ5e2xldCBhPXRoaXMuZ2V0Q2FuZGlkYXRlKGUpO2lmKGFwKGEpKWkuX3JlZj1hO2Vsc2UgaWYoaS5fbm9kZURlc2NyaXB0aW9uPWEsdGhpcy5sYW5naXVtRG9jdW1lbnRzKCkuaGFzRG9jdW1lbnQoYS5kb2N1bWVudFVyaSkpe2xldCBzPXRoaXMubG9hZEFzdE5vZGUoYSk7aS5fcmVmPXM/P3RoaXMuY3JlYXRlTGlua2luZ0Vycm9yKGUsYSl9ZWxzZSBpLl9yZWY9dm9pZCAwfWNhdGNoKGEpe2NvbnNvbGUuZXJyb3IoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlc29sdmluZyByZWZlcmVuY2UgdG8gJyR7aS4kcmVmVGV4dH0nOmAsYSk7bGV0IHM9KG49YS5tZXNzYWdlKSE9PW51bGwmJm4hPT12b2lkIDA/bjpTdHJpbmcoYSk7aS5fcmVmPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWVzc2FnZTpgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzb2x2aW5nIHJlZmVyZW5jZSB0byAnJHtpLiRyZWZUZXh0fSc6ICR7c31gfSl9ci5yZWZlcmVuY2VzLnB1c2goaSl9fXVubGluayhlKXtmb3IobGV0IHIgb2YgZS5yZWZlcmVuY2VzKWRlbGV0ZSByLl9yZWYsZGVsZXRlIHIuX25vZGVEZXNjcmlwdGlvbjtlLnJlZmVyZW5jZXM9W119Z2V0Q2FuZGlkYXRlKGUpe2xldCBuPXRoaXMuc2NvcGVQcm92aWRlci5nZXRTY29wZShlKS5nZXRFbGVtZW50KGUucmVmZXJlbmNlLiRyZWZUZXh0KTtyZXR1cm4gbj8/dGhpcy5jcmVhdGVMaW5raW5nRXJyb3IoZSl9YnVpbGRSZWZlcmVuY2UoZSxyLG4saSl7bGV0IGE9dGhpcyxzPXskcmVmTm9kZTpuLCRyZWZUZXh0OmksZ2V0IHJlZigpe3ZhciBsO2lmKHNpKHRoaXMuX3JlZikpcmV0dXJuIHRoaXMuX3JlZjtpZihzTih0aGlzLl9ub2RlRGVzY3JpcHRpb24pKXtsZXQgdT1hLmxvYWRBc3ROb2RlKHRoaXMuX25vZGVEZXNjcmlwdGlvbik7dGhpcy5fcmVmPXU/P2EuY3JlYXRlTGlua2luZ0Vycm9yKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSx0aGlzLl9ub2RlRGVzY3JpcHRpb24pfWVsc2UgaWYodGhpcy5fcmVmPT09dm9pZCAwKXt0aGlzLl9yZWY9eEk7bGV0IHU9ZXgoZSkuJGRvY3VtZW50LGg9YS5nZXRMaW5rZWROb2RlKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSk7aWYoaC5lcnJvciYmdSYmdS5zdGF0ZTxrbi5Db21wdXRlZFNjb3BlcylyZXR1cm4gdGhpcy5fcmVmPXZvaWQgMDt0aGlzLl9yZWY9KGw9aC5ub2RlKSE9PW51bGwmJmwhPT12b2lkIDA/bDpoLmVycm9yLHRoaXMuX25vZGVEZXNjcmlwdGlvbj1oLmRlc2NyLHU/LnJlZmVyZW5jZXMucHVzaCh0aGlzKX1lbHNlIGlmKHRoaXMuX3JlZj09PXhJKXRocm93IG5ldyBFcnJvcihgQ3ljbGljIHJlZmVyZW5jZSByZXNvbHV0aW9uIGRldGVjdGVkOiAke2EuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSl9LyR7cn0gKHN5bWJvbCAnJHtpfScpYCk7cmV0dXJuIHNpKHRoaXMuX3JlZik/dGhpcy5fcmVmOnZvaWQgMH0sZ2V0ICRub2RlRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fbm9kZURlc2NyaXB0aW9ufSxnZXQgZXJyb3IoKXtyZXR1cm4gYXAodGhpcy5fcmVmKT90aGlzLl9yZWY6dm9pZCAwfX07cmV0dXJuIHN9Z2V0TGlua2VkTm9kZShlKXt2YXIgcjt0cnl7bGV0IG49dGhpcy5nZXRDYW5kaWRhdGUoZSk7aWYoYXAobikpcmV0dXJue2Vycm9yOm59O2xldCBpPXRoaXMubG9hZEFzdE5vZGUobik7cmV0dXJuIGk/e25vZGU6aSxkZXNjcjpufTp7ZGVzY3I6bixlcnJvcjp0aGlzLmNyZWF0ZUxpbmtpbmdFcnJvcihlLG4pfX1jYXRjaChuKXtjb25zb2xlLmVycm9yKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke2UucmVmZXJlbmNlLiRyZWZUZXh0fSc6YCxuKTtsZXQgaT0ocj1uLm1lc3NhZ2UpIT09bnVsbCYmciE9PXZvaWQgMD9yOlN0cmluZyhuKTtyZXR1cm57ZXJyb3I6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlOmBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke2UucmVmZXJlbmNlLiRyZWZUZXh0fSc6ICR7aX1gfSl9fX1sb2FkQXN0Tm9kZShlKXtpZihlLm5vZGUpcmV0dXJuIGUubm9kZTtsZXQgcj10aGlzLmxhbmdpdW1Eb2N1bWVudHMoKS5nZXREb2N1bWVudChlLmRvY3VtZW50VXJpKTtpZihyKXJldHVybiB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUoci5wYXJzZVJlc3VsdC52YWx1ZSxlLnBhdGgpfWNyZWF0ZUxpbmtpbmdFcnJvcihlLHIpe2xldCBuPWV4KGUuY29udGFpbmVyKS4kZG9jdW1lbnQ7biYmbi5zdGF0ZTxrbi5Db21wdXRlZFNjb3BlcyYmY29uc29sZS53YXJuKGBBdHRlbXB0ZWQgcmVmZXJlbmNlIHJlc29sdXRpb24gYmVmb3JlIGRvY3VtZW50IHJlYWNoZWQgQ29tcHV0ZWRTY29wZXMgc3RhdGUgKCR7bi51cml9KS5gKTtsZXQgaT10aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShlKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlOmBDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gJHtpfSBuYW1lZCAnJHtlLnJlZmVyZW5jZS4kcmVmVGV4dH0nLmAsdGFyZ2V0RGVzY3JpcHRpb246cn0pfX19KTtmdW5jdGlvbiBvdWUodCl7cmV0dXJuIHR5cGVvZiB0Lm5hbWU9PSJzdHJpbmcifXZhciBXeCxUST1OKCgpPT57InVzZSBzdHJpY3QiO0ZsKCk7byhvdWUsImlzTmFtZWQiKTtXeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TmFtZVByb3ZpZGVyIil9Z2V0TmFtZShlKXtpZihvdWUoZSkpcmV0dXJuIGUubmFtZX1nZXROYW1lTm9kZShlKXtyZXR1cm4gb3goZS4kY3N0Tm9kZSwibmFtZSIpfX19KTt2YXIgcXgsd0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGbCgpO0lsKCk7Y3MoKTtPbCgpO0dzKCk7VWMoKTtxeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0UmVmZXJlbmNlcyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5pbmRleD1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMubm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3J9ZmluZERlY2xhcmF0aW9uKGUpe2lmKGUpe2xldCByPVhOKGUpLG49ZS5hc3ROb2RlO2lmKHImJm4pe2xldCBpPW5bci5mZWF0dXJlXTtpZih5YShpKSlyZXR1cm4gaS5yZWY7aWYoQXJyYXkuaXNBcnJheShpKSl7Zm9yKGxldCBhIG9mIGkpaWYoeWEoYSkmJmEuJHJlZk5vZGUmJmEuJHJlZk5vZGUub2Zmc2V0PD1lLm9mZnNldCYmYS4kcmVmTm9kZS5lbmQ+PWUuZW5kKXJldHVybiBhLnJlZn19aWYobil7bGV0IGk9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUobik7aWYoaSYmKGk9PT1lfHxsTihlLGkpKSlyZXR1cm4gbn19fWZpbmREZWNsYXJhdGlvbk5vZGUoZSl7bGV0IHI9dGhpcy5maW5kRGVjbGFyYXRpb24oZSk7aWYocj8uJGNzdE5vZGUpe2xldCBuPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKHIpO3JldHVybiBuPz9yLiRjc3ROb2RlfX1maW5kUmVmZXJlbmNlcyhlLHIpe2xldCBuPVtdO2lmKHIuaW5jbHVkZURlY2xhcmF0aW9uKXtsZXQgYT10aGlzLmdldFJlZmVyZW5jZVRvU2VsZihlKTthJiZuLnB1c2goYSl9bGV0IGk9dGhpcy5pbmRleC5maW5kQWxsUmVmZXJlbmNlcyhlLHRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSkpO3JldHVybiByLmRvY3VtZW50VXJpJiYoaT1pLmZpbHRlcihhPT5ncy5lcXVhbHMoYS5zb3VyY2VVcmksci5kb2N1bWVudFVyaSkpKSxuLnB1c2goLi4uaSksZW4obil9Z2V0UmVmZXJlbmNlVG9TZWxmKGUpe2xldCByPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKGUpO2lmKHIpe2xldCBuPSRhKGUpLGk9dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtyZXR1cm57c291cmNlVXJpOm4udXJpLHNvdXJjZVBhdGg6aSx0YXJnZXRVcmk6bi51cmksdGFyZ2V0UGF0aDppLHNlZ21lbnQ6b3AociksbG9jYWw6ITB9fX19fSk7dmFyIHpsLF9wLFQxPU4oKCk9PnsidXNlIHN0cmljdCI7R3MoKTt6bD1jbGFzc3tzdGF0aWN7byh0aGlzLCJNdWx0aU1hcCIpfWNvbnN0cnVjdG9yKGUpe2lmKHRoaXMubWFwPW5ldyBNYXAsZSlmb3IobGV0W3Isbl1vZiBlKXRoaXMuYWRkKHIsbil9Z2V0IHNpemUoKXtyZXR1cm4gam0uc3VtKGVuKHRoaXMubWFwLnZhbHVlcygpKS5tYXAoZT0+ZS5sZW5ndGgpKX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9ZGVsZXRlKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7aWYobil7bGV0IGk9bi5pbmRleE9mKHIpO2lmKGk+PTApcmV0dXJuIG4ubGVuZ3RoPT09MT90aGlzLm1hcC5kZWxldGUoZSk6bi5zcGxpY2UoaSwxKSwhMH1yZXR1cm4hMX19Z2V0KGUpe3ZhciByO3JldHVybihyPXRoaXMubWFwLmdldChlKSkhPT1udWxsJiZyIT09dm9pZCAwP3I6W119aGFzKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuaGFzKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIG4/bi5pbmRleE9mKHIpPj0wOiExfX1hZGQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKHIpOnRoaXMubWFwLnNldChlLFtyXSksdGhpc31hZGRBbGwoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKC4uLnIpOnRoaXMubWFwLnNldChlLEFycmF5LmZyb20ocikpLHRoaXN9Zm9yRWFjaChlKXt0aGlzLm1hcC5mb3JFYWNoKChyLG4pPT5yLmZvckVhY2goaT0+ZShpLG4sdGhpcykpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKS5pdGVyYXRvcigpfWVudHJpZXMoKXtyZXR1cm4gZW4odGhpcy5tYXAuZW50cmllcygpKS5mbGF0TWFwKChbZSxyXSk9PnIubWFwKG49PltlLG5dKSl9a2V5cygpe3JldHVybiBlbih0aGlzLm1hcC5rZXlzKCkpfXZhbHVlcygpe3JldHVybiBlbih0aGlzLm1hcC52YWx1ZXMoKSkuZmxhdCgpfWVudHJpZXNHcm91cGVkQnlLZXkoKXtyZXR1cm4gZW4odGhpcy5tYXAuZW50cmllcygpKX19LF9wPWNsYXNze3N0YXRpY3tvKHRoaXMsIkJpTWFwIil9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5tYXAuc2l6ZX1jb25zdHJ1Y3RvcihlKXtpZih0aGlzLm1hcD1uZXcgTWFwLHRoaXMuaW52ZXJzZT1uZXcgTWFwLGUpZm9yKGxldFtyLG5db2YgZSl0aGlzLnNldChyLG4pfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKSx0aGlzLmludmVyc2UuY2xlYXIoKX1zZXQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuc2V0KGUsciksdGhpcy5pbnZlcnNlLnNldChyLGUpLHRoaXN9Z2V0KGUpe3JldHVybiB0aGlzLm1hcC5nZXQoZSl9Z2V0S2V5KGUpe3JldHVybiB0aGlzLmludmVyc2UuZ2V0KGUpfWRlbGV0ZShlKXtsZXQgcj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIHIhPT12b2lkIDA/KHRoaXMubWFwLmRlbGV0ZShlKSx0aGlzLmludmVyc2UuZGVsZXRlKHIpLCEwKTohMX19fSk7dmFyIFl4LGtJPU4oKCk9PnsidXNlIHN0cmljdCI7S28oKTtjcygpO1QxKCk7UW8oKTtZeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5kZXNjcmlwdGlvbnM9ZS53b3Jrc3BhY2UuQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXJ9YXN5bmMgY29tcHV0ZUV4cG9ydHMoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3JldHVybiB0aGlzLmNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLnBhcnNlUmVzdWx0LnZhbHVlLGUsdm9pZCAwLHIpfWFzeW5jIGNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLHIsbj10eCxpPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBhPVtdO3RoaXMuZXhwb3J0Tm9kZShlLGEscik7Zm9yKGxldCBzIG9mIG4oZSkpYXdhaXQgd2koaSksdGhpcy5leHBvcnROb2RlKHMsYSxyKTtyZXR1cm4gYX1leHBvcnROb2RlKGUscixuKXtsZXQgaT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2kmJnIucHVzaCh0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihlLGksbikpfWFzeW5jIGNvbXB1dGVMb2NhbFNjb3BlcyhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49ZS5wYXJzZVJlc3VsdC52YWx1ZSxpPW5ldyB6bDtmb3IobGV0IGEgb2YgQmMobikpYXdhaXQgd2kociksdGhpcy5wcm9jZXNzTm9kZShhLGUsaSk7cmV0dXJuIGl9cHJvY2Vzc05vZGUoZSxyLG4pe2xldCBpPWUuJGNvbnRhaW5lcjtpZihpKXtsZXQgYT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2EmJm4uYWRkKGksdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSxhLHIpKX19fX0pO3ZhciB3MSxYeCxxJGUsRUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHcygpO3cxPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0cmVhbVNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9ZSx0aGlzLm91dGVyU2NvcGU9cix0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExfWdldEFsbEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMub3V0ZXJTY29wZT90aGlzLmVsZW1lbnRzLmNvbmNhdCh0aGlzLm91dGVyU2NvcGUuZ2V0QWxsRWxlbWVudHMoKSk6dGhpcy5lbGVtZW50c31nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP3RoaXMuZWxlbWVudHMuZmluZChuPT5uLm5hbWUudG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKSk6dGhpcy5lbGVtZW50cy5maW5kKG49Pm4ubmFtZT09PWUpO2lmKHIpcmV0dXJuIHI7aWYodGhpcy5vdXRlclNjb3BlKXJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChlKX19LFh4PWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hcFNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9bmV3IE1hcCx0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz10aGlzLmNhc2VJbnNlbnNpdGl2ZT9hLm5hbWUudG9Mb3dlckNhc2UoKTphLm5hbWU7dGhpcy5lbGVtZW50cy5zZXQocyxhKX10aGlzLm91dGVyU2NvcGU9cn1nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP2UudG9Mb3dlckNhc2UoKTplLG49dGhpcy5lbGVtZW50cy5nZXQocik7aWYobilyZXR1cm4gbjtpZih0aGlzLm91dGVyU2NvcGUpcmV0dXJuIHRoaXMub3V0ZXJTY29wZS5nZXRFbGVtZW50KGUpfWdldEFsbEVsZW1lbnRzKCl7bGV0IGU9ZW4odGhpcy5lbGVtZW50cy52YWx1ZXMoKSk7cmV0dXJuIHRoaXMub3V0ZXJTY29wZSYmKGU9ZS5jb25jYXQodGhpcy5vdXRlclNjb3BlLmdldEFsbEVsZW1lbnRzKCkpKSxlfX0scSRlPXtnZXRFbGVtZW50KCl7fSxnZXRBbGxFbGVtZW50cygpe3JldHVybiBIMn19fSk7dmFyIGsxLGp4LERwLFVFLEUxLEhFPU4oKCk9PnsidXNlIHN0cmljdCI7azE9Y2xhc3N7c3RhdGlje28odGhpcywiRGlzcG9zYWJsZUNhY2hlIil9Y29uc3RydWN0b3IoKXt0aGlzLnRvRGlzcG9zZT1bXSx0aGlzLmlzRGlzcG9zZWQ9ITF9b25EaXNwb3NlKGUpe3RoaXMudG9EaXNwb3NlLnB1c2goZSl9ZGlzcG9zZSgpe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jbGVhcigpLHRoaXMuaXNEaXNwb3NlZD0hMCx0aGlzLnRvRGlzcG9zZS5mb3JFYWNoKGU9PmUuZGlzcG9zZSgpKX10aHJvd0lmRGlzcG9zZWQoKXtpZih0aGlzLmlzRGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGNhY2hlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX19LGp4PWNsYXNzIGV4dGVuZHMgazF7c3RhdGlje28odGhpcywiU2ltcGxlQ2FjaGUiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYWNoZT1uZXcgTWFwfWhhcyhlKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKX1zZXQoZSxyKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuc2V0KGUscil9Z2V0KGUscil7aWYodGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKSlyZXR1cm4gdGhpcy5jYWNoZS5nZXQoZSk7aWYocil7bGV0IG49cigpO3JldHVybiB0aGlzLmNhY2hlLnNldChlLG4pLG59ZWxzZSByZXR1cm59ZGVsZXRlKGUpe3JldHVybiB0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuZGVsZXRlKGUpfWNsZWFyKCl7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmNsZWFyKCl9fSxEcD1jbGFzcyBleHRlbmRzIGsxe3N0YXRpY3tvKHRoaXMsIkNvbnRleHRDYWNoZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMuY29udmVydGVyPWU/PyhyPT5yKX1oYXMoZSxyKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlRm9yQ29udGV4dChlKS5oYXMocil9c2V0KGUscixuKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGVGb3JDb250ZXh0KGUpLnNldChyLG4pfWdldChlLHIsbil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKTtsZXQgaT10aGlzLmNhY2hlRm9yQ29udGV4dChlKTtpZihpLmhhcyhyKSlyZXR1cm4gaS5nZXQocik7aWYobil7bGV0IGE9bigpO3JldHVybiBpLnNldChyLGEpLGF9ZWxzZSByZXR1cm59ZGVsZXRlKGUscil7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZUZvckNvbnRleHQoZSkuZGVsZXRlKHIpfWNsZWFyKGUpe2lmKHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksZSl7bGV0IHI9dGhpcy5jb252ZXJ0ZXIoZSk7dGhpcy5jYWNoZS5kZWxldGUocil9ZWxzZSB0aGlzLmNhY2hlLmNsZWFyKCl9Y2FjaGVGb3JDb250ZXh0KGUpe2xldCByPXRoaXMuY29udmVydGVyKGUpLG49dGhpcy5jYWNoZS5nZXQocik7cmV0dXJuIG58fChuPW5ldyBNYXAsdGhpcy5jYWNoZS5zZXQocixuKSksbn19LFVFPWNsYXNzIGV4dGVuZHMgRHB7c3RhdGlje28odGhpcywiRG9jdW1lbnRDYWNoZSIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIobj0+bi50b1N0cmluZygpKSxyPyh0aGlzLnRvRGlzcG9zZS5wdXNoKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vbkRvY3VtZW50UGhhc2UocixuPT57dGhpcy5jbGVhcihuLnVyaS50b1N0cmluZygpKX0pKSx0aGlzLnRvRGlzcG9zZS5wdXNoKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vblVwZGF0ZSgobixpKT0+e2ZvcihsZXQgYSBvZiBpKXRoaXMuY2xlYXIoYSl9KSkpOnRoaXMudG9EaXNwb3NlLnB1c2goZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKChuLGkpPT57bGV0IGE9bi5jb25jYXQoaSk7Zm9yKGxldCBzIG9mIGEpdGhpcy5jbGVhcihzKX0pKX19LEUxPWNsYXNzIGV4dGVuZHMganh7c3RhdGlje28odGhpcywiV29ya3NwYWNlQ2FjaGUiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKCkscj8odGhpcy50b0Rpc3Bvc2UucHVzaChlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25CdWlsZFBoYXNlKHIsKCk9Pnt0aGlzLmNsZWFyKCl9KSksdGhpcy50b0Rpc3Bvc2UucHVzaChlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25VcGRhdGUoKG4saSk9PntpLmxlbmd0aD4wJiZ0aGlzLmNsZWFyKCl9KSkpOnRoaXMudG9EaXNwb3NlLnB1c2goZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKCgpPT57dGhpcy5jbGVhcigpfSkpfX19KTt2YXIgS3gsU0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFSSgpO2NzKCk7R3MoKTtIRSgpO0t4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRTY29wZVByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5yZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb24sdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcix0aGlzLmRlc2NyaXB0aW9ucz1lLndvcmtzcGFjZS5Bc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlcix0aGlzLmluZGV4TWFuYWdlcj1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMuZ2xvYmFsU2NvcGVDYWNoZT1uZXcgRTEoZS5zaGFyZWQpfWdldFNjb3BlKGUpe2xldCByPVtdLG49dGhpcy5yZWZsZWN0aW9uLmdldFJlZmVyZW5jZVR5cGUoZSksaT0kYShlLmNvbnRhaW5lcikucHJlY29tcHV0ZWRTY29wZXM7aWYoaSl7bGV0IHM9ZS5jb250YWluZXI7ZG97bGV0IGw9aS5nZXQocyk7bC5sZW5ndGg+MCYmci5wdXNoKGVuKGwpLmZpbHRlcih1PT50aGlzLnJlZmxlY3Rpb24uaXNTdWJ0eXBlKHUudHlwZSxuKSkpLHM9cy4kY29udGFpbmVyfXdoaWxlKHMpfWxldCBhPXRoaXMuZ2V0R2xvYmFsU2NvcGUobixlKTtmb3IobGV0IHM9ci5sZW5ndGgtMTtzPj0wO3MtLSlhPXRoaXMuY3JlYXRlU2NvcGUocltzXSxhKTtyZXR1cm4gYX1jcmVhdGVTY29wZShlLHIsbil7cmV0dXJuIG5ldyB3MShlbihlKSxyLG4pfWNyZWF0ZVNjb3BlRm9yTm9kZXMoZSxyLG4pe2xldCBpPWVuKGUpLm1hcChhPT57bGV0IHM9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShhKTtpZihzKXJldHVybiB0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihhLHMpfSkubm9uTnVsbGFibGUoKTtyZXR1cm4gbmV3IHcxKGkscixuKX1nZXRHbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmdsb2JhbFNjb3BlQ2FjaGUuZ2V0KGUsKCk9Pm5ldyBYeCh0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cyhlKSkpfX19KTtmdW5jdGlvbiBDSSh0KXtyZXR1cm4gdHlwZW9mIHQuJGNvbW1lbnQ9PSJzdHJpbmcifWZ1bmN0aW9uIGx1ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiYhIXQmJigiJHJlZiJpbiB0fHwiJGVycm9yImluIHQpfXZhciBReCxXRT1OKCgpPT57InVzZSBzdHJpY3QiO3ZJKCk7SWwoKTtjcygpO0ZsKCk7byhDSSwiaXNBc3ROb2RlV2l0aENvbW1lbnQiKTtvKGx1ZSwiaXNJbnRlcm1lZGlhdGVSZWZlcmVuY2UiKTtReD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0SnNvblNlcmlhbGl6ZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmlnbm9yZVByb3BlcnRpZXM9bmV3IFNldChbIiRjb250YWluZXIiLCIkY29udGFpbmVyUHJvcGVydHkiLCIkY29udGFpbmVySW5kZXgiLCIkZG9jdW1lbnQiLCIkY3N0Tm9kZSJdKSx0aGlzLmxhbmdpdW1Eb2N1bWVudHM9ZS5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5hc3ROb2RlTG9jYXRvcj1lLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcix0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuY29tbWVudFByb3ZpZGVyPWUuZG9jdW1lbnRhdGlvbi5Db21tZW50UHJvdmlkZXJ9c2VyaWFsaXplKGUscil7bGV0IG49cj8/e30saT1yPy5yZXBsYWNlcixhPW8oKGwsdSk9PnRoaXMucmVwbGFjZXIobCx1LG4pLCJkZWZhdWx0UmVwbGFjZXIiKSxzPWk/KGwsdSk9PmkobCx1LGEpOmE7dHJ5e3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudD0kYShlKSxKU09OLnN0cmluZ2lmeShlLHMscj8uc3BhY2UpfWZpbmFsbHl7dGhpcy5jdXJyZW50RG9jdW1lbnQ9dm9pZCAwfX1kZXNlcmlhbGl6ZShlLHIpe2xldCBuPXI/P3t9LGk9SlNPTi5wYXJzZShlKTtyZXR1cm4gdGhpcy5saW5rTm9kZShpLGksbiksaX1yZXBsYWNlcihlLHIse3JlZlRleHQ6bixzb3VyY2VUZXh0OmksdGV4dFJlZ2lvbnM6YSxjb21tZW50czpzLHVyaUNvbnZlcnRlcjpsfSl7dmFyIHUsaCxmLGQ7aWYoIXRoaXMuaWdub3JlUHJvcGVydGllcy5oYXMoZSkpaWYoeWEocikpe2xldCBwPXIucmVmLG09bj9yLiRyZWZUZXh0OnZvaWQgMDtpZihwKXtsZXQgZz0kYShwKSx5PSIiO3RoaXMuY3VycmVudERvY3VtZW50JiZ0aGlzLmN1cnJlbnREb2N1bWVudCE9PWcmJihsP3k9bChnLnVyaSxyKTp5PWcudXJpLnRvU3RyaW5nKCkpO2xldCB2PXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocCk7cmV0dXJueyRyZWY6YCR7eX0jJHt2fWAsJHJlZlRleHQ6bX19ZWxzZSByZXR1cm57JGVycm9yOihoPSh1PXIuZXJyb3IpPT09bnVsbHx8dT09PXZvaWQgMD92b2lkIDA6dS5tZXNzYWdlKSE9PW51bGwmJmghPT12b2lkIDA/aDoiQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlIiwkcmVmVGV4dDptfX1lbHNlIGlmKHNpKHIpKXtsZXQgcDtpZihhJiYocD10aGlzLmFkZEFzdE5vZGVSZWdpb25XaXRoQXNzaWdubWVudHNUbyhPYmplY3QuYXNzaWduKHt9LHIpKSwoIWV8fHIuJGRvY3VtZW50KSYmcD8uJHRleHRSZWdpb24mJihwLiR0ZXh0UmVnaW9uLmRvY3VtZW50VVJJPShmPXRoaXMuY3VycmVudERvY3VtZW50KT09PW51bGx8fGY9PT12b2lkIDA/dm9pZCAwOmYudXJpLnRvU3RyaW5nKCkpKSxpJiYhZSYmKHA/PyhwPU9iamVjdC5hc3NpZ24oe30scikpLHAuJHNvdXJjZVRleHQ9KGQ9ci4kY3N0Tm9kZSk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLnRleHQpLHMpe3A/PyhwPU9iamVjdC5hc3NpZ24oe30scikpO2xldCBtPXRoaXMuY29tbWVudFByb3ZpZGVyLmdldENvbW1lbnQocik7bSYmKHAuJGNvbW1lbnQ9bS5yZXBsYWNlKC9cci9nLCIiKSl9cmV0dXJuIHA/P3J9ZWxzZSByZXR1cm4gcn1hZGRBc3ROb2RlUmVnaW9uV2l0aEFzc2lnbm1lbnRzVG8oZSl7bGV0IHI9byhuPT4oe29mZnNldDpuLm9mZnNldCxlbmQ6bi5lbmQsbGVuZ3RoOm4ubGVuZ3RoLHJhbmdlOm4ucmFuZ2V9KSwiY3JlYXRlRG9jdW1lbnRTZWdtZW50Iik7aWYoZS4kY3N0Tm9kZSl7bGV0IG49ZS4kdGV4dFJlZ2lvbj1yKGUuJGNzdE5vZGUpLGk9bi5hc3NpZ25tZW50cz17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKGE9PiFhLnN0YXJ0c1dpdGgoIiQiKSkuZm9yRWFjaChhPT57bGV0IHM9SE4oZS4kY3N0Tm9kZSxhKS5tYXAocik7cy5sZW5ndGghPT0wJiYoaVthXT1zKX0pLGV9fWxpbmtOb2RlKGUscixuLGksYSxzKXtmb3IobGV0W3UsaF1vZiBPYmplY3QuZW50cmllcyhlKSlpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXtsZXQgZD1oW2ZdO2x1ZShkKT9oW2ZdPXRoaXMucmV2aXZlUmVmZXJlbmNlKGUsdSxyLGQsbik6c2koZCkmJnRoaXMubGlua05vZGUoZCxyLG4sZSx1LGYpfWVsc2UgbHVlKGgpP2VbdV09dGhpcy5yZXZpdmVSZWZlcmVuY2UoZSx1LHIsaCxuKTpzaShoKSYmdGhpcy5saW5rTm9kZShoLHIsbixlLHUpO2xldCBsPWU7bC4kY29udGFpbmVyPWksbC4kY29udGFpbmVyUHJvcGVydHk9YSxsLiRjb250YWluZXJJbmRleD1zfXJldml2ZVJlZmVyZW5jZShlLHIsbixpLGEpe2xldCBzPWkuJHJlZlRleHQsbD1pLiRlcnJvcjtpZihpLiRyZWYpe2xldCB1PXRoaXMuZ2V0UmVmTm9kZShuLGkuJHJlZixhLnVyaUNvbnZlcnRlcik7aWYoc2kodSkpcmV0dXJuIHN8fChzPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWUodSkpLHskcmVmVGV4dDpzPz8iIixyZWY6dX07bD11fWlmKGwpe2xldCB1PXskcmVmVGV4dDpzPz8iIn07cmV0dXJuIHUuZXJyb3I9e2NvbnRhaW5lcjplLHByb3BlcnR5OnIsbWVzc2FnZTpsLHJlZmVyZW5jZTp1fSx1fWVsc2UgcmV0dXJufWdldFJlZk5vZGUoZSxyLG4pe3RyeXtsZXQgaT1yLmluZGV4T2YoIiMiKTtpZihpPT09MCl7bGV0IHU9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlKGUsci5zdWJzdHJpbmcoMSkpO3JldHVybiB1fHwiQ291bGQgbm90IHJlc29sdmUgcGF0aDogIityfWlmKGk8MCl7bGV0IHU9bj9uKHIpOm1zLnBhcnNlKHIpLGg9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHUpO3JldHVybiBoP2gucGFyc2VSZXN1bHQudmFsdWU6IkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcn1sZXQgYT1uP24oci5zdWJzdHJpbmcoMCxpKSk6bXMucGFyc2Uoci5zdWJzdHJpbmcoMCxpKSkscz10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoYSk7aWYoIXMpcmV0dXJuIkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcjtpZihpPT09ci5sZW5ndGgtMSlyZXR1cm4gcy5wYXJzZVJlc3VsdC52YWx1ZTtsZXQgbD10aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUocy5wYXJzZVJlc3VsdC52YWx1ZSxyLnN1YnN0cmluZyhpKzEpKTtyZXR1cm4gbHx8IkNvdWxkIG5vdCByZXNvbHZlIFVSSTogIityfWNhdGNoKGkpe3JldHVybiBTdHJpbmcoaSl9fX19KTt2YXIgWngsQUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVYygpO1p4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRTZXJ2aWNlUmVnaXN0cnkiKX1nZXQgbWFwKCl7cmV0dXJuIHRoaXMuZmlsZUV4dGVuc2lvbk1hcH1jb25zdHJ1Y3RvcihlKXt0aGlzLmxhbmd1YWdlSWRNYXA9bmV3IE1hcCx0aGlzLmZpbGVFeHRlbnNpb25NYXA9bmV3IE1hcCx0aGlzLnRleHREb2N1bWVudHM9ZT8ud29ya3NwYWNlLlRleHREb2N1bWVudHN9cmVnaXN0ZXIoZSl7bGV0IHI9ZS5MYW5ndWFnZU1ldGFEYXRhO2ZvcihsZXQgbiBvZiByLmZpbGVFeHRlbnNpb25zKXRoaXMuZmlsZUV4dGVuc2lvbk1hcC5oYXMobikmJmNvbnNvbGUud2FybihgVGhlIGZpbGUgZXh0ZW5zaW9uICR7bn0gaXMgdXNlZCBieSBtdWx0aXBsZSBsYW5ndWFnZXMuIEl0IGlzIG5vdyBhc3NpZ25lZCB0byAnJHtyLmxhbmd1YWdlSWR9Jy5gKSx0aGlzLmZpbGVFeHRlbnNpb25NYXAuc2V0KG4sZSk7dGhpcy5sYW5ndWFnZUlkTWFwLnNldChyLmxhbmd1YWdlSWQsZSksdGhpcy5sYW5ndWFnZUlkTWFwLnNpemU9PT0xP3RoaXMuc2luZ2xldG9uPWU6dGhpcy5zaW5nbGV0b249dm9pZCAwfWdldFNlcnZpY2VzKGUpe3ZhciByLG47aWYodGhpcy5zaW5nbGV0b24hPT12b2lkIDApcmV0dXJuIHRoaXMuc2luZ2xldG9uO2lmKHRoaXMubGFuZ3VhZ2VJZE1hcC5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIGVtcHR5LiBVc2UgYHJlZ2lzdGVyYCB0byByZWdpc3RlciB0aGUgc2VydmljZXMgb2YgYSBsYW5ndWFnZS4iKTtsZXQgaT0obj0ocj10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5nZXQoZSkpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5sYW5ndWFnZUlkO2lmKGkhPT12b2lkIDApe2xldCBsPXRoaXMubGFuZ3VhZ2VJZE1hcC5nZXQoaSk7aWYobClyZXR1cm4gbH1sZXQgYT1ncy5leHRuYW1lKGUpLHM9dGhpcy5maWxlRXh0ZW5zaW9uTWFwLmdldChhKTtpZighcyl0aHJvdyBpP25ldyBFcnJvcihgVGhlIHNlcnZpY2UgcmVnaXN0cnkgY29udGFpbnMgbm8gc2VydmljZXMgZm9yIHRoZSBleHRlbnNpb24gJyR7YX0nIGZvciBsYW5ndWFnZSAnJHtpfScuYCk6bmV3IEVycm9yKGBUaGUgc2VydmljZSByZWdpc3RyeSBjb250YWlucyBubyBzZXJ2aWNlcyBmb3IgdGhlIGV4dGVuc2lvbiAnJHthfScuYCk7cmV0dXJuIHN9aGFzU2VydmljZXMoZSl7dHJ5e3JldHVybiB0aGlzLmdldFNlcnZpY2VzKGUpLCEwfWNhdGNoe3JldHVybiExfX1nZXQgYWxsKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5sYW5ndWFnZUlkTWFwLnZhbHVlcygpKX19fSk7ZnVuY3Rpb24gTHAodCl7cmV0dXJue2NvZGU6dH19dmFyIFMxLEp4LGViPU4oKCk9PnsidXNlIHN0cmljdCI7cG8oKTtUMSgpO1FvKCk7R3MoKTtvKExwLCJkaWFnbm9zdGljRGF0YSIpOyhmdW5jdGlvbih0KXt0LmFsbD1bImZhc3QiLCJzbG93IiwiYnVpbHQtaW4iXX0pKFMxfHwoUzE9e30pKTtKeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmVudHJpZXM9bmV3IHpsLHRoaXMuZW50cmllc0JlZm9yZT1bXSx0aGlzLmVudHJpZXNBZnRlcj1bXSx0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbn1yZWdpc3RlcihlLHI9dGhpcyxuPSJmYXN0Iil7aWYobj09PSJidWlsdC1pbiIpdGhyb3cgbmV3IEVycm9yKCJUaGUgJ2J1aWx0LWluJyBjYXRlZ29yeSBpcyByZXNlcnZlZCBmb3IgbGV4ZXIsIHBhcnNlciwgYW5kIGxpbmtlciBlcnJvcnMuIik7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpe2xldCBzPWE7aWYoQXJyYXkuaXNBcnJheShzKSlmb3IobGV0IGwgb2Ygcyl7bGV0IHU9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24obCxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksdSl9ZWxzZSBpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7bGV0IGw9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24ocyxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksbCl9ZWxzZSBPYyhzKX19d3JhcFZhbGlkYXRpb25FeGNlcHRpb24oZSxyKXtyZXR1cm4gYXN5bmMobixpLGEpPT57YXdhaXQgdGhpcy5oYW5kbGVFeGNlcHRpb24oKCk9PmUuY2FsbChyLG4saSxhKSwiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHZhbGlkYXRpb24iLGksbil9fWFzeW5jIGhhbmRsZUV4Y2VwdGlvbihlLHIsbixpKXt0cnl7YXdhaXQgZSgpfWNhdGNoKGEpe2lmKFZjKGEpKXRocm93IGE7Y29uc29sZS5lcnJvcihgJHtyfTpgLGEpLGEgaW5zdGFuY2VvZiBFcnJvciYmYS5zdGFjayYmY29uc29sZS5lcnJvcihhLnN0YWNrKTtsZXQgcz1hIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOlN0cmluZyhhKTtuKCJlcnJvciIsYCR7cn06ICR7c31gLHtub2RlOml9KX19YWRkRW50cnkoZSxyKXtpZihlPT09IkFzdE5vZGUiKXt0aGlzLmVudHJpZXMuYWRkKCJBc3ROb2RlIixyKTtyZXR1cm59Zm9yKGxldCBuIG9mIHRoaXMucmVmbGVjdGlvbi5nZXRBbGxTdWJUeXBlcyhlKSl0aGlzLmVudHJpZXMuYWRkKG4scil9Z2V0Q2hlY2tzKGUscil7bGV0IG49ZW4odGhpcy5lbnRyaWVzLmdldChlKSkuY29uY2F0KHRoaXMuZW50cmllcy5nZXQoIkFzdE5vZGUiKSk7cmV0dXJuIHImJihuPW4uZmlsdGVyKGk9PnIuaW5jbHVkZXMoaS5jYXRlZ29yeSkpKSxuLm1hcChpPT5pLmNoZWNrKX1yZWdpc3RlckJlZm9yZURvY3VtZW50KGUscj10aGlzKXt0aGlzLmVudHJpZXNCZWZvcmUucHVzaCh0aGlzLndyYXBQcmVwYXJhdGlvbkV4Y2VwdGlvbihlLCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2V0LXVwIG9mIHRoZSB2YWxpZGF0aW9uIixyKSl9cmVnaXN0ZXJBZnRlckRvY3VtZW50KGUscj10aGlzKXt0aGlzLmVudHJpZXNBZnRlci5wdXNoKHRoaXMud3JhcFByZXBhcmF0aW9uRXhjZXB0aW9uKGUsIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0ZWFyLWRvd24gb2YgdGhlIHZhbGlkYXRpb24iLHIpKX13cmFwUHJlcGFyYXRpb25FeGNlcHRpb24oZSxyLG4pe3JldHVybiBhc3luYyhpLGEscyxsKT0+e2F3YWl0IHRoaXMuaGFuZGxlRXhjZXB0aW9uKCgpPT5lLmNhbGwobixpLGEscyxsKSxyLGEsaSl9fWdldCBjaGVja3NCZWZvcmUoKXtyZXR1cm4gdGhpcy5lbnRyaWVzQmVmb3JlfWdldCBjaGVja3NBZnRlcigpe3JldHVybiB0aGlzLmVudHJpZXNBZnRlcn19fSk7ZnVuY3Rpb24gY3VlKHQpe2lmKHQucmFuZ2UpcmV0dXJuIHQucmFuZ2U7bGV0IGU7cmV0dXJuIHR5cGVvZiB0LnByb3BlcnR5PT0ic3RyaW5nIj9lPW94KHQubm9kZS4kY3N0Tm9kZSx0LnByb3BlcnR5LHQuaW5kZXgpOnR5cGVvZiB0LmtleXdvcmQ9PSJzdHJpbmciJiYoZT1xTih0Lm5vZGUuJGNzdE5vZGUsdC5rZXl3b3JkLHQuaW5kZXgpKSxlPz8oZT10Lm5vZGUuJGNzdE5vZGUpLGU/ZS5yYW5nZTp7c3RhcnQ6e2xpbmU6MCxjaGFyYWN0ZXI6MH0sZW5kOntsaW5lOjAsY2hhcmFjdGVyOjB9fX1mdW5jdGlvbiBxRSh0KXtzd2l0Y2godCl7Y2FzZSJlcnJvciI6cmV0dXJuIDE7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gMjtjYXNlImluZm8iOnJldHVybiAzO2Nhc2UiaGludCI6cmV0dXJuIDQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGlhZ25vc3RpYyBzZXZlcml0eTogIit0KX19ZnVuY3Rpb24gdXVlKHQpe3N3aXRjaCh0KXtjYXNlImVycm9yIjpyZXR1cm4gTHAoWm8uTGV4aW5nRXJyb3IpO2Nhc2Uid2FybmluZyI6cmV0dXJuIExwKFpvLkxleGluZ1dhcm5pbmcpO2Nhc2UiaW5mbyI6cmV0dXJuIExwKFpvLkxleGluZ0luZm8pO2Nhc2UiaGludCI6cmV0dXJuIExwKFpvLkxleGluZ0hpbnQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpYWdub3N0aWMgc2V2ZXJpdHk6ICIrdCl9fXZhciB0YixabyxfST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7RmwoKTtjcygpO09sKCk7UW8oKTtlYigpO3RiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudFZhbGlkYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudmFsaWRhdGlvblJlZ2lzdHJ5PWUudmFsaWRhdGlvbi5WYWxpZGF0aW9uUmVnaXN0cnksdGhpcy5tZXRhZGF0YT1lLkxhbmd1YWdlTWV0YURhdGF9YXN5bmMgdmFsaWRhdGVEb2N1bWVudChlLHI9e30sbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1lLnBhcnNlUmVzdWx0LGE9W107aWYoYXdhaXQgd2kobiksKCFyLmNhdGVnb3JpZXN8fHIuY2F0ZWdvcmllcy5pbmNsdWRlcygiYnVpbHQtaW4iKSkmJih0aGlzLnByb2Nlc3NMZXhpbmdFcnJvcnMoaSxhLHIpLHIuc3RvcEFmdGVyTGV4aW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVpvLkxleGluZ0Vycm9yfSl8fCh0aGlzLnByb2Nlc3NQYXJzaW5nRXJyb3JzKGksYSxyKSxyLnN0b3BBZnRlclBhcnNpbmdFcnJvcnMmJmEuc29tZShzPT57dmFyIGw7cmV0dXJuKChsPXMuZGF0YSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmNvZGUpPT09Wm8uUGFyc2luZ0Vycm9yfSkpfHwodGhpcy5wcm9jZXNzTGlua2luZ0Vycm9ycyhlLGEsciksci5zdG9wQWZ0ZXJMaW5raW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVpvLkxpbmtpbmdFcnJvcn0pKSkpcmV0dXJuIGE7dHJ5e2EucHVzaCguLi5hd2FpdCB0aGlzLnZhbGlkYXRlQXN0KGkudmFsdWUscixuKSl9Y2F0Y2gocyl7aWYoVmMocykpdGhyb3cgcztjb25zb2xlLmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjoiLHMpfXJldHVybiBhd2FpdCB3aShuKSxhfXByb2Nlc3NMZXhpbmdFcnJvcnMoZSxyLG4pe3ZhciBpLGEscztsZXQgbD1bLi4uZS5sZXhlckVycm9ycywuLi4oYT0oaT1lLmxleGVyUmVwb3J0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuZGlhZ25vc3RpY3MpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdXTtmb3IobGV0IHUgb2YgbCl7bGV0IGg9KHM9dS5zZXZlcml0eSkhPT1udWxsJiZzIT09dm9pZCAwP3M6ImVycm9yIixmPXtzZXZlcml0eTpxRShoKSxyYW5nZTp7c3RhcnQ6e2xpbmU6dS5saW5lLTEsY2hhcmFjdGVyOnUuY29sdW1uLTF9LGVuZDp7bGluZTp1LmxpbmUtMSxjaGFyYWN0ZXI6dS5jb2x1bW4rdS5sZW5ndGgtMX19LG1lc3NhZ2U6dS5tZXNzYWdlLGRhdGE6dXVlKGgpLHNvdXJjZTp0aGlzLmdldFNvdXJjZSgpfTtyLnB1c2goZil9fXByb2Nlc3NQYXJzaW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5wYXJzZXJFcnJvcnMpe2xldCBhO2lmKGlzTmFOKGkudG9rZW4uc3RhcnRPZmZzZXQpKXtpZigicHJldmlvdXNUb2tlbiJpbiBpKXtsZXQgcz1pLnByZXZpb3VzVG9rZW47aWYoaXNOYU4ocy5zdGFydE9mZnNldCkpe2xldCBsPXtsaW5lOjAsY2hhcmFjdGVyOjB9O2E9e3N0YXJ0OmwsZW5kOmx9fWVsc2V7bGV0IGw9e2xpbmU6cy5lbmRMaW5lLTEsY2hhcmFjdGVyOnMuZW5kQ29sdW1ufTthPXtzdGFydDpsLGVuZDpsfX19fWVsc2UgYT1LbShpLnRva2VuKTtpZihhKXtsZXQgcz17c2V2ZXJpdHk6cUUoImVycm9yIikscmFuZ2U6YSxtZXNzYWdlOmkubWVzc2FnZSxkYXRhOkxwKFpvLlBhcnNpbmdFcnJvciksc291cmNlOnRoaXMuZ2V0U291cmNlKCl9O3IucHVzaChzKX19fXByb2Nlc3NMaW5raW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5yZWZlcmVuY2VzKXtsZXQgYT1pLmVycm9yO2lmKGEpe2xldCBzPXtub2RlOmEuY29udGFpbmVyLHByb3BlcnR5OmEucHJvcGVydHksaW5kZXg6YS5pbmRleCxkYXRhOntjb2RlOlpvLkxpbmtpbmdFcnJvcixjb250YWluZXJUeXBlOmEuY29udGFpbmVyLiR0eXBlLHByb3BlcnR5OmEucHJvcGVydHkscmVmVGV4dDphLnJlZmVyZW5jZS4kcmVmVGV4dH19O3IucHVzaCh0aGlzLnRvRGlhZ25vc3RpYygiZXJyb3IiLGEubWVzc2FnZSxzKSl9fX1hc3luYyB2YWxpZGF0ZUFzdChlLHIsbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1bXSxhPW8oKHMsbCx1KT0+e2kucHVzaCh0aGlzLnRvRGlhZ25vc3RpYyhzLGwsdSkpfSwiYWNjZXB0b3IiKTtyZXR1cm4gYXdhaXQgdGhpcy52YWxpZGF0ZUFzdEJlZm9yZShlLHIsYSxuKSxhd2FpdCB0aGlzLnZhbGlkYXRlQXN0Tm9kZXMoZSxyLGEsbiksYXdhaXQgdGhpcy52YWxpZGF0ZUFzdEFmdGVyKGUscixhLG4pLGl9YXN5bmMgdmFsaWRhdGVBc3RCZWZvcmUoZSxyLG4saT15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgYTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5jaGVja3NCZWZvcmU7Zm9yKGxldCBsIG9mIHMpYXdhaXQgd2koaSksYXdhaXQgbChlLG4sKGE9ci5jYXRlZ29yaWVzKSE9PW51bGwmJmEhPT12b2lkIDA/YTpbXSxpKX1hc3luYyB2YWxpZGF0ZUFzdE5vZGVzKGUscixuLGk9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7YXdhaXQgUHJvbWlzZS5hbGwoam8oZSkubWFwKGFzeW5jIGE9Pnthd2FpdCB3aShpKTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5nZXRDaGVja3MoYS4kdHlwZSxyLmNhdGVnb3JpZXMpO2ZvcihsZXQgbCBvZiBzKWF3YWl0IGwoYSxuLGkpfSkpfWFzeW5jIHZhbGlkYXRlQXN0QWZ0ZXIoZSxyLG4saT15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgYTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5jaGVja3NBZnRlcjtmb3IobGV0IGwgb2Ygcylhd2FpdCB3aShpKSxhd2FpdCBsKGUsbiwoYT1yLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdLGkpfXRvRGlhZ25vc3RpYyhlLHIsbil7cmV0dXJue21lc3NhZ2U6cixyYW5nZTpjdWUobiksc2V2ZXJpdHk6cUUoZSksY29kZTpuLmNvZGUsY29kZURlc2NyaXB0aW9uOm4uY29kZURlc2NyaXB0aW9uLHRhZ3M6bi50YWdzLHJlbGF0ZWRJbmZvcm1hdGlvbjpuLnJlbGF0ZWRJbmZvcm1hdGlvbixkYXRhOm4uZGF0YSxzb3VyY2U6dGhpcy5nZXRTb3VyY2UoKX19Z2V0U291cmNlKCl7cmV0dXJuIHRoaXMubWV0YWRhdGEubGFuZ3VhZ2VJZH19O28oY3VlLCJnZXREaWFnbm9zdGljUmFuZ2UiKTtvKHFFLCJ0b0RpYWdub3N0aWNTZXZlcml0eSIpO28odXVlLCJ0b0RpYWdub3N0aWNEYXRhIik7KGZ1bmN0aW9uKHQpe3QuTGV4aW5nRXJyb3I9ImxleGluZy1lcnJvciIsdC5MZXhpbmdXYXJuaW5nPSJsZXhpbmctd2FybmluZyIsdC5MZXhpbmdJbmZvPSJsZXhpbmctaW5mbyIsdC5MZXhpbmdIaW50PSJsZXhpbmctaGludCIsdC5QYXJzaW5nRXJyb3I9InBhcnNpbmctZXJyb3IiLHQuTGlua2luZ0Vycm9yPSJsaW5raW5nLWVycm9yIn0pKFpvfHwoWm89e30pKX0pO3ZhciByYixuYixEST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7SWwoKTtjcygpO09sKCk7UW8oKTtVYygpO3JiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3IsdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcn1jcmVhdGVEZXNjcmlwdGlvbihlLHIsbil7bGV0IGk9bj8/JGEoZSk7cj8/KHI9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKSk7bGV0IGE9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYE5vZGUgYXQgcGF0aCAke2F9IGhhcyBubyBuYW1lLmApO2xldCBzLGw9bygoKT0+e3ZhciB1O3JldHVybiBzPz8ocz1vcCgodT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShlKSkhPT1udWxsJiZ1IT09dm9pZCAwP3U6ZS4kY3N0Tm9kZSkpfSwibmFtZVNlZ21lbnRHZXR0ZXIiKTtyZXR1cm57bm9kZTplLG5hbWU6cixnZXQgbmFtZVNlZ21lbnQoKXtyZXR1cm4gbCgpfSxzZWxlY3Rpb25TZWdtZW50Om9wKGUuJGNzdE5vZGUpLHR5cGU6ZS4kdHlwZSxkb2N1bWVudFVyaTppLnVyaSxwYXRoOmF9fX0sbmI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yfWFzeW5jIGNyZWF0ZURlc2NyaXB0aW9ucyhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49W10saT1lLnBhcnNlUmVzdWx0LnZhbHVlO2ZvcihsZXQgYSBvZiBqbyhpKSlhd2FpdCB3aShyKSxQZyhhKS5maWx0ZXIocz0+IWFwKHMpKS5mb3JFYWNoKHM9PntsZXQgbD10aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHMpO2wmJm4ucHVzaChsKX0pO3JldHVybiBufWNyZWF0ZURlc2NyaXB0aW9uKGUpe2xldCByPWUucmVmZXJlbmNlLiRub2RlRGVzY3JpcHRpb24sbj1lLnJlZmVyZW5jZS4kcmVmTm9kZTtpZighcnx8IW4pcmV0dXJuO2xldCBpPSRhKGUuY29udGFpbmVyKS51cmk7cmV0dXJue3NvdXJjZVVyaTppLHNvdXJjZVBhdGg6dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlLmNvbnRhaW5lciksdGFyZ2V0VXJpOnIuZG9jdW1lbnRVcmksdGFyZ2V0UGF0aDpyLnBhdGgsc2VnbWVudDpvcChuKSxsb2NhbDpncy5lcXVhbHMoci5kb2N1bWVudFVyaSxpKX19fX0pO3ZhciBpYixMST1OKCgpPT57InVzZSBzdHJpY3QiO2liPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlTG9jYXRvciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zZWdtZW50U2VwYXJhdG9yPSIvIix0aGlzLmluZGV4U2VwYXJhdG9yPSJAIn1nZXRBc3ROb2RlUGF0aChlKXtpZihlLiRjb250YWluZXIpe2xldCByPXRoaXMuZ2V0QXN0Tm9kZVBhdGgoZS4kY29udGFpbmVyKSxuPXRoaXMuZ2V0UGF0aFNlZ21lbnQoZSk7cmV0dXJuIHIrdGhpcy5zZWdtZW50U2VwYXJhdG9yK259cmV0dXJuIiJ9Z2V0UGF0aFNlZ21lbnQoeyRjb250YWluZXJQcm9wZXJ0eTplLCRjb250YWluZXJJbmRleDpyfSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nICckY29udGFpbmVyUHJvcGVydHknIGluIEFTVCBub2RlLiIpO3JldHVybiByIT09dm9pZCAwP2UrdGhpcy5pbmRleFNlcGFyYXRvcityOmV9Z2V0QXN0Tm9kZShlLHIpe3JldHVybiByLnNwbGl0KHRoaXMuc2VnbWVudFNlcGFyYXRvcikucmVkdWNlKChpLGEpPT57aWYoIWl8fGEubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcz1hLmluZGV4T2YodGhpcy5pbmRleFNlcGFyYXRvcik7aWYocz4wKXtsZXQgbD1hLnN1YnN0cmluZygwLHMpLHU9cGFyc2VJbnQoYS5zdWJzdHJpbmcocysxKSksaD1pW2xdO3JldHVybiBoPy5bdV19cmV0dXJuIGlbYV19LGUpfX19KTt2YXIgWm49e307dmFyIFlFPU4oKCk9PnsidXNlIHN0cmljdCI7Q3IoWm4sQWEoZEkoKSwxKSl9KTt2YXIgYWIsUkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZRSgpO1FvKCk7YWI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdENvbmZpZ3VyYXRpb25Qcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX3JlYWR5PW5ldyBwcyx0aGlzLnNldHRpbmdzPXt9LHRoaXMud29ya3NwYWNlQ29uZmlnPSExLHRoaXMub25Db25maWd1cmF0aW9uU2VjdGlvblVwZGF0ZUVtaXR0ZXI9bmV3IFpuLkVtaXR0ZXIsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnl9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2V9aW5pdGlhbGl6ZShlKXt2YXIgcixuO3RoaXMud29ya3NwYWNlQ29uZmlnPShuPShyPWUuY2FwYWJpbGl0aWVzLndvcmtzcGFjZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmNvbmZpZ3VyYXRpb24pIT09bnVsbCYmbiE9PXZvaWQgMD9uOiExfWFzeW5jIGluaXRpYWxpemVkKGUpe2lmKHRoaXMud29ya3NwYWNlQ29uZmlnKXtpZihlLnJlZ2lzdGVyKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGw7ZS5yZWdpc3Rlcih7c2VjdGlvbjpyLm1hcChuPT50aGlzLnRvU2VjdGlvbk5hbWUobi5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpKX0pfWlmKGUuZmV0Y2hDb25maWd1cmF0aW9uKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGwubWFwKGk9Pih7c2VjdGlvbjp0aGlzLnRvU2VjdGlvbk5hbWUoaS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpfSkpLG49YXdhaXQgZS5mZXRjaENvbmZpZ3VyYXRpb24ocik7ci5mb3JFYWNoKChpLGEpPT57dGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihpLnNlY3Rpb24sblthXSl9KX19dGhpcy5fcmVhZHkucmVzb2x2ZSgpfXVwZGF0ZUNvbmZpZ3VyYXRpb24oZSl7ZS5zZXR0aW5ncyYmT2JqZWN0LmtleXMoZS5zZXR0aW5ncykuZm9yRWFjaChyPT57bGV0IG49ZS5zZXR0aW5nc1tyXTt0aGlzLnVwZGF0ZVNlY3Rpb25Db25maWd1cmF0aW9uKHIsbiksdGhpcy5vbkNvbmZpZ3VyYXRpb25TZWN0aW9uVXBkYXRlRW1pdHRlci5maXJlKHtzZWN0aW9uOnIsY29uZmlndXJhdGlvbjpufSl9KX11cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihlLHIpe3RoaXMuc2V0dGluZ3NbZV09cn1hc3luYyBnZXRDb25maWd1cmF0aW9uKGUscil7YXdhaXQgdGhpcy5yZWFkeTtsZXQgbj10aGlzLnRvU2VjdGlvbk5hbWUoZSk7aWYodGhpcy5zZXR0aW5nc1tuXSlyZXR1cm4gdGhpcy5zZXR0aW5nc1tuXVtyXX10b1NlY3Rpb25OYW1lKGUpe3JldHVybmAke2V9YH1nZXQgb25Db25maWd1cmF0aW9uU2VjdGlvblVwZGF0ZSgpe3JldHVybiB0aGlzLm9uQ29uZmlndXJhdGlvblNlY3Rpb25VcGRhdGVFbWl0dGVyLmV2ZW50fX19KTt2YXIgdmYsTkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57ZGlzcG9zZTpvKGFzeW5jKCk9PmF3YWl0IHIoKSwiZGlzcG9zZSIpfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KSh2Znx8KHZmPXt9KSl9KTt2YXIgc2IsTUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbygpO05JKCk7VDEoKTtRbygpO0dzKCk7ZWIoKTtiMSgpO3NiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudEJ1aWxkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnVwZGF0ZUJ1aWxkT3B0aW9ucz17dmFsaWRhdGlvbjp7Y2F0ZWdvcmllczpbImJ1aWx0LWluIiwiZmFzdCJdfX0sdGhpcy51cGRhdGVMaXN0ZW5lcnM9W10sdGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzPW5ldyB6bCx0aGlzLmRvY3VtZW50UGhhc2VMaXN0ZW5lcnM9bmV3IHpsLHRoaXMuYnVpbGRTdGF0ZT1uZXcgTWFwLHRoaXMuZG9jdW1lbnRCdWlsZFdhaXRlcnM9bmV3IE1hcCx0aGlzLmN1cnJlbnRTdGF0ZT1rbi5DaGFuZ2VkLHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMudGV4dERvY3VtZW50cz1lLndvcmtzcGFjZS5UZXh0RG9jdW1lbnRzLHRoaXMuaW5kZXhNYW5hZ2VyPWUud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeX1hc3luYyBidWlsZChlLHI9e30sbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgaSxhO2ZvcihsZXQgcyBvZiBlKXtsZXQgbD1zLnVyaS50b1N0cmluZygpO2lmKHMuc3RhdGU9PT1rbi5WYWxpZGF0ZWQpe2lmKHR5cGVvZiByLnZhbGlkYXRpb249PSJib29sZWFuIiYmci52YWxpZGF0aW9uKXMuc3RhdGU9a24uSW5kZXhlZFJlZmVyZW5jZXMscy5kaWFnbm9zdGljcz12b2lkIDAsdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShsKTtlbHNlIGlmKHR5cGVvZiByLnZhbGlkYXRpb249PSJvYmplY3QiKXtsZXQgdT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGwpLGg9KGk9dT8ucmVzdWx0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudmFsaWRhdGlvbkNoZWNrcztpZihoKXtsZXQgZD0oKGE9ci52YWxpZGF0aW9uLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOlMxLmFsbCkuZmlsdGVyKHA9PiFoLmluY2x1ZGVzKHApKTtkLmxlbmd0aD4wJiYodGhpcy5idWlsZFN0YXRlLnNldChsLHtjb21wbGV0ZWQ6ITEsb3B0aW9uczp7dmFsaWRhdGlvbjpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sci52YWxpZGF0aW9uKSx7Y2F0ZWdvcmllczpkfSl9LHJlc3VsdDp1LnJlc3VsdH0pLHMuc3RhdGU9a24uSW5kZXhlZFJlZmVyZW5jZXMpfX19ZWxzZSB0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGwpfXRoaXMuY3VycmVudFN0YXRlPWtuLkNoYW5nZWQsYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUubWFwKHM9PnMudXJpKSxbXSksYXdhaXQgdGhpcy5idWlsZERvY3VtZW50cyhlLHIsbil9YXN5bmMgdXBkYXRlKGUscixuPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3RoaXMuY3VycmVudFN0YXRlPWtuLkNoYW5nZWQ7Zm9yKGxldCBzIG9mIHIpdGhpcy5sYW5naXVtRG9jdW1lbnRzLmRlbGV0ZURvY3VtZW50KHMpLHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUocy50b1N0cmluZygpKSx0aGlzLmluZGV4TWFuYWdlci5yZW1vdmUocyk7Zm9yKGxldCBzIG9mIGUpe2lmKCF0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaW52YWxpZGF0ZURvY3VtZW50KHMpKXtsZXQgdT10aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKHskdHlwZToiSU5WQUxJRCJ9LHMpO3Uuc3RhdGU9a24uQ2hhbmdlZCx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWRkRG9jdW1lbnQodSl9dGhpcy5idWlsZFN0YXRlLmRlbGV0ZShzLnRvU3RyaW5nKCkpfWxldCBpPWVuKGUpLmNvbmNhdChyKS5tYXAocz0+cy50b1N0cmluZygpKS50b1NldCgpO3RoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9PiFpLmhhcyhzLnVyaS50b1N0cmluZygpKSYmdGhpcy5zaG91bGRSZWxpbmsocyxpKSkuZm9yRWFjaChzPT57dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMocy51cmkpLnJlZmVyZW5jZXMuTGlua2VyLnVubGluayhzKSxzLnN0YXRlPU1hdGgubWluKHMuc3RhdGUsa24uQ29tcHV0ZWRTY29wZXMpLHMuZGlhZ25vc3RpY3M9dm9pZCAwfSksYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUsciksYXdhaXQgd2kobik7bGV0IGE9dGhpcy5zb3J0RG9jdW1lbnRzKHRoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9Pnt2YXIgbDtyZXR1cm4gcy5zdGF0ZTxrbi5MaW5rZWR8fCEoISgobD10aGlzLmJ1aWxkU3RhdGUuZ2V0KHMudXJpLnRvU3RyaW5nKCkpKT09PW51bGx8fGw9PT12b2lkIDApJiZsLmNvbXBsZXRlZCl9KS50b0FycmF5KCkpO2F3YWl0IHRoaXMuYnVpbGREb2N1bWVudHMoYSx0aGlzLnVwZGF0ZUJ1aWxkT3B0aW9ucyxuKX1hc3luYyBlbWl0VXBkYXRlKGUscil7YXdhaXQgUHJvbWlzZS5hbGwodGhpcy51cGRhdGVMaXN0ZW5lcnMubWFwKG49Pm4oZSxyKSkpfXNvcnREb2N1bWVudHMoZSl7bGV0IHI9MCxuPWUubGVuZ3RoLTE7Zm9yKDtyPG47KXtmb3IoO3I8ZS5sZW5ndGgmJnRoaXMuaGFzVGV4dERvY3VtZW50KGVbcl0pOylyKys7Zm9yKDtuPj0wJiYhdGhpcy5oYXNUZXh0RG9jdW1lbnQoZVtuXSk7KW4tLTtyPG4mJihbZVtyXSxlW25dXT1bZVtuXSxlW3JdXSl9cmV0dXJuIGV9aGFzVGV4dERvY3VtZW50KGUpe3ZhciByO3JldHVybiEhKCEoKHI9dGhpcy50ZXh0RG9jdW1lbnRzKT09PW51bGx8fHI9PT12b2lkIDApJiZyLmdldChlLnVyaSkpfXNob3VsZFJlbGluayhlLHIpe3JldHVybiBlLnJlZmVyZW5jZXMuc29tZShuPT5uLmVycm9yIT09dm9pZCAwKT8hMDp0aGlzLmluZGV4TWFuYWdlci5pc0FmZmVjdGVkKGUscil9b25VcGRhdGUoZSl7cmV0dXJuIHRoaXMudXBkYXRlTGlzdGVuZXJzLnB1c2goZSksdmYuY3JlYXRlKCgpPT57bGV0IHI9dGhpcy51cGRhdGVMaXN0ZW5lcnMuaW5kZXhPZihlKTtyPj0wJiZ0aGlzLnVwZGF0ZUxpc3RlbmVycy5zcGxpY2UociwxKX0pfWFzeW5jIGJ1aWxkRG9jdW1lbnRzKGUscixuKXt0aGlzLnByZXBhcmVCdWlsZChlLHIpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGtuLlBhcnNlZCxuLGE9PnRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS51cGRhdGUoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uSW5kZXhlZENvbnRlbnQsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVDb250ZW50KGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGtuLkNvbXB1dGVkU2NvcGVzLG4sYXN5bmMgYT0+e2xldCBzPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGEudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb247YS5wcmVjb21wdXRlZFNjb3Blcz1hd2FpdCBzLmNvbXB1dGVMb2NhbFNjb3BlcyhhLG4pfSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uTGlua2VkLG4sYT0+dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoYS51cmkpLnJlZmVyZW5jZXMuTGlua2VyLmxpbmsoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uSW5kZXhlZFJlZmVyZW5jZXMsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVSZWZlcmVuY2VzKGEsbikpO2xldCBpPWUuZmlsdGVyKGE9PnRoaXMuc2hvdWxkVmFsaWRhdGUoYSkpO2F3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShpLGtuLlZhbGlkYXRlZCxuLGE9PnRoaXMudmFsaWRhdGUoYSxuKSk7Zm9yKGxldCBhIG9mIGUpe2xldCBzPXRoaXMuYnVpbGRTdGF0ZS5nZXQoYS51cmkudG9TdHJpbmcoKSk7cyYmKHMuY29tcGxldGVkPSEwKX19cHJlcGFyZUJ1aWxkKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPW4udXJpLnRvU3RyaW5nKCksYT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGkpOyghYXx8YS5jb21wbGV0ZWQpJiZ0aGlzLmJ1aWxkU3RhdGUuc2V0KGkse2NvbXBsZXRlZDohMSxvcHRpb25zOnIscmVzdWx0OmE/LnJlc3VsdH0pfX1hc3luYyBydW5DYW5jZWxhYmxlKGUscixuLGkpe2xldCBhPWUuZmlsdGVyKGw9Pmwuc3RhdGU8cik7Zm9yKGxldCBsIG9mIGEpYXdhaXQgd2kobiksYXdhaXQgaShsKSxsLnN0YXRlPXIsYXdhaXQgdGhpcy5ub3RpZnlEb2N1bWVudFBoYXNlKGwscixuKTtsZXQgcz1lLmZpbHRlcihsPT5sLnN0YXRlPT09cik7YXdhaXQgdGhpcy5ub3RpZnlCdWlsZFBoYXNlKHMscixuKSx0aGlzLmN1cnJlbnRTdGF0ZT1yfW9uQnVpbGRQaGFzZShlLHIpe3JldHVybiB0aGlzLmJ1aWxkUGhhc2VMaXN0ZW5lcnMuYWRkKGUsciksdmYuY3JlYXRlKCgpPT57dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmRlbGV0ZShlLHIpfSl9b25Eb2N1bWVudFBoYXNlKGUscil7cmV0dXJuIHRoaXMuZG9jdW1lbnRQaGFzZUxpc3RlbmVycy5hZGQoZSxyKSx2Zi5jcmVhdGUoKCk9Pnt0aGlzLmRvY3VtZW50UGhhc2VMaXN0ZW5lcnMuZGVsZXRlKGUscil9KX13YWl0VW50aWwoZSxyLG4pe2xldCBpO2lmKHImJiJwYXRoImluIHI/aT1yOm49cixuPz8obj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSxpKXtsZXQgYT10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoaSk7aWYoYSYmYS5zdGF0ZT5lKXJldHVybiBQcm9taXNlLnJlc29sdmUoaSl9cmV0dXJuIHRoaXMuY3VycmVudFN0YXRlPj1lP1Byb21pc2UucmVzb2x2ZSh2b2lkIDApOm4uaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ/UHJvbWlzZS5yZWplY3QoR2MpOm5ldyBQcm9taXNlKChhLHMpPT57bGV0IGw9dGhpcy5vbkJ1aWxkUGhhc2UoZSwoKT0+e2lmKGwuZGlzcG9zZSgpLHUuZGlzcG9zZSgpLGkpe2xldCBoPXRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudChpKTthKGg/LnVyaSl9ZWxzZSBhKHZvaWQgMCl9KSx1PW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PntsLmRpc3Bvc2UoKSx1LmRpc3Bvc2UoKSxzKEdjKX0pfSl9YXN5bmMgbm90aWZ5RG9jdW1lbnRQaGFzZShlLHIsbil7bGV0IGE9dGhpcy5kb2N1bWVudFBoYXNlTGlzdGVuZXJzLmdldChyKS5zbGljZSgpO2ZvcihsZXQgcyBvZiBhKXRyeXthd2FpdCBzKGUsbil9Y2F0Y2gobCl7aWYoIVZjKGwpKXRocm93IGx9fWFzeW5jIG5vdGlmeUJ1aWxkUGhhc2UoZSxyLG4pe2lmKGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGE9dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmdldChyKS5zbGljZSgpO2ZvcihsZXQgcyBvZiBhKWF3YWl0IHdpKG4pLGF3YWl0IHMoZSxuKX1zaG91bGRWYWxpZGF0ZShlKXtyZXR1cm4hIXRoaXMuZ2V0QnVpbGRPcHRpb25zKGUpLnZhbGlkYXRpb259YXN5bmMgdmFsaWRhdGUoZSxyKXt2YXIgbixpO2xldCBhPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUudXJpKS52YWxpZGF0aW9uLkRvY3VtZW50VmFsaWRhdG9yLHM9dGhpcy5nZXRCdWlsZE9wdGlvbnMoZSkudmFsaWRhdGlvbixsPXR5cGVvZiBzPT0ib2JqZWN0Ij9zOnZvaWQgMCx1PWF3YWl0IGEudmFsaWRhdGVEb2N1bWVudChlLGwscik7ZS5kaWFnbm9zdGljcz9lLmRpYWdub3N0aWNzLnB1c2goLi4udSk6ZS5kaWFnbm9zdGljcz11O2xldCBoPXRoaXMuYnVpbGRTdGF0ZS5nZXQoZS51cmkudG9TdHJpbmcoKSk7aWYoaCl7KG49aC5yZXN1bHQpIT09bnVsbCYmbiE9PXZvaWQgMHx8KGgucmVzdWx0PXt9KTtsZXQgZj0oaT1sPy5jYXRlZ29yaWVzKSE9PW51bGwmJmkhPT12b2lkIDA/aTpTMS5hbGw7aC5yZXN1bHQudmFsaWRhdGlvbkNoZWNrcz9oLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzLnB1c2goLi4uZik6aC5yZXN1bHQudmFsaWRhdGlvbkNoZWNrcz1bLi4uZl19fWdldEJ1aWxkT3B0aW9ucyhlKXt2YXIgcixuO3JldHVybihuPShyPXRoaXMuYnVpbGRTdGF0ZS5nZXQoZS51cmkudG9TdHJpbmcoKSkpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5vcHRpb25zKSE9PW51bGwmJm4hPT12b2lkIDA/bjp7fX19fSk7dmFyIG9iLElJPU4oKCk9PnsidXNlIHN0cmljdCI7Y3MoKTtIRSgpO0tvKCk7R3MoKTtVYygpO29iPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRJbmRleE1hbmFnZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN5bWJvbEluZGV4PW5ldyBNYXAsdGhpcy5zeW1ib2xCeVR5cGVJbmRleD1uZXcgRHAsdGhpcy5yZWZlcmVuY2VJbmRleD1uZXcgTWFwLHRoaXMuZG9jdW1lbnRzPWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy5hc3RSZWZsZWN0aW9uPWUuQXN0UmVmbGVjdGlvbn1maW5kQWxsUmVmZXJlbmNlcyhlLHIpe2xldCBuPSRhKGUpLnVyaSxpPVtdO3JldHVybiB0aGlzLnJlZmVyZW5jZUluZGV4LmZvckVhY2goYT0+e2EuZm9yRWFjaChzPT57Z3MuZXF1YWxzKHMudGFyZ2V0VXJpLG4pJiZzLnRhcmdldFBhdGg9PT1yJiZpLnB1c2gocyl9KX0pLGVuKGkpfWFsbEVsZW1lbnRzKGUscil7bGV0IG49ZW4odGhpcy5zeW1ib2xJbmRleC5rZXlzKCkpO3JldHVybiByJiYobj1uLmZpbHRlcihpPT4hcnx8ci5oYXMoaSkpKSxuLm1hcChpPT50aGlzLmdldEZpbGVEZXNjcmlwdGlvbnMoaSxlKSkuZmxhdCgpfWdldEZpbGVEZXNjcmlwdGlvbnMoZSxyKXt2YXIgbjtyZXR1cm4gcj90aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmdldChlLHIsKCk9Pnt2YXIgYTtyZXR1cm4oKGE9dGhpcy5zeW1ib2xJbmRleC5nZXQoZSkpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdKS5maWx0ZXIobD0+dGhpcy5hc3RSZWZsZWN0aW9uLmlzU3VidHlwZShsLnR5cGUscikpfSk6KG49dGhpcy5zeW1ib2xJbmRleC5nZXQoZSkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOltdfXJlbW92ZShlKXtsZXQgcj1lLnRvU3RyaW5nKCk7dGhpcy5zeW1ib2xJbmRleC5kZWxldGUociksdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5jbGVhcihyKSx0aGlzLnJlZmVyZW5jZUluZGV4LmRlbGV0ZShyKX1hc3luYyB1cGRhdGVDb250ZW50KGUscj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1hd2FpdCB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlLnVyaSkucmVmZXJlbmNlcy5TY29wZUNvbXB1dGF0aW9uLmNvbXB1dGVFeHBvcnRzKGUsciksYT1lLnVyaS50b1N0cmluZygpO3RoaXMuc3ltYm9sSW5kZXguc2V0KGEsaSksdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5jbGVhcihhKX1hc3luYyB1cGRhdGVSZWZlcmVuY2VzKGUscj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1hd2FpdCB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlLnVyaSkud29ya3NwYWNlLlJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIuY3JlYXRlRGVzY3JpcHRpb25zKGUscik7dGhpcy5yZWZlcmVuY2VJbmRleC5zZXQoZS51cmkudG9TdHJpbmcoKSxpKX1pc0FmZmVjdGVkKGUscil7bGV0IG49dGhpcy5yZWZlcmVuY2VJbmRleC5nZXQoZS51cmkudG9TdHJpbmcoKSk7cmV0dXJuIG4/bi5zb21lKGk9PiFpLmxvY2FsJiZyLmhhcyhpLnRhcmdldFVyaS50b1N0cmluZygpKSk6ITF9fX0pO3ZhciBsYixPST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7UW8oKTtVYygpO2xiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRXb3Jrc3BhY2VNYW5hZ2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0aWFsQnVpbGRPcHRpb25zPXt9LHRoaXMuX3JlYWR5PW5ldyBwcyx0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeSx0aGlzLmxhbmdpdW1Eb2N1bWVudHM9ZS53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLmRvY3VtZW50QnVpbGRlcj1lLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyLHRoaXMubXV0ZXg9ZS53b3Jrc3BhY2UuV29ya3NwYWNlTG9ja31nZXQgcmVhZHkoKXtyZXR1cm4gdGhpcy5fcmVhZHkucHJvbWlzZX1nZXQgd29ya3NwYWNlRm9sZGVycygpe3JldHVybiB0aGlzLmZvbGRlcnN9aW5pdGlhbGl6ZShlKXt2YXIgcjt0aGlzLmZvbGRlcnM9KHI9ZS53b3Jrc3BhY2VGb2xkZXJzKSE9PW51bGwmJnIhPT12b2lkIDA/cjp2b2lkIDB9aW5pdGlhbGl6ZWQoZSl7cmV0dXJuIHRoaXMubXV0ZXgud3JpdGUocj0+e3ZhciBuO3JldHVybiB0aGlzLmluaXRpYWxpemVXb3Jrc3BhY2UoKG49dGhpcy5mb2xkZXJzKSE9PW51bGwmJm4hPT12b2lkIDA/bjpbXSxyKX0pfWFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMucGVyZm9ybVN0YXJ0dXAoZSk7YXdhaXQgd2kociksYXdhaXQgdGhpcy5kb2N1bWVudEJ1aWxkZXIuYnVpbGQobix0aGlzLmluaXRpYWxCdWlsZE9wdGlvbnMscil9YXN5bmMgcGVyZm9ybVN0YXJ0dXAoZSl7bGV0IHI9dGhpcy5zZXJ2aWNlUmVnaXN0cnkuYWxsLmZsYXRNYXAoYT0+YS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKSxuPVtdLGk9byhhPT57bi5wdXNoKGEpLHRoaXMubGFuZ2l1bURvY3VtZW50cy5oYXNEb2N1bWVudChhLnVyaSl8fHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChhKX0sImNvbGxlY3RvciIpO3JldHVybiBhd2FpdCB0aGlzLmxvYWRBZGRpdGlvbmFsRG9jdW1lbnRzKGUsaSksYXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoYT0+W2EsdGhpcy5nZXRSb290Rm9sZGVyKGEpXSkubWFwKGFzeW5jIGE9PnRoaXMudHJhdmVyc2VGb2xkZXIoLi4uYSxyLGkpKSksdGhpcy5fcmVhZHkucmVzb2x2ZSgpLG59bG9hZEFkZGl0aW9uYWxEb2N1bWVudHMoZSxyKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9Z2V0Um9vdEZvbGRlcihlKXtyZXR1cm4gbXMucGFyc2UoZS51cmkpfWFzeW5jIHRyYXZlcnNlRm9sZGVyKGUscixuLGkpe2xldCBhPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3Rvcnkocik7YXdhaXQgUHJvbWlzZS5hbGwoYS5tYXAoYXN5bmMgcz0+e2lmKHRoaXMuaW5jbHVkZUVudHJ5KGUscyxuKSl7aWYocy5pc0RpcmVjdG9yeSlhd2FpdCB0aGlzLnRyYXZlcnNlRm9sZGVyKGUscy51cmksbixpKTtlbHNlIGlmKHMuaXNGaWxlKXtsZXQgbD1hd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0T3JDcmVhdGVEb2N1bWVudChzLnVyaSk7aShsKX19fSkpfWluY2x1ZGVFbnRyeShlLHIsbil7bGV0IGk9Z3MuYmFzZW5hbWUoci51cmkpO2lmKGkuc3RhcnRzV2l0aCgiLiIpKXJldHVybiExO2lmKHIuaXNEaXJlY3RvcnkpcmV0dXJuIGkhPT0ibm9kZV9tb2R1bGVzIiYmaSE9PSJvdXQiO2lmKHIuaXNGaWxlKXtsZXQgYT1ncy5leHRuYW1lKHIudXJpKTtyZXR1cm4gbi5pbmNsdWRlcyhhKX1yZXR1cm4hMX19fSk7ZnVuY3Rpb24gakUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJih0Lmxlbmd0aD09PTB8fCJuYW1lImluIHRbMF0pfWZ1bmN0aW9uIEJJKHQpe3JldHVybiB0JiYibW9kZXMiaW4gdCYmImRlZmF1bHRNb2RlImluIHR9ZnVuY3Rpb24gUEkodCl7cmV0dXJuIWpFKHQpJiYhQkkodCl9dmFyIGNiLFhFLFJwLEtFPU4oKCk9PnsidXNlIHN0cmljdCI7bWYoKTtjYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKGUscixuLGksYSl7cmV0dXJuIEtnLmJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKGUscixuLGksYSl9YnVpbGRVbmFibGVUb1BvcExleGVyTW9kZU1lc3NhZ2UoZSl7cmV0dXJuIEtnLmJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKGUpfX0sWEU9e21vZGU6ImZ1bGwifSxScD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPWUucGFyc2VyLkxleGVyRXJyb3JNZXNzYWdlUHJvdmlkZXIsdGhpcy50b2tlbkJ1aWxkZXI9ZS5wYXJzZXIuVG9rZW5CdWlsZGVyO2xldCByPXRoaXMudG9rZW5CdWlsZGVyLmJ1aWxkVG9rZW5zKGUuR3JhbW1hcix7Y2FzZUluc2Vuc2l0aXZlOmUuTGFuZ3VhZ2VNZXRhRGF0YS5jYXNlSW5zZW5zaXRpdmV9KTt0aGlzLnRva2VuVHlwZXM9dGhpcy50b1Rva2VuVHlwZURpY3Rpb25hcnkocik7bGV0IG49UEkocik/T2JqZWN0LnZhbHVlcyhyKTpyLGk9ZS5MYW5ndWFnZU1ldGFEYXRhLm1vZGU9PT0icHJvZHVjdGlvbiI7dGhpcy5jaGV2cm90YWluTGV4ZXI9bmV3IEtuKG4se3Bvc2l0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczppLGVycm9yTWVzc2FnZVByb3ZpZGVyOnRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXJ9KX1nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLnRva2VuVHlwZXN9dG9rZW5pemUoZSxyPVhFKXt2YXIgbixpLGE7bGV0IHM9dGhpcy5jaGV2cm90YWluTGV4ZXIudG9rZW5pemUoZSk7cmV0dXJue3Rva2VuczpzLnRva2VucyxlcnJvcnM6cy5lcnJvcnMsaGlkZGVuOihuPXMuZ3JvdXBzLmhpZGRlbikhPT1udWxsJiZuIT09dm9pZCAwP246W10scmVwb3J0OihhPShpPXRoaXMudG9rZW5CdWlsZGVyKS5mbHVzaExleGluZ1JlcG9ydCk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmNhbGwoaSxlKX19dG9Ub2tlblR5cGVEaWN0aW9uYXJ5KGUpe2lmKFBJKGUpKXJldHVybiBlO2xldCByPUJJKGUpP09iamVjdC52YWx1ZXMoZS5tb2RlcykuZmxhdCgpOmUsbj17fTtyZXR1cm4gci5mb3JFYWNoKGk9Pm5baS5uYW1lXT1pKSxufX07byhqRSwiaXNUb2tlblR5cGVBcnJheSIpO28oQkksImlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbiIpO28oUEksImlzVG9rZW5UeXBlRGljdGlvbmFyeSIpfSk7ZnVuY3Rpb24gekkodCxlLHIpe2xldCBuLGk7dHlwZW9mIHQ9PSJzdHJpbmciPyhpPWUsbj1yKTooaT10LnJhbmdlLnN0YXJ0LG49ZSksaXx8KGk9anIuY3JlYXRlKDAsMCkpO2xldCBhPWR1ZSh0KSxzPVZJKG4pLGw9WCRlKHtsaW5lczphLHBvc2l0aW9uOmksb3B0aW9uczpzfSk7cmV0dXJuIEokZSh7aW5kZXg6MCx0b2tlbnM6bCxwb3NpdGlvbjppfSl9ZnVuY3Rpb24gR0kodCxlKXtsZXQgcj1WSShlKSxuPWR1ZSh0KTtpZihuLmxlbmd0aD09PTApcmV0dXJuITE7bGV0IGk9blswXSxhPW5bbi5sZW5ndGgtMV0scz1yLnN0YXJ0LGw9ci5lbmQ7cmV0dXJuISFzPy5leGVjKGkpJiYhIWw/LmV4ZWMoYSl9ZnVuY3Rpb24gZHVlKHQpe2xldCBlPSIiO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/ZT10OmU9dC50ZXh0LGUuc3BsaXQoUE4pfWZ1bmN0aW9uIFgkZSh0KXt2YXIgZSxyLG47bGV0IGk9W10sYT10LnBvc2l0aW9uLmxpbmUscz10LnBvc2l0aW9uLmNoYXJhY3Rlcjtmb3IobGV0IGw9MDtsPHQubGluZXMubGVuZ3RoO2wrKyl7bGV0IHU9bD09PTAsaD1sPT09dC5saW5lcy5sZW5ndGgtMSxmPXQubGluZXNbbF0sZD0wO2lmKHUmJnQub3B0aW9ucy5zdGFydCl7bGV0IG09KGU9dC5vcHRpb25zLnN0YXJ0KT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1lbHNle2xldCBtPShyPXQub3B0aW9ucy5saW5lKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1pZihoKXtsZXQgbT0obj10Lm9wdGlvbnMuZW5kKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uZXhlYyhmKTttJiYoZj1mLnN1YnN0cmluZygwLG0uaW5kZXgpKX1pZihmPWYuc3Vic3RyaW5nKDAsWiRlKGYpKSwkSShmLGQpPj1mLmxlbmd0aCl7aWYoaS5sZW5ndGg+MCl7bGV0IG09anIuY3JlYXRlKGEscyk7aS5wdXNoKHt0eXBlOiJicmVhayIsY29udGVudDoiIixyYW5nZTpCci5jcmVhdGUobSxtKX0pfX1lbHNle2h1ZS5sYXN0SW5kZXg9ZDtsZXQgbT1odWUuZXhlYyhmKTtpZihtKXtsZXQgZz1tWzBdLHk9bVsxXSx2PWpyLmNyZWF0ZShhLHMrZCkseD1qci5jcmVhdGUoYSxzK2QrZy5sZW5ndGgpO2kucHVzaCh7dHlwZToidGFnIixjb250ZW50OnkscmFuZ2U6QnIuY3JlYXRlKHYseCl9KSxkKz1nLmxlbmd0aCxkPSRJKGYsZCl9aWYoZDxmLmxlbmd0aCl7bGV0IGc9Zi5zdWJzdHJpbmcoZCkseT1BcnJheS5mcm9tKGcubWF0Y2hBbGwoWSRlKSk7aS5wdXNoKC4uLmokZSh5LGcsYSxzK2QpKX19YSsrLHM9MH1yZXR1cm4gaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS50eXBlPT09ImJyZWFrIj9pLnNsaWNlKDAsLTEpOml9ZnVuY3Rpb24gaiRlKHQsZSxyLG4pe2xldCBpPVtdO2lmKHQubGVuZ3RoPT09MCl7bGV0IGE9anIuY3JlYXRlKHIsbikscz1qci5jcmVhdGUocixuK2UubGVuZ3RoKTtpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6ZSxyYW5nZTpCci5jcmVhdGUoYSxzKX0pfWVsc2V7bGV0IGE9MDtmb3IobGV0IGwgb2YgdCl7bGV0IHU9bC5pbmRleCxoPWUuc3Vic3RyaW5nKGEsdSk7aC5sZW5ndGg+MCYmaS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OmUuc3Vic3RyaW5nKGEsdSkscmFuZ2U6QnIuY3JlYXRlKGpyLmNyZWF0ZShyLGErbiksanIuY3JlYXRlKHIsdStuKSl9KTtsZXQgZj1oLmxlbmd0aCsxLGQ9bFsxXTtpZihpLnB1c2goe3R5cGU6ImlubGluZS10YWciLGNvbnRlbnQ6ZCxyYW5nZTpCci5jcmVhdGUoanIuY3JlYXRlKHIsYStmK24pLGpyLmNyZWF0ZShyLGErZitkLmxlbmd0aCtuKSl9KSxmKz1kLmxlbmd0aCxsLmxlbmd0aD09PTQpe2YrPWxbMl0ubGVuZ3RoO2xldCBwPWxbM107aS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnAscmFuZ2U6QnIuY3JlYXRlKGpyLmNyZWF0ZShyLGErZituKSxqci5jcmVhdGUocixhK2YrcC5sZW5ndGgrbikpfSl9ZWxzZSBpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6IiIscmFuZ2U6QnIuY3JlYXRlKGpyLmNyZWF0ZShyLGErZituKSxqci5jcmVhdGUocixhK2YrbikpfSk7YT11K2xbMF0ubGVuZ3RofWxldCBzPWUuc3Vic3RyaW5nKGEpO3MubGVuZ3RoPjAmJmkucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpzLHJhbmdlOkJyLmNyZWF0ZShqci5jcmVhdGUocixhK24pLGpyLmNyZWF0ZShyLGErbitzLmxlbmd0aCkpfSl9cmV0dXJuIGl9ZnVuY3Rpb24gJEkodCxlKXtsZXQgcj10LnN1YnN0cmluZyhlKS5tYXRjaChLJGUpO3JldHVybiByP2Urci5pbmRleDp0Lmxlbmd0aH1mdW5jdGlvbiBaJGUodCl7bGV0IGU9dC5tYXRjaChRJGUpO2lmKGUmJnR5cGVvZiBlLmluZGV4PT0ibnVtYmVyIilyZXR1cm4gZS5pbmRleH1mdW5jdGlvbiBKJGUodCl7dmFyIGUscixuLGk7bGV0IGE9anIuY3JlYXRlKHQucG9zaXRpb24ubGluZSx0LnBvc2l0aW9uLmNoYXJhY3Rlcik7aWYodC50b2tlbnMubGVuZ3RoPT09MClyZXR1cm4gbmV3IFFFKFtdLEJyLmNyZWF0ZShhLGEpKTtsZXQgcz1bXTtmb3IoO3QuaW5kZXg8dC50b2tlbnMubGVuZ3RoOyl7bGV0IGg9ZXplKHQsc1tzLmxlbmd0aC0xXSk7aCYmcy5wdXNoKGgpfWxldCBsPShyPShlPXNbMF0pPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5yYW5nZS5zdGFydCkhPT1udWxsJiZyIT09dm9pZCAwP3I6YSx1PShpPShuPXNbcy5sZW5ndGgtMV0pPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5yYW5nZS5lbmQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOmE7cmV0dXJuIG5ldyBRRShzLEJyLmNyZWF0ZShsLHUpKX1mdW5jdGlvbiBlemUodCxlKXtsZXQgcj10LnRva2Vuc1t0LmluZGV4XTtpZihyLnR5cGU9PT0idGFnIilyZXR1cm4gbXVlKHQsITEpO2lmKHIudHlwZT09PSJ0ZXh0Inx8ci50eXBlPT09ImlubGluZS10YWciKXJldHVybiBwdWUodCk7dHplKHIsZSksdC5pbmRleCsrfWZ1bmN0aW9uIHR6ZSh0LGUpe2lmKGUpe2xldCByPW5ldyBaRSgiIix0LnJhbmdlKTsiaW5saW5lcyJpbiBlP2UuaW5saW5lcy5wdXNoKHIpOmUuY29udGVudC5pbmxpbmVzLnB1c2gocil9fWZ1bmN0aW9uIHB1ZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4XSxyPWUsbj1lLGk9W107Zm9yKDtlJiZlLnR5cGUhPT0iYnJlYWsiJiZlLnR5cGUhPT0idGFnIjspaS5wdXNoKHJ6ZSh0KSksbj1lLGU9dC50b2tlbnNbdC5pbmRleF07cmV0dXJuIG5ldyBoYihpLEJyLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LG4ucmFuZ2UuZW5kKSl9ZnVuY3Rpb24gcnplKHQpe3JldHVybiB0LnRva2Vuc1t0LmluZGV4XS50eXBlPT09ImlubGluZS10YWciP211ZSh0LCEwKTpndWUodCl9ZnVuY3Rpb24gbXVlKHQsZSl7bGV0IHI9dC50b2tlbnNbdC5pbmRleCsrXSxuPXIuY29udGVudC5zdWJzdHJpbmcoMSksaT10LnRva2Vuc1t0LmluZGV4XTtpZihpPy50eXBlPT09InRleHQiKWlmKGUpe2xldCBhPWd1ZSh0KTtyZXR1cm4gbmV3IHViKG4sbmV3IGhiKFthXSxhLnJhbmdlKSxlLEJyLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LGEucmFuZ2UuZW5kKSl9ZWxzZXtsZXQgYT1wdWUodCk7cmV0dXJuIG5ldyB1YihuLGEsZSxCci5jcmVhdGUoci5yYW5nZS5zdGFydCxhLnJhbmdlLmVuZCkpfWVsc2V7bGV0IGE9ci5yYW5nZTtyZXR1cm4gbmV3IHViKG4sbmV3IGhiKFtdLGEpLGUsYSl9fWZ1bmN0aW9uIGd1ZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4KytdO3JldHVybiBuZXcgWkUoZS5jb250ZW50LGUucmFuZ2UpfWZ1bmN0aW9uIFZJKHQpe2lmKCF0KXJldHVybiBWSSh7c3RhcnQ6Ii8qKiIsZW5kOiIqLyIsbGluZToiKiJ9KTtsZXR7c3RhcnQ6ZSxlbmQ6cixsaW5lOm59PXQ7cmV0dXJue3N0YXJ0OkZJKGUsITApLGVuZDpGSShyLCExKSxsaW5lOkZJKG4sITApfX1mdW5jdGlvbiBGSSh0LGUpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJvYmplY3QiKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/bXAodCk6dC5zb3VyY2U7cmV0dXJuIGU/bmV3IFJlZ0V4cChgXlxccyoke3J9YCk6bmV3IFJlZ0V4cChgXFxzKiR7cn1cXHMqJGApfWVsc2UgcmV0dXJuIHR9ZnVuY3Rpb24gbnplKHQsZSxyKXt2YXIgbixpO2lmKHQ9PT0ibGlua3BsYWluInx8dD09PSJsaW5rY29kZSJ8fHQ9PT0ibGluayIpe2xldCBhPWUuaW5kZXhPZigiICIpLHM9ZTtpZihhPjApe2xldCB1PSRJKGUsYSk7cz1lLnN1YnN0cmluZyh1KSxlPWUuc3Vic3RyaW5nKDAsYSl9cmV0dXJuKHQ9PT0ibGlua2NvZGUifHx0PT09ImxpbmsiJiZyLmxpbms9PT0iY29kZSIpJiYocz1gXGAke3N9XGBgKSwoaT0obj1yLnJlbmRlckxpbmspPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jYWxsKHIsZSxzKSkhPT1udWxsJiZpIT09dm9pZCAwP2k6aXplKGUscyl9fWZ1bmN0aW9uIGl6ZSh0LGUpe3RyeXtyZXR1cm4gbXMucGFyc2UodCwhMCksYFske2V9XSgke3R9KWB9Y2F0Y2h7cmV0dXJuIHR9fWZ1bmN0aW9uIGZ1ZSh0KXtyZXR1cm4gdC5lbmRzV2l0aChgCmApP2AKYDpgCgpgfXZhciBodWUsWSRlLEskZSxRJGUsUUUsdWIsaGIsWkUsVUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaTSgpOyRnKCk7VWMoKTtvKHpJLCJwYXJzZUpTRG9jIik7byhHSSwiaXNKU0RvYyIpO28oZHVlLCJnZXRMaW5lcyIpO2h1ZT0vXHMqKEAoW1xwe0x9XVtccHtMfVxwe059XSopPykvdXksWSRlPS9ceyhAW1xwe0x9XVtccHtMfVxwe059XSopKFxzKikoW15cclxufV0rKT9cfS9ndTtvKFgkZSwidG9rZW5pemUiKTtvKGokZSwiYnVpbGRJbmxpbmVUb2tlbnMiKTtLJGU9L1xTLyxRJGU9L1xzKiQvO28oJEksInNraXBXaGl0ZXNwYWNlIik7byhaJGUsImxhc3RDaGFyYWN0ZXIiKTtvKEokZSwicGFyc2VKU0RvY0NvbW1lbnQiKTtvKGV6ZSwicGFyc2VKU0RvY0VsZW1lbnQiKTtvKHR6ZSwiYXBwZW5kRW1wdHlMaW5lIik7byhwdWUsInBhcnNlSlNEb2NUZXh0Iik7byhyemUsInBhcnNlSlNEb2NJbmxpbmUiKTtvKG11ZSwicGFyc2VKU0RvY1RhZyIpO28oZ3VlLCJwYXJzZUpTRG9jTGluZSIpO28oVkksIm5vcm1hbGl6ZU9wdGlvbnMiKTtvKEZJLCJub3JtYWxpemVPcHRpb24iKTtRRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0NvbW1lbnRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmVsZW1lbnRzPWUsdGhpcy5yYW5nZT1yfWdldFRhZyhlKXtyZXR1cm4gdGhpcy5nZXRBbGxUYWdzKCkuZmluZChyPT5yLm5hbWU9PT1lKX1nZXRUYWdzKGUpe3JldHVybiB0aGlzLmdldEFsbFRhZ3MoKS5maWx0ZXIocj0+ci5uYW1lPT09ZSl9Z2V0QWxsVGFncygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihlPT4ibmFtZSJpbiBlKX10b1N0cmluZygpe2xldCBlPSIiO2ZvcihsZXQgciBvZiB0aGlzLmVsZW1lbnRzKWlmKGUubGVuZ3RoPT09MCllPXIudG9TdHJpbmcoKTtlbHNle2xldCBuPXIudG9TdHJpbmcoKTtlKz1mdWUoZSkrbn1yZXR1cm4gZS50cmltKCl9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG4gb2YgdGhpcy5lbGVtZW50cylpZihyLmxlbmd0aD09PTApcj1uLnRvTWFya2Rvd24oZSk7ZWxzZXtsZXQgaT1uLnRvTWFya2Rvd24oZSk7cis9ZnVlKHIpK2l9cmV0dXJuIHIudHJpbSgpfX0sdWI9Y2xhc3N7c3RhdGlje28odGhpcywiSlNEb2NUYWdJbXBsIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5uYW1lPWUsdGhpcy5jb250ZW50PXIsdGhpcy5pbmxpbmU9bix0aGlzLnJhbmdlPWl9dG9TdHJpbmcoKXtsZXQgZT1gQCR7dGhpcy5uYW1lfWAscj10aGlzLmNvbnRlbnQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5jb250ZW50LmlubGluZXMubGVuZ3RoPT09MT9lPWAke2V9ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoZT1gJHtlfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2V9fWA6ZX10b01hcmtkb3duKGUpe3ZhciByLG47cmV0dXJuKG49KHI9ZT8ucmVuZGVyVGFnKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY2FsbChlLHRoaXMpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0aGlzLnRvTWFya2Rvd25EZWZhdWx0KGUpfXRvTWFya2Rvd25EZWZhdWx0KGUpe2xldCByPXRoaXMuY29udGVudC50b01hcmtkb3duKGUpO2lmKHRoaXMuaW5saW5lKXtsZXQgYT1uemUodGhpcy5uYW1lLHIsZT8/e30pO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYX1sZXQgbj0iIjtlPy50YWc9PT0iaXRhbGljInx8ZT8udGFnPT09dm9pZCAwP249IioiOmU/LnRhZz09PSJib2xkIj9uPSIqKiI6ZT8udGFnPT09ImJvbGQtaXRhbGljIiYmKG49IioqKiIpO2xldCBpPWAke259QCR7dGhpcy5uYW1lfSR7bn1gO3JldHVybiB0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGg9PT0xP2k9YCR7aX0gXHUyMDE0ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoaT1gJHtpfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2l9fWA6aX19O28obnplLCJyZW5kZXJJbmxpbmVUYWciKTtvKGl6ZSwicmVuZGVyTGlua0RlZmF1bHQiKTtoYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY1RleHRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlubGluZXM9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHRoaXMuaW5saW5lcy5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZXNbcl0saT10aGlzLmlubGluZXNbcisxXTtlKz1uLnRvU3RyaW5nKCksaSYmaS5yYW5nZS5zdGFydC5saW5lPm4ucmFuZ2Uuc3RhcnQubGluZSYmKGUrPWAKYCl9cmV0dXJuIGV9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG49MDtuPHRoaXMuaW5saW5lcy5sZW5ndGg7bisrKXtsZXQgaT10aGlzLmlubGluZXNbbl0sYT10aGlzLmlubGluZXNbbisxXTtyKz1pLnRvTWFya2Rvd24oZSksYSYmYS5yYW5nZS5zdGFydC5saW5lPmkucmFuZ2Uuc3RhcnQubGluZSYmKHIrPWAKYCl9cmV0dXJuIHJ9fSxaRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0xpbmVJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnRleHQ9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50ZXh0fXRvTWFya2Rvd24oKXtyZXR1cm4gdGhpcy50ZXh0fX07byhmdWUsImZpbGxOZXdsaW5lcyIpfSk7dmFyIGZiLEhJPU4oKCk9PnsidXNlIHN0cmljdCI7Y3MoKTtVSSgpO2ZiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbmRleE1hbmFnZXI9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLmNvbW1lbnRQcm92aWRlcj1lLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyfWdldERvY3VtZW50YXRpb24oZSl7bGV0IHI9dGhpcy5jb21tZW50UHJvdmlkZXIuZ2V0Q29tbWVudChlKTtpZihyJiZHSShyKSlyZXR1cm4gekkocikudG9NYXJrZG93bih7cmVuZGVyTGluazpvKChpLGEpPT50aGlzLmRvY3VtZW50YXRpb25MaW5rUmVuZGVyZXIoZSxpLGEpLCJyZW5kZXJMaW5rIikscmVuZGVyVGFnOm8oaT0+dGhpcy5kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxpKSwicmVuZGVyVGFnIil9KX1kb2N1bWVudGF0aW9uTGlua1JlbmRlcmVyKGUscixuKXt2YXIgaTtsZXQgYT0oaT10aGlzLmZpbmROYW1lSW5QcmVjb21wdXRlZFNjb3BlcyhlLHIpKSE9PW51bGwmJmkhPT12b2lkIDA/aTp0aGlzLmZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpO2lmKGEmJmEubmFtZVNlZ21lbnQpe2xldCBzPWEubmFtZVNlZ21lbnQucmFuZ2Uuc3RhcnQubGluZSsxLGw9YS5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrMSx1PWEuZG9jdW1lbnRVcmkud2l0aCh7ZnJhZ21lbnQ6YEwke3N9LCR7bH1gfSk7cmV0dXJuYFske259XSgke3UudG9TdHJpbmcoKX0pYH1lbHNlIHJldHVybn1kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxyKXt9ZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKGUscil7bGV0IGk9JGEoZSkucHJlY29tcHV0ZWRTY29wZXM7aWYoIWkpcmV0dXJuO2xldCBhPWU7ZG97bGV0IGw9aS5nZXQoYSkuZmluZCh1PT51Lm5hbWU9PT1yKTtpZihsKXJldHVybiBsO2E9YS4kY29udGFpbmVyfXdoaWxlKGEpfWZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cygpLmZpbmQoaT0+aS5uYW1lPT09cil9fX0pO3ZhciBkYixXST1OKCgpPT57InVzZSBzdHJpY3QiO1dFKCk7T2woKTtkYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0Q29tbWVudFByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5ncmFtbWFyQ29uZmlnPSgpPT5lLnBhcnNlci5HcmFtbWFyQ29uZmlnfWdldENvbW1lbnQoZSl7dmFyIHI7cmV0dXJuIENJKGUpP2UuJGNvbW1lbnQ6KHI9dU4oZS4kY3N0Tm9kZSx0aGlzLmdyYW1tYXJDb25maWcoKS5tdWx0aWxpbmVDb21tZW50UnVsZXMpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIudGV4dH19fSk7dmFyIHBiLHFJLFlJLFhJPU4oKCk9PnsidXNlIHN0cmljdCI7UW8oKTtZRSgpO3BiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3luY1BhcnNlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3luY1BhcnNlcj1lLnBhcnNlci5MYW5naXVtUGFyc2VyfXBhcnNlKGUscil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnN5bmNQYXJzZXIucGFyc2UoZSkpfX0scUk9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy50aHJlYWRDb3VudD04LHRoaXMudGVybWluYXRpb25EZWxheT0yMDAsdGhpcy53b3JrZXJQb29sPVtdLHRoaXMucXVldWU9W10sdGhpcy5oeWRyYXRvcj1lLnNlcmlhbGl6ZXIuSHlkcmF0b3J9aW5pdGlhbGl6ZVdvcmtlcnMoKXtmb3IoO3RoaXMud29ya2VyUG9vbC5sZW5ndGg8dGhpcy50aHJlYWRDb3VudDspe2xldCBlPXRoaXMuY3JlYXRlV29ya2VyKCk7ZS5vblJlYWR5KCgpPT57aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCl7bGV0IHI9dGhpcy5xdWV1ZS5zaGlmdCgpO3ImJihlLmxvY2soKSxyLnJlc29sdmUoZSkpfX0pLHRoaXMud29ya2VyUG9vbC5wdXNoKGUpfX1hc3luYyBwYXJzZShlLHIpe2xldCBuPWF3YWl0IHRoaXMuYWNxdWlyZVBhcnNlcldvcmtlcihyKSxpPW5ldyBwcyxhLHM9ci5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgoKT0+e2E9c2V0VGltZW91dCgoKT0+e3RoaXMudGVybWluYXRlV29ya2VyKG4pfSx0aGlzLnRlcm1pbmF0aW9uRGVsYXkpfSk7cmV0dXJuIG4ucGFyc2UoZSkudGhlbihsPT57bGV0IHU9dGhpcy5oeWRyYXRvci5oeWRyYXRlKGwpO2kucmVzb2x2ZSh1KX0pLmNhdGNoKGw9PntpLnJlamVjdChsKX0pLmZpbmFsbHkoKCk9PntzLmRpc3Bvc2UoKSxjbGVhclRpbWVvdXQoYSl9KSxpLnByb21pc2V9dGVybWluYXRlV29ya2VyKGUpe2UudGVybWluYXRlKCk7bGV0IHI9dGhpcy53b3JrZXJQb29sLmluZGV4T2YoZSk7cj49MCYmdGhpcy53b3JrZXJQb29sLnNwbGljZShyLDEpfWFzeW5jIGFjcXVpcmVQYXJzZXJXb3JrZXIoZSl7dGhpcy5pbml0aWFsaXplV29ya2VycygpO2ZvcihsZXQgbiBvZiB0aGlzLndvcmtlclBvb2wpaWYobi5yZWFkeSlyZXR1cm4gbi5sb2NrKCksbjtsZXQgcj1uZXcgcHM7cmV0dXJuIGUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PntsZXQgbj10aGlzLnF1ZXVlLmluZGV4T2Yocik7bj49MCYmdGhpcy5xdWV1ZS5zcGxpY2UobiwxKSxyLnJlamVjdChHYyl9KSx0aGlzLnF1ZXVlLnB1c2gociksci5wcm9taXNlfX0sWUk9Y2xhc3N7c3RhdGlje28odGhpcywiUGFyc2VyV29ya2VyIil9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5fWdldCBvblJlYWR5KCl7cmV0dXJuIHRoaXMub25SZWFkeUVtaXR0ZXIuZXZlbnR9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5vblJlYWR5RW1pdHRlcj1uZXcgWm4uRW1pdHRlcix0aGlzLmRlZmVycmVkPW5ldyBwcyx0aGlzLl9yZWFkeT0hMCx0aGlzLl9wYXJzaW5nPSExLHRoaXMuc2VuZE1lc3NhZ2U9ZSx0aGlzLl90ZXJtaW5hdGU9aSxyKGE9PntsZXQgcz1hO3RoaXMuZGVmZXJyZWQucmVzb2x2ZShzKSx0aGlzLnVubG9jaygpfSksbihhPT57dGhpcy5kZWZlcnJlZC5yZWplY3QoYSksdGhpcy51bmxvY2soKX0pfXRlcm1pbmF0ZSgpe3RoaXMuZGVmZXJyZWQucmVqZWN0KEdjKSx0aGlzLl90ZXJtaW5hdGUoKX1sb2NrKCl7dGhpcy5fcmVhZHk9ITF9dW5sb2NrKCl7dGhpcy5fcGFyc2luZz0hMSx0aGlzLl9yZWFkeT0hMCx0aGlzLm9uUmVhZHlFbWl0dGVyLmZpcmUoKX1wYXJzZShlKXtpZih0aGlzLl9wYXJzaW5nKXRocm93IG5ldyBFcnJvcigiUGFyc2VyIHdvcmtlciBpcyBidXN5Iik7cmV0dXJuIHRoaXMuX3BhcnNpbmc9ITAsdGhpcy5kZWZlcnJlZD1uZXcgcHMsdGhpcy5zZW5kTWVzc2FnZShlKSx0aGlzLmRlZmVycmVkLnByb21pc2V9fX0pO3ZhciBtYixqST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7UW8oKTttYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0V29ya3NwYWNlTG9jayIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmV2aW91c1Rva2VuU291cmNlPW5ldyB5ci5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZSx0aGlzLndyaXRlUXVldWU9W10sdGhpcy5yZWFkUXVldWU9W10sdGhpcy5kb25lPSEwfXdyaXRlKGUpe3RoaXMuY2FuY2VsV3JpdGUoKTtsZXQgcj1HRSgpO3JldHVybiB0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2U9cix0aGlzLmVucXVldWUodGhpcy53cml0ZVF1ZXVlLGUsci50b2tlbil9cmVhZChlKXtyZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMucmVhZFF1ZXVlLGUpfWVucXVldWUoZSxyLG49eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IGk9bmV3IHBzLGE9e2FjdGlvbjpyLGRlZmVycmVkOmksY2FuY2VsbGF0aW9uVG9rZW46bn07cmV0dXJuIGUucHVzaChhKSx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCksaS5wcm9taXNlfWFzeW5jIHBlcmZvcm1OZXh0T3BlcmF0aW9uKCl7aWYoIXRoaXMuZG9uZSlyZXR1cm47bGV0IGU9W107aWYodGhpcy53cml0ZVF1ZXVlLmxlbmd0aD4wKWUucHVzaCh0aGlzLndyaXRlUXVldWUuc2hpZnQoKSk7ZWxzZSBpZih0aGlzLnJlYWRRdWV1ZS5sZW5ndGg+MCllLnB1c2goLi4udGhpcy5yZWFkUXVldWUuc3BsaWNlKDAsdGhpcy5yZWFkUXVldWUubGVuZ3RoKSk7ZWxzZSByZXR1cm47dGhpcy5kb25lPSExLGF3YWl0IFByb21pc2UuYWxsKGUubWFwKGFzeW5jKHthY3Rpb246cixkZWZlcnJlZDpuLGNhbmNlbGxhdGlvblRva2VuOml9KT0+e3RyeXtsZXQgYT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yKGkpKTtuLnJlc29sdmUoYSl9Y2F0Y2goYSl7VmMoYSk/bi5yZXNvbHZlKHZvaWQgMCk6bi5yZWplY3QoYSl9fSkpLHRoaXMuZG9uZT0hMCx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCl9Y2FuY2VsV3JpdGUoKXt0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2UuY2FuY2VsKCl9fX0pO3ZhciBnYixLST1OKCgpPT57InVzZSBzdHJpY3QiO1JFKCk7UGMoKTtJbCgpO2NzKCk7VDEoKTtPbCgpO2diPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRIeWRyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcD1uZXcgX3AsdGhpcy50b2tlblR5cGVJZE1hcD1uZXcgX3AsdGhpcy5ncmFtbWFyPWUuR3JhbW1hcix0aGlzLmxleGVyPWUucGFyc2VyLkxleGVyLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXJ9ZGVoeWRyYXRlKGUpe3JldHVybntsZXhlckVycm9yczplLmxleGVyRXJyb3JzLGxleGVyUmVwb3J0OmUubGV4ZXJSZXBvcnQ/dGhpcy5kZWh5ZHJhdGVMZXhlclJlcG9ydChlLmxleGVyUmVwb3J0KTp2b2lkIDAscGFyc2VyRXJyb3JzOmUucGFyc2VyRXJyb3JzLm1hcChyPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse21lc3NhZ2U6ci5tZXNzYWdlfSkpLHZhbHVlOnRoaXMuZGVoeWRyYXRlQXN0Tm9kZShlLnZhbHVlLHRoaXMuY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQoZS52YWx1ZSkpfX1kZWh5ZHJhdGVMZXhlclJlcG9ydChlKXtyZXR1cm4gZX1jcmVhdGVEZWh5cmF0aW9uQ29udGV4dChlKXtsZXQgcj1uZXcgTWFwLG49bmV3IE1hcDtmb3IobGV0IGkgb2Ygam8oZSkpci5zZXQoaSx7fSk7aWYoZS4kY3N0Tm9kZSlmb3IobGV0IGkgb2Ygc3AoZS4kY3N0Tm9kZSkpbi5zZXQoaSx7fSk7cmV0dXJue2FzdE5vZGVzOnIsY3N0Tm9kZXM6bn19ZGVoeWRyYXRlQXN0Tm9kZShlLHIpe2xldCBuPXIuYXN0Tm9kZXMuZ2V0KGUpO24uJHR5cGU9ZS4kdHlwZSxuLiRjb250YWluZXJJbmRleD1lLiRjb250YWluZXJJbmRleCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLiRjb250YWluZXJQcm9wZXJ0eSxlLiRjc3ROb2RlIT09dm9pZCAwJiYobi4kY3N0Tm9kZT10aGlzLmRlaHlkcmF0ZUNzdE5vZGUoZS4kY3N0Tm9kZSxyKSk7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoIWkuc3RhcnRzV2l0aCgiJCIpKWlmKEFycmF5LmlzQXJyYXkoYSkpe2xldCBzPVtdO25baV09cztmb3IobGV0IGwgb2YgYSlzaShsKT9zLnB1c2godGhpcy5kZWh5ZHJhdGVBc3ROb2RlKGwscikpOnlhKGwpP3MucHVzaCh0aGlzLmRlaHlkcmF0ZVJlZmVyZW5jZShsLHIpKTpzLnB1c2gobCl9ZWxzZSBzaShhKT9uW2ldPXRoaXMuZGVoeWRyYXRlQXN0Tm9kZShhLHIpOnlhKGEpP25baV09dGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UoYSxyKTphIT09dm9pZCAwJiYobltpXT1hKTtyZXR1cm4gbn1kZWh5ZHJhdGVSZWZlcmVuY2UoZSxyKXtsZXQgbj17fTtyZXR1cm4gbi4kcmVmVGV4dD1lLiRyZWZUZXh0LGUuJHJlZk5vZGUmJihuLiRyZWZOb2RlPXIuY3N0Tm9kZXMuZ2V0KGUuJHJlZk5vZGUpKSxufWRlaHlkcmF0ZUNzdE5vZGUoZSxyKXtsZXQgbj1yLmNzdE5vZGVzLmdldChlKTtyZXR1cm4gVTIoZSk/bi5mdWxsVGV4dD1lLmZ1bGxUZXh0Om4uZ3JhbW1hclNvdXJjZT10aGlzLmdldEdyYW1tYXJFbGVtZW50SWQoZS5ncmFtbWFyU291cmNlKSxuLmhpZGRlbj1lLmhpZGRlbixuLmFzdE5vZGU9ci5hc3ROb2Rlcy5nZXQoZS5hc3ROb2RlKSxNbChlKT9uLmNvbnRlbnQ9ZS5jb250ZW50Lm1hcChpPT50aGlzLmRlaHlkcmF0ZUNzdE5vZGUoaSxyKSk6aGYoZSkmJihuLnRva2VuVHlwZT1lLnRva2VuVHlwZS5uYW1lLG4ub2Zmc2V0PWUub2Zmc2V0LG4ubGVuZ3RoPWUubGVuZ3RoLG4uc3RhcnRMaW5lPWUucmFuZ2Uuc3RhcnQubGluZSxuLnN0YXJ0Q29sdW1uPWUucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLG4uZW5kTGluZT1lLnJhbmdlLmVuZC5saW5lLG4uZW5kQ29sdW1uPWUucmFuZ2UuZW5kLmNoYXJhY3Rlciksbn1oeWRyYXRlKGUpe2xldCByPWUudmFsdWUsbj10aGlzLmNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQocik7cmV0dXJuIiRjc3ROb2RlImluIHImJnRoaXMuaHlkcmF0ZUNzdE5vZGUoci4kY3N0Tm9kZSxuKSx7bGV4ZXJFcnJvcnM6ZS5sZXhlckVycm9ycyxsZXhlclJlcG9ydDplLmxleGVyUmVwb3J0LHBhcnNlckVycm9yczplLnBhcnNlckVycm9ycyx2YWx1ZTp0aGlzLmh5ZHJhdGVBc3ROb2RlKHIsbil9fWNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQoZSl7bGV0IHI9bmV3IE1hcCxuPW5ldyBNYXA7Zm9yKGxldCBhIG9mIGpvKGUpKXIuc2V0KGEse30pO2xldCBpO2lmKGUuJGNzdE5vZGUpZm9yKGxldCBhIG9mIHNwKGUuJGNzdE5vZGUpKXtsZXQgczsiZnVsbFRleHQiaW4gYT8ocz1uZXcgcDEoYS5mdWxsVGV4dCksaT1zKToiY29udGVudCJpbiBhP3M9bmV3IFNwOiJ0b2tlblR5cGUiaW4gYSYmKHM9dGhpcy5oeWRyYXRlQ3N0TGVhZk5vZGUoYSkpLHMmJihuLnNldChhLHMpLHMucm9vdD1pKX1yZXR1cm57YXN0Tm9kZXM6cixjc3ROb2RlczpufX1oeWRyYXRlQXN0Tm9kZShlLHIpe2xldCBuPXIuYXN0Tm9kZXMuZ2V0KGUpO24uJHR5cGU9ZS4kdHlwZSxuLiRjb250YWluZXJJbmRleD1lLiRjb250YWluZXJJbmRleCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLiRjb250YWluZXJQcm9wZXJ0eSxlLiRjc3ROb2RlJiYobi4kY3N0Tm9kZT1yLmNzdE5vZGVzLmdldChlLiRjc3ROb2RlKSk7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoIWkuc3RhcnRzV2l0aCgiJCIpKWlmKEFycmF5LmlzQXJyYXkoYSkpe2xldCBzPVtdO25baV09cztmb3IobGV0IGwgb2YgYSlzaShsKT9zLnB1c2godGhpcy5zZXRQYXJlbnQodGhpcy5oeWRyYXRlQXN0Tm9kZShsLHIpLG4pKTp5YShsKT9zLnB1c2godGhpcy5oeWRyYXRlUmVmZXJlbmNlKGwsbixpLHIpKTpzLnB1c2gobCl9ZWxzZSBzaShhKT9uW2ldPXRoaXMuc2V0UGFyZW50KHRoaXMuaHlkcmF0ZUFzdE5vZGUoYSxyKSxuKTp5YShhKT9uW2ldPXRoaXMuaHlkcmF0ZVJlZmVyZW5jZShhLG4saSxyKTphIT09dm9pZCAwJiYobltpXT1hKTtyZXR1cm4gbn1zZXRQYXJlbnQoZSxyKXtyZXR1cm4gZS4kY29udGFpbmVyPXIsZX1oeWRyYXRlUmVmZXJlbmNlKGUscixuLGkpe3JldHVybiB0aGlzLmxpbmtlci5idWlsZFJlZmVyZW5jZShyLG4saS5jc3ROb2Rlcy5nZXQoZS4kcmVmTm9kZSksZS4kcmVmVGV4dCl9aHlkcmF0ZUNzdE5vZGUoZSxyLG49MCl7bGV0IGk9ci5jc3ROb2Rlcy5nZXQoZSk7aWYodHlwZW9mIGUuZ3JhbW1hclNvdXJjZT09Im51bWJlciImJihpLmdyYW1tYXJTb3VyY2U9dGhpcy5nZXRHcmFtbWFyRWxlbWVudChlLmdyYW1tYXJTb3VyY2UpKSxpLmFzdE5vZGU9ci5hc3ROb2Rlcy5nZXQoZS5hc3ROb2RlKSxNbChpKSlmb3IobGV0IGEgb2YgZS5jb250ZW50KXtsZXQgcz10aGlzLmh5ZHJhdGVDc3ROb2RlKGEscixuKyspO2kuY29udGVudC5wdXNoKHMpfXJldHVybiBpfWh5ZHJhdGVDc3RMZWFmTm9kZShlKXtsZXQgcj10aGlzLmdldFRva2VuVHlwZShlLnRva2VuVHlwZSksbj1lLm9mZnNldCxpPWUubGVuZ3RoLGE9ZS5zdGFydExpbmUscz1lLnN0YXJ0Q29sdW1uLGw9ZS5lbmRMaW5lLHU9ZS5lbmRDb2x1bW4saD1lLmhpZGRlbjtyZXR1cm4gbmV3IEVwKG4saSx7c3RhcnQ6e2xpbmU6YSxjaGFyYWN0ZXI6c30sZW5kOntsaW5lOmwsY2hhcmFjdGVyOnV9fSxyLGgpfWdldFRva2VuVHlwZShlKXtyZXR1cm4gdGhpcy5sZXhlci5kZWZpbml0aW9uW2VdfWdldEdyYW1tYXJFbGVtZW50SWQoZSl7aWYoZSlyZXR1cm4gdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemU9PT0wJiZ0aGlzLmNyZWF0ZUdyYW1tYXJFbGVtZW50SWRNYXAoKSx0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0KGUpfWdldEdyYW1tYXJFbGVtZW50KGUpe3JldHVybiB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuc2l6ZT09PTAmJnRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpLHRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5nZXRLZXkoZSl9Y3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpe2xldCBlPTA7Zm9yKGxldCByIG9mIGpvKHRoaXMuZ3JhbW1hcikpUTIocikmJnRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zZXQocixlKyspfX19KTtmdW5jdGlvbiB2YSh0KXtyZXR1cm57ZG9jdW1lbnRhdGlvbjp7Q29tbWVudFByb3ZpZGVyOm8oZT0+bmV3IGRiKGUpLCJDb21tZW50UHJvdmlkZXIiKSxEb2N1bWVudGF0aW9uUHJvdmlkZXI6byhlPT5uZXcgZmIoZSksIkRvY3VtZW50YXRpb25Qcm92aWRlciIpfSxwYXJzZXI6e0FzeW5jUGFyc2VyOm8oZT0+bmV3IHBiKGUpLCJBc3luY1BhcnNlciIpLEdyYW1tYXJDb25maWc6byhlPT5RTihlKSwiR3JhbW1hckNvbmZpZyIpLExhbmdpdW1QYXJzZXI6byhlPT5hSShlKSwiTGFuZ2l1bVBhcnNlciIpLENvbXBsZXRpb25QYXJzZXI6byhlPT5uSShlKSwiQ29tcGxldGlvblBhcnNlciIpLFZhbHVlQ29udmVydGVyOm8oKCk9Pm5ldyBBcCwiVmFsdWVDb252ZXJ0ZXIiKSxUb2tlbkJ1aWxkZXI6bygoKT0+bmV3IGp1LCJUb2tlbkJ1aWxkZXIiKSxMZXhlcjpvKGU9Pm5ldyBScChlKSwiTGV4ZXIiKSxQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgbTEsIlBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIiksTGV4ZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgY2IsIkxleGVyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX0sd29ya3NwYWNlOntBc3ROb2RlTG9jYXRvcjpvKCgpPT5uZXcgaWIsIkFzdE5vZGVMb2NhdG9yIiksQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI6byhlPT5uZXcgcmIoZSksIkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyIiksUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjpvKGU9Pm5ldyBuYihlKSwiUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlciIpfSxyZWZlcmVuY2VzOntMaW5rZXI6byhlPT5uZXcgSHgoZSksIkxpbmtlciIpLE5hbWVQcm92aWRlcjpvKCgpPT5uZXcgV3gsIk5hbWVQcm92aWRlciIpLFNjb3BlUHJvdmlkZXI6byhlPT5uZXcgS3goZSksIlNjb3BlUHJvdmlkZXIiKSxTY29wZUNvbXB1dGF0aW9uOm8oZT0+bmV3IFl4KGUpLCJTY29wZUNvbXB1dGF0aW9uIiksUmVmZXJlbmNlczpvKGU9Pm5ldyBxeChlKSwiUmVmZXJlbmNlcyIpfSxzZXJpYWxpemVyOntIeWRyYXRvcjpvKGU9Pm5ldyBnYihlKSwiSHlkcmF0b3IiKSxKc29uU2VyaWFsaXplcjpvKGU9Pm5ldyBReChlKSwiSnNvblNlcmlhbGl6ZXIiKX0sdmFsaWRhdGlvbjp7RG9jdW1lbnRWYWxpZGF0b3I6byhlPT5uZXcgdGIoZSksIkRvY3VtZW50VmFsaWRhdG9yIiksVmFsaWRhdGlvblJlZ2lzdHJ5Om8oZT0+bmV3IEp4KGUpLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX0sc2hhcmVkOm8oKCk9PnQuc2hhcmVkLCJzaGFyZWQiKX19ZnVuY3Rpb24geGEodCl7cmV0dXJue1NlcnZpY2VSZWdpc3RyeTpvKGU9Pm5ldyBaeChlKSwiU2VydmljZVJlZ2lzdHJ5Iiksd29ya3NwYWNlOntMYW5naXVtRG9jdW1lbnRzOm8oZT0+bmV3IFV4KGUpLCJMYW5naXVtRG9jdW1lbnRzIiksTGFuZ2l1bURvY3VtZW50RmFjdG9yeTpvKGU9Pm5ldyBWeChlKSwiTGFuZ2l1bURvY3VtZW50RmFjdG9yeSIpLERvY3VtZW50QnVpbGRlcjpvKGU9Pm5ldyBzYihlKSwiRG9jdW1lbnRCdWlsZGVyIiksSW5kZXhNYW5hZ2VyOm8oZT0+bmV3IG9iKGUpLCJJbmRleE1hbmFnZXIiKSxXb3Jrc3BhY2VNYW5hZ2VyOm8oZT0+bmV3IGxiKGUpLCJXb3Jrc3BhY2VNYW5hZ2VyIiksRmlsZVN5c3RlbVByb3ZpZGVyOm8oZT0+dC5maWxlU3lzdGVtUHJvdmlkZXIoZSksIkZpbGVTeXN0ZW1Qcm92aWRlciIpLFdvcmtzcGFjZUxvY2s6bygoKT0+bmV3IG1iLCJXb3Jrc3BhY2VMb2NrIiksQ29uZmlndXJhdGlvblByb3ZpZGVyOm8oZT0+bmV3IGFiKGUpLCJDb25maWd1cmF0aW9uUHJvdmlkZXIiKX19fXZhciBRST1OKCgpPT57InVzZSBzdHJpY3QiO1pOKCk7aUkoKTtzSSgpO1BFKCk7b0koKTtiSSgpO1RJKCk7d0koKTtrSSgpO1NJKCk7V0UoKTtBSSgpO19JKCk7ZWIoKTtESSgpO0xJKCk7UkkoKTtNSSgpO2IxKCk7SUkoKTtPSSgpO0tFKCk7SEkoKTtXSSgpO3p4KCk7WEkoKTtqSSgpO0tJKCk7byh2YSwiY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUiKTtvKHhhLCJjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZSIpfSk7ZnVuY3Rpb24gR24odCxlLHIsbixpLGEscyxsLHUpe2xldCBoPVt0LGUscixuLGksYSxzLGwsdV0ucmVkdWNlKEpFLHt9KTtyZXR1cm4gVHVlKGgpfWZ1bmN0aW9uIGJ1ZSh0KXtpZih0JiZ0W3h1ZV0pZm9yKGxldCBlIG9mIE9iamVjdC52YWx1ZXModCkpYnVlKGUpO3JldHVybiB0fWZ1bmN0aW9uIFR1ZSh0LGUpe2xldCByPW5ldyBQcm94eSh7fSx7ZGVsZXRlUHJvcGVydHk6bygoKT0+ITEsImRlbGV0ZVByb3BlcnR5Iiksc2V0Om8oKCk9Pnt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcHJvcGVydHkgb24gaW5qZWN0ZWQgc2VydmljZSBjb250YWluZXIiKX0sInNldCIpLGdldDpvKChuLGkpPT5pPT09eHVlPyEwOnZ1ZShuLGksdCxlfHxyKSwiZ2V0IiksZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOm8oKG4saSk9Pih2dWUobixpLHQsZXx8ciksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpKSwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksaGFzOm8oKG4saSk9PmkgaW4gdCwiaGFzIiksb3duS2V5czpvKCgpPT5bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCldLCJvd25LZXlzIil9KTtyZXR1cm4gcn1mdW5jdGlvbiB2dWUodCxlLHIsbil7aWYoZSBpbiB0KXtpZih0W2VdaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBuZXcgRXJyb3IoIkNvbnN0cnVjdGlvbiBmYWlsdXJlLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91ciBkZXBlbmRlbmNpZXMgYXJlIGNvbnN0cnVjdGFibGUuIix7Y2F1c2U6dFtlXX0pO2lmKHRbZV09PT15dWUpdGhyb3cgbmV3IEVycm9yKCdDeWNsZSBkZXRlY3RlZC4gUGxlYXNlIG1ha2UgIicrU3RyaW5nKGUpKyciIGxhenkuIFZpc2l0IGh0dHBzOi8vbGFuZ2l1bS5vcmcvZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbi1zZXJ2aWNlcy8jcmVzb2x2aW5nLWN5Y2xpYy1kZXBlbmRlbmNpZXMnKTtyZXR1cm4gdFtlXX1lbHNlIGlmKGUgaW4gcil7bGV0IGk9cltlXTt0W2VdPXl1ZTt0cnl7dFtlXT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pKG4pOlR1ZShpLG4pfWNhdGNoKGEpe3Rocm93IHRbZV09YSBpbnN0YW5jZW9mIEVycm9yP2E6dm9pZCAwLGF9cmV0dXJuIHRbZV19ZWxzZSByZXR1cm59ZnVuY3Rpb24gSkUodCxlKXtpZihlKXtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSlpZihuIT09dm9pZCAwKXtsZXQgaT10W3JdO2khPT1udWxsJiZuIT09bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2Ygbj09Im9iamVjdCI/dFtyXT1KRShpLG4pOnRbcl09bn19cmV0dXJuIHR9dmFyIFpJLHh1ZSx5dWUsSkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7dC5tZXJnZT0oZSxyKT0+SkUoSkUoe30sZSkscil9KShaSXx8KFpJPXt9KSk7byhHbiwiaW5qZWN0Iik7eHVlPVN5bWJvbCgiaXNQcm94eSIpO28oYnVlLCJlYWdlckxvYWQiKTtvKFR1ZSwiX2luamVjdCIpO3l1ZT1TeW1ib2woKTtvKHZ1ZSwiX3Jlc29sdmUiKTtvKEpFLCJfbWVyZ2UiKX0pO3ZhciB3dWU9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBrdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXSSgpO0hJKCk7VUkoKX0pO3ZhciBFdWU9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBTdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaTigpO0V1ZSgpfSk7dmFyIGVPLE5wLGVTLHRPLEN1ZT1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7UEUoKTtLRSgpO2VPPXtpbmRlbnRUb2tlbk5hbWU6IklOREVOVCIsZGVkZW50VG9rZW5OYW1lOiJERURFTlQiLHdoaXRlc3BhY2VUb2tlbk5hbWU6IldTIixpZ25vcmVJbmRlbnRhdGlvbkRlbGltaXRlcnM6W119OyhmdW5jdGlvbih0KXt0LlJFR1VMQVI9ImluZGVudGF0aW9uLXNlbnNpdGl2ZSIsdC5JR05PUkVfSU5ERU5UQVRJT049Imlnbm9yZS1pbmRlbnRhdGlvbiJ9KShOcHx8KE5wPXt9KSk7ZVM9Y2xhc3MgZXh0ZW5kcyBqdXtzdGF0aWN7byh0aGlzLCJJbmRlbnRhdGlvbkF3YXJlVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoZT1lTyl7c3VwZXIoKSx0aGlzLmluZGVudGF0aW9uU3RhY2s9WzBdLHRoaXMud2hpdGVzcGFjZVJlZ0V4cD0vWyBcdF0rL3ksdGhpcy5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlTyksZSksdGhpcy5pbmRlbnRUb2tlblR5cGU9ZGYoe25hbWU6dGhpcy5vcHRpb25zLmluZGVudFRva2VuTmFtZSxwYXR0ZXJuOnRoaXMuaW5kZW50TWF0Y2hlci5iaW5kKHRoaXMpLGxpbmVfYnJlYWtzOiExfSksdGhpcy5kZWRlbnRUb2tlblR5cGU9ZGYoe25hbWU6dGhpcy5vcHRpb25zLmRlZGVudFRva2VuTmFtZSxwYXR0ZXJuOnRoaXMuZGVkZW50TWF0Y2hlci5iaW5kKHRoaXMpLGxpbmVfYnJlYWtzOiExfSl9YnVpbGRUb2tlbnMoZSxyKXtsZXQgbj1zdXBlci5idWlsZFRva2VucyhlLHIpO2lmKCFqRShuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW5zIGJ1aWx0IGJ5IGRlZmF1bHQgYnVpbGRlciIpO2xldHtpbmRlbnRUb2tlbk5hbWU6aSxkZWRlbnRUb2tlbk5hbWU6YSx3aGl0ZXNwYWNlVG9rZW5OYW1lOnMsaWdub3JlSW5kZW50YXRpb25EZWxpbWl0ZXJzOmx9PXRoaXMub3B0aW9ucyx1LGgsZixkPVtdO2ZvcihsZXQgcCBvZiBuKXtmb3IobGV0W20sZ11vZiBsKXAubmFtZT09PW0/cC5QVVNIX01PREU9TnAuSUdOT1JFX0lOREVOVEFUSU9OOnAubmFtZT09PWcmJihwLlBPUF9NT0RFPSEwKTtwLm5hbWU9PT1hP3U9cDpwLm5hbWU9PT1pP2g9cDpwLm5hbWU9PT1zP2Y9cDpkLnB1c2gocCl9aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIlNvbWUgaW5kZW50YXRpb24vd2hpdGVzcGFjZSB0b2tlbnMgbm90IGZvdW5kISIpO3JldHVybiBsLmxlbmd0aD4wP3ttb2Rlczp7W05wLlJFR1VMQVJdOlt1LGgsLi4uZCxmXSxbTnAuSUdOT1JFX0lOREVOVEFUSU9OXTpbLi4uZCxmXX0sZGVmYXVsdE1vZGU6TnAuUkVHVUxBUn06W3UsaCxmLC4uLmRdfWZsdXNoTGV4aW5nUmVwb3J0KGUpe2xldCByPXN1cGVyLmZsdXNoTGV4aW5nUmVwb3J0KGUpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse3JlbWFpbmluZ0RlZGVudHM6dGhpcy5mbHVzaFJlbWFpbmluZ0RlZGVudHMoZSl9KX1pc1N0YXJ0T2ZMaW5lKGUscil7cmV0dXJuIHI9PT0wfHxgXHIKYC5pbmNsdWRlcyhlW3ItMV0pfW1hdGNoV2hpdGVzcGFjZShlLHIsbixpKXt2YXIgYTt0aGlzLndoaXRlc3BhY2VSZWdFeHAubGFzdEluZGV4PXI7bGV0IHM9dGhpcy53aGl0ZXNwYWNlUmVnRXhwLmV4ZWMoZSk7cmV0dXJue2N1cnJJbmRlbnRMZXZlbDooYT1zPy5bMF0ubGVuZ3RoKSE9PW51bGwmJmEhPT12b2lkIDA/YTowLHByZXZJbmRlbnRMZXZlbDp0aGlzLmluZGVudGF0aW9uU3RhY2suYXQoLTEpLG1hdGNoOnN9fWNyZWF0ZUluZGVudGF0aW9uVG9rZW5JbnN0YW5jZShlLHIsbixpKXtsZXQgYT10aGlzLmdldExpbmVOdW1iZXIocixpKTtyZXR1cm4gV3UoZSxuLGksaStuLmxlbmd0aCxhLGEsMSxuLmxlbmd0aCl9Z2V0TGluZU51bWJlcihlLHIpe3JldHVybiBlLnN1YnN0cmluZygwLHIpLnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RofWluZGVudE1hdGNoZXIoZSxyLG4saSl7aWYoIXRoaXMuaXNTdGFydE9mTGluZShlLHIpKXJldHVybiBudWxsO2xldHtjdXJySW5kZW50TGV2ZWw6YSxwcmV2SW5kZW50TGV2ZWw6cyxtYXRjaDpsfT10aGlzLm1hdGNoV2hpdGVzcGFjZShlLHIsbixpKTtyZXR1cm4gYTw9cz9udWxsOih0aGlzLmluZGVudGF0aW9uU3RhY2sucHVzaChhKSxsKX1kZWRlbnRNYXRjaGVyKGUscixuLGkpe3ZhciBhLHMsbCx1O2lmKCF0aGlzLmlzU3RhcnRPZkxpbmUoZSxyKSlyZXR1cm4gbnVsbDtsZXR7Y3VyckluZGVudExldmVsOmgscHJldkluZGVudExldmVsOmYsbWF0Y2g6ZH09dGhpcy5tYXRjaFdoaXRlc3BhY2UoZSxyLG4saSk7aWYoaD49ZilyZXR1cm4gbnVsbDtsZXQgcD10aGlzLmluZGVudGF0aW9uU3RhY2subGFzdEluZGV4T2YoaCk7aWYocD09PS0xKXJldHVybiB0aGlzLmRpYWdub3N0aWNzLnB1c2goe3NldmVyaXR5OiJlcnJvciIsbWVzc2FnZTpgSW52YWxpZCBkZWRlbnQgbGV2ZWwgJHtofSBhdCBvZmZzZXQ6ICR7cn0uIEN1cnJlbnQgaW5kZW50YXRpb24gc3RhY2s6ICR7dGhpcy5pbmRlbnRhdGlvblN0YWNrfWAsb2Zmc2V0OnIsbGVuZ3RoOihzPShhPWQ/LlswXSk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmxlbmd0aCkhPT1udWxsJiZzIT09dm9pZCAwP3M6MCxsaW5lOnRoaXMuZ2V0TGluZU51bWJlcihlLHIpLGNvbHVtbjoxfSksbnVsbDtsZXQgbT10aGlzLmluZGVudGF0aW9uU3RhY2subGVuZ3RoLXAtMSxnPSh1PShsPWUuc3Vic3RyaW5nKDAscikubWF0Y2goL1tcclxuXSskLykpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bFswXS5sZW5ndGgpIT09bnVsbCYmdSE9PXZvaWQgMD91OjE7Zm9yKGxldCB5PTA7eTxtO3krKyl7bGV0IHY9dGhpcy5jcmVhdGVJbmRlbnRhdGlvblRva2VuSW5zdGFuY2UodGhpcy5kZWRlbnRUb2tlblR5cGUsZSwiIixyLShnLTEpKTtuLnB1c2godiksdGhpcy5pbmRlbnRhdGlvblN0YWNrLnBvcCgpfXJldHVybiBudWxsfWJ1aWxkVGVybWluYWxUb2tlbihlKXtsZXQgcj1zdXBlci5idWlsZFRlcm1pbmFsVG9rZW4oZSkse2luZGVudFRva2VuTmFtZTpuLGRlZGVudFRva2VuTmFtZTppLHdoaXRlc3BhY2VUb2tlbk5hbWU6YX09dGhpcy5vcHRpb25zO3JldHVybiByLm5hbWU9PT1uP3RoaXMuaW5kZW50VG9rZW5UeXBlOnIubmFtZT09PWk/dGhpcy5kZWRlbnRUb2tlblR5cGU6ci5uYW1lPT09YT9kZih7bmFtZTphLHBhdHRlcm46dGhpcy53aGl0ZXNwYWNlUmVnRXhwLGdyb3VwOktuLlNLSVBQRUR9KTpyfWZsdXNoUmVtYWluaW5nRGVkZW50cyhlKXtsZXQgcj1bXTtmb3IoO3RoaXMuaW5kZW50YXRpb25TdGFjay5sZW5ndGg+MTspci5wdXNoKHRoaXMuY3JlYXRlSW5kZW50YXRpb25Ub2tlbkluc3RhbmNlKHRoaXMuZGVkZW50VG9rZW5UeXBlLGUsIiIsZS5sZW5ndGgpKSx0aGlzLmluZGVudGF0aW9uU3RhY2sucG9wKCk7cmV0dXJuIHRoaXMuaW5kZW50YXRpb25TdGFjaz1bMF0scn19LHRPPWNsYXNzIGV4dGVuZHMgUnB7c3RhdGlje28odGhpcywiSW5kZW50YXRpb25Bd2FyZUxleGVyIil9Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSksZS5wYXJzZXIuVG9rZW5CdWlsZGVyIGluc3RhbmNlb2YgZVMpdGhpcy5pbmRlbnRhdGlvblRva2VuQnVpbGRlcj1lLnBhcnNlci5Ub2tlbkJ1aWxkZXI7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkluZGVudGF0aW9uQXdhcmVMZXhlciByZXF1aXJlcyBhbiBhY2NvbXBhbnlpbmcgSW5kZW50YXRpb25Bd2FyZVRva2VuQnVpbGRlciIpfXRva2VuaXplKGUscj1YRSl7bGV0IG49c3VwZXIudG9rZW5pemUoZSksaT1uLnJlcG9ydDtyPy5tb2RlPT09ImZ1bGwiJiZuLnRva2Vucy5wdXNoKC4uLmkucmVtYWluaW5nRGVkZW50cyksaS5yZW1haW5pbmdEZWRlbnRzPVtdO2xldHtpbmRlbnRUb2tlblR5cGU6YSxkZWRlbnRUb2tlblR5cGU6c309dGhpcy5pbmRlbnRhdGlvblRva2VuQnVpbGRlcixsPWEudG9rZW5UeXBlSWR4LHU9cy50b2tlblR5cGVJZHgsaD1bXSxmPW4udG9rZW5zLmxlbmd0aC0xO2ZvcihsZXQgZD0wO2Q8ZjtkKyspe2xldCBwPW4udG9rZW5zW2RdLG09bi50b2tlbnNbZCsxXTtpZihwLnRva2VuVHlwZUlkeD09PWwmJm0udG9rZW5UeXBlSWR4PT09dSl7ZCsrO2NvbnRpbnVlfWgucHVzaChwKX1yZXR1cm4gZj49MCYmaC5wdXNoKG4udG9rZW5zW2ZdKSxuLnRva2Vucz1oLG59fX0pO3ZhciBBdWU9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBfdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYSSgpO2lJKCk7UkUoKTtDdWUoKTtzSSgpO3p4KCk7S0UoKTtPRSgpO0F1ZSgpO1BFKCk7b0koKX0pO3ZhciBEdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiSSgpO1RJKCk7d0koKTtFSSgpO2tJKCk7U0koKX0pO3ZhciBMdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLSSgpO1dFKCl9KTt2YXIgdFMsYmEsck89TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0Uz1jbGFzc3tzdGF0aWN7byh0aGlzLCJFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlciIpfXJlYWRGaWxlKCl7dGhyb3cgbmV3IEVycm9yKCJObyBmaWxlIHN5c3RlbSBpcyBhdmFpbGFibGUuIil9YXN5bmMgcmVhZERpcmVjdG9yeSgpe3JldHVybltdfX0sYmE9e2ZpbGVTeXN0ZW1Qcm92aWRlcjpvKCgpPT5uZXcgdFMsImZpbGVTeXN0ZW1Qcm92aWRlciIpfX0pO2Z1bmN0aW9uIG96ZSgpe2xldCB0PUduKHhhKGJhKSxzemUpLGU9R24odmEoe3NoYXJlZDp0fSksYXplKTtyZXR1cm4gdC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoZSksZX1mdW5jdGlvbiBIYyh0KXt2YXIgZTtsZXQgcj1vemUoKSxuPXIuc2VyaWFsaXplci5Kc29uU2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0KTtyZXR1cm4gci5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKG4sbXMucGFyc2UoYG1lbW9yeTovLyR7KGU9bi5uYW1lKSE9PW51bGwmJmUhPT12b2lkIDA/ZToiZ3JhbW1hciJ9LmxhbmdpdW1gKSksbn12YXIgYXplLHN6ZSxSdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRSSgpO0pJKCk7UGMoKTtyTygpO1VjKCk7YXplPXtHcmFtbWFyOm8oKCk9Pnt9LCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpvKCgpPT4oe2Nhc2VJbnNlbnNpdGl2ZTohMSxmaWxlRXh0ZW5zaW9uczpbIi5sYW5naXVtIl0sbGFuZ3VhZ2VJZDoibGFuZ2l1bSJ9KSwiTGFuZ3VhZ2VNZXRhRGF0YSIpfSxzemU9e0FzdFJlZmxlY3Rpb246bygoKT0+bmV3IE9nLCJBc3RSZWZsZWN0aW9uIil9O28ob3plLCJjcmVhdGVNaW5pbWFsR3JhbW1hclNlcnZpY2VzIik7byhIYywibG9hZEdyYW1tYXJGcm9tSnNvbiIpfSk7dmFyIEdyPXt9O3VyKEdyLHtBc3RVdGlsczooKT0+SWssQmlNYXA6KCk9Pl9wLENhbmNlbGxhdGlvbjooKT0+eXIsQ29udGV4dENhY2hlOigpPT5EcCxDc3RVdGlsczooKT0+RWssRE9ORV9SRVNVTFQ6KCk9PkJhLERlZmVycmVkOigpPT5wcyxEaXNwb3NhYmxlOigpPT52ZixEaXNwb3NhYmxlQ2FjaGU6KCk9PmsxLERvY3VtZW50Q2FjaGU6KCk9PlVFLEVNUFRZX1NUUkVBTTooKT0+SDIsRXJyb3JXaXRoTG9jYXRpb246KCk9PmxwLEdyYW1tYXJVdGlsczooKT0+JGssTXVsdGlNYXA6KCk9PnpsLE9wZXJhdGlvbkNhbmNlbGxlZDooKT0+R2MsUmVkdWN0aW9uOigpPT5qbSxSZWdFeHBVdGlsczooKT0+QmssU2ltcGxlQ2FjaGU6KCk9Pmp4LFN0cmVhbUltcGw6KCk9PmNvLFRyZWVTdHJlYW1JbXBsOigpPT5NYyxVUkk6KCk9Pm1zLFVyaVV0aWxzOigpPT5ncyxXb3Jrc3BhY2VDYWNoZTooKT0+RTEsYXNzZXJ0VW5yZWFjaGFibGU6KCk9Pk9jLGRlbGF5TmV4dFRpY2s6KCk9PmdJLGludGVycnVwdEFuZENoZWNrOigpPT53aSxpc09wZXJhdGlvbkNhbmNlbGxlZDooKT0+VmMsbG9hZEdyYW1tYXJGcm9tSnNvbjooKT0+SGMsc2V0SW50ZXJydXB0aW9uUGVyaW9kOigpPT50dWUsc3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uOigpPT5HRSxzdHJlYW06KCk9PmVufSk7dmFyIE51ZT1OKCgpPT57InVzZSBzdHJpY3QiO0hFKCk7WUUoKTtDcihHcixabik7VDEoKTtOSSgpO1NrKCk7UnVlKCk7UW8oKTtHcygpO1VjKCk7Y3MoKTtLbygpO09sKCk7RmwoKTskZygpfSk7dmFyIE11ZT1OKCgpPT57InVzZSBzdHJpY3QiO19JKCk7ZWIoKX0pO3ZhciBJdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtESSgpO0xJKCk7UkkoKTtNSSgpO2IxKCk7ck8oKTtJSSgpO2pJKCk7T0koKX0pO3ZhciBUYT17fTt1cihUYSx7QWJzdHJhY3RBc3RSZWZsZWN0aW9uOigpPT5pcCxBYnN0cmFjdENzdE5vZGU6KCk9PlB4LEFic3RyYWN0TGFuZ2l1bVBhcnNlcjooKT0+QngsQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjooKT0+TUUsQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyOigpPT5xSSxBc3RVdGlsczooKT0+SWssQmlNYXA6KCk9Pl9wLENhbmNlbGxhdGlvbjooKT0+eXIsQ29tcG9zaXRlQ3N0Tm9kZUltcGw6KCk9PlNwLENvbnRleHRDYWNoZTooKT0+RHAsQ3N0Tm9kZUJ1aWxkZXI6KCk9Pk94LENzdFV0aWxzOigpPT5FayxERUZBVUxUX1RPS0VOSVpFX09QVElPTlM6KCk9PlhFLERPTkVfUkVTVUxUOigpPT5CYSxEYXRhdHlwZVN5bWJvbDooKT0+TkUsRGVmYXVsdEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyOigpPT5yYixEZWZhdWx0QXN0Tm9kZUxvY2F0b3I6KCk9PmliLERlZmF1bHRBc3luY1BhcnNlcjooKT0+cGIsRGVmYXVsdENvbW1lbnRQcm92aWRlcjooKT0+ZGIsRGVmYXVsdENvbmZpZ3VyYXRpb25Qcm92aWRlcjooKT0+YWIsRGVmYXVsdERvY3VtZW50QnVpbGRlcjooKT0+c2IsRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yOigpPT50YixEZWZhdWx0SHlkcmF0b3I6KCk9PmdiLERlZmF1bHRJbmRleE1hbmFnZXI6KCk9Pm9iLERlZmF1bHRKc29uU2VyaWFsaXplcjooKT0+UXgsRGVmYXVsdExhbmdpdW1Eb2N1bWVudEZhY3Rvcnk6KCk9PlZ4LERlZmF1bHRMYW5naXVtRG9jdW1lbnRzOigpPT5VeCxEZWZhdWx0TGV4ZXI6KCk9PlJwLERlZmF1bHRMZXhlckVycm9yTWVzc2FnZVByb3ZpZGVyOigpPT5jYixEZWZhdWx0TGlua2VyOigpPT5IeCxEZWZhdWx0TmFtZVByb3ZpZGVyOigpPT5XeCxEZWZhdWx0UmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjooKT0+bmIsRGVmYXVsdFJlZmVyZW5jZXM6KCk9PnF4LERlZmF1bHRTY29wZUNvbXB1dGF0aW9uOigpPT5ZeCxEZWZhdWx0U2NvcGVQcm92aWRlcjooKT0+S3gsRGVmYXVsdFNlcnZpY2VSZWdpc3RyeTooKT0+WngsRGVmYXVsdFRva2VuQnVpbGRlcjooKT0+anUsRGVmYXVsdFZhbHVlQ29udmVydGVyOigpPT5BcCxEZWZhdWx0V29ya3NwYWNlTG9jazooKT0+bWIsRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXI6KCk9PmxiLERlZmVycmVkOigpPT5wcyxEaXNwb3NhYmxlOigpPT52ZixEaXNwb3NhYmxlQ2FjaGU6KCk9PmsxLERvY3VtZW50Q2FjaGU6KCk9PlVFLERvY3VtZW50U3RhdGU6KCk9PmtuLERvY3VtZW50VmFsaWRhdG9yOigpPT5abyxFTVBUWV9TQ09QRTooKT0+cSRlLEVNUFRZX1NUUkVBTTooKT0+SDIsRW1wdHlGaWxlU3lzdGVtOigpPT5iYSxFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlcjooKT0+dFMsRXJyb3JXaXRoTG9jYXRpb246KCk9PmxwLEdyYW1tYXJBU1Q6KCk9PkoyLEdyYW1tYXJVdGlsczooKT0+JGssSW5kZW50YXRpb25Bd2FyZUxleGVyOigpPT50TyxJbmRlbnRhdGlvbkF3YXJlVG9rZW5CdWlsZGVyOigpPT5lUyxKU0RvY0RvY3VtZW50YXRpb25Qcm92aWRlcjooKT0+ZmIsTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXI6KCk9PiR4LExhbmdpdW1QYXJzZXI6KCk9PkZ4LExhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjooKT0+bTEsTGVhZkNzdE5vZGVJbXBsOigpPT5FcCxMZXhpbmdNb2RlOigpPT5OcCxNYXBTY29wZTooKT0+WHgsTW9kdWxlOigpPT5aSSxNdWx0aU1hcDooKT0+emwsT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5HYyxQYXJzZXJXb3JrZXI6KCk9PllJLFJlZHVjdGlvbjooKT0+am0sUmVnRXhwVXRpbHM6KCk9PkJrLFJvb3RDc3ROb2RlSW1wbDooKT0+cDEsU2ltcGxlQ2FjaGU6KCk9Pmp4LFN0cmVhbUltcGw6KCk9PmNvLFN0cmVhbVNjb3BlOigpPT53MSxUZXh0RG9jdW1lbnQ6KCk9PnYxLFRyZWVTdHJlYW1JbXBsOigpPT5NYyxVUkk6KCk9Pm1zLFVyaVV0aWxzOigpPT5ncyxWYWxpZGF0aW9uQ2F0ZWdvcnk6KCk9PlMxLFZhbGlkYXRpb25SZWdpc3RyeTooKT0+SngsVmFsdWVDb252ZXJ0ZXI6KCk9PnpjLFdvcmtzcGFjZUNhY2hlOigpPT5FMSxhc3NlcnRVbnJlYWNoYWJsZTooKT0+T2MsY3JlYXRlQ29tcGxldGlvblBhcnNlcjooKT0+bkksY3JlYXRlRGVmYXVsdENvcmVNb2R1bGU6KCk9PnZhLGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlOigpPT54YSxjcmVhdGVHcmFtbWFyQ29uZmlnOigpPT5RTixjcmVhdGVMYW5naXVtUGFyc2VyOigpPT5hSSxjcmVhdGVQYXJzZXI6KCk9Pkd4LGRlbGF5TmV4dFRpY2s6KCk9PmdJLGRpYWdub3N0aWNEYXRhOigpPT5McCxlYWdlckxvYWQ6KCk9PmJ1ZSxnZXREaWFnbm9zdGljUmFuZ2U6KCk9PmN1ZSxpbmRlbnRhdGlvbkJ1aWxkZXJEZWZhdWx0T3B0aW9uczooKT0+ZU8saW5qZWN0OigpPT5HbixpbnRlcnJ1cHRBbmRDaGVjazooKT0+d2ksaXNBc3ROb2RlOigpPT5zaSxpc0FzdE5vZGVEZXNjcmlwdGlvbjooKT0+c04saXNBc3ROb2RlV2l0aENvbW1lbnQ6KCk9PkNJLGlzQ29tcG9zaXRlQ3N0Tm9kZTooKT0+TWwsaXNJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uOigpPT5CSSxpc0pTRG9jOigpPT5HSSxpc0xlYWZDc3ROb2RlOigpPT5oZixpc0xpbmtpbmdFcnJvcjooKT0+YXAsaXNOYW1lZDooKT0+b3VlLGlzT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5WYyxpc1JlZmVyZW5jZTooKT0+eWEsaXNSb290Q3N0Tm9kZTooKT0+VTIsaXNUb2tlblR5cGVBcnJheTooKT0+akUsaXNUb2tlblR5cGVEaWN0aW9uYXJ5OigpPT5QSSxsb2FkR3JhbW1hckZyb21Kc29uOigpPT5IYyxwYXJzZUpTRG9jOigpPT56SSxwcmVwYXJlTGFuZ2l1bVBhcnNlcjooKT0+WGNlLHNldEludGVycnVwdGlvblBlcmlvZDooKT0+dHVlLHN0YXJ0Q2FuY2VsYWJsZU9wZXJhdGlvbjooKT0+R0Usc3RyZWFtOigpPT5lbix0b0RpYWdub3N0aWNEYXRhOigpPT51dWUsdG9EaWFnbm9zdGljU2V2ZXJpdHk6KCk9PnFFfSk7dmFyIHBvPU4oKCk9PnsidXNlIHN0cmljdCI7UUkoKTtKSSgpO0FJKCk7d3VlKCk7SWwoKTtrdWUoKTtTdWUoKTtfdWUoKTtEdWUoKTtMdWUoKTtOdWUoKTtDcihUYSxHcik7TXVlKCk7SXVlKCk7UGMoKX0pO2Z1bmN0aW9uIFZ1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LHliKX1mdW5jdGlvbiBVdWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCxDMSl9ZnVuY3Rpb24gSHVlKHQpe3JldHVybiBHbC5pc0luc3RhbmNlKHQsQTEpfWZ1bmN0aW9uIFd1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LF8xKX1mdW5jdGlvbiBxdWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCx2Yil9ZnVuY3Rpb24gWXVlKHQpe3JldHVybiBHbC5pc0luc3RhbmNlKHQsRDEpfWZ1bmN0aW9uIFh1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LHhiKX1mdW5jdGlvbiBqdWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCxiYil9ZnVuY3Rpb24gS3VlKHQpe3JldHVybiBHbC5pc0luc3RhbmNlKHQsVGIpfWZ1bmN0aW9uIFF1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LHdiKX1mdW5jdGlvbiBadWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCxrYil9dmFyIGx6ZSx4dCxmTyx5YixyUyxDMSxuUyxpUyxuTyxBMSxpTyxhTyxzTyxfMSxvTyx2YixhUyxsTyxEMSxjTyx4YixiYixUYix3YixjUyx1TyxrYixoTyxzUyxvUyxsUyxKdWUsR2wsT3VlLGN6ZSxQdWUsdXplLEJ1ZSxoemUsRnVlLGZ6ZSwkdWUsZHplLHp1ZSxwemUsR3VlLG16ZSxnemUseXplLHZ6ZSx4emUsYnplLFR6ZSx3emUseXMsZE8scE8sbU8sZ08seU8sdk8seE8sa3plLEV6ZSxTemUsQ3plLHhmLEt1LEdhLEF6ZSxWYT1OKCgpPT57InVzZSBzdHJpY3QiO3BvKCk7cG8oKTtwbygpO3BvKCk7bHplPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx4dD1vKCh0LGUpPT5semUodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSksIl9fbmFtZSIpLGZPPSJTdGF0ZW1lbnQiLHliPSJBcmNoaXRlY3R1cmUiO28oVnVlLCJpc0FyY2hpdGVjdHVyZSIpO3h0KFZ1ZSwiaXNBcmNoaXRlY3R1cmUiKTtyUz0iQXhpcyIsQzE9IkJyYW5jaCI7byhVdWUsImlzQnJhbmNoIik7eHQoVXVlLCJpc0JyYW5jaCIpO25TPSJDaGVja291dCIsaVM9IkNoZXJyeVBpY2tpbmciLG5PPSJDbGFzc0RlZlN0YXRlbWVudCIsQTE9IkNvbW1pdCI7byhIdWUsImlzQ29tbWl0Iik7eHQoSHVlLCJpc0NvbW1pdCIpO2lPPSJDdXJ2ZSIsYU89IkVkZ2UiLHNPPSJFbnRyeSIsXzE9IkdpdEdyYXBoIjtvKFd1ZSwiaXNHaXRHcmFwaCIpO3h0KFd1ZSwiaXNHaXRHcmFwaCIpO29PPSJHcm91cCIsdmI9IkluZm8iO28ocXVlLCJpc0luZm8iKTt4dChxdWUsImlzSW5mbyIpO2FTPSJJdGVtIixsTz0iSnVuY3Rpb24iLEQxPSJNZXJnZSI7byhZdWUsImlzTWVyZ2UiKTt4dChZdWUsImlzTWVyZ2UiKTtjTz0iT3B0aW9uIix4Yj0iUGFja2V0IjtvKFh1ZSwiaXNQYWNrZXQiKTt4dChYdWUsImlzUGFja2V0Iik7YmI9IlBhY2tldEJsb2NrIjtvKGp1ZSwiaXNQYWNrZXRCbG9jayIpO3h0KGp1ZSwiaXNQYWNrZXRCbG9jayIpO1RiPSJQaWUiO28oS3VlLCJpc1BpZSIpO3h0KEt1ZSwiaXNQaWUiKTt3Yj0iUGllU2VjdGlvbiI7byhRdWUsImlzUGllU2VjdGlvbiIpO3h0KFF1ZSwiaXNQaWVTZWN0aW9uIik7Y1M9IlJhZGFyIix1Tz0iU2VydmljZSIsa2I9IlRyZWVtYXAiO28oWnVlLCJpc1RyZWVtYXAiKTt4dChadWUsImlzVHJlZW1hcCIpO2hPPSJUcmVlbWFwUm93IixzUz0iRGlyZWN0aW9uIixvUz0iTGVhZiIsbFM9IlNlY3Rpb24iLEp1ZT1jbGFzcyBleHRlbmRzIGlwe3N0YXRpY3tvKHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9c3RhdGlje3h0KHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9Z2V0QWxsVHlwZXMoKXtyZXR1cm5beWIsclMsQzEsblMsaVMsbk8sQTEsaU8sc1MsYU8sc08sXzEsb08sdmIsYVMsbE8sb1MsRDEsY08seGIsYmIsVGIsd2IsY1MsbFMsdU8sZk8sa2IsaE9dfWNvbXB1dGVJc1N1YnR5cGUodCxlKXtzd2l0Y2godCl7Y2FzZSBDMTpjYXNlIG5TOmNhc2UgaVM6Y2FzZSBBMTpjYXNlIEQxOnJldHVybiB0aGlzLmlzU3VidHlwZShmTyxlKTtjYXNlIHNTOnJldHVybiB0aGlzLmlzU3VidHlwZShfMSxlKTtjYXNlIG9TOmNhc2UgbFM6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKGFTLGUpO2RlZmF1bHQ6cmV0dXJuITF9fWdldFJlZmVyZW5jZVR5cGUodCl7bGV0IGU9YCR7dC5jb250YWluZXIuJHR5cGV9OiR7dC5wcm9wZXJ0eX1gO3N3aXRjaChlKXtjYXNlIkVudHJ5OmF4aXMiOnJldHVybiByUztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgJHtlfSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UgaWQuYCl9fWdldFR5cGVNZXRhRGF0YSh0KXtzd2l0Y2godCl7Y2FzZSB5YjpyZXR1cm57bmFtZTp5Yixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToiZWRnZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imdyb3VwcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToianVuY3Rpb25zIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJzZXJ2aWNlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UgclM6cmV0dXJue25hbWU6clMscHJvcGVydGllczpbe25hbWU6ImxhYmVsIn0se25hbWU6Im5hbWUifV19O2Nhc2UgQzE6cmV0dXJue25hbWU6QzEscHJvcGVydGllczpbe25hbWU6Im5hbWUifSx7bmFtZToib3JkZXIifV19O2Nhc2UgblM6cmV0dXJue25hbWU6blMscHJvcGVydGllczpbe25hbWU6ImJyYW5jaCJ9XX07Y2FzZSBpUzpyZXR1cm57bmFtZTppUyxwcm9wZXJ0aWVzOlt7bmFtZToiaWQifSx7bmFtZToicGFyZW50In0se25hbWU6InRhZ3MiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIG5POnJldHVybntuYW1lOm5PLHByb3BlcnRpZXM6W3tuYW1lOiJjbGFzc05hbWUifSx7bmFtZToic3R5bGVUZXh0In1dfTtjYXNlIEExOnJldHVybntuYW1lOkExLHByb3BlcnRpZXM6W3tuYW1lOiJpZCJ9LHtuYW1lOiJtZXNzYWdlIn0se25hbWU6InRhZ3MiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InR5cGUifV19O2Nhc2UgaU86cmV0dXJue25hbWU6aU8scHJvcGVydGllczpbe25hbWU6ImVudHJpZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImxhYmVsIn0se25hbWU6Im5hbWUifV19O2Nhc2UgYU86cmV0dXJue25hbWU6YU8scHJvcGVydGllczpbe25hbWU6Imxoc0RpciJ9LHtuYW1lOiJsaHNHcm91cCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibGhzSWQifSx7bmFtZToibGhzSW50byIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicmhzRGlyIn0se25hbWU6InJoc0dyb3VwIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJyaHNJZCJ9LHtuYW1lOiJyaHNJbnRvIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBzTzpyZXR1cm57bmFtZTpzTyxwcm9wZXJ0aWVzOlt7bmFtZToiYXhpcyJ9LHtuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBfMTpyZXR1cm57bmFtZTpfMSxwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToic3RhdGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2Ugb086cmV0dXJue25hbWU6b08scHJvcGVydGllczpbe25hbWU6Imljb24ifSx7bmFtZToiaWQifSx7bmFtZToiaW4ifSx7bmFtZToidGl0bGUifV19O2Nhc2UgdmI6cmV0dXJue25hbWU6dmIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6InRpdGxlIn1dfTtjYXNlIGFTOnJldHVybntuYW1lOmFTLHByb3BlcnRpZXM6W3tuYW1lOiJjbGFzc1NlbGVjdG9yIn0se25hbWU6Im5hbWUifV19O2Nhc2UgbE86cmV0dXJue25hbWU6bE8scHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6ImluIn1dfTtjYXNlIEQxOnJldHVybntuYW1lOkQxLHByb3BlcnRpZXM6W3tuYW1lOiJicmFuY2gifSx7bmFtZToiaWQifSx7bmFtZToidGFncyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZSJ9XX07Y2FzZSBjTzpyZXR1cm57bmFtZTpjTyxwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9LHtuYW1lOiJ2YWx1ZSIsZGVmYXVsdFZhbHVlOiExfV19O2Nhc2UgeGI6cmV0dXJue25hbWU6eGIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImJsb2NrcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UgYmI6cmV0dXJue25hbWU6YmIscHJvcGVydGllczpbe25hbWU6ImJpdHMifSx7bmFtZToiZW5kIn0se25hbWU6ImxhYmVsIn0se25hbWU6InN0YXJ0In1dfTtjYXNlIFRiOnJldHVybntuYW1lOlRiLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJzZWN0aW9ucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToic2hvd0RhdGEiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InRpdGxlIn1dfTtjYXNlIHdiOnJldHVybntuYW1lOndiLHByb3BlcnRpZXM6W3tuYW1lOiJsYWJlbCJ9LHtuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBjUzpyZXR1cm57bmFtZTpjUyxwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToiYXhlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiY3VydmVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJvcHRpb25zIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSB1TzpyZXR1cm57bmFtZTp1Tyxwcm9wZXJ0aWVzOlt7bmFtZToiaWNvbiJ9LHtuYW1lOiJpY29uVGV4dCJ9LHtuYW1lOiJpZCJ9LHtuYW1lOiJpbiJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBrYjpyZXR1cm57bmFtZTprYixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToidGl0bGUifSx7bmFtZToiVHJlZW1hcFJvd3MiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIGhPOnJldHVybntuYW1lOmhPLHByb3BlcnRpZXM6W3tuYW1lOiJpbmRlbnQifSx7bmFtZToiaXRlbSJ9XX07Y2FzZSBzUzpyZXR1cm57bmFtZTpzUyxwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToiZGlyIn0se25hbWU6InN0YXRlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIG9TOnJldHVybntuYW1lOm9TLHByb3BlcnRpZXM6W3tuYW1lOiJjbGFzc1NlbGVjdG9yIn0se25hbWU6Im5hbWUifSx7bmFtZToidmFsdWUifV19O2Nhc2UgbFM6cmV0dXJue25hbWU6bFMscHJvcGVydGllczpbe25hbWU6ImNsYXNzU2VsZWN0b3IifSx7bmFtZToibmFtZSJ9XX07ZGVmYXVsdDpyZXR1cm57bmFtZTp0LHByb3BlcnRpZXM6W119fX19LEdsPW5ldyBKdWUsY3plPXh0KCgpPT5PdWU/PyhPdWU9SGMoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkluZm8iLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImVudHJ5Ijp0cnVlLCJuYW1lIjoiSW5mbyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW5mbyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2hvd0luZm8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiPyJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFT0wiLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJCT09MRUFOIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoiYm9vbGVhbiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cnVlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJmYWxzZSJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiRkxPQVQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bMC05XStcXFxcLlswLTldKyg/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IklOVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzB8WzEtOV1bMC05XSooPyFcXFxcLikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJOVU1CRVIiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANyJ9fSx7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiU1RSSU5HIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoic3RyaW5nIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFwiKFteXFwiXFxcXFxcXFxdfFxcXFxcXFxcLikqXFwifCcoW14nXFxcXFxcXFxdfFxcXFxcXFxcLikqJy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IklEIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoic3RyaW5nIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx3XShbLVxcXFx3XSpcXFxcdyk/LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiSW5mb0dyYW1tYXIiKSx1emU9eHQoKCk9PlB1ZT8/KFB1ZT1IYyhgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiUGFja2V0IiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJlbnRyeSI6dHJ1ZSwibmFtZSI6IlBhY2tldCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGFja2V0In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBhY2tldC1iZXRhIn1dfSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYmxvY2tzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IioifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQYWNrZXRCbG9jayIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzdGFydCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJlbmQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiKyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImJpdHMiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV19XX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsYWJlbCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiRU9MIiwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQk9PTEVBTiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6ImJvb2xlYW4ifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidHJ1ZSJ9fSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZmFsc2UifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkZMT0FUIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWzAtOV0rXFxcXC5bMC05XSsoPyFcXFxcLikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTlQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8wfFsxLTldWzAtOV0qKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTlVNQkVSIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlRlcm1pbmFsUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIihbXlxcIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlxcInwnKFteJ1xcXFxcXFxcXXxcXFxcXFxcXC4pKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10oWy1cXFxcd10qXFxcXHcpPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W10sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX1gKSksIlBhY2tldEdyYW1tYXIiKSxoemU9eHQoKCk9PkJ1ZT8/KEJ1ZT1IYyhgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiUGllIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJlbnRyeSI6dHJ1ZSwibmFtZSI6IlBpZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGllIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2hvd0RhdGEiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzaG93RGF0YSJ9LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VjdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlBpZVNlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTEifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkVPTCIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkJPT0xFQU4iLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJib29sZWFuIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRydWUifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImZhbHNlIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJGTE9BVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1swLTldK1xcXFwuWzAtOV0rKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKig/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5VTUJFUiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In19LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkciLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCIoW15cXCJcXFxcXFxcXF18XFxcXFxcXFwuKSpcXCJ8JyhbXidcXFxcXFxcXF18XFxcXFxcXFwuKSonLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHddKFstXFxcXHddKlxcXFx3KT8vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9XSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sImludGVyZmFjZXMiOltdLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119YCkpLCJQaWVHcmFtbWFyIiksZnplPXh0KCgpPT5GdWU/PyhGdWU9SGMoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkFyY2hpdGVjdHVyZSIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJBcmNoaXRlY3R1cmUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjMifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImFyY2hpdGVjdHVyZS1iZXRhIn0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMyJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJTdGF0ZW1lbnQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJncm91cHMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VydmljZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoianVuY3Rpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImVkZ2VzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJMZWZ0UG9ydCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNEaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiUmlnaHRQb3J0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNEaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJBcnJvdyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0ludG8iLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItLSJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDI5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLSJ9XX1dfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNJbnRvIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiR3JvdXAiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJncm91cCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imljb24iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyOCJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyOSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW4ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIyIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJTZXJ2aWNlIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2VydmljZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imljb25UZXh0Iiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjEifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imljb24iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyOCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDI5In0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImluIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ikp1bmN0aW9uIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoianVuY3Rpb24ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImluIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVkZ2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0lkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0dyb3VwIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzSWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzR3JvdXAiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSUk9XX0RJUkVDVElPTiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJMIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJSIn19XX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlQifX1dfSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiQiJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfR1JPVVAiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFx7Z3JvdXBcXFxcfS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSUk9XX0lOVE8iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzx8Pi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiRU9MIiwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTYifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkJPT0xFQU4iLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJib29sZWFuIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRydWUifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImZhbHNlIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJGTE9BVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1swLTldK1xcXFwuWzAtOV0rKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKig/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5VTUJFUiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9fSx7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIihbXlxcIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlxcInwnKFteJ1xcXFxcXFxcXXxcXFxcXFxcXC4pKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10oWy1cXFxcd10qXFxcXHcpPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUkNIX0lDT04iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFwoW1xcXFx3LTpdK1xcXFwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJDSF9USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXFtbXFxcXHcgXStcXFxcXS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiQXJjaGl0ZWN0dXJlR3JhbW1hciIpLGR6ZT14dCgoKT0+JHVlPz8oJHVlPUhjKGB7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJHaXRHcmFwaCIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJHaXRHcmFwaCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGg6In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19XX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic3RhdGVtZW50cyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlN0YXRlbWVudCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJEaXJlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJkaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkxSIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlRCIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkJUIn1dfX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQ29tbWl0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY29tbWl0In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtc2c6IiwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibWVzc2FnZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InR5cGU6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidHlwZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTk9STUFMIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlJFVkVSU0UifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiSElHSExJR0hUIn1dfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkJyYW5jaCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImJyYW5jaCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyNCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im9yZGVyOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im9yZGVyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTUifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTWVyZ2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtZXJnZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImJyYW5jaCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDI0In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0YWc6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGFncyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0eXBlOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InR5cGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ik5PUk1BTCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJSRVZFUlNFIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkhJR0hMSUdIVCJ9XX19XX1dLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVja291dCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImNoZWNrb3V0In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InN3aXRjaCJ9XX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYnJhbmNoIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVycnlQaWNraW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2hlcnJ5LXBpY2sifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBhcmVudDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJwYXJlbnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFT0wiLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJCT09MRUFOIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoiYm9vbGVhbiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cnVlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJmYWxzZSJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiRkxPQVQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bMC05XStcXFxcLlswLTldKyg/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IklOVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzB8WzEtOV1bMC05XSooPyFcXFxcLikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJOVU1CRVIiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTQifX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkciLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCIoW15cXCJcXFxcXFxcXF18XFxcXFxcXFwuKSpcXCJ8JyhbXidcXFxcXFxcXF18XFxcXFxcXFwuKSonLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHddKFstXFxcXHddKlxcXFx3KT8vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiUkVGRVJFTkNFIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoic3RyaW5nIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHcoWy1cXFxcLi9cXFxcd10qWy1cXFxcd10pPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiR2l0R3JhcGhHcmFtbWFyIikscHplPXh0KCgpPT56dWU/Pyh6dWU9SGMoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IlJhZGFyIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJlbnRyeSI6dHJ1ZSwibmFtZSI6IlJhZGFyIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJyYWRhci1iZXRhIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InJhZGFyLWJldGE6In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicmFkYXItYmV0YSJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJheGlzIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYXhlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiIsIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYXhlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY3VydmUifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJjdXJ2ZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImN1cnZlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJvcHRpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJvcHRpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIqIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkxhYmVsIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiWyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJdIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQXhpcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiI/In1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDdXJ2ZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InsifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6In0ifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFbnRyaWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImVudHJpZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLCJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW50cmllcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW50cmllcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiIsIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJlbnRyaWVzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkRldGFpbGVkRW50cnkiLCJyZXR1cm5UeXBlIjp7IiRyZWYiOiIjL2ludGVyZmFjZXNAMCJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImF4aXMiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkNyb3NzUmVmZXJlbmNlIiwidHlwZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119LCJkZXByZWNhdGVkU3ludGF4IjpmYWxzZX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6IiwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJOdW1iZXJFbnRyeSIsInJldHVyblR5cGUiOnsiJHJlZiI6IiMvaW50ZXJmYWNlc0AwIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InZhbHVlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ik9wdGlvbiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2hvd0xlZ2VuZCJ9fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidGlja3MifX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im1heCJ9fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoibWluIn19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InZhbHVlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJuYW1lIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJncmF0aWN1bGUifX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119fV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJHUkFUSUNVTEUiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2lyY2xlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJwb2x5Z29uIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkVPTCIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE0In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkJPT0xFQU4iLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJib29sZWFuIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRydWUifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImZhbHNlIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJGTE9BVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1swLTldK1xcXFwuWzAtOV0rKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKig/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5VTUJFUiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9fSx7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTYifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIihbXlxcIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlxcInwnKFteJ1xcXFxcXFxcXXxcXFxcXFxcXC4pKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10oWy1cXFxcd10qXFxcXHcpPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJFbnRyeSIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJheGlzIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlJlZmVyZW5jZVR5cGUiLCJyZWZlcmVuY2VUeXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInR5cGVSZWYiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9fX19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InZhbHVlIiwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoibnVtYmVyIn0sImlzT3B0aW9uYWwiOmZhbHNlfV0sInN1cGVyVHlwZXMiOltdfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119YCkpLCJSYWRhckdyYW1tYXIiKSxtemU9eHQoKCk9Pkd1ZT8/KEd1ZT1IYyhgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiVHJlZW1hcCIsInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJCT09MRUFOIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoiYm9vbGVhbiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cnVlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJmYWxzZSJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJUcmVlbWFwIiwicmV0dXJuVHlwZSI6eyIkcmVmIjoiIy9pbnRlcmZhY2VzQDQifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AwIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6IlRyZWVtYXBSb3dzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE0In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVFJFRU1BUF9LRVlXT1JEIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidHJlZW1hcC1iZXRhIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cmVlbWFwIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJDTEFTU19ERUYiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL2NsYXNzRGVmXFxcXHMrKFthLXpBLVpfXVthLXpBLVowLTlfXSspKD86XFxcXHMrKFteO1xcXFxyXFxcXG5dKikpPyg/OjspPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUWUxFX1NFUEFSQVRPUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6OjoifX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTRVBBUkFUT1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9fSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkNPTU1BIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldTIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bIFxcXFx0XSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6Ik1MX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFwlXFxcXCVbXlxcXFxuXSovIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6Ik5MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUcmVlbWFwUm93IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbmRlbnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaXRlbSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE2In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In0sImFyZ3VtZW50cyI6W119XX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDbGFzc0RlZiIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ikl0ZW0iLCJyZXR1cm5UeXBlIjp7IiRyZWYiOiIjL2ludGVyZmFjZXNAMCJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJTZWN0aW9uIiwicmV0dXJuVHlwZSI6eyIkcmVmIjoiIy9pbnRlcmZhY2VzQDEifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJuYW1lIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImNsYXNzU2VsZWN0b3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkxlYWYiLCJyZXR1cm5UeXBlIjp7IiRyZWYiOiIjL2ludGVyZmFjZXNAMiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiY2xhc3NTZWxlY3RvciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTkRFTlRBVElPTiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWyBcXFxcdF17MSx9LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQyIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bYS16QS1aX11bYS16QS1aMC05X10qLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTlVNQkVSMiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWzAtOV9cXFxcLlxcXFwsXSsvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTXlOdW1iZXIiLCJkYXRhVHlwZSI6Im51bWJlciIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjEifSwiYXJndW1lbnRzIjpbXX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkcyIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0qXFwifCdbXiddKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX1dLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJJdGVtIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6Im5hbWUiLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifSwiaXNPcHRpb25hbCI6ZmFsc2V9LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImNsYXNzU2VsZWN0b3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJTZWN0aW9uIiwic3VwZXJUeXBlcyI6W3siJHJlZiI6IiMvaW50ZXJmYWNlc0AwIn1dLCJhdHRyaWJ1dGVzIjpbXX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJMZWFmIiwic3VwZXJUeXBlcyI6W3siJHJlZiI6IiMvaW50ZXJmYWNlc0AwIn1dLCJhdHRyaWJ1dGVzIjpbeyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidmFsdWUiLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJudW1iZXIifSwiaXNPcHRpb25hbCI6ZmFsc2V9XX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJDbGFzc0RlZlN0YXRlbWVudCIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJjbGFzc05hbWUiLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifSwiaXNPcHRpb25hbCI6ZmFsc2V9LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InN0eWxlVGV4dCIsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9LCJpc09wdGlvbmFsIjpmYWxzZX1dLCJzdXBlclR5cGVzIjpbXX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJUcmVlbWFwIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6IlRyZWVtYXBSb3dzIiwidHlwZSI6eyIkdHlwZSI6IkFycmF5VHlwZSIsImVsZW1lbnRUeXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInR5cGVSZWYiOnsiJHJlZiI6IiMvcnVsZXNAMTQifX19LCJpc09wdGlvbmFsIjpmYWxzZX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjVGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjRGVzY3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW1wb3J0cyI6W10sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXSwiJGNvbW1lbnQiOiIvKipcXG4gKiBUcmVlbWFwIGdyYW1tYXIgZm9yIExhbmdpdW1cXG4gKiBDb252ZXJ0ZWQgZnJvbSBtaW5kbWFwIGdyYW1tYXJcXG4gKlxcbiAqIFRoZSBNTF9DT01NRU5UIGFuZCBOTCBoaWRkZW4gdGVybWluYWxzIGhhbmRsZSB3aGl0ZXNwYWNlLCBjb21tZW50cywgYW5kIG5ld2xpbmVzXFxuICogYmVmb3JlIHRoZSB0cmVlbWFwIGtleXdvcmQsIGFsbG93aW5nIGZvciBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMgYmVmb3JlIHRoZVxcbiAqIHRyZWVtYXAgZGVjbGFyYXRpb24uXFxuICovIn1gKSksIlRyZWVtYXBHcmFtbWFyIiksZ3plPXtsYW5ndWFnZUlkOiJpbmZvIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMSxtb2RlOiJwcm9kdWN0aW9uIn0seXplPXtsYW5ndWFnZUlkOiJwYWNrZXQiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSx2emU9e2xhbmd1YWdlSWQ6InBpZSIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITEsbW9kZToicHJvZHVjdGlvbiJ9LHh6ZT17bGFuZ3VhZ2VJZDoiYXJjaGl0ZWN0dXJlIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMSxtb2RlOiJwcm9kdWN0aW9uIn0sYnplPXtsYW5ndWFnZUlkOiJnaXRHcmFwaCIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITEsbW9kZToicHJvZHVjdGlvbiJ9LFR6ZT17bGFuZ3VhZ2VJZDoicmFkYXIiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSx3emU9e2xhbmd1YWdlSWQ6InRyZWVtYXAiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSx5cz17QXN0UmVmbGVjdGlvbjp4dCgoKT0+bmV3IEp1ZSwiQXN0UmVmbGVjdGlvbiIpfSxkTz17R3JhbW1hcjp4dCgoKT0+Y3plKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOnh0KCgpPT5nemUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LHBPPXtHcmFtbWFyOnh0KCgpPT51emUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6eHQoKCk9Pnl6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sbU89e0dyYW1tYXI6eHQoKCk9Pmh6ZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTp4dCgoKT0+dnplLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxnTz17R3JhbW1hcjp4dCgoKT0+ZnplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOnh0KCgpPT54emUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LHlPPXtHcmFtbWFyOnh0KCgpPT5kemUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6eHQoKCk9PmJ6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sdk89e0dyYW1tYXI6eHQoKCk9PnB6ZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTp4dCgoKT0+VHplLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSx4Tz17R3JhbW1hcjp4dCgoKT0+bXplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOnh0KCgpPT53emUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LGt6ZT0vYWNjRGVzY3IoPzpbXHQgXSo6KFteXG5ccl0qKXxccyp7KFtefV0qKX0pLyxFemU9L2FjY1RpdGxlW1x0IF0qOihbXlxuXHJdKikvLFN6ZT0vdGl0bGUoW1x0IF1bXlxuXHJdKnwpLyxDemU9e0FDQ19ERVNDUjpremUsQUNDX1RJVExFOkV6ZSxUSVRMRTpTemV9LHhmPWNsYXNzIGV4dGVuZHMgQXB7c3RhdGlje28odGhpcywiQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7eHQodGhpcywiQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIiKX1ydW5Db252ZXJ0ZXIodCxlLHIpe2xldCBuPXRoaXMucnVuQ29tbW9uQ29udmVydGVyKHQsZSxyKTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy5ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpKSxuPT09dm9pZCAwP3N1cGVyLnJ1bkNvbnZlcnRlcih0LGUscik6bn1ydW5Db21tb25Db252ZXJ0ZXIodCxlLHIpe2xldCBuPUN6ZVt0Lm5hbWVdO2lmKG49PT12b2lkIDApcmV0dXJuO2xldCBpPW4uZXhlYyhlKTtpZihpIT09bnVsbCl7aWYoaVsxXSE9PXZvaWQgMClyZXR1cm4gaVsxXS50cmltKCkucmVwbGFjZSgvW1x0IF17Mix9L2dtLCIgIik7aWYoaVsyXSE9PXZvaWQgMClyZXR1cm4gaVsyXS5yZXBsYWNlKC9eXHMqL2dtLCIiKS5yZXBsYWNlKC9ccyskL2dtLCIiKS5yZXBsYWNlKC9bXHQgXXsyLH0vZ20sIiAiKS5yZXBsYWNlKC9bXG5ccl17Mix9L2dtLGAKYCl9fX0sS3U9Y2xhc3MgZXh0ZW5kcyB4ZntzdGF0aWN7byh0aGlzLCJDb21tb25WYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3t4dCh0aGlzLCJDb21tb25WYWx1ZUNvbnZlcnRlciIpfXJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscil7fX0sR2E9Y2xhc3MgZXh0ZW5kcyBqdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmtleXdvcmRzPW5ldyBTZXQodCl9YnVpbGRLZXl3b3JkVG9rZW5zKHQsZSxyKXtsZXQgbj1zdXBlci5idWlsZEtleXdvcmRUb2tlbnModCxlLHIpO3JldHVybiBuLmZvckVhY2goaT0+e3RoaXMua2V5d29yZHMuaGFzKGkubmFtZSkmJmkuUEFUVEVSTiE9PXZvaWQgMCYmKGkuUEFUVEVSTj1uZXcgUmVnRXhwKGkuUEFUVEVSTi50b1N0cmluZygpKyIoPzooPz0lJSl8KD8hXFxTKSkiKSl9KSxufX0sQXplPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiQ29tbW9uVG9rZW5CdWlsZGVyIil9c3RhdGlje3h0KHRoaXMsIkNvbW1vblRva2VuQnVpbGRlciIpfX19KTtmdW5jdGlvbiBoUyh0PWJhKXtsZXQgZT1Hbih4YSh0KSx5cykscj1Hbih2YSh7c2hhcmVkOmV9KSx5Tyx1Uyk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxHaXRHcmFwaDpyfX12YXIgX3plLHVTLGJPPU4oKCk9PnsidXNlIHN0cmljdCI7VmEoKTtwbygpO196ZT1jbGFzcyBleHRlbmRzIEdhe3N0YXRpY3tvKHRoaXMsIkdpdEdyYXBoVG9rZW5CdWlsZGVyIil9c3RhdGlje3h0KHRoaXMsIkdpdEdyYXBoVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImdpdEdyYXBoIl0pfX0sdVM9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOnh0KCgpPT5uZXcgX3plLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjp4dCgoKT0+bmV3IEt1LCJWYWx1ZUNvbnZlcnRlciIpfX07byhoUywiY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcyIpO3h0KGhTLCJjcmVhdGVHaXRHcmFwaFNlcnZpY2VzIil9KTtmdW5jdGlvbiBkUyh0PWJhKXtsZXQgZT1Hbih4YSh0KSx5cykscj1Hbih2YSh7c2hhcmVkOmV9KSxkTyxmUyk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxJbmZvOnJ9fXZhciBEemUsZlMsVE89TigoKT0+eyJ1c2Ugc3RyaWN0IjtWYSgpO3BvKCk7RHplPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiSW5mb1Rva2VuQnVpbGRlciIpfXN0YXRpY3t4dCh0aGlzLCJJbmZvVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImluZm8iLCJzaG93SW5mbyJdKX19LGZTPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjp4dCgoKT0+bmV3IER6ZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6eHQoKCk9Pm5ldyBLdSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oZFMsImNyZWF0ZUluZm9TZXJ2aWNlcyIpO3h0KGRTLCJjcmVhdGVJbmZvU2VydmljZXMiKX0pO2Z1bmN0aW9uIG1TKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLHBPLHBTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFBhY2tldDpyfX12YXIgTHplLHBTLHdPPU4oKCk9PnsidXNlIHN0cmljdCI7VmEoKTtwbygpO0x6ZT1jbGFzcyBleHRlbmRzIEdhe3N0YXRpY3tvKHRoaXMsIlBhY2tldFRva2VuQnVpbGRlciIpfXN0YXRpY3t4dCh0aGlzLCJQYWNrZXRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsicGFja2V0Il0pfX0scFM9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOnh0KCgpPT5uZXcgTHplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjp4dCgoKT0+bmV3IEt1LCJWYWx1ZUNvbnZlcnRlciIpfX07byhtUywiY3JlYXRlUGFja2V0U2VydmljZXMiKTt4dChtUywiY3JlYXRlUGFja2V0U2VydmljZXMiKX0pO2Z1bmN0aW9uIHlTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLG1PLGdTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFBpZTpyfX12YXIgUnplLE56ZSxnUyxrTz1OKCgpPT57InVzZSBzdHJpY3QiO1ZhKCk7cG8oKTtSemU9Y2xhc3MgZXh0ZW5kcyBHYXtzdGF0aWN7byh0aGlzLCJQaWVUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiUGllVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbInBpZSIsInNob3dEYXRhIl0pfX0sTnplPWNsYXNzIGV4dGVuZHMgeGZ7c3RhdGlje28odGhpcywiUGllVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7eHQodGhpcywiUGllVmFsdWVDb252ZXJ0ZXIiKX1ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpe2lmKHQubmFtZT09PSJQSUVfU0VDVElPTl9MQUJFTCIpcmV0dXJuIGUucmVwbGFjZSgvIi9nLCIiKS50cmltKCl9fSxnUz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6eHQoKCk9Pm5ldyBSemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOnh0KCgpPT5uZXcgTnplLCJWYWx1ZUNvbnZlcnRlciIpfX07byh5UywiY3JlYXRlUGllU2VydmljZXMiKTt4dCh5UywiY3JlYXRlUGllU2VydmljZXMiKX0pO2Z1bmN0aW9uIHhTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLGdPLHZTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLEFyY2hpdGVjdHVyZTpyfX12YXIgTXplLEl6ZSx2UyxFTz1OKCgpPT57InVzZSBzdHJpY3QiO1ZhKCk7cG8oKTtNemU9Y2xhc3MgZXh0ZW5kcyBHYXtzdGF0aWN7byh0aGlzLCJBcmNoaXRlY3R1cmVUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiQXJjaGl0ZWN0dXJlVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImFyY2hpdGVjdHVyZSJdKX19LEl6ZT1jbGFzcyBleHRlbmRzIHhme3N0YXRpY3tvKHRoaXMsIkFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyIil9c3RhdGlje3h0KHRoaXMsIkFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyIil9cnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKXtpZih0Lm5hbWU9PT0iQVJDSF9JQ09OIilyZXR1cm4gZS5yZXBsYWNlKC9bKCldL2csIiIpLnRyaW0oKTtpZih0Lm5hbWU9PT0iQVJDSF9URVhUX0lDT04iKXJldHVybiBlLnJlcGxhY2UoL1siKCldL2csIiIpO2lmKHQubmFtZT09PSJBUkNIX1RJVExFIilyZXR1cm4gZS5yZXBsYWNlKC9bW1xdXS9nLCIiKS50cmltKCl9fSx2Uz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6eHQoKCk9Pm5ldyBNemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOnh0KCgpPT5uZXcgSXplLCJWYWx1ZUNvbnZlcnRlciIpfX07byh4UywiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMiKTt4dCh4UywiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMiKX0pO2Z1bmN0aW9uIFRTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLHZPLGJTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFJhZGFyOnJ9fXZhciBPemUsYlMsU089TigoKT0+eyJ1c2Ugc3RyaWN0IjtWYSgpO3BvKCk7T3plPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiUmFkYXJUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiUmFkYXJUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsicmFkYXItYmV0YSJdKX19LGJTPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjp4dCgoKT0+bmV3IE96ZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6eHQoKCk9Pm5ldyBLdSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oVFMsImNyZWF0ZVJhZGFyU2VydmljZXMiKTt4dChUUywiY3JlYXRlUmFkYXJTZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gZWhlKHQpe2xldCBlPXQudmFsaWRhdGlvbi5UcmVlbWFwVmFsaWRhdG9yLHI9dC52YWxpZGF0aW9uLlZhbGlkYXRpb25SZWdpc3RyeTtpZihyKXtsZXQgbj17VHJlZW1hcDplLmNoZWNrU2luZ2xlUm9vdC5iaW5kKGUpfTtyLnJlZ2lzdGVyKG4sZSl9fWZ1bmN0aW9uIGtTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLHhPLHdTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIociksZWhlKHIpLHtzaGFyZWQ6ZSxUcmVlbWFwOnJ9fXZhciBQemUsQnplLEZ6ZSwkemUsd1MsQ089TigoKT0+eyJ1c2Ugc3RyaWN0IjtWYSgpO3BvKCk7UHplPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiVHJlZW1hcFRva2VuQnVpbGRlciIpfXN0YXRpY3t4dCh0aGlzLCJUcmVlbWFwVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbInRyZWVtYXAiXSl9fSxCemU9L2NsYXNzRGVmXHMrKFtBLVpfYS16XVx3KykoPzpccysoW15cblxyO10qKSk/Oz8vLEZ6ZT1jbGFzcyBleHRlbmRzIHhme3N0YXRpY3tvKHRoaXMsIlRyZWVtYXBWYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3t4dCh0aGlzLCJUcmVlbWFwVmFsdWVDb252ZXJ0ZXIiKX1ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpe2lmKHQubmFtZT09PSJOVU1CRVIyIilyZXR1cm4gcGFyc2VGbG9hdChlLnJlcGxhY2UoLywvZywiIikpO2lmKHQubmFtZT09PSJTRVBBUkFUT1IiKXJldHVybiBlLnN1YnN0cmluZygxLGUubGVuZ3RoLTEpO2lmKHQubmFtZT09PSJTVFJJTkcyIilyZXR1cm4gZS5zdWJzdHJpbmcoMSxlLmxlbmd0aC0xKTtpZih0Lm5hbWU9PT0iSU5ERU5UQVRJT04iKXJldHVybiBlLmxlbmd0aDtpZih0Lm5hbWU9PT0iQ2xhc3NEZWYiKXtpZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIGU7bGV0IG49QnplLmV4ZWMoZSk7aWYobilyZXR1cm57JHR5cGU6IkNsYXNzRGVmU3RhdGVtZW50IixjbGFzc05hbWU6blsxXSxzdHlsZVRleHQ6blsyXXx8dm9pZCAwfX19fTtvKGVoZSwicmVnaXN0ZXJWYWxpZGF0aW9uQ2hlY2tzIik7eHQoZWhlLCJyZWdpc3RlclZhbGlkYXRpb25DaGVja3MiKTskemU9Y2xhc3N7c3RhdGlje28odGhpcywiVHJlZW1hcFZhbGlkYXRvciIpfXN0YXRpY3t4dCh0aGlzLCJUcmVlbWFwVmFsaWRhdG9yIil9Y2hlY2tTaW5nbGVSb290KHQsZSl7bGV0IHI7Zm9yKGxldCBuIG9mIHQuVHJlZW1hcFJvd3Mpbi5pdGVtJiYocj09PXZvaWQgMCYmbi5pbmRlbnQ9PT12b2lkIDA/cj0wOm4uaW5kZW50PT09dm9pZCAwP2UoImVycm9yIiwiTXVsdGlwbGUgcm9vdCBub2RlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSB0cmVlbWFwLiIse25vZGU6bixwcm9wZXJ0eToiaXRlbSJ9KTpyIT09dm9pZCAwJiZyPj1wYXJzZUludChuLmluZGVudCwxMCkmJmUoImVycm9yIiwiTXVsdGlwbGUgcm9vdCBub2RlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSB0cmVlbWFwLiIse25vZGU6bixwcm9wZXJ0eToiaXRlbSJ9KSl9fSx3Uz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6eHQoKCk9Pm5ldyBQemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOnh0KCgpPT5uZXcgRnplLCJWYWx1ZUNvbnZlcnRlciIpfSx2YWxpZGF0aW9uOntUcmVlbWFwVmFsaWRhdG9yOnh0KCgpPT5uZXcgJHplLCJUcmVlbWFwVmFsaWRhdG9yIil9fTtvKGtTLCJjcmVhdGVUcmVlbWFwU2VydmljZXMiKTt4dChrUywiY3JlYXRlVHJlZW1hcFNlcnZpY2VzIil9KTt2YXIgdGhlPXt9O3VyKHRoZSx7SW5mb01vZHVsZTooKT0+ZlMsY3JlYXRlSW5mb1NlcnZpY2VzOigpPT5kU30pO3ZhciByaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUTygpO1ZhKCl9KTt2YXIgbmhlPXt9O3VyKG5oZSx7UGFja2V0TW9kdWxlOigpPT5wUyxjcmVhdGVQYWNrZXRTZXJ2aWNlczooKT0+bVN9KTt2YXIgaWhlPU4oKCk9PnsidXNlIHN0cmljdCI7d08oKTtWYSgpfSk7dmFyIGFoZT17fTt1cihhaGUse1BpZU1vZHVsZTooKT0+Z1MsY3JlYXRlUGllU2VydmljZXM6KCk9PnlTfSk7dmFyIHNoZT1OKCgpPT57InVzZSBzdHJpY3QiO2tPKCk7VmEoKX0pO3ZhciBvaGU9e307dXIob2hlLHtBcmNoaXRlY3R1cmVNb2R1bGU6KCk9PnZTLGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzOigpPT54U30pO3ZhciBsaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFTygpO1ZhKCl9KTt2YXIgY2hlPXt9O3VyKGNoZSx7R2l0R3JhcGhNb2R1bGU6KCk9PnVTLGNyZWF0ZUdpdEdyYXBoU2VydmljZXM6KCk9PmhTfSk7dmFyIHVoZT1OKCgpPT57InVzZSBzdHJpY3QiO2JPKCk7VmEoKX0pO3ZhciBoaGU9e307dXIoaGhlLHtSYWRhck1vZHVsZTooKT0+YlMsY3JlYXRlUmFkYXJTZXJ2aWNlczooKT0+VFN9KTt2YXIgZmhlPU4oKCk9PnsidXNlIHN0cmljdCI7U08oKTtWYSgpfSk7dmFyIGRoZT17fTt1cihkaGUse1RyZWVtYXBNb2R1bGU6KCk9PndTLGNyZWF0ZVRyZWVtYXBTZXJ2aWNlczooKT0+a1N9KTt2YXIgcGhlPU4oKCk9PnsidXNlIHN0cmljdCI7Q08oKTtWYSgpfSk7YXN5bmMgZnVuY3Rpb24gdnModCxlKXtsZXQgcj16emVbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRpYWdyYW0gdHlwZTogJHt0fWApO1F1W3RdfHxhd2FpdCByKCk7bGV0IGk9UXVbdF0ucGFyc2UoZSk7aWYoaS5sZXhlckVycm9ycy5sZW5ndGg+MHx8aS5wYXJzZXJFcnJvcnMubGVuZ3RoPjApdGhyb3cgbmV3IEd6ZShpKTtyZXR1cm4gaS52YWx1ZX12YXIgUXUsenplLEd6ZSxiZj1OKCgpPT57InVzZSBzdHJpY3QiO2JPKCk7VE8oKTt3TygpO2tPKCk7RU8oKTtTTygpO0NPKCk7VmEoKTtRdT17fSx6emU9e2luZm86eHQoYXN5bmMoKT0+e2xldHtjcmVhdGVJbmZvU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHJoZSgpLHRoZSkpLGU9dCgpLkluZm8ucGFyc2VyLkxhbmdpdW1QYXJzZXI7UXUuaW5mbz1lfSwiaW5mbyIpLHBhY2tldDp4dChhc3luYygpPT57bGV0e2NyZWF0ZVBhY2tldFNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihpaGUoKSxuaGUpKSxlPXQoKS5QYWNrZXQucGFyc2VyLkxhbmdpdW1QYXJzZXI7UXUucGFja2V0PWV9LCJwYWNrZXQiKSxwaWU6eHQoYXN5bmMoKT0+e2xldHtjcmVhdGVQaWVTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oc2hlKCksYWhlKSksZT10KCkuUGllLnBhcnNlci5MYW5naXVtUGFyc2VyO1F1LnBpZT1lfSwicGllIiksYXJjaGl0ZWN0dXJlOnh0KGFzeW5jKCk9PntsZXR7Y3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGxoZSgpLG9oZSkpLGU9dCgpLkFyY2hpdGVjdHVyZS5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtRdS5hcmNoaXRlY3R1cmU9ZX0sImFyY2hpdGVjdHVyZSIpLGdpdEdyYXBoOnh0KGFzeW5jKCk9PntsZXR7Y3JlYXRlR2l0R3JhcGhTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4odWhlKCksY2hlKSksZT10KCkuR2l0R3JhcGgucGFyc2VyLkxhbmdpdW1QYXJzZXI7UXUuZ2l0R3JhcGg9ZX0sImdpdEdyYXBoIikscmFkYXI6eHQoYXN5bmMoKT0+e2xldHtjcmVhdGVSYWRhclNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihmaGUoKSxoaGUpKSxlPXQoKS5SYWRhci5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtRdS5yYWRhcj1lfSwicmFkYXIiKSx0cmVlbWFwOnh0KGFzeW5jKCk9PntsZXR7Y3JlYXRlVHJlZW1hcFNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihwaGUoKSxkaGUpKSxlPXQoKS5UcmVlbWFwLnBhcnNlci5MYW5naXVtUGFyc2VyO1F1LnRyZWVtYXA9ZX0sInRyZWVtYXAiKX07byh2cywicGFyc2UiKTt4dCh2cywicGFyc2UiKTtHemU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJNZXJtYWlkUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKHQpe2xldCBlPXQubGV4ZXJFcnJvcnMubWFwKG49Pm4ubWVzc2FnZSkuam9pbihgCmApLHI9dC5wYXJzZXJFcnJvcnMubWFwKG49Pm4ubWVzc2FnZSkuam9pbihgCmApO3N1cGVyKGBQYXJzaW5nIGZhaWxlZDogJHtlfSAke3J9YCksdGhpcy5yZXN1bHQ9dH1zdGF0aWN7eHQodGhpcywiTWVybWFpZFBhcnNlRXJyb3IiKX19fSk7ZnVuY3Rpb24gSm8odCxlKXt0LmFjY0Rlc2NyJiZlLnNldEFjY0Rlc2NyaXB0aW9uPy4odC5hY2NEZXNjciksdC5hY2NUaXRsZSYmZS5zZXRBY2NUaXRsZT8uKHQuYWNjVGl0bGUpLHQudGl0bGUmJmUuc2V0RGlhZ3JhbVRpdGxlPy4odC50aXRsZSl9dmFyIE1wPU4oKCk9PnsidXNlIHN0cmljdCI7byhKbywicG9wdWxhdGVDb21tb25EYiIpfSk7dmFyIEtyLEVTPU4oKCk9PnsidXNlIHN0cmljdCI7S3I9e05PUk1BTDowLFJFVkVSU0U6MSxISUdITElHSFQ6MixNRVJHRTozLENIRVJSWV9QSUNLOjR9fSk7dmFyIFRmLFNTPU4oKCk9PnsidXNlIHN0cmljdCI7VGY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0PWU7dGhpcy5yZWNvcmRzPXRoaXMuaW5pdCgpfXN0YXRpY3tvKHRoaXMsIkltcGVyYXRpdmVTdGF0ZSIpfXJlc2V0KCl7dGhpcy5yZWNvcmRzPXRoaXMuaW5pdCgpfX19KTtmdW5jdGlvbiBBTygpe3JldHVybiBSOSh7bGVuZ3RoOjd9KX1mdW5jdGlvbiBVemUodCxlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB0LnJlZHVjZSgobixpKT0+e2xldCBhPWUoaSk7cmV0dXJuIHJbYV18fChyW2FdPSEwLG4ucHVzaChpKSksbn0sW10pfWZ1bmN0aW9uIG1oZSh0LGUscil7bGV0IG49dC5pbmRleE9mKGUpO249PT0tMT90LnB1c2gocik6dC5zcGxpY2UobiwxLHIpfWZ1bmN0aW9uIHloZSh0KXtsZXQgZT10LnJlZHVjZSgoaSxhKT0+aS5zZXE+YS5zZXE/aTphLHRbMF0pLHI9IiI7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2k9PT1lP3IrPSIJKiI6cis9Igl8In0pO2xldCBuPVtyLGUuaWQsZS5zZXFdO2ZvcihsZXQgaSBpbiBBdC5yZWNvcmRzLmJyYW5jaGVzKUF0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGkpPT09ZS5pZCYmbi5wdXNoKGkpO2lmKFguZGVidWcobi5qb2luKCIgIikpLGUucGFyZW50cyYmZS5wYXJlbnRzLmxlbmd0aD09MiYmZS5wYXJlbnRzWzBdJiZlLnBhcmVudHNbMV0pe2xldCBpPUF0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzBdKTttaGUodCxlLGkpLGUucGFyZW50c1sxXSYmdC5wdXNoKEF0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzFdKSl9ZWxzZXtpZihlLnBhcmVudHMubGVuZ3RoPT0wKXJldHVybjtpZihlLnBhcmVudHNbMF0pe2xldCBpPUF0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzBdKTttaGUodCxlLGkpfX10PVV6ZSh0LGk9PmkuaWQpLHloZSh0KX12YXIgVnplLElwLEF0LEh6ZSxXemUscXplLFl6ZSxYemUsanplLEt6ZSxnaGUsUXplLFp6ZSxKemUsZUdlLHRHZSx2aGUsckdlLG5HZSxpR2UsQ1MsX089TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO2VyKCk7bWkoKTtwcigpO2NpKCk7RVMoKTtTUygpO19hKCk7VnplPW9yLmdpdEdyYXBoLElwPW8oKCk9PiRuKHsuLi5WemUsLi4udHIoKS5naXRHcmFwaH0pLCJnZXRDb25maWciKSxBdD1uZXcgVGYoKCk9PntsZXQgdD1JcCgpLGU9dC5tYWluQnJhbmNoTmFtZSxyPXQubWFpbkJyYW5jaE9yZGVyO3JldHVybnttYWluQnJhbmNoTmFtZTplLGNvbW1pdHM6bmV3IE1hcCxoZWFkOm51bGwsYnJhbmNoQ29uZmlnOm5ldyBNYXAoW1tlLHtuYW1lOmUsb3JkZXI6cn1dXSksYnJhbmNoZXM6bmV3IE1hcChbW2UsbnVsbF1dKSxjdXJyQnJhbmNoOmUsZGlyZWN0aW9uOiJMUiIsc2VxOjAsb3B0aW9uczp7fX19KTtvKEFPLCJnZXRJRCIpO28oVXplLCJ1bmlxQnkiKTtIemU9byhmdW5jdGlvbih0KXtBdC5yZWNvcmRzLmRpcmVjdGlvbj10fSwic2V0RGlyZWN0aW9uIiksV3plPW8oZnVuY3Rpb24odCl7WC5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9dD8udHJpbSgpLHQ9dHx8Int9Ijt0cnl7QXQucmVjb3Jkcy5vcHRpb25zPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7WC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixlLm1lc3NhZ2UpfX0sInNldE9wdGlvbnMiKSxxemU9byhmdW5jdGlvbigpe3JldHVybiBBdC5yZWNvcmRzLm9wdGlvbnN9LCJnZXRPcHRpb25zIiksWXplPW8oZnVuY3Rpb24odCl7bGV0IGU9dC5tc2cscj10LmlkLG49dC50eXBlLGk9dC50YWdzO1guaW5mbygiY29tbWl0IixlLHIsbixpKSxYLmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixlLHIsbixpKTtsZXQgYT1JcCgpO3I9WmUuc2FuaXRpemVUZXh0KHIsYSksZT1aZS5zYW5pdGl6ZVRleHQoZSxhKSxpPWk/Lm1hcChsPT5aZS5zYW5pdGl6ZVRleHQobCxhKSk7bGV0IHM9e2lkOnJ8fEF0LnJlY29yZHMuc2VxKyItIitBTygpLG1lc3NhZ2U6ZSxzZXE6QXQucmVjb3Jkcy5zZXErKyx0eXBlOm4/P0tyLk5PUk1BTCx0YWdzOmk/P1tdLHBhcmVudHM6QXQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltBdC5yZWNvcmRzLmhlYWQuaWRdLGJyYW5jaDpBdC5yZWNvcmRzLmN1cnJCcmFuY2h9O0F0LnJlY29yZHMuaGVhZD1zLFguaW5mbygibWFpbiBicmFuY2giLGEubWFpbkJyYW5jaE5hbWUpLEF0LnJlY29yZHMuY29tbWl0cy5oYXMocy5pZCkmJlgud2FybihgQ29tbWl0IElEICR7cy5pZH0gYWxyZWFkeSBleGlzdHNgKSxBdC5yZWNvcmRzLmNvbW1pdHMuc2V0KHMuaWQscyksQXQucmVjb3Jkcy5icmFuY2hlcy5zZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoLHMuaWQpLFguZGVidWcoImluIHB1c2hDb21taXQgIitzLmlkKX0sImNvbW1pdCIpLFh6ZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubmFtZSxyPXQub3JkZXI7aWYoZT1aZS5zYW5pdGl6ZVRleHQoZSxJcCgpKSxBdC5yZWNvcmRzLmJyYW5jaGVzLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBjcmVhdGUgYW4gZXhpc3RpbmcgYnJhbmNoLiAoSGVscDogRWl0aGVyIHVzZSBhIG5ldyBuYW1lIGlmIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdHJ5IHVzaW5nICJjaGVja291dCAke2V9IilgKTtBdC5yZWNvcmRzLmJyYW5jaGVzLnNldChlLEF0LnJlY29yZHMuaGVhZCE9bnVsbD9BdC5yZWNvcmRzLmhlYWQuaWQ6bnVsbCksQXQucmVjb3Jkcy5icmFuY2hDb25maWcuc2V0KGUse25hbWU6ZSxvcmRlcjpyfSksZ2hlKGUpLFguZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSwiYnJhbmNoIiksanplPW8odD0+e2xldCBlPXQuYnJhbmNoLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncyxhPUlwKCk7ZT1aZS5zYW5pdGl6ZVRleHQoZSxhKSxyJiYocj1aZS5zYW5pdGl6ZVRleHQocixhKSk7bGV0IHM9QXQucmVjb3Jkcy5icmFuY2hlcy5nZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoKSxsPUF0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGUpLHU9cz9BdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHMpOnZvaWQgMCxoPWw/QXQucmVjb3Jkcy5jb21taXRzLmdldChsKTp2b2lkIDA7aWYodSYmaCYmdS5icmFuY2g9PT1lKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1lcmdlIGJyYW5jaCAnJHtlfScgaW50byBpdHNlbGYuYCk7aWYoQXQucmVjb3Jkcy5jdXJyQnJhbmNoPT09ZSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOlsiYnJhbmNoIGFiYyJdfSxwfWlmKHU9PT12b2lkIDB8fCF1KXtsZXQgcD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDdXJyZW50IGJyYW5jaCAoJHtBdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJjb21taXQiXX0scH1pZighQXQucmVjb3Jkcy5icmFuY2hlcy5oYXMoZSkpe2xldCBwPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcrZSsiKSBkb2VzIG5vdCBleGlzdCIpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOltgYnJhbmNoICR7ZX1gXX0scH1pZihoPT09dm9pZCAwfHwhaCl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytlKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyciY29tbWl0IiddfSxwfWlmKHU9PT1oKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCb3RoIGJyYW5jaGVzIGhhdmUgc2FtZSBoZWFkJyk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHB9aWYociYmQXQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytyKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIGlkIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLHRva2VuOmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLGV4cGVjdGVkOltgbWVyZ2UgJHtlfSAke3J9X1VOSVFVRSAke259ICR7aT8uam9pbigiICIpfWBdfSxwfWxldCBmPWx8fCIiLGQ9e2lkOnJ8fGAke0F0LnJlY29yZHMuc2VxfS0ke0FPKCl9YCxtZXNzYWdlOmBtZXJnZWQgYnJhbmNoICR7ZX0gaW50byAke0F0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpBdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6QXQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltBdC5yZWNvcmRzLmhlYWQuaWQsZl0sYnJhbmNoOkF0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOktyLk1FUkdFLGN1c3RvbVR5cGU6bixjdXN0b21JZDohIXIsdGFnczppPz9bXX07QXQucmVjb3Jkcy5oZWFkPWQsQXQucmVjb3Jkcy5jb21taXRzLnNldChkLmlkLGQpLEF0LnJlY29yZHMuYnJhbmNoZXMuc2V0KEF0LnJlY29yZHMuY3VyckJyYW5jaCxkLmlkKSxYLmRlYnVnKEF0LnJlY29yZHMuYnJhbmNoZXMpLFguZGVidWcoImluIG1lcmdlQnJhbmNoIil9LCJtZXJnZSIpLEt6ZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQuaWQscj10LnRhcmdldElkLG49dC50YWdzLGk9dC5wYXJlbnQ7WC5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGUscixuKTtsZXQgYT1JcCgpO2lmKGU9WmUuc2FuaXRpemVUZXh0KGUsYSkscj1aZS5zYW5pdGl6ZVRleHQocixhKSxuPW4/Lm1hcCh1PT5aZS5zYW5pdGl6ZVRleHQodSxhKSksaT1aZS5zYW5pdGl6ZVRleHQoaSxhKSwhZXx8IUF0LnJlY29yZHMuY29tbWl0cy5oYXMoZSkpe2xldCB1PW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgdS5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSx1fWxldCBzPUF0LnJlY29yZHMuY29tbWl0cy5nZXQoZSk7aWYocz09PXZvaWQgMHx8IXMpdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTtpZihpJiYhKEFycmF5LmlzQXJyYXkocy5wYXJlbnRzKSYmcy5wYXJlbnRzLmluY2x1ZGVzKGkpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2xldCBsPXMuYnJhbmNoO2lmKHMudHlwZT09PUtyLk1FUkdFJiYhaSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFyfHwhQXQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7aWYobD09PUF0LnJlY29yZHMuY3VyckJyYW5jaCl7bGV0IGQ9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnKTt0aHJvdyBkLmhhc2g9e3RleHQ6YGNoZXJyeVBpY2sgJHtlfSAke3J9YCx0b2tlbjpgY2hlcnJ5UGljayAke2V9ICR7cn1gLGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGR9bGV0IHU9QXQucmVjb3Jkcy5icmFuY2hlcy5nZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoKTtpZih1PT09dm9pZCAwfHwhdSl7bGV0IGQ9bmV3IEVycm9yKGBJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeS1waWNrIi4gQ3VycmVudCBicmFuY2ggKCR7QXQucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2ApO3Rocm93IGQuaGFzaD17dGV4dDpgY2hlcnJ5UGljayAke2V9ICR7cn1gLHRva2VuOmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sZH1sZXQgaD1BdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHUpO2lmKGg9PT12b2lkIDB8fCFoKXtsZXQgZD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJHtBdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgZC5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxkfWxldCBmPXtpZDpBdC5yZWNvcmRzLnNlcSsiLSIrQU8oKSxtZXNzYWdlOmBjaGVycnktcGlja2VkICR7cz8ubWVzc2FnZX0gaW50byAke0F0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpBdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6QXQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltBdC5yZWNvcmRzLmhlYWQuaWQscy5pZF0sYnJhbmNoOkF0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOktyLkNIRVJSWV9QSUNLLHRhZ3M6bj9uLmZpbHRlcihCb29sZWFuKTpbYGNoZXJyeS1waWNrOiR7cy5pZH0ke3MudHlwZT09PUtyLk1FUkdFP2B8cGFyZW50OiR7aX1gOiIifWBdfTtBdC5yZWNvcmRzLmhlYWQ9ZixBdC5yZWNvcmRzLmNvbW1pdHMuc2V0KGYuaWQsZiksQXQucmVjb3Jkcy5icmFuY2hlcy5zZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoLGYuaWQpLFguZGVidWcoQXQucmVjb3Jkcy5icmFuY2hlcyksWC5kZWJ1ZygiaW4gY2hlcnJ5UGljayIpfX0sImNoZXJyeVBpY2siKSxnaGU9byhmdW5jdGlvbih0KXtpZih0PVplLnNhbml0aXplVGV4dCh0LElwKCkpLEF0LnJlY29yZHMuYnJhbmNoZXMuaGFzKHQpKXtBdC5yZWNvcmRzLmN1cnJCcmFuY2g9dDtsZXQgZT1BdC5yZWNvcmRzLmJyYW5jaGVzLmdldChBdC5yZWNvcmRzLmN1cnJCcmFuY2gpO2U9PT12b2lkIDB8fCFlP0F0LnJlY29yZHMuaGVhZD1udWxsOkF0LnJlY29yZHMuaGVhZD1BdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUpPz9udWxsfWVsc2V7bGV0IGU9bmV3IEVycm9yKGBUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJHt0fSIpYCk7dGhyb3cgZS5oYXNoPXt0ZXh0OmBjaGVja291dCAke3R9YCx0b2tlbjpgY2hlY2tvdXQgJHt0fWAsZXhwZWN0ZWQ6W2BicmFuY2ggJHt0fWBdfSxlfX0sImNoZWNrb3V0Iik7byhtaGUsInVwc2VydCIpO28oeWhlLCJwcmV0dHlQcmludENvbW1pdEhpc3RvcnkiKTtRemU9byhmdW5jdGlvbigpe1guZGVidWcoQXQucmVjb3Jkcy5jb21taXRzKTtsZXQgdD12aGUoKVswXTt5aGUoW3RdKX0sInByZXR0eVByaW50IiksWnplPW8oZnVuY3Rpb24oKXtBdC5yZXNldCgpLGtyKCl9LCJjbGVhciIpLEp6ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuWy4uLkF0LnJlY29yZHMuYnJhbmNoQ29uZmlnLnZhbHVlcygpXS5tYXAoKGUscik9PmUub3JkZXIhPT1udWxsJiZlLm9yZGVyIT09dm9pZCAwP2U6ey4uLmUsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3J9YCl9KS5zb3J0KChlLHIpPT4oZS5vcmRlcj8/MCktKHIub3JkZXI/PzApKS5tYXAoKHtuYW1lOmV9KT0+KHtuYW1lOmV9KSl9LCJnZXRCcmFuY2hlc0FzT2JqQXJyYXkiKSxlR2U9byhmdW5jdGlvbigpe3JldHVybiBBdC5yZWNvcmRzLmJyYW5jaGVzfSwiZ2V0QnJhbmNoZXMiKSx0R2U9byhmdW5jdGlvbigpe3JldHVybiBBdC5yZWNvcmRzLmNvbW1pdHN9LCJnZXRDb21taXRzIiksdmhlPW8oZnVuY3Rpb24oKXtsZXQgdD1bLi4uQXQucmVjb3Jkcy5jb21taXRzLnZhbHVlcygpXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe1guZGVidWcoZS5pZCl9KSx0LnNvcnQoKGUscik9PmUuc2VxLXIuc2VxKSx0fSwiZ2V0Q29tbWl0c0FycmF5IiksckdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQXQucmVjb3Jkcy5jdXJyQnJhbmNofSwiZ2V0Q3VycmVudEJyYW5jaCIpLG5HZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEF0LnJlY29yZHMuZGlyZWN0aW9ufSwiZ2V0RGlyZWN0aW9uIiksaUdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQXQucmVjb3Jkcy5oZWFkfSwiZ2V0SGVhZCIpLENTPXtjb21taXRUeXBlOktyLGdldENvbmZpZzpJcCxzZXREaXJlY3Rpb246SHplLHNldE9wdGlvbnM6V3plLGdldE9wdGlvbnM6cXplLGNvbW1pdDpZemUsYnJhbmNoOlh6ZSxtZXJnZTpqemUsY2hlcnJ5UGljazpLemUsY2hlY2tvdXQ6Z2hlLHByZXR0eVByaW50OlF6ZSxjbGVhcjpaemUsZ2V0QnJhbmNoZXNBc09iakFycmF5Okp6ZSxnZXRCcmFuY2hlczplR2UsZ2V0Q29tbWl0czp0R2UsZ2V0Q29tbWl0c0FycmF5OnZoZSxnZXRDdXJyZW50QnJhbmNoOnJHZSxnZXREaXJlY3Rpb246bkdlLGdldEhlYWQ6aUdlLHNldEFjY1RpdGxlOkFyLGdldEFjY1RpdGxlOkRyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLHNldERpYWdyYW1UaXRsZTpPcixnZXREaWFncmFtVGl0bGU6TnJ9fSk7dmFyIGFHZSxzR2Usb0dlLGxHZSxjR2UsdUdlLGhHZSx4aGUsYmhlPU4oKCk9PnsidXNlIHN0cmljdCI7YmYoKTt5dCgpO01wKCk7X08oKTtFUygpO2FHZT1vKCh0LGUpPT57Sm8odCxlKSx0LmRpciYmZS5zZXREaXJlY3Rpb24odC5kaXIpO2ZvcihsZXQgciBvZiB0LnN0YXRlbWVudHMpc0dlKHIsZSl9LCJwb3B1bGF0ZSIpLHNHZT1vKCh0LGUpPT57bGV0IG49e0NvbW1pdDpvKGk9PmUuY29tbWl0KG9HZShpKSksIkNvbW1pdCIpLEJyYW5jaDpvKGk9PmUuYnJhbmNoKGxHZShpKSksIkJyYW5jaCIpLE1lcmdlOm8oaT0+ZS5tZXJnZShjR2UoaSkpLCJNZXJnZSIpLENoZWNrb3V0Om8oaT0+ZS5jaGVja291dCh1R2UoaSkpLCJDaGVja291dCIpLENoZXJyeVBpY2tpbmc6byhpPT5lLmNoZXJyeVBpY2soaEdlKGkpKSwiQ2hlcnJ5UGlja2luZyIpfVt0LiR0eXBlXTtuP24odCk6WC5lcnJvcihgVW5rbm93biBzdGF0ZW1lbnQgdHlwZTogJHt0LiR0eXBlfWApfSwicGFyc2VTdGF0ZW1lbnQiKSxvR2U9byh0PT4oe2lkOnQuaWQsbXNnOnQubWVzc2FnZT8/IiIsdHlwZTp0LnR5cGUhPT12b2lkIDA/S3JbdC50eXBlXTpLci5OT1JNQUwsdGFnczp0LnRhZ3M/P3ZvaWQgMH0pLCJwYXJzZUNvbW1pdCIpLGxHZT1vKHQ9Pih7bmFtZTp0Lm5hbWUsb3JkZXI6dC5vcmRlcj8/MH0pLCJwYXJzZUJyYW5jaCIpLGNHZT1vKHQ9Pih7YnJhbmNoOnQuYnJhbmNoLGlkOnQuaWQ/PyIiLHR5cGU6dC50eXBlIT09dm9pZCAwP0tyW3QudHlwZV06dm9pZCAwLHRhZ3M6dC50YWdzPz92b2lkIDB9KSwicGFyc2VNZXJnZSIpLHVHZT1vKHQ9PnQuYnJhbmNoLCJwYXJzZUNoZWNrb3V0IiksaEdlPW8odD0+KHtpZDp0LmlkLHRhcmdldElkOiIiLHRhZ3M6dC50YWdzPy5sZW5ndGg9PT0wP3ZvaWQgMDp0LnRhZ3MscGFyZW50OnQucGFyZW50fSksInBhcnNlQ2hlcnJ5UGlja2luZyIpLHhoZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgdnMoImdpdEdyYXBoIix0KTtYLmRlYnVnKGUpLGFHZShlLENTKX0sInBhcnNlIil9fSk7dmFyIGZHZSxlbCxrZixFZixXYyxadSxPcCxIcyxXcyxBUyxFYixfUyx3ZixGcixkR2Usd2hlLGtoZSxwR2UsbUdlLGdHZSx5R2UsdkdlLHhHZSxiR2UsVEdlLHdHZSxrR2UsRUdlLFNHZSxUaGUsQ0dlLFNiLEFHZSxfR2UsREdlLExHZSxSR2UsRWhlLFNoZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R3QoKTt5dCgpO2VyKCk7RVMoKTtmR2U9bWUoKSxlbD1mR2U/LmdpdEdyYXBoLGtmPTEwLEVmPTQwLFdjPTQsWnU9MixPcD04LEhzPW5ldyBNYXAsV3M9bmV3IE1hcCxBUz0zMCxFYj1uZXcgTWFwLF9TPVtdLHdmPTAsRnI9IkxSIixkR2U9bygoKT0+e0hzLmNsZWFyKCksV3MuY2xlYXIoKSxFYi5jbGVhcigpLHdmPTAsX1M9W10sRnI9IkxSIn0sImNsZWFyIiksd2hlPW8odD0+e2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj90LnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6dCkuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxpLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxpLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxpLnRleHRDb250ZW50PW4udHJpbSgpLGUuYXBwZW5kQ2hpbGQoaSl9KSxlfSwiZHJhd1RleHQiKSxraGU9byh0PT57bGV0IGUscixuO3JldHVybiBGcj09PSJCVCI/KHI9bygoaSxhKT0+aTw9YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTEvMCk6KHI9bygoaSxhKT0+aT49YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTApLHQuZm9yRWFjaChpPT57bGV0IGE9RnI9PT0iVEIifHxGcj09IkJUIj9Xcy5nZXQoaSk/Lnk6V3MuZ2V0KGkpPy54O2EhPT12b2lkIDAmJnIoYSxuKSYmKGU9aSxuPWEpfSksZX0sImZpbmRDbG9zZXN0UGFyZW50IikscEdlPW8odD0+e2xldCBlPSIiLHI9MS8wO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPVdzLmdldChuKS55O2k8PXImJihlPW4scj1pKX0pLGV8fHZvaWQgMH0sImZpbmRDbG9zZXN0UGFyZW50QlQiKSxtR2U9bygodCxlLHIpPT57bGV0IG49cixpPXIsYT1bXTt0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKCFsKXRocm93IG5ldyBFcnJvcihgQ29tbWl0IG5vdCBmb3VuZCBmb3Iga2V5ICR7c31gKTtsLnBhcmVudHMubGVuZ3RoPyhuPXlHZShsKSxpPU1hdGgubWF4KG4saSkpOmEucHVzaChsKSx2R2UobCxuKX0pLG49aSxhLmZvckVhY2gocz0+e3hHZShzLG4scil9KSx0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKGw/LnBhcmVudHMubGVuZ3RoKXtsZXQgdT1wR2UobC5wYXJlbnRzKTtuPVdzLmdldCh1KS55LUVmLG48PWkmJihpPW4pO2xldCBoPUhzLmdldChsLmJyYW5jaCkucG9zLGY9bi1rZjtXcy5zZXQobC5pZCx7eDpoLHk6Zn0pfX0pfSwic2V0UGFyYWxsZWxCVFBvcyIpLGdHZT1vKHQ9PntsZXQgZT1raGUodC5wYXJlbnRzLmZpbHRlcihuPT5uIT09bnVsbCkpO2lmKCFlKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO2xldCByPVdzLmdldChlKT8ueTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgcG9zaXRpb24gbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO3JldHVybiByfSwiZmluZENsb3Nlc3RQYXJlbnRQb3MiKSx5R2U9byh0PT5nR2UodCkrRWYsImNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uIiksdkdlPW8oKHQsZSk9PntsZXQgcj1Icy5nZXQodC5icmFuY2gpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgQnJhbmNoIG5vdCBmb3VuZCBmb3IgY29tbWl0ICR7dC5pZH1gKTtsZXQgbj1yLnBvcyxpPWUra2Y7cmV0dXJuIFdzLnNldCh0LmlkLHt4Om4seTppfSkse3g6bix5Oml9fSwic2V0Q29tbWl0UG9zaXRpb24iKSx4R2U9bygodCxlLHIpPT57bGV0IG49SHMuZ2V0KHQuYnJhbmNoKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYEJyYW5jaCBub3QgZm91bmQgZm9yIGNvbW1pdCAke3QuaWR9YCk7bGV0IGk9ZStyLGE9bi5wb3M7V3Muc2V0KHQuaWQse3g6YSx5Oml9KX0sInNldFJvb3RQb3NpdGlvbiIpLGJHZT1vKCh0LGUscixuLGksYSk9PntpZihhPT09S3IuSElHSExJR0hUKXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsci54LTEwKS5hdHRyKCJ5IixyLnktMTApLmF0dHIoIndpZHRoIiwyMCkuYXR0cigiaGVpZ2h0IiwyMCkuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQtaGlnaGxpZ2h0JHtpJU9wfSAke259LW91dGVyYCksdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixyLngtNikuYXR0cigieSIsci55LTYpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQke2klT3B9ICR7bn0taW5uZXJgKTtlbHNlIGlmKGE9PT1Lci5DSEVSUllfUElDSyl0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCkuYXR0cigiY3kiLHIueSkuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7ZS5pZH0gJHtufWApLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsci54LTMpLmF0dHIoImN5IixyLnkrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCszKS5hdHRyKCJjeSIsci55KzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54KzMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54LTMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCk7ZWxzZXtsZXQgcz10LmFwcGVuZCgiY2lyY2xlIik7aWYocy5hdHRyKCJjeCIsci54KSxzLmF0dHIoImN5IixyLnkpLHMuYXR0cigiciIsZS50eXBlPT09S3IuTUVSR0U/OToxMCkscy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9IGNvbW1pdCR7aSVPcH1gKSxhPT09S3IuTUVSR0Upe2xldCBsPXQuYXBwZW5kKCJjaXJjbGUiKTtsLmF0dHIoImN4IixyLngpLGwuYXR0cigiY3kiLHIueSksbC5hdHRyKCJyIiw2KSxsLmF0dHIoImNsYXNzIixgY29tbWl0ICR7bn0gJHtlLmlkfSBjb21taXQke2klT3B9YCl9YT09PUtyLlJFVkVSU0UmJnQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtyLngtNX0sJHtyLnktNX1MJHtyLngrNX0sJHtyLnkrNX1NJHtyLngtNX0sJHtyLnkrNX1MJHtyLngrNX0sJHtyLnktNX1gKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke259ICR7ZS5pZH0gY29tbWl0JHtpJU9wfWApfX0sImRyYXdDb21taXRCdWxsZXQiKSxUR2U9bygodCxlLHIsbik9PntpZihlLnR5cGUhPT1Lci5DSEVSUllfUElDSyYmKGUuY3VzdG9tSWQmJmUudHlwZT09PUtyLk1FUkdFfHxlLnR5cGUhPT1Lci5NRVJHRSkmJmVsPy5zaG93Q29tbWl0TGFiZWwpe2xldCBpPXQuYXBwZW5kKCJnIiksYT1pLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLHM9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixyLnkrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChlLmlkKSxsPXMubm9kZSgpPy5nZXRCQm94KCk7aWYobCYmKGEuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMi1adSkuYXR0cigieSIsci55KzEzLjUpLmF0dHIoIndpZHRoIixsLndpZHRoKzIqWnUpLmF0dHIoImhlaWdodCIsbC5oZWlnaHQrMipadSksRnI9PT0iVEIifHxGcj09PSJCVCI/KGEuYXR0cigieCIsci54LShsLndpZHRoKzQqV2MrNSkpLmF0dHIoInkiLHIueS0xMikscy5hdHRyKCJ4IixyLngtKGwud2lkdGgrNCpXYykpLmF0dHIoInkiLHIueStsLmhlaWdodC0xMikpOnMuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMiksZWwucm90YXRlQ29tbWl0TGFiZWwpKWlmKEZyPT09IlRCInx8RnI9PT0iQlQiKXMuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKC00NSwgIityLngrIiwgIityLnkrIikiKSxhLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrci54KyIsICIrci55KyIpIik7ZWxzZXtsZXQgdT0tNy41LShsLndpZHRoKzEwKS8yNSo5LjUsaD0xMCtsLndpZHRoLzI1KjguNTtpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwgIitoKyIpIHJvdGF0ZSgtNDUsICIrbisiLCAiK3IueSsiKSIpfX19LCJkcmF3Q29tbWl0TGFiZWwiKSx3R2U9bygodCxlLHIsbik9PntpZihlLnRhZ3MubGVuZ3RoPjApe2xldCBpPTAsYT0wLHM9MCxsPVtdO2ZvcihsZXQgdSBvZiBlLnRhZ3MucmV2ZXJzZSgpKXtsZXQgaD10Lmluc2VydCgicG9seWdvbiIpLGY9dC5hcHBlbmQoImNpcmNsZSIpLGQ9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixyLnktMTYtaSkuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwiKS50ZXh0KHUpLHA9ZC5ub2RlKCk/LmdldEJCb3goKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIlRhZyBiYm94IG5vdCBmb3VuZCIpO2E9TWF0aC5tYXgoYSxwLndpZHRoKSxzPU1hdGgubWF4KHMscC5oZWlnaHQpLGQuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LXAud2lkdGgvMiksbC5wdXNoKHt0YWc6ZCxob2xlOmYscmVjdDpoLHlPZmZzZXQ6aX0pLGkrPTIwfWZvcihsZXR7dGFnOnUsaG9sZTpoLHJlY3Q6Zix5T2Zmc2V0OmR9b2YgbCl7bGV0IHA9cy8yLG09ci55LTE5LjItZDtpZihmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAke24tYS8yLVdjLzJ9LCR7bStadX0gIAogICAgICAke24tYS8yLVdjLzJ9LCR7bS1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVdjfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1djfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1djfSwke20rcCtadX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVdjfSwke20rcCtadX1gKSxoLmF0dHIoImN5IixtKS5hdHRyKCJjeCIsbi1hLzIrV2MvMikuYXR0cigiciIsMS41KS5hdHRyKCJjbGFzcyIsInRhZy1ob2xlIiksRnI9PT0iVEIifHxGcj09PSJCVCIpe2xldCBnPW4rZDtmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICR7ci54fSwke2crMn0KICAgICAgICAke3IueH0sJHtnLTJ9CiAgICAgICAgJHtyLngra2Z9LCR7Zy1wLTJ9CiAgICAgICAgJHtyLngra2YrYSs0fSwke2ctcC0yfQogICAgICAgICR7ci54K2tmK2ErNH0sJHtnK3ArMn0KICAgICAgICAke3IueCtrZn0sJHtnK3ArMn1gKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIityLngrIiwiK24rIikiKSxoLmF0dHIoImN4IixyLngrV2MvMikuYXR0cigiY3kiLGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK3IueCsiLCIrbisiKSIpLHUuYXR0cigieCIsci54KzUpLmF0dHIoInkiLGcrMykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0LDE0KSByb3RhdGUoNDUsICIrci54KyIsIituKyIpIil9fX19LCJkcmF3Q29tbWl0VGFncyIpLGtHZT1vKHQ9Pntzd2l0Y2godC5jdXN0b21UeXBlPz90LnR5cGUpe2Nhc2UgS3IuTk9STUFMOnJldHVybiJjb21taXQtbm9ybWFsIjtjYXNlIEtyLlJFVkVSU0U6cmV0dXJuImNvbW1pdC1yZXZlcnNlIjtjYXNlIEtyLkhJR0hMSUdIVDpyZXR1cm4iY29tbWl0LWhpZ2hsaWdodCI7Y2FzZSBLci5NRVJHRTpyZXR1cm4iY29tbWl0LW1lcmdlIjtjYXNlIEtyLkNIRVJSWV9QSUNLOnJldHVybiJjb21taXQtY2hlcnJ5LXBpY2siO2RlZmF1bHQ6cmV0dXJuImNvbW1pdC1ub3JtYWwifX0sImdldENvbW1pdENsYXNzVHlwZSIpLEVHZT1vKCh0LGUscixuKT0+e2xldCBpPXt4OjAseTowfTtpZih0LnBhcmVudHMubGVuZ3RoPjApe2xldCBhPWtoZSh0LnBhcmVudHMpO2lmKGEpe2xldCBzPW4uZ2V0KGEpPz9pO3JldHVybiBlPT09IlRCIj9zLnkrRWY6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LUVmOnMueCtFZn19ZWxzZSByZXR1cm4gZT09PSJUQiI/QVM6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LUVmOjA7cmV0dXJuIDB9LCJjYWxjdWxhdGVQb3NpdGlvbiIpLFNHZT1vKCh0LGUscik9PntsZXQgbj1Gcj09PSJCVCImJnI/ZTplK2tmLGk9RnI9PT0iVEIifHxGcj09PSJCVCI/bjpIcy5nZXQodC5icmFuY2gpPy5wb3MsYT1Gcj09PSJUQiJ8fEZyPT09IkJUIj9Icy5nZXQodC5icmFuY2gpPy5wb3M6bjtpZihhPT09dm9pZCAwfHxpPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgUG9zaXRpb24gd2VyZSB1bmRlZmluZWQgZm9yIGNvbW1pdCAke3QuaWR9YCk7cmV0dXJue3g6YSx5OmkscG9zV2l0aE9mZnNldDpufX0sImdldENvbW1pdFBvc2l0aW9uIiksVGhlPW8oKHQsZSxyKT0+e2lmKCFlbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgbj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxpPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIiksYT1Gcj09PSJUQiJ8fEZyPT09IkJUIj9BUzowLHM9Wy4uLmUua2V5cygpXSxsPWVsPy5wYXJhbGxlbENvbW1pdHM/PyExLHU9bygoZixkKT0+e2xldCBwPWUuZ2V0KGYpPy5zZXEsbT1lLmdldChkKT8uc2VxO3JldHVybiBwIT09dm9pZCAwJiZtIT09dm9pZCAwP3AtbTowfSwic29ydEtleXMiKSxoPXMuc29ydCh1KTtGcj09PSJCVCImJihsJiZtR2UoaCxlLGEpLGg9aC5yZXZlcnNlKCkpLGguZm9yRWFjaChmPT57bGV0IGQ9ZS5nZXQoZik7aWYoIWQpdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtmfWApO2wmJihhPUVHZShkLEZyLGEsV3MpKTtsZXQgcD1TR2UoZCxhLGwpO2lmKHIpe2xldCBtPWtHZShkKSxnPWQuY3VzdG9tVHlwZT8/ZC50eXBlLHk9SHMuZ2V0KGQuYnJhbmNoKT8uaW5kZXg/PzA7YkdlKG4sZCxwLG0seSxnKSxUR2UoaSxkLHAsYSksd0dlKGksZCxwLGEpfUZyPT09IlRCInx8RnI9PT0iQlQiP1dzLnNldChkLmlkLHt4OnAueCx5OnAucG9zV2l0aE9mZnNldH0pOldzLnNldChkLmlkLHt4OnAucG9zV2l0aE9mZnNldCx5OnAueX0pLGE9RnI9PT0iQlQiJiZsP2ErRWY6YStFZitrZixhPndmJiYod2Y9YSl9KX0sImRyYXdDb21taXRzIiksQ0dlPW8oKHQsZSxyLG4saSk9PntsZXQgcz0oRnI9PT0iVEIifHxGcj09PSJCVCI/ci54PG4ueDpyLnk8bi55KT9lLmJyYW5jaDp0LmJyYW5jaCxsPW8oaD0+aC5icmFuY2g9PT1zLCJpc09uQnJhbmNoVG9HZXRDdXJ2ZSIpLHU9byhoPT5oLnNlcT50LnNlcSYmaC5zZXE8ZS5zZXEsImlzQmV0d2VlbkNvbW1pdHMiKTtyZXR1cm5bLi4uaS52YWx1ZXMoKV0uc29tZShoPT51KGgpJiZsKGgpKX0sInNob3VsZFJlcm91dGVBcnJvdyIpLFNiPW8oKHQsZSxyPTApPT57bGV0IG49dCtNYXRoLmFicyh0LWUpLzI7aWYocj41KXJldHVybiBuO2lmKF9TLmV2ZXJ5KHM9Pk1hdGguYWJzKHMtbik+PTEwKSlyZXR1cm4gX1MucHVzaChuKSxuO2xldCBhPU1hdGguYWJzKHQtZSk7cmV0dXJuIFNiKHQsZS1hLzUscisxKX0sImZpbmRMYW5lIiksQUdlPW8oKHQsZSxyLG4pPT57bGV0IGk9V3MuZ2V0KGUuaWQpLGE9V3MuZ2V0KHIuaWQpO2lmKGk9PT12b2lkIDB8fGE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDb21taXQgcG9zaXRpb25zIG5vdCBmb3VuZCBmb3IgY29tbWl0cyAke2UuaWR9IGFuZCAke3IuaWR9YCk7bGV0IHM9Q0dlKGUscixpLGEsbiksbD0iIix1PSIiLGg9MCxmPTAsZD1Icy5nZXQoci5icmFuY2gpPy5pbmRleDtyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXSYmKGQ9SHMuZ2V0KGUuYnJhbmNoKT8uaW5kZXgpO2xldCBwO2lmKHMpe2w9IkEgMTAgMTAsIDAsIDAsIDAsIix1PSJBIDEwIDEwLCAwLCAwLCAxLCIsaD0xMCxmPTEwO2xldCBtPWkueTxhLnk/U2IoaS55LGEueSk6U2IoYS55LGkueSksZz1pLng8YS54P1NiKGkueCxhLngpOlNiKGEueCxpLngpO0ZyPT09IlRCIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHt1fSAke2d9ICR7aS55K2Z9IEwgJHtnfSAke2EueS1ofSAke2x9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Icy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7bH0gJHtnfSAke2kueStmfSBMICR7Z30gJHthLnktaH0gJHt1fSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOkZyPT09IkJUIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHtsfSAke2d9ICR7aS55LWZ9IEwgJHtnfSAke2EueStofSAke3V9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Icy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7dX0gJHtnfSAke2kueS1mfSBMICR7Z30gJHthLnkraH0gJHtsfSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOmkueTxhLnk/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7bS1ofSAke2x9ICR7aS54K2Z9ICR7bX0gTCAke2EueC1ofSAke219ICR7dX0gJHthLnh9ICR7bStmfSBMICR7YS54fSAke2EueX1gOihkPUhzLmdldChlLmJyYW5jaCk/LmluZGV4LHA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke20raH0gJHt1fSAke2kueCtmfSAke219IEwgJHthLngtaH0gJHttfSAke2x9ICR7YS54fSAke20tZn0gTCAke2EueH0gJHthLnl9YCl9ZWxzZSBsPSJBIDIwIDIwLCAwLCAwLCAwLCIsdT0iQSAyMCAyMCwgMCwgMCwgMSwiLGg9MjAsZj0yMCxGcj09PSJUQiI/KGkueDxhLngmJihyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YCksaS54PmEueCYmKGw9IkEgMjAgMjAsIDAsIDAsIDAsIix1PSJBIDIwIDIwLCAwLCAwLCAxLCIsaD0yMCxmPTIwLHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueS1ofSAke3V9ICR7aS54LWZ9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54K2h9ICR7aS55fSAke2x9ICR7YS54fSAke2kueStmfSBMICR7YS54fSAke2EueX1gKSxpLng9PT1hLngmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpOkZyPT09IkJUIj8oaS54PGEueCYmKHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gKSxpLng+YS54JiYobD0iQSAyMCAyMCwgMCwgMCwgMCwiLHU9IkEgMjAgMjAsIDAsIDAsIDEsIixoPTIwLGY9MjAsci50eXBlPT09S3IuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55K2h9ICR7bH0gJHtpLngtZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngtaH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55LWZ9IEwgJHthLnh9ICR7YS55fWApLGkueD09PWEueCYmKHA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54fSAke2EueX1gKSk6KGkueTxhLnkmJihyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YCksaS55PmEueSYmKHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gKSxpLnk9PT1hLnkmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpO2lmKHA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJMaW5lIGRlZmluaXRpb24gbm90IGZvdW5kIik7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwKS5hdHRyKCJjbGFzcyIsImFycm93IGFycm93IitkJU9wKX0sImRyYXdBcnJvdyIpLF9HZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtbLi4uZS5rZXlzKCldLmZvckVhY2gobj0+e2xldCBpPWUuZ2V0KG4pO2kucGFyZW50cyYmaS5wYXJlbnRzLmxlbmd0aD4wJiZpLnBhcmVudHMuZm9yRWFjaChhPT57QUdlKHIsZS5nZXQoYSksaSxlKX0pfSl9LCJkcmF3QXJyb3dzIiksREdlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgiZyIpO2UuZm9yRWFjaCgobixpKT0+e2xldCBhPWklT3Ascz1Icy5nZXQobi5uYW1lKT8ucG9zO2lmKHM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiBub3QgZm91bmQgZm9yIGJyYW5jaCAke24ubmFtZX1gKTtsZXQgbD1yLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLDApLGwuYXR0cigieTEiLHMpLGwuYXR0cigieDIiLHdmKSxsLmF0dHIoInkyIixzKSxsLmF0dHIoImNsYXNzIiwiYnJhbmNoIGJyYW5jaCIrYSksRnI9PT0iVEIiPyhsLmF0dHIoInkxIixBUyksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsd2YpLGwuYXR0cigieDIiLHMpKTpGcj09PSJCVCImJihsLmF0dHIoInkxIix3ZiksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsQVMpLGwuYXR0cigieDIiLHMpKSxfUy5wdXNoKHMpO2xldCB1PW4ubmFtZSxoPXdoZSh1KSxmPXIuaW5zZXJ0KCJyZWN0IikscD1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYSk7cC5ub2RlKCkuYXBwZW5kQ2hpbGQoaCk7bGV0IG09aC5nZXRCQm94KCk7Zi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIithKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC1tLndpZHRoLTQtKGVsPy5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5IiwtbS5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCs0KSxwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtbS53aWR0aC0xNC0oZWw/LnJvdGF0ZUNvbW1pdExhYmVsPT09ITA/MzA6MCkpKyIsICIrKHMtbS5oZWlnaHQvMi0xKSsiKSIpLEZyPT09IlRCIj8oZi5hdHRyKCJ4IixzLW0ud2lkdGgvMi0xMCkuYXR0cigieSIsMCkscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgMCkiKSk6RnI9PT0iQlQiPyhmLmF0dHIoIngiLHMtbS53aWR0aC8yLTEwKS5hdHRyKCJ5Iix3ZikscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgIit3ZisiKSIpKTpmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKHMtbS5oZWlnaHQvMikrIikiKX0pfSwiZHJhd0JyYW5jaGVzIiksTEdlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gSHMuc2V0KHQse3BvczplLGluZGV4OnJ9KSxlKz01MCsoaT80MDowKSsoRnI9PT0iVEIifHxGcj09PSJCVCI/bi53aWR0aC8yOjApLGV9LCJzZXRCcmFuY2hQb3NpdGlvbiIpLFJHZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKGRHZSgpLFguZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0K2AKYCwiaWQ6IixlLHIpLCFlbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgaT1lbC5yb3RhdGVDb21taXRMYWJlbD8/ITEsYT1uLmRiO0ViPWEuZ2V0Q29tbWl0cygpO2xldCBzPWEuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7RnI9YS5nZXREaXJlY3Rpb24oKTtsZXQgbD1HZShgW2lkPSIke2V9Il1gKSx1PTA7cy5mb3JFYWNoKChoLGYpPT57bGV0IGQ9d2hlKGgubmFtZSkscD1sLmFwcGVuZCgiZyIpLG09cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksZz1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7Zy5ub2RlKCk/LmFwcGVuZENoaWxkKGQpO2xldCB5PWQuZ2V0QkJveCgpO3U9TEdlKGgubmFtZSx1LGYseSxpKSxnLnJlbW92ZSgpLG0ucmVtb3ZlKCkscC5yZW1vdmUoKX0pLFRoZShsLEViLCExKSxlbC5zaG93QnJhbmNoZXMmJkRHZShsLHMpLF9HZShsLEViKSxUaGUobCxFYiwhMCksVnQuaW5zZXJ0VGl0bGUobCwiZ2l0VGl0bGVUZXh0IixlbC50aXRsZVRvcE1hcmdpbj8/MCxhLmdldERpYWdyYW1UaXRsZSgpKSxBQSh2b2lkIDAsbCxlbC5kaWFncmFtUGFkZGluZyxlbC51c2VNYXhXaWR0aCl9LCJkcmF3IiksRWhlPXtkcmF3OlJHZX19KTt2YXIgTkdlLENoZSxBaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtOR2U9byh0PT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChlPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7ZX0geyBmaWxsOiAke3RbImdpdEJyYW5jaExhYmVsIitlXX07IH0KICAgICAgICAuY29tbWl0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXQiK2VdfTsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXRJbnYiK2VdfTsgZmlsbDogJHt0WyJnaXRJbnYiK2VdfTsgfQogICAgICAgIC5sYWJlbCR7ZX0gIHsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5hcnJvdyR7ZX0geyBzdHJva2U6ICR7dFsiZ2l0IitlXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7dC5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHt0LmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHt0LmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke3QuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHt0LnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke3QudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHt0LnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHt0LnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7dC50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHt0LnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke3QucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KYCwiZ2V0U3R5bGVzIiksQ2hlPU5HZX0pO3ZhciBfaGU9e307dXIoX2hlLHtkaWFncmFtOigpPT5NR2V9KTt2YXIgTUdlLERoZT1OKCgpPT57InVzZSBzdHJpY3QiO2JoZSgpO19PKCk7U2hlKCk7QWhlKCk7TUdlPXtwYXJzZXI6eGhlLGRiOkNTLHJlbmRlcmVyOkVoZSxzdHlsZXM6Q2hlfX0pO3ZhciBETyxOaGUsTWhlPU4oKCk9PnsidXNlIHN0cmljdCI7RE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEwsQSxJLE0pe2ZvcihJPUl8fHt9LE09TC5sZW5ndGg7TS0tO0lbTFtNXV09QSk7cmV0dXJuIEl9LCJvIiksZT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM4LDQwXSxyPVsxLDI2XSxuPVsxLDI3XSxpPVsxLDI4XSxhPVsxLDI5XSxzPVsxLDMwXSxsPVsxLDMxXSx1PVsxLDMyXSxoPVsxLDMzXSxmPVsxLDM0XSxkPVsxLDldLHA9WzEsMTBdLG09WzEsMTFdLGc9WzEsMTJdLHk9WzEsMTNdLHY9WzEsMTRdLHg9WzEsMTVdLGI9WzEsMTZdLFQ9WzEsMTldLFM9WzEsMjBdLHc9WzEsMjFdLEU9WzEsMjJdLF89WzEsMjNdLEM9WzEsMjVdLEQ9WzEsMzVdLE89e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ2FudHQ6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5MOjEwLHdlZWtkYXk6MTEsd2Vla2RheV9tb25kYXk6MTIsd2Vla2RheV90dWVzZGF5OjEzLHdlZWtkYXlfd2VkbmVzZGF5OjE0LHdlZWtkYXlfdGh1cnNkYXk6MTUsd2Vla2RheV9mcmlkYXk6MTYsd2Vla2RheV9zYXR1cmRheToxNyx3ZWVrZGF5X3N1bmRheToxOCx3ZWVrZW5kOjE5LHdlZWtlbmRfZnJpZGF5OjIwLHdlZWtlbmRfc2F0dXJkYXk6MjEsZGF0ZUZvcm1hdDoyMixpbmNsdXNpdmVFbmREYXRlczoyMyx0b3BBeGlzOjI0LGF4aXNGb3JtYXQ6MjUsdGlja0ludGVydmFsOjI2LGV4Y2x1ZGVzOjI3LGluY2x1ZGVzOjI4LHRvZGF5TWFya2VyOjI5LHRpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LHNlY3Rpb246MzYsY2xpY2tTdGF0ZW1lbnQ6MzcsdGFza1R4dDozOCx0YXNrRGF0YTozOSxjbGljazo0MCxjYWxsYmFja25hbWU6NDEsY2FsbGJhY2thcmdzOjQyLGhyZWY6NDMsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0NCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDIwOiJ3ZWVrZW5kX2ZyaWRheSIsMjE6IndlZWtlbmRfc2F0dXJkYXkiLDIyOiJkYXRlRm9ybWF0IiwyMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDI0OiJ0b3BBeGlzIiwyNToiYXhpc0Zvcm1hdCIsMjY6InRpY2tJbnRlcnZhbCIsMjc6ImV4Y2x1ZGVzIiwyODoiaW5jbHVkZXMiLDI5OiJ0b2RheU1hcmtlciIsMzA6InRpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6InNlY3Rpb24iLDM4OiJ0YXNrVHh0IiwzOToidGFza0RhdGEiLDQwOiJjbGljayIsNDE6ImNhbGxiYWNrbmFtZSIsNDI6ImNhbGxiYWNrYXJncyIsNDM6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxOSwxXSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzM3LDJdLFszNywzXSxbMzcsM10sWzM3LDRdLFszNywzXSxbMzcsNF0sWzM3LDJdLFs0NCwyXSxbNDQsM10sWzQ0LDNdLFs0NCw0XSxbNDQsM10sWzQ0LDRdLFs0NCwyXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEEsSSxNLFAsQixGLHope3ZhciAkPUYubGVuZ3RoLTE7c3dpdGNoKEIpe2Nhc2UgMTpyZXR1cm4gRlskLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOkZbJC0xXS5wdXNoKEZbJF0pLHRoaXMuJD1GWyQtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9RlskXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6UC5zZXRXZWVrZGF5KCJtb25kYXkiKTticmVhaztjYXNlIDk6UC5zZXRXZWVrZGF5KCJ0dWVzZGF5Iik7YnJlYWs7Y2FzZSAxMDpQLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6UC5zZXRXZWVrZGF5KCJ0aHVyc2RheSIpO2JyZWFrO2Nhc2UgMTI6UC5zZXRXZWVrZGF5KCJmcmlkYXkiKTticmVhaztjYXNlIDEzOlAuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OlAuc2V0V2Vla2RheSgic3VuZGF5Iik7YnJlYWs7Y2FzZSAxNTpQLnNldFdlZWtlbmQoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTY6UC5zZXRXZWVrZW5kKCJzYXR1cmRheSIpO2JyZWFrO2Nhc2UgMTc6UC5zZXREYXRlRm9ybWF0KEZbJF0uc3Vic3RyKDExKSksdGhpcy4kPUZbJF0uc3Vic3RyKDExKTticmVhaztjYXNlIDE4OlAuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9RlskXS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTk6UC5Ub3BBeGlzKCksdGhpcy4kPUZbJF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjA6UC5zZXRBeGlzRm9ybWF0KEZbJF0uc3Vic3RyKDExKSksdGhpcy4kPUZbJF0uc3Vic3RyKDExKTticmVhaztjYXNlIDIxOlAuc2V0VGlja0ludGVydmFsKEZbJF0uc3Vic3RyKDEzKSksdGhpcy4kPUZbJF0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIyOlAuc2V0RXhjbHVkZXMoRlskXS5zdWJzdHIoOSkpLHRoaXMuJD1GWyRdLnN1YnN0cig5KTticmVhaztjYXNlIDIzOlAuc2V0SW5jbHVkZXMoRlskXS5zdWJzdHIoOSkpLHRoaXMuJD1GWyRdLnN1YnN0cig5KTticmVhaztjYXNlIDI0OlAuc2V0VG9kYXlNYXJrZXIoRlskXS5zdWJzdHIoMTIpKSx0aGlzLiQ9RlskXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjc6UC5zZXREaWFncmFtVGl0bGUoRlskXS5zdWJzdHIoNikpLHRoaXMuJD1GWyRdLnN1YnN0cig2KTticmVhaztjYXNlIDI4OnRoaXMuJD1GWyRdLnRyaW0oKSxQLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1GWyRdLnRyaW0oKSxQLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpQLmFkZFNlY3Rpb24oRlskXS5zdWJzdHIoOCkpLHRoaXMuJD1GWyRdLnN1YnN0cig4KTticmVhaztjYXNlIDMzOlAuYWRkVGFzayhGWyQtMV0sRlskXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDM0OnRoaXMuJD1GWyQtMV0sUC5zZXRDbGlja0V2ZW50KEZbJC0xXSxGWyRdLG51bGwpO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUZbJC0yXSxQLnNldENsaWNrRXZlbnQoRlskLTJdLEZbJC0xXSxGWyRdKTticmVhaztjYXNlIDM2OnRoaXMuJD1GWyQtMl0sUC5zZXRDbGlja0V2ZW50KEZbJC0yXSxGWyQtMV0sbnVsbCksUC5zZXRMaW5rKEZbJC0yXSxGWyRdKTticmVhaztjYXNlIDM3OnRoaXMuJD1GWyQtM10sUC5zZXRDbGlja0V2ZW50KEZbJC0zXSxGWyQtMl0sRlskLTFdKSxQLnNldExpbmsoRlskLTNdLEZbJF0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPUZbJC0yXSxQLnNldENsaWNrRXZlbnQoRlskLTJdLEZbJF0sbnVsbCksUC5zZXRMaW5rKEZbJC0yXSxGWyQtMV0pO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPUZbJC0zXSxQLnNldENsaWNrRXZlbnQoRlskLTNdLEZbJC0xXSxGWyRdKSxQLnNldExpbmsoRlskLTNdLEZbJC0yXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9RlskLTFdLFAuc2V0TGluayhGWyQtMV0sRlskXSk7YnJlYWs7Y2FzZSA0MTpjYXNlIDQ3OnRoaXMuJD1GWyQtMV0rIiAiK0ZbJF07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDU6dGhpcy4kPUZbJC0yXSsiICIrRlskLTFdKyIgIitGWyRdO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0Njp0aGlzLiQ9RlskLTNdKyIgIitGWyQtMl0rIiAiK0ZbJC0xXSsiICIrRlskXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDpULDMxOlMsMzM6dywzNTpFLDM2Ol8sMzc6MjQsMzg6Qyw0MDpEfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjM2LDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDpULDMxOlMsMzM6dywzNTpFLDM2Ol8sMzc6MjQsMzg6Qyw0MDpEfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDE3XSksdChlLFsyLDE4XSksdChlLFsyLDE5XSksdChlLFsyLDIwXSksdChlLFsyLDIxXSksdChlLFsyLDIyXSksdChlLFsyLDIzXSksdChlLFsyLDI0XSksdChlLFsyLDI1XSksdChlLFsyLDI2XSksdChlLFsyLDI3XSksezMyOlsxLDM3XX0sezM0OlsxLDM4XX0sdChlLFsyLDMwXSksdChlLFsyLDMxXSksdChlLFsyLDMyXSksezM5OlsxLDM5XX0sdChlLFsyLDhdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pLHQoZSxbMiwxMV0pLHQoZSxbMiwxMl0pLHQoZSxbMiwxM10pLHQoZSxbMiwxNF0pLHQoZSxbMiwxNV0pLHQoZSxbMiwxNl0pLHs0MTpbMSw0MF0sNDM6WzEsNDFdfSx0KGUsWzIsNF0pLHQoZSxbMiwyOF0pLHQoZSxbMiwyOV0pLHQoZSxbMiwzM10pLHQoZSxbMiwzNF0sezQyOlsxLDQyXSw0MzpbMSw0M119KSx0KGUsWzIsNDBdLHs0MTpbMSw0NF19KSx0KGUsWzIsMzVdLHs0MzpbMSw0NV19KSx0KGUsWzIsMzZdKSx0KGUsWzIsMzhdLHs0MjpbMSw0Nl19KSx0KGUsWzIsMzddKSx0KGUsWzIsMzldKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEEsSSl7aWYoSS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEEpO2Vsc2V7dmFyIE09bmV3IEVycm9yKEEpO3Rocm93IE0uaGFzaD1JLE19fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oQSl7dmFyIEk9dGhpcyxNPVswXSxQPVtdLEI9W251bGxdLEY9W10sej10aGlzLnRhYmxlLCQ9IiIsVT0wLEs9MCxlZT0wLFk9MixjZT0xLFo9Ri5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx1ZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFE9e3l5Ont9fTtmb3IodmFyIGogaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxqKSYmKFEueXlbal09dGhpcy55eVtqXSk7dWUuc2V0SW5wdXQoQSxRLnl5KSxRLnl5LmxleGVyPXVlLFEueXkucGFyc2VyPXRoaXMsdHlwZW9mIHVlLnl5bGxvYz4idSImJih1ZS55eWxsb2M9e30pO3ZhciBuZT11ZS55eWxsb2M7Ri5wdXNoKG5lKTt2YXIgdGU9dWUub3B0aW9ucyYmdWUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFEueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9US55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBoZShxKXtNLmxlbmd0aD1NLmxlbmd0aC0yKnEsQi5sZW5ndGg9Qi5sZW5ndGgtcSxGLmxlbmd0aD1GLmxlbmd0aC1xfW8oaGUsInBvcFN0YWNrIik7ZnVuY3Rpb24gbGUoKXt2YXIgcTtyZXR1cm4gcT1QLnBvcCgpfHx1ZS5sZXgoKXx8Y2UsdHlwZW9mIHEhPSJudW1iZXIiJiYocSBpbnN0YW5jZW9mIEFycmF5JiYoUD1xLHE9UC5wb3AoKSkscT1JLnN5bWJvbHNfW3FdfHxxKSxxfW8obGUsImxleCIpO2Zvcih2YXIgSixTZSxzZSxhZSxPZSx5ZSxCZT17fSxIZSx6ZSxMZSxJZTs7KXtpZihzZT1NW00ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbc2VdP2FlPXRoaXMuZGVmYXVsdEFjdGlvbnNbc2VdOigoSj09PW51bGx8fHR5cGVvZiBKPiJ1IikmJihKPWxlKCkpLGFlPXpbc2VdJiZ6W3NlXVtKXSksdHlwZW9mIGFlPiJ1Inx8IWFlLmxlbmd0aHx8IWFlWzBdKXt2YXIgeGU9IiI7SWU9W107Zm9yKEhlIGluIHpbc2VdKXRoaXMudGVybWluYWxzX1tIZV0mJkhlPlkmJkllLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tIZV0rIiciKTt1ZS5zaG93UG9zaXRpb24/eGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVSsxKStgOgpgK3VlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArSWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tKXXx8SikrIiciOnhlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrIjogVW5leHBlY3RlZCAiKyhKPT1jZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tKXXx8SikrIiciKSx0aGlzLnBhcnNlRXJyb3IoeGUse3RleHQ6dWUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0pdfHxKLGxpbmU6dWUueXlsaW5lbm8sbG9jOm5lLGV4cGVjdGVkOkllfSl9aWYoYWVbMF1pbnN0YW5jZW9mIEFycmF5JiZhZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3NlKyIsIHRva2VuOiAiK0opO3N3aXRjaChhZVswXSl7Y2FzZSAxOk0ucHVzaChKKSxCLnB1c2godWUueXl0ZXh0KSxGLnB1c2godWUueXlsbG9jKSxNLnB1c2goYWVbMV0pLEo9bnVsbCxTZT8oSj1TZSxTZT1udWxsKTooSz11ZS55eWxlbmcsJD11ZS55eXRleHQsVT11ZS55eWxpbmVubyxuZT11ZS55eWxsb2MsZWU+MCYmZWUtLSk7YnJlYWs7Y2FzZSAyOmlmKHplPXRoaXMucHJvZHVjdGlvbnNfW2FlWzFdXVsxXSxCZS4kPUJbQi5sZW5ndGgtemVdLEJlLl8kPXtmaXJzdF9saW5lOkZbRi5sZW5ndGgtKHplfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6RltGLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkZbRi5sZW5ndGgtKHplfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkZbRi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHRlJiYoQmUuXyQucmFuZ2U9W0ZbRi5sZW5ndGgtKHplfHwxKV0ucmFuZ2VbMF0sRltGLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHllPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShCZSxbJCxLLFUsUS55eSxhZVsxXSxCLEZdLmNvbmNhdChaKSksdHlwZW9mIHllPCJ1IilyZXR1cm4geWU7emUmJihNPU0uc2xpY2UoMCwtMSp6ZSoyKSxCPUIuc2xpY2UoMCwtMSp6ZSksRj1GLnNsaWNlKDAsLTEqemUpKSxNLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWVbMV1dWzBdKSxCLnB1c2goQmUuJCksRi5wdXNoKEJlLl8kKSxMZT16W01bTS5sZW5ndGgtMl1dW01bTS5sZW5ndGgtMV1dLE0ucHVzaChMZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFI9ZnVuY3Rpb24oKXt2YXIgTD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEksTSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihJLE0pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEkpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy55eT1JfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1BLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUEsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUEsdGhpcy5tYXRjaGVkKz1BO3ZhciBJPUEubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxBfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEEpe3ZhciBJPUEubGVuZ3RoLE09QS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUErdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUkpLHRoaXMub2Zmc2V0LT1JO3ZhciBQPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLE0ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1NLmxlbmd0aC0xKTt2YXIgQj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46TT8oTS5sZW5ndGg9PT1QLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrUFtQLmxlbmd0aC1NLmxlbmd0aF0ubGVuZ3RoLU1bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1JfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0JbMF0sQlswXSt0aGlzLnl5bGVuZy1JXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oQSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEEpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBBPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQS5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Euc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgQT10aGlzLm1hdGNoO3JldHVybiBBLmxlbmd0aDwyMCYmKEErPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUEubGVuZ3RoKSksKEEuc3Vic3RyKDAsMjApKyhBLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5wYXN0SW5wdXQoKSxJPW5ldyBBcnJheShBLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEErdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0krIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEEsSSl7dmFyIE0sUCxCO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihCPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEIueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUD1BWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQJiYodGhpcy55eWxpbmVubys9UC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQP1BbUC5sZW5ndGgtMV0ubGVuZ3RoLVBbUC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitBWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUFbMF0sdGhpcy5tYXRjaCs9QVswXSx0aGlzLm1hdGNoZXM9QSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShBWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1BWzBdLE09dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxNKXJldHVybiBNO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGIGluIEIpdGhpc1tGXT1CW0ZdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBBLEksTSxQO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEI9dGhpcy5fY3VycmVudFJ1bGVzKCksRj0wO0Y8Qi5sZW5ndGg7RisrKWlmKE09dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tCW0ZdXSksTSYmKCFJfHxNWzBdLmxlbmd0aD5JWzBdLmxlbmd0aCkpe2lmKEk9TSxQPUYsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQT10aGlzLnRlc3RfbWF0Y2goTSxCW0ZdKSxBIT09ITEpcmV0dXJuIEE7aWYodGhpcy5fYmFja3RyYWNrKXtJPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEk/KEE9dGhpcy50ZXN0X21hdGNoKEksQltQXSksQSE9PSExP0E6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgST10aGlzLm5leHQoKTtyZXR1cm4gSXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oSSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEkpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gST4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEkpe3JldHVybiBJPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoSXx8MCksST49MD90aGlzLmNvbmRpdGlvblN0YWNrW0ldOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oSSl7dGhpcy5iZWdpbihJKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEksTSxQLEIpe3ZhciBGPUI7c3dpdGNoKFApe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwib3Blbl9kaXJlY3RpdmUiO2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMzticmVhaztjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gMTA7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDQzO2Nhc2UgMTc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gNDE7Y2FzZSAyMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gNDI7Y2FzZSAyMzp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIDQwO2Nhc2UgMjY6cmV0dXJuIDQ7Y2FzZSAyNzpyZXR1cm4gMjI7Y2FzZSAyODpyZXR1cm4gMjM7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gMjY7Y2FzZSAzMjpyZXR1cm4gMjg7Y2FzZSAzMzpyZXR1cm4gMjc7Y2FzZSAzNDpyZXR1cm4gMjk7Y2FzZSAzNTpyZXR1cm4gMTI7Y2FzZSAzNjpyZXR1cm4gMTM7Y2FzZSAzNzpyZXR1cm4gMTQ7Y2FzZSAzODpyZXR1cm4gMTU7Y2FzZSAzOTpyZXR1cm4gMTY7Y2FzZSA0MDpyZXR1cm4gMTc7Y2FzZSA0MTpyZXR1cm4gMTg7Y2FzZSA0MjpyZXR1cm4gMjA7Y2FzZSA0MzpyZXR1cm4gMjE7Y2FzZSA0NDpyZXR1cm4iZGF0ZSI7Y2FzZSA0NTpyZXR1cm4gMzA7Y2FzZSA0NjpyZXR1cm4iYWNjRGVzY3JpcHRpb24iO2Nhc2UgNDc6cmV0dXJuIDM2O2Nhc2UgNDg6cmV0dXJuIDM4O2Nhc2UgNDk6cmV0dXJuIDM5O2Nhc2UgNTA6cmV0dXJuIjoiO2Nhc2UgNTE6cmV0dXJuIDY7Y2FzZSA1MjpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzp0aWNrSW50ZXJ2YWxcc1teI1xuO10rKS9pLC9eKD86aW5jbHVkZXNcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzp3ZWVrZGF5XHMrbW9uZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdHVlc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3dlZG5lc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3RodXJzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrZnJpZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc2F0dXJkYXlcYikvaSwvXig/OndlZWtkYXlccytzdW5kYXlcYikvaSwvXig/OndlZWtlbmRccytmcmlkYXlcYikvaSwvXig/OndlZWtlbmRccytzYXR1cmRheVxiKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW15cbl0rKS9pLC9eKD86YWNjRGVzY3JpcHRpb25cc1teI1xuO10rKS9pLC9eKD86c2VjdGlvblxzW15cbl0rKS9pLC9eKD86W146XG5dKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjEsMjJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTgsMTksMjBdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjQsMjVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIzLDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEx9KCk7Ty5sZXhlcj1SO2Z1bmN0aW9uIGsoKXt0aGlzLnl5PXt9fXJldHVybiBvKGssIlBhcnNlciIpLGsucHJvdG90eXBlPU8sTy5QYXJzZXI9ayxuZXcga30oKTtETy5wYXJzZXI9RE87TmhlPURPfSk7dmFyIEloZT1QaSgoTE8sUk8pPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBMTz09Im9iamVjdCImJnR5cGVvZiBSTzwidSI/Uk8uZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX2lzb1dlZWs9ZSgpfSkoTE8sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgaT1vKGZ1bmN0aW9uKGwpe3JldHVybiBsLmFkZCg0LWwuaXNvV2Vla2RheSgpLHQpfSwiYSIpLGE9ci5wcm90b3R5cGU7YS5pc29XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiBpKHRoaXMpLnllYXIoKX0sYS5pc29XZWVrPWZ1bmN0aW9uKGwpe2lmKCF0aGlzLiR1dGlscygpLnUobCkpcmV0dXJuIHRoaXMuYWRkKDcqKGwtdGhpcy5pc29XZWVrKCkpLHQpO3ZhciB1LGgsZixkLHA9aSh0aGlzKSxtPSh1PXRoaXMuaXNvV2Vla1llYXIoKSxoPXRoaXMuJHUsZj0oaD9uLnV0YzpuKSgpLnllYXIodSkuc3RhcnRPZigieWVhciIpLGQ9NC1mLmlzb1dlZWtkYXkoKSxmLmlzb1dlZWtkYXkoKT40JiYoZCs9NyksZi5hZGQoZCx0KSk7cmV0dXJuIHAuZGlmZihtLCJ3ZWVrIikrMX0sYS5pc29XZWVrZGF5PWZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLiR1dGlscygpLnUobCk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/bDpsLTcpfTt2YXIgcz1hLnN0YXJ0T2Y7YS5zdGFydE9mPWZ1bmN0aW9uKGwsdSl7dmFyIGg9dGhpcy4kdXRpbHMoKSxmPSEhaC51KHUpfHx1O3JldHVybiBoLnAobCk9PT0iaXNvd2VlayI/Zj90aGlzLmRhdGUodGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKS5zdGFydE9mKCJkYXkiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoImRheSIpOnMuYmluZCh0aGlzKShsLHUpfX19KX0pO3ZhciBPaGU9UGkoKE5PLE1PKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2YgTk89PSJvYmplY3QiJiZ0eXBlb2YgTU88InUiP01PLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9jdXN0b21QYXJzZUZvcm1hdD1lKCl9KShOTyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGU9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2cscj0vXGQvLG49L1xkXGQvLGk9L1xkXGQ/LyxhPS9cZCpbXi1fOi8sKClcc1xkXSsvLHM9e30sbD1vKGZ1bmN0aW9uKGcpe3JldHVybihnPStnKSsoZz42OD8xOTAwOjJlMyl9LCJhIiksdT1vKGZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih5KXt0aGlzW2ddPSt5fX0sImYiKSxoPVsvWystXVxkXGQ6PyhcZFxkKT98Wi8sZnVuY3Rpb24oZyl7KHRoaXMuem9uZXx8KHRoaXMuem9uZT17fSkpLm9mZnNldD1mdW5jdGlvbih5KXtpZigheXx8eT09PSJaIilyZXR1cm4gMDt2YXIgdj15Lm1hdGNoKC8oWystXXxcZFxkKS9nKSx4PTYwKnZbMV0rKCt2WzJdfHwwKTtyZXR1cm4geD09PTA/MDp2WzBdPT09IisiPy14Onh9KGcpfV0sZj1vKGZ1bmN0aW9uKGcpe3ZhciB5PXNbZ107cmV0dXJuIHkmJih5LmluZGV4T2Y/eTp5LnMuY29uY2F0KHkuZikpfSwidSIpLGQ9byhmdW5jdGlvbihnLHkpe3ZhciB2LHg9cy5tZXJpZGllbTtpZih4KXtmb3IodmFyIGI9MTtiPD0yNDtiKz0xKWlmKGcuaW5kZXhPZih4KGIsMCx5KSk+LTEpe3Y9Yj4xMjticmVha319ZWxzZSB2PWc9PT0oeT8icG0iOiJQTSIpO3JldHVybiB2fSwiZCIpLHA9e0E6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCExKX1dLGE6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCEwKX1dLFE6W3IsZnVuY3Rpb24oZyl7dGhpcy5tb250aD0zKihnLTEpKzF9XSxTOltyLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZ31dLFNTOltuLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitnfV0sU1NTOlsvXGR7M30vLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPStnfV0sczpbaSx1KCJzZWNvbmRzIildLHNzOltpLHUoInNlY29uZHMiKV0sbTpbaSx1KCJtaW51dGVzIildLG1tOltpLHUoIm1pbnV0ZXMiKV0sSDpbaSx1KCJob3VycyIpXSxoOltpLHUoImhvdXJzIildLEhIOltpLHUoImhvdXJzIildLGhoOltpLHUoImhvdXJzIildLEQ6W2ksdSgiZGF5IildLEREOltuLHUoImRheSIpXSxEbzpbYSxmdW5jdGlvbihnKXt2YXIgeT1zLm9yZGluYWwsdj1nLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT12WzBdLHkpZm9yKHZhciB4PTE7eDw9MzE7eCs9MSl5KHgpLnJlcGxhY2UoL1xbfFxdL2csIiIpPT09ZyYmKHRoaXMuZGF5PXgpfV0sdzpbaSx1KCJ3ZWVrIildLHd3OltuLHUoIndlZWsiKV0sTTpbaSx1KCJtb250aCIpXSxNTTpbbix1KCJtb250aCIpXSxNTU06W2EsZnVuY3Rpb24oZyl7dmFyIHk9ZigibW9udGhzIiksdj0oZigibW9udGhzU2hvcnQiKXx8eS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguc2xpY2UoMCwzKX0pKS5pbmRleE9mKGcpKzE7aWYodjwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPXYlMTJ8fHZ9XSxNTU1NOlthLGZ1bmN0aW9uKGcpe3ZhciB5PWYoIm1vbnRocyIpLmluZGV4T2YoZykrMTtpZih5PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9eSUxMnx8eX1dLFk6Wy9bKy1dP1xkKy8sdSgieWVhciIpXSxZWTpbbixmdW5jdGlvbihnKXt0aGlzLnllYXI9bChnKX1dLFlZWVk6Wy9cZHs0fS8sdSgieWVhciIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbShnKXt2YXIgeSx2O3k9Zyx2PXMmJnMuZm9ybWF0cztmb3IodmFyIHg9KGc9eS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKEMsRCxPKXt2YXIgUj1PJiZPLnRvVXBwZXJDYXNlKCk7cmV0dXJuIER8fHZbT118fHRbT118fHZbUl0ucmVwbGFjZSgvKFxbW15cXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZyxmdW5jdGlvbihrLEwsQSl7cmV0dXJuIEx8fEEuc2xpY2UoMSl9KX0pKS5tYXRjaChlKSxiPXgubGVuZ3RoLFQ9MDtUPGI7VCs9MSl7dmFyIFM9eFtUXSx3PXBbU10sRT13JiZ3WzBdLF89dyYmd1sxXTt4W1RdPV8/e3JlZ2V4OkUscGFyc2VyOl99OlMucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oQyl7Zm9yKHZhciBEPXt9LE89MCxSPTA7TzxiO08rPTEpe3ZhciBrPXhbT107aWYodHlwZW9mIGs9PSJzdHJpbmciKVIrPWsubGVuZ3RoO2Vsc2V7dmFyIEw9ay5yZWdleCxBPWsucGFyc2VyLEk9Qy5zbGljZShSKSxNPUwuZXhlYyhJKVswXTtBLmNhbGwoRCxNKSxDPUMucmVwbGFjZShNLCIiKX19cmV0dXJuIGZ1bmN0aW9uKFApe3ZhciBCPVAuYWZ0ZXJub29uO2lmKEIhPT12b2lkIDApe3ZhciBGPVAuaG91cnM7Qj9GPDEyJiYoUC5ob3Vycys9MTIpOkY9PT0xMiYmKFAuaG91cnM9MCksZGVsZXRlIFAuYWZ0ZXJub29ufX0oRCksRH19cmV0dXJuIG8obSwibCIpLGZ1bmN0aW9uKGcseSx2KXt2LnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsZyYmZy5wYXJzZVR3b0RpZ2l0WWVhciYmKGw9Zy5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIHg9eS5wcm90b3R5cGUsYj14LnBhcnNlO3gucGFyc2U9ZnVuY3Rpb24oVCl7dmFyIFM9VC5kYXRlLHc9VC51dGMsRT1ULmFyZ3M7dGhpcy4kdT13O3ZhciBfPUVbMV07aWYodHlwZW9mIF89PSJzdHJpbmciKXt2YXIgQz1FWzJdPT09ITAsRD1FWzNdPT09ITAsTz1DfHxELFI9RVsyXTtEJiYoUj1FWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFDJiZSJiYocz12LkxzW1JdKSx0aGlzLiRkPWZ1bmN0aW9uKEksTSxQLEIpe3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihNKT4tMSlyZXR1cm4gbmV3IERhdGUoKE09PT0iWCI/MWUzOjEpKkkpO3ZhciBGPW0oTSkoSSksej1GLnllYXIsJD1GLm1vbnRoLFU9Ri5kYXksSz1GLmhvdXJzLGVlPUYubWludXRlcyxZPUYuc2Vjb25kcyxjZT1GLm1pbGxpc2Vjb25kcyxaPUYuem9uZSx1ZT1GLndlZWssUT1uZXcgRGF0ZSxqPVV8fCh6fHwkPzE6US5nZXREYXRlKCkpLG5lPXp8fFEuZ2V0RnVsbFllYXIoKSx0ZT0wO3omJiEkfHwodGU9JD4wPyQtMTpRLmdldE1vbnRoKCkpO3ZhciBoZSxsZT1LfHwwLEo9ZWV8fDAsU2U9WXx8MCxzZT1jZXx8MDtyZXR1cm4gWj9uZXcgRGF0ZShEYXRlLlVUQyhuZSx0ZSxqLGxlLEosU2Usc2UrNjAqWi5vZmZzZXQqMWUzKSk6UD9uZXcgRGF0ZShEYXRlLlVUQyhuZSx0ZSxqLGxlLEosU2Usc2UpKTooaGU9bmV3IERhdGUobmUsdGUsaixsZSxKLFNlLHNlKSx1ZSYmKGhlPUIoaGUpLndlZWsodWUpLnRvRGF0ZSgpKSxoZSl9Y2F0Y2h7cmV0dXJuIG5ldyBEYXRlKCIiKX19KFMsXyx3LHYpLHRoaXMuaW5pdCgpLFImJlIhPT0hMCYmKHRoaXMuJEw9dGhpcy5sb2NhbGUoUikuJEwpLE8mJlMhPXRoaXMuZm9ybWF0KF8pJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpLHM9e319ZWxzZSBpZihfIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBrPV8ubGVuZ3RoLEw9MTtMPD1rO0wrPTEpe0VbMV09X1tMLTFdO3ZhciBBPXYuYXBwbHkodGhpcyxFKTtpZihBLmlzVmFsaWQoKSl7dGhpcy4kZD1BLiRkLHRoaXMuJEw9QS4kTCx0aGlzLmluaXQoKTticmVha31MPT09ayYmKHRoaXMuJGQ9bmV3IERhdGUoIiIpKX1lbHNlIGIuY2FsbCh0aGlzLFQpfX19KX0pO3ZhciBQaGU9UGkoKElPLE9PKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2YgSU89PSJvYmplY3QiJiZ0eXBlb2YgT088InUiP09PLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9hZHZhbmNlZEZvcm1hdD1lKCl9KShJTyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1lLnByb3RvdHlwZSxuPXIuZm9ybWF0O3IuZm9ybWF0PWZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMscz10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uYmluZCh0aGlzKShpKTt2YXIgbD10aGlzLiR1dGlscygpLHU9KGl8fCJZWVlZLU1NLUREVEhIOm1tOnNzWiIpLnJlcGxhY2UoL1xbKFteXF1dKyldfFF8d298d3d8d3xXV3xXfHp6enx6fGdnZ2d8R0dHR3xEb3xYfHh8a3sxLDJ9fFMvZyxmdW5jdGlvbihoKXtzd2l0Y2goaCl7Y2FzZSJRIjpyZXR1cm4gTWF0aC5jZWlsKChhLiRNKzEpLzMpO2Nhc2UiRG8iOnJldHVybiBzLm9yZGluYWwoYS4kRCk7Y2FzZSJnZ2dnIjpyZXR1cm4gYS53ZWVrWWVhcigpO2Nhc2UiR0dHRyI6cmV0dXJuIGEuaXNvV2Vla1llYXIoKTtjYXNlIndvIjpyZXR1cm4gcy5vcmRpbmFsKGEud2VlaygpLCJXIik7Y2FzZSJ3IjpjYXNlInd3IjpyZXR1cm4gbC5zKGEud2VlaygpLGg9PT0idyI/MToyLCIwIik7Y2FzZSJXIjpjYXNlIldXIjpyZXR1cm4gbC5zKGEuaXNvV2VlaygpLGg9PT0iVyI/MToyLCIwIik7Y2FzZSJrIjpjYXNlImtrIjpyZXR1cm4gbC5zKFN0cmluZyhhLiRIPT09MD8yNDphLiRIKSxoPT09ImsiPzE6MiwiMCIpO2Nhc2UiWCI6cmV0dXJuIE1hdGguZmxvb3IoYS4kZC5nZXRUaW1lKCkvMWUzKTtjYXNlIngiOnJldHVybiBhLiRkLmdldFRpbWUoKTtjYXNlInoiOnJldHVybiJbIithLm9mZnNldE5hbWUoKSsiXSI7Y2FzZSJ6enoiOnJldHVybiJbIithLm9mZnNldE5hbWUoImxvbmciKSsiXSI7ZGVmYXVsdDpyZXR1cm4gaH19KTtyZXR1cm4gbi5iaW5kKHRoaXMpKHUpfX19KX0pO2Z1bmN0aW9uIFpoZSh0LGUscil7bGV0IG49ITA7Zm9yKDtuOyluPSExLHIuZm9yRWFjaChmdW5jdGlvbihpKXtsZXQgYT0iXlxccyoiK2krIlxccyokIixzPW5ldyBSZWdFeHAoYSk7dFswXS5tYXRjaChzKSYmKGVbaV09ITAsdC5zaGlmdCgxKSxuPSEwKX0pfXZhciAkaGUsbW8semhlLEdoZSxWaGUsQmhlLHFjLCRPLHpPLEdPLENiLEFiLFZPLFVPLFJTLFIxLEhPLFVoZSxXTyxfYixxTyxZTyxOUyxQTyxCR2UsRkdlLCRHZSx6R2UsR0dlLFZHZSxVR2UsSEdlLFdHZSxxR2UsWUdlLFhHZSxqR2UsS0dlLFFHZSxaR2UsSkdlLGVWZSx0VmUsclZlLG5WZSxpVmUsYVZlLEhoZSxzVmUsb1ZlLGxWZSxXaGUsY1ZlLEJPLHFoZSxZaGUsRFMsTDEsdVZlLGhWZSxGTyxMUyxVaSxYaGUsZlZlLFBwLGRWZSxGaGUscFZlLGpoZSxtVmUsS2hlLGdWZSx5VmUsUWhlLEpoZT1OKCgpPT57InVzZSBzdHJpY3QiOyRoZT1BYShaMCgpLDEpLG1vPUFhKFU0KCksMSksemhlPUFhKEloZSgpLDEpLEdoZT1BYShPaGUoKSwxKSxWaGU9QWEoUGhlKCksMSk7eXQoKTtHdCgpO2VyKCk7Y2koKTttby5kZWZhdWx0LmV4dGVuZCh6aGUuZGVmYXVsdCk7bW8uZGVmYXVsdC5leHRlbmQoR2hlLmRlZmF1bHQpO21vLmRlZmF1bHQuZXh0ZW5kKFZoZS5kZWZhdWx0KTtCaGU9e2ZyaWRheTo1LHNhdHVyZGF5OjZ9LHFjPSIiLCRPPSIiLEdPPSIiLENiPVtdLEFiPVtdLFZPPW5ldyBNYXAsVU89W10sUlM9W10sUjE9IiIsSE89IiIsVWhlPVsiYWN0aXZlIiwiZG9uZSIsImNyaXQiLCJtaWxlc3RvbmUiLCJ2ZXJ0Il0sV089W10sX2I9ITEscU89ITEsWU89InN1bmRheSIsTlM9InNhdHVyZGF5IixQTz0wLEJHZT1vKGZ1bmN0aW9uKCl7VU89W10sUlM9W10sUjE9IiIsV089W10sRFM9MCxGTz12b2lkIDAsTFM9dm9pZCAwLFVpPVtdLHFjPSIiLCRPPSIiLEhPPSIiLHpPPXZvaWQgMCxHTz0iIixDYj1bXSxBYj1bXSxfYj0hMSxxTz0hMSxQTz0wLFZPPW5ldyBNYXAsa3IoKSxZTz0ic3VuZGF5IixOUz0ic2F0dXJkYXkifSwiY2xlYXIiKSxGR2U9byhmdW5jdGlvbih0KXskTz10fSwic2V0QXhpc0Zvcm1hdCIpLCRHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICRPfSwiZ2V0QXhpc0Zvcm1hdCIpLHpHZT1vKGZ1bmN0aW9uKHQpe3pPPXR9LCJzZXRUaWNrSW50ZXJ2YWwiKSxHR2U9byhmdW5jdGlvbigpe3JldHVybiB6T30sImdldFRpY2tJbnRlcnZhbCIpLFZHZT1vKGZ1bmN0aW9uKHQpe0dPPXR9LCJzZXRUb2RheU1hcmtlciIpLFVHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEdPfSwiZ2V0VG9kYXlNYXJrZXIiKSxIR2U9byhmdW5jdGlvbih0KXtxYz10fSwic2V0RGF0ZUZvcm1hdCIpLFdHZT1vKGZ1bmN0aW9uKCl7X2I9ITB9LCJlbmFibGVJbmNsdXNpdmVFbmREYXRlcyIpLHFHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSwiZW5kRGF0ZXNBcmVJbmNsdXNpdmUiKSxZR2U9byhmdW5jdGlvbigpe3FPPSEwfSwiZW5hYmxlVG9wQXhpcyIpLFhHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHFPfSwidG9wQXhpc0VuYWJsZWQiKSxqR2U9byhmdW5jdGlvbih0KXtITz10fSwic2V0RGlzcGxheU1vZGUiKSxLR2U9byhmdW5jdGlvbigpe3JldHVybiBIT30sImdldERpc3BsYXlNb2RlIiksUUdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gcWN9LCJnZXREYXRlRm9ybWF0IiksWkdlPW8oZnVuY3Rpb24odCl7Q2I9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sInNldEluY2x1ZGVzIiksSkdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQ2J9LCJnZXRJbmNsdWRlcyIpLGVWZT1vKGZ1bmN0aW9uKHQpe0FiPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzLF0rLyl9LCJzZXRFeGNsdWRlcyIpLHRWZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEFifSwiZ2V0RXhjbHVkZXMiKSxyVmU9byhmdW5jdGlvbigpe3JldHVybiBWT30sImdldExpbmtzIiksblZlPW8oZnVuY3Rpb24odCl7UjE9dCxVTy5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLGlWZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFVPfSwiZ2V0U2VjdGlvbnMiKSxhVmU9byhmdW5jdGlvbigpe2xldCB0PUZoZSgpLGU9MTAscj0wO2Zvcig7IXQmJnI8ZTspdD1GaGUoKSxyKys7cmV0dXJuIFJTPVVpLFJTfSwiZ2V0VGFza3MiKSxIaGU9byhmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5pbmNsdWRlcyh0LmZvcm1hdChlLnRyaW0oKSkpPyExOnIuaW5jbHVkZXMoIndlZWtlbmRzIikmJih0Lmlzb1dlZWtkYXkoKT09PUJoZVtOU118fHQuaXNvV2Vla2RheSgpPT09QmhlW05TXSsxKXx8ci5pbmNsdWRlcyh0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOnIuaW5jbHVkZXModC5mb3JtYXQoZS50cmltKCkpKX0sImlzSW52YWxpZERhdGUiKSxzVmU9byhmdW5jdGlvbih0KXtZTz10fSwic2V0V2Vla2RheSIpLG9WZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFlPfSwiZ2V0V2Vla2RheSIpLGxWZT1vKGZ1bmN0aW9uKHQpe05TPXR9LCJzZXRXZWVrZW5kIiksV2hlPW8oZnVuY3Rpb24odCxlLHIsbil7aWYoIXIubGVuZ3RofHx0Lm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCBpO3Quc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT9pPSgwLG1vLmRlZmF1bHQpKHQuc3RhcnRUaW1lKTppPSgwLG1vLmRlZmF1bHQpKHQuc3RhcnRUaW1lLGUsITApLGk9aS5hZGQoMSwiZCIpO2xldCBhO3QuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/YT0oMCxtby5kZWZhdWx0KSh0LmVuZFRpbWUpOmE9KDAsbW8uZGVmYXVsdCkodC5lbmRUaW1lLGUsITApO2xldFtzLGxdPWNWZShpLGEsZSxyLG4pO3QuZW5kVGltZT1zLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1sfSwiY2hlY2tUYXNrRGF0ZXMiKSxjVmU9byhmdW5jdGlvbih0LGUscixuLGkpe2xldCBhPSExLHM9bnVsbDtmb3IoO3Q8PWU7KWF8fChzPWUudG9EYXRlKCkpLGE9SGhlKHQscixuLGkpLGEmJihlPWUuYWRkKDEsImQiKSksdD10LmFkZCgxLCJkIik7cmV0dXJuW2Usc119LCJmaXhUYXNrRGF0ZXMiKSxCTz1vKGZ1bmN0aW9uKHQsZSxyKXtyPXIudHJpbSgpO2xldCBpPS9eYWZ0ZXJccysoPzxpZHM+W1xkXHctIF0rKS8uZXhlYyhyKTtpZihpIT09bnVsbCl7bGV0IHM9bnVsbDtmb3IobGV0IHUgb2YgaS5ncm91cHMuaWRzLnNwbGl0KCIgIikpe2xldCBoPVBwKHUpO2ghPT12b2lkIDAmJighc3x8aC5lbmRUaW1lPnMuZW5kVGltZSkmJihzPWgpfWlmKHMpcmV0dXJuIHMuZW5kVGltZTtsZXQgbD1uZXcgRGF0ZTtyZXR1cm4gbC5zZXRIb3VycygwLDAsMCwwKSxsfWxldCBhPSgwLG1vLmRlZmF1bHQpKHIsZS50cmltKCksITApO2lmKGEuaXNWYWxpZCgpKXJldHVybiBhLnRvRGF0ZSgpO3tYLmRlYnVnKCJJbnZhbGlkIGRhdGU6IityKSxYLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpO2xldCBzPW5ldyBEYXRlKHIpO2lmKHM9PT12b2lkIDB8fGlzTmFOKHMuZ2V0VGltZSgpKXx8cy5nZXRGdWxsWWVhcigpPC0xZTR8fHMuZ2V0RnVsbFllYXIoKT4xZTQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGU6IityKTtyZXR1cm4gc319LCJnZXRTdGFydERhdGUiKSxxaGU9byhmdW5jdGlvbih0KXtsZXQgZT0vXihcZCsoPzpcLlxkKyk/KShbTWRobXN3eV18bXMpJC8uZXhlYyh0LnRyaW0oKSk7cmV0dXJuIGUhPT1udWxsP1tOdW1iZXIucGFyc2VGbG9hdChlWzFdKSxlWzJdXTpbTmFOLCJtcyJdfSwicGFyc2VEdXJhdGlvbiIpLFloZT1vKGZ1bmN0aW9uKHQsZSxyLG49ITEpe3I9ci50cmltKCk7bGV0IGE9L151bnRpbFxzKyg/PGlkcz5bXGRcdy0gXSspLy5leGVjKHIpO2lmKGEhPT1udWxsKXtsZXQgZj1udWxsO2ZvcihsZXQgcCBvZiBhLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IG09UHAocCk7bSE9PXZvaWQgMCYmKCFmfHxtLnN0YXJ0VGltZTxmLnN0YXJ0VGltZSkmJihmPW0pfWlmKGYpcmV0dXJuIGYuc3RhcnRUaW1lO2xldCBkPW5ldyBEYXRlO3JldHVybiBkLnNldEhvdXJzKDAsMCwwLDApLGR9bGV0IHM9KDAsbW8uZGVmYXVsdCkocixlLnRyaW0oKSwhMCk7aWYocy5pc1ZhbGlkKCkpcmV0dXJuIG4mJihzPXMuYWRkKDEsImQiKSkscy50b0RhdGUoKTtsZXQgbD0oMCxtby5kZWZhdWx0KSh0KSxbdSxoXT1xaGUocik7aWYoIU51bWJlci5pc05hTih1KSl7bGV0IGY9bC5hZGQodSxoKTtmLmlzVmFsaWQoKSYmKGw9Zil9cmV0dXJuIGwudG9EYXRlKCl9LCJnZXRFbmREYXRlIiksRFM9MCxMMT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwPyhEUz1EUysxLCJ0YXNrIitEUyk6dH0sInBhcnNlSWQiKSx1VmU9byhmdW5jdGlvbih0LGUpe2xldCByO2Uuc3Vic3RyKDAsMSk9PT0iOiI/cj1lLnN1YnN0cigxLGUubGVuZ3RoKTpyPWU7bGV0IG49ci5zcGxpdCgiLCIpLGk9e307WmhlKG4saSxVaGUpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKW5bc109bltzXS50cmltKCk7bGV0IGE9IiI7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6aS5pZD1MMSgpLGkuc3RhcnRUaW1lPXQuZW5kVGltZSxhPW5bMF07YnJlYWs7Y2FzZSAyOmkuaWQ9TDEoKSxpLnN0YXJ0VGltZT1CTyh2b2lkIDAscWMsblswXSksYT1uWzFdO2JyZWFrO2Nhc2UgMzppLmlkPUwxKG5bMF0pLGkuc3RhcnRUaW1lPUJPKHZvaWQgMCxxYyxuWzFdKSxhPW5bMl07YnJlYWs7ZGVmYXVsdDp9cmV0dXJuIGEmJihpLmVuZFRpbWU9WWhlKGkuc3RhcnRUaW1lLHFjLGEsX2IpLGkubWFudWFsRW5kVGltZT0oMCxtby5kZWZhdWx0KShhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFdoZShpLHFjLEFiLENiKSksaX0sImNvbXBpbGVEYXRhIiksaFZlPW8oZnVuY3Rpb24odCxlKXtsZXQgcjtlLnN1YnN0cigwLDEpPT09IjoiP3I9ZS5zdWJzdHIoMSxlLmxlbmd0aCk6cj1lO2xldCBuPXIuc3BsaXQoIiwiKSxpPXt9O1poZShuLGksVWhlKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPW5bYV0udHJpbSgpO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOmkuaWQ9TDEoKSxpLnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOnR9LGkuZW5kVGltZT17ZGF0YTpuWzBdfTticmVhaztjYXNlIDI6aS5pZD1MMSgpLGkuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzBdfSxpLmVuZFRpbWU9e2RhdGE6blsxXX07YnJlYWs7Y2FzZSAzOmkuaWQ9TDEoblswXSksaS5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMV19LGkuZW5kVGltZT17ZGF0YTpuWzJdfTticmVhaztkZWZhdWx0On1yZXR1cm4gaX0sInBhcnNlRGF0YSIpLFVpPVtdLFhoZT17fSxmVmU9byhmdW5jdGlvbih0LGUpe2xldCByPXtzZWN0aW9uOlIxLHR5cGU6UjEscHJvY2Vzc2VkOiExLG1hbnVhbEVuZFRpbWU6ITEscmVuZGVyRW5kVGltZTpudWxsLHJhdzp7ZGF0YTplfSx0YXNrOnQsY2xhc3NlczpbXX0sbj1oVmUoTFMsZSk7ci5yYXcuc3RhcnRUaW1lPW4uc3RhcnRUaW1lLHIucmF3LmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLnByZXZUYXNrSWQ9TFMsci5hY3RpdmU9bi5hY3RpdmUsci5kb25lPW4uZG9uZSxyLmNyaXQ9bi5jcml0LHIubWlsZXN0b25lPW4ubWlsZXN0b25lLHIudmVydD1uLnZlcnQsci5vcmRlcj1QTyxQTysrO2xldCBpPVVpLnB1c2gocik7TFM9ci5pZCxYaGVbci5pZF09aS0xfSwiYWRkVGFzayIpLFBwPW8oZnVuY3Rpb24odCl7bGV0IGU9WGhlW3RdO3JldHVybiBVaVtlXX0sImZpbmRUYXNrQnlJZCIpLGRWZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3NlY3Rpb246UjEsdHlwZTpSMSxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfSxuPXVWZShGTyxlKTtyLnN0YXJ0VGltZT1uLnN0YXJ0VGltZSxyLmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLmFjdGl2ZT1uLmFjdGl2ZSxyLmRvbmU9bi5kb25lLHIuY3JpdD1uLmNyaXQsci5taWxlc3RvbmU9bi5taWxlc3RvbmUsci52ZXJ0PW4udmVydCxGTz1yLFJTLnB1c2gocil9LCJhZGRUYXNrT3JnIiksRmhlPW8oZnVuY3Rpb24oKXtsZXQgdD1vKGZ1bmN0aW9uKHIpe2xldCBuPVVpW3JdLGk9IiI7c3dpdGNoKFVpW3JdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2xldCBhPVBwKG4ucHJldlRhc2tJZCk7bi5zdGFydFRpbWU9YS5lbmRUaW1lO2JyZWFrfWNhc2UiZ2V0U3RhcnREYXRlIjppPUJPKHZvaWQgMCxxYyxVaVtyXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSksaSYmKFVpW3JdLnN0YXJ0VGltZT1pKTticmVha31yZXR1cm4gVWlbcl0uc3RhcnRUaW1lJiYoVWlbcl0uZW5kVGltZT1ZaGUoVWlbcl0uc3RhcnRUaW1lLHFjLFVpW3JdLnJhdy5lbmRUaW1lLmRhdGEsX2IpLFVpW3JdLmVuZFRpbWUmJihVaVtyXS5wcm9jZXNzZWQ9ITAsVWlbcl0ubWFudWFsRW5kVGltZT0oMCxtby5kZWZhdWx0KShVaVtyXS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFdoZShVaVtyXSxxYyxBYixDYikpKSxVaVtyXS5wcm9jZXNzZWR9LCJjb21waWxlVGFzayIpLGU9ITA7Zm9yKGxldFtyLG5db2YgVWkuZW50cmllcygpKXQociksZT1lJiZuLnByb2Nlc3NlZDtyZXR1cm4gZX0sImNvbXBpbGVUYXNrcyIpLHBWZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZTttZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYocj0oMCwkaGUuc2FuaXRpemVVcmwpKGUpKSx0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtQcChuKSE9PXZvaWQgMCYmKEtoZShuLCgpPT57d2luZG93Lm9wZW4ociwiX3NlbGYiKX0pLFZPLnNldChuLHIpKX0pLGpoZSh0LCJjbGlja2FibGUiKX0sInNldExpbmsiKSxqaGU9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPVBwKHIpO24hPT12b2lkIDAmJm4uY2xhc3Nlcy5wdXNoKGUpfSl9LCJzZXRDbGFzcyIpLG1WZT1vKGZ1bmN0aW9uKHQsZSxyKXtpZihtZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxlPT09dm9pZCAwKXJldHVybjtsZXQgbj1bXTtpZih0eXBlb2Ygcj09InN0cmluZyIpe249ci5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKyl7bGV0IHM9blthXS50cmltKCk7cy5zdGFydHNXaXRoKCciJykmJnMuZW5kc1dpdGgoJyInKSYmKHM9cy5zdWJzdHIoMSxzLmxlbmd0aC0yKSksblthXT1zfX1uLmxlbmd0aD09PTAmJm4ucHVzaCh0KSxQcCh0KSE9PXZvaWQgMCYmS2hlKHQsKCk9PntWdC5ydW5GdW5jKGUsLi4ubil9KX0sInNldENsaWNrRnVuIiksS2hlPW8oZnVuY3Rpb24odCxlKXtXTy5wdXNoKGZ1bmN0aW9uKCl7bGV0IHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3R9Il1gKTtyIT09bnVsbCYmci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtlKCl9KX0sZnVuY3Rpb24oKXtsZXQgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7dH0tdGV4dCJdYCk7ciE9PW51bGwmJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSl9KX0sInB1c2hGdW4iKSxnVmU9byhmdW5jdGlvbih0LGUscil7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24obil7bVZlKG4sZSxyKX0pLGpoZSh0LCJjbGlja2FibGUiKX0sInNldENsaWNrRXZlbnQiKSx5VmU9byhmdW5jdGlvbih0KXtXTy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UodCl9KX0sImJpbmRGdW5jdGlvbnMiKSxRaGU9e2dldENvbmZpZzpvKCgpPT5tZSgpLmdhbnR0LCJnZXRDb25maWciKSxjbGVhcjpCR2Usc2V0RGF0ZUZvcm1hdDpIR2UsZ2V0RGF0ZUZvcm1hdDpRR2UsZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXM6V0dlLGVuZERhdGVzQXJlSW5jbHVzaXZlOnFHZSxlbmFibGVUb3BBeGlzOllHZSx0b3BBeGlzRW5hYmxlZDpYR2Usc2V0QXhpc0Zvcm1hdDpGR2UsZ2V0QXhpc0Zvcm1hdDokR2Usc2V0VGlja0ludGVydmFsOnpHZSxnZXRUaWNrSW50ZXJ2YWw6R0dlLHNldFRvZGF5TWFya2VyOlZHZSxnZXRUb2RheU1hcmtlcjpVR2Usc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixzZXREaXNwbGF5TW9kZTpqR2UsZ2V0RGlzcGxheU1vZGU6S0dlLHNldEFjY0Rlc2NyaXB0aW9uOkxyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLGFkZFNlY3Rpb246blZlLGdldFNlY3Rpb25zOmlWZSxnZXRUYXNrczphVmUsYWRkVGFzazpmVmUsZmluZFRhc2tCeUlkOlBwLGFkZFRhc2tPcmc6ZFZlLHNldEluY2x1ZGVzOlpHZSxnZXRJbmNsdWRlczpKR2Usc2V0RXhjbHVkZXM6ZVZlLGdldEV4Y2x1ZGVzOnRWZSxzZXRDbGlja0V2ZW50OmdWZSxzZXRMaW5rOnBWZSxnZXRMaW5rczpyVmUsYmluZEZ1bmN0aW9uczp5VmUscGFyc2VEdXJhdGlvbjpxaGUsaXNJbnZhbGlkRGF0ZTpIaGUsc2V0V2Vla2RheTpzVmUsZ2V0V2Vla2RheTpvVmUsc2V0V2Vla2VuZDpsVmV9O28oWmhlLCJnZXRUYXNrVGFncyIpfSk7dmFyIE1TLHZWZSxlZmUseFZlLEp1LGJWZSx0ZmUscmZlPU4oKCk9PnsidXNlIHN0cmljdCI7TVM9QWEoVTQoKSwxKTt5dCgpO2ZyKCk7cHIoKTtHdCgpO3hpKCk7dlZlPW8oZnVuY3Rpb24oKXtYLmRlYnVnKCJTb21ldGhpbmcgaXMgY2FsbGluZywgc2V0Q29uZiwgcmVtb3ZlIHRoZSBjYWxsIil9LCJzZXRDb25mIiksZWZlPXttb25kYXk6TmgsdHVlc2RheTpJNSx3ZWRuZXNkYXk6TzUsdGh1cnNkYXk6ZmMsZnJpZGF5OlA1LHNhdHVyZGF5OkI1LHN1bmRheTp3bH0seFZlPW8oKHQsZSk9PntsZXQgcj1bLi4udF0ubWFwKCgpPT4tMS8wKSxuPVsuLi50XS5zb3J0KChhLHMpPT5hLnN0YXJ0VGltZS1zLnN0YXJ0VGltZXx8YS5vcmRlci1zLm9yZGVyKSxpPTA7Zm9yKGxldCBhIG9mIG4pZm9yKGxldCBzPTA7czxyLmxlbmd0aDtzKyspaWYoYS5zdGFydFRpbWU+PXJbc10pe3Jbc109YS5lbmRUaW1lLGEub3JkZXI9cytlLHM+aSYmKGk9cyk7YnJlYWt9cmV0dXJuIGl9LCJnZXRNYXhJbnRlcnNlY3Rpb25zIiksYlZlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9bWUoKS5nYW50dCxhPW1lKCkuc2VjdXJpdHlMZXZlbCxzO2E9PT0ic2FuZGJveCImJihzPUdlKCIjaSIrZSkpO2xldCBsPWE9PT0ic2FuZGJveCI/R2Uocy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpLHU9YT09PSJzYW5kYm94Ij9zLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LGg9dS5nZXRFbGVtZW50QnlJZChlKTtKdT1oLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgsSnU9PT12b2lkIDAmJihKdT0xMjAwKSxpLnVzZVdpZHRoIT09dm9pZCAwJiYoSnU9aS51c2VXaWR0aCk7bGV0IGY9bi5kYi5nZXRUYXNrcygpLGQ9W107Zm9yKGxldCBDIG9mIGYpZC5wdXNoKEMudHlwZSk7ZD1fKGQpO2xldCBwPXt9LG09MippLnRvcFBhZGRpbmc7aWYobi5kYi5nZXREaXNwbGF5TW9kZSgpPT09ImNvbXBhY3QifHxpLmRpc3BsYXlNb2RlPT09ImNvbXBhY3QiKXtsZXQgQz17fTtmb3IobGV0IE8gb2YgZilDW08uc2VjdGlvbl09PT12b2lkIDA/Q1tPLnNlY3Rpb25dPVtPXTpDW08uc2VjdGlvbl0ucHVzaChPKTtsZXQgRD0wO2ZvcihsZXQgTyBvZiBPYmplY3Qua2V5cyhDKSl7bGV0IFI9eFZlKENbT10sRCkrMTtEKz1SLG0rPVIqKGkuYmFySGVpZ2h0K2kuYmFyR2FwKSxwW09dPVJ9fWVsc2V7bSs9Zi5sZW5ndGgqKGkuYmFySGVpZ2h0K2kuYmFyR2FwKTtmb3IobGV0IEMgb2YgZClwW0NdPWYuZmlsdGVyKEQ9PkQudHlwZT09PUMpLmxlbmd0aH1oLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK0p1KyIgIittKTtsZXQgZz1sLnNlbGVjdChgW2lkPSIke2V9Il1gKSx5PXo1KCkuZG9tYWluKFtXMyhmLGZ1bmN0aW9uKEMpe3JldHVybiBDLnN0YXJ0VGltZX0pLEgzKGYsZnVuY3Rpb24oQyl7cmV0dXJuIEMuZW5kVGltZX0pXSkucmFuZ2VSb3VuZChbMCxKdS1pLmxlZnRQYWRkaW5nLWkucmlnaHRQYWRkaW5nXSk7ZnVuY3Rpb24gdihDLEQpe2xldCBPPUMuc3RhcnRUaW1lLFI9RC5zdGFydFRpbWUsaz0wO3JldHVybiBPPlI/az0xOk88UiYmKGs9LTEpLGt9byh2LCJ0YXNrQ29tcGFyZSIpLGYuc29ydCh2KSx4KGYsSnUsbSksZm4oZyxtLEp1LGkudXNlTWF4V2lkdGgpLGcuYXBwZW5kKCJ0ZXh0IikudGV4dChuLmRiLmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IixKdS8yKS5hdHRyKCJ5IixpLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRpdGxlVGV4dCIpO2Z1bmN0aW9uIHgoQyxELE8pe2xldCBSPWkuYmFySGVpZ2h0LGs9UitpLmJhckdhcCxMPWkudG9wUGFkZGluZyxBPWkubGVmdFBhZGRpbmcsST1UbCgpLmRvbWFpbihbMCxkLmxlbmd0aF0pLnJhbmdlKFsiIzAwQjlGQSIsIiNGOTUwMDIiXSkuaW50ZXJwb2xhdGUoYV8pO1QoayxMLEEsRCxPLEMsbi5kYi5nZXRFeGNsdWRlcygpLG4uZGIuZ2V0SW5jbHVkZXMoKSksUyhBLEwsRCxPKSxiKEMsayxMLEEsUixJLEQsTyksdyhrLEwsQSxSLEkpLEUoQSxMLEQsTyl9byh4LCJtYWtlR2FudHQiKTtmdW5jdGlvbiBiKEMsRCxPLFIsayxMLEEpe0Muc29ydCgoeiwkKT0+ei52ZXJ0PT09JC52ZXJ0PzA6ei52ZXJ0PzE6LTEpO2xldCBNPVsuLi5uZXcgU2V0KEMubWFwKHo9Pnoub3JkZXIpKV0ubWFwKHo9PkMuZmluZCgkPT4kLm9yZGVyPT09eikpO2cuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShNKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKHosJCl7cmV0dXJuICQ9ei5vcmRlciwkKkQrTy0yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIEEtaS5yaWdodFBhZGRpbmcvMn0pLmF0dHIoImhlaWdodCIsRCkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHope2ZvcihsZXRbJCxVXW9mIGQuZW50cmllcygpKWlmKHoudHlwZT09PVUpcmV0dXJuInNlY3Rpb24gc2VjdGlvbiIrJCVpLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSkuZW50ZXIoKTtsZXQgUD1nLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoQykuZW50ZXIoKSxCPW4uZGIuZ2V0TGlua3MoKTtpZihQLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbih6KXtyZXR1cm4gei5pZH0pLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMykuYXR0cigieCIsZnVuY3Rpb24oeil7cmV0dXJuIHoubWlsZXN0b25lP3koei5zdGFydFRpbWUpK1IrLjUqKHkoei5lbmRUaW1lKS15KHouc3RhcnRUaW1lKSktLjUqazp5KHouc3RhcnRUaW1lKStSfSkuYXR0cigieSIsZnVuY3Rpb24oeiwkKXtyZXR1cm4gJD16Lm9yZGVyLHoudmVydD9pLmdyaWRMaW5lU3RhcnRQYWRkaW5nOiQqRCtPfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHope3JldHVybiB6Lm1pbGVzdG9uZT9rOnoudmVydD8uMDgqazp5KHoucmVuZGVyRW5kVGltZXx8ei5lbmRUaW1lKS15KHouc3RhcnRUaW1lKX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oeil7cmV0dXJuIHoudmVydD9mLmxlbmd0aCooaS5iYXJIZWlnaHQraS5iYXJHYXApK2kuYmFySGVpZ2h0KjI6a30pLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKHosJCl7cmV0dXJuICQ9ei5vcmRlciwoeSh6LnN0YXJ0VGltZSkrUisuNSooeSh6LmVuZFRpbWUpLXkoei5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoJCpEK08rLjUqaykudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHope2xldCAkPSJ0YXNrIixVPSIiO3ouY2xhc3Nlcy5sZW5ndGg+MCYmKFU9ei5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IEs9MDtmb3IobGV0W1ksY2Vdb2YgZC5lbnRyaWVzKCkpei50eXBlPT09Y2UmJihLPVklaS5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgZWU9IiI7cmV0dXJuIHouYWN0aXZlP3ouY3JpdD9lZSs9IiBhY3RpdmVDcml0IjplZT0iIGFjdGl2ZSI6ei5kb25lP3ouY3JpdD9lZT0iIGRvbmVDcml0IjplZT0iIGRvbmUiOnouY3JpdCYmKGVlKz0iIGNyaXQiKSxlZS5sZW5ndGg9PT0wJiYoZWU9IiB0YXNrIiksei5taWxlc3RvbmUmJihlZT0iIG1pbGVzdG9uZSAiK2VlKSx6LnZlcnQmJihlZT0iIHZlcnQgIitlZSksZWUrPUssZWUrPSIgIitVLCQrZWV9KSxQLmFwcGVuZCgidGV4dCIpLmF0dHIoImlkIixmdW5jdGlvbih6KXtyZXR1cm4gei5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbih6KXtyZXR1cm4gei50YXNrfSkuYXR0cigiZm9udC1zaXplIixpLmZvbnRTaXplKS5hdHRyKCJ4IixmdW5jdGlvbih6KXtsZXQgJD15KHouc3RhcnRUaW1lKSxVPXkoei5yZW5kZXJFbmRUaW1lfHx6LmVuZFRpbWUpO2lmKHoubWlsZXN0b25lJiYoJCs9LjUqKHkoei5lbmRUaW1lKS15KHouc3RhcnRUaW1lKSktLjUqayxVPSQrayksei52ZXJ0KXJldHVybiB5KHouc3RhcnRUaW1lKStSO2xldCBLPXRoaXMuZ2V0QkJveCgpLndpZHRoO3JldHVybiBLPlUtJD9VK0srMS41KmkubGVmdFBhZGRpbmc+QT8kK1ItNTpVK1IrNTooVS0kKS8yKyQrUn0pLmF0dHIoInkiLGZ1bmN0aW9uKHosJCl7cmV0dXJuIHoudmVydD9pLmdyaWRMaW5lU3RhcnRQYWRkaW5nK2YubGVuZ3RoKihpLmJhckhlaWdodCtpLmJhckdhcCkrNjA6KCQ9ei5vcmRlciwkKkQraS5iYXJIZWlnaHQvMisoaS5mb250U2l6ZS8yLTIpK08pfSkuYXR0cigidGV4dC1oZWlnaHQiLGspLmF0dHIoImNsYXNzIixmdW5jdGlvbih6KXtsZXQgJD15KHouc3RhcnRUaW1lKSxVPXkoei5lbmRUaW1lKTt6Lm1pbGVzdG9uZSYmKFU9JCtrKTtsZXQgSz10aGlzLmdldEJCb3goKS53aWR0aCxlZT0iIjt6LmNsYXNzZXMubGVuZ3RoPjAmJihlZT16LmNsYXNzZXMuam9pbigiICIpKTtsZXQgWT0wO2ZvcihsZXRbWix1ZV1vZiBkLmVudHJpZXMoKSl6LnR5cGU9PT11ZSYmKFk9WiVpLm51bWJlclNlY3Rpb25TdHlsZXMpO2xldCBjZT0iIjtyZXR1cm4gei5hY3RpdmUmJih6LmNyaXQ/Y2U9ImFjdGl2ZUNyaXRUZXh0IitZOmNlPSJhY3RpdmVUZXh0IitZKSx6LmRvbmU/ei5jcml0P2NlPWNlKyIgZG9uZUNyaXRUZXh0IitZOmNlPWNlKyIgZG9uZVRleHQiK1k6ei5jcml0JiYoY2U9Y2UrIiBjcml0VGV4dCIrWSksei5taWxlc3RvbmUmJihjZSs9IiBtaWxlc3RvbmVUZXh0Iiksei52ZXJ0JiYoY2UrPSIgdmVydFRleHQiKSxLPlUtJD9VK0srMS41KmkubGVmdFBhZGRpbmc+QT9lZSsiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIitZKyIgIitjZTplZSsiIHRhc2tUZXh0T3V0c2lkZVJpZ2h0IHRhc2tUZXh0T3V0c2lkZSIrWSsiICIrY2UrIiB3aWR0aC0iK0s6ZWUrIiB0YXNrVGV4dCB0YXNrVGV4dCIrWSsiICIrY2UrIiB3aWR0aC0iK0t9KSxtZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCB6O3o9R2UoIiNpIitlKTtsZXQgJD16Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O1AuZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBCLmhhcyhVLmlkKX0pLmVhY2goZnVuY3Rpb24oVSl7dmFyIEs9JC5xdWVyeVNlbGVjdG9yKCIjIitVLmlkKSxlZT0kLnF1ZXJ5U2VsZWN0b3IoIiMiK1UuaWQrIi10ZXh0Iik7bGV0IFk9Sy5wYXJlbnROb2RlO3ZhciBjZT0kLmNyZWF0ZUVsZW1lbnQoImEiKTtjZS5zZXRBdHRyaWJ1dGUoInhsaW5rOmhyZWYiLEIuZ2V0KFUuaWQpKSxjZS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIl90b3AiKSxZLmFwcGVuZENoaWxkKGNlKSxjZS5hcHBlbmRDaGlsZChLKSxjZS5hcHBlbmRDaGlsZChlZSl9KX19byhiLCJkcmF3UmVjdHMiKTtmdW5jdGlvbiBUKEMsRCxPLFIsayxMLEEsSSl7aWYoQS5sZW5ndGg9PT0wJiZJLmxlbmd0aD09PTApcmV0dXJuO2xldCBNLFA7Zm9yKGxldHtzdGFydFRpbWU6SyxlbmRUaW1lOmVlfW9mIEwpKE09PT12b2lkIDB8fEs8TSkmJihNPUspLChQPT09dm9pZCAwfHxlZT5QKSYmKFA9ZWUpO2lmKCFNfHwhUClyZXR1cm47aWYoKDAsTVMuZGVmYXVsdCkoUCkuZGlmZigoMCxNUy5kZWZhdWx0KShNKSwieWVhciIpPjUpe1gud2FybigiVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggdGltZSBpcyBtb3JlIHRoYW4gNSB5ZWFycy4gVGhpcyB3aWxsIGNhdXNlIHBlcmZvcm1hbmNlIGlzc3Vlcy4gU2tpcHBpbmcgZHJhd2luZyBleGNsdWRlIGRheXMuIik7cmV0dXJufWxldCBCPW4uZGIuZ2V0RGF0ZUZvcm1hdCgpLEY9W10sej1udWxsLCQ9KDAsTVMuZGVmYXVsdCkoTSk7Zm9yKDskLnZhbHVlT2YoKTw9UDspbi5kYi5pc0ludmFsaWREYXRlKCQsQixBLEkpP3o/ei5lbmQ9JDp6PXtzdGFydDokLGVuZDokfTp6JiYoRi5wdXNoKHopLHo9bnVsbCksJD0kLmFkZCgxLCJkIik7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKEYpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKEspe3JldHVybiJleGNsdWRlLSIrSy5zdGFydC5mb3JtYXQoIllZWVktTU0tREQiKX0pLmF0dHIoIngiLGZ1bmN0aW9uKEspe3JldHVybiB5KEsuc3RhcnQpK099KS5hdHRyKCJ5IixpLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oSyl7bGV0IGVlPUsuZW5kLmFkZCgxLCJkYXkiKTtyZXR1cm4geShlZSkteShLLnN0YXJ0KX0pLmF0dHIoImhlaWdodCIsay1ELWkuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKEssZWUpe3JldHVybih5KEsuc3RhcnQpK08rLjUqKHkoSy5lbmQpLXkoSy5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhlZSpDKy41KmspLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfW8oVCwiZHJhd0V4Y2x1ZGVEYXlzIik7ZnVuY3Rpb24gUyhDLEQsTyxSKXtsZXQgaz16QSh5KS50aWNrU2l6ZSgtUitEK2kuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoTGQobi5kYi5nZXRBeGlzRm9ybWF0KCl8fGkuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpLEE9L14oWzEtOV1cZCopKG1pbGxpc2Vjb25kfHNlY29uZHxtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkLy5leGVjKG4uZGIuZ2V0VGlja0ludGVydmFsKCl8fGkudGlja0ludGVydmFsKTtpZihBIT09bnVsbCl7bGV0IEk9QVsxXSxNPUFbMl0sUD1uLmRiLmdldFdlZWtkYXkoKXx8aS53ZWVrZGF5O3N3aXRjaChNKXtjYXNlIm1pbGxpc2Vjb25kIjprLnRpY2tzKHVjLmV2ZXJ5KEkpKTticmVhaztjYXNlInNlY29uZCI6ay50aWNrcyhlby5ldmVyeShJKSk7YnJlYWs7Y2FzZSJtaW51dGUiOmsudGlja3Mod3UuZXZlcnkoSSkpO2JyZWFrO2Nhc2UiaG91ciI6ay50aWNrcyhrdS5ldmVyeShJKSk7YnJlYWs7Y2FzZSJkYXkiOmsudGlja3MoUm8uZXZlcnkoSSkpO2JyZWFrO2Nhc2Uid2VlayI6ay50aWNrcyhlZmVbUF0uZXZlcnkoSSkpO2JyZWFrO2Nhc2UibW9udGgiOmsudGlja3MoRXUuZXZlcnkoSSkpO2JyZWFrfX1pZihnLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MrIiwgIisoUi01MCkrIikiKS5jYWxsKGspLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImR5IiwiMWVtIiksbi5kYi50b3BBeGlzRW5hYmxlZCgpfHxpLnRvcEF4aXMpe2xldCBJPSRBKHkpLnRpY2tTaXplKC1SK0QraS5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChMZChuLmRiLmdldEF4aXNGb3JtYXQoKXx8aS5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoQSE9PW51bGwpe2xldCBNPUFbMV0sUD1BWzJdLEI9bi5kYi5nZXRXZWVrZGF5KCl8fGkud2Vla2RheTtzd2l0Y2goUCl7Y2FzZSJtaWxsaXNlY29uZCI6SS50aWNrcyh1Yy5ldmVyeShNKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOkkudGlja3MoZW8uZXZlcnkoTSkpO2JyZWFrO2Nhc2UibWludXRlIjpJLnRpY2tzKHd1LmV2ZXJ5KE0pKTticmVhaztjYXNlImhvdXIiOkkudGlja3Moa3UuZXZlcnkoTSkpO2JyZWFrO2Nhc2UiZGF5IjpJLnRpY2tzKFJvLmV2ZXJ5KE0pKTticmVhaztjYXNlIndlZWsiOkkudGlja3MoZWZlW0JdLmV2ZXJ5KE0pKTticmVhaztjYXNlIm1vbnRoIjpJLnRpY2tzKEV1LmV2ZXJ5KE0pKTticmVha319Zy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDKyIsICIrRCsiKSIpLmNhbGwoSSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCl9fW8oUywibWFrZUdyaWQiKTtmdW5jdGlvbiB3KEMsRCl7bGV0IE89MCxSPU9iamVjdC5rZXlzKHApLm1hcChrPT5bayxwW2tdXSk7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFIpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKGspe2xldCBMPWtbMF0uc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpLEE9LShMLmxlbmd0aC0xKS8yLEk9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO0kuc2V0QXR0cmlidXRlKCJkeSIsQSsiZW0iKTtmb3IobGV0W00sUF1vZiBMLmVudHJpZXMoKSl7bGV0IEI9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtCLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLEIuc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxNPjAmJkIuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLEIudGV4dENvbnRlbnQ9UCxJLmFwcGVuZENoaWxkKEIpfXJldHVybiBJfSkuYXR0cigieCIsMTApLmF0dHIoInkiLGZ1bmN0aW9uKGssTCl7aWYoTD4wKWZvcihsZXQgQT0wO0E8TDtBKyspcmV0dXJuIE8rPVJbTC0xXVsxXSxrWzFdKkMvMitPKkMrRDtlbHNlIHJldHVybiBrWzFdKkMvMitEfSkuYXR0cigiZm9udC1zaXplIixpLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGspe2ZvcihsZXRbTCxBXW9mIGQuZW50cmllcygpKWlmKGtbMF09PT1BKXJldHVybiJzZWN0aW9uVGl0bGUgc2VjdGlvblRpdGxlIitMJWkubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvblRpdGxlIn0pfW8odywidmVydExhYmVscyIpO2Z1bmN0aW9uIEUoQyxELE8sUil7bGV0IGs9bi5kYi5nZXRUb2RheU1hcmtlcigpO2lmKGs9PT0ib2ZmIilyZXR1cm47bGV0IEw9Zy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksQT1uZXcgRGF0ZSxJPUwuYXBwZW5kKCJsaW5lIik7SS5hdHRyKCJ4MSIseShBKStDKS5hdHRyKCJ4MiIseShBKStDKS5hdHRyKCJ5MSIsaS50aXRsZVRvcE1hcmdpbikuYXR0cigieTIiLFItaS50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLGshPT0iIiYmSS5hdHRyKCJzdHlsZSIsay5yZXBsYWNlKC8sL2csIjsiKSl9byhFLCJkcmF3VG9kYXkiKTtmdW5jdGlvbiBfKEMpe2xldCBEPXt9LE89W107Zm9yKGxldCBSPTAsaz1DLmxlbmd0aDtSPGs7KytSKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChELENbUl0pfHwoRFtDW1JdXT0hMCxPLnB1c2goQ1tSXSkpO3JldHVybiBPfW8oXywiY2hlY2tVbmlxdWUiKX0sImRyYXciKSx0ZmU9e3NldENvbmY6dlZlLGRyYXc6YlZlfX0pO3ZhciBUVmUsbmZlLGlmZT1OKCgpPT57InVzZSBzdHJpY3QiO1RWZT1vKHQ9PmAKICAubWVybWFpZC1tYWluLWZvbnQgewogICAgICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQoKICAuZXhjbHVkZS1yYW5nZSB7CiAgICBmaWxsOiAke3QuZXhjbHVkZUJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uIHsKICAgIHN0cm9rZTogbm9uZTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uMCB7CiAgICBmaWxsOiAke3Quc2VjdGlvbkJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uMiB7CiAgICBmaWxsOiAke3Quc2VjdGlvbkJrZ0NvbG9yMn07CiAgfQoKICAuc2VjdGlvbjEsCiAgLnNlY3Rpb24zIHsKICAgIGZpbGw6ICR7dC5hbHRTZWN0aW9uQmtnQ29sb3J9OwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb25UaXRsZTAgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTEgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTIgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTMgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZSB7CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIH0KCgogIC8qIEdyaWQgYW5kIGF4aXMgKi8KCiAgLmdyaWQgLnRpY2sgewogICAgc3Ryb2tlOiAke3QuZ3JpZENvbG9yfTsKICAgIG9wYWNpdHk6IDAuODsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5ncmlkIC50aWNrIHRleHQgewogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHt0LnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0IHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBlbmQ7CiAgfQoKCiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqLwoKICAudGFzay5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLnRhc2tUZXh0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke3QudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKCiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi8KCiAgLnRhc2tUZXh0MCwKICAudGFza1RleHQxLAogIC50YXNrVGV4dDIsCiAgLnRhc2tUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHRDb2xvcn07CiAgfQoKICAudGFzazAsCiAgLnRhc2sxLAogIC50YXNrMiwKICAudGFzazMgewogICAgZmlsbDogJHt0LnRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC50YXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTAsCiAgLnRhc2tUZXh0T3V0c2lkZTIKICB7CiAgICBmaWxsOiAke3QudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTEsCiAgLnRhc2tUZXh0T3V0c2lkZTMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgoKICAvKiBBY3RpdmUgdGFzayAqLwoKICAuYWN0aXZlMCwKICAuYWN0aXZlMSwKICAuYWN0aXZlMiwKICAuYWN0aXZlMyB7CiAgICBmaWxsOiAke3QuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZlVGV4dDAsCiAgLmFjdGl2ZVRleHQxLAogIC5hY3RpdmVUZXh0MiwKICAuYWN0aXZlVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIENvbXBsZXRlZCB0YXNrICovCgogIC5kb25lMCwKICAuZG9uZTEsCiAgLmRvbmUyLAogIC5kb25lMyB7CiAgICBzdHJva2U6ICR7dC5kb25lVGFza0JvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lVGV4dDAsCiAgLmRvbmVUZXh0MSwKICAuZG9uZVRleHQyLAogIC5kb25lVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovCgogIC5jcml0MCwKICAuY3JpdDEsCiAgLmNyaXQyLAogIC5jcml0MyB7CiAgICBzdHJva2U6ICR7dC5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmNyaXRCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuYWN0aXZlQ3JpdDAsCiAgLmFjdGl2ZUNyaXQxLAogIC5hY3RpdmVDcml0MiwKICAuYWN0aXZlQ3JpdDMgewogICAgc3Ryb2tlOiAke3QuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVDcml0MCwKICAuZG9uZUNyaXQxLAogIC5kb25lQ3JpdDIsCiAgLmRvbmVDcml0MyB7CiAgICBzdHJva2U6ICR7dC5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLm1pbGVzdG9uZSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7CiAgfQoKICAubWlsZXN0b25lVGV4dCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQogIC5kb25lQ3JpdFRleHQwLAogIC5kb25lQ3JpdFRleHQxLAogIC5kb25lQ3JpdFRleHQyLAogIC5kb25lQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC52ZXJ0IHsKICAgIHN0cm9rZTogJHt0LnZlcnRMaW5lQ29sb3J9OwogIH0KCiAgLnZlcnRUZXh0IHsKICAgIGZvbnQtc2l6ZTogMTVweDsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmaWxsOiAke3QudmVydExpbmVDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC5hY3RpdmVDcml0VGV4dDAsCiAgLmFjdGl2ZUNyaXRUZXh0MSwKICAuYWN0aXZlQ3JpdFRleHQyLAogIC5hY3RpdmVDcml0VGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLnRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J8fHQudGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQpgLCJnZXRTdHlsZXMiKSxuZmU9VFZlfSk7dmFyIGFmZT17fTt1cihhZmUse2RpYWdyYW06KCk9PndWZX0pO3ZhciB3VmUsc2ZlPU4oKCk9PnsidXNlIHN0cmljdCI7TWhlKCk7SmhlKCk7cmZlKCk7aWZlKCk7d1ZlPXtwYXJzZXI6TmhlLGRiOlFoZSxyZW5kZXJlcjp0ZmUsc3R5bGVzOm5mZX19KTt2YXIgY2ZlLHVmZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtjZmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJpbmZvIix0KTtYLmRlYnVnKGUpfSwicGFyc2UiKX19KTt2YXIgRGIsWE89TigoKT0+e0RiPXtuYW1lOiJtZXJtYWlkIix2ZXJzaW9uOiIxMS45LjAiLGRlc2NyaXB0aW9uOiJNYXJrZG93bi1pc2ggc3ludGF4IGZvciBnZW5lcmF0aW5nIGZsb3djaGFydHMsIG1pbmRtYXBzLCBzZXF1ZW5jZSBkaWFncmFtcywgY2xhc3MgZGlhZ3JhbXMsIGdhbnR0IGNoYXJ0cywgZ2l0IGdyYXBocyBhbmQgbW9yZS4iLHR5cGU6Im1vZHVsZSIsbW9kdWxlOiIuL2Rpc3QvbWVybWFpZC5jb3JlLm1qcyIsdHlwZXM6Ii4vZGlzdC9tZXJtYWlkLmQudHMiLGV4cG9ydHM6eyIuIjp7dHlwZXM6Ii4vZGlzdC9tZXJtYWlkLmQudHMiLGltcG9ydDoiLi9kaXN0L21lcm1haWQuY29yZS5tanMiLGRlZmF1bHQ6Ii4vZGlzdC9tZXJtYWlkLmNvcmUubWpzIn0sIi4vKiI6Ii4vKiJ9LGtleXdvcmRzOlsiZGlhZ3JhbSIsIm1hcmtkb3duIiwiZmxvd2NoYXJ0Iiwic2VxdWVuY2UgZGlhZ3JhbSIsImdhbnR0IiwiY2xhc3MgZGlhZ3JhbSIsImdpdCBncmFwaCIsIm1pbmRtYXAiLCJwYWNrZXQgZGlhZ3JhbSIsImM0IGRpYWdyYW0iLCJlciBkaWFncmFtIiwicGllIGNoYXJ0IiwicGllIGRpYWdyYW0iLCJxdWFkcmFudCBjaGFydCIsInJlcXVpcmVtZW50IGRpYWdyYW0iLCJncmFwaCJdLHNjcmlwdHM6e2NsZWFuOiJyaW1yYWYgZGlzdCIsZGV2OiJwbnBtIC13IGRldiIsImRvY3M6Y29kZSI6InR5cGVkb2Mgc3JjL2RlZmF1bHRDb25maWcudHMgc3JjL2NvbmZpZy50cyBzcmMvbWVybWFpZC50cyAmJiBwcmV0dGllciAtLXdyaXRlIC4vc3JjL2RvY3MvY29uZmlnL3NldHVwIiwiZG9jczpidWlsZCI6InJpbXJhZiAuLi8uLi9kb2NzICYmIHBucG0gZG9jczpjb2RlICYmIHBucG0gZG9jczpzcGVsbGNoZWNrICYmIHRzeCBzY3JpcHRzL2RvY3MuY2xpLm10cyIsImRvY3M6dmVyaWZ5IjoicG5wbSBkb2NzOmNvZGUgJiYgcG5wbSBkb2NzOnNwZWxsY2hlY2sgJiYgdHN4IHNjcmlwdHMvZG9jcy5jbGkubXRzIC0tdmVyaWZ5IiwiZG9jczpwcmU6dml0ZXByZXNzIjoicG5wbSAtLWZpbHRlciAuL3NyYy9kb2NzIHByZWZldGNoICYmIHJpbXJhZiBzcmMvdml0ZXByZXNzICYmIHBucG0gZG9jczpjb2RlICYmIHRzeCBzY3JpcHRzL2RvY3MuY2xpLm10cyAtLXZpdGVwcmVzcyAmJiBwbnBtIC0tZmlsdGVyIC4vc3JjL3ZpdGVwcmVzcyBpbnN0YWxsIC0tbm8tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHMiLCJkb2NzOmJ1aWxkOnZpdGVwcmVzcyI6InBucG0gZG9jczpwcmU6dml0ZXByZXNzICYmIChjZCBzcmMvdml0ZXByZXNzICYmIHBucG0gcnVuIGJ1aWxkKSAmJiBjcHkgLS1mbGF0IHNyYy9kb2NzL2xhbmRpbmcvIC4vc3JjL3ZpdGVwcmVzcy8udml0ZXByZXNzL2Rpc3QvbGFuZGluZyIsImRvY3M6ZGV2IjoncG5wbSBkb2NzOnByZTp2aXRlcHJlc3MgJiYgY29uY3VycmVudGx5ICJwbnBtIC0tZmlsdGVyIC4vc3JjL3ZpdGVwcmVzcyBkZXYiICJ0c3ggc2NyaXB0cy9kb2NzLmNsaS5tdHMgLS13YXRjaCAtLXZpdGVwcmVzcyInLCJkb2NzOmRldjpkb2NrZXIiOidwbnBtIGRvY3M6cHJlOnZpdGVwcmVzcyAmJiBjb25jdXJyZW50bHkgInBucG0gLS1maWx0ZXIgLi9zcmMvdml0ZXByZXNzIGRldjpkb2NrZXIiICJ0c3ggc2NyaXB0cy9kb2NzLmNsaS5tdHMgLS13YXRjaCAtLXZpdGVwcmVzcyInLCJkb2NzOnNlcnZlIjoicG5wbSBkb2NzOmJ1aWxkOnZpdGVwcmVzcyAmJiB2aXRlcHJlc3Mgc2VydmUgc3JjL3ZpdGVwcmVzcyIsImRvY3M6c3BlbGxjaGVjayI6J2NzcGVsbCAic3JjL2RvY3MvKiovKi5tZCInLCJkb2NzOnJlbGVhc2UtdmVyc2lvbiI6InRzeCBzY3JpcHRzL3VwZGF0ZS1yZWxlYXNlLXZlcnNpb24ubXRzIiwiZG9jczp2ZXJpZnktdmVyc2lvbiI6InRzeCBzY3JpcHRzL3VwZGF0ZS1yZWxlYXNlLXZlcnNpb24ubXRzIC0tdmVyaWZ5IiwidHlwZXM6YnVpbGQtY29uZmlnIjoidHN4IHNjcmlwdHMvY3JlYXRlLXR5cGVzLWZyb20tanNvbi1zY2hlbWEubXRzIiwidHlwZXM6dmVyaWZ5LWNvbmZpZyI6InRzeCBzY3JpcHRzL2NyZWF0ZS10eXBlcy1mcm9tLWpzb24tc2NoZW1hLm10cyAtLXZlcmlmeSIsY2hlY2tDaXJjbGU6Im5weCBtYWRnZSAtLWNpcmN1bGFyIC4vc3JjIixwcmVwdWJsaXNoT25seToicG5wbSBkb2NzOnZlcmlmeS12ZXJzaW9uIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXJtYWlkLWpzL21lcm1haWQifSxhdXRob3I6IktudXQgU3ZlaWRxdmlzdCIsbGljZW5zZToiTUlUIixzdGFuZGFyZDp7aWdub3JlOlsiKiovcGFyc2VyLyouanMiLCJkaXN0LyoqLyouanMiLCJjeXByZXNzLyoqLyouanMiXSxnbG9iYWxzOlsicGFnZSJdfSxkZXBlbmRlbmNpZXM6eyJAYnJhaW50cmVlL3Nhbml0aXplLXVybCI6Il43LjAuNCIsIkBpY29uaWZ5L3V0aWxzIjoiXjIuMS4zMyIsIkBtZXJtYWlkLWpzL3BhcnNlciI6IndvcmtzcGFjZTpeIiwiQHR5cGVzL2QzIjoiXjcuNC4zIixjeXRvc2NhcGU6Il4zLjI5LjMiLCJjeXRvc2NhcGUtY29zZS1iaWxrZW50IjoiXjQuMS4wIiwiY3l0b3NjYXBlLWZjb3NlIjoiXjIuMi4wIixkMzoiXjcuOS4wIiwiZDMtc2Fua2V5IjoiXjAuMTIuMyIsImRhZ3JlLWQzLWVzIjoiNy4wLjExIixkYXlqczoiXjEuMTEuMTMiLGRvbXB1cmlmeToiXjMuMi41IixrYXRleDoiXjAuMTYuMjIiLGtocm9tYToiXjIuMS4wIiwibG9kYXNoLWVzIjoiXjQuMTcuMjEiLG1hcmtlZDoiXjE2LjAuMCIscm91Z2hqczoiXjQuNi42IixzdHlsaXM6Il40LjMuNiIsInRzLWRlZGVudCI6Il4yLjIuMCIsdXVpZDoiXjExLjEuMCJ9LGRldkRlcGVuZGVuY2llczp7IkBhZG9iZS9qc29uc2NoZW1hMm1kIjoiXjguMC4yIiwiQGljb25pZnkvdHlwZXMiOiJeMi4wLjAiLCJAdHlwZXMvY3l0b3NjYXBlIjoiXjMuMjEuOSIsIkB0eXBlcy9jeXRvc2NhcGUtZmNvc2UiOiJeMi4yLjQiLCJAdHlwZXMvZDMtc2Fua2V5IjoiXjAuMTIuNCIsIkB0eXBlcy9kMy1zY2FsZSI6Il40LjAuOSIsIkB0eXBlcy9kMy1zY2FsZS1jaHJvbWF0aWMiOiJeMy4xLjAiLCJAdHlwZXMvZDMtc2VsZWN0aW9uIjoiXjMuMC4xMSIsIkB0eXBlcy9kMy1zaGFwZSI6Il4zLjEuNyIsIkB0eXBlcy9qc2RvbSI6Il4yMS4xLjciLCJAdHlwZXMva2F0ZXgiOiJeMC4xNi43IiwiQHR5cGVzL2xvZGFzaC1lcyI6Il40LjE3LjEyIiwiQHR5cGVzL21pY3JvbWF0Y2giOiJeNC4wLjkiLCJAdHlwZXMvc3R5bGlzIjoiXjQuMi43IiwiQHR5cGVzL3V1aWQiOiJeMTAuMC4wIixhanY6Il44LjE3LjEiLGNhbnZhczoiXjMuMS4wIixjaG9raWRhcjoiMy42LjAiLGNvbmN1cnJlbnRseToiXjkuMS4yIiwiY3NzdHJlZS12YWxpZGF0b3IiOiJeNC4wLjEiLGdsb2JieToiXjE0LjAuMiIsamlzb246Il4wLjQuMTgiLCJqcy1iYXNlNjQiOiJeMy43LjciLGpzZG9tOiJeMjYuMS4wIiwianNvbi1zY2hlbWEtdG8tdHlwZXNjcmlwdCI6Il4xNS4wLjQiLG1pY3JvbWF0Y2g6Il40LjAuOCIsInBhdGgtYnJvd3NlcmlmeSI6Il4xLjAuMSIscHJldHRpZXI6Il4zLjUuMiIscmVtYXJrOiJeMTUuMC4xIiwicmVtYXJrLWZyb250bWF0dGVyIjoiXjUuMC4wIiwicmVtYXJrLWdmbSI6Il40LjAuMSIscmltcmFmOiJeNi4wLjEiLCJzdGFydC1zZXJ2ZXItYW5kLXRlc3QiOiJeMi4wLjEwIiwidHlwZS1mZXN0IjoiXjQuMzUuMCIsdHlwZWRvYzoiXjAuMjcuOCIsInR5cGVkb2MtcGx1Z2luLW1hcmtkb3duIjoiXjQuNC4yIix0eXBlc2NyaXB0OiJ+NS43LjMiLCJ1bmlzdC11dGlsLWZsYXRtYXAiOiJeMS4wLjAiLCJ1bmlzdC11dGlsLXZpc2l0IjoiXjUuMC4wIix2aXRlcHJlc3M6Il4xLjAuMiIsInZpdGVwcmVzcy1wbHVnaW4tc2VhcmNoIjoiMS4wLjQtYWxwaGEuMjIifSxmaWxlczpbImRpc3QvIiwiUkVBRE1FLm1kIl0scHVibGlzaENvbmZpZzp7YWNjZXNzOiJwdWJsaWMifX19KTt2YXIgQVZlLF9WZSxoZmUsZmZlPU4oKCk9PnsidXNlIHN0cmljdCI7WE8oKTtBVmU9e3ZlcnNpb246RGIudmVyc2lvbisiIn0sX1ZlPW8oKCk9PkFWZS52ZXJzaW9uLCJnZXRWZXJzaW9uIiksaGZlPXtnZXRWZXJzaW9uOl9WZX19KTt2YXIgTGksVmw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO0d0KCk7TGk9byh0PT57bGV0e3NlY3VyaXR5TGV2ZWw6ZX09bWUoKSxyPUdlKCJib2R5Iik7aWYoZT09PSJzYW5kYm94Iil7bGV0IGE9R2UoYCNpJHt0fWApLm5vZGUoKT8uY29udGVudERvY3VtZW50Pz9kb2N1bWVudDtyPUdlKGEuYm9keSl9cmV0dXJuIHIuc2VsZWN0KGAjJHt0fWApfSwic2VsZWN0U3ZnRWxlbWVudCIpfSk7dmFyIERWZSxkZmUscGZlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtWbCgpO3hpKCk7RFZlPW8oKHQsZSxyKT0+e1guZGVidWcoYHJlbmRlcmluZyBpbmZvIGRpYWdyYW0KYCt0KTtsZXQgbj1MaShlKTtmbihuLDEwMCw0MDAsITApLG4uYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7cn1gKX0sImRyYXciKSxkZmU9e2RyYXc6RFZlfX0pO3ZhciBtZmU9e307dXIobWZlLHtkaWFncmFtOigpPT5MVmV9KTt2YXIgTFZlLGdmZT1OKCgpPT57InVzZSBzdHJpY3QiO3VmZSgpO2ZmZSgpO3BmZSgpO0xWZT17cGFyc2VyOmNmZSxkYjpoZmUscmVuZGVyZXI6ZGZlfX0pO3ZhciB4ZmUsak8sSVMsS08sTVZlLElWZSxPVmUsUFZlLEJWZSxGVmUsJFZlLE9TLFFPPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtjaSgpO19hKCk7eGZlPW9yLnBpZSxqTz17c2VjdGlvbnM6bmV3IE1hcCxzaG93RGF0YTohMSxjb25maWc6eGZlfSxJUz1qTy5zZWN0aW9ucyxLTz1qTy5zaG93RGF0YSxNVmU9c3RydWN0dXJlZENsb25lKHhmZSksSVZlPW8oKCk9PnN0cnVjdHVyZWRDbG9uZShNVmUpLCJnZXRDb25maWciKSxPVmU9bygoKT0+e0lTPW5ldyBNYXAsS089ak8uc2hvd0RhdGEsa3IoKX0sImNsZWFyIiksUFZlPW8oKHtsYWJlbDp0LHZhbHVlOmV9KT0+e0lTLmhhcyh0KXx8KElTLnNldCh0LGUpLFguZGVidWcoYGFkZGVkIG5ldyBzZWN0aW9uOiAke3R9LCB3aXRoIHZhbHVlOiAke2V9YCkpfSwiYWRkU2VjdGlvbiIpLEJWZT1vKCgpPT5JUywiZ2V0U2VjdGlvbnMiKSxGVmU9byh0PT57S089dH0sInNldFNob3dEYXRhIiksJFZlPW8oKCk9PktPLCJnZXRTaG93RGF0YSIpLE9TPXtnZXRDb25maWc6SVZlLGNsZWFyOk9WZSxzZXREaWFncmFtVGl0bGU6T3IsZ2V0RGlhZ3JhbVRpdGxlOk5yLHNldEFjY1RpdGxlOkFyLGdldEFjY1RpdGxlOkRyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLGFkZFNlY3Rpb246UFZlLGdldFNlY3Rpb25zOkJWZSxzZXRTaG93RGF0YTpGVmUsZ2V0U2hvd0RhdGE6JFZlfX0pO3ZhciB6VmUsYmZlLFRmZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtNcCgpO1FPKCk7elZlPW8oKHQsZSk9PntKbyh0LGUpLGUuc2V0U2hvd0RhdGEodC5zaG93RGF0YSksdC5zZWN0aW9ucy5tYXAoZS5hZGRTZWN0aW9uKX0sInBvcHVsYXRlRGIiKSxiZmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJwaWUiLHQpO1guZGVidWcoZSkselZlKGUsT1MpfSwicGFyc2UiKX19KTt2YXIgR1ZlLHdmZSxrZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHVmU9byh0PT5gCiAgLnBpZUNpcmNsZXsKICAgIHN0cm9rZTogJHt0LnBpZVN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aCA6ICR7dC5waWVTdHJva2VXaWR0aH07CiAgICBvcGFjaXR5IDogJHt0LnBpZU9wYWNpdHl9OwogIH0KICAucGllT3V0ZXJDaXJjbGV7CiAgICBzdHJva2U6ICR7dC5waWVPdXRlclN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LnBpZU91dGVyU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogbm9uZTsKICB9CiAgLnBpZVRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAke3QucGllVGl0bGVUZXh0U2l6ZX07CiAgICBmaWxsOiAke3QucGllVGl0bGVUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICB9CiAgLnNsaWNlIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmaWxsOiAke3QucGllU2VjdGlvblRleHRDb2xvcn07CiAgICBmb250LXNpemU6JHt0LnBpZVNlY3Rpb25UZXh0U2l6ZX07CiAgICAvLyBmaWxsOiB3aGl0ZTsKICB9CiAgLmxlZ2VuZCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5waWVMZWdlbmRUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHt0LnBpZUxlZ2VuZFRleHRTaXplfTsKICB9CmAsImdldFN0eWxlcyIpLHdmZT1HVmV9KTt2YXIgVlZlLFVWZSxFZmUsU2ZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtHdCgpO3l0KCk7VmwoKTt4aSgpO2VyKCk7VlZlPW8odD0+e2xldCBlPVsuLi50LmVudHJpZXMoKV0ubWFwKG49Pih7bGFiZWw6blswXSx2YWx1ZTpuWzFdfSkpLnNvcnQoKG4saSk9PmkudmFsdWUtbi52YWx1ZSk7cmV0dXJuIHE1KCkudmFsdWUobj0+bi52YWx1ZSkoZSl9LCJjcmVhdGVQaWVBcmNzIiksVVZlPW8oKHQsZSxyLG4pPT57WC5kZWJ1ZyhgcmVuZGVyaW5nIHBpZSBjaGFydApgK3QpO2xldCBpPW4uZGIsYT1tZSgpLHM9JG4oaS5nZXRDb25maWcoKSxhLnBpZSksbD00MCx1PTE4LGg9NCxmPTQ1MCxkPWYscD1MaShlKSxtPXAuYXBwZW5kKCJnIik7bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkLzIrIiwiK2YvMisiKSIpO2xldHt0aGVtZVZhcmlhYmxlczpnfT1hLFt5XT16byhnLnBpZU91dGVyU3Ryb2tlV2lkdGgpO3k/Pz0yO2xldCB2PXMudGV4dFBvc2l0aW9uLHg9TWF0aC5taW4oZCxmKS8yLWwsYj1TbCgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKHgpLFQ9U2woKS5pbm5lclJhZGl1cyh4KnYpLm91dGVyUmFkaXVzKHgqdik7bS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCkuYXR0cigiciIseCt5LzIpLmF0dHIoImNsYXNzIiwicGllT3V0ZXJDaXJjbGUiKTtsZXQgUz1pLmdldFNlY3Rpb25zKCksdz1WVmUoUyksRT1bZy5waWUxLGcucGllMixnLnBpZTMsZy5waWU0LGcucGllNSxnLnBpZTYsZy5waWU3LGcucGllOCxnLnBpZTksZy5waWUxMCxnLnBpZTExLGcucGllMTJdLF89SnMoRSk7bS5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh3KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGIpLmF0dHIoImZpbGwiLGs9Pl8oay5kYXRhLmxhYmVsKSkuYXR0cigiY2xhc3MiLCJwaWVDaXJjbGUiKTtsZXQgQz0wO1MuZm9yRWFjaChrPT57Qys9a30pLG0uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEodykuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KGs9PihrLmRhdGEudmFsdWUvQyoxMDApLnRvRml4ZWQoMCkrIiUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGs9PiJ0cmFuc2xhdGUoIitULmNlbnRyb2lkKGspKyIpIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLG0uYXBwZW5kKCJ0ZXh0IikudGV4dChpLmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtKGYtNTApLzIpLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7bGV0IEQ9bS5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKF8uZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChrLEwpPT57bGV0IEE9dStoLEk9QSpfLmRvbWFpbigpLmxlbmd0aC8yLE09MTIqdSxQPUwqQS1JO3JldHVybiJ0cmFuc2xhdGUoIitNKyIsIitQKyIpIn0pO0QuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsdSkuc3R5bGUoImZpbGwiLF8pLnN0eWxlKCJzdHJva2UiLF8pLEQuZGF0YSh3KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix1K2gpLmF0dHIoInkiLHUtaCkudGV4dChrPT57bGV0e2xhYmVsOkwsdmFsdWU6QX09ay5kYXRhO3JldHVybiBpLmdldFNob3dEYXRhKCk/YCR7TH0gWyR7QX1dYDpMfSk7bGV0IE89TWF0aC5tYXgoLi4uRC5zZWxlY3RBbGwoInRleHQiKS5ub2RlcygpLm1hcChrPT5rPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD8/MCkpLFI9ZCtsK3UraCtPO3AuYXR0cigidmlld0JveCIsYDAgMCAke1J9ICR7Zn1gKSxmbihwLGYsUixzLnVzZU1heFdpZHRoKX0sImRyYXciKSxFZmU9e2RyYXc6VVZlfX0pO3ZhciBDZmU9e307dXIoQ2ZlLHtkaWFncmFtOigpPT5IVmV9KTt2YXIgSFZlLEFmZT1OKCgpPT57InVzZSBzdHJpY3QiO1RmZSgpO1FPKCk7a2ZlKCk7U2ZlKCk7SFZlPXtwYXJzZXI6YmZlLGRiOk9TLHJlbmRlcmVyOkVmZSxzdHlsZXM6d2ZlfX0pO3ZhciBaTyxMZmUsUmZlPU4oKCk9PnsidXNlIHN0cmljdCI7Wk89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFRlLFcscGUsdmUpe2ZvcihwZT1wZXx8e30sdmU9VGUubGVuZ3RoO3ZlLS07cGVbVGVbdmVdXT1XKTtyZXR1cm4gcGV9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVsxLDddLHM9WzEsNCw1LDEwLDEyLDEzLDE0LDE4LDI1LDM1LDM3LDM5LDQxLDQyLDQ4LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYxLDYzLDY0LDY1LDY2LDY3XSxsPVsxLDQsNSwxMCwxMiwxMywxNCwxOCwyNSwyOCwzNSwzNywzOSw0MSw0Miw0OCw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2MSw2Myw2NCw2NSw2Niw2N10sdT1bNTUsNTYsNTddLGg9WzIsMzZdLGY9WzEsMzddLGQ9WzEsMzZdLHA9WzEsMzhdLG09WzEsMzVdLGc9WzEsNDNdLHk9WzEsNDFdLHY9WzEsMTRdLHg9WzEsMjNdLGI9WzEsMThdLFQ9WzEsMTldLFM9WzEsMjBdLHc9WzEsMjFdLEU9WzEsMjJdLF89WzEsMjRdLEM9WzEsMjVdLEQ9WzEsMjZdLE89WzEsMjddLFI9WzEsMjhdLGs9WzEsMjldLEw9WzEsMzJdLEE9WzEsMzNdLEk9WzEsMzRdLE09WzEsMzldLFA9WzEsNDBdLEI9WzEsNDJdLEY9WzEsNDRdLHo9WzEsNjJdLCQ9WzEsNjFdLFU9WzQsNSw4LDEwLDEyLDEzLDE0LDE4LDQ0LDQ3LDQ5LDU1LDU2LDU3LDYzLDY0LDY1LDY2LDY3XSxLPVsxLDY1XSxlZT1bMSw2Nl0sWT1bMSw2N10sY2U9WzEsNjhdLFo9WzEsNjldLHVlPVsxLDcwXSxRPVsxLDcxXSxqPVsxLDcyXSxuZT1bMSw3M10sdGU9WzEsNzRdLGhlPVsxLDc1XSxsZT1bMSw3Nl0sSj1bNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMThdLFNlPVsxLDkwXSxzZT1bMSw5MV0sYWU9WzEsOTJdLE9lPVsxLDk5XSx5ZT1bMSw5M10sQmU9WzEsOTZdLEhlPVsxLDk0XSx6ZT1bMSw5NV0sTGU9WzEsOTddLEllPVsxLDk4XSx4ZT1bMSwxMDJdLHE9WzEwLDU1LDU2LDU3XSxkZT1bNCw1LDYsOCwxMCwxMSwxMywxNywxOCwxOSwyMCw1NSw1Niw1N10saWU9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLGlkU3RyaW5nVG9rZW46MyxBTFBIQTo0LE5VTTo1LE5PREVfU1RSSU5HOjYsRE9XTjo3LE1JTlVTOjgsREVGQVVMVDo5LENPTU1BOjEwLENPTE9OOjExLEFNUDoxMixCUktUOjEzLE1VTFQ6MTQsVU5JQ09ERV9URVhUOjE1LHN0eWxlQ29tcG9uZW50OjE2LFVOSVQ6MTcsU1BBQ0U6MTgsU1RZTEU6MTksUENUOjIwLGlkU3RyaW5nOjIxLHN0eWxlOjIyLHN0eWxlc09wdDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxDTEFTU0RFRjoyNSxzdGFydDoyNixlb2w6MjcsUVVBRFJBTlQ6MjgsZG9jdW1lbnQ6MjksbGluZTozMCxzdGF0ZW1lbnQ6MzEsYXhpc0RldGFpbHM6MzIscXVhZHJhbnREZXRhaWxzOjMzLHBvaW50czozNCx0aXRsZTozNSx0aXRsZV92YWx1ZTozNixhY2NfdGl0bGU6MzcsYWNjX3RpdGxlX3ZhbHVlOjM4LGFjY19kZXNjcjozOSxhY2NfZGVzY3JfdmFsdWU6NDAsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTo0MSxzZWN0aW9uOjQyLHRleHQ6NDMscG9pbnRfc3RhcnQ6NDQscG9pbnRfeDo0NSxwb2ludF95OjQ2LGNsYXNzX25hbWU6NDcsIlgtQVhJUyI6NDgsIkFYSVMtVEVYVC1ERUxJTUlURVIiOjQ5LCJZLUFYSVMiOjUwLFFVQURSQU5UXzE6NTEsUVVBRFJBTlRfMjo1MixRVUFEUkFOVF8zOjUzLFFVQURSQU5UXzQ6NTQsTkVXTElORTo1NSxTRU1JOjU2LEVPRjo1NyxhbHBoYU51bVRva2VuOjU4LHRleHROb1RhZ3NUb2tlbjo1OSxTVFI6NjAsTURfU1RSOjYxLGFscGhhTnVtOjYyLFBVTkNUVUFUSU9OOjYzLFBMVVM6NjQsRVFVQUxTOjY1LERPVDo2NixVTkRFUlNDT1JFOjY3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJBTFBIQSIsNToiTlVNIiw2OiJOT0RFX1NUUklORyIsNzoiRE9XTiIsODoiTUlOVVMiLDk6IkRFRkFVTFQiLDEwOiJDT01NQSIsMTE6IkNPTE9OIiwxMjoiQU1QIiwxMzoiQlJLVCIsMTQ6Ik1VTFQiLDE1OiJVTklDT0RFX1RFWFQiLDE3OiJVTklUIiwxODoiU1BBQ0UiLDE5OiJTVFlMRSIsMjA6IlBDVCIsMjU6IkNMQVNTREVGIiwyODoiUVVBRFJBTlQiLDM1OiJ0aXRsZSIsMzY6InRpdGxlX3ZhbHVlIiwzNzoiYWNjX3RpdGxlIiwzODoiYWNjX3RpdGxlX3ZhbHVlIiwzOToiYWNjX2Rlc2NyIiw0MDoiYWNjX2Rlc2NyX3ZhbHVlIiw0MToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDI6InNlY3Rpb24iLDQ0OiJwb2ludF9zdGFydCIsNDU6InBvaW50X3giLDQ2OiJwb2ludF95Iiw0NzoiY2xhc3NfbmFtZSIsNDg6IlgtQVhJUyIsNDk6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDUwOiJZLUFYSVMiLDUxOiJRVUFEUkFOVF8xIiw1MjoiUVVBRFJBTlRfMiIsNTM6IlFVQURSQU5UXzMiLDU0OiJRVUFEUkFOVF80Iiw1NToiTkVXTElORSIsNTY6IlNFTUkiLDU3OiJFT0YiLDYwOiJTVFIiLDYxOiJNRF9TVFIiLDYzOiJQVU5DVFVBVElPTiIsNjQ6IlBMVVMiLDY1OiJFUVVBTFMiLDY2OiJET1QiLDY3OiJVTkRFUlNDT1JFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMjEsMV0sWzIxLDJdLFsyMiwxXSxbMjIsMl0sWzIzLDFdLFsyMywzXSxbMjQsNV0sWzI2LDJdLFsyNiwyXSxbMjYsMl0sWzI5LDBdLFsyOSwyXSxbMzAsMl0sWzMxLDBdLFszMSwxXSxbMzEsMl0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDJdLFszMSwyXSxbMzEsMl0sWzMxLDFdLFszMSwxXSxbMzQsNF0sWzM0LDVdLFszNCw1XSxbMzQsNl0sWzMyLDRdLFszMiwzXSxbMzIsMl0sWzMyLDRdLFszMiwzXSxbMzIsMl0sWzMzLDJdLFszMywyXSxbMzMsMl0sWzMzLDJdLFsyNywxXSxbMjcsMV0sWzI3LDFdLFs0MywxXSxbNDMsMl0sWzQzLDFdLFs0MywxXSxbNjIsMV0sWzYyLDJdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU5LDFdLFs1OSwxXSxbNTksMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihXLHBlLHZlLFBlLF9lLGJlLFZlKXt2YXIgRGU9YmUubGVuZ3RoLTE7c3dpdGNoKF9lKXtjYXNlIDIzOnRoaXMuJD1iZVtEZV07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9YmVbRGUtMV0rIiIrYmVbRGVdO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWJlW0RlLTFdK2JlW0RlXTticmVhaztjYXNlIDI3OnRoaXMuJD1bYmVbRGVdLnRyaW0oKV07YnJlYWs7Y2FzZSAyODpiZVtEZS0yXS5wdXNoKGJlW0RlXS50cmltKCkpLHRoaXMuJD1iZVtEZS0yXTticmVhaztjYXNlIDI5OnRoaXMuJD1iZVtEZS00XSxQZS5hZGRDbGFzcyhiZVtEZS0yXSxiZVtEZV0pO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPWJlW0RlXS50cmltKCksUGUuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9YmVbRGVdLnRyaW0oKSxQZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0NTp0aGlzLiQ9YmVbRGVdLnRyaW0oKSxQZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNDY6UGUuYWRkU2VjdGlvbihiZVtEZV0uc3Vic3RyKDgpKSx0aGlzLiQ9YmVbRGVdLnN1YnN0cig4KTticmVhaztjYXNlIDQ3OlBlLmFkZFBvaW50KGJlW0RlLTNdLCIiLGJlW0RlLTFdLGJlW0RlXSxbXSk7YnJlYWs7Y2FzZSA0ODpQZS5hZGRQb2ludChiZVtEZS00XSxiZVtEZS0zXSxiZVtEZS0xXSxiZVtEZV0sW10pO2JyZWFrO2Nhc2UgNDk6UGUuYWRkUG9pbnQoYmVbRGUtNF0sIiIsYmVbRGUtMl0sYmVbRGUtMV0sYmVbRGVdKTticmVhaztjYXNlIDUwOlBlLmFkZFBvaW50KGJlW0RlLTVdLGJlW0RlLTRdLGJlW0RlLTJdLGJlW0RlLTFdLGJlW0RlXSk7YnJlYWs7Y2FzZSA1MTpQZS5zZXRYQXhpc0xlZnRUZXh0KGJlW0RlLTJdKSxQZS5zZXRYQXhpc1JpZ2h0VGV4dChiZVtEZV0pO2JyZWFrO2Nhc2UgNTI6YmVbRGUtMV0udGV4dCs9IiBcdTI3RjYgIixQZS5zZXRYQXhpc0xlZnRUZXh0KGJlW0RlLTFdKTticmVhaztjYXNlIDUzOlBlLnNldFhBeGlzTGVmdFRleHQoYmVbRGVdKTticmVhaztjYXNlIDU0OlBlLnNldFlBeGlzQm90dG9tVGV4dChiZVtEZS0yXSksUGUuc2V0WUF4aXNUb3BUZXh0KGJlW0RlXSk7YnJlYWs7Y2FzZSA1NTpiZVtEZS0xXS50ZXh0Kz0iIFx1MjdGNiAiLFBlLnNldFlBeGlzQm90dG9tVGV4dChiZVtEZS0xXSk7YnJlYWs7Y2FzZSA1NjpQZS5zZXRZQXhpc0JvdHRvbVRleHQoYmVbRGVdKTticmVhaztjYXNlIDU3OlBlLnNldFF1YWRyYW50MVRleHQoYmVbRGVdKTticmVhaztjYXNlIDU4OlBlLnNldFF1YWRyYW50MlRleHQoYmVbRGVdKTticmVhaztjYXNlIDU5OlBlLnNldFF1YWRyYW50M1RleHQoYmVbRGVdKTticmVhaztjYXNlIDYwOlBlLnNldFF1YWRyYW50NFRleHQoYmVbRGVdKTticmVhaztjYXNlIDY0OnRoaXMuJD17dGV4dDpiZVtEZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNjU6dGhpcy4kPXt0ZXh0OmJlW0RlLTFdLnRleHQrIiIrYmVbRGVdLHR5cGU6YmVbRGUtMV0udHlwZX07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9e3RleHQ6YmVbRGVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDY3OnRoaXMuJD17dGV4dDpiZVtEZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDY4OnRoaXMuJD1iZVtEZV07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9YmVbRGUtMV0rIiIrYmVbRGVdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MTg6ZSwyNjoxLDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE6WzNdfSx7MTg6ZSwyNjo4LDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE4OmUsMjY6OSwyNzoyLDI4OnIsNTU6biw1NjppLDU3OmF9LHQocyxbMiwzM10sezI5OjEwfSksdChsLFsyLDYxXSksdChsLFsyLDYyXSksdChsLFsyLDYzXSksezE6WzIsMzBdfSx7MTpbMiwzMV19LHQodSxoLHszMDoxMSwzMToxMiwyNDoxMywzMjoxNSwzMzoxNiwzNDoxNyw0MzozMCw1ODozMSwxOlsyLDMyXSw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6diwyNTp4LDM1OmIsMzc6VCwzOTpTLDQxOncsNDI6RSw0ODpfLDUwOkMsNTE6RCw1MjpPLDUzOlIsNTQ6ayw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksdChzLFsyLDM0XSksezI3OjQ1LDU1Om4sNTY6aSw1NzphfSx0KHUsWzIsMzddKSx0KHUsaCx7MjQ6MTMsMzI6MTUsMzM6MTYsMzQ6MTcsNDM6MzAsNTg6MzEsMzE6NDYsNDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnYsMjU6eCwzNTpiLDM3OlQsMzk6Uyw0MTp3LDQyOkUsNDg6Xyw1MDpDLDUxOkQsNTI6Tyw1MzpSLDU0OmssNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiwzOV0pLHQodSxbMiw0MF0pLHQodSxbMiw0MV0pLHszNjpbMSw0N119LHszODpbMSw0OF19LHs0MDpbMSw0OV19LHQodSxbMiw0NV0pLHQodSxbMiw0Nl0pLHsxODpbMSw1MF19LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTEsNTg6MzEsNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1Miw1ODozMSw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjUzLDU4OjMxLDYwOkwsNjE6QSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTQsNTg6MzEsNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1NSw1ODozMSw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjU2LDU4OjMxLDYwOkwsNjE6QSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9LHs0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNDQ6WzEsNTddLDQ3OlsxLDU4XSw1ODo2MCw1OTo1OSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9LHQoVSxbMiw2NF0pLHQoVSxbMiw2Nl0pLHQoVSxbMiw2N10pLHQoVSxbMiw3MF0pLHQoVSxbMiw3MV0pLHQoVSxbMiw3Ml0pLHQoVSxbMiw3M10pLHQoVSxbMiw3NF0pLHQoVSxbMiw3NV0pLHQoVSxbMiw3Nl0pLHQoVSxbMiw3N10pLHQoVSxbMiw3OF0pLHQoVSxbMiw3OV0pLHQoVSxbMiw4MF0pLHQocyxbMiwzNV0pLHQodSxbMiwzOF0pLHQodSxbMiw0Ml0pLHQodSxbMiw0M10pLHQodSxbMiw0NF0pLHszOjY0LDQ6Syw1OmVlLDY6WSw3OmNlLDg6Wiw5OnVlLDEwOlEsMTE6aiwxMjpuZSwxMzp0ZSwxNDpoZSwxNTpsZSwyMTo2M30sdCh1LFsyLDUzXSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDQ5OlsxLDc3XSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx0KHUsWzIsNTZdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNDk6WzEsNzhdLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiw1N10sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx0KHUsWzIsNThdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksdCh1LFsyLDU5XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiw2MF0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx7NDU6WzEsNzldfSx7NDQ6WzEsODBdfSx0KFUsWzIsNjVdKSx0KFUsWzIsODFdKSx0KFUsWzIsODJdKSx0KFUsWzIsODNdKSx7Mzo4Miw0OkssNTplZSw2OlksNzpjZSw4OlosOTp1ZSwxMDpRLDExOmosMTI6bmUsMTM6dGUsMTQ6aGUsMTU6bGUsMTg6WzEsODFdfSx0KEosWzIsMjNdKSx0KEosWzIsMV0pLHQoSixbMiwyXSksdChKLFsyLDNdKSx0KEosWzIsNF0pLHQoSixbMiw1XSksdChKLFsyLDZdKSx0KEosWzIsN10pLHQoSixbMiw4XSksdChKLFsyLDldKSx0KEosWzIsMTBdKSx0KEosWzIsMTFdKSx0KEosWzIsMTJdKSx0KHUsWzIsNTJdLHs1ODozMSw0Mzo4Myw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiw1NV0sezU4OjMxLDQzOjg0LDQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksezQ2OlsxLDg1XX0sezQ1OlsxLDg2XX0sezQ6U2UsNTpzZSw2OmFlLDg6T2UsMTE6eWUsMTM6QmUsMTY6ODksMTc6SGUsMTg6emUsMTk6TGUsMjA6SWUsMjI6ODgsMjM6ODd9LHQoSixbMiwyNF0pLHQodSxbMiw1MV0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx0KHUsWzIsNTRdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksdCh1LFsyLDQ3XSx7MjI6ODgsMTY6ODksMjM6MTAwLDQ6U2UsNTpzZSw2OmFlLDg6T2UsMTE6eWUsMTM6QmUsMTc6SGUsMTg6emUsMTk6TGUsMjA6SWV9KSx7NDY6WzEsMTAxXX0sdCh1LFsyLDI5XSx7MTA6eGV9KSx0KHEsWzIsMjddLHsxNjoxMDMsNDpTZSw1OnNlLDY6YWUsODpPZSwxMTp5ZSwxMzpCZSwxNzpIZSwxODp6ZSwxOTpMZSwyMDpJZX0pLHQoZGUsWzIsMjVdKSx0KGRlLFsyLDEzXSksdChkZSxbMiwxNF0pLHQoZGUsWzIsMTVdKSx0KGRlLFsyLDE2XSksdChkZSxbMiwxN10pLHQoZGUsWzIsMThdKSx0KGRlLFsyLDE5XSksdChkZSxbMiwyMF0pLHQoZGUsWzIsMjFdKSx0KGRlLFsyLDIyXSksdCh1LFsyLDQ5XSx7MTA6eGV9KSx0KHUsWzIsNDhdLHsyMjo4OCwxNjo4OSwyMzoxMDQsNDpTZSw1OnNlLDY6YWUsODpPZSwxMTp5ZSwxMzpCZSwxNzpIZSwxODp6ZSwxOTpMZSwyMDpJZX0pLHs0OlNlLDU6c2UsNjphZSw4Ok9lLDExOnllLDEzOkJlLDE2Ojg5LDE3OkhlLDE4OnplLDE5OkxlLDIwOkllLDIyOjEwNX0sdChkZSxbMiwyNl0pLHQodSxbMiw1MF0sezEwOnhlfSksdChxLFsyLDI4XSx7MTY6MTAzLDQ6U2UsNTpzZSw2OmFlLDg6T2UsMTE6eWUsMTM6QmUsMTc6SGUsMTg6emUsMTk6TGUsMjA6SWV9KV0sZGVmYXVsdEFjdGlvbnM6ezg6WzIsMzBdLDk6WzIsMzFdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oVyxwZSl7aWYocGUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShXKTtlbHNle3ZhciB2ZT1uZXcgRXJyb3IoVyk7dGhyb3cgdmUuaGFzaD1wZSx2ZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihXKXt2YXIgcGU9dGhpcyx2ZT1bMF0sUGU9W10sX2U9W251bGxdLGJlPVtdLFZlPXRoaXMudGFibGUsRGU9IiIscWU9MCxhdD0wLFJ0PTAsc3Q9MixVZT0xLGN0PWJlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFdlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksb3Q9e3l5Ont9fTtmb3IodmFyIFl0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksWXQpJiYob3QueXlbWXRdPXRoaXMueXlbWXRdKTtXZS5zZXRJbnB1dChXLG90Lnl5KSxvdC55eS5sZXhlcj1XZSxvdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgV2UueXlsbG9jPiJ1IiYmKFdlLnl5bGxvYz17fSk7dmFyIFR0PVdlLnl5bGxvYztiZS5wdXNoKFR0KTt2YXIgTXQ9V2Uub3B0aW9ucyYmV2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG90Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW90Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGJ0KENlKXt2ZS5sZW5ndGg9dmUubGVuZ3RoLTIqQ2UsX2UubGVuZ3RoPV9lLmxlbmd0aC1DZSxiZS5sZW5ndGg9YmUubGVuZ3RoLUNlfW8oYnQsInBvcFN0YWNrIik7ZnVuY3Rpb24gdXQoKXt2YXIgQ2U7cmV0dXJuIENlPVBlLnBvcCgpfHxXZS5sZXgoKXx8VWUsdHlwZW9mIENlIT0ibnVtYmVyIiYmKENlIGluc3RhbmNlb2YgQXJyYXkmJihQZT1DZSxDZT1QZS5wb3AoKSksQ2U9cGUuc3ltYm9sc19bQ2VdfHxDZSksQ2V9byh1dCwibGV4Iik7Zm9yKHZhciBTdCxmdCx2dCxudCxwbixrdCxPbj17fSx0bixNcixJcixQbjs7KXtpZih2dD12ZVt2ZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t2dF0/bnQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t2dF06KChTdD09PW51bGx8fHR5cGVvZiBTdD4idSIpJiYoU3Q9dXQoKSksbnQ9VmVbdnRdJiZWZVt2dF1bU3RdKSx0eXBlb2YgbnQ+InUifHwhbnQubGVuZ3RofHwhbnRbMF0pe3ZhciBEdD0iIjtQbj1bXTtmb3IodG4gaW4gVmVbdnRdKXRoaXMudGVybWluYWxzX1t0bl0mJnRuPnN0JiZQbi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bdG5dKyInIik7V2Uuc2hvd1Bvc2l0aW9uP0R0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHFlKzEpK2A6CmArV2Uuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtQbi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1N0XXx8U3QpKyInIjpEdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhxZSsxKSsiOiBVbmV4cGVjdGVkICIrKFN0PT1VZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tTdF18fFN0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihEdCx7dGV4dDpXZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bU3RdfHxTdCxsaW5lOldlLnl5bGluZW5vLGxvYzpUdCxleHBlY3RlZDpQbn0pfWlmKG50WzBdaW5zdGFuY2VvZiBBcnJheSYmbnQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit2dCsiLCB0b2tlbjogIitTdCk7c3dpdGNoKG50WzBdKXtjYXNlIDE6dmUucHVzaChTdCksX2UucHVzaChXZS55eXRleHQpLGJlLnB1c2goV2UueXlsbG9jKSx2ZS5wdXNoKG50WzFdKSxTdD1udWxsLGZ0PyhTdD1mdCxmdD1udWxsKTooYXQ9V2UueXlsZW5nLERlPVdlLnl5dGV4dCxxZT1XZS55eWxpbmVubyxUdD1XZS55eWxsb2MsUnQ+MCYmUnQtLSk7YnJlYWs7Y2FzZSAyOmlmKE1yPXRoaXMucHJvZHVjdGlvbnNfW250WzFdXVsxXSxPbi4kPV9lW19lLmxlbmd0aC1Ncl0sT24uXyQ9e2ZpcnN0X2xpbmU6YmVbYmUubGVuZ3RoLShNcnx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmJlW2JlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmJlW2JlLmxlbmd0aC0oTXJ8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YmVbYmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxNdCYmKE9uLl8kLnJhbmdlPVtiZVtiZS5sZW5ndGgtKE1yfHwxKV0ucmFuZ2VbMF0sYmVbYmUubGVuZ3RoLTFdLnJhbmdlWzFdXSksa3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE9uLFtEZSxhdCxxZSxvdC55eSxudFsxXSxfZSxiZV0uY29uY2F0KGN0KSksdHlwZW9mIGt0PCJ1IilyZXR1cm4ga3Q7TXImJih2ZT12ZS5zbGljZSgwLC0xKk1yKjIpLF9lPV9lLnNsaWNlKDAsLTEqTXIpLGJlPWJlLnNsaWNlKDAsLTEqTXIpKSx2ZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW250WzFdXVswXSksX2UucHVzaChPbi4kKSxiZS5wdXNoKE9uLl8kKSxJcj1WZVt2ZVt2ZS5sZW5ndGgtMl1dW3ZlW3ZlLmxlbmd0aC0xXV0sdmUucHVzaChJcik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LG9lPWZ1bmN0aW9uKCl7dmFyIFRlPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24ocGUsdmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocGUsdmUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHBlKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFcscGUpe3JldHVybiB0aGlzLnl5PXBlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1XLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVcsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVcsdGhpcy5tYXRjaGVkKz1XO3ZhciBwZT1XLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gcGU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFd9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oVyl7dmFyIHBlPVcubGVuZ3RoLHZlPVcuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1XK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1wZSksdGhpcy5vZmZzZXQtPXBlO3ZhciBQZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx2ZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXZlLmxlbmd0aC0xKTt2YXIgX2U9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnZlPyh2ZS5sZW5ndGg9PT1QZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1BlW1BlLmxlbmd0aC12ZS5sZW5ndGhdLmxlbmd0aC12ZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXBlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W19lWzBdLF9lWzBdK3RoaXMueXlsZW5nLXBlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oVyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFcpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBXPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oVy5sZW5ndGg+MjA/Ii4uLiI6IiIpK1cuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgVz10aGlzLm1hdGNoO3JldHVybiBXLmxlbmd0aDwyMCYmKFcrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVcubGVuZ3RoKSksKFcuc3Vic3RyKDAsMjApKyhXLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5wYXN0SW5wdXQoKSxwZT1uZXcgQXJyYXkoVy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBXK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtwZSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oVyxwZSl7dmFyIHZlLFBlLF9lO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihfZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihfZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxQZT1XWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQZSYmKHRoaXMueXlsaW5lbm8rPVBlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlBlP1BlW1BlLmxlbmd0aC0xXS5sZW5ndGgtUGVbUGUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rV1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1XWzBdLHRoaXMubWF0Y2grPVdbMF0sdGhpcy5tYXRjaGVzPVcsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoV1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9V1swXSx2ZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxwZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx2ZSlyZXR1cm4gdmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGJlIGluIF9lKXRoaXNbYmVdPV9lW2JlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgVyxwZSx2ZSxQZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBfZT10aGlzLl9jdXJyZW50UnVsZXMoKSxiZT0wO2JlPF9lLmxlbmd0aDtiZSsrKWlmKHZlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbX2VbYmVdXSksdmUmJighcGV8fHZlWzBdLmxlbmd0aD5wZVswXS5sZW5ndGgpKXtpZihwZT12ZSxQZT1iZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihXPXRoaXMudGVzdF9tYXRjaCh2ZSxfZVtiZV0pLFchPT0hMSlyZXR1cm4gVztpZih0aGlzLl9iYWNrdHJhY2spe3BlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHBlPyhXPXRoaXMudGVzdF9tYXRjaChwZSxfZVtQZV0pLFchPT0hMT9XOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIHBlPXRoaXMubmV4dCgpO3JldHVybiBwZXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24ocGUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChwZSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgcGU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gcGU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihwZSl7cmV0dXJuIHBlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMocGV8fDApLHBlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbcGVdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24ocGUpe3RoaXMuYmVnaW4ocGUpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24ocGUsdmUsUGUsX2Upe3ZhciBiZT1fZTtzd2l0Y2goUGUpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiA1NTtjYXNlIDM6YnJlYWs7Y2FzZSA0OnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDM1O2JyZWFrO2Nhc2UgNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzNzticmVhaztjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM5O2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDQ4O2Nhc2UgMTQ6cmV0dXJuIDUwO2Nhc2UgMTU6cmV0dXJuIDQ5O2Nhc2UgMTY6cmV0dXJuIDUxO2Nhc2UgMTc6cmV0dXJuIDUyO2Nhc2UgMTg6cmV0dXJuIDUzO2Nhc2UgMTk6cmV0dXJuIDU0O2Nhc2UgMjA6cmV0dXJuIDI1O2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iTURfU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6cmV0dXJuIlNUUiI7Y2FzZSAyNzp0aGlzLmJlZ2luKCJjbGFzc19uYW1lIik7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ3O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksNDQ7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDQ1O2JyZWFrO2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDY7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDtjYXNlIDM2OnJldHVybiAxMTtjYXNlIDM3OnJldHVybiA2NDtjYXNlIDM4OnJldHVybiAxMDtjYXNlIDM5OnJldHVybiA2NTtjYXNlIDQwOnJldHVybiA2NTtjYXNlIDQxOnJldHVybiAxNDtjYXNlIDQyOnJldHVybiAxMztjYXNlIDQzOnJldHVybiA2NztjYXNlIDQ0OnJldHVybiA2NjtjYXNlIDQ1OnJldHVybiAxMjtjYXNlIDQ2OnJldHVybiA4O2Nhc2UgNDc6cmV0dXJuIDU7Y2FzZSA0ODpyZXR1cm4gMTg7Y2FzZSA0OTpyZXR1cm4gNTY7Y2FzZSA1MDpyZXR1cm4gNjM7Y2FzZSA1MTpyZXR1cm4gNTd9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86ICp4LWF4aXMgKikvaSwvXig/OiAqeS1heGlzICopL2ksL14oPzogKi0tKz4gKikvaSwvXig/OiAqcXVhZHJhbnQtMSAqKS9pLC9eKD86ICpxdWFkcmFudC0yICopL2ksL14oPzogKnF1YWRyYW50LTMgKikvaSwvXig/OiAqcXVhZHJhbnQtNCAqKS9pLC9eKD86Y2xhc3NEZWZcYikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Ojo6KS9pLC9eKD86Xlx3KykvaSwvXig/OlxzKjpccypcW1xzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86XHMqXF0gKikvaSwvXig/OlxzKixccyopL2ksL14oPzooMSl8KDAoLlxkKyk/KSkvaSwvXig/OiAqcXVhZHJhbnRDaGFydCAqKS9pLC9eKD86W0EtWmEtel0rKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LCkvaSwvXig/Oj0pL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccykvaSwvXig/OjspL2ksL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2NsYXNzX25hbWU6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxwb2ludF95OntydWxlczpbMzNdLGluY2x1c2l2ZTohMX0scG9pbnRfeDp7cnVsZXM6WzMyXSxpbmNsdXNpdmU6ITF9LHBvaW50X3N0YXJ0OntydWxlczpbMzAsMzFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzVdLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjQsMjcsMjksMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVGV9KCk7aWUubGV4ZXI9b2U7ZnVuY3Rpb24gVigpe3RoaXMueXk9e319cmV0dXJuIG8oViwiUGFyc2VyIiksVi5wcm90b3R5cGU9aWUsaWUuUGFyc2VyPVYsbmV3IFZ9KCk7Wk8ucGFyc2VyPVpPO0xmZT1aT30pO3ZhciB4cyxQUyxOZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO19hKCk7eXQoKTtCeSgpO3hzPWRoKCksUFM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1zdGF0aWN7byh0aGlzLCJRdWFkcmFudEJ1aWxkZXIiKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7cmV0dXJue3Nob3dYQXhpczohMCxzaG93WUF4aXM6ITAsc2hvd1RpdGxlOiEwLGNoYXJ0SGVpZ2h0Om9yLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGh8fDUwMCxjaGFydFdpZHRoOm9yLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0fHw1MDAsdGl0bGVQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnRpdGxlUGFkZGluZ3x8MTAsdGl0bGVGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py50aXRsZUZvbnRTaXplfHwyMCxxdWFkcmFudFBhZGRpbmc6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRQYWRkaW5nfHw1LHhBeGlzTGFiZWxQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnhBeGlzTGFiZWxQYWRkaW5nfHw1LHlBeGlzTGFiZWxQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnlBeGlzTGFiZWxQYWRkaW5nfHw1LHhBeGlzTGFiZWxGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsRm9udFNpemV8fDE2LHlBeGlzTGFiZWxGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsRm9udFNpemV8fDE2LHF1YWRyYW50TGFiZWxGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py5xdWFkcmFudExhYmVsRm9udFNpemV8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRUZXh0VG9wUGFkZGluZ3x8NSxwb2ludFRleHRQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnBvaW50VGV4dFBhZGRpbmd8fDUscG9pbnRMYWJlbEZvbnRTaXplOm9yLnF1YWRyYW50Q2hhcnQ/LnBvaW50TGFiZWxGb250U2l6ZXx8MTIscG9pbnRSYWRpdXM6b3IucXVhZHJhbnRDaGFydD8ucG9pbnRSYWRpdXN8fDUseEF4aXNQb3NpdGlvbjpvci5xdWFkcmFudENoYXJ0Py54QXhpc1Bvc2l0aW9ufHwidG9wIix5QXhpc1Bvc2l0aW9uOm9yLnF1YWRyYW50Q2hhcnQ/LnlBeGlzUG9zaXRpb258fCJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRofHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDpvci5xdWFkcmFudENoYXJ0Py5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGh8fDJ9fWdldERlZmF1bHRUaGVtZUNvbmZpZygpe3JldHVybntxdWFkcmFudDFGaWxsOnhzLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDp4cy5xdWFkcmFudDJGaWxsLHF1YWRyYW50M0ZpbGw6eHMucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOnhzLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6eHMucXVhZHJhbnQxVGV4dEZpbGwscXVhZHJhbnQyVGV4dEZpbGw6eHMucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6eHMucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6eHMucXVhZHJhbnQ0VGV4dEZpbGwscXVhZHJhbnRQb2ludEZpbGw6eHMucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOnhzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6eHMucXVhZHJhbnRYQXhpc1RleHRGaWxsLHF1YWRyYW50WUF4aXNUZXh0RmlsbDp4cy5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRUaXRsZUZpbGw6eHMucXVhZHJhbnRUaXRsZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6eHMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6eHMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx9fWNsZWFyKCl7dGhpcy5jb25maWc9dGhpcy5nZXREZWZhdWx0Q29uZmlnKCksdGhpcy50aGVtZUNvbmZpZz10aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpLHRoaXMuZGF0YT10aGlzLmdldERlZmF1bHREYXRhKCksdGhpcy5jbGFzc2VzPW5ldyBNYXAsWC5pbmZvKCJjbGVhciBjYWxsZWQiKX1zZXREYXRhKGUpe3RoaXMuZGF0YT17Li4udGhpcy5kYXRhLC4uLmV9fWFkZFBvaW50cyhlKXt0aGlzLmRhdGEucG9pbnRzPVsuLi5lLC4uLnRoaXMuZGF0YS5wb2ludHNdfWFkZENsYXNzKGUscil7dGhpcy5jbGFzc2VzLnNldChlLHIpfXNldENvbmZpZyhlKXtYLnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIsZSksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLmV9fXNldFRoZW1lQ29uZmlnKGUpe1gudHJhY2UoInNldFRoZW1lQ29uZmlnIGNhbGxlZCB3aXRoOiAiLGUpLHRoaXMudGhlbWVDb25maWc9ey4uLnRoaXMudGhlbWVDb25maWcsLi4uZX19Y2FsY3VsYXRlU3BhY2UoZSxyLG4saSl7bGV0IGE9dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUscz17dG9wOmU9PT0idG9wIiYmcj9hOjAsYm90dG9tOmU9PT0iYm90dG9tIiYmcj9hOjB9LGw9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdT17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZuP2w6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmbj9sOjB9LGg9dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixmPXt0b3A6aT9oOjB9LGQ9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK3UubGVmdCxwPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytzLnRvcCtmLnRvcCxtPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItdS5sZWZ0LXUucmlnaHQsZz10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1zLnRvcC1zLmJvdHRvbS1mLnRvcCx5PW0vMix2PWcvMjtyZXR1cm57eEF4aXNTcGFjZTpzLHlBeGlzU3BhY2U6dSx0aXRsZVNwYWNlOmYscXVhZHJhbnRTcGFjZTp7cXVhZHJhbnRMZWZ0OmQscXVhZHJhbnRUb3A6cCxxdWFkcmFudFdpZHRoOm0scXVhZHJhbnRIYWxmV2lkdGg6eSxxdWFkcmFudEhlaWdodDpnLHF1YWRyYW50SGFsZkhlaWdodDp2fX19Z2V0QXhpc0xhYmVscyhlLHIsbixpKXtsZXR7cXVhZHJhbnRTcGFjZTphLHRpdGxlU3BhY2U6c309aSx7cXVhZHJhbnRIYWxmSGVpZ2h0OmwscXVhZHJhbnRIZWlnaHQ6dSxxdWFkcmFudExlZnQ6aCxxdWFkcmFudEhhbGZXaWR0aDpmLHF1YWRyYW50VG9wOmQscXVhZHJhbnRXaWR0aDpwfT1hLG09ISF0aGlzLmRhdGEueEF4aXNSaWdodFRleHQsZz0hIXRoaXMuZGF0YS55QXhpc1RvcFRleHQseT1bXTtyZXR1cm4gdGhpcy5kYXRhLnhBeGlzTGVmdFRleHQmJnImJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6aCsobT9mLzI6MCkseTplPT09InRvcCI/dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrcy50b3A6dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrZCt1K3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxmb250U2l6ZTp0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6bT8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjowfSksdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0JiZyJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwseDpoK2YrKG0/Zi8yOjApLHk6ZT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK3MudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2QrdSt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOm0/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQmJm4mJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK2grcCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpkK3UtKGc/bC8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpnPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLHRoaXMuZGF0YS55QXhpc1RvcFRleHQmJm4mJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNUb3BUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK2grcCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpkK2wtKGc/bC8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpnPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLHl9Z2V0UXVhZHJhbnRzKGUpe2xldHtxdWFkcmFudFNwYWNlOnJ9PWUse3F1YWRyYW50SGFsZkhlaWdodDpuLHF1YWRyYW50TGVmdDppLHF1YWRyYW50SGFsZldpZHRoOmEscXVhZHJhbnRUb3A6c309cixsPVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OmkrYSx5OnMsd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppLHk6cyx3aWR0aDphLGhlaWdodDpuLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OmkseTpzK24sd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppK2EseTpzK24sd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2ZvcihsZXQgdSBvZiBsKXUudGV4dC54PXUueCt1LndpZHRoLzIsdGhpcy5kYXRhLnBvaW50cy5sZW5ndGg9PT0wPyh1LnRleHQueT11LnkrdS5oZWlnaHQvMix1LnRleHQuaG9yaXpvbnRhbFBvcz0ibWlkZGxlIik6KHUudGV4dC55PXUueSt0aGlzLmNvbmZpZy5xdWFkcmFudFRleHRUb3BQYWRkaW5nLHUudGV4dC5ob3Jpem9udGFsUG9zPSJ0b3AiKTtyZXR1cm4gbH1nZXRRdWFkcmFudFBvaW50cyhlKXtsZXR7cXVhZHJhbnRTcGFjZTpyfT1lLHtxdWFkcmFudEhlaWdodDpuLHF1YWRyYW50TGVmdDppLHF1YWRyYW50VG9wOmEscXVhZHJhbnRXaWR0aDpzfT1yLGw9VGwoKS5kb21haW4oWzAsMV0pLnJhbmdlKFtpLHMraV0pLHU9VGwoKS5kb21haW4oWzAsMV0pLnJhbmdlKFtuK2EsYV0pO3JldHVybiB0aGlzLmRhdGEucG9pbnRzLm1hcChmPT57bGV0IGQ9dGhpcy5jbGFzc2VzLmdldChmLmNsYXNzTmFtZSk7cmV0dXJuIGQmJihmPXsuLi5kLC4uLmZ9KSx7eDpsKGYueCkseTp1KGYueSksZmlsbDpmLmNvbG9yPz90aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHJhZGl1czpmLnJhZGl1cz8/dGhpcy5jb25maWcucG9pbnRSYWRpdXMsdGV4dDp7dGV4dDpmLnRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRUZXh0RmlsbCx4OmwoZi54KSx5OnUoZi55KSt0aGlzLmNvbmZpZy5wb2ludFRleHRQYWRkaW5nLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6InRvcCIsZm9udFNpemU6dGhpcy5jb25maWcucG9pbnRMYWJlbEZvbnRTaXplLHJvdGF0aW9uOjB9LHN0cm9rZUNvbG9yOmYuc3Ryb2tlQ29sb3I/P3RoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwsc3Ryb2tlV2lkdGg6Zi5zdHJva2VXaWR0aD8/IjBweCJ9fSl9Z2V0Qm9yZGVycyhlKXtsZXQgcj10aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgvMix7cXVhZHJhbnRTcGFjZTpufT1lLHtxdWFkcmFudEhhbGZIZWlnaHQ6aSxxdWFkcmFudEhlaWdodDphLHF1YWRyYW50TGVmdDpzLHF1YWRyYW50SGFsZldpZHRoOmwscXVhZHJhbnRUb3A6dSxxdWFkcmFudFdpZHRoOmh9PW47cmV0dXJuW3tzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMtcix5MTp1LHgyOnMraCtyLHkyOnV9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMraCx5MTp1K3IseDI6cytoLHkyOnUrYS1yfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzLXIseTE6dSthLHgyOnMraCtyLHkyOnUrYX0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cyx5MTp1K3IseDI6cyx5Mjp1K2Etcn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cytsLHkxOnUrcix4MjpzK2wseTI6dSthLXJ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMrcix5MTp1K2kseDI6cytoLXIseTI6dStpfV19Z2V0VGl0bGUoZSl7aWYoZSlyZXR1cm57dGV4dDp0aGlzLmRhdGEudGl0bGVUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFRpdGxlRmlsbCxmb250U2l6ZTp0aGlzLmNvbmZpZy50aXRsZUZvbnRTaXplLGhvcml6b250YWxQb3M6InRvcCIsdmVydGljYWxQb3M6ImNlbnRlciIscm90YXRpb246MCx5OnRoaXMuY29uZmlnLnRpdGxlUGFkZGluZyx4OnRoaXMuY29uZmlnLmNoYXJ0V2lkdGgvMn19YnVpbGQoKXtsZXQgZT10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLHI9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxuPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LGk9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLGE9dGhpcy5jYWxjdWxhdGVTcGFjZShpLGUscixuKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHMoYSkscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKGEpLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKGksZSxyLGEpLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyhhKSx0aXRsZTp0aGlzLmdldFRpdGxlKG4pfX19fSk7ZnVuY3Rpb24gSk8odCl7cmV0dXJuIS9eIz8oW1xkQS1GYS1mXXs2fXxbXGRBLUZhLWZdezN9KSQvLnRlc3QodCl9ZnVuY3Rpb24gTWZlKHQpe3JldHVybiEvXlxkKyQvLnRlc3QodCl9ZnVuY3Rpb24gSWZlKHQpe3JldHVybiEvXlxkK3B4JC8udGVzdCh0KX12YXIgQnAsT2ZlPU4oKCk9PnsidXNlIHN0cmljdCI7QnA9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJbnZhbGlkU3R5bGVFcnJvciIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihgdmFsdWUgZm9yICR7ZX0gJHtyfSBpcyBpbnZhbGlkLCBwbGVhc2UgdXNlIGEgdmFsaWQgJHtufWApLHRoaXMubmFtZT0iSW52YWxpZFN0eWxlRXJyb3IifX07byhKTywidmFsaWRhdGVIZXhDb2RlIik7byhNZmUsInZhbGlkYXRlTnVtYmVyIik7byhJZmUsInZhbGlkYXRlU2l6ZUluUGl4ZWxzIil9KTtmdW5jdGlvbiBlaCh0KXtyZXR1cm4gd3IodC50cmltKCksWVZlKX1mdW5jdGlvbiBYVmUodCl7d2Euc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24galZlKHQpe3dhLnNldERhdGEoe3F1YWRyYW50MlRleHQ6ZWgodC50ZXh0KX0pfWZ1bmN0aW9uIEtWZSh0KXt3YS5zZXREYXRhKHtxdWFkcmFudDNUZXh0OmVoKHQudGV4dCl9KX1mdW5jdGlvbiBRVmUodCl7d2Euc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gWlZlKHQpe3dhLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6ZWgodC50ZXh0KX0pfWZ1bmN0aW9uIEpWZSh0KXt3YS5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gZVVlKHQpe3dhLnNldERhdGEoe3lBeGlzVG9wVGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gdFVlKHQpe3dhLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gZVAodCl7bGV0IGU9e307Zm9yKGxldCByIG9mIHQpe2xldFtuLGldPXIudHJpbSgpLnNwbGl0KC9ccyo6XHMqLyk7aWYobj09PSJyYWRpdXMiKXtpZihNZmUoaSkpdGhyb3cgbmV3IEJwKG4saSwibnVtYmVyIik7ZS5yYWRpdXM9cGFyc2VJbnQoaSl9ZWxzZSBpZihuPT09ImNvbG9yIil7aWYoSk8oaSkpdGhyb3cgbmV3IEJwKG4saSwiaGV4IGNvZGUiKTtlLmNvbG9yPWl9ZWxzZSBpZihuPT09InN0cm9rZS1jb2xvciIpe2lmKEpPKGkpKXRocm93IG5ldyBCcChuLGksImhleCBjb2RlIik7ZS5zdHJva2VDb2xvcj1pfWVsc2UgaWYobj09PSJzdHJva2Utd2lkdGgiKXtpZihJZmUoaSkpdGhyb3cgbmV3IEJwKG4saSwibnVtYmVyIG9mIHBpeGVscyAoZWcuIDEwcHgpIik7ZS5zdHJva2VXaWR0aD1pfWVsc2UgdGhyb3cgbmV3IEVycm9yKGBzdHlsZSBuYW1lZCAke259IGlzIG5vdCBzdXBwb3J0ZWQuYCl9cmV0dXJuIGV9ZnVuY3Rpb24gclVlKHQsZSxyLG4saSl7bGV0IGE9ZVAoaSk7d2EuYWRkUG9pbnRzKFt7eDpyLHk6bix0ZXh0OmVoKHQudGV4dCksY2xhc3NOYW1lOmUsLi4uYX1dKX1mdW5jdGlvbiBuVWUodCxlKXt3YS5hZGRDbGFzcyh0LGVQKGUpKX1mdW5jdGlvbiBpVWUodCl7d2Euc2V0Q29uZmlnKHtjaGFydFdpZHRoOnR9KX1mdW5jdGlvbiBhVWUodCl7d2Euc2V0Q29uZmlnKHtjaGFydEhlaWdodDp0fSl9ZnVuY3Rpb24gc1VlKCl7bGV0IHQ9bWUoKSx7dGhlbWVWYXJpYWJsZXM6ZSxxdWFkcmFudENoYXJ0OnJ9PXQ7cmV0dXJuIHImJndhLnNldENvbmZpZyhyKSx3YS5zZXRUaGVtZUNvbmZpZyh7cXVhZHJhbnQxRmlsbDplLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDplLnF1YWRyYW50MkZpbGwscXVhZHJhbnQzRmlsbDplLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDplLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6ZS5xdWFkcmFudDFUZXh0RmlsbCxxdWFkcmFudDJUZXh0RmlsbDplLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOmUucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6ZS5xdWFkcmFudDRUZXh0RmlsbCxxdWFkcmFudFBvaW50RmlsbDplLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDplLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6ZS5xdWFkcmFudFhBeGlzVGV4dEZpbGwscXVhZHJhbnRZQXhpc1RleHRGaWxsOmUucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmUucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6ZS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudFRpdGxlRmlsbDplLnF1YWRyYW50VGl0bGVGaWxsfSksd2Euc2V0RGF0YSh7dGl0bGVUZXh0Ok5yKCl9KSx3YS5idWlsZCgpfXZhciBZVmUsd2Esb1VlLFBmZSxCZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3ByKCk7Y2koKTtOZmUoKTtPZmUoKTtZVmU9bWUoKTtvKGVoLCJ0ZXh0U2FuaXRpemVyIik7d2E9bmV3IFBTO28oWFZlLCJzZXRRdWFkcmFudDFUZXh0Iik7byhqVmUsInNldFF1YWRyYW50MlRleHQiKTtvKEtWZSwic2V0UXVhZHJhbnQzVGV4dCIpO28oUVZlLCJzZXRRdWFkcmFudDRUZXh0Iik7byhaVmUsInNldFhBeGlzTGVmdFRleHQiKTtvKEpWZSwic2V0WEF4aXNSaWdodFRleHQiKTtvKGVVZSwic2V0WUF4aXNUb3BUZXh0Iik7byh0VWUsInNldFlBeGlzQm90dG9tVGV4dCIpO28oZVAsInBhcnNlU3R5bGVzIik7byhyVWUsImFkZFBvaW50Iik7byhuVWUsImFkZENsYXNzIik7byhpVWUsInNldFdpZHRoIik7byhhVWUsInNldEhlaWdodCIpO28oc1VlLCJnZXRRdWFkcmFudERhdGEiKTtvVWU9byhmdW5jdGlvbigpe3dhLmNsZWFyKCksa3IoKX0sImNsZWFyIiksUGZlPXtzZXRXaWR0aDppVWUsc2V0SGVpZ2h0OmFVZSxzZXRRdWFkcmFudDFUZXh0OlhWZSxzZXRRdWFkcmFudDJUZXh0OmpWZSxzZXRRdWFkcmFudDNUZXh0OktWZSxzZXRRdWFkcmFudDRUZXh0OlFWZSxzZXRYQXhpc0xlZnRUZXh0OlpWZSxzZXRYQXhpc1JpZ2h0VGV4dDpKVmUsc2V0WUF4aXNUb3BUZXh0OmVVZSxzZXRZQXhpc0JvdHRvbVRleHQ6dFVlLHBhcnNlU3R5bGVzOmVQLGFkZFBvaW50OnJVZSxhZGRDbGFzczpuVWUsZ2V0UXVhZHJhbnREYXRhOnNVZSxjbGVhcjpvVWUsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcn19KTt2YXIgbFVlLEZmZSwkZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO0d0KCk7eXQoKTt4aSgpO2xVZT1vKCh0LGUscixuKT0+e2Z1bmN0aW9uIGkoQyl7cmV0dXJuIEM9PT0idG9wIj8iaGFuZ2luZyI6Im1pZGRsZSJ9byhpLCJnZXREb21pbmFudEJhc2VMaW5lIik7ZnVuY3Rpb24gYShDKXtyZXR1cm4gQz09PSJsZWZ0Ij8ic3RhcnQiOiJtaWRkbGUifW8oYSwiZ2V0VGV4dEFuY2hvciIpO2Z1bmN0aW9uIHMoQyl7cmV0dXJuYHRyYW5zbGF0ZSgke0MueH0sICR7Qy55fSkgcm90YXRlKCR7Qy5yb3RhdGlvbnx8MH0pYH1vKHMsImdldFRyYW5zZm9ybWF0aW9uIik7bGV0IGw9bWUoKTtYLmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCt0KTtsZXQgdT1sLnNlY3VyaXR5TGV2ZWwsaDt1PT09InNhbmRib3giJiYoaD1HZSgiI2kiK2UpKTtsZXQgZD0odT09PSJzYW5kYm94Ij9HZShoLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IikpLnNlbGVjdChgW2lkPSIke2V9Il1gKSxwPWQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtYWluIiksbT1sLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGg/PzUwMCxnPWwucXVhZHJhbnRDaGFydD8uY2hhcnRIZWlnaHQ/PzUwMDtmbihkLGcsbSxsLnF1YWRyYW50Q2hhcnQ/LnVzZU1heFdpZHRoPz8hMCksZC5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrbSsiICIrZyksbi5kYi5zZXRIZWlnaHQoZyksbi5kYi5zZXRXaWR0aChtKTtsZXQgeT1uLmRiLmdldFF1YWRyYW50RGF0YSgpLHY9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLHg9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJvcmRlciIpLGI9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnRzIiksVD1wLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksUz1wLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGl0bGUiKTt5LnRpdGxlJiZTLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLHkudGl0bGUuZmlsbCkuYXR0cigiZm9udC1zaXplIix5LnRpdGxlLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsaSh5LnRpdGxlLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsYSh5LnRpdGxlLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixzKHkudGl0bGUpKS50ZXh0KHkudGl0bGUudGV4dCkseS5ib3JkZXJMaW5lcyYmeC5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKHkuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEM9PkMueDEpLmF0dHIoInkxIixDPT5DLnkxKS5hdHRyKCJ4MiIsQz0+Qy54MikuYXR0cigieTIiLEM9PkMueTIpLnN0eWxlKCJzdHJva2UiLEM9PkMuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsQz0+Qy5zdHJva2VXaWR0aCk7bGV0IHc9di5zZWxlY3RBbGwoImcucXVhZHJhbnQiKS5kYXRhKHkucXVhZHJhbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicXVhZHJhbnQiKTt3LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLEM9PkMueCkuYXR0cigieSIsQz0+Qy55KS5hdHRyKCJ3aWR0aCIsQz0+Qy53aWR0aCkuYXR0cigiaGVpZ2h0IixDPT5DLmhlaWdodCkuYXR0cigiZmlsbCIsQz0+Qy5maWxsKSx3LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLEM9PkMudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLEM9PkMudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLEM9PmkoQy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz0+YShDLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLEM9PnMoQy50ZXh0KSkudGV4dChDPT5DLnRleHQudGV4dCksVC5zZWxlY3RBbGwoImcubGFiZWwiKS5kYXRhKHkuYXhpc0xhYmVscykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChDPT5DLnRleHQpLmF0dHIoImZpbGwiLEM9PkMuZmlsbCkuYXR0cigiZm9udC1zaXplIixDPT5DLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsQz0+aShDLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz0+YShDLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixDPT5zKEMpKTtsZXQgXz1iLnNlbGVjdEFsbCgiZy5kYXRhLXBvaW50IikuZGF0YSh5LnBvaW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnQiKTtfLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLEM9PkMueCkuYXR0cigiY3kiLEM9PkMueSkuYXR0cigiciIsQz0+Qy5yYWRpdXMpLmF0dHIoImZpbGwiLEM9PkMuZmlsbCkuYXR0cigic3Ryb2tlIixDPT5DLnN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLEM9PkMuc3Ryb2tlV2lkdGgpLF8uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChDPT5DLnRleHQudGV4dCkuYXR0cigiZmlsbCIsQz0+Qy50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsQz0+Qy50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsQz0+aShDLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixDPT5hKEMudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsQz0+cyhDLnRleHQpKX0sImRyYXciKSxGZmU9e2RyYXc6bFVlfX0pO3ZhciB6ZmU9e307dXIoemZlLHtkaWFncmFtOigpPT5jVWV9KTt2YXIgY1VlLEdmZT1OKCgpPT57InVzZSBzdHJpY3QiO1JmZSgpO0JmZSgpOyRmZSgpO2NVZT17cGFyc2VyOkxmZSxkYjpQZmUscmVuZGVyZXI6RmZlLHN0eWxlczpvKCgpPT4iIiwic3R5bGVzIil9fSk7dmFyIHRQLEhmZSxXZmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0UD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oSSxNLFAsQil7Zm9yKFA9UHx8e30sQj1JLmxlbmd0aDtCLS07UFtJW0JdXT1NKTtyZXR1cm4gUH0sIm8iKSxlPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzXSxyPVsyLDZdLG49WzEsM10saT1bMSw1XSxhPVsxLDZdLHM9WzEsN10sbD1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDM0LDM1LDM2XSx1PVsxLDI1XSxoPVsxLDI2XSxmPVsxLDI4XSxkPVsxLDI5XSxwPVsxLDMwXSxtPVsxLDMxXSxnPVsxLDMyXSx5PVsxLDMzXSx2PVsxLDM0XSx4PVsxLDM1XSxiPVsxLDM2XSxUPVsxLDM3XSxTPVsxLDQzXSx3PVsxLDQyXSxFPVsxLDQ3XSxfPVsxLDUwXSxDPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDM0LDM1LDM2XSxEPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2XSxPPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2LDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxSPVsxLDY0XSxrPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LFhZQ0hBUlQ6NSxjaGFydENvbmZpZzo2LGRvY3VtZW50OjcsQ0hBUlRfT1JJRU5UQVRJT046OCxzdGF0ZW1lbnQ6OSx0aXRsZToxMCx0ZXh0OjExLFhfQVhJUzoxMixwYXJzZVhBeGlzOjEzLFlfQVhJUzoxNCxwYXJzZVlBeGlzOjE1LExJTkU6MTYscGxvdERhdGE6MTcsQkFSOjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLFNRVUFSRV9CUkFDRVNfU1RBUlQ6MjQsY29tbWFTZXBhcmF0ZWROdW1iZXJzOjI1LFNRVUFSRV9CUkFDRVNfRU5EOjI2LE5VTUJFUl9XSVRIX0RFQ0lNQUw6MjcsQ09NTUE6MjgseEF4aXNEYXRhOjI5LGJhbmREYXRhOjMwLEFSUk9XX0RFTElNSVRFUjozMSxjb21tYVNlcGFyYXRlZFRleHRzOjMyLHlBeGlzRGF0YTozMyxORVdMSU5FOjM0LFNFTUk6MzUsRU9GOjM2LGFscGhhTnVtOjM3LFNUUjozOCxNRF9TVFI6MzksYWxwaGFOdW1Ub2tlbjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLFBMVVM6NDQsRVFVQUxTOjQ1LE1VTFQ6NDYsRE9UOjQ3LEJSS1Q6NDgsTUlOVVM6NDksVU5ERVJTQ09SRTo1MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiWFlDSEFSVCIsODoiQ0hBUlRfT1JJRU5UQVRJT04iLDEwOiJ0aXRsZSIsMTI6IlhfQVhJUyIsMTQ6IllfQVhJUyIsMTY6IkxJTkUiLDE4OiJCQVIiLDE5OiJhY2NfdGl0bGUiLDIwOiJhY2NfdGl0bGVfdmFsdWUiLDIxOiJhY2NfZGVzY3IiLDIyOiJhY2NfZGVzY3JfdmFsdWUiLDIzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNDoiU1FVQVJFX0JSQUNFU19TVEFSVCIsMjY6IlNRVUFSRV9CUkFDRVNfRU5EIiwyNzoiTlVNQkVSX1dJVEhfREVDSU1BTCIsMjg6IkNPTU1BIiwzMToiQVJST1dfREVMSU1JVEVSIiwzNDoiTkVXTElORSIsMzU6IlNFTUkiLDM2OiJFT0YiLDM4OiJTVFIiLDM5OiJNRF9TVFIiLDQxOiJBTVAiLDQyOiJOVU0iLDQzOiJBTFBIQSIsNDQ6IlBMVVMiLDQ1OiJFUVVBTFMiLDQ2OiJNVUxUIiw0NzoiRE9UIiw0ODoiQlJLVCIsNDk6Ik1JTlVTIiw1MDoiVU5ERVJTQ09SRSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMywyXSxbMywxXSxbNiwxXSxbNywwXSxbNywyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwzXSxbOSwyXSxbOSwzXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTcsM10sWzI1LDNdLFsyNSwxXSxbMTMsMV0sWzEzLDJdLFsxMywxXSxbMjksMV0sWzI5LDNdLFszMCwzXSxbMzIsM10sWzMyLDFdLFsxNSwxXSxbMTUsMl0sWzE1LDFdLFszMywzXSxbNCwxXSxbNCwxXSxbNCwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMzcsMV0sWzM3LDJdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKE0sUCxCLEYseiwkLFUpe3ZhciBLPSQubGVuZ3RoLTE7c3dpdGNoKHope2Nhc2UgNTpGLnNldE9yaWVudGF0aW9uKCRbS10pO2JyZWFrO2Nhc2UgOTpGLnNldERpYWdyYW1UaXRsZSgkW0tdLnRleHQudHJpbSgpKTticmVhaztjYXNlIDEyOkYuc2V0TGluZURhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LCRbS10pO2JyZWFrO2Nhc2UgMTM6Ri5zZXRMaW5lRGF0YSgkW0stMV0sJFtLXSk7YnJlYWs7Y2FzZSAxNDpGLnNldEJhckRhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LCRbS10pO2JyZWFrO2Nhc2UgMTU6Ri5zZXRCYXJEYXRhKCRbSy0xXSwkW0tdKTticmVhaztjYXNlIDE2OnRoaXMuJD0kW0tdLnRyaW0oKSxGLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD0kW0tdLnRyaW0oKSxGLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9JFtLLTFdO2JyZWFrO2Nhc2UgMjA6dGhpcy4kPVtOdW1iZXIoJFtLLTJdKSwuLi4kW0tdXTticmVhaztjYXNlIDIxOnRoaXMuJD1bTnVtYmVyKCRbS10pXTticmVhaztjYXNlIDIyOkYuc2V0WEF4aXNUaXRsZSgkW0tdKTticmVhaztjYXNlIDIzOkYuc2V0WEF4aXNUaXRsZSgkW0stMV0pO2JyZWFrO2Nhc2UgMjQ6Ri5zZXRYQXhpc1RpdGxlKHt0eXBlOiJ0ZXh0Iix0ZXh0OiIifSk7YnJlYWs7Y2FzZSAyNTpGLnNldFhBeGlzQmFuZCgkW0tdKTticmVhaztjYXNlIDI2OkYuc2V0WEF4aXNSYW5nZURhdGEoTnVtYmVyKCRbSy0yXSksTnVtYmVyKCRbS10pKTticmVhaztjYXNlIDI3OnRoaXMuJD0kW0stMV07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9WyRbSy0yXSwuLi4kW0tdXTticmVhaztjYXNlIDI5OnRoaXMuJD1bJFtLXV07YnJlYWs7Y2FzZSAzMDpGLnNldFlBeGlzVGl0bGUoJFtLXSk7YnJlYWs7Y2FzZSAzMTpGLnNldFlBeGlzVGl0bGUoJFtLLTFdKTticmVhaztjYXNlIDMyOkYuc2V0WUF4aXNUaXRsZSh7dHlwZToidGV4dCIsdGV4dDoiIn0pO2JyZWFrO2Nhc2UgMzM6Ri5zZXRZQXhpc1JhbmdlRGF0YShOdW1iZXIoJFtLLTJdKSxOdW1iZXIoJFtLXSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0ZXh0OiRbS10sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXt0ZXh0OiRbS10sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzk6dGhpcy4kPXt0ZXh0OiRbS10sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDQwOnRoaXMuJD0kW0tdO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPSRbSy0xXSsiIiskW0tdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt0KGUscix7MzoxLDQ6Miw3OjQsNTpuLDM0OmksMzU6YSwzNjpzfSksezE6WzNdfSx0KGUscix7NDoyLDc6NCwzOjgsNTpuLDM0OmksMzU6YSwzNjpzfSksdChlLHIsezQ6Miw3OjQsNjo5LDM6MTAsNTpuLDg6WzEsMTFdLDM0OmksMzU6YSwzNjpzfSksezE6WzIsNF0sOToxMiwxMDpbMSwxM10sMTI6WzEsMTRdLDE0OlsxLDE1XSwxNjpbMSwxNl0sMTg6WzEsMTddLDE5OlsxLDE4XSwyMTpbMSwxOV0sMjM6WzEsMjBdfSx0KGwsWzIsMzRdKSx0KGwsWzIsMzVdKSx0KGwsWzIsMzZdKSx7MTpbMiwxXX0sdChlLHIsezQ6Miw3OjQsMzoyMSw1Om4sMzQ6aSwzNTphLDM2OnN9KSx7MTpbMiwzXX0sdChsLFsyLDVdKSx0KGUsWzIsN10sezQ6MjIsMzQ6aSwzNTphLDM2OnN9KSx7MTE6MjMsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlR9LHsxMTozOSwxMzozOCwyNDpTLDI3OncsMjk6NDAsMzA6NDEsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlR9LHsxMTo0NSwxNTo0NCwyNzpFLDMzOjQ2LDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDpUfSx7MTE6NDksMTc6NDgsMjQ6XywzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VH0sezExOjUyLDE3OjUxLDI0Ol8sMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlR9LHsyMDpbMSw1M119LHsyMjpbMSw1NF19LHQoQyxbMiwxOF0pLHsxOlsyLDJdfSx0KEMsWzIsOF0pLHQoQyxbMiw5XSksdChELFsyLDM3XSx7NDA6NTUsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VH0pLHQoRCxbMiwzOF0pLHQoRCxbMiwzOV0pLHQoTyxbMiw0MF0pLHQoTyxbMiw0Ml0pLHQoTyxbMiw0M10pLHQoTyxbMiw0NF0pLHQoTyxbMiw0NV0pLHQoTyxbMiw0Nl0pLHQoTyxbMiw0N10pLHQoTyxbMiw0OF0pLHQoTyxbMiw0OV0pLHQoTyxbMiw1MF0pLHQoTyxbMiw1MV0pLHQoQyxbMiwxMF0pLHQoQyxbMiwyMl0sezMwOjQxLDI5OjU2LDI0OlMsMjc6d30pLHQoQyxbMiwyNF0pLHQoQyxbMiwyNV0pLHszMTpbMSw1N119LHsxMTo1OSwzMjo1OCwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VH0sdChDLFsyLDExXSksdChDLFsyLDMwXSx7MzM6NjAsMjc6RX0pLHQoQyxbMiwzMl0pLHszMTpbMSw2MV19LHQoQyxbMiwxMl0pLHsxNzo2MiwyNDpffSx7MjU6NjMsMjc6Un0sdChDLFsyLDE0XSksezE3OjY1LDI0Ol99LHQoQyxbMiwxNl0pLHQoQyxbMiwxN10pLHQoTyxbMiw0MV0pLHQoQyxbMiwyM10pLHsyNzpbMSw2Nl19LHsyNjpbMSw2N119LHsyNjpbMiwyOV0sMjg6WzEsNjhdfSx0KEMsWzIsMzFdKSx7Mjc6WzEsNjldfSx0KEMsWzIsMTNdKSx7MjY6WzEsNzBdfSx7MjY6WzIsMjFdLDI4OlsxLDcxXX0sdChDLFsyLDE1XSksdChDLFsyLDI2XSksdChDLFsyLDI3XSksezExOjU5LDMyOjcyLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDpUfSx0KEMsWzIsMzNdKSx0KEMsWzIsMTldKSx7MjU6NzMsMjc6Un0sezI2OlsyLDI4XX0sezI2OlsyLDIwXX1dLGRlZmF1bHRBY3Rpb25zOns4OlsyLDFdLDEwOlsyLDNdLDIxOlsyLDJdLDcyOlsyLDI4XSw3MzpbMiwyMF19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihNLFApe2lmKFAucmVjb3ZlcmFibGUpdGhpcy50cmFjZShNKTtlbHNle3ZhciBCPW5ldyBFcnJvcihNKTt0aHJvdyBCLmhhc2g9UCxCfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKE0pe3ZhciBQPXRoaXMsQj1bMF0sRj1bXSx6PVtudWxsXSwkPVtdLFU9dGhpcy50YWJsZSxLPSIiLGVlPTAsWT0wLGNlPTAsWj0yLHVlPTEsUT0kLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGo9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxuZT17eXk6e319O2Zvcih2YXIgdGUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx0ZSkmJihuZS55eVt0ZV09dGhpcy55eVt0ZV0pO2ouc2V0SW5wdXQoTSxuZS55eSksbmUueXkubGV4ZXI9aixuZS55eS5wYXJzZXI9dGhpcyx0eXBlb2Ygai55eWxsb2M+InUiJiYoai55eWxsb2M9e30pO3ZhciBoZT1qLnl5bGxvYzskLnB1c2goaGUpO3ZhciBsZT1qLm9wdGlvbnMmJmoub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG5lLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW5lLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEooaWUpe0IubGVuZ3RoPUIubGVuZ3RoLTIqaWUsei5sZW5ndGg9ei5sZW5ndGgtaWUsJC5sZW5ndGg9JC5sZW5ndGgtaWV9byhKLCJwb3BTdGFjayIpO2Z1bmN0aW9uIFNlKCl7dmFyIGllO3JldHVybiBpZT1GLnBvcCgpfHxqLmxleCgpfHx1ZSx0eXBlb2YgaWUhPSJudW1iZXIiJiYoaWUgaW5zdGFuY2VvZiBBcnJheSYmKEY9aWUsaWU9Ri5wb3AoKSksaWU9UC5zeW1ib2xzX1tpZV18fGllKSxpZX1vKFNlLCJsZXgiKTtmb3IodmFyIHNlLGFlLE9lLHllLEJlLEhlLHplPXt9LExlLEllLHhlLHE7Oyl7aWYoT2U9QltCLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW09lXT95ZT10aGlzLmRlZmF1bHRBY3Rpb25zW09lXTooKHNlPT09bnVsbHx8dHlwZW9mIHNlPiJ1IikmJihzZT1TZSgpKSx5ZT1VW09lXSYmVVtPZV1bc2VdKSx0eXBlb2YgeWU+InUifHwheWUubGVuZ3RofHwheWVbMF0pe3ZhciBkZT0iIjtxPVtdO2ZvcihMZSBpbiBVW09lXSl0aGlzLnRlcm1pbmFsc19bTGVdJiZMZT5aJiZxLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tMZV0rIiciKTtqLnNob3dQb3NpdGlvbj9kZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhlZSsxKStgOgpgK2ouc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtxLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bc2VdfHxzZSkrIiciOmRlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpKyI6IFVuZXhwZWN0ZWQgIisoc2U9PXVlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3NlXXx8c2UpKyInIiksdGhpcy5wYXJzZUVycm9yKGRlLHt0ZXh0OmoubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3NlXXx8c2UsbGluZTpqLnl5bGluZW5vLGxvYzpoZSxleHBlY3RlZDpxfSl9aWYoeWVbMF1pbnN0YW5jZW9mIEFycmF5JiZ5ZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK09lKyIsIHRva2VuOiAiK3NlKTtzd2l0Y2goeWVbMF0pe2Nhc2UgMTpCLnB1c2goc2UpLHoucHVzaChqLnl5dGV4dCksJC5wdXNoKGoueXlsbG9jKSxCLnB1c2goeWVbMV0pLHNlPW51bGwsYWU/KHNlPWFlLGFlPW51bGwpOihZPWoueXlsZW5nLEs9ai55eXRleHQsZWU9ai55eWxpbmVubyxoZT1qLnl5bGxvYyxjZT4wJiZjZS0tKTticmVhaztjYXNlIDI6aWYoSWU9dGhpcy5wcm9kdWN0aW9uc19beWVbMV1dWzFdLHplLiQ9elt6Lmxlbmd0aC1JZV0semUuXyQ9e2ZpcnN0X2xpbmU6JFskLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTokWyQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46JFskLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46JFskLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbGUmJih6ZS5fJC5yYW5nZT1bJFskLmxlbmd0aC0oSWV8fDEpXS5yYW5nZVswXSwkWyQubGVuZ3RoLTFdLnJhbmdlWzFdXSksSGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHplLFtLLFksZWUsbmUueXkseWVbMV0seiwkXS5jb25jYXQoUSkpLHR5cGVvZiBIZTwidSIpcmV0dXJuIEhlO0llJiYoQj1CLnNsaWNlKDAsLTEqSWUqMiksej16LnNsaWNlKDAsLTEqSWUpLCQ9JC5zbGljZSgwLC0xKkllKSksQi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3llWzFdXVswXSksei5wdXNoKHplLiQpLCQucHVzaCh6ZS5fJCkseGU9VVtCW0IubGVuZ3RoLTJdXVtCW0IubGVuZ3RoLTFdXSxCLnB1c2goeGUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxMPWZ1bmN0aW9uKCl7dmFyIEk9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihQLEIpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoUCxCKTtlbHNlIHRocm93IG5ldyBFcnJvcihQKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKE0sUCl7cmV0dXJuIHRoaXMueXk9UHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9TSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBNPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1NLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1NLHRoaXMubWF0Y2hlZCs9TTt2YXIgUD1NLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksTX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihNKXt2YXIgUD1NLmxlbmd0aCxCPU0uc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1NK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1QKSx0aGlzLm9mZnNldC09UDt2YXIgRj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxCLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Qi5sZW5ndGgtMSk7dmFyIHo9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkI/KEIubGVuZ3RoPT09Ri5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0ZbRi5sZW5ndGgtQi5sZW5ndGhdLmxlbmd0aC1CWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt6WzBdLHpbMF0rdGhpcy55eWxlbmctUF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKE0pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShNKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgTT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKE0ubGVuZ3RoPjIwPyIuLi4iOiIiKStNLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIE09dGhpcy5tYXRjaDtyZXR1cm4gTS5sZW5ndGg8MjAmJihNKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1NLmxlbmd0aCkpLChNLnN1YnN0cigwLDIwKSsoTS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBNPXRoaXMucGFzdElucHV0KCksUD1uZXcgQXJyYXkoTS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBNK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtQKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihNLFApe3ZhciBCLEYsejtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoej17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih6Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEY9TVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksRiYmKHRoaXMueXlsaW5lbm8rPUYubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Rj9GW0YubGVuZ3RoLTFdLmxlbmd0aC1GW0YubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rTVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1NWzBdLHRoaXMubWF0Y2grPU1bMF0sdGhpcy5tYXRjaGVzPU0sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoTVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9TVswXSxCPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFAsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksQilyZXR1cm4gQjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgJCBpbiB6KXRoaXNbJF09elskXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgTSxQLEIsRjt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB6PXRoaXMuX2N1cnJlbnRSdWxlcygpLCQ9MDskPHoubGVuZ3RoOyQrKylpZihCPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbelskXV0pLEImJighUHx8QlswXS5sZW5ndGg+UFswXS5sZW5ndGgpKXtpZihQPUIsRj0kLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKE09dGhpcy50ZXN0X21hdGNoKEIselskXSksTSE9PSExKXJldHVybiBNO2lmKHRoaXMuX2JhY2t0cmFjayl7UD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBQPyhNPXRoaXMudGVzdF9tYXRjaChQLHpbRl0pLE0hPT0hMT9NOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5uZXh0KCk7cmV0dXJuIFB8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFApe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChQKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBQPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFA+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihQKXtyZXR1cm4gUD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFB8fDApLFA+PTA/dGhpcy5jb25kaXRpb25TdGFja1tQXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFApe3RoaXMuYmVnaW4oUCl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihQLEIsRix6KXt2YXIgJD16O3N3aXRjaChGKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gMzQ7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gMTA7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksMTk7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksMjE7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTE6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiA1O2Nhc2UgMTU6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfZGF0YSIpLCJYX0FYSVMiO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWV9BWElTIjticmVhaztjYXNlIDE4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19iYW5kX2RhdGEiKSwyNDticmVhaztjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE2O2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhIiksMTg7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGFfaW5uZXIiKSwyNDticmVhaztjYXNlIDIzOnJldHVybiAyNztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7YnJlYWs7Y2FzZSAyNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4iU1RSIjtjYXNlIDI5OnJldHVybiAyNDtjYXNlIDMwOnJldHVybiAyNjtjYXNlIDMxOnJldHVybiA0MztjYXNlIDMyOnJldHVybiJDT0xPTiI7Y2FzZSAzMzpyZXR1cm4gNDQ7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDU7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDg7Y2FzZSAzODpyZXR1cm4gNTA7Y2FzZSAzOTpyZXR1cm4gNDc7Y2FzZSA0MDpyZXR1cm4gNDE7Y2FzZSA0MTpyZXR1cm4gNDk7Y2FzZSA0MjpyZXR1cm4gNDI7Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnJldHVybiAzNTtjYXNlIDQ1OnJldHVybiAzNn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzooXHI/XG4pKS9pLC9eKD86KFxyP1xuKSkvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86XHspL2ksL14oPzpbXlx9XSopL2ksL14oPzp4eWNoYXJ0LWJldGFcYikvaSwvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLC9eKD86eC1heGlzXGIpL2ksL14oPzp5LWF4aXNcYikvaSwvXig/OlxbKS9pLC9eKD86LS0+KS9pLC9eKD86bGluZVxiKS9pLC9eKD86YmFyXGIpL2ksL14oPzpcWykvaSwvXig/OlsrLV0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpL2ksL14oPzpcXSkvaSwvXig/Oig/OmBcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx7IHRoaXNcLnB1c2hTdGF0ZVwobWRfc3RyaW5nXCk7IFx9XG48bWRfc3RyaW5nPlwoXD86XChcPyFgIlwpXC5cKVwrICAgICAgICAgICAgICAgICAgXHsgcmV0dXJuIE1EX1NUUjsgXH1cbjxtZF9zdHJpbmc+XChcPzpgKSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XFspL2ksL14oPzpcXSkvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccyspL2ksL14oPzo7KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7ZGF0YV9pbm5lcjp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sZGF0YTp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMiwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2JhbmRfZGF0YTp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYXhpc19kYXRhOntydWxlczpbMCwxLDIsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNywyOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBJfSgpO2subGV4ZXI9TDtmdW5jdGlvbiBBKCl7dGhpcy55eT17fX1yZXR1cm4gbyhBLCJQYXJzZXIiKSxBLnByb3RvdHlwZT1rLGsuUGFyc2VyPUEsbmV3IEF9KCk7dFAucGFyc2VyPXRQO0hmZT10UH0pO2Z1bmN0aW9uIHJQKHQpe3JldHVybiB0LnR5cGU9PT0iYmFyIn1mdW5jdGlvbiBCUyh0KXtyZXR1cm4gdC50eXBlPT09ImJhbmQifWZ1bmN0aW9uIE4xKHQpe3JldHVybiB0LnR5cGU9PT0ibGluZWFyIn12YXIgRlM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHJQLCJpc0JhclBsb3QiKTtvKEJTLCJpc0JhbmRBeGlzRGF0YSIpO28oTjEsImlzTGluZWFyQXhpc0RhdGEiKX0pO3ZhciBNMSxuUD1OKCgpPT57InVzZSBzdHJpY3QiO2FvKCk7TTE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5wYXJlbnRHcm91cD1lfXN0YXRpY3tvKHRoaXMsIlRleHREaW1lbnNpb25DYWxjdWxhdG9yV2l0aEZvbnQiKX1nZXRNYXhEaW1lbnNpb24oZSxyKXtpZighdGhpcy5wYXJlbnRHcm91cClyZXR1cm57d2lkdGg6ZS5yZWR1Y2UoKGEscyk9Pk1hdGgubWF4KHMubGVuZ3RoLGEpLDApKnIsaGVpZ2h0OnJ9O2xldCBuPXt3aWR0aDowLGhlaWdodDowfSxpPXRoaXMucGFyZW50R3JvdXAuYXBwZW5kKCJnIikuYXR0cigidmlzaWJpbGl0eSIsImhpZGRlbiIpLmF0dHIoImZvbnQtc2l6ZSIscik7Zm9yKGxldCBhIG9mIGUpe2xldCBzPXdRKGksMSxhKSxsPXM/cy53aWR0aDphLmxlbmd0aCpyLHU9cz9zLmhlaWdodDpyO24ud2lkdGg9TWF0aC5tYXgobi53aWR0aCxsKSxuLmhlaWdodD1NYXRoLm1heChuLmhlaWdodCx1KX1yZXR1cm4gaS5yZW1vdmUoKSxufX19KTt2YXIgSTEsaVA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLmF4aXNDb25maWc9ZTt0aGlzLnRpdGxlPXI7dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1uO3RoaXMuYXhpc1RoZW1lQ29uZmlnPWk7dGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5heGlzUG9zaXRpb249ImxlZnQiO3RoaXMuc2hvd1RpdGxlPSExO3RoaXMuc2hvd0xhYmVsPSExO3RoaXMuc2hvd1RpY2s9ITE7dGhpcy5zaG93QXhpc0xpbmU9ITE7dGhpcy5vdXRlclBhZGRpbmc9MDt0aGlzLnRpdGxlVGV4dEhlaWdodD0wO3RoaXMubGFiZWxUZXh0SGVpZ2h0PTA7dGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXN0YXRpY3tvKHRoaXMsIkJhc2VBeGlzIil9c2V0UmFuZ2UoZSl7dGhpcy5yYW5nZT1lLHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQifHx0aGlzLmF4aXNQb3NpdGlvbj09PSJyaWdodCI/dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWVbMV0tZVswXTp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lWzFdLWVbMF0sdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Z2V0UmFuZ2UoKXtyZXR1cm5bdGhpcy5yYW5nZVswXSt0aGlzLm91dGVyUGFkZGluZyx0aGlzLnJhbmdlWzFdLXRoaXMub3V0ZXJQYWRkaW5nXX1zZXRBeGlzUG9zaXRpb24oZSl7dGhpcy5heGlzUG9zaXRpb249ZSx0aGlzLnNldFJhbmdlKHRoaXMucmFuZ2UpfWdldFRpY2tEaXN0YW5jZSgpe2xldCBlPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoZVswXS1lWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoZT0+ZS50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXsuNyp0aGlzLmdldFRpY2tEaXN0YW5jZSgpPnRoaXMub3V0ZXJQYWRkaW5nKjImJih0aGlzLm91dGVyUGFkZGluZz1NYXRoLmZsb29yKC43KnRoaXMuZ2V0VGlja0Rpc3RhbmNlKCkvMikpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWNhbGN1bGF0ZVNwYWNlSWZEcmF3bkhvcml6b250YWxseShlKXtsZXQgcj1lLmhlaWdodDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZyPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoci09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2xldCBuPXRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKSxpPS4yKmUud2lkdGg7dGhpcy5vdXRlclBhZGRpbmc9TWF0aC5taW4obi53aWR0aC8yLGkpO2xldCBhPW4uaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjt0aGlzLmxhYmVsVGV4dEhlaWdodD1uLmhlaWdodCxhPD1yJiYoci09YSx0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZyPj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsci09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2xldCBuPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSksaT1uLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9bi5oZWlnaHQsaTw9ciYmKHItPWksdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWUud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWUuaGVpZ2h0LXJ9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoZSl7bGV0IHI9ZS53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZyPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoci09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2xldCBuPXRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKSxpPS4yKmUuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKG4uaGVpZ2h0LzIsaSk7bGV0IGE9bi53aWR0aCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7YTw9ciYmKHItPWEsdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmcj49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLHItPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtsZXQgbj10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy50aXRsZV0sdGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUpLGk9bi5oZWlnaHQrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyoyO3RoaXMudGl0bGVUZXh0SGVpZ2h0PW4uaGVpZ2h0LGk8PXImJihyLT1pLHRoaXMuc2hvd1RpdGxlPSEwKX10aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lLndpZHRoLXIsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWUuaGVpZ2h0fWNhbGN1bGF0ZVNwYWNlKGUpe3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoZSk6dGhpcy5jYWxjdWxhdGVTcGFjZUlmRHJhd25Ib3Jpem9udGFsbHkoZSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fXNldEJvdW5kaW5nQm94WFkoZSl7dGhpcy5ib3VuZGluZ1JlY3QueD1lLngsdGhpcy5ib3VuZGluZ1JlY3QueT1lLnl9Z2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJheGlzbC1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHtyfSwke3RoaXMuYm91bmRpbmdSZWN0Lnl9IEwgJHtyfSwke3RoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fSBgLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcuYXhpc0xpbmVDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aH1dfSl9aWYodGhpcy5zaG93TGFiZWwmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocj0+KHt0ZXh0OnIudG9TdHJpbmcoKSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtKHRoaXMuc2hvd0xhYmVsP3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmc6MCktKHRoaXMuc2hvd1RpY2s/dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg6MCktKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApLHk6dGhpcy5nZXRTY2FsZVZhbHVlKHIpLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJtaWRkbGUiLGhvcml6b250YWxQb3M6InJpZ2h0In0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7cn0sJHt0aGlzLmdldFNjYWxlVmFsdWUobil9IEwgJHtyLXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RofSwke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LzIsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjI3MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHNGb3JCb3R0b21BeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHtyfSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHtyfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHI9Pih7dGV4dDpyLnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUocikseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcrKHRoaXMuc2hvd1RpY2s/dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg6MCkrKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9KSl9KSx0aGlzLnNob3dUaWNrKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSwke3J9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cit0aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5yYW5nZVswXSsodGhpcy5yYW5nZVsxXS10aGlzLnJhbmdlWzBdKS8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZy10aGlzLnRpdGxlVGV4dEhlaWdodCxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHNGb3JUb3BBeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoLzI7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsidG9wLWF4aXMiLCJheGlzLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7cn0gTCAke3RoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGh9LCR7cn1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcuYXhpc0xpbmVDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aH1dfSl9aWYodGhpcy5zaG93TGFiZWwmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChyPT4oe3RleHQ6ci50b1N0cmluZygpLHg6dGhpcy5nZXRTY2FsZVZhbHVlKHIpLHk6dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93VGl0bGU/dGhpcy50aXRsZVRleHRIZWlnaHQrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyoyOjApK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0Lnk7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsidG9wLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKG49Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyK3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCl9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cit0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aWNrQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLnRpY2tXaWR0aH0pKX0pfXJldHVybiB0aGlzLnNob3dUaXRsZSYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLzIseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksZX1nZXREcmF3YWJsZUVsZW1lbnRzKCl7aWYodGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCIpcmV0dXJuIHRoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCk7aWYodGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiKXRocm93IEVycm9yKCJEcmF3aW5nIG9mIHJpZ2h0IGF4aXMgaXMgbm90IGltcGxlbWVudGVkIik7cmV0dXJuIHRoaXMuYXhpc1Bvc2l0aW9uPT09ImJvdHRvbSI/dGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpOnRoaXMuYXhpc1Bvc2l0aW9uPT09InRvcCI/dGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpOltdfX19KTt2YXIgJFMscWZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTt5dCgpO2lQKCk7JFM9Y2xhc3MgZXh0ZW5kcyBJMXtzdGF0aWN7byh0aGlzLCJCYW5kQXhpcyIpfWNvbnN0cnVjdG9yKGUscixuLGksYSl7c3VwZXIoZSxpLGEsciksdGhpcy5jYXRlZ29yaWVzPW4sdGhpcy5zY2FsZT1WMCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9c2V0UmFuZ2UoZSl7c3VwZXIuc2V0UmFuZ2UoZSl9cmVjYWxjdWxhdGVTY2FsZSgpe3RoaXMuc2NhbGU9VjAoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpLnBhZGRpbmdJbm5lcigxKS5wYWRkaW5nT3V0ZXIoMCkuYWxpZ24oLjUpLFgudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5zY2FsZShlKT8/dGhpcy5nZXRSYW5nZSgpWzBdfX19KTt2YXIgelMsWWZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtpUCgpO3pTPWNsYXNzIGV4dGVuZHMgSTF7c3RhdGlje28odGhpcywiTGluZWFyQXhpcyIpfWNvbnN0cnVjdG9yKGUscixuLGksYSl7c3VwZXIoZSxpLGEsciksdGhpcy5kb21haW49bix0aGlzLnNjYWxlPVRsKCkuZG9tYWluKHRoaXMuZG9tYWluKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFRpY2tWYWx1ZXMoKXtyZXR1cm4gdGhpcy5zY2FsZS50aWNrcygpfXJlY2FsY3VsYXRlU2NhbGUoKXtsZXQgZT1bLi4udGhpcy5kb21haW5dO3RoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZlLnJldmVyc2UoKSx0aGlzLnNjYWxlPVRsKCkuZG9tYWluKGUpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0U2NhbGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5zY2FsZShlKX19fSk7ZnVuY3Rpb24gYVAodCxlLHIsbil7bGV0IGk9bmV3IE0xKG4pO3JldHVybiBCUyh0KT9uZXcgJFMoZSxyLHQuY2F0ZWdvcmllcyx0LnRpdGxlLGkpOm5ldyB6UyhlLHIsW3QubWluLHQubWF4XSx0LnRpdGxlLGkpfXZhciBYZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGUygpO25QKCk7cWZlKCk7WWZlKCk7byhhUCwiZ2V0QXhpcyIpfSk7ZnVuY3Rpb24gamZlKHQsZSxyLG4pe2xldCBpPW5ldyBNMShuKTtyZXR1cm4gbmV3IHNQKGksdCxlLHIpfXZhciBzUCxLZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuUCgpO3NQPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9ZTt0aGlzLmNoYXJ0Q29uZmlnPXI7dGhpcy5jaGFydERhdGE9bjt0aGlzLmNoYXJ0VGhlbWVDb25maWc9aTt0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXN0YXRpY3tvKHRoaXMsIkNoYXJ0VGl0bGUiKX1zZXRCb3VuZGluZ0JveFhZKGUpe3RoaXMuYm91bmRpbmdSZWN0Lng9ZS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9ZS55fWNhbGN1bGF0ZVNwYWNlKGUpe2xldCByPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLmNoYXJ0RGF0YS50aXRsZV0sdGhpcy5jaGFydENvbmZpZy50aXRsZUZvbnRTaXplKSxuPU1hdGgubWF4KHIud2lkdGgsZS53aWR0aCksaT1yLmhlaWdodCsyKnRoaXMuY2hhcnRDb25maWcudGl0bGVQYWRkaW5nO3JldHVybiByLndpZHRoPD1uJiZyLmhlaWdodDw9aSYmdGhpcy5jaGFydENvbmZpZy5zaG93VGl0bGUmJnRoaXMuY2hhcnREYXRhLnRpdGxlJiYodGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9bix0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9aSx0aGlzLnNob3dDaGFydFRpdGxlPSEwKSx7d2lkdGg6dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsaGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH19Z2V0RHJhd2FibGVFbGVtZW50cygpe2xldCBlPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZlLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLGV9fTtvKGpmZSwiZ2V0Q2hhcnRUaXRsZUNvbXBvbmVudCIpfSk7dmFyIEdTLFFmZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R1M9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSxhKXt0aGlzLnBsb3REYXRhPWU7dGhpcy54QXhpcz1yO3RoaXMueUF4aXM9bjt0aGlzLm9yaWVudGF0aW9uPWk7dGhpcy5wbG90SW5kZXg9YX1zdGF0aWN7byh0aGlzLCJMaW5lUGxvdCIpfWdldERyYXdhYmxlRWxlbWVudCgpe2xldCBlPXRoaXMucGxvdERhdGEuZGF0YS5tYXAobj0+W3RoaXMueEF4aXMuZ2V0U2NhbGVWYWx1ZShuWzBdKSx0aGlzLnlBeGlzLmdldFNjYWxlVmFsdWUoblsxXSldKSxyO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP3I9Q2woKS55KG49Pm5bMF0pLngobj0+blsxXSkoZSk6cj1DbCgpLngobj0+blswXSkueShuPT5uWzFdKShlKSxyP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBsaW5lLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJwYXRoIixkYXRhOlt7cGF0aDpyLHN0cm9rZUZpbGw6dGhpcy5wbG90RGF0YS5zdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMucGxvdERhdGEuc3Ryb2tlV2lkdGh9XX1dOltdfX19KTt2YXIgVlMsWmZlPU4oKCk9PnsidXNlIHN0cmljdCI7VlM9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSxhLHMpe3RoaXMuYmFyRGF0YT1lO3RoaXMuYm91bmRpbmdSZWN0PXI7dGhpcy54QXhpcz1uO3RoaXMueUF4aXM9aTt0aGlzLm9yaWVudGF0aW9uPWE7dGhpcy5wbG90SW5kZXg9c31zdGF0aWN7byh0aGlzLCJCYXJQbG90Iil9Z2V0RHJhd2FibGVFbGVtZW50KCl7bGV0IGU9dGhpcy5iYXJEYXRhLmRhdGEubWFwKGE9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoYVswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKGFbMV0pXSksbj1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLS4wNSksaT1uLzI7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTplLm1hcChhPT4oe3g6dGhpcy5ib3VuZGluZ1JlY3QueCx5OmFbMF0taSxoZWlnaHQ6bix3aWR0aDphWzFdLXRoaXMuYm91bmRpbmdSZWN0LngsZmlsbDp0aGlzLmJhckRhdGEuZmlsbCxzdHJva2VXaWR0aDowLHN0cm9rZUZpbGw6dGhpcy5iYXJEYXRhLmZpbGx9KSl9XTpbe2dyb3VwVGV4dHM6WyJwbG90IixgYmFyLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJyZWN0IixkYXRhOmUubWFwKGE9Pih7eDphWzBdLWkseTphWzFdLHdpZHRoOm4saGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LWFbMV0sZmlsbDp0aGlzLmJhckRhdGEuZmlsbCxzdHJva2VXaWR0aDowLHN0cm9rZUZpbGw6dGhpcy5iYXJEYXRhLmZpbGx9KSl9XX19fSk7ZnVuY3Rpb24gSmZlKHQsZSxyKXtyZXR1cm4gbmV3IG9QKHQsZSxyKX12YXIgb1AsZWRlPU4oKCk9PnsidXNlIHN0cmljdCI7UWZlKCk7WmZlKCk7b1A9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuY2hhcnRDb25maWc9ZTt0aGlzLmNoYXJ0RGF0YT1yO3RoaXMuY2hhcnRUaGVtZUNvbmZpZz1uO3RoaXMuYm91bmRpbmdSZWN0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpY3tvKHRoaXMsIkJhc2VQbG90Iil9c2V0QXhlcyhlLHIpe3RoaXMueEF4aXM9ZSx0aGlzLnlBeGlzPXJ9c2V0Qm91bmRpbmdCb3hYWShlKXt0aGlzLmJvdW5kaW5nUmVjdC54PWUueCx0aGlzLmJvdW5kaW5nUmVjdC55PWUueX1jYWxjdWxhdGVTcGFjZShlKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9ZS53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZS5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2xldCBlPVtdO2ZvcihsZXRbcixuXW9mIHRoaXMuY2hhcnREYXRhLnBsb3RzLmVudHJpZXMoKSlzd2l0Y2gobi50eXBlKXtjYXNlImxpbmUiOntsZXQgaT1uZXcgR1Mobix0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLHIpO2UucHVzaCguLi5pLmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVhaztjYXNlImJhciI6e2xldCBpPW5ldyBWUyhuLHRoaXMuYm91bmRpbmdSZWN0LHRoaXMueEF4aXMsdGhpcy55QXhpcyx0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24scik7ZS5wdXNoKC4uLmkuZ2V0RHJhd2FibGVFbGVtZW50KCkpfWJyZWFrfXJldHVybiBlfX07byhKZmUsImdldFBsb3RDb21wb25lbnQiKX0pO3ZhciBVUyx0ZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYZmUoKTtLZmUoKTtlZGUoKTtGUygpO1VTPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hhcnRDb25maWc9ZTt0aGlzLmNoYXJ0RGF0YT1yO3RoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOmpmZShlLHIsbixpKSxwbG90OkpmZShlLHIsbikseEF4aXM6YVAoci54QXhpcyxlLnhBeGlzLHt0aXRsZUNvbG9yOm4ueEF4aXNUaXRsZUNvbG9yLGxhYmVsQ29sb3I6bi54QXhpc0xhYmVsQ29sb3IsdGlja0NvbG9yOm4ueEF4aXNUaWNrQ29sb3IsYXhpc0xpbmVDb2xvcjpuLnhBeGlzTGluZUNvbG9yfSxpKSx5QXhpczphUChyLnlBeGlzLGUueUF4aXMse3RpdGxlQ29sb3I6bi55QXhpc1RpdGxlQ29sb3IsbGFiZWxDb2xvcjpuLnlBeGlzTGFiZWxDb2xvcix0aWNrQ29sb3I6bi55QXhpc1RpY2tDb2xvcixheGlzTGluZUNvbG9yOm4ueUF4aXNMaW5lQ29sb3J9LGkpfX1zdGF0aWN7byh0aGlzLCJPcmNoZXN0cmF0b3IiKX1jYWxjdWxhdGVWZXJ0aWNhbFNwYWNlKCl7bGV0IGU9dGhpcy5jaGFydENvbmZpZy53aWR0aCxyPXRoaXMuY2hhcnRDb25maWcuaGVpZ2h0LG49MCxpPTAsYT1NYXRoLmZsb29yKGUqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSxzPU1hdGguZmxvb3Iocip0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGw9dGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpzfSk7ZS09bC53aWR0aCxyLT1sLmhlaWdodCxsPXRoaXMuY29tcG9uZW50U3RvcmUudGl0bGUuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnRoaXMuY2hhcnRDb25maWcud2lkdGgsaGVpZ2h0OnJ9KSxpPWwuaGVpZ2h0LHItPWwuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJib3R0b20iKSxsPXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxyLT1sLmhlaWdodCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigibGVmdCIpLGw9dGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLG49bC53aWR0aCxlLT1sLndpZHRoLGU+MCYmKGErPWUsZT0wKSxyPjAmJihzKz1yLHI9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpzfSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6bix5Oml9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFtuLG4rYV0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDpuLHk6aStzfSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRSYW5nZShbaSxpK3NdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6MCx5Oml9KSx0aGlzLmNoYXJ0RGF0YS5wbG90cy5zb21lKHU9PnJQKHUpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpe2xldCBlPXRoaXMuY2hhcnRDb25maWcud2lkdGgscj10aGlzLmNoYXJ0Q29uZmlnLmhlaWdodCxuPTAsaT0wLGE9MCxzPU1hdGguZmxvb3IoZSp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGw9TWF0aC5mbG9vcihyKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksdT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0Omx9KTtlLT11LndpZHRoLHItPXUuaGVpZ2h0LHU9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6cn0pLG49dS5oZWlnaHQsci09dS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImxlZnQiKSx1PXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxlLT11LndpZHRoLGk9dS53aWR0aCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigidG9wIiksdT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDplLGhlaWdodDpyfSksci09dS5oZWlnaHQsYT1uK3UuaGVpZ2h0LGU+MCYmKHMrPWUsZT0wKSxyPjAmJihsKz1yLHI9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDpsfSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6aSx5OmF9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtpLGkrc10pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDppLHk6bn0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW2EsYStsXSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OjAseTphfSksdGhpcy5jaGFydERhdGEucGxvdHMuc29tZShoPT5yUChoKSkmJnRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMucmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKX1jYWxjdWxhdGVTcGFjZSgpe3RoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj90aGlzLmNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpOnRoaXMuY2FsY3VsYXRlVmVydGljYWxTcGFjZSgpfWdldERyYXdhYmxlRWxlbWVudCgpe3RoaXMuY2FsY3VsYXRlU3BhY2UoKTtsZXQgZT1bXTt0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMpO2ZvcihsZXQgciBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50U3RvcmUpKWUucHVzaCguLi5yLmdldERyYXdhYmxlRWxlbWVudHMoKSk7cmV0dXJuIGV9fX0pO3ZhciBIUyxyZGU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0ZGUoKTtIUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJYWUNoYXJ0QnVpbGRlciIpfXN0YXRpYyBidWlsZChlLHIsbixpKXtyZXR1cm4gbmV3IFVTKGUscixuLGkpLmdldERyYXdhYmxlRWxlbWVudCgpfX19KTtmdW5jdGlvbiBpZGUoKXtsZXQgdD1kaCgpLGU9dHIoKTtyZXR1cm4gJG4odC54eUNoYXJ0LGUudGhlbWVWYXJpYWJsZXMueHlDaGFydCl9ZnVuY3Rpb24gYWRlKCl7bGV0IHQ9dHIoKTtyZXR1cm4gJG4ob3IueHlDaGFydCx0Lnh5Q2hhcnQpfWZ1bmN0aW9uIHNkZSgpe3JldHVybnt5QXhpczp7dHlwZToibGluZWFyIix0aXRsZToiIixtaW46MS8wLG1heDotMS8wfSx4QXhpczp7dHlwZToiYmFuZCIsdGl0bGU6IiIsY2F0ZWdvcmllczpbXX0sdGl0bGU6IiIscGxvdHM6W119fWZ1bmN0aW9uIHVQKHQpe2xldCBlPXRyKCk7cmV0dXJuIHdyKHQudHJpbSgpLGUpfWZ1bmN0aW9uIGRVZSh0KXtuZGU9dH1mdW5jdGlvbiBwVWUodCl7dD09PSJob3Jpem9udGFsIj9SYi5jaGFydE9yaWVudGF0aW9uPSJob3Jpem9udGFsIjpSYi5jaGFydE9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCJ9ZnVuY3Rpb24gbVVlKHQpe2NuLnhBeGlzLnRpdGxlPXVQKHQudGV4dCl9ZnVuY3Rpb24gb2RlKHQsZSl7Y24ueEF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Y24ueEF4aXMudGl0bGUsbWluOnQsbWF4OmV9LFdTPSEwfWZ1bmN0aW9uIGdVZSh0KXtjbi54QXhpcz17dHlwZToiYmFuZCIsdGl0bGU6Y24ueEF4aXMudGl0bGUsY2F0ZWdvcmllczp0Lm1hcChlPT51UChlLnRleHQpKX0sV1M9ITB9ZnVuY3Rpb24geVVlKHQpe2NuLnlBeGlzLnRpdGxlPXVQKHQudGV4dCl9ZnVuY3Rpb24gdlVlKHQsZSl7Y24ueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Y24ueUF4aXMudGl0bGUsbWluOnQsbWF4OmV9LGNQPSEwfWZ1bmN0aW9uIHhVZSh0KXtsZXQgZT1NYXRoLm1pbiguLi50KSxyPU1hdGgubWF4KC4uLnQpLG49TjEoY24ueUF4aXMpP2NuLnlBeGlzLm1pbjoxLzAsaT1OMShjbi55QXhpcyk/Y24ueUF4aXMubWF4Oi0xLzA7Y24ueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Y24ueUF4aXMudGl0bGUsbWluOk1hdGgubWluKG4sZSksbWF4Ok1hdGgubWF4KGkscil9fWZ1bmN0aW9uIGxkZSh0KXtsZXQgZT1bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuIGU7aWYoIVdTKXtsZXQgcj1OMShjbi54QXhpcyk/Y24ueEF4aXMubWluOjEvMCxuPU4xKGNuLnhBeGlzKT9jbi54QXhpcy5tYXg6LTEvMDtvZGUoTWF0aC5taW4ociwxKSxNYXRoLm1heChuLHQubGVuZ3RoKSl9aWYoY1B8fHhVZSh0KSxCUyhjbi54QXhpcykmJihlPWNuLnhBeGlzLmNhdGVnb3JpZXMubWFwKChyLG4pPT5bcix0W25dXSkpLE4xKGNuLnhBeGlzKSl7bGV0IHI9Y24ueEF4aXMubWluLG49Y24ueEF4aXMubWF4LGk9KG4tcikvKHQubGVuZ3RoLTEpLGE9W107Zm9yKGxldCBzPXI7czw9bjtzKz1pKWEucHVzaChgJHtzfWApO2U9YS5tYXAoKHMsbCk9PltzLHRbbF1dKX1yZXR1cm4gZX1mdW5jdGlvbiBjZGUodCl7cmV0dXJuIGxQW3Q9PT0wPzA6dCVsUC5sZW5ndGhdfWZ1bmN0aW9uIGJVZSh0LGUpe2xldCByPWxkZShlKTtjbi5wbG90cy5wdXNoKHt0eXBlOiJsaW5lIixzdHJva2VGaWxsOmNkZShMYiksc3Ryb2tlV2lkdGg6MixkYXRhOnJ9KSxMYisrfWZ1bmN0aW9uIFRVZSh0LGUpe2xldCByPWxkZShlKTtjbi5wbG90cy5wdXNoKHt0eXBlOiJiYXIiLGZpbGw6Y2RlKExiKSxkYXRhOnJ9KSxMYisrfWZ1bmN0aW9uIHdVZSgpe2lmKGNuLnBsb3RzLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoIk5vIFBsb3QgdG8gcmVuZGVyLCBwbGVhc2UgcHJvdmlkZSBhIHBsb3Qgd2l0aCBzb21lIGRhdGEiKTtyZXR1cm4gY24udGl0bGU9TnIoKSxIUy5idWlsZChSYixjbixOYixuZGUpfWZ1bmN0aW9uIGtVZSgpe3JldHVybiBOYn1mdW5jdGlvbiBFVWUoKXtyZXR1cm4gUmJ9ZnVuY3Rpb24gU1VlKCl7cmV0dXJuIGNufXZhciBMYixuZGUsUmIsTmIsY24sbFAsV1MsY1AsQ1VlLHVkZSxoZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttaSgpO19hKCk7QnkoKTtlcigpO3ByKCk7Y2koKTtyZGUoKTtGUygpO0xiPTAsUmI9YWRlKCksTmI9aWRlKCksY249c2RlKCksbFA9TmIucGxvdENvbG9yUGFsZXR0ZS5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSksV1M9ITEsY1A9ITE7byhpZGUsImdldENoYXJ0RGVmYXVsdFRoZW1lQ29uZmlnIik7byhhZGUsImdldENoYXJ0RGVmYXVsdENvbmZpZyIpO28oc2RlLCJnZXRDaGFydERlZmF1bHREYXRhIik7byh1UCwidGV4dFNhbml0aXplciIpO28oZFVlLCJzZXRUbXBTVkdHIik7byhwVWUsInNldE9yaWVudGF0aW9uIik7byhtVWUsInNldFhBeGlzVGl0bGUiKTtvKG9kZSwic2V0WEF4aXNSYW5nZURhdGEiKTtvKGdVZSwic2V0WEF4aXNCYW5kIik7byh5VWUsInNldFlBeGlzVGl0bGUiKTtvKHZVZSwic2V0WUF4aXNSYW5nZURhdGEiKTtvKHhVZSwic2V0WUF4aXNSYW5nZUZyb21QbG90RGF0YSIpO28obGRlLCJ0cmFuc2Zvcm1EYXRhV2l0aG91dENhdGVnb3J5Iik7byhjZGUsImdldFBsb3RDb2xvckZyb21QYWxldHRlIik7byhiVWUsInNldExpbmVEYXRhIik7byhUVWUsInNldEJhckRhdGEiKTtvKHdVZSwiZ2V0RHJhd2FibGVFbGVtIik7byhrVWUsImdldENoYXJ0VGhlbWVDb25maWciKTtvKEVVZSwiZ2V0Q2hhcnRDb25maWciKTtvKFNVZSwiZ2V0WFlDaGFydERhdGEiKTtDVWU9byhmdW5jdGlvbigpe2tyKCksTGI9MCxSYj1hZGUoKSxjbj1zZGUoKSxOYj1pZGUoKSxsUD1OYi5wbG90Q29sb3JQYWxldHRlLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKSxXUz0hMSxjUD0hMX0sImNsZWFyIiksdWRlPXtnZXREcmF3YWJsZUVsZW06d1VlLGNsZWFyOkNVZSxzZXRBY2NUaXRsZTpBcixnZXRBY2NUaXRsZTpEcixzZXREaWFncmFtVGl0bGU6T3IsZ2V0RGlhZ3JhbVRpdGxlOk5yLGdldEFjY0Rlc2NyaXB0aW9uOlJyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLHNldE9yaWVudGF0aW9uOnBVZSxzZXRYQXhpc1RpdGxlOm1VZSxzZXRYQXhpc1JhbmdlRGF0YTpvZGUsc2V0WEF4aXNCYW5kOmdVZSxzZXRZQXhpc1RpdGxlOnlVZSxzZXRZQXhpc1JhbmdlRGF0YTp2VWUsc2V0TGluZURhdGE6YlVlLHNldEJhckRhdGE6VFVlLHNldFRtcFNWR0c6ZFVlLGdldENoYXJ0VGhlbWVDb25maWc6a1VlLGdldENoYXJ0Q29uZmlnOkVVZSxnZXRYWUNoYXJ0RGF0YTpTVWV9fSk7dmFyIEFVZSxmZGUsZGRlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtWbCgpO3hpKCk7QVVlPW8oKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0Q2hhcnRUaGVtZUNvbmZpZygpLHM9aS5nZXRDaGFydENvbmZpZygpLGw9aS5nZXRYWUNoYXJ0RGF0YSgpLnBsb3RzWzBdLmRhdGEubWFwKFQ9PlRbMV0pO2Z1bmN0aW9uIHUoVCl7cmV0dXJuIFQ9PT0idG9wIj8idGV4dC1iZWZvcmUtZWRnZSI6Im1pZGRsZSJ9byh1LCJnZXREb21pbmFudEJhc2VMaW5lIik7ZnVuY3Rpb24gaChUKXtyZXR1cm4gVD09PSJsZWZ0Ij8ic3RhcnQiOlQ9PT0icmlnaHQiPyJlbmQiOiJtaWRkbGUifW8oaCwiZ2V0VGV4dEFuY2hvciIpO2Z1bmN0aW9uIGYoVCl7cmV0dXJuYHRyYW5zbGF0ZSgke1QueH0sICR7VC55fSkgcm90YXRlKCR7VC5yb3RhdGlvbnx8MH0pYH1vKGYsImdldFRleHRUcmFuc2Zvcm1hdGlvbiIpLFguZGVidWcoYFJlbmRlcmluZyB4eWNoYXJ0IGNoYXJ0CmArdCk7bGV0IGQ9TGkoZSkscD1kLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLG09cC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIscy53aWR0aCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCkuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIik7Zm4oZCxzLmhlaWdodCxzLndpZHRoLCEwKSxkLmF0dHIoInZpZXdCb3giLGAwIDAgJHtzLndpZHRofSAke3MuaGVpZ2h0fWApLG0uYXR0cigiZmlsbCIsYS5iYWNrZ3JvdW5kQ29sb3IpLGkuc2V0VG1wU1ZHRyhkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWVybWFpZC10bXAtZ3JvdXAiKSk7bGV0IGc9aS5nZXREcmF3YWJsZUVsZW0oKSx5PXt9O2Z1bmN0aW9uIHYoVCl7bGV0IFM9cCx3PSIiO2ZvcihsZXRbRV1vZiBULmVudHJpZXMoKSl7bGV0IF89cDtFPjAmJnlbd10mJihfPXlbd10pLHcrPVRbRV0sUz15W3ddLFN8fChTPXlbd109Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsVFtFXSkpfXJldHVybiBTfW8odiwiZ2V0R3JvdXAiKTtmb3IobGV0IFQgb2YgZyl7aWYoVC5kYXRhLmxlbmd0aD09PTApY29udGludWU7bGV0IFM9dihULmdyb3VwVGV4dHMpO3N3aXRjaChULnR5cGUpe2Nhc2UicmVjdCI6aWYoUy5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFQuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iix3PT53LngpLmF0dHIoInkiLHc9PncueSkuYXR0cigid2lkdGgiLHc9Pncud2lkdGgpLmF0dHIoImhlaWdodCIsdz0+dy5oZWlnaHQpLmF0dHIoImZpbGwiLHc9PncuZmlsbCkuYXR0cigic3Ryb2tlIix3PT53LnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsdz0+dy5zdHJva2VXaWR0aCkscy5zaG93RGF0YUxhYmVsKWlmKHMuY2hhcnRPcmllbnRhdGlvbj09PSJob3Jpem9udGFsIil7bGV0IF89ZnVuY3Rpb24oTyxSKXtsZXR7ZGF0YTprLGxhYmVsOkx9PU87cmV0dXJuIFIqTC5sZW5ndGgqLjc8PWsud2lkdGgtMTB9O3ZhciB4PV87byhfLCJmaXRzSG9yaXpvbnRhbGx5Iik7bGV0IHc9LjcsRT1ULmRhdGEubWFwKChPLFIpPT4oe2RhdGE6TyxsYWJlbDpsW1JdLnRvU3RyaW5nKCl9KSkuZmlsdGVyKE89Pk8uZGF0YS53aWR0aD4wJiZPLmRhdGEuaGVpZ2h0PjApLEM9RS5tYXAoTz0+e2xldHtkYXRhOlJ9PU8saz1SLmhlaWdodCouNztmb3IoOyFfKE8saykmJms+MDspay09MTtyZXR1cm4ga30pLEQ9TWF0aC5mbG9vcihNYXRoLm1pbiguLi5DKSk7Uy5zZWxlY3RBbGwoInRleHQiKS5kYXRhKEUpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsTz0+Ty5kYXRhLngrTy5kYXRhLndpZHRoLTEwKS5hdHRyKCJ5IixPPT5PLmRhdGEueStPLmRhdGEuaGVpZ2h0LzIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLGAke0R9cHhgKS50ZXh0KE89Pk8ubGFiZWwpfWVsc2V7bGV0IF89ZnVuY3Rpb24oTyxSLGspe2xldHtkYXRhOkwsbGFiZWw6QX09TyxNPVIqQS5sZW5ndGgqLjcsUD1MLngrTC53aWR0aC8yLEI9UC1NLzIsRj1QK00vMix6PUI+PUwueCYmRjw9TC54K0wud2lkdGgsJD1MLnkraytSPD1MLnkrTC5oZWlnaHQ7cmV0dXJuIHomJiR9O3ZhciBiPV87byhfLCJmaXRzSW5CYXIiKTtsZXQgdz0xMCxFPVQuZGF0YS5tYXAoKE8sUik9Pih7ZGF0YTpPLGxhYmVsOmxbUl0udG9TdHJpbmcoKX0pKS5maWx0ZXIoTz0+Ty5kYXRhLndpZHRoPjAmJk8uZGF0YS5oZWlnaHQ+MCksQz1FLm1hcChPPT57bGV0e2RhdGE6UixsYWJlbDprfT1PLEw9Ui53aWR0aC8oay5sZW5ndGgqLjcpO2Zvcig7IV8oTyxMLDEwKSYmTD4wOylMLT0xO3JldHVybiBMfSksRD1NYXRoLmZsb29yKE1hdGgubWluKC4uLkMpKTtTLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoRSkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixPPT5PLmRhdGEueCtPLmRhdGEud2lkdGgvMikuYXR0cigieSIsTz0+Ty5kYXRhLnkrMTApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIixgJHtEfXB4YCkudGV4dChPPT5PLmxhYmVsKX1icmVhaztjYXNlInRleHQiOlMuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShULmRhdGEpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsdz0+dy5maWxsKS5hdHRyKCJmb250LXNpemUiLHc9PncuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIix3PT51KHcudmVydGljYWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdz0+aCh3Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLHc9PmYodykpLnRleHQodz0+dy50ZXh0KTticmVhaztjYXNlInBhdGgiOlMuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShULmRhdGEpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdz0+dy5wYXRoKS5hdHRyKCJmaWxsIix3PT53LmZpbGw/dy5maWxsOiJub25lIikuYXR0cigic3Ryb2tlIix3PT53LnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsdz0+dy5zdHJva2VXaWR0aCk7YnJlYWt9fX0sImRyYXciKSxmZGU9e2RyYXc6QVVlfX0pO3ZhciBwZGU9e307dXIocGRlLHtkaWFncmFtOigpPT5fVWV9KTt2YXIgX1VlLG1kZT1OKCgpPT57InVzZSBzdHJpY3QiO1dmZSgpO2hkZSgpO2RkZSgpO19VZT17cGFyc2VyOkhmZSxkYjp1ZGUscmVuZGVyZXI6ZmRlfX0pO3ZhciBoUCx2ZGUseGRlPU4oKCk9PnsidXNlIHN0cmljdCI7aFA9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKGllLG9lLFYsVGUpe2ZvcihWPVZ8fHt9LFRlPWllLmxlbmd0aDtUZS0tO1ZbaWVbVGVdXT1vZSk7cmV0dXJuIFZ9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVs1LDYsOCw5LDExLDEzLDIxLDIyLDIzLDI0LDQxLDQyLDQzLDQ0LDQ1LDQ2LDU0LDcyLDc0LDc3LDg5LDkwXSxzPVsxLDIyXSxsPVsyLDddLHU9WzEsMjZdLGg9WzEsMjddLGY9WzEsMjhdLGQ9WzEsMjldLHA9WzEsMzNdLG09WzEsMzRdLGc9WzEsMzVdLHk9WzEsMzZdLHY9WzEsMzddLHg9WzEsMzhdLGI9WzEsMjRdLFQ9WzEsMzFdLFM9WzEsMzJdLHc9WzEsMzBdLEU9WzEsMzldLF89WzEsNDBdLEM9WzUsOCw5LDExLDEzLDIxLDIyLDIzLDI0LDQxLDQyLDQzLDQ0LDQ1LDQ2LDU0LDcyLDc0LDc3LDg5LDkwXSxEPVsxLDYxXSxPPVs4OSw5MF0sUj1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsMjcsMjksNDEsNDIsNDMsNDQsNDUsNDYsNTQsNjEsNjMsNzIsNzQsNzUsNzYsNzcsODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGs9WzI3LDI5XSxMPVsxLDcwXSxBPVsxLDcxXSxJPVsxLDcyXSxNPVsxLDczXSxQPVsxLDc0XSxCPVsxLDc1XSxGPVsxLDc2XSx6PVsxLDgzXSwkPVsxLDgwXSxVPVsxLDg0XSxLPVsxLDg1XSxlZT1bMSw4Nl0sWT1bMSw4N10sY2U9WzEsODhdLFo9WzEsODldLHVlPVsxLDkwXSxRPVsxLDkxXSxqPVsxLDkyXSxuZT1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsMjcsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzUsNzYsNzcsODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLHRlPVs2Myw2NF0saGU9WzEsMTAxXSxsZT1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzYsNzcsODksOTBdLEo9WzUsOCw5LDExLDEzLDIxLDIyLDIzLDI0LDQxLDQyLDQzLDQ0LDQ1LDQ2LDU0LDcyLDc0LDc1LDc2LDc3LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxTZT1bMSwxMTBdLHNlPVsxLDEwNl0sYWU9WzEsMTA3XSxPZT1bMSwxMDhdLHllPVsxLDEwOV0sQmU9WzEsMTExXSxIZT1bMSwxMTZdLHplPVsxLDExN10sTGU9WzEsMTE0XSxJZT1bMSwxMTVdLHhlPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxhY2NfdGl0bGU6OSxhY2NfdGl0bGVfdmFsdWU6MTAsYWNjX2Rlc2NyOjExLGFjY19kZXNjcl92YWx1ZToxMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjEzLHJlcXVpcmVtZW50RGVmOjE0LGVsZW1lbnREZWY6MTUscmVsYXRpb25zaGlwRGVmOjE2LGRpcmVjdGlvbjoxNyxzdHlsZVN0YXRlbWVudDoxOCxjbGFzc0RlZlN0YXRlbWVudDoxOSxjbGFzc1N0YXRlbWVudDoyMCxkaXJlY3Rpb25fdGI6MjEsZGlyZWN0aW9uX2J0OjIyLGRpcmVjdGlvbl9ybDoyMyxkaXJlY3Rpb25fbHI6MjQscmVxdWlyZW1lbnRUeXBlOjI1LHJlcXVpcmVtZW50TmFtZToyNixTVFJVQ1RfU1RBUlQ6MjcscmVxdWlyZW1lbnRCb2R5OjI4LFNUWUxFX1NFUEFSQVRPUjoyOSxpZExpc3Q6MzAsSUQ6MzEsQ09MT05TRVA6MzIsaWQ6MzMsVEVYVDozNCx0ZXh0OjM1LFJJU0s6MzYscmlza0xldmVsOjM3LFZFUklGWU1USEQ6MzgsdmVyaWZ5VHlwZTozOSxTVFJVQ1RfU1RPUDo0MCxSRVFVSVJFTUVOVDo0MSxGVU5DVElPTkFMX1JFUVVJUkVNRU5UOjQyLElOVEVSRkFDRV9SRVFVSVJFTUVOVDo0MyxQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDo0NCxQSFlTSUNBTF9SRVFVSVJFTUVOVDo0NSxERVNJR05fQ09OU1RSQUlOVDo0NixMT1dfUklTSzo0NyxNRURfUklTSzo0OCxISUdIX1JJU0s6NDksVkVSSUZZX0FOQUxZU0lTOjUwLFZFUklGWV9ERU1PTlNUUkFUSU9OOjUxLFZFUklGWV9JTlNQRUNUSU9OOjUyLFZFUklGWV9URVNUOjUzLEVMRU1FTlQ6NTQsZWxlbWVudE5hbWU6NTUsZWxlbWVudEJvZHk6NTYsVFlQRTo1Nyx0eXBlOjU4LERPQ1JFRjo1OSxyZWY6NjAsRU5EX0FSUk9XX0w6NjEscmVsYXRpb25zaGlwOjYyLExJTkU6NjMsRU5EX0FSUk9XX1I6NjQsQ09OVEFJTlM6NjUsQ09QSUVTOjY2LERFUklWRVM6NjcsU0FUSVNGSUVTOjY4LFZFUklGSUVTOjY5LFJFRklORVM6NzAsVFJBQ0VTOjcxLENMQVNTREVGOjcyLHN0eWxlc09wdDo3MyxDTEFTUzo3NCxBTFBIQTo3NSxDT01NQTo3NixTVFlMRTo3NyxzdHlsZTo3OCxzdHlsZUNvbXBvbmVudDo3OSxOVU06ODAsQ09MT046ODEsVU5JVDo4MixTUEFDRTo4MyxCUktUOjg0LFBDVDo4NSxNSU5VUzo4NixMQUJFTDo4NyxTRU1JQ09MT046ODgsdW5xU3RyaW5nOjg5LHFTdHJpbmc6OTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDk6ImFjY190aXRsZSIsMTA6ImFjY190aXRsZV92YWx1ZSIsMTE6ImFjY19kZXNjciIsMTI6ImFjY19kZXNjcl92YWx1ZSIsMTM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIxOiJkaXJlY3Rpb25fdGIiLDIyOiJkaXJlY3Rpb25fYnQiLDIzOiJkaXJlY3Rpb25fcmwiLDI0OiJkaXJlY3Rpb25fbHIiLDI3OiJTVFJVQ1RfU1RBUlQiLDI5OiJTVFlMRV9TRVBBUkFUT1IiLDMxOiJJRCIsMzI6IkNPTE9OU0VQIiwzNDoiVEVYVCIsMzY6IlJJU0siLDM4OiJWRVJJRllNVEhEIiw0MDoiU1RSVUNUX1NUT1AiLDQxOiJSRVFVSVJFTUVOVCIsNDI6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDQzOiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDQ0OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsNDU6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiw0NjoiREVTSUdOX0NPTlNUUkFJTlQiLDQ3OiJMT1dfUklTSyIsNDg6Ik1FRF9SSVNLIiw0OToiSElHSF9SSVNLIiw1MDoiVkVSSUZZX0FOQUxZU0lTIiw1MToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDUyOiJWRVJJRllfSU5TUEVDVElPTiIsNTM6IlZFUklGWV9URVNUIiw1NDoiRUxFTUVOVCIsNTc6IlRZUEUiLDU5OiJET0NSRUYiLDYxOiJFTkRfQVJST1dfTCIsNjM6IkxJTkUiLDY0OiJFTkRfQVJST1dfUiIsNjU6IkNPTlRBSU5TIiw2NjoiQ09QSUVTIiw2NzoiREVSSVZFUyIsNjg6IlNBVElTRklFUyIsNjk6IlZFUklGSUVTIiw3MDoiUkVGSU5FUyIsNzE6IlRSQUNFUyIsNzI6IkNMQVNTREVGIiw3NDoiQ0xBU1MiLDc1OiJBTFBIQSIsNzY6IkNPTU1BIiw3NzoiU1RZTEUiLDgwOiJOVU0iLDgxOiJDT0xPTiIsODI6IlVOSVQiLDgzOiJTUEFDRSIsODQ6IkJSS1QiLDg1OiJQQ1QiLDg2OiJNSU5VUyIsODc6IkxBQkVMIiw4ODoiU0VNSUNPTE9OIiw4OToidW5xU3RyaW5nIiw5MDoicVN0cmluZyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbMyw0XSxbNCwyXSxbNCwyXSxbNCwxXSxbNywwXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE0LDVdLFsxNCw3XSxbMjgsNV0sWzI4LDVdLFsyOCw1XSxbMjgsNV0sWzI4LDJdLFsyOCwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMzcsMV0sWzM3LDFdLFszNywxXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzE1LDVdLFsxNSw3XSxbNTYsNV0sWzU2LDVdLFs1NiwyXSxbNTYsMV0sWzE2LDVdLFsxNiw1XSxbNjIsMV0sWzYyLDFdLFs2MiwxXSxbNjIsMV0sWzYyLDFdLFs2MiwxXSxbNjIsMV0sWzE5LDNdLFsyMCwzXSxbMjAsM10sWzMwLDFdLFszMCwzXSxbMzAsMV0sWzMwLDNdLFsxOCwzXSxbNzMsMV0sWzczLDNdLFs3OCwxXSxbNzgsMl0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFsyNiwxXSxbMjYsMV0sWzMzLDFdLFszMywxXSxbMzUsMV0sWzM1LDFdLFs1NSwxXSxbNTUsMV0sWzU4LDFdLFs1OCwxXSxbNjAsMV0sWzYwLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24ob2UsVixUZSxXLHBlLHZlLFBlKXt2YXIgX2U9dmUubGVuZ3RoLTE7c3dpdGNoKHBlKXtjYXNlIDQ6dGhpcy4kPXZlW19lXS50cmltKCksVy5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPXZlW19lXS50cmltKCksVy5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNzpXLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDE4Olcuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgMTk6Vy5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSAyMDpXLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDIxOlcuYWRkUmVxdWlyZW1lbnQodmVbX2UtM10sdmVbX2UtNF0pO2JyZWFrO2Nhc2UgMjI6Vy5hZGRSZXF1aXJlbWVudCh2ZVtfZS01XSx2ZVtfZS02XSksVy5zZXRDbGFzcyhbdmVbX2UtNV1dLHZlW19lLTNdKTticmVhaztjYXNlIDIzOlcuc2V0TmV3UmVxSWQodmVbX2UtMl0pO2JyZWFrO2Nhc2UgMjQ6Vy5zZXROZXdSZXFUZXh0KHZlW19lLTJdKTticmVhaztjYXNlIDI1Olcuc2V0TmV3UmVxUmlzayh2ZVtfZS0yXSk7YnJlYWs7Y2FzZSAyNjpXLnNldE5ld1JlcVZlcmlmeU1ldGhvZCh2ZVtfZS0yXSk7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDMxOnRoaXMuJD1XLlJlcXVpcmVtZW50VHlwZS5JTlRFUkZBQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuREVTSUdOX0NPTlNUUkFJTlQ7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9Vy5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9Vy5SaXNrTGV2ZWwuTUVEX1JJU0s7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9Vy5SaXNrTGV2ZWwuSElHSF9SSVNLO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVcuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9Vy5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPVcuVmVyaWZ5VHlwZS5WRVJJRllfSU5TUEVDVElPTjticmVhaztjYXNlIDQxOnRoaXMuJD1XLlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSA0MjpXLmFkZEVsZW1lbnQodmVbX2UtM10pO2JyZWFrO2Nhc2UgNDM6Vy5hZGRFbGVtZW50KHZlW19lLTVdKSxXLnNldENsYXNzKFt2ZVtfZS01XV0sdmVbX2UtM10pO2JyZWFrO2Nhc2UgNDQ6Vy5zZXROZXdFbGVtZW50VHlwZSh2ZVtfZS0yXSk7YnJlYWs7Y2FzZSA0NTpXLnNldE5ld0VsZW1lbnREb2NSZWYodmVbX2UtMl0pO2JyZWFrO2Nhc2UgNDg6Vy5hZGRSZWxhdGlvbnNoaXAodmVbX2UtMl0sdmVbX2VdLHZlW19lLTRdKTticmVhaztjYXNlIDQ5OlcuYWRkUmVsYXRpb25zaGlwKHZlW19lLTJdLHZlW19lLTRdLHZlW19lXSk7YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPVcuUmVsYXRpb25zaGlwcy5DT1BJRVM7YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLkRFUklWRVM7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDU0OnRoaXMuJD1XLlJlbGF0aW9uc2hpcHMuVkVSSUZJRVM7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLlJFRklORVM7YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLlRSQUNFUzticmVhaztjYXNlIDU3OnRoaXMuJD12ZVtfZS0yXSxXLmRlZmluZUNsYXNzKHZlW19lLTFdLHZlW19lXSk7YnJlYWs7Y2FzZSA1ODpXLnNldENsYXNzKHZlW19lLTFdLHZlW19lXSk7YnJlYWs7Y2FzZSA1OTpXLnNldENsYXNzKFt2ZVtfZS0yXV0sdmVbX2VdKTticmVhaztjYXNlIDYwOmNhc2UgNjI6dGhpcy4kPVt2ZVtfZV1dO2JyZWFrO2Nhc2UgNjE6Y2FzZSA2Mzp0aGlzLiQ9dmVbX2UtMl0uY29uY2F0KFt2ZVtfZV1dKTticmVhaztjYXNlIDY0OnRoaXMuJD12ZVtfZS0yXSxXLnNldENzc1N0eWxlKHZlW19lLTFdLHZlW19lXSk7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W3ZlW19lXV07YnJlYWs7Y2FzZSA2Njp2ZVtfZS0yXS5wdXNoKHZlW19lXSksdGhpcy4kPXZlW19lLTJdO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPXZlW19lLTFdK3ZlW19lXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsNjplLDk6ciwxMTpuLDEzOml9LHsxOlszXX0sezM6OCw0OjIsNTpbMSw3XSw2OmUsOTpyLDExOm4sMTM6aX0sezU6WzEsOV19LHsxMDpbMSwxMF19LHsxMjpbMSwxMV19LHQoYSxbMiw2XSksezM6MTIsNDoyLDY6ZSw5OnIsMTE6biwxMzppfSx7MTpbMiwyXX0sezQ6MTcsNTpzLDc6MTMsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOlQsNzQ6Uyw3Nzp3LDg5OkUsOTA6X30sdChhLFsyLDRdKSx0KGEsWzIsNV0pLHsxOlsyLDFdfSx7ODpbMSw0MV19LHs0OjE3LDU6cyw3OjQyLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQzLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ0LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ1LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ2LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ3LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ4LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ5LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjUwLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHsyNjo1MSw4OTpbMSw1Ml0sOTA6WzEsNTNdfSx7NTU6NTQsODk6WzEsNTVdLDkwOlsxLDU2XX0sezI5OlsxLDU5XSw2MTpbMSw1N10sNjM6WzEsNThdfSx0KEMsWzIsMTddKSx0KEMsWzIsMThdKSx0KEMsWzIsMTldKSx0KEMsWzIsMjBdKSx7MzA6NjAsMzM6NjIsNzU6RCw4OTpFLDkwOl99LHszMDo2MywzMzo2Miw3NTpELDg5OkUsOTA6X30sezMwOjY0LDMzOjYyLDc1OkQsODk6RSw5MDpffSx0KE8sWzIsMjldKSx0KE8sWzIsMzBdKSx0KE8sWzIsMzFdKSx0KE8sWzIsMzJdKSx0KE8sWzIsMzNdKSx0KE8sWzIsMzRdKSx0KFIsWzIsODFdKSx0KFIsWzIsODJdKSx7MTpbMiwzXX0sezg6WzIsOF19LHs4OlsyLDldfSx7ODpbMiwxMF19LHs4OlsyLDExXX0sezg6WzIsMTJdfSx7ODpbMiwxM119LHs4OlsyLDE0XX0sezg6WzIsMTVdfSx7ODpbMiwxNl19LHsyNzpbMSw2NV0sMjk6WzEsNjZdfSx0KGssWzIsNzldKSx0KGssWzIsODBdKSx7Mjc6WzEsNjddLDI5OlsxLDY4XX0sdChrLFsyLDg1XSksdChrLFsyLDg2XSksezYyOjY5LDY1OkwsNjY6QSw2NzpJLDY4Ok0sNjk6UCw3MDpCLDcxOkZ9LHs2Mjo3Nyw2NTpMLDY2OkEsNjc6SSw2ODpNLDY5OlAsNzA6Qiw3MTpGfSx7MzA6NzgsMzM6NjIsNzU6RCw4OTpFLDkwOl99LHs3Mzo3OSw3NTp6LDc2OiQsNzg6ODEsNzk6ODIsODA6VSw4MTpLLDgyOmVlLDgzOlksODQ6Y2UsODU6Wiw4Njp1ZSw4NzpRLDg4Omp9LHQobmUsWzIsNjBdKSx0KG5lLFsyLDYyXSksezczOjkzLDc1OnosNzY6JCw3ODo4MSw3OTo4Miw4MDpVLDgxOkssODI6ZWUsODM6WSw4NDpjZSw4NTpaLDg2OnVlLDg3OlEsODg6an0sezMwOjk0LDMzOjYyLDc1OkQsNzY6JCw4OTpFLDkwOl99LHs1OlsxLDk1XX0sezMwOjk2LDMzOjYyLDc1OkQsODk6RSw5MDpffSx7NTpbMSw5N119LHszMDo5OCwzMzo2Miw3NTpELDg5OkUsOTA6X30sezYzOlsxLDk5XX0sdCh0ZSxbMiw1MF0pLHQodGUsWzIsNTFdKSx0KHRlLFsyLDUyXSksdCh0ZSxbMiw1M10pLHQodGUsWzIsNTRdKSx0KHRlLFsyLDU1XSksdCh0ZSxbMiw1Nl0pLHs2NDpbMSwxMDBdfSx0KEMsWzIsNTldLHs3NjokfSksdChDLFsyLDY0XSx7NzY6aGV9KSx7MzM6MTAzLDc1OlsxLDEwMl0sODk6RSw5MDpffSx0KGxlLFsyLDY1XSx7Nzk6MTA0LDc1OnosODA6VSw4MTpLLDgyOmVlLDgzOlksODQ6Y2UsODU6Wiw4Njp1ZSw4NzpRLDg4Omp9KSx0KEosWzIsNjddKSx0KEosWzIsNjldKSx0KEosWzIsNzBdKSx0KEosWzIsNzFdKSx0KEosWzIsNzJdKSx0KEosWzIsNzNdKSx0KEosWzIsNzRdKSx0KEosWzIsNzVdKSx0KEosWzIsNzZdKSx0KEosWzIsNzddKSx0KEosWzIsNzhdKSx0KEMsWzIsNTddLHs3NjpoZX0pLHQoQyxbMiw1OF0sezc2OiR9KSx7NTpTZSwyODoxMDUsMzE6c2UsMzQ6YWUsMzY6T2UsMzg6eWUsNDA6QmV9LHsyNzpbMSwxMTJdLDc2OiR9LHs1OkhlLDQwOnplLDU2OjExMyw1NzpMZSw1OTpJZX0sezI3OlsxLDExOF0sNzY6JH0sezMzOjExOSw4OTpFLDkwOl99LHszMzoxMjAsODk6RSw5MDpffSx7NzU6eiw3ODoxMjEsNzk6ODIsODA6VSw4MTpLLDgyOmVlLDgzOlksODQ6Y2UsODU6Wiw4Njp1ZSw4NzpRLDg4Omp9LHQobmUsWzIsNjFdKSx0KG5lLFsyLDYzXSksdChKLFsyLDY4XSksdChDLFsyLDIxXSksezMyOlsxLDEyMl19LHszMjpbMSwxMjNdfSx7MzI6WzEsMTI0XX0sezMyOlsxLDEyNV19LHs1OlNlLDI4OjEyNiwzMTpzZSwzNDphZSwzNjpPZSwzODp5ZSw0MDpCZX0sdChDLFsyLDI4XSksezU6WzEsMTI3XX0sdChDLFsyLDQyXSksezMyOlsxLDEyOF19LHszMjpbMSwxMjldfSx7NTpIZSw0MDp6ZSw1NjoxMzAsNTc6TGUsNTk6SWV9LHQoQyxbMiw0N10pLHs1OlsxLDEzMV19LHQoQyxbMiw0OF0pLHQoQyxbMiw0OV0pLHQobGUsWzIsNjZdLHs3OToxMDQsNzU6eiw4MDpVLDgxOkssODI6ZWUsODM6WSw4NDpjZSw4NTpaLDg2OnVlLDg3OlEsODg6an0pLHszMzoxMzIsODk6RSw5MDpffSx7MzU6MTMzLDg5OlsxLDEzNF0sOTA6WzEsMTM1XX0sezM3OjEzNiw0NzpbMSwxMzddLDQ4OlsxLDEzOF0sNDk6WzEsMTM5XX0sezM5OjE0MCw1MDpbMSwxNDFdLDUxOlsxLDE0Ml0sNTI6WzEsMTQzXSw1MzpbMSwxNDRdfSx0KEMsWzIsMjddKSx7NTpTZSwyODoxNDUsMzE6c2UsMzQ6YWUsMzY6T2UsMzg6eWUsNDA6QmV9LHs1ODoxNDYsODk6WzEsMTQ3XSw5MDpbMSwxNDhdfSx7NjA6MTQ5LDg5OlsxLDE1MF0sOTA6WzEsMTUxXX0sdChDLFsyLDQ2XSksezU6SGUsNDA6emUsNTY6MTUyLDU3OkxlLDU5OkllfSx7NTpbMSwxNTNdfSx7NTpbMSwxNTRdfSx7NTpbMiw4M119LHs1OlsyLDg0XX0sezU6WzEsMTU1XX0sezU6WzIsMzVdfSx7NTpbMiwzNl19LHs1OlsyLDM3XX0sezU6WzEsMTU2XX0sezU6WzIsMzhdfSx7NTpbMiwzOV19LHs1OlsyLDQwXX0sezU6WzIsNDFdfSx0KEMsWzIsMjJdKSx7NTpbMSwxNTddfSx7NTpbMiw4N119LHs1OlsyLDg4XX0sezU6WzEsMTU4XX0sezU6WzIsODldfSx7NTpbMiw5MF19LHQoQyxbMiw0M10pLHs1OlNlLDI4OjE1OSwzMTpzZSwzNDphZSwzNjpPZSwzODp5ZSw0MDpCZX0sezU6U2UsMjg6MTYwLDMxOnNlLDM0OmFlLDM2Ok9lLDM4OnllLDQwOkJlfSx7NTpTZSwyODoxNjEsMzE6c2UsMzQ6YWUsMzY6T2UsMzg6eWUsNDA6QmV9LHs1OlNlLDI4OjE2MiwzMTpzZSwzNDphZSwzNjpPZSwzODp5ZSw0MDpCZX0sezU6SGUsNDA6emUsNTY6MTYzLDU3OkxlLDU5OkllfSx7NTpIZSw0MDp6ZSw1NjoxNjQsNTc6TGUsNTk6SWV9LHQoQyxbMiwyM10pLHQoQyxbMiwyNF0pLHQoQyxbMiwyNV0pLHQoQyxbMiwyNl0pLHQoQyxbMiw0NF0pLHQoQyxbMiw0NV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSw0MTpbMiwzXSw0MjpbMiw4XSw0MzpbMiw5XSw0NDpbMiwxMF0sNDU6WzIsMTFdLDQ2OlsyLDEyXSw0NzpbMiwxM10sNDg6WzIsMTRdLDQ5OlsyLDE1XSw1MDpbMiwxNl0sMTM0OlsyLDgzXSwxMzU6WzIsODRdLDEzNzpbMiwzNV0sMTM4OlsyLDM2XSwxMzk6WzIsMzddLDE0MTpbMiwzOF0sMTQyOlsyLDM5XSwxNDM6WzIsNDBdLDE0NDpbMiw0MV0sMTQ3OlsyLDg3XSwxNDg6WzIsODhdLDE1MDpbMiw4OV0sMTUxOlsyLDkwXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG9lLFYpe2lmKFYucmVjb3ZlcmFibGUpdGhpcy50cmFjZShvZSk7ZWxzZXt2YXIgVGU9bmV3IEVycm9yKG9lKTt0aHJvdyBUZS5oYXNoPVYsVGV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24ob2Upe3ZhciBWPXRoaXMsVGU9WzBdLFc9W10scGU9W251bGxdLHZlPVtdLFBlPXRoaXMudGFibGUsX2U9IiIsYmU9MCxWZT0wLERlPTAscWU9MixhdD0xLFJ0PXZlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHN0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVWU9e3l5Ont9fTtmb3IodmFyIGN0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksY3QpJiYoVWUueXlbY3RdPXRoaXMueXlbY3RdKTtzdC5zZXRJbnB1dChvZSxVZS55eSksVWUueXkubGV4ZXI9c3QsVWUueXkucGFyc2VyPXRoaXMsdHlwZW9mIHN0Lnl5bGxvYz4idSImJihzdC55eWxsb2M9e30pO3ZhciBXZT1zdC55eWxsb2M7dmUucHVzaChXZSk7dmFyIG90PXN0Lm9wdGlvbnMmJnN0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBVZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1VZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBZdChJcil7VGUubGVuZ3RoPVRlLmxlbmd0aC0yKklyLHBlLmxlbmd0aD1wZS5sZW5ndGgtSXIsdmUubGVuZ3RoPXZlLmxlbmd0aC1Jcn1vKFl0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIFR0KCl7dmFyIElyO3JldHVybiBJcj1XLnBvcCgpfHxzdC5sZXgoKXx8YXQsdHlwZW9mIElyIT0ibnVtYmVyIiYmKElyIGluc3RhbmNlb2YgQXJyYXkmJihXPUlyLElyPVcucG9wKCkpLElyPVYuc3ltYm9sc19bSXJdfHxJciksSXJ9byhUdCwibGV4Iik7Zm9yKHZhciBNdCxidCx1dCxTdCxmdCx2dCxudD17fSxwbixrdCxPbix0bjs7KXtpZih1dD1UZVtUZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1dF0/U3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1t1dF06KChNdD09PW51bGx8fHR5cGVvZiBNdD4idSIpJiYoTXQ9VHQoKSksU3Q9UGVbdXRdJiZQZVt1dF1bTXRdKSx0eXBlb2YgU3Q+InUifHwhU3QubGVuZ3RofHwhU3RbMF0pe3ZhciBNcj0iIjt0bj1bXTtmb3IocG4gaW4gUGVbdXRdKXRoaXMudGVybWluYWxzX1twbl0mJnBuPnFlJiZ0bi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bcG5dKyInIik7c3Quc2hvd1Bvc2l0aW9uP01yPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGJlKzEpK2A6CmArc3Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt0bi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW010XXx8TXQpKyInIjpNcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKSsiOiBVbmV4cGVjdGVkICIrKE10PT1hdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tNdF18fE10KSsiJyIpLHRoaXMucGFyc2VFcnJvcihNcix7dGV4dDpzdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTXRdfHxNdCxsaW5lOnN0Lnl5bGluZW5vLGxvYzpXZSxleHBlY3RlZDp0bn0pfWlmKFN0WzBdaW5zdGFuY2VvZiBBcnJheSYmU3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit1dCsiLCB0b2tlbjogIitNdCk7c3dpdGNoKFN0WzBdKXtjYXNlIDE6VGUucHVzaChNdCkscGUucHVzaChzdC55eXRleHQpLHZlLnB1c2goc3QueXlsbG9jKSxUZS5wdXNoKFN0WzFdKSxNdD1udWxsLGJ0PyhNdD1idCxidD1udWxsKTooVmU9c3QueXlsZW5nLF9lPXN0Lnl5dGV4dCxiZT1zdC55eWxpbmVubyxXZT1zdC55eWxsb2MsRGU+MCYmRGUtLSk7YnJlYWs7Y2FzZSAyOmlmKGt0PXRoaXMucHJvZHVjdGlvbnNfW1N0WzFdXVsxXSxudC4kPXBlW3BlLmxlbmd0aC1rdF0sbnQuXyQ9e2ZpcnN0X2xpbmU6dmVbdmUubGVuZ3RoLShrdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnZlW3ZlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnZlW3ZlLmxlbmd0aC0oa3R8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dmVbdmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxvdCYmKG50Ll8kLnJhbmdlPVt2ZVt2ZS5sZW5ndGgtKGt0fHwxKV0ucmFuZ2VbMF0sdmVbdmUubGVuZ3RoLTFdLnJhbmdlWzFdXSksdnQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG50LFtfZSxWZSxiZSxVZS55eSxTdFsxXSxwZSx2ZV0uY29uY2F0KFJ0KSksdHlwZW9mIHZ0PCJ1IilyZXR1cm4gdnQ7a3QmJihUZT1UZS5zbGljZSgwLC0xKmt0KjIpLHBlPXBlLnNsaWNlKDAsLTEqa3QpLHZlPXZlLnNsaWNlKDAsLTEqa3QpKSxUZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1N0WzFdXVswXSkscGUucHVzaChudC4kKSx2ZS5wdXNoKG50Ll8kKSxPbj1QZVtUZVtUZS5sZW5ndGgtMl1dW1RlW1RlLmxlbmd0aC0xXV0sVGUucHVzaChPbik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHE9ZnVuY3Rpb24oKXt2YXIgaWU9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihWLFRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFYsVGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFYpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ob2UsVil7cmV0dXJuIHRoaXMueXk9Vnx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9b2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgb2U9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW9lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1vZSx0aGlzLm1hdGNoZWQrPW9lO3ZhciBWPW9lLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksb2V9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24ob2Upe3ZhciBWPW9lLmxlbmd0aCxUZT1vZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW9lK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1WKSx0aGlzLm9mZnNldC09Vjt2YXIgVz10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxUZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVRlLmxlbmd0aC0xKTt2YXIgcGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlRlPyhUZS5sZW5ndGg9PT1XLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrV1tXLmxlbmd0aC1UZS5sZW5ndGhdLmxlbmd0aC1UZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVZ9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcGVbMF0scGVbMF0rdGhpcy55eWxlbmctVl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKG9lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2Uob2UpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBvZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKG9lLmxlbmd0aD4yMD8iLi4uIjoiIikrb2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgb2U9dGhpcy5tYXRjaDtyZXR1cm4gb2UubGVuZ3RoPDIwJiYob2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLW9lLmxlbmd0aCkpLChvZS5zdWJzdHIoMCwyMCkrKG9lLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIG9lPXRoaXMucGFzdElucHV0KCksVj1uZXcgQXJyYXkob2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gb2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1YrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKG9lLFYpe3ZhciBUZSxXLHBlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihwZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihwZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxXPW9lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxXJiYodGhpcy55eWxpbmVubys9Vy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpXP1dbVy5sZW5ndGgtMV0ubGVuZ3RoLVdbVy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitvZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1vZVswXSx0aGlzLm1hdGNoKz1vZVswXSx0aGlzLm1hdGNoZXM9b2UsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uob2VbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW9lWzBdLFRlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFYsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVGUpcmV0dXJuIFRlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB2ZSBpbiBwZSl0aGlzW3ZlXT1wZVt2ZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG9lLFYsVGUsVzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBwZT10aGlzLl9jdXJyZW50UnVsZXMoKSx2ZT0wO3ZlPHBlLmxlbmd0aDt2ZSsrKWlmKFRlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcGVbdmVdXSksVGUmJighVnx8VGVbMF0ubGVuZ3RoPlZbMF0ubGVuZ3RoKSl7aWYoVj1UZSxXPXZlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKG9lPXRoaXMudGVzdF9tYXRjaChUZSxwZVt2ZV0pLG9lIT09ITEpcmV0dXJuIG9lO2lmKHRoaXMuX2JhY2t0cmFjayl7Vj0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBWPyhvZT10aGlzLnRlc3RfbWF0Y2goVixwZVtXXSksb2UhPT0hMT9vZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBWPXRoaXMubmV4dCgpO3JldHVybiBWfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihWKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goVil9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgVj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBWPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oVil7cmV0dXJuIFY9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhWfHwwKSxWPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbVl06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihWKXt0aGlzLmJlZ2luKFYpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oVixUZSxXLHBlKXt2YXIgdmU9cGU7c3dpdGNoKFcpe2Nhc2UgMDpyZXR1cm4idGl0bGUiO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksOTticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDExO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpyZXR1cm4gMjE7Y2FzZSA5OnJldHVybiAyMjtjYXNlIDEwOnJldHVybiAyMztjYXNlIDExOnJldHVybiAyNDtjYXNlIDEyOnJldHVybiA1O2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpicmVhaztjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDg7Y2FzZSAxNzpyZXR1cm4gNjtjYXNlIDE4OnJldHVybiAyNztjYXNlIDE5OnJldHVybiA0MDtjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnJldHVybiAzMjtjYXNlIDIyOnJldHVybiAzMTtjYXNlIDIzOnJldHVybiAzNDtjYXNlIDI0OnJldHVybiAzNjtjYXNlIDI1OnJldHVybiAzODtjYXNlIDI2OnJldHVybiA0MTtjYXNlIDI3OnJldHVybiA0MjtjYXNlIDI4OnJldHVybiA0MztjYXNlIDI5OnJldHVybiA0NDtjYXNlIDMwOnJldHVybiA0NTtjYXNlIDMxOnJldHVybiA0NjtjYXNlIDMyOnJldHVybiA0NztjYXNlIDMzOnJldHVybiA0ODtjYXNlIDM0OnJldHVybiA0OTtjYXNlIDM1OnJldHVybiA1MDtjYXNlIDM2OnJldHVybiA1MTtjYXNlIDM3OnJldHVybiA1MjtjYXNlIDM4OnJldHVybiA1MztjYXNlIDM5OnJldHVybiA1NDtjYXNlIDQwOnJldHVybiA2NTtjYXNlIDQxOnJldHVybiA2NjtjYXNlIDQyOnJldHVybiA2NztjYXNlIDQzOnJldHVybiA2ODtjYXNlIDQ0OnJldHVybiA2OTtjYXNlIDQ1OnJldHVybiA3MDtjYXNlIDQ2OnJldHVybiA3MTtjYXNlIDQ3OnJldHVybiA1NztjYXNlIDQ4OnJldHVybiA1OTtjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDc3O2JyZWFrO2Nhc2UgNTA6cmV0dXJuIDc1O2Nhc2UgNTE6cmV0dXJuIDgxO2Nhc2UgNTI6cmV0dXJuIDg4O2Nhc2UgNTM6cmV0dXJuIlBFUkNFTlQiO2Nhc2UgNTQ6cmV0dXJuIDg2O2Nhc2UgNTU6cmV0dXJuIDg0O2Nhc2UgNTY6YnJlYWs7Y2FzZSA1Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDU4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDcyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIHRoaXMuYmVnaW4oInN0eWxlIiksNzQ7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gNjE7Y2FzZSA2MjpyZXR1cm4gNjQ7Y2FzZSA2MzpyZXR1cm4gNjM7Y2FzZSA2NDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDY1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY2OnJldHVybiJxU3RyaW5nIjtjYXNlIDY3OnJldHVybiBUZS55eXRleHQ9VGUueXl0ZXh0LnRyaW0oKSw4OTticmVhaztjYXNlIDY4OnJldHVybiA3NTtjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOnJldHVybiA3Nn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86JCkvaSwvXig/OnJlcXVpcmVtZW50RGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/Ojp7M30pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OnN0eWxlXGIpL2ksL14oPzpcdyspL2ksL14oPzo6KS9pLC9eKD86OykvaSwvXig/OiUpL2ksL14oPzotKS9pLC9eKD86IykvaSwvXig/OiApL2ksL14oPzpbIl0pL2ksL14oPzpcbikvaSwvXig/OmNsYXNzRGVmXGIpL2ksL14oPzpjbGFzc1xiKS9pLC9eKD86PC0pL2ksL14oPzotPikvaSwvXig/Oi0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Oltcd11bXjosXHJcblx7XDxcPlwtXD1dKikvaSwvXig/Olx3KykvaSwvXig/OlswLTldKykvaSwvXig/OiwpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls2LDcsNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNCw2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsyLDY4LDY5LDcwXSxpbmNsdXNpdmU6ITF9LHN0eWxlOntydWxlczpbNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOls2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls2NSw2Niw2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNSw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTksNjAsNjEsNjIsNjMsNjQsNjcsNjgsNjksNzBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gaWV9KCk7eGUubGV4ZXI9cTtmdW5jdGlvbiBkZSgpe3RoaXMueXk9e319cmV0dXJuIG8oZGUsIlBhcnNlciIpLGRlLnByb3RvdHlwZT14ZSx4ZS5QYXJzZXI9ZGUsbmV3IGRlfSgpO2hQLnBhcnNlcj1oUDt2ZGU9aFB9KTt2YXIgcVMsYmRlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTt5dCgpO2NpKCk7cVM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJlbGF0aW9ucz1bXTt0aGlzLmxhdGVzdFJlcXVpcmVtZW50PXRoaXMuZ2V0SW5pdGlhbFJlcXVpcmVtZW50KCk7dGhpcy5yZXF1aXJlbWVudHM9bmV3IE1hcDt0aGlzLmxhdGVzdEVsZW1lbnQ9dGhpcy5nZXRJbml0aWFsRWxlbWVudCgpO3RoaXMuZWxlbWVudHM9bmV3IE1hcDt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLmRpcmVjdGlvbj0iVEIiO3RoaXMuUmVxdWlyZW1lbnRUeXBlPXtSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In07dGhpcy5SaXNrTGV2ZWw9e0xPV19SSVNLOiJMb3ciLE1FRF9SSVNLOiJNZWRpdW0iLEhJR0hfUklTSzoiSGlnaCJ9O3RoaXMuVmVyaWZ5VHlwZT17VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9O3RoaXMuUmVsYXRpb25zaGlwcz17Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifTt0aGlzLnNldEFjY1RpdGxlPUFyO3RoaXMuZ2V0QWNjVGl0bGU9RHI7dGhpcy5zZXRBY2NEZXNjcmlwdGlvbj1Mcjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPVJyO3RoaXMuc2V0RGlhZ3JhbVRpdGxlPU9yO3RoaXMuZ2V0RGlhZ3JhbVRpdGxlPU5yO3RoaXMuZ2V0Q29uZmlnPW8oKCk9Pm1lKCkucmVxdWlyZW1lbnQsImdldENvbmZpZyIpO3RoaXMuY2xlYXIoKSx0aGlzLnNldERpcmVjdGlvbj10aGlzLnNldERpcmVjdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkUmVxdWlyZW1lbnQ9dGhpcy5hZGRSZXF1aXJlbWVudC5iaW5kKHRoaXMpLHRoaXMuc2V0TmV3UmVxSWQ9dGhpcy5zZXROZXdSZXFJZC5iaW5kKHRoaXMpLHRoaXMuc2V0TmV3UmVxUmlzaz10aGlzLnNldE5ld1JlcVJpc2suYmluZCh0aGlzKSx0aGlzLnNldE5ld1JlcVRleHQ9dGhpcy5zZXROZXdSZXFUZXh0LmJpbmQodGhpcyksdGhpcy5zZXROZXdSZXFWZXJpZnlNZXRob2Q9dGhpcy5zZXROZXdSZXFWZXJpZnlNZXRob2QuYmluZCh0aGlzKSx0aGlzLmFkZEVsZW1lbnQ9dGhpcy5hZGRFbGVtZW50LmJpbmQodGhpcyksdGhpcy5zZXROZXdFbGVtZW50VHlwZT10aGlzLnNldE5ld0VsZW1lbnRUeXBlLmJpbmQodGhpcyksdGhpcy5zZXROZXdFbGVtZW50RG9jUmVmPXRoaXMuc2V0TmV3RWxlbWVudERvY1JlZi5iaW5kKHRoaXMpLHRoaXMuYWRkUmVsYXRpb25zaGlwPXRoaXMuYWRkUmVsYXRpb25zaGlwLmJpbmQodGhpcyksdGhpcy5zZXRDc3NTdHlsZT10aGlzLnNldENzc1N0eWxlLmJpbmQodGhpcyksdGhpcy5zZXRDbGFzcz10aGlzLnNldENsYXNzLmJpbmQodGhpcyksdGhpcy5kZWZpbmVDbGFzcz10aGlzLmRlZmluZUNsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRBY2NUaXRsZT10aGlzLnNldEFjY1RpdGxlLmJpbmQodGhpcyksdGhpcy5zZXRBY2NEZXNjcmlwdGlvbj10aGlzLnNldEFjY0Rlc2NyaXB0aW9uLmJpbmQodGhpcyl9c3RhdGlje28odGhpcywiUmVxdWlyZW1lbnREQiIpfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmRpcmVjdGlvbn1zZXREaXJlY3Rpb24oZSl7dGhpcy5kaXJlY3Rpb249ZX1yZXNldExhdGVzdFJlcXVpcmVtZW50KCl7dGhpcy5sYXRlc3RSZXF1aXJlbWVudD10aGlzLmdldEluaXRpYWxSZXF1aXJlbWVudCgpfXJlc2V0TGF0ZXN0RWxlbWVudCgpe3RoaXMubGF0ZXN0RWxlbWVudD10aGlzLmdldEluaXRpYWxFbGVtZW50KCl9Z2V0SW5pdGlhbFJlcXVpcmVtZW50KCl7cmV0dXJue3JlcXVpcmVtZW50SWQ6IiIsdGV4dDoiIixyaXNrOiIiLHZlcmlmeU1ldGhvZDoiIixuYW1lOiIiLHR5cGU6IiIsY3NzU3R5bGVzOltdLGNsYXNzZXM6WyJkZWZhdWx0Il19fWdldEluaXRpYWxFbGVtZW50KCl7cmV0dXJue25hbWU6IiIsdHlwZToiIixkb2NSZWY6IiIsY3NzU3R5bGVzOltdLGNsYXNzZXM6WyJkZWZhdWx0Il19fWFkZFJlcXVpcmVtZW50KGUscil7cmV0dXJuIHRoaXMucmVxdWlyZW1lbnRzLmhhcyhlKXx8dGhpcy5yZXF1aXJlbWVudHMuc2V0KGUse25hbWU6ZSx0eXBlOnIscmVxdWlyZW1lbnRJZDp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJlcXVpcmVtZW50SWQsdGV4dDp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnRleHQscmlzazp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJpc2ssdmVyaWZ5TWV0aG9kOnRoaXMubGF0ZXN0UmVxdWlyZW1lbnQudmVyaWZ5TWV0aG9kLGNzc1N0eWxlczpbXSxjbGFzc2VzOlsiZGVmYXVsdCJdfSksdGhpcy5yZXNldExhdGVzdFJlcXVpcmVtZW50KCksdGhpcy5yZXF1aXJlbWVudHMuZ2V0KGUpfWdldFJlcXVpcmVtZW50cygpe3JldHVybiB0aGlzLnJlcXVpcmVtZW50c31zZXROZXdSZXFJZChlKXt0aGlzLmxhdGVzdFJlcXVpcmVtZW50IT09dm9pZCAwJiYodGhpcy5sYXRlc3RSZXF1aXJlbWVudC5yZXF1aXJlbWVudElkPWUpfXNldE5ld1JlcVRleHQoZSl7dGhpcy5sYXRlc3RSZXF1aXJlbWVudCE9PXZvaWQgMCYmKHRoaXMubGF0ZXN0UmVxdWlyZW1lbnQudGV4dD1lKX1zZXROZXdSZXFSaXNrKGUpe3RoaXMubGF0ZXN0UmVxdWlyZW1lbnQhPT12b2lkIDAmJih0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJpc2s9ZSl9c2V0TmV3UmVxVmVyaWZ5TWV0aG9kKGUpe3RoaXMubGF0ZXN0UmVxdWlyZW1lbnQhPT12b2lkIDAmJih0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnZlcmlmeU1ldGhvZD1lKX1hZGRFbGVtZW50KGUpe3JldHVybiB0aGlzLmVsZW1lbnRzLmhhcyhlKXx8KHRoaXMuZWxlbWVudHMuc2V0KGUse25hbWU6ZSx0eXBlOnRoaXMubGF0ZXN0RWxlbWVudC50eXBlLGRvY1JlZjp0aGlzLmxhdGVzdEVsZW1lbnQuZG9jUmVmLGNzc1N0eWxlczpbXSxjbGFzc2VzOlsiZGVmYXVsdCJdfSksWC5pbmZvKCJBZGRlZCBuZXcgZWxlbWVudDogIixlKSksdGhpcy5yZXNldExhdGVzdEVsZW1lbnQoKSx0aGlzLmVsZW1lbnRzLmdldChlKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzfXNldE5ld0VsZW1lbnRUeXBlKGUpe3RoaXMubGF0ZXN0RWxlbWVudCE9PXZvaWQgMCYmKHRoaXMubGF0ZXN0RWxlbWVudC50eXBlPWUpfXNldE5ld0VsZW1lbnREb2NSZWYoZSl7dGhpcy5sYXRlc3RFbGVtZW50IT09dm9pZCAwJiYodGhpcy5sYXRlc3RFbGVtZW50LmRvY1JlZj1lKX1hZGRSZWxhdGlvbnNoaXAoZSxyLG4pe3RoaXMucmVsYXRpb25zLnB1c2goe3R5cGU6ZSxzcmM6cixkc3Q6bn0pfWdldFJlbGF0aW9uc2hpcHMoKXtyZXR1cm4gdGhpcy5yZWxhdGlvbnN9Y2xlYXIoKXt0aGlzLnJlbGF0aW9ucz1bXSx0aGlzLnJlc2V0TGF0ZXN0UmVxdWlyZW1lbnQoKSx0aGlzLnJlcXVpcmVtZW50cz1uZXcgTWFwLHRoaXMucmVzZXRMYXRlc3RFbGVtZW50KCksdGhpcy5lbGVtZW50cz1uZXcgTWFwLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLGtyKCl9c2V0Q3NzU3R5bGUoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5yZXF1aXJlbWVudHMuZ2V0KG4pPz90aGlzLmVsZW1lbnRzLmdldChuKTtpZighcnx8IWkpcmV0dXJuO2ZvcihsZXQgYSBvZiByKWEuaW5jbHVkZXMoIiwiKT9pLmNzc1N0eWxlcy5wdXNoKC4uLmEuc3BsaXQoIiwiKSk6aS5jc3NTdHlsZXMucHVzaChhKX19c2V0Q2xhc3MoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5yZXF1aXJlbWVudHMuZ2V0KG4pPz90aGlzLmVsZW1lbnRzLmdldChuKTtpZihpKWZvcihsZXQgYSBvZiByKXtpLmNsYXNzZXMucHVzaChhKTtsZXQgcz10aGlzLmNsYXNzZXMuZ2V0KGEpPy5zdHlsZXM7cyYmaS5jc3NTdHlsZXMucHVzaCguLi5zKX19fWRlZmluZUNsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuY2xhc3Nlcy5nZXQobik7aT09PXZvaWQgMCYmKGk9e2lkOm4sc3R5bGVzOltdLHRleHRTdHlsZXM6W119LHRoaXMuY2xhc3Nlcy5zZXQobixpKSksciYmci5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKC9jb2xvci8uZXhlYyhhKSl7bGV0IHM9YS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIik7aS50ZXh0U3R5bGVzLnB1c2gocyl9aS5zdHlsZXMucHVzaChhKX0pLHRoaXMucmVxdWlyZW1lbnRzLmZvckVhY2goYT0+e2EuY2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5jc3NTdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KSx0aGlzLmVsZW1lbnRzLmZvckVhY2goYT0+e2EuY2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5jc3NTdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KX19Z2V0Q2xhc3Nlcygpe3JldHVybiB0aGlzLmNsYXNzZXN9Z2V0RGF0YSgpe2xldCBlPW1lKCkscj1bXSxuPVtdO2ZvcihsZXQgaSBvZiB0aGlzLnJlcXVpcmVtZW50cy52YWx1ZXMoKSl7bGV0IGE9aTthLmlkPWkubmFtZSxhLmNzc1N0eWxlcz1pLmNzc1N0eWxlcyxhLmNzc0NsYXNzZXM9aS5jbGFzc2VzLmpvaW4oIiAiKSxhLnNoYXBlPSJyZXF1aXJlbWVudEJveCIsYS5sb29rPWUubG9vayxyLnB1c2goYSl9Zm9yKGxldCBpIG9mIHRoaXMuZWxlbWVudHMudmFsdWVzKCkpe2xldCBhPWk7YS5zaGFwZT0icmVxdWlyZW1lbnRCb3giLGEubG9vaz1lLmxvb2ssYS5pZD1pLm5hbWUsYS5jc3NTdHlsZXM9aS5jc3NTdHlsZXMsYS5jc3NDbGFzc2VzPWkuY2xhc3Nlcy5qb2luKCIgIiksci5wdXNoKGEpfWZvcihsZXQgaSBvZiB0aGlzLnJlbGF0aW9ucyl7bGV0IGE9MCxzPWkudHlwZT09PXRoaXMuUmVsYXRpb25zaGlwcy5DT05UQUlOUyxsPXtpZDpgJHtpLnNyY30tJHtpLmRzdH0tJHthfWAsc3RhcnQ6dGhpcy5yZXF1aXJlbWVudHMuZ2V0KGkuc3JjKT8ubmFtZT8/dGhpcy5lbGVtZW50cy5nZXQoaS5zcmMpPy5uYW1lLGVuZDp0aGlzLnJlcXVpcmVtZW50cy5nZXQoaS5kc3QpPy5uYW1lPz90aGlzLmVsZW1lbnRzLmdldChpLmRzdCk/Lm5hbWUsbGFiZWw6YCZsdDsmbHQ7JHtpLnR5cGV9Jmd0OyZndDtgLGNsYXNzZXM6InJlbGF0aW9uc2hpcExpbmUiLHN0eWxlOlsiZmlsbDpub25lIixzPyIiOiJzdHJva2UtZGFzaGFycmF5OiAxMCw3Il0sbGFiZWxwb3M6ImMiLHRoaWNrbmVzczoibm9ybWFsIix0eXBlOiJub3JtYWwiLHBhdHRlcm46cz8ibm9ybWFsIjoiZGFzaGVkIixhcnJvd1R5cGVTdGFydDpzPyJyZXF1aXJlbWVudF9jb250YWlucyI6IiIsYXJyb3dUeXBlRW5kOnM/IiI6InJlcXVpcmVtZW50X2Fycm93Iixsb29rOmUubG9va307bi5wdXNoKGwpLGErK31yZXR1cm57bm9kZXM6cixlZGdlczpuLG90aGVyOnt9LGNvbmZpZzplLGRpcmVjdGlvbjp0aGlzLmdldERpcmVjdGlvbigpfX19fSk7dmFyIE5VZSxUZGUsd2RlPU4oKCk9PnsidXNlIHN0cmljdCI7TlVlPW8odD0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHt0LnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke3QucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke3QuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke3QucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke3QucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke3QucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHt0LnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHt0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke3QucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke3QucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke3QucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CiAgLmRpdmlkZXIgewogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIH0KCmAsImdldFN0eWxlcyIpLFRkZT1OVWV9KTt2YXIgZlA9e307dXIoZlAse2RyYXc6KCk9Pk1VZX0pO3ZhciBNVWUsa2RlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTt5dCgpO1NtKCk7cnAoKTtucCgpO2VyKCk7TVVlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyByZXF1aXJlbWVudCBkaWFncmFtICh1bmlmaWVkKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzdGF0ZTphLGxheW91dDpzfT1tZSgpLGw9bi5kYi5nZXREYXRhKCksdT13YyhlLGkpO2wudHlwZT1uLnR5cGUsbC5sYXlvdXRBbGdvcml0aG09dWYocyksbC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZz8/NTAsbC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZz8/NTAsbC5tYXJrZXJzPVsicmVxdWlyZW1lbnRfY29udGFpbnMiLCJyZXF1aXJlbWVudF9hcnJvdyJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgUmMobCx1KTtsZXQgaD04O1Z0Lmluc2VydFRpdGxlKHUsInJlcXVpcmVtZW50RGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLFlvKHUsaCwicmVxdWlyZW1lbnREaWFncmFtIixhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpfSk7dmFyIEVkZT17fTt1cihFZGUse2RpYWdyYW06KCk9PklVZX0pO3ZhciBJVWUsU2RlPU4oKCk9PnsidXNlIHN0cmljdCI7eGRlKCk7YmRlKCk7d2RlKCk7a2RlKCk7SVVlPXtwYXJzZXI6dmRlLGdldCBkYigpe3JldHVybiBuZXcgcVN9LHJlbmRlcmVyOmZQLHN0eWxlczpUZGV9fSk7dmFyIGRQLF9kZSxEZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkUD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oUSxqLG5lLHRlKXtmb3IobmU9bmV8fHt9LHRlPVEubGVuZ3RoO3RlLS07bmVbUVt0ZV1dPWopO3JldHVybiBuZX0sIm8iKSxlPVsxLDJdLHI9WzEsM10sbj1bMSw0XSxpPVsyLDRdLGE9WzEsOV0scz1bMSwxMV0sbD1bMSwxM10sdT1bMSwxNF0saD1bMSwxNl0sZj1bMSwxN10sZD1bMSwxOF0scD1bMSwyNF0sbT1bMSwyNV0sZz1bMSwyNl0seT1bMSwyN10sdj1bMSwyOF0seD1bMSwyOV0sYj1bMSwzMF0sVD1bMSwzMV0sUz1bMSwzMl0sdz1bMSwzM10sRT1bMSwzNF0sXz1bMSwzNV0sQz1bMSwzNl0sRD1bMSwzN10sTz1bMSwzOF0sUj1bMSwzOV0saz1bMSw0MV0sTD1bMSw0Ml0sQT1bMSw0M10sST1bMSw0NF0sTT1bMSw0NV0sUD1bMSw0Nl0sQj1bMSw0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNDgsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEY9WzQsNSwxNiw1MCw1Miw1M10sej1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSwkPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLFU9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OCw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sSz1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDQ3LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxlZT1bNjgsNjksNzBdLFk9WzEsMTIyXSxjZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XOjc0LERPVFRFRF9BUlJPVzo3NSxCSURJUkVDVElPTkFMX0RPVFRFRF9BUlJPVzo3NixTT0xJRF9DUk9TUzo3NyxET1RURURfQ1JPU1M6NzgsU09MSURfUE9JTlQ6NzksRE9UVEVEX1BPSU5UOjgwLFRYVDo4MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5FV0xJTkUiLDY6IlNEIiwxMzoiY3JlYXRlIiwxNDoiYm94IiwxNToicmVzdE9mTGluZSIsMTY6ImVuZCIsMTg6ImF1dG9udW1iZXIiLDE5OiJOVU0iLDIwOiJvZmYiLDIxOiJhY3RpdmF0ZSIsMjM6ImRlYWN0aXZhdGUiLDI5OiJ0aXRsZSIsMzA6ImxlZ2FjeV90aXRsZSIsMzE6ImFjY190aXRsZSIsMzI6ImFjY190aXRsZV92YWx1ZSIsMzM6ImFjY19kZXNjciIsMzQ6ImFjY19kZXNjcl92YWx1ZSIsMzU6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM2OiJsb29wIiwzNzoicmVjdCIsMzg6Im9wdCIsMzk6ImFsdCIsNDE6InBhciIsNDM6InBhcl9vdmVyIiw0NDoiY3JpdGljYWwiLDQ2OiJicmVhayIsNDc6Im9wdGlvbiIsNDg6ImFuZCIsNDk6ImVsc2UiLDUwOiJwYXJ0aWNpcGFudCIsNTE6IkFTIiw1MjoicGFydGljaXBhbnRfYWN0b3IiLDUzOiJkZXN0cm95Iiw1NDoibm90ZSIsNTc6Im92ZXIiLDU5OiJsaW5rcyIsNjA6ImxpbmsiLDYxOiJwcm9wZXJ0aWVzIiw2MjoiZGV0YWlscyIsNjQ6IiwiLDY1OiJsZWZ0X29mIiw2NjoicmlnaHRfb2YiLDY4OiIrIiw2OToiLSIsNzA6IkFDVE9SIiw3MToiU09MSURfT1BFTl9BUlJPVyIsNzI6IkRPVFRFRF9PUEVOX0FSUk9XIiw3MzoiU09MSURfQVJST1ciLDc0OiJCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XIiw3NToiRE9UVEVEX0FSUk9XIiw3NjoiQklESVJFQ1RJT05BTF9ET1RURURfQVJST1ciLDc3OiJTT0xJRF9DUk9TUyIsNzg6IkRPVFRFRF9DUk9TUyIsNzk6IlNPTElEX1BPSU5UIiw4MDoiRE9UVEVEX1BPSU5UIiw4MToiVFhUIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFs3LDBdLFs3LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFsxMCwwXSxbMTAsMl0sWzExLDJdLFsxMSwxXSxbMTEsMV0sWzksMV0sWzksMl0sWzksNF0sWzksMl0sWzksNF0sWzksM10sWzksM10sWzksMl0sWzksM10sWzksM10sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzQ1LDFdLFs0NSw0XSxbNDIsMV0sWzQyLDRdLFs0MCwxXSxbNDAsNF0sWzEyLDVdLFsxMiwzXSxbMTIsNV0sWzEyLDNdLFsxMiwzXSxbMjQsNF0sWzI0LDRdLFsyNSwzXSxbMjYsM10sWzI3LDNdLFsyOCwzXSxbNjMsMl0sWzYzLDFdLFs1OCwzXSxbNTgsMV0sWzU1LDFdLFs1NSwxXSxbMTcsNV0sWzE3LDVdLFsxNyw0XSxbMjIsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs1NiwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGosbmUsdGUsaGUsbGUsSixTZSl7dmFyIHNlPUoubGVuZ3RoLTE7c3dpdGNoKGxlKXtjYXNlIDM6cmV0dXJuIGhlLmFwcGx5KEpbc2VdKSxKW3NlXTticmVhaztjYXNlIDQ6Y2FzZSA5OnRoaXMuJD1bXTticmVhaztjYXNlIDU6Y2FzZSAxMDpKW3NlLTFdLnB1c2goSltzZV0pLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD1KW3NlXTticmVhaztjYXNlIDg6Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNTpKW3NlXS50eXBlPSJjcmVhdGVQYXJ0aWNpcGFudCIsdGhpcy4kPUpbc2VdO2JyZWFrO2Nhc2UgMTY6SltzZS0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTpoZS5wYXJzZUJveERhdGEoSltzZS0yXSl9KSxKW3NlLTFdLnB1c2goe3R5cGU6ImJveEVuZCIsYm94VGV4dDpKW3NlLTJdfSksdGhpcy4kPUpbc2UtMV07YnJlYWs7Y2FzZSAxODp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKEpbc2UtMl0pLHNlcXVlbmNlSW5kZXhTdGVwOk51bWJlcihKW3NlLTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIoSltzZS0xXSksc2VxdWVuY2VJbmRleFN0ZXA6MSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIwOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiExLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6SltzZS0xXS5hY3Rvcn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOkpbc2UtMV0uYWN0b3J9O2JyZWFrO2Nhc2UgMjk6aGUuc2V0RGlhZ3JhbVRpdGxlKEpbc2VdLnN1YnN0cmluZyg2KSksdGhpcy4kPUpbc2VdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDMwOmhlLnNldERpYWdyYW1UaXRsZShKW3NlXS5zdWJzdHJpbmcoNykpLHRoaXMuJD1KW3NlXS5zdWJzdHJpbmcoNyk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9SltzZV0udHJpbSgpLGhlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMjpjYXNlIDMzOnRoaXMuJD1KW3NlXS50cmltKCksaGUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM0Okpbc2UtMV0udW5zaGlmdCh7dHlwZToibG9vcFN0YXJ0Iixsb29wVGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5MT09QX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpKW3NlLTJdLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuTE9PUF9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDM1Okpbc2UtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5SRUNUX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJyZWN0RW5kIixjb2xvcjpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgMzY6SltzZS0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5PUFRfU1RBUlR9KSxKW3NlLTFdLnB1c2goe3R5cGU6Im9wdEVuZCIsb3B0VGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5PUFRfRU5EfSksdGhpcy4kPUpbc2UtMV07YnJlYWs7Y2FzZSAzNzpKW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OmhlLnBhcnNlTWVzc2FnZShKW3NlLTJdKSxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkFMVF9TVEFSVH0pLEpbc2UtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDM4Okpbc2UtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6aGUucGFyc2VNZXNzYWdlKEpbc2UtMl0pLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuUEFSX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgMzk6SltzZS0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVH0pLEpbc2UtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOmhlLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDQwOkpbc2UtMV0udW5zaGlmdCh7dHlwZToiY3JpdGljYWxTdGFydCIsY3JpdGljYWxUZXh0OmhlLnBhcnNlTWVzc2FnZShKW3NlLTJdKSxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDQxOkpbc2UtMV0udW5zaGlmdCh7dHlwZToiYnJlYWtTdGFydCIsYnJlYWtUZXh0OmhlLnBhcnNlTWVzc2FnZShKW3NlLTJdKSxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJicmVha0VuZCIsb3B0VGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5CUkVBS19FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDQzOnRoaXMuJD1KW3NlLTNdLmNvbmNhdChbe3R5cGU6Im9wdGlvbiIsb3B0aW9uVGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0xXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT059LEpbc2VdXSk7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9SltzZS0zXS5jb25jYXQoW3t0eXBlOiJhbmQiLHBhclRleHQ6aGUucGFyc2VNZXNzYWdlKEpbc2UtMV0pLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuUEFSX0FORH0sSltzZV1dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1KW3NlLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6aGUucGFyc2VNZXNzYWdlKEpbc2UtMV0pLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuQUxUX0VMU0V9LEpbc2VdXSk7YnJlYWs7Y2FzZSA0ODpKW3NlLTNdLmRyYXc9InBhcnRpY2lwYW50IixKW3NlLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50IixKW3NlLTNdLmRlc2NyaXB0aW9uPWhlLnBhcnNlTWVzc2FnZShKW3NlLTFdKSx0aGlzLiQ9SltzZS0zXTticmVhaztjYXNlIDQ5Okpbc2UtMV0uZHJhdz0icGFydGljaXBhbnQiLEpbc2UtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgNTA6SltzZS0zXS5kcmF3PSJhY3RvciIsSltzZS0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsSltzZS0zXS5kZXNjcmlwdGlvbj1oZS5wYXJzZU1lc3NhZ2UoSltzZS0xXSksdGhpcy4kPUpbc2UtM107YnJlYWs7Y2FzZSA1MTpKW3NlLTFdLmRyYXc9ImFjdG9yIixKW3NlLTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDUyOkpbc2UtMV0udHlwZT0iZGVzdHJveVBhcnRpY2lwYW50Iix0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDUzOnRoaXMuJD1bSltzZS0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50Okpbc2UtMl0sYWN0b3I6SltzZS0xXS5hY3Rvcix0ZXh0Okpbc2VdfV07YnJlYWs7Y2FzZSA1NDpKW3NlLTJdPVtdLmNvbmNhdChKW3NlLTFdLEpbc2UtMV0pLnNsaWNlKDAsMiksSltzZS0yXVswXT1KW3NlLTJdWzBdLmFjdG9yLEpbc2UtMl1bMV09SltzZS0yXVsxXS5hY3Rvcix0aGlzLiQ9W0pbc2UtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpoZS5QTEFDRU1FTlQuT1ZFUixhY3RvcjpKW3NlLTJdLnNsaWNlKDAsMiksdGV4dDpKW3NlXX1dO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPVtKW3NlLTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6SltzZS0xXS5hY3Rvcix0ZXh0Okpbc2VdfV07YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9W0pbc2UtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpKW3NlLTFdLmFjdG9yLHRleHQ6SltzZV19XTticmVhaztjYXNlIDU3OnRoaXMuJD1bSltzZS0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6SltzZS0xXS5hY3Rvcix0ZXh0Okpbc2VdfV07YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9W0pbc2UtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOkpbc2UtMV0uYWN0b3IsdGV4dDpKW3NlXX1dO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPVtKW3NlLTJdLEpbc2VdXTticmVhaztjYXNlIDYyOnRoaXMuJD1KW3NlXTticmVhaztjYXNlIDYzOnRoaXMuJD1oZS5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPWhlLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPVtKW3NlLTRdLEpbc2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206SltzZS00XS5hY3Rvcix0bzpKW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6SltzZS0zXSxtc2c6SltzZV0sYWN0aXZhdGU6ITB9LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6SltzZS0xXS5hY3Rvcn1dO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPVtKW3NlLTRdLEpbc2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206SltzZS00XS5hY3Rvcix0bzpKW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6SltzZS0zXSxtc2c6SltzZV19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpKW3NlLTRdLmFjdG9yfV07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9W0pbc2UtM10sSltzZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpKW3NlLTNdLmFjdG9yLHRvOkpbc2UtMV0uYWN0b3Isc2lnbmFsVHlwZTpKW3NlLTJdLG1zZzpKW3NlXX1dO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPXt0eXBlOiJhZGRQYXJ0aWNpcGFudCIsYWN0b3I6SltzZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWhlLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9aGUuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9aGUuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9aGUuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRDticmVhaztjYXNlIDczOnRoaXMuJD1oZS5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9aGUuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURUQ7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9aGUuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9aGUuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzc6dGhpcy4kPWhlLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPWhlLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc5OnRoaXMuJD1oZS5wYXJzZU1lc3NhZ2UoSltzZV0udHJpbSgpLnN1YnN0cmluZygxKSk7YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDplLDU6ciw2Om59LHsxOlszXX0sezM6NSw0OmUsNTpyLDY6bn0sezM6Niw0OmUsNTpyLDY6bn0sdChbMSw0LDUsMTMsMTQsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGksezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw1MDpELDUyOk8sNTM6Uiw1NDprLDU5OkwsNjA6QSw2MTpJLDYyOk0sNzA6UH0sdChCLFsyLDVdKSx7OTo0NywxMjoxMiwxMzpsLDE0OnUsMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw1MDpELDUyOk8sNTM6Uiw1NDprLDU5OkwsNjA6QSw2MTpJLDYyOk0sNzA6UH0sdChCLFsyLDddKSx0KEIsWzIsOF0pLHQoQixbMiwxNF0pLHsxMjo0OCw1MDpELDUyOk8sNTM6Un0sezE1OlsxLDQ5XX0sezU6WzEsNTBdfSx7NTpbMSw1M10sMTk6WzEsNTFdLDIwOlsxLDUyXX0sezIyOjU0LDcwOlB9LHsyMjo1NSw3MDpQfSx7NTpbMSw1Nl19LHs1OlsxLDU3XX0sezU6WzEsNThdfSx7NTpbMSw1OV19LHs1OlsxLDYwXX0sdChCLFsyLDI5XSksdChCLFsyLDMwXSksezMyOlsxLDYxXX0sezM0OlsxLDYyXX0sdChCLFsyLDMzXSksezE1OlsxLDYzXX0sezE1OlsxLDY0XX0sezE1OlsxLDY1XX0sezE1OlsxLDY2XX0sezE1OlsxLDY3XX0sezE1OlsxLDY4XX0sezE1OlsxLDY5XX0sezE1OlsxLDcwXX0sezIyOjcxLDcwOlB9LHsyMjo3Miw3MDpQfSx7MjI6NzMsNzA6UH0sezY3Ojc0LDcxOlsxLDc1XSw3MjpbMSw3Nl0sNzM6WzEsNzddLDc0OlsxLDc4XSw3NTpbMSw3OV0sNzY6WzEsODBdLDc3OlsxLDgxXSw3ODpbMSw4Ml0sNzk6WzEsODNdLDgwOlsxLDg0XX0sezU1Ojg1LDU3OlsxLDg2XSw2NTpbMSw4N10sNjY6WzEsODhdfSx7MjI6ODksNzA6UH0sezIyOjkwLDcwOlB9LHsyMjo5MSw3MDpQfSx7MjI6OTIsNzA6UH0sdChbNSw1MSw2NCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MV0sWzIsNjhdKSx0KEIsWzIsNl0pLHQoQixbMiwxNV0pLHQoRixbMiw5XSx7MTA6OTN9KSx0KEIsWzIsMTddKSx7NTpbMSw5NV0sMTk6WzEsOTRdfSx7NTpbMSw5Nl19LHQoQixbMiwyMV0pLHs1OlsxLDk3XX0sezU6WzEsOThdfSx0KEIsWzIsMjRdKSx0KEIsWzIsMjVdKSx0KEIsWzIsMjZdKSx0KEIsWzIsMjddKSx0KEIsWzIsMjhdKSx0KEIsWzIsMzFdKSx0KEIsWzIsMzJdKSx0KHosaSx7Nzo5OX0pLHQoeixpLHs3OjEwMH0pLHQoeixpLHs3OjEwMX0pLHQoJCxpLHs0MDoxMDIsNzoxMDN9KSx0KFUsaSx7NDI6MTA0LDc6MTA1fSksdChVLGksezc6MTA1LDQyOjEwNn0pLHQoSyxpLHs0NToxMDcsNzoxMDh9KSx0KHosaSx7NzoxMDl9KSx7NTpbMSwxMTFdLDUxOlsxLDExMF19LHs1OlsxLDExM10sNTE6WzEsMTEyXX0sezU6WzEsMTE0XX0sezIyOjExNyw2ODpbMSwxMTVdLDY5OlsxLDExNl0sNzA6UH0sdChlZSxbMiw2OV0pLHQoZWUsWzIsNzBdKSx0KGVlLFsyLDcxXSksdChlZSxbMiw3Ml0pLHQoZWUsWzIsNzNdKSx0KGVlLFsyLDc0XSksdChlZSxbMiw3NV0pLHQoZWUsWzIsNzZdKSx0KGVlLFsyLDc3XSksdChlZSxbMiw3OF0pLHsyMjoxMTgsNzA6UH0sezIyOjEyMCw1ODoxMTksNzA6UH0sezcwOlsyLDYzXX0sezcwOlsyLDY0XX0sezU2OjEyMSw4MTpZfSx7NTY6MTIzLDgxOll9LHs1NjoxMjQsODE6WX0sezU2OjEyNSw4MTpZfSx7NDpbMSwxMjhdLDU6WzEsMTMwXSwxMToxMjcsMTI6MTI5LDE2OlsxLDEyNl0sNTA6RCw1MjpPLDUzOlJ9LHs1OlsxLDEzMV19LHQoQixbMiwxOV0pLHQoQixbMiwyMF0pLHQoQixbMiwyMl0pLHQoQixbMiwyM10pLHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxMzJdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNTA6RCw1MjpPLDUzOlIsNTQ6ayw1OTpMLDYwOkEsNjE6SSw2MjpNLDcwOlB9LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxMzNdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNTA6RCw1MjpPLDUzOlIsNTQ6ayw1OTpMLDYwOkEsNjE6SSw2MjpNLDcwOlB9LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxMzRdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNTA6RCw1MjpPLDUzOlIsNTQ6ayw1OTpMLDYwOkEsNjE6SSw2MjpNLDcwOlB9LHsxNjpbMSwxMzVdfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzIsNDZdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNDk6WzEsMTM2XSw1MDpELDUyOk8sNTM6Uiw1NDprLDU5OkwsNjA6QSw2MTpJLDYyOk0sNzA6UH0sezE2OlsxLDEzN119LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMiw0NF0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw0ODpbMSwxMzhdLDUwOkQsNTI6Tyw1MzpSLDU0OmssNTk6TCw2MDpBLDYxOkksNjI6TSw3MDpQfSx7MTY6WzEsMTM5XX0sezE2OlsxLDE0MF19LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMiw0Ml0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw0NzpbMSwxNDFdLDUwOkQsNTI6Tyw1MzpSLDU0OmssNTk6TCw2MDpBLDYxOkksNjI6TSw3MDpQfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTQyXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OlQsMzk6Uyw0MTp3LDQzOkUsNDQ6Xyw0NjpDLDUwOkQsNTI6Tyw1MzpSLDU0OmssNTk6TCw2MDpBLDYxOkksNjI6TSw3MDpQfSx7MTU6WzEsMTQzXX0sdChCLFsyLDQ5XSksezE1OlsxLDE0NF19LHQoQixbMiw1MV0pLHQoQixbMiw1Ml0pLHsyMjoxNDUsNzA6UH0sezIyOjE0Niw3MDpQfSx7NTY6MTQ3LDgxOll9LHs1NjoxNDgsODE6WX0sezU2OjE0OSw4MTpZfSx7NjQ6WzEsMTUwXSw4MTpbMiw2Ml19LHs1OlsyLDU1XX0sezU6WzIsNzldfSx7NTpbMiw1Nl19LHs1OlsyLDU3XX0sezU6WzIsNThdfSx0KEIsWzIsMTZdKSx0KEYsWzIsMTBdKSx7MTI6MTUxLDUwOkQsNTI6Tyw1MzpSfSx0KEYsWzIsMTJdKSx0KEYsWzIsMTNdKSx0KEIsWzIsMThdKSx0KEIsWzIsMzRdKSx0KEIsWzIsMzVdKSx0KEIsWzIsMzZdKSx0KEIsWzIsMzddKSx7MTU6WzEsMTUyXX0sdChCLFsyLDM4XSksezE1OlsxLDE1M119LHQoQixbMiwzOV0pLHQoQixbMiw0MF0pLHsxNTpbMSwxNTRdfSx0KEIsWzIsNDFdKSx7NTpbMSwxNTVdfSx7NTpbMSwxNTZdfSx7NTY6MTU3LDgxOll9LHs1NjoxNTgsODE6WX0sezU6WzIsNjddfSx7NTpbMiw1M119LHs1OlsyLDU0XX0sezIyOjE1OSw3MDpQfSx0KEYsWzIsMTFdKSx0KCQsaSx7NzoxMDMsNDA6MTYwfSksdChVLGksezc6MTA1LDQyOjE2MX0pLHQoSyxpLHs3OjEwOCw0NToxNjJ9KSx0KEIsWzIsNDhdKSx0KEIsWzIsNTBdKSx7NTpbMiw2NV19LHs1OlsyLDY2XX0sezgxOlsyLDYxXX0sezE2OlsyLDQ3XX0sezE2OlsyLDQ1XX0sezE2OlsyLDQzXX1dLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sODc6WzIsNjNdLDg4OlsyLDY0XSwxMjE6WzIsNTVdLDEyMjpbMiw3OV0sMTIzOlsyLDU2XSwxMjQ6WzIsNTddLDEyNTpbMiw1OF0sMTQ3OlsyLDY3XSwxNDg6WzIsNTNdLDE0OTpbMiw1NF0sMTU3OlsyLDY1XSwxNTg6WzIsNjZdLDE1OTpbMiw2MV0sMTYwOlsyLDQ3XSwxNjE6WzIsNDVdLDE2MjpbMiw0M119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihqLG5lKXtpZihuZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGopO2Vsc2V7dmFyIHRlPW5ldyBFcnJvcihqKTt0aHJvdyB0ZS5oYXNoPW5lLHRlfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKGope3ZhciBuZT10aGlzLHRlPVswXSxoZT1bXSxsZT1bbnVsbF0sSj1bXSxTZT10aGlzLnRhYmxlLHNlPSIiLGFlPTAsT2U9MCx5ZT0wLEJlPTIsSGU9MSx6ZT1KLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLExlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSWU9e3l5Ont9fTtmb3IodmFyIHhlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseGUpJiYoSWUueXlbeGVdPXRoaXMueXlbeGVdKTtMZS5zZXRJbnB1dChqLEllLnl5KSxJZS55eS5sZXhlcj1MZSxJZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgTGUueXlsbG9jPiJ1IiYmKExlLnl5bGxvYz17fSk7dmFyIHE9TGUueXlsbG9jO0oucHVzaChxKTt2YXIgZGU9TGUub3B0aW9ucyYmTGUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEllLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUllLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGllKFJ0KXt0ZS5sZW5ndGg9dGUubGVuZ3RoLTIqUnQsbGUubGVuZ3RoPWxlLmxlbmd0aC1SdCxKLmxlbmd0aD1KLmxlbmd0aC1SdH1vKGllLCJwb3BTdGFjayIpO2Z1bmN0aW9uIG9lKCl7dmFyIFJ0O3JldHVybiBSdD1oZS5wb3AoKXx8TGUubGV4KCl8fEhlLHR5cGVvZiBSdCE9Im51bWJlciImJihSdCBpbnN0YW5jZW9mIEFycmF5JiYoaGU9UnQsUnQ9aGUucG9wKCkpLFJ0PW5lLnN5bWJvbHNfW1J0XXx8UnQpLFJ0fW8ob2UsImxleCIpO2Zvcih2YXIgVixUZSxXLHBlLHZlLFBlLF9lPXt9LGJlLFZlLERlLHFlOzspe2lmKFc9dGVbdGUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbV10/cGU9dGhpcy5kZWZhdWx0QWN0aW9uc1tXXTooKFY9PT1udWxsfHx0eXBlb2YgVj4idSIpJiYoVj1vZSgpKSxwZT1TZVtXXSYmU2VbV11bVl0pLHR5cGVvZiBwZT4idSJ8fCFwZS5sZW5ndGh8fCFwZVswXSl7dmFyIGF0PSIiO3FlPVtdO2ZvcihiZSBpbiBTZVtXXSl0aGlzLnRlcm1pbmFsc19bYmVdJiZiZT5CZSYmcWUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2JlXSsiJyIpO0xlLnNob3dQb3NpdGlvbj9hdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhhZSsxKStgOgpgK0xlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tWXXx8VikrIiciOmF0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGFlKzEpKyI6IFVuZXhwZWN0ZWQgIisoVj09SGU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVl18fFYpKyInIiksdGhpcy5wYXJzZUVycm9yKGF0LHt0ZXh0OkxlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tWXXx8VixsaW5lOkxlLnl5bGluZW5vLGxvYzpxLGV4cGVjdGVkOnFlfSl9aWYocGVbMF1pbnN0YW5jZW9mIEFycmF5JiZwZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1crIiwgdG9rZW46ICIrVik7c3dpdGNoKHBlWzBdKXtjYXNlIDE6dGUucHVzaChWKSxsZS5wdXNoKExlLnl5dGV4dCksSi5wdXNoKExlLnl5bGxvYyksdGUucHVzaChwZVsxXSksVj1udWxsLFRlPyhWPVRlLFRlPW51bGwpOihPZT1MZS55eWxlbmcsc2U9TGUueXl0ZXh0LGFlPUxlLnl5bGluZW5vLHE9TGUueXlsbG9jLHllPjAmJnllLS0pO2JyZWFrO2Nhc2UgMjppZihWZT10aGlzLnByb2R1Y3Rpb25zX1twZVsxXV1bMV0sX2UuJD1sZVtsZS5sZW5ndGgtVmVdLF9lLl8kPXtmaXJzdF9saW5lOkpbSi5sZW5ndGgtKFZlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SltKLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkpbSi5sZW5ndGgtKFZlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkpbSi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGRlJiYoX2UuXyQucmFuZ2U9W0pbSi5sZW5ndGgtKFZlfHwxKV0ucmFuZ2VbMF0sSltKLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFBlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShfZSxbc2UsT2UsYWUsSWUueXkscGVbMV0sbGUsSl0uY29uY2F0KHplKSksdHlwZW9mIFBlPCJ1IilyZXR1cm4gUGU7VmUmJih0ZT10ZS5zbGljZSgwLC0xKlZlKjIpLGxlPWxlLnNsaWNlKDAsLTEqVmUpLEo9Si5zbGljZSgwLC0xKlZlKSksdGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1twZVsxXV1bMF0pLGxlLnB1c2goX2UuJCksSi5wdXNoKF9lLl8kKSxEZT1TZVt0ZVt0ZS5sZW5ndGgtMl1dW3RlW3RlLmxlbmd0aC0xXV0sdGUucHVzaChEZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFo9ZnVuY3Rpb24oKXt2YXIgUT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG5lLHRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKG5lLHRlKTtlbHNlIHRocm93IG5ldyBFcnJvcihuZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihqLG5lKXtyZXR1cm4gdGhpcy55eT1uZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9aix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBqPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1qLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1qLHRoaXMubWF0Y2hlZCs9ajt2YXIgbmU9ai5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIG5lPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxqfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKGope3ZhciBuZT1qLmxlbmd0aCx0ZT1qLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9ait0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtbmUpLHRoaXMub2Zmc2V0LT1uZTt2YXIgaGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksdGUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT10ZS5sZW5ndGgtMSk7dmFyIGxlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0ZT8odGUubGVuZ3RoPT09aGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStoZVtoZS5sZW5ndGgtdGUubGVuZ3RoXS5sZW5ndGgtdGVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtsZVswXSxsZVswXSt0aGlzLnl5bGVuZy1uZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKGope3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShqKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgaj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGoubGVuZ3RoPjIwPyIuLi4iOiIiKStqLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5tYXRjaDtyZXR1cm4gai5sZW5ndGg8MjAmJihqKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1qLmxlbmd0aCkpLChqLnN1YnN0cigwLDIwKSsoai5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBqPXRoaXMucGFzdElucHV0KCksbmU9bmV3IEFycmF5KGoubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gait0aGlzLnVwY29taW5nSW5wdXQoKStgCmArbmUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKGosbmUpe3ZhciB0ZSxoZSxsZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYobGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYobGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaGU9alswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksaGUmJih0aGlzLnl5bGluZW5vKz1oZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpoZT9oZVtoZS5sZW5ndGgtMV0ubGVuZ3RoLWhlW2hlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2pbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9alswXSx0aGlzLm1hdGNoKz1qWzBdLHRoaXMubWF0Y2hlcz1qLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGpbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWpbMF0sdGU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbmUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksdGUpcmV0dXJuIHRlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBKIGluIGxlKXRoaXNbSl09bGVbSl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGosbmUsdGUsaGU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgbGU9dGhpcy5fY3VycmVudFJ1bGVzKCksSj0wO0o8bGUubGVuZ3RoO0orKylpZih0ZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2xlW0pdXSksdGUmJighbmV8fHRlWzBdLmxlbmd0aD5uZVswXS5sZW5ndGgpKXtpZihuZT10ZSxoZT1KLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGo9dGhpcy50ZXN0X21hdGNoKHRlLGxlW0pdKSxqIT09ITEpcmV0dXJuIGo7aWYodGhpcy5fYmFja3RyYWNrKXtuZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBuZT8oaj10aGlzLnRlc3RfbWF0Y2gobmUsbGVbaGVdKSxqIT09ITE/ajohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBuZT10aGlzLm5leHQoKTtyZXR1cm4gbmV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKG5lKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobmUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG5lPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24obmUpe3JldHVybiBuZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG5lfHwwKSxuZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW25lXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKG5lKXt0aGlzLmJlZ2luKG5lKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG5lLHRlLGhlLGxlKXt2YXIgSj1sZTtzd2l0Y2goaGUpe2Nhc2UgMDpyZXR1cm4gNTtjYXNlIDE6YnJlYWs7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gMTk7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMTQ7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUwO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MjticmVhaztjYXNlIDEwOnJldHVybiAxMztjYXNlIDExOnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUzO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIHRlLnl5dGV4dD10ZS55eXRleHQudHJpbSgpLHRoaXMuYmVnaW4oIkFMSUFTIiksNzA7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJMSU5FIiksNTE7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1O2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNjticmVhaztjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzc7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM4O2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzOTticmVhaztjYXNlIDE5OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQxO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MzticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDg7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ0O2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NzticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDY7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE1O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIDE2O2Nhc2UgMjg6cmV0dXJuIDY1O2Nhc2UgMjk6cmV0dXJuIDY2O2Nhc2UgMzA6cmV0dXJuIDU5O2Nhc2UgMzE6cmV0dXJuIDYwO2Nhc2UgMzI6cmV0dXJuIDYxO2Nhc2UgMzM6cmV0dXJuIDYyO2Nhc2UgMzQ6cmV0dXJuIDU3O2Nhc2UgMzU6cmV0dXJuIDU0O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjE7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMzticmVhaztjYXNlIDM4OnJldHVybiAyOTtjYXNlIDM5OnJldHVybiAzMDtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzM7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNDc6cmV0dXJuIDY7Y2FzZSA0ODpyZXR1cm4gMTg7Y2FzZSA0OTpyZXR1cm4gMjA7Y2FzZSA1MDpyZXR1cm4gNjQ7Y2FzZSA1MTpyZXR1cm4gNTtjYXNlIDUyOnJldHVybiB0ZS55eXRleHQ9dGUueXl0ZXh0LnRyaW0oKSw3MDticmVhaztjYXNlIDUzOnJldHVybiA3MztjYXNlIDU0OnJldHVybiA3NDtjYXNlIDU1OnJldHVybiA3NTtjYXNlIDU2OnJldHVybiA3NjtjYXNlIDU3OnJldHVybiA3MTtjYXNlIDU4OnJldHVybiA3MjtjYXNlIDU5OnJldHVybiA3NztjYXNlIDYwOnJldHVybiA3ODtjYXNlIDYxOnJldHVybiA3OTtjYXNlIDYyOnJldHVybiA4MDtjYXNlIDYzOnJldHVybiA4MTtjYXNlIDY0OnJldHVybiA4MTtjYXNlIDY1OnJldHVybiA2ODtjYXNlIDY2OnJldHVybiA2OTtjYXNlIDY3OnJldHVybiA1O2Nhc2UgNjg6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbMC05XSsoPz1bIFxuXSspKS9pLC9eKD86Ym94XGIpL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86YWN0b3JcYikvaSwvXig/OmNyZWF0ZVxiKS9pLC9eKD86ZGVzdHJveVxiKS9pLC9eKD86W15cPC0+XC0+OlxuLDtdKz8oW1wtXSpbXlw8LT5cLT46XG4sO10rPykqPyg/PSgoPyFcbilccykrYXMoPyFcbilcc3xbI1xuO118JCkpL2ksL14oPzphc1xiKS9pLC9eKD86KD86KSkvaSwvXig/Omxvb3BcYikvaSwvXig/OnJlY3RcYikvaSwvXig/Om9wdFxiKS9pLC9eKD86YWx0XGIpL2ksL14oPzplbHNlXGIpL2ksL14oPzpwYXJcYikvaSwvXig/OnBhcl9vdmVyXGIpL2ksL14oPzphbmRcYikvaSwvXig/OmNyaXRpY2FsXGIpL2ksL14oPzpvcHRpb25cYikvaSwvXig/OmJyZWFrXGIpL2ksL14oPzooPzpbOl0/KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86ZW5kXGIpL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86bGlua3NcYikvaSwvXig/OmxpbmtcYikvaSwvXig/OnByb3BlcnRpZXNcYikvaSwvXig/OmRldGFpbHNcYikvaSwvXig/Om92ZXJcYikvaSwvXig/Om5vdGVcYikvaSwvXig/OmFjdGl2YXRlXGIpL2ksL14oPzpkZWFjdGl2YXRlXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzp0aXRsZTpcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/Om9mZlxiKS9pLC9eKD86LCkvaSwvXig/OjspL2ksL14oPzpbXlwrXDwtPlwtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXDwtPlwtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Ojw8LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Ojw8LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gUX0oKTtjZS5sZXhlcj1aO2Z1bmN0aW9uIHVlKCl7dGhpcy55eT17fX1yZXR1cm4gbyh1ZSwiUGFyc2VyIiksdWUucHJvdG90eXBlPWNlLGNlLlBhcnNlcj11ZSxuZXcgdWV9KCk7ZFAucGFyc2VyPWRQO19kZT1kUH0pO3ZhciBGVWUsJFVlLHpVZSxZUyxMZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3l0KCk7U1MoKTtwcigpO2NpKCk7RlVlPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyLEJJRElSRUNUSU9OQUxfU09MSUQ6MzMsQklESVJFQ1RJT05BTF9ET1RURUQ6MzR9LCRVZT17RklMTEVEOjAsT1BFTjoxfSx6VWU9e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LFlTPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZT1uZXcgVGYoKCk9Pih7cHJldkFjdG9yOnZvaWQgMCxhY3RvcnM6bmV3IE1hcCxjcmVhdGVkQWN0b3JzOm5ldyBNYXAsZGVzdHJveWVkQWN0b3JzOm5ldyBNYXAsYm94ZXM6W10sbWVzc2FnZXM6W10sbm90ZXM6W10sc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDohMSx3cmFwRW5hYmxlZDp2b2lkIDAsY3VycmVudEJveDp2b2lkIDAsbGFzdENyZWF0ZWQ6dm9pZCAwLGxhc3REZXN0cm95ZWQ6dm9pZCAwfSkpO3RoaXMuc2V0QWNjVGl0bGU9QXI7dGhpcy5zZXRBY2NEZXNjcmlwdGlvbj1Mcjt0aGlzLnNldERpYWdyYW1UaXRsZT1Pcjt0aGlzLmdldEFjY1RpdGxlPURyO3RoaXMuZ2V0QWNjRGVzY3JpcHRpb249UnI7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5hcHBseT10aGlzLmFwcGx5LmJpbmQodGhpcyksdGhpcy5wYXJzZUJveERhdGE9dGhpcy5wYXJzZUJveERhdGEuYmluZCh0aGlzKSx0aGlzLnBhcnNlTWVzc2FnZT10aGlzLnBhcnNlTWVzc2FnZS5iaW5kKHRoaXMpLHRoaXMuY2xlYXIoKSx0aGlzLnNldFdyYXAobWUoKS53cmFwKSx0aGlzLkxJTkVUWVBFPUZVZSx0aGlzLkFSUk9XVFlQRT0kVWUsdGhpcy5QTEFDRU1FTlQ9elVlfXN0YXRpY3tvKHRoaXMsIlNlcXVlbmNlREIiKX1hZGRCb3goZSl7dGhpcy5zdGF0ZS5yZWNvcmRzLmJveGVzLnB1c2goe25hbWU6ZS50ZXh0LHdyYXA6ZS53cmFwPz90aGlzLmF1dG9XcmFwKCksZmlsbDplLmNvbG9yLGFjdG9yS2V5czpbXX0pLHRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94PXRoaXMuc3RhdGUucmVjb3Jkcy5ib3hlcy5zbGljZSgtMSlbMF19YWRkQWN0b3IoZSxyLG4saSl7bGV0IGE9dGhpcy5zdGF0ZS5yZWNvcmRzLmN1cnJlbnRCb3gscz10aGlzLnN0YXRlLnJlY29yZHMuYWN0b3JzLmdldChlKTtpZihzKXtpZih0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveCYmcy5ib3gmJnRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94IT09cy5ib3gpdGhyb3cgbmV3IEVycm9yKGBBIHNhbWUgcGFydGljaXBhbnQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpbiBvbmUgQm94OiAke3MubmFtZX0gY2FuJ3QgYmUgaW4gJyR7cy5ib3gubmFtZX0nIGFuZCBpbiAnJHt0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveC5uYW1lfScgYXQgdGhlIHNhbWUgdGltZS5gKTtpZihhPXMuYm94P3MuYm94OnRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94LHMuYm94PWEscyYmcj09PXMubmFtZSYmbj09bnVsbClyZXR1cm59aWYobj8udGV4dD09bnVsbCYmKG49e3RleHQ6cix0eXBlOml9KSwoaT09bnVsbHx8bi50ZXh0PT1udWxsKSYmKG49e3RleHQ6cix0eXBlOml9KSx0aGlzLnN0YXRlLnJlY29yZHMuYWN0b3JzLnNldChlLHtib3g6YSxuYW1lOnIsZGVzY3JpcHRpb246bi50ZXh0LHdyYXA6bi53cmFwPz90aGlzLmF1dG9XcmFwKCkscHJldkFjdG9yOnRoaXMuc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTppPz8icGFydGljaXBhbnQifSksdGhpcy5zdGF0ZS5yZWNvcmRzLnByZXZBY3Rvcil7bGV0IGw9dGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQodGhpcy5zdGF0ZS5yZWNvcmRzLnByZXZBY3Rvcik7bCYmKGwubmV4dEFjdG9yPWUpfXRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94JiZ0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveC5hY3RvcktleXMucHVzaChlKSx0aGlzLnN0YXRlLnJlY29yZHMucHJldkFjdG9yPWV9YWN0aXZhdGlvbkNvdW50KGUpe2xldCByLG49MDtpZighZSlyZXR1cm4gMDtmb3Iocj0wO3I8dGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aDtyKyspdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzW3JdLnR5cGU9PT10aGlzLkxJTkVUWVBFLkFDVElWRV9TVEFSVCYmdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzW3JdLmZyb209PT1lJiZuKyssdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzW3JdLnR5cGU9PT10aGlzLkxJTkVUWVBFLkFDVElWRV9FTkQmJnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tyXS5mcm9tPT09ZSYmbi0tO3JldHVybiBufWFkZE1lc3NhZ2UoZSxyLG4saSl7dGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2lkOnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgudG9TdHJpbmcoKSxmcm9tOmUsdG86cixtZXNzYWdlOm4udGV4dCx3cmFwOm4ud3JhcD8/dGhpcy5hdXRvV3JhcCgpLGFuc3dlcjppfSl9YWRkU2lnbmFsKGUscixuLGksYT0hMSl7aWYoaT09PXRoaXMuTElORVRZUEUuQUNUSVZFX0VORCYmdGhpcy5hY3RpdmF0aW9uQ291bnQoZT8/IiIpPDEpe2xldCBsPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIrZSsiKSIpO3Rocm93IGwuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sbH1yZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2lkOnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgudG9TdHJpbmcoKSxmcm9tOmUsdG86cixtZXNzYWdlOm4/LnRleHQ/PyIiLHdyYXA6bj8ud3JhcD8/dGhpcy5hdXRvV3JhcCgpLHR5cGU6aSxhY3RpdmF0ZTphfSksITB9aGFzQXRMZWFzdE9uZUJveCgpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuYm94ZXMubGVuZ3RoPjB9aGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuYm94ZXMuc29tZShlPT5lLm5hbWUpfWdldE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlc31nZXRCb3hlcygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuYm94ZXN9Z2V0QWN0b3JzKCl7cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy5hY3RvcnN9Z2V0Q3JlYXRlZEFjdG9ycygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuY3JlYXRlZEFjdG9yc31nZXREZXN0cm95ZWRBY3RvcnMoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmRlc3Ryb3llZEFjdG9yc31nZXRBY3RvcihlKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQoZSl9Z2V0QWN0b3JLZXlzKCl7cmV0dXJuWy4uLnRoaXMuc3RhdGUucmVjb3Jkcy5hY3RvcnMua2V5cygpXX1lbmFibGVTZXF1ZW5jZU51bWJlcnMoKXt0aGlzLnN0YXRlLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZD0hMH1kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCl7dGhpcy5zdGF0ZS5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITF9c2hvd1NlcXVlbmNlTnVtYmVycygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZH1zZXRXcmFwKGUpe3RoaXMuc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZD1lfWV4dHJhY3RXcmFwKGUpe2lmKGU9PT12b2lkIDApcmV0dXJue307ZT1lLnRyaW0oKTtsZXQgcj0vXjo/d3JhcDovLmV4ZWMoZSkhPT1udWxsPyEwOi9eOj9ub3dyYXA6Ly5leGVjKGUpIT09bnVsbD8hMTp2b2lkIDA7cmV0dXJue2NsZWFuZWRUZXh0OihyPT09dm9pZCAwP2U6ZS5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCIiKSkudHJpbSgpLHdyYXA6cn19YXV0b1dyYXAoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLndyYXBFbmFibGVkIT09dm9pZCAwP3RoaXMuc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZDptZSgpLnNlcXVlbmNlPy53cmFwPz8hMX1jbGVhcigpe3RoaXMuc3RhdGUucmVzZXQoKSxrcigpfXBhcnNlTWVzc2FnZShlKXtsZXQgcj1lLnRyaW0oKSx7d3JhcDpuLGNsZWFuZWRUZXh0Oml9PXRoaXMuZXh0cmFjdFdyYXAociksYT17dGV4dDppLHdyYXA6bn07cmV0dXJuIFguZGVidWcoYHBhcnNlTWVzc2FnZTogJHtKU09OLnN0cmluZ2lmeShhKX1gKSxhfXBhcnNlQm94RGF0YShlKXtsZXQgcj0vXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLy5leGVjKGUpLG49cj8uWzFdP3JbMV0udHJpbSgpOiJ0cmFuc3BhcmVudCIsaT1yPy5bMl0/clsyXS50cmltKCk6dm9pZCAwO2lmKHdpbmRvdz8uQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIixuKXx8KG49InRyYW5zcGFyZW50IixpPWUudHJpbSgpKTtlbHNle2xldCBsPW5ldyBPcHRpb24oKS5zdHlsZTtsLmNvbG9yPW4sbC5jb2xvciE9PW4mJihuPSJ0cmFuc3BhcmVudCIsaT1lLnRyaW0oKSl9bGV0e3dyYXA6YSxjbGVhbmVkVGV4dDpzfT10aGlzLmV4dHJhY3RXcmFwKGkpO3JldHVybnt0ZXh0OnM/d3IocyxtZSgpKTp2b2lkIDAsY29sb3I6bix3cmFwOmF9fWFkZE5vdGUoZSxyLG4pe2xldCBpPXthY3RvcjplLHBsYWNlbWVudDpyLG1lc3NhZ2U6bi50ZXh0LHdyYXA6bi53cmFwPz90aGlzLmF1dG9XcmFwKCl9LGE9W10uY29uY2F0KGUsZSk7dGhpcy5zdGF0ZS5yZWNvcmRzLm5vdGVzLnB1c2goaSksdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2lkOnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgudG9TdHJpbmcoKSxmcm9tOmFbMF0sdG86YVsxXSxtZXNzYWdlOm4udGV4dCx3cmFwOm4ud3JhcD8/dGhpcy5hdXRvV3JhcCgpLHR5cGU6dGhpcy5MSU5FVFlQRS5OT1RFLHBsYWNlbWVudDpyfSl9YWRkTGlua3MoZSxyKXtsZXQgbj10aGlzLmdldEFjdG9yKGUpO3RyeXtsZXQgaT13cihyLnRleHQsbWUoKSk7aT1pLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKSxpPWkucmVwbGFjZSgvJmFtcDsvZywiJiIpO2xldCBhPUpTT04ucGFyc2UoaSk7dGhpcy5pbnNlcnRMaW5rcyhuLGEpfWNhdGNoKGkpe1guZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixpKX19YWRkQUxpbmsoZSxyKXtsZXQgbj10aGlzLmdldEFjdG9yKGUpO3RyeXtsZXQgaT17fSxhPXdyKHIudGV4dCxtZSgpKSxzPWEuaW5kZXhPZigiQCIpO2E9YS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9IiksYT1hLnJlcGxhY2UoLyZhbXA7L2csIiYiKTtsZXQgbD1hLnNsaWNlKDAscy0xKS50cmltKCksdT1hLnNsaWNlKHMrMSkudHJpbSgpO2lbbF09dSx0aGlzLmluc2VydExpbmtzKG4saSl9Y2F0Y2goaSl7WC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLGkpfX1pbnNlcnRMaW5rcyhlLHIpe2lmKGUubGlua3M9PW51bGwpZS5saW5rcz1yO2Vsc2UgZm9yKGxldCBuIGluIHIpZS5saW5rc1tuXT1yW25dfWFkZFByb3BlcnRpZXMoZSxyKXtsZXQgbj10aGlzLmdldEFjdG9yKGUpO3RyeXtsZXQgaT13cihyLnRleHQsbWUoKSksYT1KU09OLnBhcnNlKGkpO3RoaXMuaW5zZXJ0UHJvcGVydGllcyhuLGEpfWNhdGNoKGkpe1guZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0IixpKX19aW5zZXJ0UHJvcGVydGllcyhlLHIpe2lmKGUucHJvcGVydGllcz09bnVsbCllLnByb3BlcnRpZXM9cjtlbHNlIGZvcihsZXQgbiBpbiByKWUucHJvcGVydGllc1tuXT1yW25dfWJveEVuZCgpe3RoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94PXZvaWQgMH1hZGREZXRhaWxzKGUscil7bGV0IG49dGhpcy5nZXRBY3RvcihlKSxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIudGV4dCk7dHJ5e2xldCBhPWkuaW5uZXJIVE1MLHM9SlNPTi5wYXJzZShhKTtzLnByb3BlcnRpZXMmJnRoaXMuaW5zZXJ0UHJvcGVydGllcyhuLHMucHJvcGVydGllcykscy5saW5rcyYmdGhpcy5pbnNlcnRMaW5rcyhuLHMubGlua3MpfWNhdGNoKGEpe1guZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0IixhKX19Z2V0QWN0b3JQcm9wZXJ0eShlLHIpe2lmKGU/LnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGUucHJvcGVydGllc1tyXX1hcHBseShlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuZm9yRWFjaChyPT57dGhpcy5hcHBseShyKX0pO2Vsc2Ugc3dpdGNoKGUudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4Ijp0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMucHVzaCh7aWQ6dGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aC50b1N0cmluZygpLGZyb206dm9pZCAwLHRvOnZvaWQgMCxtZXNzYWdlOntzdGFydDplLnNlcXVlbmNlSW5kZXgsc3RlcDplLnNlcXVlbmNlSW5kZXhTdGVwLHZpc2libGU6ZS5zZXF1ZW5jZVZpc2libGV9LHdyYXA6ITEsdHlwZTplLnNpZ25hbFR5cGV9KTticmVhaztjYXNlImFkZFBhcnRpY2lwYW50Ijp0aGlzLmFkZEFjdG9yKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLGUuZHJhdyk7YnJlYWs7Y2FzZSJjcmVhdGVQYXJ0aWNpcGFudCI6aWYodGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5oYXMoZS5hY3RvcikpdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvciIpO3RoaXMuc3RhdGUucmVjb3Jkcy5sYXN0Q3JlYXRlZD1lLmFjdG9yLHRoaXMuYWRkQWN0b3IoZS5hY3RvcixlLmFjdG9yLGUuZGVzY3JpcHRpb24sZS5kcmF3KSx0aGlzLnN0YXRlLnJlY29yZHMuY3JlYXRlZEFjdG9ycy5zZXQoZS5hY3Rvcix0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoKTticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9ZS5hY3Rvcix0aGlzLnN0YXRlLnJlY29yZHMuZGVzdHJveWVkQWN0b3JzLnNldChlLmFjdG9yLHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgpO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOnRoaXMuYWRkU2lnbmFsKGUuYWN0b3Isdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWN0aXZlRW5kIjp0aGlzLmFkZFNpZ25hbChlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOnRoaXMuYWRkTm90ZShlLmFjdG9yLGUucGxhY2VtZW50LGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRMaW5rcyI6dGhpcy5hZGRMaW5rcyhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRBTGluayI6dGhpcy5hZGRBTGluayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjp0aGlzLmFkZFByb3BlcnRpZXMoZS5hY3RvcixlLnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6dGhpcy5hZGREZXRhaWxzKGUuYWN0b3IsZS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKHRoaXMuc3RhdGUucmVjb3Jkcy5sYXN0Q3JlYXRlZCl7aWYoZS50byE9PXRoaXMuc3RhdGUucmVjb3Jkcy5sYXN0Q3JlYXRlZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjcmVhdGVkIHBhcnRpY2lwYW50ICIrdGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3RDcmVhdGVkLm5hbWUrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgY3JlYXRpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTt0aGlzLnN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQ9dm9pZCAwfWVsc2UgaWYodGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpe2lmKGUudG8hPT10aGlzLnN0YXRlLnJlY29yZHMubGFzdERlc3Ryb3llZCYmZS5mcm9tIT09dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVzdHJveWVkIHBhcnRpY2lwYW50ICIrdGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQubmFtZSsiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBkZXN0cm95aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9dm9pZCAwfXRoaXMuYWRkU2lnbmFsKGUuZnJvbSxlLnRvLGUubXNnLGUuc2lnbmFsVHlwZSxlLmFjdGl2YXRlKTticmVhaztjYXNlImJveFN0YXJ0Ijp0aGlzLmFkZEJveChlLmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjp0aGlzLmJveEVuZCgpO2JyZWFrO2Nhc2UibG9vcFN0YXJ0Ijp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUubG9vcFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BFbmQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0U3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5jb2xvcixlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdEVuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdFN0YXJ0Ijp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUub3B0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0RW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0U3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJlbHNlIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUuYWx0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0RW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uic2V0QWNjVGl0bGUiOkFyKGUudGV4dCk7YnJlYWs7Y2FzZSJwYXJTdGFydCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsU3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5jcml0aWNhbFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdGlvbiI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLm9wdGlvblRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsRW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtTdGFydCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLmJyZWFrVGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtFbmQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWt9fWdldENvbmZpZygpe3JldHVybiBtZSgpLnNlcXVlbmNlfX19KTt2YXIgR1VlLFJkZSxOZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHVWU9byh0PT5gLmFjdG9yIHsKICAgIHN0cm9rZTogJHt0LmFjdG9yQm9yZGVyfTsKICAgIGZpbGw6ICR7dC5hY3RvckJrZ307CiAgfQoKICB0ZXh0LmFjdG9yID4gdHNwYW4gewogICAgZmlsbDogJHt0LmFjdG9yVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5hY3Rvci1saW5lIHsKICAgIHN0cm9rZTogJHt0LmFjdG9yTGluZUNvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTAgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VMaW5lMSB7CiAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAjYXJyb3doZWFkIHBhdGggewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5zZXF1ZW5jZU51bWJlciB7CiAgICBmaWxsOiAke3Quc2VxdWVuY2VOdW1iZXJDb2xvcn07CiAgfQoKICAjc2VxdWVuY2VudW1iZXIgewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogICNjcm9zc2hlYWQgcGF0aCB7CiAgICBmaWxsOiAke3Quc2lnbmFsQ29sb3J9OwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VUZXh0IHsKICAgIGZpbGw6ICR7dC5zaWduYWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxhYmVsQm94IHsKICAgIHN0cm9rZTogJHt0LmxhYmVsQm94Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmxhYmVsQm94QmtnQ29sb3J9OwogIH0KCiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5sYWJlbFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcFRleHQsIC5sb29wVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5sb29wVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sb29wTGluZSB7CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICB9CgogIC5ub3RlIHsKICAgIC8vc3Ryb2tlOiAjZGVjYzkzOwogICAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwogIH0KCiAgLm5vdGVUZXh0LCAubm90ZVRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3Qubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0aXZhdGlvbjAgewogICAgZmlsbDogJHt0LmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2YXRpb24xIHsKICAgIGZpbGw6ICR7dC5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMiB7CiAgICBmaWxsOiAke3QuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0b3JQb3B1cE1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogIH0KCiAgLmFjdG9yUG9wdXBNZW51UGFuZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjIpOwogICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTsKfQogIC5hY3Rvci1tYW4gbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogIH0KICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQpgLCJnZXRTdHlsZXMiKSxSZGU9R1VlfSk7dmFyIHBQLFNmLElkZSxPZGUsVlVlLE1kZSxtUCxVVWUsSFVlLE1iLEZwLFBkZSxZYyxnUCxXVWUscVVlLFlVZSxYVWUsalVlLEtVZSxRVWUsQmRlLFpVZSxKVWUsZUhlLHRIZSxySGUsbkhlLGlIZSxGZGUsYUhlLHlQLHNIZSxkaSwkZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3QyKCk7ZXIoKTtwUD1BYShaMCgpLDEpO21pKCk7U2Y9MTgqMixJZGU9ImFjdG9yLXRvcCIsT2RlPSJhY3Rvci1ib3R0b20iLFZVZT0iYWN0b3ItYm94IixNZGU9ImFjdG9yLW1hbiIsbVA9byhmdW5jdGlvbih0LGUpe3JldHVybiBOZCh0LGUpfSwiZHJhd1JlY3QiKSxVVWU9byhmdW5jdGlvbih0LGUscixuLGkpe2lmKGUubGlua3M9PT12b2lkIDB8fGUubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhlLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtsZXQgYT1lLmxpbmtzLHM9ZS5hY3RvckNudCxsPWUucmVjdERhdGE7dmFyIHU9Im5vbmUiO2kmJih1PSJibG9jayAhaW1wb3J0YW50Iik7bGV0IGg9dC5hcHBlbmQoImciKTtoLmF0dHIoImlkIiwiYWN0b3IiK3MrIl9wb3B1cCIpLGguYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLGguYXR0cigiZGlzcGxheSIsdSk7dmFyIGY9IiI7bC5jbGFzcyE9PXZvaWQgMCYmKGY9IiAiK2wuY2xhc3MpO2xldCBkPWwud2lkdGg+cj9sLndpZHRoOnIscD1oLmFwcGVuZCgicmVjdCIpO2lmKHAuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIitmKSxwLmF0dHIoIngiLGwueCkscC5hdHRyKCJ5IixsLmhlaWdodCkscC5hdHRyKCJmaWxsIixsLmZpbGwpLHAuYXR0cigic3Ryb2tlIixsLnN0cm9rZSkscC5hdHRyKCJ3aWR0aCIsZCkscC5hdHRyKCJoZWlnaHQiLGwuaGVpZ2h0KSxwLmF0dHIoInJ4IixsLnJ4KSxwLmF0dHIoInJ5IixsLnJ5KSxhIT1udWxsKXt2YXIgbT0yMDtmb3IobGV0IHYgaW4gYSl7dmFyIGc9aC5hcHBlbmQoImEiKSx5PSgwLHBQLnNhbml0aXplVXJsKShhW3ZdKTtnLmF0dHIoInhsaW5rOmhyZWYiLHkpLGcuYXR0cigidGFyZ2V0IiwiX2JsYW5rIiksc0hlKG4pKHYsZyxsLngrMTAsbC5oZWlnaHQrbSxkLDIwLHtjbGFzczoiYWN0b3IifSxuKSxtKz0zMH19cmV0dXJuIHAuYXR0cigiaGVpZ2h0IixtKSx7aGVpZ2h0OmwuaGVpZ2h0K20sd2lkdGg6ZH19LCJkcmF3UG9wdXAiKSxIVWU9byhmdW5jdGlvbih0KXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIrdCsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSBwdS5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycgPyAnbm9uZScgOiAnYmxvY2snOyB9In0sInBvcHVwTWVudVRvZ2dsZSIpLE1iPW8oYXN5bmMgZnVuY3Rpb24odCxlLHI9bnVsbCl7bGV0IG49dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxpPWF3YWl0IFRoKGUudGV4dCx0cigpKSxzPW4uYXBwZW5kKCJ4aHRtbDpkaXYiKS5hdHRyKCJzdHlsZSIsIndpZHRoOiBmaXQtY29udGVudDsiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKS5odG1sKGkpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihuLmF0dHIoImhlaWdodCIsTWF0aC5yb3VuZChzLmhlaWdodCkpLmF0dHIoIndpZHRoIixNYXRoLnJvdW5kKHMud2lkdGgpKSxlLmNsYXNzPT09Im5vdGVUZXh0Iil7bGV0IGw9dC5ub2RlKCkuZmlyc3RDaGlsZDtsLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixzLmhlaWdodCsyKmUudGV4dE1hcmdpbik7bGV0IHU9bC5nZXRCQm94KCk7bi5hdHRyKCJ4IixNYXRoLnJvdW5kKHUueCt1LndpZHRoLzItcy53aWR0aC8yKSkuYXR0cigieSIsTWF0aC5yb3VuZCh1LnkrdS5oZWlnaHQvMi1zLmhlaWdodC8yKSl9ZWxzZSBpZihyKXtsZXR7c3RhcnR4Omwsc3RvcHg6dSxzdGFydHk6aH09cjtpZihsPnUpe2xldCBmPWw7bD11LHU9Zn1uLmF0dHIoIngiLE1hdGgucm91bmQobCtNYXRoLmFicyhsLXUpLzItcy53aWR0aC8yKSksZS5jbGFzcz09PSJsb29wVGV4dCI/bi5hdHRyKCJ5IixNYXRoLnJvdW5kKGgpKTpuLmF0dHIoInkiLE1hdGgucm91bmQoaC1zLmhlaWdodCkpfXJldHVybltuXX0sImRyYXdLYXRleCIpLEZwPW8oZnVuY3Rpb24odCxlKXtsZXQgcj0wLG49MCxpPWUudGV4dC5zcGxpdChaZS5saW5lQnJlYWtSZWdleCksW2Esc109em8oZS5mb250U2l6ZSksbD1bXSx1PTAsaD1vKCgpPT5lLnksInlmdW5jIik7aWYoZS52YWxpZ24hPT12b2lkIDAmJmUudGV4dE1hcmdpbiE9PXZvaWQgMCYmZS50ZXh0TWFyZ2luPjApc3dpdGNoKGUudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueStlLnRleHRNYXJnaW4pLCJ5ZnVuYyIpO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueSsocituK2UudGV4dE1hcmdpbikvMiksInlmdW5jIik7YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpoPW8oKCk9Pk1hdGgucm91bmQoZS55KyhyK24rMiplLnRleHRNYXJnaW4pLWUudGV4dE1hcmdpbiksInlmdW5jIik7YnJlYWt9aWYoZS5hbmNob3IhPT12b2lkIDAmJmUudGV4dE1hcmdpbiE9PXZvaWQgMCYmZS53aWR0aCE9PXZvaWQgMClzd2l0Y2goZS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6ZS54PU1hdGgucm91bmQoZS54K2UudGV4dE1hcmdpbiksZS5hbmNob3I9InN0YXJ0IixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLzIpLGUuYW5jaG9yPSJtaWRkbGUiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC1lLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJlbmQiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrfWZvcihsZXRbZixkXW9mIGkuZW50cmllcygpKXtlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj09PTAmJmEhPT12b2lkIDAmJih1PWYqYSk7bGV0IHA9dC5hcHBlbmQoInRleHQiKTtwLmF0dHIoIngiLGUueCkscC5hdHRyKCJ5IixoKCkpLGUuYW5jaG9yIT09dm9pZCAwJiZwLmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGUuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixlLmFsaWdubWVudEJhc2VsaW5lKSxlLmZvbnRGYW1pbHkhPT12b2lkIDAmJnAuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHMhPT12b2lkIDAmJnAuc3R5bGUoImZvbnQtc2l6ZSIscyksZS5mb250V2VpZ2h0IT09dm9pZCAwJiZwLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSxlLmZpbGwhPT12b2lkIDAmJnAuYXR0cigiZmlsbCIsZS5maWxsKSxlLmNsYXNzIT09dm9pZCAwJiZwLmF0dHIoImNsYXNzIixlLmNsYXNzKSxlLmR5IT09dm9pZCAwP3AuYXR0cigiZHkiLGUuZHkpOnUhPT0wJiZwLmF0dHIoImR5Iix1KTtsZXQgbT1kfHxDOTtpZihlLnRzcGFuKXtsZXQgZz1wLmFwcGVuZCgidHNwYW4iKTtnLmF0dHIoIngiLGUueCksZS5maWxsIT09dm9pZCAwJiZnLmF0dHIoImZpbGwiLGUuZmlsbCksZy50ZXh0KG0pfWVsc2UgcC50ZXh0KG0pO2UudmFsaWduIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj4wJiYobis9KHAuX2dyb3Vwc3x8cClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCxyPW4pLGwucHVzaChwKX1yZXR1cm4gbH0sImRyYXdUZXh0IiksUGRlPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIG4uYXR0cigicG9pbnRzIixyKGUueCxlLnksZS53aWR0aCxlLmhlaWdodCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmhlaWdodC8yLEZwKHQsZSksbn0sImRyYXdMYWJlbCIpLFljPS0xLGdQPW8oKHQsZSxyLG4pPT57dC5zZWxlY3QmJnIuZm9yRWFjaChpPT57bGV0IGE9ZS5nZXQoaSkscz10LnNlbGVjdCgiI2FjdG9yIithLmFjdG9yQ250KTshbi5taXJyb3JBY3RvcnMmJmEuc3RvcHk/cy5hdHRyKCJ5MiIsYS5zdG9weSthLmhlaWdodC8yKTpuLm1pcnJvckFjdG9ycyYmcy5hdHRyKCJ5MiIsYS5zdG9weSl9KX0sImZpeExpZmVMaW5lSGVpZ2h0cyIpLFdVZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW4/ZS5zdG9weTplLnN0YXJ0eSxhPWUueCtlLndpZHRoLzIscz1pK2UuaGVpZ2h0LGw9dC5hcHBlbmQoImciKS5sb3dlcigpO3ZhciB1PWw7bnx8KFljKyssT2JqZWN0LmtleXMoZS5saW5rc3x8e30pLmxlbmd0aCYmIXIuZm9yY2VNZW51cyYmdS5hdHRyKCJvbmNsaWNrIixIVWUoYGFjdG9yJHtZY31fcG9wdXBgKSkuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrWWMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIscykuYXR0cigieDIiLGEpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSAyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKS5hdHRyKCJuYW1lIixlLm5hbWUpLHU9bC5hcHBlbmQoImciKSxlLmFjdG9yQ250PVljLGUubGlua3MhPW51bGwmJnUuYXR0cigiaWQiLCJyb290LSIrWWMpKTtsZXQgaD1BbCgpO3ZhciBmPSJhY3RvciI7ZS5wcm9wZXJ0aWVzPy5jbGFzcz9mPWUucHJvcGVydGllcy5jbGFzczpoLmZpbGw9IiNlYWVhZWEiLG4/Zis9YCAke09kZX1gOmYrPWAgJHtJZGV9YCxoLng9ZS54LGgueT1pLGgud2lkdGg9ZS53aWR0aCxoLmhlaWdodD1lLmhlaWdodCxoLmNsYXNzPWYsaC5yeD0zLGgucnk9MyxoLm5hbWU9ZS5uYW1lO2xldCBkPW1QKHUsaCk7aWYoZS5yZWN0RGF0YT1oLGUucHJvcGVydGllcz8uaWNvbil7bGV0IG09ZS5wcm9wZXJ0aWVzLmljb24udHJpbSgpO20uY2hhckF0KDApPT09IkAiP0tZKHUsaC54K2gud2lkdGgtMjAsaC55KzEwLG0uc3Vic3RyKDEpKTpqWSh1LGgueCtoLndpZHRoLTIwLGgueSsxMCxtKX15UChyLHlpKGUuZGVzY3JpcHRpb24pKShlLmRlc2NyaXB0aW9uLHUsaC54LGgueSxoLndpZHRoLGguaGVpZ2h0LHtjbGFzczpgYWN0b3IgJHtWVWV9YH0scik7bGV0IHA9ZS5oZWlnaHQ7aWYoZC5ub2RlKXtsZXQgbT1kLm5vZGUoKS5nZXRCQm94KCk7ZS5oZWlnaHQ9bS5oZWlnaHQscD1tLmhlaWdodH1yZXR1cm4gcH0sImRyYXdBY3RvclR5cGVQYXJ0aWNpcGFudCIpLHFVZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW4/ZS5zdG9weTplLnN0YXJ0eSxhPWUueCtlLndpZHRoLzIscz1pKzgwLGw9dC5hcHBlbmQoImciKS5sb3dlcigpO258fChZYysrLGwuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrWWMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIscykuYXR0cigieDIiLGEpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSAyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKS5hdHRyKCJuYW1lIixlLm5hbWUpLGUuYWN0b3JDbnQ9WWMpO2xldCB1PXQuYXBwZW5kKCJnIiksaD1NZGU7bj9oKz1gICR7T2RlfWA6aCs9YCAke0lkZX1gLHUuYXR0cigiY2xhc3MiLGgpLHUuYXR0cigibmFtZSIsZS5uYW1lKTtsZXQgZj1BbCgpO2YueD1lLngsZi55PWksZi5maWxsPSIjZWFlYWVhIixmLndpZHRoPWUud2lkdGgsZi5oZWlnaHQ9ZS5oZWlnaHQsZi5jbGFzcz0iYWN0b3IiLGYucng9MyxmLnJ5PTMsdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi10b3JzbyIrWWMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIsaSsyNSkuYXR0cigieDIiLGEpLmF0dHIoInkyIixpKzQ1KSx1LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLWFybXMiK1ljKS5hdHRyKCJ4MSIsYS1TZi8yKS5hdHRyKCJ5MSIsaSszMykuYXR0cigieDIiLGErU2YvMikuYXR0cigieTIiLGkrMzMpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGEtU2YvMikuYXR0cigieTEiLGkrNjApLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsaSs0NSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLGkrNDUpLmF0dHIoIngyIixhK1NmLzItMikuYXR0cigieTIiLGkrNjApO2xldCBkPXUuYXBwZW5kKCJjaXJjbGUiKTtkLmF0dHIoImN4IixlLngrZS53aWR0aC8yKSxkLmF0dHIoImN5IixpKzEwKSxkLmF0dHIoInIiLDE1KSxkLmF0dHIoIndpZHRoIixlLndpZHRoKSxkLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpO2xldCBwPXUubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9cC5oZWlnaHQseVAocix5aShlLmRlc2NyaXB0aW9uKSkoZS5kZXNjcmlwdGlvbix1LGYueCxmLnkrMzUsZi53aWR0aCxmLmhlaWdodCx7Y2xhc3M6YGFjdG9yICR7TWRlfWB9LHIpLGUuaGVpZ2h0fSwiZHJhd0FjdG9yVHlwZUFjdG9yIiksWVVlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGF3YWl0IHFVZSh0LGUscixuKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gYXdhaXQgV1VlKHQsZSxyLG4pfX0sImRyYXdBY3RvciIpLFhVZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgaT10LmFwcGVuZCgiZyIpO0JkZShpLGUpLGUubmFtZSYmeVAocikoZS5uYW1lLGksZS54LGUueStyLmJveFRleHRNYXJnaW4rKGUudGV4dE1heEhlaWdodHx8MCkvMixlLndpZHRoLDAse2NsYXNzOiJ0ZXh0In0sciksaS5sb3dlcigpfSwiZHJhd0JveCIpLGpVZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGVuZCgiZyIpfSwiYW5jaG9yRWxlbWVudCIpLEtVZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9QWwoKSxzPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PXItZS5zdGFydHksbVAocyxhKX0sImRyYXdBY3RpdmF0aW9uIiksUVVlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e2JveE1hcmdpbjppLGJveFRleHRNYXJnaW46YSxsYWJlbEJveEhlaWdodDpzLGxhYmVsQm94V2lkdGg6bCxtZXNzYWdlRm9udEZhbWlseTp1LG1lc3NhZ2VGb250U2l6ZTpoLG1lc3NhZ2VGb250V2VpZ2h0OmZ9PW4sZD10LmFwcGVuZCgiZyIpLHA9byhmdW5jdGlvbih5LHYseCxiKXtyZXR1cm4gZC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIseSkuYXR0cigieTEiLHYpLmF0dHIoIngyIix4KS5hdHRyKCJ5MiIsYikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfSwiZHJhd0xvb3BMaW5lIik7cChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxwKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLGUuc2VjdGlvbnMhPT12b2lkIDAmJmUuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbih5KXtwKGUuc3RhcnR4LHkueSxlLnN0b3B4LHkueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgbT1lMigpO20udGV4dD1yLG0ueD1lLnN0YXJ0eCxtLnk9ZS5zdGFydHksbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS53aWR0aD1sfHw1MCxtLmhlaWdodD1zfHwyMCxtLnRleHRNYXJnaW49YSxtLmNsYXNzPSJsYWJlbFRleHQiLFBkZShkLG0pLG09RmRlKCksbS50ZXh0PWUudGl0bGUsbS54PWUuc3RhcnR4K2wvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixtLnk9ZS5zdGFydHkraSthLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udGV4dE1hcmdpbj1hLG0uY2xhc3M9Imxvb3BUZXh0IixtLmZvbnRGYW1pbHk9dSxtLmZvbnRTaXplPWgsbS5mb250V2VpZ2h0PWYsbS53cmFwPSEwO2xldCBnPXlpKG0udGV4dCk/YXdhaXQgTWIoZCxtLGUpOkZwKGQsbSk7aWYoZS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwKXtmb3IobGV0W3ksdl1vZiBPYmplY3QuZW50cmllcyhlLnNlY3Rpb25UaXRsZXMpKWlmKHYubWVzc2FnZSl7bS50ZXh0PXYubWVzc2FnZSxtLng9ZS5zdGFydHgrKGUuc3RvcHgtZS5zdGFydHgpLzIsbS55PWUuc2VjdGlvbnNbeV0ueStpK2EsbS5jbGFzcz0ibG9vcFRleHQiLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0ud3JhcD1lLndyYXAseWkobS50ZXh0KT8oZS5zdGFydHk9ZS5zZWN0aW9uc1t5XS55LGF3YWl0IE1iKGQsbSxlKSk6RnAoZCxtKTtsZXQgeD1NYXRoLnJvdW5kKGcubWFwKGI9PihiLl9ncm91cHN8fGIpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoYixUKT0+YitUKSk7ZS5zZWN0aW9uc1t5XS5oZWlnaHQrPXgtKGkrYSl9fXJldHVybiBlLmhlaWdodD1NYXRoLnJvdW5kKGUuc3RvcHktZS5zdGFydHkpLGR9LCJkcmF3TG9vcCIpLEJkZT1vKGZ1bmN0aW9uKHQsZSl7aVQodCxlKX0sImRyYXdCYWNrZ3JvdW5kUmVjdCIpLFpVZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSwiaW5zZXJ0RGF0YWJhc2VJY29uIiksSlVlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sImluc2VydENvbXB1dGVySWNvbiIpLGVIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LCJpbnNlcnRDbG9ja0ljb24iKSx0SGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw3LjkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8tc3RhcnQtcmV2ZXJzZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIC0xIDAgTCAxMCA1IEwgMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0hlYWQiKSxySGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE1LjUpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxuSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnRTZXF1ZW5jZU51bWJlciIpLGlIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksRmRlPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSwiZ2V0VGV4dE9iaiIpLGFIZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSwiZ2V0Tm90ZVJlY3QiKSx5UD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoYSxzLGwsdSxoLGYsZCl7bGV0IHA9cy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixsK2gvMikuYXR0cigieSIsdStmLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChhKTtpKHAsZCl9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGEscyxsLHUsaCxmLGQscCl7bGV0e2FjdG9yRm9udFNpemU6bSxhY3RvckZvbnRGYW1pbHk6ZyxhY3RvckZvbnRXZWlnaHQ6eX09cCxbdix4XT16byhtKSxiPWEuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgVD0wO1Q8Yi5sZW5ndGg7VCsrKXtsZXQgUz1UKnYtdiooYi5sZW5ndGgtMSkvMix3PXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbCtoLzIpLmF0dHIoInkiLHUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHgpLnN0eWxlKCJmb250LXdlaWdodCIseSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTt3LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixsK2gvMikuYXR0cigiZHkiLFMpLnRleHQoYltUXSksdy5hdHRyKCJ5Iix1K2YvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGkodyxkKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihhLHMsbCx1LGgsZixkLHApe2xldCBtPXMuYXBwZW5kKCJzd2l0Y2giKSx5PW0uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsbCkuYXR0cigieSIsdSkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7eS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChhKSxlKGEsbSxsLHUsaCxmLGQscCksaSh5LGQpfW8ociwiYnlGbyIpO2FzeW5jIGZ1bmN0aW9uIG4oYSxzLGwsdSxoLGYsZCxwKXtsZXQgbT1hd2FpdCBoZChhLHRyKCkpLGc9cy5hcHBlbmQoInN3aXRjaCIpLHY9Zy5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixsK2gvMi1tLndpZHRoLzIpLmF0dHIoInkiLHUrZi8yLW0uaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixtLndpZHRoKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3YuYXBwZW5kKCJkaXYiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLmh0bWwoYXdhaXQgVGgoYSx0cigpKSksZShhLGcsbCx1LGgsZixkLHApLGkodixkKX1vKG4sImJ5S2F0ZXgiKTtmdW5jdGlvbiBpKGEscyl7Zm9yKGxldCBsIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShsKSYmYS5hdHRyKGwsc1tsXSl9cmV0dXJuIG8oaSwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGEscz0hMSl7cmV0dXJuIHM/bjphLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6YS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxzSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGksYSxzLGwsdSxoLGYpe2xldCBkPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7YWN0b3JGb250U2l6ZTpwLGFjdG9yRm9udEZhbWlseTptLGFjdG9yRm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChaZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnN0eWxlKCJmb250LXNpemUiLHApLnN0eWxlKCJmb250LXdlaWdodCIsZykuc3R5bGUoImZvbnQtZmFtaWx5IixtKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzKS5hdHRyKCJkeSIseCkudGV4dCh5W3ZdKSxiLmF0dHIoInkiLGwraC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksZGk9e2RyYXdSZWN0Om1QLGRyYXdUZXh0OkZwLGRyYXdMYWJlbDpQZGUsZHJhd0FjdG9yOllVZSxkcmF3Qm94OlhVZSxkcmF3UG9wdXA6VVVlLGFuY2hvckVsZW1lbnQ6alVlLGRyYXdBY3RpdmF0aW9uOktVZSxkcmF3TG9vcDpRVWUsZHJhd0JhY2tncm91bmRSZWN0OkJkZSxpbnNlcnRBcnJvd0hlYWQ6dEhlLGluc2VydEFycm93RmlsbGVkSGVhZDpySGUsaW5zZXJ0U2VxdWVuY2VOdW1iZXI6bkhlLGluc2VydEFycm93Q3Jvc3NIZWFkOmlIZSxpbnNlcnREYXRhYmFzZUljb246WlVlLGluc2VydENvbXB1dGVySWNvbjpKVWUsaW5zZXJ0Q2xvY2tJY29uOmVIZSxnZXRUZXh0T2JqOkZkZSxnZXROb3RlUmVjdDphSGUsZml4TGlmZUxpbmVIZWlnaHRzOmdQLHNhbml0aXplVXJsOnBQLnNhbml0aXplVXJsfX0pO2FzeW5jIGZ1bmN0aW9uIGxIZSh0LGUpe3J0LmJ1bXBWZXJ0aWNhbFBvcygxMCk7bGV0e3N0YXJ0eDpyLHN0b3B4Om4sbWVzc2FnZTppfT1lLGE9WmUuc3BsaXRCcmVha3MoaSkubGVuZ3RoLHM9eWkoaSksbD1zP2F3YWl0IGhkKGksbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaSwkcChOZSkpO2lmKCFzKXtsZXQgZD1sLmhlaWdodC9hO2UuaGVpZ2h0Kz1kLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhkKX1sZXQgdSxoPWwuaGVpZ2h0LTEwLGY9bC53aWR0aDtpZihyPT09bil7dT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gsTmUucmlnaHRBbmdsZXN8fChoKz1OZS5ib3hNYXJnaW4sdT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gpLGgrPTMwO2xldCBkPVplLmdldE1heChmLzIsTmUud2lkdGgvMik7cnQuaW5zZXJ0KHItZCxydC5nZXRWZXJ0aWNhbFBvcygpLTEwK2gsbitkLHJ0LmdldFZlcnRpY2FsUG9zKCkrMzAraCl9ZWxzZSBoKz1OZS5ib3hNYXJnaW4sdT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gscnQuaW5zZXJ0KHIsdS0xMCxuLHUpO3JldHVybiBydC5idW1wVmVydGljYWxQb3MoaCksZS5oZWlnaHQrPWgsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxydC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSksdX1mdW5jdGlvbiBYYyh0LGUscixuLGkpe3J0LmJ1bXBWZXJ0aWNhbFBvcyhyKTtsZXQgYT1uO2lmKGUuaWQmJmUubWVzc2FnZSYmdFtlLmlkXSl7bGV0IHM9dFtlLmlkXS53aWR0aCxsPSRwKE5lKTtlLm1lc3NhZ2U9VnQud3JhcExhYmVsKGBbJHtlLm1lc3NhZ2V9XWAscy0yKk5lLndyYXBQYWRkaW5nLGwpLGUud2lkdGg9cyxlLndyYXA9ITA7bGV0IHU9VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoZS5tZXNzYWdlLGwpLGg9WmUuZ2V0TWF4KHUuaGVpZ2h0LE5lLmxhYmVsQm94SGVpZ2h0KTthPW4raCxYLmRlYnVnKGAke2h9IC0gJHtlLm1lc3NhZ2V9YCl9aShlKSxydC5idW1wVmVydGljYWxQb3MoYSl9ZnVuY3Rpb24gaEhlKHQsZSxyLG4saSxhLHMpe2Z1bmN0aW9uIGwoaCxmKXtoLng8aS5nZXQodC5mcm9tKS54PyhydC5pbnNlcnQoZS5zdG9weC1mLGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkraC5oZWlnaHQvMitOZS5ub3RlTWFyZ2luKSxlLnN0b3B4PWUuc3RvcHgrZik6KHJ0Lmluc2VydChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4K2YsZS5zdG9weStoLmhlaWdodC8yK05lLm5vdGVNYXJnaW4pLGUuc3RvcHg9ZS5zdG9weC1mKX1vKGwsInJlY2VpdmVyQWRqdXN0bWVudCIpO2Z1bmN0aW9uIHUoaCxmKXtoLng8aS5nZXQodC50bykueD8ocnQuaW5zZXJ0KGUuc3RhcnR4LWYsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5K2guaGVpZ2h0LzIrTmUubm90ZU1hcmdpbiksZS5zdGFydHg9ZS5zdGFydHgrZik6KHJ0Lmluc2VydChlLnN0b3B4LGUuc3RhcnR5LGUuc3RhcnR4K2YsZS5zdG9weStoLmhlaWdodC8yK05lLm5vdGVNYXJnaW4pLGUuc3RhcnR4PWUuc3RhcnR4LWYpfWlmKG8odSwic2VuZGVyQWRqdXN0bWVudCIpLGEuZ2V0KHQudG8pPT1uKXtsZXQgaD1pLmdldCh0LnRvKSxmPWgudHlwZT09ImFjdG9yIj9TZi8yKzM6aC53aWR0aC8yKzM7bChoLGYpLGguc3RhcnR5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LmZyb20pPT1uKXtsZXQgaD1pLmdldCh0LmZyb20pO2lmKE5lLm1pcnJvckFjdG9ycyl7bGV0IGY9aC50eXBlPT0iYWN0b3IiP1NmLzI6aC53aWR0aC8yO3UoaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LnRvKT09bil7bGV0IGg9aS5nZXQodC50byk7aWYoTmUubWlycm9yQWN0b3JzKXtsZXQgZj1oLnR5cGU9PSJhY3RvciI/U2YvMiszOmgud2lkdGgvMiszO2woaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9fWFzeW5jIGZ1bmN0aW9uIGRIZSh0LGUscil7bGV0IG49e307Zm9yKGxldCBpIG9mIGUpaWYodC5nZXQoaS50bykmJnQuZ2V0KGkuZnJvbSkpe2xldCBhPXQuZ2V0KGkudG8pO2lmKGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhYS5wcmV2QWN0b3J8fGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIWEubmV4dEFjdG9yKWNvbnRpbnVlO2xldCBzPWkucGxhY2VtZW50IT09dm9pZCAwLGw9IXMsdT1zP08xKE5lKTokcChOZSksaD1pLndyYXA/VnQud3JhcExhYmVsKGkubWVzc2FnZSxOZS53aWR0aC0yKk5lLndyYXBQYWRkaW5nLHUpOmkubWVzc2FnZSxkPSh5aShoKT9hd2FpdCBoZChpLm1lc3NhZ2UsbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaCx1KSkud2lkdGgrMipOZS53cmFwUGFkZGluZztsJiZpLmZyb209PT1hLm5leHRBY3Rvcj9uW2kudG9dPVplLmdldE1heChuW2kudG9dfHwwLGQpOmwmJmkuZnJvbT09PWEucHJldkFjdG9yP25baS5mcm9tXT1aZS5nZXRNYXgobltpLmZyb21dfHwwLGQpOmwmJmkuZnJvbT09PWkudG8/KG5baS5mcm9tXT1aZS5nZXRNYXgobltpLmZyb21dfHwwLGQvMiksbltpLnRvXT1aZS5nZXRNYXgobltpLnRvXXx8MCxkLzIpKTppLnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/bltpLmZyb21dPVplLmdldE1heChuW2kuZnJvbV18fDAsZCk6aS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5MRUZUT0Y/blthLnByZXZBY3Rvcl09WmUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQpOmkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuT1ZFUiYmKGEucHJldkFjdG9yJiYoblthLnByZXZBY3Rvcl09WmUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQvMikpLGEubmV4dEFjdG9yJiYobltpLmZyb21dPVplLmdldE1heChuW2kuZnJvbV18fDAsZC8yKSkpfXJldHVybiBYLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLG4pLG59YXN5bmMgZnVuY3Rpb24gbUhlKHQsZSxyKXtsZXQgbj0wO2ZvcihsZXQgYSBvZiB0LmtleXMoKSl7bGV0IHM9dC5nZXQoYSk7cy53cmFwJiYocy5kZXNjcmlwdGlvbj1WdC53cmFwTGFiZWwocy5kZXNjcmlwdGlvbixOZS53aWR0aC0yKk5lLndyYXBQYWRkaW5nLHZQKE5lKSkpO2xldCBsPXlpKHMuZGVzY3JpcHRpb24pP2F3YWl0IGhkKHMuZGVzY3JpcHRpb24sbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5kZXNjcmlwdGlvbix2UChOZSkpO3Mud2lkdGg9cy53cmFwP05lLndpZHRoOlplLmdldE1heChOZS53aWR0aCxsLndpZHRoKzIqTmUud3JhcFBhZGRpbmcpLHMuaGVpZ2h0PXMud3JhcD9aZS5nZXRNYXgobC5oZWlnaHQsTmUuaGVpZ2h0KTpOZS5oZWlnaHQsbj1aZS5nZXRNYXgobixzLmhlaWdodCl9Zm9yKGxldCBhIGluIGUpe2xldCBzPXQuZ2V0KGEpO2lmKCFzKWNvbnRpbnVlO2xldCBsPXQuZ2V0KHMubmV4dEFjdG9yKTtpZighbCl7bGV0IGQ9ZVthXStOZS5hY3Rvck1hcmdpbi1zLndpZHRoLzI7cy5tYXJnaW49WmUuZ2V0TWF4KGQsTmUuYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWxldCBoPWVbYV0rTmUuYWN0b3JNYXJnaW4tcy53aWR0aC8yLWwud2lkdGgvMjtzLm1hcmdpbj1aZS5nZXRNYXgoaCxOZS5hY3Rvck1hcmdpbil9bGV0IGk9MDtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz0kcChOZSksbD1hLmFjdG9yS2V5cy5yZWR1Y2UoKGYsZCk9PmYrPXQuZ2V0KGQpLndpZHRoKyh0LmdldChkKS5tYXJnaW58fDApLDApO2wtPTIqTmUuYm94VGV4dE1hcmdpbixhLndyYXAmJihhLm5hbWU9VnQud3JhcExhYmVsKGEubmFtZSxsLTIqTmUud3JhcFBhZGRpbmcscykpO2xldCB1PVZ0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEubmFtZSxzKTtpPVplLmdldE1heCh1LmhlaWdodCxpKTtsZXQgaD1aZS5nZXRNYXgobCx1LndpZHRoKzIqTmUud3JhcFBhZGRpbmcpO2lmKGEubWFyZ2luPU5lLmJveFRleHRNYXJnaW4sbDxoKXtsZXQgZj0oaC1sKS8yO2EubWFyZ2luKz1mfX0pLHIuZm9yRWFjaChhPT5hLnRleHRNYXhIZWlnaHQ9aSksWmUuZ2V0TWF4KG4sTmUuaGVpZ2h0KX12YXIgTmUscnQsb0hlLCRwLE8xLHZQLGNIZSx1SGUseFAsR2RlLFZkZSxYUyx6ZGUsZkhlLHBIZSxnSGUseUhlLHZIZSxVZGUsSGRlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTskZGUoKTt5dCgpO3ByKCk7cHIoKTt0MigpO0d0KCk7ZzAoKTtlcigpO3hpKCk7TmU9e30scnQ9e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10sYWN0aXZhdGlvbnM6W10sbW9kZWxzOntnZXRIZWlnaHQ6byhmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLHRoaXMuYWN0b3JzLmxlbmd0aD09PTA/WzBdOnRoaXMuYWN0b3JzLm1hcCh0PT50LmhlaWdodHx8MCkpKyh0aGlzLmxvb3BzLmxlbmd0aD09PTA/MDp0aGlzLmxvb3BzLm1hcCh0PT50LmhlaWdodHx8MCkucmVkdWNlKCh0LGUpPT50K2UpKSsodGhpcy5tZXNzYWdlcy5sZW5ndGg9PT0wPzA6dGhpcy5tZXNzYWdlcy5tYXAodD0+dC5oZWlnaHR8fDApLnJlZHVjZSgodCxlKT0+dCtlKSkrKHRoaXMubm90ZXMubGVuZ3RoPT09MD8wOnRoaXMubm90ZXMubWFwKHQ9PnQuaGVpZ2h0fHwwKS5yZWR1Y2UoKHQsZSk9PnQrZSkpfSwiZ2V0SGVpZ2h0IiksY2xlYXI6byhmdW5jdGlvbigpe3RoaXMuYWN0b3JzPVtdLHRoaXMuYm94ZXM9W10sdGhpcy5sb29wcz1bXSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMubm90ZXM9W119LCJjbGVhciIpLGFkZEJveDpvKGZ1bmN0aW9uKHQpe3RoaXMuYm94ZXMucHVzaCh0KX0sImFkZEJveCIpLGFkZEFjdG9yOm8oZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sImFkZEFjdG9yIiksYWRkTG9vcDpvKGZ1bmN0aW9uKHQpe3RoaXMubG9vcHMucHVzaCh0KX0sImFkZExvb3AiKSxhZGRNZXNzYWdlOm8oZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSwiYWRkTWVzc2FnZSIpLGFkZE5vdGU6byhmdW5jdGlvbih0KXt0aGlzLm5vdGVzLnB1c2godCl9LCJhZGROb3RlIiksbGFzdEFjdG9yOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSwibGFzdEFjdG9yIiksbGFzdExvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSwibGFzdExvb3AiKSxsYXN0TWVzc2FnZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGgtMV19LCJsYXN0TWVzc2FnZSIpLGxhc3ROb3RlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sImxhc3ROb3RlIiksYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0Om8oZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCxWZGUobWUoKSl9LCJpbml0IiksdXBkYXRlVmFsOm8oZnVuY3Rpb24odCxlLHIsbil7dFtlXT09PXZvaWQgMD90W2VdPXI6dFtlXT1uKHIsdFtlXSl9LCJ1cGRhdGVWYWwiKSx1cGRhdGVCb3VuZHM6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT10aGlzLGE9MDtmdW5jdGlvbiBzKGwpe3JldHVybiBvKGZ1bmN0aW9uKGgpe2ErKztsZXQgZj1pLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWErMTtpLnVwZGF0ZVZhbChoLCJzdGFydHkiLGUtZipOZS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKGgsInN0b3B5IixuK2YqTmUuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChydC5kYXRhLCJzdGFydHgiLHQtZipOZS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHJ0LmRhdGEsInN0b3B4IixyK2YqTmUuYm94TWFyZ2luLE1hdGgubWF4KSxsIT09ImFjdGl2YXRpb24iJiYoaS51cGRhdGVWYWwoaCwic3RhcnR4Iix0LWYqTmUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChoLCJzdG9weCIscitmKk5lLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwocnQuZGF0YSwic3RhcnR5IixlLWYqTmUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChydC5kYXRhLCJzdG9weSIsbitmKk5lLmJveE1hcmdpbixNYXRoLm1heCkpfSwidXBkYXRlSXRlbUJvdW5kcyIpfW8ocywidXBkYXRlRm4iKSx0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChzKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChzKCJhY3RpdmF0aW9uIikpfSwidXBkYXRlQm91bmRzIiksaW5zZXJ0Om8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9WmUuZ2V0TWluKHQsciksYT1aZS5nZXRNYXgodCxyKSxzPVplLmdldE1pbihlLG4pLGw9WmUuZ2V0TWF4KGUsbik7dGhpcy51cGRhdGVWYWwocnQuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChydC5kYXRhLCJzdGFydHkiLHMsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHJ0LmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChydC5kYXRhLCJzdG9weSIsbCxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxzLGEsbCl9LCJpbnNlcnQiKSxuZXdBY3RpdmF0aW9uOm8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIuZ2V0KHQuZnJvbSksaT1YUyh0LmZyb20pLmxlbmd0aHx8MCxhPW4ueCtuLndpZHRoLzIrKGktMSkqTmUuYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6YSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OmErTmUuYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3Rvcjp0LmZyb20sYW5jaG9yZWQ6ZGkuYW5jaG9yRWxlbWVudChlKX0pfSwibmV3QWN0aXZhdGlvbiIpLGVuZEFjdGl2YXRpb246byhmdW5jdGlvbih0KXtsZXQgZT10aGlzLmFjdGl2YXRpb25zLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5hY3Rvcn0pLmxhc3RJbmRleE9mKHQuZnJvbSk7cmV0dXJuIHRoaXMuYWN0aXZhdGlvbnMuc3BsaWNlKGUsMSlbMF19LCJlbmRBY3RpdmF0aW9uIiksY3JlYXRlTG9vcDpvKGZ1bmN0aW9uKHQ9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LCJjcmVhdGVMb29wIiksbmV3TG9vcDpvKGZ1bmN0aW9uKHQ9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlKXt0aGlzLnNlcXVlbmNlSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxvb3AodCxlKSl9LCJuZXdMb29wIiksZW5kTG9vcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKX0sImVuZExvb3AiKSxpc0xvb3BPdmVybGFwOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSwiaXNMb29wT3ZlcmxhcCIpLGFkZFNlY3Rpb25Ub0xvb3A6byhmdW5jdGlvbih0KXtsZXQgZT10aGlzLnNlcXVlbmNlSXRlbXMucG9wKCk7ZS5zZWN0aW9ucz1lLnNlY3Rpb25zfHxbXSxlLnNlY3Rpb25UaXRsZXM9ZS5zZWN0aW9uVGl0bGVzfHxbXSxlLnNlY3Rpb25zLnB1c2goe3k6cnQuZ2V0VmVydGljYWxQb3MoKSxoZWlnaHQ6MH0pLGUuc2VjdGlvblRpdGxlcy5wdXNoKHQpLHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKGUpfSwiYWRkU2VjdGlvblRvTG9vcCIpLHNhdmVWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LCJzYXZlVmVydGljYWxQb3MiKSxyZXNldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sInJlc2V0VmVydGljYWxQb3MiKSxidW1wVmVydGljYWxQb3M6byhmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9WmUuZ2V0TWF4KHRoaXMuZGF0YS5zdG9weSx0aGlzLnZlcnRpY2FsUG9zKX0sImJ1bXBWZXJ0aWNhbFBvcyIpLGdldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sImdldFZlcnRpY2FsUG9zIiksZ2V0Qm91bmRzOm8oZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fSwiZ2V0Qm91bmRzIil9LG9IZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSl7cnQuYnVtcFZlcnRpY2FsUG9zKE5lLmJveE1hcmdpbiksZS5oZWlnaHQ9TmUuYm94TWFyZ2luLGUuc3RhcnR5PXJ0LmdldFZlcnRpY2FsUG9zKCk7bGV0IHI9QWwoKTtyLng9ZS5zdGFydHgsci55PWUuc3RhcnR5LHIud2lkdGg9ZS53aWR0aHx8TmUud2lkdGgsci5jbGFzcz0ibm90ZSI7bGV0IG49dC5hcHBlbmQoImciKSxpPWRpLmRyYXdSZWN0KG4sciksYT1lMigpO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS53aWR0aD1yLndpZHRoLGEuZHk9IjFlbSIsYS50ZXh0PWUubWVzc2FnZSxhLmNsYXNzPSJub3RlVGV4dCIsYS5mb250RmFtaWx5PU5lLm5vdGVGb250RmFtaWx5LGEuZm9udFNpemU9TmUubm90ZUZvbnRTaXplLGEuZm9udFdlaWdodD1OZS5ub3RlRm9udFdlaWdodCxhLmFuY2hvcj1OZS5ub3RlQWxpZ24sYS50ZXh0TWFyZ2luPU5lLm5vdGVNYXJnaW4sYS52YWxpZ249ImNlbnRlciI7bGV0IHM9eWkoYS50ZXh0KT9hd2FpdCBNYihuLGEpOkZwKG4sYSksbD1NYXRoLnJvdW5kKHMubWFwKHU9Pih1Ll9ncm91cHN8fHUpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgodSxoKT0+dStoKSk7aS5hdHRyKCJoZWlnaHQiLGwrMipOZS5ub3RlTWFyZ2luKSxlLmhlaWdodCs9bCsyKk5lLm5vdGVNYXJnaW4scnQuYnVtcFZlcnRpY2FsUG9zKGwrMipOZS5ub3RlTWFyZ2luKSxlLnN0b3B5PWUuc3RhcnR5K2wrMipOZS5ub3RlTWFyZ2luLGUuc3RvcHg9ZS5zdGFydHgrci53aWR0aCxydC5pbnNlcnQoZS5zdGFydHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxydC5tb2RlbHMuYWRkTm90ZShlKX0sImRyYXdOb3RlIiksJHA9byh0PT4oe2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9KSwibWVzc2FnZUZvbnQiKSxPMT1vKHQ9Pih7Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH0pLCJub3RlRm9udCIpLHZQPW8odD0+KHtmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fSksImFjdG9yRm9udCIpO28obEhlLCJib3VuZE1lc3NhZ2UiKTtjSGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtsZXR7c3RhcnR4Omksc3RvcHg6YSxzdGFydHk6cyxtZXNzYWdlOmwsdHlwZTp1LHNlcXVlbmNlSW5kZXg6aCxzZXF1ZW5jZVZpc2libGU6Zn09ZSxkPVZ0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGwsJHAoTmUpKSxwPWUyKCk7cC54PWkscC55PXMrMTAscC53aWR0aD1hLWkscC5jbGFzcz0ibWVzc2FnZVRleHQiLHAuZHk9IjFlbSIscC50ZXh0PWwscC5mb250RmFtaWx5PU5lLm1lc3NhZ2VGb250RmFtaWx5LHAuZm9udFNpemU9TmUubWVzc2FnZUZvbnRTaXplLHAuZm9udFdlaWdodD1OZS5tZXNzYWdlRm9udFdlaWdodCxwLmFuY2hvcj1OZS5tZXNzYWdlQWxpZ24scC52YWxpZ249ImNlbnRlciIscC50ZXh0TWFyZ2luPU5lLndyYXBQYWRkaW5nLHAudHNwYW49ITEseWkocC50ZXh0KT9hd2FpdCBNYih0LHAse3N0YXJ0eDppLHN0b3B4OmEsc3RhcnR5OnJ9KTpGcCh0LHApO2xldCBtPWQud2lkdGgsZztpPT09YT9OZS5yaWdodEFuZ2xlcz9nPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gICR7aX0sJHtyfSBIICR7aStaZS5nZXRNYXgoTmUud2lkdGgvMixtLzIpfSBWICR7cisyNX0gSCAke2l9YCk6Zz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIraSsiLCIrcisiIEMgIisoaSs2MCkrIiwiKyhyLTEwKSsiICIrKGkrNjApKyIsIisociszMCkrIiAiK2krIiwiKyhyKzIwKSk6KGc9dC5hcHBlbmQoImxpbmUiKSxnLmF0dHIoIngxIixpKSxnLmF0dHIoInkxIixyKSxnLmF0dHIoIngyIixhKSxnLmF0dHIoInkyIixyKSksdT09PW4uZGIuTElORVRZUEUuRE9UVEVEfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX09QRU58fHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEPyhnLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLGcuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTEiKSk6Zy5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMCIpO2xldCB5PSIiO05lLmFycm93TWFya2VyQWJzb2x1dGUmJih5PW11KCEwKSksZy5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLGcuYXR0cigic3Ryb2tlIiwibm9uZSIpLGcuc3R5bGUoImZpbGwiLCJub25lIiksKHU9PT1uLmRiLkxJTkVUWVBFLlNPTElEfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURUQpJiZnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjYXJyb3doZWFkKSIpLCh1PT09bi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElEfHx1PT09bi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRCkmJihnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3krIiNhcnJvd2hlYWQpIiksZy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIreSsiI2Fycm93aGVhZCkiKSksKHU9PT1uLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5UfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpJiZnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjZmlsbGVkLWhlYWQpIiksKHU9PT1uLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MpJiZnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjY3Jvc3NoZWFkKSIpLChmfHxOZS5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIreSsiI3NlcXVlbmNlbnVtYmVyKSIpLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsaSkuYXR0cigieSIscis0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChoKSl9LCJkcmF3TWVzc2FnZSIpLHVIZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldCBsPTAsdT0wLGgsZj0wO2ZvcihsZXQgZCBvZiBuKXtsZXQgcD1lLmdldChkKSxtPXAuYm94O2gmJmghPW0mJihzfHxydC5tb2RlbHMuYWRkQm94KGgpLHUrPU5lLmJveE1hcmdpbitoLm1hcmdpbiksbSYmbSE9aCYmKHN8fChtLng9bCt1LG0ueT1pKSx1Kz1tLm1hcmdpbikscC53aWR0aD1wLndpZHRofHxOZS53aWR0aCxwLmhlaWdodD1aZS5nZXRNYXgocC5oZWlnaHR8fE5lLmhlaWdodCxOZS5oZWlnaHQpLHAubWFyZ2luPXAubWFyZ2lufHxOZS5hY3Rvck1hcmdpbixmPVplLmdldE1heChmLHAuaGVpZ2h0KSxyLmdldChwLm5hbWUpJiYodSs9cC53aWR0aC8yKSxwLng9bCt1LHAuc3RhcnR5PXJ0LmdldFZlcnRpY2FsUG9zKCkscnQuaW5zZXJ0KHAueCxpLHAueCtwLndpZHRoLHAuaGVpZ2h0KSxsKz1wLndpZHRoK3UscC5ib3gmJihwLmJveC53aWR0aD1sK20ubWFyZ2luLXAuYm94LngpLHU9cC5tYXJnaW4saD1wLmJveCxydC5tb2RlbHMuYWRkQWN0b3IocCl9aCYmIXMmJnJ0Lm1vZGVscy5hZGRCb3goaCkscnQuYnVtcFZlcnRpY2FsUG9zKGYpfSwiYWRkQWN0b3JSZW5kZXJpbmdEYXRhIikseFA9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtpZihuKXtsZXQgaT0wO3J0LmJ1bXBWZXJ0aWNhbFBvcyhOZS5ib3hNYXJnaW4qMik7Zm9yKGxldCBhIG9mIHIpe2xldCBzPWUuZ2V0KGEpO3Muc3RvcHl8fChzLnN0b3B5PXJ0LmdldFZlcnRpY2FsUG9zKCkpO2xldCBsPWF3YWl0IGRpLmRyYXdBY3Rvcih0LHMsTmUsITApO2k9WmUuZ2V0TWF4KGksbCl9cnQuYnVtcFZlcnRpY2FsUG9zKGkrTmUuYm94TWFyZ2luKX1lbHNlIGZvcihsZXQgaSBvZiByKXtsZXQgYT1lLmdldChpKTthd2FpdCBkaS5kcmF3QWN0b3IodCxhLE5lLCExKX19LCJkcmF3QWN0b3JzIiksR2RlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MCxhPTA7Zm9yKGxldCBzIG9mIHIpe2xldCBsPWUuZ2V0KHMpLHU9cEhlKGwpLGg9ZGkuZHJhd1BvcHVwKHQsbCx1LE5lLE5lLmZvcmNlTWVudXMsbik7aC5oZWlnaHQ+aSYmKGk9aC5oZWlnaHQpLGgud2lkdGgrbC54PmEmJihhPWgud2lkdGgrbC54KX1yZXR1cm57bWF4SGVpZ2h0OmksbWF4V2lkdGg6YX19LCJkcmF3QWN0b3JzUG9wdXAiKSxWZGU9byhmdW5jdGlvbih0KXtVbihOZSx0KSx0LmZvbnRGYW1pbHkmJihOZS5hY3RvckZvbnRGYW1pbHk9TmUubm90ZUZvbnRGYW1pbHk9TmUubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoTmUuYWN0b3JGb250U2l6ZT1OZS5ub3RlRm9udFNpemU9TmUubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKE5lLmFjdG9yRm9udFdlaWdodD1OZS5ub3RlRm9udFdlaWdodD1OZS5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSwic2V0Q29uZiIpLFhTPW8oZnVuY3Rpb24odCl7cmV0dXJuIHJ0LmFjdGl2YXRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3Rvcj09PXR9KX0sImFjdG9yQWN0aXZhdGlvbnMiKSx6ZGU9byhmdW5jdGlvbih0LGUpe2xldCByPWUuZ2V0KHQpLG49WFModCksaT1uLnJlZHVjZShmdW5jdGlvbihzLGwpe3JldHVybiBaZS5nZXRNaW4ocyxsLnN0YXJ0eCl9LHIueCtyLndpZHRoLzItMSksYT1uLnJlZHVjZShmdW5jdGlvbihzLGwpe3JldHVybiBaZS5nZXRNYXgocyxsLnN0b3B4KX0sci54K3Iud2lkdGgvMisxKTtyZXR1cm5baSxhXX0sImFjdGl2YXRpb25Cb3VuZHMiKTtvKFhjLCJhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcCIpO28oaEhlLCJhZGp1c3RDcmVhdGVkRGVzdHJveWVkRGF0YSIpO2ZIZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe2xldHtzZWN1cml0eUxldmVsOmksc2VxdWVuY2U6YX09bWUoKTtOZT1hO2xldCBzO2k9PT0ic2FuZGJveCImJihzPUdlKCIjaSIrZSkpO2xldCBsPWk9PT0ic2FuZGJveCI/R2Uocy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpLHU9aT09PSJzYW5kYm94Ij9zLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O3J0LmluaXQoKSxYLmRlYnVnKG4uZGIpO2xldCBoPWk9PT0ic2FuZGJveCI/bC5zZWxlY3QoYFtpZD0iJHtlfSJdYCk6R2UoYFtpZD0iJHtlfSJdYCksZj1uLmRiLmdldEFjdG9ycygpLGQ9bi5kYi5nZXRDcmVhdGVkQWN0b3JzKCkscD1uLmRiLmdldERlc3Ryb3llZEFjdG9ycygpLG09bi5kYi5nZXRCb3hlcygpLGc9bi5kYi5nZXRBY3RvcktleXMoKSx5PW4uZGIuZ2V0TWVzc2FnZXMoKSx2PW4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkseD1uLmRiLmhhc0F0TGVhc3RPbmVCb3goKSxiPW4uZGIuaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpLFQ9YXdhaXQgZEhlKGYseSxuKTtpZihOZS5oZWlnaHQ9YXdhaXQgbUhlKGYsVCxtKSxkaS5pbnNlcnRDb21wdXRlckljb24oaCksZGkuaW5zZXJ0RGF0YWJhc2VJY29uKGgpLGRpLmluc2VydENsb2NrSWNvbihoKSx4JiYocnQuYnVtcFZlcnRpY2FsUG9zKE5lLmJveE1hcmdpbiksYiYmcnQuYnVtcFZlcnRpY2FsUG9zKG1bMF0udGV4dE1heEhlaWdodCkpLE5lLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHM9PT0hMCl7bGV0IEI9bmV3IFNldDt5LmZvckVhY2goRj0+e0IuYWRkKEYuZnJvbSksQi5hZGQoRi50byl9KSxnPWcuZmlsdGVyKEY9PkIuaGFzKEYpKX11SGUoaCxmLGQsZywwLHksITEpO2xldCBTPWF3YWl0IHZIZSh5LGYsVCxuKTtkaS5pbnNlcnRBcnJvd0hlYWQoaCksZGkuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoaCksZGkuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKGgpLGRpLmluc2VydFNlcXVlbmNlTnVtYmVyKGgpO2Z1bmN0aW9uIHcoQixGKXtsZXQgej1ydC5lbmRBY3RpdmF0aW9uKEIpO3ouc3RhcnR5KzE4PkYmJih6LnN0YXJ0eT1GLTYsRis9MTIpLGRpLmRyYXdBY3RpdmF0aW9uKGgseixGLE5lLFhTKEIuZnJvbSkubGVuZ3RoKSxydC5pbnNlcnQoei5zdGFydHgsRi0xMCx6LnN0b3B4LEYpfW8odywiYWN0aXZlRW5kIik7bGV0IEU9MSxfPTEsQz1bXSxEPVtdLE89MDtmb3IobGV0IEIgb2YgeSl7bGV0IEYseiwkO3N3aXRjaChCLnR5cGUpe2Nhc2Ugbi5kYi5MSU5FVFlQRS5OT1RFOnJ0LnJlc2V0VmVydGljYWxQb3MoKSx6PUIubm90ZU1vZGVsLGF3YWl0IG9IZShoLHopO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6cnQubmV3QWN0aXZhdGlvbihCLGgsZik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6dyhCLHJ0LmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOlhjKFMsQixOZS5ib3hNYXJnaW4sTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sVT0+cnQubmV3TG9vcChVKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwibG9vcCIsTmUpLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhGLnN0b3B5LXJ0LmdldFZlcnRpY2FsUG9zKCkpLHJ0Lm1vZGVscy5hZGRMb29wKEYpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5SRUNUX1NUQVJUOlhjKFMsQixOZS5ib3hNYXJnaW4sTmUuYm94TWFyZ2luLFU9PnJ0Lm5ld0xvb3Aodm9pZCAwLFUubWVzc2FnZSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5SRUNUX0VORDpGPXJ0LmVuZExvb3AoKSxELnB1c2goRikscnQubW9kZWxzLmFkZExvb3AoRikscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpYYyhTLEIsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLFU9PnJ0Lm5ld0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5PUFRfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwib3B0IixOZSkscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSkscnQubW9kZWxzLmFkZExvb3AoRik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpYYyhTLEIsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLFU9PnJ0Lm5ld0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRUxTRTpYYyhTLEIsTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sTmUuYm94TWFyZ2luLFU9PnJ0LmFkZFNlY3Rpb25Ub0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwiYWx0IixOZSkscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSkscnQubW9kZWxzLmFkZExvb3AoRik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuUEFSX09WRVJfU1RBUlQ6WGMoUyxCLE5lLmJveE1hcmdpbixOZS5ib3hNYXJnaW4rTmUuYm94VGV4dE1hcmdpbixVPT5ydC5uZXdMb29wKFUpKSxydC5zYXZlVmVydGljYWxQb3MoKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUEFSX0FORDpYYyhTLEIsTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sTmUuYm94TWFyZ2luLFU9PnJ0LmFkZFNlY3Rpb25Ub0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwicGFyIixOZSkscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSkscnQubW9kZWxzLmFkZExvb3AoRik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFVVE9OVU1CRVI6RT1CLm1lc3NhZ2Uuc3RhcnR8fEUsXz1CLm1lc3NhZ2Uuc3RlcHx8XyxCLm1lc3NhZ2UudmlzaWJsZT9uLmRiLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpOm4uZGIuZGlzYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpYYyhTLEIsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLFU9PnJ0Lm5ld0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046WGMoUyxCLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLE5lLmJveE1hcmdpbixVPT5ydC5hZGRTZWN0aW9uVG9Mb29wKFUpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwiY3JpdGljYWwiLE5lKSxydC5idW1wVmVydGljYWxQb3MoRi5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKSxydC5tb2RlbHMuYWRkTG9vcChGKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6WGMoUyxCLE5lLmJveE1hcmdpbixOZS5ib3hNYXJnaW4rTmUuYm94VGV4dE1hcmdpbixVPT5ydC5uZXdMb29wKFUpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwiYnJlYWsiLE5lKSxydC5idW1wVmVydGljYWxQb3MoRi5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKSxydC5tb2RlbHMuYWRkTG9vcChGKTticmVhaztkZWZhdWx0OnRyeXskPUIubXNnTW9kZWwsJC5zdGFydHk9cnQuZ2V0VmVydGljYWxQb3MoKSwkLnNlcXVlbmNlSW5kZXg9RSwkLnNlcXVlbmNlVmlzaWJsZT1uLmRiLnNob3dTZXF1ZW5jZU51bWJlcnMoKTtsZXQgVT1hd2FpdCBsSGUoaCwkKTtoSGUoQiwkLFUsTyxmLGQscCksQy5wdXNoKHttZXNzYWdlTW9kZWw6JCxsaW5lU3RhcnRZOlV9KSxydC5tb2RlbHMuYWRkTWVzc2FnZSgkKX1jYXRjaChVKXtYLmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLFUpfX1bbi5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLG4uZGIuTElORVRZUEUuRE9UVEVEX09QRU4sbi5kYi5MSU5FVFlQRS5TT0xJRCxuLmRiLkxJTkVUWVBFLkRPVFRFRCxuLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLG4uZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLG4uZGIuTElORVRZUEUuU09MSURfUE9JTlQsbi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQsbi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElELG4uZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKEIudHlwZSkmJihFPUUrXyksTysrfVguZGVidWcoImNyZWF0ZWRBY3RvcnMiLGQpLFguZGVidWcoImRlc3Ryb3llZEFjdG9ycyIscCksYXdhaXQgeFAoaCxmLGcsITEpO2ZvcihsZXQgQiBvZiBDKWF3YWl0IGNIZShoLEIubWVzc2FnZU1vZGVsLEIubGluZVN0YXJ0WSxuKTtOZS5taXJyb3JBY3RvcnMmJmF3YWl0IHhQKGgsZixnLCEwKSxELmZvckVhY2goQj0+ZGkuZHJhd0JhY2tncm91bmRSZWN0KGgsQikpLGdQKGgsZixnLE5lKTtmb3IobGV0IEIgb2YgcnQubW9kZWxzLmJveGVzKUIuaGVpZ2h0PXJ0LmdldFZlcnRpY2FsUG9zKCktQi55LHJ0Lmluc2VydChCLngsQi55LEIueCtCLndpZHRoLEIuaGVpZ2h0KSxCLnN0YXJ0eD1CLngsQi5zdGFydHk9Qi55LEIuc3RvcHg9Qi5zdGFydHgrQi53aWR0aCxCLnN0b3B5PUIuc3RhcnR5K0IuaGVpZ2h0LEIuc3Ryb2tlPSJyZ2IoMCwwLDAsIDAuNSkiLGRpLmRyYXdCb3goaCxCLE5lKTt4JiZydC5idW1wVmVydGljYWxQb3MoTmUuYm94TWFyZ2luKTtsZXQgUj1HZGUoaCxmLGcsdSkse2JvdW5kczprfT1ydC5nZXRCb3VuZHMoKTtrLnN0YXJ0eD09PXZvaWQgMCYmKGsuc3RhcnR4PTApLGsuc3RhcnR5PT09dm9pZCAwJiYoay5zdGFydHk9MCksay5zdG9weD09PXZvaWQgMCYmKGsuc3RvcHg9MCksay5zdG9weT09PXZvaWQgMCYmKGsuc3RvcHk9MCk7bGV0IEw9ay5zdG9weS1rLnN0YXJ0eTtMPFIubWF4SGVpZ2h0JiYoTD1SLm1heEhlaWdodCk7bGV0IEE9TCsyKk5lLmRpYWdyYW1NYXJnaW5ZO05lLm1pcnJvckFjdG9ycyYmKEE9QS1OZS5ib3hNYXJnaW4rTmUuYm90dG9tTWFyZ2luQWRqKTtsZXQgST1rLnN0b3B4LWsuc3RhcnR4O0k8Ui5tYXhXaWR0aCYmKEk9Ui5tYXhXaWR0aCk7bGV0IE09SSsyKk5lLmRpYWdyYW1NYXJnaW5YO3YmJmguYXBwZW5kKCJ0ZXh0IikudGV4dCh2KS5hdHRyKCJ4Iiwoay5zdG9weC1rLnN0YXJ0eCkvMi0yKk5lLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLGZuKGgsQSxNLE5lLnVzZU1heFdpZHRoKTtsZXQgUD12PzQwOjA7aC5hdHRyKCJ2aWV3Qm94IixrLnN0YXJ0eC1OZS5kaWFncmFtTWFyZ2luWCsiIC0iKyhOZS5kaWFncmFtTWFyZ2luWStQKSsiICIrTSsiICIrKEErUCkpLFguZGVidWcoIm1vZGVsczoiLHJ0Lm1vZGVscyl9LCJkcmF3Iik7byhkSGUsImdldE1heE1lc3NhZ2VXaWR0aFBlckFjdG9yIik7cEhlPW8oZnVuY3Rpb24odCl7bGV0IGU9MCxyPXZQKE5lKTtmb3IobGV0IG4gaW4gdC5saW5rcyl7bGV0IGE9VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobixyKS53aWR0aCsyKk5lLndyYXBQYWRkaW5nKzIqTmUuYm94TWFyZ2luO2U8YSYmKGU9YSl9cmV0dXJuIGV9LCJnZXRSZXF1aXJlZFBvcHVwV2lkdGgiKTtvKG1IZSwiY2FsY3VsYXRlQWN0b3JNYXJnaW5zIik7Z0hlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe2xldCBuPWUuZ2V0KHQuZnJvbSksaT1lLmdldCh0LnRvKSxhPW4ueCxzPWkueCxsPXQud3JhcCYmdC5tZXNzYWdlLHU9eWkodC5tZXNzYWdlKT9hd2FpdCBoZCh0Lm1lc3NhZ2UsbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobD9WdC53cmFwTGFiZWwodC5tZXNzYWdlLE5lLndpZHRoLE8xKE5lKSk6dC5tZXNzYWdlLE8xKE5lKSksaD17d2lkdGg6bD9OZS53aWR0aDpaZS5nZXRNYXgoTmUud2lkdGgsdS53aWR0aCsyKk5lLm5vdGVNYXJnaW4pLGhlaWdodDowLHN0YXJ0eDpuLngsc3RvcHg6MCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlfTtyZXR1cm4gdC5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5SSUdIVE9GPyhoLndpZHRoPWw/WmUuZ2V0TWF4KE5lLndpZHRoLHUud2lkdGgpOlplLmdldE1heChuLndpZHRoLzIraS53aWR0aC8yLHUud2lkdGgrMipOZS5ub3RlTWFyZ2luKSxoLnN0YXJ0eD1hKyhuLndpZHRoK05lLmFjdG9yTWFyZ2luKS8yKTp0LnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULkxFRlRPRj8oaC53aWR0aD1sP1plLmdldE1heChOZS53aWR0aCx1LndpZHRoKzIqTmUubm90ZU1hcmdpbik6WmUuZ2V0TWF4KG4ud2lkdGgvMitpLndpZHRoLzIsdS53aWR0aCsyKk5lLm5vdGVNYXJnaW4pLGguc3RhcnR4PWEtaC53aWR0aCsobi53aWR0aC1OZS5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8odT1WdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsP1Z0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsWmUuZ2V0TWF4KE5lLndpZHRoLG4ud2lkdGgpLE8xKE5lKSk6dC5tZXNzYWdlLE8xKE5lKSksaC53aWR0aD1sP1plLmdldE1heChOZS53aWR0aCxuLndpZHRoKTpaZS5nZXRNYXgobi53aWR0aCxOZS53aWR0aCx1LndpZHRoKzIqTmUubm90ZU1hcmdpbiksaC5zdGFydHg9YSsobi53aWR0aC1oLndpZHRoKS8yKTooaC53aWR0aD1NYXRoLmFicyhhK24ud2lkdGgvMi0ocytpLndpZHRoLzIpKStOZS5hY3Rvck1hcmdpbixoLnN0YXJ0eD1hPHM/YStuLndpZHRoLzItTmUuYWN0b3JNYXJnaW4vMjpzK2kud2lkdGgvMi1OZS5hY3Rvck1hcmdpbi8yKSxsJiYoaC5tZXNzYWdlPVZ0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsaC53aWR0aC0yKk5lLndyYXBQYWRkaW5nLE8xKE5lKSkpLFguZGVidWcoYE5NOlske2guc3RhcnR4fSwke2guc3RvcHh9LCR7aC5zdGFydHl9LCR7aC5zdG9weX06JHtoLndpZHRofSwke2guaGVpZ2h0fT0ke3QubWVzc2FnZX1dYCksaH0sImJ1aWxkTm90ZU1vZGVsIikseUhlPW8oZnVuY3Rpb24odCxlLHIpe2lmKCFbci5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHIuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sci5kYi5MSU5FVFlQRS5TT0xJRCxyLmRiLkxJTkVUWVBFLkRPVFRFRCxyLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLHIuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLHIuZGIuTElORVRZUEUuU09MSURfUE9JTlQsci5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQsci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElELHIuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKHQudHlwZSkpcmV0dXJue307bGV0W24saV09emRlKHQuZnJvbSxlKSxbYSxzXT16ZGUodC50byxlKSxsPW48PWEsdT1sP2k6bixoPWw/YTpzLGY9TWF0aC5hYnMoYS1zKT4yLGQ9byh5PT5sPy15OnksImFkanVzdFZhbHVlIik7dC5mcm9tPT09dC50bz9oPXU6KHQuYWN0aXZhdGUmJiFmJiYoaCs9ZChOZS5hY3RpdmF0aW9uV2lkdGgvMi0xKSksW3IuZGIuTElORVRZUEUuU09MSURfT1BFTixyLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOXS5pbmNsdWRlcyh0LnR5cGUpfHwoaCs9ZCgzKSksW3IuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRCxyLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXS5pbmNsdWRlcyh0LnR5cGUpJiYodS09ZCgzKSkpO2xldCBwPVtuLGksYSxzXSxtPU1hdGguYWJzKHUtaCk7dC53cmFwJiZ0Lm1lc3NhZ2UmJih0Lm1lc3NhZ2U9VnQud3JhcExhYmVsKHQubWVzc2FnZSxaZS5nZXRNYXgobSsyKk5lLndyYXBQYWRkaW5nLE5lLndpZHRoKSwkcChOZSkpKTtsZXQgZz1WdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0Lm1lc3NhZ2UsJHAoTmUpKTtyZXR1cm57d2lkdGg6WmUuZ2V0TWF4KHQud3JhcD8wOmcud2lkdGgrMipOZS53cmFwUGFkZGluZyxtKzIqTmUud3JhcFBhZGRpbmcsTmUud2lkdGgpLGhlaWdodDowLHN0YXJ0eDp1LHN0b3B4Omgsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZSx0eXBlOnQudHlwZSx3cmFwOnQud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwscCksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxwKX19LCJidWlsZE1lc3NhZ2VNb2RlbCIpLHZIZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXt9LGE9W10scyxsLHU7Zm9yKGxldCBoIG9mIHQpe3N3aXRjaChoLnR5cGUpe2Nhc2Ugbi5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmEucHVzaCh7aWQ6aC5pZCxtc2c6aC5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIG4uZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOmgubWVzc2FnZSYmKHM9YS5wb3AoKSxpW3MuaWRdPXMsaVtoLmlkXT1zLGEucHVzaChzKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpzPWEucG9wKCksaVtzLmlkXT1zO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6e2xldCBkPWUuZ2V0KGguZnJvbT9oLmZyb206aC50by5hY3RvcikscD1YUyhoLmZyb20/aC5mcm9tOmgudG8uYWN0b3IpLmxlbmd0aCxtPWQueCtkLndpZHRoLzIrKHAtMSkqTmUuYWN0aXZhdGlvbldpZHRoLzIsZz17c3RhcnR4Om0sc3RvcHg6bStOZS5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6aC5mcm9tLGVuYWJsZWQ6ITB9O3J0LmFjdGl2YXRpb25zLnB1c2goZyl9YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2xldCBkPXJ0LmFjdGl2YXRpb25zLm1hcChwPT5wLmFjdG9yKS5sYXN0SW5kZXhPZihoLmZyb20pO3J0LmFjdGl2YXRpb25zLnNwbGljZShkLDEpLnNwbGljZSgwLDEpfWJyZWFrfWgucGxhY2VtZW50IT09dm9pZCAwPyhsPWF3YWl0IGdIZShoLGUsbiksaC5ub3RlTW9kZWw9bCxhLmZvckVhY2goZD0+e3M9ZCxzLmZyb209WmUuZ2V0TWluKHMuZnJvbSxsLnN0YXJ0eCkscy50bz1aZS5nZXRNYXgocy50byxsLnN0YXJ0eCtsLndpZHRoKSxzLndpZHRoPVplLmdldE1heChzLndpZHRoLE1hdGguYWJzKHMuZnJvbS1zLnRvKSktTmUubGFiZWxCb3hXaWR0aH0pKToodT15SGUoaCxlLG4pLGgubXNnTW9kZWw9dSx1LnN0YXJ0eCYmdS5zdG9weCYmYS5sZW5ndGg+MCYmYS5mb3JFYWNoKGQ9PntpZihzPWQsdS5zdGFydHg9PT11LnN0b3B4KXtsZXQgcD1lLmdldChoLmZyb20pLG09ZS5nZXQoaC50byk7cy5mcm9tPVplLmdldE1pbihwLngtdS53aWR0aC8yLHAueC1wLndpZHRoLzIscy5mcm9tKSxzLnRvPVplLmdldE1heChtLngrdS53aWR0aC8yLG0ueCtwLndpZHRoLzIscy50bykscy53aWR0aD1aZS5nZXRNYXgocy53aWR0aCxNYXRoLmFicyhzLnRvLXMuZnJvbSkpLU5lLmxhYmVsQm94V2lkdGh9ZWxzZSBzLmZyb209WmUuZ2V0TWluKHUuc3RhcnR4LHMuZnJvbSkscy50bz1aZS5nZXRNYXgodS5zdG9weCxzLnRvKSxzLndpZHRoPVplLmdldE1heChzLndpZHRoLHUud2lkdGgpLU5lLmxhYmVsQm94V2lkdGh9KSl9cmV0dXJuIHJ0LmFjdGl2YXRpb25zPVtdLFguZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6IixpKSxpfSwiY2FsY3VsYXRlTG9vcEJvdW5kcyIpLFVkZT17Ym91bmRzOnJ0LGRyYXdBY3RvcnM6eFAsZHJhd0FjdG9yc1BvcHVwOkdkZSxzZXRDb25mOlZkZSxkcmF3OmZIZX19KTt2YXIgV2RlPXt9O3VyKFdkZSx7ZGlhZ3JhbTooKT0+eEhlfSk7dmFyIHhIZSxxZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEZGUoKTtMZGUoKTtOZGUoKTtHdCgpO0hkZSgpO3hIZT17cGFyc2VyOl9kZSxnZXQgZGIoKXtyZXR1cm4gbmV3IFlTfSxyZW5kZXJlcjpVZGUsc3R5bGVzOlJkZSxpbml0Om8odD0+e3Quc2VxdWVuY2V8fCh0LnNlcXVlbmNlPXt9KSx0LndyYXAmJih0LnNlcXVlbmNlLndyYXA9dC53cmFwLG52KHtzZXF1ZW5jZTp7d3JhcDp0LndyYXB9fSkpfSwiaW5pdCIpfX0pO3ZhciBiUCxqUyxUUD1OKCgpPT57InVzZSBzdHJpY3QiO2JQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihJZSx4ZSxxLGRlKXtmb3IocT1xfHx7fSxkZT1JZS5sZW5ndGg7ZGUtLTtxW0llW2RlXV09eGUpO3JldHVybiBxfSwibyIpLGU9WzEsMThdLHI9WzEsMTldLG49WzEsMjBdLGk9WzEsNDFdLGE9WzEsNDJdLHM9WzEsMjZdLGw9WzEsMjRdLHU9WzEsMjVdLGg9WzEsMzJdLGY9WzEsMzNdLGQ9WzEsMzRdLHA9WzEsNDVdLG09WzEsMzVdLGc9WzEsMzZdLHk9WzEsMzddLHY9WzEsMzhdLHg9WzEsMjddLGI9WzEsMjhdLFQ9WzEsMjldLFM9WzEsMzBdLHc9WzEsMzFdLEU9WzEsNDRdLF89WzEsNDZdLEM9WzEsNDNdLEQ9WzEsNDddLE89WzEsOV0sUj1bMSw4LDldLGs9WzEsNThdLEw9WzEsNTldLEE9WzEsNjBdLEk9WzEsNjFdLE09WzEsNjJdLFA9WzEsNjNdLEI9WzEsNjRdLEY9WzEsOCw5LDQxXSx6PVsxLDc2XSwkPVsxLDgsOSwxMiwxMywyMiwzOSw0MSw0NCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OV0sVT1bMSw4LDksMTIsMTMsMTcsMjAsMjIsMzksNDEsNDQsNDgsNTgsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzcsNzksODQsOTksMTAxLDEwMl0sSz1bMTMsNTgsODQsOTksMTAxLDEwMl0sZWU9WzEzLDU4LDcxLDcyLDg0LDk5LDEwMSwxMDJdLFk9WzEzLDU4LDY2LDY3LDY4LDY5LDcwLDg0LDk5LDEwMSwxMDJdLGNlPVsxLDk4XSxaPVsxLDExNV0sdWU9WzEsMTA3XSxRPVsxLDExM10saj1bMSwxMDhdLG5lPVsxLDEwOV0sdGU9WzEsMTEwXSxoZT1bMSwxMTFdLGxlPVsxLDExMl0sSj1bMSwxMTRdLFNlPVsyMiw1OCw1OSw4MCw4NCw4NSw4Niw4Nyw4OCw4OV0sc2U9WzEsOCw5LDM5LDQxLDQ0XSxhZT1bMSw4LDksMjJdLE9lPVsxLDE0M10seWU9WzEsOCw5LDU5XSxCZT1bMSw4LDksMjIsNTgsNTksODAsODQsODUsODYsODcsODgsODldLEhlPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixET1Q6MTcsY2xhc3NOYW1lOjE4LGNsYXNzTGl0ZXJhbE5hbWU6MTksR0VORVJJQ1RZUEU6MjAscmVsYXRpb25TdGF0ZW1lbnQ6MjEsTEFCRUw6MjIsbmFtZXNwYWNlU3RhdGVtZW50OjIzLGNsYXNzU3RhdGVtZW50OjI0LG1lbWJlclN0YXRlbWVudDoyNSxhbm5vdGF0aW9uU3RhdGVtZW50OjI2LGNsaWNrU3RhdGVtZW50OjI3LHN0eWxlU3RhdGVtZW50OjI4LGNzc0NsYXNzU3RhdGVtZW50OjI5LG5vdGVTdGF0ZW1lbnQ6MzAsY2xhc3NEZWZTdGF0ZW1lbnQ6MzEsZGlyZWN0aW9uOjMyLGFjY190aXRsZTozMyxhY2NfdGl0bGVfdmFsdWU6MzQsYWNjX2Rlc2NyOjM1LGFjY19kZXNjcl92YWx1ZTozNixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM3LG5hbWVzcGFjZUlkZW50aWZpZXI6MzgsU1RSVUNUX1NUQVJUOjM5LGNsYXNzU3RhdGVtZW50czo0MCxTVFJVQ1RfU1RPUDo0MSxOQU1FU1BBQ0U6NDIsY2xhc3NJZGVudGlmaWVyOjQzLFNUWUxFX1NFUEFSQVRPUjo0NCxtZW1iZXJzOjQ1LENMQVNTOjQ2LEFOTk9UQVRJT05fU1RBUlQ6NDcsQU5OT1RBVElPTl9FTkQ6NDgsTUVNQkVSOjQ5LFNFUEFSQVRPUjo1MCxyZWxhdGlvbjo1MSxOT1RFX0ZPUjo1Mixub3RlVGV4dDo1MyxOT1RFOjU0LENMQVNTREVGOjU1LGNsYXNzTGlzdDo1NixzdHlsZXNPcHQ6NTcsQUxQSEE6NTgsQ09NTUE6NTksZGlyZWN0aW9uX3RiOjYwLGRpcmVjdGlvbl9idDo2MSxkaXJlY3Rpb25fcmw6NjIsZGlyZWN0aW9uX2xyOjYzLHJlbGF0aW9uVHlwZTo2NCxsaW5lVHlwZTo2NSxBR0dSRUdBVElPTjo2NixFWFRFTlNJT046NjcsQ09NUE9TSVRJT046NjgsREVQRU5ERU5DWTo2OSxMT0xMSVBPUDo3MCxMSU5FOjcxLERPVFRFRF9MSU5FOjcyLENBTExCQUNLOjczLExJTks6NzQsTElOS19UQVJHRVQ6NzUsQ0xJQ0s6NzYsQ0FMTEJBQ0tfTkFNRTo3NyxDQUxMQkFDS19BUkdTOjc4LEhSRUY6NzksU1RZTEU6ODAsQ1NTQ0xBU1M6ODEsc3R5bGU6ODIsc3R5bGVDb21wb25lbnQ6ODMsTlVNOjg0LENPTE9OOjg1LFVOSVQ6ODYsU1BBQ0U6ODcsQlJLVDo4OCxQQ1Q6ODksY29tbWVudFRva2VuOjkwLHRleHRUb2tlbjo5MSxncmFwaENvZGVUb2tlbnM6OTIsdGV4dE5vVGFnc1Rva2VuOjkzLFRBR1NUQVJUOjk0LFRBR0VORDo5NSwiPT0iOjk2LCItLSI6OTcsREVGQVVMVDo5OCxNSU5VUzo5OSxrZXl3b3JkczoxMDAsVU5JQ09ERV9URVhUOjEwMSxCUVVPVEVfU1RSOjEwMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiQ0xBU1NfRElBR1JBTSIsODoiTkVXTElORSIsOToiRU9GIiwxMjoiU1FTIiwxMzoiU1RSIiwxNDoiU1FFIiwxNzoiRE9UIiwyMDoiR0VORVJJQ1RZUEUiLDIyOiJMQUJFTCIsMzM6ImFjY190aXRsZSIsMzQ6ImFjY190aXRsZV92YWx1ZSIsMzU6ImFjY19kZXNjciIsMzY6ImFjY19kZXNjcl92YWx1ZSIsMzc6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM5OiJTVFJVQ1RfU1RBUlQiLDQxOiJTVFJVQ1RfU1RPUCIsNDI6Ik5BTUVTUEFDRSIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkNMQVNTIiw0NzoiQU5OT1RBVElPTl9TVEFSVCIsNDg6IkFOTk9UQVRJT05fRU5EIiw0OToiTUVNQkVSIiw1MDoiU0VQQVJBVE9SIiw1MjoiTk9URV9GT1IiLDU0OiJOT1RFIiw1NToiQ0xBU1NERUYiLDU4OiJBTFBIQSIsNTk6IkNPTU1BIiw2MDoiZGlyZWN0aW9uX3RiIiw2MToiZGlyZWN0aW9uX2J0Iiw2MjoiZGlyZWN0aW9uX3JsIiw2MzoiZGlyZWN0aW9uX2xyIiw2NjoiQUdHUkVHQVRJT04iLDY3OiJFWFRFTlNJT04iLDY4OiJDT01QT1NJVElPTiIsNjk6IkRFUEVOREVOQ1kiLDcwOiJMT0xMSVBPUCIsNzE6IkxJTkUiLDcyOiJET1RURURfTElORSIsNzM6IkNBTExCQUNLIiw3NDoiTElOSyIsNzU6IkxJTktfVEFSR0VUIiw3NjoiQ0xJQ0siLDc3OiJDQUxMQkFDS19OQU1FIiw3ODoiQ0FMTEJBQ0tfQVJHUyIsNzk6IkhSRUYiLDgwOiJTVFlMRSIsODE6IkNTU0NMQVNTIiw4NDoiTlVNIiw4NToiQ09MT04iLDg2OiJVTklUIiw4NzoiU1BBQ0UiLDg4OiJCUktUIiw4OToiUENUIiw5MjoiZ3JhcGhDb2RlVG9rZW5zIiw5NDoiVEFHU1RBUlQiLDk1OiJUQUdFTkQiLDk2OiI9PSIsOTc6Ii0tIiw5ODoiREVGQVVMVCIsOTk6Ik1JTlVTIiwxMDA6ImtleXdvcmRzIiwxMDE6IlVOSUNPREVfVEVYVCIsMTAyOiJCUVVPVEVfU1RSIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs0LDFdLFs2LDRdLFs1LDFdLFs1LDJdLFs1LDNdLFsxMSwzXSxbMTUsMV0sWzE1LDNdLFsxNSwyXSxbMTgsMV0sWzE4LDNdLFsxOCwxXSxbMTgsMl0sWzE4LDJdLFsxOCwyXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMjMsNF0sWzIzLDVdLFszOCwyXSxbNDAsMV0sWzQwLDJdLFs0MCwzXSxbMjQsMV0sWzI0LDNdLFsyNCw0XSxbMjQsNl0sWzQzLDJdLFs0MywzXSxbMjYsNF0sWzQ1LDFdLFs0NSwyXSxbMjUsMV0sWzI1LDJdLFsyNSwxXSxbMjUsMV0sWzIxLDNdLFsyMSw0XSxbMjEsNF0sWzIxLDVdLFszMCwzXSxbMzAsMl0sWzMxLDNdLFs1NiwxXSxbNTYsM10sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFs1MSwzXSxbNTEsMl0sWzUxLDJdLFs1MSwxXSxbNjQsMV0sWzY0LDFdLFs2NCwxXSxbNjQsMV0sWzY0LDFdLFs2NSwxXSxbNjUsMV0sWzI3LDNdLFsyNyw0XSxbMjcsM10sWzI3LDRdLFsyNyw0XSxbMjcsNV0sWzI3LDNdLFsyNyw0XSxbMjcsNF0sWzI3LDVdLFsyNyw0XSxbMjcsNV0sWzI3LDVdLFsyNyw2XSxbMjgsM10sWzI5LDNdLFs1NywxXSxbNTcsM10sWzgyLDFdLFs4MiwyXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbOTAsMV0sWzkwLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTMsMV0sWzkzLDFdLFs5MywxXSxbOTMsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxOSwxXSxbNTMsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbih4ZSxxLGRlLGllLG9lLFYsVGUpe3ZhciBXPVYubGVuZ3RoLTE7c3dpdGNoKG9lKXtjYXNlIDg6dGhpcy4kPVZbVy0xXTticmVhaztjYXNlIDk6Y2FzZSAxMjpjYXNlIDE0OnRoaXMuJD1WW1ddO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzp0aGlzLiQ9VltXLTJdKyIuIitWW1ddO2JyZWFrO2Nhc2UgMTE6Y2FzZSAxNTp0aGlzLiQ9VltXLTFdK1ZbV107YnJlYWs7Y2FzZSAxNjpjYXNlIDE3OnRoaXMuJD1WW1ctMV0rIn4iK1ZbV10rIn4iO2JyZWFrO2Nhc2UgMTg6aWUuYWRkUmVsYXRpb24oVltXXSk7YnJlYWs7Y2FzZSAxOTpWW1ctMV0udGl0bGU9aWUuY2xlYW51cExhYmVsKFZbV10pLGllLmFkZFJlbGF0aW9uKFZbVy0xXSk7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9VltXXS50cmltKCksaWUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMxOmNhc2UgMzI6dGhpcy4kPVZbV10udHJpbSgpLGllLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMzppZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoVltXLTNdLFZbVy0xXSk7YnJlYWs7Y2FzZSAzNDppZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoVltXLTRdLFZbVy0xXSk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9VltXXSxpZS5hZGROYW1lc3BhY2UoVltXXSk7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9W1ZbV11dO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtWW1ctMV1dO2JyZWFrO2Nhc2UgMzg6VltXXS51bnNoaWZ0KFZbVy0yXSksdGhpcy4kPVZbV107YnJlYWs7Y2FzZSA0MDppZS5zZXRDc3NDbGFzcyhWW1ctMl0sVltXXSk7YnJlYWs7Y2FzZSA0MTppZS5hZGRNZW1iZXJzKFZbVy0zXSxWW1ctMV0pO2JyZWFrO2Nhc2UgNDI6aWUuc2V0Q3NzQ2xhc3MoVltXLTVdLFZbVy0zXSksaWUuYWRkTWVtYmVycyhWW1ctNV0sVltXLTFdKTticmVhaztjYXNlIDQzOnRoaXMuJD1WW1ddLGllLmFkZENsYXNzKFZbV10pO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPVZbVy0xXSxpZS5hZGRDbGFzcyhWW1ctMV0pLGllLnNldENsYXNzTGFiZWwoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgNDU6aWUuYWRkQW5ub3RhdGlvbihWW1ddLFZbVy0yXSk7YnJlYWs7Y2FzZSA0NjpjYXNlIDU5OnRoaXMuJD1bVltXXV07YnJlYWs7Y2FzZSA0NzpWW1ddLnB1c2goVltXLTFdKSx0aGlzLiQ9VltXXTticmVhaztjYXNlIDQ4OmJyZWFrO2Nhc2UgNDk6aWUuYWRkTWVtYmVyKFZbVy0xXSxpZS5jbGVhbnVwTGFiZWwoVltXXSkpO2JyZWFrO2Nhc2UgNTA6YnJlYWs7Y2FzZSA1MTpicmVhaztjYXNlIDUyOnRoaXMuJD17aWQxOlZbVy0yXSxpZDI6VltXXSxyZWxhdGlvbjpWW1ctMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9e2lkMTpWW1ctM10saWQyOlZbV10scmVsYXRpb246VltXLTFdLHJlbGF0aW9uVGl0bGUxOlZbVy0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXtpZDE6VltXLTNdLGlkMjpWW1ddLHJlbGF0aW9uOlZbVy0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6VltXLTFdfTticmVhaztjYXNlIDU1OnRoaXMuJD17aWQxOlZbVy00XSxpZDI6VltXXSxyZWxhdGlvbjpWW1ctMl0scmVsYXRpb25UaXRsZTE6VltXLTNdLHJlbGF0aW9uVGl0bGUyOlZbVy0xXX07YnJlYWs7Y2FzZSA1NjppZS5hZGROb3RlKFZbV10sVltXLTFdKTticmVhaztjYXNlIDU3OmllLmFkZE5vdGUoVltXXSk7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9VltXLTJdLGllLmRlZmluZUNsYXNzKFZbVy0xXSxWW1ddKTticmVhaztjYXNlIDYwOnRoaXMuJD1WW1ctMl0uY29uY2F0KFtWW1ddXSk7YnJlYWs7Y2FzZSA2MTppZS5zZXREaXJlY3Rpb24oIlRCIik7YnJlYWs7Y2FzZSA2MjppZS5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA2MzppZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2NDppZS5zZXREaXJlY3Rpb24oIkxSIik7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9e3R5cGUxOlZbVy0yXSx0eXBlMjpWW1ddLGxpbmVUeXBlOlZbVy0xXX07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjpWW1ddLGxpbmVUeXBlOlZbVy0xXX07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9e3R5cGUxOlZbVy0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6VltXXX07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6VltXXX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9aWUucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPWllLnJlbGF0aW9uVHlwZS5FWFRFTlNJT047YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9aWUucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWllLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPWllLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDticmVhaztjYXNlIDc0OnRoaXMuJD1pZS5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWllLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNzY6Y2FzZSA4Mjp0aGlzLiQ9VltXLTJdLGllLnNldENsaWNrRXZlbnQoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgNzc6Y2FzZSA4Mzp0aGlzLiQ9VltXLTNdLGllLnNldENsaWNrRXZlbnQoVltXLTJdLFZbVy0xXSksaWUuc2V0VG9vbHRpcChWW1ctMl0sVltXXSk7YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9VltXLTJdLGllLnNldExpbmsoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgNzk6dGhpcy4kPVZbVy0zXSxpZS5zZXRMaW5rKFZbVy0yXSxWW1ctMV0sVltXXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9VltXLTNdLGllLnNldExpbmsoVltXLTJdLFZbVy0xXSksaWUuc2V0VG9vbHRpcChWW1ctMl0sVltXXSk7YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9VltXLTRdLGllLnNldExpbmsoVltXLTNdLFZbVy0yXSxWW1ddKSxpZS5zZXRUb29sdGlwKFZbVy0zXSxWW1ctMV0pO2JyZWFrO2Nhc2UgODQ6dGhpcy4kPVZbVy0zXSxpZS5zZXRDbGlja0V2ZW50KFZbVy0yXSxWW1ctMV0sVltXXSk7YnJlYWs7Y2FzZSA4NTp0aGlzLiQ9VltXLTRdLGllLnNldENsaWNrRXZlbnQoVltXLTNdLFZbVy0yXSxWW1ctMV0pLGllLnNldFRvb2x0aXAoVltXLTNdLFZbV10pO2JyZWFrO2Nhc2UgODY6dGhpcy4kPVZbVy0zXSxpZS5zZXRMaW5rKFZbVy0yXSxWW1ddKTticmVhaztjYXNlIDg3OnRoaXMuJD1WW1ctNF0saWUuc2V0TGluayhWW1ctM10sVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgODg6dGhpcy4kPVZbVy00XSxpZS5zZXRMaW5rKFZbVy0zXSxWW1ctMV0pLGllLnNldFRvb2x0aXAoVltXLTNdLFZbV10pO2JyZWFrO2Nhc2UgODk6dGhpcy4kPVZbVy01XSxpZS5zZXRMaW5rKFZbVy00XSxWW1ctMl0sVltXXSksaWUuc2V0VG9vbHRpcChWW1ctNF0sVltXLTFdKTticmVhaztjYXNlIDkwOnRoaXMuJD1WW1ctMl0saWUuc2V0Q3NzU3R5bGUoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgOTE6aWUuc2V0Q3NzQ2xhc3MoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgOTI6dGhpcy4kPVtWW1ddXTticmVhaztjYXNlIDkzOlZbVy0yXS5wdXNoKFZbV10pLHRoaXMuJD1WW1ctMl07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9VltXLTFdK1ZbV107YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzpbMSw2XSwxMDo1LDE2OjM5LDE4OjIxLDE5OjQwLDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDMzOmUsMzU6ciwzNzpuLDM4OjIyLDQyOmksNDM6MjMsNDY6YSw0NzpzLDQ5OmwsNTA6dSw1MjpoLDU0OmYsNTU6ZCw1ODpwLDYwOm0sNjE6Zyw2Mjp5LDYzOnYsNzM6eCw3NDpiLDc2OlQsODA6Uyw4MTp3LDg0OkUsOTk6XywxMDE6QywxMDI6RH0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx0KE8sWzIsNV0sezg6WzEsNDhdfSksezg6WzEsNDldfSx0KFIsWzIsMThdLHsyMjpbMSw1MF19KSx0KFIsWzIsMjBdKSx0KFIsWzIsMjFdKSx0KFIsWzIsMjJdKSx0KFIsWzIsMjNdKSx0KFIsWzIsMjRdKSx0KFIsWzIsMjVdKSx0KFIsWzIsMjZdKSx0KFIsWzIsMjddKSx0KFIsWzIsMjhdKSx0KFIsWzIsMjldKSx7MzQ6WzEsNTFdfSx7MzY6WzEsNTJdfSx0KFIsWzIsMzJdKSx0KFIsWzIsNDhdLHs1MTo1Myw2NDo1Niw2NTo1NywxMzpbMSw1NF0sMjI6WzEsNTVdLDY2OmssNjc6TCw2ODpBLDY5OkksNzA6TSw3MTpQLDcyOkJ9KSx7Mzk6WzEsNjVdfSx0KEYsWzIsMzldLHszOTpbMSw2N10sNDQ6WzEsNjZdfSksdChSLFsyLDUwXSksdChSLFsyLDUxXSksezE2OjY4LDU4OnAsODQ6RSw5OTpfLDEwMTpDfSx7MTY6MzksMTg6NjksMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHsxNjozOSwxODo3MCwxOTo0MCw1ODpwLDg0OkUsOTk6XywxMDE6QywxMDI6RH0sezE2OjM5LDE4OjcxLDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx7NTg6WzEsNzJdfSx7MTM6WzEsNzNdfSx7MTY6MzksMTg6NzQsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHsxMzp6LDUzOjc1fSx7NTY6NzcsNTg6WzEsNzhdfSx0KFIsWzIsNjFdKSx0KFIsWzIsNjJdKSx0KFIsWzIsNjNdKSx0KFIsWzIsNjRdKSx0KCQsWzIsMTJdLHsxNjozOSwxOTo0MCwxODo4MCwxNzpbMSw3OV0sMjA6WzEsODFdLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSksdCgkLFsyLDE0XSx7MjA6WzEsODJdfSksezE1OjgzLDE2Ojg0LDU4OnAsODQ6RSw5OTpfLDEwMTpDfSx7MTY6MzksMTg6ODUsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHQoVSxbMiwxMThdKSx0KFUsWzIsMTE5XSksdChVLFsyLDEyMF0pLHQoVSxbMiwxMjFdKSx0KFsxLDgsOSwxMiwxMywyMCwyMiwzOSw0MSw0NCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OV0sWzIsMTIyXSksdChPLFsyLDZdLHsxMDo1LDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDE4OjIxLDM4OjIyLDQzOjIzLDE2OjM5LDE5OjQwLDU6ODYsMzM6ZSwzNTpyLDM3Om4sNDI6aSw0NjphLDQ3OnMsNDk6bCw1MDp1LDUyOmgsNTQ6Ziw1NTpkLDU4OnAsNjA6bSw2MTpnLDYyOnksNjM6diw3Mzp4LDc0OmIsNzY6VCw4MDpTLDgxOncsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSksezU6ODcsMTA6NSwxNjozOSwxODoyMSwxOTo0MCwyMTo3LDIzOjgsMjQ6OSwyNToxMCwyNjoxMSwyNzoxMiwyODoxMywyOToxNCwzMDoxNSwzMToxNiwzMjoxNywzMzplLDM1OnIsMzc6biwzODoyMiw0MjppLDQzOjIzLDQ2OmEsNDc6cyw0OTpsLDUwOnUsNTI6aCw1NDpmLDU1OmQsNTg6cCw2MDptLDYxOmcsNjI6eSw2Mzp2LDczOngsNzQ6Yiw3NjpULDgwOlMsODE6dyw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHQoUixbMiwxOV0pLHQoUixbMiwzMF0pLHQoUixbMiwzMV0pLHsxMzpbMSw4OV0sMTY6MzksMTg6ODgsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHs1MTo5MCw2NDo1Niw2NTo1Nyw2NjprLDY3OkwsNjg6QSw2OTpJLDcwOk0sNzE6UCw3MjpCfSx0KFIsWzIsNDldKSx7NjU6OTEsNzE6UCw3MjpCfSx0KEssWzIsNjhdLHs2NDo5Miw2NjprLDY3OkwsNjg6QSw2OTpJLDcwOk19KSx0KGVlLFsyLDY5XSksdChlZSxbMiw3MF0pLHQoZWUsWzIsNzFdKSx0KGVlLFsyLDcyXSksdChlZSxbMiw3M10pLHQoWSxbMiw3NF0pLHQoWSxbMiw3NV0pLHs4OlsxLDk0XSwyNDo5NSw0MDo5Myw0MzoyMyw0NjphfSx7MTY6OTYsNTg6cCw4NDpFLDk5Ol8sMTAxOkN9LHs0NTo5Nyw0OTpjZX0sezQ4OlsxLDk5XX0sezEzOlsxLDEwMF19LHsxMzpbMSwxMDFdfSx7Nzc6WzEsMTAyXSw3OTpbMSwxMDNdfSx7MjI6Wiw1NzoxMDQsNTg6dWUsODA6USw4MjoxMDUsODM6MTA2LDg0OmosODU6bmUsODY6dGUsODc6aGUsODg6bGUsODk6Sn0sezU4OlsxLDExNl19LHsxMzp6LDUzOjExN30sdChSLFsyLDU3XSksdChSLFsyLDEyM10pLHsyMjpaLDU3OjExOCw1ODp1ZSw1OTpbMSwxMTldLDgwOlEsODI6MTA1LDgzOjEwNiw4NDpqLDg1Om5lLDg2OnRlLDg3OmhlLDg4OmxlLDg5Okp9LHQoU2UsWzIsNTldKSx7MTY6MzksMTg6MTIwLDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx0KCQsWzIsMTVdKSx0KCQsWzIsMTZdKSx0KCQsWzIsMTddKSx7Mzk6WzIsMzVdfSx7MTU6MTIyLDE2Ojg0LDE3OlsxLDEyMV0sMzk6WzIsOV0sNTg6cCw4NDpFLDk5Ol8sMTAxOkN9LHQoc2UsWzIsNDNdLHsxMToxMjMsMTI6WzEsMTI0XX0pLHQoTyxbMiw3XSksezk6WzEsMTI1XX0sdChhZSxbMiw1Ml0pLHsxNjozOSwxODoxMjYsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHsxMzpbMSwxMjhdLDE2OjM5LDE4OjEyNywxOTo0MCw1ODpwLDg0OkUsOTk6XywxMDE6QywxMDI6RH0sdChLLFsyLDY3XSx7NjQ6MTI5LDY2OmssNjc6TCw2ODpBLDY5OkksNzA6TX0pLHQoSyxbMiw2Nl0pLHs0MTpbMSwxMzBdfSx7MjQ6OTUsNDA6MTMxLDQzOjIzLDQ2OmF9LHs4OlsxLDEzMl0sNDE6WzIsMzZdfSx0KEYsWzIsNDBdLHszOTpbMSwxMzNdfSksezQxOlsxLDEzNF19LHs0MTpbMiw0Nl0sNDU6MTM1LDQ5OmNlfSx7MTY6MzksMTg6MTM2LDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx0KFIsWzIsNzZdLHsxMzpbMSwxMzddfSksdChSLFsyLDc4XSx7MTM6WzEsMTM5XSw3NTpbMSwxMzhdfSksdChSLFsyLDgyXSx7MTM6WzEsMTQwXSw3ODpbMSwxNDFdfSksezEzOlsxLDE0Ml19LHQoUixbMiw5MF0sezU5Ok9lfSksdCh5ZSxbMiw5Ml0sezgzOjE0NCwyMjpaLDU4OnVlLDgwOlEsODQ6aiw4NTpuZSw4Njp0ZSw4NzpoZSw4ODpsZSw4OTpKfSksdChCZSxbMiw5NF0pLHQoQmUsWzIsOTZdKSx0KEJlLFsyLDk3XSksdChCZSxbMiw5OF0pLHQoQmUsWzIsOTldKSx0KEJlLFsyLDEwMF0pLHQoQmUsWzIsMTAxXSksdChCZSxbMiwxMDJdKSx0KEJlLFsyLDEwM10pLHQoQmUsWzIsMTA0XSksdChSLFsyLDkxXSksdChSLFsyLDU2XSksdChSLFsyLDU4XSx7NTk6T2V9KSx7NTg6WzEsMTQ1XX0sdCgkLFsyLDEzXSksezE1OjE0NiwxNjo4NCw1ODpwLDg0OkUsOTk6XywxMDE6Q30sezM5OlsyLDExXX0sdChzZSxbMiw0NF0pLHsxMzpbMSwxNDddfSx7MTpbMiw0XX0sdChhZSxbMiw1NF0pLHQoYWUsWzIsNTNdKSx7MTY6MzksMTg6MTQ4LDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx0KEssWzIsNjVdKSx0KFIsWzIsMzNdKSx7NDE6WzEsMTQ5XX0sezI0Ojk1LDQwOjE1MCw0MTpbMiwzN10sNDM6MjMsNDY6YX0sezQ1OjE1MSw0OTpjZX0sdChGLFsyLDQxXSksezQxOlsyLDQ3XX0sdChSLFsyLDQ1XSksdChSLFsyLDc3XSksdChSLFsyLDc5XSksdChSLFsyLDgwXSx7NzU6WzEsMTUyXX0pLHQoUixbMiw4M10pLHQoUixbMiw4NF0sezEzOlsxLDE1M119KSx0KFIsWzIsODZdLHsxMzpbMSwxNTVdLDc1OlsxLDE1NF19KSx7MjI6Wiw1ODp1ZSw4MDpRLDgyOjE1Niw4MzoxMDYsODQ6aiw4NTpuZSw4Njp0ZSw4NzpoZSw4ODpsZSw4OTpKfSx0KEJlLFsyLDk1XSksdChTZSxbMiw2MF0pLHszOTpbMiwxMF19LHsxNDpbMSwxNTddfSx0KGFlLFsyLDU1XSksdChSLFsyLDM0XSksezQxOlsyLDM4XX0sezQxOlsxLDE1OF19LHQoUixbMiw4MV0pLHQoUixbMiw4NV0pLHQoUixbMiw4N10pLHQoUixbMiw4OF0sezc1OlsxLDE1OV19KSx0KHllLFsyLDkzXSx7ODM6MTQ0LDIyOlosNTg6dWUsODA6USw4NDpqLDg1Om5lLDg2OnRlLDg3OmhlLDg4OmxlLDg5Okp9KSx0KHNlLFsyLDhdKSx0KEYsWzIsNDJdKSx0KFIsWzIsODldKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDNdLDgzOlsyLDM1XSwxMjI6WzIsMTFdLDEyNTpbMiw0XSwxMzU6WzIsNDddLDE0NjpbMiwxMF0sMTUwOlsyLDM4XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHhlLHEpe2lmKHEucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh4ZSk7ZWxzZXt2YXIgZGU9bmV3IEVycm9yKHhlKTt0aHJvdyBkZS5oYXNoPXEsZGV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oeGUpe3ZhciBxPXRoaXMsZGU9WzBdLGllPVtdLG9lPVtudWxsXSxWPVtdLFRlPXRoaXMudGFibGUsVz0iIixwZT0wLHZlPTAsUGU9MCxfZT0yLGJlPTEsVmU9Vi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxEZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHFlPXt5eTp7fX07Zm9yKHZhciBhdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGF0KSYmKHFlLnl5W2F0XT10aGlzLnl5W2F0XSk7RGUuc2V0SW5wdXQoeGUscWUueXkpLHFlLnl5LmxleGVyPURlLHFlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBEZS55eWxsb2M+InUiJiYoRGUueXlsbG9jPXt9KTt2YXIgUnQ9RGUueXlsbG9jO1YucHVzaChSdCk7dmFyIHN0PURlLm9wdGlvbnMmJkRlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBxZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1xZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBVZShrdCl7ZGUubGVuZ3RoPWRlLmxlbmd0aC0yKmt0LG9lLmxlbmd0aD1vZS5sZW5ndGgta3QsVi5sZW5ndGg9Vi5sZW5ndGgta3R9byhVZSwicG9wU3RhY2siKTtmdW5jdGlvbiBjdCgpe3ZhciBrdDtyZXR1cm4ga3Q9aWUucG9wKCl8fERlLmxleCgpfHxiZSx0eXBlb2Yga3QhPSJudW1iZXIiJiYoa3QgaW5zdGFuY2VvZiBBcnJheSYmKGllPWt0LGt0PWllLnBvcCgpKSxrdD1xLnN5bWJvbHNfW2t0XXx8a3QpLGt0fW8oY3QsImxleCIpO2Zvcih2YXIgV2Usb3QsWXQsVHQsTXQsYnQsdXQ9e30sU3QsZnQsdnQsbnQ7Oyl7aWYoWXQ9ZGVbZGUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWXRdP1R0PXRoaXMuZGVmYXVsdEFjdGlvbnNbWXRdOigoV2U9PT1udWxsfHx0eXBlb2YgV2U+InUiKSYmKFdlPWN0KCkpLFR0PVRlW1l0XSYmVGVbWXRdW1dlXSksdHlwZW9mIFR0PiJ1Inx8IVR0Lmxlbmd0aHx8IVR0WzBdKXt2YXIgcG49IiI7bnQ9W107Zm9yKFN0IGluIFRlW1l0XSl0aGlzLnRlcm1pbmFsc19bU3RdJiZTdD5fZSYmbnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1N0XSsiJyIpO0RlLnNob3dQb3NpdGlvbj9wbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhwZSsxKStgOgpgK0RlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArbnQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tXZV18fFdlKSsiJyI6cG49IlBhcnNlIGVycm9yIG9uIGxpbmUgIisocGUrMSkrIjogVW5leHBlY3RlZCAiKyhXZT09YmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bV2VdfHxXZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IocG4se3RleHQ6RGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1dlXXx8V2UsbGluZTpEZS55eWxpbmVubyxsb2M6UnQsZXhwZWN0ZWQ6bnR9KX1pZihUdFswXWluc3RhbmNlb2YgQXJyYXkmJlR0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWXQrIiwgdG9rZW46ICIrV2UpO3N3aXRjaChUdFswXSl7Y2FzZSAxOmRlLnB1c2goV2UpLG9lLnB1c2goRGUueXl0ZXh0KSxWLnB1c2goRGUueXlsbG9jKSxkZS5wdXNoKFR0WzFdKSxXZT1udWxsLG90PyhXZT1vdCxvdD1udWxsKToodmU9RGUueXlsZW5nLFc9RGUueXl0ZXh0LHBlPURlLnl5bGluZW5vLFJ0PURlLnl5bGxvYyxQZT4wJiZQZS0tKTticmVhaztjYXNlIDI6aWYoZnQ9dGhpcy5wcm9kdWN0aW9uc19bVHRbMV1dWzFdLHV0LiQ9b2Vbb2UubGVuZ3RoLWZ0XSx1dC5fJD17Zmlyc3RfbGluZTpWW1YubGVuZ3RoLShmdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOlZbVi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpWW1YubGVuZ3RoLShmdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpWW1YubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzdCYmKHV0Ll8kLnJhbmdlPVtWW1YubGVuZ3RoLShmdHx8MSldLnJhbmdlWzBdLFZbVi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxidD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkodXQsW1csdmUscGUscWUueXksVHRbMV0sb2UsVl0uY29uY2F0KFZlKSksdHlwZW9mIGJ0PCJ1IilyZXR1cm4gYnQ7ZnQmJihkZT1kZS5zbGljZSgwLC0xKmZ0KjIpLG9lPW9lLnNsaWNlKDAsLTEqZnQpLFY9Vi5zbGljZSgwLC0xKmZ0KSksZGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tUdFsxXV1bMF0pLG9lLnB1c2godXQuJCksVi5wdXNoKHV0Ll8kKSx2dD1UZVtkZVtkZS5sZW5ndGgtMl1dW2RlW2RlLmxlbmd0aC0xXV0sZGUucHVzaCh2dCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHplPWZ1bmN0aW9uKCl7dmFyIEllPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24ocSxkZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihxLGRlKTtlbHNlIHRocm93IG5ldyBFcnJvcihxKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKHhlLHEpe3JldHVybiB0aGlzLnl5PXF8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz14ZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9eGUsdGhpcy5tYXRjaGVkKz14ZTt2YXIgcT14ZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHE/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHhlfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHhlKXt2YXIgcT14ZS5sZW5ndGgsZGU9eGUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD14ZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtcSksdGhpcy5vZmZzZXQtPXE7dmFyIGllPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGRlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09ZGUubGVuZ3RoLTEpO3ZhciBvZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ZGU/KGRlLmxlbmd0aD09PWllLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkraWVbaWUubGVuZ3RoLWRlLmxlbmd0aF0ubGVuZ3RoLWRlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tcX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtvZVswXSxvZVswXSt0aGlzLnl5bGVuZy1xXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oeGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh4ZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oeGUubGVuZ3RoPjIwPyIuLi4iOiIiKSt4ZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB4ZT10aGlzLm1hdGNoO3JldHVybiB4ZS5sZW5ndGg8MjAmJih4ZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAteGUubGVuZ3RoKSksKHhlLnN1YnN0cigwLDIwKSsoeGUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5wYXN0SW5wdXQoKSxxPW5ldyBBcnJheSh4ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB4ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArcSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oeGUscSl7dmFyIGRlLGllLG9lO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihvZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihvZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxpZT14ZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksaWUmJih0aGlzLnl5bGluZW5vKz1pZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjppZT9pZVtpZS5sZW5ndGgtMV0ubGVuZ3RoLWllW2llLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3hlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXhlWzBdLHRoaXMubWF0Y2grPXhlWzBdLHRoaXMubWF0Y2hlcz14ZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh4ZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9eGVbMF0sZGU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMscSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxkZSlyZXR1cm4gZGU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFYgaW4gb2UpdGhpc1tWXT1vZVtWXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeGUscSxkZSxpZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBvZT10aGlzLl9jdXJyZW50UnVsZXMoKSxWPTA7VjxvZS5sZW5ndGg7VisrKWlmKGRlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbb2VbVl1dKSxkZSYmKCFxfHxkZVswXS5sZW5ndGg+cVswXS5sZW5ndGgpKXtpZihxPWRlLGllPVYsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeGU9dGhpcy50ZXN0X21hdGNoKGRlLG9lW1ZdKSx4ZSE9PSExKXJldHVybiB4ZTtpZih0aGlzLl9iYWNrdHJhY2spe3E9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gcT8oeGU9dGhpcy50ZXN0X21hdGNoKHEsb2VbaWVdKSx4ZSE9PSExP3hlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5uZXh0KCk7cmV0dXJuIHF8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKHEpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChxKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihxKXtyZXR1cm4gcT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHF8fDApLHE+PTA/dGhpcy5jb25kaXRpb25TdGFja1txXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKHEpe3RoaXMuYmVnaW4ocSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihxLGRlLGllLG9lKXt2YXIgVj1vZTtzd2l0Y2goaWUpe2Nhc2UgMDpyZXR1cm4gNjA7Y2FzZSAxOnJldHVybiA2MTtjYXNlIDI6cmV0dXJuIDYyO2Nhc2UgMzpyZXR1cm4gNjM7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMzO2JyZWFrO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzU7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpyZXR1cm4gODtjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIDc7Y2FzZSAxNjpyZXR1cm4gNztjYXNlIDE3OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDE5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIwOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gNzc7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gNzg7Y2FzZSAyNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNTpyZXR1cm4iU1RSIjtjYXNlIDI2OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIDgwO2Nhc2UgMjg6cmV0dXJuIDU1O2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZSIpLDQyO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2JyZWFrO2Nhc2UgMzE6YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5iZWdpbigibmFtZXNwYWNlLWJvZHkiKSwzOTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDE7YnJlYWs7Y2FzZSAzNDpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSAzNTpyZXR1cm4gODtjYXNlIDM2OmJyZWFrO2Nhc2UgMzc6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzIiksNDY7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg7YnJlYWs7Y2FzZSA0MDpicmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQxO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzLWJvZHkiKSwzOTticmVhaztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDE7YnJlYWs7Y2FzZSA0NDpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA0NTpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSA0NjpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgNDc6YnJlYWs7Y2FzZSA0ODpyZXR1cm4iTUVNQkVSIjtjYXNlIDQ5OnJldHVybiA4MTtjYXNlIDUwOnJldHVybiA3MztjYXNlIDUxOnJldHVybiA3NDtjYXNlIDUyOnJldHVybiA3NjtjYXNlIDUzOnJldHVybiA1MjtjYXNlIDU0OnJldHVybiA1NDtjYXNlIDU1OnJldHVybiA0NztjYXNlIDU2OnJldHVybiA0ODtjYXNlIDU3OnJldHVybiA3OTtjYXNlIDU4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU5OnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSA2MDp0aGlzLmJlZ2luKCJnZW5lcmljIik7YnJlYWs7Y2FzZSA2MTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2MjpyZXR1cm4iQlFVT1RFX1NUUiI7Y2FzZSA2Mzp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgNjQ6cmV0dXJuIDc1O2Nhc2UgNjU6cmV0dXJuIDc1O2Nhc2UgNjY6cmV0dXJuIDc1O2Nhc2UgNjc6cmV0dXJuIDc1O2Nhc2UgNjg6cmV0dXJuIDY3O2Nhc2UgNjk6cmV0dXJuIDY3O2Nhc2UgNzA6cmV0dXJuIDY5O2Nhc2UgNzE6cmV0dXJuIDY5O2Nhc2UgNzI6cmV0dXJuIDY4O2Nhc2UgNzM6cmV0dXJuIDY2O2Nhc2UgNzQ6cmV0dXJuIDcwO2Nhc2UgNzU6cmV0dXJuIDcxO2Nhc2UgNzY6cmV0dXJuIDcyO2Nhc2UgNzc6cmV0dXJuIDIyO2Nhc2UgNzg6cmV0dXJuIDQ0O2Nhc2UgNzk6cmV0dXJuIDk5O2Nhc2UgODA6cmV0dXJuIDE3O2Nhc2UgODE6cmV0dXJuIlBMVVMiO2Nhc2UgODI6cmV0dXJuIDg1O2Nhc2UgODM6cmV0dXJuIDU5O2Nhc2UgODQ6cmV0dXJuIDg4O2Nhc2UgODU6cmV0dXJuIDg4O2Nhc2UgODY6cmV0dXJuIDg5O2Nhc2UgODc6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4ODpyZXR1cm4iRVFVQUxTIjtjYXNlIDg5OnJldHVybiA1ODtjYXNlIDkwOnJldHVybiAxMjtjYXNlIDkxOnJldHVybiAxNDtjYXNlIDkyOnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA5MzpyZXR1cm4gODQ7Y2FzZSA5NDpyZXR1cm4gMTAxO2Nhc2UgOTU6cmV0dXJuIDg3O2Nhc2UgOTY6cmV0dXJuIDg3O2Nhc2UgOTc6cmV0dXJuIDl9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86JSUoPyFceykqW15cbl0qKFxyP1xuPykrKS8sL14oPzolJVteXG5dKihccj9cbikqKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpcW1wqXF0pLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86WyJdKS8sL14oPzpzdHlsZVxiKS8sL14oPzpjbGFzc0RlZlxiKS8sL14oPzpuYW1lc3BhY2VcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OlxbXCpcXSkvLC9eKD86Y2xhc3NcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W31dKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XFtcKlxdKS8sL14oPzpbe10pLywvXig/Oltcbl0pLywvXig/Oltee31cbl0qKS8sL14oPzpjc3NDbGFzc1xiKS8sL14oPzpjYWxsYmFja1xiKS8sL14oPzpsaW5rXGIpLywvXig/OmNsaWNrXGIpLywvXig/Om5vdGUgZm9yXGIpLywvXig/Om5vdGVcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpocmVmXGIpLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/On4pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OltgXSkvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzpccyo8XHwpLywvXig/OlxzKlx8PikvLC9eKD86XHMqPikvLC9eKD86XHMqPCkvLC9eKD86XHMqXCopLywvXig/OlxzKm9cYikvLC9eKD86XHMqXChcKSkvLC9eKD86LS0pLywvXig/OlwuXC4pLywvXig/Ojp7MX1bXjpcbjtdKykvLC9eKD86OnszfSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OlwrKS8sL14oPzo6KS8sL14oPzosKS8sL14oPzojKS8sL14oPzojKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzpcdyspLywvXig/OlxbKS8sL14oPzpcXSkvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOnsibmFtZXNwYWNlLWJvZHkiOntydWxlczpbMjYsMzMsMzQsMzUsMzYsMzcsMzgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sbmFtZXNwYWNlOntydWxlczpbMjYsMjksMzAsMzEsMzIsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sImNsYXNzLWJvZHkiOntydWxlczpbMjYsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sY2xhc3M6e3J1bGVzOlsyNiwzOSw0MCw0MSw0Miw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTEsMTIsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbOSwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls3LDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOlsyMiwyMywyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbMTksMjAsMjEsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1LDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMjYsMjcsMjgsMjksMzgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gSWV9KCk7SGUubGV4ZXI9emU7ZnVuY3Rpb24gTGUoKXt0aGlzLnl5PXt9fXJldHVybiBvKExlLCJQYXJzZXIiKSxMZS5wcm90b3R5cGU9SGUsSGUuUGFyc2VyPUxlLG5ldyBMZX0oKTtiUC5wYXJzZXI9YlA7alM9YlB9KTt2YXIgamRlLEliLEtkZT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7cHIoKTtqZGU9WyIjIiwiKyIsIn4iLCItIiwiIl0sSWI9Y2xhc3N7c3RhdGlje28odGhpcywiQ2xhc3NNZW1iZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMubWVtYmVyVHlwZT1yLHRoaXMudmlzaWJpbGl0eT0iIix0aGlzLmNsYXNzaWZpZXI9IiIsdGhpcy50ZXh0PSIiO2xldCBuPXdyKGUsbWUoKSk7dGhpcy5wYXJzZU1lbWJlcihuKX1nZXREaXNwbGF5RGV0YWlscygpe2xldCBlPXRoaXMudmlzaWJpbGl0eStpYyh0aGlzLmlkKTt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIiYmKGUrPWAoJHtpYyh0aGlzLnBhcmFtZXRlcnMudHJpbSgpKX0pYCx0aGlzLnJldHVyblR5cGUmJihlKz0iIDogIitpYyh0aGlzLnJldHVyblR5cGUpKSksZT1lLnRyaW0oKTtsZXQgcj10aGlzLnBhcnNlQ2xhc3NpZmllcigpO3JldHVybntkaXNwbGF5VGV4dDplLGNzc1N0eWxlOnJ9fXBhcnNlTWVtYmVyKGUpe2xldCByPSIiO2lmKHRoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiKXtsZXQgYT0vKFsjK34tXSk/KC4rKVwoKC4qKVwpKFtccyQqXSk/KC4qKShbJCpdKT8vLmV4ZWMoZSk7aWYoYSl7bGV0IHM9YVsxXT9hWzFdLnRyaW0oKToiIjtpZihqZGUuaW5jbHVkZXMocykmJih0aGlzLnZpc2liaWxpdHk9cyksdGhpcy5pZD1hWzJdLHRoaXMucGFyYW1ldGVycz1hWzNdP2FbM10udHJpbSgpOiIiLHI9YVs0XT9hWzRdLnRyaW0oKToiIix0aGlzLnJldHVyblR5cGU9YVs1XT9hWzVdLnRyaW0oKToiIixyPT09IiIpe2xldCBsPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcodGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKTsvWyQqXS8uZXhlYyhsKSYmKHI9bCx0aGlzLnJldHVyblR5cGU9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZygwLHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSkpfX19ZWxzZXtsZXQgaT1lLmxlbmd0aCxhPWUuc3Vic3RyaW5nKDAsMSkscz1lLnN1YnN0cmluZyhpLTEpO2pkZS5pbmNsdWRlcyhhKSYmKHRoaXMudmlzaWJpbGl0eT1hKSwvWyQqXS8uZXhlYyhzKSYmKHI9cyksdGhpcy5pZD1lLnN1YnN0cmluZyh0aGlzLnZpc2liaWxpdHk9PT0iIj8wOjEscj09PSIiP2k6aS0xKX10aGlzLmNsYXNzaWZpZXI9cix0aGlzLmlkPXRoaXMuaWQuc3RhcnRzV2l0aCgiICIpPyIgIit0aGlzLmlkLnRyaW0oKTp0aGlzLmlkLnRyaW0oKTtsZXQgbj1gJHt0aGlzLnZpc2liaWxpdHk/IlxcIit0aGlzLnZpc2liaWxpdHk6IiJ9JHtpYyh0aGlzLmlkKX0ke3RoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiP2AoJHtpYyh0aGlzLnBhcmFtZXRlcnMpfSkke3RoaXMucmV0dXJuVHlwZT8iIDogIitpYyh0aGlzLnJldHVyblR5cGUpOiIifWA6IiJ9YDt0aGlzLnRleHQ9bi5yZXBsYWNlQWxsKCI8IiwiJmx0OyIpLnJlcGxhY2VBbGwoIj4iLCImZ3Q7IiksdGhpcy50ZXh0LnN0YXJ0c1dpdGgoIlxcJmx0OyIpJiYodGhpcy50ZXh0PXRoaXMudGV4dC5yZXBsYWNlKCJcXCZsdDsiLCJ+IikpfXBhcnNlQ2xhc3NpZmllcigpe3N3aXRjaCh0aGlzLmNsYXNzaWZpZXIpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fX19KTt2YXIgS1MsUWRlLHpwLFAxLHdQPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTt5dCgpO0d0KCk7cHIoKTtlcigpO2NpKCk7S2RlKCk7S1M9ImNsYXNzSWQtIixRZGU9MCx6cD1vKHQ9PlplLnNhbml0aXplVGV4dCh0LG1lKCkpLCJzYW5pdGl6ZVRleHQiKSxQMT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVsYXRpb25zPVtdO3RoaXMuY2xhc3Nlcz1uZXcgTWFwO3RoaXMuc3R5bGVDbGFzc2VzPW5ldyBNYXA7dGhpcy5ub3Rlcz1bXTt0aGlzLmludGVyZmFjZXM9W107dGhpcy5uYW1lc3BhY2VzPW5ldyBNYXA7dGhpcy5uYW1lc3BhY2VDb3VudGVyPTA7dGhpcy5mdW5jdGlvbnM9W107dGhpcy5saW5lVHlwZT17TElORTowLERPVFRFRF9MSU5FOjF9O3RoaXMucmVsYXRpb25UeXBlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozLExPTExJUE9QOjR9O3RoaXMuc2V0dXBUb29sVGlwcz1vKGU9PntsZXQgcj1HZSgiLm1lcm1haWRUb29sdGlwIik7KHIuX2dyb3Vwc3x8cilbMF1bMF09PT1udWxsJiYocj1HZSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksR2UoZSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGE9PntsZXQgcz1HZShhLmN1cnJlbnRUYXJnZXQpO2lmKHMuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2xldCB1PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ci50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45Iiksci50ZXh0KHMuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK3UubGVmdCsodS5yaWdodC11LmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrdS50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4Iiksci5odG1sKHIuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxzLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGE9PntyLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxHZShhLmN1cnJlbnRUYXJnZXQpLmNsYXNzZWQoImhvdmVyIiwhMSl9KX0sInNldHVwVG9vbFRpcHMiKTt0aGlzLmRpcmVjdGlvbj0iVEIiO3RoaXMuc2V0QWNjVGl0bGU9QXI7dGhpcy5nZXRBY2NUaXRsZT1Ecjt0aGlzLnNldEFjY0Rlc2NyaXB0aW9uPUxyO3RoaXMuZ2V0QWNjRGVzY3JpcHRpb249UnI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5nZXRDb25maWc9bygoKT0+bWUoKS5jbGFzcywiZ2V0Q29uZmlnIik7dGhpcy5mdW5jdGlvbnMucHVzaCh0aGlzLnNldHVwVG9vbFRpcHMuYmluZCh0aGlzKSksdGhpcy5jbGVhcigpLHRoaXMuYWRkUmVsYXRpb249dGhpcy5hZGRSZWxhdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlPXRoaXMuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlLmJpbmQodGhpcyksdGhpcy5hZGROYW1lc3BhY2U9dGhpcy5hZGROYW1lc3BhY2UuYmluZCh0aGlzKSx0aGlzLnNldENzc0NsYXNzPXRoaXMuc2V0Q3NzQ2xhc3MuYmluZCh0aGlzKSx0aGlzLmFkZE1lbWJlcnM9dGhpcy5hZGRNZW1iZXJzLmJpbmQodGhpcyksdGhpcy5hZGRDbGFzcz10aGlzLmFkZENsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRDbGFzc0xhYmVsPXRoaXMuc2V0Q2xhc3NMYWJlbC5iaW5kKHRoaXMpLHRoaXMuYWRkQW5ub3RhdGlvbj10aGlzLmFkZEFubm90YXRpb24uYmluZCh0aGlzKSx0aGlzLmFkZE1lbWJlcj10aGlzLmFkZE1lbWJlci5iaW5kKHRoaXMpLHRoaXMuY2xlYW51cExhYmVsPXRoaXMuY2xlYW51cExhYmVsLmJpbmQodGhpcyksdGhpcy5hZGROb3RlPXRoaXMuYWRkTm90ZS5iaW5kKHRoaXMpLHRoaXMuZGVmaW5lQ2xhc3M9dGhpcy5kZWZpbmVDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0RGlyZWN0aW9uPXRoaXMuc2V0RGlyZWN0aW9uLmJpbmQodGhpcyksdGhpcy5zZXRMaW5rPXRoaXMuc2V0TGluay5iaW5kKHRoaXMpLHRoaXMuYmluZEZ1bmN0aW9ucz10aGlzLmJpbmRGdW5jdGlvbnMuYmluZCh0aGlzKSx0aGlzLmNsZWFyPXRoaXMuY2xlYXIuYmluZCh0aGlzKSx0aGlzLnNldFRvb2x0aXA9dGhpcy5zZXRUb29sdGlwLmJpbmQodGhpcyksdGhpcy5zZXRDbGlja0V2ZW50PXRoaXMuc2V0Q2xpY2tFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2V0Q3NzU3R5bGU9dGhpcy5zZXRDc3NTdHlsZS5iaW5kKHRoaXMpfXN0YXRpY3tvKHRoaXMsIkNsYXNzREIiKX1zcGxpdENsYXNzTmFtZUFuZFR5cGUoZSl7bGV0IHI9WmUuc2FuaXRpemVUZXh0KGUsbWUoKSksbj0iIixpPXI7aWYoci5pbmRleE9mKCJ+Iik+MCl7bGV0IGE9ci5zcGxpdCgifiIpO2k9enAoYVswXSksbj16cChhWzFdKX1yZXR1cm57Y2xhc3NOYW1lOmksdHlwZTpufX1zZXRDbGFzc0xhYmVsKGUscil7bGV0IG49WmUuc2FuaXRpemVUZXh0KGUsbWUoKSk7ciYmKHI9enAocikpO2xldHtjbGFzc05hbWU6aX09dGhpcy5zcGxpdENsYXNzTmFtZUFuZFR5cGUobik7dGhpcy5jbGFzc2VzLmdldChpKS5sYWJlbD1yLHRoaXMuY2xhc3Nlcy5nZXQoaSkudGV4dD1gJHtyfSR7dGhpcy5jbGFzc2VzLmdldChpKS50eXBlP2A8JHt0aGlzLmNsYXNzZXMuZ2V0KGkpLnR5cGV9PmA6IiJ9YH1hZGRDbGFzcyhlKXtsZXQgcj1aZS5zYW5pdGl6ZVRleHQoZSxtZSgpKSx7Y2xhc3NOYW1lOm4sdHlwZTppfT10aGlzLnNwbGl0Q2xhc3NOYW1lQW5kVHlwZShyKTtpZih0aGlzLmNsYXNzZXMuaGFzKG4pKXJldHVybjtsZXQgYT1aZS5zYW5pdGl6ZVRleHQobixtZSgpKTt0aGlzLmNsYXNzZXMuc2V0KGEse2lkOmEsdHlwZTppLGxhYmVsOmEsdGV4dDpgJHthfSR7aT9gJmx0OyR7aX0mZ3Q7YDoiIn1gLHNoYXBlOiJjbGFzc0JveCIsY3NzQ2xhc3NlczoiZGVmYXVsdCIsbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLHN0eWxlczpbXSxkb21JZDpLUythKyItIitRZGV9KSxRZGUrK31hZGRJbnRlcmZhY2UoZSxyKXtsZXQgbj17aWQ6YGludGVyZmFjZSR7dGhpcy5pbnRlcmZhY2VzLmxlbmd0aH1gLGxhYmVsOmUsY2xhc3NJZDpyfTt0aGlzLmludGVyZmFjZXMucHVzaChuKX1sb29rVXBEb21JZChlKXtsZXQgcj1aZS5zYW5pdGl6ZVRleHQoZSxtZSgpKTtpZih0aGlzLmNsYXNzZXMuaGFzKHIpKXJldHVybiB0aGlzLmNsYXNzZXMuZ2V0KHIpLmRvbUlkO3Rocm93IG5ldyBFcnJvcigiQ2xhc3Mgbm90IGZvdW5kOiAiK3IpfWNsZWFyKCl7dGhpcy5yZWxhdGlvbnM9W10sdGhpcy5jbGFzc2VzPW5ldyBNYXAsdGhpcy5ub3Rlcz1bXSx0aGlzLmludGVyZmFjZXM9W10sdGhpcy5mdW5jdGlvbnM9W10sdGhpcy5mdW5jdGlvbnMucHVzaCh0aGlzLnNldHVwVG9vbFRpcHMuYmluZCh0aGlzKSksdGhpcy5uYW1lc3BhY2VzPW5ldyBNYXAsdGhpcy5uYW1lc3BhY2VDb3VudGVyPTAsdGhpcy5kaXJlY3Rpb249IlRCIixrcigpfWdldENsYXNzKGUpe3JldHVybiB0aGlzLmNsYXNzZXMuZ2V0KGUpfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfWdldFJlbGF0aW9ucygpe3JldHVybiB0aGlzLnJlbGF0aW9uc31nZXROb3Rlcygpe3JldHVybiB0aGlzLm5vdGVzfWFkZFJlbGF0aW9uKGUpe1guZGVidWcoIkFkZGluZyByZWxhdGlvbjogIitKU09OLnN0cmluZ2lmeShlKSk7bGV0IHI9W3RoaXMucmVsYXRpb25UeXBlLkxPTExJUE9QLHRoaXMucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OLHRoaXMucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OLHRoaXMucmVsYXRpb25UeXBlLkRFUEVOREVOQ1ksdGhpcy5yZWxhdGlvblR5cGUuRVhURU5TSU9OXTtlLnJlbGF0aW9uLnR5cGUxPT09dGhpcy5yZWxhdGlvblR5cGUuTE9MTElQT1AmJiFyLmluY2x1ZGVzKGUucmVsYXRpb24udHlwZTIpPyh0aGlzLmFkZENsYXNzKGUuaWQyKSx0aGlzLmFkZEludGVyZmFjZShlLmlkMSxlLmlkMiksZS5pZDE9YGludGVyZmFjZSR7dGhpcy5pbnRlcmZhY2VzLmxlbmd0aC0xfWApOmUucmVsYXRpb24udHlwZTI9PT10aGlzLnJlbGF0aW9uVHlwZS5MT0xMSVBPUCYmIXIuaW5jbHVkZXMoZS5yZWxhdGlvbi50eXBlMSk/KHRoaXMuYWRkQ2xhc3MoZS5pZDEpLHRoaXMuYWRkSW50ZXJmYWNlKGUuaWQyLGUuaWQxKSxlLmlkMj1gaW50ZXJmYWNlJHt0aGlzLmludGVyZmFjZXMubGVuZ3RoLTF9YCk6KHRoaXMuYWRkQ2xhc3MoZS5pZDEpLHRoaXMuYWRkQ2xhc3MoZS5pZDIpKSxlLmlkMT10aGlzLnNwbGl0Q2xhc3NOYW1lQW5kVHlwZShlLmlkMSkuY2xhc3NOYW1lLGUuaWQyPXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKGUuaWQyKS5jbGFzc05hbWUsZS5yZWxhdGlvblRpdGxlMT1aZS5zYW5pdGl6ZVRleHQoZS5yZWxhdGlvblRpdGxlMS50cmltKCksbWUoKSksZS5yZWxhdGlvblRpdGxlMj1aZS5zYW5pdGl6ZVRleHQoZS5yZWxhdGlvblRpdGxlMi50cmltKCksbWUoKSksdGhpcy5yZWxhdGlvbnMucHVzaChlKX1hZGRBbm5vdGF0aW9uKGUscil7bGV0IG49dGhpcy5zcGxpdENsYXNzTmFtZUFuZFR5cGUoZSkuY2xhc3NOYW1lO3RoaXMuY2xhc3Nlcy5nZXQobikuYW5ub3RhdGlvbnMucHVzaChyKX1hZGRNZW1iZXIoZSxyKXt0aGlzLmFkZENsYXNzKGUpO2xldCBuPXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKGUpLmNsYXNzTmFtZSxpPXRoaXMuY2xhc3Nlcy5nZXQobik7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgYT1yLnRyaW0oKTthLnN0YXJ0c1dpdGgoIjw8IikmJmEuZW5kc1dpdGgoIj4+Iik/aS5hbm5vdGF0aW9ucy5wdXNoKHpwKGEuc3Vic3RyaW5nKDIsYS5sZW5ndGgtMikpKTphLmluZGV4T2YoIikiKT4wP2kubWV0aG9kcy5wdXNoKG5ldyBJYihhLCJtZXRob2QiKSk6YSYmaS5tZW1iZXJzLnB1c2gobmV3IEliKGEsImF0dHJpYnV0ZSIpKX19YWRkTWVtYmVycyhlLHIpe0FycmF5LmlzQXJyYXkocikmJihyLnJldmVyc2UoKSxyLmZvckVhY2gobj0+dGhpcy5hZGRNZW1iZXIoZSxuKSkpfWFkZE5vdGUoZSxyKXtsZXQgbj17aWQ6YG5vdGUke3RoaXMubm90ZXMubGVuZ3RofWAsY2xhc3M6cix0ZXh0OmV9O3RoaXMubm90ZXMucHVzaChuKX1jbGVhbnVwTGFiZWwoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiOiIpJiYoZT1lLnN1YnN0cmluZygxKSksenAoZS50cmltKCkpfXNldENzc0NsYXNzKGUscil7ZS5zcGxpdCgiLCIpLmZvckVhY2gobj0+e2xldCBpPW47L1xkLy5leGVjKG5bMF0pJiYoaT1LUytpKTtsZXQgYT10aGlzLmNsYXNzZXMuZ2V0KGkpO2EmJihhLmNzc0NsYXNzZXMrPSIgIityKX0pfWRlZmluZUNsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuc3R5bGVDbGFzc2VzLmdldChuKTtpPT09dm9pZCAwJiYoaT17aWQ6bixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sdGhpcy5zdHlsZUNsYXNzZXMuc2V0KG4saSkpLHImJnIuZm9yRWFjaChhPT57aWYoL2NvbG9yLy5leGVjKGEpKXtsZXQgcz1hLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKTtpLnRleHRTdHlsZXMucHVzaChzKX1pLnN0eWxlcy5wdXNoKGEpfSksdGhpcy5jbGFzc2VzLmZvckVhY2goYT0+e2EuY3NzQ2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5zdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KX19c2V0VG9vbHRpcChlLHIpe2Uuc3BsaXQoIiwiKS5mb3JFYWNoKG49PntyIT09dm9pZCAwJiYodGhpcy5jbGFzc2VzLmdldChuKS50b29sdGlwPXpwKHIpKX0pfWdldFRvb2x0aXAoZSxyKXtyZXR1cm4gciYmdGhpcy5uYW1lc3BhY2VzLmhhcyhyKT90aGlzLm5hbWVzcGFjZXMuZ2V0KHIpLmNsYXNzZXMuZ2V0KGUpLnRvb2x0aXA6dGhpcy5jbGFzc2VzLmdldChlKS50b29sdGlwfXNldExpbmsoZSxyLG4pe2xldCBpPW1lKCk7ZS5zcGxpdCgiLCIpLmZvckVhY2goYT0+e2xldCBzPWE7L1xkLy5leGVjKGFbMF0pJiYocz1LUytzKTtsZXQgbD10aGlzLmNsYXNzZXMuZ2V0KHMpO2wmJihsLmxpbms9VnQuZm9ybWF0VXJsKHIsaSksaS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP2wubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIG49PSJzdHJpbmciP2wubGlua1RhcmdldD16cChuKTpsLmxpbmtUYXJnZXQ9Il9ibGFuayIpfSksdGhpcy5zZXRDc3NDbGFzcyhlLCJjbGlja2FibGUiKX1zZXRDbGlja0V2ZW50KGUscixuKXtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57dGhpcy5zZXRDbGlja0Z1bmMoaSxyLG4pLHRoaXMuY2xhc3Nlcy5nZXQoaSkuaGF2ZUNhbGxiYWNrPSEwfSksdGhpcy5zZXRDc3NDbGFzcyhlLCJjbGlja2FibGUiKX1zZXRDbGlja0Z1bmMoZSxyLG4pe2xldCBpPVplLnNhbml0aXplVGV4dChlLG1lKCkpO2lmKG1lKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fHI9PT12b2lkIDApcmV0dXJuO2xldCBzPWk7aWYodGhpcy5jbGFzc2VzLmhhcyhzKSl7bGV0IGw9dGhpcy5sb29rVXBEb21JZChzKSx1PVtdO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dT1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXtsZXQgZj11W2hdLnRyaW0oKTtmLnN0YXJ0c1dpdGgoJyInKSYmZi5lbmRzV2l0aCgnIicpJiYoZj1mLnN1YnN0cigxLGYubGVuZ3RoLTIpKSx1W2hdPWZ9fXUubGVuZ3RoPT09MCYmdS5wdXNoKGwpLHRoaXMuZnVuY3Rpb25zLnB1c2goKCk9PntsZXQgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7bH0iXWApO2ghPT1udWxsJiZoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e1Z0LnJ1bkZ1bmMociwuLi51KX0sITEpfSl9fWJpbmRGdW5jdGlvbnMoZSl7dGhpcy5mdW5jdGlvbnMuZm9yRWFjaChyPT57cihlKX0pfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmRpcmVjdGlvbn1zZXREaXJlY3Rpb24oZSl7dGhpcy5kaXJlY3Rpb249ZX1hZGROYW1lc3BhY2UoZSl7dGhpcy5uYW1lc3BhY2VzLmhhcyhlKXx8KHRoaXMubmFtZXNwYWNlcy5zZXQoZSx7aWQ6ZSxjbGFzc2VzOm5ldyBNYXAsY2hpbGRyZW46e30sZG9tSWQ6S1MrZSsiLSIrdGhpcy5uYW1lc3BhY2VDb3VudGVyfSksdGhpcy5uYW1lc3BhY2VDb3VudGVyKyspfWdldE5hbWVzcGFjZShlKXtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzLmdldChlKX1nZXROYW1lc3BhY2VzKCl7cmV0dXJuIHRoaXMubmFtZXNwYWNlc31hZGRDbGFzc2VzVG9OYW1lc3BhY2UoZSxyKXtpZih0aGlzLm5hbWVzcGFjZXMuaGFzKGUpKWZvcihsZXQgbiBvZiByKXtsZXR7Y2xhc3NOYW1lOml9PXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKG4pO3RoaXMuY2xhc3Nlcy5nZXQoaSkucGFyZW50PWUsdGhpcy5uYW1lc3BhY2VzLmdldChlKS5jbGFzc2VzLnNldChpLHRoaXMuY2xhc3Nlcy5nZXQoaSkpfX1zZXRDc3NTdHlsZShlLHIpe2xldCBuPXRoaXMuY2xhc3Nlcy5nZXQoZSk7aWYoISghcnx8IW4pKWZvcihsZXQgaSBvZiByKWkuaW5jbHVkZXMoIiwiKT9uLnN0eWxlcy5wdXNoKC4uLmkuc3BsaXQoIiwiKSk6bi5zdHlsZXMucHVzaChpKX1nZXRBcnJvd01hcmtlcihlKXtsZXQgcjtzd2l0Y2goZSl7Y2FzZSAwOnI9ImFnZ3JlZ2F0aW9uIjticmVhaztjYXNlIDE6cj0iZXh0ZW5zaW9uIjticmVhaztjYXNlIDI6cj0iY29tcG9zaXRpb24iO2JyZWFrO2Nhc2UgMzpyPSJkZXBlbmRlbmN5IjticmVhaztjYXNlIDQ6cj0ibG9sbGlwb3AiO2JyZWFrO2RlZmF1bHQ6cj0ibm9uZSJ9cmV0dXJuIHJ9Z2V0RGF0YSgpe2xldCBlPVtdLHI9W10sbj1tZSgpO2ZvcihsZXQgYSBvZiB0aGlzLm5hbWVzcGFjZXMua2V5cygpKXtsZXQgcz10aGlzLm5hbWVzcGFjZXMuZ2V0KGEpO2lmKHMpe2xldCBsPXtpZDpzLmlkLGxhYmVsOnMuaWQsaXNHcm91cDohMCxwYWRkaW5nOm4uY2xhc3MucGFkZGluZz8/MTYsc2hhcGU6InJlY3QiLGNzc1N0eWxlczpbImZpbGw6IG5vbmUiLCJzdHJva2U6IGJsYWNrIl0sbG9vazpuLmxvb2t9O2UucHVzaChsKX19Zm9yKGxldCBhIG9mIHRoaXMuY2xhc3Nlcy5rZXlzKCkpe2xldCBzPXRoaXMuY2xhc3Nlcy5nZXQoYSk7aWYocyl7bGV0IGw9cztsLnBhcmVudElkPXMucGFyZW50LGwubG9vaz1uLmxvb2ssZS5wdXNoKGwpfX1sZXQgaT0wO2ZvcihsZXQgYSBvZiB0aGlzLm5vdGVzKXtpKys7bGV0IHM9e2lkOmEuaWQsbGFiZWw6YS50ZXh0LGlzR3JvdXA6ITEsc2hhcGU6Im5vdGUiLHBhZGRpbmc6bi5jbGFzcy5wYWRkaW5nPz82LGNzc1N0eWxlczpbInRleHQtYWxpZ246IGxlZnQiLCJ3aGl0ZS1zcGFjZTogbm93cmFwIixgZmlsbDogJHtuLnRoZW1lVmFyaWFibGVzLm5vdGVCa2dDb2xvcn1gLGBzdHJva2U6ICR7bi50aGVtZVZhcmlhYmxlcy5ub3RlQm9yZGVyQ29sb3J9YF0sbG9vazpuLmxvb2t9O2UucHVzaChzKTtsZXQgbD10aGlzLmNsYXNzZXMuZ2V0KGEuY2xhc3MpPy5pZD8/IiI7aWYobCl7bGV0IHU9e2lkOmBlZGdlTm90ZSR7aX1gLHN0YXJ0OmEuaWQsZW5kOmwsdHlwZToibm9ybWFsIix0aGlja25lc3M6Im5vcm1hbCIsY2xhc3NlczoicmVsYXRpb24iLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLGFycm93aGVhZFN0eWxlOiIiLGxhYmVsU3R5bGU6WyIiXSxzdHlsZTpbImZpbGw6IG5vbmUiXSxwYXR0ZXJuOiJkb3R0ZWQiLGxvb2s6bi5sb29rfTtyLnB1c2godSl9fWZvcihsZXQgYSBvZiB0aGlzLmludGVyZmFjZXMpe2xldCBzPXtpZDphLmlkLGxhYmVsOmEubGFiZWwsaXNHcm91cDohMSxzaGFwZToicmVjdCIsY3NzU3R5bGVzOlsib3BhY2l0eTogMDsiXSxsb29rOm4ubG9va307ZS5wdXNoKHMpfWk9MDtmb3IobGV0IGEgb2YgdGhpcy5yZWxhdGlvbnMpe2krKztsZXQgcz17aWQ6V2goYS5pZDEsYS5pZDIse3ByZWZpeDoiaWQiLGNvdW50ZXI6aX0pLHN0YXJ0OmEuaWQxLGVuZDphLmlkMix0eXBlOiJub3JtYWwiLGxhYmVsOmEudGl0bGUsbGFiZWxwb3M6ImMiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJyZWxhdGlvbiIsYXJyb3dUeXBlU3RhcnQ6dGhpcy5nZXRBcnJvd01hcmtlcihhLnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6dGhpcy5nZXRBcnJvd01hcmtlcihhLnJlbGF0aW9uLnR5cGUyKSxzdGFydExhYmVsUmlnaHQ6YS5yZWxhdGlvblRpdGxlMT09PSJub25lIj8iIjphLnJlbGF0aW9uVGl0bGUxLGVuZExhYmVsTGVmdDphLnJlbGF0aW9uVGl0bGUyPT09Im5vbmUiPyIiOmEucmVsYXRpb25UaXRsZTIsYXJyb3doZWFkU3R5bGU6IiIsbGFiZWxTdHlsZTpbImRpc3BsYXk6IGlubGluZS1ibG9jayJdLHN0eWxlOmEuc3R5bGV8fCIiLHBhdHRlcm46YS5yZWxhdGlvbi5saW5lVHlwZT09MT8iZGFzaGVkIjoic29saWQiLGxvb2s6bi5sb29rfTtyLnB1c2gocyl9cmV0dXJue25vZGVzOmUsZWRnZXM6cixvdGhlcjp7fSxjb25maWc6bixkaXJlY3Rpb246dGhpcy5nZXREaXJlY3Rpb24oKX19fX0pO3ZhciBrSGUsUVMsa1A9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYbSgpO2tIZT1vKHQ9PmBnLmNsYXNzR3JvdXAgdGV4dCB7CiAgZmlsbDogJHt0Lm5vZGVCb3JkZXJ8fHQuY2xhc3NUZXh0fTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICBmb250LXNpemU6IDEwcHg7CgogIC50aXRsZSB7CiAgICBmb250LXdlaWdodDogYm9sZGVyOwogIH0KCn0KCi5ub2RlTGFiZWwsIC5lZGdlTGFiZWwgewogIGNvbG9yOiAke3QuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307Cn0KLmxhYmVsIHRleHQgewogIGZpbGw6ICR7dC5jbGFzc1RleHR9Owp9CgoubGFiZWxCa2cgewogIGJhY2tncm91bmQ6ICR7dC5tYWluQmtnfTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke3QubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke3Qubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7dC5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHt0LnRleHRDb2xvcn07Cn0KICAke05jKCl9CmAsImdldFN0eWxlcyIpLFFTPWtIZX0pO3ZhciBFSGUsU0hlLENIZSxaUyxFUD1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtTbSgpO3JwKCk7bnAoKTtlcigpO0VIZT1vKCh0LGU9IlRCIik9PntpZighdC5kb2MpcmV0dXJuIGU7bGV0IHI9ZTtmb3IobGV0IG4gb2YgdC5kb2Mpbi5zdG10PT09ImRpciImJihyPW4udmFsdWUpO3JldHVybiByfSwiZ2V0RGlyIiksU0hlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksQ0hlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyBjbGFzcyBkaWFncmFtICh2MykiLGUpO2xldHtzZWN1cml0eUxldmVsOmksc3RhdGU6YSxsYXlvdXQ6c309bWUoKSxsPW4uZGIuZ2V0RGF0YSgpLHU9d2MoZSxpKTtsLnR5cGU9bi50eXBlLGwubGF5b3V0QWxnb3JpdGhtPXVmKHMpLGwubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGwucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGwubWFya2Vycz1bImFnZ3JlZ2F0aW9uIiwiZXh0ZW5zaW9uIiwiY29tcG9zaXRpb24iLCJkZXBlbmRlbmN5IiwibG9sbGlwb3AiXSxsLmRpYWdyYW1JZD1lLGF3YWl0IFJjKGwsdSk7bGV0IGg9ODtWdC5pbnNlcnRUaXRsZSh1LCJjbGFzc0RpYWdyYW1UaXRsZVRleHQiLGE/LnRpdGxlVG9wTWFyZ2luPz8yNSxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSxZbyh1LGgsImNsYXNzRGlhZ3JhbSIsYT8udXNlTWF4V2lkdGg/PyEwKX0sImRyYXciKSxaUz17Z2V0Q2xhc3NlczpTSGUsZHJhdzpDSGUsZ2V0RGlyOkVIZX19KTt2YXIgWmRlPXt9O3VyKFpkZSx7ZGlhZ3JhbTooKT0+QUhlfSk7dmFyIEFIZSxKZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUUCgpO3dQKCk7a1AoKTtFUCgpO0FIZT17cGFyc2VyOmpTLGdldCBkYigpe3JldHVybiBuZXcgUDF9LHJlbmRlcmVyOlpTLHN0eWxlczpRUyxpbml0Om8odD0+e3QuY2xhc3N8fCh0LmNsYXNzPXt9KSx0LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlfSwiaW5pdCIpfX0pO3ZhciBycGU9e307dXIocnBlLHtkaWFncmFtOigpPT5SSGV9KTt2YXIgUkhlLG5wZT1OKCgpPT57InVzZSBzdHJpY3QiO1RQKCk7d1AoKTtrUCgpO0VQKCk7UkhlPXtwYXJzZXI6alMsZ2V0IGRiKCl7cmV0dXJuIG5ldyBQMX0scmVuZGVyZXI6WlMsc3R5bGVzOlFTLGluaXQ6byh0PT57dC5jbGFzc3x8KHQuY2xhc3M9e30pLHQuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIFNQLEpTLENQPU4oKCk9PnsidXNlIHN0cmljdCI7U1A9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEYseiwkLFUpe2ZvcigkPSR8fHt9LFU9Ri5sZW5ndGg7VS0tOyRbRltVXV09eik7cmV0dXJuICR9LCJvIiksZT1bMSwyXSxyPVsxLDNdLG49WzEsNF0saT1bMiw0XSxhPVsxLDldLHM9WzEsMTFdLGw9WzEsMTZdLHU9WzEsMTddLGg9WzEsMThdLGY9WzEsMTldLGQ9WzEsMzNdLHA9WzEsMjBdLG09WzEsMjFdLGc9WzEsMjJdLHk9WzEsMjNdLHY9WzEsMjRdLHg9WzEsMjZdLGI9WzEsMjddLFQ9WzEsMjhdLFM9WzEsMjldLHc9WzEsMzBdLEU9WzEsMzFdLF89WzEsMzJdLEM9WzEsMzVdLEQ9WzEsMzZdLE89WzEsMzddLFI9WzEsMzhdLGs9WzEsMzRdLEw9WzEsNCw1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQxLDQ1LDQ4LDUxLDUyLDUzLDU0LDU3XSxBPVsxLDQsNSwxNCwxNSwxNiwxNywxOSwyMSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMywzNSwzNywzOCwzOSw0MCw0MSw0NSw0OCw1MSw1Miw1Myw1NCw1N10sST1bNCw1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQxLDQ1LDQ4LDUxLDUyLDUzLDU0LDU3XSxNPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGNsYXNzRGVmU3RhdGVtZW50OjEwLHN0eWxlU3RhdGVtZW50OjExLGNzc0NsYXNzU3RhdGVtZW50OjEyLGlkU3RhdGVtZW50OjEzLERFU0NSOjE0LCItLT4iOjE1LEhJREVfRU1QVFk6MTYsc2NhbGU6MTcsV0lEVEg6MTgsQ09NUE9TSVRfU1RBVEU6MTksU1RSVUNUX1NUQVJUOjIwLFNUUlVDVF9TVE9QOjIxLFNUQVRFX0RFU0NSOjIyLEFTOjIzLElEOjI0LEZPUks6MjUsSk9JTjoyNixDSE9JQ0U6MjcsQ09OQ1VSUkVOVDoyOCxub3RlOjI5LG5vdGVQb3NpdGlvbjozMCxOT1RFX1RFWFQ6MzEsZGlyZWN0aW9uOjMyLGFjY190aXRsZTozMyxhY2NfdGl0bGVfdmFsdWU6MzQsYWNjX2Rlc2NyOjM1LGFjY19kZXNjcl92YWx1ZTozNixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM3LENMSUNLOjM4LFNUUklORzozOSxIUkVGOjQwLGNsYXNzRGVmOjQxLENMQVNTREVGX0lEOjQyLENMQVNTREVGX1NUWUxFT1BUUzo0MyxERUZBVUxUOjQ0LHN0eWxlOjQ1LFNUWUxFX0lEUzo0NixTVFlMRURFRl9TVFlMRU9QVFM6NDcsY2xhc3M6NDgsQ0xBU1NFTlRJVFlfSURTOjQ5LFNUWUxFQ0xBU1M6NTAsZGlyZWN0aW9uX3RiOjUxLGRpcmVjdGlvbl9idDo1MixkaXJlY3Rpb25fcmw6NTMsZGlyZWN0aW9uX2xyOjU0LGVvbDo1NSwiOyI6NTYsRURHRV9TVEFURTo1NyxTVFlMRV9TRVBBUkFUT1I6NTgsbGVmdF9vZjo1OSxyaWdodF9vZjo2MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw2OiJTRCIsMTQ6IkRFU0NSIiwxNToiLS0+IiwxNjoiSElERV9FTVBUWSIsMTc6InNjYWxlIiwxODoiV0lEVEgiLDE5OiJDT01QT1NJVF9TVEFURSIsMjA6IlNUUlVDVF9TVEFSVCIsMjE6IlNUUlVDVF9TVE9QIiwyMjoiU1RBVEVfREVTQ1IiLDIzOiJBUyIsMjQ6IklEIiwyNToiRk9SSyIsMjY6IkpPSU4iLDI3OiJDSE9JQ0UiLDI4OiJDT05DVVJSRU5UIiwyOToibm90ZSIsMzE6Ik5PVEVfVEVYVCIsMzM6ImFjY190aXRsZSIsMzQ6ImFjY190aXRsZV92YWx1ZSIsMzU6ImFjY19kZXNjciIsMzY6ImFjY19kZXNjcl92YWx1ZSIsMzc6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM4OiJDTElDSyIsMzk6IlNUUklORyIsNDA6IkhSRUYiLDQxOiJjbGFzc0RlZiIsNDI6IkNMQVNTREVGX0lEIiw0MzoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0NDoiREVGQVVMVCIsNDU6InN0eWxlIiw0NjoiU1RZTEVfSURTIiw0NzoiU1RZTEVERUZfU1RZTEVPUFRTIiw0ODoiY2xhc3MiLDQ5OiJDTEFTU0VOVElUWV9JRFMiLDUwOiJTVFlMRUNMQVNTIiw1MToiZGlyZWN0aW9uX3RiIiw1MjoiZGlyZWN0aW9uX2J0Iiw1MzoiZGlyZWN0aW9uX3JsIiw1NDoiZGlyZWN0aW9uX2xyIiw1NjoiOyIsNTc6IkVER0VfU1RBVEUiLDU4OiJTVFlMRV9TRVBBUkFUT1IiLDU5OiJsZWZ0X29mIiw2MDoicmlnaHRfb2YifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksM10sWzksNF0sWzksMV0sWzksMl0sWzksMV0sWzksNF0sWzksM10sWzksNl0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksNF0sWzksNF0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksNV0sWzksNV0sWzEwLDNdLFsxMCwzXSxbMTEsM10sWzEyLDNdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbNTUsMV0sWzU1LDFdLFsxMywxXSxbMTMsMV0sWzEzLDNdLFsxMywzXSxbMzAsMV0sWzMwLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oeiwkLFUsSyxlZSxZLGNlKXt2YXIgWj1ZLmxlbmd0aC0xO3N3aXRjaChlZSl7Y2FzZSAzOnJldHVybiBLLnNldFJvb3REb2MoWVtaXSksWVtaXTticmVhaztjYXNlIDQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpZW1pdIT0ibmwiJiYoWVtaLTFdLnB1c2goWVtaXSksdGhpcy4kPVlbWi0xXSk7YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9WVtaXTticmVhaztjYXNlIDg6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9WVtaXTticmVhaztjYXNlIDEzOmxldCBuZT1ZW1otMV07bmUuZGVzY3JpcHRpb249Sy50cmltQ29sb24oWVtaXSksdGhpcy4kPW5lO2JyZWFrO2Nhc2UgMTQ6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOllbWi0yXSxzdGF0ZTI6WVtaXX07YnJlYWs7Y2FzZSAxNTpsZXQgdGU9Sy50cmltQ29sb24oWVtaXSk7dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOllbWi0zXSxzdGF0ZTI6WVtaLTFdLGRlc2NyaXB0aW9uOnRlfTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOllbWi0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6WVtaLTFdfTticmVhaztjYXNlIDIwOnZhciB1ZT1ZW1pdLFE9WVtaLTJdLnRyaW0oKTtpZihZW1pdLm1hdGNoKCI6Iikpe3ZhciBqPVlbWl0uc3BsaXQoIjoiKTt1ZT1qWzBdLFE9W1EsalsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6dWUsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246UX07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1otM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246WVtaLTVdLGRvYzpZW1otMV19O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6WVtaXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1pdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOllbWl0sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpLLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI2OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOllbWi0xXS50cmltKCksbm90ZTp7cG9zaXRpb246WVtaLTJdLnRyaW0oKSx0ZXh0OllbWl0udHJpbSgpfX07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9WVtaXS50cmltKCksSy5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp0aGlzLiQ9WVtaXS50cmltKCksSy5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXtzdG10OiJjbGljayIsaWQ6WVtaLTNdLHVybDpZW1otMl0sdG9vbHRpcDpZW1otMV19O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtzdG10OiJjbGljayIsaWQ6WVtaLTNdLHVybDpZW1otMV0sdG9vbHRpcDoiIn07YnJlYWs7Y2FzZSAzNDpjYXNlIDM1OnRoaXMuJD17c3RtdDoiY2xhc3NEZWYiLGlkOllbWi0xXS50cmltKCksY2xhc3NlczpZW1pdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9e3N0bXQ6InN0eWxlIixpZDpZW1otMV0udHJpbSgpLHN0eWxlQ2xhc3M6WVtaXS50cmltKCl9O2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXtzdG10OiJhcHBseUNsYXNzIixpZDpZW1otMV0udHJpbSgpLHN0eWxlQ2xhc3M6WVtaXS50cmltKCl9O2JyZWFrO2Nhc2UgMzg6Sy5zZXREaXJlY3Rpb24oIlRCIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMzk6Sy5zZXREaXJlY3Rpb24oIkJUIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgNDA6Sy5zZXREaXJlY3Rpb24oIlJMIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgNDE6Sy5zZXREaXJlY3Rpb24oIkxSIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9O2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0NTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1pdLnRyaW0oKSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1otMl0udHJpbSgpLGNsYXNzZXM6W1lbWl0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1otMl0udHJpbSgpLGNsYXNzZXM6W1lbWl0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDplLDU6ciw2Om59LHsxOlszXX0sezM6NSw0OmUsNTpyLDY6bn0sezM6Niw0OmUsNTpyLDY6bn0sdChbMSw0LDUsMTYsMTcsMTksMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDEsNDUsNDgsNTEsNTIsNTMsNTQsNTddLGksezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDphLDU6cyw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxMzoxNSwxNjpsLDE3OnUsMTk6aCwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzpULDM4OlMsNDE6dyw0NTpFLDQ4Ol8sNTE6Qyw1MjpELDUzOk8sNTQ6Uiw1NzprfSx0KEwsWzIsNV0pLHs5OjM5LDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OlQsMzg6Uyw0MTp3LDQ1OkUsNDg6Xyw1MTpDLDUyOkQsNTM6Tyw1NDpSLDU3Omt9LHQoTCxbMiw3XSksdChMLFsyLDhdKSx0KEwsWzIsOV0pLHQoTCxbMiwxMF0pLHQoTCxbMiwxMV0pLHQoTCxbMiwxMl0sezE0OlsxLDQwXSwxNTpbMSw0MV19KSx0KEwsWzIsMTZdKSx7MTg6WzEsNDJdfSx0KEwsWzIsMThdLHsyMDpbMSw0M119KSx7MjM6WzEsNDRdfSx0KEwsWzIsMjJdKSx0KEwsWzIsMjNdKSx0KEwsWzIsMjRdKSx0KEwsWzIsMjVdKSx7MzA6NDUsMzE6WzEsNDZdLDU5OlsxLDQ3XSw2MDpbMSw0OF19LHQoTCxbMiwyOF0pLHszNDpbMSw0OV19LHszNjpbMSw1MF19LHQoTCxbMiwzMV0pLHsxMzo1MSwyNDpkLDU3Omt9LHs0MjpbMSw1Ml0sNDQ6WzEsNTNdfSx7NDY6WzEsNTRdfSx7NDk6WzEsNTVdfSx0KEEsWzIsNDRdLHs1ODpbMSw1Nl19KSx0KEEsWzIsNDVdLHs1ODpbMSw1N119KSx0KEwsWzIsMzhdKSx0KEwsWzIsMzldKSx0KEwsWzIsNDBdKSx0KEwsWzIsNDFdKSx0KEwsWzIsNl0pLHQoTCxbMiwxM10pLHsxMzo1OCwyNDpkLDU3Omt9LHQoTCxbMiwxN10pLHQoSSxpLHs3OjU5fSksezI0OlsxLDYwXX0sezI0OlsxLDYxXX0sezIzOlsxLDYyXX0sezI0OlsyLDQ4XX0sezI0OlsyLDQ5XX0sdChMLFsyLDI5XSksdChMLFsyLDMwXSksezM5OlsxLDYzXSw0MDpbMSw2NF19LHs0MzpbMSw2NV19LHs0MzpbMSw2Nl19LHs0NzpbMSw2N119LHs1MDpbMSw2OF19LHsyNDpbMSw2OV19LHsyNDpbMSw3MF19LHQoTCxbMiwxNF0sezE0OlsxLDcxXX0pLHs0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIxOlsxLDcyXSwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzpULDM4OlMsNDE6dyw0NTpFLDQ4Ol8sNTE6Qyw1MjpELDUzOk8sNTQ6Uiw1NzprfSx0KEwsWzIsMjBdLHsyMDpbMSw3M119KSx7MzE6WzEsNzRdfSx7MjQ6WzEsNzVdfSx7Mzk6WzEsNzZdfSx7Mzk6WzEsNzddfSx0KEwsWzIsMzRdKSx0KEwsWzIsMzVdKSx0KEwsWzIsMzZdKSx0KEwsWzIsMzddKSx0KEEsWzIsNDZdKSx0KEEsWzIsNDddKSx0KEwsWzIsMTVdKSx0KEwsWzIsMTldKSx0KEksaSx7Nzo3OH0pLHQoTCxbMiwyNl0pLHQoTCxbMiwyN10pLHs1OlsxLDc5XX0sezU6WzEsODBdfSx7NDphLDU6cyw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxMzoxNSwxNjpsLDE3OnUsMTk6aCwyMTpbMSw4MV0sMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6VCwzODpTLDQxOncsNDU6RSw0ODpfLDUxOkMsNTI6RCw1MzpPLDU0OlIsNTc6a30sdChMLFsyLDMyXSksdChMLFsyLDMzXSksdChMLFsyLDIxXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDc6WzIsNDhdLDQ4OlsyLDQ5XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHosJCl7aWYoJC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHopO2Vsc2V7dmFyIFU9bmV3IEVycm9yKHopO3Rocm93IFUuaGFzaD0kLFV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oeil7dmFyICQ9dGhpcyxVPVswXSxLPVtdLGVlPVtudWxsXSxZPVtdLGNlPXRoaXMudGFibGUsWj0iIix1ZT0wLFE9MCxqPTAsbmU9Mix0ZT0xLGhlPVkuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbGU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxKPXt5eTp7fX07Zm9yKHZhciBTZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFNlKSYmKEoueXlbU2VdPXRoaXMueXlbU2VdKTtsZS5zZXRJbnB1dCh6LEoueXkpLEoueXkubGV4ZXI9bGUsSi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbGUueXlsbG9jPiJ1IiYmKGxlLnl5bGxvYz17fSk7dmFyIHNlPWxlLnl5bGxvYztZLnB1c2goc2UpO3ZhciBhZT1sZS5vcHRpb25zJiZsZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgSi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1KLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE9lKFcpe1UubGVuZ3RoPVUubGVuZ3RoLTIqVyxlZS5sZW5ndGg9ZWUubGVuZ3RoLVcsWS5sZW5ndGg9WS5sZW5ndGgtV31vKE9lLCJwb3BTdGFjayIpO2Z1bmN0aW9uIHllKCl7dmFyIFc7cmV0dXJuIFc9Sy5wb3AoKXx8bGUubGV4KCl8fHRlLHR5cGVvZiBXIT0ibnVtYmVyIiYmKFcgaW5zdGFuY2VvZiBBcnJheSYmKEs9VyxXPUsucG9wKCkpLFc9JC5zeW1ib2xzX1tXXXx8VyksV31vKHllLCJsZXgiKTtmb3IodmFyIEJlLEhlLHplLExlLEllLHhlLHE9e30sZGUsaWUsb2UsVjs7KXtpZih6ZT1VW1UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbemVdP0xlPXRoaXMuZGVmYXVsdEFjdGlvbnNbemVdOigoQmU9PT1udWxsfHx0eXBlb2YgQmU+InUiKSYmKEJlPXllKCkpLExlPWNlW3plXSYmY2VbemVdW0JlXSksdHlwZW9mIExlPiJ1Inx8IUxlLmxlbmd0aHx8IUxlWzBdKXt2YXIgVGU9IiI7Vj1bXTtmb3IoZGUgaW4gY2VbemVdKXRoaXMudGVybWluYWxzX1tkZV0mJmRlPm5lJiZWLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tkZV0rIiciKTtsZS5zaG93UG9zaXRpb24/VGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodWUrMSkrYDoKYCtsZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1Yuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tCZV18fEJlKSsiJyI6VGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodWUrMSkrIjogVW5leHBlY3RlZCAiKyhCZT09dGU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bQmVdfHxCZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoVGUse3RleHQ6bGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0JlXXx8QmUsbGluZTpsZS55eWxpbmVubyxsb2M6c2UsZXhwZWN0ZWQ6Vn0pfWlmKExlWzBdaW5zdGFuY2VvZiBBcnJheSYmTGUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit6ZSsiLCB0b2tlbjogIitCZSk7c3dpdGNoKExlWzBdKXtjYXNlIDE6VS5wdXNoKEJlKSxlZS5wdXNoKGxlLnl5dGV4dCksWS5wdXNoKGxlLnl5bGxvYyksVS5wdXNoKExlWzFdKSxCZT1udWxsLEhlPyhCZT1IZSxIZT1udWxsKTooUT1sZS55eWxlbmcsWj1sZS55eXRleHQsdWU9bGUueXlsaW5lbm8sc2U9bGUueXlsbG9jLGo+MCYmai0tKTticmVhaztjYXNlIDI6aWYoaWU9dGhpcy5wcm9kdWN0aW9uc19bTGVbMV1dWzFdLHEuJD1lZVtlZS5sZW5ndGgtaWVdLHEuXyQ9e2ZpcnN0X2xpbmU6WVtZLmxlbmd0aC0oaWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpZW1kubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WVtZLmxlbmd0aC0oaWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WVtZLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYWUmJihxLl8kLnJhbmdlPVtZW1kubGVuZ3RoLShpZXx8MSldLnJhbmdlWzBdLFlbWS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx4ZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkocSxbWixRLHVlLEoueXksTGVbMV0sZWUsWV0uY29uY2F0KGhlKSksdHlwZW9mIHhlPCJ1IilyZXR1cm4geGU7aWUmJihVPVUuc2xpY2UoMCwtMSppZSoyKSxlZT1lZS5zbGljZSgwLC0xKmllKSxZPVkuc2xpY2UoMCwtMSppZSkpLFUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tMZVsxXV1bMF0pLGVlLnB1c2gocS4kKSxZLnB1c2gocS5fJCksb2U9Y2VbVVtVLmxlbmd0aC0yXV1bVVtVLmxlbmd0aC0xXV0sVS5wdXNoKG9lKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sUD1mdW5jdGlvbigpe3ZhciBGPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oJCxVKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKCQsVSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih6LCQpe3JldHVybiB0aGlzLnl5PSR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXosdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgej10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9eix0aGlzLm1hdGNoZWQrPXo7dmFyICQ9ei5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuICQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHp9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oeil7dmFyICQ9ei5sZW5ndGgsVT16LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9eit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtJCksdGhpcy5vZmZzZXQtPSQ7dmFyIEs9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVUubGVuZ3RoLTEpO3ZhciBlZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VT8oVS5sZW5ndGg9PT1LLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS1tLLmxlbmd0aC1VLmxlbmd0aF0ubGVuZ3RoLVVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi0kfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2VlWzBdLGVlWzBdK3RoaXMueXlsZW5nLSRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbih6KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoeikpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih6Lmxlbmd0aD4yMD8iLi4uIjoiIikrei5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB6PXRoaXMubWF0Y2g7cmV0dXJuIHoubGVuZ3RoPDIwJiYoeis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtei5sZW5ndGgpKSwoei5zdWJzdHIoMCwyMCkrKHoubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgej10aGlzLnBhc3RJbnB1dCgpLCQ9bmV3IEFycmF5KHoubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4geit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArJCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oeiwkKXt2YXIgVSxLLGVlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihlZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihlZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxLPXpbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEsmJih0aGlzLnl5bGluZW5vKz1LLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOks/S1tLLmxlbmd0aC0xXS5sZW5ndGgtS1tLLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3pbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9elswXSx0aGlzLm1hdGNoKz16WzBdLHRoaXMubWF0Y2hlcz16LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHpbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXpbMF0sVT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcywkLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFUpcmV0dXJuIFU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFkgaW4gZWUpdGhpc1tZXT1lZVtZXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeiwkLFUsSzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBlZT10aGlzLl9jdXJyZW50UnVsZXMoKSxZPTA7WTxlZS5sZW5ndGg7WSsrKWlmKFU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tlZVtZXV0pLFUmJighJHx8VVswXS5sZW5ndGg+JFswXS5sZW5ndGgpKXtpZigkPVUsSz1ZLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHo9dGhpcy50ZXN0X21hdGNoKFUsZWVbWV0pLHohPT0hMSlyZXR1cm4gejtpZih0aGlzLl9iYWNrdHJhY2speyQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gJD8oej10aGlzLnRlc3RfbWF0Y2goJCxlZVtLXSkseiE9PSExP3o6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgJD10aGlzLm5leHQoKTtyZXR1cm4gJHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oJCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKCQpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyICQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gJD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKCQpe3JldHVybiAkPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoJHx8MCksJD49MD90aGlzLmNvbmRpdGlvblN0YWNrWyRdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oJCl7dGhpcy5iZWdpbigkKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKCQsVSxLLGVlKXt2YXIgWT1lZTtzd2l0Y2goSyl7Y2FzZSAwOnJldHVybiAzODtjYXNlIDE6cmV0dXJuIDQwO2Nhc2UgMjpyZXR1cm4gMzk7Y2FzZSAzOnJldHVybiA0NDtjYXNlIDQ6cmV0dXJuIDUxO2Nhc2UgNTpyZXR1cm4gNTI7Y2FzZSA2OnJldHVybiA1MztjYXNlIDc6cmV0dXJuIDU0O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNTtjYXNlIDExOmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDE4O2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMzO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTticmVhaztjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAyMjp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksNDE7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDQyO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MzticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0ODticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDk7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUwO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVFlMRSIpLDQ1O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RZTEVERUZfU1RZTEVTIiksNDY7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ3O2JyZWFrO2Nhc2UgMzU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMzY6cmV0dXJuIDE4O2Nhc2UgMzc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzg6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFUueXl0ZXh0PVUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI2O2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxVLnl5dGV4dD1VLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI3O2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxVLnl5dGV4dD1VLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFUueXl0ZXh0PVUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNjticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNzticmVhaztjYXNlIDQ1OnJldHVybiA1MTtjYXNlIDQ2OnJldHVybiA1MjtjYXNlIDQ3OnJldHVybiA1MztjYXNlIDQ4OnJldHVybiA1NDtjYXNlIDQ5OnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2JyZWFrO2Nhc2UgNTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2JyZWFrO2Nhc2UgNTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTM6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDU0OnJldHVybiAxOTtjYXNlIDU1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDIwO2JyZWFrO2Nhc2UgNTc6YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIxO2JyZWFrO2Nhc2UgNTk6YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI5O2JyZWFrO2Nhc2UgNjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU5O2JyZWFrO2Nhc2UgNjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDYwO2JyZWFrO2Nhc2UgNjM6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjticmVhaztjYXNlIDY1OmJyZWFrO2Nhc2UgNjY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyNDticmVhaztjYXNlIDY5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwzMTticmVhaztjYXNlIDcwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDMxO2JyZWFrO2Nhc2UgNzE6cmV0dXJuIDY7Y2FzZSA3MjpyZXR1cm4gNjtjYXNlIDczOnJldHVybiAxNjtjYXNlIDc0OnJldHVybiA1NztjYXNlIDc1OnJldHVybiAyNDtjYXNlIDc2OnJldHVybiBVLnl5dGV4dD1VLnl5dGV4dC50cmltKCksMTQ7YnJlYWs7Y2FzZSA3NzpyZXR1cm4gMTU7Y2FzZSA3ODpyZXR1cm4gMjg7Y2FzZSA3OTpyZXR1cm4gNTg7Y2FzZSA4MDpyZXR1cm4gNTtjYXNlIDgxOnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpjbGlja1xiKS9pLC9eKD86aHJlZlxiKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzdHlsZVxzKykvaSwvXig/OltcdyxdK1xzKykvaSwvXig/OlteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OnN0YXRlXHMrKS9pLC9eKD86Lio8PGZvcms+PikvaSwvXig/Oi4qPDxqb2luPj4pL2ksL14oPzouKjw8Y2hvaWNlPj4pL2ksL14oPzouKlxbXFtmb3JrXF1cXSkvaSwvXig/Oi4qXFtcW2pvaW5cXVxdKS9pLC9eKD86LipcW1xbY2hvaWNlXF1cXSkvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86XH0pL2ksL14oPzpbXG5dKS9pLC9eKD86bm90ZVxzKykvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzoiKS9pLC9eKD86XHMqYXNccyopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5dKikvaSwvXig/OlxzKlteOlxuXHNcLV0rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86W1xzXFNdKj9lbmQgbm90ZVxiKS9pLC9eKD86c3RhdGVEaWFncmFtXHMrKS9pLC9eKD86c3RhdGVEaWFncmFtLXYyXHMrKS9pLC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxiKS9pLC9eKD86XFtcKlxdKS9pLC9eKD86W146XG5cc1wtXHtdKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oi0tPikvaSwvXig/Oi0tKS9pLC9eKD86Ojo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0xJTkU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsxMiwxMywyNSwyOSwzMiwzOCw0NSw0Niw0Nyw0OCw1Nyw1OCw1OSw2MCw3NCw3NSw3Niw3Nyw3OF0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFX0lEOntydWxlczpbNjddLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URTp7cnVsZXM6WzY0LDY1LDY2XSxpbmNsdXNpdmU6ITF9LE5PVEVfVEVYVDp7cnVsZXM6WzY5LDcwXSxpbmNsdXNpdmU6ITF9LE5PVEVfSUQ6e3J1bGVzOls2OF0saW5jbHVzaXZlOiExfSxOT1RFOntydWxlczpbNjEsNjIsNjNdLGluY2x1c2l2ZTohMX0sU1RZTEVERUZfU1RZTEVPUFRTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUWUxFREVGX1NUWUxFUzp7cnVsZXM6WzM0XSxpbmNsdXNpdmU6ITF9LFNUWUxFX0lEUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVFlMRTp7cnVsZXM6WzMzXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMzFdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlszMF0saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMjFdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTldLGluY2x1c2l2ZTohMX0sU0NBTEU6e3J1bGVzOlsxNiwxNywzNiwzN10saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURV9JRDp7cnVsZXM6WzUxXSxpbmNsdXNpdmU6ITF9LFNUQVRFX1NUUklORzp7cnVsZXM6WzUyLDUzXSxpbmNsdXNpdmU6ITF9LEZPUktfU1RBVEU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEU6e3J1bGVzOlsxMiwxMywzOSw0MCw0MSw0Miw0Myw0NCw0OSw1MCw1NCw1NSw1Nl0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE0LDE1LDE4LDIwLDIyLDI1LDI5LDMyLDM1LDM4LDU2LDYwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc5LDgwLDgxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEZ9KCk7TS5sZXhlcj1QO2Z1bmN0aW9uIEIoKXt0aGlzLnl5PXt9fXJldHVybiBvKEIsIlBhcnNlciIpLEIucHJvdG90eXBlPU0sTS5QYXJzZXI9QixuZXcgQn0oKTtTUC5wYXJzZXI9U1A7SlM9U1B9KTt2YXIgc3BlLGU2LEFQLENmLEdwLE9iLG9wZSxscGUsY3BlLFZwLHQ2LF9QLERQLExQLFJQLE5QLHI2LG42LHVwZSxocGUsTVAsSVAsZnBlLGRwZSxCMSxPSGUscHBlLE9QLFBIZSxCSGUsbXBlLGdwZSxGSGUseXBlLCRIZSx2cGUsUFAsQlAseHBlLGk2LGJwZSxGUCxhNj1OKCgpPT57InVzZSBzdHJpY3QiO3NwZT0iVEIiLGU2PSJUQiIsQVA9ImRpciIsQ2Y9InN0YXRlIixHcD0icm9vdCIsT2I9InJlbGF0aW9uIixvcGU9ImNsYXNzRGVmIixscGU9InN0eWxlIixjcGU9ImFwcGx5Q2xhc3MiLFZwPSJkZWZhdWx0Iix0Nj0iZGl2aWRlciIsX1A9ImZpbGw6bm9uZSIsRFA9ImZpbGw6ICMzMzMiLExQPSJjIixSUD0idGV4dCIsTlA9Im5vcm1hbCIscjY9InJlY3QiLG42PSJyZWN0V2l0aFRpdGxlIix1cGU9InN0YXRlU3RhcnQiLGhwZT0ic3RhdGVFbmQiLE1QPSJkaXZpZGVyIixJUD0icm91bmRlZFdpdGhUaXRsZSIsZnBlPSJub3RlIixkcGU9Im5vdGVHcm91cCIsQjE9InN0YXRlZGlhZ3JhbSIsT0hlPSJzdGF0ZSIscHBlPWAke0IxfS0ke09IZX1gLE9QPSJ0cmFuc2l0aW9uIixQSGU9Im5vdGUiLEJIZT0ibm90ZS1lZGdlIixtcGU9YCR7T1B9ICR7QkhlfWAsZ3BlPWAke0IxfS0ke1BIZX1gLEZIZT0iY2x1c3RlciIseXBlPWAke0IxfS0ke0ZIZX1gLCRIZT0iY2x1c3Rlci1hbHQiLHZwZT1gJHtCMX0tJHskSGV9YCxQUD0icGFyZW50IixCUD0ibm90ZSIseHBlPSJzdGF0ZSIsaTY9Ii0tLS0iLGJwZT1gJHtpNn0ke0JQfWAsRlA9YCR7aTZ9JHtQUH1gfSk7ZnVuY3Rpb24gJFAodD0iIixlPTAscj0iIixuPWk2KXtsZXQgaT1yIT09bnVsbCYmci5sZW5ndGg+MD9gJHtufSR7cn1gOiIiO3JldHVybmAke3hwZX0tJHt0fSR7aX0tJHtlfWB9ZnVuY3Rpb24gczYodCxlLHIpe2lmKCFlLmlkfHxlLmlkPT09Ijwvam9pbj48L2Zvcms+Inx8ZS5pZD09PSI8L2Nob2ljZT4iKXJldHVybjtlLmNzc0NsYXNzZXMmJihBcnJheS5pc0FycmF5KGUuY3NzQ29tcGlsZWRTdHlsZXMpfHwoZS5jc3NDb21waWxlZFN0eWxlcz1bXSksZS5jc3NDbGFzc2VzLnNwbGl0KCIgIikuZm9yRWFjaChpPT57bGV0IGE9ci5nZXQoaSk7YSYmKGUuY3NzQ29tcGlsZWRTdHlsZXM9Wy4uLmUuY3NzQ29tcGlsZWRTdHlsZXM/P1tdLC4uLmEuc3R5bGVzXSl9KSk7bGV0IG49dC5maW5kKGk9PmkuaWQ9PT1lLmlkKTtuP09iamVjdC5hc3NpZ24obixlKTp0LnB1c2goZSl9ZnVuY3Rpb24gR0hlKHQpe3JldHVybiB0Py5jbGFzc2VzPy5qb2luKCIgIik/PyIifWZ1bmN0aW9uIFZIZSh0KXtyZXR1cm4gdD8uc3R5bGVzPz9bXX12YXIgbzYsQWYsekhlLFRwZSxGMSx3cGUsa3BlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTt5dCgpO3ByKCk7YTYoKTtvNj1uZXcgTWFwLEFmPTA7bygkUCwic3RhdGVEb21JZCIpO3pIZT1vKCh0LGUscixuLGksYSxzLGwpPT57WC50cmFjZSgiaXRlbXMiLGUpLGUuZm9yRWFjaCh1PT57c3dpdGNoKHUuc3RtdCl7Y2FzZSBDZjpGMSh0LHUscixuLGksYSxzLGwpO2JyZWFrO2Nhc2UgVnA6RjEodCx1LHIsbixpLGEscyxsKTticmVhaztjYXNlIE9iOntGMSh0LHUuc3RhdGUxLHIsbixpLGEscyxsKSxGMSh0LHUuc3RhdGUyLHIsbixpLGEscyxsKTtsZXQgaD17aWQ6ImVkZ2UiK0FmLHN0YXJ0OnUuc3RhdGUxLmlkLGVuZDp1LnN0YXRlMi5pZCxhcnJvd2hlYWQ6Im5vcm1hbCIsYXJyb3dUeXBlRW5kOiJhcnJvd19iYXJiIixzdHlsZTpfUCxsYWJlbFN0eWxlOiIiLGxhYmVsOlplLnNhbml0aXplVGV4dCh1LmRlc2NyaXB0aW9uPz8iIixtZSgpKSxhcnJvd2hlYWRTdHlsZTpEUCxsYWJlbHBvczpMUCxsYWJlbFR5cGU6UlAsdGhpY2tuZXNzOk5QLGNsYXNzZXM6T1AsbG9vazpzfTtpLnB1c2goaCksQWYrK31icmVha319KX0sInNldHVwRG9jIiksVHBlPW8oKHQsZT1lNik9PntsZXQgcj1lO2lmKHQuZG9jKWZvcihsZXQgbiBvZiB0LmRvYyluLnN0bXQ9PT0iZGlyIiYmKHI9bi52YWx1ZSk7cmV0dXJuIHJ9LCJnZXREaXIiKTtvKHM2LCJpbnNlcnRPclVwZGF0ZU5vZGUiKTtvKEdIZSwiZ2V0Q2xhc3Nlc0Zyb21EYkluZm8iKTtvKFZIZSwiZ2V0U3R5bGVzRnJvbURiSW5mbyIpO0YxPW8oKHQsZSxyLG4saSxhLHMsbCk9PntsZXQgdT1lLmlkLGg9ci5nZXQodSksZj1HSGUoaCksZD1WSGUoaCkscD1tZSgpO2lmKFguaW5mbygiZGF0YUZldGNoZXIgcGFyc2VkSXRlbSIsZSxoLGQpLHUhPT0icm9vdCIpe2xldCBtPXI2O2Uuc3RhcnQ9PT0hMD9tPXVwZTplLnN0YXJ0PT09ITEmJihtPWhwZSksZS50eXBlIT09VnAmJihtPWUudHlwZSksbzYuZ2V0KHUpfHxvNi5zZXQodSx7aWQ6dSxzaGFwZTptLGRlc2NyaXB0aW9uOlplLnNhbml0aXplVGV4dCh1LHApLGNzc0NsYXNzZXM6YCR7Zn0gJHtwcGV9YCxjc3NTdHlsZXM6ZH0pO2xldCBnPW82LmdldCh1KTtlLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShnLmRlc2NyaXB0aW9uKT8oZy5zaGFwZT1uNixnLmRlc2NyaXB0aW9uLnB1c2goZS5kZXNjcmlwdGlvbikpOmcuZGVzY3JpcHRpb24/Lmxlbmd0aCYmZy5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oZy5zaGFwZT1uNixnLmRlc2NyaXB0aW9uPT09dT9nLmRlc2NyaXB0aW9uPVtlLmRlc2NyaXB0aW9uXTpnLmRlc2NyaXB0aW9uPVtnLmRlc2NyaXB0aW9uLGUuZGVzY3JpcHRpb25dKTooZy5zaGFwZT1yNixnLmRlc2NyaXB0aW9uPWUuZGVzY3JpcHRpb24pLGcuZGVzY3JpcHRpb249WmUuc2FuaXRpemVUZXh0T3JBcnJheShnLmRlc2NyaXB0aW9uLHApKSxnLmRlc2NyaXB0aW9uPy5sZW5ndGg9PT0xJiZnLnNoYXBlPT09bjYmJihnLnR5cGU9PT0iZ3JvdXAiP2cuc2hhcGU9SVA6Zy5zaGFwZT1yNiksIWcudHlwZSYmZS5kb2MmJihYLmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgWENYIix1LFRwZShlKSksZy50eXBlPSJncm91cCIsZy5pc0dyb3VwPSEwLGcuZGlyPVRwZShlKSxnLnNoYXBlPWUudHlwZT09PXQ2P01QOklQLGcuY3NzQ2xhc3Nlcz1gJHtnLmNzc0NsYXNzZXN9ICR7eXBlfSAke2E/dnBlOiIifWApO2xldCB5PXtsYWJlbFN0eWxlOiIiLHNoYXBlOmcuc2hhcGUsbGFiZWw6Zy5kZXNjcmlwdGlvbixjc3NDbGFzc2VzOmcuY3NzQ2xhc3Nlcyxjc3NDb21waWxlZFN0eWxlczpbXSxjc3NTdHlsZXM6Zy5jc3NTdHlsZXMsaWQ6dSxkaXI6Zy5kaXIsZG9tSWQ6JFAodSxBZiksdHlwZTpnLnR5cGUsaXNHcm91cDpnLnR5cGU9PT0iZ3JvdXAiLHBhZGRpbmc6OCxyeDoxMCxyeToxMCxsb29rOnN9O2lmKHkuc2hhcGU9PT1NUCYmKHkubGFiZWw9IiIpLHQmJnQuaWQhPT0icm9vdCImJihYLnRyYWNlKCJTZXR0aW5nIG5vZGUgIix1LCIgdG8gYmUgY2hpbGQgb2YgaXRzIHBhcmVudCAiLHQuaWQpLHkucGFyZW50SWQ9dC5pZCkseS5jZW50ZXJMYWJlbD0hMCxlLm5vdGUpe2xldCB2PXtsYWJlbFN0eWxlOiIiLHNoYXBlOmZwZSxsYWJlbDplLm5vdGUudGV4dCxjc3NDbGFzc2VzOmdwZSxjc3NTdHlsZXM6W10sY3NzQ29tcGlsZWRTdHlsZXM6W10saWQ6dSticGUrIi0iK0FmLGRvbUlkOiRQKHUsQWYsQlApLHR5cGU6Zy50eXBlLGlzR3JvdXA6Zy50eXBlPT09Imdyb3VwIixwYWRkaW5nOnAuZmxvd2NoYXJ0Py5wYWRkaW5nLGxvb2s6cyxwb3NpdGlvbjplLm5vdGUucG9zaXRpb259LHg9dStGUCxiPXtsYWJlbFN0eWxlOiIiLHNoYXBlOmRwZSxsYWJlbDplLm5vdGUudGV4dCxjc3NDbGFzc2VzOmcuY3NzQ2xhc3Nlcyxjc3NTdHlsZXM6W10saWQ6dStGUCxkb21JZDokUCh1LEFmLFBQKSx0eXBlOiJncm91cCIsaXNHcm91cDohMCxwYWRkaW5nOjE2LGxvb2s6cyxwb3NpdGlvbjplLm5vdGUucG9zaXRpb259O0FmKyssYi5pZD14LHYucGFyZW50SWQ9eCxzNihuLGIsbCksczYobix2LGwpLHM2KG4seSxsKTtsZXQgVD11LFM9di5pZDtlLm5vdGUucG9zaXRpb249PT0ibGVmdCBvZiImJihUPXYuaWQsUz11KSxpLnB1c2goe2lkOlQrIi0iK1Msc3RhcnQ6VCxlbmQ6UyxhcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZUVuZDoiIixzdHlsZTpfUCxsYWJlbFN0eWxlOiIiLGNsYXNzZXM6bXBlLGFycm93aGVhZFN0eWxlOkRQLGxhYmVscG9zOkxQLGxhYmVsVHlwZTpSUCx0aGlja25lc3M6TlAsbG9vazpzfSl9ZWxzZSBzNihuLHksbCl9ZS5kb2MmJihYLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIiksekhlKGUsZS5kb2MscixuLGksIWEscyxsKSl9LCJkYXRhRmV0Y2hlciIpLHdwZT1vKCgpPT57bzYuY2xlYXIoKSxBZj0wfSwicmVzZXQiKX0pO3ZhciB6UCxVSGUsSEhlLEVwZSxHUD1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtTbSgpO3JwKCk7bnAoKTtlcigpO2E2KCk7elA9bygodCxlPWU2KT0+e2lmKCF0LmRvYylyZXR1cm4gZTtsZXQgcj1lO2ZvcihsZXQgbiBvZiB0LmRvYyluLnN0bXQ9PT0iZGlyIiYmKHI9bi52YWx1ZSk7cmV0dXJuIHJ9LCJnZXREaXIiKSxVSGU9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmdldENsYXNzZXMoKX0sImdldENsYXNzZXMiKSxISGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtYLmluZm8oIlJFRjA6IiksWC5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzdGF0ZTphLGxheW91dDpzfT1tZSgpO24uZGIuZXh0cmFjdChuLmRiLmdldFJvb3REb2NWMigpKTtsZXQgbD1uLmRiLmdldERhdGEoKSx1PXdjKGUsaSk7bC50eXBlPW4udHlwZSxsLmxheW91dEFsZ29yaXRobT1zLGwubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGwucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGwubWFya2Vycz1bImJhcmIiXSxsLmRpYWdyYW1JZD1lLGF3YWl0IFJjKGwsdSk7bGV0IGg9ODt0cnl7KHR5cGVvZiBuLmRiLmdldExpbmtzPT0iZnVuY3Rpb24iP24uZGIuZ2V0TGlua3MoKTpuZXcgTWFwKS5mb3JFYWNoKChkLHApPT57bGV0IG09dHlwZW9mIHA9PSJzdHJpbmciP3A6dHlwZW9mIHA/LmlkPT0ic3RyaW5nIj9wLmlkOiIiO2lmKCFtKXtYLndhcm4oIlx1MjZBMFx1RkUwRiBJbnZhbGlkIG9yIG1pc3Npbmcgc3RhdGVJZCBmcm9tIGtleToiLEpTT04uc3RyaW5naWZ5KHApKTtyZXR1cm59bGV0IGc9dS5ub2RlKCk/LnF1ZXJ5U2VsZWN0b3JBbGwoImciKSx5O2lmKGc/LmZvckVhY2goVD0+e1QudGV4dENvbnRlbnQ/LnRyaW0oKT09PW0mJih5PVQpfSksIXkpe1gud2FybigiXHUyNkEwXHVGRTBGIENvdWxkIG5vdCBmaW5kIG5vZGUgbWF0Y2hpbmcgdGV4dDoiLG0pO3JldHVybn1sZXQgdj15LnBhcmVudE5vZGU7aWYoIXYpe1gud2FybigiXHUyNkEwXHVGRTBGIE5vZGUgaGFzIG5vIHBhcmVudCwgY2Fubm90IHdyYXA6IixtKTtyZXR1cm59bGV0IHg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKSxiPWQudXJsLnJlcGxhY2UoL14iK3wiKyQvZywiIik7aWYoeC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmhyZWYiLGIpLHguc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfYmxhbmsiKSxkLnRvb2x0aXApe2xldCBUPWQudG9vbHRpcC5yZXBsYWNlKC9eIit8IiskL2csIiIpO3guc2V0QXR0cmlidXRlKCJ0aXRsZSIsVCl9di5yZXBsYWNlQ2hpbGQoeCx5KSx4LmFwcGVuZENoaWxkKHkpLFguaW5mbygiXHV7MUY1MTd9IFdyYXBwZWQgbm9kZSBpbiA8YT4gdGFnIGZvcjoiLG0sZC51cmwpfSl9Y2F0Y2goZil7WC5lcnJvcigiXHUyNzRDIEVycm9yIGluamVjdGluZyBjbGlja2FibGUgbGlua3M6IixmKX1WdC5pbnNlcnRUaXRsZSh1LCJzdGF0ZWRpYWdyYW1UaXRsZVRleHQiLGE/LnRpdGxlVG9wTWFyZ2luPz8yNSxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSxZbyh1LGgsQjEsYT8udXNlTWF4V2lkdGg/PyEwKX0sImRyYXciKSxFcGU9e2dldENsYXNzZXM6VUhlLGRyYXc6SEhlLGdldERpcjp6UH19KTt2YXIgYnMsU3BlLENwZSxsNix0bCxjNj1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtlcigpO3ByKCk7Y2koKTtrcGUoKTtHUCgpO2E2KCk7YnM9e1NUQVJUX05PREU6IlsqXSIsU1RBUlRfVFlQRToic3RhcnQiLEVORF9OT0RFOiJbKl0iLEVORF9UWVBFOiJlbmQiLENPTE9SX0tFWVdPUkQ6ImNvbG9yIixGSUxMX0tFWVdPUkQ6ImZpbGwiLEJHX0ZJTEw6ImJnRmlsbCIsU1RZTEVDTEFTU19TRVA6IiwifSxTcGU9bygoKT0+bmV3IE1hcCwibmV3Q2xhc3Nlc0xpc3QiKSxDcGU9bygoKT0+KHtyZWxhdGlvbnM6W10sc3RhdGVzOm5ldyBNYXAsZG9jdW1lbnRzOnt9fSksIm5ld0RvYyIpLGw2PW8odD0+SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSksImNsb25lIiksdGw9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy52ZXJzaW9uPWU7dGhpcy5ub2Rlcz1bXTt0aGlzLmVkZ2VzPVtdO3RoaXMucm9vdERvYz1bXTt0aGlzLmNsYXNzZXM9U3BlKCk7dGhpcy5kb2N1bWVudHM9e3Jvb3Q6Q3BlKCl9O3RoaXMuY3VycmVudERvY3VtZW50PXRoaXMuZG9jdW1lbnRzLnJvb3Q7dGhpcy5zdGFydEVuZENvdW50PTA7dGhpcy5kaXZpZGVyQ250PTA7dGhpcy5saW5rcz1uZXcgTWFwO3RoaXMuZ2V0QWNjVGl0bGU9RHI7dGhpcy5zZXRBY2NUaXRsZT1Bcjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPVJyO3RoaXMuc2V0QWNjRGVzY3JpcHRpb249THI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5jbGVhcigpLHRoaXMuc2V0Um9vdERvYz10aGlzLnNldFJvb3REb2MuYmluZCh0aGlzKSx0aGlzLmdldERpdmlkZXJJZD10aGlzLmdldERpdmlkZXJJZC5iaW5kKHRoaXMpLHRoaXMuc2V0RGlyZWN0aW9uPXRoaXMuc2V0RGlyZWN0aW9uLmJpbmQodGhpcyksdGhpcy50cmltQ29sb249dGhpcy50cmltQ29sb24uYmluZCh0aGlzKX1zdGF0aWN7byh0aGlzLCJTdGF0ZURCIil9c3RhdGlje3RoaXMucmVsYXRpb25UeXBlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfX1leHRyYWN0KGUpe3RoaXMuY2xlYXIoITApO2ZvcihsZXQgaSBvZiBBcnJheS5pc0FycmF5KGUpP2U6ZS5kb2Mpc3dpdGNoKGkuc3RtdCl7Y2FzZSBDZjp0aGlzLmFkZFN0YXRlKGkuaWQudHJpbSgpLGkudHlwZSxpLmRvYyxpLmRlc2NyaXB0aW9uLGkubm90ZSk7YnJlYWs7Y2FzZSBPYjp0aGlzLmFkZFJlbGF0aW9uKGkuc3RhdGUxLGkuc3RhdGUyLGkuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2Ugb3BlOnRoaXMuYWRkU3R5bGVDbGFzcyhpLmlkLnRyaW0oKSxpLmNsYXNzZXMpO2JyZWFrO2Nhc2UgbHBlOnRoaXMuaGFuZGxlU3R5bGVEZWYoaSk7YnJlYWs7Y2FzZSBjcGU6dGhpcy5zZXRDc3NDbGFzcyhpLmlkLnRyaW0oKSxpLnN0eWxlQ2xhc3MpO2JyZWFrO2Nhc2UiY2xpY2siOnRoaXMuYWRkTGluayhpLmlkLGkudXJsLGkudG9vbHRpcCk7YnJlYWt9bGV0IHI9dGhpcy5nZXRTdGF0ZXMoKSxuPW1lKCk7d3BlKCksRjEodm9pZCAwLHRoaXMuZ2V0Um9vdERvY1YyKCkscix0aGlzLm5vZGVzLHRoaXMuZWRnZXMsITAsbi5sb29rLHRoaXMuY2xhc3Nlcyk7Zm9yKGxldCBpIG9mIHRoaXMubm9kZXMpaWYoQXJyYXkuaXNBcnJheShpLmxhYmVsKSl7aWYoaS5kZXNjcmlwdGlvbj1pLmxhYmVsLnNsaWNlKDEpLGkuaXNHcm91cCYmaS5kZXNjcmlwdGlvbi5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYEdyb3VwIG5vZGVzIGNhbiBvbmx5IGhhdmUgbGFiZWwuIFJlbW92ZSB0aGUgYWRkaXRpb25hbCBkZXNjcmlwdGlvbiBmb3Igbm9kZSBbJHtpLmlkfV1gKTtpLmxhYmVsPWkubGFiZWxbMF19fWhhbmRsZVN0eWxlRGVmKGUpe2xldCByPWUuaWQudHJpbSgpLnNwbGl0KCIsIiksbj1lLnN0eWxlQ2xhc3Muc3BsaXQoIiwiKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dGhpcy5nZXRTdGF0ZShpKTtpZighYSl7bGV0IHM9aS50cmltKCk7dGhpcy5hZGRTdGF0ZShzKSxhPXRoaXMuZ2V0U3RhdGUocyl9YSYmKGEuc3R5bGVzPW4ubWFwKHM9PnMucmVwbGFjZSgvOy9nLCIiKT8udHJpbSgpKSl9fXNldFJvb3REb2MoZSl7WC5pbmZvKCJTZXR0aW5nIHJvb3QgZG9jIixlKSx0aGlzLnJvb3REb2M9ZSx0aGlzLnZlcnNpb249PT0xP3RoaXMuZXh0cmFjdChlKTp0aGlzLmV4dHJhY3QodGhpcy5nZXRSb290RG9jVjIoKSl9ZG9jVHJhbnNsYXRvcihlLHIsbil7aWYoci5zdG10PT09T2Ipe3RoaXMuZG9jVHJhbnNsYXRvcihlLHIuc3RhdGUxLCEwKSx0aGlzLmRvY1RyYW5zbGF0b3IoZSxyLnN0YXRlMiwhMSk7cmV0dXJufWlmKHIuc3RtdD09PUNmJiYoci5pZD09PWJzLlNUQVJUX05PREU/KHIuaWQ9ZS5pZCsobj8iX3N0YXJ0IjoiX2VuZCIpLHIuc3RhcnQ9bik6ci5pZD1yLmlkLnRyaW0oKSksci5zdG10IT09R3AmJnIuc3RtdCE9PUNmfHwhci5kb2MpcmV0dXJuO2xldCBpPVtdLGE9W107Zm9yKGxldCBzIG9mIHIuZG9jKWlmKHMudHlwZT09PXQ2KXtsZXQgbD1sNihzKTtsLmRvYz1sNihhKSxpLnB1c2gobCksYT1bXX1lbHNlIGEucHVzaChzKTtpZihpLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXtsZXQgcz17c3RtdDpDZixpZDpMOSgpLHR5cGU6ImRpdmlkZXIiLGRvYzpsNihhKX07aS5wdXNoKGw2KHMpKSxyLmRvYz1pfXIuZG9jLmZvckVhY2gocz0+dGhpcy5kb2NUcmFuc2xhdG9yKHIscywhMCkpfWdldFJvb3REb2NWMigpe3JldHVybiB0aGlzLmRvY1RyYW5zbGF0b3Ioe2lkOkdwLHN0bXQ6R3B9LHtpZDpHcCxzdG10OkdwLGRvYzp0aGlzLnJvb3REb2N9LCEwKSx7aWQ6R3AsZG9jOnRoaXMucm9vdERvY319YWRkU3RhdGUoZSxyPVZwLG49dm9pZCAwLGk9dm9pZCAwLGE9dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLHU9dm9pZCAwKXtsZXQgaD1lPy50cmltKCk7aWYoIXRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5oYXMoaCkpWC5pbmZvKCJBZGRpbmcgc3RhdGUgIixoLGkpLHRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5zZXQoaCx7c3RtdDpDZixpZDpoLGRlc2NyaXB0aW9uczpbXSx0eXBlOnIsZG9jOm4sbm90ZTphLGNsYXNzZXM6W10sc3R5bGVzOltdLHRleHRTdHlsZXM6W119KTtlbHNle2xldCBmPXRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoaCk7aWYoIWYpdGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBub3QgZm91bmQ6ICR7aH1gKTtmLmRvY3x8KGYuZG9jPW4pLGYudHlwZXx8KGYudHlwZT1yKX1pZihpJiYoWC5pbmZvKCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uIixoLGkpLChBcnJheS5pc0FycmF5KGkpP2k6W2ldKS5mb3JFYWNoKGQ9PnRoaXMuYWRkRGVzY3JpcHRpb24oaCxkLnRyaW0oKSkpKSxhKXtsZXQgZj10aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGgpO2lmKCFmKXRocm93IG5ldyBFcnJvcihgU3RhdGUgbm90IGZvdW5kOiAke2h9YCk7Zi5ub3RlPWEsZi5ub3RlLnRleHQ9WmUuc2FuaXRpemVUZXh0KGYubm90ZS50ZXh0LG1lKCkpfXMmJihYLmluZm8oIlNldHRpbmcgc3RhdGUgY2xhc3NlcyIsaCxzKSwoQXJyYXkuaXNBcnJheShzKT9zOltzXSkuZm9yRWFjaChkPT50aGlzLnNldENzc0NsYXNzKGgsZC50cmltKCkpKSksbCYmKFguaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLGgsbCksKEFycmF5LmlzQXJyYXkobCk/bDpbbF0pLmZvckVhY2goZD0+dGhpcy5zZXRTdHlsZShoLGQudHJpbSgpKSkpLHUmJihYLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixoLGwpLChBcnJheS5pc0FycmF5KHUpP3U6W3VdKS5mb3JFYWNoKGQ9PnRoaXMuc2V0VGV4dFN0eWxlKGgsZC50cmltKCkpKSl9Y2xlYXIoZSl7dGhpcy5ub2Rlcz1bXSx0aGlzLmVkZ2VzPVtdLHRoaXMuZG9jdW1lbnRzPXtyb290OkNwZSgpfSx0aGlzLmN1cnJlbnREb2N1bWVudD10aGlzLmRvY3VtZW50cy5yb290LHRoaXMuc3RhcnRFbmRDb3VudD0wLHRoaXMuY2xhc3Nlcz1TcGUoKSxlfHwodGhpcy5saW5rcz1uZXcgTWFwLGtyKCkpfWdldFN0YXRlKGUpe3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGUpfWdldFN0YXRlcygpe3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXN9bG9nRG9jdW1lbnRzKCl7WC5pbmZvKCJEb2N1bWVudHMgPSAiLHRoaXMuZG9jdW1lbnRzKX1nZXRSZWxhdGlvbnMoKXtyZXR1cm4gdGhpcy5jdXJyZW50RG9jdW1lbnQucmVsYXRpb25zfWFkZExpbmsoZSxyLG4pe3RoaXMubGlua3Muc2V0KGUse3VybDpyLHRvb2x0aXA6bn0pLFgud2FybigiQWRkaW5nIGxpbmsiLGUscixuKX1nZXRMaW5rcygpe3JldHVybiB0aGlzLmxpbmtzfXN0YXJ0SWRJZk5lZWRlZChlPSIiKXtyZXR1cm4gZT09PWJzLlNUQVJUX05PREU/KHRoaXMuc3RhcnRFbmRDb3VudCsrLGAke2JzLlNUQVJUX1RZUEV9JHt0aGlzLnN0YXJ0RW5kQ291bnR9YCk6ZX1zdGFydFR5cGVJZk5lZWRlZChlPSIiLHI9VnApe3JldHVybiBlPT09YnMuU1RBUlRfTk9ERT9icy5TVEFSVF9UWVBFOnJ9ZW5kSWRJZk5lZWRlZChlPSIiKXtyZXR1cm4gZT09PWJzLkVORF9OT0RFPyh0aGlzLnN0YXJ0RW5kQ291bnQrKyxgJHticy5FTkRfVFlQRX0ke3RoaXMuc3RhcnRFbmRDb3VudH1gKTplfWVuZFR5cGVJZk5lZWRlZChlPSIiLHI9VnApe3JldHVybiBlPT09YnMuRU5EX05PREU/YnMuRU5EX1RZUEU6cn1hZGRSZWxhdGlvbk9ianMoZSxyLG49IiIpe2xldCBpPXRoaXMuc3RhcnRJZElmTmVlZGVkKGUuaWQudHJpbSgpKSxhPXRoaXMuc3RhcnRUeXBlSWZOZWVkZWQoZS5pZC50cmltKCksZS50eXBlKSxzPXRoaXMuc3RhcnRJZElmTmVlZGVkKHIuaWQudHJpbSgpKSxsPXRoaXMuc3RhcnRUeXBlSWZOZWVkZWQoci5pZC50cmltKCksci50eXBlKTt0aGlzLmFkZFN0YXRlKGksYSxlLmRvYyxlLmRlc2NyaXB0aW9uLGUubm90ZSxlLmNsYXNzZXMsZS5zdHlsZXMsZS50ZXh0U3R5bGVzKSx0aGlzLmFkZFN0YXRlKHMsbCxyLmRvYyxyLmRlc2NyaXB0aW9uLHIubm90ZSxyLmNsYXNzZXMsci5zdHlsZXMsci50ZXh0U3R5bGVzKSx0aGlzLmN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnMucHVzaCh7aWQxOmksaWQyOnMscmVsYXRpb25UaXRsZTpaZS5zYW5pdGl6ZVRleHQobixtZSgpKX0pfWFkZFJlbGF0aW9uKGUscixuKXtpZih0eXBlb2YgZT09Im9iamVjdCImJnR5cGVvZiByPT0ib2JqZWN0Iil0aGlzLmFkZFJlbGF0aW9uT2JqcyhlLHIsbik7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyImJnR5cGVvZiByPT0ic3RyaW5nIil7bGV0IGk9dGhpcy5zdGFydElkSWZOZWVkZWQoZS50cmltKCkpLGE9dGhpcy5zdGFydFR5cGVJZk5lZWRlZChlKSxzPXRoaXMuZW5kSWRJZk5lZWRlZChyLnRyaW0oKSksbD10aGlzLmVuZFR5cGVJZk5lZWRlZChyKTt0aGlzLmFkZFN0YXRlKGksYSksdGhpcy5hZGRTdGF0ZShzLGwpLHRoaXMuY3VycmVudERvY3VtZW50LnJlbGF0aW9ucy5wdXNoKHtpZDE6aSxpZDI6cyxyZWxhdGlvblRpdGxlOm4/WmUuc2FuaXRpemVUZXh0KG4sbWUoKSk6dm9pZCAwfSl9fWFkZERlc2NyaXB0aW9uKGUscil7bGV0IG49dGhpcy5jdXJyZW50RG9jdW1lbnQuc3RhdGVzLmdldChlKSxpPXIuc3RhcnRzV2l0aCgiOiIpP3IucmVwbGFjZSgiOiIsIiIpLnRyaW0oKTpyO24/LmRlc2NyaXB0aW9ucz8ucHVzaChaZS5zYW5pdGl6ZVRleHQoaSxtZSgpKSl9Y2xlYW51cExhYmVsKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIjoiKT9lLnNsaWNlKDIpLnRyaW0oKTplLnRyaW0oKX1nZXREaXZpZGVySWQoKXtyZXR1cm4gdGhpcy5kaXZpZGVyQ250KyssYGRpdmlkZXItaWQtJHt0aGlzLmRpdmlkZXJDbnR9YH1hZGRTdHlsZUNsYXNzKGUscj0iIil7dGhpcy5jbGFzc2VzLmhhcyhlKXx8dGhpcy5jbGFzc2VzLnNldChlLHtpZDplLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7bGV0IG49dGhpcy5jbGFzc2VzLmdldChlKTtyJiZuJiZyLnNwbGl0KGJzLlNUWUxFQ0xBU1NfU0VQKS5mb3JFYWNoKGk9PntsZXQgYT1pLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYoUmVnRXhwKGJzLkNPTE9SX0tFWVdPUkQpLmV4ZWMoaSkpe2xldCBsPWEucmVwbGFjZShicy5GSUxMX0tFWVdPUkQsYnMuQkdfRklMTCkucmVwbGFjZShicy5DT0xPUl9LRVlXT1JELGJzLkZJTExfS0VZV09SRCk7bi50ZXh0U3R5bGVzLnB1c2gobCl9bi5zdHlsZXMucHVzaChhKX0pfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfXNldENzc0NsYXNzKGUscil7ZS5zcGxpdCgiLCIpLmZvckVhY2gobj0+e2xldCBpPXRoaXMuZ2V0U3RhdGUobik7aWYoIWkpe2xldCBhPW4udHJpbSgpO3RoaXMuYWRkU3RhdGUoYSksaT10aGlzLmdldFN0YXRlKGEpfWk/LmNsYXNzZXM/LnB1c2gocil9KX1zZXRTdHlsZShlLHIpe3RoaXMuZ2V0U3RhdGUoZSk/LnN0eWxlcz8ucHVzaChyKX1zZXRUZXh0U3R5bGUoZSxyKXt0aGlzLmdldFN0YXRlKGUpPy50ZXh0U3R5bGVzPy5wdXNoKHIpfWdldERpcmVjdGlvblN0YXRlbWVudCgpe3JldHVybiB0aGlzLnJvb3REb2MuZmluZChlPT5lLnN0bXQ9PT1BUCl9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uU3RhdGVtZW50KCk/LnZhbHVlPz9zcGV9c2V0RGlyZWN0aW9uKGUpe2xldCByPXRoaXMuZ2V0RGlyZWN0aW9uU3RhdGVtZW50KCk7cj9yLnZhbHVlPWU6dGhpcy5yb290RG9jLnVuc2hpZnQoe3N0bXQ6QVAsdmFsdWU6ZX0pfXRyaW1Db2xvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCI6Iik/ZS5zbGljZSgxKS50cmltKCk6ZS50cmltKCl9Z2V0RGF0YSgpe2xldCBlPW1lKCk7cmV0dXJue25vZGVzOnRoaXMubm9kZXMsZWRnZXM6dGhpcy5lZGdlcyxvdGhlcjp7fSxjb25maWc6ZSxkaXJlY3Rpb246elAodGhpcy5nZXRSb290RG9jVjIoKSl9fWdldENvbmZpZygpe3JldHVybiBtZSgpLnN0YXRlfX19KTt2YXIgV0hlLHU2LFZQPU4oKCk9PnsidXNlIHN0cmljdCI7V0hlPW8odD0+YApkZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgICBmaWxsOiAke3QudHJhbnNpdGlvbkNvbG9yfTsKICAgIHN0cm9rZTogJHt0LnRyYW5zaXRpb25Db2xvcn07CiAgfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHt0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZTogbm9uZTsKICBmb250LXNpemU6IDEwcHg7Cn0KZy5zdGF0ZUdyb3VwIHRleHQgewogIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIHN0cm9rZTogbm9uZTsKICBmb250LXNpemU6IDEwcHg7Cgp9Cmcuc3RhdGVHcm91cCAuc3RhdGUtdGl0bGUgewogIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgZmlsbDogJHt0LnN0YXRlTGFiZWxDb2xvcn07Cn0KCmcuc3RhdGVHcm91cCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07Cn0KCmcuc3RhdGVHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnRyYW5zaXRpb24gewogIHN0cm9rZTogJHt0LnRyYW5zaXRpb25Db2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7CiAgZmlsbDogJHt0LmJhY2tncm91bmR9OwogIGJvcmRlci1ib3R0b206IDFweAp9Cgouc3RhdGVHcm91cCAuYWx0LWNvbXBvc2l0IHsKICBmaWxsOiAjZTBlMGUwOwogIGJvcmRlci1ib3R0b206IDFweAp9Cgouc3RhdGUtbm90ZSB7CiAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKCiAgdGV4dCB7CiAgICBmaWxsOiAke3Qubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgICBmb250LXNpemU6IDEwcHg7CiAgfQp9Cgouc3RhdGVMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBvcGFjaXR5OiAwLjU7Cn0KCi5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7dC5sYWJlbEJhY2tncm91bmRDb2xvcn07CiAgb3BhY2l0eTogMC41Owp9Ci5lZGdlTGFiZWwgewogIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICBwIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICB9CiAgcmVjdCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICBmaWxsOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgfQogIHRleHQtYWxpZ246IGNlbnRlcjsKfQouZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke3QudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3J9Owp9Ci5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7dC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvcn07Cn0KCi5zdGF0ZUxhYmVsIHRleHQgewogIGZpbGw6ICR7dC5zdGF0ZUxhYmVsQ29sb3J9OwogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm5vZGUgY2lyY2xlLnN0YXRlLXN0YXJ0IHsKICBmaWxsOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9OwogIHN0cm9rZTogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKfQoKLm5vZGUgLmZvcmstam9pbiB7CiAgZmlsbDogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQgewogIGZpbGw6ICR7dC5pbm5lckVuZEJhY2tncm91bmR9OwogIHN0cm9rZTogJHt0LmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KLmVuZC1zdGF0ZS1pbm5lciB7CiAgZmlsbDogJHt0LmNvbXBvc2l0ZUJhY2tncm91bmR8fHQuYmFja2dyb3VuZH07CiAgLy8gc3Ryb2tlOiAke3QuYmFja2dyb3VuZH07CiAgc3Ryb2tlLXdpZHRoOiAxLjUKfQoKLm5vZGUgcmVjdCB7CiAgZmlsbDogJHt0LnN0YXRlQmtnfHx0Lm1haW5Ca2d9OwogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9Ci5ub2RlIHBvbHlnb24gewogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTs7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICBmaWxsOiAke3QubGluZUNvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3QgewogIGZpbGw6ICR7dC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR9OwogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgouY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7dC5zdGF0ZUxhYmVsQ29sb3J9OwogIC8vIGxpbmUtaGVpZ2h0OiAxOwp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgcmVjdC5vdXRlciB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIgewogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9Owp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIGZpbGw6ICR7dC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmR9Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQgLmlubmVyIHsKICBmaWxsOiAke3QuYWx0QmFja2dyb3VuZD90LmFsdEJhY2tncm91bmQ6IiNlZmVmZWYifTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7CiAgcng6MDsKICByeTowOwp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuYmFzaWMgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7CiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7CiAgZmlsbDogJHt0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5ub3RlLWVkZ2UgewogIHN0cm9rZS1kYXNoYXJyYXk6IDU7Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7dC5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Ci5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7dC5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Cgouc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7CiAgZmlsbDogJHt0Lm5vdGVUZXh0Q29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7dC5ub3RlVGV4dENvbG9yfTsKfQouc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwgewogIGNvbG9yOiByZWQ7IC8vICR7dC5ub3RlVGV4dENvbG9yfTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgI2RlcGVuZGVuY3lFbmQgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9Cgouc3RhdGVkaWFncmFtVGl0bGVUZXh0IHsKICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMThweDsKICBmaWxsOiAke3QudGV4dENvbG9yfTsKfQpgLCJnZXRTdHlsZXMiKSx1Nj1XSGV9KTt2YXIgcUhlLFlIZSxYSGUsakhlLF9wZSxLSGUsUUhlLFpIZSxKSGUsVVAsQXBlLERwZSxMcGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO2M2KCk7ZXIoKTtwcigpO0d0KCk7eXQoKTtxSGU9byh0PT50LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJzdGFydC1zdGF0ZSIpLmF0dHIoInIiLG1lKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixtZSgpLnN0YXRlLnBhZGRpbmcrbWUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3kiLG1lKCkuc3RhdGUucGFkZGluZyttZSgpLnN0YXRlLnNpemVVbml0KSwiZHJhd1N0YXJ0U3RhdGUiKSxZSGU9byh0PT50LmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLG1lKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLG1lKCkuc3RhdGUudGV4dEhlaWdodCoyKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLCJkcmF3RGl2aWRlciIpLFhIZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLG1lKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLG49ci5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLG1lKCkuc3RhdGUucmFkaXVzKSxyfSwiZHJhd1NpbXBsZVN0YXRlIiksakhlPW8oKHQsZSk9PntsZXQgcj1vKGZ1bmN0aW9uKHAsbSxnKXtsZXQgeT1wLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwyKm1lKCkuc3RhdGUucGFkZGluZykudGV4dChtKTtnfHx5LmF0dHIoImR5IixtZSgpLnN0YXRlLnRleHRIZWlnaHQpfSwiYWRkVHNwYW4iKSxpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMiptZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLG1lKCkuc3RhdGUudGV4dEhlaWdodCsxLjMqbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLG1lKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLGE9aS5oZWlnaHQscz10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsYSttZSgpLnN0YXRlLnBhZGRpbmcqLjQrbWUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK21lKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGw9ITAsdT0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHApe2x8fChyKHMscCx1KSx1PSExKSxsPSExfSk7bGV0IGg9dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5MSIsbWUoKS5zdGF0ZS5wYWRkaW5nK2ErbWUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixtZSgpLnN0YXRlLnBhZGRpbmcrYSttZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigiY2xhc3MiLCJkZXNjci1kaXZpZGVyIiksZj1zLm5vZGUoKS5nZXRCQm94KCksZD1NYXRoLm1heChmLndpZHRoLGkud2lkdGgpO3JldHVybiBoLmF0dHIoIngyIixkKzMqbWUoKS5zdGF0ZS5wYWRkaW5nKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZCsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixmLmhlaWdodCthKzIqbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsbWUoKS5zdGF0ZS5yYWRpdXMpLHR9LCJkcmF3RGVzY3JTdGF0ZSIpLF9wZT1vKCh0LGUscik9PntsZXQgbj1tZSgpLnN0YXRlLnBhZGRpbmcsaT0yKm1lKCkuc3RhdGUucGFkZGluZyxhPXQubm9kZSgpLmdldEJCb3goKSxzPWEud2lkdGgsbD1hLngsdT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLG1lKCkuc3RhdGUudGl0bGVTaGlmdCkuYXR0cigiZm9udC1zaXplIixtZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxmPXUubm9kZSgpLmdldEJCb3goKS53aWR0aCtpLGQ9TWF0aC5tYXgoZixzKTtkPT09cyYmKGQ9ZCtpKTtsZXQgcCxtPXQubm9kZSgpLmdldEJCb3goKTtlLmRvYyxwPWwtbixmPnMmJihwPShzLWQpLzIrbiksTWF0aC5hYnMobC1tLngpPG4mJmY+cyYmKHA9bC0oZi1zKS8yKTtsZXQgZz0xLW1lKCkuc3RhdGUudGV4dEhlaWdodDtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixnKS5hdHRyKCJjbGFzcyIscj8iYWx0LWNvbXBvc2l0IjoiY29tcG9zaXQiKS5hdHRyKCJ3aWR0aCIsZCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCttZSgpLnN0YXRlLnRleHRIZWlnaHQrbWUoKS5zdGF0ZS50aXRsZVNoaWZ0KzEpLmF0dHIoInJ4IiwiMCIpLHUuYXR0cigieCIscCtuKSxmPD1zJiZ1LmF0dHIoIngiLGwrKGQtaSkvMi1mLzIrbiksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnRpdGxlU2hpZnQtbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0LW1lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGQpLmF0dHIoImhlaWdodCIsbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0KjMpLmF0dHIoInJ4IixtZSgpLnN0YXRlLnJhZGl1cyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnRpdGxlU2hpZnQtbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0LW1lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGQpLmF0dHIoImhlaWdodCIsbS5oZWlnaHQrMysyKm1lKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLG1lKCkuc3RhdGUucmFkaXVzKSx0fSwiYWRkVGl0bGVBbmRCb3giKSxLSGU9byh0PT4odC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsbWUoKS5zdGF0ZS5zaXplVW5pdCttZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsbWUoKS5zdGF0ZS5wYWRkaW5nK21lKCkuc3RhdGUuc2l6ZVVuaXQrbWUoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLG1lKCkuc3RhdGUucGFkZGluZyttZSgpLnN0YXRlLnNpemVVbml0K21lKCkuc3RhdGUubWluaVBhZGRpbmcpLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLG1lKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixtZSgpLnN0YXRlLnBhZGRpbmcrbWUoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsbWUoKS5zdGF0ZS5wYWRkaW5nK21lKCkuc3RhdGUuc2l6ZVVuaXQrMikpLCJkcmF3RW5kU3RhdGUiKSxRSGU9bygodCxlKT0+e2xldCByPW1lKCkuc3RhdGUuZm9ya1dpZHRoLG49bWUoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGUucGFyZW50SWQpe2xldCBpPXI7cj1uLG49aX1yZXR1cm4gdC5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLHIpLmF0dHIoImhlaWdodCIsbikuYXR0cigieCIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnBhZGRpbmcpfSwiZHJhd0ZvcmtKb2luU3RhdGUiKSxaSGU9bygodCxlLHIsbik9PntsZXQgaT0wLGE9bi5hcHBlbmQoInRleHQiKTthLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksYS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7bGV0IHM9dC5yZXBsYWNlKC9cclxuL2csIjxici8+Iik7cz1zLnJlcGxhY2UoL1xuL2csIjxici8+Iik7bGV0IGw9cy5zcGxpdChaZS5saW5lQnJlYWtSZWdleCksdT0xLjI1Km1lKCkuc3RhdGUubm90ZU1hcmdpbjtmb3IobGV0IGggb2YgbCl7bGV0IGY9aC50cmltKCk7aWYoZi5sZW5ndGg+MCl7bGV0IGQ9YS5hcHBlbmQoInRzcGFuIik7aWYoZC50ZXh0KGYpLHU9PT0wKXtsZXQgcD1kLm5vZGUoKS5nZXRCQm94KCk7dSs9cC5oZWlnaHR9aSs9dSxkLmF0dHIoIngiLGUrbWUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxkLmF0dHIoInkiLHIraSsxLjI1Km1lKCkuc3RhdGUubm90ZU1hcmdpbil9fXJldHVybnt0ZXh0V2lkdGg6YS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6aX19LCJfZHJhd0xvbmdUZXh0IiksSkhlPW8oKHQsZSk9PntlLmF0dHIoImNsYXNzIiwic3RhdGUtbm90ZSIpO2xldCByPWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsbWUoKS5zdGF0ZS5wYWRkaW5nKSxuPWUuYXBwZW5kKCJnIikse3RleHRXaWR0aDppLHRleHRIZWlnaHQ6YX09WkhlKHQsMCwwLG4pO3JldHVybiByLmF0dHIoImhlaWdodCIsYSsyKm1lKCkuc3RhdGUubm90ZU1hcmdpbiksci5hdHRyKCJ3aWR0aCIsaSttZSgpLnN0YXRlLm5vdGVNYXJnaW4qMikscn0sImRyYXdOb3RlIiksVVA9byhmdW5jdGlvbih0LGUpe2xldCByPWUuaWQsbj17aWQ6cixsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGk9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIscikuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7ZS50eXBlPT09InN0YXJ0IiYmcUhlKGkpLGUudHlwZT09PSJlbmQiJiZLSGUoaSksKGUudHlwZT09PSJmb3JrInx8ZS50eXBlPT09ImpvaW4iKSYmUUhlKGksZSksZS50eXBlPT09Im5vdGUiJiZKSGUoZS5ub3RlLnRleHQsaSksZS50eXBlPT09ImRpdmlkZXIiJiZZSGUoaSksZS50eXBlPT09ImRlZmF1bHQiJiZlLmRlc2NyaXB0aW9ucy5sZW5ndGg9PT0wJiZYSGUoaSxlKSxlLnR5cGU9PT0iZGVmYXVsdCImJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZqSGUoaSxlKTtsZXQgYT1pLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIG4ud2lkdGg9YS53aWR0aCsyKm1lKCkuc3RhdGUucGFkZGluZyxuLmhlaWdodD1hLmhlaWdodCsyKm1lKCkuc3RhdGUucGFkZGluZyxufSwiZHJhd1N0YXRlIiksQXBlPTAsRHBlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPW8oZnVuY3Rpb24odSl7c3dpdGNoKHUpe2Nhc2UgdGwucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSB0bC5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgdGwucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSB0bC5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fSwiZ2V0UmVsYXRpb25UeXBlIik7ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKHU9PiFOdW1iZXIuaXNOYU4odS55KSk7bGV0IGk9ZS5wb2ludHMsYT1DbCgpLngoZnVuY3Rpb24odSl7cmV0dXJuIHUueH0pLnkoZnVuY3Rpb24odSl7cmV0dXJuIHUueX0pLmN1cnZlKE5vKSxzPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYShpKSkuYXR0cigiaWQiLCJlZGdlIitBcGUpLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpLGw9IiI7aWYobWUoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYobD1tdSghMCkpLHMuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2wrIiMiK24odGwucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksci50aXRsZSE9PXZvaWQgMCl7bGV0IHU9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx7eDpoLHk6Zn09VnQuY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpLGQ9WmUuZ2V0Um93cyhyLnRpdGxlKSxwPTAsbT1bXSxnPTAseT0wO2ZvcihsZXQgYj0wO2I8PWQubGVuZ3RoO2IrKyl7bGV0IFQ9dS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZFtiXSkuYXR0cigieCIsaCkuYXR0cigieSIsZitwKSxTPVQubm9kZSgpLmdldEJCb3goKTtnPU1hdGgubWF4KGcsUy53aWR0aCkseT1NYXRoLm1pbih5LFMueCksWC5pbmZvKFMueCxoLGYrcCkscD09PTAmJihwPVQubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsWC5pbmZvKCJUaXRsZSBoZWlnaHQiLHAsZikpLG0ucHVzaChUKX1sZXQgdj1wKmQubGVuZ3RoO2lmKGQubGVuZ3RoPjEpe2xldCBiPShkLmxlbmd0aC0xKSpwKi41O20uZm9yRWFjaCgoVCxTKT0+VC5hdHRyKCJ5IixmK1MqcC1iKSksdj1wKmQubGVuZ3RofWxldCB4PXUubm9kZSgpLmdldEJCb3goKTt1Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsaC1nLzItbWUoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLGYtdi8yLW1lKCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLGcrbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHYrbWUoKS5zdGF0ZS5wYWRkaW5nKSxYLmluZm8oeCl9QXBlKyt9LCJkcmF3RWRnZSIpfSk7dmFyIGdvLEhQLGVXZSx0V2UscldlLG5XZSxScGUsTnBlLE1wZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7SlIoKTtXbygpO3l0KCk7cHIoKTtMcGUoKTtHdCgpO3hpKCk7SFA9e30sZVdlPW8oZnVuY3Rpb24oKXt9LCJzZXRDb25mIiksdFdlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiaW5zZXJ0TWFya2VycyIpLHJXZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2dvPW1lKCkuc3RhdGU7bGV0IGk9bWUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9R2UoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9HZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksbD1pPT09InNhbmRib3giP2Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7WC5kZWJ1ZygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTtsZXQgdT1zLnNlbGVjdChgW2lkPScke2V9J11gKTt0V2UodSk7bGV0IGg9bi5kYi5nZXRSb290RG9jKCk7UnBlKGgsdSx2b2lkIDAsITEscyxsLG4pO2xldCBmPWdvLnBhZGRpbmcsZD11Lm5vZGUoKS5nZXRCQm94KCkscD1kLndpZHRoK2YqMixtPWQuaGVpZ2h0K2YqMixnPXAqMS43NTtmbih1LG0sZyxnby51c2VNYXhXaWR0aCksdS5hdHRyKCJ2aWV3Qm94IixgJHtkLngtZ28ucGFkZGluZ30gICR7ZC55LWdvLnBhZGRpbmd9IGArcCsiICIrbSl9LCJkcmF3IiksbldlPW8odD0+dD90Lmxlbmd0aCpnby5mb250U2l6ZUZhY3RvcjoxLCJnZXRMYWJlbFdpZHRoIiksUnBlPW8oKHQsZSxyLG4saSxhLHMpPT57bGV0IGw9bmV3IHNuKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSksdSxoPSEwO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5zdG10PT09InJlbGF0aW9uIil7aD0hMTticmVha31yP2wuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpoPzE6Z28uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmg/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpsLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmg/MTpnby5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6aD8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksbC5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtsZXQgZj1zLmRiLmdldFN0YXRlcygpLGQ9cy5kYi5nZXRSZWxhdGlvbnMoKSxwPU9iamVjdC5rZXlzKGYpLG09ITA7Zm9yKGxldCBiIG9mIHApe2xldCBUPWZbYl07ciYmKFQucGFyZW50SWQ9cik7bGV0IFM7aWYoVC5kb2Mpe2xldCB3PWUuYXBwZW5kKCJnIikuYXR0cigiaWQiLFQuaWQpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2lmKFM9UnBlKFQuZG9jLHcsVC5pZCwhbixpLGEscyksbSl7dz1fcGUodyxULG4pO2xldCBFPXcubm9kZSgpLmdldEJCb3goKTtTLndpZHRoPUUud2lkdGgsUy5oZWlnaHQ9RS5oZWlnaHQrZ28ucGFkZGluZy8yLEhQW1QuaWRdPXt5OmdvLmNvbXBvc2l0VGl0bGVTaXplfX1lbHNle2xldCBFPXcubm9kZSgpLmdldEJCb3goKTtTLndpZHRoPUUud2lkdGgsUy5oZWlnaHQ9RS5oZWlnaHR9fWVsc2UgUz1VUChlLFQsbCk7aWYoVC5ub3RlKXtsZXQgdz17ZGVzY3JpcHRpb25zOltdLGlkOlQuaWQrIi1ub3RlIixub3RlOlQubm90ZSx0eXBlOiJub3RlIn0sRT1VUChlLHcsbCk7VC5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiPyhsLnNldE5vZGUoUy5pZCsiLW5vdGUiLEUpLGwuc2V0Tm9kZShTLmlkLFMpKToobC5zZXROb2RlKFMuaWQsUyksbC5zZXROb2RlKFMuaWQrIi1ub3RlIixFKSksbC5zZXRQYXJlbnQoUy5pZCxTLmlkKyItZ3JvdXAiKSxsLnNldFBhcmVudChTLmlkKyItbm90ZSIsUy5pZCsiLWdyb3VwIil9ZWxzZSBsLnNldE5vZGUoUy5pZCxTKX1YLmRlYnVnKCJDb3VudD0iLGwubm9kZUNvdW50KCksbCk7bGV0IGc9MDtkLmZvckVhY2goZnVuY3Rpb24oYil7ZysrLFguZGVidWcoIlNldHRpbmcgZWRnZSIsYiksbC5zZXRFZGdlKGIuaWQxLGIuaWQyLHtyZWxhdGlvbjpiLHdpZHRoOm5XZShiLnRpdGxlKSxoZWlnaHQ6Z28ubGFiZWxIZWlnaHQqWmUuZ2V0Um93cyhiLnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK2cpfSksRzIobCksWC5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixsLm5vZGVzKCkpO2xldCB5PWUubm9kZSgpO2wubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IhPT12b2lkIDAmJmwubm9kZShiKSE9PXZvaWQgMD8oWC53YXJuKCJOb2RlICIrYisiOiAiK0pTT04uc3RyaW5naWZ5KGwubm9kZShiKSkpLGkuc2VsZWN0KCIjIit5LmlkKyIgIyIrYikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGwubm9kZShiKS54LWwubm9kZShiKS53aWR0aC8yKSsiLCIrKGwubm9kZShiKS55KyhIUFtiXT9IUFtiXS55OjApLWwubm9kZShiKS5oZWlnaHQvMikrIiApIiksaS5zZWxlY3QoIiMiK3kuaWQrIiAjIitiKS5hdHRyKCJkYXRhLXgtc2hpZnQiLGwubm9kZShiKS54LWwubm9kZShiKS53aWR0aC8yKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK3kuaWQrIiAjIitiKyIgLmRpdmlkZXIiKS5mb3JFYWNoKFM9PntsZXQgdz1TLnBhcmVudEVsZW1lbnQsRT0wLF89MDt3JiYody5wYXJlbnRFbGVtZW50JiYoRT13LnBhcmVudEVsZW1lbnQuZ2V0QkJveCgpLndpZHRoKSxfPXBhcnNlSW50KHcuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKF8pJiYoXz0wKSksUy5zZXRBdHRyaWJ1dGUoIngxIiwwLV8rOCksUy5zZXRBdHRyaWJ1dGUoIngyIixFLV8tOCl9KSk6WC5kZWJ1ZygiTm8gTm9kZSAiK2IrIjogIitKU09OLnN0cmluZ2lmeShsLm5vZGUoYikpKX0pO2xldCB2PXkuZ2V0QkJveCgpO2wuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IhPT12b2lkIDAmJmwuZWRnZShiKSE9PXZvaWQgMCYmKFguZGVidWcoIkVkZ2UgIitiLnYrIiAtPiAiK2IudysiOiAiK0pTT04uc3RyaW5naWZ5KGwuZWRnZShiKSkpLERwZShlLGwuZWRnZShiKSxsLmVkZ2UoYikucmVsYXRpb24pKX0pLHY9eS5nZXRCQm94KCk7bGV0IHg9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHgud2lkdGg9di53aWR0aCsyKmdvLnBhZGRpbmcseC5oZWlnaHQ9di5oZWlnaHQrMipnby5wYWRkaW5nLFguZGVidWcoIkRvYyByZW5kZXJlZCIseCxsKSx4fSwicmVuZGVyRG9jIiksTnBlPXtzZXRDb25mOmVXZSxkcmF3OnJXZX19KTt2YXIgSXBlPXt9O3VyKElwZSx7ZGlhZ3JhbTooKT0+aVdlfSk7dmFyIGlXZSxPcGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDUCgpO2M2KCk7VlAoKTtNcGUoKTtpV2U9e3BhcnNlcjpKUyxnZXQgZGIoKXtyZXR1cm4gbmV3IHRsKDEpfSxyZW5kZXJlcjpOcGUsc3R5bGVzOnU2LGluaXQ6byh0PT57dC5zdGF0ZXx8KHQuc3RhdGU9e30pLHQuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIEZwZT17fTt1cihGcGUse2RpYWdyYW06KCk9PmxXZX0pO3ZhciBsV2UsJHBlPU4oKCk9PnsidXNlIHN0cmljdCI7Q1AoKTtjNigpO1ZQKCk7R1AoKTtsV2U9e3BhcnNlcjpKUyxnZXQgZGIoKXtyZXR1cm4gbmV3IHRsKDIpfSxyZW5kZXJlcjpFcGUsc3R5bGVzOnU2LGluaXQ6byh0PT57dC5zdGF0ZXx8KHQuc3RhdGU9e30pLHQuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIFdQLFZwZSxVcGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXUD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oZCxwLG0sZyl7Zm9yKG09bXx8e30sZz1kLmxlbmd0aDtnLS07bVtkW2ddXT1wKTtyZXR1cm4gbX0sIm8iKSxlPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHI9WzEsOV0sbj1bMSwxMF0saT1bMSwxMV0sYT1bMSwxMl0scz1bMSwxM10sbD1bMSwxNF0sdT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcsdGFza05hbWU6MTgsdGFza0RhdGE6MTksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMTg6InRhc2tOYW1lIiwxOToidGFza0RhdGEifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihwLG0sZyx5LHYseCxiKXt2YXIgVD14Lmxlbmd0aC0xO3N3aXRjaCh2KXtjYXNlIDE6cmV0dXJuIHhbVC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzp4W1QtMV0ucHVzaCh4W1RdKSx0aGlzLiQ9eFtULTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPXhbVF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Onkuc2V0RGlhZ3JhbVRpdGxlKHhbVF0uc3Vic3RyKDYpKSx0aGlzLiQ9eFtUXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD14W1RdLnRyaW0oKSx5LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD14W1RdLnRyaW0oKSx5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjp5LmFkZFNlY3Rpb24oeFtUXS5zdWJzdHIoOCkpLHRoaXMuJD14W1RdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnkuYWRkVGFzayh4W1QtMV0seFtUXSksdGhpcy4kPSJ0YXNrIjticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjE1LDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSx0KGUsWzIsMTFdKSx0KGUsWzIsMTJdKSx7MTk6WzEsMThdfSx0KGUsWzIsNF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSksdChlLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihwLG0pe2lmKG0ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShwKTtlbHNle3ZhciBnPW5ldyBFcnJvcihwKTt0aHJvdyBnLmhhc2g9bSxnfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHApe3ZhciBtPXRoaXMsZz1bMF0seT1bXSx2PVtudWxsXSx4PVtdLGI9dGhpcy50YWJsZSxUPSIiLFM9MCx3PTAsRT0wLF89MixDPTEsRD14LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLE89T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxSPXt5eTp7fX07Zm9yKHZhciBrIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaykmJihSLnl5W2tdPXRoaXMueXlba10pO08uc2V0SW5wdXQocCxSLnl5KSxSLnl5LmxleGVyPU8sUi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgTy55eWxsb2M+InUiJiYoTy55eWxsb2M9e30pO3ZhciBMPU8ueXlsbG9jO3gucHVzaChMKTt2YXIgQT1PLm9wdGlvbnMmJk8ub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFIueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Ui55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBJKFEpe2cubGVuZ3RoPWcubGVuZ3RoLTIqUSx2Lmxlbmd0aD12Lmxlbmd0aC1RLHgubGVuZ3RoPXgubGVuZ3RoLVF9byhJLCJwb3BTdGFjayIpO2Z1bmN0aW9uIE0oKXt2YXIgUTtyZXR1cm4gUT15LnBvcCgpfHxPLmxleCgpfHxDLHR5cGVvZiBRIT0ibnVtYmVyIiYmKFEgaW5zdGFuY2VvZiBBcnJheSYmKHk9USxRPXkucG9wKCkpLFE9bS5zeW1ib2xzX1tRXXx8USksUX1vKE0sImxleCIpO2Zvcih2YXIgUCxCLEYseiwkLFUsSz17fSxlZSxZLGNlLFo7Oyl7aWYoRj1nW2cubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbRl0/ej10aGlzLmRlZmF1bHRBY3Rpb25zW0ZdOigoUD09PW51bGx8fHR5cGVvZiBQPiJ1IikmJihQPU0oKSksej1iW0ZdJiZiW0ZdW1BdKSx0eXBlb2Ygej4idSJ8fCF6Lmxlbmd0aHx8IXpbMF0pe3ZhciB1ZT0iIjtaPVtdO2ZvcihlZSBpbiBiW0ZdKXRoaXMudGVybWluYWxzX1tlZV0mJmVlPl8mJloucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2VlXSsiJyIpO08uc2hvd1Bvc2l0aW9uP3VlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFMrMSkrYDoKYCtPLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArWi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1BdfHxQKSsiJyI6dWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUysxKSsiOiBVbmV4cGVjdGVkICIrKFA9PUM/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUF18fFApKyInIiksdGhpcy5wYXJzZUVycm9yKHVlLHt0ZXh0Ok8ubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1BdfHxQLGxpbmU6Ty55eWxpbmVubyxsb2M6TCxleHBlY3RlZDpafSl9aWYoelswXWluc3RhbmNlb2YgQXJyYXkmJnoubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitGKyIsIHRva2VuOiAiK1ApO3N3aXRjaCh6WzBdKXtjYXNlIDE6Zy5wdXNoKFApLHYucHVzaChPLnl5dGV4dCkseC5wdXNoKE8ueXlsbG9jKSxnLnB1c2goelsxXSksUD1udWxsLEI/KFA9QixCPW51bGwpOih3PU8ueXlsZW5nLFQ9Ty55eXRleHQsUz1PLnl5bGluZW5vLEw9Ty55eWxsb2MsRT4wJiZFLS0pO2JyZWFrO2Nhc2UgMjppZihZPXRoaXMucHJvZHVjdGlvbnNfW3pbMV1dWzFdLEsuJD12W3YubGVuZ3RoLVldLEsuXyQ9e2ZpcnN0X2xpbmU6eFt4Lmxlbmd0aC0oWXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnhbeC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp4W3gubGVuZ3RoLShZfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhbeC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEEmJihLLl8kLnJhbmdlPVt4W3gubGVuZ3RoLShZfHwxKV0ucmFuZ2VbMF0seFt4Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLFU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEssW1QsdyxTLFIueXkselsxXSx2LHhdLmNvbmNhdChEKSksdHlwZW9mIFU8InUiKXJldHVybiBVO1kmJihnPWcuc2xpY2UoMCwtMSpZKjIpLHY9di5zbGljZSgwLC0xKlkpLHg9eC5zbGljZSgwLC0xKlkpKSxnLnB1c2godGhpcy5wcm9kdWN0aW9uc19belsxXV1bMF0pLHYucHVzaChLLiQpLHgucHVzaChLLl8kKSxjZT1iW2dbZy5sZW5ndGgtMl1dW2dbZy5sZW5ndGgtMV1dLGcucHVzaChjZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGg9ZnVuY3Rpb24oKXt2YXIgZD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG0sZyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihtLGcpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG0pfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ocCxtKXtyZXR1cm4gdGhpcy55eT1tfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1wLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXAsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXAsdGhpcy5tYXRjaGVkKz1wO3ZhciBtPXAubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBtPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxwfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHApe3ZhciBtPXAubGVuZ3RoLGc9cC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXArdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW0pLHRoaXMub2Zmc2V0LT1tO3ZhciB5PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGcubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1nLmxlbmd0aC0xKTt2YXIgdj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Zz8oZy5sZW5ndGg9PT15Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreVt5Lmxlbmd0aC1nLmxlbmd0aF0ubGVuZ3RoLWdbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1tfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3ZbMF0sdlswXSt0aGlzLnl5bGVuZy1tXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24ocCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHApKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBwPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4ocC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Auc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgcD10aGlzLm1hdGNoO3JldHVybiBwLmxlbmd0aDwyMCYmKHArPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXAubGVuZ3RoKSksKHAuc3Vic3RyKDAsMjApKyhwLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5wYXN0SW5wdXQoKSxtPW5ldyBBcnJheShwLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHArdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK20rIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHAsbSl7dmFyIGcseSx2O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih2PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHYueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseT1wWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx5JiYodGhpcy55eWxpbmVubys9eS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp5P3lbeS5sZW5ndGgtMV0ubGVuZ3RoLXlbeS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitwWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXBbMF0sdGhpcy5tYXRjaCs9cFswXSx0aGlzLm1hdGNoZXM9cCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShwWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1wWzBdLGc9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxnKXJldHVybiBnO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB4IGluIHYpdGhpc1t4XT12W3hdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBwLG0sZyx5O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHY9dGhpcy5fY3VycmVudFJ1bGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWlmKGc9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t2W3hdXSksZyYmKCFtfHxnWzBdLmxlbmd0aD5tWzBdLmxlbmd0aCkpe2lmKG09Zyx5PXgsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocD10aGlzLnRlc3RfbWF0Y2goZyx2W3hdKSxwIT09ITEpcmV0dXJuIHA7aWYodGhpcy5fYmFja3RyYWNrKXttPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIG0/KHA9dGhpcy50ZXN0X21hdGNoKG0sdlt5XSkscCE9PSExP3A6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5leHQoKTtyZXR1cm4gbXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24obSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKG0pfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gbT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKG0pe3JldHVybiBtPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMobXx8MCksbT49MD90aGlzLmNvbmRpdGlvblN0YWNrW21dOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24obSl7dGhpcy5iZWdpbihtKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYpe3ZhciB4PXY7c3dpdGNoKHkpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAxMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gNDtjYXNlIDY6cmV0dXJuIDExO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNDticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gMTc7Y2FzZSAxNTpyZXR1cm4gMTg7Y2FzZSAxNjpyZXR1cm4gMTk7Y2FzZSAxNzpyZXR1cm4iOiI7Y2FzZSAxODpyZXR1cm4gNjtjYXNlIDE5OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gZH0oKTt1LmxleGVyPWg7ZnVuY3Rpb24gZigpe3RoaXMueXk9e319cmV0dXJuIG8oZiwiUGFyc2VyIiksZi5wcm90b3R5cGU9dSx1LlBhcnNlcj1mLG5ldyBmfSgpO1dQLnBhcnNlcj1XUDtWcGU9V1B9KTt2YXIgJDEscVAsUGIsQmIsZldlLGRXZSxwV2UsbVdlLGdXZSx5V2UsdldlLEhwZSx4V2UsWVAsV3BlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtjaSgpOyQxPSIiLHFQPVtdLFBiPVtdLEJiPVtdLGZXZT1vKGZ1bmN0aW9uKCl7cVAubGVuZ3RoPTAsUGIubGVuZ3RoPTAsJDE9IiIsQmIubGVuZ3RoPTAsa3IoKX0sImNsZWFyIiksZFdlPW8oZnVuY3Rpb24odCl7JDE9dCxxUC5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHBXZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHFQfSwiZ2V0U2VjdGlvbnMiKSxtV2U9byhmdW5jdGlvbigpe2xldCB0PUhwZSgpLGU9MTAwLHI9MDtmb3IoOyF0JiZyPGU7KXQ9SHBlKCkscisrO3JldHVybiBQYi5wdXNoKC4uLkJiKSxQYn0sImdldFRhc2tzIiksZ1dlPW8oZnVuY3Rpb24oKXtsZXQgdD1bXTtyZXR1cm4gUGIuZm9yRWFjaChyPT57ci5wZW9wbGUmJnQucHVzaCguLi5yLnBlb3BsZSl9KSxbLi4ubmV3IFNldCh0KV0uc29ydCgpfSwidXBkYXRlQWN0b3JzIikseVdlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLG49MCxpPVtdO3IubGVuZ3RoPT09MT8obj1OdW1iZXIoclswXSksaT1bXSk6KG49TnVtYmVyKHJbMF0pLGk9clsxXS5zcGxpdCgiLCIpKTtsZXQgYT1pLm1hcChsPT5sLnRyaW0oKSkscz17c2VjdGlvbjokMSx0eXBlOiQxLHBlb3BsZTphLHRhc2s6dCxzY29yZTpufTtCYi5wdXNoKHMpfSwiYWRkVGFzayIpLHZXZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXtzZWN0aW9uOiQxLHR5cGU6JDEsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX07UGIucHVzaChlKX0sImFkZFRhc2tPcmciKSxIcGU9byhmdW5jdGlvbigpe2xldCB0PW8oZnVuY3Rpb24ocil7cmV0dXJuIEJiW3JdLnByb2Nlc3NlZH0sImNvbXBpbGVUYXNrIiksZT0hMDtmb3IobGV0W3Isbl1vZiBCYi5lbnRyaWVzKCkpdChyKSxlPWUmJm4ucHJvY2Vzc2VkO3JldHVybiBlfSwiY29tcGlsZVRhc2tzIikseFdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gZ1dlKCl9LCJnZXRBY3RvcnMiKSxZUD17Z2V0Q29uZmlnOm8oKCk9Pm1lKCkuam91cm5leSwiZ2V0Q29uZmlnIiksY2xlYXI6ZldlLHNldERpYWdyYW1UaXRsZTpPcixnZXREaWFncmFtVGl0bGU6TnIsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0QWNjRGVzY3JpcHRpb246THIsZ2V0QWNjRGVzY3JpcHRpb246UnIsYWRkU2VjdGlvbjpkV2UsZ2V0U2VjdGlvbnM6cFdlLGdldFRhc2tzOm1XZSxhZGRUYXNrOnlXZSxhZGRUYXNrT3JnOnZXZSxnZXRBY3RvcnM6eFdlfX0pO3ZhciBiV2UscXBlLFlwZT1OKCgpPT57InVzZSBzdHJpY3QiO1htKCk7YldlPW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC50ZXh0Q29sb3J9OwogIH0KICAubW91dGggewogICAgc3Ryb2tlOiAjNjY2OwogIH0KCiAgbGluZSB7CiAgICBzdHJva2U6ICR7dC50ZXh0Q29sb3J9CiAgfQoKICAubGVnZW5kIHsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICB9CgogIC5sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICMzMzM7CiAgfQogIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn0KICB9CgogIC5mYWNlIHsKICAgICR7dC5mYWNlQ29sb3I/YGZpbGw6ICR7dC5mYWNlQ29sb3J9YDoiZmlsbDogI0ZGRjhEQyJ9OwogICAgc3Ryb2tlOiAjOTk5OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke3QuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDEuNXB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTB9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGUxfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlMn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTN9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU0fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlNX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTZ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU3fWA6IiJ9OwogIH0KCiAgLmFjdG9yLTAgewogICAgJHt0LmFjdG9yMD9gZmlsbDogJHt0LmFjdG9yMH1gOiIifTsKICB9CiAgLmFjdG9yLTEgewogICAgJHt0LmFjdG9yMT9gZmlsbDogJHt0LmFjdG9yMX1gOiIifTsKICB9CiAgLmFjdG9yLTIgewogICAgJHt0LmFjdG9yMj9gZmlsbDogJHt0LmFjdG9yMn1gOiIifTsKICB9CiAgLmFjdG9yLTMgewogICAgJHt0LmFjdG9yMz9gZmlsbDogJHt0LmFjdG9yM31gOiIifTsKICB9CiAgLmFjdG9yLTQgewogICAgJHt0LmFjdG9yND9gZmlsbDogJHt0LmFjdG9yNH1gOiIifTsKICB9CiAgLmFjdG9yLTUgewogICAgJHt0LmFjdG9yNT9gZmlsbDogJHt0LmFjdG9yNX1gOiIifTsKICB9CiAgJHtOYygpfQpgLCJnZXRTdHlsZXMiKSxxcGU9YldlfSk7dmFyIFhQLFRXZSxqcGUsS3BlLHdXZSxrV2UsWHBlLEVXZSxTV2UsUXBlLENXZSx6MSxacGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO3QyKCk7WFA9byhmdW5jdGlvbih0LGUpe3JldHVybiBOZCh0LGUpfSwiZHJhd1JlY3QiKSxUV2U9byhmdW5jdGlvbih0LGUpe2xldCBuPXQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeCkuYXR0cigiY3kiLGUuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLGk9dC5hcHBlbmQoImciKTtpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gtMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeCsxNS8zKS5hdHRyKCJjeSIsZS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gYSh1KXtsZXQgaD1TbCgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krMikrIikiKX1vKGEsInNtaWxlIik7ZnVuY3Rpb24gcyh1KXtsZXQgaD1TbCgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTt1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLmN4KyIsIisoZS5jeSs3KSsiKSIpfW8ocywic2FkIik7ZnVuY3Rpb24gbCh1KXt1LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixlLmN4LTUpLmF0dHIoInkxIixlLmN5KzcpLmF0dHIoIngyIixlLmN4KzUpLmF0dHIoInkyIixlLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9cmV0dXJuIG8obCwiYW1iaXZhbGVudCIpLGUuc2NvcmU+Mz9hKGkpOmUuc2NvcmU8Mz9zKGkpOmwoaSksbn0sImRyYXdGYWNlIiksanBlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIHIuYXR0cigiY3giLGUuY3gpLHIuYXR0cigiY3kiLGUuY3kpLHIuYXR0cigiY2xhc3MiLCJhY3Rvci0iK2UucG9zKSxyLmF0dHIoImZpbGwiLGUuZmlsbCksci5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxyLmF0dHIoInIiLGUuciksci5jbGFzcyE9PXZvaWQgMCYmci5hdHRyKCJjbGFzcyIsci5jbGFzcyksZS50aXRsZSE9PXZvaWQgMCYmci5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxyfSwiZHJhd0NpcmNsZSIpLEtwZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhZKHQsZSl9LCJkcmF3VGV4dCIpLHdXZT1vKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLGEscyxsLHUpe3JldHVybiBpKyIsIithKyIgIisoaStzKSsiLCIrYSsiICIrKGkrcykrIiwiKyhhK2wtdSkrIiAiKyhpK3MtdSoxLjIpKyIsIisoYStsKSsiICIraSsiLCIrKGErbCl9byhyLCJnZW5Qb2ludHMiKTtsZXQgbj10LmFwcGVuZCgicG9seWdvbiIpO24uYXR0cigicG9pbnRzIixyKGUueCxlLnksNTAsMjAsNykpLG4uYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5sYWJlbE1hcmdpbixlLng9ZS54Ky41KmUubGFiZWxNYXJnaW4sS3BlKHQsZSl9LCJkcmF3TGFiZWwiKSxrV2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5hcHBlbmQoImciKSxpPUFsKCk7aS54PWUueCxpLnk9ZS55LGkuZmlsbD1lLmZpbGwsaS53aWR0aD1yLndpZHRoKmUudGFza0NvdW50K3IuZGlhZ3JhbU1hcmdpblgqKGUudGFza0NvdW50LTEpLGkuaGVpZ2h0PXIuaGVpZ2h0LGkuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bSxpLnJ4PTMsaS5yeT0zLFhQKG4saSksUXBlKHIpKGUudGV4dCxuLGkueCxpLnksaS53aWR0aCxpLmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bX0scixlLmNvbG91cil9LCJkcmF3U2VjdGlvbiIpLFhwZT0tMSxFV2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49ZS54K3Iud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7WHBlKys7bGV0IGE9MzAwKzUqMzA7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK1hwZSkuYXR0cigieDEiLG4pLmF0dHIoInkxIixlLnkpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIsYSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLFRXZShpLHtjeDpuLGN5OjMwMCsoNS1lLnNjb3JlKSozMCxzY29yZTplLnNjb3JlfSk7bGV0IHM9QWwoKTtzLng9ZS54LHMueT1lLnkscy5maWxsPWUuZmlsbCxzLndpZHRoPXIud2lkdGgscy5oZWlnaHQ9ci5oZWlnaHQscy5jbGFzcz0idGFzayB0YXNrLXR5cGUtIitlLm51bSxzLnJ4PTMscy5yeT0zLFhQKGkscyk7bGV0IGw9ZS54KzE0O2UucGVvcGxlLmZvckVhY2godT0+e2xldCBoPWUuYWN0b3JzW3VdLmNvbG9yLGY9e2N4OmwsY3k6ZS55LHI6NyxmaWxsOmgsc3Ryb2tlOiIjMDAwIix0aXRsZTp1LHBvczplLmFjdG9yc1t1XS5wb3NpdGlvbn07anBlKGksZiksbCs9MTB9KSxRcGUocikoZS50YXNrLGkscy54LHMueSxzLndpZHRoLHMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHIsZS5jb2xvdXIpfSwiZHJhd1Rhc2siKSxTV2U9byhmdW5jdGlvbih0LGUpe2lUKHQsZSl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxRcGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCtoLzIrNSkuc3R5bGUoImZvbnQtY29sb3IiLGQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoaSk7bihwLGYpfW8odCwiYnlUZXh0Iik7ZnVuY3Rpb24gZShpLGEscyxsLHUsaCxmLGQscCl7bGV0e3Rhc2tGb250U2l6ZTptLHRhc2tGb250RmFtaWx5Omd9PWQseT1pLnNwbGl0KC88YnJccypcLz8+L2dpKTtmb3IobGV0IHY9MDt2PHkubGVuZ3RoO3YrKyl7bGV0IHg9diptLW0qKHkubGVuZ3RoLTEpLzIsYj1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsKS5hdHRyKCJmaWxsIixwKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixtKS5zdHlsZSgiZm9udC1mYW1pbHkiLGcpO2IuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJkeSIseCkudGV4dCh5W3ZdKSxiLmF0dHIoInkiLGwraC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hdHRyKCJwb3NpdGlvbiIsImZpeGVkIikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7Zy5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQoaSksZShpLHAscyxsLHUsaCxmLGQpLG4oZyxmKX1vKHIsImJ5Rm8iKTtmdW5jdGlvbiBuKGksYSl7Zm9yKGxldCBzIGluIGEpcyBpbiBhJiZpLmF0dHIocyxhW3NdKX1yZXR1cm4gbyhuLCJfc2V0VGV4dEF0dHJzIiksZnVuY3Rpb24oaSl7cmV0dXJuIGkudGV4dFBsYWNlbWVudD09PSJmbyI/cjppLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj90OmV9fSgpLENXZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfSwiaW5pdEdyYXBoaWNzIiksejE9e2RyYXdSZWN0OlhQLGRyYXdDaXJjbGU6anBlLGRyYXdTZWN0aW9uOmtXZSxkcmF3VGV4dDpLcGUsZHJhd0xhYmVsOndXZSxkcmF3VGFzazpFV2UsZHJhd0JhY2tncm91bmRSZWN0OlNXZSxpbml0R3JhcGhpY3M6Q1dlfX0pO2Z1bmN0aW9uIF9XZSh0KXtsZXQgZT1tZSgpLmpvdXJuZXkscj1lLm1heExhYmVsV2lkdGg7aDY9MDtsZXQgbj02MDtPYmplY3Qua2V5cyh0aCkuZm9yRWFjaChpPT57bGV0IGE9dGhbaV0uY29sb3Iscz17Y3g6MjAsY3k6bixyOjcsZmlsbDphLHN0cm9rZToiIzAwMCIscG9zOnRoW2ldLnBvc2l0aW9ufTt6MS5kcmF3Q2lyY2xlKHQscyk7bGV0IGw9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikudGV4dChpKSx1PWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO2wucmVtb3ZlKCk7bGV0IGg9W107aWYodTw9ciloPVtpXTtlbHNle2xldCBmPWkuc3BsaXQoIiAiKSxkPSIiO2w9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksZi5mb3JFYWNoKHA9PntsZXQgbT1kP2Ake2R9ICR7cH1gOnA7aWYobC50ZXh0KG0pLGwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPnIpe2lmKGQmJmgucHVzaChkKSxkPXAsbC50ZXh0KHApLGwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPnIpe2xldCB5PSIiO2ZvcihsZXQgdiBvZiBwKXkrPXYsbC50ZXh0KHkrIi0iKSxsLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD5yJiYoaC5wdXNoKHkuc2xpY2UoMCwtMSkrIi0iKSx5PXYpO2Q9eX19ZWxzZSBkPW19KSxkJiZoLnB1c2goZCksbC5yZW1vdmUoKX1oLmZvckVhY2goKGYsZCk9PntsZXQgcD17eDo0MCx5Om4rNytkKjIwLGZpbGw6IiM2NjYiLHRleHQ6Zix0ZXh0TWFyZ2luOmUuYm94VGV4dE1hcmdpbj8/NX0sZz16MS5kcmF3VGV4dCh0LHApLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtnPmg2JiZnPmUubGVmdE1hcmdpbi1nJiYoaDY9Zyl9KSxuKz1NYXRoLm1heCgyMCxoLmxlbmd0aCoyMCl9KX12YXIgQVdlLHRoLGg2LFVsLF9mLERXZSxybCxqUCxKcGUsTFdlLEtQLGUwZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7WnBlKCk7R3QoKTt4aSgpO0FXZT1vKGZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7VWxbcl09dFtyXX0pfSwic2V0Q29uZiIpLHRoPXt9LGg2PTA7byhfV2UsImRyYXdBY3RvckxlZ2VuZCIpO1VsPW1lKCkuam91cm5leSxfZj0wLERXZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW1lKCksYT1pLmpvdXJuZXkudGl0bGVDb2xvcixzPWkuam91cm5leS50aXRsZUZvbnRTaXplLGw9aS5qb3VybmV5LnRpdGxlRm9udEZhbWlseSx1PWkuc2VjdXJpdHlMZXZlbCxoO3U9PT0ic2FuZGJveCImJihoPUdlKCIjaSIrZSkpO2xldCBmPXU9PT0ic2FuZGJveCI/R2UoaC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpO3JsLmluaXQoKTtsZXQgZD1mLnNlbGVjdCgiIyIrZSk7ejEuaW5pdEdyYXBoaWNzKGQpO2xldCBwPW4uZGIuZ2V0VGFza3MoKSxtPW4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCksZz1uLmRiLmdldEFjdG9ycygpO2ZvcihsZXQgUyBpbiB0aClkZWxldGUgdGhbU107bGV0IHk9MDtnLmZvckVhY2goUz0+e3RoW1NdPXtjb2xvcjpVbC5hY3RvckNvbG91cnNbeSVVbC5hY3RvckNvbG91cnMubGVuZ3RoXSxwb3NpdGlvbjp5fSx5Kyt9KSxfV2UoZCksX2Y9VWwubGVmdE1hcmdpbitoNixybC5pbnNlcnQoMCwwLF9mLE9iamVjdC5rZXlzKHRoKS5sZW5ndGgqNTApLExXZShkLHAsMCk7bGV0IHY9cmwuZ2V0Qm91bmRzKCk7bSYmZC5hcHBlbmQoInRleHQiKS50ZXh0KG0pLmF0dHIoIngiLF9mKS5hdHRyKCJmb250LXNpemUiLHMpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KS5hdHRyKCJmaWxsIixhKS5hdHRyKCJmb250LWZhbWlseSIsbCk7bGV0IHg9di5zdG9weS12LnN0YXJ0eSsyKlVsLmRpYWdyYW1NYXJnaW5ZLGI9X2Yrdi5zdG9weCsyKlVsLmRpYWdyYW1NYXJnaW5YO2ZuKGQseCxiLFVsLnVzZU1heFdpZHRoKSxkLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixfZikuYXR0cigieTEiLFVsLmhlaWdodCo0KS5hdHRyKCJ4MiIsYi1fZi00KS5hdHRyKCJ5MiIsVWwuaGVpZ2h0KjQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7bGV0IFQ9bT83MDowO2QuYXR0cigidmlld0JveCIsYCR7di5zdGFydHh9IC0yNSAke2J9ICR7eCtUfWApLGQuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxkLmF0dHIoImhlaWdodCIseCtUKzI1KX0sImRyYXciKSxybD17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0Om8oZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSwiaW5pdCIpLHVwZGF0ZVZhbDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RbZV09PT12b2lkIDA/dFtlXT1yOnRbZV09bihyLHRbZV0pfSwidXBkYXRlVmFsIiksdXBkYXRlQm91bmRzOm8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9bWUoKS5qb3VybmV5LGE9dGhpcyxzPTA7ZnVuY3Rpb24gbCh1KXtyZXR1cm4gbyhmdW5jdGlvbihmKXtzKys7bGV0IGQ9YS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1zKzE7YS51cGRhdGVWYWwoZiwic3RhcnR5IixlLWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B5IixuK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKHJsLmRhdGEsInN0YXJ0eCIsdC1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChybC5kYXRhLCJzdG9weCIscitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSx1IT09ImFjdGl2YXRpb24iJiYoYS51cGRhdGVWYWwoZiwic3RhcnR4Iix0LWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B4IixyK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKHJsLmRhdGEsInN0YXJ0eSIsZS1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChybC5kYXRhLCJzdG9weSIsbitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSl9LCJ1cGRhdGVJdGVtQm91bmRzIil9byhsLCJ1cGRhdGVGbiIpLHRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKGwoKSl9LCJ1cGRhdGVCb3VuZHMiKSxpbnNlcnQ6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1NYXRoLm1pbih0LHIpLGE9TWF0aC5tYXgodCxyKSxzPU1hdGgubWluKGUsbiksbD1NYXRoLm1heChlLG4pO3RoaXMudXBkYXRlVmFsKHJsLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwocmwuZGF0YSwic3RhcnR5IixzLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChybC5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwocmwuZGF0YSwic3RvcHkiLGwsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGkscyxhLGwpfSwiaW5zZXJ0IiksYnVtcFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LCJidW1wVmVydGljYWxQb3MiKSxnZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LCJnZXRWZXJ0aWNhbFBvcyIpLGdldEJvdW5kczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX0sImdldEJvdW5kcyIpfSxqUD1VbC5zZWN0aW9uRmlsbHMsSnBlPVVsLnNlY3Rpb25Db2xvdXJzLExXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1tZSgpLmpvdXJuZXksaT0iIixhPW4uaGVpZ2h0KjIrbi5kaWFncmFtTWFyZ2luWSxzPXIrYSxsPTAsdT0iI0NDQyIsaD0iYmxhY2siLGY9MDtmb3IobGV0W2QscF1vZiBlLmVudHJpZXMoKSl7aWYoaSE9PXAuc2VjdGlvbil7dT1qUFtsJWpQLmxlbmd0aF0sZj1sJWpQLmxlbmd0aCxoPUpwZVtsJUpwZS5sZW5ndGhdO2xldCBnPTAseT1wLnNlY3Rpb247Zm9yKGxldCB4PWQ7eDxlLmxlbmd0aCYmZVt4XS5zZWN0aW9uPT15O3grKylnPWcrMTtsZXQgdj17eDpkKm4udGFza01hcmdpbitkKm4ud2lkdGgrX2YseTo1MCx0ZXh0OnAuc2VjdGlvbixmaWxsOnUsbnVtOmYsY29sb3VyOmgsdGFza0NvdW50Omd9O3oxLmRyYXdTZWN0aW9uKHQsdixuKSxpPXAuc2VjdGlvbixsKyt9bGV0IG09cC5wZW9wbGUucmVkdWNlKChnLHkpPT4odGhbeV0mJihnW3ldPXRoW3ldKSxnKSx7fSk7cC54PWQqbi50YXNrTWFyZ2luK2Qqbi53aWR0aCtfZixwLnk9cyxwLndpZHRoPW4uZGlhZ3JhbU1hcmdpblgscC5oZWlnaHQ9bi5kaWFncmFtTWFyZ2luWSxwLmNvbG91cj1oLHAuZmlsbD11LHAubnVtPWYscC5hY3RvcnM9bSx6MS5kcmF3VGFzayh0LHAsbikscmwuaW5zZXJ0KHAueCxwLnkscC54K3Aud2lkdGgrbi50YXNrTWFyZ2luLDMwMCs1KjMwKX19LCJkcmF3VGFza3MiKSxLUD17c2V0Q29uZjpBV2UsZHJhdzpEV2V9fSk7dmFyIHQwZT17fTt1cih0MGUse2RpYWdyYW06KCk9PlJXZX0pO3ZhciBSV2UscjBlPU4oKCk9PnsidXNlIHN0cmljdCI7VXBlKCk7V3BlKCk7WXBlKCk7ZTBlKCk7UldlPXtwYXJzZXI6VnBlLGRiOllQLHJlbmRlcmVyOktQLHN0eWxlczpxcGUsaW5pdDpvKHQ9PntLUC5zZXRDb25mKHQuam91cm5leSksWVAuY2xlYXIoKX0sImluaXQiKX19KTt2YXIgWlAsYzBlLHUwZT1OKCgpPT57InVzZSBzdHJpY3QiO1pQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihwLG0sZyx5KXtmb3IoZz1nfHx7fSx5PXAubGVuZ3RoO3ktLTtnW3BbeV1dPW0pO3JldHVybiBnfSwibyIpLGU9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywyMCwyMV0scj1bMSw5XSxuPVsxLDEwXSxpPVsxLDExXSxhPVsxLDEyXSxzPVsxLDEzXSxsPVsxLDE2XSx1PVsxLDE3XSxoPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLHRpbWVsaW5lOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcscGVyaW9kX3N0YXRlbWVudDoxOCxldmVudF9zdGF0ZW1lbnQ6MTkscGVyaW9kOjIwLGV2ZW50OjIxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJ0aW1lbGluZSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDExOiJ0aXRsZSIsMTI6ImFjY190aXRsZSIsMTM6ImFjY190aXRsZV92YWx1ZSIsMTQ6ImFjY19kZXNjciIsMTU6ImFjY19kZXNjcl92YWx1ZSIsMTY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE3OiJzZWN0aW9uIiwyMDoicGVyaW9kIiwyMToiZXZlbnQifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzE4LDFdLFsxOSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYseCxiLFQpe3ZhciBTPWIubGVuZ3RoLTE7c3dpdGNoKHgpe2Nhc2UgMTpyZXR1cm4gYltTLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOmJbUy0xXS5wdXNoKGJbU10pLHRoaXMuJD1iW1MtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9YltTXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6di5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShiW1NdLnN1YnN0cig2KSksdGhpcy4kPWJbU10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YltTXS50cmltKCksdi5nZXRDb21tb25EYigpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1iW1NdLnRyaW0oKSx2LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOnYuYWRkU2VjdGlvbihiW1NdLnN1YnN0cig4KSksdGhpcy4kPWJbU10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6di5hZGRUYXNrKGJbU10sMCwiIiksdGhpcy4kPWJbU107YnJlYWs7Y2FzZSAxNjp2LmFkZEV2ZW50KGJbU10uc3Vic3RyKDIpKSx0aGlzLiQ9YltTXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODoxNCwxOToxNSwyMDpsLDIxOnV9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MTgsMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4OjE0LDE5OjE1LDIwOmwsMjE6dX0sdChlLFsyLDVdKSx0KGUsWzIsNl0pLHQoZSxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0sdChlLFsyLDExXSksdChlLFsyLDEyXSksdChlLFsyLDEzXSksdChlLFsyLDE0XSksdChlLFsyLDE1XSksdChlLFsyLDE2XSksdChlLFsyLDRdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24obSxnKXtpZihnLnJlY292ZXJhYmxlKXRoaXMudHJhY2UobSk7ZWxzZXt2YXIgeT1uZXcgRXJyb3IobSk7dGhyb3cgeS5oYXNoPWcseX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihtKXt2YXIgZz10aGlzLHk9WzBdLHY9W10seD1bbnVsbF0sYj1bXSxUPXRoaXMudGFibGUsUz0iIix3PTAsRT0wLF89MCxDPTIsRD0xLE89Yi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxSPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksaz17eXk6e319O2Zvcih2YXIgTCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEwpJiYoay55eVtMXT10aGlzLnl5W0xdKTtSLnNldElucHV0KG0say55eSksay55eS5sZXhlcj1SLGsueXkucGFyc2VyPXRoaXMsdHlwZW9mIFIueXlsbG9jPiJ1IiYmKFIueXlsbG9jPXt9KTt2YXIgQT1SLnl5bGxvYztiLnB1c2goQSk7dmFyIEk9Ui5vcHRpb25zJiZSLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBrLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWsueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTShqKXt5Lmxlbmd0aD15Lmxlbmd0aC0yKmoseC5sZW5ndGg9eC5sZW5ndGgtaixiLmxlbmd0aD1iLmxlbmd0aC1qfW8oTSwicG9wU3RhY2siKTtmdW5jdGlvbiBQKCl7dmFyIGo7cmV0dXJuIGo9di5wb3AoKXx8Ui5sZXgoKXx8RCx0eXBlb2YgaiE9Im51bWJlciImJihqIGluc3RhbmNlb2YgQXJyYXkmJih2PWosaj12LnBvcCgpKSxqPWcuc3ltYm9sc19bal18fGopLGp9byhQLCJsZXgiKTtmb3IodmFyIEIsRix6LCQsVSxLLGVlPXt9LFksY2UsWix1ZTs7KXtpZih6PXlbeS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t6XT8kPXRoaXMuZGVmYXVsdEFjdGlvbnNbel06KChCPT09bnVsbHx8dHlwZW9mIEI+InUiKSYmKEI9UCgpKSwkPVRbel0mJlRbel1bQl0pLHR5cGVvZiAkPiJ1Inx8ISQubGVuZ3RofHwhJFswXSl7dmFyIFE9IiI7dWU9W107Zm9yKFkgaW4gVFt6XSl0aGlzLnRlcm1pbmFsc19bWV0mJlk+QyYmdWUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1ldKyInIik7Ui5zaG93UG9zaXRpb24/UT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh3KzEpK2A6CmArUi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3VlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bQl18fEIpKyInIjpRPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHcrMSkrIjogVW5leHBlY3RlZCAiKyhCPT1EPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0JdfHxCKSsiJyIpLHRoaXMucGFyc2VFcnJvcihRLHt0ZXh0OlIubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0JdfHxCLGxpbmU6Ui55eWxpbmVubyxsb2M6QSxleHBlY3RlZDp1ZX0pfWlmKCRbMF1pbnN0YW5jZW9mIEFycmF5JiYkLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIreisiLCB0b2tlbjogIitCKTtzd2l0Y2goJFswXSl7Y2FzZSAxOnkucHVzaChCKSx4LnB1c2goUi55eXRleHQpLGIucHVzaChSLnl5bGxvYykseS5wdXNoKCRbMV0pLEI9bnVsbCxGPyhCPUYsRj1udWxsKTooRT1SLnl5bGVuZyxTPVIueXl0ZXh0LHc9Ui55eWxpbmVubyxBPVIueXlsbG9jLF8+MCYmXy0tKTticmVhaztjYXNlIDI6aWYoY2U9dGhpcy5wcm9kdWN0aW9uc19bJFsxXV1bMV0sZWUuJD14W3gubGVuZ3RoLWNlXSxlZS5fJD17Zmlyc3RfbGluZTpiW2IubGVuZ3RoLShjZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmJbYi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpiW2IubGVuZ3RoLShjZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpiW2IubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxJJiYoZWUuXyQucmFuZ2U9W2JbYi5sZW5ndGgtKGNlfHwxKV0ucmFuZ2VbMF0sYltiLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEs9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGVlLFtTLEUsdyxrLnl5LCRbMV0seCxiXS5jb25jYXQoTykpLHR5cGVvZiBLPCJ1IilyZXR1cm4gSztjZSYmKHk9eS5zbGljZSgwLC0xKmNlKjIpLHg9eC5zbGljZSgwLC0xKmNlKSxiPWIuc2xpY2UoMCwtMSpjZSkpLHkucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1skWzFdXVswXSkseC5wdXNoKGVlLiQpLGIucHVzaChlZS5fJCksWj1UW3lbeS5sZW5ndGgtMl1dW3lbeS5sZW5ndGgtMV1dLHkucHVzaChaKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZj1mdW5jdGlvbigpe3ZhciBwPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZyx5KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGcseSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihtLGcpe3JldHVybiB0aGlzLnl5PWd8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW0sdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bSx0aGlzLm1hdGNoZWQrPW07dmFyIGc9bS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGc/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG19LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24obSl7dmFyIGc9bS5sZW5ndGgseT1tLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZyksdGhpcy5vZmZzZXQtPWc7dmFyIHY9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkseS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXkubGVuZ3RoLTEpO3ZhciB4PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp5Pyh5Lmxlbmd0aD09PXYubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt2W3YubGVuZ3RoLXkubGVuZ3RoXS5sZW5ndGgteVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWd9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1beFswXSx4WzBdK3RoaXMueXlsZW5nLWddKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihtKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtLmxlbmd0aD4yMD8iLi4uIjoiIikrbS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMubWF0Y2g7cmV0dXJuIG0ubGVuZ3RoPDIwJiYobSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbS5sZW5ndGgpKSwobS5zdWJzdHIoMCwyMCkrKG0ubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLnBhc3RJbnB1dCgpLGc9bmV3IEFycmF5KG0ubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gbSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24obSxnKXt2YXIgeSx2LHg7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHg9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoeC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx2PW1bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHYmJih0aGlzLnl5bGluZW5vKz12Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnY/dlt2Lmxlbmd0aC0xXS5sZW5ndGgtdlt2Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK21bMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bVswXSx0aGlzLm1hdGNoKz1tWzBdLHRoaXMubWF0Y2hlcz1tLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG1bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW1bMF0seT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxnLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHkpcmV0dXJuIHk7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGIgaW4geCl0aGlzW2JdPXhbYl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG0sZyx5LHY7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgeD10aGlzLl9jdXJyZW50UnVsZXMoKSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYoeT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3hbYl1dKSx5JiYoIWd8fHlbMF0ubGVuZ3RoPmdbMF0ubGVuZ3RoKSl7aWYoZz15LHY9Yix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtPXRoaXMudGVzdF9tYXRjaCh5LHhbYl0pLG0hPT0hMSlyZXR1cm4gbTtpZih0aGlzLl9iYWNrdHJhY2spe2c9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZz8obT10aGlzLnRlc3RfbWF0Y2goZyx4W3ZdKSxtIT09ITE/bTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBnPXRoaXMubmV4dCgpO3JldHVybiBnfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihnKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgZz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBnPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oZyl7cmV0dXJuIGc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhnfHwwKSxnPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbZ106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihnKXt0aGlzLmJlZ2luKGcpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oZyx5LHYseCl7dmFyIGI9eDtzd2l0Y2godil7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2JyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86dGltZWxpbmVcYikvaSwvXig/OnRpdGxlXHNbXlxuXSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teOlxuXSspL2ksL14oPzo6XHMoPzpbXjpcbl18Oig/IVxzKSkrKS9pLC9eKD86W14jOlxuXSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHB9KCk7aC5sZXhlcj1mO2Z1bmN0aW9uIGQoKXt0aGlzLnl5PXt9fXJldHVybiBvKGQsIlBhcnNlciIpLGQucHJvdG90eXBlPWgsaC5QYXJzZXI9ZCxuZXcgZH0oKTtaUC5wYXJzZXI9WlA7YzBlPVpQfSk7dmFyIGVCPXt9O3VyKGVCLHthZGRFdmVudDooKT0+eDBlLGFkZFNlY3Rpb246KCk9Pm0wZSxhZGRUYXNrOigpPT52MGUsYWRkVGFza09yZzooKT0+YjBlLGNsZWFyOigpPT5wMGUsZGVmYXVsdDooKT0+eldlLGdldENvbW1vbkRiOigpPT5kMGUsZ2V0U2VjdGlvbnM6KCk9PmcwZSxnZXRUYXNrczooKT0+eTBlfSk7dmFyIEcxLGYwZSxKUCxmNixWMSxkMGUscDBlLG0wZSxnMGUseTBlLHYwZSx4MGUsYjBlLGgwZSx6V2UsVDBlPU4oKCk9PnsidXNlIHN0cmljdCI7Y2koKTtHMT0iIixmMGU9MCxKUD1bXSxmNj1bXSxWMT1bXSxkMGU9bygoKT0+cnYsImdldENvbW1vbkRiIikscDBlPW8oZnVuY3Rpb24oKXtKUC5sZW5ndGg9MCxmNi5sZW5ndGg9MCxHMT0iIixWMS5sZW5ndGg9MCxrcigpfSwiY2xlYXIiKSxtMGU9byhmdW5jdGlvbih0KXtHMT10LEpQLnB1c2godCl9LCJhZGRTZWN0aW9uIiksZzBlPW8oZnVuY3Rpb24oKXtyZXR1cm4gSlB9LCJnZXRTZWN0aW9ucyIpLHkwZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9aDBlKCksZT0xMDAscj0wO2Zvcig7IXQmJnI8ZTspdD1oMGUoKSxyKys7cmV0dXJuIGY2LnB1c2goLi4uVjEpLGY2fSwiZ2V0VGFza3MiKSx2MGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49e2lkOmYwZSsrLHNlY3Rpb246RzEsdHlwZTpHMSx0YXNrOnQsc2NvcmU6ZXx8MCxldmVudHM6cj9bcl06W119O1YxLnB1c2gobil9LCJhZGRUYXNrIikseDBlPW8oZnVuY3Rpb24odCl7VjEuZmluZChyPT5yLmlkPT09ZjBlLTEpLmV2ZW50cy5wdXNoKHQpfSwiYWRkRXZlbnQiKSxiMGU9byhmdW5jdGlvbih0KXtsZXQgZT17c2VjdGlvbjpHMSx0eXBlOkcxLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O2Y2LnB1c2goZSl9LCJhZGRUYXNrT3JnIiksaDBlPW8oZnVuY3Rpb24oKXtsZXQgdD1vKGZ1bmN0aW9uKHIpe3JldHVybiBWMVtyXS5wcm9jZXNzZWR9LCJjb21waWxlVGFzayIpLGU9ITA7Zm9yKGxldFtyLG5db2YgVjEuZW50cmllcygpKXQociksZT1lJiZuLnByb2Nlc3NlZDtyZXR1cm4gZX0sImNvbXBpbGVUYXNrcyIpLHpXZT17Y2xlYXI6cDBlLGdldENvbW1vbkRiOmQwZSxhZGRTZWN0aW9uOm0wZSxnZXRTZWN0aW9uczpnMGUsZ2V0VGFza3M6eTBlLGFkZFRhc2s6djBlLGFkZFRhc2tPcmc6YjBlLGFkZEV2ZW50OngwZX19KTtmdW5jdGlvbiBTMGUodCxlKXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgcj1HZSh0aGlzKSxuPXIudGV4dCgpLnNwbGl0KC8oXHMrfDxicj4pLykucmV2ZXJzZSgpLGksYT1bXSxzPTEuMSxsPXIuYXR0cigieSIpLHU9cGFyc2VGbG9hdChyLmF0dHIoImR5IikpLGg9ci50ZXh0KG51bGwpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixsKS5hdHRyKCJkeSIsdSsiZW0iKTtmb3IobGV0IGY9MDtmPG4ubGVuZ3RoO2YrKylpPW5bbi5sZW5ndGgtMS1mXSxhLnB1c2goaSksaC50ZXh0KGEuam9pbigiICIpLnRyaW0oKSksKGgubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPmV8fGk9PT0iPGJyPiIpJiYoYS5wb3AoKSxoLnRleHQoYS5qb2luKCIgIikudHJpbSgpKSxpPT09Ijxicj4iP2E9WyIiXTphPVtpXSxoPXIuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGwpLmF0dHIoImR5IixzKyJlbSIpLnRleHQoaSkpfSl9dmFyIEdXZSxkNixWV2UsVVdlLGswZSxIV2UsV1dlLHcwZSxxV2UsWVdlLFhXZSx0QixFMGUsaldlLEtXZSxRV2UsWldlLERmLEMwZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R1dlPTEyLGQ2PW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmFwcGVuZCgicmVjdCIpO3JldHVybiByLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksci5hdHRyKCJyeCIsZS5yeCksci5hdHRyKCJyeSIsZS5yeSksZS5jbGFzcyE9PXZvaWQgMCYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksVldlPW8oZnVuY3Rpb24odCxlKXtsZXQgbj10LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gpLmF0dHIoImN5IixlLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxpPXQuYXBwZW5kKCJnIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4LTE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3grMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIGEodSl7bGV0IGg9U2woKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoMyooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzIpKyIpIil9byhhLCJzbWlsZSIpO2Z1bmN0aW9uIHModSl7bGV0IGg9U2woKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krNykrIikiKX1vKHMsInNhZCIpO2Z1bmN0aW9uIGwodSl7dS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsZS5jeC01KS5hdHRyKCJ5MSIsZS5jeSs3KS5hdHRyKCJ4MiIsZS5jeCs1KS5hdHRyKCJ5MiIsZS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBvKGwsImFtYml2YWxlbnQiKSxlLnNjb3JlPjM/YShpKTplLnNjb3JlPDM/cyhpKTpsKGkpLG59LCJkcmF3RmFjZSIpLFVXZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiByLmF0dHIoImN4IixlLmN4KSxyLmF0dHIoImN5IixlLmN5KSxyLmF0dHIoImNsYXNzIiwiYWN0b3ItIitlLnBvcyksci5hdHRyKCJmaWxsIixlLmZpbGwpLHIuYXR0cigic3Ryb2tlIixlLnN0cm9rZSksci5hdHRyKCJyIixlLnIpLHIuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLHIuY2xhc3MpLGUudGl0bGUhPT12b2lkIDAmJnIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSkscn0sImRyYXdDaXJjbGUiKSxrMGU9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIiksbj10LmFwcGVuZCgidGV4dCIpO24uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLG4uc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksZS5jbGFzcyE9PXZvaWQgMCYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7bGV0IGk9bi5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54K2UudGV4dE1hcmdpbioyKSxpLnRleHQociksbn0sImRyYXdUZXh0IiksSFdlPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7bi5hdHRyKCJwb2ludHMiLHIoZS54LGUueSw1MCwyMCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmxhYmVsTWFyZ2luLGUueD1lLngrLjUqZS5sYWJlbE1hcmdpbixrMGUodCxlKX0sImRyYXdMYWJlbCIpLFdXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9dEIoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsZDYobixpKSxFMGUocikoZS50ZXh0LG4saS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxyLGUuY29sb3VyKX0sImRyYXdTZWN0aW9uIiksdzBlPS0xLHFXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngrci53aWR0aC8yLGk9dC5hcHBlbmQoImciKTt3MGUrKztsZXQgYT0zMDArNSozMDtpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrdzBlKS5hdHRyKCJ4MSIsbikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG4pLmF0dHIoInkyIixhKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksVldlKGkse2N4Om4sY3k6MzAwKyg1LWUuc2NvcmUpKjMwLHNjb3JlOmUuc2NvcmV9KTtsZXQgcz10QigpO3MueD1lLngscy55PWUueSxzLmZpbGw9ZS5maWxsLHMud2lkdGg9ci53aWR0aCxzLmhlaWdodD1yLmhlaWdodCxzLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLHMucng9MyxzLnJ5PTMsZDYoaSxzKSxFMGUocikoZS50YXNrLGkscy54LHMueSxzLndpZHRoLHMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHIsZS5jb2xvdXIpfSwiZHJhd1Rhc2siKSxZV2U9byhmdW5jdGlvbih0LGUpe2Q2KHQse3g6ZS5zdGFydHgseTplLnN0YXJ0eSx3aWR0aDplLnN0b3B4LWUuc3RhcnR4LGhlaWdodDplLnN0b3B5LWUuc3RhcnR5LGZpbGw6ZS5maWxsLGNsYXNzOiJyZWN0In0pLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxYV2U9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowfX0sImdldFRleHRPYmoiKSx0Qj1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sImdldE5vdGVSZWN0IiksRTBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwraC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixkKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24ocCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkLHApe2xldHt0YXNrRm9udFNpemU6bSx0YXNrRm9udEZhbWlseTpnfT1kLHk9aS5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqbS1tKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuYXR0cigiZmlsbCIscCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzK3UvMikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSksYi5hdHRyKCJ5IixsK2gvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2cuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKXMgaW4gYSYmaS5hdHRyKHMsYVtzXSl9cmV0dXJuIG8obiwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6aS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxqV2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX0sImluaXRHcmFwaGljcyIpO28oUzBlLCJ3cmFwIik7S1dlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9ciVHV2UtMSxhPXQuYXBwZW5kKCJnIik7ZS5zZWN0aW9uPWksYS5hdHRyKCJjbGFzcyIsKGUuY2xhc3M/ZS5jbGFzcysiICI6IiIpKyJ0aW1lbGluZS1ub2RlICIrKCJzZWN0aW9uLSIraSkpO2xldCBzPWEuYXBwZW5kKCJnIiksbD1hLmFwcGVuZCgiZyIpLGg9bC5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoUzBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksZj1uLmZvbnRTaXplPy5yZXBsYWNlP24uZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpuLmZvbnRTaXplO3JldHVybiBlLmhlaWdodD1oLmhlaWdodCtmKjEuMSouNStlLnBhZGRpbmcsZS5oZWlnaHQ9TWF0aC5tYXgoZS5oZWlnaHQsZS5tYXhIZWlnaHQpLGUud2lkdGg9ZS53aWR0aCsyKmUucGFkZGluZyxsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Uud2lkdGgvMisiLCAiK2UucGFkZGluZy8yKyIpIiksWldlKHMsZSxpLG4pLGV9LCJkcmF3Tm9kZSIpLFFXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGE9bi5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoUzBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCkscz1yLmZvbnRTaXplPy5yZXBsYWNlP3IuZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpyLmZvbnRTaXplO3JldHVybiBuLnJlbW92ZSgpLGEuaGVpZ2h0K3MqMS4xKi41K2UucGFkZGluZ30sImdldFZpcnR1YWxOb2RlSGVpZ2h0IiksWldlPW8oZnVuY3Rpb24odCxlLHIpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrZS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrZS50eXBlKS5hdHRyKCJkIixgTTAgJHtlLmhlaWdodC01fSB2JHstZS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Uud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtlLmhlaWdodC01fSBIMCBaYCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK3IpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZS5oZWlnaHQpLmF0dHIoIngyIixlLndpZHRoKS5hdHRyKCJ5MiIsZS5oZWlnaHQpfSwiZGVmYXVsdEJrZyIpLERmPXtkcmF3UmVjdDpkNixkcmF3Q2lyY2xlOlVXZSxkcmF3U2VjdGlvbjpXV2UsZHJhd1RleHQ6azBlLGRyYXdMYWJlbDpIV2UsZHJhd1Rhc2s6cVdlLGRyYXdCYWNrZ3JvdW5kUmVjdDpZV2UsZ2V0VGV4dE9iajpYV2UsZ2V0Tm90ZVJlY3Q6dEIsaW5pdEdyYXBoaWNzOmpXZSxkcmF3Tm9kZTpLV2UsZ2V0VmlydHVhbE5vZGVIZWlnaHQ6UVdlfX0pO3ZhciBKV2UsQTBlLGVxZSxfMGUsRDBlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtDMGUoKTt5dCgpO0d0KCk7eGkoKTtKV2U9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1tZSgpLGE9aS50aW1lbGluZT8ubGVmdE1hcmdpbj8/NTA7WC5kZWJ1ZygidGltZWxpbmUiLG4uZGIpO2xldCBzPWkuc2VjdXJpdHlMZXZlbCxsO3M9PT0ic2FuZGJveCImJihsPUdlKCIjaSIrZSkpO2xldCBoPShzPT09InNhbmRib3giP0dlKGwubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6R2UoImJvZHkiKSkuc2VsZWN0KCIjIitlKTtoLmFwcGVuZCgiZyIpO2xldCBmPW4uZGIuZ2V0VGFza3MoKSxkPW4uZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtYLmRlYnVnKCJ0YXNrIixmKSxEZi5pbml0R3JhcGhpY3MoaCk7bGV0IHA9bi5kYi5nZXRTZWN0aW9ucygpO1guZGVidWcoInNlY3Rpb25zIixwKTtsZXQgbT0wLGc9MCx5PTAsdj0wLHg9NTArYSxiPTUwO3Y9NTA7bGV0IFQ9MCxTPSEwO3AuZm9yRWFjaChmdW5jdGlvbihEKXtsZXQgTz17bnVtYmVyOlQsZGVzY3I6RCxzZWN0aW9uOlQsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19LFI9RGYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxPLGkpO1guZGVidWcoInNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLFIpLG09TWF0aC5tYXgobSxSKzIwKX0pO2xldCB3PTAsRT0wO1guZGVidWcoInRhc2tzLmxlbmd0aCIsZi5sZW5ndGgpO2ZvcihsZXRbRCxPXW9mIGYuZW50cmllcygpKXtsZXQgUj17bnVtYmVyOkQsZGVzY3I6TyxzZWN0aW9uOk8uc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Z30saz1EZi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLFIsaSk7WC5kZWJ1ZygidGFza0hlaWdodCBiZWZvcmUgZHJhdyIsayksZz1NYXRoLm1heChnLGsrMjApLHc9TWF0aC5tYXgodyxPLmV2ZW50cy5sZW5ndGgpO2xldCBMPTA7Zm9yKGxldCBBIG9mIE8uZXZlbnRzKXtsZXQgST17ZGVzY3I6QSxzZWN0aW9uOk8uc2VjdGlvbixudW1iZXI6Ty5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07TCs9RGYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxJLGkpfU8uZXZlbnRzLmxlbmd0aD4wJiYoTCs9KE8uZXZlbnRzLmxlbmd0aC0xKSoxMCksRT1NYXRoLm1heChFLEwpfVguZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLG0pLFguZGVidWcoIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLGcpLHAmJnAubGVuZ3RoPjA/cC5mb3JFYWNoKEQ9PntsZXQgTz1mLmZpbHRlcihBPT5BLnNlY3Rpb249PT1EKSxSPXtudW1iZXI6VCxkZXNjcjpELHNlY3Rpb246VCx3aWR0aDoyMDAqTWF0aC5tYXgoTy5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6bX07WC5kZWJ1Zygic2VjdGlvbk5vZGUiLFIpO2xldCBrPWguYXBwZW5kKCJnIiksTD1EZi5kcmF3Tm9kZShrLFIsVCxpKTtYLmRlYnVnKCJzZWN0aW9uTm9kZSBvdXRwdXQiLEwpLGsuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eH0sICR7dn0pYCksYis9bSs1MCxPLmxlbmd0aD4wJiZBMGUoaCxPLFQseCxiLGcsaSx3LEUsbSwhMSkseCs9MjAwKk1hdGgubWF4KE8ubGVuZ3RoLDEpLGI9dixUKyt9KTooUz0hMSxBMGUoaCxmLFQseCxiLGcsaSx3LEUsbSwhMCkpO2xldCBfPWgubm9kZSgpLmdldEJCb3goKTtYLmRlYnVnKCJib3VuZHMiLF8pLGQmJmguYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixfLndpZHRoLzItYSkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjApLHk9Uz9tK2crMTUwOmcrMTAwLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIseSkuYXR0cigieDIiLF8ud2lkdGgrMyphKS5hdHRyKCJ5MiIseSkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSxMbyh2b2lkIDAsaCxpLnRpbWVsaW5lPy5wYWRkaW5nPz81MCxpLnRpbWVsaW5lPy51c2VNYXhXaWR0aD8/ITEpfSwiZHJhdyIpLEEwZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgsZil7Zm9yKGxldCBkIG9mIGUpe2xldCBwPXtkZXNjcjpkLnRhc2ssc2VjdGlvbjpyLG51bWJlcjpyLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDphfTtYLmRlYnVnKCJ0YXNrTm9kZSIscCk7bGV0IG09dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIikseT1EZi5kcmF3Tm9kZShtLHAscixzKS5oZWlnaHQ7aWYoWC5kZWJ1ZygidGFza0hlaWdodCBhZnRlciBkcmF3Iix5KSxtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke259LCAke2l9KWApLGE9TWF0aC5tYXgoYSx5KSxkLmV2ZW50cyl7bGV0IHY9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikseD1hO2krPTEwMCx4PXgrZXFlKHQsZC5ldmVudHMscixuLGkscyksaS09MTAwLHYuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG4rMTkwLzIpLmF0dHIoInkxIixpK2EpLmF0dHIoIngyIixuKzE5MC8yKS5hdHRyKCJ5MiIsaSthKzEwMCt1KzEwMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNSw1Iil9bj1uKzIwMCxmJiYhcy50aW1lbGluZT8uZGlzYWJsZU11bHRpY29sb3ImJnIrK31pPWktMTB9LCJkcmF3VGFza3MiKSxlcWU9byhmdW5jdGlvbih0LGUscixuLGksYSl7bGV0IHM9MCxsPWk7aT1pKzEwMDtmb3IobGV0IHUgb2YgZSl7bGV0IGg9e2Rlc2NyOnUsc2VjdGlvbjpyLG51bWJlcjpyLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07WC5kZWJ1ZygiZXZlbnROb2RlIixoKTtsZXQgZj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZXZlbnRXcmFwcGVyIikscD1EZi5kcmF3Tm9kZShmLGgscixhKS5oZWlnaHQ7cz1zK3AsZi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtufSwgJHtpfSlgKSxpPWkrMTArcH1yZXR1cm4gaT1sLHN9LCJkcmF3RXZlbnRzIiksXzBlPXtzZXRDb25mOm8oKCk9Pnt9LCJzZXRDb25mIiksZHJhdzpKV2V9fSk7dmFyIHRxZSxycWUsTDBlLFIwZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7dHFlPW8odD0+e2xldCBlPSIiO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspdFsibGluZUNvbG9yIityXT10WyJsaW5lQ29sb3IiK3JdfHx0WyJjU2NhbGVJbnYiK3JdLGxhKHRbImxpbmVDb2xvciIrcl0pP3RbImxpbmVDb2xvciIrcl09THQodFsibGluZUNvbG9yIityXSwyMCk6dFsibGluZUNvbG9yIityXT1PdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTtmb3IobGV0IHI9MDtyPHQuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXtsZXQgbj0iIisoMTctMypyKTtlKz1gCiAgICAuc2VjdGlvbi0ke3ItMX0gcmVjdCwgLnNlY3Rpb24tJHtyLTF9IHBhdGgsIC5zZWN0aW9uLSR7ci0xfSBjaXJjbGUsIC5zZWN0aW9uLSR7ci0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3ItMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7ci0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtyLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7bn07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK3JdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAubGluZVdyYXBwZXIgbGluZXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZUxhYmVsIityXX0gOwogICAgfQoKICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiBsaWdodGdyYXk7CiAgICB9CiAgICAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6ICNlZmVmZWY7CiAgICB9CiAgICBgfXJldHVybiBlfSwiZ2VuU2VjdGlvbnMiKSxycWU9byh0PT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAke3RxZSh0KX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHsKICAgIGZpbGw6ICR7dC5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuZXZlbnRXcmFwcGVyICB7CiAgIGZpbHRlcjogYnJpZ2h0bmVzcygxMjAlKTsKICB9CmAsImdldFN0eWxlcyIpLEwwZT1ycWV9KTt2YXIgTjBlPXt9O3VyKE4wZSx7ZGlhZ3JhbTooKT0+bnFlfSk7dmFyIG5xZSxNMGU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1MGUoKTtUMGUoKTtEMGUoKTtSMGUoKTtucWU9e2RiOmVCLHJlbmRlcmVyOl8wZSxwYXJzZXI6YzBlLHN0eWxlczpMMGV9fSk7dmFyIHJCLFAwZSxCMGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyQj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oUyx3LEUsXyl7Zm9yKEU9RXx8e30sXz1TLmxlbmd0aDtfLS07RVtTW19dXT13KTtyZXR1cm4gRX0sIm8iKSxlPVsxLDRdLHI9WzEsMTNdLG49WzEsMTJdLGk9WzEsMTVdLGE9WzEsMTZdLHM9WzEsMjBdLGw9WzEsMTldLHU9WzYsNyw4XSxoPVsxLDI2XSxmPVsxLDI0XSxkPVsxLDI1XSxwPVs2LDcsMTFdLG09WzEsNiwxMywxNSwxNiwxOSwyMl0sZz1bMSwzM10seT1bMSwzNF0sdj1bMSw2LDcsMTEsMTMsMTUsMTYsMTksMjJdLHg9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWluZE1hcDo0LHNwYWNlTGluZXM6NSxTUEFDRUxJTkU6NixOTDo3LE1JTkRNQVA6OCxkb2N1bWVudDo5LHN0b3A6MTAsRU9GOjExLHN0YXRlbWVudDoxMixTUEFDRUxJU1Q6MTMsbm9kZToxNCxJQ09OOjE1LENMQVNTOjE2LG5vZGVXaXRoSWQ6MTcsbm9kZVdpdGhvdXRJZDoxOCxOT0RFX0RTVEFSVDoxOSxOT0RFX0RFU0NSOjIwLE5PREVfREVORDoyMSxOT0RFX0lEOjIyLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJTUEFDRUxJTkUiLDc6Ik5MIiw4OiJNSU5ETUFQIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNToiSUNPTiIsMTY6IkNMQVNTIiwxOToiTk9ERV9EU1RBUlQiLDIwOiJOT0RFX0RFU0NSIiwyMToiTk9ERV9ERU5EIiwyMjoiTk9ERV9JRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbNSwxXSxbNSwyXSxbNSwyXSxbNCwyXSxbNCwzXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFs5LDNdLFs5LDJdLFsxMiwyXSxbMTIsMl0sWzEyLDJdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTgsM10sWzE3LDFdLFsxNyw0XV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHcsRSxfLEMsRCxPLFIpe3ZhciBrPU8ubGVuZ3RoLTE7c3dpdGNoKEQpe2Nhc2UgNjpjYXNlIDc6cmV0dXJuIEM7Y2FzZSA4OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTE6Qy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTDIgIik7YnJlYWs7Y2FzZSAxMjpDLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxNTpDLmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIsT1trXS5pZCksQy5hZGROb2RlKE9bay0xXS5sZW5ndGgsT1trXS5pZCxPW2tdLmRlc2NyLE9ba10udHlwZSk7YnJlYWs7Y2FzZSAxNjpDLmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLE9ba10pLEMuZGVjb3JhdGVOb2RlKHtpY29uOk9ba119KTticmVhaztjYXNlIDE3OmNhc2UgMjE6Qy5kZWNvcmF0ZU5vZGUoe2NsYXNzOk9ba119KTticmVhaztjYXNlIDE4OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMTk6Qy5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIixPW2tdLmlkKSxDLmFkZE5vZGUoMCxPW2tdLmlkLE9ba10uZGVzY3IsT1trXS50eXBlKTticmVhaztjYXNlIDIwOkMuZGVjb3JhdGVOb2RlKHtpY29uOk9ba119KTticmVhaztjYXNlIDI1OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLE9bay0yXSksdGhpcy4kPXtpZDpPW2stMV0sZGVzY3I6T1trLTFdLHR5cGU6Qy5nZXRUeXBlKE9bay0yXSxPW2tdKX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2lkOk9ba10sZGVzY3I6T1trXSx0eXBlOkMubm9kZVR5cGUuREVGQVVMVH07YnJlYWs7Y2FzZSAyNzpDLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixPW2stM10pLHRoaXMuJD17aWQ6T1trLTNdLGRlc2NyOk9bay0xXSx0eXBlOkMuZ2V0VHlwZShPW2stMl0sT1trXSl9O2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw4OmV9LHsxOlszXX0sezE6WzIsMV19LHs0OjYsNjpbMSw3XSw3OlsxLDhdLDg6ZX0sezY6ciw3OlsxLDEwXSw5OjksMTI6MTEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx0KHUsWzIsM10pLHsxOlsyLDJdfSx0KHUsWzIsNF0pLHQodSxbMiw1XSksezE6WzIsNl0sNjpyLDEyOjIxLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sezY6ciw5OjIyLDEyOjExLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sezY6aCw3OmYsMTA6MjMsMTE6ZH0sdChwLFsyLDIyXSx7MTc6MTcsMTg6MTgsMTQ6MjcsMTU6WzEsMjhdLDE2OlsxLDI5XSwxOTpzLDIyOmx9KSx0KHAsWzIsMThdKSx0KHAsWzIsMTldKSx0KHAsWzIsMjBdKSx0KHAsWzIsMjFdKSx0KHAsWzIsMjNdKSx0KHAsWzIsMjRdKSx0KHAsWzIsMjZdLHsxOTpbMSwzMF19KSx7MjA6WzEsMzFdfSx7NjpoLDc6ZiwxMDozMiwxMTpkfSx7MTpbMiw3XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx0KG0sWzIsMTRdLHs3OmcsMTE6eX0pLHQodixbMiw4XSksdCh2LFsyLDldKSx0KHYsWzIsMTBdKSx0KHAsWzIsMTVdKSx0KHAsWzIsMTZdKSx0KHAsWzIsMTddKSx7MjA6WzEsMzVdfSx7MjE6WzEsMzZdfSx0KG0sWzIsMTNdLHs3OmcsMTE6eX0pLHQodixbMiwxMV0pLHQodixbMiwxMl0pLHsyMTpbMSwzN119LHQocCxbMiwyNV0pLHQocCxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24odyxFKXtpZihFLnJlY292ZXJhYmxlKXRoaXMudHJhY2Uodyk7ZWxzZXt2YXIgXz1uZXcgRXJyb3Iodyk7dGhyb3cgXy5oYXNoPUUsX319LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbih3KXt2YXIgRT10aGlzLF89WzBdLEM9W10sRD1bbnVsbF0sTz1bXSxSPXRoaXMudGFibGUsaz0iIixMPTAsQT0wLEk9MCxNPTIsUD0xLEI9Ty5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxGPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksej17eXk6e319O2Zvcih2YXIgJCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCQpJiYoei55eVskXT10aGlzLnl5WyRdKTtGLnNldElucHV0KHcsei55eSksei55eS5sZXhlcj1GLHoueXkucGFyc2VyPXRoaXMsdHlwZW9mIEYueXlsbG9jPiJ1IiYmKEYueXlsbG9jPXt9KTt2YXIgVT1GLnl5bGxvYztPLnB1c2goVSk7dmFyIEs9Ri5vcHRpb25zJiZGLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiB6Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXoueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZWUoYWUpe18ubGVuZ3RoPV8ubGVuZ3RoLTIqYWUsRC5sZW5ndGg9RC5sZW5ndGgtYWUsTy5sZW5ndGg9Ty5sZW5ndGgtYWV9byhlZSwicG9wU3RhY2siKTtmdW5jdGlvbiBZKCl7dmFyIGFlO3JldHVybiBhZT1DLnBvcCgpfHxGLmxleCgpfHxQLHR5cGVvZiBhZSE9Im51bWJlciImJihhZSBpbnN0YW5jZW9mIEFycmF5JiYoQz1hZSxhZT1DLnBvcCgpKSxhZT1FLnN5bWJvbHNfW2FlXXx8YWUpLGFlfW8oWSwibGV4Iik7Zm9yKHZhciBjZSxaLHVlLFEsaixuZSx0ZT17fSxoZSxsZSxKLFNlOzspe2lmKHVlPV9bXy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1ZV0/UT10aGlzLmRlZmF1bHRBY3Rpb25zW3VlXTooKGNlPT09bnVsbHx8dHlwZW9mIGNlPiJ1IikmJihjZT1ZKCkpLFE9Ult1ZV0mJlJbdWVdW2NlXSksdHlwZW9mIFE+InUifHwhUS5sZW5ndGh8fCFRWzBdKXt2YXIgc2U9IiI7U2U9W107Zm9yKGhlIGluIFJbdWVdKXRoaXMudGVybWluYWxzX1toZV0mJmhlPk0mJlNlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1toZV0rIiciKTtGLnNob3dQb3NpdGlvbj9zZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhMKzEpK2A6CmArRi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1NlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bY2VdfHxjZSkrIiciOnNlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEwrMSkrIjogVW5leHBlY3RlZCAiKyhjZT09UD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tjZV18fGNlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihzZSx7dGV4dDpGLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tjZV18fGNlLGxpbmU6Ri55eWxpbmVubyxsb2M6VSxleHBlY3RlZDpTZX0pfWlmKFFbMF1pbnN0YW5jZW9mIEFycmF5JiZRLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdWUrIiwgdG9rZW46ICIrY2UpO3N3aXRjaChRWzBdKXtjYXNlIDE6Xy5wdXNoKGNlKSxELnB1c2goRi55eXRleHQpLE8ucHVzaChGLnl5bGxvYyksXy5wdXNoKFFbMV0pLGNlPW51bGwsWj8oY2U9WixaPW51bGwpOihBPUYueXlsZW5nLGs9Ri55eXRleHQsTD1GLnl5bGluZW5vLFU9Ri55eWxsb2MsST4wJiZJLS0pO2JyZWFrO2Nhc2UgMjppZihsZT10aGlzLnByb2R1Y3Rpb25zX1tRWzFdXVsxXSx0ZS4kPURbRC5sZW5ndGgtbGVdLHRlLl8kPXtmaXJzdF9saW5lOk9bTy5sZW5ndGgtKGxlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6T1tPLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOk9bTy5sZW5ndGgtKGxlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOk9bTy5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEsmJih0ZS5fJC5yYW5nZT1bT1tPLmxlbmd0aC0obGV8fDEpXS5yYW5nZVswXSxPW08ubGVuZ3RoLTFdLnJhbmdlWzFdXSksbmU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHRlLFtrLEEsTCx6Lnl5LFFbMV0sRCxPXS5jb25jYXQoQikpLHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO2xlJiYoXz1fLnNsaWNlKDAsLTEqbGUqMiksRD1ELnNsaWNlKDAsLTEqbGUpLE89Ty5zbGljZSgwLC0xKmxlKSksXy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1FbMV1dWzBdKSxELnB1c2godGUuJCksTy5wdXNoKHRlLl8kKSxKPVJbX1tfLmxlbmd0aC0yXV1bX1tfLmxlbmd0aC0xXV0sXy5wdXNoKEopO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxiPWZ1bmN0aW9uKCl7dmFyIFM9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihFLF8pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRSxfKTtlbHNlIHRocm93IG5ldyBFcnJvcihFKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKHcsRSl7cmV0dXJuIHRoaXMueXk9RXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciB3PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz13LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz13LHRoaXMubWF0Y2hlZCs9dzt2YXIgRT13Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksd30sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbih3KXt2YXIgRT13Lmxlbmd0aCxfPXcuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD13K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FKSx0aGlzLm9mZnNldC09RTt2YXIgQz10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxfLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Xy5sZW5ndGgtMSk7dmFyIEQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOl8/KF8ubGVuZ3RoPT09Qy5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0NbQy5sZW5ndGgtXy5sZW5ndGhdLmxlbmd0aC1fWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtEWzBdLERbMF0rdGhpcy55eWxlbmctRV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHcpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh3KSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgdz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHcubGVuZ3RoPjIwPyIuLi4iOiIiKSt3LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5tYXRjaDtyZXR1cm4gdy5sZW5ndGg8MjAmJih3Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC13Lmxlbmd0aCkpLCh3LnN1YnN0cigwLDIwKSsody5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciB3PXRoaXMucGFzdElucHV0KCksRT1uZXcgQXJyYXkody5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB3K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbih3LEUpe3ZhciBfLEMsRDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoRD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihELnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEM9d1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQyYmKHRoaXMueXlsaW5lbm8rPUMubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Qz9DW0MubGVuZ3RoLTFdLmxlbmd0aC1DW0MubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rd1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz13WzBdLHRoaXMubWF0Y2grPXdbMF0sdGhpcy5tYXRjaGVzPXcsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uod1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9d1swXSxfPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksXylyZXR1cm4gXztpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgTyBpbiBEKXRoaXNbT109RFtPXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgdyxFLF8sQzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBEPXRoaXMuX2N1cnJlbnRSdWxlcygpLE89MDtPPEQubGVuZ3RoO08rKylpZihfPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbRFtPXV0pLF8mJighRXx8X1swXS5sZW5ndGg+RVswXS5sZW5ndGgpKXtpZihFPV8sQz1PLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHc9dGhpcy50ZXN0X21hdGNoKF8sRFtPXSksdyE9PSExKXJldHVybiB3O2lmKHRoaXMuX2JhY2t0cmFjayl7RT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFPyh3PXRoaXMudGVzdF9tYXRjaChFLERbQ10pLHchPT0hMT93OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5uZXh0KCk7cmV0dXJuIEV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihFKXtyZXR1cm4gRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV8fDApLEU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEUpe3RoaXMuYmVnaW4oRSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihFLF8sQyxEKXt2YXIgTz1EO3N3aXRjaChDKXtjYXNlIDA6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoIkZvdW5kIGNvbW1lbnQiLF8ueXl0ZXh0KSw2O2JyZWFrO2Nhc2UgMTpyZXR1cm4gODtjYXNlIDI6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNjticmVhaztjYXNlIDQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTpFLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSU5FIiksNjticmVhaztjYXNlIDc6cmV0dXJuIDc7Y2FzZSA4OnJldHVybiAxNTtjYXNlIDk6RS5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6RS5nZXRMb2dnZXIoKS50cmFjZSgiU3RhcnRpbmcgTlNUUiIpLHRoaXMuYmVnaW4oIk5TVFIiKTticmVhaztjYXNlIDI1OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLF8ueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkpIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixfLnl5dGV4dCksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLF8ueXl0ZXh0KSwyMDticmVhaztjYXNlIDM2OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsXy55eXRleHQpLDIwO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFN9KCk7eC5sZXhlcj1iO2Z1bmN0aW9uIFQoKXt0aGlzLnl5PXt9fXJldHVybiBvKFQsIlBhcnNlciIpLFQucHJvdG90eXBlPXgseC5QYXJzZXI9VCxuZXcgVH0oKTtyQi5wYXJzZXI9ckI7UDBlPXJCfSk7dmFyIG9xZSxwNixGMGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3ByKCk7eXQoKTtfYSgpO29xZT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LHA2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz1bXTt0aGlzLmNvdW50PTA7dGhpcy5lbGVtZW50cz17fTt0aGlzLmdldExvZ2dlcj10aGlzLmdldExvZ2dlci5iaW5kKHRoaXMpLHRoaXMubm9kZVR5cGU9b3FlLHRoaXMuY2xlYXIoKSx0aGlzLmdldFR5cGU9dGhpcy5nZXRUeXBlLmJpbmQodGhpcyksdGhpcy5nZXRNaW5kbWFwPXRoaXMuZ2V0TWluZG1hcC5iaW5kKHRoaXMpLHRoaXMuZ2V0RWxlbWVudEJ5SWQ9dGhpcy5nZXRFbGVtZW50QnlJZC5iaW5kKHRoaXMpLHRoaXMuZ2V0UGFyZW50PXRoaXMuZ2V0UGFyZW50LmJpbmQodGhpcyksdGhpcy5nZXRNaW5kbWFwPXRoaXMuZ2V0TWluZG1hcC5iaW5kKHRoaXMpLHRoaXMuYWRkTm9kZT10aGlzLmFkZE5vZGUuYmluZCh0aGlzKSx0aGlzLmRlY29yYXRlTm9kZT10aGlzLmRlY29yYXRlTm9kZS5iaW5kKHRoaXMpfXN0YXRpY3tvKHRoaXMsIk1pbmRtYXBEQiIpfWNsZWFyKCl7dGhpcy5ub2Rlcz1bXSx0aGlzLmNvdW50PTAsdGhpcy5lbGVtZW50cz17fX1nZXRQYXJlbnQoZSl7Zm9yKGxldCByPXRoaXMubm9kZXMubGVuZ3RoLTE7cj49MDtyLS0paWYodGhpcy5ub2Rlc1tyXS5sZXZlbDxlKXJldHVybiB0aGlzLm5vZGVzW3JdO3JldHVybiBudWxsfWdldE1pbmRtYXAoKXtyZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGg+MD90aGlzLm5vZGVzWzBdOm51bGx9YWRkTm9kZShlLHIsbixpKXtYLmluZm8oImFkZE5vZGUiLGUscixuLGkpO2xldCBhPW1lKCkscz1hLm1pbmRtYXA/LnBhZGRpbmc/P29yLm1pbmRtYXAucGFkZGluZztzd2l0Y2goaSl7Y2FzZSB0aGlzLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpjYXNlIHRoaXMubm9kZVR5cGUuUkVDVDpjYXNlIHRoaXMubm9kZVR5cGUuSEVYQUdPTjpzKj0yO2JyZWFrfWxldCBsPXtpZDp0aGlzLmNvdW50Kyssbm9kZUlkOndyKHIsYSksbGV2ZWw6ZSxkZXNjcjp3cihuLGEpLHR5cGU6aSxjaGlsZHJlbjpbXSx3aWR0aDphLm1pbmRtYXA/Lm1heE5vZGVXaWR0aD8/b3IubWluZG1hcC5tYXhOb2RlV2lkdGgscGFkZGluZzpzfSx1PXRoaXMuZ2V0UGFyZW50KGUpO2lmKHUpdS5jaGlsZHJlbi5wdXNoKGwpLHRoaXMubm9kZXMucHVzaChsKTtlbHNlIGlmKHRoaXMubm9kZXMubGVuZ3RoPT09MCl0aGlzLm5vZGVzLnB1c2gobCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJHtsLmRlc2NyfSIpYCl9Z2V0VHlwZShlLHIpe3N3aXRjaChYLmRlYnVnKCJJbiBnZXQgdHlwZSIsZSxyKSxlKXtjYXNlIlsiOnJldHVybiB0aGlzLm5vZGVUeXBlLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gcj09PSIpIj90aGlzLm5vZGVUeXBlLlJPVU5ERURfUkVDVDp0aGlzLm5vZGVUeXBlLkNMT1VEO2Nhc2UiKCgiOnJldHVybiB0aGlzLm5vZGVUeXBlLkNJUkNMRTtjYXNlIikiOnJldHVybiB0aGlzLm5vZGVUeXBlLkNMT1VEO2Nhc2UiKSkiOnJldHVybiB0aGlzLm5vZGVUeXBlLkJBTkc7Y2FzZSJ7eyI6cmV0dXJuIHRoaXMubm9kZVR5cGUuSEVYQUdPTjtkZWZhdWx0OnJldHVybiB0aGlzLm5vZGVUeXBlLkRFRkFVTFR9fXNldEVsZW1lbnRGb3JJZChlLHIpe3RoaXMuZWxlbWVudHNbZV09cn1nZXRFbGVtZW50QnlJZChlKXtyZXR1cm4gdGhpcy5lbGVtZW50c1tlXX1kZWNvcmF0ZU5vZGUoZSl7aWYoIWUpcmV0dXJuO2xldCByPW1lKCksbj10aGlzLm5vZGVzW3RoaXMubm9kZXMubGVuZ3RoLTFdO2UuaWNvbiYmKG4uaWNvbj13cihlLmljb24scikpLGUuY2xhc3MmJihuLmNsYXNzPXdyKGUuY2xhc3MscikpfXR5cGUyU3RyKGUpe3N3aXRjaChlKXtjYXNlIHRoaXMubm9kZVR5cGUuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIHRoaXMubm9kZVR5cGUuUkVDVDpyZXR1cm4icmVjdCI7Y2FzZSB0aGlzLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIHRoaXMubm9kZVR5cGUuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgdGhpcy5ub2RlVHlwZS5DTE9VRDpyZXR1cm4iY2xvdWQiO2Nhc2UgdGhpcy5ub2RlVHlwZS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIHRoaXMubm9kZVR5cGUuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX1nZXRMb2dnZXIoKXtyZXR1cm4gWH19fSk7ZnVuY3Rpb24gcWkodCl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gcWk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHFpKHQpfWZ1bmN0aW9uIFZmKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gJDBlKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19ZnVuY3Rpb24gVWYodCxlLHIpe3JldHVybiBlJiYkMGUodC5wcm90b3R5cGUsZSksciYmJDBlKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBpZ2UodCxlLHIpe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIFJpKHQsZSl7cmV0dXJuIGNxZSh0KXx8aHFlKHQsZSl8fFBCKHQsZSl8fGRxZSgpfWZ1bmN0aW9uIGFnZSh0KXtyZXR1cm4gbHFlKHQpfHx1cWUodCl8fFBCKHQpfHxmcWUoKX1mdW5jdGlvbiBscWUodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4geEIodCl9ZnVuY3Rpb24gY3FlKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9ZnVuY3Rpb24gdXFlKHQpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fHRbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBocWUodCxlKXt2YXIgcj10PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKHIhPW51bGwpe3ZhciBuPVtdLGk9ITAsYT0hMSxzLGw7dHJ5e2ZvcihyPXIuY2FsbCh0KTshKGk9KHM9ci5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKHMudmFsdWUpLCEoZSYmbi5sZW5ndGg9PT1lKSk7aT0hMCk7fWNhdGNoKHUpe2E9ITAsbD11fWZpbmFsbHl7dHJ5eyFpJiZyLnJldHVybiE9bnVsbCYmci5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgbH19cmV0dXJuIG59fWZ1bmN0aW9uIFBCKHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB4Qih0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtpZihyPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSkscj09PSJNYXAifHxyPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20odCk7aWYocj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4geEIodCxlKX19ZnVuY3Rpb24geEIodCxlKXsoZT09bnVsbHx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBmcWUoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIGRxZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiB2byh0LGUpe3ZhciByPXR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9UEIodCkpfHxlJiZ0JiZ0eXBlb2YgdC5sZW5ndGg9PSJudW1iZXIiKXtyJiYodD1yKTt2YXIgbj0wLGk9byhmdW5jdGlvbigpe30sIkYiKTtyZXR1cm57czppLG46byhmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sIm4iKSxlOm8oZnVuY3Rpb24odSl7dGhyb3cgdX0sImUiKSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBhPSEwLHM9ITEsbDtyZXR1cm57czpvKGZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LCJzIiksbjpvKGZ1bmN0aW9uKCl7dmFyIHU9ci5uZXh0KCk7cmV0dXJuIGE9dS5kb25lLHV9LCJuIiksZTpvKGZ1bmN0aW9uKHUpe3M9ITAsbD11fSwiZSIpLGY6byhmdW5jdGlvbigpe3RyeXshYSYmci5yZXR1cm4hPW51bGwmJnIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGx9fSwiZiIpfX1mdW5jdGlvbiBQcWUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9ZnVuY3Rpb24gQnFlKHQsZSl7cmV0dXJuIGU9e2V4cG9ydHM6e319LHQoZSxlLmV4cG9ydHMpLGUuZXhwb3J0c31mdW5jdGlvbiBIcWUodCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmVXFlLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gWXFlKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAsV3FlKHQpKzEpLnJlcGxhY2UocXFlLCIiKX1mdW5jdGlvbiBacWUodCl7dmFyIGU9S3FlLmNhbGwodCxGYikscj10W0ZiXTt0cnl7dFtGYl09dm9pZCAwO3ZhciBuPSEwfWNhdGNoe312YXIgaT1RcWUuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtGYl09cjpkZWxldGUgdFtGYl0pLGl9ZnVuY3Rpb24gclllKHQpe3JldHVybiB0WWUuY2FsbCh0KX1mdW5jdGlvbiBzWWUodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD9hWWU6aVllOlYwZSYmVjBlIGluIE9iamVjdCh0KT9KcWUodCk6blllKHQpfWZ1bmN0aW9uIG9ZZSh0KXtyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QifWZ1bmN0aW9uIHVZZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxsWWUodCkmJm1nZSh0KT09Y1llfWZ1bmN0aW9uIG1ZZSh0KXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIHQ7aWYoZDQodCkpcmV0dXJuIFUwZTtpZihLcCh0KSl7dmFyIGU9dHlwZW9mIHQudmFsdWVPZj09ImZ1bmN0aW9uIj90LnZhbHVlT2YoKTp0O3Q9S3AoZSk/ZSsiIjplfWlmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdD09PTA/dDordDt0PVhxZSh0KTt2YXIgcj1mWWUudGVzdCh0KTtyZXR1cm4gcnx8ZFllLnRlc3QodCk/cFllKHQuc2xpY2UoMikscj8yOjgpOmhZZS50ZXN0KHQpP1UwZTordH1mdW5jdGlvbiB4WWUodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxoPTAsZj0hMSxkPSExLHA9ITA7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihnWWUpO2U9SDBlKGUpfHwwLEtwKHIpJiYoZj0hIXIubGVhZGluZyxkPSJtYXhXYWl0ImluIHIsYT1kP3lZZShIMGUoci5tYXhXYWl0KXx8MCxlKTphLHA9InRyYWlsaW5nImluIHI/ISFyLnRyYWlsaW5nOnApO2Z1bmN0aW9uIG0oRSl7dmFyIF89bixDPWk7cmV0dXJuIG49aT12b2lkIDAsaD1FLHM9dC5hcHBseShDLF8pLHN9byhtLCJpbnZva2VGdW5jIik7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gaD1FLGw9c2V0VGltZW91dCh4LGUpLGY/bShFKTpzfW8oZywibGVhZGluZ0VkZ2UiKTtmdW5jdGlvbiB5KEUpe3ZhciBfPUUtdSxDPUUtaCxEPWUtXztyZXR1cm4gZD92WWUoRCxhLUMpOkR9byh5LCJyZW1haW5pbmdXYWl0Iik7ZnVuY3Rpb24gdihFKXt2YXIgXz1FLXUsQz1FLWg7cmV0dXJuIHU9PT12b2lkIDB8fF8+PWV8fF88MHx8ZCYmQz49YX1vKHYsInNob3VsZEludm9rZSIpO2Z1bmN0aW9uIHgoKXt2YXIgRT1uQigpO2lmKHYoRSkpcmV0dXJuIGIoRSk7bD1zZXRUaW1lb3V0KHgseShFKSl9byh4LCJ0aW1lckV4cGlyZWQiKTtmdW5jdGlvbiBiKEUpe3JldHVybiBsPXZvaWQgMCxwJiZuP20oRSk6KG49aT12b2lkIDAscyl9byhiLCJ0cmFpbGluZ0VkZ2UiKTtmdW5jdGlvbiBUKCl7bCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KGwpLGg9MCxuPXU9aT1sPXZvaWQgMH1vKFQsImNhbmNlbCIpO2Z1bmN0aW9uIFMoKXtyZXR1cm4gbD09PXZvaWQgMD9zOmIobkIoKSl9byhTLCJmbHVzaCIpO2Z1bmN0aW9uIHcoKXt2YXIgRT1uQigpLF89dihFKTtpZihuPWFyZ3VtZW50cyxpPXRoaXMsdT1FLF8pe2lmKGw9PT12b2lkIDApcmV0dXJuIGcodSk7aWYoZClyZXR1cm4gY2xlYXJUaW1lb3V0KGwpLGw9c2V0VGltZW91dCh4LGUpLG0odSl9cmV0dXJuIGw9PT12b2lkIDAmJihsPXNldFRpbWVvdXQoeCxlKSksc31yZXR1cm4gbyh3LCJkZWJvdW5jZWQiKSx3LmNhbmNlbD1ULHcuZmx1c2g9Uyx3fWZ1bmN0aW9uIGVDKHQsZSxyLG4saSxhKXt2YXIgcztyZXR1cm4gbGkodCk/cz10OnM9bnlbdF18fG55LmV1Y2xpZGVhbixlPT09MCYmbGkodCk/cyhpLGEpOnMoZSxyLG4saSxhKX1mdW5jdGlvbiBoamUodCxlKXtpZih0Qyh0KSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fHQ9PW51bGx8fGQ0KHQpPyEwOnVqZS50ZXN0KHQpfHwhY2plLnRlc3QodCl8fGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfWZ1bmN0aW9uIHlqZSh0KXtpZighS3AodCkpcmV0dXJuITE7dmFyIGU9bWdlKHQpO3JldHVybiBlPT1wamV8fGU9PW1qZXx8ZT09ZGplfHxlPT1namV9ZnVuY3Rpb24gYmplKHQpe3JldHVybiEhdW1lJiZ1bWUgaW4gdH1mdW5jdGlvbiBFamUodCl7aWYodCE9bnVsbCl7dHJ5e3JldHVybiBramUuY2FsbCh0KX1jYXRjaHt9dHJ5e3JldHVybiB0KyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gTWplKHQpe2lmKCFLcCh0KXx8VGplKHQpKXJldHVybiExO3ZhciBlPXZqZSh0KT9OamU6QWplO3JldHVybiBlLnRlc3QoU2plKHQpKX1mdW5jdGlvbiBPamUodCxlKXtyZXR1cm4gdD8uW2VdfWZ1bmN0aW9uIEJqZSh0LGUpe3ZhciByPVBqZSh0LGUpO3JldHVybiBJamUocik/cjp2b2lkIDB9ZnVuY3Rpb24gJGplKCl7dGhpcy5fX2RhdGFfXz1zND9zNChudWxsKTp7fSx0aGlzLnNpemU9MH1mdW5jdGlvbiBHamUodCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9ZnVuY3Rpb24gcWplKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoczQpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1VamU/dm9pZCAwOnJ9cmV0dXJuIFdqZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9ZnVuY3Rpb24gS2plKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHM0P2VbdF0hPT12b2lkIDA6amplLmNhbGwoZSx0KX1mdW5jdGlvbiBKamUodCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxyW3RdPXM0JiZlPT09dm9pZCAwP1pqZTplLHRoaXN9ZnVuY3Rpb24gb3kodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gdEtlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1mdW5jdGlvbiBuS2UodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX1mdW5jdGlvbiBpS2UodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZih6Z2UodFtyXVswXSxlKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBvS2UodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPXJDKGUsdCk7aWYocjwwKXJldHVybiExO3ZhciBuPWUubGVuZ3RoLTE7cmV0dXJuIHI9PW4/ZS5wb3AoKTpzS2UuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITB9ZnVuY3Rpb24gY0tlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1yQyhlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19ZnVuY3Rpb24gaEtlKHQpe3JldHVybiByQyh0aGlzLl9fZGF0YV9fLHQpPi0xfWZ1bmN0aW9uIGRLZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1yQyhyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfWZ1bmN0aW9uIGx5KHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHZLZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGhtZSxtYXA6bmV3KHlLZXx8bUtlKSxzdHJpbmc6bmV3IGhtZX19ZnVuY3Rpb24gYktlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBlPT0ic3RyaW5nInx8ZT09Im51bWJlciJ8fGU9PSJzeW1ib2wifHxlPT0iYm9vbGVhbiI/dCE9PSJfX3Byb3RvX18iOnQ9PT1udWxsfWZ1bmN0aW9uIHdLZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIFRLZShlKT9yW3R5cGVvZiBlPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnIubWFwfWZ1bmN0aW9uIGtLZSh0KXt2YXIgZT1uQyh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfWZ1bmN0aW9uIFNLZSh0KXtyZXR1cm4gbkModGhpcyx0KS5nZXQodCl9ZnVuY3Rpb24gQUtlKHQpe3JldHVybiBuQyh0aGlzLHQpLmhhcyh0KX1mdW5jdGlvbiBES2UodCxlKXt2YXIgcj1uQyh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfWZ1bmN0aW9uIGN5KHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIFlCKHQsZSl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiJ8fGUhPW51bGwmJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoUktlKTt2YXIgcj1vKGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMsbik6blswXSxhPXIuY2FjaGU7aWYoYS5oYXMoaSkpcmV0dXJuIGEuZ2V0KGkpO3ZhciBzPXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1hLnNldChpLHMpfHxhLHN9LCJtZW1vaXplZCIpO3JldHVybiByLmNhY2hlPW5ldyhZQi5DYWNoZXx8R2dlKSxyfWZ1bmN0aW9uIElLZSh0KXt2YXIgZT1OS2UodCxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09TUtlJiZyLmNsZWFyKCksbn0pLHI9ZS5jYWNoZTtyZXR1cm4gZX1mdW5jdGlvbiAkS2UodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX1mdW5jdGlvbiBIZ2UodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKHRDKHQpKXJldHVybiBVZ2UodCxIZ2UpKyIiO2lmKGQ0KHQpKXJldHVybiBkbWU/ZG1lLmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4gZT09IjAiJiYxL3Q9PS16S2U/Ii0wIjplfWZ1bmN0aW9uIFZLZSh0KXtyZXR1cm4gdD09bnVsbD8iIjpHS2UodCl9ZnVuY3Rpb24gVUtlKHQsZSl7cmV0dXJuIHRDKHQpP3Q6ZmplKHQsZSk/W3RdOlZnZShXZ2UodCkpfWZ1bmN0aW9uIFdLZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fGQ0KHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tSEtlPyItMCI6ZX1mdW5jdGlvbiBxS2UodCxlKXtlPXFnZShlLHQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7dCE9bnVsbCYmcjxuOyl0PXRbWEIoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9ZnVuY3Rpb24gWEtlKHQsZSxyKXt2YXIgbj10PT1udWxsP3ZvaWQgMDpZS2UodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59ZnVuY3Rpb24gUUtlKHQsZSxyKXtlPT0iX19wcm90b19fIiYmcG1lP3BtZSh0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnIsd3JpdGFibGU6ITB9KTp0W2VdPXJ9ZnVuY3Rpb24gdFFlKHQsZSxyKXt2YXIgbj10W2VdOyghKGVRZS5jYWxsKHQsZSkmJnpnZShuLHIpKXx8cj09PXZvaWQgMCYmIShlIGluIHQpKSYmWktlKHQsZSxyKX1mdW5jdGlvbiBhUWUodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz9uUWUsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZpUWUudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfWZ1bmN0aW9uIG9RZSh0LGUscixuKXtpZighS3AodCkpcmV0dXJuIHQ7ZT1xZ2UoZSx0KTtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxzPWEtMSxsPXQ7bCE9bnVsbCYmKytpPGE7KXt2YXIgdT1YQihlW2ldKSxoPXI7aWYodT09PSJfX3Byb3RvX18ifHx1PT09ImNvbnN0cnVjdG9yInx8dT09PSJwcm90b3R5cGUiKXJldHVybiB0O2lmKGkhPXMpe3ZhciBmPWxbdV07aD1uP24oZix1LGwpOnZvaWQgMCxoPT09dm9pZCAwJiYoaD1LcChmKT9mOnNRZShlW2krMV0pP1tdOnt9KX1yUWUobCx1LGgpLGw9bFt1XX1yZXR1cm4gdH1mdW5jdGlvbiBjUWUodCxlLHIpe3JldHVybiB0PT1udWxsP3Q6bFFlKHQsZSxyKX1mdW5jdGlvbiBoUWUodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShuKSk7KytyPG47KWVbcl09dFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBkUWUodCl7cmV0dXJuIHRDKHQpP1VnZSh0LFhCKTpkNCh0KT9bdF06ZlFlKFZnZShXZ2UodCkpKX1mdW5jdGlvbiBLQih0LGUscixuKXtmb3IodmFyIGk9W10sYT1uZXcgYXkscz10LmN5KCksbD1zLmhhc0NvbXBvdW5kTm9kZXMoKSx1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBoPXRbdV07cj9pLnB1c2goaCk6bCYmbihpLGEsaCl9Zm9yKDtpLmxlbmd0aD4wOyl7dmFyIGY9aS5zaGlmdCgpO2UoZiksYS5hZGQoZi5pZCgpKSxsJiZuKGksYSxmKX1yZXR1cm4gdH1mdW5jdGlvbiBYZ2UodCxlLHIpe2lmKHIuaXNQYXJlbnQoKSlmb3IodmFyIG49ci5fcHJpdmF0ZS5jaGlsZHJlbixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ZS5oYXMoYS5pZCgpKXx8dC5wdXNoKGEpfX1mdW5jdGlvbiBqZ2UodCxlLHIpe2lmKHIuaXNDaGlsZCgpKXt2YXIgbj1yLl9wcml2YXRlLnBhcmVudDtlLmhhcyhuLmlkKCkpfHx0LnB1c2gobil9fWZ1bmN0aW9uIE5RZSh0LGUscil7amdlKHQsZSxyKSxYZ2UodCxlLHIpfWZ1bmN0aW9uIGNCKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKGU9PT12b2lkIDAmJihlPSEwKSxyLmxlbmd0aCE9PTApaWYoci5pc05vZGUoKSYmIXIucmVtb3ZlZCgpKXtmb3IodmFyIG49MCxpPXJbMF0sYT1pLl9wcml2YXRlLmVkZ2VzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTshZSYmbC5pc0xvb3AoKXx8KG4rPXQoaSxsKSl9cmV0dXJuIG59ZWxzZSByZXR1cm59fWZ1bmN0aW9uIEgxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpPXRoaXMubm9kZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1zW3RdKHIpO2whPT12b2lkIDAmJihuPT09dm9pZCAwfHxlKGwsbikpJiYobj1sKX1yZXR1cm4gbn19ZnVuY3Rpb24gR2IoKXtyZXR1cm4hMX1mdW5jdGlvbiB3Nigpe3JldHVybiEwfWZ1bmN0aW9uIGFDKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpRUWUsZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPTA7cjxibWUubGVuZ3RoO3IrKyl7dmFyIG49Ym1lW3JdO3RoaXNbbl09dFtuXXx8aTFlW25dfXRoaXMuY29udGV4dD1lfHx0aGlzLmNvbnRleHQsdGhpcy5saXN0ZW5lcnM9W10sdGhpcy5lbWl0dGluZz0wfWZ1bmN0aW9uIGMxZSh0LGUscil7dmFyIG49ci5fcHJpdmF0ZSxpPW4uc3R5bGVDYWNoZT1uLnN0eWxlQ2FjaGV8fFtdLGE7cmV0dXJuKGE9aVt0XSkhPW51bGx8fChhPWlbdF09ZShyKSksYX1mdW5jdGlvbiBzQyh0LGUpe3JldHVybiB0PUJmKHQpLG8oZnVuY3Rpb24obil7cmV0dXJuIGMxZSh0LGUsbil9LCJjYWNoZWRTdHlsZUZ1bmN0aW9uIil9ZnVuY3Rpb24gb0ModCxlKXt0PUJmKHQpO3ZhciByPW8oZnVuY3Rpb24oaSl7cmV0dXJuIGUuY2FsbChpKX0sInNlbGZGbiIpO3JldHVybiBvKGZ1bmN0aW9uKCl7dmFyIGk9dGhpc1swXTtpZihpKXJldHVybiBjMWUodCxyLGkpfSwiY2FjaGVkUHJvdG90eXBlU3R5bGVGdW5jdGlvbiIpfWZ1bmN0aW9uIGhCKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZSxuPXIuZGF0YS5wYXJlbnQ/dC5wYXJlbnRzKCk6bnVsbDtpZihuKWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKCFlKGEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFFCKHQpe3ZhciBlPXQub2sscj10LmVkZ2VPa1ZpYU5vZGV8fHQub2ssbj10LnBhcmVudE9rfHx0Lm9rO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMuY3koKTtpZighaS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMDt2YXIgYT10aGlzWzBdLHM9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYoYSl7dmFyIGw9YS5fcHJpdmF0ZTtpZighZShhKSlyZXR1cm4hMTtpZihhLmlzTm9kZSgpKXJldHVybiFzfHxoQihhLG4pO3ZhciB1PWwuc291cmNlLGg9bC50YXJnZXQ7cmV0dXJuIHIodSkmJighc3x8aEIodSxyKSkmJih1PT09aHx8cihoKSYmKCFzfHxoQihoLHIpKSl9fX1mdW5jdGlvbiB3bWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9W107aWYoZS5sZW5ndGg9PT0yKXt2YXIgbj1lWzBdLGk9ZVsxXTt0aGlzLm9uKHQuZXZlbnQsbixpKX1lbHNlIGlmKGUubGVuZ3RoPT09MSYmbGkoZVswXSkpe3ZhciBhPWVbMF07dGhpcy5vbih0LmV2ZW50LGEpfWVsc2UgaWYoZS5sZW5ndGg9PT0wfHxlLmxlbmd0aD09PTEmJkVuKGVbMF0pKXtmb3IodmFyIHM9ZS5sZW5ndGg9PT0xP2VbMF06bnVsbCxsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXNbbF0saD0hdC5hYmxlRmllbGR8fHUuX3ByaXZhdGVbdC5hYmxlRmllbGRdLGY9dS5fcHJpdmF0ZVt0LmZpZWxkXSE9dC52YWx1ZTtpZih0Lm92ZXJyaWRlQWJsZSl7dmFyIGQ9dC5vdmVycmlkZUFibGUodSk7aWYoZCE9PXZvaWQgMCYmKGg9ZCwhZCkpcmV0dXJuIHRoaXN9aCYmKHUuX3ByaXZhdGVbdC5maWVsZF09dC52YWx1ZSxmJiZyLnB1c2godSkpfXZhciBwPXRoaXMuc3Bhd24ocik7cC51cGRhdGVTdHlsZSgpLHAuZW1pdCh0LmV2ZW50KSxzJiZwLmVtaXQocyl9cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIGh5KHQpe09mW3QuZmllbGRdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXtpZih0Lm92ZXJyaWRlRmllbGQpe3ZhciByPXQub3ZlcnJpZGVGaWVsZChlKTtpZihyIT09dm9pZCAwKXJldHVybiByfXJldHVybiBlLl9wcml2YXRlW3QuZmllbGRdfX0sT2ZbdC5vbl09d21lKHtldmVudDp0Lm9uLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLE9mW3Qub2ZmXT13bWUoe2V2ZW50OnQub2ZmLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMX0pfWZ1bmN0aW9uIENtZSh0KXtyZXR1cm4gbyhmdW5jdGlvbihyKXtmb3IodmFyIG49W10saT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgYT10aGlzW2ldLHM9YS5fcHJpdmF0ZVt0LmF0dHJdO3MmJm4ucHVzaChzKX1yZXR1cm4gdGhpcy5zcGF3bihuLCEwKS5maWx0ZXIocil9LCJzb3VyY2VJbXBsIil9ZnVuY3Rpb24gQW1lKHQpe3JldHVybiBvKGZ1bmN0aW9uKHIpe3ZhciBuPVtdLGk9dGhpcy5fcHJpdmF0ZS5jeSxhPXR8fHt9O1p0KHIpJiYocj1pLiQocikpO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKWZvcih2YXIgbD1yW3NdLl9wcml2YXRlLmVkZ2VzLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XSxmPWguX3ByaXZhdGUuZGF0YSxkPXRoaXMuaGFzRWxlbWVudFdpdGhJZChmLnNvdXJjZSkmJnIuaGFzRWxlbWVudFdpdGhJZChmLnRhcmdldCkscD1yLmhhc0VsZW1lbnRXaXRoSWQoZi5zb3VyY2UpJiZ0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZi50YXJnZXQpLG09ZHx8cDttJiYoKGEudGhpc0lzU3JjfHxhLnRoaXNJc1RndCkmJihhLnRoaXNJc1NyYyYmIWR8fGEudGhpc0lzVGd0JiYhcCl8fG4ucHVzaChoKSl9cmV0dXJuIHRoaXMuc3Bhd24obiwhMCl9LCJlZGdlc1dpdGhJbXBsIil9ZnVuY3Rpb24gX21lKHQpe3ZhciBlPXtjb2RpcmVjdGVkOiExfTtyZXR1cm4gdD1pcih7fSxlLHQpLG8oZnVuY3Rpb24obil7Zm9yKHZhciBpPVtdLGE9dGhpcy5lZGdlcygpLHM9dCxsPTA7bDxhLmxlbmd0aDtsKyspZm9yKHZhciB1PWFbbF0saD11Ll9wcml2YXRlLGY9aC5zb3VyY2UsZD1mLl9wcml2YXRlLmRhdGEuaWQscD1oLmRhdGEudGFyZ2V0LG09Zi5fcHJpdmF0ZS5lZGdlcyxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ10sdj15Ll9wcml2YXRlLmRhdGEseD12LnRhcmdldCxiPXYuc291cmNlLFQ9eD09PXAmJmI9PT1kLFM9ZD09PXgmJnA9PT1iOyhzLmNvZGlyZWN0ZWQmJlR8fCFzLmNvZGlyZWN0ZWQmJihUfHxTKSkmJmkucHVzaCh5KX1yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIobil9LCJwYXJhbGxlbEVkZ2VzSW1wbCIpfWZ1bmN0aW9uIGxaZSh0LGUscixuKXt2YXIgaT00LGE9LjAwMSxzPTFlLTcsbD0xMCx1PTExLGg9MS8odS0xKSxmPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgZD0wO2Q8NDsrK2QpaWYodHlwZW9mIGFyZ3VtZW50c1tkXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tkXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbZF0pKXJldHVybiExO3Q9TWF0aC5taW4odCwxKSxyPU1hdGgubWluKHIsMSksdD1NYXRoLm1heCh0LDApLHI9TWF0aC5tYXgociwwKTt2YXIgcD1mP25ldyBGbG9hdDMyQXJyYXkodSk6bmV3IEFycmF5KHUpO2Z1bmN0aW9uIG0oTyxSKXtyZXR1cm4gMS0zKlIrMypPfW8obSwiQSIpO2Z1bmN0aW9uIGcoTyxSKXtyZXR1cm4gMypSLTYqT31vKGcsIkIiKTtmdW5jdGlvbiB5KE8pe3JldHVybiAzKk99byh5LCJDIik7ZnVuY3Rpb24gdihPLFIsayl7cmV0dXJuKChtKFIsaykqTytnKFIsaykpKk8reShSKSkqT31vKHYsImNhbGNCZXppZXIiKTtmdW5jdGlvbiB4KE8sUixrKXtyZXR1cm4gMyptKFIsaykqTypPKzIqZyhSLGspKk8reShSKX1vKHgsImdldFNsb3BlIik7ZnVuY3Rpb24gYihPLFIpe2Zvcih2YXIgaz0wO2s8aTsrK2spe3ZhciBMPXgoUix0LHIpO2lmKEw9PT0wKXJldHVybiBSO3ZhciBBPXYoUix0LHIpLU87Ui09QS9MfXJldHVybiBSfW8oYiwibmV3dG9uUmFwaHNvbkl0ZXJhdGUiKTtmdW5jdGlvbiBUKCl7Zm9yKHZhciBPPTA7Tzx1OysrTylwW09dPXYoTypoLHQscil9byhULCJjYWxjU2FtcGxlVmFsdWVzIik7ZnVuY3Rpb24gUyhPLFIsayl7dmFyIEwsQSxJPTA7ZG8gQT1SKyhrLVIpLzIsTD12KEEsdCxyKS1PLEw+MD9rPUE6Uj1BO3doaWxlKE1hdGguYWJzKEwpPnMmJisrSTxsKTtyZXR1cm4gQX1vKFMsImJpbmFyeVN1YmRpdmlkZSIpO2Z1bmN0aW9uIHcoTyl7Zm9yKHZhciBSPTAsaz0xLEw9dS0xO2shPT1MJiZwW2tdPD1POysraylSKz1oOy0tazt2YXIgQT0oTy1wW2tdKS8ocFtrKzFdLXBba10pLEk9UitBKmgsTT14KEksdCxyKTtyZXR1cm4gTT49YT9iKE8sSSk6TT09PTA/STpTKE8sUixSK2gpfW8odywiZ2V0VEZvclgiKTt2YXIgRT0hMTtmdW5jdGlvbiBfKCl7RT0hMCwodCE9PWV8fHIhPT1uKSYmVCgpfW8oXywicHJlY29tcHV0ZSIpO3ZhciBDPW8oZnVuY3Rpb24oUil7cmV0dXJuIEV8fF8oKSx0PT09ZSYmcj09PW4/UjpSPT09MD8wOlI9PT0xPzE6dih3KFIpLGUsbil9LCJmIik7Qy5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuW3t4OnQseTplfSx7eDpyLHk6bn1dfTt2YXIgRD0iZ2VuZXJhdGVCZXppZXIoIitbdCxlLHIsbl0rIikiO3JldHVybiBDLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIER9LEN9ZnVuY3Rpb24gRG1lKHQsZSxyLG4saSl7aWYobj09PTF8fGU9PT1yKXJldHVybiByO3ZhciBhPWkoZSxyLG4pO3JldHVybiB0PT1udWxsfHwoKHQucm91bmRWYWx1ZXx8dC5jb2xvcikmJihhPU1hdGgucm91bmQoYSkpLHQubWluIT09dm9pZCAwJiYoYT1NYXRoLm1heChhLHQubWluKSksdC5tYXghPT12b2lkIDAmJihhPU1hdGgubWluKGEsdC5tYXgpKSksYX1mdW5jdGlvbiBMbWUodCxlKXtyZXR1cm4gdC5wZlZhbHVlIT1udWxsfHx0LnZhbHVlIT1udWxsP3QucGZWYWx1ZSE9bnVsbCYmKGU9PW51bGx8fGUudHlwZS51bml0cyE9PSIlIik/dC5wZlZhbHVlOnQudmFsdWU6dH1mdW5jdGlvbiBXMSh0LGUscixuLGkpe3ZhciBhPWkhPW51bGw/aS50eXBlOm51bGw7cjwwP3I9MDpyPjEmJihyPTEpO3ZhciBzPUxtZSh0LGkpLGw9TG1lKGUsaSk7aWYoX3QocykmJl90KGwpKXJldHVybiBEbWUoYSxzLGwscixuKTtpZihFbihzKSYmRW4obCkpe2Zvcih2YXIgdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBmPXNbaF0sZD1sW2hdO2lmKGYhPW51bGwmJmQhPW51bGwpe3ZhciBwPURtZShhLGYsZCxyLG4pO3UucHVzaChwKX1lbHNlIHUucHVzaChkKX1yZXR1cm4gdX19ZnVuY3Rpb24gdVplKHQsZSxyLG4pe3ZhciBpPSFuLGE9dC5fcHJpdmF0ZSxzPWUuX3ByaXZhdGUsbD1zLmVhc2luZyx1PXMuc3RhcnRUaW1lLGg9bj90OnQuY3koKSxmPWguc3R5bGUoKTtpZighcy5lYXNpbmdJbXBsKWlmKGw9PW51bGwpcy5lYXNpbmdJbXBsPU02LmxpbmVhcjtlbHNle3ZhciBkO2lmKFp0KGwpKXt2YXIgcD1mLnBhcnNlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsbCk7ZD1wLnZhbHVlfWVsc2UgZD1sO3ZhciBtLGc7WnQoZCk/KG09ZCxnPVtdKToobT1kWzFdLGc9ZC5zbGljZSgyKS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuK0Z9KSksZy5sZW5ndGg+MD8obT09PSJzcHJpbmciJiZnLnB1c2gocy5kdXJhdGlvbikscy5lYXNpbmdJbXBsPU02W21dLmFwcGx5KG51bGwsZykpOnMuZWFzaW5nSW1wbD1NNlttXX12YXIgeT1zLmVhc2luZ0ltcGwsdjtpZihzLmR1cmF0aW9uPT09MD92PTE6dj0oci11KS9zLmR1cmF0aW9uLHMuYXBwbHlpbmcmJih2PXMucHJvZ3Jlc3MpLHY8MD92PTA6dj4xJiYodj0xKSxzLmRlbGF5PT1udWxsKXt2YXIgeD1zLnN0YXJ0UG9zaXRpb24sYj1zLnBvc2l0aW9uO2lmKGImJmkmJiF0LmxvY2tlZCgpKXt2YXIgVD17fTtWYih4LngsYi54KSYmKFQueD1XMSh4LngsYi54LHYseSkpLFZiKHgueSxiLnkpJiYoVC55PVcxKHgueSxiLnksdix5KSksdC5wb3NpdGlvbihUKX12YXIgUz1zLnN0YXJ0UGFuLHc9cy5wYW4sRT1hLnBhbixfPXchPW51bGwmJm47XyYmKFZiKFMueCx3LngpJiYoRS54PVcxKFMueCx3Lngsdix5KSksVmIoUy55LHcueSkmJihFLnk9VzEoUy55LHcueSx2LHkpKSx0LmVtaXQoInBhbiIpKTt2YXIgQz1zLnN0YXJ0Wm9vbSxEPXMuem9vbSxPPUQhPW51bGwmJm47TyYmKFZiKEMsRCkmJihhLnpvb209aTQoYS5taW5ab29tLFcxKEMsRCx2LHkpLGEubWF4Wm9vbSkpLHQuZW1pdCgiem9vbSIpKSwoX3x8TykmJnQuZW1pdCgidmlld3BvcnQiKTt2YXIgUj1zLnN0eWxlO2lmKFImJlIubGVuZ3RoPjAmJmkpe2Zvcih2YXIgaz0wO2s8Ui5sZW5ndGg7aysrKXt2YXIgTD1SW2tdLEE9TC5uYW1lLEk9TCxNPXMuc3RhcnRTdHlsZVtBXSxQPWYucHJvcGVydGllc1tNLm5hbWVdLEI9VzEoTSxJLHYseSxQKTtmLm92ZXJyaWRlQnlwYXNzKHQsQSxCKX10LmVtaXQoInN0eWxlIil9fXJldHVybiBzLnByb2dyZXNzPXYsdn1mdW5jdGlvbiBWYih0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsPyExOl90KHQpJiZfdChlKT8hMDohISh0JiZlKX1mdW5jdGlvbiBoWmUodCxlLHIsbil7dmFyIGk9ZS5fcHJpdmF0ZTtpLnN0YXJ0ZWQ9ITAsaS5zdGFydFRpbWU9ci1pLnByb2dyZXNzKmkuZHVyYXRpb259ZnVuY3Rpb24gUm1lKHQsZSl7dmFyIHI9ZS5fcHJpdmF0ZS5hbmlFbGVzLG49W107ZnVuY3Rpb24gaShmLGQpe3ZhciBwPWYuX3ByaXZhdGUsbT1wLmFuaW1hdGlvbi5jdXJyZW50LGc9cC5hbmltYXRpb24ucXVldWUseT0hMTtpZihtLmxlbmd0aD09PTApe3ZhciB2PWcuc2hpZnQoKTt2JiZtLnB1c2godil9Zm9yKHZhciB4PW8oZnVuY3Rpb24oRSl7Zm9yKHZhciBfPUUubGVuZ3RoLTE7Xz49MDtfLS0pe3ZhciBDPUVbX107QygpfUUuc3BsaWNlKDAsRS5sZW5ndGgpfSwiY2FsbGJhY2tzIiksYj1tLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgVD1tW2JdLFM9VC5fcHJpdmF0ZTtpZihTLnN0b3BwZWQpe20uc3BsaWNlKGIsMSksUy5ob29rZWQ9ITEsUy5wbGF5aW5nPSExLFMuc3RhcnRlZD0hMSx4KFMuZnJhbWVzKTtjb250aW51ZX0hUy5wbGF5aW5nJiYhUy5hcHBseWluZ3x8KFMucGxheWluZyYmUy5hcHBseWluZyYmKFMuYXBwbHlpbmc9ITEpLFMuc3RhcnRlZHx8aFplKGYsVCx0KSx1WmUoZixULHQsZCksUy5hcHBseWluZyYmKFMuYXBwbHlpbmc9ITEpLHgoUy5mcmFtZXMpLFMuc3RlcCE9bnVsbCYmUy5zdGVwKHQpLFQuY29tcGxldGVkKCkmJihtLnNwbGljZShiLDEpLFMuaG9va2VkPSExLFMucGxheWluZz0hMSxTLnN0YXJ0ZWQ9ITEseChTLmNvbXBsZXRlcykpLHk9ITApfXJldHVybiFkJiZtLmxlbmd0aD09PTAmJmcubGVuZ3RoPT09MCYmbi5wdXNoKGYpLHl9byhpLCJzdGVwT25lIik7Zm9yKHZhciBhPSExLHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXSx1PWkobCk7YT1hfHx1fXZhciBoPWkoZSwhMCk7KGF8fGgpJiYoci5sZW5ndGg+MD9lLm5vdGlmeSgiZHJhdyIscik6ZS5ub3RpZnkoImRyYXciKSksci51bm1lcmdlKG4pLGUuZW1pdCgic3RlcCIpfWZ1bmN0aW9uIGgxZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30seFplLGJaZSx0KX1mdW5jdGlvbiBmMWUodCl7dGhpcy5vcHRpb25zPWlyKHt9LFRaZSx0KX1mdW5jdGlvbiBkMWUodCl7dGhpcy5vcHRpb25zPWlyKHt9LHdaZSx0KX1mdW5jdGlvbiB1Qyh0KXt0aGlzLm9wdGlvbnM9aXIoe30sa1plLHQpLHRoaXMub3B0aW9ucy5sYXlvdXQ9dGhpczt2YXIgZT10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLHI9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBhPWkuc291cmNlKCkuZGF0YSgiaWQiKSxzPWkudGFyZ2V0KCkuZGF0YSgiaWQiKSxsPWUuc29tZShmdW5jdGlvbihoKXtyZXR1cm4gaC5kYXRhKCJpZCIpPT09YX0pLHU9ZS5zb21lKGZ1bmN0aW9uKGgpe3JldHVybiBoLmRhdGEoImlkIik9PT1zfSk7cmV0dXJuIWx8fCF1fSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KG4pfWZ1bmN0aW9uIG0xZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30selplLHQpfWZ1bmN0aW9uIGVGKHQpe3RoaXMub3B0aW9ucz1pcih7fSxHWmUsdCl9ZnVuY3Rpb24gZzFlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxWWmUsdCl9ZnVuY3Rpb24geTFlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxVWmUsdCl9ZnVuY3Rpb24gdjFlKHQpe3RoaXMub3B0aW9ucz10LHRoaXMubm90aWZpY2F0aW9ucz0wfWZ1bmN0aW9uIFQxZSh0LGUpe2UucmFkaXVzPT09MD90LmxpbmVUbyhlLmN4LGUuY3kpOnQuYXJjKGUuY3gsZS5jeSxlLnJhZGl1cyxlLnN0YXJ0QW5nbGUsZS5lbmRBbmdsZSxlLmNvdW50ZXJDbG9ja3dpc2UpfWZ1bmN0aW9uIHJGKHQsZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMDtyZXR1cm4gbj09PTB8fGUucmFkaXVzPT09MD97Y3g6ZS54LGN5OmUueSxyYWRpdXM6MCxzdGFydFg6ZS54LHN0YXJ0WTplLnksc3RvcFg6ZS54LHN0b3BZOmUueSxzdGFydEFuZ2xlOnZvaWQgMCxlbmRBbmdsZTp2b2lkIDAsY291bnRlckNsb2Nrd2lzZTp2b2lkIDB9OihxWmUodCxlLHIsbixpKSx7Y3g6X0IsY3k6REIscmFkaXVzOllwLHN0YXJ0WDp4MWUsc3RhcnRZOmIxZSxzdG9wWDpMQixzdG9wWTpSQixzdGFydEFuZ2xlOktjLmFuZytNYXRoLlBJLzIqWHAsZW5kQW5nbGU6bmwuYW5nLU1hdGguUEkvMipYcCxjb3VudGVyQ2xvY2t3aXNlOlA2fSl9ZnVuY3Rpb24gdzFlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cis9Mil7dmFyIG49dFtyXSxpPXRbcisxXTtlLnB1c2goe3g6bix5Oml9KX1yZXR1cm4gZX19ZnVuY3Rpb24gWVplKHQsZSxyKXtmb3IodmFyIG49byhmdW5jdGlvbihoLGYsZCxwKXtyZXR1cm4gc2EoaCxmLGQscCl9LCJxYmV6aWVyQXQkMSIpLGk9ZS5fcHJpdmF0ZSxhPWkucnN0eWxlLmJlemllclB0cyxzPTA7czx0LmJlemllclByb2pQY3RzLmxlbmd0aDtzKyspe3ZhciBsPXQuYmV6aWVyUHJvalBjdHNbc107YS5wdXNoKHt4Om4oclswXSxyWzJdLHJbNF0sbCkseTpuKHJbMV0sclszXSxyWzVdLGwpfSl9fWZ1bmN0aW9uIGtKZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO3QubGluZVRvKG4ueCxuLnkpfX1mdW5jdGlvbiBFSmUodCxlLHIpe2Zvcih2YXIgbixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aT09PTAmJihuPWEpLHQubGluZVRvKGEueCxhLnkpfXQucXVhZHJhdGljQ3VydmVUbyhyLngsci55LG4ueCxuLnkpfWZ1bmN0aW9uIGptZSh0LGUscil7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCk7Zm9yKHZhciBuPWUsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO3QubGluZVRvKGEueCxhLnkpfXZhciBzPXIsbD1yWzBdO3QubW92ZVRvKGwueCxsLnkpO2Zvcih2YXIgaT0xO2k8cy5sZW5ndGg7aSsrKXt2YXIgYT1zW2ldO3QubGluZVRvKGEueCxhLnkpfXQuY2xvc2VQYXRoJiZ0LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIFNKZSh0LGUscixuLGkpe3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQuYXJjKHIsbixpLDAsTWF0aC5QSSoyLCExKTt2YXIgYT1lLHM9YVswXTt0Lm1vdmVUbyhzLngscy55KTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXTt0LmxpbmVUbyh1LngsdS55KX10LmNsb3NlUGF0aCYmdC5jbG9zZVBhdGgoKX1mdW5jdGlvbiBDSmUodCxlLHIsbil7dC5hcmMoZSxyLG4sMCxNYXRoLlBJKjIsITEpfWZ1bmN0aW9uIG1CKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOjUscz1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMDt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUrYSxyKSx0LmxpbmVUbyhlK24tYSxyKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIsZStuLHIrYSksdC5saW5lVG8oZStuLHIraS1hKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIraSxlK24tYSxyK2kpLHQubGluZVRvKGUrYSxyK2kpLHQucXVhZHJhdGljQ3VydmVUbyhlLHIraSxlLHIraS1hKSx0LmxpbmVUbyhlLHIrYSksdC5xdWFkcmF0aWNDdXJ2ZVRvKGUscixlK2EsciksdC5jbG9zZVBhdGgoKSxzP3Quc3Ryb2tlKCk6dC5maWxsKCl9ZnVuY3Rpb24gS21lKHQsZSxyKXt2YXIgbj10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShuLHIpLHQuY29tcGlsZVNoYWRlcihuKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIobix0LkNPTVBJTEVfU1RBVFVTKSl0aHJvdyBuZXcgRXJyb3IodC5nZXRTaGFkZXJJbmZvTG9nKG4pKTtyZXR1cm4gbn1mdW5jdGlvbiBNSmUodCxlLHIpe3ZhciBuPUttZSh0LHQuVkVSVEVYX1NIQURFUixlKSxpPUttZSh0LHQuRlJBR01FTlRfU0hBREVSLHIpLGE9dC5jcmVhdGVQcm9ncmFtKCk7aWYodC5hdHRhY2hTaGFkZXIoYSxuKSx0LmF0dGFjaFNoYWRlcihhLGkpLHQubGlua1Byb2dyYW0oYSksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihhLHQuTElOS19TVEFUVVMpKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVycyIpO3JldHVybiBhfWZ1bmN0aW9uIElKZSh0LGUscil7cj09PXZvaWQgMCYmKHI9ZSk7dmFyIG49dC5tYWtlT2Zmc2NyZWVuQ2FudmFzKGUsciksaT1uLmNvbnRleHQ9bi5nZXRDb250ZXh0KCIyZCIpO3JldHVybiBuLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xlYXJSZWN0KDAsMCxuLndpZHRoLG4uaGVpZ2h0KX0sbi5jbGVhcigpLG59ZnVuY3Rpb24gYUYodCl7dmFyIGU9dC5waXhlbFJhdGlvLHI9dC5jeS56b29tKCksbj10LmN5LnBhbigpO3JldHVybnt6b29tOnIqZSxwYW46e3g6bi54KmUseTpuLnkqZX19fWZ1bmN0aW9uIGdCKHQsZSxyLG4saSl7dmFyIGE9bipyK2UueCxzPWkqcitlLnk7cmV0dXJuIHM9TWF0aC5yb3VuZCh0LmNhbnZhc0hlaWdodC1zKSxbYSxzXX1mdW5jdGlvbiBBNih0LGUscil7dmFyIG49dFswXS8yNTUsaT10WzFdLzI1NSxhPXRbMl0vMjU1LHM9ZSxsPXJ8fG5ldyBBcnJheSg0KTtyZXR1cm4gbFswXT1uKnMsbFsxXT1pKnMsbFsyXT1hKnMsbFszXT1zLGx9ZnVuY3Rpb24gXzYodCxlKXt2YXIgcj1lfHxuZXcgQXJyYXkoNCk7cmV0dXJuIHJbMF09KHQ+PjAmMjU1KS8yNTUsclsxXT0odD4+OCYyNTUpLzI1NSxyWzJdPSh0Pj4xNiYyNTUpLzI1NSxyWzNdPSh0Pj4yNCYyNTUpLzI1NSxyfWZ1bmN0aW9uIE9KZSh0KXtyZXR1cm4gdFswXSsodFsxXTw8OCkrKHRbMl08PDE2KSsodFszXTw8MjQpfWZ1bmN0aW9uIFBKZSh0LGUpe3ZhciByPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiByLmJ1ZmZlcj1mdW5jdGlvbihuKXt0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxyKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTElORUFSKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTElORUFSX01JUE1BUF9ORUFSRVNUKSx0LnBpeGVsU3RvcmVpKHQuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCEwKSx0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbiksdC5nZW5lcmF0ZU1pcG1hcCh0LlRFWFRVUkVfMkQpLHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELG51bGwpfSxyLmRlbGV0ZVRleHR1cmU9ZnVuY3Rpb24oKXt0LmRlbGV0ZVRleHR1cmUocil9LHJ9ZnVuY3Rpb24gTzFlKHQsZSl7c3dpdGNoKGUpe2Nhc2UiZmxvYXQiOnJldHVyblsxLHQuRkxPQVQsNF07Y2FzZSJ2ZWMyIjpyZXR1cm5bMix0LkZMT0FULDRdO2Nhc2UidmVjMyI6cmV0dXJuWzMsdC5GTE9BVCw0XTtjYXNlInZlYzQiOnJldHVybls0LHQuRkxPQVQsNF07Y2FzZSJpbnQiOnJldHVyblsxLHQuSU5ULDRdO2Nhc2UiaXZlYzIiOnJldHVyblsyLHQuSU5ULDRdfX1mdW5jdGlvbiBQMWUodCxlLHIpe3N3aXRjaChlKXtjYXNlIHQuRkxPQVQ6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkocik7Y2FzZSB0LklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkocil9fWZ1bmN0aW9uIEJKZSh0LGUscixuLGksYSl7c3dpdGNoKGUpe2Nhc2UgdC5GTE9BVDpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShyLmJ1ZmZlcixhKm4saSk7Y2FzZSB0LklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkoci5idWZmZXIsYSpuLGkpfX1mdW5jdGlvbiBGSmUodCxlLHIsbil7dmFyIGk9TzFlKHQsZSksYT1SaShpLDIpLHM9YVswXSxsPWFbMV0sdT1QMWUodCxsLG4pLGg9dC5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gdC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLGgpLHQuYnVmZmVyRGF0YSh0LkFSUkFZX0JVRkZFUix1LHQuU1RBVElDX0RSQVcpLGw9PT10LkZMT0FUP3QudmVydGV4QXR0cmliUG9pbnRlcihyLHMsbCwhMSwwLDApOmw9PT10LklOVCYmdC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihyLHMsbCwwLDApLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkociksdC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpLGh9ZnVuY3Rpb24geW8odCxlLHIsbil7dmFyIGk9TzFlKHQsciksYT1SaShpLDMpLHM9YVswXSxsPWFbMV0sdT1hWzJdLGg9UDFlKHQsbCxlKnMpLGY9cyp1LGQ9dC5jcmVhdGVCdWZmZXIoKTt0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsZCksdC5idWZmZXJEYXRhKHQuQVJSQVlfQlVGRkVSLGUqZix0LkRZTkFNSUNfRFJBVyksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShuKSxsPT09dC5GTE9BVD90LnZlcnRleEF0dHJpYlBvaW50ZXIobixzLGwsITEsZiwwKTpsPT09dC5JTlQmJnQudmVydGV4QXR0cmliSVBvaW50ZXIobixzLGwsZiwwKSx0LnZlcnRleEF0dHJpYkRpdmlzb3IobiwxKSx0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCk7Zm9yKHZhciBwPW5ldyBBcnJheShlKSxtPTA7bTxlO20rKylwW21dPUJKZSh0LGwsaCxmLHMsbSk7cmV0dXJuIGQuZGF0YUFycmF5PWgsZC5zdHJpZGU9ZixkLnNpemU9cyxkLmdldFZpZXc9ZnVuY3Rpb24oZyl7cmV0dXJuIHBbZ119LGQuc2V0UG9pbnQ9ZnVuY3Rpb24oZyx5LHYpe3ZhciB4PXBbZ107eFswXT15LHhbMV09dn0sZC5idWZmZXJTdWJEYXRhPWZ1bmN0aW9uKGcpe3QuYmluZEJ1ZmZlcih0LkFSUkFZX0JVRkZFUixkKSxnP3QuYnVmZmVyU3ViRGF0YSh0LkFSUkFZX0JVRkZFUiwwLGgsMCxnKnMpOnQuYnVmZmVyU3ViRGF0YSh0LkFSUkFZX0JVRkZFUiwwLGgpfSxkfWZ1bmN0aW9uICRKZSh0KXt2YXIgZT10LmNyZWF0ZUZyYW1lYnVmZmVyKCk7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlKTt2YXIgcj10LmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsciksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0LkxJTkVBUiksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLHQuQ09MT1JfQVRUQUNITUVOVDAsdC5URVhUVVJFXzJELHIsMCksdC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSxlLnNldEZyYW1lYnVmZmVyQXR0YWNobWVudFNpemVzPWZ1bmN0aW9uKG4saSl7dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsciksdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHQuUkdCQSxuLGksMCx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLG51bGwpfSxlfWZ1bmN0aW9uIFpiKCl7dmFyIHQ9bmV3IFFtZSg5KTtyZXR1cm4gUW1lIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wLHRbM109MCx0WzVdPTAsdFs2XT0wLHRbN109MCksdFswXT0xLHRbNF09MSx0WzhdPTEsdH1mdW5jdGlvbiBCMWUodCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9ZnVuY3Rpb24gekplKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1lWzNdLGw9ZVs0XSx1PWVbNV0saD1lWzZdLGY9ZVs3XSxkPWVbOF0scD1yWzBdLG09clsxXSxnPXJbMl0seT1yWzNdLHY9cls0XSx4PXJbNV0sYj1yWzZdLFQ9cls3XSxTPXJbOF07cmV0dXJuIHRbMF09cCpuK20qcytnKmgsdFsxXT1wKmkrbSpsK2cqZix0WzJdPXAqYSttKnUrZypkLHRbM109eSpuK3Yqcyt4KmgsdFs0XT15KmkrdipsK3gqZix0WzVdPXkqYSt2KnUreCpkLHRbNl09YipuK1QqcytTKmgsdFs3XT1iKmkrVCpsK1MqZix0WzhdPWIqYStUKnUrUypkLHR9ZnVuY3Rpb24gajYodCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxzPWVbM10sbD1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddLGQ9ZVs4XSxwPXJbMF0sbT1yWzFdO3JldHVybiB0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPXMsdFs0XT1sLHRbNV09dSx0WzZdPXAqbittKnMraCx0WzddPXAqaSttKmwrZix0WzhdPXAqYSttKnUrZCx0fWZ1bmN0aW9uIEYxZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLHM9ZVszXSxsPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN10sZD1lWzhdLHA9TWF0aC5zaW4ociksbT1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1tKm4rcCpzLHRbMV09bSppK3AqbCx0WzJdPW0qYStwKnUsdFszXT1tKnMtcCpuLHRbNF09bSpsLXAqaSx0WzVdPW0qdS1wKmEsdFs2XT1oLHRbN109Zix0WzhdPWQsdH1mdW5jdGlvbiBzRih0LGUscil7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIHRbMF09biplWzBdLHRbMV09biplWzFdLHRbMl09biplWzJdLHRbM109aSplWzNdLHRbNF09aSplWzRdLHRbNV09aSplWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHR9ZnVuY3Rpb24gR0plKHQsZSxyKXtyZXR1cm4gdFswXT0yL2UsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0tMi9yLHRbNV09MCx0WzZdPS0xLHRbN109MSx0WzhdPTEsdH1mdW5jdGlvbiBISmUodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3Rpb24/dC5pbnRlcnNlY3Rpb24oZSk6bmV3IFNldChhZ2UodCkuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlLmhhcyhyKX0pKX1mdW5jdGlvbiBlZ2UodCxlKXtyZXR1cm4icmdiYSgiLmNvbmNhdCh0WzBdLCIsICIpLmNvbmNhdCh0WzFdLCIsICIpLmNvbmNhdCh0WzJdLCIsICIpLmNvbmNhdChlLCIpIil9ZnVuY3Rpb24gWEplKHQpe3ZhciBlPXQmJnQuc3R5bGUmJnQuc3R5bGUuYmFja2dyb3VuZENvbG9yfHwid2hpdGUiO3JldHVybiBoZ2UoZSl9ZnVuY3Rpb24gakplKHQpe3t2YXIgZT10LnJlbmRlcjt0LnJlbmRlcj1mdW5jdGlvbihhKXthPWF8fHt9O3ZhciBzPXQuY3k7dC53ZWJnbCYmKHMuem9vbSgpPkwxZT8oS0plKHQpLGUuY2FsbCh0LGEpKTooUUplKHQpLEcxZSh0LGEsSmIuU0NSRUVOKSkpfX17dmFyIHI9dC5tYXRjaENhbnZhc1NpemU7dC5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24oYSl7ci5jYWxsKHQsYSksdC5waWNraW5nRnJhbWVCdWZmZXIuc2V0RnJhbWVidWZmZXJBdHRhY2htZW50U2l6ZXModC5jYW52YXNXaWR0aCx0LmNhbnZhc0hlaWdodCksdC5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSEwfX10LmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oYSxzLGwsdSl7cmV0dXJuIG5ldCh0LGEscyl9O3t2YXIgbj10LmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlczt0LmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbigpe24uY2FsbCh0KSx0LnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXc9ITB9fXt2YXIgaT10Lm5vdGlmeTt0Lm5vdGlmeT1mdW5jdGlvbihhLHMpe2kuY2FsbCh0LGEscyksYT09PSJ2aWV3cG9ydCJ8fGE9PT0iYm91bmRzIj90LnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXc9ITA6YT09PSJiYWNrZ3JvdW5kIiYmdC5lbGVEcmF3aW5nLmludmFsaWRhdGUocyx7dHlwZToibm9kZS1ib2R5In0pfX19ZnVuY3Rpb24gS0plKHQpe3ZhciBlPXQuZGF0YS5jb250ZXh0c1t0LldFQkdMXTtlLmNsZWFyKGUuQ09MT1JfQlVGRkVSX0JJVHxlLkRFUFRIX0JVRkZFUl9CSVQpfWZ1bmN0aW9uIFFKZSh0KXt2YXIgZT1vKGZ1bmN0aW9uKG4pe24uc2F2ZSgpLG4uc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxuLmNsZWFyUmVjdCgwLDAsdC5jYW52YXNXaWR0aCx0LmNhbnZhc0hlaWdodCksbi5yZXN0b3JlKCl9LCJjbGVhciIpO2UodC5kYXRhLmNvbnRleHRzW3QuTk9ERV0pLGUodC5kYXRhLmNvbnRleHRzW3QuRFJBR10pfWZ1bmN0aW9uIFpKZSh0KXt2YXIgZT10LmNhbnZhc1dpZHRoLHI9dC5jYW52YXNIZWlnaHQsbj1hRih0KSxpPW4ucGFuLGE9bi56b29tLHM9WmIoKTtqNihzLHMsW2kueCxpLnldKSxzRihzLHMsW2EsYV0pO3ZhciBsPVpiKCk7R0plKGwsZSxyKTt2YXIgdT1aYigpO3JldHVybiB6SmUodSxsLHMpLHV9ZnVuY3Rpb24gejFlKHQsZSl7dmFyIHI9dC5jYW52YXNXaWR0aCxuPXQuY2FudmFzSGVpZ2h0LGk9YUYodCksYT1pLnBhbixzPWkuem9vbTtlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZS5jbGVhclJlY3QoMCwwLHIsbiksZS50cmFuc2xhdGUoYS54LGEueSksZS5zY2FsZShzLHMpfWZ1bmN0aW9uIEpKZSh0LGUpe3QuZHJhd1NlbGVjdGlvblJlY3RhbmdsZShlLGZ1bmN0aW9uKHIpe3JldHVybiB6MWUodCxyKX0pfWZ1bmN0aW9uIGVldCh0KXt2YXIgZT10LmRhdGEuY29udGV4dHNbdC5OT0RFXTtlLnNhdmUoKSx6MWUodCxlKSxlLnN0cm9rZVN0eWxlPSJyZ2JhKDAsIDAsIDAsIDAuMykiLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8oLTFlMywwKSxlLmxpbmVUbygxZTMsMCksZS5zdHJva2UoKSxlLmJlZ2luUGF0aCgpLGUubW92ZVRvKDAsLTFlMyksZS5saW5lVG8oMCwxZTMpLGUuc3Ryb2tlKCksZS5yZXN0b3JlKCl9ZnVuY3Rpb24gdGV0KHQpe3ZhciBlPW8oZnVuY3Rpb24oaSxhLHMpe2Zvcih2YXIgbD1pLmF0bGFzTWFuYWdlci5nZXRSZW5kZXJUeXBlT3B0cyhhKSx1PXQuZGF0YS5jb250ZXh0c1t0Lk5PREVdLGg9LjEyNSxmPWwuYXRsYXNDb2xsZWN0aW9uLmF0bGFzZXMsZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdLG09cC5jYW52YXMsZz1tLndpZHRoLHk9bS5oZWlnaHQsdj1nKmQseD1tLmhlaWdodCpzO3Uuc2F2ZSgpLHUuc2NhbGUoaCxoKSx1LmRyYXdJbWFnZShtLHYseCksdS5zdHJva2VTdHlsZT0iYmxhY2siLHUucmVjdCh2LHgsZyx5KSx1LnN0cm9rZSgpLHUucmVzdG9yZSgpfX0sImRyYXciKSxyPTA7ZSh0LmVsZURyYXdpbmcsIm5vZGUtYm9keSIscisrKSxlKHQuZWxlRHJhd2luZywibm9kZS1sYWJlbCIscisrKX1mdW5jdGlvbiByZXQodCxlLHIsbixpKXt2YXIgYSxzLGwsdSxoPWFGKHQpLGY9aC5wYW4sZD1oLnpvb207aWYobj09PXZvaWQgMHx8aT09PXZvaWQgMCl7dmFyIHA9Z0IodCxmLGQsZSxyKSxtPVJpKHAsMiksZz1tWzBdLHk9bVsxXSx2PTY7YT1nLXYvMixzPXktdi8yLGw9dix1PXZ9ZWxzZXt2YXIgeD1nQih0LGYsZCxlLHIpLGI9UmkoeCwyKSxUPWJbMF0sUz1iWzFdLHc9Z0IodCxmLGQsbixpKSxFPVJpKHcsMiksXz1FWzBdLEM9RVsxXTthPVQscz1DLGw9TWF0aC5hYnMoXy1UKSx1PU1hdGguYWJzKEMtUyl9aWYobD09PTB8fHU9PT0wKXJldHVybltdO3ZhciBEPXQuZGF0YS5jb250ZXh0c1t0LldFQkdMXTtELmJpbmRGcmFtZWJ1ZmZlcihELkZSQU1FQlVGRkVSLHQucGlja2luZ0ZyYW1lQnVmZmVyKSx0LnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXcmJihELnZpZXdwb3J0KDAsMCxELmNhbnZhcy53aWR0aCxELmNhbnZhcy5oZWlnaHQpLEcxZSh0LG51bGwsSmIuUElDS0lORyksdC5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSExKTt2YXIgTz1sKnUsUj1uZXcgVWludDhBcnJheShPKjQpO0QucmVhZFBpeGVscyhhLHMsbCx1LEQuUkdCQSxELlVOU0lHTkVEX0JZVEUsUiksRC5iaW5kRnJhbWVidWZmZXIoRC5GUkFNRUJVRkZFUixudWxsKTtmb3IodmFyIGs9bmV3IFNldCxMPTA7TDxPO0wrKyl7dmFyIEE9Ui5zbGljZShMKjQsTCo0KzQpLEk9T0plKEEpLTE7ST49MCYmay5hZGQoSSl9cmV0dXJuIGt9ZnVuY3Rpb24gbmV0KHQsZSxyKXt2YXIgbj1yZXQodCxlLHIpLGk9dC5nZXRDYWNoZWRaU29ydGVkRWxlcygpLGEscyxsPXZvKG4pLHU7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgaD11LnZhbHVlLGY9aVtoXTtpZighYSYmZi5pc05vZGUoKSYmKGE9ZiksIXMmJmYuaXNFZGdlKCkmJihzPWYpLGEmJnMpYnJlYWt9fWNhdGNoKGQpe2wuZShkKX1maW5hbGx5e2wuZigpfXJldHVyblthLHNdLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiBHMWUodCxlLHIpe3ZhciBuLGk7dC53ZWJnbERlYnVnJiYoaT1bXSxuPXBlcmZvcm1hbmNlLm5vdygpKTt2YXIgYT10LmVsZURyYXdpbmcscz0wO2lmKHIuc2NyZWVuJiZ0LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdC5TRUxFQ1RfQk9YXSYmSkplKHQsZSksdC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3QuTk9ERV18fHIucGlja2luZyl7dmFyIGw9byhmdW5jdGlvbihrLEwpe0wrPTEsay5pc05vZGUoKT8oYS5kcmF3VGV4dHVyZShrLEwsIm5vZGUtdW5kZXJsYXkiKSxhLmRyYXdUZXh0dXJlKGssTCwibm9kZS1ib2R5IiksYS5kcmF3VGV4dHVyZShrLEwsIm5vZGUtbGFiZWwiKSxhLmRyYXdUZXh0dXJlKGssTCwibm9kZS1vdmVybGF5IikpOihhLmRyYXdFZGdlTGluZShrLEwpLGEuZHJhd0VkZ2VBcnJvdyhrLEwsInNvdXJjZSIpLGEuZHJhd0VkZ2VBcnJvdyhrLEwsInRhcmdldCIpLGEuZHJhd1RleHR1cmUoayxMLCJlZGdlLWxhYmVsIikpfSwiZHJhdyIpLHU9dC5kYXRhLmNvbnRleHRzW3QuV0VCR0xdO3Iuc2NyZWVuPyh1LmNsZWFyQ29sb3IoMCwwLDAsMCksdS5lbmFibGUodS5CTEVORCksdS5ibGVuZEZ1bmModS5PTkUsdS5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6dS5kaXNhYmxlKHUuQkxFTkQpLHUuY2xlYXIodS5DT0xPUl9CVUZGRVJfQklUfHUuREVQVEhfQlVGRkVSX0JJVCksdS52aWV3cG9ydCgwLDAsdS5jYW52YXMud2lkdGgsdS5jYW52YXMuaGVpZ2h0KTt2YXIgaD1aSmUodCksZj10LmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYocz1mLmxlbmd0aCxhLnN0YXJ0RnJhbWUoaCxpLHIpLHIuc2NyZWVuKXtmb3IodmFyIGQ9MDtkPGYubm9uZHJhZy5sZW5ndGg7ZCsrKWwoZi5ub25kcmFnW2RdLGQpO2Zvcih2YXIgcD0wO3A8Zi5kcmFnLmxlbmd0aDtwKyspbChmLmRyYWdbcF0sLTEpfWVsc2UgaWYoci5waWNraW5nKWZvcih2YXIgbT0wO208Zi5sZW5ndGg7bSsrKWwoZlttXSxtKTthLmVuZEZyYW1lKCksdC5kYXRhLmdjJiYoY29uc29sZS5sb2coIkdhcmJhZ2UgQ29sbGVjdCEiKSx0LmRhdGEuZ2M9ITEsYS5nYygpKSxyLnNjcmVlbiYmdC53ZWJnbERlYnVnU2hvd0F0bGFzZXMmJihlZXQodCksdGV0KHQpKSx0LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdC5OT0RFXT0hMSx0LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdC5EUkFHXT0hMX1pZih0LndlYmdsRGVidWcpe3ZhciBnPXBlcmZvcm1hbmNlLm5vdygpLHk9ITAsdj0wLHg9MCxiPXZvKGkpLFQ7dHJ5e2ZvcihiLnMoKTshKFQ9Yi5uKCkpLmRvbmU7KXt2YXIgUz1ULnZhbHVlO3YrKyx4Kz1TLmNvdW50fX1jYXRjaChSKXtiLmUoUil9ZmluYWxseXtiLmYoKX12YXIgdz1NYXRoLmNlaWwoZy1uKSxFPSIiLmNvbmNhdChzLCIgZWxlbWVudHMsICIpLmNvbmNhdCh4LCIgcmVjdGFuZ2xlcywgIikuY29uY2F0KHYsIiBiYXRjaGVzIik7aWYoeSljb25zb2xlLmxvZygiV2ViR0wgKCIuY29uY2F0KHIubmFtZSwiKSAtICIpLmNvbmNhdChFKSk7ZWxzZXtjb25zb2xlLmxvZygiV2ViR0wgcmVuZGVyICgiLmNvbmNhdChyLm5hbWUsIikgLSBmcmFtZSB0aW1lICIpLmNvbmNhdCh3LCJtcyIpKSxjb25zb2xlLmxvZygiICAiLmNvbmNhdChFKSksY29uc29sZS5sb2coIlRleHR1cmUgQXRsYXNlcyBVc2VkOiIpO3ZhciBfPWEuZ2V0QXRsYXNEZWJ1Z0luZm8oKSxDPXZvKF8pLEQ7dHJ5e2ZvcihDLnMoKTshKEQ9Qy5uKCkpLmRvbmU7KXt2YXIgTz1ELnZhbHVlO2NvbnNvbGUubG9nKCIgICIuY29uY2F0KE8udHlwZSwiOiAiKS5jb25jYXQoTy5rZXlDb3VudCwiIGtleXMsICIpLmNvbmNhdChPLmF0bGFzQ291bnQsIiBhdGxhc2VzIikpfX1jYXRjaChSKXtDLmUoUil9ZmluYWxseXtDLmYoKX1jb25zb2xlLmxvZygiIil9fX1mdW5jdGlvbiBpZXQodCxlKXtmb3IodmFyIHI9YXRvYih0KSxuPW5ldyBBcnJheUJ1ZmZlcihyLmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuKSxhPTA7YTxyLmxlbmd0aDthKyspaVthXT1yLmNoYXJDb2RlQXQoYSk7cmV0dXJuIG5ldyBCbG9iKFtuXSx7dHlwZTplfSl9ZnVuY3Rpb24gbmdlKHQpe3ZhciBlPXQuaW5kZXhPZigiLCIpO3JldHVybiB0LnN1YnN0cihlKzEpfWZ1bmN0aW9uIFUxZSh0LGUscil7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBlLnRvRGF0YVVSTChyLHQucXVhbGl0eSl9LCJnZXRCNjRVcmkiKTtzd2l0Y2godC5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IHN5KGZ1bmN0aW9uKGksYSl7dHJ5e2UudG9CbG9iKGZ1bmN0aW9uKHMpe3MhPW51bGw/aShzKTphKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSxyLHQucXVhbGl0eSl9Y2F0Y2gocyl7YShzKX19KTtjYXNlImJsb2IiOnJldHVybiBpZXQobmdlKG4oKSkscik7Y2FzZSJiYXNlNjQiOnJldHVybiBuZ2UobigpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gbigpfX1mdW5jdGlvbiBXMWUodCl7dmFyIGU9dGhpcyxyPWUuY3kud2luZG93KCksbj1yLmRvY3VtZW50O3Qud2ViZ2wmJihTci5DQU5WQVNfTEFZRVJTPWUuQ0FOVkFTX0xBWUVSUz00LGNvbnNvbGUubG9nKCJ3ZWJnbCByZW5kZXJpbmcgZW5hYmxlZCIpKSxlLmRhdGE9e2NhbnZhc2VzOm5ldyBBcnJheShTci5DQU5WQVNfTEFZRVJTKSxjb250ZXh0czpuZXcgQXJyYXkoU3IuQ0FOVkFTX0xBWUVSUyksY2FudmFzTmVlZHNSZWRyYXc6bmV3IEFycmF5KFNyLkNBTlZBU19MQVlFUlMpLGJ1ZmZlckNhbnZhc2VzOm5ldyBBcnJheShTci5CVUZGRVJfQ09VTlQpLGJ1ZmZlckNvbnRleHRzOm5ldyBBcnJheShTci5DQU5WQVNfTEFZRVJTKX07dmFyIGk9Ii13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsYT0icmdiYSgwLDAsMCwwKSI7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lcj1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBzPWUuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVtpXT1hLHMucG9zaXRpb249InJlbGF0aXZlIixzLnpJbmRleD0iMCIscy5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgbD10LmN5LmNvbnRhaW5lcigpO2wuYXBwZW5kQ2hpbGQoZS5kYXRhLmNhbnZhc0NvbnRhaW5lciksbC5zdHlsZVtpXT1hO3ZhciB1PXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07a3FlKCkmJih1WyItbXMtdG91Y2gtYWN0aW9uIl09Im5vbmUiLHVbInRvdWNoLWFjdGlvbiJdPSJub25lIik7Zm9yKHZhciBoPTA7aDxTci5DQU5WQVNfTEFZRVJTO2grKyl7dmFyIGY9ZS5kYXRhLmNhbnZhc2VzW2hdPW4uY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZD1Tci5DQU5WQVNfVFlQRVNbaF07ZS5kYXRhLmNvbnRleHRzW2hdPWYuZ2V0Q29udGV4dChkKSxlLmRhdGEuY29udGV4dHNbaF18fG9pKCJDb3VsZCBub3QgY3JlYXRlIGNhbnZhcyBvZiB0eXBlICIrZCksT2JqZWN0LmtleXModSkuZm9yRWFjaChmdW5jdGlvbihRKXtmLnN0eWxlW1FdPXVbUV19KSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIraCksZi5zdHlsZS56SW5kZXg9U3RyaW5nKFNyLkNBTlZBU19MQVlFUlMtaCksZS5kYXRhLmNhbnZhc0NvbnRhaW5lci5hcHBlbmRDaGlsZChmKSxlLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbaF09ITF9ZS5kYXRhLnRvcENhbnZhcz1lLmRhdGEuY2FudmFzZXNbMF0sZS5kYXRhLmNhbnZhc2VzW1NyLk5PREVdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitTci5OT0RFKyItbm9kZSIpLGUuZGF0YS5jYW52YXNlc1tTci5TRUxFQ1RfQk9YXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIrU3IuU0VMRUNUX0JPWCsiLXNlbGVjdGJveCIpLGUuZGF0YS5jYW52YXNlc1tTci5EUkFHXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIrU3IuRFJBRysiLWRyYWciKSxlLmRhdGEuY2FudmFzZXNbU3IuV0VCR0xdJiZlLmRhdGEuY2FudmFzZXNbU3IuV0VCR0xdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitTci5XRUJHTCsiLXdlYmdsIik7Zm9yKHZhciBoPTA7aDxTci5CVUZGRVJfQ09VTlQ7aCsrKWUuZGF0YS5idWZmZXJDYW52YXNlc1toXT1uLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGUuZGF0YS5idWZmZXJDb250ZXh0c1toXT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uZ2V0Q29udGV4dCgiMmQiKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwiYnVmZmVyIitoKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUuekluZGV4PVN0cmluZygtaC0xKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjtlLnBhdGhzRW5hYmxlZD0hMDt2YXIgcD1ZcygpLG09byhmdW5jdGlvbihqKXtyZXR1cm57eDooai54MStqLngyKS8yLHk6KGoueTErai55MikvMn19LCJnZXRCb3hDZW50ZXIiKSxnPW8oZnVuY3Rpb24oail7cmV0dXJue3g6LWoudy8yLHk6LWouaC8yfX0sImdldENlbnRlck9mZnNldCIpLHk9byhmdW5jdGlvbihqKXt2YXIgbmU9alswXS5fcHJpdmF0ZSx0ZT1uZS5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPT09bmUuYmFja2dyb3VuZFRpbWVzdGFtcDtyZXR1cm4hdGV9LCJiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZCIpLHY9byhmdW5jdGlvbihqKXtyZXR1cm4galswXS5fcHJpdmF0ZS5ub2RlS2V5fSwiZ2V0U3R5bGVLZXkiKSx4PW8oZnVuY3Rpb24oail7cmV0dXJuIGpbMF0uX3ByaXZhdGUubGFiZWxTdHlsZUtleX0sImdldExhYmVsS2V5IiksYj1vKGZ1bmN0aW9uKGope3JldHVybiBqWzBdLl9wcml2YXRlLnNvdXJjZUxhYmVsU3R5bGVLZXl9LCJnZXRTb3VyY2VMYWJlbEtleSIpLFQ9byhmdW5jdGlvbihqKXtyZXR1cm4galswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSwiZ2V0VGFyZ2V0TGFiZWxLZXkiKSxTPW8oZnVuY3Rpb24oaixuZSx0ZSxoZSxsZSl7cmV0dXJuIGUuZHJhd0VsZW1lbnQoaixuZSx0ZSwhMSwhMSxsZSl9LCJkcmF3RWxlbWVudCIpLHc9byhmdW5jdGlvbihqLG5lLHRlLGhlLGxlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoaixuZSx0ZSxoZSwibWFpbiIsbGUpfSwiZHJhd0xhYmVsIiksRT1vKGZ1bmN0aW9uKGosbmUsdGUsaGUsbGUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChqLG5lLHRlLGhlLCJzb3VyY2UiLGxlKX0sImRyYXdTb3VyY2VMYWJlbCIpLF89byhmdW5jdGlvbihqLG5lLHRlLGhlLGxlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoaixuZSx0ZSxoZSwidGFyZ2V0IixsZSl9LCJkcmF3VGFyZ2V0TGFiZWwiKSxDPW8oZnVuY3Rpb24oail7cmV0dXJuIGouYm91bmRpbmdCb3goKSxqWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LCJnZXRFbGVtZW50Qm94IiksRD1vKGZ1bmN0aW9uKGope3JldHVybiBqLmJvdW5kaW5nQm94KCksalswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxwfSwiZ2V0TGFiZWxCb3giKSxPPW8oZnVuY3Rpb24oail7cmV0dXJuIGouYm91bmRpbmdCb3goKSxqWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnNvdXJjZXx8cH0sImdldFNvdXJjZUxhYmVsQm94IiksUj1vKGZ1bmN0aW9uKGope3JldHVybiBqLmJvdW5kaW5nQm94KCksalswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy50YXJnZXR8fHB9LCJnZXRUYXJnZXRMYWJlbEJveCIpLGs9byhmdW5jdGlvbihqLG5lKXtyZXR1cm4gbmV9LCJpc0xhYmVsVmlzaWJsZUF0U2NhbGUiKSxMPW8oZnVuY3Rpb24oail7cmV0dXJuIG0oQyhqKSl9LCJnZXRFbGVtZW50Um90YXRpb25Qb2ludCIpLEE9byhmdW5jdGlvbihqLG5lLHRlKXt2YXIgaGU9aj9qKyItIjoiIjtyZXR1cm57eDpuZS54K3RlLnBzdHlsZShoZSsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseTpuZS55K3RlLnBzdHlsZShoZSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWV9fSwiYWRkVGV4dE1hcmdpbiIpLEk9byhmdW5jdGlvbihqLG5lLHRlKXt2YXIgaGU9alswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDpoZVtuZV0seTpoZVt0ZV19fSwiZ2V0UnNQdCIpLE09byhmdW5jdGlvbihqKXtyZXR1cm4gQSgiIixJKGosImxhYmVsWCIsImxhYmVsWSIpLGopfSwiZ2V0TGFiZWxSb3RhdGlvblBvaW50IiksUD1vKGZ1bmN0aW9uKGope3JldHVybiBBKCJzb3VyY2UiLEkoaiwic291cmNlTGFiZWxYIiwic291cmNlTGFiZWxZIiksail9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uUG9pbnQiKSxCPW8oZnVuY3Rpb24oail7cmV0dXJuIEEoInRhcmdldCIsSShqLCJ0YXJnZXRMYWJlbFgiLCJ0YXJnZXRMYWJlbFkiKSxqKX0sImdldFRhcmdldExhYmVsUm90YXRpb25Qb2ludCIpLEY9byhmdW5jdGlvbihqKXtyZXR1cm4gZyhDKGopKX0sImdldEVsZW1lbnRSb3RhdGlvbk9mZnNldCIpLHo9byhmdW5jdGlvbihqKXtyZXR1cm4gZyhPKGopKX0sImdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQiKSwkPW8oZnVuY3Rpb24oail7cmV0dXJuIGcoUihqKSl9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0IiksVT1vKGZ1bmN0aW9uKGope3ZhciBuZT1EKGopLHRlPWcoRChqKSk7aWYoai5pc05vZGUoKSl7c3dpdGNoKGoucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlKXtjYXNlImxlZnQiOnRlLng9LW5lLnctKG5lLmxlZnRQYWR8fDApO2JyZWFrO2Nhc2UicmlnaHQiOnRlLng9LShuZS5yaWdodFBhZHx8MCk7YnJlYWt9c3dpdGNoKGoucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlKXtjYXNlInRvcCI6dGUueT0tbmUuaC0obmUudG9wUGFkfHwwKTticmVhaztjYXNlImJvdHRvbSI6dGUueT0tKG5lLmJvdFBhZHx8MCk7YnJlYWt9fXJldHVybiB0ZX0sImdldExhYmVsUm90YXRpb25PZmZzZXQiKSxLPWUuZGF0YS5lbGVUeHJDYWNoZT1uZXcgamIoZSx7Z2V0S2V5OnYsZG9lc0VsZUludmFsaWRhdGVLZXk6eSxkcmF3RWxlbWVudDpTLGdldEJvdW5kaW5nQm94OkMsZ2V0Um90YXRpb25Qb2ludDpMLGdldFJvdGF0aW9uT2Zmc2V0OkYsYWxsb3dFZGdlVHhyQ2FjaGluZzohMSxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITF9KSxlZT1lLmRhdGEubGJsVHhyQ2FjaGU9bmV3IGpiKGUse2dldEtleTp4LGRyYXdFbGVtZW50OncsZ2V0Qm91bmRpbmdCb3g6RCxnZXRSb3RhdGlvblBvaW50Ok0sZ2V0Um90YXRpb25PZmZzZXQ6VSxpc1Zpc2libGU6a30pLFk9ZS5kYXRhLnNsYlR4ckNhY2hlPW5ldyBqYihlLHtnZXRLZXk6YixkcmF3RWxlbWVudDpFLGdldEJvdW5kaW5nQm94Ok8sZ2V0Um90YXRpb25Qb2ludDpQLGdldFJvdGF0aW9uT2Zmc2V0OnosaXNWaXNpYmxlOmt9KSxjZT1lLmRhdGEudGxiVHhyQ2FjaGU9bmV3IGpiKGUse2dldEtleTpULGRyYXdFbGVtZW50Ol8sZ2V0Qm91bmRpbmdCb3g6UixnZXRSb3RhdGlvblBvaW50OkIsZ2V0Um90YXRpb25PZmZzZXQ6JCxpc1Zpc2libGU6a30pLFo9ZS5kYXRhLmx5clR4ckNhY2hlPW5ldyBSMWUoZSk7ZS5vblVwZGF0ZUVsZUNhbGNzKG8oZnVuY3Rpb24oaixuZSl7Sy5pbnZhbGlkYXRlRWxlbWVudHMobmUpLGVlLmludmFsaWRhdGVFbGVtZW50cyhuZSksWS5pbnZhbGlkYXRlRWxlbWVudHMobmUpLGNlLmludmFsaWRhdGVFbGVtZW50cyhuZSksWi5pbnZhbGlkYXRlRWxlbWVudHMobmUpO2Zvcih2YXIgdGU9MDt0ZTxuZS5sZW5ndGg7dGUrKyl7dmFyIGhlPW5lW3RlXS5fcHJpdmF0ZTtoZS5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPWhlLmJhY2tncm91bmRUaW1lc3RhbXB9fSwiaW52YWxpZGF0ZVRleHR1cmVDYWNoZXMiKSk7dmFyIHVlPW8oZnVuY3Rpb24oail7Zm9yKHZhciBuZT0wO25lPGoubGVuZ3RoO25lKyspWi5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQoaltuZV0uZWxlKX0sInJlZmluZUluTGF5ZXJzIik7Sy5vbkRlcXVldWUodWUpLGVlLm9uRGVxdWV1ZSh1ZSksWS5vbkRlcXVldWUodWUpLGNlLm9uRGVxdWV1ZSh1ZSksdC53ZWJnbCYmZS5pbml0V2ViZ2wodCx7Z2V0U3R5bGVLZXk6dixnZXRMYWJlbEtleTp4LGRyYXdFbGVtZW50OlMsZHJhd0xhYmVsOncsZ2V0RWxlbWVudEJveDpDLGdldExhYmVsQm94OkQsZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQ6TCxnZXRFbGVtZW50Um90YXRpb25PZmZzZXQ6RixnZXRMYWJlbFJvdGF0aW9uUG9pbnQ6TSxnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0OlV9KX1mdW5jdGlvbiBYMWUodCxlLHIpe3ZhciBuPXIsaT1vKGZ1bmN0aW9uKEMpe2huKCJDYW4gbm90IHJlZ2lzdGVyIGAiK2UrImAgZm9yIGAiK3QrImAgc2luY2UgYCIrQysiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX0sIm92ZXJyaWRlRXJyIik7aWYodD09PSJjb3JlIil7aWYodTQucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO3U0LnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJjb2xsZWN0aW9uIil7aWYoU2EucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO1NhLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJsYXlvdXQiKXtmb3IodmFyIGE9byhmdW5jdGlvbihDKXt0aGlzLm9wdGlvbnM9QyxyLmNhbGwodGhpcyxDKSxVcih0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9Qy5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sIkxheW91dCIpLHM9YS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksbD1bXSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBoPWxbdV07c1toXT1zW2hdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1zLnN0YXJ0JiYhcy5ydW4/cy5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFzLnN0YXJ0JiZzLnJ1biYmKHMuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIGY9ci5wcm90b3R5cGUuc3RvcDtzLnN0b3A9ZnVuY3Rpb24oKXt2YXIgXz10aGlzLm9wdGlvbnM7aWYoXyYmXy5hbmltYXRlKXt2YXIgQz10aGlzLmFuaW1hdGlvbnM7aWYoQylmb3IodmFyIEQ9MDtEPEMubGVuZ3RoO0QrKylDW0RdLnN0b3AoKX1yZXR1cm4gZj9mLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30scy5kZXN0cm95fHwocy5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBkPW8oZnVuY3Rpb24oQyl7cmV0dXJuIEMuX3ByaXZhdGUuY3l9LCJnZXRDeSIpLHA9e2FkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oQyxEKXtELmxheW91dD1DLEQuY3k9ZChDKSxELnRhcmdldD1DfSwiYWRkRXZlbnRGaWVsZHMiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oQyl7cmV0dXJuIGQoQyl9LCJwYXJlbnQiKX07aXIocyx7Y3JlYXRlRW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgYUMocCx0aGlzKSx0aGlzfSwiY3JlYXRlRW1pdHRlciIpLGVtaXR0ZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LCJlbWl0dGVyIiksb246byhmdW5jdGlvbihDLEQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihDLEQpLHRoaXN9LCJvbiIpLG9uZTpvKGZ1bmN0aW9uKEMsRCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShDLEQpLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oQyxEKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKEMsRCksdGhpc30sIm9uY2UiKSxyZW1vdmVMaXN0ZW5lcjpvKGZ1bmN0aW9uKEMsRCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKEMsRCksdGhpc30sInJlbW92ZUxpc3RlbmVyIikscmVtb3ZlQWxsTGlzdGVuZXJzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sInJlbW92ZUFsbExpc3RlbmVycyIpLGVtaXQ6byhmdW5jdGlvbihDLEQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KEMsRCksdGhpc30sImVtaXQiKX0pLHVuLmV2ZW50QWxpYXNlc09uKHMpLG49YX1lbHNlIGlmKHQ9PT0icmVuZGVyZXIiJiZlIT09Im51bGwiJiZlIT09ImJhc2UiKXt2YXIgbT1qMWUoInJlbmRlcmVyIiwiYmFzZSIpLGc9bS5wcm90b3R5cGUseT1yLHY9ci5wcm90b3R5cGUseD1vKGZ1bmN0aW9uKCl7bS5hcHBseSh0aGlzLGFyZ3VtZW50cykseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJSZW5kZXJlciIpLGI9eC5wcm90b3R5cGU7Zm9yKHZhciBUIGluIGcpe3ZhciBTPWdbVF0sdz12W1RdIT1udWxsO2lmKHcpcmV0dXJuIGkoVCk7YltUXT1TfWZvcih2YXIgRSBpbiB2KWJbRV09dltFXTtnLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKF8pe2JbX109YltfXXx8ZnVuY3Rpb24oKXtvaSgiUmVuZGVyZXIgZG9lcyBub3QgaW1wbGVtZW50IGByZW5kZXJlci4iK18rIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksbj14fWVsc2UgaWYodD09PSJfX3Byb3RvX18ifHx0PT09ImNvbnN0cnVjdG9yInx8dD09PSJwcm90b3R5cGUiKXJldHVybiBvaSh0KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gZmdlKHttYXA6cTFlLGtleXM6W3QsZV0sdmFsdWU6bn0pfWZ1bmN0aW9uIGoxZSh0LGUpe3JldHVybiBkZ2Uoe21hcDpxMWUsa2V5czpbdCxlXX0pfWZ1bmN0aW9uIHVldCh0LGUscixuLGkpe3JldHVybiBmZ2Uoe21hcDpZMWUsa2V5czpbdCxlLHIsbl0sdmFsdWU6aX0pfWZ1bmN0aW9uIGhldCh0LGUscixuKXtyZXR1cm4gZGdlKHttYXA6WTFlLGtleXM6W3QsZSxyLG5dfSl9dmFyIEhpLHowZSxwcWUsc2dlLG1xZSxncWUsaDQsWnQsbGksRW4sVXIseXFlLF90LHZxZSxGNix4byxmNCxvZ2UsQkIsbGdlLHhxZSxQZixicWUsVHFlLHdxZSxrcWUsZTQsRkIsSzYsY2dlLEcwZSxXaSxFcWUsU3FlLENxZSxBcWUsX3FlLERxZSx1Z2UsTHFlLGlyLFJxZSxOcWUsTXFlLElxZSxoZ2UsT3FlLGZnZSxkZ2UsS3AsV2IsRnFlLCRxZSx6cWUsR3FlLFE2LFZxZSxuQixVcWUsV3FlLHFxZSxYcWUsanFlLHR5LHBnZSxLcWUsUXFlLEZiLEpxZSxlWWUsdFllLG5ZZSxpWWUsYVllLFYwZSxtZ2UsbFllLGNZZSxkNCxVMGUsaFllLGZZZSxkWWUscFllLEgwZSxnWWUseVllLHZZZSxwNCxpQixnZ2UsYlllLCQ2LG5oLFgxLHlnZSxxYix2Z2UsdDQscjQsVFllLExmLG02LHdZZSxCZix4Z2Usa1llLFcwZSxFWWUsU1llLCRCLGJnZSx6NixxMGUsekIsb2ksVGdlLGhuLENZZSxRYyxBWWUsd2dlLF9ZZSxrZ2Usb2EsRmYsR0IsRFllLFdsLE5mLExZZSxaYyxSWWUsTlllLGF5LFo2LFkwZSxuNCxNWWUsbTQsSVllLE9ZZSxQWWUsQlllLEZZZSwkWWUselllLEdZZSxWWWUsVVllLEhZZSxhQixXWWUscVllLEo2LEVnZSxqMSxZWWUsWFllLGpZZSxLWWUsUVllLGc2LFZCLFNnZSxRcCxXcCxaWWUsc2EsUTEsSlllLGk0LFlzLGVYZSx0WGUsclhlLENnZSxuWGUsRDYsTDYsWDBlLFVCLHJ5LGlYZSxBZ2UsX2dlLGFYZSxzWGUsb1hlLGxYZSxjWGUsdVhlLHFzLGloLGhYZSxHNixWNixmWGUsanAsWWIsc0IsTWYsYTQsZFhlLHk2LFRzLERnZSxiQixacCxMZ2UsSEIscFhlLFRCLG1YZSxnWGUsajBlLFoxLEswZSxKMSx5WGUsd0IsdlhlLHhYZSxiWGUsVFhlLFJnZSx3WGUsa1hlLEVYZSxTWGUsQ1hlLEFYZSxfWGUsUTBlLERYZSxMWGUsTmdlLFowZSxKMGUsUlhlLE5YZSwkYixueSxNWGUsV0IsVTYsb0IsTWdlLElnZSxJWGUsT1hlLFBYZSxlbWUsdG1lLEJYZSxGWGUsJFhlLHpYZSxHWGUscm1lLFZYZSxVWGUsSFhlLFdYZSxubWUsdjYscVhlLFlYZSxpbWUsWFhlLGpYZSxLWGUsUVhlLFpYZSxKWGUsYW1lLGVqZSxzbWUsdGplLHJqZSxuamUseDYsaWplLGI2LGFqZSxPZ2UsUGdlLEJnZSxGZ2UsYWgsb21lLCRnZSxsbWUsY21lLHNqZSxzeSxrQixKcCxvamUsbGplLHRDLGNqZSx1amUsZmplLGRqZSxwamUsbWplLGdqZSx2amUseGplLGxCLHVtZSxUamUsd2plLGtqZSxTamUsQ2plLEFqZSxfamUsRGplLExqZSxSamUsTmplLElqZSxQamUscUIsRmplLHM0LHpqZSxWamUsVWplLEhqZSxXamUsWWplLFhqZSxqamUsUWplLFpqZSxlS2UsaG1lLHJLZSx6Z2UsckMsYUtlLHNLZSxsS2UsdUtlLGZLZSxwS2UsbUtlLGdLZSx5S2UseEtlLFRLZSxuQyxFS2UsQ0tlLF9LZSxMS2UsR2dlLFJLZSxOS2UsTUtlLE9LZSxQS2UsQktlLEZLZSxWZ2UsVWdlLHpLZSxmbWUsZG1lLEdLZSxXZ2UscWdlLEhLZSxYQixZS2UsaktlLEtLZSxwbWUsWktlLEpLZSxlUWUsclFlLG5RZSxpUWUsc1FlLGxRZSx1UWUsZlFlLHBRZSxtUWUsZ1FlLHVuLHlRZSxSNixWcixnbiwkdCxFQix2UWUseFFlLGJRZSxVMSxSZixTQixUUWUsd1FlLGtRZSxFUWUsU1FlLFlnZSxDUWUsQVFlLGpCLF9RZSxwaSxWbixEUWUsTFFlLFJRZSwkZix6ZixJZixhbCxpeSxvNCxLZ2UsTVFlLGlDLHFsLFFnZSxaZ2UsbW1lLElRZSxleSxIZixpbCxIbCxxcCx6YixUNix1QixPUWUsUFFlLEpnZSxlMWUsZ21lLGw0LHltZSx2bWUsQlFlLFhiLGc0LHQxZSxGUWUsJFFlLHpRZSxHUWUsVlFlLFVRZSxIUWUsV1FlLHFRZSx4bWUsWVFlLFhRZSxqUWUscjFlLG4xZSxLUWUsaTFlLGJtZSxRUWUsR2YsYTFlLFRtZSxaUWUsSlFlLGs2LHMxZSxvMWUsUXIsZVplLGwxZSxINix0WmUsclplLE42LEVhLHV5LG5aZSxpWmUsYVplLHNaZSxPZixIYSxrbWUsRW1lLFNtZSxTYSxNbixvWmUsY1plLE5uLE02LGZaZSxkWmUsRTYsdTFlLENCLEk2LHBaZSxtWmUsQUIsTzYscWEsS2IsZ1plLHk0LFpCLEpjLGxDLEpCLGthLGNDLFVhLFdhLHlaZSx2WmUsZTAsYzQsdTQsVzYseFplLGJaZSxxMSxObWUsVFplLHdaZSxmQixrWmUsRVplLFNaZSxDWmUsQVplLF9aZSxwMWUsRFplLExaZSxSWmUsTW1lLE5aZSxNWmUscTYsSVplLE9aZSxQWmUsQlplLEZaZSwkWmUsSW1lLHpaZSxHWmUsVlplLFVaZSxIWmUsT21lLFBtZSx0RixyMCxZNixfQixEQixLYyxubCxCbWUsRm1lLFhwLFA2LHJoLFVwLFlwLGpjLFkxLFM2LHgxZSxiMWUsTEIsUkIsJG1lLHptZSxXWmUscVplLFlhLHY0LG5GLGV1LGsxZSxFMWUsWFplLFMxZSxHbWUsVm1lLGhDLGZDLEMxZSxBMWUsZnksc2gseDQsVW1lLGpaZSxfMWUsZHksZEIsRDFlLEtaZSxIbWUsQzYsQjYsTkIsTDFlLFFaZSxaWmUsSlplLGVKZSx0SmUsckplLG5KZSxpSmUsYUplLHNKZSxvSmUsbEplLGNKZSxLMSx1SmUsamIsWWksaEplLFFiLFg2LGZKZSxkSmUscEplLG1KZSxnSmUseUplLHZKZSx4SmUsV21lLGJKZSxxbWUsVEplLFIxZSxDYSxZbWUsd0plLE4xZSxYbWUsdHUsQUplLF9KZSxESmUsTEplLFJKZSxwQixvaCxNMWUsaUYsbjAscHksSTFlLHdzLE5KZSxVYixRbWUsSmIsSGIsVkplLFVKZSxXSmUseUIsWm1lLEptZSx2QixxSmUsWUplLCQxZSxXZix0Z2UscmdlLE1CLElCLFYxZSxIcCxiNCxIMWUsYWV0LFNyLHNldCxvZXQsY2V0LHExZSxZMWUsT0IsSzFlLHQwLGZldCxzbCxvRj1OKCgpPT57InVzZSBzdHJpY3QiO28ocWksIl90eXBlb2YiKTtvKFZmLCJfY2xhc3NDYWxsQ2hlY2siKTtvKCQwZSwiX2RlZmluZVByb3BlcnRpZXMiKTtvKFVmLCJfY3JlYXRlQ2xhc3MiKTtvKGlnZSwiX2RlZmluZVByb3BlcnR5JDEiKTtvKFJpLCJfc2xpY2VkVG9BcnJheSIpO28oYWdlLCJfdG9Db25zdW1hYmxlQXJyYXkiKTtvKGxxZSwiX2FycmF5V2l0aG91dEhvbGVzIik7byhjcWUsIl9hcnJheVdpdGhIb2xlcyIpO28odXFlLCJfaXRlcmFibGVUb0FycmF5Iik7byhocWUsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIpO28oUEIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIpO28oeEIsIl9hcnJheUxpa2VUb0FycmF5Iik7byhmcWUsIl9ub25JdGVyYWJsZVNwcmVhZCIpO28oZHFlLCJfbm9uSXRlcmFibGVSZXN0Iik7byh2bywiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiKTtIaT10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyx6MGU9SGk/SGkubmF2aWdhdG9yOm51bGw7SGkmJkhpLmRvY3VtZW50O3BxZT1xaSgiIiksc2dlPXFpKHt9KSxtcWU9cWkoZnVuY3Rpb24oKXt9KSxncWU9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjpxaShIVE1MRWxlbWVudCksaDQ9byhmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbnN0YW5jZVN0cmluZyYmbGkoZS5pbnN0YW5jZVN0cmluZyk/ZS5pbnN0YW5jZVN0cmluZygpOm51bGx9LCJpbnN0YW5jZVN0ciIpLFp0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnFpKGUpPT1wcWV9LCJzdHJpbmciKSxsaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZxaShlKT09PW1xZX0sImZuIiksRW49byhmdW5jdGlvbihlKXtyZXR1cm4heG8oZSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZSk6ZSE9bnVsbCYmZSBpbnN0YW5jZW9mIEFycmF5KX0sImFycmF5IiksVXI9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmcWkoZSk9PT1zZ2UmJiFFbihlKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sInBsYWluT2JqZWN0IikseXFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnFpKGUpPT09c2dlfSwib2JqZWN0IiksX3Q9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmcWkoZSk9PT1xaSgxKSYmIWlzTmFOKGUpfSwibnVtYmVyIiksdnFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUpJiZNYXRoLmZsb29yKGUpPT09ZX0sImludGVnZXIiKSxGNj1vKGZ1bmN0aW9uKGUpe2lmKGdxZSE9PSJ1bmRlZmluZWQiKXJldHVybiBlIT1udWxsJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LCJodG1sRWxlbWVudCIpLHhvPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGY0KGUpfHxvZ2UoZSl9LCJlbGVtZW50T3JDb2xsZWN0aW9uIiksZjQ9byhmdW5jdGlvbihlKXtyZXR1cm4gaDQoZSk9PT0iY29sbGVjdGlvbiImJmUuX3ByaXZhdGUuc2luZ2xlfSwiZWxlbWVudCIpLG9nZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBoNChlKT09PSJjb2xsZWN0aW9uIiYmIWUuX3ByaXZhdGUuc2luZ2xlfSwiY29sbGVjdGlvbiIpLEJCPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGg0KGUpPT09ImNvcmUifSwiY29yZSIpLGxnZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBoNChlKT09PSJzdHlsZXNoZWV0In0sInN0eWxlc2hlZXQiKSx4cWU9byhmdW5jdGlvbihlKXtyZXR1cm4gaDQoZSk9PT0iZXZlbnQifSwiZXZlbnQiKSxQZj1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyEwOiEhKGU9PT0iInx8ZS5tYXRjaCgvXlxzKyQvKSl9LCJlbXB0eVN0cmluZyIpLGJxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyExOmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sImRvbUVsZW1lbnQiKSxUcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gVXIoZSkmJl90KGUueDEpJiZfdChlLngyKSYmX3QoZS55MSkmJl90KGUueTIpfSwiYm91bmRpbmdCb3giKSx3cWU9byhmdW5jdGlvbihlKXtyZXR1cm4geXFlKGUpJiZsaShlLnRoZW4pfSwicHJvbWlzZSIpLGtxZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHowZSYmejBlLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LCJtcyIpLGU0PW8oZnVuY3Rpb24oZSxyKXtyfHwocj1vKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGFyZ3VtZW50c1swXTtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4idW5kZWZpbmVkIjtmb3IodmFyIGE9W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspYS5wdXNoKGFyZ3VtZW50c1tzXSk7cmV0dXJuIGEuam9pbigiJCIpfSwia2V5Rm4iKSk7dmFyIG49byhmdW5jdGlvbiBpKCl7dmFyIGE9dGhpcyxzPWFyZ3VtZW50cyxsLHU9ci5hcHBseShhLHMpLGg9aS5jYWNoZTtyZXR1cm4obD1oW3VdKXx8KGw9aFt1XT1lLmFwcGx5KGEscykpLGx9LCJtZW1vaXplZEZuIik7cmV0dXJuIG4uY2FjaGU9e30sbn0sIm1lbW9pemUiKSxGQj1lNChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oZSl7cmV0dXJuIi0iK2UudG9Mb3dlckNhc2UoKX0pfSksSzY9ZTQoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvKC1cdykvZyxmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS50b1VwcGVyQ2FzZSgpfSl9KSxjZ2U9ZTQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiQiK2V9KSxHMGU9byhmdW5jdGlvbihlKXtyZXR1cm4gUGYoZSk/ZTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfSwiY2FwaXRhbGl6ZSIpLFdpPSIoPzpbLStdPyg/Oig/OlxcZCt8XFxkKlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/KSkiLEVxZT0icmdiW2FdP1xcKCgiK1dpKyJbJV0/KVxccyosXFxzKigiK1dpKyJbJV0/KVxccyosXFxzKigiK1dpKyJbJV0/KSg/OlxccyosXFxzKigiK1dpKyIpKT9cXCkiLFNxZT0icmdiW2FdP1xcKCg/OiIrV2krIlslXT8pXFxzKixcXHMqKD86IitXaSsiWyVdPylcXHMqLFxccyooPzoiK1dpKyJbJV0/KSg/OlxccyosXFxzKig/OiIrV2krIikpP1xcKSIsQ3FlPSJoc2xbYV0/XFwoKCIrV2krIilcXHMqLFxccyooIitXaSsiWyVdKVxccyosXFxzKigiK1dpKyJbJV0pKD86XFxzKixcXHMqKCIrV2krIikpP1xcKSIsQXFlPSJoc2xbYV0/XFwoKD86IitXaSsiKVxccyosXFxzKig/OiIrV2krIlslXSlcXHMqLFxccyooPzoiK1dpKyJbJV0pKD86XFxzKixcXHMqKD86IitXaSsiKSk/XFwpIixfcWU9IlxcI1swLTlhLWZBLUZdezN9IixEcWU9IlxcI1swLTlhLWZBLUZdezZ9Iix1Z2U9byhmdW5jdGlvbihlLHIpe3JldHVybiBlPHI/LTE6ZT5yPzE6MH0sImFzY2VuZGluZyIpLExxZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuLTEqdWdlKGUscil9LCJkZXNjZW5kaW5nIiksaXI9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLHI9MTtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZihuIT1udWxsKWZvcih2YXIgaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07dFtzXT1uW3NdfX1yZXR1cm4gdH0sUnFlPW8oZnVuY3Rpb24oZSl7aWYoISghKGUubGVuZ3RoPT09NHx8ZS5sZW5ndGg9PT03KXx8ZVswXSE9PSIjIikpe3ZhciByPWUubGVuZ3RoPT09NCxuLGksYSxzPTE2O3JldHVybiByPyhuPXBhcnNlSW50KGVbMV0rZVsxXSxzKSxpPXBhcnNlSW50KGVbMl0rZVsyXSxzKSxhPXBhcnNlSW50KGVbM10rZVszXSxzKSk6KG49cGFyc2VJbnQoZVsxXStlWzJdLHMpLGk9cGFyc2VJbnQoZVszXStlWzRdLHMpLGE9cGFyc2VJbnQoZVs1XStlWzZdLHMpKSxbbixpLGFdfX0sImhleDJ0dXBsZSIpLE5xZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLHMsbCx1LGg7ZnVuY3Rpb24gZihnLHksdil7cmV0dXJuIHY8MCYmKHYrPTEpLHY+MSYmKHYtPTEpLHY8MS82P2crKHktZykqNip2OnY8MS8yP3k6djwyLzM/ZysoeS1nKSooMi8zLXYpKjY6Z31vKGYsImh1ZTJyZ2IiKTt2YXIgZD1uZXcgUmVnRXhwKCJeIitDcWUrIiQiKS5leGVjKGUpO2lmKGQpe2lmKG49cGFyc2VJbnQoZFsxXSksbjwwP249KDM2MC0gLTEqbiUzNjApJTM2MDpuPjM2MCYmKG49biUzNjApLG4vPTM2MCxpPXBhcnNlRmxvYXQoZFsyXSksaTwwfHxpPjEwMHx8KGk9aS8xMDAsYT1wYXJzZUZsb2F0KGRbM10pLGE8MHx8YT4xMDApfHwoYT1hLzEwMCxzPWRbNF0scyE9PXZvaWQgMCYmKHM9cGFyc2VGbG9hdChzKSxzPDB8fHM+MSkpKXJldHVybjtpZihpPT09MClsPXU9aD1NYXRoLnJvdW5kKGEqMjU1KTtlbHNle3ZhciBwPWE8LjU/YSooMStpKTphK2ktYSppLG09MiphLXA7bD1NYXRoLnJvdW5kKDI1NSpmKG0scCxuKzEvMykpLHU9TWF0aC5yb3VuZCgyNTUqZihtLHAsbikpLGg9TWF0aC5yb3VuZCgyNTUqZihtLHAsbi0xLzMpKX1yPVtsLHUsaCxzXX1yZXR1cm4gcn0sImhzbDJ0dXBsZSIpLE1xZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG49bmV3IFJlZ0V4cCgiXiIrRXFlKyIkIikuZXhlYyhlKTtpZihuKXtyPVtdO2Zvcih2YXIgaT1bXSxhPTE7YTw9MzthKyspe3ZhciBzPW5bYV07aWYoc1tzLmxlbmd0aC0xXT09PSIlIiYmKGlbYV09ITApLHM9cGFyc2VGbG9hdChzKSxpW2FdJiYocz1zLzEwMCoyNTUpLHM8MHx8cz4yNTUpcmV0dXJuO3IucHVzaChNYXRoLmZsb29yKHMpKX12YXIgbD1pWzFdfHxpWzJdfHxpWzNdLHU9aVsxXSYmaVsyXSYmaVszXTtpZihsJiYhdSlyZXR1cm47dmFyIGg9bls0XTtpZihoIT09dm9pZCAwKXtpZihoPXBhcnNlRmxvYXQoaCksaDwwfHxoPjEpcmV0dXJuO3IucHVzaChoKX19cmV0dXJuIHJ9LCJyZ2IydHVwbGUiKSxJcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gT3FlW2UudG9Mb3dlckNhc2UoKV19LCJjb2xvcm5hbWUydHVwbGUiKSxoZ2U9byhmdW5jdGlvbihlKXtyZXR1cm4oRW4oZSk/ZTpudWxsKXx8SXFlKGUpfHxScWUoZSl8fE1xZShlKXx8TnFlKGUpfSwiY29sb3IydHVwbGUiKSxPcWU9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LGZnZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2E8bi5sZW5ndGgtMT8ocltzXT09bnVsbCYmKHJbc109e30pLHI9cltzXSk6cltzXT1lLnZhbHVlfX0sInNldE1hcCIpLGRnZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBnZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2lmKHI9cltzXSxyPT1udWxsKXJldHVybiByfXJldHVybiByfSwiZ2V0TWFwIik7byhQcWUsImlzT2JqZWN0Iik7S3A9UHFlLFdiPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307byhCcWUsImNyZWF0ZUNvbW1vbmpzTW9kdWxlIik7RnFlPXR5cGVvZiBXYj09Im9iamVjdCImJldiJiZXYi5PYmplY3Q9PT1PYmplY3QmJldiLCRxZT1GcWUsenFlPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsR3FlPSRxZXx8enFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLFE2PUdxZSxWcWU9byhmdW5jdGlvbigpe3JldHVybiBRNi5EYXRlLm5vdygpfSwibm93IiksbkI9VnFlLFVxZT0vXHMvO28oSHFlLCJ0cmltbWVkRW5kSW5kZXgiKTtXcWU9SHFlLHFxZT0vXlxzKy87byhZcWUsImJhc2VUcmltIik7WHFlPVlxZSxqcWU9UTYuU3ltYm9sLHR5PWpxZSxwZ2U9T2JqZWN0LnByb3RvdHlwZSxLcWU9cGdlLmhhc093blByb3BlcnR5LFFxZT1wZ2UudG9TdHJpbmcsRmI9dHk/dHkudG9TdHJpbmdUYWc6dm9pZCAwO28oWnFlLCJnZXRSYXdUYWciKTtKcWU9WnFlLGVZZT1PYmplY3QucHJvdG90eXBlLHRZZT1lWWUudG9TdHJpbmc7byhyWWUsIm9iamVjdFRvU3RyaW5nIik7blllPXJZZSxpWWU9IltvYmplY3QgTnVsbF0iLGFZZT0iW29iamVjdCBVbmRlZmluZWRdIixWMGU9dHk/dHkudG9TdHJpbmdUYWc6dm9pZCAwO28oc1llLCJiYXNlR2V0VGFnIik7bWdlPXNZZTtvKG9ZZSwiaXNPYmplY3RMaWtlIik7bFllPW9ZZSxjWWU9IltvYmplY3QgU3ltYm9sXSI7byh1WWUsImlzU3ltYm9sIik7ZDQ9dVllLFUwZT1OYU4saFllPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGZZZT0vXjBiWzAxXSskL2ksZFllPS9eMG9bMC03XSskL2kscFllPXBhcnNlSW50O28obVllLCJ0b051bWJlciIpO0gwZT1tWWUsZ1llPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIix5WWU9TWF0aC5tYXgsdlllPU1hdGgubWluO28oeFllLCJkZWJvdW5jZSIpO3A0PXhZZSxpQj1IaT9IaS5wZXJmb3JtYW5jZTpudWxsLGdnZT1pQiYmaUIubm93P2Z1bmN0aW9uKCl7cmV0dXJuIGlCLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxiWWU9ZnVuY3Rpb24oKXtpZihIaSl7aWYoSGkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih0KXtIaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9O2lmKEhpLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24odCl7SGkubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTtpZihIaS53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe0hpLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07aWYoSGkubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe0hpLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfX1yZXR1cm4gZnVuY3Rpb24odCl7dCYmc2V0VGltZW91dChmdW5jdGlvbigpe3QoZ2dlKCkpfSwxZTMvNjApfX0oKSwkNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBiWWUoZSl9LCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKSxuaD1nZ2UsWDE9OTI2MSx5Z2U9NjU1OTkscWI9NTM4MSx2Z2U9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlgxLG49cixpO2k9ZS5uZXh0KCksIWkuZG9uZTspbj1uKnlnZStpLnZhbHVlfDA7cmV0dXJuIG59LCJoYXNoSXRlcmFibGVJbnRzIiksdDQ9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WDE7cmV0dXJuIHIqeWdlK2V8MH0sImhhc2hJbnQiKSxyND1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpxYjtyZXR1cm4ocjw8NSkrcitlfDB9LCJoYXNoSW50QWx0IiksVFllPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSoyMDk3MTUyK3J9LCJjb21iaW5lSGFzaGVzIiksTGY9byhmdW5jdGlvbihlKXtyZXR1cm4gZVswXSoyMDk3MTUyK2VbMV19LCJjb21iaW5lSGFzaGVzQXJyYXkiKSxtNj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuW3Q0KGVbMF0sclswXSkscjQoZVsxXSxyWzFdKV19LCJoYXNoQXJyYXlzIiksd1llPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj17dmFsdWU6MCxkb25lOiExfSxpPTAsYT1lLmxlbmd0aCxzPXtuZXh0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaTxhP24udmFsdWU9ZVtpKytdOm4uZG9uZT0hMCxufSwibmV4dCIpfTtyZXR1cm4gdmdlKHMscil9LCJoYXNoSW50c0FycmF5IiksQmY9byhmdW5jdGlvbihlLHIpe3ZhciBuPXt2YWx1ZTowLGRvbmU6ITF9LGk9MCxhPWUubGVuZ3RoLHM9e25leHQ6byhmdW5jdGlvbigpe3JldHVybiBpPGE/bi52YWx1ZT1lLmNoYXJDb2RlQXQoaSsrKTpuLmRvbmU9ITAsbn0sIm5leHQiKX07cmV0dXJuIHZnZShzLHIpfSwiaGFzaFN0cmluZyIpLHhnZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGtZZShhcmd1bWVudHMpfSwiaGFzaFN0cmluZ3MiKSxrWWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO249PT0wP3I9QmYoaSk6cj1CZihpLHIpfXJldHVybiByfSwiaGFzaFN0cmluZ3NBcnJheSIpLFcwZT0hMCxFWWU9Y29uc29sZS53YXJuIT1udWxsLFNZZT1jb25zb2xlLnRyYWNlIT1udWxsLCRCPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfHw5MDA3MTk5MjU0NzQwOTkxLGJnZT1vKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJ0cnVlaWZ5IiksejY9byhmdW5jdGlvbigpe3JldHVybiExfSwiZmFsc2lmeSIpLHEwZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJ6ZXJvaWZ5IiksekI9byhmdW5jdGlvbigpe30sIm5vb3AiKSxvaT1vKGZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sImVycm9yIiksVGdlPW8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMClXMGU9ISFlO2Vsc2UgcmV0dXJuIFcwZX0sIndhcm5pbmdzIiksaG49byhmdW5jdGlvbihlKXtUZ2UoKSYmKEVZZT9jb25zb2xlLndhcm4oZSk6KGNvbnNvbGUubG9nKGUpLFNZZSYmY29uc29sZS50cmFjZSgpKSl9LCJ3YXJuIiksQ1llPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGlyKHt9LGUpfSwiY2xvbmUiKSxRYz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP2U6RW4oZSk/ZS5zbGljZSgpOlVyKGUpP0NZZShlKTplfSwiY29weSIpLEFZZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9LCJjb3B5QXJyYXkiKSx3Z2U9byhmdW5jdGlvbihlLHIpe2ZvcihyPWU9IiI7ZSsrPDM2O3IrPWUqNTEmNTI/KGVeMTU/OF5NYXRoLnJhbmRvbSgpKihlXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiByfSwidXVpZCIpLF9ZZT17fSxrZ2U9byhmdW5jdGlvbigpe3JldHVybiBfWWV9LCJzdGF0aWNFbXB0eU9iamVjdCIpLG9hPW8oZnVuY3Rpb24oZSl7dmFyIHI9T2JqZWN0LmtleXMoZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sbD1uPy5bc107aVtzXT1sPT09dm9pZCAwP2Vbc106bH1yZXR1cm4gaX19LCJkZWZhdWx0cyIpLEZmPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1lLmxlbmd0aC0xO2k+PTAmJiEoZVtpXT09PXImJihlLnNwbGljZShpLDEpLG4pKTtpLS0pO30sInJlbW92ZUZyb21BcnJheSIpLEdCPW8oZnVuY3Rpb24oZSl7ZS5zcGxpY2UoMCxlLmxlbmd0aCl9LCJjbGVhckFycmF5IiksRFllPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtlLnB1c2goaSl9fSwicHVzaCIpLFdsPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBuJiYocj1jZ2UobixyKSksZVtyXX0sImdldFByZWZpeGVkUHJvcGVydHkiKSxOZj1vKGZ1bmN0aW9uKGUscixuLGkpe24mJihyPWNnZShuLHIpKSxlW3JdPWl9LCJzZXRQcmVmaXhlZFByb3BlcnR5IiksTFllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe1ZmKHRoaXMsdCksdGhpcy5fb2JqPXt9fXJldHVybiBvKHQsIk9iamVjdE1hcCIpLFVmKHQsW3trZXk6InNldCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9vYmpbcl09bix0aGlzfSwic2V0Iil9LHtrZXk6ImRlbGV0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdPXZvaWQgMCx0aGlzfSwiX2RlbGV0ZSIpfSx7a2V5OiJjbGVhciIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuX29iaj17fX0sImNsZWFyIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdIT09dm9pZCAwfSwiaGFzIil9LHtrZXk6ImdldCIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdfSwiZ2V0Iil9XSksdH0oKSxaYz10eXBlb2YgTWFwPCJ1Ij9NYXA6TFllLFJZZT0idW5kZWZpbmVkIixOWWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2lmKFZmKHRoaXMsdCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsZSE9bnVsbCl7dmFyIHI7ZS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmZS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP3I9ZS50b0FycmF5KCk6cj1lO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMuYWRkKHJbbl0pfX1yZXR1cm4gbyh0LCJPYmplY3RTZXQiKSxVZih0LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiJzZXQifSwiaW5zdGFuY2VTdHJpbmciKX0se2tleToiYWRkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdIT09MSYmKG5bcl09MSx0aGlzLnNpemUrKyl9LCJhZGQiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdPT09MSYmKG5bcl09MCx0aGlzLnNpemUtLSl9LCJfZGVsZXRlIil9LHtrZXk6ImNsZWFyIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9LCJjbGVhciIpfSx7a2V5OiJoYXMiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29ialtyXT09PTF9LCJoYXMiKX0se2tleToidG9BcnJheSIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX29iaikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiByLmhhcyhuKX0pfSwidG9BcnJheSIpfSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2gocixuKX0sImZvckVhY2giKX1dKSx0fSgpLGF5PSh0eXBlb2YgU2V0PiJ1Ij8idW5kZWZpbmVkIjpxaShTZXQpKSE9PVJZZT9TZXQ6TlllLFo2PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZT09PXZvaWQgMHx8cj09PXZvaWQgMHx8IUJCKGUpKXtvaSgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIGk9ci5ncm91cDtpZihpPT1udWxsJiYoci5kYXRhJiZyLmRhdGEuc291cmNlIT1udWxsJiZyLmRhdGEudGFyZ2V0IT1udWxsP2k9ImVkZ2VzIjppPSJub2RlcyIpLGkhPT0ibm9kZXMiJiZpIT09ImVkZ2VzIil7b2koIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitpKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBhPXRoaXMuX3ByaXZhdGU9e2N5OmUsc2luZ2xlOiEwLGRhdGE6ci5kYXRhfHx7fSxwb3NpdGlvbjpyLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6aSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhci5zZWxlY3RlZCxzZWxlY3RhYmxlOnIuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIXIuc2VsZWN0YWJsZSxsb2NrZWQ6ISFyLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTpyLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIXIuZ3JhYmJhYmxlLHBhbm5hYmxlOnIucGFubmFibGU9PT12b2lkIDA/aT09PSJlZGdlcyI6ISFyLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBheSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ci5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ci5wYXJlbnQmJnIucGFyZW50LmlzTm9kZSgpP3IucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKGEucG9zaXRpb24ueD09bnVsbCYmKGEucG9zaXRpb24ueD0wKSxhLnBvc2l0aW9uLnk9PW51bGwmJihhLnBvc2l0aW9uLnk9MCksci5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgcz1yLnJlbmRlcmVkUG9zaXRpb24sbD1lLnBhbigpLHU9ZS56b29tKCk7YS5wb3NpdGlvbj17eDoocy54LWwueCkvdSx5OihzLnktbC55KS91fX12YXIgaD1bXTtFbihyLmNsYXNzZXMpP2g9ci5jbGFzc2VzOlp0KHIuY2xhc3NlcykmJihoPXIuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgZj0wLGQ9aC5sZW5ndGg7ZjxkO2YrKyl7dmFyIHA9aFtmXTshcHx8cD09PSIifHxhLmNsYXNzZXMuYWRkKHApfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBtPXIuc3R5bGV8fHIuY3NzO20mJihobigiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUobSkpLChuPT09dm9pZCAwfHxuKSYmdGhpcy5yZXN0b3JlKCl9LCJFbGVtZW50IiksWTBlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9e2JmczplLmJmc3x8IWUuZGZzLGRmczplLmRmc3x8IWUuYmZzfSxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcztVcihuKSYmIXhvKG4pJiYocz1uLG49cy5yb290c3x8cy5yb290LGk9cy52aXNpdCxhPXMuZGlyZWN0ZWQpLGE9YXJndW1lbnRzLmxlbmd0aD09PTImJiFsaShpKT9pOmEsaT1saShpKT9pOmZ1bmN0aW9uKCl7fTtmb3IodmFyIGw9dGhpcy5fcHJpdmF0ZS5jeSx1PW49WnQobik/dGhpcy5maWx0ZXIobik6bixoPVtdLGY9W10sZD17fSxwPXt9LG09e30sZz0wLHksdj10aGlzLmJ5R3JvdXAoKSx4PXYubm9kZXMsYj12LmVkZ2VzLFQ9MDtUPHUubGVuZ3RoO1QrKyl7dmFyIFM9dVtUXSx3PVMuaWQoKTtTLmlzTm9kZSgpJiYoaC51bnNoaWZ0KFMpLGUuYmZzJiYobVt3XT0hMCxmLnB1c2goUykpLHBbd109MCl9Zm9yKHZhciBFPW8oZnVuY3Rpb24oKXt2YXIgTD1lLmJmcz9oLnNoaWZ0KCk6aC5wb3AoKSxBPUwuaWQoKTtpZihlLmRmcyl7aWYobVtBXSlyZXR1cm4iY29udGludWUiO21bQV09ITAsZi5wdXNoKEwpfXZhciBJPXBbQV0sTT1kW0FdLFA9TSE9bnVsbD9NLnNvdXJjZSgpOm51bGwsQj1NIT1udWxsP00udGFyZ2V0KCk6bnVsbCxGPU09PW51bGw/dm9pZCAwOkwuc2FtZShQKT9CWzBdOlBbMF0sej12b2lkIDA7aWYoej1pKEwsTSxGLGcrKyxJKSx6PT09ITApcmV0dXJuIHk9TCwiYnJlYWsiO2lmKHo9PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgJD1MLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKGNlKXtyZXR1cm4oIWF8fGNlLnNvdXJjZSgpLnNhbWUoTCkpJiZiLmhhcyhjZSl9KSxVPTA7VTwkLmxlbmd0aDtVKyspe3ZhciBLPSRbVV0sZWU9Sy5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbihjZSl7cmV0dXJuIWNlLnNhbWUoTCkmJnguaGFzKGNlKX0pLFk9ZWUuaWQoKTtlZS5sZW5ndGghPT0wJiYhbVtZXSYmKGVlPWVlWzBdLGgucHVzaChlZSksZS5iZnMmJihtW1ldPSEwLGYucHVzaChlZSkpLGRbWV09SyxwW1ldPXBbQV0rMSl9fSwiX2xvb3AiKTtoLmxlbmd0aCE9PTA7KXt2YXIgXz1FKCk7aWYoXyE9PSJjb250aW51ZSImJl89PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgQz1sLmNvbGxlY3Rpb24oKSxEPTA7RDxmLmxlbmd0aDtEKyspe3ZhciBPPWZbRF0sUj1kW08uaWQoKV07UiE9bnVsbCYmQy5wdXNoKFIpLEMucHVzaChPKX1yZXR1cm57cGF0aDpsLmNvbGxlY3Rpb24oQyksZm91bmQ6bC5jb2xsZWN0aW9uKHkpfX0sInNlYXJjaEZuIil9LCJkZWZpbmVTZWFyY2giKSxuND17YnJlYWR0aEZpcnN0U2VhcmNoOlkwZSh7YmZzOiEwfSksZGVwdGhGaXJzdFNlYXJjaDpZMGUoe2RmczohMH0pfTtuNC5iZnM9bjQuYnJlYWR0aEZpcnN0U2VhcmNoO240LmRmcz1uNC5kZXB0aEZpcnN0U2VhcmNoO01ZZT1CcWUoZnVuY3Rpb24odCxlKXsoZnVuY3Rpb24oKXt2YXIgcixuLGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHY7aT1NYXRoLmZsb29yLGQ9TWF0aC5taW4sbj1vKGZ1bmN0aW9uKHgsYil7cmV0dXJuIHg8Yj8tMTp4PmI/MTowfSwiZGVmYXVsdENtcCIpLGY9byhmdW5jdGlvbih4LGIsVCxTLHcpe3ZhciBFO2lmKFQ9PW51bGwmJihUPTApLHc9PW51bGwmJih3PW4pLFQ8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKFM9PW51bGwmJihTPXgubGVuZ3RoKTtUPFM7KUU9aSgoVCtTKS8yKSx3KGIseFtFXSk8MD9TPUU6VD1FKzE7cmV0dXJuW10uc3BsaWNlLmFwcGx5KHgsW1QsVC1UXS5jb25jYXQoYikpLGJ9LCJpbnNvcnQiKSxsPW8oZnVuY3Rpb24oeCxiLFQpe3JldHVybiBUPT1udWxsJiYoVD1uKSx4LnB1c2goYikseSh4LDAseC5sZW5ndGgtMSxUKX0sImhlYXBwdXNoIikscz1vKGZ1bmN0aW9uKHgsYil7dmFyIFQsUztyZXR1cm4gYj09bnVsbCYmKGI9biksVD14LnBvcCgpLHgubGVuZ3RoPyhTPXhbMF0seFswXT1ULHYoeCwwLGIpKTpTPVQsU30sImhlYXBwb3AiKSxoPW8oZnVuY3Rpb24oeCxiLFQpe3ZhciBTO3JldHVybiBUPT1udWxsJiYoVD1uKSxTPXhbMF0seFswXT1iLHYoeCwwLFQpLFN9LCJoZWFwcmVwbGFjZSIpLHU9byhmdW5jdGlvbih4LGIsVCl7dmFyIFM7cmV0dXJuIFQ9PW51bGwmJihUPW4pLHgubGVuZ3RoJiZUKHhbMF0sYik8MCYmKFM9W3hbMF0sYl0sYj1TWzBdLHhbMF09U1sxXSx2KHgsMCxUKSksYn0sImhlYXBwdXNocG9wIiksYT1vKGZ1bmN0aW9uKHgsYil7dmFyIFQsUyx3LEUsXyxDO2ZvcihiPT1udWxsJiYoYj1uKSxFPWZ1bmN0aW9uKCl7Qz1bXTtmb3IodmFyIEQ9MCxPPWkoeC5sZW5ndGgvMik7MDw9Tz9EPE86RD5POzA8PU8/RCsrOkQtLSlDLnB1c2goRCk7cmV0dXJuIEN9LmFwcGx5KHRoaXMpLnJldmVyc2UoKSxfPVtdLFM9MCx3PUUubGVuZ3RoO1M8dztTKyspVD1FW1NdLF8ucHVzaCh2KHgsVCxiKSk7cmV0dXJuIF99LCJoZWFwaWZ5IiksZz1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUztpZihUPT1udWxsJiYoVD1uKSxTPXguaW5kZXhPZihiKSxTIT09LTEpcmV0dXJuIHkoeCwwLFMsVCksdih4LFMsVCl9LCJ1cGRhdGVJdGVtIikscD1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUyx3LEUsXyxDO2lmKFQ9PW51bGwmJihUPW4pLHc9eC5zbGljZSgwLGIpLCF3Lmxlbmd0aClyZXR1cm4gdztmb3IoYSh3LFQpLEM9eC5zbGljZShiKSxFPTAsXz1DLmxlbmd0aDtFPF87RSsrKVM9Q1tFXSx1KHcsUyxUKTtyZXR1cm4gdy5zb3J0KFQpLnJldmVyc2UoKX0sIm5sYXJnZXN0IiksbT1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUyx3LEUsXyxDLEQsTyxSLGs7aWYoVD09bnVsbCYmKFQ9biksYioxMDw9eC5sZW5ndGgpe2lmKEU9eC5zbGljZSgwLGIpLnNvcnQoVCksIUUubGVuZ3RoKXJldHVybiBFO2Zvcih3PUVbRS5sZW5ndGgtMV0sTz14LnNsaWNlKGIpLF89MCxEPU8ubGVuZ3RoO188RDtfKyspUz1PW19dLFQoUyx3KTwwJiYoZihFLFMsMCxudWxsLFQpLEUucG9wKCksdz1FW0UubGVuZ3RoLTFdKTtyZXR1cm4gRX1mb3IoYSh4LFQpLGs9W10sQz0wLFI9ZChiLHgubGVuZ3RoKTswPD1SP0M8UjpDPlI7MDw9Uj8rK0M6LS1DKWsucHVzaChzKHgsVCkpO3JldHVybiBrfSwibnNtYWxsZXN0IikseT1vKGZ1bmN0aW9uKHgsYixULFMpe3ZhciB3LEUsXztmb3IoUz09bnVsbCYmKFM9biksdz14W1RdO1Q+Yjspe2lmKF89VC0xPj4xLEU9eFtfXSxTKHcsRSk8MCl7eFtUXT1FLFQ9Xztjb250aW51ZX1icmVha31yZXR1cm4geFtUXT13fSwiX3NpZnRkb3duIiksdj1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUyx3LEUsXyxDO2ZvcihUPT1udWxsJiYoVD1uKSx3PXgubGVuZ3RoLEM9YixFPXhbYl0sUz0yKmIrMTtTPHc7KV89UysxLF88dyYmIShUKHhbU10seFtfXSk8MCkmJihTPV8pLHhbYl09eFtTXSxiPVMsUz0yKmIrMTtyZXR1cm4geFtiXT1FLHkoeCxDLGIsVCl9LCJfc2lmdHVwIikscj1mdW5jdGlvbigpe3gucHVzaD1sLHgucG9wPXMseC5yZXBsYWNlPWgseC5wdXNocG9wPXUseC5oZWFwaWZ5PWEseC51cGRhdGVJdGVtPWcseC5ubGFyZ2VzdD1wLHgubnNtYWxsZXN0PW07ZnVuY3Rpb24geChiKXt0aGlzLmNtcD1iPz9uLHRoaXMubm9kZXM9W119cmV0dXJuIG8oeCwiSGVhcCIpLHgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYil7cmV0dXJuIGwodGhpcy5ub2RlcyxiLHRoaXMuY21wKX0seC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5ub2Rlcyx0aGlzLmNtcCl9LHgucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0seC5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubm9kZXMuaW5kZXhPZihiKSE9PS0xfSx4LnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKGIpe3JldHVybiBoKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLnB1c2hwb3A9ZnVuY3Rpb24oYil7cmV0dXJuIHUodGhpcy5ub2RlcyxiLHRoaXMuY21wKX0seC5wcm90b3R5cGUuaGVhcGlmeT1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMubm9kZXMsdGhpcy5jbXApfSx4LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKGIpe3JldHVybiBnKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LHgucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RoPT09MH0seC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aH0seC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gYj1uZXcgeCxiLm5vZGVzPXRoaXMubm9kZXMuc2xpY2UoMCksYn0seC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSx4LnByb3RvdHlwZS5pbnNlcnQ9eC5wcm90b3R5cGUucHVzaCx4LnByb3RvdHlwZS50b3A9eC5wcm90b3R5cGUucGVlayx4LnByb3RvdHlwZS5mcm9udD14LnByb3RvdHlwZS5wZWVrLHgucHJvdG90eXBlLmhhcz14LnByb3RvdHlwZS5jb250YWlucyx4LnByb3RvdHlwZS5jb3B5PXgucHJvdG90eXBlLmNsb25lLHh9KCksZnVuY3Rpb24oeCxiKXtyZXR1cm4gdC5leHBvcnRzPWIoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiByfSl9KS5jYWxsKFdiKX0pLG00PU1ZZSxJWWU9b2Eoe3Jvb3Q6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGRpcmVjdGVkOiExfSksT1llPXtkaWprc3RyYTpvKGZ1bmN0aW9uKGUpe2lmKCFVcihlKSl7dmFyIHI9YXJndW1lbnRzO2U9e3Jvb3Q6clswXSx3ZWlnaHQ6clsxXSxkaXJlY3RlZDpyWzJdfX12YXIgbj1JWWUoZSksaT1uLnJvb3QsYT1uLndlaWdodCxzPW4uZGlyZWN0ZWQsbD10aGlzLHU9YSxoPVp0KGkpP3RoaXMuZmlsdGVyKGkpWzBdOmlbMF0sZj17fSxkPXt9LHA9e30sbT10aGlzLmJ5R3JvdXAoKSxnPW0ubm9kZXMseT1tLmVkZ2VzO3kudW5tZXJnZUJ5KGZ1bmN0aW9uKEkpe3JldHVybiBJLmlzTG9vcCgpfSk7Zm9yKHZhciB2PW8oZnVuY3Rpb24oTSl7cmV0dXJuIGZbTS5pZCgpXX0sImdldERpc3QiKSx4PW8oZnVuY3Rpb24oTSxQKXtmW00uaWQoKV09UCxiLnVwZGF0ZUl0ZW0oTSl9LCJzZXREaXN0IiksYj1uZXcgbTQoZnVuY3Rpb24oSSxNKXtyZXR1cm4gdihJKS12KE0pfSksVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgUz1nW1RdO2ZbUy5pZCgpXT1TLnNhbWUoaCk/MDoxLzAsYi5wdXNoKFMpfWZvcih2YXIgdz1vKGZ1bmN0aW9uKE0sUCl7Zm9yKHZhciBCPShzP00uZWRnZXNUbyhQKTpNLmVkZ2VzV2l0aChQKSkuaW50ZXJzZWN0KHkpLEY9MS8wLHosJD0wOyQ8Qi5sZW5ndGg7JCsrKXt2YXIgVT1CWyRdLEs9dShVKTsoSzxGfHwheikmJihGPUssej1VKX1yZXR1cm57ZWRnZTp6LGRpc3Q6Rn19LCJkaXN0QmV0d2VlbiIpO2Iuc2l6ZSgpPjA7KXt2YXIgRT1iLnBvcCgpLF89dihFKSxDPUUuaWQoKTtpZihwW0NdPV8sXyE9PTEvMClmb3IodmFyIEQ9RS5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QoZyksTz0wO088RC5sZW5ndGg7TysrKXt2YXIgUj1EW09dLGs9Ui5pZCgpLEw9dyhFLFIpLEE9XytMLmRpc3Q7QTx2KFIpJiYoeChSLEEpLGRba109e25vZGU6RSxlZGdlOkwuZWRnZX0pfX1yZXR1cm57ZGlzdGFuY2VUbzpvKGZ1bmN0aW9uKE0pe3ZhciBQPVp0KE0pP2cuZmlsdGVyKE0pWzBdOk1bMF07cmV0dXJuIHBbUC5pZCgpXX0sImRpc3RhbmNlVG8iKSxwYXRoVG86byhmdW5jdGlvbihNKXt2YXIgUD1adChNKT9nLmZpbHRlcihNKVswXTpNWzBdLEI9W10sRj1QLHo9Ri5pZCgpO2lmKFAubGVuZ3RoPjApZm9yKEIudW5zaGlmdChQKTtkW3pdOyl7dmFyICQ9ZFt6XTtCLnVuc2hpZnQoJC5lZGdlKSxCLnVuc2hpZnQoJC5ub2RlKSxGPSQubm9kZSx6PUYuaWQoKX1yZXR1cm4gbC5zcGF3bihCKX0sInBhdGhUbyIpfX0sImRpamtzdHJhIil9LFBZZT17a3J1c2thbDpvKGZ1bmN0aW9uKGUpe2U9ZXx8ZnVuY3Rpb24oVCl7cmV0dXJuIDF9O2Zvcih2YXIgcj10aGlzLmJ5R3JvdXAoKSxuPXIubm9kZXMsaT1yLmVkZ2VzLGE9bi5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uLHU9byhmdW5jdGlvbihTKXtmb3IodmFyIHc9MDt3PHMubGVuZ3RoO3crKyl7dmFyIEU9c1t3XTtpZihFLmhhcyhTKSlyZXR1cm4gd319LCJmaW5kU2V0SW5kZXgiKSxoPTA7aDxhO2grKylzW2hdPXRoaXMuc3Bhd24obltoXSk7Zm9yKHZhciBmPWkuc29ydChmdW5jdGlvbihULFMpe3JldHVybiBlKFQpLWUoUyl9KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWZbZF0sbT1wLnNvdXJjZSgpWzBdLGc9cC50YXJnZXQoKVswXSx5PXUobSksdj11KGcpLHg9c1t5XSxiPXNbdl07eSE9PXYmJihsLm1lcmdlKHApLHgubWVyZ2UoYikscy5zcGxpY2UodiwxKSl9cmV0dXJuIGx9LCJrcnVza2FsIil9LEJZZT1vYSh7cm9vdDpudWxsLGdvYWw6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGhldXJpc3RpYzpvKGZ1bmN0aW9uKGUpe3JldHVybiAwfSwiaGV1cmlzdGljIiksZGlyZWN0ZWQ6ITF9KSxGWWU9e2FTdGFyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpLG49QlllKGUpLGk9bi5yb290LGE9bi5nb2FsLHM9bi5oZXVyaXN0aWMsbD1uLmRpcmVjdGVkLHU9bi53ZWlnaHQ7aT1yLmNvbGxlY3Rpb24oaSlbMF0sYT1yLmNvbGxlY3Rpb24oYSlbMF07dmFyIGg9aS5pZCgpLGY9YS5pZCgpLGQ9e30scD17fSxtPXt9LGc9bmV3IG00KGZ1bmN0aW9uKHosJCl7cmV0dXJuIHBbei5pZCgpXS1wWyQuaWQoKV19KSx5PW5ldyBheSx2PXt9LHg9e30sYj1vKGZ1bmN0aW9uKCQsVSl7Zy5wdXNoKCQpLHkuYWRkKFUpfSwiYWRkVG9PcGVuU2V0IiksVCxTLHc9byhmdW5jdGlvbigpe1Q9Zy5wb3AoKSxTPVQuaWQoKSx5LmRlbGV0ZShTKX0sInBvcEZyb21PcGVuU2V0IiksRT1vKGZ1bmN0aW9uKCQpe3JldHVybiB5LmhhcygkKX0sImlzSW5PcGVuU2V0Iik7YihpLGgpLGRbaF09MCxwW2hdPXMoaSk7Zm9yKHZhciBfPTA7Zy5zaXplKCk+MDspe2lmKHcoKSxfKyssUz09PWYpe2Zvcih2YXIgQz1bXSxEPWEsTz1mLFI9eFtPXTtDLnVuc2hpZnQoRCksUiE9bnVsbCYmQy51bnNoaWZ0KFIpLEQ9dltPXSxEIT1udWxsOylPPUQuaWQoKSxSPXhbT107cmV0dXJue2ZvdW5kOiEwLGRpc3RhbmNlOmRbU10scGF0aDp0aGlzLnNwYXduKEMpLHN0ZXBzOl99fW1bU109ITA7Zm9yKHZhciBrPVQuX3ByaXZhdGUuZWRnZXMsTD0wO0w8ay5sZW5ndGg7TCsrKXt2YXIgQT1rW0xdO2lmKHRoaXMuaGFzRWxlbWVudFdpdGhJZChBLmlkKCkpJiYhKGwmJkEuZGF0YSgic291cmNlIikhPT1TKSl7dmFyIEk9QS5zb3VyY2UoKSxNPUEudGFyZ2V0KCksUD1JLmlkKCkhPT1TP0k6TSxCPVAuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoQikmJiFtW0JdKXt2YXIgRj1kW1NdK3UoQSk7aWYoIUUoQikpe2RbQl09RixwW0JdPUYrcyhQKSxiKFAsQiksdltCXT1ULHhbQl09QTtjb250aW51ZX1GPGRbQl0mJihkW0JdPUYscFtCXT1GK3MoUCksdltCXT1ULHhbQl09QSl9fX19cmV0dXJue2ZvdW5kOiExLGRpc3RhbmNlOnZvaWQgMCxwYXRoOnZvaWQgMCxzdGVwczpffX0sImFTdGFyIil9LCRZZT1vYSh7d2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMX0pLHpZZT17ZmxveWRXYXJzaGFsbDpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj0kWWUoZSksaT1uLndlaWdodCxhPW4uZGlyZWN0ZWQscz1pLGw9dGhpcy5ieUdyb3VwKCksdT1sLm5vZGVzLGg9bC5lZGdlcyxmPXUubGVuZ3RoLGQ9ZipmLHA9byhmdW5jdGlvbihLKXtyZXR1cm4gdS5pbmRleE9mKEspfSwiaW5kZXhPZiIpLG09byhmdW5jdGlvbihLKXtyZXR1cm4gdVtLXX0sImF0SW5kZXgiKSxnPW5ldyBBcnJheShkKSx5PTA7eTxkO3krKyl7dmFyIHY9eSVmLHg9KHktdikvZjt4PT09dj9nW3ldPTA6Z1t5XT0xLzB9Zm9yKHZhciBiPW5ldyBBcnJheShkKSxUPW5ldyBBcnJheShkKSxTPTA7UzxoLmxlbmd0aDtTKyspe3ZhciB3PWhbU10sRT13LnNvdXJjZSgpWzBdLF89dy50YXJnZXQoKVswXTtpZihFIT09Xyl7dmFyIEM9cChFKSxEPXAoXyksTz1DKmYrRCxSPXModyk7aWYoZ1tPXT5SJiYoZ1tPXT1SLGJbT109RCxUW09dPXcpLCFhKXt2YXIgaz1EKmYrQzshYSYmZ1trXT5SJiYoZ1trXT1SLGJba109QyxUW2tdPXcpfX19Zm9yKHZhciBMPTA7TDxmO0wrKylmb3IodmFyIEE9MDtBPGY7QSsrKWZvcih2YXIgST1BKmYrTCxNPTA7TTxmO00rKyl7dmFyIFA9QSpmK00sQj1MKmYrTTtnW0ldK2dbQl08Z1tQXSYmKGdbUF09Z1tJXStnW0JdLGJbUF09YltJXSl9dmFyIEY9byhmdW5jdGlvbihLKXtyZXR1cm4oWnQoSyk/ci5maWx0ZXIoSyk6SylbMF19LCJnZXRBcmdFbGUiKSx6PW8oZnVuY3Rpb24oSyl7cmV0dXJuIHAoRihLKSl9LCJpbmRleE9mQXJnRWxlIiksJD17ZGlzdGFuY2U6byhmdW5jdGlvbihLLGVlKXt2YXIgWT16KEspLGNlPXooZWUpO3JldHVybiBnW1kqZitjZV19LCJkaXN0YW5jZSIpLHBhdGg6byhmdW5jdGlvbihLLGVlKXt2YXIgWT16KEspLGNlPXooZWUpLFo9bShZKTtpZihZPT09Y2UpcmV0dXJuIFouY29sbGVjdGlvbigpO2lmKGJbWSpmK2NlXT09bnVsbClyZXR1cm4gci5jb2xsZWN0aW9uKCk7dmFyIHVlPXIuY29sbGVjdGlvbigpLFE9WSxqO2Zvcih1ZS5tZXJnZShaKTtZIT09Y2U7KVE9WSxZPWJbWSpmK2NlXSxqPVRbUSpmK1ldLHVlLm1lcmdlKGopLHVlLm1lcmdlKG0oWSkpO3JldHVybiB1ZX0sInBhdGgiKX07cmV0dXJuICR9LCJmbG95ZFdhcnNoYWxsIil9LEdZZT1vYSh7d2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMSxyb290Om51bGx9KSxWWWU9e2JlbGxtYW5Gb3JkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPUdZZShlKSxpPW4ud2VpZ2h0LGE9bi5kaXJlY3RlZCxzPW4ucm9vdCxsPWksdT10aGlzLGg9dGhpcy5jeSgpLGY9dGhpcy5ieUdyb3VwKCksZD1mLmVkZ2VzLHA9Zi5ub2RlcyxtPXAubGVuZ3RoLGc9bmV3IFpjLHk9ITEsdj1bXTtzPWguY29sbGVjdGlvbihzKVswXSxkLnVubWVyZ2VCeShmdW5jdGlvbihzZSl7cmV0dXJuIHNlLmlzTG9vcCgpfSk7Zm9yKHZhciB4PWQubGVuZ3RoLGI9byhmdW5jdGlvbihhZSl7dmFyIE9lPWcuZ2V0KGFlLmlkKCkpO3JldHVybiBPZXx8KE9lPXt9LGcuc2V0KGFlLmlkKCksT2UpKSxPZX0sImdldEluZm8iKSxUPW8oZnVuY3Rpb24oYWUpe3JldHVybihadChhZSk/aC4kKGFlKTphZSlbMF19LCJnZXROb2RlRnJvbVRvIiksUz1vKGZ1bmN0aW9uKGFlKXtyZXR1cm4gYihUKGFlKSkuZGlzdH0sImRpc3RhbmNlVG8iKSx3PW8oZnVuY3Rpb24oYWUpe2Zvcih2YXIgT2U9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnMseWU9VChhZSksQmU9W10sSGU9eWU7Oyl7aWYoSGU9PW51bGwpcmV0dXJuIHIuc3Bhd24oKTt2YXIgemU9YihIZSksTGU9emUuZWRnZSxJZT16ZS5wcmVkO2lmKEJlLnVuc2hpZnQoSGVbMF0pLEhlLnNhbWUoT2UpJiZCZS5sZW5ndGg+MClicmVhaztMZSE9bnVsbCYmQmUudW5zaGlmdChMZSksSGU9SWV9cmV0dXJuIHUuc3Bhd24oQmUpfSwicGF0aFRvIiksRT0wO0U8bTtFKyspe3ZhciBfPXBbRV0sQz1iKF8pO18uc2FtZShzKT9DLmRpc3Q9MDpDLmRpc3Q9MS8wLEMucHJlZD1udWxsLEMuZWRnZT1udWxsfWZvcih2YXIgRD0hMSxPPW8oZnVuY3Rpb24oYWUsT2UseWUsQmUsSGUsemUpe3ZhciBMZT1CZS5kaXN0K3plO0xlPEhlLmRpc3QmJiF5ZS5zYW1lKEJlLmVkZ2UpJiYoSGUuZGlzdD1MZSxIZS5wcmVkPWFlLEhlLmVkZ2U9eWUsRD0hMCl9LCJjaGVja0ZvckVkZ2VSZXBsYWNlbWVudCIpLFI9MTtSPG07UisrKXtEPSExO2Zvcih2YXIgaz0wO2s8eDtrKyspe3ZhciBMPWRba10sQT1MLnNvdXJjZSgpLEk9TC50YXJnZXQoKSxNPWwoTCksUD1iKEEpLEI9YihJKTtPKEEsSSxMLFAsQixNKSxhfHxPKEksQSxMLEIsUCxNKX1pZighRClicmVha31pZihEKWZvcih2YXIgRj1bXSx6PTA7ejx4O3orKyl7dmFyICQ9ZFt6XSxVPSQuc291cmNlKCksSz0kLnRhcmdldCgpLGVlPWwoJCksWT1iKFUpLmRpc3QsY2U9YihLKS5kaXN0O2lmKFkrZWU8Y2V8fCFhJiZjZStlZTxZKWlmKHl8fChobigiR3JhcGggY29udGFpbnMgYSBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGUgZm9yIEJlbGxtYW4tRm9yZCIpLHk9ITApLGUuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzIT09ITEpe3ZhciBaPVtdO1krZWU8Y2UmJloucHVzaChVKSwhYSYmY2UrZWU8WSYmWi5wdXNoKEspO2Zvcih2YXIgdWU9Wi5sZW5ndGgsUT0wO1E8dWU7USsrKXt2YXIgaj1aW1FdLG5lPVtqXTtuZS5wdXNoKGIoaikuZWRnZSk7Zm9yKHZhciB0ZT1iKGopLnByZWQ7bmUuaW5kZXhPZih0ZSk9PT0tMTspbmUucHVzaCh0ZSksbmUucHVzaChiKHRlKS5lZGdlKSx0ZT1iKHRlKS5wcmVkO25lPW5lLnNsaWNlKG5lLmluZGV4T2YodGUpKTtmb3IodmFyIGhlPW5lWzBdLmlkKCksbGU9MCxKPTI7SjxuZS5sZW5ndGg7Sis9MiluZVtKXS5pZCgpPGhlJiYoaGU9bmVbSl0uaWQoKSxsZT1KKTtuZT1uZS5zbGljZShsZSkuY29uY2F0KG5lLnNsaWNlKDAsbGUpKSxuZS5wdXNoKG5lWzBdKTt2YXIgU2U9bmUubWFwKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuaWQoKX0pLmpvaW4oIiwiKTtGLmluZGV4T2YoU2UpPT09LTEmJih2LnB1c2godS5zcGF3bihuZSkpLEYucHVzaChTZSkpfX1lbHNlIGJyZWFrfXJldHVybntkaXN0YW5jZVRvOlMscGF0aFRvOncsaGFzTmVnYXRpdmVXZWlnaHRDeWNsZTp5LG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOnZ9fSwiYmVsbG1hbkZvcmQiKX0sVVllPU1hdGguc3FydCgyKSxIWWU9byhmdW5jdGlvbihlLHIsbil7bi5sZW5ndGg9PT0wJiZvaSgiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGgiKTtmb3IodmFyIGk9bltlXSxhPWlbMV0scz1pWzJdLGw9clthXSx1PXJbc10saD1uLGY9aC5sZW5ndGgtMTtmPj0wO2YtLSl7dmFyIGQ9aFtmXSxwPWRbMV0sbT1kWzJdOyhyW3BdPT09bCYmclttXT09PXV8fHJbcF09PT11JiZyW21dPT09bCkmJmguc3BsaWNlKGYsMSl9Zm9yKHZhciBnPTA7ZzxoLmxlbmd0aDtnKyspe3ZhciB5PWhbZ107eVsxXT09PXU/KGhbZ109eS5zbGljZSgpLGhbZ11bMV09bCk6eVsyXT09PXUmJihoW2ddPXkuc2xpY2UoKSxoW2ddWzJdPWwpfWZvcih2YXIgdj0wO3Y8ci5sZW5ndGg7disrKXJbdl09PT11JiYoclt2XT1sKTtyZXR1cm4gaH0sImNvbGxhcHNlIiksYUI9byhmdW5jdGlvbihlLHIsbixpKXtmb3IoO24+aTspe3ZhciBhPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpyLmxlbmd0aCk7cj1IWWUoYSxlLHIpLG4tLX1yZXR1cm4gcn0sImNvbnRyYWN0VW50aWwiKSxXWWU9e2thcmdlclN0ZWluOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9dGhpcy5ieUdyb3VwKCksbj1yLm5vZGVzLGk9ci5lZGdlcztpLnVubWVyZ2VCeShmdW5jdGlvbihCKXtyZXR1cm4gQi5pc0xvb3AoKX0pO3ZhciBhPW4ubGVuZ3RoLHM9aS5sZW5ndGgsbD1NYXRoLmNlaWwoTWF0aC5wb3coTWF0aC5sb2coYSkvTWF0aC5MTjIsMikpLHU9TWF0aC5mbG9vcihhL1VZZSk7aWYoYTwyKXtvaSgiQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG0iKTtyZXR1cm59Zm9yKHZhciBoPVtdLGY9MDtmPHM7ZisrKXt2YXIgZD1pW2ZdO2gucHVzaChbZixuLmluZGV4T2YoZC5zb3VyY2UoKSksbi5pbmRleE9mKGQudGFyZ2V0KCkpXSl9Zm9yKHZhciBwPTEvMCxtPVtdLGc9bmV3IEFycmF5KGEpLHk9bmV3IEFycmF5KGEpLHY9bmV3IEFycmF5KGEpLHg9byhmdW5jdGlvbihGLHope2Zvcih2YXIgJD0wOyQ8YTskKyspelskXT1GWyRdfSwiY29weU5vZGVzTWFwIiksYj0wO2I8PWw7YisrKXtmb3IodmFyIFQ9MDtUPGE7VCsrKXlbVF09VDt2YXIgUz1hQih5LGguc2xpY2UoKSxhLHUpLHc9Uy5zbGljZSgpO3goeSx2KTt2YXIgRT1hQih5LFMsdSwyKSxfPWFCKHYsdyx1LDIpO0UubGVuZ3RoPD1fLmxlbmd0aCYmRS5sZW5ndGg8cD8ocD1FLmxlbmd0aCxtPUUseCh5LGcpKTpfLmxlbmd0aDw9RS5sZW5ndGgmJl8ubGVuZ3RoPHAmJihwPV8ubGVuZ3RoLG09Xyx4KHYsZykpfWZvcih2YXIgQz10aGlzLnNwYXduKG0ubWFwKGZ1bmN0aW9uKEIpe3JldHVybiBpW0JbMF1dfSkpLEQ9dGhpcy5zcGF3bigpLE89dGhpcy5zcGF3bigpLFI9Z1swXSxrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBMPWdba10sQT1uW2tdO0w9PT1SP0QubWVyZ2UoQSk6Ty5tZXJnZShBKX12YXIgST1vKGZ1bmN0aW9uKEYpe3ZhciB6PWUuc3Bhd24oKTtyZXR1cm4gRi5mb3JFYWNoKGZ1bmN0aW9uKCQpe3oubWVyZ2UoJCksJC5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oVSl7ZS5jb250YWlucyhVKSYmIUMuY29udGFpbnMoVSkmJnoubWVyZ2UoVSl9KX0pLHp9LCJjb25zdHJ1Y3RDb21wb25lbnQiKSxNPVtJKEQpLEkoTyldLFA9e2N1dDpDLGNvbXBvbmVudHM6TSxwYXJ0aXRpb24xOkQscGFydGl0aW9uMjpPfTtyZXR1cm4gUH0sImthcmdlclN0ZWluIil9LHFZZT1vKGZ1bmN0aW9uKGUpe3JldHVybnt4OmUueCx5OmUueX19LCJjb3B5UG9zaXRpb24iKSxKNj1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDplLngqcituLngseTplLnkqcituLnl9fSwibW9kZWxUb1JlbmRlcmVkUG9zaXRpb24iKSxFZ2U9byhmdW5jdGlvbihlLHIsbil7cmV0dXJue3g6KGUueC1uLngpL3IseTooZS55LW4ueSkvcn19LCJyZW5kZXJlZFRvTW9kZWxQb3NpdGlvbiIpLGoxPW8oZnVuY3Rpb24oZSl7cmV0dXJue3g6ZVswXSx5OmVbMV19fSwiYXJyYXkycG9pbnQiKSxZWWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT0xLzAsYT1yO2E8bjthKyspe3ZhciBzPWVbYV07aXNGaW5pdGUocykmJihpPU1hdGgubWluKHMsaSkpfXJldHVybiBpfSwibWluIiksWFllPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmUubGVuZ3RoLGk9LTEvMCxhPXI7YTxuO2ErKyl7dmFyIHM9ZVthXTtpc0Zpbml0ZShzKSYmKGk9TWF0aC5tYXgocyxpKSl9cmV0dXJuIGl9LCJtYXgiKSxqWWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT0wLGE9MCxzPXI7czxuO3MrKyl7dmFyIGw9ZVtzXTtpc0Zpbml0ZShsKSYmKGkrPWwsYSsrKX1yZXR1cm4gaS9hfSwibWVhbiIpLEtZZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmUubGVuZ3RoLGk9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLHM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwO2k/ZT1lLnNsaWNlKHIsbik6KG48ZS5sZW5ndGgmJmUuc3BsaWNlKG4sZS5sZW5ndGgtbikscj4wJiZlLnNwbGljZSgwLHIpKTtmb3IodmFyIGw9MCx1PWUubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBoPWVbdV07cz9pc0Zpbml0ZShoKXx8KGVbdV09LTEvMCxsKyspOmUuc3BsaWNlKHUsMSl9YSYmZS5zb3J0KGZ1bmN0aW9uKHAsbSl7cmV0dXJuIHAtbX0pO3ZhciBmPWUubGVuZ3RoLGQ9TWF0aC5mbG9vcihmLzIpO3JldHVybiBmJTIhPT0wP2VbZCsxK2xdOihlW2QtMStsXStlW2QrbF0pLzJ9LCJtZWRpYW4iKSxRWWU9byhmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5QSSplLzE4MH0sImRlZzJyYWQiKSxnNj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYXRhbjIocixlKS1NYXRoLlBJLzJ9LCJnZXRBbmdsZUZyb21EaXNwIiksVkI9TWF0aC5sb2cyfHxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5sb2coMil9LFNnZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPjA/MTplPDA/LTE6MH0sInNpZ251bSIpLFFwPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KFdwKGUscikpfSwiZGlzdCIpLFdwPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1yLngtZS54LGk9ci55LWUueTtyZXR1cm4gbipuK2kqaX0sInNxZGlzdCIpLFpZZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspbis9ZVtpXTtmb3IodmFyIGE9MDthPHI7YSsrKWVbYV09ZVthXS9uO3JldHVybiBlfSwiaW5QbGFjZVN1bU5vcm1hbGl6ZSIpLHNhPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuKDEtaSkqKDEtaSkqZSsyKigxLWkpKmkqcitpKmkqbn0sInFiZXppZXJBdCIpLFExPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJue3g6c2EoZS54LHIueCxuLngsaSkseTpzYShlLnksci55LG4ueSxpKX19LCJxYmV6aWVyUHRBdCIpLEpZZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXt4OnIueC1lLngseTpyLnktZS55fSxzPVFwKGUsciksbD17eDphLngvcyx5OmEueS9zfTtyZXR1cm4gbj1uPz8wLGk9aT8/bipzLHt4OmUueCtsLngqaSx5OmUueStsLnkqaX19LCJsaW5lQXQiKSxpND1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihuLHIpKX0sImJvdW5kIiksWXM9byhmdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihlLngxIT1udWxsJiZlLnkxIT1udWxsKXtpZihlLngyIT1udWxsJiZlLnkyIT1udWxsJiZlLngyPj1lLngxJiZlLnkyPj1lLnkxKXJldHVybnt4MTplLngxLHkxOmUueTEseDI6ZS54Mix5MjplLnkyLHc6ZS54Mi1lLngxLGg6ZS55Mi1lLnkxfTtpZihlLnchPW51bGwmJmUuaCE9bnVsbCYmZS53Pj0wJiZlLmg+PTApcmV0dXJue3gxOmUueDEseTE6ZS55MSx4MjplLngxK2Uudyx5MjplLnkxK2UuaCx3OmUudyxoOmUuaH19fSwibWFrZUJvdW5kaW5nQm94IiksZVhlPW8oZnVuY3Rpb24oZSl7cmV0dXJue3gxOmUueDEseDI6ZS54Mix3OmUudyx5MTplLnkxLHkyOmUueTIsaDplLmh9fSwiY29weUJvdW5kaW5nQm94IiksdFhlPW8oZnVuY3Rpb24oZSl7ZS54MT0xLzAsZS55MT0xLzAsZS54Mj0tMS8wLGUueTI9LTEvMCxlLnc9MCxlLmg9MH0sImNsZWFyQm91bmRpbmdCb3giKSxyWGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJue3gxOmUueDErcix4MjplLngyK3IseTE6ZS55MStuLHkyOmUueTIrbix3OmUudyxoOmUuaH19LCJzaGlmdEJvdW5kaW5nQm94IiksQ2dlPW8oZnVuY3Rpb24oZSxyKXtlLngxPU1hdGgubWluKGUueDEsci54MSksZS54Mj1NYXRoLm1heChlLngyLHIueDIpLGUudz1lLngyLWUueDEsZS55MT1NYXRoLm1pbihlLnkxLHIueTEpLGUueTI9TWF0aC5tYXgoZS55MixyLnkyKSxlLmg9ZS55Mi1lLnkxfSwidXBkYXRlQm91bmRpbmdCb3giKSxuWGU9byhmdW5jdGlvbihlLHIsbil7ZS54MT1NYXRoLm1pbihlLngxLHIpLGUueDI9TWF0aC5tYXgoZS54MixyKSxlLnc9ZS54Mi1lLngxLGUueTE9TWF0aC5taW4oZS55MSxuKSxlLnkyPU1hdGgubWF4KGUueTIsbiksZS5oPWUueTItZS55MX0sImV4cGFuZEJvdW5kaW5nQm94QnlQb2ludCIpLEQ2PW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjA7cmV0dXJuIGUueDEtPXIsZS54Mis9cixlLnkxLT1yLGUueTIrPXIsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxLGV9LCJleHBhbmRCb3VuZGluZ0JveCIpLEw2PW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlswXSxuLGksYSxzO2lmKHIubGVuZ3RoPT09MSluPWk9YT1zPXJbMF07ZWxzZSBpZihyLmxlbmd0aD09PTIpbj1hPXJbMF0scz1pPXJbMV07ZWxzZSBpZihyLmxlbmd0aD09PTQpe3ZhciBsPVJpKHIsNCk7bj1sWzBdLGk9bFsxXSxhPWxbMl0scz1sWzNdfXJldHVybiBlLngxLT1zLGUueDIrPWksZS55MS09bixlLnkyKz1hLGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MSxlfSwiZXhwYW5kQm91bmRpbmdCb3hTaWRlcyIpLFgwZT1vKGZ1bmN0aW9uKGUscil7ZS54MT1yLngxLGUueTE9ci55MSxlLngyPXIueDIsZS55Mj1yLnkyLGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MX0sImFzc2lnbkJvdW5kaW5nQm94IiksVUI9byhmdW5jdGlvbihlLHIpe3JldHVybiEoZS54MT5yLngyfHxyLngxPmUueDJ8fGUueDI8ci54MXx8ci54MjxlLngxfHxlLnkyPHIueTF8fHIueTI8ZS55MXx8ZS55MT5yLnkyfHxyLnkxPmUueTIpfSwiYm91bmRpbmdCb3hlc0ludGVyc2VjdCIpLHJ5PW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlLngxPD1yJiZyPD1lLngyJiZlLnkxPD1uJiZuPD1lLnkyfSwiaW5Cb3VuZGluZ0JveCIpLGlYZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ5KGUsci54LHIueSl9LCJwb2ludEluQm91bmRpbmdCb3giKSxBZ2U9byhmdW5jdGlvbihlLHIpe3JldHVybiByeShlLHIueDEsci55MSkmJnJ5KGUsci54MixyLnkyKX0sImJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveCIpLF9nZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XToiYXV0byIsaD11PT09ImF1dG8iP1pwKGEscyk6dSxmPWEvMixkPXMvMjtoPU1hdGgubWluKGgsZixkKTt2YXIgcD1oIT09ZixtPWghPT1kLGc7aWYocCl7dmFyIHk9bi1mK2gtbCx2PWktZC1sLHg9bitmLWgrbCxiPXY7aWYoZz1NZihlLHIsbixpLHksdix4LGIsITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9aWYobSl7dmFyIFQ9bitmK2wsUz1pLWQraC1sLHc9VCxFPWkrZC1oK2w7aWYoZz1NZihlLHIsbixpLFQsUyx3LEUsITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9aWYocCl7dmFyIF89bi1mK2gtbCxDPWkrZCtsLEQ9bitmLWgrbCxPPUM7aWYoZz1NZihlLHIsbixpLF8sQyxELE8sITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9aWYobSl7dmFyIFI9bi1mLWwsaz1pLWQraC1sLEw9UixBPWkrZC1oK2w7aWYoZz1NZihlLHIsbixpLFIsayxMLEEsITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9dmFyIEk7e3ZhciBNPW4tZitoLFA9aS1kK2g7aWYoST1ZYihlLHIsbixpLE0sUCxoK2wpLEkubGVuZ3RoPjAmJklbMF08PU0mJklbMV08PVApcmV0dXJuW0lbMF0sSVsxXV19e3ZhciBCPW4rZi1oLEY9aS1kK2g7aWYoST1ZYihlLHIsbixpLEIsRixoK2wpLEkubGVuZ3RoPjAmJklbMF0+PUImJklbMV08PUYpcmV0dXJuW0lbMF0sSVsxXV19e3ZhciB6PW4rZi1oLCQ9aStkLWg7aWYoST1ZYihlLHIsbixpLHosJCxoK2wpLEkubGVuZ3RoPjAmJklbMF0+PXomJklbMV0+PSQpcmV0dXJuW0lbMF0sSVsxXV19e3ZhciBVPW4tZitoLEs9aStkLWg7aWYoST1ZYihlLHIsbixpLFUsSyxoK2wpLEkubGVuZ3RoPjAmJklbMF08PVUmJklbMV0+PUspcmV0dXJuW0lbMF0sSVsxXV19cmV0dXJuW119LCJyb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUiKSxhWGU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXt2YXIgdT1sLGg9TWF0aC5taW4obixhKSxmPU1hdGgubWF4KG4sYSksZD1NYXRoLm1pbihpLHMpLHA9TWF0aC5tYXgoaSxzKTtyZXR1cm4gaC11PD1lJiZlPD1mK3UmJmQtdTw9ciYmcjw9cCt1fSwiaW5MaW5lVmljaW5pdHkiKSxzWGU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9e3gxOk1hdGgubWluKG4sbCxhKS1oLHgyOk1hdGgubWF4KG4sbCxhKStoLHkxOk1hdGgubWluKGksdSxzKS1oLHkyOk1hdGgubWF4KGksdSxzKStofTtyZXR1cm4hKGU8Zi54MXx8ZT5mLngyfHxyPGYueTF8fHI+Zi55Mil9LCJpbkJlemllclZpY2luaXR5Iiksb1hlPW8oZnVuY3Rpb24oZSxyLG4saSl7bi09aTt2YXIgYT1yKnItNCplKm47aWYoYTwwKXJldHVybltdO3ZhciBzPU1hdGguc3FydChhKSxsPTIqZSx1PSgtcitzKS9sLGg9KC1yLXMpL2w7cmV0dXJuW3UsaF19LCJzb2x2ZVF1YWRyYXRpYyIpLGxYZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9MWUtNTtlPT09MCYmKGU9cyksci89ZSxuLz1lLGkvPWU7dmFyIGwsdSxoLGYsZCxwLG0sZztpZih1PSgzKm4tcipyKS85LGg9LSgyNyppKStyKig5Km4tMioocipyKSksaC89NTQsbD11KnUqdStoKmgsYVsxXT0wLG09ci8zLGw+MCl7ZD1oK01hdGguc3FydChsKSxkPWQ8MD8tTWF0aC5wb3coLWQsMS8zKTpNYXRoLnBvdyhkLDEvMykscD1oLU1hdGguc3FydChsKSxwPXA8MD8tTWF0aC5wb3coLXAsMS8zKTpNYXRoLnBvdyhwLDEvMyksYVswXT0tbStkK3AsbSs9KGQrcCkvMixhWzRdPWFbMl09LW0sbT1NYXRoLnNxcnQoMykqKC1wK2QpLzIsYVszXT1tLGFbNV09LW07cmV0dXJufWlmKGFbNV09YVszXT0wLGw9PT0wKXtnPWg8MD8tTWF0aC5wb3coLWgsMS8zKTpNYXRoLnBvdyhoLDEvMyksYVswXT0tbSsyKmcsYVs0XT1hWzJdPS0oZyttKTtyZXR1cm59dT0tdSxmPXUqdSp1LGY9TWF0aC5hY29zKGgvTWF0aC5zcXJ0KGYpKSxnPTIqTWF0aC5zcXJ0KHUpLGFbMF09LW0rZypNYXRoLmNvcyhmLzMpLGFbMl09LW0rZypNYXRoLmNvcygoZisyKk1hdGguUEkpLzMpLGFbNF09LW0rZypNYXRoLmNvcygoZis0Kk1hdGguUEkpLzMpfSwic29sdmVDdWJpYyIpLGNYZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9MSpuKm4tNCpuKmErMipuKmwrNCphKmEtNCphKmwrbCpsK2kqaS00KmkqcysyKmkqdSs0KnMqcy00KnMqdSt1KnUsZj0xKjkqbiphLTMqbipuLTMqbipsLTYqYSphKzMqYSpsKzkqaSpzLTMqaSppLTMqaSp1LTYqcypzKzMqcyp1LGQ9MSozKm4qbi02Km4qYStuKmwtbiplKzIqYSphKzIqYSplLWwqZSszKmkqaS02KmkqcytpKnUtaSpyKzIqcypzKzIqcypyLXUqcixwPTEqbiphLW4qbituKmUtYSplK2kqcy1pKmkraSpyLXMqcixtPVtdO2xYZShoLGYsZCxwLG0pO2Zvcih2YXIgZz0xZS03LHk9W10sdj0wO3Y8Njt2Kz0yKU1hdGguYWJzKG1bdisxXSk8ZyYmbVt2XT49MCYmbVt2XTw9MSYmeS5wdXNoKG1bdl0pO3kucHVzaCgxKSx5LnB1c2goMCk7Zm9yKHZhciB4PS0xLGIsVCxTLHc9MDt3PHkubGVuZ3RoO3crKyliPU1hdGgucG93KDEteVt3XSwyKSpuKzIqKDEteVt3XSkqeVt3XSphK3lbd10qeVt3XSpsLFQ9TWF0aC5wb3coMS15W3ddLDIpKmkrMiooMS15W3ddKSp5W3ddKnMreVt3XSp5W3ddKnUsUz1NYXRoLnBvdyhiLWUsMikrTWF0aC5wb3coVC1yLDIpLHg+PTA/Uzx4JiYoeD1TKTp4PVM7cmV0dXJuIHh9LCJzcWRpc3RUb1F1YWRyYXRpY0JlemllciIpLHVYZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1bZS1uLHItaV0sdT1bYS1uLHMtaV0saD11WzBdKnVbMF0rdVsxXSp1WzFdLGY9bFswXSpsWzBdK2xbMV0qbFsxXSxkPWxbMF0qdVswXStsWzFdKnVbMV0scD1kKmQvaDtyZXR1cm4gZDwwP2Y6cD5oPyhlLWEpKihlLWEpKyhyLXMpKihyLXMpOmYtcH0sInNxZGlzdFRvRmluaXRlTGluZSIpLHFzPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaSxhLHMsbCx1LGg9MCxmPTA7ZjxuLmxlbmd0aC8yO2YrKylpZihpPW5bZioyXSxhPW5bZioyKzFdLGYrMTxuLmxlbmd0aC8yPyhzPW5bKGYrMSkqMl0sbD1uWyhmKzEpKjIrMV0pOihzPW5bKGYrMS1uLmxlbmd0aC8yKSoyXSxsPW5bKGYrMS1uLmxlbmd0aC8yKSoyKzFdKSwhKGk9PWUmJnM9PWUpKWlmKGk+PWUmJmU+PXN8fGk8PWUmJmU8PXMpdT0oZS1pKS8ocy1pKSoobC1hKSthLHU+ciYmaCsrO2Vsc2UgY29udGludWU7cmV0dXJuIGglMiE9PTB9LCJwb2ludEluc2lkZVBvbHlnb25Qb2ludHMiKSxpaD1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj1uZXcgQXJyYXkobi5sZW5ndGgpLGQ7dVswXSE9bnVsbD8oZD1NYXRoLmF0YW4odVsxXS91WzBdKSx1WzBdPDA/ZD1kK01hdGguUEkvMjpkPS1kLU1hdGguUEkvMik6ZD11O2Zvcih2YXIgcD1NYXRoLmNvcygtZCksbT1NYXRoLnNpbigtZCksZz0wO2c8Zi5sZW5ndGgvMjtnKyspZltnKjJdPXMvMioobltnKjJdKnAtbltnKjIrMV0qbSksZltnKjIrMV09bC8yKihuW2cqMisxXSpwK25bZyoyXSptKSxmW2cqMl0rPWksZltnKjIrMV0rPWE7dmFyIHk7aWYoaD4wKXt2YXIgdj1WNihmLC1oKTt5PUc2KHYpfWVsc2UgeT1mO3JldHVybiBxcyhlLHIseSl9LCJwb2ludEluc2lkZVBvbHlnb24iKSxoWGU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe2Zvcih2YXIgaD1uZXcgQXJyYXkobi5sZW5ndGgqMiksZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgZD11W2ZdO2hbZio0KzBdPWQuc3RhcnRYLGhbZio0KzFdPWQuc3RhcnRZLGhbZio0KzJdPWQuc3RvcFgsaFtmKjQrM109ZC5zdG9wWTt2YXIgcD1NYXRoLnBvdyhkLmN4LWUsMikrTWF0aC5wb3coZC5jeS1yLDIpO2lmKHA8PU1hdGgucG93KGQucmFkaXVzLDIpKXJldHVybiEwfXJldHVybiBxcyhlLHIsaCl9LCJwb2ludEluc2lkZVJvdW5kUG9seWdvbiIpLEc2PW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aC8yKSxuLGksYSxzLGwsdSxoLGYsZD0wO2Q8ZS5sZW5ndGgvNDtkKyspe249ZVtkKjRdLGk9ZVtkKjQrMV0sYT1lW2QqNCsyXSxzPWVbZCo0KzNdLGQ8ZS5sZW5ndGgvNC0xPyhsPWVbKGQrMSkqNF0sdT1lWyhkKzEpKjQrMV0saD1lWyhkKzEpKjQrMl0sZj1lWyhkKzEpKjQrM10pOihsPWVbMF0sdT1lWzFdLGg9ZVsyXSxmPWVbM10pO3ZhciBwPU1mKG4saSxhLHMsbCx1LGgsZiwhMCk7cltkKjJdPXBbMF0scltkKjIrMV09cFsxXX1yZXR1cm4gcn0sImpvaW5MaW5lcyIpLFY2PW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUubGVuZ3RoKjIpLGksYSxzLGwsdT0wO3U8ZS5sZW5ndGgvMjt1Kyspe2k9ZVt1KjJdLGE9ZVt1KjIrMV0sdTxlLmxlbmd0aC8yLTE/KHM9ZVsodSsxKSoyXSxsPWVbKHUrMSkqMisxXSk6KHM9ZVswXSxsPWVbMV0pO3ZhciBoPWwtYSxmPS0ocy1pKSxkPU1hdGguc3FydChoKmgrZipmKSxwPWgvZCxtPWYvZDtuW3UqNF09aStwKnIsblt1KjQrMV09YSttKnIsblt1KjQrMl09cytwKnIsblt1KjQrM109bCttKnJ9cmV0dXJuIG59LCJleHBhbmRQb2x5Z29uIiksZlhlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPW4tZSx1PWktcjtsLz1hLHUvPXM7dmFyIGg9TWF0aC5zcXJ0KGwqbCt1KnUpLGY9aC0xO2lmKGY8MClyZXR1cm5bXTt2YXIgZD1mL2g7cmV0dXJuWyhuLWUpKmQrZSwoaS1yKSpkK3JdfSwiaW50ZXJzZWN0TGluZUVsbGlwc2UiKSxqcD1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3JldHVybiBlLT1hLHItPXMsZS89bi8yK2wsci89aS8yK2wsZSplK3Iqcjw9MX0sImNoZWNrSW5FbGxpcHNlIiksWWI9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXt2YXIgdT1bbi1lLGktcl0saD1bZS1hLHItc10sZj11WzBdKnVbMF0rdVsxXSp1WzFdLGQ9MiooaFswXSp1WzBdK2hbMV0qdVsxXSkscD1oWzBdKmhbMF0raFsxXSpoWzFdLWwqbCxtPWQqZC00KmYqcDtpZihtPDApcmV0dXJuW107dmFyIGc9KC1kK01hdGguc3FydChtKSkvKDIqZikseT0oLWQtTWF0aC5zcXJ0KG0pKS8oMipmKSx2PU1hdGgubWluKGcseSkseD1NYXRoLm1heChnLHkpLGI9W107aWYodj49MCYmdjw9MSYmYi5wdXNoKHYpLHg+PTAmJng8PTEmJmIucHVzaCh4KSxiLmxlbmd0aD09PTApcmV0dXJuW107dmFyIFQ9YlswXSp1WzBdK2UsUz1iWzBdKnVbMV0rcjtpZihiLmxlbmd0aD4xKXtpZihiWzBdPT1iWzFdKXJldHVybltULFNdO3ZhciB3PWJbMV0qdVswXStlLEU9YlsxXSp1WzFdK3I7cmV0dXJuW1QsUyx3LEVdfWVsc2UgcmV0dXJuW1QsU119LCJpbnRlcnNlY3RMaW5lQ2lyY2xlIiksc0I9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHI8PWUmJmU8PW58fG48PWUmJmU8PXI/ZTplPD1yJiZyPD1ufHxuPD1yJiZyPD1lP3I6bn0sIm1pZE9mVGhyZWUiKSxNZj1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj1lLWEsZD1uLWUscD1sLWEsbT1yLXMsZz1pLXIseT11LXMsdj1wKm0teSpmLHg9ZCptLWcqZixiPXkqZC1wKmc7aWYoYiE9PTApe3ZhciBUPXYvYixTPXgvYix3PS4wMDEsRT0wLXcsXz0xK3c7cmV0dXJuIEU8PVQmJlQ8PV8mJkU8PVMmJlM8PV8/W2UrVCpkLHIrVCpnXTpoP1tlK1QqZCxyK1QqZ106W119ZWxzZSByZXR1cm4gdj09PTB8fHg9PT0wP3NCKGUsbixsKT09PWw/W2wsdV06c0IoZSxuLGEpPT09YT9bYSxzXTpzQihhLGwsbik9PT1uP1tuLGldOltdOltdfSwiZmluaXRlTGluZXNJbnRlcnNlY3QiKSxhND1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9W10sZixkPW5ldyBBcnJheShuLmxlbmd0aCkscD0hMDtzPT1udWxsJiYocD0hMSk7dmFyIG07aWYocCl7Zm9yKHZhciBnPTA7ZzxkLmxlbmd0aC8yO2crKylkW2cqMl09bltnKjJdKnMraSxkW2cqMisxXT1uW2cqMisxXSpsK2E7aWYodT4wKXt2YXIgeT1WNihkLC11KTttPUc2KHkpfWVsc2UgbT1kfWVsc2UgbT1uO2Zvcih2YXIgdix4LGIsVCxTPTA7UzxtLmxlbmd0aC8yO1MrKyl2PW1bUyoyXSx4PW1bUyoyKzFdLFM8bS5sZW5ndGgvMi0xPyhiPW1bKFMrMSkqMl0sVD1tWyhTKzEpKjIrMV0pOihiPW1bMF0sVD1tWzFdKSxmPU1mKGUscixpLGEsdix4LGIsVCksZi5sZW5ndGghPT0wJiZoLnB1c2goZlswXSxmWzFdKTtyZXR1cm4gaH0sInBvbHlnb25JbnRlcnNlY3RMaW5lIiksZFhlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPVtdLGQscD1uZXcgQXJyYXkobi5sZW5ndGgqMik7aC5mb3JFYWNoKGZ1bmN0aW9uKGIsVCl7VD09PTA/KHBbcC5sZW5ndGgtMl09Yi5zdGFydFgscFtwLmxlbmd0aC0xXT1iLnN0YXJ0WSk6KHBbVCo0LTJdPWIuc3RhcnRYLHBbVCo0LTFdPWIuc3RhcnRZKSxwW1QqNF09Yi5zdG9wWCxwW1QqNCsxXT1iLnN0b3BZLGQ9WWIoZSxyLGksYSxiLmN4LGIuY3ksYi5yYWRpdXMpLGQubGVuZ3RoIT09MCYmZi5wdXNoKGRbMF0sZFsxXSl9KTtmb3IodmFyIG09MDttPHAubGVuZ3RoLzQ7bSsrKWQ9TWYoZSxyLGksYSxwW20qNF0scFttKjQrMV0scFttKjQrMl0scFttKjQrM10sITEpLGQubGVuZ3RoIT09MCYmZi5wdXNoKGRbMF0sZFsxXSk7aWYoZi5sZW5ndGg+Mil7Zm9yKHZhciBnPVtmWzBdLGZbMV1dLHk9TWF0aC5wb3coZ1swXS1lLDIpK01hdGgucG93KGdbMV0tciwyKSx2PTE7djxmLmxlbmd0aC8yO3YrKyl7dmFyIHg9TWF0aC5wb3coZlt2KjJdLWUsMikrTWF0aC5wb3coZlt2KjIrMV0tciwyKTt4PD15JiYoZ1swXT1mW3YqMl0sZ1sxXT1mW3YqMisxXSx5PXgpfXJldHVybiBnfXJldHVybiBmfSwicm91bmRQb2x5Z29uSW50ZXJzZWN0TGluZSIpLHk2PW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVtlWzBdLXJbMF0sZVsxXS1yWzFdXSxhPU1hdGguc3FydChpWzBdKmlbMF0raVsxXSppWzFdKSxzPShhLW4pL2E7cmV0dXJuIHM8MCYmKHM9MWUtNSksW3JbMF0rcyppWzBdLHJbMV0rcyppWzFdXX0sInNob3J0ZW5JbnRlcnNlY3Rpb24iKSxUcz1vKGZ1bmN0aW9uKGUscil7dmFyIG49YkIoZSxyKTtyZXR1cm4gbj1EZ2Uobiksbn0sImdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSIpLERnZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcixuLGk9ZS5sZW5ndGgvMixhPTEvMCxzPTEvMCxsPS0xLzAsdT0tMS8wLGg9MDtoPGk7aCsrKXI9ZVsyKmhdLG49ZVsyKmgrMV0sYT1NYXRoLm1pbihhLHIpLGw9TWF0aC5tYXgobCxyKSxzPU1hdGgubWluKHMsbiksdT1NYXRoLm1heCh1LG4pO2Zvcih2YXIgZj0yLyhsLWEpLGQ9Mi8odS1zKSxwPTA7cDxpO3ArKylyPWVbMipwXT1lWzIqcF0qZixuPWVbMipwKzFdPWVbMipwKzFdKmQsYT1NYXRoLm1pbihhLHIpLGw9TWF0aC5tYXgobCxyKSxzPU1hdGgubWluKHMsbiksdT1NYXRoLm1heCh1LG4pO2lmKHM8LTEpZm9yKHZhciBtPTA7bTxpO20rKyluPWVbMiptKzFdPWVbMiptKzFdKygtMS1zKTtyZXR1cm4gZX0sImZpdFBvbHlnb25Ub1NxdWFyZSIpLGJCPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj0xL2UqMipNYXRoLlBJLGk9ZSUyPT09MD9NYXRoLlBJLzIrbi8yOk1hdGguUEkvMjtpKz1yO2Zvcih2YXIgYT1uZXcgQXJyYXkoZSoyKSxzLGw9MDtsPGU7bCsrKXM9bCpuK2ksYVsyKmxdPU1hdGguY29zKHMpLGFbMipsKzFdPU1hdGguc2luKC1zKTtyZXR1cm4gYX0sImdlbmVyYXRlVW5pdE5nb25Qb2ludHMiKSxacD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGgubWluKGUvNCxyLzQsOCl9LCJnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyIpLExnZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGgubWluKGUvMTAsci8xMCw4KX0sImdldFJvdW5kUG9seWdvblJhZGl1cyIpLEhCPW8oZnVuY3Rpb24oKXtyZXR1cm4gOH0sImdldEN1dFJlY3RhbmdsZUNvcm5lckxlbmd0aCIpLHBYZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm5bZS0yKnIrbiwyKihyLWUpLGVdfSwiYmV6aWVyUHRzVG9RdWFkQ29lZmYiKSxUQj1vKGZ1bmN0aW9uKGUscil7cmV0dXJue2hlaWdodE9mZnNldDpNYXRoLm1pbigxNSwuMDUqciksd2lkdGhPZmZzZXQ6TWF0aC5taW4oMTAwLC4yNSplKSxjdHJsUHRPZmZzZXRQY3Q6LjA1fX0sImdldEJhcnJlbEN1cnZlQ29uc3RhbnRzIiksbVhlPW9hKHtkYW1waW5nRmFjdG9yOi44LHByZWNpc2lvbjoxZS02LGl0ZXJhdGlvbnM6MjAwLHdlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0Iil9KSxnWGU9e3BhZ2VSYW5rOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPW1YZShlKSxuPXIuZGFtcGluZ0ZhY3RvcixpPXIucHJlY2lzaW9uLGE9ci5pdGVyYXRpb25zLHM9ci53ZWlnaHQsbD10aGlzLl9wcml2YXRlLmN5LHU9dGhpcy5ieUdyb3VwKCksaD11Lm5vZGVzLGY9dS5lZGdlcyxkPWgubGVuZ3RoLHA9ZCpkLG09Zi5sZW5ndGgsZz1uZXcgQXJyYXkocCkseT1uZXcgQXJyYXkoZCksdj0oMS1uKS9kLHg9MDt4PGQ7eCsrKXtmb3IodmFyIGI9MDtiPGQ7YisrKXt2YXIgVD14KmQrYjtnW1RdPTB9eVt4XT0wfWZvcih2YXIgUz0wO1M8bTtTKyspe3ZhciB3PWZbU10sRT13LmRhdGEoInNvdXJjZSIpLF89dy5kYXRhKCJ0YXJnZXQiKTtpZihFIT09Xyl7dmFyIEM9aC5pbmRleE9mSWQoRSksRD1oLmluZGV4T2ZJZChfKSxPPXModyksUj1EKmQrQztnW1JdKz1PLHlbQ10rPU99fWZvcih2YXIgaz0xL2QrdixMPTA7TDxkO0wrKylpZih5W0xdPT09MClmb3IodmFyIEE9MDtBPGQ7QSsrKXt2YXIgST1BKmQrTDtnW0ldPWt9ZWxzZSBmb3IodmFyIE09MDtNPGQ7TSsrKXt2YXIgUD1NKmQrTDtnW1BdPWdbUF0veVtMXSt2fWZvcih2YXIgQj1uZXcgQXJyYXkoZCksRj1uZXcgQXJyYXkoZCkseiwkPTA7JDxkOyQrKylCWyRdPTE7Zm9yKHZhciBVPTA7VTxhO1UrKyl7Zm9yKHZhciBLPTA7SzxkO0srKylGW0tdPTA7Zm9yKHZhciBlZT0wO2VlPGQ7ZWUrKylmb3IodmFyIFk9MDtZPGQ7WSsrKXt2YXIgY2U9ZWUqZCtZO0ZbZWVdKz1nW2NlXSpCW1ldfVpZZShGKSx6PUIsQj1GLEY9ejtmb3IodmFyIFo9MCx1ZT0wO3VlPGQ7dWUrKyl7dmFyIFE9elt1ZV0tQlt1ZV07Wis9USpRfWlmKFo8aSlicmVha312YXIgaj17cmFuazpvKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGU9bC5jb2xsZWN0aW9uKHRlKVswXSxCW2guaW5kZXhPZih0ZSldfSwicmFuayIpfTtyZXR1cm4gan0sInBhZ2VSYW5rIil9LGowZT1vYSh7cm9vdDpudWxsLHdlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLFoxPXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpvKGZ1bmN0aW9uKGUpe2U9ajBlKGUpO3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW4ubGVuZ3RoO2lmKGUuZGlyZWN0ZWQpe2Zvcih2YXIgZj17fSxkPXt9LHA9MCxtPTAsZz0wO2c8aTtnKyspe3ZhciB5PW5bZ10sdj15LmlkKCk7ZS5yb290PXk7dmFyIHg9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGUpO3A8eC5pbmRlZ3JlZSYmKHA9eC5pbmRlZ3JlZSksbTx4Lm91dGRlZ3JlZSYmKG09eC5vdXRkZWdyZWUpLGZbdl09eC5pbmRlZ3JlZSxkW3ZdPXgub3V0ZGVncmVlfXJldHVybntpbmRlZ3JlZTpvKGZ1bmN0aW9uKFQpe3JldHVybiBwPT0wPzA6KFp0KFQpJiYoVD1yLmZpbHRlcihUKSksZltULmlkKCldL3ApfSwiaW5kZWdyZWUiKSxvdXRkZWdyZWU6byhmdW5jdGlvbihUKXtyZXR1cm4gbT09PTA/MDooWnQoVCkmJihUPXIuZmlsdGVyKFQpKSxkW1QuaWQoKV0vbSl9LCJvdXRkZWdyZWUiKX19ZWxzZXtmb3IodmFyIGE9e30scz0wLGw9MDtsPGk7bCsrKXt2YXIgdT1uW2xdO2Uucm9vdD11O3ZhciBoPXRoaXMuZGVncmVlQ2VudHJhbGl0eShlKTtzPGguZGVncmVlJiYocz1oLmRlZ3JlZSksYVt1LmlkKCldPWguZGVncmVlfXJldHVybntkZWdyZWU6byhmdW5jdGlvbihUKXtyZXR1cm4gcz09PTA/MDooWnQoVCkmJihUPXIuZmlsdGVyKFQpKSxhW1QuaWQoKV0vcyl9LCJkZWdyZWUiKX19fSwiZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQiKSxkZWdyZWVDZW50cmFsaXR5Om8oZnVuY3Rpb24oZSl7ZT1qMGUoZSk7dmFyIHI9dGhpcy5jeSgpLG49dGhpcyxpPWUsYT1pLnJvb3Qscz1pLndlaWdodCxsPWkuZGlyZWN0ZWQsdT1pLmFscGhhO2lmKGE9ci5jb2xsZWN0aW9uKGEpWzBdLGwpe2Zvcih2YXIgbT1hLmNvbm5lY3RlZEVkZ2VzKCksZz1tLmZpbHRlcihmdW5jdGlvbihFKXtyZXR1cm4gRS50YXJnZXQoKS5zYW1lKGEpJiZuLmhhcyhFKX0pLHk9bS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuc291cmNlKCkuc2FtZShhKSYmbi5oYXMoRSl9KSx2PWcubGVuZ3RoLHg9eS5sZW5ndGgsYj0wLFQ9MCxTPTA7UzxnLmxlbmd0aDtTKyspYis9cyhnW1NdKTtmb3IodmFyIHc9MDt3PHkubGVuZ3RoO3crKylUKz1zKHlbd10pO3JldHVybntpbmRlZ3JlZTpNYXRoLnBvdyh2LDEtdSkqTWF0aC5wb3coYix1KSxvdXRkZWdyZWU6TWF0aC5wb3coeCwxLXUpKk1hdGgucG93KFQsdSl9fWVsc2V7Zm9yKHZhciBoPWEuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24obiksZj1oLmxlbmd0aCxkPTAscD0wO3A8aC5sZW5ndGg7cCsrKWQrPXMoaFtwXSk7cmV0dXJue2RlZ3JlZTpNYXRoLnBvdyhmLDEtdSkqTWF0aC5wb3coZCx1KX19fSwiZGVncmVlQ2VudHJhbGl0eSIpfTtaMS5kYz1aMS5kZWdyZWVDZW50cmFsaXR5O1oxLmRjbj1aMS5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXNlZD1aMS5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDtLMGU9b2Eoe2hhcm1vbmljOiEwLHdlaWdodDpvKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMSxyb290Om51bGx9KSxKMT17Y2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9SzBlKGUpLG49ci5oYXJtb25pYyxpPXIud2VpZ2h0LGE9ci5kaXJlY3RlZCxzPXRoaXMuY3koKSxsPXt9LHU9MCxoPXRoaXMubm9kZXMoKSxmPXRoaXMuZmxveWRXYXJzaGFsbCh7d2VpZ2h0OmksZGlyZWN0ZWQ6YX0pLGQ9MDtkPGgubGVuZ3RoO2QrKyl7Zm9yKHZhciBwPTAsbT1oW2RdLGc9MDtnPGgubGVuZ3RoO2crKylpZihkIT09Zyl7dmFyIHk9Zi5kaXN0YW5jZShtLGhbZ10pO24/cCs9MS95OnArPXl9bnx8KHA9MS9wKSx1PHAmJih1PXApLGxbbS5pZCgpXT1wfXJldHVybntjbG9zZW5lc3M6byhmdW5jdGlvbih4KXtyZXR1cm4gdT09MD8wOihadCh4KT94PXMuZmlsdGVyKHgpWzBdLmlkKCk6eD14LmlkKCksbFt4XS91KX0sImNsb3NlbmVzcyIpfX0sImNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkIiksY2xvc2VuZXNzQ2VudHJhbGl0eTpvKGZ1bmN0aW9uKGUpe3ZhciByPUswZShlKSxuPXIucm9vdCxpPXIud2VpZ2h0LGE9ci5kaXJlY3RlZCxzPXIuaGFybW9uaWM7bj10aGlzLmZpbHRlcihuKVswXTtmb3IodmFyIGw9dGhpcy5kaWprc3RyYSh7cm9vdDpuLHdlaWdodDppLGRpcmVjdGVkOmF9KSx1PTAsaD10aGlzLm5vZGVzKCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2lmKCFkLnNhbWUobikpe3ZhciBwPWwuZGlzdGFuY2VUbyhkKTtzP3UrPTEvcDp1Kz1wfX1yZXR1cm4gcz91OjEvdX0sImNsb3NlbmVzc0NlbnRyYWxpdHkiKX07SjEuY2M9SjEuY2xvc2VuZXNzQ2VudHJhbGl0eTtKMS5jY249SjEuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGlzZWQ9SjEuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7eVhlPW9hKHt3ZWlnaHQ6bnVsbCxkaXJlY3RlZDohMX0pLHdCPXtiZXR3ZWVubmVzc0NlbnRyYWxpdHk6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9eVhlKGUpLG49ci5kaXJlY3RlZCxpPXIud2VpZ2h0LGE9aSE9bnVsbCxzPXRoaXMuY3koKSxsPXRoaXMubm9kZXMoKSx1PXt9LGg9e30sZj0wLGQ9e3NldDpvKGZ1bmN0aW9uKFQsUyl7aFtUXT1TLFM+ZiYmKGY9Uyl9LCJzZXQiKSxnZXQ6byhmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0sImdldCIpfSxwPTA7cDxsLmxlbmd0aDtwKyspe3ZhciBtPWxbcF0sZz1tLmlkKCk7bj91W2ddPW0ub3V0Z29lcnMoKS5ub2RlcygpOnVbZ109bS5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxkLnNldChnLDApfWZvcih2YXIgeT1vKGZ1bmN0aW9uKFQpe2Zvcih2YXIgUz1sW1RdLmlkKCksdz1bXSxFPXt9LF89e30sQz17fSxEPW5ldyBtNChmdW5jdGlvbihZLGNlKXtyZXR1cm4gQ1tZXS1DW2NlXX0pLE89MDtPPGwubGVuZ3RoO08rKyl7dmFyIFI9bFtPXS5pZCgpO0VbUl09W10sX1tSXT0wLENbUl09MS8wfWZvcihfW1NdPTEsQ1tTXT0wLEQucHVzaChTKTshRC5lbXB0eSgpOyl7dmFyIGs9RC5wb3AoKTtpZih3LnB1c2goayksYSlmb3IodmFyIEw9MDtMPHVba10ubGVuZ3RoO0wrKyl7dmFyIEE9dVtrXVtMXSxJPXMuZ2V0RWxlbWVudEJ5SWQoayksTT12b2lkIDA7SS5lZGdlc1RvKEEpLmxlbmd0aD4wP009SS5lZGdlc1RvKEEpWzBdOk09QS5lZGdlc1RvKEkpWzBdO3ZhciBQPWkoTSk7QT1BLmlkKCksQ1tBXT5DW2tdK1AmJihDW0FdPUNba10rUCxELm5vZGVzLmluZGV4T2YoQSk8MD9ELnB1c2goQSk6RC51cGRhdGVJdGVtKEEpLF9bQV09MCxFW0FdPVtdKSxDW0FdPT1DW2tdK1AmJihfW0FdPV9bQV0rX1trXSxFW0FdLnB1c2goaykpfWVsc2UgZm9yKHZhciBCPTA7Qjx1W2tdLmxlbmd0aDtCKyspe3ZhciBGPXVba11bQl0uaWQoKTtDW0ZdPT0xLzAmJihELnB1c2goRiksQ1tGXT1DW2tdKzEpLENbRl09PUNba10rMSYmKF9bRl09X1tGXStfW2tdLEVbRl0ucHVzaChrKSl9fWZvcih2YXIgej17fSwkPTA7JDxsLmxlbmd0aDskKyspeltsWyRdLmlkKCldPTA7Zm9yKDt3Lmxlbmd0aD4wOyl7Zm9yKHZhciBVPXcucG9wKCksSz0wO0s8RVtVXS5sZW5ndGg7SysrKXt2YXIgZWU9RVtVXVtLXTt6W2VlXT16W2VlXStfW2VlXS9fW1VdKigxK3pbVV0pfVUhPWxbVF0uaWQoKSYmZC5zZXQoVSxkLmdldChVKSt6W1VdKX19LCJfbG9vcCIpLHY9MDt2PGwubGVuZ3RoO3YrKyl5KHYpO3ZhciB4PXtiZXR3ZWVubmVzczpvKGZ1bmN0aW9uKFQpe3ZhciBTPXMuY29sbGVjdGlvbihUKS5pZCgpO3JldHVybiBkLmdldChTKX0sImJldHdlZW5uZXNzIiksYmV0d2Vlbm5lc3NOb3JtYWxpemVkOm8oZnVuY3Rpb24oVCl7aWYoZj09MClyZXR1cm4gMDt2YXIgUz1zLmNvbGxlY3Rpb24oVCkuaWQoKTtyZXR1cm4gZC5nZXQoUykvZn0sImJldHdlZW5uZXNzTm9ybWFsaXplZCIpfTtyZXR1cm4geC5iZXR3ZWVubmVzc05vcm1hbGlzZWQ9eC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQseH0sImJldHdlZW5uZXNzQ2VudHJhbGl0eSIpfTt3Qi5iYz13Qi5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dlhlPW9hKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24odCl7cmV0dXJuIDF9XX0pLHhYZT1vKGZ1bmN0aW9uKGUpe3JldHVybiB2WGUoZSl9LCJzZXRPcHRpb25zIiksYlhlPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MCxpPTA7aTxyLmxlbmd0aDtpKyspbis9cltpXShlKTtyZXR1cm4gbn0sImdldFNpbWlsYXJpdHkiKSxUWGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyllW2kqcitpXT1ufSwiYWRkTG9vcHMiKSxSZ2U9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbixpPTA7aTxyO2krKyl7bj0wO2Zvcih2YXIgYT0wO2E8cjthKyspbis9ZVthKnIraV07Zm9yKHZhciBzPTA7czxyO3MrKyllW3MqcitpXT1lW3MqcitpXS9ufX0sIm5vcm1hbGl6ZSIpLHdYZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9bmV3IEFycmF5KG4qbiksYT0wO2E8bjthKyspe2Zvcih2YXIgcz0wO3M8bjtzKyspaVthKm4rc109MDtmb3IodmFyIGw9MDtsPG47bCsrKWZvcih2YXIgdT0wO3U8bjt1KyspaVthKm4rdV0rPWVbYSpuK2xdKnJbbCpuK3VdfXJldHVybiBpfSwibW11bHQiKSxrWGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWUuc2xpY2UoMCksYT0xO2E8bjthKyspZT13WGUoZSxpLHIpO3JldHVybiBlfSwiZXhwYW5kIiksRVhlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkocipyKSxhPTA7YTxyKnI7YSsrKWlbYV09TWF0aC5wb3coZVthXSxuKTtyZXR1cm4gUmdlKGksciksaX0sImluZmxhdGUiKSxTWGU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgcz1NYXRoLnJvdW5kKGVbYV0qTWF0aC5wb3coMTAsaSkpL01hdGgucG93KDEwLGkpLGw9TWF0aC5yb3VuZChyW2FdKk1hdGgucG93KDEwLGkpKS9NYXRoLnBvdygxMCxpKTtpZihzIT09bClyZXR1cm4hMX1yZXR1cm4hMH0sImhhc0NvbnZlcmdlZCIpLENYZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1bXSxzPTA7czxyO3MrKyl7Zm9yKHZhciBsPVtdLHU9MDt1PHI7dSsrKU1hdGgucm91bmQoZVtzKnIrdV0qMWUzKS8xZTM+MCYmbC5wdXNoKG5bdV0pO2wubGVuZ3RoIT09MCYmYS5wdXNoKGkuY29sbGVjdGlvbihsKSl9cmV0dXJuIGF9LCJhc3NpZ24iKSxBWGU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCFyW25dfHxlW25dLmlkKCkhPT1yW25dLmlkKCkpcmV0dXJuITE7cmV0dXJuITB9LCJpc0R1cGxpY2F0ZSIpLF9YZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIhPW4mJkFYZShlW3JdLGVbbl0pJiZlLnNwbGljZShuLDEpO3JldHVybiBlfSwicmVtb3ZlRHVwbGljYXRlcyIpLFEwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLm5vZGVzKCksbj10aGlzLmVkZ2VzKCksaT10aGlzLmN5KCksYT14WGUoZSkscz17fSxsPTA7bDxyLmxlbmd0aDtsKyspc1tyW2xdLmlkKCldPWw7Zm9yKHZhciB1PXIubGVuZ3RoLGg9dSp1LGY9bmV3IEFycmF5KGgpLGQscD0wO3A8aDtwKyspZltwXT0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXt2YXIgZz1uW21dLHk9c1tnLnNvdXJjZSgpLmlkKCldLHY9c1tnLnRhcmdldCgpLmlkKCldLHg9YlhlKGcsYS5hdHRyaWJ1dGVzKTtmW3kqdSt2XSs9eCxmW3YqdSt5XSs9eH1UWGUoZix1LGEubXVsdEZhY3RvciksUmdlKGYsdSk7Zm9yKHZhciBiPSEwLFQ9MDtiJiZUPGEubWF4SXRlcmF0aW9uczspYj0hMSxkPWtYZShmLHUsYS5leHBhbmRGYWN0b3IpLGY9RVhlKGQsdSxhLmluZmxhdGVGYWN0b3IpLFNYZShmLGQsaCw0KXx8KGI9ITApLFQrKzt2YXIgUz1DWGUoZix1LHIsaSk7cmV0dXJuIFM9X1hlKFMpLFN9LCJtYXJrb3ZDbHVzdGVyaW5nIiksRFhlPXttYXJrb3ZDbHVzdGVyaW5nOlEwZSxtY2w6UTBlfSxMWGU9byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sImlkZW50aXR5IiksTmdlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoci1lKX0sImFic0RpZmYiKSxaMGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrTmdlKHIsbil9LCJhZGRBYnNEaWZmIiksSjBlPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlK01hdGgucG93KG4tciwyKX0sImFkZFNxdWFyZWREaWZmIiksUlhlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChlKX0sInNxcnQiKSxOWGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGgubWF4KGUsTmdlKHIsbikpfSwibWF4QWJzRGlmZiIpLCRiPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOkxYZSxsPWksdSxoLGY9MDtmPGU7ZisrKXU9cihmKSxoPW4oZiksbD1hKGwsdSxoKTtyZXR1cm4gcyhsKX0sImdldERpc3RhbmNlIiksbnk9e2V1Y2xpZGVhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT49Mj8kYihlLHIsbiwwLEowZSxSWGUpOiRiKGUscixuLDAsWjBlKX0sImV1Y2xpZGVhbiIpLHNxdWFyZWRFdWNsaWRlYW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuICRiKGUscixuLDAsSjBlKX0sInNxdWFyZWRFdWNsaWRlYW4iKSxtYW5oYXR0YW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuICRiKGUscixuLDAsWjBlKX0sIm1hbmhhdHRhbiIpLG1heDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gJGIoZSxyLG4sLTEvMCxOWGUpfSwibWF4Iil9O255WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPW55LnNxdWFyZWRFdWNsaWRlYW47bnkuc3F1YXJlZGV1Y2xpZGVhbj1ueS5zcXVhcmVkRXVjbGlkZWFuO28oZUMsImNsdXN0ZXJpbmdEaXN0YW5jZSIpO01YZT1vYSh7azoyLG06MixzZW5zaXRpdml0eVRocmVzaG9sZDoxZS00LGRpc3RhbmNlOiJldWNsaWRlYW4iLG1heEl0ZXJhdGlvbnM6MTAsYXR0cmlidXRlczpbXSx0ZXN0TW9kZTohMSx0ZXN0Q2VudHJvaWRzOm51bGx9KSxXQj1vKGZ1bmN0aW9uKGUpe3JldHVybiBNWGUoZSl9LCJzZXRPcHRpb25zIiksVTY9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPWEhPT0ia01lZG9pZHMiLGw9cz9mdW5jdGlvbihkKXtyZXR1cm4gbltkXX06ZnVuY3Rpb24oZCl7cmV0dXJuIGlbZF0obil9LHU9byhmdW5jdGlvbihwKXtyZXR1cm4gaVtwXShyKX0sImdldFEiKSxoPW4sZj1yO3JldHVybiBlQyhlLGkubGVuZ3RoLGwsdSxoLGYpfSwiZ2V0RGlzdCIpLG9CPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmxlbmd0aCxhPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKSxsPW5ldyBBcnJheShyKSx1PW51bGwsaD0wO2g8aTtoKyspYVtoXT1lLm1pbihuW2hdKS52YWx1ZSxzW2hdPWUubWF4KG5baF0pLnZhbHVlO2Zvcih2YXIgZj0wO2Y8cjtmKyspe3U9W107Zm9yKHZhciBkPTA7ZDxpO2QrKyl1W2RdPU1hdGgucmFuZG9tKCkqKHNbZF0tYVtkXSkrYVtkXTtsW2ZdPXV9cmV0dXJuIGx9LCJyYW5kb21DZW50cm9pZHMiKSxNZ2U9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz0xLzAsbD0wLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9VTYobixlLHJbdV0saSxhKTtoPHMmJihzPWgsbD11KX1yZXR1cm4gbH0sImNsYXNzaWZ5IiksSWdlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1bXSxhPW51bGwscz0wO3M8ci5sZW5ndGg7cysrKWE9cltzXSxuW2EuaWQoKV09PT1lJiZpLnB1c2goYSk7cmV0dXJuIGl9LCJidWlsZENsdXN0ZXIiKSxJWGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGguYWJzKHItZSk8PW59LCJoYXZlVmFsdWVzQ29udmVyZ2VkIiksT1hlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8ZVtpXS5sZW5ndGg7YSsrKXt2YXIgcz1NYXRoLmFicyhlW2ldW2FdLXJbaV1bYV0pO2lmKHM+bilyZXR1cm4hMX1yZXR1cm4hMH0sImhhdmVNYXRyaWNlc0NvbnZlcmdlZCIpLFBYZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MDtpPG47aSsrKWlmKGU9PT1yW2ldKXJldHVybiEwO3JldHVybiExfSwic2VlbkJlZm9yZSIpLGVtZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEFycmF5KHIpO2lmKGUubGVuZ3RoPDUwKWZvcih2YXIgaT0wO2k8cjtpKyspe2Zvcih2YXIgYT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO1BYZShhLG4saSk7KWE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtuW2ldPWF9ZWxzZSBmb3IodmFyIHM9MDtzPHI7cysrKW5bc109ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtyZXR1cm4gbn0sInJhbmRvbU1lZG9pZHMiKSx0bWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8ci5sZW5ndGg7YSsrKWkrPVU2KCJtYW5oYXR0YW4iLHJbYV0sZSxuLCJrTWVkb2lkcyIpO3JldHVybiBpfSwiZmluZENvc3QiKSxCWGU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9V0IoZSkscz1uZXcgQXJyYXkoYS5rKSxsPXt9LHU7YS50ZXN0TW9kZT90eXBlb2YgYS50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyIj8oYS50ZXN0Q2VudHJvaWRzLHU9b0IobixhLmssYS5hdHRyaWJ1dGVzKSk6cWkoYS50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiP3U9YS50ZXN0Q2VudHJvaWRzOnU9b0IobixhLmssYS5hdHRyaWJ1dGVzKTp1PW9CKG4sYS5rLGEuYXR0cmlidXRlcyk7Zm9yKHZhciBoPSEwLGY9MDtoJiZmPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWk9bltkXSxsW2kuaWQoKV09TWdlKGksdSxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lYW5zIik7aD0hMTtmb3IodmFyIHA9MDtwPGEuaztwKyspe3ZhciBtPUlnZShwLG4sbCk7aWYobS5sZW5ndGghPT0wKXtmb3IodmFyIGc9YS5hdHRyaWJ1dGVzLmxlbmd0aCx5PXVbcF0sdj1uZXcgQXJyYXkoZykseD1uZXcgQXJyYXkoZyksYj0wO2I8ZztiKyspe3hbYl09MDtmb3IodmFyIFQ9MDtUPG0ubGVuZ3RoO1QrKylpPW1bVF0seFtiXSs9YS5hdHRyaWJ1dGVzW2JdKGkpO3ZbYl09eFtiXS9tLmxlbmd0aCxJWGUodltiXSx5W2JdLGEuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpfHwoaD0hMCl9dVtwXT12LHNbcF09ci5jb2xsZWN0aW9uKG0pfX1mKyt9cmV0dXJuIHN9LCJrTWVhbnMiKSxGWGU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9V0IoZSkscz1uZXcgQXJyYXkoYS5rKSxsLHU9e30saCxmPW5ldyBBcnJheShhLmspO2EudGVzdE1vZGU/dHlwZW9mIGEudGVzdENlbnRyb2lkcz09Im51bWJlciJ8fChxaShhLnRlc3RDZW50cm9pZHMpPT09Im9iamVjdCI/bD1hLnRlc3RDZW50cm9pZHM6bD1lbWUobixhLmspKTpsPWVtZShuLGEuayk7Zm9yKHZhciBkPSEwLHA9MDtkJiZwPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKWk9blttXSx1W2kuaWQoKV09TWdlKGksbCxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lZG9pZHMiKTtkPSExO2Zvcih2YXIgZz0wO2c8bC5sZW5ndGg7ZysrKXt2YXIgeT1JZ2UoZyxuLHUpO2lmKHkubGVuZ3RoIT09MCl7ZltnXT10bWUobFtnXSx5LGEuYXR0cmlidXRlcyk7Zm9yKHZhciB2PTA7djx5Lmxlbmd0aDt2KyspaD10bWUoeVt2XSx5LGEuYXR0cmlidXRlcyksaDxmW2ddJiYoZltnXT1oLGxbZ109eVt2XSxkPSEwKTtzW2ddPXIuY29sbGVjdGlvbih5KX19cCsrfXJldHVybiBzfSwia01lZG9pZHMiKSwkWGU9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcyxsLHU9MDt1PHIubGVuZ3RoO3UrKylmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKylpW3VdW2hdPU1hdGgucG93KG5bdV1baF0sYS5tKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKylmb3IodmFyIGQ9MDtkPGEuYXR0cmlidXRlcy5sZW5ndGg7ZCsrKXtzPTAsbD0wO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXMrPWlbcF1bZl0qYS5hdHRyaWJ1dGVzW2RdKHJbcF0pLGwrPWlbcF1bZl07ZVtmXVtkXT1zL2x9fSwidXBkYXRlQ2VudHJvaWRzIikselhlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylyW3NdPWVbc10uc2xpY2UoKTtmb3IodmFyIGwsdSxoLGY9Mi8oYS5tLTEpLGQ9MDtkPG4ubGVuZ3RoO2QrKylmb3IodmFyIHA9MDtwPGkubGVuZ3RoO3ArKyl7bD0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXU9VTYoYS5kaXN0YW5jZSxpW3BdLG5bZF0sYS5hdHRyaWJ1dGVzLCJjbWVhbnMiKSxoPVU2KGEuZGlzdGFuY2UsaVtwXSxuW21dLGEuYXR0cmlidXRlcywiY21lYW5zIiksbCs9TWF0aC5wb3codS9oLGYpO2VbcF1bZF09MS9sfX0sInVwZGF0ZU1lbWJlcnNoaXAiKSxHWGU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9bmV3IEFycmF5KG4uaykscz0wO3M8YS5sZW5ndGg7cysrKWFbc109W107Zm9yKHZhciBsLHUsaD0wO2g8ci5sZW5ndGg7aCsrKXtsPS0xLzAsdT0tMTtmb3IodmFyIGY9MDtmPHJbMF0ubGVuZ3RoO2YrKylyW2hdW2ZdPmwmJihsPXJbaF1bZl0sdT1mKTthW3VdLnB1c2goZVtoXSl9Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXT1pLmNvbGxlY3Rpb24oYVtkXSk7cmV0dXJuIGF9LCJhc3NpZ24iKSxybWU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1XQihlKSxhLHMsbCx1LGg7dT1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKXVbZl09bmV3IEFycmF5KGkuayk7bD1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWxbZF09bmV3IEFycmF5KGkuayk7Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDtwKyspe2Zvcih2YXIgbT0wLGc9MDtnPGkuaztnKyspbFtwXVtnXT1NYXRoLnJhbmRvbSgpLG0rPWxbcF1bZ107Zm9yKHZhciB5PTA7eTxpLms7eSsrKWxbcF1beV09bFtwXVt5XS9tfXM9bmV3IEFycmF5KGkuayk7Zm9yKHZhciB2PTA7djxpLms7disrKXNbdl09bmV3IEFycmF5KGkuYXR0cmlidXRlcy5sZW5ndGgpO2g9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IodmFyIHg9MDt4PG4ubGVuZ3RoO3grKyloW3hdPW5ldyBBcnJheShpLmspO2Zvcih2YXIgYj0hMCxUPTA7YiYmVDxpLm1heEl0ZXJhdGlvbnM7KWI9ITEsJFhlKHMsbixsLGgsaSkselhlKGwsdSxzLG4saSksT1hlKGwsdSxpLnNlbnNpdGl2aXR5VGhyZXNob2xkKXx8KGI9ITApLFQrKztyZXR1cm4gYT1HWGUobixsLGkscikse2NsdXN0ZXJzOmEsZGVncmVlT2ZNZW1iZXJzaGlwOmx9fSwiZnV6enlDTWVhbnMiKSxWWGU9e2tNZWFuczpCWGUsa01lZG9pZHM6RlhlLGZ1enp5Q01lYW5zOnJtZSxmY206cm1lfSxVWGU9b2Eoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLGxpbmthZ2U6Im1pbiIsbW9kZToidGhyZXNob2xkIix0aHJlc2hvbGQ6MS8wLGFkZERlbmRyb2dyYW06ITEsZGVuZHJvZ3JhbURlcHRoOjAsYXR0cmlidXRlczpbXX0pLEhYZT17c2luZ2xlOiJtaW4iLGNvbXBsZXRlOiJtYXgifSxXWGU9byhmdW5jdGlvbihlKXt2YXIgcj1VWGUoZSksbj1IWGVbci5saW5rYWdlXTtyZXR1cm4gbiE9bnVsbCYmKHIubGlua2FnZT1uKSxyfSwic2V0T3B0aW9ucyIpLG5tZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzPTAsbD0xLzAsdSxoPWEuYXR0cmlidXRlcyxmPW8oZnVuY3Rpb24oRCxPKXtyZXR1cm4gZUMoYS5kaXN0YW5jZSxoLmxlbmd0aCxmdW5jdGlvbihSKXtyZXR1cm4gaFtSXShEKX0sZnVuY3Rpb24oUil7cmV0dXJuIGhbUl0oTyl9LEQsTyl9LCJnZXREaXN0IiksZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLmtleSxtPW5bcF1baVtwXV07bTxsJiYocz1wLGw9bSl9aWYoYS5tb2RlPT09InRocmVzaG9sZCImJmw+PWEudGhyZXNob2xkfHxhLm1vZGU9PT0iZGVuZHJvZ3JhbSImJmUubGVuZ3RoPT09MSlyZXR1cm4hMTt2YXIgZz1yW3NdLHk9cltpW3NdXSx2O2EubW9kZT09PSJkZW5kcm9ncmFtIj92PXtsZWZ0OmcscmlnaHQ6eSxrZXk6Zy5rZXl9OnY9e3ZhbHVlOmcudmFsdWUuY29uY2F0KHkudmFsdWUpLGtleTpnLmtleX0sZVtnLmluZGV4XT12LGUuc3BsaWNlKHkuaW5kZXgsMSkscltnLmtleV09djtmb3IodmFyIHg9MDt4PGUubGVuZ3RoO3grKyl7dmFyIGI9ZVt4XTtnLmtleT09PWIua2V5P3U9MS8wOmEubGlua2FnZT09PSJtaW4iPyh1PW5bZy5rZXldW2Iua2V5XSxuW2cua2V5XVtiLmtleV0+blt5LmtleV1bYi5rZXldJiYodT1uW3kua2V5XVtiLmtleV0pKTphLmxpbmthZ2U9PT0ibWF4Ij8odT1uW2cua2V5XVtiLmtleV0sbltnLmtleV1bYi5rZXldPG5beS5rZXldW2Iua2V5XSYmKHU9blt5LmtleV1bYi5rZXldKSk6YS5saW5rYWdlPT09Im1lYW4iP3U9KG5bZy5rZXldW2Iua2V5XSpnLnNpemUrblt5LmtleV1bYi5rZXldKnkuc2l6ZSkvKGcuc2l6ZSt5LnNpemUpOmEubW9kZT09PSJkZW5kcm9ncmFtIj91PWYoYi52YWx1ZSxnLnZhbHVlKTp1PWYoYi52YWx1ZVswXSxnLnZhbHVlWzBdKSxuW2cua2V5XVtiLmtleV09bltiLmtleV1bZy5rZXldPXV9Zm9yKHZhciBUPTA7VDxlLmxlbmd0aDtUKyspe3ZhciBTPWVbVF0ua2V5O2lmKGlbU109PT1nLmtleXx8aVtTXT09PXkua2V5KXtmb3IodmFyIHc9UyxFPTA7RTxlLmxlbmd0aDtFKyspe3ZhciBfPWVbRV0ua2V5O25bU11bX108bltTXVt3XSYmKHc9Xyl9aVtTXT13fWVbVF0uaW5kZXg9VH1yZXR1cm4gZy5rZXk9eS5rZXk9Zy5pbmRleD15LmluZGV4PW51bGwsITB9LCJtZXJnZUNsb3Nlc3QiKSx2Nj1vKGZ1bmN0aW9uIHQoZSxyLG4pe2UmJihlLnZhbHVlP3IucHVzaChlLnZhbHVlKTooZS5sZWZ0JiZ0KGUubGVmdCxyKSxlLnJpZ2h0JiZ0KGUucmlnaHQscikpKX0sImdldEFsbENoaWxkcmVuIikscVhlPW8oZnVuY3Rpb24gdChlLHIpe2lmKCFlKXJldHVybiIiO2lmKGUubGVmdCYmZS5yaWdodCl7dmFyIG49dChlLmxlZnQsciksaT10KGUucmlnaHQsciksYT1yLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDpuKyIsIitpfX0pO3JldHVybiByLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntzb3VyY2U6bix0YXJnZXQ6YS5pZCgpfX0pLHIuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTppLHRhcmdldDphLmlkKCl9fSksYS5pZCgpfWVsc2UgaWYoZS52YWx1ZSlyZXR1cm4gZS52YWx1ZS5pZCgpfSwiYnVpbGREZW5kcm9ncmFtIiksWVhlPW8oZnVuY3Rpb24gdChlLHIsbil7aWYoIWUpcmV0dXJuW107dmFyIGk9W10sYT1bXSxzPVtdO3JldHVybiByPT09MD8oZS5sZWZ0JiZ2NihlLmxlZnQsaSksZS5yaWdodCYmdjYoZS5yaWdodCxhKSxzPWkuY29uY2F0KGEpLFtuLmNvbGxlY3Rpb24ocyldKTpyPT09MT9lLnZhbHVlP1tuLmNvbGxlY3Rpb24oZS52YWx1ZSldOihlLmxlZnQmJnY2KGUubGVmdCxpKSxlLnJpZ2h0JiZ2NihlLnJpZ2h0LGEpLFtuLmNvbGxlY3Rpb24oaSksbi5jb2xsZWN0aW9uKGEpXSk6ZS52YWx1ZT9bbi5jb2xsZWN0aW9uKGUudmFsdWUpXTooZS5sZWZ0JiYoaT10KGUubGVmdCxyLTEsbikpLGUucmlnaHQmJihhPXQoZS5yaWdodCxyLTEsbikpLGkuY29uY2F0KGEpKX0sImJ1aWxkQ2x1c3RlcnNGcm9tVHJlZSIpLGltZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1XWGUoZSksYT1pLmF0dHJpYnV0ZXMscz1vKGZ1bmN0aW9uKFQsUyl7cmV0dXJuIGVDKGkuZGlzdGFuY2UsYS5sZW5ndGgsZnVuY3Rpb24odyl7cmV0dXJuIGFbd10oVCl9LGZ1bmN0aW9uKHcpe3JldHVybiBhW3ddKFMpfSxULFMpfSwiZ2V0RGlzdCIpLGw9W10sdT1bXSxoPVtdLGY9W10sZD0wO2Q8bi5sZW5ndGg7ZCsrKXt2YXIgcD17dmFsdWU6aS5tb2RlPT09ImRlbmRyb2dyYW0iP25bZF06W25bZF1dLGtleTpkLGluZGV4OmR9O2xbZF09cCxmW2RdPXAsdVtkXT1bXSxoW2RdPTB9Zm9yKHZhciBtPTA7bTxsLmxlbmd0aDttKyspZm9yKHZhciBnPTA7Zzw9bTtnKyspe3ZhciB5PXZvaWQgMDtpLm1vZGU9PT0iZGVuZHJvZ3JhbSI/eT1tPT09Zz8xLzA6cyhsW21dLnZhbHVlLGxbZ10udmFsdWUpOnk9bT09PWc/MS8wOnMobFttXS52YWx1ZVswXSxsW2ddLnZhbHVlWzBdKSx1W21dW2ddPXksdVtnXVttXT15LHk8dVttXVtoW21dXSYmKGhbbV09Zyl9Zm9yKHZhciB2PW5tZShsLGYsdSxoLGkpO3Y7KXY9bm1lKGwsZix1LGgsaSk7dmFyIHg7cmV0dXJuIGkubW9kZT09PSJkZW5kcm9ncmFtIj8oeD1ZWGUobFswXSxpLmRlbmRyb2dyYW1EZXB0aCxyKSxpLmFkZERlbmRyb2dyYW0mJnFYZShsWzBdLHIpKTooeD1uZXcgQXJyYXkobC5sZW5ndGgpLGwuZm9yRWFjaChmdW5jdGlvbihiLFQpe2Iua2V5PWIuaW5kZXg9bnVsbCx4W1RdPXIuY29sbGVjdGlvbihiLnZhbHVlKX0pKSx4fSwiaGllcmFyY2hpY2FsQ2x1c3RlcmluZyIpLFhYZT17aGllcmFyY2hpY2FsQ2x1c3RlcmluZzppbWUsaGNhOmltZX0salhlPW9hKHtkaXN0YW5jZToiZXVjbGlkZWFuIixwcmVmZXJlbmNlOiJtZWRpYW4iLGRhbXBpbmc6LjgsbWF4SXRlcmF0aW9uczoxZTMsbWluSXRlcmF0aW9uczoxMDAsYXR0cmlidXRlczpbXX0pLEtYZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUuZGFtcGluZyxuPWUucHJlZmVyZW5jZTsuNTw9ciYmcjwxfHxvaSgiRGFtcGluZyBtdXN0IHJhbmdlIG9uIFswLjUsIDEpLiAgR290OiAiLmNvbmNhdChyKSk7dmFyIGk9WyJtZWRpYW4iLCJtZWFuIiwibWluIiwibWF4Il07cmV0dXJuIGkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYT09PW59KXx8X3Qobil8fG9pKCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFsiLmNvbmNhdChpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iJyIuY29uY2F0KGEsIiciKX0pLmpvaW4oIiwgIiksIl0gb3IgYSBudW1iZXIuICBHb3Q6ICIpLmNvbmNhdChuKSksalhlKGUpfSwic2V0T3B0aW9ucyIpLFFYZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW8oZnVuY3Rpb24obCx1KXtyZXR1cm4gaVt1XShsKX0sImF0dHIiKTtyZXR1cm4tZUMoZSxpLmxlbmd0aCxmdW5jdGlvbihzKXtyZXR1cm4gYShyLHMpfSxmdW5jdGlvbihzKXtyZXR1cm4gYShuLHMpfSxyLG4pfSwiZ2V0U2ltaWxhcml0eSIpLFpYZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtyZXR1cm4gcj09PSJtZWRpYW4iP249S1llKGUpOnI9PT0ibWVhbiI/bj1qWWUoZSk6cj09PSJtaW4iP249WVllKGUpOnI9PT0ibWF4Ij9uPVhZZShlKTpuPXIsbn0sImdldFByZWZlcmVuY2UiKSxKWGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXJbYSplK2FdK25bYSplK2FdPjAmJmkucHVzaChhKTtyZXR1cm4gaX0sImZpbmRFeGVtcGxhcnMiKSxhbWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXtmb3IodmFyIHM9LTEsbD0tMS8wLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XTtyW2EqZStoXT5sJiYocz1oLGw9clthKmUraF0pfXM+MCYmaS5wdXNoKHMpfWZvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKWlbbltmXV09bltmXTtyZXR1cm4gaX0sImFzc2lnbkNsdXN0ZXJzIiksZWplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1hbWUoZSxyLG4pLGE9MDthPG4ubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylpW2xdPT09blthXSYmcy5wdXNoKGwpO2Zvcih2YXIgdT0tMSxoPS0xLzAsZj0wO2Y8cy5sZW5ndGg7ZisrKXtmb3IodmFyIGQ9MCxwPTA7cDxzLmxlbmd0aDtwKyspZCs9cltzW3BdKmUrc1tmXV07ZD5oJiYodT1mLGg9ZCl9blthXT1zW3VdfXJldHVybiBpPWFtZShlLHIsbiksaX0sImFzc2lnbiIpLHNtZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1LWGUoZSksYT17fSxzPTA7czxuLmxlbmd0aDtzKyspYVtuW3NdLmlkKCldPXM7dmFyIGwsdSxoLGYsZCxwO2w9bi5sZW5ndGgsdT1sKmwsaD1uZXcgQXJyYXkodSk7Zm9yKHZhciBtPTA7bTx1O20rKyloW21dPS0xLzA7Zm9yKHZhciBnPTA7ZzxsO2crKylmb3IodmFyIHk9MDt5PGw7eSsrKWchPT15JiYoaFtnKmwreV09UVhlKGkuZGlzdGFuY2UsbltnXSxuW3ldLGkuYXR0cmlidXRlcykpO2Y9WlhlKGgsaS5wcmVmZXJlbmNlKTtmb3IodmFyIHY9MDt2PGw7disrKWhbdipsK3ZdPWY7ZD1uZXcgQXJyYXkodSk7Zm9yKHZhciB4PTA7eDx1O3grKylkW3hdPTA7cD1uZXcgQXJyYXkodSk7Zm9yKHZhciBiPTA7Yjx1O2IrKylwW2JdPTA7Zm9yKHZhciBUPW5ldyBBcnJheShsKSxTPW5ldyBBcnJheShsKSx3PW5ldyBBcnJheShsKSxFPTA7RTxsO0UrKylUW0VdPTAsU1tFXT0wLHdbRV09MDtmb3IodmFyIF89bmV3IEFycmF5KGwqaS5taW5JdGVyYXRpb25zKSxDPTA7QzxfLmxlbmd0aDtDKyspX1tDXT0wO3ZhciBEO2ZvcihEPTA7RDxpLm1heEl0ZXJhdGlvbnM7RCsrKXtmb3IodmFyIE89MDtPPGw7TysrKXtmb3IodmFyIFI9LTEvMCxrPS0xLzAsTD0tMSxBPTAsST0wO0k8bDtJKyspVFtJXT1kW08qbCtJXSxBPXBbTypsK0ldK2hbTypsK0ldLEE+PVI/KGs9UixSPUEsTD1JKTpBPmsmJihrPUEpO2Zvcih2YXIgTT0wO008bDtNKyspZFtPKmwrTV09KDEtaS5kYW1waW5nKSooaFtPKmwrTV0tUikraS5kYW1waW5nKlRbTV07ZFtPKmwrTF09KDEtaS5kYW1waW5nKSooaFtPKmwrTF0taykraS5kYW1waW5nKlRbTF19Zm9yKHZhciBQPTA7UDxsO1ArKyl7Zm9yKHZhciBCPTAsRj0wO0Y8bDtGKyspVFtGXT1wW0YqbCtQXSxTW0ZdPU1hdGgubWF4KDAsZFtGKmwrUF0pLEIrPVNbRl07Qi09U1tQXSxTW1BdPWRbUCpsK1BdLEIrPVNbUF07Zm9yKHZhciB6PTA7ejxsO3orKylwW3oqbCtQXT0oMS1pLmRhbXBpbmcpKk1hdGgubWluKDAsQi1TW3pdKStpLmRhbXBpbmcqVFt6XTtwW1AqbCtQXT0oMS1pLmRhbXBpbmcpKihCLVNbUF0pK2kuZGFtcGluZypUW1BdfWZvcih2YXIgJD0wLFU9MDtVPGw7VSsrKXt2YXIgSz1wW1UqbCtVXStkW1UqbCtVXT4wPzE6MDtfW0QlaS5taW5JdGVyYXRpb25zKmwrVV09SywkKz1LfWlmKCQ+MCYmKEQ+PWkubWluSXRlcmF0aW9ucy0xfHxEPT1pLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgZWU9MCxZPTA7WTxsO1krKyl7d1tZXT0wO2Zvcih2YXIgY2U9MDtjZTxpLm1pbkl0ZXJhdGlvbnM7Y2UrKyl3W1ldKz1fW2NlKmwrWV07KHdbWV09PT0wfHx3W1ldPT09aS5taW5JdGVyYXRpb25zKSYmZWUrK31pZihlZT09PWwpYnJlYWt9fWZvcih2YXIgWj1KWGUobCxkLHApLHVlPWVqZShsLGgsWiksUT17fSxqPTA7ajxaLmxlbmd0aDtqKyspUVtaW2pdXT1bXTtmb3IodmFyIG5lPTA7bmU8bi5sZW5ndGg7bmUrKyl7dmFyIHRlPWFbbltuZV0uaWQoKV0saGU9dWVbdGVdO2hlIT1udWxsJiZRW2hlXS5wdXNoKG5bbmVdKX1mb3IodmFyIGxlPW5ldyBBcnJheShaLmxlbmd0aCksSj0wO0o8Wi5sZW5ndGg7SisrKWxlW0pdPXIuY29sbGVjdGlvbihRW1pbSl1dKTtyZXR1cm4gbGV9LCJhZmZpbml0eVByb3BhZ2F0aW9uIiksdGplPXthZmZpbml0eVByb3BhZ2F0aW9uOnNtZSxhcDpzbWV9LHJqZT1vYSh7cm9vdDp2b2lkIDAsZGlyZWN0ZWQ6ITF9KSxuamU9e2hpZXJob2x6ZXI6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sZGlyZWN0ZWQ6clsxXX19dmFyIG49cmplKGUpLGk9bi5yb290LGE9bi5kaXJlY3RlZCxzPXRoaXMsbD0hMSx1LGgsZjtpJiYoZj1adChpKT90aGlzLmZpbHRlcihpKVswXS5pZCgpOmlbMF0uaWQoKSk7dmFyIGQ9e30scD17fTthP3MuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgVD1iLmlkKCk7aWYoYi5pc05vZGUoKSl7dmFyIFM9Yi5pbmRlZ3JlZSghMCksdz1iLm91dGRlZ3JlZSghMCksRT1TLXcsXz13LVM7RT09MT91P2w9ITA6dT1UOl89PTE/aD9sPSEwOmg9VDooXz4xfHxFPjEpJiYobD0hMCksZFtUXT1bXSxiLm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihDKXtDLmlzRWRnZSgpJiZkW1RdLnB1c2goQy5pZCgpKX0pfWVsc2UgcFtUXT1bdm9pZCAwLGIudGFyZ2V0KCkuaWQoKV19KTpzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIFQ9Yi5pZCgpO2lmKGIuaXNOb2RlKCkpe3ZhciBTPWIuZGVncmVlKCEwKTtTJTImJih1P2g/bD0hMDpoPVQ6dT1UKSxkW1RdPVtdLGIuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiBkW1RdLnB1c2gody5pZCgpKX0pfWVsc2UgcFtUXT1bYi5zb3VyY2UoKS5pZCgpLGIudGFyZ2V0KCkuaWQoKV19KTt2YXIgbT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZihsKXJldHVybiBtO2lmKGgmJnUpaWYoYSl7aWYoZiYmaCE9ZilyZXR1cm4gbTtmPWh9ZWxzZXtpZihmJiZoIT1mJiZ1IT1mKXJldHVybiBtO2Z8fChmPWgpfWVsc2UgZnx8KGY9c1swXS5pZCgpKTt2YXIgZz1vKGZ1bmN0aW9uKFQpe2Zvcih2YXIgUz1ULHc9W1RdLEUsXyxDO2RbU10ubGVuZ3RoOylFPWRbU10uc2hpZnQoKSxfPXBbRV1bMF0sQz1wW0VdWzFdLFMhPUM/KGRbQ109ZFtDXS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIEQhPUV9KSxTPUMpOiFhJiZTIT1fJiYoZFtfXT1kW19dLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4gRCE9RX0pLFM9Xyksdy51bnNoaWZ0KEUpLHcudW5zaGlmdChTKTtyZXR1cm4gd30sIndhbGsiKSx5PVtdLHY9W107Zm9yKHY9ZyhmKTt2Lmxlbmd0aCE9MTspZFt2WzBdXS5sZW5ndGg9PTA/KHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpLHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpKTp2PWcodi5zaGlmdCgpKS5jb25jYXQodik7eS51bnNoaWZ0KHMuZ2V0RWxlbWVudEJ5SWQodi5zaGlmdCgpKSk7Zm9yKHZhciB4IGluIGQpaWYoZFt4XS5sZW5ndGgpcmV0dXJuIG07cmV0dXJuIG0uZm91bmQ9ITAsbS50cmFpbD10aGlzLnNwYXduKHksITApLG19LCJoaWVyaG9semVyIil9LHg2PW8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9e30sbj0wLGk9MCxhPVtdLHM9W10sbD17fSx1PW8oZnVuY3Rpb24ocCxtKXtmb3IodmFyIGc9cy5sZW5ndGgtMSx5PVtdLHY9ZS5zcGF3bigpO3NbZ10ueCE9cHx8c1tnXS55IT1tOyl5LnB1c2gocy5wb3AoKS5lZGdlKSxnLS07eS5wdXNoKHMucG9wKCkuZWRnZSkseS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3ZhciBiPXguY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZSk7di5tZXJnZSh4KSxiLmZvckVhY2goZnVuY3Rpb24oVCl7dmFyIFM9VC5pZCgpLHc9VC5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKTt2Lm1lcmdlKFQpLHJbU10uY3V0VmVydGV4P3YubWVyZ2Uody5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNMb29wKCl9KSk6di5tZXJnZSh3KX0pfSksYS5wdXNoKHYpfSwiYnVpbGRDb21wb25lbnQiKSxoPW8oZnVuY3Rpb24gZChwLG0sZyl7cD09PWcmJihpKz0xKSxyW21dPXtpZDpuLGxvdzpuKyssY3V0VmVydGV4OiExfTt2YXIgeT1lLmdldEVsZW1lbnRCeUlkKG0pLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGUpO2lmKHkuc2l6ZSgpPT09MClhLnB1c2goZS5zcGF3bihlLmdldEVsZW1lbnRCeUlkKG0pKSk7ZWxzZXt2YXIgdix4LGIsVDt5LmZvckVhY2goZnVuY3Rpb24oUyl7dj1TLnNvdXJjZSgpLmlkKCkseD1TLnRhcmdldCgpLmlkKCksYj12PT09bT94OnYsYiE9PWcmJihUPVMuaWQoKSxsW1RdfHwobFtUXT0hMCxzLnB1c2goe3g6bSx5OmIsZWRnZTpTfSkpLGIgaW4gcj9yW21dLmxvdz1NYXRoLm1pbihyW21dLmxvdyxyW2JdLmlkKTooZChwLGIsbSksclttXS5sb3c9TWF0aC5taW4oclttXS5sb3cscltiXS5sb3cpLHJbbV0uaWQ8PXJbYl0ubG93JiYoclttXS5jdXRWZXJ0ZXg9ITAsdShtLGIpKSkpfSl9fSwiYmljb25uZWN0ZWRTZWFyY2giKTtlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5pc05vZGUoKSl7dmFyIHA9ZC5pZCgpO3AgaW4gcnx8KGk9MCxoKHAscCkscltwXS5jdXRWZXJ0ZXg9aT4xKX19KTt2YXIgZj1PYmplY3Qua2V5cyhyKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIHJbZF0uY3V0VmVydGV4fSkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBlLmdldEVsZW1lbnRCeUlkKGQpfSk7cmV0dXJue2N1dDplLnNwYXduKGYpLGNvbXBvbmVudHM6YX19LCJob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkIiksaWplPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOng2LGh0YmM6eDYsaHRiOng2LGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOng2fSxiNj1vKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXt9LG49MCxpPVtdLGE9W10scz1lLnNwYXduKGUpLGw9byhmdW5jdGlvbiB1KGgpe2EucHVzaChoKSxyW2hdPXtpbmRleDpuLGxvdzpuKyssZXhwbG9yZWQ6ITF9O3ZhciBmPWUuZ2V0RWxlbWVudEJ5SWQoaCkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZSk7aWYoZi5mb3JFYWNoKGZ1bmN0aW9uKHkpe3ZhciB2PXkudGFyZ2V0KCkuaWQoKTt2IT09aCYmKHYgaW4gcnx8dSh2KSxyW3ZdLmV4cGxvcmVkfHwocltoXS5sb3c9TWF0aC5taW4ocltoXS5sb3csclt2XS5sb3cpKSl9KSxyW2hdLmluZGV4PT09cltoXS5sb3cpe2Zvcih2YXIgZD1lLnNwYXduKCk7Oyl7dmFyIHA9YS5wb3AoKTtpZihkLm1lcmdlKGUuZ2V0RWxlbWVudEJ5SWQocCkpLHJbcF0ubG93PXJbaF0uaW5kZXgscltwXS5leHBsb3JlZD0hMCxwPT09aClicmVha312YXIgbT1kLmVkZ2VzV2l0aChkKSxnPWQubWVyZ2UobSk7aS5wdXNoKGcpLHM9cy5kaWZmZXJlbmNlKGcpfX0sInN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoIik7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LmlzTm9kZSgpKXt2YXIgaD11LmlkKCk7aCBpbiByfHxsKGgpfX0pLHtjdXQ6cyxjb21wb25lbnRzOml9fSwidGFyamFuU3Ryb25nbHlDb25uZWN0ZWQiKSxhamU9e3RhcmphblN0cm9uZ2x5Q29ubmVjdGVkOmI2LHRzYzpiNix0c2NjOmI2LHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czpiNn0sT2dlPXt9O1tuNCxPWWUsUFllLEZZZSx6WWUsVlllLFdZZSxnWGUsWjEsSjEsd0IsRFhlLFZYZSxYWGUsdGplLG5qZSxpamUsYWplXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKE9nZSx0KX0pO1BnZT0wLEJnZT0xLEZnZT0yLGFoPW8oZnVuY3Rpb24gdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSk7dGhpcy5pZD0iVGhlbmFibGUvMS4wLjciLHRoaXMuc3RhdGU9UGdlLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGU9PSJmdW5jdGlvbiImJmUuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfSwiYXBpIik7YWgucHJvdG90eXBlPXtmdWxmaWxsOm8oZnVuY3Rpb24oZSl7cmV0dXJuIG9tZSh0aGlzLEJnZSwiZnVsZmlsbFZhbHVlIixlKX0sImZ1bGZpbGwiKSxyZWplY3Q6byhmdW5jdGlvbihlKXtyZXR1cm4gb21lKHRoaXMsRmdlLCJyZWplY3RSZWFzb24iLGUpfSwicmVqZWN0IiksdGhlbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPW5ldyBhaDtyZXR1cm4gbi5vbkZ1bGZpbGxlZC5wdXNoKGNtZShlLGksImZ1bGZpbGwiKSksbi5vblJlamVjdGVkLnB1c2goY21lKHIsaSwicmVqZWN0IikpLCRnZShuKSxpLnByb3h5fSwidGhlbiIpfTtvbWU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gZS5zdGF0ZT09PVBnZSYmKGUuc3RhdGU9cixlW25dPWksJGdlKGUpKSxlfSwiZGVsaXZlciIpLCRnZT1vKGZ1bmN0aW9uKGUpe2Uuc3RhdGU9PT1CZ2U/bG1lKGUsIm9uRnVsZmlsbGVkIixlLmZ1bGZpbGxWYWx1ZSk6ZS5zdGF0ZT09PUZnZSYmbG1lKGUsIm9uUmVqZWN0ZWQiLGUucmVqZWN0UmVhc29uKX0sImV4ZWN1dGUiKSxsbWU9byhmdW5jdGlvbihlLHIsbil7aWYoZVtyXS5sZW5ndGghPT0wKXt2YXIgaT1lW3JdO2Vbcl09W107dmFyIGE9byhmdW5jdGlvbigpe2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKWlbbF0obil9LCJmdW5jIik7dHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIj9zZXRJbW1lZGlhdGUoYSk6c2V0VGltZW91dChhLDApfX0sImV4ZWN1dGVfaGFuZGxlcnMiKSxjbWU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJbbl0uY2FsbChyLGkpO2Vsc2V7dmFyIGE7dHJ5e2E9ZShpKX1jYXRjaChzKXtyLnJlamVjdChzKTtyZXR1cm59c2plKHIsYSl9fX0sInJlc29sdmVyIiksc2plPW8oZnVuY3Rpb24gdChlLHIpe2lmKGU9PT1yfHxlLnByb3h5PT09cil7ZS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIG47aWYocWkocik9PT0ib2JqZWN0IiYmciE9PW51bGx8fHR5cGVvZiByPT0iZnVuY3Rpb24iKXRyeXtuPXIudGhlbn1jYXRjaChhKXtlLnJlamVjdChhKTtyZXR1cm59aWYodHlwZW9mIG49PSJmdW5jdGlvbiIpe3ZhciBpPSExO3RyeXtuLmNhbGwocixmdW5jdGlvbihhKXtpfHwoaT0hMCxhPT09cj9lLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp0KGUsYSkpfSxmdW5jdGlvbihhKXtpfHwoaT0hMCxlLnJlamVjdChhKSl9KX1jYXRjaChhKXtpfHxlLnJlamVjdChhKX1yZXR1cm59ZS5mdWxmaWxsKHIpfSwicmVzb2x2ZSIpO2FoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGFoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLGE9byhmdW5jdGlvbih1LGgpe25bdV09aCxpKyssaT09PXQubGVuZ3RoJiZlKG4pfSwiZnVsZmlsbCIpLHM9MDtzPHQubGVuZ3RoO3MrKykoZnVuY3Rpb24obCl7dmFyIHU9dFtsXSxoPXUhPW51bGwmJnUudGhlbiE9bnVsbDtpZihoKXUudGhlbihmdW5jdGlvbihkKXthKGwsZCl9LGZ1bmN0aW9uKGQpe3IoZCl9KTtlbHNle3ZhciBmPXU7YShsLGYpfX0pKHMpfSl9O2FoLnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhaChmdW5jdGlvbihlLHIpe2UodCl9KX07YWgucmVqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWgoZnVuY3Rpb24oZSxyKXtyKHQpfSl9O3N5PXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOmFoLGtCPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUJCKGUpLGE9IWkscz10aGlzLl9wcml2YXRlPWlyKHtkdXJhdGlvbjoxZTN9LHIsbik7aWYocy50YXJnZXQ9ZSxzLnN0eWxlPXMuc3R5bGV8fHMuY3NzLHMuc3RhcnRlZD0hMSxzLnBsYXlpbmc9ITEscy5ob29rZWQ9ITEscy5hcHBseWluZz0hMSxzLnByb2dyZXNzPTAscy5jb21wbGV0ZXM9W10scy5mcmFtZXM9W10scy5jb21wbGV0ZSYmbGkocy5jb21wbGV0ZSkmJnMuY29tcGxldGVzLnB1c2gocy5jb21wbGV0ZSksYSl7dmFyIGw9ZS5wb3NpdGlvbigpO3Muc3RhcnRQb3NpdGlvbj1zLnN0YXJ0UG9zaXRpb258fHt4OmwueCx5OmwueX0scy5zdGFydFN0eWxlPXMuc3RhcnRTdHlsZXx8ZS5jeSgpLnN0eWxlKCkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZShlLHMuc3R5bGUpfWlmKGkpe3ZhciB1PWUucGFuKCk7cy5zdGFydFBhbj17eDp1LngseTp1Lnl9LHMuc3RhcnRab29tPWUuem9vbSgpfXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzfSwiQW5pbWF0aW9uIiksSnA9a0IucHJvdG90eXBlO2lyKEpwLHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImFuaW1hdGlvbiJ9LCJpbnN0YW5jZVN0cmluZyIpLGhvb2s6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7aWYoIWUuaG9va2VkKXt2YXIgcixuPWUudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtlLnF1ZXVlP3I9bi5xdWV1ZTpyPW4uY3VycmVudCxyLnB1c2godGhpcykseG8oZS50YXJnZXQpJiZlLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChlLnRhcmdldCksZS5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LCJob29rIikscGxheTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wcm9ncmVzcz09PTEmJihlLnByb2dyZXNzPTApLGUucGxheWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJwbGF5IikscGxheWluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sInBsYXlpbmciKSxhcHBseTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5hcHBseWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJhcHBseSIpLGFwcGx5aW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30sImFwcGx5aW5nIikscGF1c2U6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUucGxheWluZz0hMSxlLnN0YXJ0ZWQ9ITEsdGhpc30sInBhdXNlIiksc3RvcDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITAsdGhpc30sInN0b3AiKSxyZXdpbmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDApfSwicmV3aW5kIiksZmFzdGZvcndhcmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDEpfSwiZmFzdGZvcndhcmQiKSx0aW1lOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzKnIuZHVyYXRpb246dGhpcy5wcm9ncmVzcyhlL3IuZHVyYXRpb24pfSwidGltZSIpLHByb2dyZXNzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGxheWluZztyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzOihuJiZ0aGlzLnBhdXNlKCksci5wcm9ncmVzcz1lLHIuc3RhcnRlZD0hMSxuJiZ0aGlzLnBsYXkoKSx0aGlzKX0sInByb2dyZXNzIiksY29tcGxldGVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LCJjb21wbGV0ZWQiKSxyZXZlcnNlOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLHI9ZS5wbGF5aW5nO3ImJnRoaXMucGF1c2UoKSxlLnByb2dyZXNzPTEtZS5wcm9ncmVzcyxlLnN0YXJ0ZWQ9ITE7dmFyIG49byhmdW5jdGlvbihoLGYpe3ZhciBkPWVbaF07ZCE9bnVsbCYmKGVbaF09ZVtmXSxlW2ZdPWQpfSwic3dhcCIpO2lmKG4oInpvb20iLCJzdGFydFpvb20iKSxuKCJwYW4iLCJzdGFydFBhbiIpLG4oInBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIpLGUuc3R5bGUpZm9yKHZhciBpPTA7aTxlLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBhPWUuc3R5bGVbaV0scz1hLm5hbWUsbD1lLnN0YXJ0U3R5bGVbc107ZS5zdGFydFN0eWxlW3NdPWEsZS5zdHlsZVtpXT1sfXJldHVybiByJiZ0aGlzLnBsYXkoKSx0aGlzfSwicmV2ZXJzZSIpLHByb21pc2U6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG47c3dpdGNoKGUpe2Nhc2UiZnJhbWUiOm49ci5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6bj1yLmNvbXBsZXRlc31yZXR1cm4gbmV3IHN5KGZ1bmN0aW9uKGksYSl7bi5wdXNoKGZ1bmN0aW9uKCl7aSgpfSl9KX0sInByb21pc2UiKX0pO0pwLmNvbXBsZXRlPUpwLmNvbXBsZXRlZDtKcC5ydW49SnAucGxheTtKcC5ydW5uaW5nPUpwLnBsYXlpbmc7b2plPXthbmltYXRlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcz1pWzBdO2lmKHMpcmV0dXJuIHMuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoPjB9LCJhbmltYXRlZEltcGwiKX0sImFuaW1hdGVkIiksY2xlYXJRdWV1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtsLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZT1bXX1yZXR1cm4gdGhpc30sImNsZWFyUXVldWVJbXBsIil9LCJjbGVhclF1ZXVlIiksZGVsYXk6byhmdW5jdGlvbigpe3JldHVybiBvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztyZXR1cm4gaS5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGUoe2RlbGF5OnIsZHVyYXRpb246cixjb21wbGV0ZTpufSk6dGhpc30sImRlbGF5SW1wbCIpfSwiZGVsYXkiKSxkZWxheUFuaW1hdGlvbjpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBpLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTpyLGR1cmF0aW9uOnIsY29tcGxldGU6bn0pOnRoaXN9LCJkZWxheUFuaW1hdGlvbkltcGwiKX0sImRlbGF5QW5pbWF0aW9uIiksYW5pbWF0aW9uOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsYT1pLmxlbmd0aCE9PXZvaWQgMCxzPWE/aTpbaV0sbD10aGlzLl9wcml2YXRlLmN5fHx0aGlzLHU9IWEsaD0hdTtpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgZj1sLnN0eWxlKCk7cj1pcih7fSxyLG4pO3ZhciBkPU9iamVjdC5rZXlzKHIpLmxlbmd0aD09PTA7aWYoZClyZXR1cm4gbmV3IGtCKHNbMF0scik7c3dpdGNoKHIuZHVyYXRpb249PT12b2lkIDAmJihyLmR1cmF0aW9uPTQwMCksci5kdXJhdGlvbil7Y2FzZSJzbG93IjpyLmR1cmF0aW9uPTYwMDticmVhaztjYXNlImZhc3QiOnIuZHVyYXRpb249MjAwO2JyZWFrfWlmKGgmJihyLnN0eWxlPWYuZ2V0UHJvcHNMaXN0KHIuc3R5bGV8fHIuY3NzKSxyLmNzcz12b2lkIDApLGgmJnIucmVuZGVyZWRQb3NpdGlvbiE9bnVsbCl7dmFyIHA9ci5yZW5kZXJlZFBvc2l0aW9uLG09bC5wYW4oKSxnPWwuem9vbSgpO3IucG9zaXRpb249RWdlKHAsZyxtKX1pZih1JiZyLnBhbkJ5IT1udWxsKXt2YXIgeT1yLnBhbkJ5LHY9bC5wYW4oKTtyLnBhbj17eDp2LngreS54LHk6di55K3kueX19dmFyIHg9ci5jZW50ZXJ8fHIuY2VudHJlO2lmKHUmJnghPW51bGwpe3ZhciBiPWwuZ2V0Q2VudGVyUGFuKHguZWxlcyxyLnpvb20pO2IhPW51bGwmJihyLnBhbj1iKX1pZih1JiZyLmZpdCE9bnVsbCl7dmFyIFQ9ci5maXQsUz1sLmdldEZpdFZpZXdwb3J0KFQuZWxlc3x8VC5ib3VuZGluZ0JveCxULnBhZGRpbmcpO1MhPW51bGwmJihyLnBhbj1TLnBhbixyLnpvb209Uy56b29tKX1pZih1JiZVcihyLnpvb20pKXt2YXIgdz1sLmdldFpvb21lZFZpZXdwb3J0KHIuem9vbSk7dyE9bnVsbD8ody56b29tZWQmJihyLnpvb209dy56b29tKSx3LnBhbm5lZCYmKHIucGFuPXcucGFuKSk6ci56b29tPW51bGx9cmV0dXJuIG5ldyBrQihzWzBdLHIpfSwiYW5pbWF0aW9uSW1wbCIpfSwiYW5pbWF0aW9uIiksYW5pbWF0ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztuJiYocj1pcih7fSxyLG4pKTtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguYW5pbWF0ZWQoKSYmKHIucXVldWU9PT12b2lkIDB8fHIucXVldWUpLGQ9aC5hbmltYXRpb24ocixmP3txdWV1ZTohMH06dm9pZCAwKTtkLnBsYXkoKX1yZXR1cm4gdGhpc30sImFuaW1hdGVJbXBsIil9LCJhbmltYXRlIiksc3RvcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7Zm9yKHZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5hbmltYXRpb24uY3VycmVudCxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF0sZz1tLl9wcml2YXRlO24mJihnLmR1cmF0aW9uPTApfXImJihmLmFuaW1hdGlvbi5xdWV1ZT1bXSksbnx8KGYuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiBsLm5vdGlmeSgiZHJhdyIpLHRoaXN9LCJzdG9wSW1wbCIpfSwic3RvcCIpfSxsamU9QXJyYXkuaXNBcnJheSx0Qz1samUsY2plPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHVqZT0vXlx3KiQvO28oaGplLCJpc0tleSIpO2ZqZT1oamUsZGplPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixwamU9IltvYmplY3QgRnVuY3Rpb25dIixtamU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixnamU9IltvYmplY3QgUHJveHldIjtvKHlqZSwiaXNGdW5jdGlvbiIpO3ZqZT15amUseGplPVE2WyJfX2NvcmUtanNfc2hhcmVkX18iXSxsQj14amUsdW1lPWZ1bmN0aW9uKCl7dmFyIHQ9L1teLl0rJC8uZXhlYyhsQiYmbEIua2V5cyYmbEIua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB0PyJTeW1ib2woc3JjKV8xLiIrdDoiIn0oKTtvKGJqZSwiaXNNYXNrZWQiKTtUamU9YmplLHdqZT1GdW5jdGlvbi5wcm90b3R5cGUsa2plPXdqZS50b1N0cmluZztvKEVqZSwidG9Tb3VyY2UiKTtTamU9RWplLENqZT0vW1xcXiQuKis/KClbXF17fXxdL2csQWplPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLF9qZT1GdW5jdGlvbi5wcm90b3R5cGUsRGplPU9iamVjdC5wcm90b3R5cGUsTGplPV9qZS50b1N0cmluZyxSamU9RGplLmhhc093blByb3BlcnR5LE5qZT1SZWdFeHAoIl4iK0xqZS5jYWxsKFJqZSkucmVwbGFjZShDamUsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7byhNamUsImJhc2VJc05hdGl2ZSIpO0lqZT1NamU7byhPamUsImdldFZhbHVlJDEiKTtQamU9T2plO28oQmplLCJnZXROYXRpdmUiKTtxQj1CamUsRmplPXFCKE9iamVjdCwiY3JlYXRlIiksczQ9RmplO28oJGplLCJoYXNoQ2xlYXIiKTt6amU9JGplO28oR2plLCJoYXNoRGVsZXRlIik7VmplPUdqZSxVamU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLEhqZT1PYmplY3QucHJvdG90eXBlLFdqZT1IamUuaGFzT3duUHJvcGVydHk7byhxamUsImhhc2hHZXQiKTtZamU9cWplLFhqZT1PYmplY3QucHJvdG90eXBlLGpqZT1YamUuaGFzT3duUHJvcGVydHk7byhLamUsImhhc2hIYXMiKTtRamU9S2plLFpqZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhKamUsImhhc2hTZXQiKTtlS2U9SmplO28ob3ksIkhhc2giKTtveS5wcm90b3R5cGUuY2xlYXI9emplO295LnByb3RvdHlwZS5kZWxldGU9VmplO295LnByb3RvdHlwZS5nZXQ9WWplO295LnByb3RvdHlwZS5oYXM9UWplO295LnByb3RvdHlwZS5zZXQ9ZUtlO2htZT1veTtvKHRLZSwibGlzdENhY2hlQ2xlYXIiKTtyS2U9dEtlO28obktlLCJlcSIpO3pnZT1uS2U7byhpS2UsImFzc29jSW5kZXhPZiIpO3JDPWlLZSxhS2U9QXJyYXkucHJvdG90eXBlLHNLZT1hS2Uuc3BsaWNlO28ob0tlLCJsaXN0Q2FjaGVEZWxldGUiKTtsS2U9b0tlO28oY0tlLCJsaXN0Q2FjaGVHZXQiKTt1S2U9Y0tlO28oaEtlLCJsaXN0Q2FjaGVIYXMiKTtmS2U9aEtlO28oZEtlLCJsaXN0Q2FjaGVTZXQiKTtwS2U9ZEtlO28obHksIkxpc3RDYWNoZSIpO2x5LnByb3RvdHlwZS5jbGVhcj1yS2U7bHkucHJvdG90eXBlLmRlbGV0ZT1sS2U7bHkucHJvdG90eXBlLmdldD11S2U7bHkucHJvdG90eXBlLmhhcz1mS2U7bHkucHJvdG90eXBlLnNldD1wS2U7bUtlPWx5LGdLZT1xQihRNiwiTWFwIikseUtlPWdLZTtvKHZLZSwibWFwQ2FjaGVDbGVhciIpO3hLZT12S2U7byhiS2UsImlzS2V5YWJsZSIpO1RLZT1iS2U7byh3S2UsImdldE1hcERhdGEiKTtuQz13S2U7byhrS2UsIm1hcENhY2hlRGVsZXRlIik7RUtlPWtLZTtvKFNLZSwibWFwQ2FjaGVHZXQiKTtDS2U9U0tlO28oQUtlLCJtYXBDYWNoZUhhcyIpO19LZT1BS2U7byhES2UsIm1hcENhY2hlU2V0Iik7TEtlPURLZTtvKGN5LCJNYXBDYWNoZSIpO2N5LnByb3RvdHlwZS5jbGVhcj14S2U7Y3kucHJvdG90eXBlLmRlbGV0ZT1FS2U7Y3kucHJvdG90eXBlLmdldD1DS2U7Y3kucHJvdG90eXBlLmhhcz1fS2U7Y3kucHJvdG90eXBlLnNldD1MS2U7R2dlPWN5LFJLZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhZQiwibWVtb2l6ZSIpO1lCLkNhY2hlPUdnZTtOS2U9WUIsTUtlPTUwMDtvKElLZSwibWVtb2l6ZUNhcHBlZCIpO09LZT1JS2UsUEtlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLEJLZT0vXFwoXFwpPy9nLEZLZT1PS2UoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09PTQ2JiZlLnB1c2goIiIpLHQucmVwbGFjZShQS2UsZnVuY3Rpb24ocixuLGksYSl7ZS5wdXNoKGk/YS5yZXBsYWNlKEJLZSwiJDEiKTpufHxyKX0pLGV9KSxWZ2U9RktlO28oJEtlLCJhcnJheU1hcCIpO1VnZT0kS2UsektlPTEvMCxmbWU9dHk/dHkucHJvdG90eXBlOnZvaWQgMCxkbWU9Zm1lP2ZtZS50b1N0cmluZzp2b2lkIDA7byhIZ2UsImJhc2VUb1N0cmluZyIpO0dLZT1IZ2U7byhWS2UsInRvU3RyaW5nJDEiKTtXZ2U9VktlO28oVUtlLCJjYXN0UGF0aCIpO3FnZT1VS2UsSEtlPTEvMDtvKFdLZSwidG9LZXkiKTtYQj1XS2U7byhxS2UsImJhc2VHZXQiKTtZS2U9cUtlO28oWEtlLCJnZXQiKTtqS2U9WEtlLEtLZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1xQihPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHQoe30sIiIse30pLHR9Y2F0Y2h7fX0oKSxwbWU9S0tlO28oUUtlLCJiYXNlQXNzaWduVmFsdWUiKTtaS2U9UUtlLEpLZT1PYmplY3QucHJvdG90eXBlLGVRZT1KS2UuaGFzT3duUHJvcGVydHk7byh0UWUsImFzc2lnblZhbHVlIik7clFlPXRRZSxuUWU9OTAwNzE5OTI1NDc0MDk5MSxpUWU9L14oPzowfFsxLTldXGQqKSQvO28oYVFlLCJpc0luZGV4Iik7c1FlPWFRZTtvKG9RZSwiYmFzZVNldCIpO2xRZT1vUWU7byhjUWUsInNldCIpO3VRZT1jUWU7byhoUWUsImNvcHlBcnJheSIpO2ZRZT1oUWU7byhkUWUsInRvUGF0aCIpO3BRZT1kUWUsbVFlPXtkYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6byhmdW5jdGlvbihpKXt9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihpLGEpe30sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oaSl7fSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihpKXtyZXR1cm4hMH0sImNhblNldCIpfTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSxhKXt2YXIgcz1lLGw9dGhpcyx1PWwubGVuZ3RoIT09dm9pZCAwLGg9dT9sOltsXSxmPXU/bFswXTpsO2lmKFp0KGkpKXt2YXIgZD1pLmluZGV4T2YoIi4iKSE9PS0xLHA9ZCYmcFFlKGkpO2lmKHMuYWxsb3dHZXR0aW5nJiZhPT09dm9pZCAwKXt2YXIgbTtyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/bT1qS2UoZi5fcHJpdmF0ZVtzLmZpZWxkXSxwKTptPWYuX3ByaXZhdGVbcy5maWVsZF1baV0pLG19ZWxzZSBpZihzLmFsbG93U2V0dGluZyYmYSE9PXZvaWQgMCl7dmFyIGc9IXMuaW1tdXRhYmxlS2V5c1tpXTtpZihnKXt2YXIgeT1pZ2Uoe30saSxhKTtzLmJlZm9yZVNldChsLHkpO2Zvcih2YXIgdj0wLHg9aC5sZW5ndGg7djx4O3YrKyl7dmFyIGI9aFt2XTtzLmNhblNldChiKSYmKHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/dVFlKGIuX3ByaXZhdGVbcy5maWVsZF0scCxhKTpiLl9wcml2YXRlW3MuZmllbGRdW2ldPWEpfXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9fX1lbHNlIGlmKHMuYWxsb3dTZXR0aW5nJiZVcihpKSl7dmFyIFQ9aSxTLHcsRT1PYmplY3Qua2V5cyhUKTtzLmJlZm9yZVNldChsLFQpO2Zvcih2YXIgXz0wO188RS5sZW5ndGg7XysrKXtTPUVbX10sdz1UW1NdO3ZhciBDPSFzLmltbXV0YWJsZUtleXNbU107aWYoQylmb3IodmFyIEQ9MDtEPGgubGVuZ3RoO0QrKyl7dmFyIE89aFtEXTtzLmNhblNldChPKSYmKE8uX3ByaXZhdGVbcy5maWVsZF1bU109dyl9fXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9ZWxzZSBpZihzLmFsbG93QmluZGluZyYmbGkoaSkpe3ZhciBSPWk7bC5vbihzLmJpbmRpbmdFdmVudCxSKX1lbHNlIGlmKHMuYWxsb3dHZXR0aW5nJiZpPT09dm9pZCAwKXt2YXIgaztyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLGs9Zi5fcHJpdmF0ZVtzLmZpZWxkXSksa31yZXR1cm4gbH0sImRhdGFJbXBsIil9LCJkYXRhIikscmVtb3ZlRGF0YTpvKGZ1bmN0aW9uKGUpe3ZhciByPXtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMSxpbW11dGFibGVLZXlzOnt9fTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSl7dmFyIGE9ZSxzPXRoaXMsbD1zLmxlbmd0aCE9PXZvaWQgMCx1PWw/czpbc107aWYoWnQoaSkpe2Zvcih2YXIgaD1pLnNwbGl0KC9ccysvKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXt2YXIgcD1oW2RdO2lmKCFQZihwKSl7dmFyIG09IWEuaW1tdXRhYmxlS2V5c1twXTtpZihtKWZvcih2YXIgZz0wLHk9dS5sZW5ndGg7Zzx5O2crKyl1W2ddLl9wcml2YXRlW2EuZmllbGRdW3BdPXZvaWQgMH19YS50cmlnZ2VyRXZlbnQmJnNbYS50cmlnZ2VyRm5OYW1lXShhLmV2ZW50KX1lbHNlIGlmKGk9PT12b2lkIDApe2Zvcih2YXIgdj0wLHg9dS5sZW5ndGg7djx4O3YrKylmb3IodmFyIGI9dVt2XS5fcHJpdmF0ZVthLmZpZWxkXSxUPU9iamVjdC5rZXlzKGIpLFM9MDtTPFQubGVuZ3RoO1MrKyl7dmFyIHc9VFtTXSxFPSFhLmltbXV0YWJsZUtleXNbd107RSYmKGJbd109dm9pZCAwKX1hLnRyaWdnZXJFdmVudCYmc1thLnRyaWdnZXJGbk5hbWVdKGEuZXZlbnQpfXJldHVybiBzfSwicmVtb3ZlRGF0YUltcGwiKX0sInJlbW92ZURhdGEiKX0sZ1FlPXtldmVudEFsaWFzZXNPbjpvKGZ1bmN0aW9uKGUpe3ZhciByPWU7ci5hZGRMaXN0ZW5lcj1yLmxpc3Rlbj1yLmJpbmQ9ci5vbixyLnVubGlzdGVuPXIudW5iaW5kPXIub2ZmPXIucmVtb3ZlTGlzdGVuZXIsci50cmlnZ2VyPXIuZW1pdCxyLnBvbj1yLnByb21pc2VPbj1mdW5jdGlvbihuLGkpe3ZhciBhPXRoaXMscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIG5ldyBzeShmdW5jdGlvbihsLHUpe3ZhciBoPW8oZnVuY3Rpb24obSl7YS5vZmYuYXBwbHkoYSxkKSxsKG0pfSwiY2FsbGJhY2siKSxmPXMuY29uY2F0KFtoXSksZD1mLmNvbmNhdChbXSk7YS5vbi5hcHBseShhLGYpfSl9fSwiZXZlbnRBbGlhc2VzT24iKX0sdW49e307W29qZSxtUWUsZ1FlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKHVuLHQpfSk7eVFlPXthbmltYXRlOnVuLmFuaW1hdGUoKSxhbmltYXRpb246dW4uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6dW4uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOnVuLmNsZWFyUXVldWUoKSxkZWxheTp1bi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOnVuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDp1bi5zdG9wKCl9LFI2PXtjbGFzc2VzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZihlPT09dm9pZCAwKXt2YXIgbj1bXTtyZXR1cm4gclswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIG4ucHVzaChnKX0pLG59ZWxzZSBFbihlKXx8KGU9KGV8fCIiKS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBpPVtdLGE9bmV3IGF5KGUpLHM9MDtzPHIubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPXJbc10sdT1sLl9wcml2YXRlLGg9dS5jbGFzc2VzLGY9ITEsZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLG09aC5oYXMocCk7aWYoIW0pe2Y9ITA7YnJlYWt9fWZ8fChmPWguc2l6ZSE9PWUubGVuZ3RoKSxmJiYodS5jbGFzc2VzPWEsaS5wdXNoKGwpKX1yZXR1cm4gaS5sZW5ndGg+MCYmdGhpcy5zcGF3bihpKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikscn0sImNsYXNzZXMiKSxhZGRDbGFzczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGUsITApfSwiYWRkQ2xhc3MiKSxoYXNDbGFzczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF07cmV0dXJuIHIhPW51bGwmJnIuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZSl9LCJoYXNDbGFzcyIpLHRvZ2dsZUNsYXNzOm8oZnVuY3Rpb24oZSxyKXtFbihlKXx8KGU9ZS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBuPXRoaXMsaT1yPT09dm9pZCAwLGE9W10scz0wLGw9bi5sZW5ndGg7czxsO3MrKylmb3IodmFyIHU9bltzXSxoPXUuX3ByaXZhdGUuY2xhc3NlcyxmPSExLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIHA9ZVtkXSxtPWguaGFzKHApLGc9ITE7cnx8aSYmIW0/KGguYWRkKHApLGc9ITApOighcnx8aSYmbSkmJihoLmRlbGV0ZShwKSxnPSEwKSwhZiYmZyYmKGEucHVzaCh1KSxmPSEwKX1yZXR1cm4gYS5sZW5ndGg+MCYmdGhpcy5zcGF3bihhKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksbn0sInRvZ2dsZUNsYXNzIikscmVtb3ZlQ2xhc3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhlLCExKX0sInJlbW92ZUNsYXNzIiksZmxhc2hDbGFzczpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZihyPT1udWxsKXI9MjUwO2Vsc2UgaWYocj09PTApcmV0dXJuIG47cmV0dXJuIG4uYWRkQ2xhc3MoZSksc2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlQ2xhc3MoZSl9LHIpLG59LCJmbGFzaENsYXNzIil9O1I2LmNsYXNzTmFtZT1SNi5jbGFzc05hbWVzPVI2LmNsYXNzZXM7VnI9e21ldGFDaGFyOiJbXFwhXFxcIlxcI1xcJFxcJVxcJlxcJ1xcKFxcKVxcKlxcK1xcLFxcLlxcL1xcOlxcO1xcPFxcPVxcPlxcP1xcQFxcW1xcXVxcXlxcYFxce1xcfFxcfVxcfl0iLGNvbXBhcmF0b3JPcDoiPXxcXCE9fD58Pj18PHw8PXxcXCQ9fFxcXj18XFwqPSIsYm9vbE9wOiJcXD98XFwhfFxcXiIsc3RyaW5nOmAiKD86XFxcXCJ8W14iXSkqInwnKD86XFxcXCd8W14nXSkqJ2AsbnVtYmVyOldpLG1ldGE6ImRlZ3JlZXxpbmRlZ3JlZXxvdXRkZWdyZWUiLHNlcGFyYXRvcjoiXFxzKixcXHMqIixkZXNjZW5kYW50OiJcXHMrIixjaGlsZDoiXFxzKz5cXHMrIixzdWJqZWN0OiJcXCQiLGdyb3VwOiJub2RlfGVkZ2V8XFwqIixkaXJlY3RlZEVkZ2U6IlxccystPlxccysiLHVuZGlyZWN0ZWRFZGdlOiJcXHMrPC0+XFxzKyJ9O1ZyLnZhcmlhYmxlPSIoPzpbXFx3LS5dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLmNsYXNzTmFtZT0iKD86W1xcdy1dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLnZhbHVlPVZyLnN0cmluZysifCIrVnIubnVtYmVyO1ZyLmlkPVZyLnZhcmlhYmxlOyhmdW5jdGlvbigpe3ZhciB0LGUscjtmb3IodD1Wci5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxyPTA7cjx0Lmxlbmd0aDtyKyspZT10W3JdLFZyLmNvbXBhcmF0b3JPcCs9InxAIitlO2Zvcih0PVZyLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHI9MDtyPHQubGVuZ3RoO3IrKyllPXRbcl0sIShlLmluZGV4T2YoIiEiKT49MCkmJmUhPT0iPSImJihWci5jb21wYXJhdG9yT3ArPSJ8XFwhIitlKX0pKCk7Z249byhmdW5jdGlvbigpe3JldHVybntjaGVja3M6W119fSwibmV3UXVlcnkiKSwkdD17R1JPVVA6MCxDT0xMRUNUSU9OOjEsRklMVEVSOjIsREFUQV9DT01QQVJFOjMsREFUQV9FWElTVDo0LERBVEFfQk9PTDo1LE1FVEFfQ09NUEFSRTo2LFNUQVRFOjcsSUQ6OCxDTEFTUzo5LFVORElSRUNURURfRURHRToxMCxESVJFQ1RFRF9FREdFOjExLE5PREVfU09VUkNFOjEyLE5PREVfVEFSR0VUOjEzLE5PREVfTkVJR0hCT1I6MTQsQ0hJTEQ6MTUsREVTQ0VOREFOVDoxNixQQVJFTlQ6MTcsQU5DRVNUT1I6MTgsQ09NUE9VTkRfU1BMSVQ6MTksVFJVRToyMH0sRUI9W3tzZWxlY3RvcjoiOnNlbGVjdGVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnNlbGVjdGFibGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RhYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuc2VsZWN0YWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGFibGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVubG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnZpc2libGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnZpc2libGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dHJhbnNwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc3BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpncmFiYmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpyZW1vdmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVtb3ZlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjppbnNpZGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5yZW1vdmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijp1bmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphbmltYXRlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hbmltYXRlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZGxlc3MiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkbGVzcygpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6b3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcnBoYW4oKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9ub3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTm9kZSgpP2UuaXNQYXJlbnQoKTplLnNvdXJjZSgpLmlzUGFyZW50KCl8fGUudGFyZ2V0KCkuaXNQYXJlbnQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9vcCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTG9vcCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpzaW1wbGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1NpbXBsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6aW5hY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6YmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX1dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gTHFlKHQuc2VsZWN0b3IsZS5zZWxlY3Rvcil9KSx2UWU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZSxyPTA7cjxFQi5sZW5ndGg7cisrKWU9RUJbcl0sdFtlLnNlbGVjdG9yXT1lLm1hdGNoZXM7cmV0dXJuIHR9KCkseFFlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdlFlW2VdKHIpfSwic3RhdGVTZWxlY3Rvck1hdGNoZXMiKSxiUWU9IigiK0VCLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3Rvcn0pLmpvaW4oInwiKSsiKSIsVTE9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitWci5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihyLG4pe3JldHVybiBufSl9LCJjbGVhbk1ldGFDaGFycyIpLFJmPW8oZnVuY3Rpb24oZSxyLG4pe2VbZS5sZW5ndGgtMV09bn0sInJlcGxhY2VMYXN0UXVlcnkiKSxTQj1be25hbWU6Imdyb3VwIixxdWVyeTohMCxyZWdleDoiKCIrVnIuZ3JvdXArIikiLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6JHQuR1JPVVAsdmFsdWU6YT09PSIqIj9hOmErInMifSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToic3RhdGUiLHF1ZXJ5OiEwLHJlZ2V4OmJRZSxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LlNUQVRFLHZhbHVlOmF9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK1ZyLmlkKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LklELHZhbHVlOlUxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrVnIuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNMQVNTLHZhbHVlOlUxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6JHQuREFUQV9FWElTVCxmaWVsZDpVMShhKX0pfSwicG9wdWxhdGUiKX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1ZyLnZhcmlhYmxlKyIpXFxzKigiK1ZyLmNvbXBhcmF0b3JPcCsiKVxccyooIitWci52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl0sdT1uZXcgUmVnRXhwKCJeIitWci5zdHJpbmcrIiQiKS5leGVjKGwpIT1udWxsO3U/bD1sLnN1YnN0cmluZygxLGwubGVuZ3RoLTEpOmw9cGFyc2VGbG9hdChsKSxyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkRBVEFfQ09NUEFSRSxmaWVsZDpVMShhKSxvcGVyYXRvcjpzLHZhbHVlOmx9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci5ib29sT3ArIilcXHMqKCIrVnIudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDIpLGE9aVswXSxzPWlbMV07ci5jaGVja3MucHVzaCh7dHlwZTokdC5EQVRBX0JPT0wsZmllbGQ6VTEocyksb3BlcmF0b3I6YX0pfSwicG9wdWxhdGUiKX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK1ZyLm1ldGErIilcXHMqKCIrVnIuY29tcGFyYXRvck9wKyIpXFxzKigiK1ZyLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl07ci5jaGVja3MucHVzaCh7dHlwZTokdC5NRVRBX0NPTVBBUkUsZmllbGQ6VTEoYSksb3BlcmF0b3I6cyx2YWx1ZTpwYXJzZUZsb2F0KGwpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6VnIuc2VwYXJhdG9yLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmN1cnJlbnRTdWJqZWN0LGk9ZS5lZGdlQ291bnQsYT1lLmNvbXBvdW5kQ291bnQscz1lW2UubGVuZ3RoLTFdO24hPW51bGwmJihzLnN1YmplY3Q9bixlLmN1cnJlbnRTdWJqZWN0PW51bGwpLHMuZWRnZUNvdW50PWkscy5jb21wb3VuZENvdW50PWEsZS5lZGdlQ291bnQ9MCxlLmNvbXBvdW5kQ291bnQ9MDt2YXIgbD1lW2UubGVuZ3RoKytdPWduKCk7cmV0dXJuIGx9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1nbigpLGk9cixhPWduKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JHQuRElSRUNURURfRURHRSxzb3VyY2U6aSx0YXJnZXQ6YX0pLFJmKGUscixuKSxlLmVkZ2VDb3VudCsrLGF9ZWxzZXt2YXIgcz1nbigpLGw9cix1PWduKCk7cmV0dXJuIHMuY2hlY2tzLnB1c2goe3R5cGU6JHQuTk9ERV9TT1VSQ0Usc291cmNlOmwsdGFyZ2V0OnV9KSxSZihlLHIscyksZS5lZGdlQ291bnQrKyx1fX0sInBvcHVsYXRlIil9LHtuYW1lOiJ1bmRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLnVuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1nbigpLGk9cixhPWduKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JHQuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltpLGFdfSksUmYoZSxyLG4pLGUuZWRnZUNvdW50KyssYX1lbHNle3ZhciBzPWduKCksbD1yLHU9Z24oKTtyZXR1cm4gcy5jaGVja3MucHVzaCh7dHlwZTokdC5OT0RFX05FSUdIQk9SLG5vZGU6bCxuZWlnaGJvcjp1fSksUmYoZSxyLHMpLHV9fSwicG9wdWxhdGUiKX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuY2hpbGQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPWduKCksaT1nbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokdC5DSElMRCxwYXJlbnQ6YSxjaGlsZDppfSksUmYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9Z24oKSxsPWVbZS5sZW5ndGgtMV0sdT1nbigpLGg9Z24oKSxmPWduKCksZD1nbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTokdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTokdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTokdC5QQVJFTlQscGFyZW50OmQsY2hpbGQ6Zn0pLFJmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPWduKCksbT1nbigpLGc9W3t0eXBlOiR0LlBBUkVOVCxwYXJlbnQ6cCxjaGlsZDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLmRlc2NlbmRhbnQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPWduKCksaT1nbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokdC5ERVNDRU5EQU5ULGFuY2VzdG9yOmEsZGVzY2VuZGFudDppfSksUmYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9Z24oKSxsPWVbZS5sZW5ndGgtMV0sdT1nbigpLGg9Z24oKSxmPWduKCksZD1nbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTokdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTokdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTokdC5BTkNFU1RPUixhbmNlc3RvcjpkLGRlc2NlbmRhbnQ6Zn0pLFJmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPWduKCksbT1nbigpLGc9W3t0eXBlOiR0LkFOQ0VTVE9SLGFuY2VzdG9yOnAsZGVzY2VuZGFudDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6VnIuc3ViamVjdCxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscil7aWYoZS5jdXJyZW50U3ViamVjdCE9bnVsbCYmZS5jdXJyZW50U3ViamVjdCE9PXIpcmV0dXJuIGhuKCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIitlLnRvU3RyaW5nKCkrImAiKSwhMTtlLmN1cnJlbnRTdWJqZWN0PXI7dmFyIG49ZVtlLmxlbmd0aC0xXSxpPW4uY2hlY2tzWzBdLGE9aT09bnVsbD9udWxsOmkudHlwZTthPT09JHQuRElSRUNURURfRURHRT9pLnR5cGU9JHQuTk9ERV9UQVJHRVQ6YT09PSR0LlVORElSRUNURURfRURHRSYmKGkudHlwZT0kdC5OT0RFX05FSUdIQk9SLGkubm9kZT1pLm5vZGVzWzFdLGkubmVpZ2hib3I9aS5ub2Rlc1swXSxpLm5vZGVzPW51bGwpfSwicG9wdWxhdGUiKX1dO1NCLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIrdC5yZWdleCl9KTtUUWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbixpLGE9MDthPFNCLmxlbmd0aDthKyspe3ZhciBzPVNCW2FdLGw9cy5uYW1lLHU9ZS5tYXRjaChzLnJlZ2V4T2JqKTtpZih1IT1udWxsKXtuPXUscj1zLGk9bDt2YXIgaD11WzBdO2U9ZS5zdWJzdHJpbmcoaC5sZW5ndGgpO2JyZWFrfX1yZXR1cm57ZXhwcjpyLG1hdGNoOm4sbmFtZTppLHJlbWFpbmluZzplfX0sImNvbnN1bWVFeHByIiksd1FlPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXRjaCgvXlxzKy8pO2lmKHIpe3ZhciBuPXJbMF07ZT1lLnN1YnN0cmluZyhuLmxlbmd0aCl9cmV0dXJuIGV9LCJjb25zdW1lV2hpdGVzcGFjZSIpLGtRZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmlucHV0VGV4dD1lLGk9clswXT1nbigpO2ZvcihyLmxlbmd0aD0xLG49d1FlKG4pOzspe3ZhciBhPVRRZShuKTtpZihhLmV4cHI9PW51bGwpcmV0dXJuIGhuKCJUaGUgc2VsZWN0b3IgYCIrZSsiYGlzIGludmFsaWQiKSwhMTt2YXIgcz1hLm1hdGNoLnNsaWNlKDEpLGw9YS5leHByLnBvcHVsYXRlKHIsaSxzKTtpZihsPT09ITEpcmV0dXJuITE7aWYobCE9bnVsbCYmKGk9bCksbj1hLnJlbWFpbmluZyxuLm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciB1PXJbci5sZW5ndGgtMV07ci5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHUuc3ViamVjdD1yLmN1cnJlbnRTdWJqZWN0KSx1LmVkZ2VDb3VudD1yLmVkZ2VDb3VudCx1LmNvbXBvdW5kQ291bnQ9ci5jb21wb3VuZENvdW50O2Zvcih2YXIgaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdO2lmKGYuY29tcG91bmRDb3VudD4wJiZmLmVkZ2VDb3VudD4wKXJldHVybiBobigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoZi5lZGdlQ291bnQ+MSlyZXR1cm4gaG4oIlRoZSBzZWxlY3RvciBgIitlKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Zi5lZGdlQ291bnQ9PT0xJiZobigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSwicGFyc2UiKSxFUWU9byhmdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZT1vKGZ1bmN0aW9uKGYpe3JldHVybiBmPz8iIn0sImNsZWFuIikscj1vKGZ1bmN0aW9uKGYpe3JldHVybiBadChmKT8nIicrZisnIic6ZShmKX0sImNsZWFuVmFsIiksbj1vKGZ1bmN0aW9uKGYpe3JldHVybiIgIitmKyIgIn0sInNwYWNlIiksaT1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi50eXBlLG09Zi52YWx1ZTtzd2l0Y2gocCl7Y2FzZSAkdC5HUk9VUDp7dmFyIGc9ZShtKTtyZXR1cm4gZy5zdWJzdHJpbmcoMCxnLmxlbmd0aC0xKX1jYXNlICR0LkRBVEFfQ09NUEFSRTp7dmFyIHk9Zi5maWVsZCx2PWYub3BlcmF0b3I7cmV0dXJuIlsiK3krbihlKHYpKStyKG0pKyJdIn1jYXNlICR0LkRBVEFfQk9PTDp7dmFyIHg9Zi5vcGVyYXRvcixiPWYuZmllbGQ7cmV0dXJuIlsiK2UoeCkrYisiXSJ9Y2FzZSAkdC5EQVRBX0VYSVNUOnt2YXIgVD1mLmZpZWxkO3JldHVybiJbIitUKyJdIn1jYXNlICR0Lk1FVEFfQ09NUEFSRTp7dmFyIFM9Zi5vcGVyYXRvcix3PWYuZmllbGQ7cmV0dXJuIltbIit3K24oZShTKSkrcihtKSsiXV0ifWNhc2UgJHQuU1RBVEU6cmV0dXJuIG07Y2FzZSAkdC5JRDpyZXR1cm4iIyIrbTtjYXNlICR0LkNMQVNTOnJldHVybiIuIittO2Nhc2UgJHQuUEFSRU5UOmNhc2UgJHQuQ0hJTEQ6cmV0dXJuIGEoZi5wYXJlbnQsZCkrbigiPiIpK2EoZi5jaGlsZCxkKTtjYXNlICR0LkFOQ0VTVE9SOmNhc2UgJHQuREVTQ0VOREFOVDpyZXR1cm4gYShmLmFuY2VzdG9yLGQpKyIgIithKGYuZGVzY2VuZGFudCxkKTtjYXNlICR0LkNPTVBPVU5EX1NQTElUOnt2YXIgRT1hKGYubGVmdCxkKSxfPWEoZi5zdWJqZWN0LGQpLEM9YShmLnJpZ2h0LGQpO3JldHVybiBFKyhFLmxlbmd0aD4wPyIgIjoiIikrXytDfWNhc2UgJHQuVFJVRTpyZXR1cm4iIn19LCJjaGVja1RvU3RyaW5nIiksYT1vKGZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihwLG0sZyl7cmV0dXJuIHArKGQ9PT1mJiZnPT09MD8iJCI6IiIpK2kobSxkKX0sIiIpfSwicXVlcnlUb1N0cmluZyIpLHM9IiIsbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzW2xdO3MrPWEodSx1LnN1YmplY3QpLHRoaXMubGVuZ3RoPjEmJmw8dGhpcy5sZW5ndGgtMSYmKHMrPSIsICIpfXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU9cyxzfSwidG9TdHJpbmciKSxTUWU9e3BhcnNlOmtRZSx0b1N0cmluZzpFUWV9LFlnZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhPVp0KGUpLHM9X3QoZSksbD1adChuKSx1LGgsZj0hMSxkPSExLHA9ITE7c3dpdGNoKHIuaW5kZXhPZigiISIpPj0wJiYocj1yLnJlcGxhY2UoIiEiLCIiKSxkPSEwKSxyLmluZGV4T2YoIkAiKT49MCYmKHI9ci5yZXBsYWNlKCJAIiwiIiksZj0hMCksKGF8fGx8fGYpJiYodT0hYSYmIXM/IiI6IiIrZSxoPSIiK24pLGYmJihlPXU9dS50b0xvd2VyQ2FzZSgpLG49aD1oLnRvTG93ZXJDYXNlKCkpLHIpe2Nhc2UiKj0iOmk9dS5pbmRleE9mKGgpPj0wO2JyZWFrO2Nhc2UiJD0iOmk9dS5pbmRleE9mKGgsdS5sZW5ndGgtaC5sZW5ndGgpPj0wO2JyZWFrO2Nhc2UiXj0iOmk9dS5pbmRleE9mKGgpPT09MDticmVhaztjYXNlIj0iOmk9ZT09PW47YnJlYWs7Y2FzZSI+IjpwPSEwLGk9ZT5uO2JyZWFrO2Nhc2UiPj0iOnA9ITAsaT1lPj1uO2JyZWFrO2Nhc2UiPCI6cD0hMCxpPWU8bjticmVhaztjYXNlIjw9IjpwPSEwLGk9ZTw9bjticmVhaztkZWZhdWx0Omk9ITE7YnJlYWt9cmV0dXJuIGQmJihlIT1udWxsfHwhcCkmJihpPSFpKSxpfSwidmFsQ21wIiksQ1FlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2gocil7Y2FzZSI/IjpyZXR1cm4hIWU7Y2FzZSIhIjpyZXR1cm4hZTtjYXNlIl4iOnJldHVybiBlPT09dm9pZCAwfX0sImJvb2xDbXAiKSxBUWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXZvaWQgMH0sImV4aXN0Q21wIiksakI9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRhdGEocil9LCJkYXRhIiksX1FlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVtyXSgpfSwibWV0YSIpLHBpPVtdLFZuPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5jaGVja3MuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHBpW24udHlwZV0obixyKX0pfSwibWF0Y2hlcyIpO3BpWyR0LkdST1VQXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHI9PT0iKiJ8fHI9PT1lLmdyb3VwKCl9O3BpWyR0LlNUQVRFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHhRZShyLGUpfTtwaVskdC5JRF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmlkKCk9PT1yfTtwaVskdC5DTEFTU109ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmhhc0NsYXNzKHIpfTtwaVskdC5NRVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5maWVsZCxuPXQub3BlcmF0b3IsaT10LnZhbHVlO3JldHVybiBZZ2UoX1FlKGUsciksbixpKX07cGlbJHQuREFUQV9DT01QQVJFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yLGk9dC52YWx1ZTtyZXR1cm4gWWdlKGpCKGUsciksbixpKX07cGlbJHQuREFUQV9CT09MXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yO3JldHVybiBDUWUoakIoZSxyKSxuKX07cGlbJHQuREFUQV9FWElTVF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZpZWxkO3JldHVybiB0Lm9wZXJhdG9yLEFRZShqQihlLHIpKX07cGlbJHQuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubm9kZXNbMF0sbj10Lm5vZGVzWzFdLGk9ZS5zb3VyY2UoKSxhPWUudGFyZ2V0KCk7cmV0dXJuIFZuKHIsaSkmJlZuKG4sYSl8fFZuKG4saSkmJlZuKHIsYSl9O3BpWyR0Lk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQubm9kZSxlKSYmZS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzTm9kZSgpJiZWbih0Lm5laWdoYm9yLHIpfSl9O3BpWyR0LkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQuc291cmNlLGUuc291cmNlKCkpJiZWbih0LnRhcmdldCxlLnRhcmdldCgpKX07cGlbJHQuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQuc291cmNlLGUpJiZlLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmVm4odC50YXJnZXQscil9KX07cGlbJHQuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQudGFyZ2V0LGUpJiZlLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmVm4odC5zb3VyY2Uscil9KX07cGlbJHQuQ0hJTERdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQuY2hpbGQsZSkmJlZuKHQucGFyZW50LGUucGFyZW50KCkpfTtwaVskdC5QQVJFTlRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQucGFyZW50LGUpJiZlLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gVm4odC5jaGlsZCxyKX0pfTtwaVskdC5ERVNDRU5EQU5UXT1mdW5jdGlvbih0LGUpe3JldHVybiBWbih0LmRlc2NlbmRhbnQsZSkmJmUuYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gVm4odC5hbmNlc3RvcixyKX0pfTtwaVskdC5BTkNFU1RPUl09ZnVuY3Rpb24odCxlKXtyZXR1cm4gVm4odC5hbmNlc3RvcixlKSYmZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIFZuKHQuZGVzY2VuZGFudCxyKX0pfTtwaVskdC5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gVm4odC5zdWJqZWN0LGUpJiZWbih0LmxlZnQsZSkmJlZuKHQucmlnaHQsZSl9O3BpWyR0LlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3BpWyR0LkNPTExFQ1RJT05dPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52YWx1ZTtyZXR1cm4gci5oYXMoZSl9O3BpWyR0LkZJTFRFUl09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiByKGUpfTtEUWU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHIubGVuZ3RoPT09MSYmclswXS5jaGVja3MubGVuZ3RoPT09MSYmclswXS5jaGVja3NbMF0udHlwZT09PSR0LklEKXJldHVybiBlLmdldEVsZW1lbnRCeUlkKHJbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIG49byhmdW5jdGlvbihhKXtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihWbihsLGEpKXJldHVybiEwfXJldHVybiExfSwic2VsZWN0b3JGdW5jdGlvbiIpO3JldHVybiByLnRleHQoKT09bnVsbCYmKG49byhmdW5jdGlvbigpe3JldHVybiEwfSwic2VsZWN0b3JGdW5jdGlvbiIpKSxlLmZpbHRlcihuKX0sImZpbHRlciIpLExRZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZihWbihpLGUpKXJldHVybiEwfXJldHVybiExfSwibWF0Y2hlcyIpLFJRZT17bWF0Y2hlczpMUWUsZmlsdGVyOkRRZX0sJGY9byhmdW5jdGlvbihlKXt0aGlzLmlucHV0VGV4dD1lLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsZT09bnVsbHx8WnQoZSkmJmUubWF0Y2goL15ccyokLyl8fCh4byhlKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOiR0LkNPTExFQ1RJT04sdmFsdWU6ZS5jb2xsZWN0aW9uKCl9XX0pOmxpKGUpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6JHQuRklMVEVSLHZhbHVlOmV9XX0pOlp0KGUpP3RoaXMucGFyc2UoZSl8fCh0aGlzLmludmFsaWQ9ITApOm9pKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LCJTZWxlY3RvciIpLHpmPSRmLnByb3RvdHlwZTtbU1FlLFJRZV0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaXIoemYsdCl9KTt6Zi50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fTt6Zi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofTt6Zi5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t0XX07emYuc2FtZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXQuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT10LnRleHQoKX07emYuYWRkUXVlcnk9ZnVuY3Rpb24odCl7dGhpc1t0aGlzLmxlbmd0aCsrXT10fTt6Zi5zZWxlY3Rvcj16Zi50b1N0cmluZztJZj17YWxsQXJlOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3ICRmKGUpO3JldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLm1hdGNoZXMobil9KX0sImFsbEFyZSIpLGlzOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3ICRmKGUpO3JldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIHIubWF0Y2hlcyhuKX0pfSwiaXMiKSxzb21lOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9cj9lLmFwcGx5KHIsW3RoaXNbbl0sbix0aGlzXSk6ZSh0aGlzW25dLG4sdGhpcyk7aWYoaSlyZXR1cm4hMH1yZXR1cm4hMX0sInNvbWUiKSxldmVyeTpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXI/ZS5hcHBseShyLFt0aGlzW25dLG4sdGhpc10pOmUodGhpc1tuXSxuLHRoaXMpO2lmKCFpKXJldHVybiExfXJldHVybiEwfSwiZXZlcnkiKSxzYW1lOm8oZnVuY3Rpb24oZSl7aWYodGhpcz09PWUpcmV0dXJuITA7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLmxlbmd0aCxuPWUubGVuZ3RoO3JldHVybiByIT09bj8hMTpyPT09MT90aGlzWzBdPT09ZVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKGkpe3JldHVybiBlLmhhc0VsZW1lbnRXaXRoSWQoaS5pZCgpKX0pfSwic2FtZSIpLGFueVNhbWU6byhmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKSx0aGlzLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIGUuaGFzRWxlbWVudFdpdGhJZChyLmlkKCkpfSl9LCJhbnlTYW1lIiksYWxsQXJlTmVpZ2hib3JzOm8oZnVuY3Rpb24oZSl7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLm5laWdoYm9yaG9vZCgpO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLmhhc0VsZW1lbnRXaXRoSWQobi5pZCgpKX0pfSwiYWxsQXJlTmVpZ2hib3JzIiksY29udGFpbnM6byhmdW5jdGlvbihlKXtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciByPXRoaXM7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHIuaGFzRWxlbWVudFdpdGhJZChuLmlkKCkpfSl9LCJjb250YWlucyIpfTtJZi5hbGxBcmVOZWlnaGJvdXJzPUlmLmFsbEFyZU5laWdoYm9ycztJZi5oYXM9SWYuY29udGFpbnM7SWYuZXF1YWw9SWYuZXF1YWxzPUlmLnNhbWU7YWw9byhmdW5jdGlvbihlLHIpe3JldHVybiBvKGZ1bmN0aW9uKGksYSxzLGwpe3ZhciB1PWksaD10aGlzLGY7aWYodT09bnVsbD9mPSIiOnhvKHUpJiZ1Lmxlbmd0aD09PTEmJihmPXUuaWQoKSksaC5sZW5ndGg9PT0xJiZmKXt2YXIgZD1oWzBdLl9wcml2YXRlLHA9ZC50cmF2ZXJzYWxDYWNoZT1kLnRyYXZlcnNhbENhY2hlfHx7fSxtPXBbcl09cFtyXXx8W10sZz1CZihmKSx5PW1bZ107cmV0dXJuIHl8fChtW2ddPWUuY2FsbChoLGksYSxzLGwpKX1lbHNlIHJldHVybiBlLmNhbGwoaCxpLGEscyxsKX0sInRyYXZlcnNhbENhY2hlIil9LCJjYWNoZSIpLGl5PXtwYXJlbnQ6byhmdW5jdGlvbihlKXt2YXIgcj1bXTtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBuPXRoaXNbMF0uX3ByaXZhdGUucGFyZW50O2lmKG4pcmV0dXJuIG59Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBhPXRoaXNbaV0scz1hLl9wcml2YXRlLnBhcmVudDtzJiZyLnB1c2gocyl9cmV0dXJuIHRoaXMuc3Bhd24ociwhMCkuZmlsdGVyKGUpfSwicGFyZW50IikscGFyZW50czpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMucGFyZW50KCk7bi5ub25lbXB0eSgpOyl7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ci5wdXNoKGEpfW49bi5wYXJlbnQoKX1yZXR1cm4gdGhpcy5zcGF3bihyLCEwKS5maWx0ZXIoZSl9LCJwYXJlbnRzIiksY29tbW9uQW5jZXN0b3JzOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpc1tuXSxhPWkucGFyZW50cygpO3I9cnx8YSxyPXIuaW50ZXJzZWN0KGEpfXJldHVybiByLmZpbHRlcihlKX0sImNvbW1vbkFuY2VzdG9ycyIpLG9ycGhhbnM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNPcnBoYW4oKX0pLmZpbHRlcihlKX0sIm9ycGhhbnMiKSxub25vcnBoYW5zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzQ2hpbGQoKX0pLmZpbHRlcihlKX0sIm5vbm9ycGhhbnMiKSxjaGlsZHJlbjphbChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWZvcih2YXIgbj10aGlzW3JdLGk9bi5fcHJpdmF0ZS5jaGlsZHJlbixhPTA7YTxpLmxlbmd0aDthKyspZS5wdXNoKGlbYV0pO3JldHVybiB0aGlzLnNwYXduKGUsITApLmZpbHRlcih0KX0sImNoaWxkcmVuIiksc2libGluZ3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoZSl9LCJzaWJsaW5ncyIpLGlzUGFyZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoIT09MH0sImlzUGFyZW50IiksaXNDaGlsZGxlc3M6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSwiaXNDaGlsZGxlc3MiKSxpc0NoaWxkOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50IT1udWxsfSwiaXNDaGlsZCIpLGlzT3JwaGFuOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50PT1udWxsfSwiaXNPcnBoYW4iKSxkZXNjZW5kYW50czpvKGZ1bmN0aW9uKGUpe3ZhciByPVtdO2Z1bmN0aW9uIG4oaSl7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07ci5wdXNoKHMpLHMuY2hpbGRyZW4oKS5ub25lbXB0eSgpJiZuKHMuY2hpbGRyZW4oKSl9fXJldHVybiBvKG4sImFkZCIpLG4odGhpcy5jaGlsZHJlbigpKSx0aGlzLnNwYXduKHIsITApLmZpbHRlcihlKX0sImRlc2NlbmRhbnRzIil9O28oS0IsImZvckVhY2hDb21wb3VuZCIpO28oWGdlLCJhZGRDaGlsZHJlbiIpO2l5LmZvckVhY2hEb3duPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gS0IodGhpcyx0LGUsWGdlKX07byhqZ2UsImFkZFBhcmVudCIpO2l5LmZvckVhY2hVcD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIEtCKHRoaXMsdCxlLGpnZSl9O28oTlFlLCJhZGRQYXJlbnRBbmRDaGlsZHJlbiIpO2l5LmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBLQih0aGlzLHQsZSxOUWUpfTtpeS5hbmNlc3RvcnM9aXkucGFyZW50cztvND1LZ2U9e2RhdGE6dW4uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOnVuLnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6dW4uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6dW4ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDp1bi5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6dW4ucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLl9wcml2YXRlLmRhdGEuaWR9LCJpZCIpfTtvNC5hdHRyPW80LmRhdGE7bzQucmVtb3ZlQXR0cj1vNC5yZW1vdmVEYXRhO01RZT1LZ2UsaUM9e307byhjQiwiZGVmaW5lRGVncmVlRnVuY3Rpb24iKTtpcihpQyx7ZGVncmVlOmNCKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZShlLnRhcmdldCgpKT8yOjF9KSxpbmRlZ3JlZTpjQihmdW5jdGlvbih0LGUpe3JldHVybiBlLnRhcmdldCgpLnNhbWUodCk/MTowfSksb3V0ZGVncmVlOmNCKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZSh0KT8xOjB9KX0pO28oSDEsImRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uIik7aXIoaUMse21pbkRlZ3JlZTpIMSgiZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhEZWdyZWU6SDEoImRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSksbWluSW5kZWdyZWU6SDEoImluZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhJbmRlZ3JlZTpIMSgiaW5kZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0pLG1pbk91dGRlZ3JlZTpIMSgib3V0ZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhPdXRkZWdyZWU6SDEoIm91dGRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSl9KTtpcihpQyx7dG90YWxEZWdyZWU6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPXRoaXMubm9kZXMoKSxpPTA7aTxuLmxlbmd0aDtpKyspcis9bltpXS5kZWdyZWUoZSk7cmV0dXJuIHJ9LCJ0b3RhbERlZ3JlZSIpfSk7WmdlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2lmKCFhLmxvY2tlZCgpKXt2YXIgcz1hLl9wcml2YXRlLnBvc2l0aW9uLGw9e3g6ci54IT1udWxsP3IueC1zLng6MCx5OnIueSE9bnVsbD9yLnktcy55OjB9O2EuaXNQYXJlbnQoKSYmIShsLng9PT0wJiZsLnk9PT0wKSYmYS5jaGlsZHJlbigpLnNoaWZ0KGwsbiksYS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSwiYmVmb3JlUG9zaXRpb25TZXQiKSxtbWU9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6byhmdW5jdGlvbihlKXtlLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihlLHIpe1pnZShlLHIsITEpfSwiYmVmb3JlU2V0Iiksb25TZXQ6byhmdW5jdGlvbihlKXtlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5sb2NrZWQoKX0sImNhblNldCIpfTtxbD1RZ2U9e3Bvc2l0aW9uOnVuLmRhdGEobW1lKSxzaWxlbnRQb3NpdGlvbjp1bi5kYXRhKGlyKHt9LG1tZSx7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0Om8oZnVuY3Rpb24oZSxyKXtaZ2UoZSxyLCEwKX0sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oZSl7ZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX0sIm9uU2V0Iil9KSkscG9zaXRpb25zOm8oZnVuY3Rpb24oZSxyKXtpZihVcihlKSlyP3RoaXMuc2lsZW50UG9zaXRpb24oZSk6dGhpcy5wb3NpdGlvbihlKTtlbHNlIGlmKGxpKGUpKXt2YXIgbj1lLGk9dGhpcy5jeSgpO2kuc3RhcnRCYXRjaCgpO2Zvcih2YXIgYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdLGw9dm9pZCAwOyhsPW4ocyxhKSkmJihyP3Muc2lsZW50UG9zaXRpb24obCk6cy5wb3NpdGlvbihsKSl9aS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwicG9zaXRpb25zIiksc2lsZW50UG9zaXRpb25zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKGUsITApfSwic2lsZW50UG9zaXRpb25zIiksc2hpZnQ6byhmdW5jdGlvbihlLHIsbil7dmFyIGk7aWYoVXIoZSk/KGk9e3g6X3QoZS54KT9lLng6MCx5Ol90KGUueSk/ZS55OjB9LG49cik6WnQoZSkmJl90KHIpJiYoaT17eDowLHk6MH0saVtlXT1yKSxpIT1udWxsKXt2YXIgYT10aGlzLmN5KCk7YS5zdGFydEJhdGNoKCk7Zm9yKHZhciBzPTA7czx0aGlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXNbc107aWYoIShhLmhhc0NvbXBvdW5kTm9kZXMoKSYmbC5pc0NoaWxkKCkmJmwuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciB1PWwucG9zaXRpb24oKSxoPXt4OnUueCtpLngseTp1LnkraS55fTtuP2wuc2lsZW50UG9zaXRpb24oaCk6bC5wb3NpdGlvbihoKX19YS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwic2hpZnQiKSxzaWxlbnRTaGlmdDpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFVyKGUpP3RoaXMuc2hpZnQoZSwhMCk6WnQoZSkmJl90KHIpJiZ0aGlzLnNoaWZ0KGUsciwhMCksdGhpc30sInNpbGVudFNoaWZ0IikscmVuZGVyZWRQb3NpdGlvbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpc1swXSxpPXRoaXMuY3koKSxhPWkuem9vbSgpLHM9aS5wYW4oKSxsPVVyKGUpP2U6dm9pZCAwLHU9bCE9PXZvaWQgMHx8ciE9PXZvaWQgMCYmWnQoZSk7aWYobiYmbi5pc05vZGUoKSlpZih1KWZvcih2YXIgaD0wO2g8dGhpcy5sZW5ndGg7aCsrKXt2YXIgZj10aGlzW2hdO3IhPT12b2lkIDA/Zi5wb3NpdGlvbihlLChyLXNbZV0pL2EpOmwhPT12b2lkIDAmJmYucG9zaXRpb24oRWdlKGwsYSxzKSl9ZWxzZXt2YXIgZD1uLnBvc2l0aW9uKCk7cmV0dXJuIGw9SjYoZCxhLHMpLGU9PT12b2lkIDA/bDpsW2VdfWVsc2UgaWYoIXUpcmV0dXJuO3JldHVybiB0aGlzfSwicmVuZGVyZWRQb3NpdGlvbiIpLHJlbGF0aXZlUG9zaXRpb246byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXNbMF0saT10aGlzLmN5KCksYT1VcihlKT9lOnZvaWQgMCxzPWEhPT12b2lkIDB8fHIhPT12b2lkIDAmJlp0KGUpLGw9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYobiYmbi5pc05vZGUoKSlpZihzKWZvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXt2YXIgaD10aGlzW3VdLGY9bD9oLnBhcmVudCgpOm51bGwsZD1mJiZmLmxlbmd0aD4wLHA9ZDtkJiYoZj1mWzBdKTt2YXIgbT1wP2YucG9zaXRpb24oKTp7eDowLHk6MH07ciE9PXZvaWQgMD9oLnBvc2l0aW9uKGUscittW2VdKTphIT09dm9pZCAwJiZoLnBvc2l0aW9uKHt4OmEueCttLngseTphLnkrbS55fSl9ZWxzZXt2YXIgZz1uLnBvc2l0aW9uKCkseT1sP24ucGFyZW50KCk6bnVsbCx2PXkmJnkubGVuZ3RoPjAseD12O3YmJih5PXlbMF0pO3ZhciBiPXg/eS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gYT17eDpnLngtYi54LHk6Zy55LWIueX0sZT09PXZvaWQgMD9hOmFbZV19ZWxzZSBpZighcylyZXR1cm47cmV0dXJuIHRoaXN9LCJyZWxhdGl2ZVBvc2l0aW9uIil9O3FsLm1vZGVsUG9zaXRpb249cWwucG9pbnQ9cWwucG9zaXRpb247cWwubW9kZWxQb3NpdGlvbnM9cWwucG9pbnRzPXFsLnBvc2l0aW9ucztxbC5yZW5kZXJlZFBvaW50PXFsLnJlbmRlcmVkUG9zaXRpb247cWwucmVsYXRpdmVQb2ludD1xbC5yZWxhdGl2ZVBvc2l0aW9uO0lRZT1RZ2U7ZXk9SGY9e307SGYucmVuZGVyZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJvdW5kaW5nQm94KHQpLHI9dGhpcy5jeSgpLG49ci56b29tKCksaT1yLnBhbigpLGE9ZS54MSpuK2kueCxzPWUueDIqbitpLngsbD1lLnkxKm4raS55LHU9ZS55MipuK2kueTtyZXR1cm57eDE6YSx4MjpzLHkxOmwseTI6dSx3OnMtYSxoOnUtbH19O0hmLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxlPXRoaXMuY3koKTtyZXR1cm4hZS5zdHlsZUVuYWJsZWQoKXx8IWUuaGFzQ29tcG91bmROb2RlcygpP3RoaXM6KHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uKHIpe2lmKHIuaXNQYXJlbnQoKSl7dmFyIG49ci5fcHJpdmF0ZTtuLmNvbXBvdW5kQm91bmRzQ2xlYW49ITEsbi5iYkNhY2hlPW51bGwsdHx8ci5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKX19KSx0aGlzKX07SGYudXBkYXRlQ29tcG91bmRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCl8fCFlLmhhc0NvbXBvdW5kTm9kZXMoKSlyZXR1cm4gdGhpcztpZighdCYmZS5iYXRjaGluZygpKXJldHVybiB0aGlzO2Z1bmN0aW9uIHIocyl7aWYoIXMuaXNQYXJlbnQoKSlyZXR1cm47dmFyIGw9cy5fcHJpdmF0ZSx1PXMuY2hpbGRyZW4oKSxoPXMucHN0eWxlKCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIpLnZhbHVlPT09ImluY2x1ZGUiLGY9e3dpZHRoOnt2YWw6cy5wc3R5bGUoIm1pbi13aWR0aCIpLnBmVmFsdWUsbGVmdDpzLnBzdHlsZSgibWluLXdpZHRoLWJpYXMtbGVmdCIpLHJpZ2h0OnMucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1yaWdodCIpfSxoZWlnaHQ6e3ZhbDpzLnBzdHlsZSgibWluLWhlaWdodCIpLnBmVmFsdWUsdG9wOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtdG9wIiksYm90dG9tOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIil9fSxkPXUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6aCxpbmNsdWRlT3ZlcmxheXM6ITEsdXNlQ2FjaGU6ITF9KSxwPWwucG9zaXRpb247KGQudz09PTB8fGQuaD09PTApJiYoZD17dzpzLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6cy5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LGQueDE9cC54LWQudy8yLGQueDI9cC54K2Qudy8yLGQueTE9cC55LWQuaC8yLGQueTI9cC55K2QuaC8yKTtmdW5jdGlvbiBtKEQsTyxSKXt2YXIgaz0wLEw9MCxBPU8rUjtyZXR1cm4gRD4wJiZBPjAmJihrPU8vQSpELEw9Ui9BKkQpLHtiaWFzRGlmZjprLGJpYXNDb21wbGVtZW50RGlmZjpMfX1vKG0sImNvbXB1dGVCaWFzVmFsdWVzIik7ZnVuY3Rpb24gZyhELE8sUixrKXtpZihSLnVuaXRzPT09IiUiKXN3aXRjaChrKXtjYXNlIndpZHRoIjpyZXR1cm4gRD4wP1IucGZWYWx1ZSpEOjA7Y2FzZSJoZWlnaHQiOnJldHVybiBPPjA/Ui5wZlZhbHVlKk86MDtjYXNlImF2ZXJhZ2UiOnJldHVybiBEPjAmJk8+MD9SLnBmVmFsdWUqKEQrTykvMjowO2Nhc2UibWluIjpyZXR1cm4gRD4wJiZPPjA/RD5PP1IucGZWYWx1ZSpPOlIucGZWYWx1ZSpEOjA7Y2FzZSJtYXgiOnJldHVybiBEPjAmJk8+MD9EPk8/Ui5wZlZhbHVlKkQ6Ui5wZlZhbHVlKk86MDtkZWZhdWx0OnJldHVybiAwfWVsc2UgcmV0dXJuIFIudW5pdHM9PT0icHgiP1IucGZWYWx1ZTowfW8oZywiY29tcHV0ZVBhZGRpbmdWYWx1ZXMiKTt2YXIgeT1mLndpZHRoLmxlZnQudmFsdWU7Zi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmZi53aWR0aC52YWw+MCYmKHk9eSoxMDAvZi53aWR0aC52YWwpO3ZhciB2PWYud2lkdGgucmlnaHQudmFsdWU7Zi53aWR0aC5yaWdodC51bml0cz09PSJweCImJmYud2lkdGgudmFsPjAmJih2PXYqMTAwL2Yud2lkdGgudmFsKTt2YXIgeD1mLmhlaWdodC50b3AudmFsdWU7Zi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmZi5oZWlnaHQudmFsPjAmJih4PXgqMTAwL2YuaGVpZ2h0LnZhbCk7dmFyIGI9Zi5oZWlnaHQuYm90dG9tLnZhbHVlO2YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJmYuaGVpZ2h0LnZhbD4wJiYoYj1iKjEwMC9mLmhlaWdodC52YWwpO3ZhciBUPW0oZi53aWR0aC52YWwtZC53LHksdiksUz1ULmJpYXNEaWZmLHc9VC5iaWFzQ29tcGxlbWVudERpZmYsRT1tKGYuaGVpZ2h0LnZhbC1kLmgseCxiKSxfPUUuYmlhc0RpZmYsQz1FLmJpYXNDb21wbGVtZW50RGlmZjtsLmF1dG9QYWRkaW5nPWcoZC53LGQuaCxzLnBzdHlsZSgicGFkZGluZyIpLHMucHN0eWxlKCJwYWRkaW5nLXJlbGF0aXZlLXRvIikudmFsdWUpLGwuYXV0b1dpZHRoPU1hdGgubWF4KGQudyxmLndpZHRoLnZhbCkscC54PSgtUytkLngxK2QueDIrdykvMixsLmF1dG9IZWlnaHQ9TWF0aC5tYXgoZC5oLGYuaGVpZ2h0LnZhbCkscC55PSgtXytkLnkxK2QueTIrQykvMn1vKHIsInVwZGF0ZSIpO2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9aS5fcHJpdmF0ZTsoIWEuY29tcG91bmRCb3VuZHNDbGVhbnx8dCkmJihyKGkpLGUuYmF0Y2hpbmcoKXx8KGEuY29tcG91bmRCb3VuZHNDbGVhbj0hMCkpfXJldHVybiB0aGlzfTtpbD1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09MS8wfHxlPT09LTEvMD8wOmV9LCJub25pbmYiKSxIbD1vKGZ1bmN0aW9uKGUscixuLGksYSl7aS1yPT09MHx8YS1uPT09MHx8cj09bnVsbHx8bj09bnVsbHx8aT09bnVsbHx8YT09bnVsbHx8KGUueDE9cjxlLngxP3I6ZS54MSxlLngyPWk+ZS54Mj9pOmUueDIsZS55MT1uPGUueTE/bjplLnkxLGUueTI9YT5lLnkyP2E6ZS55MixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEpfSwidXBkYXRlQm91bmRzIikscXA9byhmdW5jdGlvbihlLHIpe3JldHVybiByPT1udWxsP2U6SGwoZSxyLngxLHIueTEsci54MixyLnkyKX0sInVwZGF0ZUJvdW5kc0Zyb21Cb3giKSx6Yj1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gV2woZSxyLG4pfSwicHJlZml4ZWRQcm9wZXJ0eSIpLFQ2PW8oZnVuY3Rpb24oZSxyLG4pe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIGk9ci5fcHJpdmF0ZSxhPWkucnN0eWxlLHM9YS5hcnJvd1dpZHRoLzIsbD1yLnBzdHlsZShuKyItYXJyb3ctc2hhcGUiKS52YWx1ZSx1LGg7aWYobCE9PSJub25lIil7bj09PSJzb3VyY2UiPyh1PWEuc3JjWCxoPWEuc3JjWSk6bj09PSJ0YXJnZXQiPyh1PWEudGd0WCxoPWEudGd0WSk6KHU9YS5taWRYLGg9YS5taWRZKTt2YXIgZj1pLmFycm93Qm91bmRzPWkuYXJyb3dCb3VuZHN8fHt9LGQ9ZltuXT1mW25dfHx7fTtkLngxPXUtcyxkLnkxPWgtcyxkLngyPXUrcyxkLnkyPWgrcyxkLnc9ZC54Mi1kLngxLGQuaD1kLnkyLWQueTEsRDYoZCwxKSxIbChlLGQueDEsZC55MSxkLngyLGQueTIpfX19LCJ1cGRhdGVCb3VuZHNGcm9tQXJyb3ciKSx1Qj1vKGZ1bmN0aW9uKGUscixuKXtpZighci5jeSgpLmhlYWRsZXNzKCkpe3ZhciBpO24/aT1uKyItIjppPSIiO3ZhciBhPXIuX3ByaXZhdGUscz1hLnJzdHlsZSxsPXIucHN0eWxlKGkrImxhYmVsIikuc3RyVmFsdWU7aWYobCl7dmFyIHU9ci5wc3R5bGUoInRleHQtaGFsaWduIiksaD1yLnBzdHlsZSgidGV4dC12YWxpZ24iKSxmPXpiKHMsImxhYmVsV2lkdGgiLG4pLGQ9emIocywibGFiZWxIZWlnaHQiLG4pLHA9emIocywibGFiZWxYIixuKSxtPXpiKHMsImxhYmVsWSIsbiksZz1yLnBzdHlsZShpKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSx5PXIucHN0eWxlKGkrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLHY9ci5pc0VkZ2UoKSx4PXIucHN0eWxlKGkrInRleHQtcm90YXRpb24iKSxiPXIucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFQ9ci5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxTPVQvMix3PXIucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsRT0yLF89ZCxDPWYsRD1DLzIsTz1fLzIsUixrLEwsQTtpZih2KVI9cC1ELGs9cCtELEw9bS1PLEE9bStPO2Vsc2V7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6Uj1wLUMsaz1wO2JyZWFrO2Nhc2UiY2VudGVyIjpSPXAtRCxrPXArRDticmVhaztjYXNlInJpZ2h0IjpSPXAsaz1wK0M7YnJlYWt9c3dpdGNoKGgudmFsdWUpe2Nhc2UidG9wIjpMPW0tXyxBPW07YnJlYWs7Y2FzZSJjZW50ZXIiOkw9bS1PLEE9bStPO2JyZWFrO2Nhc2UiYm90dG9tIjpMPW0sQT1tK187YnJlYWt9fXZhciBJPWctTWF0aC5tYXgoYixTKS13LUUsTT1nK01hdGgubWF4KGIsUykrdytFLFA9eS1NYXRoLm1heChiLFMpLXctRSxCPXkrTWF0aC5tYXgoYixTKSt3K0U7Uis9SSxrKz1NLEwrPVAsQSs9Qjt2YXIgRj1ufHwibWFpbiIsej1hLmxhYmVsQm91bmRzLCQ9eltGXT16W0ZdfHx7fTskLngxPVIsJC55MT1MLCQueDI9aywkLnkyPUEsJC53PWstUiwkLmg9QS1MLCQubGVmdFBhZD1JLCQucmlnaHRQYWQ9TSwkLnRvcFBhZD1QLCQuYm90UGFkPUI7dmFyIFU9diYmeC5zdHJWYWx1ZT09PSJhdXRvcm90YXRlIixLPXgucGZWYWx1ZSE9bnVsbCYmeC5wZlZhbHVlIT09MDtpZihVfHxLKXt2YXIgZWU9VT96YihhLnJzdHlsZSwibGFiZWxBbmdsZSIsbik6eC5wZlZhbHVlLFk9TWF0aC5jb3MoZWUpLGNlPU1hdGguc2luKGVlKSxaPShSK2spLzIsdWU9KEwrQSkvMjtpZighdil7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6Wj1rO2JyZWFrO2Nhc2UicmlnaHQiOlo9UjticmVha31zd2l0Y2goaC52YWx1ZSl7Y2FzZSJ0b3AiOnVlPUE7YnJlYWs7Y2FzZSJib3R0b20iOnVlPUw7YnJlYWt9fXZhciBRPW8oZnVuY3Rpb24oc2UsYWUpe3JldHVybiBzZT1zZS1aLGFlPWFlLXVlLHt4OnNlKlktYWUqY2UrWix5OnNlKmNlK2FlKlkrdWV9fSwicm90YXRlIiksaj1RKFIsTCksbmU9UShSLEEpLHRlPVEoayxMKSxoZT1RKGssQSk7Uj1NYXRoLm1pbihqLngsbmUueCx0ZS54LGhlLngpLGs9TWF0aC5tYXgoai54LG5lLngsdGUueCxoZS54KSxMPU1hdGgubWluKGoueSxuZS55LHRlLnksaGUueSksQT1NYXRoLm1heChqLnksbmUueSx0ZS55LGhlLnkpfXZhciBsZT1GKyJSb3QiLEo9eltsZV09eltsZV18fHt9O0oueDE9UixKLnkxPUwsSi54Mj1rLEoueTI9QSxKLnc9ay1SLEouaD1BLUwsSGwoZSxSLEwsayxBKSxIbChhLmxhYmVsQm91bmRzLmFsbCxSLEwsayxBKX1yZXR1cm4gZX19LCJ1cGRhdGVCb3VuZHNGcm9tTGFiZWwiKSxPUWU9byhmdW5jdGlvbihlLHIpe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIG49ci5wc3R5bGUoIm91dGxpbmUtb3BhY2l0eSIpLnZhbHVlLGk9ci5wc3R5bGUoIm91dGxpbmUtd2lkdGgiKS52YWx1ZTtpZihuPjAmJmk+MCl7dmFyIGE9ci5wc3R5bGUoIm91dGxpbmUtb2Zmc2V0IikudmFsdWUscz1yLnBzdHlsZSgic2hhcGUiKS52YWx1ZSxsPWkrYSx1PShlLncrbCoyKS9lLncsaD0oZS5oK2wqMikvZS5oLGY9MCxkPTA7WyJkaWFtb25kIiwicGVudGFnb24iLCJyb3VuZC10cmlhbmdsZSJdLmluY2x1ZGVzKHMpPyh1PShlLncrbCoyLjQpL2UudyxkPS1sLzMuNik6WyJjb25jYXZlLWhleGFnb24iLCJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIl0uaW5jbHVkZXMocyk/dT0oZS53K2wqMi40KS9lLnc6cz09PSJzdGFyIj8odT0oZS53K2wqMi44KS9lLncsaD0oZS5oK2wqMi42KS9lLmgsZD0tbC8zLjgpOnM9PT0idHJpYW5nbGUiPyh1PShlLncrbCoyLjgpL2UudyxoPShlLmgrbCoyLjQpL2UuaCxkPS1sLzEuNCk6cz09PSJ2ZWUiJiYodT0oZS53K2wqNC40KS9lLncsaD0oZS5oK2wqMy44KS9lLmgsZD0tbCouNSk7dmFyIHA9ZS5oKmgtZS5oLG09ZS53KnUtZS53O2lmKEw2KGUsW01hdGguY2VpbChwLzIpLE1hdGguY2VpbChtLzIpXSksZiE9MHx8ZCE9PTApe3ZhciBnPXJYZShlLGYsZCk7Q2dlKGUsZyl9fX19LCJ1cGRhdGVCb3VuZHNGcm9tT3V0bGluZSIpLFBRZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5fcHJpdmF0ZS5jeSxpPW4uc3R5bGVFbmFibGVkKCksYT1uLmhlYWRsZXNzKCkscz1ZcygpLGw9ZS5fcHJpdmF0ZSx1PWUuaXNOb2RlKCksaD1lLmlzRWRnZSgpLGYsZCxwLG0sZyx5LHY9bC5yc3R5bGUseD11JiZpP2UucHN0eWxlKCJib3VuZHMtZXhwYW5zaW9uIikucGZWYWx1ZTpbMF0sYj1vKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU2UucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSJ9LCJpc0Rpc3BsYXllZCIpLFQ9IWl8fGIoZSkmJighaHx8YihlLnNvdXJjZSgpKSYmYihlLnRhcmdldCgpKSk7aWYoVCl7dmFyIFM9MCx3PTA7aSYmci5pbmNsdWRlT3ZlcmxheXMmJihTPWUucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSxTIT09MCYmKHc9ZS5wc3R5bGUoIm92ZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIEU9MCxfPTA7aSYmci5pbmNsdWRlVW5kZXJsYXlzJiYoRT1lLnBzdHlsZSgidW5kZXJsYXktb3BhY2l0eSIpLnZhbHVlLEUhPT0wJiYoXz1lLnBzdHlsZSgidW5kZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIEM9TWF0aC5tYXgodyxfKSxEPTAsTz0wO2lmKGkmJihEPWUucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsTz1ELzIpLHUmJnIuaW5jbHVkZU5vZGVzKXt2YXIgUj1lLnBvc2l0aW9uKCk7Zz1SLngseT1SLnk7dmFyIGs9ZS5vdXRlcldpZHRoKCksTD1rLzIsQT1lLm91dGVySGVpZ2h0KCksST1BLzI7Zj1nLUwsZD1nK0wscD15LUksbT15K0ksSGwocyxmLHAsZCxtKSxpJiZyLmluY2x1ZGVPdXRsaW5lcyYmT1FlKHMsZSl9ZWxzZSBpZihoJiZyLmluY2x1ZGVFZGdlcylpZihpJiYhYSl7dmFyIE09ZS5wc3R5bGUoImN1cnZlLXN0eWxlIikuc3RyVmFsdWU7aWYoZj1NYXRoLm1pbih2LnNyY1gsdi5taWRYLHYudGd0WCksZD1NYXRoLm1heCh2LnNyY1gsdi5taWRYLHYudGd0WCkscD1NYXRoLm1pbih2LnNyY1ksdi5taWRZLHYudGd0WSksbT1NYXRoLm1heCh2LnNyY1ksdi5taWRZLHYudGd0WSksZi09TyxkKz1PLHAtPU8sbSs9TyxIbChzLGYscCxkLG0pLE09PT0iaGF5c3RhY2siKXt2YXIgUD12LmhheXN0YWNrUHRzO2lmKFAmJlAubGVuZ3RoPT09Mil7aWYoZj1QWzBdLngscD1QWzBdLnksZD1QWzFdLngsbT1QWzFdLnksZj5kKXt2YXIgQj1mO2Y9ZCxkPUJ9aWYocD5tKXt2YXIgRj1wO3A9bSxtPUZ9SGwocyxmLU8scC1PLGQrTyxtK08pfX1lbHNlIGlmKE09PT0iYmV6aWVyInx8TT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8TS5lbmRzV2l0aCgic2VnbWVudHMiKXx8TS5lbmRzV2l0aCgidGF4aSIpKXt2YXIgejtzd2l0Y2goTSl7Y2FzZSJiZXppZXIiOmNhc2UidW5idW5kbGVkLWJlemllciI6ej12LmJlemllclB0czticmVhaztjYXNlInNlZ21lbnRzIjpjYXNlInRheGkiOmNhc2Uicm91bmQtc2VnbWVudHMiOmNhc2Uicm91bmQtdGF4aSI6ej12LmxpbmVQdHM7YnJlYWt9aWYoeiE9bnVsbClmb3IodmFyICQ9MDskPHoubGVuZ3RoOyQrKyl7dmFyIFU9elskXTtmPVUueC1PLGQ9VS54K08scD1VLnktTyxtPVUueStPLEhsKHMsZixwLGQsbSl9fX1lbHNle3ZhciBLPWUuc291cmNlKCksZWU9Sy5wb3NpdGlvbigpLFk9ZS50YXJnZXQoKSxjZT1ZLnBvc2l0aW9uKCk7aWYoZj1lZS54LGQ9Y2UueCxwPWVlLnksbT1jZS55LGY+ZCl7dmFyIFo9ZjtmPWQsZD1afWlmKHA+bSl7dmFyIHVlPXA7cD1tLG09dWV9Zi09TyxkKz1PLHAtPU8sbSs9TyxIbChzLGYscCxkLG0pfWlmKGkmJnIuaW5jbHVkZUVkZ2VzJiZoJiYoVDYocyxlLCJtaWQtc291cmNlIiksVDYocyxlLCJtaWQtdGFyZ2V0IiksVDYocyxlLCJzb3VyY2UiKSxUNihzLGUsInRhcmdldCIpKSxpKXt2YXIgUT1lLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKFEpe3ZhciBqPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsbmU9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZTtIbChzLHMueDEraixzLnkxK25lLHMueDIraixzLnkyK25lKX19dmFyIHRlPWwuYm9keUJvdW5kcz1sLmJvZHlCb3VuZHN8fHt9O1gwZSh0ZSxzKSxMNih0ZSx4KSxENih0ZSwxKSxpJiYoZj1zLngxLGQ9cy54MixwPXMueTEsbT1zLnkyLEhsKHMsZi1DLHAtQyxkK0MsbStDKSk7dmFyIGhlPWwub3ZlcmxheUJvdW5kcz1sLm92ZXJsYXlCb3VuZHN8fHt9O1gwZShoZSxzKSxMNihoZSx4KSxENihoZSwxKTt2YXIgbGU9bC5sYWJlbEJvdW5kcz1sLmxhYmVsQm91bmRzfHx7fTtsZS5hbGwhPW51bGw/dFhlKGxlLmFsbCk6bGUuYWxsPVlzKCksaSYmci5pbmNsdWRlTGFiZWxzJiYoci5pbmNsdWRlTWFpbkxhYmVscyYmdUIocyxlLG51bGwpLGgmJihyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJnVCKHMsZSwic291cmNlIiksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZ1QihzLGUsInRhcmdldCIpKSl9cmV0dXJuIHMueDE9aWwocy54MSkscy55MT1pbChzLnkxKSxzLngyPWlsKHMueDIpLHMueTI9aWwocy55Mikscy53PWlsKHMueDItcy54MSkscy5oPWlsKHMueTItcy55MSkscy53PjAmJnMuaD4wJiZUJiYoTDYocyx4KSxENihzLDEpKSxzfSwiYm91bmRpbmdCb3hJbXBsIiksSmdlPW8oZnVuY3Rpb24oZSl7dmFyIHI9MCxuPW8oZnVuY3Rpb24ocyl7cmV0dXJuKHM/MTowKTw8cisrfSwidGYiKSxpPTA7cmV0dXJuIGkrPW4oZS5pbmN1ZGVOb2RlcyksaSs9bihlLmluY2x1ZGVFZGdlcyksaSs9bihlLmluY2x1ZGVMYWJlbHMpLGkrPW4oZS5pbmNsdWRlTWFpbkxhYmVscyksaSs9bihlLmluY2x1ZGVTb3VyY2VMYWJlbHMpLGkrPW4oZS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxpKz1uKGUuaW5jbHVkZU92ZXJsYXlzKSxpKz1uKGUuaW5jbHVkZU91dGxpbmVzKSxpfSwiZ2V0S2V5IiksZTFlPW8oZnVuY3Rpb24oZSl7aWYoZS5pc0VkZ2UoKSl7dmFyIHI9ZS5zb3VyY2UoKS5wb3NpdGlvbigpLG49ZS50YXJnZXQoKS5wb3NpdGlvbigpLGk9byhmdW5jdGlvbihzKXtyZXR1cm4gTWF0aC5yb3VuZChzKX0sInIiKTtyZXR1cm4gd1llKFtpKHIueCksaShyLnkpLGkobi54KSxpKG4ueSldKX1lbHNlIHJldHVybiAwfSwiZ2V0Qm91bmRpbmdCb3hQb3NLZXkiKSxnbWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuX3ByaXZhdGUsaSxhPWUuaXNFZGdlKCkscz1yPT1udWxsP3ltZTpKZ2UociksbD1zPT09eW1lLHU9ZTFlKGUpLGg9bi5iYkNhY2hlUG9zS2V5PT09dSxmPXIudXNlQ2FjaGUmJmgsZD1vKGZ1bmN0aW9uKHkpe3JldHVybiB5Ll9wcml2YXRlLmJiQ2FjaGU9PW51bGx8fHkuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sImlzRGlydHkiKSxwPSFmfHxkKGUpfHxhJiYoZChlLnNvdXJjZSgpKXx8ZChlLnRhcmdldCgpKSk7aWYocD8oaHx8ZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZiksaT1QUWUoZSxsNCksbi5iYkNhY2hlPWksbi5iYkNhY2hlUG9zS2V5PXUpOmk9bi5iYkNhY2hlLCFsKXt2YXIgbT1lLmlzTm9kZSgpO2k9WXMoKSwoci5pbmNsdWRlTm9kZXMmJm18fHIuaW5jbHVkZUVkZ2VzJiYhbSkmJihyLmluY2x1ZGVPdmVybGF5cz9xcChpLG4ub3ZlcmxheUJvdW5kcyk6cXAoaSxuLmJvZHlCb3VuZHMpKSxyLmluY2x1ZGVMYWJlbHMmJihyLmluY2x1ZGVNYWluTGFiZWxzJiYoIWF8fHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmci5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9xcChpLG4ubGFiZWxCb3VuZHMuYWxsKTooci5pbmNsdWRlTWFpbkxhYmVscyYmcXAoaSxuLmxhYmVsQm91bmRzLm1haW5Sb3QpLHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmcXAoaSxuLmxhYmVsQm91bmRzLnNvdXJjZVJvdCksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZxcChpLG4ubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLGkudz1pLngyLWkueDEsaS5oPWkueTItaS55MX1yZXR1cm4gaX0sImNhY2hlZEJvdW5kaW5nQm94SW1wbCIpLGw0PXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0seW1lPUpnZShsNCksdm1lPW9hKGw0KTtIZi5ib3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZTtpZih0aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0uX3ByaXZhdGUuYmJDYWNoZSE9bnVsbCYmIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKHQ9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT0hMCkpdD09PXZvaWQgMD90PWw0OnQ9dm1lKHQpLGU9Z21lKHRoaXNbMF0sdCk7ZWxzZXtlPVlzKCksdD10fHxsNDt2YXIgcj12bWUodCksbj10aGlzLGk9bi5jeSgpLGE9aS5zdHlsZUVuYWJsZWQoKTtpZihhKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1uW3NdLHU9bC5fcHJpdmF0ZSxoPWUxZShsKSxmPXUuYmJDYWNoZVBvc0tleT09PWgsZD1yLnVzZUNhY2hlJiZmJiYhdS5zdHlsZURpcnR5O2wucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGQpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXQudXNlQ2FjaGUpO2Zvcih2YXIgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgbT1uW3BdO3FwKGUsZ21lKG0scikpfX1yZXR1cm4gZS54MT1pbChlLngxKSxlLnkxPWlsKGUueTEpLGUueDI9aWwoZS54MiksZS55Mj1pbChlLnkyKSxlLnc9aWwoZS54Mi1lLngxKSxlLmg9aWwoZS55Mi1lLnkxKSxlfTtIZi5kaXJ0eUJvdW5kaW5nQm94Q2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIGU9dGhpc1t0XS5fcHJpdmF0ZTtlLmJiQ2FjaGU9bnVsbCxlLmJiQ2FjaGVQb3NLZXk9bnVsbCxlLmJvZHlCb3VuZHM9bnVsbCxlLm92ZXJsYXlCb3VuZHM9bnVsbCxlLmxhYmVsQm91bmRzLmFsbD1udWxsLGUubGFiZWxCb3VuZHMuc291cmNlPW51bGwsZS5sYWJlbEJvdW5kcy50YXJnZXQ9bnVsbCxlLmxhYmVsQm91bmRzLm1haW49bnVsbCxlLmxhYmVsQm91bmRzLnNvdXJjZVJvdD1udWxsLGUubGFiZWxCb3VuZHMudGFyZ2V0Um90PW51bGwsZS5sYWJlbEJvdW5kcy5tYWluUm90PW51bGwsZS5hcnJvd0JvdW5kcy5zb3VyY2U9bnVsbCxlLmFycm93Qm91bmRzLnRhcmdldD1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC1zb3VyY2UiXT1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC10YXJnZXQiXT1udWxsfXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpLHRoaXN9O0hmLmJvdW5kaW5nQm94QXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ub2RlcygpLHI9dGhpcy5jeSgpLG49ci5oYXNDb21wb3VuZE5vZGVzKCksaT1yLmNvbGxlY3Rpb24oKTtpZihuJiYoaT1lLmZpbHRlcihmdW5jdGlvbihoKXtyZXR1cm4gaC5pc1BhcmVudCgpfSksZT1lLm5vdChpKSksVXIodCkpe3ZhciBhPXQ7dD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGF9LCJmbiIpfXZhciBzPW8oZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fcHJpdmF0ZS5iYkF0T2xkUG9zPXQoZixkKX0sInN0b3JlT2xkUG9zIiksbD1vKGZ1bmN0aW9uKGYpe3JldHVybiBmLl9wcml2YXRlLmJiQXRPbGRQb3N9LCJnZXRPbGRQb3MiKTtyLnN0YXJ0QmF0Y2goKSxlLmZvckVhY2gocykuc2lsZW50UG9zaXRpb25zKHQpLG4mJihpLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGkuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciB1PWVYZSh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZS5zaWxlbnRQb3NpdGlvbnMobCksbiYmKGkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksaS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxpLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSksci5lbmRCYXRjaCgpLHV9O2V5LmJvdW5kaW5nYm94PWV5LmJiPWV5LmJvdW5kaW5nQm94O2V5LnJlbmRlcmVkQm91bmRpbmdib3g9ZXkucmVuZGVyZWRCb3VuZGluZ0JveDtCUWU9SGY7WGI9ZzQ9e307dDFlPW8oZnVuY3Rpb24oZSl7ZS51cHBlcmNhc2VOYW1lPUcwZShlLm5hbWUpLGUuYXV0b05hbWU9ImF1dG8iK2UudXBwZXJjYXNlTmFtZSxlLmxhYmVsTmFtZT0ibGFiZWwiK2UudXBwZXJjYXNlTmFtZSxlLm91dGVyTmFtZT0ib3V0ZXIiK2UudXBwZXJjYXNlTmFtZSxlLnVwcGVyY2FzZU91dGVyTmFtZT1HMGUoZS5vdXRlck5hbWUpLFhiW2UubmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF0saT1uLl9wcml2YXRlLGE9aS5jeSxzPWEuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKG4paWYocyl7aWYobi5pc1BhcmVudCgpKXJldHVybiBuLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksaVtlLmF1dG9OYW1lXXx8MDt2YXIgbD1uLnBzdHlsZShlLm5hbWUpO3N3aXRjaChsLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gbi5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxpLnJzdHlsZVtlLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gbC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSwiZGltSW1wbCIpLFhiWyJvdXRlciIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXSxpPW4uX3ByaXZhdGUsYT1pLmN5LHM9YS5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQ7aWYobilpZihzKXt2YXIgbD1uW2UubmFtZV0oKSx1PW4ucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLGg9MipuLnBhZGRpbmcoKTtyZXR1cm4gbCt1K2h9ZWxzZSByZXR1cm4gMX0sIm91dGVyRGltSW1wbCIpLFhiWyJyZW5kZXJlZCIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXTtpZihuKXt2YXIgaT1uW2UubmFtZV0oKTtyZXR1cm4gaSp0aGlzLmN5KCkuem9vbSgpfX0sInJlbmRlcmVkRGltSW1wbCIpLFhiWyJyZW5kZXJlZCIrZS51cHBlcmNhc2VPdXRlck5hbWVdPW8oZnVuY3Rpb24oKXt2YXIgbj10aGlzWzBdO2lmKG4pe3ZhciBpPW5bZS5vdXRlck5hbWVdKCk7cmV0dXJuIGkqdGhpcy5jeSgpLnpvb20oKX19LCJyZW5kZXJlZE91dGVyRGltSW1wbCIpfSwiZGVmaW5lRGltRm5zIik7dDFlKHtuYW1lOiJ3aWR0aCJ9KTt0MWUoe25hbWU6ImhlaWdodCJ9KTtnNC5wYWRkaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXSxlPXQuX3ByaXZhdGU7cmV0dXJuIHQuaXNQYXJlbnQoKT8odC51cGRhdGVDb21wb3VuZEJvdW5kcygpLGUuYXV0b1BhZGRpbmchPT12b2lkIDA/ZS5hdXRvUGFkZGluZzp0LnBzdHlsZSgicGFkZGluZyIpLnBmVmFsdWUpOnQucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZX07ZzQucGFkZGVkSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtyZXR1cm4gdC5oZWlnaHQoKSsyKnQucGFkZGluZygpfTtnNC5wYWRkZWRXaWR0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQud2lkdGgoKSsyKnQucGFkZGluZygpfTtGUWU9ZzQsJFFlPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXJldHVybiByKGUpfSwiaWZFZGdlIikselFlPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXt2YXIgbj1lLmN5KCk7cmV0dXJuIEo2KHIoZSksbi56b29tKCksbi5wYW4oKSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbiIpLEdRZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSl7dmFyIG49ZS5jeSgpLGk9bi5wYW4oKSxhPW4uem9vbSgpO3JldHVybiByKGUpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gSjYocyxhLGkpfSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbnMiKSxWUWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldENvbnRyb2xQb2ludHMoZSl9LCJjb250cm9sUG9pbnRzIiksVVFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGUpfSwic2VnbWVudFBvaW50cyIpLEhRZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZSl9LCJzb3VyY2VFbmRwb2ludCIpLFdRZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0VGFyZ2V0RW5kcG9pbnQoZSl9LCJ0YXJnZXRFbmRwb2ludCIpLHFRZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KGUpfSwibWlkcG9pbnQiKSx4bWU9e2NvbnRyb2xQb2ludHM6e2dldDpWUWUsbXVsdDohMH0sc2VnbWVudFBvaW50czp7Z2V0OlVRZSxtdWx0OiEwfSxzb3VyY2VFbmRwb2ludDp7Z2V0OkhRZX0sdGFyZ2V0RW5kcG9pbnQ6e2dldDpXUWV9LG1pZHBvaW50OntnZXQ6cVFlfX0sWVFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuInJlbmRlcmVkIitlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSl9LCJyZW5kZXJlZE5hbWUiKSxYUWU9T2JqZWN0LmtleXMoeG1lKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj14bWVbZV0sbj1ZUWUoZSk7cmV0dXJuIHRbZV09ZnVuY3Rpb24oKXtyZXR1cm4gJFFlKHRoaXMsci5nZXQpfSxyLm11bHQ/dFtuXT1mdW5jdGlvbigpe3JldHVybiBHUWUodGhpcyxyLmdldCl9OnRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gelFlKHRoaXMsci5nZXQpfSx0fSx7fSksalFlPWlyKHt9LElRZSxCUWUsRlFlLFhRZSk7cjFlPW8oZnVuY3Rpb24oZSxyKXt0aGlzLnJlY3ljbGUoZSxyKX0sIkV2ZW50Iik7byhHYiwicmV0dXJuRmFsc2UiKTtvKHc2LCJyZXR1cm5UcnVlIik7cjFlLnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiJldmVudCJ9LCJpbnN0YW5jZVN0cmluZyIpLHJlY3ljbGU6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1HYixlIT1udWxsJiZlLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZD93NjpHYik6ZSE9bnVsbCYmZS50eXBlP3I9ZTp0aGlzLnR5cGU9ZSxyIT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXIub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9ci50eXBlIT1udWxsP3IudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT1yLmN5LHRoaXMudGFyZ2V0PXIudGFyZ2V0LHRoaXMucG9zaXRpb249ci5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249ci5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXIubmFtZXNwYWNlLHRoaXMubGF5b3V0PXIubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBuPXRoaXMucG9zaXRpb24saT10aGlzLmN5Lnpvb20oKSxhPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4Om4ueCppK2EueCx5Om4ueSppK2EueX19dGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fERhdGUubm93KCl9LCJyZWN5Y2xlIikscHJldmVudERlZmF1bHQ6byhmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXc2O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCl9LCJwcmV2ZW50RGVmYXVsdCIpLHN0b3BQcm9wYWdhdGlvbjpvKGZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD13Njt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7ZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCl9LCJzdG9wUHJvcGFnYXRpb24iKSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246byhmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dzYsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0sInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIpLGlzRGVmYXVsdFByZXZlbnRlZDpHYixpc1Byb3BhZ2F0aW9uU3RvcHBlZDpHYixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpHYn07bjFlPS9eKFteLl0rKShcLig/OlteLl0rKSk/JC8sS1FlPSIuKiIsaTFlPXtxdWFsaWZpZXJDb21wYXJlOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXJ9LCJxdWFsaWZpZXJDb21wYXJlIiksZXZlbnRNYXRjaGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oKXt9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiY2FsbGJhY2tDb250ZXh0IiksYmVmb3JlRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYmVmb3JlRW1pdCIpLGFmdGVyRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYWZ0ZXJFbWl0IiksYnViYmxlOm8oZnVuY3Rpb24oKXtyZXR1cm4hMX0sImJ1YmJsZSIpLHBhcmVudDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LCJwYXJlbnQiKSxjb250ZXh0Om51bGx9LGJtZT1PYmplY3Qua2V5cyhpMWUpLFFRZT17fTtvKGFDLCJFbWl0dGVyIik7R2Y9YUMucHJvdG90eXBlLGExZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe2xpKGkpJiYoYT1pLGk9bnVsbCksbCYmKHM9PW51bGw/cz1sOnM9aXIoe30scyxsKSk7Zm9yKHZhciB1PUVuKG4pP246bi5zcGxpdCgvXHMrLyksaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2lmKCFQZihmKSl7dmFyIGQ9Zi5tYXRjaChuMWUpO2lmKGQpe3ZhciBwPWRbMV0sbT1kWzJdP2RbMl06bnVsbCxnPXIoZSxmLHAsbSxpLGEscyk7aWYoZz09PSExKWJyZWFrfX19fSwiZm9yRWFjaEV2ZW50IiksVG1lPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5hZGRFdmVudEZpZWxkcyhlLmNvbnRleHQsciksbmV3IHIxZShyLnR5cGUscil9LCJtYWtlRXZlbnRPYmoiKSxaUWU9byhmdW5jdGlvbihlLHIsbil7aWYoeHFlKG4pKXtyKGUsbik7cmV0dXJufWVsc2UgaWYoVXIobikpe3IoZSxUbWUoZSxuKSk7cmV0dXJufWZvcih2YXIgaT1FbihuKT9uOm4uc3BsaXQoL1xzKy8pLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtpZighUGYocykpe3ZhciBsPXMubWF0Y2gobjFlKTtpZihsKXt2YXIgdT1sWzFdLGg9bFsyXT9sWzJdOm51bGwsZj1UbWUoZSx7dHlwZTp1LG5hbWVzcGFjZTpoLHRhcmdldDplLmNvbnRleHR9KTtyKGUsZil9fX19LCJmb3JFYWNoRXZlbnRPYmoiKTtHZi5vbj1HZi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBhMWUodGhpcyxmdW5jdGlvbihhLHMsbCx1LGgsZixkKXtsaShmKSYmYS5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6cyxjYWxsYmFjazpmLHR5cGU6bCxuYW1lc3BhY2U6dSxxdWFsaWZpZXI6aCxjb25mOmR9KX0sdCxlLHIsbixpKSx0aGlzfTtHZi5vbmU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMub24odCxlLHIsbix7b25lOiEwfSl9O0dmLnJlbW92ZUxpc3RlbmVyPUdmLm9mZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO3RoaXMuZW1pdHRpbmchPT0wJiYodGhpcy5saXN0ZW5lcnM9QVllKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBhPXRoaXMubGlzdGVuZXJzLHM9byhmdW5jdGlvbihoKXt2YXIgZj1hW2hdO2ExZShpLGZ1bmN0aW9uKGQscCxtLGcseSx2KXtpZigoZi50eXBlPT09bXx8dD09PSIqIikmJighZyYmZi5uYW1lc3BhY2UhPT0iLioifHxmLm5hbWVzcGFjZT09PWcpJiYoIXl8fGQucXVhbGlmaWVyQ29tcGFyZShmLnF1YWxpZmllcix5KSkmJighdnx8Zi5jYWxsYmFjaz09PXYpKXJldHVybiBhLnNwbGljZShoLDEpLCExfSx0LGUscixuKX0sIl9sb29wIiksbD1hLmxlbmd0aC0xO2w+PTA7bC0tKXMobCk7cmV0dXJuIHRoaXN9O0dmLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9O0dmLmVtaXQ9R2YudHJpZ2dlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5saXN0ZW5lcnMsaT1uLmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLEVuKGUpfHwoZT1bZV0pLFpRZSh0aGlzLGZ1bmN0aW9uKGEscyl7ciE9bnVsbCYmKG49W3tldmVudDpzLmV2ZW50LHR5cGU6cy50eXBlLG5hbWVzcGFjZTpzLm5hbWVzcGFjZSxjYWxsYmFjazpyfV0saT1uLmxlbmd0aCk7Zm9yKHZhciBsPW8oZnVuY3Rpb24oZil7dmFyIGQ9bltmXTtpZihkLnR5cGU9PT1zLnR5cGUmJighZC5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09cy5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09S1FlKSYmYS5ldmVudE1hdGNoZXMoYS5jb250ZXh0LGQscykpe3ZhciBwPVtzXTtlIT1udWxsJiZEWWUocCxlKSxhLmJlZm9yZUVtaXQoYS5jb250ZXh0LGQscyksZC5jb25mJiZkLmNvbmYub25lJiYoYS5saXN0ZW5lcnM9YS5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiB5IT09ZH0pKTt2YXIgbT1hLmNhbGxiYWNrQ29udGV4dChhLmNvbnRleHQsZCxzKSxnPWQuY2FsbGJhY2suYXBwbHkobSxwKTthLmFmdGVyRW1pdChhLmNvbnRleHQsZCxzKSxnPT09ITEmJihzLnN0b3BQcm9wYWdhdGlvbigpLHMucHJldmVudERlZmF1bHQoKSl9fSwiX2xvb3AyIiksdT0wO3U8aTt1KyspbCh1KTthLmJ1YmJsZShhLmNvbnRleHQpJiYhcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZhLnBhcmVudChhLmNvbnRleHQpLmVtaXQocyxlKX0sdCksdGhpcy5lbWl0dGluZy0tLHRoaXN9O0pRZT17cXVhbGlmaWVyQ29tcGFyZTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU9PW51bGx8fHI9PW51bGw/ZT09bnVsbCYmcj09bnVsbDplLnNhbWVUZXh0KHIpfSwicXVhbGlmaWVyQ29tcGFyZSIpLGV2ZW50TWF0Y2hlczpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLnF1YWxpZmllcjtyZXR1cm4gaSE9bnVsbD9lIT09bi50YXJnZXQmJmY0KG4udGFyZ2V0KSYmaS5tYXRjaGVzKG4udGFyZ2V0KTohMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oZSxyKXtyLmN5PWUuY3koKSxyLnRhcmdldD1lfSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHIucXVhbGlmaWVyIT1udWxsP24udGFyZ2V0OmV9LCJjYWxsYmFja0NvbnRleHQiKSxiZWZvcmVFbWl0Om8oZnVuY3Rpb24oZSxyKXtyLmNvbmYmJnIuY29uZi5vbmNlJiZyLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIoci5ldmVudCxyLnF1YWxpZmllcixyLmNhbGxiYWNrKX0sImJlZm9yZUVtaXQiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpP2UucGFyZW50KCk6ZS5jeSgpfSwicGFyZW50Iil9LGs2PW8oZnVuY3Rpb24oZSl7cmV0dXJuIFp0KGUpP25ldyAkZihlKTplfSwiYXJnU2VsZWN0b3IiKSxzMWU9e2NyZWF0ZUVtaXR0ZXI6byhmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdLG49ci5fcHJpdmF0ZTtuLmVtaXR0ZXJ8fChuLmVtaXR0ZXI9bmV3IGFDKEpRZSxyKSl9cmV0dXJuIHRoaXN9LCJjcmVhdGVFbWl0dGVyIiksZW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sImVtaXR0ZXIiKSxvbjpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9azYociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuKX1yZXR1cm4gdGhpc30sIm9uIikscmVtb3ZlTGlzdGVuZXI6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWs2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLGksbil9cmV0dXJuIHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV07ci5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCl9cmV0dXJuIHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWs2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbmUoZSxpLG4pfXJldHVybiB0aGlzfSwib25lIiksb25jZTpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9azYociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuLHtvbmNlOiEwLG9uY2VDb2xsZWN0aW9uOnRoaXN9KX19LCJvbmNlIiksZW1pdDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl07aS5lbWl0dGVyKCkuZW1pdChlLHIpfXJldHVybiB0aGlzfSwiZW1pdCIpLGVtaXRBbmROb3RpZnk6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShlLHRoaXMpLHRoaXMuZW1pdChlLHIpLHRoaXN9LCJlbWl0QW5kTm90aWZ5Iil9O3VuLmV2ZW50QWxpYXNlc09uKHMxZSk7bzFlPXtub2RlczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKX0pLmZpbHRlcihlKX0sIm5vZGVzIiksZWRnZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNFZGdlKCl9KS5maWx0ZXIoZSl9LCJlZGdlcyIpLGJ5R3JvdXA6byhmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnNwYXduKCkscj10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dO2kuaXNOb2RlKCk/ZS5wdXNoKGkpOnIucHVzaChpKX1yZXR1cm57bm9kZXM6ZSxlZGdlczpyfX0sImJ5R3JvdXAiKSxmaWx0ZXI6byhmdW5jdGlvbihlLHIpe2lmKGU9PT12b2lkIDApcmV0dXJuIHRoaXM7aWYoWnQoZSl8fHhvKGUpKXJldHVybiBuZXcgJGYoZSkuZmlsdGVyKHRoaXMpO2lmKGxpKGUpKXtmb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtsJiZuLnB1c2gocyl9cmV0dXJuIG59cmV0dXJuIHRoaXMuc3Bhd24oKX0sImZpbHRlciIpLG5vdDpvKGZ1bmN0aW9uKGUpe2lmKGUpe1p0KGUpJiYoZT10aGlzLmZpbHRlcihlKSk7Zm9yKHZhciByPXRoaXMuc3Bhd24oKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl0sYT1lLmhhcyhpKTthfHxyLnB1c2goaSl9cmV0dXJuIHJ9ZWxzZSByZXR1cm4gdGhpc30sIm5vdCIpLGFic29sdXRlQ29tcGxlbWVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO3JldHVybiBlLm11dGFibGVFbGVtZW50cygpLm5vdCh0aGlzKX0sImFic29sdXRlQ29tcGxlbWVudCIpLGludGVyc2VjdDpvKGZ1bmN0aW9uKGUpe2lmKFp0KGUpKXt2YXIgcj1lO3JldHVybiB0aGlzLmZpbHRlcihyKX1mb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPWUscz10aGlzLmxlbmd0aDxlLmxlbmd0aCxsPXM/aTphLHU9cz9hOmksaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO3UuaGFzKGYpJiZuLnB1c2goZil9cmV0dXJuIG59LCJpbnRlcnNlY3QiKSx4b3I6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O1p0KGUpJiYoZT1yLiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT1lLHM9byhmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgZD11W2ZdLHA9ZC5fcHJpdmF0ZS5kYXRhLmlkLG09aC5oYXNFbGVtZW50V2l0aElkKHApO218fG4ucHVzaChkKX19LCJhZGQiKTtyZXR1cm4gcyhpLGEpLHMoYSxpKSxufSwieG9yIiksZGlmZjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7WnQoZSkmJihlPXIuJChlKSk7dmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcy5zcGF3bigpLGE9dGhpcy5zcGF3bigpLHM9dGhpcyxsPWUsdT1vKGZ1bmN0aW9uKGYsZCxwKXtmb3IodmFyIG09MDttPGYubGVuZ3RoO20rKyl7dmFyIGc9ZlttXSx5PWcuX3ByaXZhdGUuZGF0YS5pZCx2PWQuaGFzRWxlbWVudFdpdGhJZCh5KTt2P2EubWVyZ2UoZyk6cC5wdXNoKGcpfX0sImFkZCIpO3JldHVybiB1KHMsbCxuKSx1KGwscyxpKSx7bGVmdDpuLHJpZ2h0OmksYm90aDphfX0sImRpZmYiKSxhZGQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O2lmKCFlKXJldHVybiB0aGlzO2lmKFp0KGUpKXt2YXIgbj1lO2U9ci5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9Zm9yKHZhciBpPXRoaXMuc3Bhd25TZWxmKCksYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgcz1lW2FdLGw9IXRoaXMuaGFzKHMpO2wmJmkucHVzaChzKX1yZXR1cm4gaX0sImFkZCIpLG1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIuY3k7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZSYmWnQoZSkpe3ZhciBpPWU7ZT1uLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihpKX1mb3IodmFyIGE9ci5tYXAscz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLHU9bC5fcHJpdmF0ZS5kYXRhLmlkLGg9IWEuaGFzKHUpO2lmKGgpe3ZhciBmPXRoaXMubGVuZ3RoKys7dGhpc1tmXT1sLGEuc2V0KHUse2VsZTpsLGluZGV4OmZ9KX19cmV0dXJuIHRoaXN9LCJtZXJnZSIpLHVubWVyZ2VBdDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbZV0sbj1yLmlkKCksaT10aGlzLl9wcml2YXRlLGE9aS5tYXA7dGhpc1tlXT12b2lkIDAsYS5kZWxldGUobik7dmFyIHM9ZT09PXRoaXMubGVuZ3RoLTE7aWYodGhpcy5sZW5ndGg+MSYmIXMpe3ZhciBsPXRoaXMubGVuZ3RoLTEsdT10aGlzW2xdLGg9dS5fcHJpdmF0ZS5kYXRhLmlkO3RoaXNbbF09dm9pZCAwLHRoaXNbZV09dSxhLnNldChoLHtlbGU6dSxpbmRleDplfSl9cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpc30sInVubWVyZ2VBdCIpLHVubWVyZ2VPbmU6byhmdW5jdGlvbihlKXtlPWVbMF07dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPWUuX3ByaXZhdGUuZGF0YS5pZCxpPXIubWFwLGE9aS5nZXQobik7aWYoIWEpcmV0dXJuIHRoaXM7dmFyIHM9YS5pbmRleDtyZXR1cm4gdGhpcy51bm1lcmdlQXQocyksdGhpc30sInVubWVyZ2VPbmUiKSx1bm1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtpZighZSlyZXR1cm4gdGhpcztpZihlJiZadChlKSl7dmFyIG49ZTtlPXIubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMudW5tZXJnZU9uZShlW2ldKTtyZXR1cm4gdGhpc30sInVubWVyZ2UiKSx1bm1lcmdlQnk6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49dGhpc1tyXTtlKG4pJiZ0aGlzLnVubWVyZ2VBdChyKX1yZXR1cm4gdGhpc30sInVubWVyZ2VCeSIpLG1hcDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPVtdLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtuLnB1c2gobCl9cmV0dXJuIG59LCJtYXAiKSxyZWR1Y2U6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspbj1lKG4saVthXSxhLGkpO3JldHVybiBufSwicmVkdWNlIiksbWF4Om8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49LTEvMCxpLGE9dGhpcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1yP2UuYXBwbHkocixbbCxzLGFdKTplKGwscyxhKTt1Pm4mJihuPXUsaT1sKX1yZXR1cm57dmFsdWU6bixlbGU6aX19LCJtYXgiKSxtaW46byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xLzAsaSxhPXRoaXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9cj9lLmFwcGx5KHIsW2wscyxhXSk6ZShsLHMsYSk7dTxuJiYobj11LGk9bCl9cmV0dXJue3ZhbHVlOm4sZWxlOml9fSwibWluIil9LFFyPW8xZTtRci51PVFyWyJ8Il09UXJbIisiXT1Rci51bmlvbj1Rci5vcj1Rci5hZGQ7UXJbIlxcIl09UXJbIiEiXT1RclsiLSJdPVFyLmRpZmZlcmVuY2U9UXIucmVsYXRpdmVDb21wbGVtZW50PVFyLnN1YnRyYWN0PVFyLm5vdDtRci5uPVFyWyImIl09UXJbIi4iXT1Rci5hbmQ9UXIuaW50ZXJzZWN0aW9uPVFyLmludGVyc2VjdDtRclsiXiJdPVFyWyIoKykiXT1RclsiKC0pIl09UXIuc3ltbWV0cmljRGlmZmVyZW5jZT1Rci5zeW1kaWZmPVFyLnhvcjtRci5mbkZpbHRlcj1Rci5maWx0ZXJGbj1Rci5zdGRGaWx0ZXI9UXIuZmlsdGVyO1FyLmNvbXBsZW1lbnQ9UXIuYWJzY29tcD1Rci5hYnNvbHV0ZUNvbXBsZW1lbnQ7ZVplPXtpc05vZGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0ibm9kZXMifSwiaXNOb2RlIiksaXNFZGdlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCgpPT09ImVkZ2VzIn0sImlzRWRnZSIpLGlzTG9vcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF09PT10aGlzLnRhcmdldCgpWzBdfSwiaXNMb29wIiksaXNTaW1wbGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRWRnZSgpJiZ0aGlzLnNvdXJjZSgpWzBdIT09dGhpcy50YXJnZXQoKVswXX0sImlzU2ltcGxlIiksZ3JvdXA6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5fcHJpdmF0ZS5ncm91cH0sImdyb3VwIil9LGwxZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jeSgpLGk9bi5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gYShmKXt2YXIgZD1mLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iP2k/Zi56RGVwdGgoKTowOmQudmFsdWU9PT0iYm90dG9tIj8tMTpkLnZhbHVlPT09InRvcCI/JEI6MH1vKGEsImdldERlcHRoIik7dmFyIHM9YShlKS1hKHIpO2lmKHMhPT0wKXJldHVybiBzO2Z1bmN0aW9uIGwoZil7dmFyIGQ9Zi5wc3R5bGUoInotaW5kZXgtY29tcGFyZSIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iJiZmLmlzTm9kZSgpPzE6MH1vKGwsImdldEVsZURlcHRoIik7dmFyIHU9bChlKS1sKHIpO2lmKHUhPT0wKXJldHVybiB1O3ZhciBoPWUucHN0eWxlKCJ6LWluZGV4IikudmFsdWUtci5wc3R5bGUoInotaW5kZXgiKS52YWx1ZTtyZXR1cm4gaCE9PTA/aDplLnBvb2xJbmRleCgpLXIucG9vbEluZGV4KCl9LCJ6SW5kZXhTb3J0IiksSDY9e2ZvckVhY2g6byhmdW5jdGlvbihlLHIpe2lmKGxpKGUpKWZvcih2YXIgbj10aGlzLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dGhpc1tpXSxzPXI/ZS5hcHBseShyLFthLGksdGhpc10pOmUoYSxpLHRoaXMpO2lmKHM9PT0hMSlicmVha31yZXR1cm4gdGhpc30sImZvckVhY2giKSx0b0FycmF5Om8oZnVuY3Rpb24oKXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWUucHVzaCh0aGlzW3JdKTtyZXR1cm4gZX0sInRvQXJyYXkiKSxzbGljZTpvKGZ1bmN0aW9uKGUscil7dmFyIG49W10saT10aGlzLmxlbmd0aDtyPT1udWxsJiYocj1pKSxlPT1udWxsJiYoZT0wKSxlPDAmJihlPWkrZSkscjwwJiYocj1pK3IpO2Zvcih2YXIgYT1lO2E+PTAmJmE8ciYmYTxpO2ErKyluLnB1c2godGhpc1thXSk7cmV0dXJuIHRoaXMuc3Bhd24obil9LCJzbGljZSIpLHNpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sInNpemUiKSxlcTpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfHx0aGlzLnNwYXduKCl9LCJlcSIpLGZpcnN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXXx8dGhpcy5zcGF3bigpfSwiZmlyc3QiKSxsYXN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSwibGFzdCIpLGVtcHR5Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9PT0wfSwiZW1wdHkiKSxub25lbXB0eTpvKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sIm5vbmVtcHR5Iiksc29ydDpvKGZ1bmN0aW9uKGUpe2lmKCFsaShlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLnRvQXJyYXkoKS5zb3J0KGUpO3JldHVybiB0aGlzLnNwYXduKHIpfSwic29ydCIpLHNvcnRCeVpJbmRleDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChsMWUpfSwic29ydEJ5WkluZGV4IiksekRlcHRoOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpe3ZhciByPWUuX3ByaXZhdGUsbj1yLmdyb3VwO2lmKG49PT0ibm9kZXMiKXt2YXIgaT1yLmRhdGEucGFyZW50P2UucGFyZW50cygpLnNpemUoKTowO3JldHVybiBlLmlzUGFyZW50KCk/aTokQi0xfWVsc2V7dmFyIGE9ci5zb3VyY2Uscz1yLnRhcmdldCxsPWEuekRlcHRoKCksdT1zLnpEZXB0aCgpO3JldHVybiBNYXRoLm1heChsLHUsMCl9fX0sInpEZXB0aCIpfTtINi5lYWNoPUg2LmZvckVhY2g7dFplPW8oZnVuY3Rpb24oKXt2YXIgZT0idW5kZWZpbmVkIixyPSh0eXBlb2YgU3ltYm9sPiJ1Ij8idW5kZWZpbmVkIjpxaShTeW1ib2wpKSE9ZSYmcWkoU3ltYm9sLml0ZXJhdG9yKSE9ZTtyJiYoSDZbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBuPXRoaXMsaT17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LGE9MCxzPXRoaXMubGVuZ3RoO3JldHVybiBpZ2Uoe25leHQ6byhmdW5jdGlvbigpe3JldHVybiBhPHM/aS52YWx1ZT1uW2ErK106KGkudmFsdWU9dm9pZCAwLGkuZG9uZT0hMCksaX0sIm5leHQiKX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfSwiZGVmaW5lU3ltYm9sSXRlcmF0b3IiKTt0WmUoKTtyWmU9b2Eoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMX0pLE42PXtsYXlvdXREaW1lbnNpb25zOm8oZnVuY3Rpb24oZSl7ZT1yWmUoZSk7dmFyIHI7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpcj17dzowLGg6MH07ZWxzZSBpZihlLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIG49dGhpcy5ib3VuZGluZ0JveCgpO3I9e3c6bi53LGg6bi5ofX1lbHNlIHI9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybihyLnc9PT0wfHxyLmg9PT0wKSYmKHIudz1yLmg9MSkscn0sImxheW91dERpbWVuc2lvbnMiKSxsYXlvdXRQb3NpdGlvbnM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih3KXtyZXR1cm4hdy5pc1BhcmVudCgpfSksYT10aGlzLmN5KCkscz1yLmVsZXMsbD1vKGZ1bmN0aW9uKEUpe3JldHVybiBFLmlkKCl9LCJnZXRNZW1vaXplS2V5IiksdT1lNChuLGwpO2UuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDplfSksZS5hbmltYXRpb25zPVtdO3ZhciBoPW8oZnVuY3Rpb24oRSxfLEMpe3ZhciBEPXt4Ol8ueDErXy53LzIseTpfLnkxK18uaC8yfSxPPXt4OihDLngtRC54KSpFLHk6KEMueS1ELnkpKkV9O3JldHVybnt4OkQueCtPLngseTpELnkrTy55fX0sImNhbGN1bGF0ZVNwYWNpbmciKSxmPXIuc3BhY2luZ0ZhY3RvciYmci5zcGFjaW5nRmFjdG9yIT09MSxkPW8oZnVuY3Rpb24oKXtpZighZilyZXR1cm4gbnVsbDtmb3IodmFyIEU9WXMoKSxfPTA7XzxpLmxlbmd0aDtfKyspe3ZhciBDPWlbX10sRD11KEMsXyk7blhlKEUsRC54LEQueSl9cmV0dXJuIEV9LCJzcGFjaW5nQmIiKSxwPWQoKSxtPWU0KGZ1bmN0aW9uKHcsRSl7dmFyIF89dSh3LEUpO2lmKGYpe3ZhciBDPU1hdGguYWJzKHIuc3BhY2luZ0ZhY3Rvcik7Xz1oKEMscCxfKX1yZXR1cm4gci50cmFuc2Zvcm0hPW51bGwmJihfPXIudHJhbnNmb3JtKHcsXykpLF99LGwpO2lmKHIuYW5pbWF0ZSl7Zm9yKHZhciBnPTA7ZzxpLmxlbmd0aDtnKyspe3ZhciB5PWlbZ10sdj1tKHksZykseD1yLmFuaW1hdGVGaWx0ZXI9PW51bGx8fHIuYW5pbWF0ZUZpbHRlcih5LGcpO2lmKHgpe3ZhciBiPXkuYW5pbWF0aW9uKHtwb3NpdGlvbjp2LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goYil9ZWxzZSB5LnBvc2l0aW9uKHYpfWlmKHIuZml0KXt2YXIgVD1hLmFuaW1hdGlvbih7Zml0Ontib3VuZGluZ0JveDpzLmJvdW5kaW5nQm94QXQobSkscGFkZGluZzpyLnBhZGRpbmd9LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goVCl9ZWxzZSBpZihyLnpvb20hPT12b2lkIDAmJnIucGFuIT09dm9pZCAwKXt2YXIgUz1hLmFuaW1hdGlvbih7em9vbTpyLnpvb20scGFuOnIucGFuLGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goUyl9ZS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24odyl7cmV0dXJuIHcucGxheSgpfSksZS5vbmUoImxheW91dHJlYWR5IixyLnJlYWR5KSxlLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6ZX0pLHN5LmFsbChlLmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3LnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbmUoImxheW91dHN0b3AiLHIuc3RvcCksZS5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZX0pfSl9ZWxzZSBpLnBvc2l0aW9ucyhtKSxyLmZpdCYmYS5maXQoci5lbGVzLHIucGFkZGluZyksci56b29tIT1udWxsJiZhLnpvb20oci56b29tKSxyLnBhbiYmYS5wYW4oci5wYW4pLGUub25lKCJsYXlvdXRyZWFkeSIsci5yZWFkeSksZS5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OmV9KSxlLm9uZSgibGF5b3V0c3RvcCIsci5zdG9wKSxlLmVtaXQoe3R5cGU6ImxheW91dHN0b3AiLGxheW91dDplfSk7cmV0dXJuIHRoaXN9LCJsYXlvdXRQb3NpdGlvbnMiKSxsYXlvdXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7cmV0dXJuIHIubWFrZUxheW91dChpcih7fSxlLHtlbGVzOnRoaXN9KSl9LCJsYXlvdXQiKX07TjYuY3JlYXRlTGF5b3V0PU42Lm1ha2VMYXlvdXQ9TjYubGF5b3V0O28oYzFlLCJzdHlsZUNhY2hlIik7byhzQywiY2FjaGVTdHlsZUZ1bmN0aW9uIik7byhvQywiY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uIik7RWE9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXIucmVuZGVyZXIoKSxpPXIuc3R5bGVFbmFibGVkKCk7cmV0dXJuIG4mJmkmJm4ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHRoaXMsZSksdGhpc30sInJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSIpLGRpcnR5U3R5bGVDYWNoZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpLHI9byhmdW5jdGlvbihhKXtyZXR1cm4gYS5fcHJpdmF0ZS5zdHlsZUNhY2hlPW51bGx9LCJkaXJ0eSIpO2lmKGUuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgbjtuPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSksbi5tZXJnZShuLmNvbm5lY3RlZEVkZ2VzKCkpLG4uZm9yRWFjaChyKX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihpKXtyKGkpLGkuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHIpfSk7cmV0dXJuIHRoaXN9LCJkaXJ0eVN0eWxlQ2FjaGUiKSx1cGRhdGVTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYoci5iYXRjaGluZygpKXt2YXIgbj1yLl9wcml2YXRlLmJhdGNoU3R5bGVFbGVzO3JldHVybiBuLm1lcmdlKHRoaXMpLHRoaXN9dmFyIGk9ci5oYXNDb21wb3VuZE5vZGVzKCksYT10aGlzO2U9ISEoZXx8ZT09PXZvaWQgMCksaSYmKGE9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIHM9YTtyZXR1cm4gZT9zLmVtaXRBbmROb3RpZnkoInN0eWxlIik6cy5lbWl0KCJzdHlsZSIpLGEuZm9yRWFjaChmdW5jdGlvbihsKXtyZXR1cm4gbC5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sInVwZGF0ZVN0eWxlIiksY2xlYW5TdHlsZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKGUuc3R5bGVFbmFibGVkKCkpZm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXNbcl07bi5fcHJpdmF0ZS5zdHlsZURpcnR5JiYobi5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGUuc3R5bGUoKS5hcHBseShuKSl9fSwiY2xlYW5TdHlsZSIpLHBhcnNlZFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLG49dGhpc1swXSxpPW4uY3koKTtpZihpLnN0eWxlRW5hYmxlZCgpJiZuKXtuLl9wcml2YXRlLnN0eWxlRGlydHkmJihuLl9wcml2YXRlLnN0eWxlRGlydHk9ITEsaS5zdHlsZSgpLmFwcGx5KG4pKTt2YXIgYT1uLl9wcml2YXRlLnN0eWxlW2VdO3JldHVybiBhPz8ocj9pLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGUpOm51bGwpfX0sInBhcnNlZFN0eWxlIiksbnVtZXJpY1N0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXTtpZihyLmN5KCkuc3R5bGVFbmFibGVkKCkmJnIpe3ZhciBuPXIucHN0eWxlKGUpO3JldHVybiBuLnBmVmFsdWUhPT12b2lkIDA/bi5wZlZhbHVlOm4udmFsdWV9fSwibnVtZXJpY1N0eWxlIiksbnVtZXJpY1N0eWxlVW5pdHM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdO2lmKHIuY3koKS5zdHlsZUVuYWJsZWQoKSYmcilyZXR1cm4gci5wc3R5bGUoZSkudW5pdHN9LCJudW1lcmljU3R5bGVVbml0cyIpLHJlbmRlcmVkU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiByLnN0eWxlKCkuZ2V0UmVuZGVyZWRTdHlsZShuLGUpfSwicmVuZGVyZWRTdHlsZSIpLHN0eWxlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmN5KCk7aWYoIW4uc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIGk9ITEsYT1uLnN0eWxlKCk7aWYoVXIoZSkpe3ZhciBzPWU7YS5hcHBseUJ5cGFzcyh0aGlzLHMsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYoWnQoZSkpaWYocj09PXZvaWQgMCl7dmFyIGw9dGhpc1swXTtyZXR1cm4gbD9hLmdldFN0eWxlUHJvcGVydHlWYWx1ZShsLGUpOnZvaWQgMH1lbHNlIGEuYXBwbHlCeXBhc3ModGhpcyxlLHIsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZT09PXZvaWQgMCl7dmFyIHU9dGhpc1swXTtyZXR1cm4gdT9hLmdldFJhd1N0eWxlKHUpOnZvaWQgMH1yZXR1cm4gdGhpc30sInN0eWxlIikscmVtb3ZlU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49ITEsaT1yLnN0eWxlKCksYT10aGlzO2lmKGU9PT12b2lkIDApZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aS5yZW1vdmVBbGxCeXBhc3NlcyhsLG4pfWVsc2V7ZT1lLnNwbGl0KC9ccysvKTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGg9YVt1XTtpLnJlbW92ZUJ5cGFzc2VzKGgsZSxuKX19cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSx0aGlzfSwicmVtb3ZlU3R5bGUiKSxzaG93Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJlbGVtZW50IiksdGhpc30sInNob3ciKSxoaWRlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJub25lIiksdGhpc30sImhpZGUiKSxlZmZlY3RpdmVPcGFjaXR5Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHI9ZS5oYXNDb21wb3VuZE5vZGVzKCksbj10aGlzWzBdO2lmKG4pe3ZhciBpPW4uX3ByaXZhdGUsYT1uLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCFyKXJldHVybiBhO3ZhciBzPWkuZGF0YS5wYXJlbnQ/bi5wYXJlbnRzKCk6bnVsbDtpZihzKWZvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdLGg9dS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTthPWgqYX1yZXR1cm4gYX19LCJlZmZlY3RpdmVPcGFjaXR5IiksdHJhbnNwYXJlbnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcj10aGlzWzBdLG49ci5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihyKXJldHVybiBuP3IuZWZmZWN0aXZlT3BhY2l0eSgpPT09MDpyLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlPT09MH0sInRyYW5zcGFyZW50IiksYmFja2dyb3VuZGluZzpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciByPXRoaXNbMF07cmV0dXJuISFyLl9wcml2YXRlLmJhY2tncm91bmRpbmd9LCJiYWNrZ3JvdW5kaW5nIil9O28oaEIsImNoZWNrQ29tcG91bmQiKTtvKFFCLCJkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbiIpO3V5PXNDKCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ0LndpZHRoKCkhPT0wJiYodC5pc05vZGUoKT90LmhlaWdodCgpIT09MDohMCl9KTtFYS50YWtlc1VwU3BhY2U9b0MoInRha2VzVXBTcGFjZSIsUUIoe29rOnV5fSkpO25aZT1zQygiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdXkodCl9KSxpWmU9c0MoInBhcmVudEludGVyYWN0aXZlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdXkodCl9KTtFYS5pbnRlcmFjdGl2ZT1vQygiaW50ZXJhY3RpdmUiLFFCKHtvazpuWmUscGFyZW50T2s6aVplLGVkZ2VPa1ZpYU5vZGU6dXl9KSk7RWEubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQuaW50ZXJhY3RpdmUoKX07YVplPXNDKCJlbGVWaXNpYmxlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdC5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmdXkodCl9KSxzWmU9dXk7RWEudmlzaWJsZT1vQygidmlzaWJsZSIsUUIoe29rOmFaZSxlZGdlT2tWaWFOb2RlOnNaZX0pKTtFYS5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQudmlzaWJsZSgpfTtFYS5pc0J1bmRsZWRCZXppZXI9b0MoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pO0VhLmJ5cGFzcz1FYS5jc3M9RWEuc3R5bGU7RWEucmVuZGVyZWRDc3M9RWEucmVuZGVyZWRTdHlsZTtFYS5yZW1vdmVCeXBhc3M9RWEucmVtb3ZlQ3NzPUVhLnJlbW92ZVN0eWxlO0VhLnBzdHlsZT1FYS5wYXJzZWRTdHlsZTtPZj17fTtvKHdtZSwiZGVmaW5lU3dpdGNoRnVuY3Rpb24iKTtvKGh5LCJkZWZpbmVTd2l0Y2hTZXQiKTtoeSh7ZmllbGQ6ImxvY2tlZCIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b2xvY2soKT8hMDp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImxvY2siLG9mZjoidW5sb2NrIn0pO2h5KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5ncmFiaWZ5KCl8fGUucGFubmFibGUoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImdyYWJpZnkiLG9mZjoidW5ncmFiaWZ5In0pO2h5KHtmaWVsZDoic2VsZWN0ZWQiLGFibGVGaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVBYmxlOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUFibGUiKSxvbjoic2VsZWN0IixvZmY6InVuc2VsZWN0In0pO2h5KHtmaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJzZWxlY3RpZnkiLG9mZjoidW5zZWxlY3RpZnkifSk7T2YuZGVzZWxlY3Q9T2YudW5zZWxlY3Q7T2YuZ3JhYmJlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4gdC5fcHJpdmF0ZS5ncmFiYmVkfTtoeSh7ZmllbGQ6ImFjdGl2ZSIsb246ImFjdGl2YXRlIixvZmY6InVuYWN0aXZhdGUifSk7aHkoe2ZpZWxkOiJwYW5uYWJsZSIsb246InBhbmlmeSIsb2ZmOiJ1bnBhbmlmeSJ9KTtPZi5pbmFjdGl2ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4hdC5fcHJpdmF0ZS5hY3RpdmV9O0hhPXt9LGttZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBvKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT10aGlzLGE9W10scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2lmKGwuaXNOb2RlKCkpe2Zvcih2YXIgdT0hMSxoPWwuY29ubmVjdGVkRWRnZXMoKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl0scD1kLnNvdXJjZSgpLG09ZC50YXJnZXQoKTtpZihlLm5vSW5jb21pbmdFZGdlcyYmbT09PWwmJnAhPT1sfHxlLm5vT3V0Z29pbmdFZGdlcyYmcD09PWwmJm0hPT1sKXt1PSEwO2JyZWFrfX11fHxhLnB1c2gobCl9fXJldHVybiB0aGlzLnNwYXduKGEsITApLmZpbHRlcihuKX0sImRhZ0V4dHJlbWl0eUltcGwiKX0sImRlZmluZURhZ0V4dHJlbWl0eSIpLEVtZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49dGhpcyxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXTtpZihzLmlzTm9kZSgpKWZvcih2YXIgbD1zLmNvbm5lY3RlZEVkZ2VzKCksdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1sW3VdLGY9aC5zb3VyY2UoKSxkPWgudGFyZ2V0KCk7ZS5vdXRnb2luZyYmZj09PXM/KGkucHVzaChoKSxpLnB1c2goZCkpOmUuaW5jb21pbmcmJmQ9PT1zJiYoaS5wdXNoKGgpLGkucHVzaChmKSl9fXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdPbmVIb3AiKSxTbWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPXRoaXMsaT1bXSxhPXt9Ozspe3ZhciBzPWUub3V0Z29pbmc/bi5vdXRnb2VycygpOm4uaW5jb21lcnMoKTtpZihzLmxlbmd0aD09PTApYnJlYWs7Zm9yKHZhciBsPSExLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguaWQoKTthW2ZdfHwoYVtmXT0hMCxpLnB1c2goaCksbD0hMCl9aWYoIWwpYnJlYWs7bj1zfXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdBbGxIb3BzIik7SGEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5sZW5ndGg7dCsrKXRoaXNbdF0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH07aXIoSGEse3Jvb3RzOmttZSh7bm9JbmNvbWluZ0VkZ2VzOiEwfSksbGVhdmVzOmttZSh7bm9PdXRnb2luZ0VkZ2VzOiEwfSksb3V0Z29lcnM6YWwoRW1lKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6U21lKHtvdXRnb2luZzohMH0pLGluY29tZXJzOmFsKEVtZSh7aW5jb21pbmc6ITB9KSwiaW5jb21lcnMiKSxwcmVkZWNlc3NvcnM6U21lKHtpbmNvbWluZzohMH0pfSk7aXIoSGEse25laWdoYm9yaG9vZDphbChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLm5vZGVzKCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9aS5jb25uZWN0ZWRFZGdlcygpLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PWwuc291cmNlKCksaD1sLnRhcmdldCgpLGY9aT09PXU/aDp1O2YubGVuZ3RoPjAmJmUucHVzaChmWzBdKSxlLnB1c2gobFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKCkuYWRkKHRoaXMpLmZpbHRlcihlKX0sImNsb3NlZE5laWdoYm9yaG9vZCIpLG9wZW5OZWlnaGJvcmhvb2Q6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2QoZSl9LCJvcGVuTmVpZ2hib3Job29kIil9KTtIYS5uZWlnaGJvdXJob29kPUhhLm5laWdoYm9yaG9vZDtIYS5jbG9zZWROZWlnaGJvdXJob29kPUhhLmNsb3NlZE5laWdoYm9yaG9vZDtIYS5vcGVuTmVpZ2hib3VyaG9vZD1IYS5vcGVuTmVpZ2hib3Job29kO2lyKEhhLHtzb3VyY2U6YWwobyhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdLG47cmV0dXJuIHImJihuPXIuX3ByaXZhdGUuc291cmNlfHxyLmN5KCkuY29sbGVjdGlvbigpKSxuJiZlP24uZmlsdGVyKGUpOm59LCJzb3VyY2VJbXBsIiksInNvdXJjZSIpLHRhcmdldDphbChvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF0sbjtyZXR1cm4gciYmKG49ci5fcHJpdmF0ZS50YXJnZXR8fHIuY3koKS5jb2xsZWN0aW9uKCkpLG4mJmU/bi5maWx0ZXIoZSk6bn0sInRhcmdldEltcGwiKSwidGFyZ2V0Iiksc291cmNlczpDbWUoe2F0dHI6InNvdXJjZSJ9KSx0YXJnZXRzOkNtZSh7YXR0cjoidGFyZ2V0In0pfSk7byhDbWUsImRlZmluZVNvdXJjZUZ1bmN0aW9uIik7aXIoSGEse2VkZ2VzV2l0aDphbChBbWUoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzphbChBbWUoe3RoaXNJc1NyYzohMH0pLCJlZGdlc1RvIil9KTtvKEFtZSwiZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24iKTtpcihIYSx7Y29ubmVjdGVkRWRnZXM6YWwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoaS5pc05vZGUoKSlmb3IodmFyIGE9aS5fcHJpdmF0ZS5lZGdlcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107ZS5wdXNoKGwpfX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWRFZGdlcyIpLGNvbm5lY3RlZE5vZGVzOmFsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuaXNFZGdlKCkmJihlLnB1c2goaS5zb3VyY2UoKVswXSksZS5wdXNoKGkudGFyZ2V0KClbMF0pKX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWROb2RlcyIpLHBhcmFsbGVsRWRnZXM6YWwoX21lKCksInBhcmFsbGVsRWRnZXMiKSxjb2RpcmVjdGVkRWRnZXM6YWwoX21lKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7byhfbWUsImRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbiIpO2lyKEhhLHtjb21wb25lbnRzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuY3koKSxpPW4uY29sbGVjdGlvbigpLGE9ZT09bnVsbD9yLm5vZGVzKCk6ZS5ub2RlcygpLHM9W107ZSE9bnVsbCYmYS5lbXB0eSgpJiYoYT1lLnNvdXJjZXMoKSk7dmFyIGw9byhmdW5jdGlvbihmLGQpe2kubWVyZ2UoZiksYS51bm1lcmdlKGYpLGQubWVyZ2UoZil9LCJ2aXNpdEluQ29tcG9uZW50Iik7aWYoYS5lbXB0eSgpKXJldHVybiByLnNwYXduKCk7dmFyIHU9byhmdW5jdGlvbigpe3ZhciBmPW4uY29sbGVjdGlvbigpO3MucHVzaChmKTt2YXIgZD1hWzBdO2woZCxmKSxyLmJmcyh7ZGlyZWN0ZWQ6ITEscm9vdHM6ZCx2aXNpdDpvKGZ1bmN0aW9uKG0pe3JldHVybiBsKG0sZil9LCJ2aXNpdCIpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3AuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3IuaGFzKG0pJiZmLmhhcyhtLnNvdXJjZSgpKSYmZi5oYXMobS50YXJnZXQoKSkmJmYubWVyZ2UobSl9KX0pfSwiX2xvb3AiKTtkbyB1KCk7d2hpbGUoYS5sZW5ndGg+MCk7cmV0dXJuIHN9LCJjb21wb25lbnRzIiksY29tcG9uZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO3JldHVybiBlLmN5KCkubXV0YWJsZUVsZW1lbnRzKCkuY29tcG9uZW50cyhlKVswXX0sImNvbXBvbmVudCIpfSk7SGEuY29tcG9uZW50c09mPUhhLmNvbXBvbmVudHM7U2E9byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxpPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZihlPT09dm9pZCAwKXtvaSgiQSBjb2xsZWN0aW9uIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY29yZSIpO3JldHVybn12YXIgYT1uZXcgWmMscz0hMTtpZighcilyPVtdO2Vsc2UgaWYoci5sZW5ndGg+MCYmVXIoclswXSkmJiFmNChyWzBdKSl7cz0hMDtmb3IodmFyIGw9W10sdT1uZXcgYXksaD0wLGY9ci5sZW5ndGg7aDxmO2grKyl7dmFyIGQ9cltoXTtkLmRhdGE9PW51bGwmJihkLmRhdGE9e30pO3ZhciBwPWQuZGF0YTtpZihwLmlkPT1udWxsKXAuaWQ9d2dlKCk7ZWxzZSBpZihlLmhhc0VsZW1lbnRXaXRoSWQocC5pZCl8fHUuaGFzKHAuaWQpKWNvbnRpbnVlO3ZhciBtPW5ldyBaNihlLGQsITEpO2wucHVzaChtKSx1LmFkZChwLmlkKX1yPWx9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGc9MCx5PXIubGVuZ3RoO2c8eTtnKyspe3ZhciB2PXJbZ11bMF07aWYodiE9bnVsbCl7dmFyIHg9di5fcHJpdmF0ZS5kYXRhLmlkOyghbnx8IWEuaGFzKHgpKSYmKG4mJmEuc2V0KHgse2luZGV4OnRoaXMubGVuZ3RoLGVsZTp2fSksdGhpc1t0aGlzLmxlbmd0aF09dix0aGlzLmxlbmd0aCsrKX19dGhpcy5fcHJpdmF0ZT17ZWxlczp0aGlzLGN5OmUsZ2V0IG1hcCgpe3JldHVybiB0aGlzLmxhenlNYXA9PW51bGwmJnRoaXMucmVidWlsZE1hcCgpLHRoaXMubGF6eU1hcH0sc2V0IG1hcChiKXt0aGlzLmxhenlNYXA9Yn0scmVidWlsZE1hcDpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBUPXRoaXMubGF6eU1hcD1uZXcgWmMsUz10aGlzLmVsZXMsdz0wO3c8Uy5sZW5ndGg7dysrKXt2YXIgRT1TW3ddO1Quc2V0KEUuaWQoKSx7aW5kZXg6dyxlbGU6RX0pfX0sInJlYnVpbGRNYXAiKX0sbiYmKHRoaXMuX3ByaXZhdGUubWFwPWEpLHMmJiFpJiZ0aGlzLnJlc3RvcmUoKX0sIkNvbGxlY3Rpb24iKSxNbj1aNi5wcm90b3R5cGU9U2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKTtNbi5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJjb2xsZWN0aW9uIn07TW4uc3Bhd249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFNhKHRoaXMuY3koKSx0LGUpfTtNbi5zcGF3blNlbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcGF3bih0aGlzKX07TW4uY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07TW4ucmVuZGVyZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeS5yZW5kZXJlcigpfTtNbi5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF19O01uLmNvbGxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gb2dlKHRoaXMpP3RoaXM6bmV3IFNhKHRoaXMuX3ByaXZhdGUuY3ksW3RoaXNdKX07TW4udW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTYSh0aGlzLl9wcml2YXRlLmN5LHRoaXMsITApfTtNbi5oYXNFbGVtZW50V2l0aElkPWZ1bmN0aW9uKHQpe3JldHVybiB0PSIiK3QsdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKHQpfTtNbi5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih0KXt0PSIiK3Q7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeSxyPXRoaXMuX3ByaXZhdGUubWFwLmdldCh0KTtyZXR1cm4gcj9yLmVsZTpuZXcgU2EoZSl9O01uLiRpZD1Nbi5nZXRFbGVtZW50QnlJZDtNbi5wb29sSW5kZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlLmN5LGU9dC5fcHJpdmF0ZS5lbGVtZW50cyxyPXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gZS5fcHJpdmF0ZS5tYXAuZ2V0KHIpLmluZGV4fTtNbi5pbmRleE9mPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KGUpLmluZGV4fTtNbi5pbmRleE9mSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9IiIrdCx0aGlzLl9wcml2YXRlLm1hcC5nZXQodCkuaW5kZXh9O01uLmpzb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbGVtZW50KCkscj10aGlzLmN5KCk7aWYoZT09bnVsbCYmdClyZXR1cm4gdGhpcztpZihlIT1udWxsKXt2YXIgbj1lLl9wcml2YXRlO2lmKFVyKHQpKXtpZihyLnN0YXJ0QmF0Y2goKSx0LmRhdGEpe2UuZGF0YSh0LmRhdGEpO3ZhciBpPW4uZGF0YTtpZihlLmlzRWRnZSgpKXt2YXIgYT0hMSxzPXt9LGw9dC5kYXRhLnNvdXJjZSx1PXQuZGF0YS50YXJnZXQ7bCE9bnVsbCYmbCE9aS5zb3VyY2UmJihzLnNvdXJjZT0iIitsLGE9ITApLHUhPW51bGwmJnUhPWkudGFyZ2V0JiYocy50YXJnZXQ9IiIrdSxhPSEwKSxhJiYoZT1lLm1vdmUocykpfWVsc2V7dmFyIGg9InBhcmVudCJpbiB0LmRhdGEsZj10LmRhdGEucGFyZW50O2gmJihmIT1udWxsfHxpLnBhcmVudCE9bnVsbCkmJmYhPWkucGFyZW50JiYoZj09PXZvaWQgMCYmKGY9bnVsbCksZiE9bnVsbCYmKGY9IiIrZiksZT1lLm1vdmUoe3BhcmVudDpmfSkpfX10LnBvc2l0aW9uJiZlLnBvc2l0aW9uKHQucG9zaXRpb24pO3ZhciBkPW8oZnVuY3Rpb24oeSx2LHgpe3ZhciBiPXRbeV07YiE9bnVsbCYmYiE9PW5beV0mJihiP2Vbdl0oKTplW3hdKCkpfSwiY2hlY2tTd2l0Y2giKTtyZXR1cm4gZCgicmVtb3ZlZCIsInJlbW92ZSIsInJlc3RvcmUiKSxkKCJzZWxlY3RlZCIsInNlbGVjdCIsInVuc2VsZWN0IiksZCgic2VsZWN0YWJsZSIsInNlbGVjdGlmeSIsInVuc2VsZWN0aWZ5IiksZCgibG9ja2VkIiwibG9jayIsInVubG9jayIpLGQoImdyYWJiYWJsZSIsImdyYWJpZnkiLCJ1bmdyYWJpZnkiKSxkKCJwYW5uYWJsZSIsInBhbmlmeSIsInVucGFuaWZ5IiksdC5jbGFzc2VzIT1udWxsJiZlLmNsYXNzZXModC5jbGFzc2VzKSxyLmVuZEJhdGNoKCksdGhpc31lbHNlIGlmKHQ9PT12b2lkIDApe3ZhciBwPXtkYXRhOlFjKG4uZGF0YSkscG9zaXRpb246UWMobi5wb3NpdGlvbiksZ3JvdXA6bi5ncm91cCxyZW1vdmVkOm4ucmVtb3ZlZCxzZWxlY3RlZDpuLnNlbGVjdGVkLHNlbGVjdGFibGU6bi5zZWxlY3RhYmxlLGxvY2tlZDpuLmxvY2tlZCxncmFiYmFibGU6bi5ncmFiYmFibGUscGFubmFibGU6bi5wYW5uYWJsZSxjbGFzc2VzOm51bGx9O3AuY2xhc3Nlcz0iIjt2YXIgbT0wO3JldHVybiBuLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihnKXtyZXR1cm4gcC5jbGFzc2VzKz1tKys9PT0wP2c6IiAiK2d9KSxwfX19O01uLmpzb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuanNvbigpO3QucHVzaChuKX1yZXR1cm4gdH07TW4uY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5jeSgpLGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzW3JdLGk9bi5qc29uKCksYT1uZXcgWjYodCxpLCExKTtlLnB1c2goYSl9cmV0dXJuIG5ldyBTYSh0LGUpfTtNbi5jb3B5PU1uLmNsb25lO01uLnJlc3RvcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLHI9dGhpcyxuPXIuY3koKSxpPW4uX3ByaXZhdGUsYT1bXSxzPVtdLGwsdT0wLGg9ci5sZW5ndGg7dTxoO3UrKyl7dmFyIGY9clt1XTtlJiYhZi5yZW1vdmVkKCl8fChmLmlzTm9kZSgpP2EucHVzaChmKTpzLnB1c2goZikpfWw9YS5jb25jYXQocyk7dmFyIGQscD1vKGZ1bmN0aW9uKCl7bC5zcGxpY2UoZCwxKSxkLS19LCJyZW1vdmVGcm9tRWxlbWVudHMiKTtmb3IoZD0wO2Q8bC5sZW5ndGg7ZCsrKXt2YXIgbT1sW2RdLGc9bS5fcHJpdmF0ZSx5PWcuZGF0YTtpZihtLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSwhKCFlJiYhZy5yZW1vdmVkKSl7aWYoeS5pZD09PXZvaWQgMCl5LmlkPXdnZSgpO2Vsc2UgaWYoX3QoeS5pZCkpeS5pZD0iIit5LmlkO2Vsc2UgaWYoUGYoeS5pZCl8fCFadCh5LmlkKSl7b2koIkNhbiBub3QgY3JlYXRlIGVsZW1lbnQgd2l0aCBpbnZhbGlkIHN0cmluZyBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfWVsc2UgaWYobi5oYXNFbGVtZW50V2l0aElkKHkuaWQpKXtvaSgiQ2FuIG5vdCBjcmVhdGUgc2Vjb25kIGVsZW1lbnQgd2l0aCBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfX12YXIgdj15LmlkO2lmKG0uaXNOb2RlKCkpe3ZhciB4PWcucG9zaXRpb247eC54PT1udWxsJiYoeC54PTApLHgueT09bnVsbCYmKHgueT0wKX1pZihtLmlzRWRnZSgpKXtmb3IodmFyIGI9bSxUPVsic291cmNlIiwidGFyZ2V0Il0sUz1ULmxlbmd0aCx3PSExLEU9MDtFPFM7RSsrKXt2YXIgXz1UW0VdLEM9eVtfXTtfdChDKSYmKEM9eVtfXT0iIit5W19dKSxDPT1udWxsfHxDPT09IiI/KG9pKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCB1bnNwZWNpZmllZCAiK18pLHc9ITApOm4uaGFzRWxlbWVudFdpdGhJZChDKXx8KG9pKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCBub25leGlzdGFudCAiK18rIiBgIitDKyJgIiksdz0hMCl9aWYodyl7cCgpO2NvbnRpbnVlfXZhciBEPW4uZ2V0RWxlbWVudEJ5SWQoeS5zb3VyY2UpLE89bi5nZXRFbGVtZW50QnlJZCh5LnRhcmdldCk7RC5zYW1lKE8pP0QuX3ByaXZhdGUuZWRnZXMucHVzaChiKTooRC5fcHJpdmF0ZS5lZGdlcy5wdXNoKGIpLE8uX3ByaXZhdGUuZWRnZXMucHVzaChiKSksYi5fcHJpdmF0ZS5zb3VyY2U9RCxiLl9wcml2YXRlLnRhcmdldD1PfWcubWFwPW5ldyBaYyxnLm1hcC5zZXQodix7ZWxlOm0saW5kZXg6MH0pLGcucmVtb3ZlZD0hMSxlJiZuLmFkZFRvUG9vbChtKX1mb3IodmFyIFI9MDtSPGEubGVuZ3RoO1IrKyl7dmFyIGs9YVtSXSxMPWsuX3ByaXZhdGUuZGF0YTtfdChMLnBhcmVudCkmJihMLnBhcmVudD0iIitMLnBhcmVudCk7dmFyIEE9TC5wYXJlbnQsST1BIT1udWxsO2lmKEl8fGsuX3ByaXZhdGUucGFyZW50KXt2YXIgTT1rLl9wcml2YXRlLnBhcmVudD9uLmNvbGxlY3Rpb24oKS5tZXJnZShrLl9wcml2YXRlLnBhcmVudCk6bi5nZXRFbGVtZW50QnlJZChBKTtpZihNLmVtcHR5KCkpTC5wYXJlbnQ9dm9pZCAwO2Vsc2UgaWYoTVswXS5yZW1vdmVkKCkpaG4oIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksTC5wYXJlbnQ9dm9pZCAwLGsuX3ByaXZhdGUucGFyZW50PW51bGw7ZWxzZXtmb3IodmFyIFA9ITEsQj1NOyFCLmVtcHR5KCk7KXtpZihrLnNhbWUoQikpe1A9ITAsTC5wYXJlbnQ9dm9pZCAwO2JyZWFrfUI9Qi5wYXJlbnQoKX1QfHwoTVswXS5fcHJpdmF0ZS5jaGlsZHJlbi5wdXNoKGspLGsuX3ByaXZhdGUucGFyZW50PU1bMF0saS5oYXNDb21wb3VuZE5vZGVzPSEwKX19fWlmKGwubGVuZ3RoPjApe2Zvcih2YXIgRj1sLmxlbmd0aD09PXIubGVuZ3RoP3I6bmV3IFNhKG4sbCksej0wO3o8Ri5sZW5ndGg7eisrKXt2YXIgJD1GW3pdOyQuaXNOb2RlKCl8fCgkLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksJC5zb3VyY2UoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksJC50YXJnZXQoKS5jbGVhclRyYXZlcnNhbENhY2hlKCkpfXZhciBVO2kuaGFzQ29tcG91bmROb2Rlcz9VPW4uY29sbGVjdGlvbigpLm1lcmdlKEYpLm1lcmdlKEYuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoRi5wYXJlbnQoKSk6VT1GLFUuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkuZGlydHlCb3VuZGluZ0JveENhY2hlKCkudXBkYXRlU3R5bGUodCksdD9GLmVtaXRBbmROb3RpZnkoImFkZCIpOmUmJkYuZW1pdCgiYWRkIil9cmV0dXJuIHJ9O01uLnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0JiZ0Ll9wcml2YXRlLnJlbW92ZWR9O01uLmluc2lkZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQmJiF0Ll9wcml2YXRlLnJlbW92ZWR9O01uLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxyPXRoaXMsbj1bXSxpPXt9LGE9ci5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBzKEEpe2Zvcih2YXIgST1BLl9wcml2YXRlLmVkZ2VzLE09MDtNPEkubGVuZ3RoO00rKyl1KElbTV0pfW8ocywiYWRkQ29ubmVjdGVkRWRnZXMiKTtmdW5jdGlvbiBsKEEpe2Zvcih2YXIgST1BLl9wcml2YXRlLmNoaWxkcmVuLE09MDtNPEkubGVuZ3RoO00rKyl1KElbTV0pfW8obCwiYWRkQ2hpbGRyZW4iKTtmdW5jdGlvbiB1KEEpe3ZhciBJPWlbQS5pZCgpXTtlJiZBLnJlbW92ZWQoKXx8SXx8KGlbQS5pZCgpXT0hMCxBLmlzTm9kZSgpPyhuLnB1c2goQSkscyhBKSxsKEEpKTpuLnVuc2hpZnQoQSkpfW8odSwiYWRkIik7Zm9yKHZhciBoPTAsZj1yLmxlbmd0aDtoPGY7aCsrKXt2YXIgZD1yW2hdO3UoZCl9ZnVuY3Rpb24gcChBLEkpe3ZhciBNPUEuX3ByaXZhdGUuZWRnZXM7RmYoTSxJKSxBLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1vKHAsInJlbW92ZUVkZ2VSZWYiKTtmdW5jdGlvbiBtKEEpe0EuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfW8obSwicmVtb3ZlUGFyYWxsZWxSZWYiKTt2YXIgZz1bXTtnLmlkcz17fTtmdW5jdGlvbiB5KEEsSSl7ST1JWzBdLEE9QVswXTt2YXIgTT1BLl9wcml2YXRlLmNoaWxkcmVuLFA9QS5pZCgpO0ZmKE0sSSksSS5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxnLmlkc1tQXXx8KGcuaWRzW1BdPSEwLGcucHVzaChBKSl9byh5LCJyZW1vdmVDaGlsZFJlZiIpLHIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksZSYmYS5yZW1vdmVGcm9tUG9vbChuKTtmb3IodmFyIHY9MDt2PG4ubGVuZ3RoO3YrKyl7dmFyIHg9blt2XTtpZih4LmlzRWRnZSgpKXt2YXIgYj14LnNvdXJjZSgpWzBdLFQ9eC50YXJnZXQoKVswXTtwKGIseCkscChULHgpO2Zvcih2YXIgUz14LnBhcmFsbGVsRWRnZXMoKSx3PTA7dzxTLmxlbmd0aDt3Kyspe3ZhciBFPVNbd107bShFKSxFLmlzQnVuZGxlZEJlemllcigpJiZFLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfX1lbHNle3ZhciBfPXgucGFyZW50KCk7Xy5sZW5ndGghPT0wJiZ5KF8seCl9ZSYmKHguX3ByaXZhdGUucmVtb3ZlZD0hMCl9dmFyIEM9YS5fcHJpdmF0ZS5lbGVtZW50czthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDtEKyspe3ZhciBPPUNbRF07aWYoTy5pc1BhcmVudCgpKXthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITA7YnJlYWt9fXZhciBSPW5ldyBTYSh0aGlzLmN5KCksbik7Ui5zaXplKCk+MCYmKHQ/Ui5lbWl0QW5kTm90aWZ5KCJyZW1vdmUiKTplJiZSLmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIEw9Z1trXTsoIWV8fCFMLnJlbW92ZWQoKSkmJkwudXBkYXRlU3R5bGUoKX1yZXR1cm4gUn07TW4ubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcml2YXRlLmN5LHI9dGhpcyxuPSExLGk9ITEsYT1vKGZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsP2c6IiIrZ30sInRvU3RyaW5nIik7aWYodC5zb3VyY2UhPT12b2lkIDB8fHQudGFyZ2V0IT09dm9pZCAwKXt2YXIgcz1hKHQuc291cmNlKSxsPWEodC50YXJnZXQpLHU9cyE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKHMpLGg9bCE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKGwpOyh1fHxoKSYmKGUuYmF0Y2goZnVuY3Rpb24oKXtyLnJlbW92ZShuLGkpLHIuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbT0wO208ci5sZW5ndGg7bSsrKXt2YXIgZz1yW21dLHk9Zy5fcHJpdmF0ZS5kYXRhO2cuaXNFZGdlKCkmJih1JiYoeS5zb3VyY2U9cyksaCYmKHkudGFyZ2V0PWwpKX1yLnJlc3RvcmUobixpKX0pLHIuZW1pdEFuZE5vdGlmeSgibW92ZSIpKX1lbHNlIGlmKHQucGFyZW50IT09dm9pZCAwKXt2YXIgZj1hKHQucGFyZW50KSxkPWY9PT1udWxsfHxlLmhhc0VsZW1lbnRXaXRoSWQoZik7aWYoZCl7dmFyIHA9Zj09PW51bGw/dm9pZCAwOmY7ZS5iYXRjaChmdW5jdGlvbigpe3ZhciBtPXIucmVtb3ZlKG4saSk7bS5lbWl0QW5kTm90aWZ5KCJtb3Zlb3V0Iik7Zm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB5PXJbZ10sdj15Ll9wcml2YXRlLmRhdGE7eS5pc05vZGUoKSYmKHYucGFyZW50PXApfW0ucmVzdG9yZShuLGkpfSksci5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfTtbT2dlLHlRZSxSNixJZixpeSxNUWUsaUMsalFlLHMxZSxvMWUsZVplLEg2LE42LEVhLE9mLEhhXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKE1uLHQpfSk7b1plPXthZGQ6byhmdW5jdGlvbihlKXt2YXIgcixuPXRoaXM7aWYoeG8oZSkpe3ZhciBpPWU7aWYoaS5fcHJpdmF0ZS5jeT09PW4pcj1pLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgYT1bXSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YS5wdXNoKGwuanNvbigpKX1yPW5ldyBTYShuLGEpfX1lbHNlIGlmKEVuKGUpKXt2YXIgdT1lO3I9bmV3IFNhKG4sdSl9ZWxzZSBpZihVcihlKSYmKEVuKGUubm9kZXMpfHxFbihlLmVkZ2VzKSkpe2Zvcih2YXIgaD1lLGY9W10sZD1bIm5vZGVzIiwiZWRnZXMiXSxwPTAsbT1kLmxlbmd0aDtwPG07cCsrKXt2YXIgZz1kW3BdLHk9aFtnXTtpZihFbih5KSlmb3IodmFyIHY9MCx4PXkubGVuZ3RoO3Y8eDt2Kyspe3ZhciBiPWlyKHtncm91cDpnfSx5W3ZdKTtmLnB1c2goYil9fXI9bmV3IFNhKG4sZil9ZWxzZXt2YXIgVD1lO3I9bmV3IFo2KG4sVCkuY29sbGVjdGlvbigpfXJldHVybiByfSwiYWRkIikscmVtb3ZlOm8oZnVuY3Rpb24oZSl7aWYoIXhvKGUpKXtpZihadChlKSl7dmFyIHI9ZTtlPXRoaXMuJChyKX19cmV0dXJuIGUucmVtb3ZlKCl9LCJyZW1vdmUiKX07byhsWmUsImdlbmVyYXRlQ3ViaWNCZXppZXIiKTtjWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4pe3JldHVybi1uLnRlbnNpb24qbi54LW4uZnJpY3Rpb24qbi52fW8odCwic3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUiKTtmdW5jdGlvbiBlKG4saSxhKXt2YXIgcz17eDpuLngrYS5keCppLHY6bi52K2EuZHYqaSx0ZW5zaW9uOm4udGVuc2lvbixmcmljdGlvbjpuLmZyaWN0aW9ufTtyZXR1cm57ZHg6cy52LGR2OnQocyl9fW8oZSwic3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlIik7ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXtkeDpuLnYsZHY6dChuKX0scz1lKG4saSouNSxhKSxsPWUobixpKi41LHMpLHU9ZShuLGksbCksaD0xLzYqKGEuZHgrMioocy5keCtsLmR4KSt1LmR4KSxmPTEvNiooYS5kdisyKihzLmR2K2wuZHYpK3UuZHYpO3JldHVybiBuLng9bi54K2gqaSxuLnY9bi52K2YqaSxufXJldHVybiBvKHIsInNwcmluZ0ludGVncmF0ZVN0YXRlIiksbyhmdW5jdGlvbiBuKGksYSxzKXt2YXIgbD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHU9WzBdLGg9MCxmPTEvMWU0LGQ9MTYvMWUzLHAsbSxnO2ZvcihpPXBhcnNlRmxvYXQoaSl8fDUwMCxhPXBhcnNlRmxvYXQoYSl8fDIwLHM9c3x8bnVsbCxsLnRlbnNpb249aSxsLmZyaWN0aW9uPWEscD1zIT09bnVsbCxwPyhoPW4oaSxhKSxtPWgvcypkKTptPWQ7Zz1yKGd8fGwsbSksdS5wdXNoKDErZy54KSxoKz0xNixNYXRoLmFicyhnLngpPmYmJk1hdGguYWJzKGcudik+ZjspO3JldHVybiBwP2Z1bmN0aW9uKHkpe3JldHVybiB1W3kqKHUubGVuZ3RoLTEpfDBdfTpofSwic3ByaW5nUks0RmFjdG9yeSIpfSgpLE5uPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bFplKGUscixuLGkpO3JldHVybiBmdW5jdGlvbihzLGwsdSl7cmV0dXJuIHMrKGwtcykqYSh1KX19LCJjdWJpY0JlemllciIpLE02PXtsaW5lYXI6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrKHItZSkqbn0sImxpbmVhciIpLGVhc2U6Tm4oLjI1LC4xLC4yNSwxKSwiZWFzZS1pbiI6Tm4oLjQyLDAsMSwxKSwiZWFzZS1vdXQiOk5uKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjpObiguNDIsMCwuNTgsMSksImVhc2UtaW4tc2luZSI6Tm4oLjQ3LDAsLjc0NSwuNzE1KSwiZWFzZS1vdXQtc2luZSI6Tm4oLjM5LC41NzUsLjU2NSwxKSwiZWFzZS1pbi1vdXQtc2luZSI6Tm4oLjQ0NSwuMDUsLjU1LC45NSksImVhc2UtaW4tcXVhZCI6Tm4oLjU1LC4wODUsLjY4LC41MyksImVhc2Utb3V0LXF1YWQiOk5uKC4yNSwuNDYsLjQ1LC45NCksImVhc2UtaW4tb3V0LXF1YWQiOk5uKC40NTUsLjAzLC41MTUsLjk1NSksImVhc2UtaW4tY3ViaWMiOk5uKC41NSwuMDU1LC42NzUsLjE5KSwiZWFzZS1vdXQtY3ViaWMiOk5uKC4yMTUsLjYxLC4zNTUsMSksImVhc2UtaW4tb3V0LWN1YmljIjpObiguNjQ1LC4wNDUsLjM1NSwxKSwiZWFzZS1pbi1xdWFydCI6Tm4oLjg5NSwuMDMsLjY4NSwuMjIpLCJlYXNlLW91dC1xdWFydCI6Tm4oLjE2NSwuODQsLjQ0LDEpLCJlYXNlLWluLW91dC1xdWFydCI6Tm4oLjc3LDAsLjE3NSwxKSwiZWFzZS1pbi1xdWludCI6Tm4oLjc1NSwuMDUsLjg1NSwuMDYpLCJlYXNlLW91dC1xdWludCI6Tm4oLjIzLDEsLjMyLDEpLCJlYXNlLWluLW91dC1xdWludCI6Tm4oLjg2LDAsLjA3LDEpLCJlYXNlLWluLWV4cG8iOk5uKC45NSwuMDUsLjc5NSwuMDM1KSwiZWFzZS1vdXQtZXhwbyI6Tm4oLjE5LDEsLjIyLDEpLCJlYXNlLWluLW91dC1leHBvIjpObigxLDAsMCwxKSwiZWFzZS1pbi1jaXJjIjpObiguNiwuMDQsLjk4LC4zMzUpLCJlYXNlLW91dC1jaXJjIjpObiguMDc1LC44MiwuMTY1LDEpLCJlYXNlLWluLW91dC1jaXJjIjpObiguNzg1LC4xMzUsLjE1LC44Niksc3ByaW5nOm8oZnVuY3Rpb24oZSxyLG4pe2lmKG49PT0wKXJldHVybiBNNi5saW5lYXI7dmFyIGk9Y1plKGUscixuKTtyZXR1cm4gZnVuY3Rpb24oYSxzLGwpe3JldHVybiBhKyhzLWEpKmkobCl9fSwic3ByaW5nIiksImN1YmljLWJlemllciI6Tm59O28oRG1lLCJnZXRFYXNlZFZhbHVlIik7byhMbWUsImdldFZhbHVlIik7byhXMSwiZWFzZSIpO28odVplLCJzdGVwJDEiKTtvKFZiLCJ2YWxpZCIpO28oaFplLCJzdGFydEFuaW1hdGlvbiIpO28oUm1lLCJzdGVwQWxsIik7ZlplPXthbmltYXRlOnVuLmFuaW1hdGUoKSxhbmltYXRpb246dW4uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6dW4uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOnVuLmNsZWFyUXVldWUoKSxkZWxheTp1bi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOnVuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDp1bi5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyLnN0eWxlRW5hYmxlZCgpJiZyLl9wcml2YXRlLmFuaUVsZXMubWVyZ2UoZSl9LCJhZGRUb0FuaW1hdGlvblBvb2wiKSxzdG9wQW5pbWF0aW9uTG9vcDpvKGZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMX0sInN0b3BBbmltYXRpb25Mb29wIiksc3RhcnRBbmltYXRpb25Mb29wOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGUuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITAsIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuO2Z1bmN0aW9uIHIoKXtlLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nJiYkNihvKGZ1bmN0aW9uKGEpe1JtZShhLGUpLHIoKX0sImFuaW1hdGlvblN0ZXAiKSl9byhyLCJoZWFkbGVzc1N0ZXAiKTt2YXIgbj1lLnJlbmRlcmVyKCk7biYmbi5iZWZvcmVSZW5kZXI/bi5iZWZvcmVSZW5kZXIobyhmdW5jdGlvbihhLHMpe1JtZShzLGUpfSwicmVuZGVyZXJBbmltYXRpb25TdGVwIiksbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOnIoKX0sInN0YXJ0QW5pbWF0aW9uTG9vcCIpfSxkWmU9e3F1YWxpZmllckNvbXBhcmU6byhmdW5jdGlvbihlLHIpe3JldHVybiBlPT1udWxsfHxyPT1udWxsP2U9PW51bGwmJnI9PW51bGw6ZS5zYW1lVGV4dChyKX0sInF1YWxpZmllckNvbXBhcmUiKSxldmVudE1hdGNoZXM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5xdWFsaWZpZXI7cmV0dXJuIGkhPW51bGw/ZSE9PW4udGFyZ2V0JiZmNChuLnRhcmdldCkmJmkubWF0Y2hlcyhuLnRhcmdldCk6ITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKGUscil7ci5jeT1lLHIudGFyZ2V0PWV9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gci5xdWFsaWZpZXIhPW51bGw/bi50YXJnZXQ6ZX0sImNhbGxiYWNrQ29udGV4dCIpfSxFNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBadChlKT9uZXcgJGYoZSk6ZX0sImFyZ1NlbGVjdG9yIiksdTFlPXtjcmVhdGVFbWl0dGVyOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLmVtaXR0ZXJ8fChlLmVtaXR0ZXI9bmV3IGFDKGRaZSx0aGlzKSksdGhpc30sImNyZWF0ZUVtaXR0ZXIiKSxlbWl0dGVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSwiZW1pdHRlciIpLG9uOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihlLEU2KHIpLG4pLHRoaXN9LCJvbiIpLHJlbW92ZUxpc3RlbmVyOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLEU2KHIpLG4pLHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShlLEU2KHIpLG4pLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZSxFNihyKSxuKSx0aGlzfSwib25jZSIpLGVtaXQ6byhmdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGUsciksdGhpc30sImVtaXQiKSxlbWl0QW5kTm90aWZ5Om8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lbWl0KGUpLHRoaXMubm90aWZ5KGUsciksdGhpc30sImVtaXRBbmROb3RpZnkiKX07dW4uZXZlbnRBbGlhc2VzT24odTFlKTtDQj17cG5nOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gZT1lfHx7fSxyLnBuZyhlKX0sInBuZyIpLGpwZzpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGU9ZXx8e30sZS5iZz1lLmJnfHwiI2ZmZiIsci5qcGcoZSl9LCJqcGciKX07Q0IuanBlZz1DQi5qcGc7STY9e2xheW91dDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoZT09bnVsbCl7b2koIkxheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQiKTtyZXR1cm59aWYoZS5uYW1lPT1udWxsKXtvaSgiQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn12YXIgbj1lLm5hbWUsaT1yLmV4dGVuc2lvbigibGF5b3V0IixuKTtpZihpPT1udWxsKXtvaSgiTm8gc3VjaCBsYXlvdXQgYCIrbisiYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Iik7cmV0dXJufXZhciBhO1p0KGUuZWxlcyk/YT1yLiQoZS5lbGVzKTphPWUuZWxlcyE9bnVsbD9lLmVsZXM6ci4kKCk7dmFyIHM9bmV3IGkoaXIoe30sZSx7Y3k6cixlbGVzOmF9KSk7cmV0dXJuIHN9LCJsYXlvdXQiKX07STYuY3JlYXRlTGF5b3V0PUk2Lm1ha2VMYXlvdXQ9STYubGF5b3V0O3BaZT17bm90aWZ5Om8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7bi5iYXRjaE5vdGlmaWNhdGlvbnM9bi5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBpPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdfHx0aGlzLmNvbGxlY3Rpb24oKTtyIT1udWxsJiZpLm1lcmdlKHIpO3JldHVybn1pZihuLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgYT10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IWF8fGEubm90aWZ5KGUscil9fSwibm90aWZ5Iiksbm90aWZpY2F0aW9uczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGU9PT12b2lkIDA/ci5ub3RpZmljYXRpb25zRW5hYmxlZDooci5ub3RpZmljYXRpb25zRW5hYmxlZD0hIWUsdGhpcyl9LCJub3RpZmljYXRpb25zIiksbm9Ob3RpZmljYXRpb25zOm8oZnVuY3Rpb24oZSl7dGhpcy5ub3RpZmljYXRpb25zKCExKSxlKCksdGhpcy5ub3RpZmljYXRpb25zKCEwKX0sIm5vTm90aWZpY2F0aW9ucyIpLGJhdGNoaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5iYXRjaENvdW50PjB9LCJiYXRjaGluZyIpLHN0YXJ0QmF0Y2g6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUuYmF0Y2hDb3VudD09bnVsbCYmKGUuYmF0Y2hDb3VudD0wKSxlLmJhdGNoQ291bnQ9PT0wJiYoZS5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxlLmJhdGNoTm90aWZpY2F0aW9ucz17fSksZS5iYXRjaENvdW50KyssdGhpc30sInN0YXJ0QmF0Y2giKSxlbmRCYXRjaDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtpZihlLmJhdGNoQ291bnQ9PT0wKXJldHVybiB0aGlzO2lmKGUuYmF0Y2hDb3VudC0tLGUuYmF0Y2hDb3VudD09PTApe2UuYmF0Y2hTdHlsZUVsZXMudXBkYXRlU3R5bGUoKTt2YXIgcj10aGlzLnJlbmRlcmVyKCk7T2JqZWN0LmtleXMoZS5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ZS5iYXRjaE5vdGlmaWNhdGlvbnNbbl07aS5lbXB0eSgpP3Iubm90aWZ5KG4pOnIubm90aWZ5KG4saSl9KX1yZXR1cm4gdGhpc30sImVuZEJhdGNoIiksYmF0Y2g6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksZSgpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSwiYmF0Y2giKSxiYXRjaERhdGE6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXSxzPWVbYV0sbD1yLmdldEVsZW1lbnRCeUlkKGEpO2wuZGF0YShzKX19KX0sImJhdGNoRGF0YSIpfSxtWmU9b2Eoe2hpZGVFZGdlc09uVmlld3BvcnQ6ITEsdGV4dHVyZU9uVmlld3BvcnQ6ITEsbW90aW9uQmx1cjohMSxtb3Rpb25CbHVyT3BhY2l0eTouMDUscGl4ZWxSYXRpbzp2b2lkIDAsZGVza3RvcFRhcFRocmVzaG9sZDo0LHRvdWNoVGFwVGhyZXNob2xkOjgsd2hlZWxTZW5zaXRpdml0eToxLGRlYnVnOiExLHNob3dGcHM6ITEsd2ViZ2w6ITEsd2ViZ2xEZWJ1ZzohMSx3ZWJnbERlYnVnU2hvd0F0bGFzZXM6ITEsd2ViZ2xUZXhTaXplOjIwNDgsd2ViZ2xUZXhSb3dzOjEyLHdlYmdsQmF0Y2hTaXplOjIwNDgsd2ViZ2xUZXhQZXJCYXRjaDoxNCx3ZWJnbEJnQ29sb3I6WzI1NSwyNTUsMjU1XX0pLEFCPXtyZW5kZXJUbzpvKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGEucmVuZGVyVG8oZSxyLG4saSksdGhpc30sInJlbmRlclRvIikscmVuZGVyZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyfSwicmVuZGVyZXIiKSxmb3JjZVJlbmRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90aWZ5KCJkcmF3IiksdGhpc30sImZvcmNlUmVuZGVyIikscmVzaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkYXRlU2l6ZSgpLHRoaXMuZW1pdEFuZE5vdGlmeSgicmVzaXplIiksdGhpc30sInJlc2l6ZSIpLGluaXRSZW5kZXJlcjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmV4dGVuc2lvbigicmVuZGVyZXIiLGUubmFtZSk7aWYobj09bnVsbCl7b2koIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgIi5jb25jYXQoZS5uYW1lLCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpKTtyZXR1cm59ZS53aGVlbFNlbnNpdGl2aXR5IT09dm9pZCAwJiZobigiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuIik7dmFyIGk9bVplKGUpO2kuY3k9cixyLl9wcml2YXRlLnJlbmRlcmVyPW5ldyBuKGkpLHRoaXMubm90aWZ5KCJpbml0Iil9LCJpbml0UmVuZGVyZXIiKSxkZXN0cm95UmVuZGVyZXI6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5ub3RpZnkoImRlc3Ryb3kiKTt2YXIgcj1lLmNvbnRhaW5lcigpO2lmKHIpZm9yKHIuX2N5cmVnPW51bGw7ci5jaGlsZE5vZGVzLmxlbmd0aD4wOylyLnJlbW92ZUNoaWxkKHIuY2hpbGROb2Rlc1swXSk7ZS5fcHJpdmF0ZS5yZW5kZXJlcj1udWxsLGUubXV0YWJsZUVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLl9wcml2YXRlO2kucnNjcmF0Y2g9e30saS5yc3R5bGU9e30saS5hbmltYXRpb24uY3VycmVudD1bXSxpLmFuaW1hdGlvbi5xdWV1ZT1bXX0pfSwiZGVzdHJveVJlbmRlcmVyIiksb25SZW5kZXI6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbigicmVuZGVyIixlKX0sIm9uUmVuZGVyIiksb2ZmUmVuZGVyOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLGUpfSwib2ZmUmVuZGVyIil9O0FCLmludmFsaWRhdGVEaW1lbnNpb25zPUFCLnJlc2l6ZTtPNj17Y29sbGVjdGlvbjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFp0KGUpP3RoaXMuJChlKTp4byhlKT9lLmNvbGxlY3Rpb24oKTpFbihlKT8ocnx8KHI9e30pLG5ldyBTYSh0aGlzLGUsci51bmlxdWUsci5yZW1vdmVkKSk6bmV3IFNhKHRoaXMpfSwiY29sbGVjdGlvbiIpLG5vZGVzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy4kKGZ1bmN0aW9uKG4pe3JldHVybiBuLmlzTm9kZSgpfSk7cmV0dXJuIGU/ci5maWx0ZXIoZSk6cn0sIm5vZGVzIiksZWRnZXM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLiQoZnVuY3Rpb24obil7cmV0dXJuIG4uaXNFZGdlKCl9KTtyZXR1cm4gZT9yLmZpbHRlcihlKTpyfSwiZWRnZXMiKSwkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5lbGVtZW50cztyZXR1cm4gZT9yLmZpbHRlcihlKTpyLnNwYXduU2VsZigpfSwiJCIpLG11dGFibGVFbGVtZW50czpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHN9LCJtdXRhYmxlRWxlbWVudHMiKX07TzYuZWxlbWVudHM9TzYuZmlsdGVyPU82LiQ7cWE9e30sS2I9InQiLGdaZT0iZiI7cWEuYXBwbHk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLl9wcml2YXRlLG49ci5jeSxpPW4uY29sbGVjdGlvbigpLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPWUuZ2V0Q29udGV4dE1ldGEocyk7aWYoIWwuZW1wdHkpe3ZhciB1PWUuZ2V0Q29udGV4dFN0eWxlKGwpLGg9ZS5hcHBseUNvbnRleHRTdHlsZShsLHUscyk7cy5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP2UudXBkYXRlVHJhbnNpdGlvbnMocyxoLmRpZmZQcm9wcyk6cy5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwO3ZhciBmPWUudXBkYXRlU3R5bGVIaW50cyhzKTtmJiZpLnB1c2gocyl9fXJldHVybiBpfTtxYS5nZXRQcm9wZXJ0aWVzRGlmZj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLnByb3BEaWZmcz1yLl9wcml2YXRlLnByb3BEaWZmc3x8e30saT10KyItIitlLGE9bltpXTtpZihhKXJldHVybiBhO2Zvcih2YXIgcz1bXSxsPXt9LHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9clt1XSxmPXRbdV09PT1LYixkPWVbdV09PT1LYixwPWYhPT1kLG09aC5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aD4wO2lmKHB8fGQmJm0pe3ZhciBnPXZvaWQgMDtwJiZtfHxwP2c9aC5wcm9wZXJ0aWVzOm0mJihnPWgubWFwcGVkUHJvcGVydGllcyk7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5Kyspe2Zvcih2YXIgdj1nW3ldLHg9di5uYW1lLGI9ITEsVD11KzE7VDxyLmxlbmd0aDtUKyspe3ZhciBTPXJbVF0sdz1lW1RdPT09S2I7aWYodyYmKGI9Uy5wcm9wZXJ0aWVzW3YubmFtZV0hPW51bGwsYikpYnJlYWt9IWxbeF0mJiFiJiYobFt4XT0hMCxzLnB1c2goeCkpfX19cmV0dXJuIG5baV09cyxzfTtxYS5nZXRDb250ZXh0TWV0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPSIiLG4saT10Ll9wcml2YXRlLnN0eWxlQ3h0S2V5fHwiIixhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV0sbD1zLnNlbGVjdG9yJiZzLnNlbGVjdG9yLm1hdGNoZXModCk7bD9yKz1LYjpyKz1nWmV9cmV0dXJuIG49ZS5nZXRQcm9wZXJ0aWVzRGlmZihpLHIpLHQuX3ByaXZhdGUuc3R5bGVDeHRLZXk9cix7a2V5OnIsZGlmZlByb3BOYW1lczpuLGVtcHR5Om4ubGVuZ3RoPT09MH19O3FhLmdldENvbnRleHRTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXRoaXMsbj10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXM9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzfHx7fTtpZihuW2VdKXJldHVybiBuW2VdO2Zvcih2YXIgaT17X3ByaXZhdGU6e2tleTplfX0sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdLGw9ZVthXT09PUtiO2lmKGwpZm9yKHZhciB1PTA7dTxzLnByb3BlcnRpZXMubGVuZ3RoO3UrKyl7dmFyIGg9cy5wcm9wZXJ0aWVzW3VdO2lbaC5uYW1lXT1ofX1yZXR1cm4gbltlXT1pLGl9O3FhLmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcyxpPXQuZGlmZlByb3BOYW1lcyxhPXt9LHM9bi50eXBlcyxsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciB1PWlbbF0saD1lW3VdLGY9ci5wc3R5bGUodSk7aWYoIWgpaWYoZilmLmJ5cGFzcz9oPXtuYW1lOnUsZGVsZXRlQnlwYXNzZWQ6ITB9Omg9e25hbWU6dSxkZWxldGU6ITB9O2Vsc2UgY29udGludWU7aWYoZiE9PWgpe2lmKGgubWFwcGVkPT09cy5mbiYmZiE9bnVsbCYmZi5tYXBwaW5nIT1udWxsJiZmLm1hcHBpbmcudmFsdWU9PT1oLnZhbHVlKXt2YXIgZD1mLm1hcHBpbmcscD1kLmZuVmFsdWU9aC52YWx1ZShyKTtpZihwPT09ZC5wcmV2Rm5WYWx1ZSljb250aW51ZX12YXIgbT1hW3VdPXtwcmV2OmZ9O24uYXBwbHlQYXJzZWRQcm9wZXJ0eShyLGgpLG0ubmV4dD1yLnBzdHlsZSh1KSxtLm5leHQmJm0ubmV4dC5ieXBhc3MmJihtLm5leHQ9bS5uZXh0LmJ5cGFzc2VkKX19cmV0dXJue2RpZmZQcm9wczphfX07cWEudXBkYXRlU3R5bGVIaW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLHI9dGhpcyxuPXIucHJvcGVydHlHcm91cE5hbWVzLGk9ci5wcm9wZXJ0eUdyb3VwS2V5cyxhPW8oZnVuY3Rpb24obmUsdGUsaGUpe3JldHVybiByLmdldFByb3BlcnRpZXNIYXNoKG5lLHRlLGhlKX0sInByb3BIYXNoIikscz1lLnN0eWxlS2V5O2lmKHQucmVtb3ZlZCgpKXJldHVybiExO3ZhciBsPWUuZ3JvdXA9PT0ibm9kZXMiLHU9dC5fcHJpdmF0ZS5zdHlsZTtuPU9iamVjdC5rZXlzKHUpO2Zvcih2YXIgaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdO2Uuc3R5bGVLZXlzW2ZdPVtYMSxxYl19Zm9yKHZhciBkPW8oZnVuY3Rpb24obmUsdGUpe3JldHVybiBlLnN0eWxlS2V5c1t0ZV1bMF09dDQobmUsZS5zdHlsZUtleXNbdGVdWzBdKX0sInVwZGF0ZUdyS2V5MSIpLHA9byhmdW5jdGlvbihuZSx0ZSl7cmV0dXJuIGUuc3R5bGVLZXlzW3RlXVsxXT1yNChuZSxlLnN0eWxlS2V5c1t0ZV1bMV0pfSwidXBkYXRlR3JLZXkyIiksbT1vKGZ1bmN0aW9uKG5lLHRlKXtkKG5lLHRlKSxwKG5lLHRlKX0sInVwZGF0ZUdyS2V5IiksZz1vKGZ1bmN0aW9uKG5lLHRlKXtmb3IodmFyIGhlPTA7aGU8bmUubGVuZ3RoO2hlKyspe3ZhciBsZT1uZS5jaGFyQ29kZUF0KGhlKTtkKGxlLHRlKSxwKGxlLHRlKX19LCJ1cGRhdGVHcktleVdTdHIiKSx5PTJlOSx2PW8oZnVuY3Rpb24obmUpe3JldHVybi0xMjg8bmUmJm5lPDEyOCYmTWF0aC5mbG9vcihuZSkhPT1uZT95LShuZSoxMDI0fDApOm5lfSwiY2xlYW5OdW0iKSx4PTA7eDxuLmxlbmd0aDt4Kyspe3ZhciBiPW5beF0sVD11W2JdO2lmKFQhPW51bGwpe3ZhciBTPXRoaXMucHJvcGVydGllc1tiXSx3PVMudHlwZSxFPVMuZ3JvdXBLZXksXz12b2lkIDA7Uy5oYXNoT3ZlcnJpZGUhPW51bGw/Xz1TLmhhc2hPdmVycmlkZSh0LFQpOlQucGZWYWx1ZSE9bnVsbCYmKF89VC5wZlZhbHVlKTt2YXIgQz1TLmVudW1zPT1udWxsP1QudmFsdWU6bnVsbCxEPV8hPW51bGwsTz1DIT1udWxsLFI9RHx8TyxrPVQudW5pdHM7aWYody5udW1iZXImJlImJiF3Lm11bHRpcGxlKXt2YXIgTD1EP186QzttKHYoTCksRSksIUQmJmshPW51bGwmJmcoayxFKX1lbHNlIGcoVC5zdHJWYWx1ZSxFKX19Zm9yKHZhciBBPVtYMSxxYl0sST0wO0k8aS5sZW5ndGg7SSsrKXt2YXIgTT1pW0ldLFA9ZS5zdHlsZUtleXNbTV07QVswXT10NChQWzBdLEFbMF0pLEFbMV09cjQoUFsxXSxBWzFdKX1lLnN0eWxlS2V5PVRZZShBWzBdLEFbMV0pO3ZhciBCPWUuc3R5bGVLZXlzO2UubGFiZWxEaW1zS2V5PUxmKEIubGFiZWxEaW1lbnNpb25zKTt2YXIgRj1hKHQsWyJsYWJlbCJdLEIubGFiZWxEaW1lbnNpb25zKTtpZihlLmxhYmVsS2V5PUxmKEYpLGUubGFiZWxTdHlsZUtleT1MZihtNihCLmNvbW1vbkxhYmVsLEYpKSwhbCl7dmFyIHo9YSh0LFsic291cmNlLWxhYmVsIl0sQi5sYWJlbERpbWVuc2lvbnMpO2Uuc291cmNlTGFiZWxLZXk9TGYoeiksZS5zb3VyY2VMYWJlbFN0eWxlS2V5PUxmKG02KEIuY29tbW9uTGFiZWwseikpO3ZhciAkPWEodCxbInRhcmdldC1sYWJlbCJdLEIubGFiZWxEaW1lbnNpb25zKTtlLnRhcmdldExhYmVsS2V5PUxmKCQpLGUudGFyZ2V0TGFiZWxTdHlsZUtleT1MZihtNihCLmNvbW1vbkxhYmVsLCQpKX1pZihsKXt2YXIgVT1lLnN0eWxlS2V5cyxLPVUubm9kZUJvZHksZWU9VS5ub2RlQm9yZGVyLFk9VS5ub2RlT3V0bGluZSxjZT1VLmJhY2tncm91bmRJbWFnZSxaPVUuY29tcG91bmQsdWU9VS5waWUsUT1bSyxlZSxZLGNlLFosdWVdLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4gaiE9bnVsbH0pLnJlZHVjZShtNixbWDEscWJdKTtlLm5vZGVLZXk9TGYoUSksZS5oYXNQaWU9dWUhPW51bGwmJnVlWzBdIT09WDEmJnVlWzFdIT09cWJ9cmV0dXJuIHMhPT1lLnN0eWxlS2V5fTtxYS5jbGVhclN0eWxlSGludHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZTtlLnN0eWxlQ3h0S2V5PSIiLGUuc3R5bGVLZXlzPXt9LGUuc3R5bGVLZXk9bnVsbCxlLmxhYmVsS2V5PW51bGwsZS5sYWJlbFN0eWxlS2V5PW51bGwsZS5zb3VyY2VMYWJlbEtleT1udWxsLGUuc291cmNlTGFiZWxTdHlsZUtleT1udWxsLGUudGFyZ2V0TGFiZWxLZXk9bnVsbCxlLnRhcmdldExhYmVsU3R5bGVLZXk9bnVsbCxlLm5vZGVLZXk9bnVsbCxlLmhhc1BpZT1udWxsfTtxYS5hcHBseVBhcnNlZFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPWUsaT10Ll9wcml2YXRlLnN0eWxlLGEscz1yLnR5cGVzLGw9ci5wcm9wZXJ0aWVzW24ubmFtZV0udHlwZSx1PW4uYnlwYXNzLGg9aVtuLm5hbWVdLGY9aCYmaC5ieXBhc3MsZD10Ll9wcml2YXRlLHA9Im1hcHBpbmciLG09byhmdW5jdGlvbihLKXtyZXR1cm4gSz09bnVsbD9udWxsOksucGZWYWx1ZSE9bnVsbD9LLnBmVmFsdWU6Sy52YWx1ZX0sImdldFZhbCIpLGc9byhmdW5jdGlvbigpe3ZhciBLPW0oaCksZWU9bShuKTtyLmNoZWNrVHJpZ2dlcnModCxuLm5hbWUsSyxlZSl9LCJjaGVja1RyaWdnZXJzIik7aWYoZS5uYW1lPT09ImN1cnZlLXN0eWxlIiYmdC5pc0VkZ2UoKSYmKGUudmFsdWUhPT0iYmV6aWVyIiYmdC5pc0xvb3AoKXx8ZS52YWx1ZT09PSJoYXlzdGFjayImJih0LnNvdXJjZSgpLmlzUGFyZW50KCl8fHQudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYobj1lPXRoaXMucGFyc2UoZS5uYW1lLCJiZXppZXIiLHUpKSxuLmRlbGV0ZSlyZXR1cm4gaVtuLm5hbWVdPXZvaWQgMCxnKCksITA7aWYobi5kZWxldGVCeXBhc3NlZClyZXR1cm4gaD9oLmJ5cGFzcz8oaC5ieXBhc3NlZD12b2lkIDAsZygpLCEwKTohMTooZygpLCEwKTtpZihuLmRlbGV0ZUJ5cGFzcylyZXR1cm4gaD9oLmJ5cGFzcz8oaVtuLm5hbWVdPWguYnlwYXNzZWQsZygpLCEwKTohMTooZygpLCEwKTt2YXIgeT1vKGZ1bmN0aW9uKCl7aG4oIkRvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAiK3QuaWQoKSsiYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCIrbi5uYW1lKyJgIHdpdGggZGF0YSBmaWVsZCBgIituLmZpZWxkKyJgKTsgdHJ5IGEgYFsiK24uZmllbGQrIl1gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCIrbi5maWVsZCsiYCBkZWZpbmVkIil9LCJwcmludE1hcHBpbmdFcnIiKTtzd2l0Y2gobi5tYXBwZWQpe2Nhc2Ugcy5tYXBEYXRhOntmb3IodmFyIHY9bi5maWVsZC5zcGxpdCgiLiIpLHg9ZC5kYXRhLGI9MDtiPHYubGVuZ3RoJiZ4O2IrKyl7dmFyIFQ9dltiXTt4PXhbVF19aWYoeD09bnVsbClyZXR1cm4geSgpLCExO3ZhciBTO2lmKF90KHgpKXt2YXIgdz1uLmZpZWxkTWF4LW4uZmllbGRNaW47dz09PTA/Uz0wOlM9KHgtbi5maWVsZE1pbikvd31lbHNlIHJldHVybiBobigiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIituLmZpZWxkKyI6ICIreCsiYCBmb3IgYCIrdC5pZCgpKyJgIGlzIG5vbi1udW1lcmljKSIpLCExO2lmKFM8MD9TPTA6Uz4xJiYoUz0xKSxsLmNvbG9yKXt2YXIgRT1uLnZhbHVlTWluWzBdLF89bi52YWx1ZU1heFswXSxDPW4udmFsdWVNaW5bMV0sRD1uLnZhbHVlTWF4WzFdLE89bi52YWx1ZU1pblsyXSxSPW4udmFsdWVNYXhbMl0saz1uLnZhbHVlTWluWzNdPT1udWxsPzE6bi52YWx1ZU1pblszXSxMPW4udmFsdWVNYXhbM109PW51bGw/MTpuLnZhbHVlTWF4WzNdLEE9W01hdGgucm91bmQoRSsoXy1FKSpTKSxNYXRoLnJvdW5kKEMrKEQtQykqUyksTWF0aC5yb3VuZChPKyhSLU8pKlMpLE1hdGgucm91bmQoaysoTC1rKSpTKV07YT17YnlwYXNzOm4uYnlwYXNzLG5hbWU6bi5uYW1lLHZhbHVlOkEsc3RyVmFsdWU6InJnYigiK0FbMF0rIiwgIitBWzFdKyIsICIrQVsyXSsiKSJ9fWVsc2UgaWYobC5udW1iZXIpe3ZhciBJPW4udmFsdWVNaW4rKG4udmFsdWVNYXgtbi52YWx1ZU1pbikqUzthPXRoaXMucGFyc2Uobi5uYW1lLEksbi5ieXBhc3MscCl9ZWxzZSByZXR1cm4hMTtpZighYSlyZXR1cm4geSgpLCExO2EubWFwcGluZz1uLG49YTticmVha31jYXNlIHMuZGF0YTp7Zm9yKHZhciBNPW4uZmllbGQuc3BsaXQoIi4iKSxQPWQuZGF0YSxCPTA7QjxNLmxlbmd0aCYmUDtCKyspe3ZhciBGPU1bQl07UD1QW0ZdfWlmKFAhPW51bGwmJihhPXRoaXMucGFyc2Uobi5uYW1lLFAsbi5ieXBhc3MscCkpLCFhKXJldHVybiB5KCksITE7YS5tYXBwaW5nPW4sbj1hO2JyZWFrfWNhc2Ugcy5mbjp7dmFyIHo9bi52YWx1ZSwkPW4uZm5WYWx1ZSE9bnVsbD9uLmZuVmFsdWU6eih0KTtpZihuLnByZXZGblZhbHVlPSQsJD09bnVsbClyZXR1cm4gaG4oIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCIrbi5uYW1lKyJgIGZvciBlbGUgYCIrdC5pZCgpKyJgIGlzIG51bGwpIiksITE7aWYoYT10aGlzLnBhcnNlKG4ubmFtZSwkLG4uYnlwYXNzLHApLCFhKXJldHVybiBobigiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK24ubmFtZSsiYCBmb3IgZWxlIGAiK3QuaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO2EubWFwcGluZz1RYyhuKSxuPWE7YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gdT8oZj9uLmJ5cGFzc2VkPWguYnlwYXNzZWQ6bi5ieXBhc3NlZD1oLGlbbi5uYW1lXT1uKTpmP2guYnlwYXNzZWQ9bjppW24ubmFtZV09bixnKCksITB9O3FhLmNsZWFuRWxlbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZih0aGlzLmNsZWFyU3R5bGVIaW50cyhuKSxuLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLG4uZGlydHlCb3VuZGluZ0JveENhY2hlKCksIWUpbi5fcHJpdmF0ZS5zdHlsZT17fTtlbHNlIGZvcih2YXIgaT1uLl9wcml2YXRlLnN0eWxlLGE9T2JqZWN0LmtleXMoaSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9aVtsXTt1IT1udWxsJiYodS5ieXBhc3M/dS5ieXBhc3NlZD1udWxsOmlbbF09bnVsbCl9fX07cWEudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeSxlPXQubXV0YWJsZUVsZW1lbnRzKCk7ZS51cGRhdGVTdHlsZSgpfTtxYS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10Ll9wcml2YXRlLGk9dC5wc3R5bGUoInRyYW5zaXRpb24tcHJvcGVydHkiKS52YWx1ZSxhPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWR1cmF0aW9uIikucGZWYWx1ZSxzPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWRlbGF5IikucGZWYWx1ZTtpZihpLmxlbmd0aD4wJiZhPjApe2Zvcih2YXIgbD17fSx1PSExLGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPXQucHN0eWxlKGYpLHA9ZVtmXTtpZihwKXt2YXIgbT1wLnByZXYsZz1tLHk9cC5uZXh0IT1udWxsP3AubmV4dDpkLHY9ITEseD12b2lkIDAsYj0xZS02O2cmJihfdChnLnBmVmFsdWUpJiZfdCh5LnBmVmFsdWUpPyh2PXkucGZWYWx1ZS1nLnBmVmFsdWUseD1nLnBmVmFsdWUrYip2KTpfdChnLnZhbHVlKSYmX3QoeS52YWx1ZSk/KHY9eS52YWx1ZS1nLnZhbHVlLHg9Zy52YWx1ZStiKnYpOkVuKGcudmFsdWUpJiZFbih5LnZhbHVlKSYmKHY9Zy52YWx1ZVswXSE9PXkudmFsdWVbMF18fGcudmFsdWVbMV0hPT15LnZhbHVlWzFdfHxnLnZhbHVlWzJdIT09eS52YWx1ZVsyXSx4PWcuc3RyVmFsdWUpLHYmJihsW2ZdPXkuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh0LGYseCksdT0hMCkpfX1pZighdSlyZXR1cm47bi50cmFuc2l0aW9uaW5nPSEwLG5ldyBzeShmdW5jdGlvbihUKXtzPjA/dC5kZWxheUFuaW1hdGlvbihzKS5wbGF5KCkucHJvbWlzZSgpLnRoZW4oVCk6VCgpfSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmFuaW1hdGlvbih7c3R5bGU6bCxkdXJhdGlvbjphLGVhc2luZzp0LnBzdHlsZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iKS52YWx1ZSxxdWV1ZTohMX0pLnBsYXkoKS5wcm9taXNlKCl9KS50aGVuKGZ1bmN0aW9uKCl7ci5yZW1vdmVCeXBhc3Nlcyh0LGkpLHQuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxuLnRyYW5zaXRpb25pbmc9ITF9KX1lbHNlIG4udHJhbnNpdGlvbmluZyYmKHRoaXMucmVtb3ZlQnlwYXNzZXModCxpKSx0LmVtaXRBbmROb3RpZnkoInN0eWxlIiksbi50cmFuc2l0aW9uaW5nPSExKX07cWEuY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz10aGlzLnByb3BlcnRpZXNbZV0sbD1pKHMpO2whPW51bGwmJmwocixuKSYmYShzKX07cWEuY2hlY2taT3JkZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXM7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihhKXtyZXR1cm4gYS50cmlnZ2Vyc1pPcmRlcn0sZnVuY3Rpb24oKXtpLl9wcml2YXRlLmN5Lm5vdGlmeSgiem9yZGVyIix0KX0pfTtxYS5jaGVja0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihpKXtyZXR1cm4gaS50cmlnZ2Vyc0JvdW5kc30sZnVuY3Rpb24oaSl7dC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSx0LmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLGkudHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVycyYmZT09PSJjdXJ2ZS1zdHlsZSImJihyPT09ImJlemllciJ8fG49PT0iYmV6aWVyIikmJnQucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pLGkudHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzJiZlPT09ImRpc3BsYXkiJiYocj09PSJub25lInx8bj09PSJub25lIikmJnQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KX0pfTtxYS5jaGVja1RyaWdnZXJzPWZ1bmN0aW9uKHQsZSxyLG4pe3QuZGlydHlTdHlsZUNhY2hlKCksdGhpcy5jaGVja1pPcmRlclRyaWdnZXIodCxlLHIsbiksdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIodCxlLHIsbil9O3k0PXt9O3k0LmFwcGx5QnlwYXNzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT1bXSxzPSEwO2lmKGU9PT0iKiJ8fGU9PT0iKioiKXtpZihyIT09dm9pZCAwKWZvcih2YXIgbD0wO2w8aS5wcm9wZXJ0aWVzLmxlbmd0aDtsKyspe3ZhciB1PWkucHJvcGVydGllc1tsXSxoPXUubmFtZSxmPXRoaXMucGFyc2UoaCxyLCEwKTtmJiZhLnB1c2goZil9fWVsc2UgaWYoWnQoZSkpe3ZhciBkPXRoaXMucGFyc2UoZSxyLCEwKTtkJiZhLnB1c2goZCl9ZWxzZSBpZihVcihlKSl7dmFyIHA9ZTtuPXI7Zm9yKHZhciBtPU9iamVjdC5rZXlzKHApLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXSx2PXBbeV07aWYodj09PXZvaWQgMCYmKHY9cFtLNih5KV0pLHYhPT12b2lkIDApe3ZhciB4PXRoaXMucGFyc2UoeSx2LCEwKTt4JiZhLnB1c2goeCl9fX1lbHNlIHJldHVybiExO2lmKGEubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIGI9ITEsVD0wO1Q8dC5sZW5ndGg7VCsrKXtmb3IodmFyIFM9dFtUXSx3PXt9LEU9dm9pZCAwLF89MDtfPGEubGVuZ3RoO18rKyl7dmFyIEM9YVtfXTtpZihuKXt2YXIgRD1TLnBzdHlsZShDLm5hbWUpO0U9d1tDLm5hbWVdPXtwcmV2OkR9fWI9dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KFMsUWMoQykpfHxiLG4mJihFLm5leHQ9Uy5wc3R5bGUoQy5uYW1lKSl9YiYmdGhpcy51cGRhdGVTdHlsZUhpbnRzKFMpLG4mJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoUyx3LHMpfXJldHVybiBifTt5NC5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih0LGUscil7ZT1GQihlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWkuX3ByaXZhdGUuc3R5bGVbZV0scz10aGlzLnByb3BlcnRpZXNbZV0udHlwZSxsPXMuY29sb3IsdT1zLm11dGlwbGUsaD1hP2EucGZWYWx1ZSE9bnVsbD9hLnBmVmFsdWU6YS52YWx1ZTpudWxsOyFhfHwhYS5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhpLGUscik6KGEudmFsdWU9cixhLnBmVmFsdWUhPW51bGwmJihhLnBmVmFsdWU9ciksbD9hLnN0clZhbHVlPSJyZ2IoIityLmpvaW4oIiwiKSsiKSI6dT9hLnN0clZhbHVlPXIuam9pbigiICIpOmEuc3RyVmFsdWU9IiIrcix0aGlzLnVwZGF0ZVN0eWxlSGludHMoaSkpLHRoaXMuY2hlY2tUcmlnZ2VycyhpLGUsaCxyKX19O3k0LnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXModCx0aGlzLnByb3BlcnR5TmFtZXMsZSl9O3k0LnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ITAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxzPXt9LGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHU9ZVtsXSxoPXRoaXMucHJvcGVydGllc1t1XSxmPWEucHN0eWxlKGgubmFtZSk7aWYoISghZnx8IWYuYnlwYXNzKSl7dmFyIGQ9IiIscD10aGlzLnBhcnNlKHUsZCwhMCksbT1zW2gubmFtZV09e3ByZXY6Zn07dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KGEscCksbS5uZXh0PWEucHN0eWxlKGgubmFtZSl9fXRoaXMudXBkYXRlU3R5bGVIaW50cyhhKSxyJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGEscyxuKX19O1pCPXt9O1pCLmdldEVtU2l6ZUluUGl4ZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250YWluZXJDc3MoImZvbnQtc2l6ZSIpO3JldHVybiB0IT1udWxsP3BhcnNlRmxvYXQodCk6MX07WkIuY29udGFpbmVyQ3NzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByaXZhdGUuY3kscj1lLmNvbnRhaW5lcigpLG49ZS53aW5kb3coKTtpZihuJiZyJiZuLmdldENvbXB1dGVkU3R5bGUpcmV0dXJuIG4uZ2V0Q29tcHV0ZWRTdHlsZShyKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfTtKYz17fTtKYy5nZXRSZW5kZXJlZFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/dGhpcy5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxlLCEwKTp0aGlzLmdldFJhd1N0eWxlKHQsITApfTtKYy5nZXRSYXdTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7aWYodD10WzBdLHQpe2Zvcih2YXIgbj17fSxpPTA7aTxyLnByb3BlcnRpZXMubGVuZ3RoO2krKyl7dmFyIGE9ci5wcm9wZXJ0aWVzW2ldLHM9ci5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxhLm5hbWUsZSk7cyE9bnVsbCYmKG5bYS5uYW1lXT1zLG5bSzYoYS5uYW1lKV09cyl9cmV0dXJuIG59fTtKYy5nZXRJbmRleGVkU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5wc3R5bGUoZSlbcl1bbl07cmV0dXJuIGk/P3QuY3koKS5zdHlsZSgpLmdldERlZmF1bHRQcm9wZXJ0eShlKVtyXVswXX07SmMuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzO2lmKHQ9dFswXSx0KXt2YXIgaT1uLnByb3BlcnRpZXNbZV07aS5hbGlhcyYmKGk9aS5wb2ludHNUbyk7dmFyIGE9aS50eXBlLHM9dC5wc3R5bGUoaS5uYW1lKTtpZihzKXt2YXIgbD1zLnZhbHVlLHU9cy51bml0cyxoPXMuc3RyVmFsdWU7aWYociYmYS5udW1iZXImJmwhPW51bGwmJl90KGwpKXt2YXIgZj10LmN5KCkuem9vbSgpLGQ9byhmdW5jdGlvbih2KXtyZXR1cm4gdipmfSwiZ2V0UmVuZGVyZWRWYWx1ZSIpLHA9byhmdW5jdGlvbih2LHgpe3JldHVybiBkKHYpK3h9LCJnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyIpLG09RW4obCksZz1tP3UuZXZlcnkoZnVuY3Rpb24oeSl7cmV0dXJuIHkhPW51bGx9KTp1IT1udWxsO3JldHVybiBnP20/bC5tYXAoZnVuY3Rpb24oeSx2KXtyZXR1cm4gcCh5LHVbdl0pfSkuam9pbigiICIpOnAobCx1KTptP2wubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBadCh5KT95OiIiK2QoeSl9KS5qb2luKCIgIik6IiIrZChsKX1lbHNlIGlmKGghPW51bGwpcmV0dXJuIGh9cmV0dXJuIG51bGx9fTtKYy5nZXRBbmltYXRpb25TdGFydFN0eWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXSxhPWkubmFtZSxzPXQucHN0eWxlKGEpO3MhPT12b2lkIDAmJihVcihzKT9zPXRoaXMucGFyc2UoYSxzLnN0clZhbHVlKTpzPXRoaXMucGFyc2UoYSxzKSkscyYmKHJbYV09cyl9cmV0dXJuIHJ9O0pjLmdldFByb3BzTGlzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9W10sbj10LGk9ZS5wcm9wZXJ0aWVzO2lmKG4pZm9yKHZhciBhPU9iamVjdC5rZXlzKG4pLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PW5bbF0saD1pW2xdfHxpW0ZCKGwpXSxmPXRoaXMucGFyc2UoaC5uYW1lLHUpO2YmJnIucHVzaChmKX1yZXR1cm4gcn07SmMuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnNsaWNlKCksaSxhLHMsbCx1LGg7Zm9yKHU9MDt1PGUubGVuZ3RoO3UrKylpZihpPWVbdV0sYT10LnBzdHlsZShpLCExKSxhIT1udWxsKWlmKGEucGZWYWx1ZSE9bnVsbCluWzBdPXQ0KGwsblswXSksblsxXT1yNChsLG5bMV0pO2Vsc2UgZm9yKHM9YS5zdHJWYWx1ZSxoPTA7aDxzLmxlbmd0aDtoKyspbD1zLmNoYXJDb2RlQXQoaCksblswXT10NChsLG5bMF0pLG5bMV09cjQobCxuWzFdKTtyZXR1cm4gbn07SmMuZ2V0UHJvcGVydGllc0hhc2g9SmMuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoO2xDPXt9O2xDLmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxpPW4uc2VsZWN0b3IsYT1uLnN0eWxlfHxuLmNzcyxzPU9iamVjdC5rZXlzKGEpO2Uuc2VsZWN0b3IoaSk7Zm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0saD1hW3VdO2UuY3NzKHUsaCl9fXJldHVybiBlfTtsQy5mcm9tSnNvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tSnNvbih0KSxlfTtsQy5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5kZWZhdWx0TGVuZ3RoO2U8dGhpcy5sZW5ndGg7ZSsrKXtmb3IodmFyIHI9dGhpc1tlXSxuPXIuc2VsZWN0b3IsaT1yLnByb3BlcnRpZXMsYT17fSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YVtsLm5hbWVdPWwuc3RyVmFsdWV9dC5wdXNoKHtzZWxlY3RvcjpuP24udG9TdHJpbmcoKToiY29yZSIsc3R5bGU6YX0pfXJldHVybiB0fTtKQj17fTtKQi5hcHBlbmRGcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10aGlzLG49IiIrdCxpLGEscztuPW4ucmVwbGFjZSgvWy9dWypdKFxzfC4pKz9bKl1bL10vZywiIik7ZnVuY3Rpb24gbCgpe24ubGVuZ3RoPmkubGVuZ3RoP249bi5zdWJzdHIoaS5sZW5ndGgpOm49IiJ9byhsLCJyZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmciKTtmdW5jdGlvbiB1KCl7YS5sZW5ndGg+cy5sZW5ndGg/YT1hLnN1YnN0cihzLmxlbmd0aCk6YT0iIn1mb3Iobyh1LCJyZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSIpOzspe3ZhciBoPW4ubWF0Y2goL15ccyokLyk7aWYoaClicmVhazt2YXIgZj1uLm1hdGNoKC9eXHMqKCg/Oi58XHMpKz8pXHMqXHsoKD86LnxccykrPylcfS8pO2lmKCFmKXtobigiSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogIituKTticmVha31pPWZbMF07dmFyIGQ9ZlsxXTtpZihkIT09ImNvcmUiKXt2YXIgcD1uZXcgJGYoZCk7aWYocC5pbnZhbGlkKXtobigiU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBzZWxlY3RvciBmb3VuZCBpbiBzdHJpbmcgc3R5bGVzaGVldDogIitkKSxsKCk7Y29udGludWV9fXZhciBtPWZbMl0sZz0hMTthPW07Zm9yKHZhciB5PVtdOzspe3ZhciB2PWEubWF0Y2goL15ccyokLyk7aWYodilicmVhazt2YXIgeD1hLm1hdGNoKC9eXHMqKC4rPylccyo6XHMqKC4rPykoPzpccyo7fFxzKiQpLyk7aWYoIXgpe2huKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrbSksZz0hMDticmVha31zPXhbMF07dmFyIGI9eFsxXSxUPXhbMl0sUz1lLnByb3BlcnRpZXNbYl07aWYoIVMpe2huKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBuYW1lIGluOiAiK3MpLHUoKTtjb250aW51ZX12YXIgdz1yLnBhcnNlKGIsVCk7aWYoIXcpe2huKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAiK3MpLHUoKTtjb250aW51ZX15LnB1c2goe25hbWU6Yix2YWw6VH0pLHUoKX1pZihnKXtsKCk7YnJlYWt9ci5zZWxlY3RvcihkKTtmb3IodmFyIEU9MDtFPHkubGVuZ3RoO0UrKyl7dmFyIF89eVtFXTtyLmNzcyhfLm5hbWUsXy52YWwpfWwoKX1yZXR1cm4gcn07SkIuZnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tU3RyaW5nKHQpLGV9O2thPXt9OyhmdW5jdGlvbigpe3ZhciB0PVdpLGU9U3FlLHI9QXFlLG49X3FlLGk9RHFlLGE9byhmdW5jdGlvbihRKXtyZXR1cm4iXiIrUSsiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sImRhdGEiKSxzPW8oZnVuY3Rpb24oUSl7dmFyIGo9dCsifFxcdyt8IitlKyJ8IityKyJ8IituKyJ8IitpO3JldHVybiJeIitRKyJcXHMqXFwoKFtcXHdcXC5dKylcXHMqXFwsXFxzKigiK3QrIilcXHMqXFwsXFxzKigiK3QrIilcXHMqLFxccyooIitqKyIpXFxzKlxcLFxccyooIitqKyIpXFwpJCJ9LCJtYXBEYXRhIiksbD1bYF51cmxcXHMqXFwoXFxzKlsnIl0/KC4rPylbJyJdP1xccypcXCkkYCwiXihub25lKSQiLCJeKC4rKSQiXTtrYS50eXBlcz17dGltZTp7bnVtYmVyOiEwLG1pbjowLHVuaXRzOiJzfG1zIixpbXBsaWNpdFVuaXRzOiJtcyJ9LHBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIn0scGVyY2VudGFnZXM6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIixtdWx0aXBsZTohMH0semVyb09uZU51bWJlcjp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwfSx6ZXJvT25lTnVtYmVyczp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxuT25lT25lTnVtYmVyOntudW1iZXI6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxub25OZWdhdGl2ZUludDp7bnVtYmVyOiEwLG1pbjowLGludGVnZXI6ITAsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlTnVtYmVyOntudW1iZXI6ITAsbWluOjAsdW5pdGxlc3M6ITB9LHBvc2l0aW9uOntlbnVtczpbInBhcmVudCIsIm9yaWdpbiJdfSxub2RlU2l6ZTp7bnVtYmVyOiEwLG1pbjowLGVudW1zOlsibGFiZWwiXX0sbnVtYmVyOntudW1iZXI6ITAsdW5pdGxlc3M6ITB9LG51bWJlcnM6e251bWJlcjohMCx1bml0bGVzczohMCxtdWx0aXBsZTohMH0scG9zaXRpdmVOdW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMCxtaW46MCxzdHJpY3RNaW46ITB9LHNpemU6e251bWJlcjohMCxtaW46MH0sYmlkaXJlY3Rpb25hbFNpemU6e251bWJlcjohMH0sYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITB9LGJpZGlyZWN0aW9uYWxTaXplczp7bnVtYmVyOiEwLG11bHRpcGxlOiEwfSxzaXplTWF5YmVQZXJjZW50OntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwfSxheGlzRGlyZWN0aW9uOntlbnVtczpbImhvcml6b250YWwiLCJsZWZ0d2FyZCIsInJpZ2h0d2FyZCIsInZlcnRpY2FsIiwidXB3YXJkIiwiZG93bndhcmQiLCJhdXRvIl19LHBhZGRpbmdSZWxhdGl2ZVRvOntlbnVtczpbIndpZHRoIiwiaGVpZ2h0IiwiYXZlcmFnZSIsIm1pbiIsIm1heCJdfSxiZ1dIOntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwLGVudW1zOlsiYXV0byJdLG11bHRpcGxlOiEwfSxiZ1Bvczp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMCxtdWx0aXBsZTohMH0sYmdSZWxhdGl2ZVRvOntlbnVtczpbImlubmVyIiwiaW5jbHVkZS1wYWRkaW5nIl0sbXVsdGlwbGU6ITB9LGJnUmVwZWF0OntlbnVtczpbInJlcGVhdCIsInJlcGVhdC14IiwicmVwZWF0LXkiLCJuby1yZXBlYXQiXSxtdWx0aXBsZTohMH0sYmdGaXQ6e2VudW1zOlsibm9uZSIsImNvbnRhaW4iLCJjb3ZlciJdLG11bHRpcGxlOiEwfSxiZ0Nyb3NzT3JpZ2luOntlbnVtczpbImFub255bW91cyIsInVzZS1jcmVkZW50aWFscyIsIm51bGwiXSxtdWx0aXBsZTohMH0sYmdDbGlwOntlbnVtczpbIm5vbmUiLCJub2RlIl0sbXVsdGlwbGU6ITB9LGJnQ29udGFpbm1lbnQ6e2VudW1zOlsiaW5zaWRlIiwib3ZlciJdLG11bHRpcGxlOiEwfSxjb2xvcjp7Y29sb3I6ITB9LGNvbG9yczp7Y29sb3I6ITAsbXVsdGlwbGU6ITB9LGZpbGw6e2VudW1zOlsic29saWQiLCJsaW5lYXItZ3JhZGllbnQiLCJyYWRpYWwtZ3JhZGllbnQiXX0sYm9vbDp7ZW51bXM6WyJ5ZXMiLCJubyJdfSxib29sczp7ZW51bXM6WyJ5ZXMiLCJubyJdLG11bHRpcGxlOiEwfSxsaW5lU3R5bGU6e2VudW1zOlsic29saWQiLCJkb3R0ZWQiLCJkYXNoZWQiXX0sbGluZUNhcDp7ZW51bXM6WyJidXR0Iiwicm91bmQiLCJzcXVhcmUiXX0sbGluZVBvc2l0aW9uOntlbnVtczpbImNlbnRlciIsImluc2lkZSIsIm91dHNpZGUiXX0sbGluZUpvaW46e2VudW1zOlsicm91bmQiLCJiZXZlbCIsIm1pdGVyIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSIsInJvdW5kLXNlZ21lbnRzIiwicm91bmQtdGF4aSJdfSxyYWRpdXNUeXBlOntlbnVtczpbImFyYy1yYWRpdXMiLCJpbmZsdWVuY2UtcmFkaXVzIl0sbXVsdGlwbGU6ITB9LGZvbnRGYW1pbHk6e3JlZ2V4OideKFtcXHctIFxcIl0rKD86XFxzKixcXHMqW1xcdy0gXFwiXSspKikkJ30sZm9udFN0eWxlOntlbnVtczpbIml0YWxpYyIsIm5vcm1hbCIsIm9ibGlxdWUiXX0sZm9udFdlaWdodDp7ZW51bXM6WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjgwMCIsIjkwMCIsMTAwLDIwMCwzMDAsNDAwLDUwMCw2MDAsNzAwLDgwMCw5MDBdfSx0ZXh0RGVjb3JhdGlvbjp7ZW51bXM6WyJub25lIiwidW5kZXJsaW5lIiwib3ZlcmxpbmUiLCJsaW5lLXRocm91Z2giXX0sdGV4dFRyYW5zZm9ybTp7ZW51bXM6WyJub25lIiwidXBwZXJjYXNlIiwibG93ZXJjYXNlIl19LHRleHRXcmFwOntlbnVtczpbIm5vbmUiLCJ3cmFwIiwiZWxsaXBzaXMiXX0sdGV4dE92ZXJmbG93V3JhcDp7ZW51bXM6WyJ3aGl0ZXNwYWNlIiwiYW55d2hlcmUiXX0sdGV4dEJhY2tncm91bmRTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdfSxub2RlU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiLCJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIiwiYm90dG9tcm91bmRyZWN0YW5nbGUiLCJib3R0b20tcm91bmQtcmVjdGFuZ2xlIiwiYmFycmVsIiwiZWxsaXBzZSIsInRyaWFuZ2xlIiwicm91bmQtdHJpYW5nbGUiLCJzcXVhcmUiLCJwZW50YWdvbiIsInJvdW5kLXBlbnRhZ29uIiwiaGV4YWdvbiIsInJvdW5kLWhleGFnb24iLCJjb25jYXZlaGV4YWdvbiIsImNvbmNhdmUtaGV4YWdvbiIsImhlcHRhZ29uIiwicm91bmQtaGVwdGFnb24iLCJvY3RhZ29uIiwicm91bmQtb2N0YWdvbiIsInRhZyIsInJvdW5kLXRhZyIsInN0YXIiLCJkaWFtb25kIiwicm91bmQtZGlhbW9uZCIsInZlZSIsInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiLCJwb2x5Z29uIl19LG92ZXJsYXlTaGFwZTp7ZW51bXM6WyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImVsbGlwc2UiXX0sY29ybmVyUmFkaXVzOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJhdXRvIl19LGNvbXBvdW5kSW5jbHVkZUxhYmVsczp7ZW51bXM6WyJpbmNsdWRlIiwiZXhjbHVkZSJdfSxhcnJvd1NoYXBlOntlbnVtczpbInRlZSIsInRyaWFuZ2xlIiwidHJpYW5nbGUtdGVlIiwiY2lyY2xlLXRyaWFuZ2xlIiwidHJpYW5nbGUtY3Jvc3MiLCJ0cmlhbmdsZS1iYWNrY3VydmUiLCJ2ZWUiLCJzcXVhcmUiLCJjaXJjbGUiLCJkaWFtb25kIiwiY2hldnJvbiIsIm5vbmUiXX0sYXJyb3dGaWxsOntlbnVtczpbImZpbGxlZCIsImhvbGxvdyJdfSxhcnJvd1dpZHRoOntudW1iZXI6ITAsdW5pdHM6IiV8cHh8ZW0iLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbIm1hdGNoLWxpbmUiXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6YSgiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OmEoImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDphKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6cygibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OnMoIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpzKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIiwiZW5kcG9pbnRzIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKFEsail7c3dpdGNoKFEubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIGpbMF0hPT0iZGVnIiYmalswXSE9PSJyYWQiJiZqWzFdIT09ImRlZyImJmpbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIFp0KFFbMF0pfHxqWzBdPT09ImRlZyJ8fGpbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX0sInZhbGlkYXRlIil9LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqLFxccyooIit0KyIpXFxzKixcXHMqKCIrdCsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKFEpe3ZhciBqPVEubGVuZ3RoO3JldHVybiBqPT09MXx8aj09PTJ8fGo9PT00fSwidmFsaWRhdGUiKX19O3ZhciB1PXt6ZXJvTm9uWmVybzpvKGZ1bmN0aW9uKFEsail7cmV0dXJuKFE9PW51bGx8fGo9PW51bGwpJiZRIT09anx8UT09MCYmaiE9MD8hMDpRIT0wJiZqPT0wfSwiemVyb05vblplcm8iKSxhbnk6byhmdW5jdGlvbihRLGope3JldHVybiBRIT1qfSwiYW55IiksZW1wdHlOb25FbXB0eTpvKGZ1bmN0aW9uKFEsail7dmFyIG5lPVBmKFEpLHRlPVBmKGopO3JldHVybiBuZSYmIXRlfHwhbmUmJnRlfSwiZW1wdHlOb25FbXB0eSIpfSxoPWthLnR5cGVzLGY9W3tuYW1lOiJsYWJlbCIsdHlwZTpoLnRleHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNaT3JkZXI6dS5lbXB0eU5vbkVtcHR5fSx7bmFtZToidGV4dC1yb3RhdGlvbiIsdHlwZTpoLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLGQ9W3tuYW1lOiJzb3VyY2UtbGFiZWwiLHR5cGU6aC50ZXh0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtcm90YXRpb24iLHR5cGU6aC50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1tYXJnaW4teCIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS10ZXh0LW9mZnNldCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxwPVt7bmFtZToidGFyZ2V0LWxhYmVsIix0eXBlOmgudGV4dCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LXJvdGF0aW9uIix0eXBlOmgudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LW1hcmdpbi15Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sbT1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOmguZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6aC5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpoLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6aC50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOmgudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6aC50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOmgucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxnPVt7bmFtZToidGV4dC12YWxpZ24iLHR5cGU6aC52YWxpZ24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWhhbGlnbiIsdHlwZTpoLmhhbGlnbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InRleHQtb3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1ib3JkZXItd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItc3R5bGUiLHR5cGU6aC5ib3JkZXJTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtYmFja2dyb3VuZC1zaGFwZSIsdHlwZTpoLnRleHRCYWNrZ3JvdW5kU2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWp1c3RpZmljYXRpb24iLHR5cGU6aC5qdXN0aWZpY2F0aW9ufV0seT1be25hbWU6ImV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ0ZXh0LWV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9XSx2PVt7bmFtZToiZGlzcGxheSIsdHlwZTpoLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6dS5hbnksdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiEwfSx7bmFtZToidmlzaWJpbGl0eSIsdHlwZTpoLnZpc2liaWxpdHksdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJvcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc1pPcmRlcjp1Lnplcm9Ob25aZXJvfSx7bmFtZToidGV4dC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im1pbi16b29tZWQtZm9udC1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6InotY29tcG91bmQtZGVwdGgiLHR5cGU6aC56Q29tcG91bmREZXB0aCx0cmlnZ2Vyc1pPcmRlcjp1LmFueX0se25hbWU6InotaW5kZXgtY29tcGFyZSIsdHlwZTpoLnpJbmRleENvbXBhcmUsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ6LWluZGV4Iix0eXBlOmgubnVtYmVyLHRyaWdnZXJzWk9yZGVyOnUuYW55fV0seD1be25hbWU6Im92ZXJsYXktcGFkZGluZyIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJvdmVybGF5LWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJvdmVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJvdmVybGF5LXNoYXBlIix0eXBlOmgub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3ZlcmxheS1jb3JuZXItcmFkaXVzIix0eXBlOmguY29ybmVyUmFkaXVzfV0sYj1be25hbWU6InVuZGVybGF5LXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidW5kZXJsYXktY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InVuZGVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJ1bmRlcmxheS1zaGFwZSIsdHlwZTpoLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InVuZGVybGF5LWNvcm5lci1yYWRpdXMiLHR5cGU6aC5jb3JuZXJSYWRpdXN9XSxUPVt7bmFtZToidHJhbnNpdGlvbi1wcm9wZXJ0eSIsdHlwZTpoLnByb3BMaXN0fSx7bmFtZToidHJhbnNpdGlvbi1kdXJhdGlvbiIsdHlwZTpoLnRpbWV9LHtuYW1lOiJ0cmFuc2l0aW9uLWRlbGF5Iix0eXBlOmgudGltZX0se25hbWU6InRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIix0eXBlOmguZWFzaW5nfV0sUz1vKGZ1bmN0aW9uKFEsail7cmV0dXJuIGoudmFsdWU9PT0ibGFiZWwiPy1RLnBvb2xJbmRleCgpOmoucGZWYWx1ZX0sIm5vZGVTaXplSGFzaE92ZXJyaWRlIiksdz1be25hbWU6ImhlaWdodCIsdHlwZTpoLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55LGhhc2hPdmVycmlkZTpTfSx7bmFtZToid2lkdGgiLHR5cGU6aC5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSxoYXNoT3ZlcnJpZGU6U30se25hbWU6InNoYXBlIix0eXBlOmgubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6aC5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29ybmVyLXJhZGl1cyIsdHlwZTpoLmNvcm5lclJhZGl1c30se25hbWU6ImJhY2tncm91bmQtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImJhY2tncm91bmQtZmlsbCIsdHlwZTpoLmZpbGx9LHtuYW1lOiJiYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ibGFja2VuIix0eXBlOmgubk9uZU9uZU51bWJlcn0se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiLHR5cGU6aC5jb2xvcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIix0eXBlOmgucGVyY2VudGFnZXN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIsdHlwZTpoLmdyYWRpZW50RGlyZWN0aW9ufSx7bmFtZToicGFkZGluZyIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJwYWRkaW5nLXJlbGF0aXZlLXRvIix0eXBlOmgucGFkZGluZ1JlbGF0aXZlVG8sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJib3VuZHMtZXhwYW5zaW9uIix0eXBlOmguYm91bmRzRXhwYW5zaW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sRT1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToiYm9yZGVyLWNhcCIsdHlwZTpoLmxpbmVDYXB9LHtuYW1lOiJib3JkZXItam9pbiIsdHlwZTpoLmxpbmVKb2lufSx7bmFtZToiYm9yZGVyLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJib3JkZXItZGFzaC1vZmZzZXQiLHR5cGU6aC5udW1iZXJ9LHtuYW1lOiJib3JkZXItcG9zaXRpb24iLHR5cGU6aC5saW5lUG9zaXRpb259XSxfPVt7bmFtZToib3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im91dGxpbmUtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3V0bGluZS1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToib3V0bGluZS1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sQz1be25hbWU6ImJhY2tncm91bmQtaW1hZ2UiLHR5cGU6aC51cmxzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsdHlwZTpoLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLHR5cGU6aC5iZ0NvbnRhaW5tZW50fSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLHR5cGU6aC5ib29sc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi15Iix0eXBlOmguYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIix0eXBlOmguYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLHR5cGU6aC5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLXJlcGVhdCIsdHlwZTpoLmJnUmVwZWF0fSx7bmFtZToiYmFja2dyb3VuZC1maXQiLHR5cGU6aC5iZ0ZpdH0se25hbWU6ImJhY2tncm91bmQtY2xpcCIsdHlwZTpoLmJnQ2xpcH0se25hbWU6ImJhY2tncm91bmQtd2lkdGgiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteSIsdHlwZTpoLmJnUG9zfV0sRD1be25hbWU6InBvc2l0aW9uIix0eXBlOmgucG9zaXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIsdHlwZTpoLmNvbXBvdW5kSW5jbHVkZUxhYmVscyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1sZWZ0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLXJpZ2h0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi1oZWlnaHQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLXRvcCIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLE89W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOmgubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOmguZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOmgubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOmgubnVtYmVyfSx7bmFtZToibGluZS1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZX0se25hbWU6ImxpbmUtb3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpoLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6aC5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOmguY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtcmFkaWkiLHR5cGU6aC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToicmFkaXVzLXR5cGUiLHR5cGU6aC5yYWRpdXNUeXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGF4aS10dXJuIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktZGlyZWN0aW9uIix0eXBlOmguYXhpc0RpcmVjdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktcmFkaXVzIix0eXBlOmgubnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZWRnZS1kaXN0YW5jZXMiLHR5cGU6aC5lZGdlRGlzdGFuY2VzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiYXJyb3ctc2NhbGUiLHR5cGU6aC5wb3NpdGl2ZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imxvb3AtZGlyZWN0aW9uIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJsb29wLXN3ZWVwIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sUj1be25hbWU6Imdob3N0Iix0eXBlOmguYm9vbCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9XSxrPVt7bmFtZToic2VsZWN0aW9uLWJveC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIsdHlwZTpoLnNpemV9LHtuYW1lOiJhY3RpdmUtYmctY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImFjdGl2ZS1iZy1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6ImFjdGl2ZS1iZy1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfV0sTD1bXTtrYS5waWVCYWNrZ3JvdW5kTj0xNixMLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgQT0xO0E8PWthLnBpZUJhY2tncm91bmROO0ErKylMLnB1c2goe25hbWU6InBpZS0iK0ErIi1iYWNrZ3JvdW5kLWNvbG9yIix0eXBlOmguY29sb3J9KSxMLnB1c2goe25hbWU6InBpZS0iK0ErIi1iYWNrZ3JvdW5kLXNpemUiLHR5cGU6aC5wZXJjZW50fSksTC5wdXNoKHtuYW1lOiJwaWUtIitBKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0pO3ZhciBJPVtdLE09a2EuYXJyb3dQcmVmaXhlcz1bInNvdXJjZSIsIm1pZC1zb3VyY2UiLCJ0YXJnZXQiLCJtaWQtdGFyZ2V0Il07W3tuYW1lOiJhcnJvdy1zaGFwZSIsdHlwZTpoLmFycm93U2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJhcnJvdy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYXJyb3ctZmlsbCIsdHlwZTpoLmFycm93RmlsbH0se25hbWU6ImFycm93LXdpZHRoIix0eXBlOmguYXJyb3dXaWR0aH1dLmZvckVhY2goZnVuY3Rpb24odWUpe00uZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgaj1RKyItIit1ZS5uYW1lLG5lPXVlLnR5cGUsdGU9dWUudHJpZ2dlcnNCb3VuZHM7SS5wdXNoKHtuYW1lOmosdHlwZTpuZSx0cmlnZ2Vyc0JvdW5kczp0ZX0pfSl9LHt9KTt2YXIgUD1rYS5wcm9wZXJ0aWVzPVtdLmNvbmNhdCh5LFQsdix4LGIsUixnLG0sZixkLHAsdyxFLF8sQyxMLEQsTyxJLGspLEI9a2EucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOnksdHJhbnNpdGlvbjpULHZpc2liaWxpdHk6dixvdmVybGF5OngsdW5kZXJsYXk6YixnaG9zdDpSLGNvbW1vbkxhYmVsOmcsbGFiZWxEaW1lbnNpb25zOm0sbWFpbkxhYmVsOmYsc291cmNlTGFiZWw6ZCx0YXJnZXRMYWJlbDpwLG5vZGVCb2R5Oncsbm9kZUJvcmRlcjpFLG5vZGVPdXRsaW5lOl8sYmFja2dyb3VuZEltYWdlOkMscGllOkwsY29tcG91bmQ6RCxlZGdlTGluZTpPLGVkZ2VBcnJvdzpJLGNvcmU6a30sRj1rYS5wcm9wZXJ0eUdyb3VwTmFtZXM9e30sej1rYS5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhCKTt6LmZvckVhY2goZnVuY3Rpb24odWUpe0ZbdWVdPUJbdWVdLm1hcChmdW5jdGlvbihRKXtyZXR1cm4gUS5uYW1lfSksQlt1ZV0uZm9yRWFjaChmdW5jdGlvbihRKXtyZXR1cm4gUS5ncm91cEtleT11ZX0pfSk7dmFyICQ9a2EuYWxpYXNlcz1be25hbWU6ImNvbnRlbnQiLHBvaW50c1RvOiJsYWJlbCJ9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlIixwb2ludHNUbzoiY29udHJvbC1wb2ludC1kaXN0YW5jZXMifSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHQiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LXdlaWdodHMifSx7bmFtZToic2VnbWVudC1kaXN0YW5jZSIscG9pbnRzVG86InNlZ21lbnQtZGlzdGFuY2VzIn0se25hbWU6InNlZ21lbnQtd2VpZ2h0Iixwb2ludHNUbzoic2VnbWVudC13ZWlnaHRzIn0se25hbWU6InNlZ21lbnQtcmFkaXVzIixwb2ludHNUbzoic2VnbWVudC1yYWRpaSJ9LHtuYW1lOiJlZGdlLXRleHQtcm90YXRpb24iLHBvaW50c1RvOiJ0ZXh0LXJvdGF0aW9uIn0se25hbWU6InBhZGRpbmctbGVmdCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1yaWdodCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy10b3AiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctYm90dG9tIixwb2ludHNUbzoicGFkZGluZyJ9XTtrYS5wcm9wZXJ0eU5hbWVzPVAubWFwKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUubmFtZX0pO2Zvcih2YXIgVT0wO1U8UC5sZW5ndGg7VSsrKXt2YXIgSz1QW1VdO1BbSy5uYW1lXT1LfWZvcih2YXIgZWU9MDtlZTwkLmxlbmd0aDtlZSsrKXt2YXIgWT0kW2VlXSxjZT1QW1kucG9pbnRzVG9dLFo9e25hbWU6WS5uYW1lLGFsaWFzOiEwLHBvaW50c1RvOmNlfTtQLnB1c2goWiksUFtZLm5hbWVdPVp9fSkoKTtrYS5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVt0XX07a2EuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlO2lmKHQuZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIHQuZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciBlPWlyKHsic2VsZWN0aW9uLWJveC1jb2xvciI6IiNkZGQiLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOiIjYWFhIiwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6ImJsYWNrIiwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOiIjMDAwIiwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOiJ5ZXMiLCJ0ZXh0LWV2ZW50cyI6Im5vIiwidGV4dC12YWxpZ24iOiJ0b3AiLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsInRleHQtanVzdGlmaWNhdGlvbiI6ImF1dG8iLCJsaW5lLWhlaWdodCI6MSxjb2xvcjoiIzAwMCIsInRleHQtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtd2lkdGgiOjAsInRleHQtb3V0bGluZS1vcGFjaXR5IjoxLCJ0ZXh0LW9wYWNpdHkiOjEsInRleHQtZGVjb3JhdGlvbiI6Im5vbmUiLCJ0ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0LXdyYXAiOiJub25lIiwidGV4dC1vdmVyZmxvdy13cmFwIjoid2hpdGVzcGFjZSIsInRleHQtbWF4LXdpZHRoIjo5OTk5LCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOiIjMDAwIiwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjAsInRleHQtYmFja2dyb3VuZC1zaGFwZSI6InJlY3RhbmdsZSIsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjowLCJ0ZXh0LWJvcmRlci1vcGFjaXR5IjowLCJ0ZXh0LWJvcmRlci13aWR0aCI6MCwidGV4dC1ib3JkZXItc3R5bGUiOiJzb2xpZCIsInRleHQtYm9yZGVyLWNvbG9yIjoiIzAwMCIsImZvbnQtZmFtaWx5IjoiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsImZvbnQtc3R5bGUiOiJub3JtYWwiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6MTYsIm1pbi16b29tZWQtZm9udC1zaXplIjowLCJ0ZXh0LXJvdGF0aW9uIjoibm9uZSIsInNvdXJjZS10ZXh0LXJvdGF0aW9uIjoibm9uZSIsInRhcmdldC10ZXh0LXJvdGF0aW9uIjoibm9uZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsZGlzcGxheToiZWxlbWVudCIsb3BhY2l0eToxLCJ6LWNvbXBvdW5kLWRlcHRoIjoiYXV0byIsInotaW5kZXgtY29tcGFyZSI6ImF1dG8iLCJ6LWluZGV4IjowLGxhYmVsOiIiLCJ0ZXh0LW1hcmdpbi14IjowLCJ0ZXh0LW1hcmdpbi15IjowLCJzb3VyY2UtbGFiZWwiOiIiLCJzb3VyY2UtdGV4dC1vZmZzZXQiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi14IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teSI6MCwidGFyZ2V0LWxhYmVsIjoiIiwidGFyZ2V0LXRleHQtb2Zmc2V0IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXkiOjAsIm92ZXJsYXktb3BhY2l0eSI6MCwib3ZlcmxheS1jb2xvciI6IiMwMDAiLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwib3ZlcmxheS1jb3JuZXItcmFkaXVzIjoiYXV0byIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LWNvcm5lci1yYWRpdXMiOiJhdXRvIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6Im5vbmUiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6ImxpbmVhciIsImJhY2tncm91bmQtYmxhY2tlbiI6MCwiYmFja2dyb3VuZC1jb2xvciI6IiM5OTkiLCJiYWNrZ3JvdW5kLWZpbGwiOiJzb2xpZCIsImJhY2tncm91bmQtb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIjoiYW5vbnltb3VzIiwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IjoiaW5zaWRlIiwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciOiJ5ZXMiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiOiI1MCUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiOiI1MCUiLCJiYWNrZ3JvdW5kLW9mZnNldC14IjowLCJiYWNrZ3JvdW5kLW9mZnNldC15IjowLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCIsImJhY2tncm91bmQtZml0Ijoibm9uZSIsImJhY2tncm91bmQtY2xpcCI6Im5vZGUiLCJiYWNrZ3JvdW5kLXdpZHRoIjoiYXV0byIsImJhY2tncm91bmQtaGVpZ2h0IjoiYXV0byIsImJvcmRlci1jb2xvciI6IiMwMDAiLCJib3JkZXItb3BhY2l0eSI6MSwiYm9yZGVyLXdpZHRoIjowLCJib3JkZXItc3R5bGUiOiJzb2xpZCIsImJvcmRlci1kYXNoLXBhdHRlcm4iOls0LDJdLCJib3JkZXItZGFzaC1vZmZzZXQiOjAsImJvcmRlci1jYXAiOiJidXR0IiwiYm9yZGVyLWpvaW4iOiJtaXRlciIsImJvcmRlci1wb3NpdGlvbiI6ImNlbnRlciIsIm91dGxpbmUtY29sb3IiOiIjOTk5Iiwib3V0bGluZS1vcGFjaXR5IjoxLCJvdXRsaW5lLXdpZHRoIjowLCJvdXRsaW5lLW9mZnNldCI6MCwib3V0bGluZS1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiY29ybmVyLXJhZGl1cyI6ImF1dG8iLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0xO2Y8PWthLnBpZUJhY2tncm91bmROO2YrKyl7dmFyIGQ9aC5uYW1lLnJlcGxhY2UoInt7aX19IixmKSxwPWgudmFsdWU7dVtkXT1wfXJldHVybiB1fSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLW91dGxpbmUtd2lkdGgiOjAsImxpbmUtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJzZWdtZW50LXJhZGlpIjoxNSwicmFkaXVzLXR5cGUiOiJhcmMtcmFkaXVzIiwidGF4aS10dXJuIjoiNTAlIiwidGF4aS1yYWRpdXMiOjE1LCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9LHtuYW1lOiJhcnJvdy13aWR0aCIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe3JldHVybiBrYS5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGQ9ZisiLSIraC5uYW1lLHA9aC52YWx1ZTt1W2RdPXB9KSx1fSx7fSkpLHI9e30sbj0wO248dGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMucHJvcGVydGllc1tuXTtpZighaS5wb2ludHNUbyl7dmFyIGE9aS5uYW1lLHM9ZVthXSxsPXRoaXMucGFyc2UoYSxzKTtyW2FdPWx9fXJldHVybiB0LmRlZmF1bHRQcm9wZXJ0aWVzPXIsdC5kZWZhdWx0UHJvcGVydGllc307a2EuYWRkRGVmYXVsdFN0eWxlc2hlZXQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdG9yKCI6cGFyZW50IikuY3NzKHtzaGFwZToicmVjdGFuZ2xlIixwYWRkaW5nOjEwLCJiYWNrZ3JvdW5kLWNvbG9yIjoiI2VlZSIsImJvcmRlci1jb2xvciI6IiNjY2MiLCJib3JkZXItd2lkdGgiOjF9KS5zZWxlY3RvcigiZWRnZSIpLmNzcyh7d2lkdGg6M30pLnNlbGVjdG9yKCI6bG9vcCIpLmNzcyh7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn0pLnNlbGVjdG9yKCJlZGdlOmNvbXBvdW5kIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIiLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUifSkuc2VsZWN0b3IoIjpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjMDE2OUQ5IiwibGluZS1jb2xvciI6IiMwMTY5RDkiLCJzb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwidGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSIsIm1pZC1zb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXRhcmdldC1hcnJvdy1jb2xvciI6IiMwMTY5RDkifSkuc2VsZWN0b3IoIjpwYXJlbnQ6c2VsZWN0ZWQiKS5jc3MoeyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0NDRTFGOSIsImJvcmRlci1jb2xvciI6IiNhZWM4ZTUifSkuc2VsZWN0b3IoIjphY3RpdmUiKS5jc3MoeyJvdmVybGF5LWNvbG9yIjoiYmxhY2siLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LW9wYWNpdHkiOi4yNX0pLHRoaXMuZGVmYXVsdExlbmd0aD10aGlzLmxlbmd0aH07Y0M9e307Y0MucGFyc2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcztpZihsaShlKSlyZXR1cm4gaS5wYXJzZUltcGxXYXJuKHQsZSxyLG4pO3ZhciBhPW49PT0ibWFwcGluZyJ8fG49PT0hMHx8bj09PSExfHxuPT1udWxsPyJkb250Y2FyZSI6bixzPXI/InQiOiJmIixsPSIiK2UsdT14Z2UodCxsLHMsYSksaD1pLnByb3BDYWNoZT1pLnByb3BDYWNoZXx8W10sZjtyZXR1cm4oZj1oW3VdKXx8KGY9aFt1XT1pLnBhcnNlSW1wbFdhcm4odCxlLHIsbikpLChyfHxuPT09Im1hcHBpbmciKSYmKGY9UWMoZiksZiYmKGYudmFsdWU9UWMoZi52YWx1ZSkpKSxmfTtjQy5wYXJzZUltcGxXYXJuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMucGFyc2VJbXBsKHQsZSxyLG4pO3JldHVybiFpJiZlIT1udWxsJiZobigiVGhlIHN0eWxlIHByb3BlcnR5IGAiLmNvbmNhdCh0LCI6ICIpLmNvbmNhdChlLCJgIGlzIGludmFsaWQiKSksaSYmKGkubmFtZT09PSJ3aWR0aCJ8fGkubmFtZT09PSJoZWlnaHQiKSYmZT09PSJsYWJlbCImJmhuKCJUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgIitpLm5hbWUrImAiKSxpfTtjQy5wYXJzZUltcGw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpczt0PUZCKHQpO3ZhciBhPWkucHJvcGVydGllc1t0XSxzPWUsbD1pLnR5cGVzO2lmKCFhfHxlPT09dm9pZCAwKXJldHVybiBudWxsO2EuYWxpYXMmJihhPWEucG9pbnRzVG8sdD1hLm5hbWUpO3ZhciB1PVp0KGUpO3UmJihlPWUudHJpbSgpKTt2YXIgaD1hLnR5cGU7aWYoIWgpcmV0dXJuIG51bGw7aWYociYmKGU9PT0iInx8ZT09PW51bGwpKXJldHVybntuYW1lOnQsdmFsdWU6ZSxieXBhc3M6ITAsZGVsZXRlQnlwYXNzOiEwfTtpZihsaShlKSlyZXR1cm57bmFtZTp0LHZhbHVlOmUsc3RyVmFsdWU6ImZuIixtYXBwZWQ6bC5mbixieXBhc3M6cn07dmFyIGYsZDtpZighKCF1fHxufHxlLmxlbmd0aDw3fHxlWzFdIT09ImEiKSl7aWYoZS5sZW5ndGg+PTcmJmVbMF09PT0iZCImJihmPW5ldyBSZWdFeHAobC5kYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocilyZXR1cm4hMTt2YXIgcD1sLmRhdGE7cmV0dXJue25hbWU6dCx2YWx1ZTpmLHN0clZhbHVlOiIiK2UsbWFwcGVkOnAsZmllbGQ6ZlsxXSxieXBhc3M6cn19ZWxzZSBpZihlLmxlbmd0aD49MTAmJmVbMF09PT0ibSImJihkPW5ldyBSZWdFeHAobC5tYXBEYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocnx8aC5tdWx0aXBsZSlyZXR1cm4hMTt2YXIgbT1sLm1hcERhdGE7aWYoIShoLmNvbG9yfHxoLm51bWJlcikpcmV0dXJuITE7dmFyIGc9dGhpcy5wYXJzZSh0LGRbNF0pO2lmKCFnfHxnLm1hcHBlZClyZXR1cm4hMTt2YXIgeT10aGlzLnBhcnNlKHQsZFs1XSk7aWYoIXl8fHkubWFwcGVkKXJldHVybiExO2lmKGcucGZWYWx1ZT09PXkucGZWYWx1ZXx8Zy5zdHJWYWx1ZT09PXkuc3RyVmFsdWUpcmV0dXJuIGhuKCJgIit0KyI6ICIrZSsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIrdCsiOiAiK2cuc3RyVmFsdWUrImAiKSx0aGlzLnBhcnNlKHQsZy5zdHJWYWx1ZSk7aWYoaC5jb2xvcil7dmFyIHY9Zy52YWx1ZSx4PXkudmFsdWUsYj12WzBdPT09eFswXSYmdlsxXT09PXhbMV0mJnZbMl09PT14WzJdJiYodlszXT09PXhbM118fCh2WzNdPT1udWxsfHx2WzNdPT09MSkmJih4WzNdPT1udWxsfHx4WzNdPT09MSkpO2lmKGIpcmV0dXJuITF9cmV0dXJue25hbWU6dCx2YWx1ZTpkLHN0clZhbHVlOiIiK2UsbWFwcGVkOm0sZmllbGQ6ZFsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KGRbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoZFszXSksdmFsdWVNaW46Zy52YWx1ZSx2YWx1ZU1heDp5LnZhbHVlLGJ5cGFzczpyfX19aWYoaC5tdWx0aXBsZSYmbiE9PSJtdWx0aXBsZSIpe3ZhciBUO2lmKHU/VD1lLnNwbGl0KC9ccysvKTpFbihlKT9UPWU6VD1bZV0saC5ldmVuTXVsdGlwbGUmJlQubGVuZ3RoJTIhPT0wKXJldHVybiBudWxsO2Zvcih2YXIgUz1bXSx3PVtdLEU9W10sXz0iIixDPSExLEQ9MDtEPFQubGVuZ3RoO0QrKyl7dmFyIE89aS5wYXJzZSh0LFRbRF0sciwibXVsdGlwbGUiKTtDPUN8fFp0KE8udmFsdWUpLFMucHVzaChPLnZhbHVlKSxFLnB1c2goTy5wZlZhbHVlIT1udWxsP08ucGZWYWx1ZTpPLnZhbHVlKSx3LnB1c2goTy51bml0cyksXys9KEQ+MD8iICI6IiIpK08uc3RyVmFsdWV9cmV0dXJuIGgudmFsaWRhdGUmJiFoLnZhbGlkYXRlKFMsdyk/bnVsbDpoLnNpbmdsZUVudW0mJkM/Uy5sZW5ndGg9PT0xJiZadChTWzBdKT97bmFtZTp0LHZhbHVlOlNbMF0sc3RyVmFsdWU6U1swXSxieXBhc3M6cn06bnVsbDp7bmFtZTp0LHZhbHVlOlMscGZWYWx1ZTpFLHN0clZhbHVlOl8sYnlwYXNzOnIsdW5pdHM6d319dmFyIFI9byhmdW5jdGlvbigpe2Zvcih2YXIgUT0wO1E8aC5lbnVtcy5sZW5ndGg7USsrKXt2YXIgaj1oLmVudW1zW1FdO2lmKGo9PT1lKXJldHVybntuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfX1yZXR1cm4gbnVsbH0sImNoZWNrRW51bXMiKTtpZihoLm51bWJlcil7dmFyIGssTD0icHgiO2lmKGgudW5pdHMmJihrPWgudW5pdHMpLGguaW1wbGljaXRVbml0cyYmKEw9aC5pbXBsaWNpdFVuaXRzKSwhaC51bml0bGVzcylpZih1KXt2YXIgQT0icHh8ZW0iKyhoLmFsbG93UGVyY2VudD8ifFxcJSI6IiIpO2smJihBPWspO3ZhciBJPWUubWF0Y2goIl4oIitXaSsiKSgiK0ErIik/JCIpO0kmJihlPUlbMV0saz1JWzJdfHxMKX1lbHNlKCFrfHxoLmltcGxpY2l0VW5pdHMpJiYoaz1MKTtpZihlPXBhcnNlRmxvYXQoZSksaXNOYU4oZSkmJmguZW51bXM9PT12b2lkIDApcmV0dXJuIG51bGw7aWYoaXNOYU4oZSkmJmguZW51bXMhPT12b2lkIDApcmV0dXJuIGU9cyxSKCk7aWYoaC5pbnRlZ2VyJiYhdnFlKGUpfHxoLm1pbiE9PXZvaWQgMCYmKGU8aC5taW58fGguc3RyaWN0TWluJiZlPT09aC5taW4pfHxoLm1heCE9PXZvaWQgMCYmKGU+aC5tYXh8fGguc3RyaWN0TWF4JiZlPT09aC5tYXgpKXJldHVybiBudWxsO3ZhciBNPXtuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlKyhrfHwiIiksdW5pdHM6ayxieXBhc3M6cn07cmV0dXJuIGgudW5pdGxlc3N8fGshPT0icHgiJiZrIT09ImVtIj9NLnBmVmFsdWU9ZTpNLnBmVmFsdWU9az09PSJweCJ8fCFrP2U6dGhpcy5nZXRFbVNpemVJblBpeGVscygpKmUsKGs9PT0ibXMifHxrPT09InMiKSYmKE0ucGZWYWx1ZT1rPT09Im1zIj9lOjFlMyplKSwoaz09PSJkZWcifHxrPT09InJhZCIpJiYoTS5wZlZhbHVlPWs9PT0icmFkIj9lOlFZZShlKSksaz09PSIlIiYmKE0ucGZWYWx1ZT1lLzEwMCksTX1lbHNlIGlmKGgucHJvcExpc3Qpe3ZhciBQPVtdLEI9IiIrZTtpZihCIT09Im5vbmUiKXtmb3IodmFyIEY9Qi5zcGxpdCgvXHMqLFxzKnxccysvKSx6PTA7ejxGLmxlbmd0aDt6Kyspe3ZhciAkPUZbel0udHJpbSgpO2kucHJvcGVydGllc1skXT9QLnB1c2goJCk6aG4oImAiKyQrImAgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgbmFtZSIpfWlmKFAubGVuZ3RoPT09MClyZXR1cm4gbnVsbH1yZXR1cm57bmFtZTp0LHZhbHVlOlAsc3RyVmFsdWU6UC5sZW5ndGg9PT0wPyJub25lIjpQLmpvaW4oIiAiKSxieXBhc3M6cn19ZWxzZSBpZihoLmNvbG9yKXt2YXIgVT1oZ2UoZSk7cmV0dXJuIFU/e25hbWU6dCx2YWx1ZTpVLHBmVmFsdWU6VSxzdHJWYWx1ZToicmdiKCIrVVswXSsiLCIrVVsxXSsiLCIrVVsyXSsiKSIsYnlwYXNzOnJ9Om51bGx9ZWxzZSBpZihoLnJlZ2V4fHxoLnJlZ2V4ZXMpe2lmKGguZW51bXMpe3ZhciBLPVIoKTtpZihLKXJldHVybiBLfWZvcih2YXIgZWU9aC5yZWdleGVzP2gucmVnZXhlczpbaC5yZWdleF0sWT0wO1k8ZWUubGVuZ3RoO1krKyl7dmFyIGNlPW5ldyBSZWdFeHAoZWVbWV0pLFo9Y2UuZXhlYyhlKTtpZihaKXJldHVybntuYW1lOnQsdmFsdWU6aC5zaW5nbGVSZWdleE1hdGNoVmFsdWU/WlsxXTpaLHN0clZhbHVlOiIiK2UsYnlwYXNzOnJ9fXJldHVybiBudWxsfWVsc2UgcmV0dXJuIGguc3RyaW5nP3tuYW1lOnQsdmFsdWU6IiIrZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfTpoLmVudW1zP1IoKTpudWxsfTtVYT1vKGZ1bmN0aW9uIHQoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUpO2lmKCFCQihlKSl7b2koIkEgc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UiKTtyZXR1cm59dGhpcy5fcHJpdmF0ZT17Y3k6ZSxjb3JlU3R5bGU6e319LHRoaXMubGVuZ3RoPTAsdGhpcy5yZXNldFRvRGVmYXVsdCgpfSwiU3R5bGUiKSxXYT1VYS5wcm90b3R5cGU7V2EuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGUifTtXYS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9wcml2YXRlLGU9dC5jeSxyPWUuZWxlbWVudHMoKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspdGhpc1tuXT12b2lkIDA7cmV0dXJuIHRoaXMubGVuZ3RoPTAsdC5jb250ZXh0U3R5bGVzPXt9LHQucHJvcERpZmZzPXt9LHRoaXMuY2xlYW5FbGVtZW50cyhyLCEwKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGE9aVswXS5fcHJpdmF0ZTthLnN0eWxlRGlydHk9ITAsYS5hcHBsaWVkSW5pdFN0eWxlPSExfSksdGhpc307V2EucmVzZXRUb0RlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMuYWRkRGVmYXVsdFN0eWxlc2hlZXQoKSx0aGlzfTtXYS5jb3JlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVt0XXx8dGhpcy5nZXREZWZhdWx0UHJvcGVydHkodCl9O1dhLnNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT0iY29yZSI/bnVsbDpuZXcgJGYodCkscj10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW3JdPXtzZWxlY3RvcjplLHByb3BlcnRpZXM6W10sbWFwcGVkUHJvcGVydGllczpbXSxpbmRleDpyfSx0aGlzfTtXYS5jc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzO2lmKGUubGVuZ3RoPT09MSlmb3IodmFyIHI9ZVswXSxuPTA7bjx0LnByb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGk9dC5wcm9wZXJ0aWVzW25dLGE9cltpLm5hbWVdO2E9PT12b2lkIDAmJihhPXJbSzYoaS5uYW1lKV0pLGEhPT12b2lkIDAmJnRoaXMuY3NzUnVsZShpLm5hbWUsYSl9ZWxzZSBlLmxlbmd0aD09PTImJnRoaXMuY3NzUnVsZShlWzBdLGVbMV0pO3JldHVybiB0aGlzfTtXYS5zdHlsZT1XYS5jc3M7V2EuY3NzUnVsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyc2UodCxlKTtpZihyKXt2YXIgbj10aGlzLmxlbmd0aC0xO3RoaXNbbl0ucHJvcGVydGllcy5wdXNoKHIpLHRoaXNbbl0ucHJvcGVydGllc1tyLm5hbWVdPXIsci5uYW1lLm1hdGNoKC9waWUtKFxkKyktYmFja2dyb3VuZC1zaXplLykmJnIudmFsdWUmJih0aGlzLl9wcml2YXRlLmhhc1BpZT0hMCksci5tYXBwZWQmJnRoaXNbbl0ubWFwcGVkUHJvcGVydGllcy5wdXNoKHIpO3ZhciBpPSF0aGlzW25dLnNlbGVjdG9yO2kmJih0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVtyLm5hbWVdPXIpfXJldHVybiB0aGlzfTtXYS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGxnZSh0KT90LmFwcGVuZFRvU3R5bGUodGhpcyk6RW4odCk/dGhpcy5hcHBlbmRGcm9tSnNvbih0KTpadCh0KSYmdGhpcy5hcHBlbmRGcm9tU3RyaW5nKHQpLHRoaXN9O1VhLmZyb21Kc29uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFVhKHQpO3JldHVybiByLmZyb21Kc29uKGUpLHJ9O1VhLmZyb21TdHJpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFVhKHQpLmZyb21TdHJpbmcoZSl9O1txYSx5NCxaQixKYyxsQyxKQixrYSxjQ10uZm9yRWFjaChmdW5jdGlvbih0KXtpcihXYSx0KX0pO1VhLnR5cGVzPVdhLnR5cGVzO1VhLnByb3BlcnRpZXM9V2EucHJvcGVydGllcztVYS5wcm9wZXJ0eUdyb3Vwcz1XYS5wcm9wZXJ0eUdyb3VwcztVYS5wcm9wZXJ0eUdyb3VwTmFtZXM9V2EucHJvcGVydHlHcm91cE5hbWVzO1VhLnByb3BlcnR5R3JvdXBLZXlzPVdhLnByb3BlcnR5R3JvdXBLZXlzO3laZT17c3R5bGU6byhmdW5jdGlvbihlKXtpZihlKXt2YXIgcj10aGlzLnNldFN0eWxlKGUpO3IudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LCJzdHlsZSIpLHNldFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gbGdlKGUpP3Iuc3R5bGU9ZS5nZW5lcmF0ZVN0eWxlKHRoaXMpOkVuKGUpP3Iuc3R5bGU9VWEuZnJvbUpzb24odGhpcyxlKTpadChlKT9yLnN0eWxlPVVhLmZyb21TdHJpbmcodGhpcyxlKTpyLnN0eWxlPVVhKHRoaXMpLHIuc3R5bGV9LCJzZXRTdHlsZSIpLHVwZGF0ZVN0eWxlOm8oZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9LCJ1cGRhdGVTdHlsZSIpfSx2WmU9InNpbmdsZSIsZTA9e2F1dG9sb2NrOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSwiYXV0b2xvY2siKSxhdXRvdW5ncmFiaWZ5Om8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtyZXR1cm4gdGhpc30sImF1dG91bmdyYWJpZnkiKSxhdXRvdW5zZWxlY3RpZnk6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sImF1dG91bnNlbGVjdGlmeSIpLHNlbGVjdGlvblR5cGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO2lmKHIuc2VsZWN0aW9uVHlwZT09bnVsbCYmKHIuc2VsZWN0aW9uVHlwZT12WmUpLGUhPT12b2lkIDApKGU9PT0iYWRkaXRpdmUifHxlPT09InNpbmdsZSIpJiYoci5zZWxlY3Rpb25UeXBlPWUpO2Vsc2UgcmV0dXJuIHIuc2VsZWN0aW9uVHlwZTtyZXR1cm4gdGhpc30sInNlbGVjdGlvblR5cGUiKSxwYW5uaW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInBhbm5pbmdFbmFibGVkIiksdXNlclBhbm5pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyUGFubmluZ0VuYWJsZWQiKSx6b29taW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInpvb21pbmdFbmFibGVkIiksdXNlclpvb21pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyWm9vbWluZ0VuYWJsZWQiKSxib3hTZWxlY3Rpb25FbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30sImJveFNlbGVjdGlvbkVuYWJsZWQiKSxwYW46byhmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPXRoaXMuX3ByaXZhdGUucGFuLG4saSxhLHMsbDtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcjtjYXNlIDE6aWYoWnQoZVswXSkpcmV0dXJuIG49ZVswXSxyW25dO2lmKFVyKGVbMF0pKXtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpczthPWVbMF0scz1hLngsbD1hLnksX3QocykmJihyLng9cyksX3QobCkmJihyLnk9bCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7bj1lWzBdLGk9ZVsxXSwobj09PSJ4Inx8bj09PSJ5IikmJl90KGkpJiYocltuXT1pKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuIikscGFuQnk6byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXMuX3ByaXZhdGUucGFuLGEscyxsLHUsaDtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpcztzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpVcihlKSYmKGw9blswXSx1PWwueCxoPWwueSxfdCh1KSYmKGkueCs9dSksX3QoaCkmJihpLnkrPWgpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjphPWUscz1yLChhPT09IngifHxhPT09InkiKSYmX3QocykmJihpW2FdKz1zKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuQnkiKSxnYzpvKGZ1bmN0aW9uKCl7dGhpcy5ub3RpZnkoImdjIil9LCJnYyIpLGZpdDpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5nZXRGaXRWaWV3cG9ydChlLHIpO2lmKG4pe3ZhciBpPXRoaXMuX3ByaXZhdGU7aS56b29tPW4uem9vbSxpLnBhbj1uLnBhbix0aGlzLmVtaXQoInBhbiB6b29tIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0Iil9cmV0dXJuIHRoaXN9LCJmaXQiKSxnZXRGaXRWaWV3cG9ydDpvKGZ1bmN0aW9uKGUscil7aWYoX3QoZSkmJnI9PT12b2lkIDAmJihyPWUsZT12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIG47aWYoWnQoZSkpe3ZhciBpPWU7ZT10aGlzLiQoaSl9ZWxzZSBpZihUcWUoZSkpe3ZhciBhPWU7bj17eDE6YS54MSx5MTphLnkxLHgyOmEueDIseTI6YS55Mn0sbi53PW4ueDItbi54MSxuLmg9bi55Mi1uLnkxfWVsc2UgeG8oZSl8fChlPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKCEoeG8oZSkmJmUuZW1wdHkoKSkpe249bnx8ZS5ib3VuZGluZ0JveCgpO3ZhciBzPXRoaXMud2lkdGgoKSxsPXRoaXMuaGVpZ2h0KCksdTtpZihyPV90KHIpP3I6MCwhaXNOYU4ocykmJiFpc05hTihsKSYmcz4wJiZsPjAmJiFpc05hTihuLncpJiYhaXNOYU4obi5oKSYmbi53PjAmJm4uaD4wKXt1PU1hdGgubWluKChzLTIqcikvbi53LChsLTIqcikvbi5oKSx1PXU+dGhpcy5fcHJpdmF0ZS5tYXhab29tP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTp1LHU9dTx0aGlzLl9wcml2YXRlLm1pblpvb20/dGhpcy5fcHJpdmF0ZS5taW5ab29tOnU7dmFyIGg9e3g6KHMtdSoobi54MStuLngyKSkvMix5OihsLXUqKG4ueTErbi55MikpLzJ9O3JldHVybnt6b29tOnUscGFuOmh9fX19fSwiZ2V0Rml0Vmlld3BvcnQiKSx6b29tUmFuZ2U6byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuX3ByaXZhdGU7aWYocj09bnVsbCl7dmFyIGk9ZTtlPWkubWluLHI9aS5tYXh9cmV0dXJuIF90KGUpJiZfdChyKSYmZTw9cj8obi5taW5ab29tPWUsbi5tYXhab29tPXIpOl90KGUpJiZyPT09dm9pZCAwJiZlPD1uLm1heFpvb20/bi5taW5ab29tPWU6X3QocikmJmU9PT12b2lkIDAmJnI+PW4ubWluWm9vbSYmKG4ubWF4Wm9vbT1yKSx0aGlzfSwiem9vbVJhbmdlIiksbWluWm9vbTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWluWm9vbTp0aGlzLnpvb21SYW5nZSh7bWluOmV9KX0sIm1pblpvb20iKSxtYXhab29tOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6ZX0pfSwibWF4Wm9vbSIpLGdldFpvb21lZFZpZXdwb3J0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGFuLGk9ci56b29tLGEscyxsPSExO2lmKHIuem9vbWluZ0VuYWJsZWR8fChsPSEwKSxfdChlKT9zPWU6VXIoZSkmJihzPWUubGV2ZWwsZS5wb3NpdGlvbiE9bnVsbD9hPUo2KGUucG9zaXRpb24saSxuKTplLnJlbmRlcmVkUG9zaXRpb24hPW51bGwmJihhPWUucmVuZGVyZWRQb3NpdGlvbiksYSE9bnVsbCYmIXIucGFubmluZ0VuYWJsZWQmJihsPSEwKSkscz1zPnIubWF4Wm9vbT9yLm1heFpvb206cyxzPXM8ci5taW5ab29tP3IubWluWm9vbTpzLGx8fCFfdChzKXx8cz09PWl8fGEhPW51bGwmJighX3QoYS54KXx8IV90KGEueSkpKXJldHVybiBudWxsO2lmKGEhPW51bGwpe3ZhciB1PW4saD1pLGY9cyxkPXt4Oi1mL2gqKGEueC11LngpK2EueCx5Oi1mL2gqKGEueS11LnkpK2EueX07cmV0dXJue3pvb21lZDohMCxwYW5uZWQ6ITAsem9vbTpmLHBhbjpkfX1lbHNlIHJldHVybnt6b29tZWQ6ITAscGFubmVkOiExLHpvb206cyxwYW46bn19LCJnZXRab29tZWRWaWV3cG9ydCIpLHpvb206byhmdW5jdGlvbihlKXtpZihlPT09dm9pZCAwKXJldHVybiB0aGlzLl9wcml2YXRlLnpvb207dmFyIHI9dGhpcy5nZXRab29tZWRWaWV3cG9ydChlKSxuPXRoaXMuX3ByaXZhdGU7cmV0dXJuIHI9PW51bGx8fCFyLnpvb21lZD90aGlzOihuLnpvb209ci56b29tLHIucGFubmVkJiYobi5wYW4ueD1yLnBhbi54LG4ucGFuLnk9ci5wYW4ueSksdGhpcy5lbWl0KCJ6b29tIisoci5wYW5uZWQ/IiBwYW4iOiIiKSsiIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0IiksdGhpcyl9LCJ6b29tIiksdmlld3BvcnQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG49ITAsaT0hMCxhPVtdLHM9ITEsbD0hMTtpZighZSlyZXR1cm4gdGhpcztpZihfdChlLnpvb20pfHwobj0hMSksVXIoZS5wYW4pfHwoaT0hMSksIW4mJiFpKXJldHVybiB0aGlzO2lmKG4pe3ZhciB1PWUuem9vbTt1PHIubWluWm9vbXx8dT5yLm1heFpvb218fCFyLnpvb21pbmdFbmFibGVkP3M9ITA6KHIuem9vbT11LGEucHVzaCgiem9vbSIpKX1pZihpJiYoIXN8fCFlLmNhbmNlbE9uRmFpbGVkWm9vbSkmJnIucGFubmluZ0VuYWJsZWQpe3ZhciBoPWUucGFuO190KGgueCkmJihyLnBhbi54PWgueCxsPSExKSxfdChoLnkpJiYoci5wYW4ueT1oLnksbD0hMSksbHx8YS5wdXNoKCJwYW4iKX1yZXR1cm4gYS5sZW5ndGg+MCYmKGEucHVzaCgidmlld3BvcnQiKSx0aGlzLmVtaXQoYS5qb2luKCIgIikpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSwidmlld3BvcnQiKSxjZW50ZXI6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldENlbnRlclBhbihlKTtyZXR1cm4gciYmKHRoaXMuX3ByaXZhdGUucGFuPXIsdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sImNlbnRlciIpLGdldENlbnRlclBhbjpvKGZ1bmN0aW9uKGUscil7aWYodGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCl7aWYoWnQoZSkpe3ZhciBuPWU7ZT10aGlzLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihuKX1lbHNlIHhvKGUpfHwoZT10aGlzLm11dGFibGVFbGVtZW50cygpKTtpZihlLmxlbmd0aCE9PTApe3ZhciBpPWUuYm91bmRpbmdCb3goKSxhPXRoaXMud2lkdGgoKSxzPXRoaXMuaGVpZ2h0KCk7cj1yPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUuem9vbTpyO3ZhciBsPXt4OihhLXIqKGkueDEraS54MikpLzIseToocy1yKihpLnkxK2kueTIpKS8yfTtyZXR1cm4gbH19fSwiZ2V0Q2VudGVyUGFuIikscmVzZXQ6byhmdW5jdGlvbigpe3JldHVybiF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkfHwhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD90aGlzOih0aGlzLnZpZXdwb3J0KHtwYW46e3g6MCx5OjB9LHpvb206MX0pLHRoaXMpfSwicmVzZXQiKSxpbnZhbGlkYXRlU2l6ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sImludmFsaWRhdGVTaXplIiksc2l6ZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZSxyPWUuY29udGFpbmVyLG49dGhpcztyZXR1cm4gZS5zaXplQ2FjaGU9ZS5zaXplQ2FjaGV8fChyP2Z1bmN0aW9uKCl7dmFyIGk9bi53aW5kb3coKS5nZXRDb21wdXRlZFN0eWxlKHIpLGE9byhmdW5jdGlvbihsKXtyZXR1cm4gcGFyc2VGbG9hdChpLmdldFByb3BlcnR5VmFsdWUobCkpfSwidmFsIik7cmV0dXJue3dpZHRoOnIuY2xpZW50V2lkdGgtYSgicGFkZGluZy1sZWZ0IiktYSgicGFkZGluZy1yaWdodCIpLGhlaWdodDpyLmNsaWVudEhlaWdodC1hKCJwYWRkaW5nLXRvcCIpLWEoInBhZGRpbmctYm90dG9tIil9fSgpOnt3aWR0aDoxLGhlaWdodDoxfSl9LCJzaXplIiksd2lkdGg6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS53aWR0aH0sIndpZHRoIiksaGVpZ2h0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkuaGVpZ2h0fSwiaGVpZ2h0IiksZXh0ZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLnBhbixyPXRoaXMuX3ByaXZhdGUuem9vbSxuPXRoaXMucmVuZGVyZWRFeHRlbnQoKSxpPXt4MToobi54MS1lLngpL3IseDI6KG4ueDItZS54KS9yLHkxOihuLnkxLWUueSkvcix5Mjoobi55Mi1lLnkpL3J9O3JldHVybiBpLnc9aS54Mi1pLngxLGkuaD1pLnkyLWkueTEsaX0sImV4dGVudCIpLHJlbmRlcmVkRXh0ZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpZHRoKCkscj10aGlzLmhlaWdodCgpO3JldHVybnt4MTowLHkxOjAseDI6ZSx5MjpyLHc6ZSxoOnJ9fSwicmVuZGVyZWRFeHRlbnQiKSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOm8oZnVuY3Rpb24oZSl7aWYoZSl0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9ZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU7cmV0dXJuIHRoaXN9LCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIil9O2UwLmNlbnRyZT1lMC5jZW50ZXI7ZTAuYXV0b2xvY2tOb2Rlcz1lMC5hdXRvbG9jaztlMC5hdXRvdW5ncmFiaWZ5Tm9kZXM9ZTAuYXV0b3VuZ3JhYmlmeTtjND17ZGF0YTp1bi5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTp1bi5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6dW4uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6dW4ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KX07YzQuYXR0cj1jNC5kYXRhO2M0LnJlbW92ZUF0dHI9YzQucmVtb3ZlRGF0YTt1ND1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ZT1pcih7fSxlKTt2YXIgbj1lLmNvbnRhaW5lcjtuJiYhRjYobikmJkY2KG5bMF0pJiYobj1uWzBdKTt2YXIgaT1uP24uX2N5cmVnOm51bGw7aT1pfHx7fSxpJiZpLmN5JiYoaS5jeS5kZXN0cm95KCksaT17fSk7dmFyIGE9aS5yZWFkaWVzPWkucmVhZGllc3x8W107biYmKG4uX2N5cmVnPWkpLGkuY3k9cjt2YXIgcz1IaSE9PXZvaWQgMCYmbiE9PXZvaWQgMCYmIWUuaGVhZGxlc3MsbD1lO2wubGF5b3V0PWlyKHtuYW1lOnM/ImdyaWQiOiJudWxsIn0sbC5sYXlvdXQpLGwucmVuZGVyZXI9aXIoe25hbWU6cz8iY2FudmFzIjoibnVsbCJ9LGwucmVuZGVyZXIpO3ZhciB1PW8oZnVuY3Rpb24oZyx5LHYpe3JldHVybiB5IT09dm9pZCAwP3k6diE9PXZvaWQgMD92Omd9LCJkZWZWYWwiKSxoPXRoaXMuX3ByaXZhdGU9e2NvbnRhaW5lcjpuLHJlYWR5OiExLG9wdGlvbnM6bCxlbGVtZW50czpuZXcgU2EodGhpcyksbGlzdGVuZXJzOltdLGFuaUVsZXM6bmV3IFNhKHRoaXMpLGRhdGE6bC5kYXRhfHx7fSxzY3JhdGNoOnt9LGxheW91dDpudWxsLHJlbmRlcmVyOm51bGwsZGVzdHJveWVkOiExLG5vdGlmaWNhdGlvbnNFbmFibGVkOiEwLG1pblpvb206MWUtNTAsbWF4Wm9vbToxZTUwLHpvb21pbmdFbmFibGVkOnUoITAsbC56b29taW5nRW5hYmxlZCksdXNlclpvb21pbmdFbmFibGVkOnUoITAsbC51c2VyWm9vbWluZ0VuYWJsZWQpLHBhbm5pbmdFbmFibGVkOnUoITAsbC5wYW5uaW5nRW5hYmxlZCksdXNlclBhbm5pbmdFbmFibGVkOnUoITAsbC51c2VyUGFubmluZ0VuYWJsZWQpLGJveFNlbGVjdGlvbkVuYWJsZWQ6dSghMCxsLmJveFNlbGVjdGlvbkVuYWJsZWQpLGF1dG9sb2NrOnUoITEsbC5hdXRvbG9jayxsLmF1dG9sb2NrTm9kZXMpLGF1dG91bmdyYWJpZnk6dSghMSxsLmF1dG91bmdyYWJpZnksbC5hdXRvdW5ncmFiaWZ5Tm9kZXMpLGF1dG91bnNlbGVjdGlmeTp1KCExLGwuYXV0b3Vuc2VsZWN0aWZ5KSxzdHlsZUVuYWJsZWQ6bC5zdHlsZUVuYWJsZWQ9PT12b2lkIDA/czpsLnN0eWxlRW5hYmxlZCx6b29tOl90KGwuem9vbSk/bC56b29tOjEscGFuOnt4OlVyKGwucGFuKSYmX3QobC5wYW4ueCk/bC5wYW4ueDowLHk6VXIobC5wYW4pJiZfdChsLnBhbi55KT9sLnBhbi55OjB9LGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0saGFzQ29tcG91bmROb2RlczohMSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOnUoMjUwLGwubXVsdGlDbGlja0RlYm91bmNlVGltZSl9O3RoaXMuY3JlYXRlRW1pdHRlcigpLHRoaXMuc2VsZWN0aW9uVHlwZShsLnNlbGVjdGlvblR5cGUpLHRoaXMuem9vbVJhbmdlKHttaW46bC5taW5ab29tLG1heDpsLm1heFpvb219KTt2YXIgZj1vKGZ1bmN0aW9uKGcseSl7dmFyIHY9Zy5zb21lKHdxZSk7aWYodilyZXR1cm4gc3kuYWxsKGcpLnRoZW4oeSk7eShnKX0sImxvYWRFeHREYXRhIik7aC5zdHlsZUVuYWJsZWQmJnIuc2V0U3R5bGUoW10pO3ZhciBkPWlyKHt9LGwsbC5yZW5kZXJlcik7ci5pbml0UmVuZGVyZXIoZCk7dmFyIHA9byhmdW5jdGlvbihnLHksdil7ci5ub3RpZmljYXRpb25zKCExKTt2YXIgeD1yLm11dGFibGVFbGVtZW50cygpO3gubGVuZ3RoPjAmJngucmVtb3ZlKCksZyE9bnVsbCYmKFVyKGcpfHxFbihnKSkmJnIuYWRkKGcpLHIub25lKCJsYXlvdXRyZWFkeSIsZnVuY3Rpb24oVCl7ci5ub3RpZmljYXRpb25zKCEwKSxyLmVtaXQoVCksci5vbmUoImxvYWQiLHkpLHIuZW1pdEFuZE5vdGlmeSgibG9hZCIpfSkub25lKCJsYXlvdXRzdG9wIixmdW5jdGlvbigpe3Iub25lKCJkb25lIix2KSxyLmVtaXQoImRvbmUiKX0pO3ZhciBiPWlyKHt9LHIuX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO2IuZWxlcz1yLmVsZW1lbnRzKCksci5sYXlvdXQoYikucnVuKCl9LCJzZXRFbGVzQW5kTGF5b3V0Iik7ZihbbC5zdHlsZSxsLmVsZW1lbnRzXSxmdW5jdGlvbihtKXt2YXIgZz1tWzBdLHk9bVsxXTtoLnN0eWxlRW5hYmxlZCYmci5zdHlsZSgpLmFwcGVuZChnKSxwKHksZnVuY3Rpb24oKXtyLnN0YXJ0QW5pbWF0aW9uTG9vcCgpLGgucmVhZHk9ITAsbGkobC5yZWFkeSkmJnIub24oInJlYWR5IixsLnJlYWR5KTtmb3IodmFyIHY9MDt2PGEubGVuZ3RoO3YrKyl7dmFyIHg9YVt2XTtyLm9uKCJyZWFkeSIseCl9aSYmKGkucmVhZGllcz1bXSksci5lbWl0KCJyZWFkeSIpfSxsLmRvbmUpfSl9LCJDb3JlIiksVzY9dTQucHJvdG90eXBlO2lyKFc2LHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImNvcmUifSwiaW5zdGFuY2VTdHJpbmciKSxpc1JlYWR5Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sImlzUmVhZHkiKSxkZXN0cm95ZWQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmRlc3Ryb3llZH0sImRlc3Ryb3llZCIpLHJlYWR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNSZWFkeSgpP3RoaXMuZW1pdHRlcigpLmVtaXQoInJlYWR5IixbXSxlKTp0aGlzLm9uKCJyZWFkeSIsZSksdGhpc30sInJlYWR5IiksZGVzdHJveTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighZS5kZXN0cm95ZWQoKSlyZXR1cm4gZS5zdG9wQW5pbWF0aW9uTG9vcCgpLGUuZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KCJkZXN0cm95IiksZS5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsZX0sImRlc3Ryb3kiKSxoYXNFbGVtZW50V2l0aElkOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMuaGFzRWxlbWVudFdpdGhJZChlKX0sImhhc0VsZW1lbnRXaXRoSWQiKSxnZXRFbGVtZW50QnlJZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmdldEVsZW1lbnRCeUlkKGUpfSwiZ2V0RWxlbWVudEJ5SWQiKSxoYXNDb21wb3VuZE5vZGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzfSwiaGFzQ29tcG91bmROb2RlcyIpLGhlYWRsZXNzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCl9LCJoZWFkbGVzcyIpLHN0eWxlRW5hYmxlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkfSwic3R5bGVFbmFibGVkIiksYWRkVG9Qb29sOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMubWVyZ2UoZSksdGhpc30sImFkZFRvUG9vbCIpLHJlbW92ZUZyb21Qb29sOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMudW5tZXJnZShlKSx0aGlzfSwicmVtb3ZlRnJvbVBvb2wiKSxjb250YWluZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sImNvbnRhaW5lciIpLHdpbmRvdzpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jb250YWluZXI7aWYoZT09bnVsbClyZXR1cm4gSGk7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jb250YWluZXIub3duZXJEb2N1bWVudDtyZXR1cm4gcj09PXZvaWQgMHx8cj09bnVsbD9IaTpyLmRlZmF1bHRWaWV3fHxIaX0sIndpbmRvdyIpLG1vdW50Om8oZnVuY3Rpb24oZSl7aWYoZSE9bnVsbCl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUsaT1uLm9wdGlvbnM7cmV0dXJuIUY2KGUpJiZGNihlWzBdKSYmKGU9ZVswXSksci5zdG9wQW5pbWF0aW9uTG9vcCgpLHIuZGVzdHJveVJlbmRlcmVyKCksbi5jb250YWluZXI9ZSxuLnN0eWxlRW5hYmxlZD0hMCxyLmludmFsaWRhdGVTaXplKCksci5pbml0UmVuZGVyZXIoaXIoe30saSxpLnJlbmRlcmVyLHtuYW1lOmkucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjppLnJlbmRlcmVyLm5hbWV9KSksci5zdGFydEFuaW1hdGlvbkxvb3AoKSxyLnN0eWxlKGkuc3R5bGUpLHIuZW1pdCgibW91bnQiKSxyfX0sIm1vdW50IiksdW5tb3VudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5zdG9wQW5pbWF0aW9uTG9vcCgpLGUuZGVzdHJveVJlbmRlcmVyKCksZS5pbml0UmVuZGVyZXIoe25hbWU6Im51bGwifSksZS5lbWl0KCJ1bm1vdW50IiksZX0sInVubW91bnQiKSxvcHRpb25zOm8oZnVuY3Rpb24oKXtyZXR1cm4gUWModGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sIm9wdGlvbnMiKSxqc29uOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUsaT1yLm11dGFibGVFbGVtZW50cygpLGE9byhmdW5jdGlvbihTKXtyZXR1cm4gci5nZXRFbGVtZW50QnlJZChTLmlkKCkpfSwiZ2V0RnJlc2hSZWYiKTtpZihVcihlKSl7aWYoci5zdGFydEJhdGNoKCksZS5lbGVtZW50cyl7dmFyIHM9e30sbD1vKGZ1bmN0aW9uKFMsdyl7Zm9yKHZhciBFPVtdLF89W10sQz0wO0M8Uy5sZW5ndGg7QysrKXt2YXIgRD1TW0NdO2lmKCFELmRhdGEuaWQpe2huKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBPPSIiK0QuZGF0YS5pZCxSPXIuZ2V0RWxlbWVudEJ5SWQoTyk7c1tPXT0hMCxSLmxlbmd0aCE9PTA/Xy5wdXNoKHtlbGU6Uixqc29uOkR9KToodyYmKEQuZ3JvdXA9dyksRS5wdXNoKEQpKX1yLmFkZChFKTtmb3IodmFyIGs9MDtrPF8ubGVuZ3RoO2srKyl7dmFyIEw9X1trXSxBPUwuZWxlLEk9TC5qc29uO0EuanNvbihJKX19LCJ1cGRhdGVFbGVzIik7aWYoRW4oZS5lbGVtZW50cykpbChlLmVsZW1lbnRzKTtlbHNlIGZvcih2YXIgdT1bIm5vZGVzIiwiZWRnZXMiXSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0sZD1lLmVsZW1lbnRzW2ZdO0VuKGQpJiZsKGQsZil9dmFyIHA9ci5jb2xsZWN0aW9uKCk7aS5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIXNbVC5pZCgpXX0pLmZvckVhY2goZnVuY3Rpb24oVCl7VC5pc1BhcmVudCgpP3AubWVyZ2UoVCk6VC5yZW1vdmUoKX0pLHAuZm9yRWFjaChmdW5jdGlvbihUKXtyZXR1cm4gVC5jaGlsZHJlbigpLm1vdmUoe3BhcmVudDpudWxsfSl9KSxwLmZvckVhY2goZnVuY3Rpb24oVCl7cmV0dXJuIGEoVCkucmVtb3ZlKCl9KX1lLnN0eWxlJiZyLnN0eWxlKGUuc3R5bGUpLGUuem9vbSE9bnVsbCYmZS56b29tIT09bi56b29tJiZyLnpvb20oZS56b29tKSxlLnBhbiYmKGUucGFuLnghPT1uLnBhbi54fHxlLnBhbi55IT09bi5wYW4ueSkmJnIucGFuKGUucGFuKSxlLmRhdGEmJnIuZGF0YShlLmRhdGEpO2Zvcih2YXIgbT1bIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJ1c2VyWm9vbWluZ0VuYWJsZWQiLCJwYW5uaW5nRW5hYmxlZCIsInVzZXJQYW5uaW5nRW5hYmxlZCIsImJveFNlbGVjdGlvbkVuYWJsZWQiLCJhdXRvbG9jayIsImF1dG91bmdyYWJpZnkiLCJhdXRvdW5zZWxlY3RpZnkiLCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIl0sZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddO2VbeV0hPW51bGwmJnJbeV0oZVt5XSl9cmV0dXJuIHIuZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIHY9ISFlLHg9e307dj94LmVsZW1lbnRzPXRoaXMuZWxlbWVudHMoKS5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIFQuanNvbigpfSk6KHguZWxlbWVudHM9e30saS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBTPVQuZ3JvdXAoKTt4LmVsZW1lbnRzW1NdfHwoeC5lbGVtZW50c1tTXT1bXSkseC5lbGVtZW50c1tTXS5wdXNoKFQuanNvbigpKX0pKSx0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCYmKHguc3R5bGU9ci5zdHlsZSgpLmpzb24oKSkseC5kYXRhPVFjKHIuZGF0YSgpKTt2YXIgYj1uLm9wdGlvbnM7cmV0dXJuIHguem9vbWluZ0VuYWJsZWQ9bi56b29taW5nRW5hYmxlZCx4LnVzZXJab29taW5nRW5hYmxlZD1uLnVzZXJab29taW5nRW5hYmxlZCx4Lnpvb209bi56b29tLHgubWluWm9vbT1uLm1pblpvb20seC5tYXhab29tPW4ubWF4Wm9vbSx4LnBhbm5pbmdFbmFibGVkPW4ucGFubmluZ0VuYWJsZWQseC51c2VyUGFubmluZ0VuYWJsZWQ9bi51c2VyUGFubmluZ0VuYWJsZWQseC5wYW49UWMobi5wYW4pLHguYm94U2VsZWN0aW9uRW5hYmxlZD1uLmJveFNlbGVjdGlvbkVuYWJsZWQseC5yZW5kZXJlcj1RYyhiLnJlbmRlcmVyKSx4LmhpZGVFZGdlc09uVmlld3BvcnQ9Yi5oaWRlRWRnZXNPblZpZXdwb3J0LHgudGV4dHVyZU9uVmlld3BvcnQ9Yi50ZXh0dXJlT25WaWV3cG9ydCx4LndoZWVsU2Vuc2l0aXZpdHk9Yi53aGVlbFNlbnNpdGl2aXR5LHgubW90aW9uQmx1cj1iLm1vdGlvbkJsdXIseC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWIubXVsdGlDbGlja0RlYm91bmNlVGltZSx4fX0sImpzb24iKX0pO1c2LiRpZD1XNi5nZXRFbGVtZW50QnlJZDtbb1plLGZaZSx1MWUsQ0IsSTYscFplLEFCLE82LHlaZSxlMCxjNF0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihXNix0KX0pO3haZT17Zml0OiEwLGRpcmVjdGVkOiExLHBhZGRpbmc6MzAsY2lyY2xlOiExLGdyaWQ6ITEsc3BhY2luZ0ZhY3RvcjoxLjc1LGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJvb3RzOnZvaWQgMCxkZXB0aFNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX0sYlplPXttYXhpbWFsOiExLGFjeWNsaWM6ITF9LHExPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LCJnZXRJbmZvIiksTm1lPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiLHIpfSwic2V0SW5mbyIpO28oaDFlLCJCcmVhZHRoRmlyc3RMYXlvdXQiKTtoMWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuY3kscj10LmVsZXMsbj1yLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGFlKXtyZXR1cm4gYWUuaXNDaGlsZGxlc3MoKX0pLGk9cixhPXQuZGlyZWN0ZWQscz10LmFjeWNsaWN8fHQubWF4aW1hbHx8dC5tYXhpbWFsQWRqdXN0bWVudHM+MCxsPSEhdC5ib3VuZGluZ0JveCx1PWUuZXh0ZW50KCksaD1ZcyhsP3QuYm91bmRpbmdCb3g6e3gxOnUueDEseTE6dS55MSx3OnUudyxoOnUuaH0pLGY7aWYoeG8odC5yb290cykpZj10LnJvb3RzO2Vsc2UgaWYoRW4odC5yb290cykpe2Zvcih2YXIgZD1bXSxwPTA7cDx0LnJvb3RzLmxlbmd0aDtwKyspe3ZhciBtPXQucm9vdHNbcF0sZz1lLmdldEVsZW1lbnRCeUlkKG0pO2QucHVzaChnKX1mPWUuY29sbGVjdGlvbihkKX1lbHNlIGlmKFp0KHQucm9vdHMpKWY9ZS4kKHQucm9vdHMpO2Vsc2UgaWYoYSlmPW4ucm9vdHMoKTtlbHNle3ZhciB5PXIuY29tcG9uZW50cygpO2Y9ZS5jb2xsZWN0aW9uKCk7Zm9yKHZhciB2PW8oZnVuY3Rpb24oT2Upe3ZhciB5ZT15W09lXSxCZT15ZS5tYXhEZWdyZWUoITEpLEhlPXllLmZpbHRlcihmdW5jdGlvbih6ZSl7cmV0dXJuIHplLmRlZ3JlZSghMSk9PT1CZX0pO2Y9Zi5hZGQoSGUpfSwiX2xvb3AiKSx4PTA7eDx5Lmxlbmd0aDt4Kyspdih4KX12YXIgYj1bXSxUPXt9LFM9byhmdW5jdGlvbihPZSx5ZSl7Ylt5ZV09PW51bGwmJihiW3llXT1bXSk7dmFyIEJlPWJbeWVdLmxlbmd0aDtiW3llXS5wdXNoKE9lKSxObWUoT2Use2luZGV4OkJlLGRlcHRoOnllfSl9LCJhZGRUb0RlcHRoIiksdz1vKGZ1bmN0aW9uKE9lLHllKXt2YXIgQmU9cTEoT2UpLEhlPUJlLmRlcHRoLHplPUJlLmluZGV4O2JbSGVdW3plXT1udWxsLE9lLmlzQ2hpbGRsZXNzKCkmJlMoT2UseWUpfSwiY2hhbmdlRGVwdGgiKTtpLmJmcyh7cm9vdHM6ZixkaXJlY3RlZDp0LmRpcmVjdGVkLHZpc2l0Om8oZnVuY3Rpb24oT2UseWUsQmUsSGUsemUpe3ZhciBMZT1PZVswXSxJZT1MZS5pZCgpO0xlLmlzQ2hpbGRsZXNzKCkmJlMoTGUsemUpLFRbSWVdPSEwfSwidmlzaXQiKX0pO2Zvcih2YXIgRT1bXSxfPTA7XzxuLmxlbmd0aDtfKyspe3ZhciBDPW5bX107VFtDLmlkKCldfHxFLnB1c2goQyl9dmFyIEQ9byhmdW5jdGlvbihPZSl7Zm9yKHZhciB5ZT1iW09lXSxCZT0wO0JlPHllLmxlbmd0aDtCZSsrKXt2YXIgSGU9eWVbQmVdO2lmKEhlPT1udWxsKXt5ZS5zcGxpY2UoQmUsMSksQmUtLTtjb250aW51ZX1ObWUoSGUse2RlcHRoOk9lLGluZGV4OkJlfSl9fSwiYXNzaWduRGVwdGhzQXQiKSxPPW8oZnVuY3Rpb24oT2UseWUpe2Zvcih2YXIgQmU9cTEoT2UpLEhlPU9lLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKGllKXtyZXR1cm4gaWUuaXNOb2RlKCkmJnIuaGFzKGllKX0pLHplPS0xLExlPU9lLmlkKCksSWU9MDtJZTxIZS5sZW5ndGg7SWUrKyl7dmFyIHhlPUhlW0llXSxxPXExKHhlKTt6ZT1NYXRoLm1heCh6ZSxxLmRlcHRoKX1pZihCZS5kZXB0aDw9emUpe2lmKCF0LmFjeWNsaWMmJnllW0xlXSlyZXR1cm4gbnVsbDt2YXIgZGU9emUrMTtyZXR1cm4gdyhPZSxkZSkseWVbTGVdPWRlLCEwfXJldHVybiExfSwiYWRqdXN0TWF4aW1hbGx5Iik7aWYoYSYmcyl7dmFyIFI9W10saz17fSxMPW8oZnVuY3Rpb24oT2Upe3JldHVybiBSLnB1c2goT2UpfSwiZW5xdWV1ZSIpLEE9byhmdW5jdGlvbigpe3JldHVybiBSLnNoaWZ0KCl9LCJkZXF1ZXVlIik7Zm9yKG4uZm9yRWFjaChmdW5jdGlvbihhZSl7cmV0dXJuIFIucHVzaChhZSl9KTtSLmxlbmd0aD4wOyl7dmFyIEk9QSgpLE09TyhJLGspO2lmKE0pSS5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihhZSl7cmV0dXJuIGFlLmlzTm9kZSgpJiZyLmhhcyhhZSl9KS5mb3JFYWNoKEwpO2Vsc2UgaWYoTT09PW51bGwpe2huKCJEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgIitJLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19dmFyIFA9MDtpZih0LmF2b2lkT3ZlcmxhcClmb3IodmFyIEI9MDtCPG4ubGVuZ3RoO0IrKyl7dmFyIEY9bltCXSx6PUYubGF5b3V0RGltZW5zaW9ucyh0KSwkPXoudyxVPXouaDtQPU1hdGgubWF4KFAsJCxVKX12YXIgSz17fSxlZT1vKGZ1bmN0aW9uKE9lKXtpZihLW09lLmlkKCldKXJldHVybiBLW09lLmlkKCldO2Zvcih2YXIgeWU9cTEoT2UpLmRlcHRoLEJlPU9lLm5laWdoYm9yaG9vZCgpLEhlPTAsemU9MCxMZT0wO0xlPEJlLmxlbmd0aDtMZSsrKXt2YXIgSWU9QmVbTGVdO2lmKCEoSWUuaXNFZGdlKCl8fEllLmlzUGFyZW50KCl8fCFuLmhhcyhJZSkpKXt2YXIgeGU9cTEoSWUpO2lmKHhlIT1udWxsKXt2YXIgcT14ZS5pbmRleCxkZT14ZS5kZXB0aDtpZighKHE9PW51bGx8fGRlPT1udWxsKSl7dmFyIGllPWJbZGVdLmxlbmd0aDtkZTx5ZSYmKEhlKz1xL2llLHplKyspfX19fXJldHVybiB6ZT1NYXRoLm1heCgxLHplKSxIZT1IZS96ZSx6ZT09PTAmJihIZT0wKSxLW09lLmlkKCldPUhlLEhlfSwiZ2V0V2VpZ2h0ZWRQZXJjZW50IiksWT1vKGZ1bmN0aW9uKE9lLHllKXt2YXIgQmU9ZWUoT2UpLEhlPWVlKHllKSx6ZT1CZS1IZTtyZXR1cm4gemU9PT0wP3VnZShPZS5pZCgpLHllLmlkKCkpOnplfSwic29ydEZuIik7dC5kZXB0aFNvcnQhPT12b2lkIDAmJihZPXQuZGVwdGhTb3J0KTtmb3IodmFyIGNlPWIubGVuZ3RoLFo9MDtaPGNlO1orKyliW1pdLnNvcnQoWSksRChaKTtmb3IodmFyIHVlPVtdLFE9MDtRPEUubGVuZ3RoO1ErKyl1ZS5wdXNoKEVbUV0pO3ZhciBqPW8oZnVuY3Rpb24oKXtmb3IodmFyIE9lPTA7T2U8Y2U7T2UrKylEKE9lKX0sImFzc2lnbkRlcHRocyIpO3VlLmxlbmd0aCYmKGIudW5zaGlmdCh1ZSksY2U9Yi5sZW5ndGgsaigpKTtmb3IodmFyIG5lPTAsdGU9MDt0ZTxjZTt0ZSsrKW5lPU1hdGgubWF4KGJbdGVdLmxlbmd0aCxuZSk7dmFyIGhlPXt4OmgueDEraC53LzIseTpoLnkxK2guaC8yfSxsZT1uLnJlZHVjZShmdW5jdGlvbihhZSxPZSl7cmV0dXJuIGZ1bmN0aW9uKHllKXtyZXR1cm57dzphZS53PT09LTE/eWUudzooYWUudyt5ZS53KS8yLGg6YWUuaD09PS0xP3llLmg6KGFlLmgreWUuaCkvMn19KE9lLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOnQubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzfSkpfSx7dzotMSxoOi0xfSksSj1NYXRoLm1heChjZT09PTE/MDpsPyhoLmgtdC5wYWRkaW5nKjItbGUuaCkvKGNlLTEpOihoLmgtdC5wYWRkaW5nKjItbGUuaCkvKGNlKzEpLFApLFNlPWIucmVkdWNlKGZ1bmN0aW9uKGFlLE9lKXtyZXR1cm4gTWF0aC5tYXgoYWUsT2UubGVuZ3RoKX0sMCksc2U9byhmdW5jdGlvbihPZSl7dmFyIHllPXExKE9lKSxCZT15ZS5kZXB0aCxIZT15ZS5pbmRleDtpZih0LmNpcmNsZSl7dmFyIHplPU1hdGgubWluKGgudy8yL2NlLGguaC8yL2NlKTt6ZT1NYXRoLm1heCh6ZSxQKTt2YXIgTGU9emUqQmUremUtKGNlPjAmJmJbMF0ubGVuZ3RoPD0zP3plLzI6MCksSWU9MipNYXRoLlBJL2JbQmVdLmxlbmd0aCpIZTtyZXR1cm4gQmU9PT0wJiZiWzBdLmxlbmd0aD09PTEmJihMZT0xKSx7eDpoZS54K0xlKk1hdGguY29zKEllKSx5OmhlLnkrTGUqTWF0aC5zaW4oSWUpfX1lbHNle3ZhciB4ZT1iW0JlXS5sZW5ndGgscT1NYXRoLm1heCh4ZT09PTE/MDpsPyhoLnctdC5wYWRkaW5nKjItbGUudykvKCh0LmdyaWQ/U2U6eGUpLTEpOihoLnctdC5wYWRkaW5nKjItbGUudykvKCh0LmdyaWQ/U2U6eGUpKzEpLFApLGRlPXt4OmhlLngrKEhlKzEtKHhlKzEpLzIpKnEseTpoZS55KyhCZSsxLShjZSsxKS8yKSpKfTtyZXR1cm4gZGV9fSwiZ2V0UG9zaXRpb24iKTtyZXR1cm4gci5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLHQsc2UpLHRoaXN9O1RaZT17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAscmFkaXVzOnZvaWQgMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsc29ydDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKGYxZSwiQ2lyY2xlTGF5b3V0Iik7ZjFlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9dC5jeSxuPWUuZWxlcyxpPWUuY291bnRlcmNsb2Nrd2lzZSE9PXZvaWQgMD8hZS5jb3VudGVyY2xvY2t3aXNlOmUuY2xvY2t3aXNlLGE9bi5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2Uuc29ydCYmKGE9YS5zb3J0KGUuc29ydCkpO2Zvcih2YXIgcz1ZcyhlLmJvdW5kaW5nQm94P2UuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OnIud2lkdGgoKSxoOnIuaGVpZ2h0KCl9KSxsPXt4OnMueDErcy53LzIseTpzLnkxK3MuaC8yfSx1PWUuc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9hLmxlbmd0aDplLnN3ZWVwLGg9dS9NYXRoLm1heCgxLGEubGVuZ3RoLTEpLGYsZD0wLHA9MDtwPGEubGVuZ3RoO3ArKyl7dmFyIG09YVtwXSxnPW0ubGF5b3V0RGltZW5zaW9ucyhlKSx5PWcudyx2PWcuaDtkPU1hdGgubWF4KGQseSx2KX1pZihfdChlLnJhZGl1cyk/Zj1lLnJhZGl1czphLmxlbmd0aDw9MT9mPTA6Zj1NYXRoLm1pbihzLmgscy53KS8yLWQsYS5sZW5ndGg+MSYmZS5hdm9pZE92ZXJsYXApe2QqPTEuNzU7dmFyIHg9TWF0aC5jb3MoaCktTWF0aC5jb3MoMCksYj1NYXRoLnNpbihoKS1NYXRoLnNpbigwKSxUPU1hdGguc3FydChkKmQvKHgqeCtiKmIpKTtmPU1hdGgubWF4KFQsZil9dmFyIFM9byhmdW5jdGlvbihFLF8pe3ZhciBDPWUuc3RhcnRBbmdsZStfKmgqKGk/MTotMSksRD1mKk1hdGguY29zKEMpLE89ZipNYXRoLnNpbihDKSxSPXt4OmwueCtELHk6bC55K099O3JldHVybiBSfSwiZ2V0UG9zIik7cmV0dXJuIG4ubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLFMpLHRoaXN9O3daZT17Zml0OiEwLHBhZGRpbmc6MzAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLGVxdWlkaXN0YW50OiExLG1pbk5vZGVTcGFjaW5nOjEwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGhlaWdodDp2b2lkIDAsd2lkdGg6dm9pZCAwLHNwYWNpbmdGYWN0b3I6dm9pZCAwLGNvbmNlbnRyaWM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5kZWdyZWUoKX0sImNvbmNlbnRyaWMiKSxsZXZlbFdpZHRoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF4RGVncmVlKCkvNH0sImxldmVsV2lkdGgiKSxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28oZDFlLCJDb25jZW50cmljTGF5b3V0Iik7ZDFlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcHRpb25zLGU9dCxyPWUuY291bnRlcmNsb2Nrd2lzZSE9PXZvaWQgMD8hZS5jb3VudGVyY2xvY2t3aXNlOmUuY2xvY2t3aXNlLG49dC5jeSxpPWUuZWxlcyxhPWkubm9kZXMoKS5ub3QoIjpwYXJlbnQiKSxzPVlzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6bi53aWR0aCgpLGg6bi5oZWlnaHQoKX0pLGw9e3g6cy54MStzLncvMix5OnMueTErcy5oLzJ9LHU9W10saD0wLGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGQ9YVtmXSxwPXZvaWQgMDtwPWUuY29uY2VudHJpYyhkKSx1LnB1c2goe3ZhbHVlOnAsbm9kZTpkfSksZC5fcHJpdmF0ZS5zY3JhdGNoLmNvbmNlbnRyaWM9cH1hLnVwZGF0ZVN0eWxlKCk7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aDttKyspe3ZhciBnPWFbbV0seT1nLmxheW91dERpbWVuc2lvbnMoZSk7aD1NYXRoLm1heChoLHkudyx5LmgpfXUuc29ydChmdW5jdGlvbihsZSxKKXtyZXR1cm4gSi52YWx1ZS1sZS52YWx1ZX0pO2Zvcih2YXIgdj1lLmxldmVsV2lkdGgoYSkseD1bW11dLGI9eFswXSxUPTA7VDx1Lmxlbmd0aDtUKyspe3ZhciBTPXVbVF07aWYoYi5sZW5ndGg+MCl7dmFyIHc9TWF0aC5hYnMoYlswXS52YWx1ZS1TLnZhbHVlKTt3Pj12JiYoYj1bXSx4LnB1c2goYikpfWIucHVzaChTKX12YXIgRT1oK2UubWluTm9kZVNwYWNpbmc7aWYoIWUuYXZvaWRPdmVybGFwKXt2YXIgXz14Lmxlbmd0aD4wJiZ4WzBdLmxlbmd0aD4xLEM9TWF0aC5taW4ocy53LHMuaCkvMi1FLEQ9Qy8oeC5sZW5ndGgrXz8xOjApO0U9TWF0aC5taW4oRSxEKX1mb3IodmFyIE89MCxSPTA7Ujx4Lmxlbmd0aDtSKyspe3ZhciBrPXhbUl0sTD1lLnN3ZWVwPT09dm9pZCAwPzIqTWF0aC5QSS0yKk1hdGguUEkvay5sZW5ndGg6ZS5zd2VlcCxBPWsuZFRoZXRhPUwvTWF0aC5tYXgoMSxrLmxlbmd0aC0xKTtpZihrLmxlbmd0aD4xJiZlLmF2b2lkT3ZlcmxhcCl7dmFyIEk9TWF0aC5jb3MoQSktTWF0aC5jb3MoMCksTT1NYXRoLnNpbihBKS1NYXRoLnNpbigwKSxQPU1hdGguc3FydChFKkUvKEkqSStNKk0pKTtPPU1hdGgubWF4KFAsTyl9ay5yPU8sTys9RX1pZihlLmVxdWlkaXN0YW50KXtmb3IodmFyIEI9MCxGPTAsej0wO3o8eC5sZW5ndGg7eisrKXt2YXIgJD14W3pdLFU9JC5yLUY7Qj1NYXRoLm1heChCLFUpfUY9MDtmb3IodmFyIEs9MDtLPHgubGVuZ3RoO0srKyl7dmFyIGVlPXhbS107Sz09PTAmJihGPWVlLnIpLGVlLnI9RixGKz1CfX1mb3IodmFyIFk9e30sY2U9MDtjZTx4Lmxlbmd0aDtjZSsrKWZvcih2YXIgWj14W2NlXSx1ZT1aLmRUaGV0YSxRPVoucixqPTA7ajxaLmxlbmd0aDtqKyspe3ZhciBuZT1aW2pdLHRlPWUuc3RhcnRBbmdsZSsocj8xOi0xKSp1ZSpqLGhlPXt4OmwueCtRKk1hdGguY29zKHRlKSx5OmwueStRKk1hdGguc2luKHRlKX07WVtuZS5ub2RlLmlkKCldPWhlfXJldHVybiBpLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxmdW5jdGlvbihsZSl7dmFyIEo9bGUuaWQoKTtyZXR1cm4gWVtKXX0pLHRoaXN9O2taZT17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpLGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIiksYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpvKGZ1bmN0aW9uKGUpe3JldHVybiAyMDQ4fSwibm9kZVJlcHVsc2lvbiIpLG5vZGVPdmVybGFwOjQsaWRlYWxFZGdlTGVuZ3RoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIDMyfSwiaWRlYWxFZGdlTGVuZ3RoIiksZWRnZUVsYXN0aWNpdHk6byhmdW5jdGlvbihlKXtyZXR1cm4gMzJ9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtvKHVDLCJDb3NlTGF5b3V0Iik7dUMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuY3kscj10aGlzO3Iuc3RvcHBlZD0hMSwodC5hbmltYXRlPT09ITB8fHQuYW5pbWF0ZT09PSExKSYmci5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0OnJ9KSx0LmRlYnVnPT09ITA/ZkI9ITA6ZkI9ITE7dmFyIG49RVplKGUscix0KTtmQiYmQVplKG4pLHQucmFuZG9taXplJiZfWmUobik7dmFyIGk9bmgoKSxhPW8oZnVuY3Rpb24oKXtEWmUobixlLHQpLHQuZml0PT09ITAmJmUuZml0KHQucGFkZGluZyl9LCJyZWZyZXNoIikscz1vKGZ1bmN0aW9uKHApe3JldHVybiEoci5zdG9wcGVkfHxwPj10Lm51bUl0ZXJ8fChMWmUobix0KSxuLnRlbXBlcmF0dXJlPW4udGVtcGVyYXR1cmUqdC5jb29saW5nRmFjdG9yLG4udGVtcGVyYXR1cmU8dC5taW5UZW1wKSl9LCJtYWluTG9vcCIpLGw9byhmdW5jdGlvbigpe2lmKHQuYW5pbWF0ZT09PSEwfHx0LmFuaW1hdGU9PT0hMSlhKCksci5vbmUoImxheW91dHN0b3AiLHQuc3RvcCksci5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6cn0pO2Vsc2V7dmFyIHA9dC5lbGVzLm5vZGVzKCksbT1wMWUobix0LHApO3AubGF5b3V0UG9zaXRpb25zKHIsdCxtKX19LCJkb25lIiksdT0wLGg9ITA7aWYodC5hbmltYXRlPT09ITApe3ZhciBmPW8oZnVuY3Rpb24gZCgpe2Zvcih2YXIgcD0wO2gmJnA8dC5yZWZyZXNoOyloPXModSksdSsrLHArKztpZighaClJbWUobix0KSxsKCk7ZWxzZXt2YXIgbT1uaCgpO20taT49dC5hbmltYXRpb25UaHJlc2hvbGQmJmEoKSwkNihkKX19LCJmcmFtZSIpO2YoKX1lbHNle2Zvcig7aDspaD1zKHUpLHUrKztJbWUobix0KSxsKCl9cmV0dXJuIHRoaXN9O3VDLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXMuZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9O3VDLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhyZWFkJiZ0aGlzLnRocmVhZC5zdG9wKCksdGhpc307RVplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmVsZXMuZWRnZXMoKSxhPW4uZWxlcy5ub2RlcygpLHM9WXMobi5ib3VuZGluZ0JveD9uLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzplLndpZHRoKCksaDplLmhlaWdodCgpfSksbD17aXNDb21wb3VuZDplLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6YS5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOmkuc2l6ZSgpLHRlbXBlcmF0dXJlOm4uaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6cy53LGNsaWVudEhlaWdodDpzLmgsYm91bmRpbmdCb3g6c30sdT1uLmVsZXMuY29tcG9uZW50cygpLGg9e30sZj0wO2Y8dS5sZW5ndGg7ZisrKWZvcih2YXIgZD11W2ZdLHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTtoW20uaWQoKV09Zn1mb3IodmFyIGY9MDtmPGwubm9kZVNpemU7ZisrKXt2YXIgZz1hW2ZdLHk9Zy5sYXlvdXREaW1lbnNpb25zKG4pLHY9e307di5pc0xvY2tlZD1nLmxvY2tlZCgpLHYuaWQ9Zy5kYXRhKCJpZCIpLHYucGFyZW50SWQ9Zy5kYXRhKCJwYXJlbnQiKSx2LmNtcHRJZD1oW2cuaWQoKV0sdi5jaGlsZHJlbj1bXSx2LnBvc2l0aW9uWD1nLnBvc2l0aW9uKCJ4Iiksdi5wb3NpdGlvblk9Zy5wb3NpdGlvbigieSIpLHYub2Zmc2V0WD0wLHYub2Zmc2V0WT0wLHYuaGVpZ2h0PXkudyx2LndpZHRoPXkuaCx2Lm1heFg9di5wb3NpdGlvblgrdi53aWR0aC8yLHYubWluWD12LnBvc2l0aW9uWC12LndpZHRoLzIsdi5tYXhZPXYucG9zaXRpb25ZK3YuaGVpZ2h0LzIsdi5taW5ZPXYucG9zaXRpb25ZLXYuaGVpZ2h0LzIsdi5wYWRMZWZ0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFJpZ2h0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFRvcD1wYXJzZUZsb2F0KGcuc3R5bGUoInBhZGRpbmciKSksdi5wYWRCb3R0b209cGFyc2VGbG9hdChnLnN0eWxlKCJwYWRkaW5nIikpLHYubm9kZVJlcHVsc2lvbj1saShuLm5vZGVSZXB1bHNpb24pP24ubm9kZVJlcHVsc2lvbihnKTpuLm5vZGVSZXB1bHNpb24sbC5sYXlvdXROb2Rlcy5wdXNoKHYpLGwuaWRUb0luZGV4W3YuaWRdPWZ9Zm9yKHZhciB4PVtdLGI9MCxUPS0xLFM9W10sZj0wO2Y8bC5ub2RlU2l6ZTtmKyspe3ZhciBnPWwubGF5b3V0Tm9kZXNbZl0sdz1nLnBhcmVudElkO3chPW51bGw/bC5sYXlvdXROb2Rlc1tsLmlkVG9JbmRleFt3XV0uY2hpbGRyZW4ucHVzaChnLmlkKTooeFsrK1RdPWcuaWQsUy5wdXNoKGcuaWQpKX1mb3IobC5ncmFwaFNldC5wdXNoKFMpO2I8PVQ7KXt2YXIgRT14W2IrK10sXz1sLmlkVG9JbmRleFtFXSxtPWwubGF5b3V0Tm9kZXNbX10sQz1tLmNoaWxkcmVuO2lmKEMubGVuZ3RoPjApe2wuZ3JhcGhTZXQucHVzaChDKTtmb3IodmFyIGY9MDtmPEMubGVuZ3RoO2YrKyl4WysrVF09Q1tmXX19Zm9yKHZhciBmPTA7ZjxsLmdyYXBoU2V0Lmxlbmd0aDtmKyspZm9yKHZhciBEPWwuZ3JhcGhTZXRbZl0scD0wO3A8RC5sZW5ndGg7cCsrKXt2YXIgTz1sLmlkVG9JbmRleFtEW3BdXTtsLmluZGV4VG9HcmFwaFtPXT1mfWZvcih2YXIgZj0wO2Y8bC5lZGdlU2l6ZTtmKyspe3ZhciBSPWlbZl0saz17fTtrLmlkPVIuZGF0YSgiaWQiKSxrLnNvdXJjZUlkPVIuZGF0YSgic291cmNlIiksay50YXJnZXRJZD1SLmRhdGEoInRhcmdldCIpO3ZhciBMPWxpKG4uaWRlYWxFZGdlTGVuZ3RoKT9uLmlkZWFsRWRnZUxlbmd0aChSKTpuLmlkZWFsRWRnZUxlbmd0aCxBPWxpKG4uZWRnZUVsYXN0aWNpdHkpP24uZWRnZUVsYXN0aWNpdHkoUik6bi5lZGdlRWxhc3RpY2l0eSxJPWwuaWRUb0luZGV4W2suc291cmNlSWRdLE09bC5pZFRvSW5kZXhbay50YXJnZXRJZF0sUD1sLmluZGV4VG9HcmFwaFtJXSxCPWwuaW5kZXhUb0dyYXBoW01dO2lmKFAhPUIpe2Zvcih2YXIgRj1TWmUoay5zb3VyY2VJZCxrLnRhcmdldElkLGwpLHo9bC5ncmFwaFNldFtGXSwkPTAsdj1sLmxheW91dE5vZGVzW0ldO3ouaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLCQrKztmb3Iodj1sLmxheW91dE5vZGVzW01dO3ouaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLCQrKztMKj0kKm4ubmVzdGluZ0ZhY3Rvcn1rLmlkZWFsTGVuZ3RoPUwsay5lbGFzdGljaXR5PUEsbC5sYXlvdXRFZGdlcy5wdXNoKGspfXJldHVybiBsfSwiY3JlYXRlTGF5b3V0SW5mbyIpLFNaZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1DWmUoZSxyLDAsbik7cmV0dXJuIDI+aS5jb3VudD8wOmkuZ3JhcGh9LCJmaW5kTENBIiksQ1plPW8oZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1pLmdyYXBoU2V0W25dO2lmKC0xPGEuaW5kZXhPZihlKSYmLTE8YS5pbmRleE9mKHIpKXJldHVybntjb3VudDoyLGdyYXBoOm59O2Zvcih2YXIgcz0wLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxoPWkuaWRUb0luZGV4W3VdLGY9aS5sYXlvdXROb2Rlc1toXS5jaGlsZHJlbjtpZihmLmxlbmd0aCE9PTApe3ZhciBkPWkuaW5kZXhUb0dyYXBoW2kuaWRUb0luZGV4W2ZbMF1dXSxwPXQoZSxyLGQsaSk7aWYocC5jb3VudCE9PTApaWYocC5jb3VudD09PTEpe2lmKHMrKyxzPT09MilicmVha31lbHNlIHJldHVybiBwfX1yZXR1cm57Y291bnQ6cyxncmFwaDpufX0sImZpbmRMQ0FfYXV4IiksX1plPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5jbGllbnRXaWR0aCxpPWUuY2xpZW50SGVpZ2h0LGE9MDthPGUubm9kZVNpemU7YSsrKXt2YXIgcz1lLmxheW91dE5vZGVzW2FdO3MuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXMuaXNMb2NrZWQmJihzLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKm4scy5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSppKX19LCJyYW5kb21pemVQb3NpdGlvbnMiKSxwMWU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5ib3VuZGluZ0JveCxhPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIHIuYm91bmRpbmdCb3gmJihuLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtzLmRhdGEoImlkIildXTthLngxPU1hdGgubWluKGEueDEsbC5wb3NpdGlvblgpLGEueDI9TWF0aC5tYXgoYS54MixsLnBvc2l0aW9uWCksYS55MT1NYXRoLm1pbihhLnkxLGwucG9zaXRpb25ZKSxhLnkyPU1hdGgubWF4KGEueTIsbC5wb3NpdGlvblkpfSksYS53PWEueDItYS54MSxhLmg9YS55Mi1hLnkxKSxmdW5jdGlvbihzLGwpe3ZhciB1PWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbcy5kYXRhKCJpZCIpXV07aWYoci5ib3VuZGluZ0JveCl7dmFyIGg9KHUucG9zaXRpb25YLWEueDEpL2EudyxmPSh1LnBvc2l0aW9uWS1hLnkxKS9hLmg7cmV0dXJue3g6aS54MStoKmkudyx5OmkueTErZippLmh9fWVsc2UgcmV0dXJue3g6dS5wb3NpdGlvblgseTp1LnBvc2l0aW9uWX19fSwiZ2V0U2NhbGVJbkJvdW5kc0ZuIiksRFplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW4ubGF5b3V0LGE9bi5lbGVzLm5vZGVzKCkscz1wMWUoZSxuLGEpO2EucG9zaXRpb25zKHMpLGUucmVhZHkhPT0hMCYmKGUucmVhZHk9ITAsaS5vbmUoImxheW91dHJlYWR5IixuLnJlYWR5KSxpLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sInJlZnJlc2hQb3NpdGlvbnMiKSxMWmU9byhmdW5jdGlvbihlLHIsbil7UlplKGUsciksSVplKGUpLE9aZShlLHIpLFBaZShlKSxCWmUoZSl9LCJzdGVwIiksUlplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZ3JhcGhTZXQubGVuZ3RoO24rKylmb3IodmFyIGk9ZS5ncmFwaFNldFtuXSxhPWkubGVuZ3RoLHM9MDtzPGE7cysrKWZvcih2YXIgbD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbc11dXSx1PXMrMTt1PGE7dSsrKXt2YXIgaD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbdV1dXTtOWmUobCxoLGUscil9fSwiY2FsY3VsYXRlTm9kZUZvcmNlcyIpLE1tZT1vKGZ1bmN0aW9uKGUpe3JldHVybi1lKzIqZSpNYXRoLnJhbmRvbSgpfSwicmFuZG9tRGlzdGFuY2UiKSxOWmU9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1lLmNtcHRJZCxzPXIuY21wdElkO2lmKCEoYSE9PXMmJiFuLmlzQ29tcG91bmQpKXt2YXIgbD1yLnBvc2l0aW9uWC1lLnBvc2l0aW9uWCx1PXIucG9zaXRpb25ZLWUucG9zaXRpb25ZLGg9MTtsPT09MCYmdT09PTAmJihsPU1tZShoKSx1PU1tZShoKSk7dmFyIGY9TVplKGUscixsLHUpO2lmKGY+MCl2YXIgZD1pLm5vZGVPdmVybGFwKmYscD1NYXRoLnNxcnQobCpsK3UqdSksbT1kKmwvcCxnPWQqdS9wO2Vsc2UgdmFyIHk9cTYoZSxsLHUpLHY9cTYociwtMSpsLC0xKnUpLHg9di54LXkueCxiPXYueS15LnksVD14KngrYipiLHA9TWF0aC5zcXJ0KFQpLGQ9KGUubm9kZVJlcHVsc2lvbityLm5vZGVSZXB1bHNpb24pL1QsbT1kKngvcCxnPWQqYi9wO2UuaXNMb2NrZWR8fChlLm9mZnNldFgtPW0sZS5vZmZzZXRZLT1nKSxyLmlzTG9ja2VkfHwoci5vZmZzZXRYKz1tLHIub2Zmc2V0WSs9Zyl9fSwibm9kZVJlcHVsc2lvbiIpLE1aZT1vKGZ1bmN0aW9uKGUscixuLGkpe2lmKG4+MCl2YXIgYT1lLm1heFgtci5taW5YO2Vsc2UgdmFyIGE9ci5tYXhYLWUubWluWDtpZihpPjApdmFyIHM9ZS5tYXhZLXIubWluWTtlbHNlIHZhciBzPXIubWF4WS1lLm1pblk7cmV0dXJuIGE+PTAmJnM+PTA/TWF0aC5zcXJ0KGEqYStzKnMpOjB9LCJub2Rlc092ZXJsYXAiKSxxNj1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLnBvc2l0aW9uWCxhPWUucG9zaXRpb25ZLHM9ZS5oZWlnaHR8fDEsbD1lLndpZHRofHwxLHU9bi9yLGg9cy9sLGY9e307cmV0dXJuIHI9PT0wJiYwPG58fHI9PT0wJiYwPm4/KGYueD1pLGYueT1hK3MvMixmKTowPHImJi0xKmg8PXUmJnU8PWg/KGYueD1pK2wvMixmLnk9YStsKm4vMi9yLGYpOjA+ciYmLTEqaDw9dSYmdTw9aD8oZi54PWktbC8yLGYueT1hLWwqbi8yL3IsZik6MDxuJiYodTw9LTEqaHx8dT49aCk/KGYueD1pK3Mqci8yL24sZi55PWErcy8yLGYpOigwPm4mJih1PD0tMSpofHx1Pj1oKSYmKGYueD1pLXMqci8yL24sZi55PWEtcy8yKSxmKX0sImZpbmRDbGlwcGluZ1BvaW50IiksSVplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZWRnZVNpemU7bisrKXt2YXIgaT1lLmxheW91dEVkZ2VzW25dLGE9ZS5pZFRvSW5kZXhbaS5zb3VyY2VJZF0scz1lLmxheW91dE5vZGVzW2FdLGw9ZS5pZFRvSW5kZXhbaS50YXJnZXRJZF0sdT1lLmxheW91dE5vZGVzW2xdLGg9dS5wb3NpdGlvblgtcy5wb3NpdGlvblgsZj11LnBvc2l0aW9uWS1zLnBvc2l0aW9uWTtpZighKGg9PT0wJiZmPT09MCkpe3ZhciBkPXE2KHMsaCxmKSxwPXE2KHUsLTEqaCwtMSpmKSxtPXAueC1kLngsZz1wLnktZC55LHk9TWF0aC5zcXJ0KG0qbStnKmcpLHY9TWF0aC5wb3coaS5pZGVhbExlbmd0aC15LDIpL2kuZWxhc3RpY2l0eTtpZih5IT09MCl2YXIgeD12Km0veSxiPXYqZy95O2Vsc2UgdmFyIHg9MCxiPTA7cy5pc0xvY2tlZHx8KHMub2Zmc2V0WCs9eCxzLm9mZnNldFkrPWIpLHUuaXNMb2NrZWR8fCh1Lm9mZnNldFgtPXgsdS5vZmZzZXRZLT1iKX19fSwiY2FsY3VsYXRlRWRnZUZvcmNlcyIpLE9aZT1vKGZ1bmN0aW9uKGUscil7aWYoci5ncmF2aXR5IT09MClmb3IodmFyIG49MSxpPTA7aTxlLmdyYXBoU2V0Lmxlbmd0aDtpKyspe3ZhciBhPWUuZ3JhcGhTZXRbaV0scz1hLmxlbmd0aDtpZihpPT09MCl2YXIgbD1lLmNsaWVudEhlaWdodC8yLHU9ZS5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIGg9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthWzBdXV0sZj1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2gucGFyZW50SWRdXSxsPWYucG9zaXRpb25YLHU9Zi5wb3NpdGlvblk7Zm9yKHZhciBkPTA7ZDxzO2QrKyl7dmFyIHA9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthW2RdXV07aWYoIXAuaXNMb2NrZWQpe3ZhciBtPWwtcC5wb3NpdGlvblgsZz11LXAucG9zaXRpb25ZLHk9TWF0aC5zcXJ0KG0qbStnKmcpO2lmKHk+bil7dmFyIHY9ci5ncmF2aXR5Km0veSx4PXIuZ3Jhdml0eSpnL3k7cC5vZmZzZXRYKz12LHAub2Zmc2V0WSs9eH19fX19LCJjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzIiksUFplPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1bXSxpPTAsYT0tMTtmb3Iobi5wdXNoLmFwcGx5KG4sZS5ncmFwaFNldFswXSksYSs9ZS5ncmFwaFNldFswXS5sZW5ndGg7aTw9YTspe3ZhciBzPW5baSsrXSxsPWUuaWRUb0luZGV4W3NdLHU9ZS5sYXlvdXROb2Rlc1tsXSxoPXUuY2hpbGRyZW47aWYoMDxoLmxlbmd0aCYmIXUuaXNMb2NrZWQpe2Zvcih2YXIgZj11Lm9mZnNldFgsZD11Lm9mZnNldFkscD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2hbcF1dXTttLm9mZnNldFgrPWYsbS5vZmZzZXRZKz1kLG5bKythXT1oW3BdfXUub2Zmc2V0WD0wLHUub2Zmc2V0WT0wfX19LCJwcm9wYWdhdGVGb3JjZXMiKSxCWmU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmKGkubWF4WD12b2lkIDAsaS5taW5YPXZvaWQgMCxpLm1heFk9dm9pZCAwLGkubWluWT12b2lkIDApfWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07aWYoISgwPGkuY2hpbGRyZW4ubGVuZ3RofHxpLmlzTG9ja2VkKSl7dmFyIGE9RlplKGkub2Zmc2V0WCxpLm9mZnNldFksZS50ZW1wZXJhdHVyZSk7aS5wb3NpdGlvblgrPWEueCxpLnBvc2l0aW9uWSs9YS55LGkub2Zmc2V0WD0wLGkub2Zmc2V0WT0wLGkubWluWD1pLnBvc2l0aW9uWC1pLndpZHRoLGkubWF4WD1pLnBvc2l0aW9uWCtpLndpZHRoLGkubWluWT1pLnBvc2l0aW9uWS1pLmhlaWdodCxpLm1heFk9aS5wb3NpdGlvblkraS5oZWlnaHQsJFplKGksZSl9fWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmIWkuaXNMb2NrZWQmJihpLnBvc2l0aW9uWD0oaS5tYXhYK2kubWluWCkvMixpLnBvc2l0aW9uWT0oaS5tYXhZK2kubWluWSkvMixpLndpZHRoPWkubWF4WC1pLm1pblgsaS5oZWlnaHQ9aS5tYXhZLWkubWluWSl9fSwidXBkYXRlUG9zaXRpb25zIiksRlplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU1hdGguc3FydChlKmUrcipyKTtpZihpPm4pdmFyIGE9e3g6biplL2kseTpuKnIvaX07ZWxzZSB2YXIgYT17eDplLHk6cn07cmV0dXJuIGF9LCJsaW1pdEZvcmNlIiksJFplPW8oZnVuY3Rpb24gdChlLHIpe3ZhciBuPWUucGFyZW50SWQ7aWYobiE9bnVsbCl7dmFyIGk9ci5sYXlvdXROb2Rlc1tyLmlkVG9JbmRleFtuXV0sYT0hMTtpZigoaS5tYXhYPT1udWxsfHxlLm1heFgraS5wYWRSaWdodD5pLm1heFgpJiYoaS5tYXhYPWUubWF4WCtpLnBhZFJpZ2h0LGE9ITApLChpLm1pblg9PW51bGx8fGUubWluWC1pLnBhZExlZnQ8aS5taW5YKSYmKGkubWluWD1lLm1pblgtaS5wYWRMZWZ0LGE9ITApLChpLm1heFk9PW51bGx8fGUubWF4WStpLnBhZEJvdHRvbT5pLm1heFkpJiYoaS5tYXhZPWUubWF4WStpLnBhZEJvdHRvbSxhPSEwKSwoaS5taW5ZPT1udWxsfHxlLm1pblktaS5wYWRUb3A8aS5taW5ZKSYmKGkubWluWT1lLm1pblktaS5wYWRUb3AsYT0hMCksYSlyZXR1cm4gdChpLHIpfX0sInVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyIpLEltZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUubGF5b3V0Tm9kZXMsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sbD1zLmNtcHRJZCx1PWlbbF09aVtsXXx8W107dS5wdXNoKHMpfWZvcih2YXIgaD0wLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmLngxPTEvMCxmLngyPS0xLzAsZi55MT0xLzAsZi55Mj0tMS8wO2Zvcih2YXIgZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdO2YueDE9TWF0aC5taW4oZi54MSxwLnBvc2l0aW9uWC1wLndpZHRoLzIpLGYueDI9TWF0aC5tYXgoZi54MixwLnBvc2l0aW9uWCtwLndpZHRoLzIpLGYueTE9TWF0aC5taW4oZi55MSxwLnBvc2l0aW9uWS1wLmhlaWdodC8yKSxmLnkyPU1hdGgubWF4KGYueTIscC5wb3NpdGlvblkrcC5oZWlnaHQvMil9Zi53PWYueDItZi54MSxmLmg9Zi55Mi1mLnkxLGgrPWYudypmLmh9fWkuc29ydChmdW5jdGlvbihiLFQpe3JldHVybiBULncqVC5oLWIudypiLmh9KTtmb3IodmFyIG09MCxnPTAseT0wLHY9MCx4PU1hdGguc3FydChoKSplLmNsaWVudFdpZHRoL2UuY2xpZW50SGVpZ2h0LGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXTtwLmlzTG9ja2VkfHwocC5wb3NpdGlvblgrPW0tZi54MSxwLnBvc2l0aW9uWSs9Zy1mLnkxKX1tKz1mLncrci5jb21wb25lbnRTcGFjaW5nLHkrPWYudytyLmNvbXBvbmVudFNwYWNpbmcsdj1NYXRoLm1heCh2LGYuaCkseT54JiYoZys9dityLmNvbXBvbmVudFNwYWNpbmcsbT0wLHk9MCx2PTApfX19LCJzZXBhcmF0ZUNvbXBvbmVudHMiKSx6WmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246byhmdW5jdGlvbihlKXt9LCJwb3NpdGlvbiIpLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhtMWUsIkdyaWRMYXlvdXQiKTttMWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9bi5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2Uuc29ydCYmKGk9aS5zb3J0KGUuc29ydCkpO3ZhciBhPVlzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pO2lmKGEuaD09PTB8fGEudz09PTApbi5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsZnVuY3Rpb24oSyl7cmV0dXJue3g6YS54MSx5OmEueTF9fSk7ZWxzZXt2YXIgcz1pLnNpemUoKSxsPU1hdGguc3FydChzKmEuaC9hLncpLHU9TWF0aC5yb3VuZChsKSxoPU1hdGgucm91bmQoYS53L2EuaCpsKSxmPW8oZnVuY3Rpb24oZWUpe2lmKGVlPT1udWxsKXJldHVybiBNYXRoLm1pbih1LGgpO3ZhciBZPU1hdGgubWluKHUsaCk7WT09dT91PWVlOmg9ZWV9LCJzbWFsbCIpLGQ9byhmdW5jdGlvbihlZSl7aWYoZWU9PW51bGwpcmV0dXJuIE1hdGgubWF4KHUsaCk7dmFyIFk9TWF0aC5tYXgodSxoKTtZPT11P3U9ZWU6aD1lZX0sImxhcmdlIikscD1lLnJvd3MsbT1lLmNvbHMhPW51bGw/ZS5jb2xzOmUuY29sdW1ucztpZihwIT1udWxsJiZtIT1udWxsKXU9cCxoPW07ZWxzZSBpZihwIT1udWxsJiZtPT1udWxsKXU9cCxoPU1hdGguY2VpbChzL3UpO2Vsc2UgaWYocD09bnVsbCYmbSE9bnVsbCloPW0sdT1NYXRoLmNlaWwocy9oKTtlbHNlIGlmKGgqdT5zKXt2YXIgZz1mKCkseT1kKCk7KGctMSkqeT49cz9mKGctMSk6KHktMSkqZz49cyYmZCh5LTEpfWVsc2UgZm9yKDtoKnU8czspe3ZhciB2PWYoKSx4PWQoKTsoeCsxKSp2Pj1zP2QoeCsxKTpmKHYrMSl9dmFyIGI9YS53L2gsVD1hLmgvdTtpZihlLmNvbmRlbnNlJiYoYj0wLFQ9MCksZS5hdm9pZE92ZXJsYXApZm9yKHZhciBTPTA7UzxpLmxlbmd0aDtTKyspe3ZhciB3PWlbU10sRT13Ll9wcml2YXRlLnBvc2l0aW9uOyhFLng9PW51bGx8fEUueT09bnVsbCkmJihFLng9MCxFLnk9MCk7dmFyIF89dy5sYXlvdXREaW1lbnNpb25zKGUpLEM9ZS5hdm9pZE92ZXJsYXBQYWRkaW5nLEQ9Xy53K0MsTz1fLmgrQztiPU1hdGgubWF4KGIsRCksVD1NYXRoLm1heChULE8pfWZvcih2YXIgUj17fSxrPW8oZnVuY3Rpb24oZWUsWSl7cmV0dXJuISFSWyJjLSIrZWUrIi0iK1ldfSwidXNlZCIpLEw9byhmdW5jdGlvbihlZSxZKXtSWyJjLSIrZWUrIi0iK1ldPSEwfSwidXNlIiksQT0wLEk9MCxNPW8oZnVuY3Rpb24oKXtJKyssST49aCYmKEk9MCxBKyspfSwibW92ZVRvTmV4dENlbGwiKSxQPXt9LEI9MDtCPGkubGVuZ3RoO0IrKyl7dmFyIEY9aVtCXSx6PWUucG9zaXRpb24oRik7aWYoeiYmKHoucm93IT09dm9pZCAwfHx6LmNvbCE9PXZvaWQgMCkpe3ZhciAkPXtyb3c6ei5yb3csY29sOnouY29sfTtpZigkLmNvbD09PXZvaWQgMClmb3IoJC5jb2w9MDtrKCQucm93LCQuY29sKTspJC5jb2wrKztlbHNlIGlmKCQucm93PT09dm9pZCAwKWZvcigkLnJvdz0wO2soJC5yb3csJC5jb2wpOykkLnJvdysrO1BbRi5pZCgpXT0kLEwoJC5yb3csJC5jb2wpfX12YXIgVT1vKGZ1bmN0aW9uKGVlLFkpe3ZhciBjZSxaO2lmKGVlLmxvY2tlZCgpfHxlZS5pc1BhcmVudCgpKXJldHVybiExO3ZhciB1ZT1QW2VlLmlkKCldO2lmKHVlKWNlPXVlLmNvbCpiK2IvMithLngxLFo9dWUucm93KlQrVC8yK2EueTE7ZWxzZXtmb3IoO2soQSxJKTspTSgpO2NlPUkqYitiLzIrYS54MSxaPUEqVCtULzIrYS55MSxMKEEsSSksTSgpfXJldHVybnt4OmNlLHk6Wn19LCJnZXRQb3MiKTtpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsVSl9cmV0dXJuIHRoaXN9O0daZT17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpfTtvKGVGLCJOdWxsTGF5b3V0Iik7ZUYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuZWxlcyxyPXRoaXM7cmV0dXJuIHQuY3ksci5lbWl0KCJsYXlvdXRzdGFydCIpLGUubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSxyLm9uZSgibGF5b3V0cmVhZHkiLHQucmVhZHkpLHIuZW1pdCgibGF5b3V0cmVhZHkiKSxyLm9uZSgibGF5b3V0c3RvcCIsdC5zdG9wKSxyLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfTtlRi5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtWWmU9e3Bvc2l0aW9uczp2b2lkIDAsem9vbTp2b2lkIDAscGFuOnZvaWQgMCxmaXQ6ITAscGFkZGluZzozMCxzcGFjaW5nRmFjdG9yOnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28oZzFlLCJQcmVzZXRMYXlvdXQiKTtnMWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuZWxlcyxyPWUubm9kZXMoKSxuPWxpKHQucG9zaXRpb25zKTtmdW5jdGlvbiBpKGEpe2lmKHQucG9zaXRpb25zPT1udWxsKXJldHVybiBxWWUoYS5wb3NpdGlvbigpKTtpZihuKXJldHVybiB0LnBvc2l0aW9ucyhhKTt2YXIgcz10LnBvc2l0aW9uc1thLl9wcml2YXRlLmRhdGEuaWRdO3JldHVybiBzPz9udWxsfXJldHVybiBvKGksImdldFBvc2l0aW9uIiksci5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGZ1bmN0aW9uKGEscyl7dmFyIGw9aShhKTtyZXR1cm4gYS5sb2NrZWQoKXx8bD09bnVsbD8hMTpsfSksdGhpc307VVplPXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKHkxZSwiUmFuZG9tTGF5b3V0Iik7eTFlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmN5LHI9dC5lbGVzLG49WXModC5ib3VuZGluZ0JveD90LmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzplLndpZHRoKCksaDplLmhlaWdodCgpfSksaT1vKGZ1bmN0aW9uKHMsbCl7cmV0dXJue3g6bi54MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqbi53KSx5Om4ueTErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKm4uaCl9fSwiZ2V0UG9zIik7cmV0dXJuIHIubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGkpLHRoaXN9O0haZT1be25hbWU6ImJyZWFkdGhmaXJzdCIsaW1wbDpoMWV9LHtuYW1lOiJjaXJjbGUiLGltcGw6ZjFlfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDpkMWV9LHtuYW1lOiJjb3NlIixpbXBsOnVDfSx7bmFtZToiZ3JpZCIsaW1wbDptMWV9LHtuYW1lOiJudWxsIixpbXBsOmVGfSx7bmFtZToicHJlc2V0IixpbXBsOmcxZX0se25hbWU6InJhbmRvbSIsaW1wbDp5MWV9XTtvKHYxZSwiTnVsbFJlbmRlcmVyIik7T21lPW8oZnVuY3Rpb24oKXt9LCJub29wIiksUG1lPW8oZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9LCJ0aHJvd0ltZ0VyciIpO3YxZS5wcm90b3R5cGU9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpPbWUsbm90aWZ5Om8oZnVuY3Rpb24oKXt0aGlzLm5vdGlmaWNhdGlvbnMrK30sIm5vdGlmeSIpLGluaXQ6T21lLGlzSGVhZGxlc3M6byhmdW5jdGlvbigpe3JldHVybiEwfSwiaXNIZWFkbGVzcyIpLHBuZzpQbWUsanBnOlBtZX07dEY9e307dEYuYXJyb3dTaGFwZVdpZHRoPS4zO3RGLnJlZ2lzdGVyQXJyb3dTaGFwZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmFycm93U2hhcGVzPXt9LGU9dGhpcyxyPW8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9bS54LWQvMi15LHg9bS54K2QvMit5LGI9bS55LWQvMi15LFQ9bS55K2QvMit5LFM9djw9aCYmaDw9eCYmYjw9ZiYmZjw9VDtyZXR1cm4gU30sImJiQ29sbGlkZSIpLG49byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWgqTWF0aC5jb3MocCktZipNYXRoLnNpbihwKSx5PWgqTWF0aC5zaW4ocCkrZipNYXRoLmNvcyhwKSx2PWcqZCx4PXkqZCxiPXYrbS54LFQ9eCttLnk7cmV0dXJue3g6Yix5OlR9fSwidHJhbnNmb3JtIiksaT1vKGZ1bmN0aW9uKGgsZixkLHApe2Zvcih2YXIgbT1bXSxnPTA7ZzxoLmxlbmd0aDtnKz0yKXt2YXIgeT1oW2ddLHY9aFtnKzFdO20ucHVzaChuKHksdixmLGQscCkpfXJldHVybiBtfSwidHJhbnNmb3JtUG9pbnRzIiksYT1vKGZ1bmN0aW9uKGgpe2Zvcih2YXIgZj1bXSxkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBwPWhbZF07Zi5wdXNoKHAueCxwLnkpfXJldHVybiBmfSwicG9pbnRzVG9BcnIiKSxzPW8oZnVuY3Rpb24oaCl7cmV0dXJuIGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqaC5wc3R5bGUoImFycm93LXNjYWxlIikucGZWYWx1ZSoyfSwic3RhbmRhcmRHYXAiKSxsPW8oZnVuY3Rpb24oaCxmKXtadChmKSYmKGY9dFtmXSksdFtoXT1pcih7bmFtZTpoLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpvKGZ1bmN0aW9uKHAsbSxnLHksdix4KXt2YXIgYj1hKGkodGhpcy5wb2ludHMsZysyKngseSx2KSksVD1xcyhwLG0sYik7cmV0dXJuIFR9LCJjb2xsaWRlIikscm91Z2hDb2xsaWRlOnIsZHJhdzpvKGZ1bmN0aW9uKHAsbSxnLHkpe3ZhciB2PWkodGhpcy5wb2ludHMsbSxnLHkpO2UuYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShwLHYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihwKXtyZXR1cm4gMH0sInNwYWNpbmciKSxnYXA6c30sZil9LCJkZWZpbmVBcnJvd1NoYXBlIik7bCgibm9uZSIse2NvbGxpZGU6ejYscm91Z2hDb2xsaWRlOno2LGRyYXc6ekIsc3BhY2luZzpxMGUsZ2FwOnEwZX0pLGwoInRyaWFuZ2xlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uM119KSxsKCJhcnJvdyIsInRyaWFuZ2xlIiksbCgidHJpYW5nbGUtYmFja2N1cnZlIix7cG9pbnRzOnQudHJpYW5nbGUucG9pbnRzLGNvbnRyb2xQb2ludDpbMCwtLjE1XSxyb3VnaENvbGxpZGU6cixkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PXRoaXMuY29udHJvbFBvaW50LHY9bih5WzBdLHlbMV0sZixkLHApO2UuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShoLGcsdil9LCJkcmF3IiksZ2FwOm8oZnVuY3Rpb24oaCl7cmV0dXJuIHMoaCkqLjh9LCJnYXAiKX0pLGwoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PWEoaSh0aGlzLnBvaW50cyxkKzIqeSxwLG0pKSx4PWEoaSh0aGlzLnBvaW50c1RlZSxkKzIqeSxwLG0pKSxiPXFzKGgsZix2KXx8cXMoaCxmLHgpO3JldHVybiBifSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHMsZixkLHApLHk9aSh0aGlzLnBvaW50c1RlZSxmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyx5KX0sImRyYXciKX0pLGwoImNpcmNsZS10cmlhbmdsZSIse3JhZGl1czouMTUscG9pbnRzVHI6WzAsLS4xNSwuMTUsLS40NSwtLjE1LC0uNDUsMCwtLjE1XSxjb2xsaWRlOm8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9bSx4PU1hdGgucG93KHYueC1oLDIpK01hdGgucG93KHYueS1mLDIpPD1NYXRoLnBvdygoZCsyKnkpKnRoaXMucmFkaXVzLDIpLGI9YShpKHRoaXMucG9pbnRzLGQrMip5LHAsbSkpO3JldHVybiBxcyhoLGYsYil8fHh9LCJjb2xsaWRlIiksZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7dmFyIGc9aSh0aGlzLnBvaW50c1RyLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHAueCxwLnksdGhpcy5yYWRpdXMqZil9LCJkcmF3Iiksc3BhY2luZzpvKGZ1bmN0aW9uKGgpe3JldHVybiBlLmdldEFycm93V2lkdGgoaC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxoLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9LCJzcGFjaW5nIil9KSxsKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpvKGZ1bmN0aW9uKGgsZil7dmFyIGQ9dGhpcy5iYXNlQ3Jvc3NMaW5lUHRzLnNsaWNlKCkscD1mL2gsbT0zLGc9NTtyZXR1cm4gZFttXT1kW21dLXAsZFtnXT1kW2ddLXAsZH0sImNyb3NzTGluZVB0cyIpLGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1hKGkodGhpcy5wb2ludHMsZCsyKnkscCxtKSkseD1hKGkodGhpcy5jcm9zc0xpbmVQdHMoZCxnKSxkKzIqeSxwLG0pKSxiPXFzKGgsZix2KXx8cXMoaCxmLHgpO3JldHVybiBifSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHMsZixkLHApLHk9aSh0aGlzLmNyb3NzTGluZVB0cyhmLG0pLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHkpfSwiZHJhdyIpfSksbCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBzKGgpKi41MjV9LCJnYXAiKX0pLGwoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0seD1NYXRoLnBvdyh2LngtaCwyKStNYXRoLnBvdyh2LnktZiwyKTw9TWF0aC5wb3coKGQrMip5KSp0aGlzLnJhZGl1cywyKTtyZXR1cm4geH0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxwLngscC55LHRoaXMucmFkaXVzKmYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gZS5nZXRBcnJvd1dpZHRoKGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMucmFkaXVzfSwic3BhY2luZyIpfSksbCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpvKGZ1bmN0aW9uKGgpe3JldHVybiAxfSwic3BhY2luZyIpLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiAxfSwiZ2FwIil9KSxsKCJzcXVhcmUiLHtwb2ludHM6Wy0uMTUsMCwuMTUsMCwuMTUsLS4zLC0uMTUsLS4zXX0pLGwoImRpYW1vbmQiLHtwb2ludHM6Wy0uMTUsLS4xNSwwLC0uMywuMTUsLS4xNSwwLDBdLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfSwiZ2FwIil9KSxsKCJjaGV2cm9uIix7cG9pbnRzOlswLDAsLS4xNSwtLjE1LC0uMSwtLjIsMCwtLjEsLjEsLS4yLC4xNSwtLjE1XSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gLjk1KmgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9LCJnYXAiKX0pfTtyMD17fTtyMC5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jeSxuPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGk9blswXSxhPW5bMV0scz1uWzRdLGw9ci5wYW4oKSx1PXIuem9vbSgpLGg9KCh0LWkpL3MtbC54KS91LGY9KChlLWEpL3MtbC55KS91O3JldHVybltoLGZdfTtyMC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgdD10aGlzLmNvbnRhaW5lcixlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLmN5LndpbmRvdygpLmdldENvbXB1dGVkU3R5bGUodCksbj1vKGZ1bmN0aW9uKHgpe3JldHVybiBwYXJzZUZsb2F0KHIuZ2V0UHJvcGVydHlWYWx1ZSh4KSl9LCJzdHlsZVZhbHVlIiksaT17bGVmdDpuKCJwYWRkaW5nLWxlZnQiKSxyaWdodDpuKCJwYWRkaW5nLXJpZ2h0IiksdG9wOm4oInBhZGRpbmctdG9wIiksYm90dG9tOm4oInBhZGRpbmctYm90dG9tIil9LGE9e2xlZnQ6bigiYm9yZGVyLWxlZnQtd2lkdGgiKSxyaWdodDpuKCJib3JkZXItcmlnaHQtd2lkdGgiKSx0b3A6bigiYm9yZGVyLXRvcC13aWR0aCIpLGJvdHRvbTpuKCJib3JkZXItYm90dG9tLXdpZHRoIil9LHM9dC5jbGllbnRXaWR0aCxsPXQuY2xpZW50SGVpZ2h0LHU9aS5sZWZ0K2kucmlnaHQsaD1pLnRvcCtpLmJvdHRvbSxmPWEubGVmdCthLnJpZ2h0LGQ9ZS53aWR0aC8ocytmKSxwPXMtdSxtPWwtaCxnPWUubGVmdCtpLmxlZnQrYS5sZWZ0LHk9ZS50b3AraS50b3ArYS50b3A7cmV0dXJuIHRoaXMuY29udGFpbmVyQkI9W2cseSxwLG0sZF19O3IwLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH07cjAuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHModCxlLHIsbilbMF19O3IwLmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPXRoaXMscz1hLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksbD1bXSx1PWEuY3kuem9vbSgpLGg9YS5jeS5oYXNDb21wb3VuZE5vZGVzKCksZj0obj8yNDo4KS91LGQ9KG4/ODoyKS91LHA9KG4/ODoyKS91LG09MS8wLGcseTtyJiYocz1zLmludGVyYWN0aXZlKTtmdW5jdGlvbiB2KF8sQyl7aWYoXy5pc05vZGUoKSl7aWYoeSlyZXR1cm47eT1fLGwucHVzaChfKX1pZihfLmlzRWRnZSgpJiYoQz09bnVsbHx8QzxtKSlpZihnKXtpZihnLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09Xy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZSYmZy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PV8ucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgRD0wO0Q8bC5sZW5ndGg7RCsrKWlmKGxbRF0uaXNFZGdlKCkpe2xbRF09XyxnPV8sbT1DPz9tO2JyZWFrfX19ZWxzZSBsLnB1c2goXyksZz1fLG09Qz8/bX1vKHYsImFkZEVsZSIpO2Z1bmN0aW9uIHgoXyl7dmFyIEM9Xy5vdXRlcldpZHRoKCkrMipkLEQ9Xy5vdXRlckhlaWdodCgpKzIqZCxPPUMvMixSPUQvMixrPV8ucG9zaXRpb24oKSxMPV8ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOl8ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxBPV8uX3ByaXZhdGUucnNjcmF0Y2g7aWYoay54LU88PXQmJnQ8PWsueCtPJiZrLnktUjw9ZSYmZTw9ay55K1Ipe3ZhciBJPWEubm9kZVNoYXBlc1tpLmdldE5vZGVTaGFwZShfKV07aWYoSS5jaGVja1BvaW50KHQsZSwwLEMsRCxrLngsay55LEwsQSkpcmV0dXJuIHYoXywwKSwhMH19byh4LCJjaGVja05vZGUiKTtmdW5jdGlvbiBiKF8pe3ZhciBDPV8uX3ByaXZhdGUsRD1DLnJzY3JhdGNoLE89Xy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxSPV8ucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGs9Ty8yK2YsTD1rKmssQT1rKjIsQj1DLnNvdXJjZSxGPUMudGFyZ2V0LEk7aWYoRC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEQuZWRnZVR5cGU9PT0ic3RyYWlnaHQifHxELmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBNPUQuYWxscHRzLFA9MDtQKzM8TS5sZW5ndGg7UCs9MilpZihhWGUodCxlLE1bUF0sTVtQKzFdLE1bUCsyXSxNW1ArM10sQSkmJkw+KEk9dVhlKHQsZSxNW1BdLE1bUCsxXSxNW1ArMl0sTVtQKzNdKSkpcmV0dXJuIHYoXyxJKSwhMH1lbHNlIGlmKEQuZWRnZVR5cGU9PT0iYmV6aWVyInx8RC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEQuZWRnZVR5cGU9PT0ic2VsZiJ8fEQuZWRnZVR5cGU9PT0iY29tcG91bmQiKXtmb3IodmFyIE09RC5hbGxwdHMsUD0wO1ArNTxELmFsbHB0cy5sZW5ndGg7UCs9NClpZihzWGUodCxlLE1bUF0sTVtQKzFdLE1bUCsyXSxNW1ArM10sTVtQKzRdLE1bUCs1XSxBKSYmTD4oST1jWGUodCxlLE1bUF0sTVtQKzFdLE1bUCsyXSxNW1ArM10sTVtQKzRdLE1bUCs1XSkpKXJldHVybiB2KF8sSSksITB9Zm9yKHZhciBCPUJ8fEMuc291cmNlLEY9Rnx8Qy50YXJnZXQsej1pLmdldEFycm93V2lkdGgoTyxSKSwkPVt7bmFtZToic291cmNlIix4OkQuYXJyb3dTdGFydFgseTpELmFycm93U3RhcnRZLGFuZ2xlOkQuc3JjQXJyb3dBbmdsZX0se25hbWU6InRhcmdldCIseDpELmFycm93RW5kWCx5OkQuYXJyb3dFbmRZLGFuZ2xlOkQudGd0QXJyb3dBbmdsZX0se25hbWU6Im1pZC1zb3VyY2UiLHg6RC5taWRYLHk6RC5taWRZLGFuZ2xlOkQubWlkc3JjQXJyb3dBbmdsZX0se25hbWU6Im1pZC10YXJnZXQiLHg6RC5taWRYLHk6RC5taWRZLGFuZ2xlOkQubWlkdGd0QXJyb3dBbmdsZX1dLFA9MDtQPCQubGVuZ3RoO1ArKyl7dmFyIFU9JFtQXSxLPWEuYXJyb3dTaGFwZXNbXy5wc3R5bGUoVS5uYW1lKyItYXJyb3ctc2hhcGUiKS52YWx1ZV0sZWU9Xy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihLLnJvdWdoQ29sbGlkZSh0LGUseixVLmFuZ2xlLHt4OlUueCx5OlUueX0sZWUsZikmJksuY29sbGlkZSh0LGUseixVLmFuZ2xlLHt4OlUueCx5OlUueX0sZWUsZikpcmV0dXJuIHYoXyksITB9aCYmbC5sZW5ndGg+MCYmKHgoQikseChGKSl9byhiLCJjaGVja0VkZ2UiKTtmdW5jdGlvbiBUKF8sQyxEKXtyZXR1cm4gV2woXyxDLEQpfW8oVCwicHJlcHJvcCIpO2Z1bmN0aW9uIFMoXyxDKXt2YXIgRD1fLl9wcml2YXRlLE89cCxSO0M/Uj1DKyItIjpSPSIiLF8uYm91bmRpbmdCb3goKTt2YXIgaz1ELmxhYmVsQm91bmRzW0N8fCJtYWluIl0sTD1fLnBzdHlsZShSKyJsYWJlbCIpLnZhbHVlLEE9Xy5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFBfHwhTCkpe3ZhciBJPVQoRC5yc2NyYXRjaCwibGFiZWxYIixDKSxNPVQoRC5yc2NyYXRjaCwibGFiZWxZIixDKSxQPVQoRC5yc2NyYXRjaCwibGFiZWxBbmdsZSIsQyksQj1fLnBzdHlsZShSKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxGPV8ucHN0eWxlKFIrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLHo9ay54MS1PLUIsJD1rLngyK08tQixVPWsueTEtTy1GLEs9ay55MitPLUY7aWYoUCl7dmFyIGVlPU1hdGguY29zKFApLFk9TWF0aC5zaW4oUCksY2U9byhmdW5jdGlvbihoZSxsZSl7cmV0dXJuIGhlPWhlLUksbGU9bGUtTSx7eDpoZSplZS1sZSpZK0kseTpoZSpZK2xlKmVlK019fSwicm90YXRlIiksWj1jZSh6LFUpLHVlPWNlKHosSyksUT1jZSgkLFUpLGo9Y2UoJCxLKSxuZT1bWi54K0IsWi55K0YsUS54K0IsUS55K0Ysai54K0Isai55K0YsdWUueCtCLHVlLnkrRl07aWYocXModCxlLG5lKSlyZXR1cm4gdihfKSwhMH1lbHNlIGlmKHJ5KGssdCxlKSlyZXR1cm4gdihfKSwhMH19byhTLCJjaGVja0xhYmVsIik7Zm9yKHZhciB3PXMubGVuZ3RoLTE7dz49MDt3LS0pe3ZhciBFPXNbd107RS5pc05vZGUoKT94KEUpfHxTKEUpOmIoRSl8fFMoRSl8fFMoRSwic291cmNlIil8fFMoRSwidGFyZ2V0Iil9cmV0dXJuIGx9O3IwLmdldEFsbEluQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKS5pbnRlcmFjdGl2ZSxhPVtdLHM9TWF0aC5taW4odCxyKSxsPU1hdGgubWF4KHQsciksdT1NYXRoLm1pbihlLG4pLGg9TWF0aC5tYXgoZSxuKTt0PXMscj1sLGU9dSxuPWg7Zm9yKHZhciBmPVlzKHt4MTp0LHkxOmUseDI6cix5MjpufSksZD0wO2Q8aS5sZW5ndGg7ZCsrKXt2YXIgcD1pW2RdO2lmKHAuaXNOb2RlKCkpe3ZhciBtPXAsZz1tLmJvdW5kaW5nQm94KHtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiExLGluY2x1ZGVMYWJlbHM6ITF9KTtVQihmLGcpJiYhQWdlKGcsZikmJmEucHVzaChtKX1lbHNle3ZhciB5PXAsdj15Ll9wcml2YXRlLHg9di5yc2NyYXRjaDtpZih4LnN0YXJ0WCE9bnVsbCYmeC5zdGFydFkhPW51bGwmJiFyeShmLHguc3RhcnRYLHguc3RhcnRZKXx8eC5lbmRYIT1udWxsJiZ4LmVuZFkhPW51bGwmJiFyeShmLHguZW5kWCx4LmVuZFkpKWNvbnRpbnVlO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyInx8eC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fHguZWRnZVR5cGU9PT0ic2VsZiJ8fHguZWRnZVR5cGU9PT0iY29tcG91bmQifHx4LmVkZ2VUeXBlPT09InNlZ21lbnRzInx8eC5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgYj12LnJzdHlsZS5iZXppZXJQdHN8fHYucnN0eWxlLmxpbmVQdHN8fHYucnN0eWxlLmhheXN0YWNrUHRzLFQ9ITAsUz0wO1M8Yi5sZW5ndGg7UysrKWlmKCFpWGUoZixiW1NdKSl7VD0hMTticmVha31UJiZhLnB1c2goeSl9ZWxzZSh4LmVkZ2VUeXBlPT09ImhheXN0YWNrInx8eC5lZGdlVHlwZT09PSJzdHJhaWdodCIpJiZhLnB1c2goeSl9fXJldHVybiBhfTtZNj17fTtZNi5jYWxjdWxhdGVBcnJvd0FuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLnJzY3JhdGNoLHI9ZS5lZGdlVHlwZT09PSJoYXlzdGFjayIsbj1lLmVkZ2VUeXBlPT09ImJlemllciIsaT1lLmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyIixhPWUuZWRnZVR5cGU9PT0ic2VnbWVudHMiLHM9ZS5lZGdlVHlwZT09PSJjb21wb3VuZCIsbD1lLmVkZ2VUeXBlPT09InNlbGYiLHUsaCxmLGQscCxtLHgsYjtpZihyPyhmPWUuaGF5c3RhY2tQdHNbMF0sZD1lLmhheXN0YWNrUHRzWzFdLHA9ZS5oYXlzdGFja1B0c1syXSxtPWUuaGF5c3RhY2tQdHNbM10pOihmPWUuYXJyb3dTdGFydFgsZD1lLmFycm93U3RhcnRZLHA9ZS5hcnJvd0VuZFgsbT1lLmFycm93RW5kWSkseD1lLm1pZFgsYj1lLm1pZFksYSl1PWYtZS5zZWdwdHNbMF0saD1kLWUuc2VncHRzWzFdO2Vsc2UgaWYoaXx8c3x8bHx8bil7dmFyIGc9ZS5hbGxwdHMseT1zYShnWzBdLGdbMl0sZ1s0XSwuMSksdj1zYShnWzFdLGdbM10sZ1s1XSwuMSk7dT1mLXksaD1kLXZ9ZWxzZSB1PWYteCxoPWQtYjtlLnNyY0Fycm93QW5nbGU9ZzYodSxoKTt2YXIgeD1lLm1pZFgsYj1lLm1pZFk7aWYociYmKHg9KGYrcCkvMixiPShkK20pLzIpLHU9cC1mLGg9bS1kLGEpe3ZhciBnPWUuYWxscHRzO2lmKGcubGVuZ3RoLzIlMj09PTApe3ZhciBUPWcubGVuZ3RoLzIsUz1ULTI7dT1nW1RdLWdbU10saD1nW1QrMV0tZ1tTKzFdfWVsc2UgaWYoZS5pc1JvdW5kKXU9ZS5taWRWZWN0b3JbMV0saD0tZS5taWRWZWN0b3JbMF07ZWxzZXt2YXIgVD1nLmxlbmd0aC8yLTEsUz1ULTI7dT1nW1RdLWdbU10saD1nW1QrMV0tZ1tTKzFdfX1lbHNlIGlmKGl8fHN8fGwpe3ZhciBnPWUuYWxscHRzLHc9ZS5jdHJscHRzLEUsXyxDLEQ7aWYody5sZW5ndGgvMiUyPT09MCl7dmFyIE89Zy5sZW5ndGgvMi0xLFI9TysyLGs9UisyO0U9c2EoZ1tPXSxnW1JdLGdba10sMCksXz1zYShnW08rMV0sZ1tSKzFdLGdbaysxXSwwKSxDPXNhKGdbT10sZ1tSXSxnW2tdLDFlLTQpLEQ9c2EoZ1tPKzFdLGdbUisxXSxnW2srMV0sMWUtNCl9ZWxzZXt2YXIgUj1nLmxlbmd0aC8yLTEsTz1SLTIsaz1SKzI7RT1zYShnW09dLGdbUl0sZ1trXSwuNDk5OSksXz1zYShnW08rMV0sZ1tSKzFdLGdbaysxXSwuNDk5OSksQz1zYShnW09dLGdbUl0sZ1trXSwuNSksRD1zYShnW08rMV0sZ1tSKzFdLGdbaysxXSwuNSl9dT1DLUUsaD1ELV99aWYoZS5taWR0Z3RBcnJvd0FuZ2xlPWc2KHUsaCksZS5taWREaXNwWD11LGUubWlkRGlzcFk9aCx1Kj0tMSxoKj0tMSxhKXt2YXIgZz1lLmFsbHB0cztpZihnLmxlbmd0aC8yJTIhPT0wKXtpZighZS5pc1JvdW5kKXt2YXIgVD1nLmxlbmd0aC8yLTEsTD1UKzI7dT0tKGdbTF0tZ1tUXSksaD0tKGdbTCsxXS1nW1QrMV0pfX19aWYoZS5taWRzcmNBcnJvd0FuZ2xlPWc2KHUsaCksYSl1PXAtZS5zZWdwdHNbZS5zZWdwdHMubGVuZ3RoLTJdLGg9bS1lLnNlZ3B0c1tlLnNlZ3B0cy5sZW5ndGgtMV07ZWxzZSBpZihpfHxzfHxsfHxuKXt2YXIgZz1lLmFsbHB0cyxBPWcubGVuZ3RoLHk9c2EoZ1tBLTZdLGdbQS00XSxnW0EtMl0sLjkpLHY9c2EoZ1tBLTVdLGdbQS0zXSxnW0EtMV0sLjkpO3U9cC15LGg9bS12fWVsc2UgdT1wLXgsaD1tLWI7ZS50Z3RBcnJvd0FuZ2xlPWc2KHUsaCl9O1k2LmdldEFycm93V2lkdGg9WTYuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sbj1yW3QrIiwgIitlXTtyZXR1cm4gbnx8KG49TWF0aC5tYXgoTWF0aC5wb3codCoxMy4zNywuOSksMjkpKmUsclt0KyIsICIrZV09bixuKX07S2M9e30sbmw9e30sem1lPW8oZnVuY3Rpb24oZSxyLG4pe24ueD1yLngtZS54LG4ueT1yLnktZS55LG4ubGVuPU1hdGguc3FydChuLngqbi54K24ueSpuLnkpLG4ubng9bi54L24ubGVuLG4ubnk9bi55L24ubGVuLG4uYW5nPU1hdGguYXRhbjIobi5ueSxuLm54KX0sImFzVmVjIiksV1plPW8oZnVuY3Rpb24oZSxyKXtyLng9ZS54Ki0xLHIueT1lLnkqLTEsci5ueD1lLm54Ki0xLHIubnk9ZS5ueSotMSxyLmFuZz1lLmFuZz4wPy0oTWF0aC5QSS1lLmFuZyk6TWF0aC5QSStlLmFuZ30sImludmVydFZlYyIpLHFaZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZSE9PSRtZT96bWUocixlLEtjKTpXWmUobmwsS2MpLHptZShyLG4sbmwpLEJtZT1LYy5ueCpubC5ueS1LYy5ueSpubC5ueCxGbWU9S2MubngqbmwubngtS2MubnkqLW5sLm55LHJoPU1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLEJtZSkpKSxNYXRoLmFicyhyaCk8MWUtNil7X0I9ci54LERCPXIueSxZcD1ZMT0wO3JldHVybn1YcD0xLFA2PSExLEZtZTwwP3JoPDA/cmg9TWF0aC5QSStyaDoocmg9TWF0aC5QSS1yaCxYcD0tMSxQNj0hMCk6cmg+MCYmKFhwPS0xLFA2PSEwKSxyLnJhZGl1cyE9PXZvaWQgMD9ZMT1yLnJhZGl1czpZMT1pLFVwPXJoLzIsUzY9TWF0aC5taW4oS2MubGVuLzIsbmwubGVuLzIpLGE/KGpjPU1hdGguYWJzKE1hdGguY29zKFVwKSpZMS9NYXRoLnNpbihVcCkpLGpjPlM2PyhqYz1TNixZcD1NYXRoLmFicyhqYypNYXRoLnNpbihVcCkvTWF0aC5jb3MoVXApKSk6WXA9WTEpOihqYz1NYXRoLm1pbihTNixZMSksWXA9TWF0aC5hYnMoamMqTWF0aC5zaW4oVXApL01hdGguY29zKFVwKSkpLExCPXIueCtubC5ueCpqYyxSQj1yLnkrbmwubnkqamMsX0I9TEItbmwubnkqWXAqWHAsREI9UkIrbmwubngqWXAqWHAseDFlPXIueCtLYy5ueCpqYyxiMWU9ci55K0tjLm55KmpjLCRtZT1yfSwiY2FsY0Nvcm5lckFyYyIpO28oVDFlLCJkcmF3UHJlcGFyZWRSb3VuZENvcm5lciIpO28ockYsImdldFJvdW5kQ29ybmVyIik7WWE9e307WWEuZmluZE1pZHB0UHRzRXRjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5wb3NQdHMsbj1lLmludGVyc2VjdGlvblB0cyxpPWUudmVjdG9yTm9ybUludmVyc2UsYSxzPXQucHN0eWxlKCJzb3VyY2UtZW5kcG9pbnQiKSxsPXQucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSx1PXMudW5pdHMhPW51bGwmJmwudW5pdHMhPW51bGwsaD1vKGZ1bmN0aW9uKHcsRSxfLEMpe3ZhciBEPUMtRSxPPV8tdyxSPU1hdGguc3FydChPKk8rRCpEKTtyZXR1cm57eDotRC9SLHk6Ty9SfX0sInJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlIiksZj10LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZTtzd2l0Y2goZil7Y2FzZSJub2RlLXBvc2l0aW9uIjphPXI7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOmE9bjticmVhaztjYXNlImVuZHBvaW50cyI6e2lmKHUpe3ZhciBkPXRoaXMubWFudWFsRW5kcHRUb1B4KHQuc291cmNlKClbMF0scykscD1SaShkLDIpLG09cFswXSxnPXBbMV0seT10aGlzLm1hbnVhbEVuZHB0VG9QeCh0LnRhcmdldCgpWzBdLGwpLHY9UmkoeSwyKSx4PXZbMF0sYj12WzFdLFQ9e3gxOm0seTE6Zyx4Mjp4LHkyOmJ9O2k9aChtLGcseCxiKSxhPVR9ZWxzZSBobigiRWRnZSAiLmNvbmNhdCh0LmlkKCksIiBoYXMgZWRnZS1kaXN0YW5jZXM6ZW5kcG9pbnRzIHNwZWNpZmllZCB3aXRob3V0IG1hbnVhbCBlbmRwb2ludHMgc3BlY2lmaWVkIHZpYSBzb3VyY2UtZW5kcG9pbnQgYW5kIHRhcmdldC1lbmRwb2ludC4gIEZhbGxpbmcgYmFjayBvbiBlZGdlLWRpc3RhbmNlczppbnRlcnNlY3Rpb24gKGRlZmF1bHQpLiIpKSxhPW47YnJlYWt9fXJldHVybnttaWRwdFB0czphLHZlY3Rvck5vcm1JbnZlcnNlOml9fTtZYS5maW5kSGF5c3RhY2tQb2ludHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj1yLl9wcml2YXRlLGk9bi5yc2NyYXRjaDtpZighaS5oYXlzdGFjayl7dmFyIGE9TWF0aC5yYW5kb20oKSoyKk1hdGguUEk7aS5zb3VyY2U9e3g6TWF0aC5jb3MoYSkseTpNYXRoLnNpbihhKX0sYT1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSSxpLnRhcmdldD17eDpNYXRoLmNvcyhhKSx5Ok1hdGguc2luKGEpfX12YXIgcz1uLnNvdXJjZSxsPW4udGFyZ2V0LHU9cy5wb3NpdGlvbigpLGg9bC5wb3NpdGlvbigpLGY9cy53aWR0aCgpLGQ9bC53aWR0aCgpLHA9cy5oZWlnaHQoKSxtPWwuaGVpZ2h0KCksZz1yLnBzdHlsZSgiaGF5c3RhY2stcmFkaXVzIikudmFsdWUseT1nLzI7aS5oYXlzdGFja1B0cz1pLmFsbHB0cz1baS5zb3VyY2UueCpmKnkrdS54LGkuc291cmNlLnkqcCp5K3UueSxpLnRhcmdldC54KmQqeStoLngsaS50YXJnZXQueSptKnkraC55XSxpLm1pZFg9KGkuYWxscHRzWzBdK2kuYWxscHRzWzJdKS8yLGkubWlkWT0oaS5hbGxwdHNbMV0raS5hbGxwdHNbM10pLzIsaS5lZGdlVHlwZT0iaGF5c3RhY2siLGkuaGF5c3RhY2s9ITAsdGhpcy5zdG9yZUVkZ2VQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKHIpLHRoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHIpfX07WWEuZmluZFNlZ21lbnRzUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaCxuPXQucHN0eWxlKCJzZWdtZW50LXdlaWdodHMiKSxpPXQucHN0eWxlKCJzZWdtZW50LWRpc3RhbmNlcyIpLGE9dC5wc3R5bGUoInNlZ21lbnQtcmFkaWkiKSxzPXQucHN0eWxlKCJyYWRpdXMtdHlwZSIpLGw9TWF0aC5taW4obi5wZlZhbHVlLmxlbmd0aCxpLnBmVmFsdWUubGVuZ3RoKSx1PWEucGZWYWx1ZVthLnBmVmFsdWUubGVuZ3RoLTFdLGg9cy5wZlZhbHVlW3MucGZWYWx1ZS5sZW5ndGgtMV07ci5lZGdlVHlwZT0ic2VnbWVudHMiLHIuc2VncHRzPVtdLHIucmFkaWk9W10sci5pc0FyY1JhZGl1cz1bXTtmb3IodmFyIGY9MDtmPGw7ZisrKXt2YXIgZD1uLnBmVmFsdWVbZl0scD1pLnBmVmFsdWVbZl0sbT0xLWQsZz1kLHk9dGhpcy5maW5kTWlkcHRQdHNFdGModCxlKSx2PXkubWlkcHRQdHMseD15LnZlY3Rvck5vcm1JbnZlcnNlLGI9e3g6di54MSptK3YueDIqZyx5OnYueTEqbSt2LnkyKmd9O3Iuc2VncHRzLnB1c2goYi54K3gueCpwLGIueSt4LnkqcCksci5yYWRpaS5wdXNoKGEucGZWYWx1ZVtmXSE9PXZvaWQgMD9hLnBmVmFsdWVbZl06dSksci5pc0FyY1JhZGl1cy5wdXNoKChzLnBmVmFsdWVbZl0hPT12b2lkIDA/cy5wZlZhbHVlW2ZdOmgpPT09ImFyYy1yYWRpdXMiKX19O1lhLmZpbmRMb29wUG9pbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2gsYT1lLmRpckNvdW50cyxzPWUuc3JjUG9zLGw9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdT1sP2wucGZWYWx1ZVswXTp2b2lkIDAsaD10LnBzdHlsZSgibG9vcC1kaXJlY3Rpb24iKS5wZlZhbHVlLGY9dC5wc3R5bGUoImxvb3Atc3dlZXAiKS5wZlZhbHVlLGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZTtpLmVkZ2VUeXBlPSJzZWxmIjt2YXIgcD1yLG09ZDtuJiYocD0wLG09dSk7dmFyIGc9aC1NYXRoLlBJLzIseT1nLWYvMix2PWcrZi8yLHg9aCsiXyIrZjtwPWFbeF09PT12b2lkIDA/YVt4XT0wOisrYVt4XSxpLmN0cmxwdHM9W3MueCtNYXRoLmNvcyh5KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih5KSoxLjQqbSoocC8zKzEpLHMueCtNYXRoLmNvcyh2KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih2KSoxLjQqbSoocC8zKzEpXX07WWEuZmluZENvbXBvdW5kTG9vcFBvaW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9wcml2YXRlLnJzY3JhdGNoO2kuZWRnZVR5cGU9ImNvbXBvdW5kIjt2YXIgYT1lLnNyY1BvcyxzPWUudGd0UG9zLGw9ZS5zcmNXLHU9ZS5zcmNILGg9ZS50Z3RXLGY9ZS50Z3RILGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxwPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLG09cD9wLnBmVmFsdWVbMF06dm9pZCAwLGc9cix5PWQ7biYmKGc9MCx5PW0pO3ZhciB2PTUwLHg9e3g6YS54LWwvMix5OmEueS11LzJ9LGI9e3g6cy54LWgvMix5OnMueS1mLzJ9LFQ9e3g6TWF0aC5taW4oeC54LGIueCkseTpNYXRoLm1pbih4LnksYi55KX0sUz0uNSx3PU1hdGgubWF4KFMsTWF0aC5sb2cobCouMDEpKSxFPU1hdGgubWF4KFMsTWF0aC5sb2coaCouMDEpKTtpLmN0cmxwdHM9W1QueCxULnktKDErTWF0aC5wb3codiwxLjEyKS8xMDApKnkqKGcvMysxKSp3LFQueC0oMStNYXRoLnBvdyh2LDEuMTIpLzEwMCkqeSooZy8zKzEpKkUsVC55XX07WWEuZmluZFN0cmFpZ2h0RWRnZVBvaW50cz1mdW5jdGlvbih0KXt0Ll9wcml2YXRlLnJzY3JhdGNoLmVkZ2VUeXBlPSJzdHJhaWdodCJ9O1lhLmZpbmRCZXppZXJQb2ludHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10Ll9wcml2YXRlLnJzY3JhdGNoLHM9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxsPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLHU9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyIpLGg9bCYmdT9NYXRoLm1pbihsLnZhbHVlLmxlbmd0aCx1LnZhbHVlLmxlbmd0aCk6MSxmPWw/bC5wZlZhbHVlWzBdOnZvaWQgMCxkPXUudmFsdWVbMF0scD1uO2EuZWRnZVR5cGU9cD8ibXVsdGliZXppZXIiOiJiZXppZXIiLGEuY3RybHB0cz1bXTtmb3IodmFyIG09MDttPGg7bSsrKXt2YXIgZz0oLjUtZS5lbGVzLmxlbmd0aC8yK3IpKnMqKGk/LTE6MSkseT12b2lkIDAsdj1TZ2UoZyk7cCYmKGY9bD9sLnBmVmFsdWVbbV06cyxkPXUudmFsdWVbbV0pLG4/eT1mOnk9ZiE9PXZvaWQgMD92KmY6dm9pZCAwO3ZhciB4PXkhPT12b2lkIDA/eTpnLGI9MS1kLFQ9ZCxTPXRoaXMuZmluZE1pZHB0UHRzRXRjKHQsZSksdz1TLm1pZHB0UHRzLEU9Uy52ZWN0b3JOb3JtSW52ZXJzZSxfPXt4OncueDEqYit3LngyKlQseTp3LnkxKmIrdy55MipUfTthLmN0cmxwdHMucHVzaChfLngrRS54KngsXy55K0UueSp4KX19O1lhLmZpbmRUYXhpUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaDtyLmVkZ2VUeXBlPSJzZWdtZW50cyI7dmFyIG49InZlcnRpY2FsIixpPSJob3Jpem9udGFsIixhPSJsZWZ0d2FyZCIscz0icmlnaHR3YXJkIixsPSJkb3dud2FyZCIsdT0idXB3YXJkIixoPSJhdXRvIixmPWUucG9zUHRzLGQ9ZS5zcmNXLHA9ZS5zcmNILG09ZS50Z3RXLGc9ZS50Z3RILHk9dC5wc3R5bGUoImVkZ2UtZGlzdGFuY2VzIikudmFsdWUsdj15IT09Im5vZGUtcG9zaXRpb24iLHg9dC5wc3R5bGUoInRheGktZGlyZWN0aW9uIikudmFsdWUsYj14LFQ9dC5wc3R5bGUoInRheGktdHVybiIpLFM9VC51bml0cz09PSIlIix3PVQucGZWYWx1ZSxFPXc8MCxfPXQucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxDPXY/KGQrbSkvMjowLEQ9dj8ocCtnKS8yOjAsTz1mLngyLWYueDEsUj1mLnkyLWYueTEsaz1vKGZ1bmN0aW9uKFcscGUpe3JldHVybiBXPjA/TWF0aC5tYXgoVy1wZSwwKTpNYXRoLm1pbihXK3BlLDApfSwic3ViRFdIIiksTD1rKE8sQyksQT1rKFIsRCksST0hMTtiPT09aD94PU1hdGguYWJzKEwpPk1hdGguYWJzKEEpP2k6bjpiPT09dXx8Yj09PWw/KHg9bixJPSEwKTooYj09PWF8fGI9PT1zKSYmKHg9aSxJPSEwKTt2YXIgTT14PT09bixQPU0/QTpMLEI9TT9SOk8sRj1TZ2UoQiksej0hMTshKEkmJihTfHxFKSkmJihiPT09bCYmQjwwfHxiPT09dSYmQj4wfHxiPT09YSYmQj4wfHxiPT09cyYmQjwwKSYmKEYqPS0xLFA9RipNYXRoLmFicyhQKSx6PSEwKTt2YXIgJDtpZihTKXt2YXIgVT13PDA/MSt3Onc7JD1VKlB9ZWxzZXt2YXIgSz13PDA/UDowOyQ9Syt3KkZ9dmFyIGVlPW8oZnVuY3Rpb24oVyl7cmV0dXJuIE1hdGguYWJzKFcpPF98fE1hdGguYWJzKFcpPj1NYXRoLmFicyhQKX0sImdldElzVG9vQ2xvc2UiKSxZPWVlKCQpLGNlPWVlKE1hdGguYWJzKFApLU1hdGguYWJzKCQpKSxaPVl8fGNlO2lmKFomJiF6KWlmKE0pe3ZhciB1ZT1NYXRoLmFicyhCKTw9cC8yLFE9TWF0aC5hYnMoTyk8PW0vMjtpZih1ZSl7dmFyIGo9KGYueDErZi54MikvMixuZT1mLnkxLHRlPWYueTI7ci5zZWdwdHM9W2osbmUsaix0ZV19ZWxzZSBpZihRKXt2YXIgaGU9KGYueTErZi55MikvMixsZT1mLngxLEo9Zi54MjtyLnNlZ3B0cz1bbGUsaGUsSixoZV19ZWxzZSByLnNlZ3B0cz1bZi54MSxmLnkyXX1lbHNle3ZhciBTZT1NYXRoLmFicyhCKTw9ZC8yLHNlPU1hdGguYWJzKFIpPD1nLzI7aWYoU2Upe3ZhciBhZT0oZi55MStmLnkyKS8yLE9lPWYueDEseWU9Zi54MjtyLnNlZ3B0cz1bT2UsYWUseWUsYWVdfWVsc2UgaWYoc2Upe3ZhciBCZT0oZi54MStmLngyKS8yLEhlPWYueTEsemU9Zi55MjtyLnNlZ3B0cz1bQmUsSGUsQmUsemVdfWVsc2Ugci5zZWdwdHM9W2YueDIsZi55MV19ZWxzZSBpZihNKXt2YXIgTGU9Zi55MSskKyh2P3AvMipGOjApLEllPWYueDEseGU9Zi54MjtyLnNlZ3B0cz1bSWUsTGUseGUsTGVdfWVsc2V7dmFyIHE9Zi54MSskKyh2P2QvMipGOjApLGRlPWYueTEsaWU9Zi55MjtyLnNlZ3B0cz1bcSxkZSxxLGllXX1pZihyLmlzUm91bmQpe3ZhciBvZT10LnBzdHlsZSgidGF4aS1yYWRpdXMiKS52YWx1ZSxWPXQucHN0eWxlKCJyYWRpdXMtdHlwZSIpLnZhbHVlWzBdPT09ImFyYy1yYWRpdXMiO3IucmFkaWk9bmV3IEFycmF5KHIuc2VncHRzLmxlbmd0aC8yKS5maWxsKG9lKSxyLmlzQXJjUmFkaXVzPW5ldyBBcnJheShyLnNlZ3B0cy5sZW5ndGgvMikuZmlsbChWKX19O1lhLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLnJzY3JhdGNoO2lmKHIuZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIG49ZS5zcmNQb3MsaT1lLnRndFBvcyxhPWUuc3JjVyxzPWUuc3JjSCxsPWUudGd0Vyx1PWUudGd0SCxoPWUuc3JjU2hhcGUsZj1lLnRndFNoYXBlLGQ9ZS5zcmNDb3JuZXJSYWRpdXMscD1lLnRndENvcm5lclJhZGl1cyxtPWUuc3JjUnMsZz1lLnRndFJzLHk9IV90KHIuc3RhcnRYKXx8IV90KHIuc3RhcnRZKSx2PSFfdChyLmFycm93U3RhcnRYKXx8IV90KHIuYXJyb3dTdGFydFkpLHg9IV90KHIuZW5kWCl8fCFfdChyLmVuZFkpLGI9IV90KHIuYXJyb3dFbmRYKXx8IV90KHIuYXJyb3dFbmRZKSxUPTMsUz10aGlzLmdldEFycm93V2lkdGgodC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx0LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsdz1UKlMsRT1RcCh7eDpyLmN0cmxwdHNbMF0seTpyLmN0cmxwdHNbMV19LHt4OnIuc3RhcnRYLHk6ci5zdGFydFl9KSxfPUU8dyxDPVFwKHt4OnIuY3RybHB0c1swXSx5OnIuY3RybHB0c1sxXX0se3g6ci5lbmRYLHk6ci5lbmRZfSksRD1DPHcsTz0hMTtpZih5fHx2fHxfKXtPPSEwO3ZhciBSPXt4OnIuY3RybHB0c1swXS1uLngseTpyLmN0cmxwdHNbMV0tbi55fSxrPU1hdGguc3FydChSLngqUi54K1IueSpSLnkpLEw9e3g6Ui54L2sseTpSLnkva30sQT1NYXRoLm1heChhLHMpLEk9e3g6ci5jdHJscHRzWzBdK0wueCoyKkEseTpyLmN0cmxwdHNbMV0rTC55KjIqQX0sTT1oLmludGVyc2VjdExpbmUobi54LG4ueSxhLHMsSS54LEkueSwwLGQsbSk7Xz8oci5jdHJscHRzWzBdPXIuY3RybHB0c1swXStMLngqKHctRSksci5jdHJscHRzWzFdPXIuY3RybHB0c1sxXStMLnkqKHctRSkpOihyLmN0cmxwdHNbMF09TVswXStMLngqdyxyLmN0cmxwdHNbMV09TVsxXStMLnkqdyl9aWYoeHx8Ynx8RCl7Tz0hMDt2YXIgUD17eDpyLmN0cmxwdHNbMF0taS54LHk6ci5jdHJscHRzWzFdLWkueX0sQj1NYXRoLnNxcnQoUC54KlAueCtQLnkqUC55KSxGPXt4OlAueC9CLHk6UC55L0J9LHo9TWF0aC5tYXgoYSxzKSwkPXt4OnIuY3RybHB0c1swXStGLngqMip6LHk6ci5jdHJscHRzWzFdK0YueSoyKnp9LFU9Zi5pbnRlcnNlY3RMaW5lKGkueCxpLnksbCx1LCQueCwkLnksMCxwLGcpO0Q/KHIuY3RybHB0c1swXT1yLmN0cmxwdHNbMF0rRi54Kih3LUMpLHIuY3RybHB0c1sxXT1yLmN0cmxwdHNbMV0rRi55Kih3LUMpKTooci5jdHJscHRzWzBdPVVbMF0rRi54Kncsci5jdHJscHRzWzFdPVVbMV0rRi55KncpfU8mJnRoaXMuZmluZEVuZHBvaW50cyh0KX19O1lhLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGUuZWRnZVR5cGU9PT0iYmV6aWVyInx8ZS5lZGdlVHlwZT09PSJzZWxmInx8ZS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2UuYWxscHRzPVtdLGUuYWxscHRzLnB1c2goZS5zdGFydFgsZS5zdGFydFkpO2Zvcih2YXIgcj0wO3IrMTxlLmN0cmxwdHMubGVuZ3RoO3IrPTIpZS5hbGxwdHMucHVzaChlLmN0cmxwdHNbcl0sZS5jdHJscHRzW3IrMV0pLHIrMzxlLmN0cmxwdHMubGVuZ3RoJiZlLmFsbHB0cy5wdXNoKChlLmN0cmxwdHNbcl0rZS5jdHJscHRzW3IrMl0pLzIsKGUuY3RybHB0c1tyKzFdK2UuY3RybHB0c1tyKzNdKS8yKTtlLmFsbHB0cy5wdXNoKGUuZW5kWCxlLmVuZFkpO3ZhciBuLGk7ZS5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhuPWUuYWxscHRzLmxlbmd0aC8yLTEsZS5taWRYPWUuYWxscHRzW25dLGUubWlkWT1lLmFsbHB0c1tuKzFdKToobj1lLmFsbHB0cy5sZW5ndGgvMi0zLGk9LjUsZS5taWRYPXNhKGUuYWxscHRzW25dLGUuYWxscHRzW24rMl0sZS5hbGxwdHNbbis0XSxpKSxlLm1pZFk9c2EoZS5hbGxwdHNbbisxXSxlLmFsbHB0c1tuKzNdLGUuYWxscHRzW24rNV0saSkpfWVsc2UgaWYoZS5lZGdlVHlwZT09PSJzdHJhaWdodCIpZS5hbGxwdHM9W2Uuc3RhcnRYLGUuc3RhcnRZLGUuZW5kWCxlLmVuZFldLGUubWlkWD0oZS5zdGFydFgrZS5lbmRYK2UuYXJyb3dTdGFydFgrZS5hcnJvd0VuZFgpLzQsZS5taWRZPShlLnN0YXJ0WStlLmVuZFkrZS5hcnJvd1N0YXJ0WStlLmFycm93RW5kWSkvNDtlbHNlIGlmKGUuZWRnZVR5cGU9PT0ic2VnbWVudHMiKXtpZihlLmFsbHB0cz1bXSxlLmFsbHB0cy5wdXNoKGUuc3RhcnRYLGUuc3RhcnRZKSxlLmFsbHB0cy5wdXNoLmFwcGx5KGUuYWxscHRzLGUuc2VncHRzKSxlLmFsbHB0cy5wdXNoKGUuZW5kWCxlLmVuZFkpLGUuaXNSb3VuZCl7ZS5yb3VuZENvcm5lcnM9W107Zm9yKHZhciBhPTI7YSszPGUuYWxscHRzLmxlbmd0aDthKz0yKXt2YXIgcz1lLnJhZGlpW2EvMi0xXSxsPWUuaXNBcmNSYWRpdXNbYS8yLTFdO2Uucm91bmRDb3JuZXJzLnB1c2gockYoe3g6ZS5hbGxwdHNbYS0yXSx5OmUuYWxscHRzW2EtMV19LHt4OmUuYWxscHRzW2FdLHk6ZS5hbGxwdHNbYSsxXSxyYWRpdXM6c30se3g6ZS5hbGxwdHNbYSsyXSx5OmUuYWxscHRzW2ErM119LHMsbCkpfX1pZihlLnNlZ3B0cy5sZW5ndGglND09PTApe3ZhciB1PWUuc2VncHRzLmxlbmd0aC8yLGg9dS0yO2UubWlkWD0oZS5zZWdwdHNbaF0rZS5zZWdwdHNbdV0pLzIsZS5taWRZPShlLnNlZ3B0c1toKzFdK2Uuc2VncHRzW3UrMV0pLzJ9ZWxzZXt2YXIgZj1lLnNlZ3B0cy5sZW5ndGgvMi0xO2lmKCFlLmlzUm91bmQpZS5taWRYPWUuc2VncHRzW2ZdLGUubWlkWT1lLnNlZ3B0c1tmKzFdO2Vsc2V7dmFyIGQ9e3g6ZS5zZWdwdHNbZl0seTplLnNlZ3B0c1tmKzFdfSxwPWUucm91bmRDb3JuZXJzW2YvMl0sbT1bZC54LXAuY3gsZC55LXAuY3ldLGc9cC5yYWRpdXMvTWF0aC5zcXJ0KE1hdGgucG93KG1bMF0sMikrTWF0aC5wb3cobVsxXSwyKSk7bT1tLm1hcChmdW5jdGlvbih5KXtyZXR1cm4geSpnfSksZS5taWRYPXAuY3grbVswXSxlLm1pZFk9cC5jeSttWzFdLGUubWlkVmVjdG9yPW19fX19O1lhLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7ZS5ub2Rlc092ZXJsYXB8fF90KGUuc3RhcnRYKSYmX3QoZS5zdGFydFkpJiZfdChlLmVuZFgpJiZfdChlLmVuZFkpP2UubG9nZ2VkRXJyPSExOmUubG9nZ2VkRXJyfHwoZS5sb2dnZWRFcnI9ITAsaG4oIkVkZ2UgYCIrdC5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9O1lhLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCEoIXR8fHQubGVuZ3RoPT09MCkpe2Zvcih2YXIgcj10aGlzLG49ci5jeSxpPW4uaGFzQ29tcG91bmROb2RlcygpLGE9e21hcDpuZXcgWmMsZ2V0Om8oZnVuY3Rpb24oXyl7dmFyIEM9dGhpcy5tYXAuZ2V0KF9bMF0pO3JldHVybiBDIT1udWxsP0MuZ2V0KF9bMV0pOm51bGx9LCJnZXQiKSxzZXQ6byhmdW5jdGlvbihfLEMpe3ZhciBEPXRoaXMubWFwLmdldChfWzBdKTtEPT1udWxsJiYoRD1uZXcgWmMsdGhpcy5tYXAuc2V0KF9bMF0sRCkpLEQuc2V0KF9bMV0sQyl9LCJzZXQiKX0scz1bXSxsPVtdLHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGg9dFt1XSxmPWguX3ByaXZhdGUsZD1oLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZTtpZighKGgucmVtb3ZlZCgpfHwhaC50YWtlc1VwU3BhY2UoKSkpe2lmKGQ9PT0iaGF5c3RhY2siKXtsLnB1c2goaCk7Y29udGludWV9dmFyIHA9ZD09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8ZC5lbmRzV2l0aCgic2VnbWVudHMiKXx8ZD09PSJzdHJhaWdodCJ8fGQ9PT0ic3RyYWlnaHQtdHJpYW5nbGUifHxkLmVuZHNXaXRoKCJ0YXhpIiksbT1kPT09InVuYnVuZGxlZC1iZXppZXIifHxkPT09ImJlemllciIsZz1mLnNvdXJjZSx5PWYudGFyZ2V0LHY9Zy5wb29sSW5kZXgoKSx4PXkucG9vbEluZGV4KCksYj1bdix4XS5zb3J0KCksVD1hLmdldChiKTtUPT1udWxsJiYoVD17ZWxlczpbXX0sYS5zZXQoYixUKSxzLnB1c2goYikpLFQuZWxlcy5wdXNoKGgpLHAmJihULmhhc1VuYnVuZGxlZD0hMCksbSYmKFQuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBTPW8oZnVuY3Rpb24oXyl7dmFyIEM9c1tfXSxEPWEuZ2V0KEMpLE89dm9pZCAwO2lmKCFELmhhc1VuYnVuZGxlZCl7dmFyIFI9RC5lbGVzWzBdLnBhcmFsbGVsRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaXNCdW5kbGVkQmV6aWVyKCl9KTtHQihELmVsZXMpLFIuZm9yRWFjaChmdW5jdGlvbihxKXtyZXR1cm4gRC5lbGVzLnB1c2gocSl9KSxELmVsZXMuc29ydChmdW5jdGlvbihxLGRlKXtyZXR1cm4gcS5wb29sSW5kZXgoKS1kZS5wb29sSW5kZXgoKX0pfXZhciBrPUQuZWxlc1swXSxMPWsuc291cmNlKCksQT1rLnRhcmdldCgpO2lmKEwucG9vbEluZGV4KCk+QS5wb29sSW5kZXgoKSl7dmFyIEk9TDtMPUEsQT1JfXZhciBNPUQuc3JjUG9zPUwucG9zaXRpb24oKSxQPUQudGd0UG9zPUEucG9zaXRpb24oKSxCPUQuc3JjVz1MLm91dGVyV2lkdGgoKSxGPUQuc3JjSD1MLm91dGVySGVpZ2h0KCksej1ELnRndFc9QS5vdXRlcldpZHRoKCksJD1ELnRndEg9QS5vdXRlckhlaWdodCgpLFU9RC5zcmNTaGFwZT1yLm5vZGVTaGFwZXNbZS5nZXROb2RlU2hhcGUoTCldLEs9RC50Z3RTaGFwZT1yLm5vZGVTaGFwZXNbZS5nZXROb2RlU2hhcGUoQSldLGVlPUQuc3JjQ29ybmVyUmFkaXVzPUwucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOkwucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxZPUQudGd0Q29ybmVyUmFkaXVzPUEucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOkEucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxjZT1ELnRndFJzPUEuX3ByaXZhdGUucnNjcmF0Y2gsWj1ELnNyY1JzPUwuX3ByaXZhdGUucnNjcmF0Y2g7RC5kaXJDb3VudHM9e25vcnRoOjAsd2VzdDowLHNvdXRoOjAsZWFzdDowLG5vcnRod2VzdDowLHNvdXRod2VzdDowLG5vcnRoZWFzdDowLHNvdXRoZWFzdDowfTtmb3IodmFyIHVlPTA7dWU8RC5lbGVzLmxlbmd0aDt1ZSsrKXt2YXIgUT1ELmVsZXNbdWVdLGo9UVswXS5fcHJpdmF0ZS5yc2NyYXRjaCxuZT1RLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSx0ZT1uZT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8bmUuZW5kc1dpdGgoInNlZ21lbnRzIil8fG5lLmVuZHNXaXRoKCJ0YXhpIiksaGU9IUwuc2FtZShRLnNvdXJjZSgpKTtpZighRC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZMIT09QSYmKEQuaGFzQmV6aWVyfHxELmhhc1VuYnVuZGxlZCkpe0QuY2FsY3VsYXRlZEludGVyc2VjdGlvbj0hMDt2YXIgbGU9VS5pbnRlcnNlY3RMaW5lKE0ueCxNLnksQixGLFAueCxQLnksMCxlZSxaKSxKPUQuc3JjSW50bj1sZSxTZT1LLmludGVyc2VjdExpbmUoUC54LFAueSx6LCQsTS54LE0ueSwwLFksY2UpLHNlPUQudGd0SW50bj1TZSxhZT1ELmludGVyc2VjdGlvblB0cz17eDE6bGVbMF0seDI6U2VbMF0seTE6bGVbMV0seTI6U2VbMV19LE9lPUQucG9zUHRzPXt4MTpNLngseDI6UC54LHkxOk0ueSx5MjpQLnl9LHllPVNlWzFdLWxlWzFdLEJlPVNlWzBdLWxlWzBdLEhlPU1hdGguc3FydChCZSpCZSt5ZSp5ZSksemU9RC52ZWN0b3I9e3g6QmUseTp5ZX0sTGU9RC52ZWN0b3JOb3JtPXt4OnplLngvSGUseTp6ZS55L0hlfSxJZT17eDotTGUueSx5OkxlLnh9O0Qubm9kZXNPdmVybGFwPSFfdChIZSl8fEsuY2hlY2tQb2ludChsZVswXSxsZVsxXSwwLHosJCxQLngsUC55LFksY2UpfHxVLmNoZWNrUG9pbnQoU2VbMF0sU2VbMV0sMCxCLEYsTS54LE0ueSxlZSxaKSxELnZlY3Rvck5vcm1JbnZlcnNlPUllLE89e25vZGVzT3ZlcmxhcDpELm5vZGVzT3ZlcmxhcCxkaXJDb3VudHM6RC5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6RC5oYXNCZXppZXIsaGFzVW5idW5kbGVkOkQuaGFzVW5idW5kbGVkLGVsZXM6RC5lbGVzLHNyY1BvczpQLHNyY1JzOmNlLHRndFBvczpNLHRndFJzOlosc3JjVzp6LHNyY0g6JCx0Z3RXOkIsdGd0SDpGLHNyY0ludG46c2UsdGd0SW50bjpKLHNyY1NoYXBlOkssdGd0U2hhcGU6VSxwb3NQdHM6e3gxOk9lLngyLHkxOk9lLnkyLHgyOk9lLngxLHkyOk9lLnkxfSxpbnRlcnNlY3Rpb25QdHM6e3gxOmFlLngyLHkxOmFlLnkyLHgyOmFlLngxLHkyOmFlLnkxfSx2ZWN0b3I6e3g6LXplLngseTotemUueX0sdmVjdG9yTm9ybTp7eDotTGUueCx5Oi1MZS55fSx2ZWN0b3JOb3JtSW52ZXJzZTp7eDotSWUueCx5Oi1JZS55fX19dmFyIHhlPWhlP086RDtqLm5vZGVzT3ZlcmxhcD14ZS5ub2Rlc092ZXJsYXAsai5zcmNJbnRuPXhlLnNyY0ludG4sai50Z3RJbnRuPXhlLnRndEludG4sai5pc1JvdW5kPW5lLnN0YXJ0c1dpdGgoInJvdW5kIiksaSYmKEwuaXNQYXJlbnQoKXx8TC5pc0NoaWxkKCl8fEEuaXNQYXJlbnQoKXx8QS5pc0NoaWxkKCkpJiYoTC5wYXJlbnRzKCkuYW55U2FtZShBKXx8QS5wYXJlbnRzKCkuYW55U2FtZShMKXx8TC5zYW1lKEEpJiZMLmlzUGFyZW50KCkpP2UuZmluZENvbXBvdW5kTG9vcFBvaW50cyhRLHhlLHVlLHRlKTpMPT09QT9lLmZpbmRMb29wUG9pbnRzKFEseGUsdWUsdGUpOm5lLmVuZHNXaXRoKCJzZWdtZW50cyIpP2UuZmluZFNlZ21lbnRzUG9pbnRzKFEseGUpOm5lLmVuZHNXaXRoKCJ0YXhpIik/ZS5maW5kVGF4aVBvaW50cyhRLHhlKTpuZT09PSJzdHJhaWdodCJ8fCF0ZSYmRC5lbGVzLmxlbmd0aCUyPT09MSYmdWU9PT1NYXRoLmZsb29yKEQuZWxlcy5sZW5ndGgvMik/ZS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKFEpOmUuZmluZEJlemllclBvaW50cyhRLHhlLHVlLHRlLGhlKSxlLmZpbmRFbmRwb2ludHMoUSksZS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKFEseGUpLGUuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcoUSksZS5zdG9yZUFsbHB0cyhRKSxlLnN0b3JlRWRnZVByb2plY3Rpb25zKFEpLGUuY2FsY3VsYXRlQXJyb3dBbmdsZXMoUSksZS5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKFEpLGUuY2FsY3VsYXRlTGFiZWxBbmdsZXMoUSl9fSwiX2xvb3AiKSx3PTA7dzxzLmxlbmd0aDt3KyspUyh3KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cyhsKX19O28odzFlLCJnZXRQdHMiKTtZYS5nZXRTZWdtZW50UG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7dGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCk7dmFyIHI9ZS5lZGdlVHlwZTtpZihyPT09InNlZ21lbnRzIilyZXR1cm4gdzFlKGUuc2VncHRzKX07WWEuZ2V0Q29udHJvbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3RoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpO3ZhciByPWUuZWRnZVR5cGU7aWYocj09PSJiZXppZXIifHxyPT09Im11bHRpYmV6aWVyInx8cj09PSJzZWxmInx8cj09PSJjb21wb3VuZCIpcmV0dXJuIHcxZShlLmN0cmxwdHMpfTtZYS5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCkse3g6ZS5taWRYLHk6ZS5taWRZfX07djQ9e307djQubWFudWFsRW5kcHRUb1B4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXQucG9zaXRpb24oKSxpPXQub3V0ZXJXaWR0aCgpLGE9dC5vdXRlckhlaWdodCgpLHM9dC5fcHJpdmF0ZS5yc2NyYXRjaDtpZihlLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBsPVtlLnBmVmFsdWVbMF0sZS5wZlZhbHVlWzFdXTtyZXR1cm4gZS51bml0c1swXT09PSIlIiYmKGxbMF09bFswXSppKSxlLnVuaXRzWzFdPT09IiUiJiYobFsxXT1sWzFdKmEpLGxbMF0rPW4ueCxsWzFdKz1uLnksbH1lbHNle3ZhciB1PWUucGZWYWx1ZVswXTt1PS1NYXRoLlBJLzIrdTt2YXIgaD0yKk1hdGgubWF4KGksYSksZj1bbi54K01hdGguY29zKHUpKmgsbi55K01hdGguc2luKHUpKmhdO3JldHVybiByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUodCldLmludGVyc2VjdExpbmUobi54LG4ueSxpLGEsZlswXSxmWzFdLDAsdC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6dC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLHMpfX07djQuZmluZEVuZHBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHIsbj10LnNvdXJjZSgpWzBdLGk9dC50YXJnZXQoKVswXSxhPW4ucG9zaXRpb24oKSxzPWkucG9zaXRpb24oKSxsPXQucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSx1PXQucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxoPXQucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxmPXQucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxkPW4uX3ByaXZhdGUucnNjcmF0Y2gscD1pLl9wcml2YXRlLnJzY3JhdGNoLG09dC5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZz10Ll9wcml2YXRlLnJzY3JhdGNoLHk9Zy5lZGdlVHlwZSx2PW09PT0idGF4aSIseD15PT09InNlbGYifHx5PT09ImNvbXBvdW5kIixiPXk9PT0iYmV6aWVyInx8eT09PSJtdWx0aWJlemllciJ8fHgsVD15IT09ImJlemllciIsUz15PT09InN0cmFpZ2h0Inx8eT09PSJzZWdtZW50cyIsdz15PT09InNlZ21lbnRzIixFPWJ8fFR8fFMsXz14fHx2LEM9dC5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLEQ9Xz8ib3V0c2lkZS10by1ub2RlIjpDLnZhbHVlLE89bi5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6bi5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLFI9dC5wc3R5bGUoInRhcmdldC1lbmRwb2ludCIpLGs9Xz8ib3V0c2lkZS10by1ub2RlIjpSLnZhbHVlLEw9aS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6aS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlO2cuc3JjTWFuRW5kcHQ9QyxnLnRndE1hbkVuZHB0PVI7dmFyIEEsSSxNLFA7aWYoYil7dmFyIEI9W2cuY3RybHB0c1swXSxnLmN0cmxwdHNbMV1dLEY9VD9bZy5jdHJscHRzW2cuY3RybHB0cy5sZW5ndGgtMl0sZy5jdHJscHRzW2cuY3RybHB0cy5sZW5ndGgtMV1dOkI7QT1GLEk9Qn1lbHNlIGlmKFMpe3ZhciB6PXc/Zy5zZWdwdHMuc2xpY2UoMCwyKTpbcy54LHMueV0sJD13P2cuc2VncHRzLnNsaWNlKGcuc2VncHRzLmxlbmd0aC0yKTpbYS54LGEueV07QT0kLEk9en1pZihrPT09Imluc2lkZS10by1ub2RlIilyPVtzLngscy55XTtlbHNlIGlmKFIudW5pdHMpcj10aGlzLm1hbnVhbEVuZHB0VG9QeChpLFIpO2Vsc2UgaWYoaz09PSJvdXRzaWRlLXRvLWxpbmUiKXI9Zy50Z3RJbnRuO2Vsc2UgaWYoaz09PSJvdXRzaWRlLXRvLW5vZGUifHxrPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCI/TT1BOihrPT09Im91dHNpZGUtdG8tbGluZSJ8fGs9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihNPVthLngsYS55XSkscj1lLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoaSldLmludGVyc2VjdExpbmUocy54LHMueSxpLm91dGVyV2lkdGgoKSxpLm91dGVySGVpZ2h0KCksTVswXSxNWzFdLDAsTCxwKSxrPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fGs9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIFU9aS5fcHJpdmF0ZS5yc2NyYXRjaCxLPVUubGFiZWxXaWR0aCxlZT1VLmxhYmVsSGVpZ2h0LFk9VS5sYWJlbFgsY2U9VS5sYWJlbFksWj1LLzIsdWU9ZWUvMixRPWkucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO1E9PT0idG9wIj9jZS09dWU6UT09PSJib3R0b20iJiYoY2UrPXVlKTt2YXIgaj1pLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZTtqPT09ImxlZnQiP1ktPVo6aj09PSJyaWdodCImJihZKz1aKTt2YXIgbmU9YTQoTVswXSxNWzFdLFtZLVosY2UtdWUsWStaLGNlLXVlLFkrWixjZSt1ZSxZLVosY2UrdWVdLHMueCxzLnkpO2lmKG5lLmxlbmd0aD4wKXt2YXIgdGU9YSxoZT1XcCh0ZSxqMShyKSksbGU9V3AodGUsajEobmUpKSxKPWhlO2lmKGxlPGhlJiYocj1uZSxKPWxlKSxuZS5sZW5ndGg+Mil7dmFyIFNlPVdwKHRlLHt4Om5lWzJdLHk6bmVbM119KTtTZTxKJiYocj1bbmVbMl0sbmVbM11dKX19fXZhciBzZT15NihyLEEsZS5hcnJvd1NoYXBlc1tsXS5zcGFjaW5nKHQpK2gpLGFlPXk2KHIsQSxlLmFycm93U2hhcGVzW2xdLmdhcCh0KStoKTtpZihnLmVuZFg9YWVbMF0sZy5lbmRZPWFlWzFdLGcuYXJyb3dFbmRYPXNlWzBdLGcuYXJyb3dFbmRZPXNlWzFdLEQ9PT0iaW5zaWRlLXRvLW5vZGUiKXI9W2EueCxhLnldO2Vsc2UgaWYoQy51bml0cylyPXRoaXMubWFudWFsRW5kcHRUb1B4KG4sQyk7ZWxzZSBpZihEPT09Im91dHNpZGUtdG8tbGluZSIpcj1nLnNyY0ludG47ZWxzZSBpZihEPT09Im91dHNpZGUtdG8tbm9kZSJ8fEQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9QPUk6KEQ9PT0ib3V0c2lkZS10by1saW5lInx8RD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKFA9W3MueCxzLnldKSxyPWUubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZShuKV0uaW50ZXJzZWN0TGluZShhLngsYS55LG4ub3V0ZXJXaWR0aCgpLG4ub3V0ZXJIZWlnaHQoKSxQWzBdLFBbMV0sMCxPLGQpLEQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8RD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKXt2YXIgT2U9bi5fcHJpdmF0ZS5yc2NyYXRjaCx5ZT1PZS5sYWJlbFdpZHRoLEJlPU9lLmxhYmVsSGVpZ2h0LEhlPU9lLmxhYmVsWCx6ZT1PZS5sYWJlbFksTGU9eWUvMixJZT1CZS8yLHhlPW4ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO3hlPT09InRvcCI/emUtPUllOnhlPT09ImJvdHRvbSImJih6ZSs9SWUpO3ZhciBxPW4ucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO3E9PT0ibGVmdCI/SGUtPUxlOnE9PT0icmlnaHQiJiYoSGUrPUxlKTt2YXIgZGU9YTQoUFswXSxQWzFdLFtIZS1MZSx6ZS1JZSxIZStMZSx6ZS1JZSxIZStMZSx6ZStJZSxIZS1MZSx6ZStJZV0sYS54LGEueSk7aWYoZGUubGVuZ3RoPjApe3ZhciBpZT1zLG9lPVdwKGllLGoxKHIpKSxWPVdwKGllLGoxKGRlKSksVGU9b2U7aWYoVjxvZSYmKHI9W2RlWzBdLGRlWzFdXSxUZT1WKSxkZS5sZW5ndGg+Mil7dmFyIFc9V3AoaWUse3g6ZGVbMl0seTpkZVszXX0pO1c8VGUmJihyPVtkZVsyXSxkZVszXV0pfX19dmFyIHBlPXk2KHIsSSxlLmFycm93U2hhcGVzW3VdLnNwYWNpbmcodCkrZiksdmU9eTYocixJLGUuYXJyb3dTaGFwZXNbdV0uZ2FwKHQpK2YpO2cuc3RhcnRYPXZlWzBdLGcuc3RhcnRZPXZlWzFdLGcuYXJyb3dTdGFydFg9cGVbMF0sZy5hcnJvd1N0YXJ0WT1wZVsxXSxFJiYoIV90KGcuc3RhcnRYKXx8IV90KGcuc3RhcnRZKXx8IV90KGcuZW5kWCl8fCFfdChnLmVuZFkpP2cuYmFkTGluZT0hMDpnLmJhZExpbmU9ITEpfTt2NC5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzBdLHk6ZS5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93U3RhcnRYLHk6ZS5hcnJvd1N0YXJ0WX19fTt2NC5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzJdLHk6ZS5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93RW5kWCx5OmUuYXJyb3dFbmRZfX19O25GPXt9O28oWVplLCJwdXNoQmV6aWVyUHRzIik7bkYuc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZSxyPWUucnNjcmF0Y2gsbj1yLmVkZ2VUeXBlO2lmKGUucnN0eWxlLmJlemllclB0cz1udWxsLGUucnN0eWxlLmxpbmVQdHM9bnVsbCxlLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLG49PT0ibXVsdGliZXppZXIifHxuPT09ImJlemllciJ8fG49PT0ic2VsZiJ8fG49PT0iY29tcG91bmQiKXtlLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBpPTA7aSs1PHIuYWxscHRzLmxlbmd0aDtpKz00KVlaZSh0aGlzLHQsci5hbGxwdHMuc2xpY2UoaSxpKzYpKX1lbHNlIGlmKG49PT0ic2VnbWVudHMiKWZvcih2YXIgYT1lLnJzdHlsZS5saW5lUHRzPVtdLGk9MDtpKzE8ci5hbGxwdHMubGVuZ3RoO2krPTIpYS5wdXNoKHt4OnIuYWxscHRzW2ldLHk6ci5hbGxwdHNbaSsxXX0pO2Vsc2UgaWYobj09PSJoYXlzdGFjayIpe3ZhciBzPXIuaGF5c3RhY2tQdHM7ZS5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4OnNbMF0seTpzWzFdfSx7eDpzWzJdLHk6c1szXX1dfWUucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsdC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofTtuRi5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh0KX07ZXU9e307ZXUucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJsYWJlbCIpLnN0clZhbHVlO2lmKCFQZihlKSl7dmFyIHIsbixpPXQuX3ByaXZhdGUsYT10LndpZHRoKCkscz10LmhlaWdodCgpLGw9dC5wYWRkaW5nKCksdT10LnBvc2l0aW9uKCksaD10LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxmPXQucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLGQ9aS5yc2NyYXRjaCxwPWkucnN0eWxlO3N3aXRjaChoKXtjYXNlImxlZnQiOnI9dS54LWEvMi1sO2JyZWFrO2Nhc2UicmlnaHQiOnI9dS54K2EvMitsO2JyZWFrO2RlZmF1bHQ6cj11Lnh9c3dpdGNoKGYpe2Nhc2UidG9wIjpuPXUueS1zLzItbDticmVhaztjYXNlImJvdHRvbSI6bj11Lnkrcy8yK2w7YnJlYWs7ZGVmYXVsdDpuPXUueX1kLmxhYmVsWD1yLGQubGFiZWxZPW4scC5sYWJlbFg9cixwLmxhYmVsWT1uLHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXModCksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O2sxZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49TWF0aC5hdGFuKHIvZSk7cmV0dXJuIGU9PT0wJiZuPDAmJihuPW4qLTEpLG59LCJsaW5lQW5nbGVGcm9tRGVsdGEiKSxFMWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPXIueC1lLngsaT1yLnktZS55O3JldHVybiBrMWUobixpKX0sImxpbmVBbmdsZSIpLFhaZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWk0KDAsaS0uMDAxLDEpLHM9aTQoMCxpKy4wMDEsMSksbD1RMShlLHIsbixhKSx1PVExKGUscixuLHMpO3JldHVybiBFMWUobCx1KX0sImJlemllckFuZ2xlIik7ZXUucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX3ByaXZhdGUsbj1yLnJzY3JhdGNoLGk9dGhpcyxhPXttaWQ6dC5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnQucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6dC5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihhLm1pZHx8YS5zb3VyY2V8fGEudGFyZ2V0KXtlPXt4Om4ubWlkWCx5Om4ubWlkWX07dmFyIHM9byhmdW5jdGlvbihkLHAsbSl7TmYoci5yc2NyYXRjaCxkLHAsbSksTmYoci5yc3R5bGUsZCxwLG0pfSwic2V0UnMiKTtzKCJsYWJlbFgiLG51bGwsZS54KSxzKCJsYWJlbFkiLG51bGwsZS55KTt2YXIgbD1rMWUobi5taWREaXNwWCxuLm1pZERpc3BZKTtzKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCxsKTt2YXIgdT1vKGZ1bmN0aW9uIGYoKXtpZihmLmNhY2hlKXJldHVybiBmLmNhY2hlO2Zvcih2YXIgZD1bXSxwPTA7cCs1PG4uYWxscHRzLmxlbmd0aDtwKz00KXt2YXIgbT17eDpuLmFsbHB0c1twXSx5Om4uYWxscHRzW3ArMV19LGc9e3g6bi5hbGxwdHNbcCsyXSx5Om4uYWxscHRzW3ArM119LHk9e3g6bi5hbGxwdHNbcCs0XSx5Om4uYWxscHRzW3ArNV19O2QucHVzaCh7cDA6bSxwMTpnLHAyOnksc3RhcnREaXN0OjAsbGVuZ3RoOjAsc2VnbWVudHM6W119KX12YXIgdj1yLnJzdHlsZS5iZXppZXJQdHMseD1pLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBiKF8sQyxELE8sUil7dmFyIGs9UXAoQyxEKSxMPV8uc2VnbWVudHNbXy5zZWdtZW50cy5sZW5ndGgtMV0sQT17cDA6QyxwMTpELHQwOk8sdDE6UixzdGFydERpc3Q6TD9MLnN0YXJ0RGlzdCtMLmxlbmd0aDowLGxlbmd0aDprfTtfLnNlZ21lbnRzLnB1c2goQSksXy5sZW5ndGgrPWt9byhiLCJhZGRTZWdtZW50Iik7Zm9yKHZhciBUPTA7VDxkLmxlbmd0aDtUKyspe3ZhciBTPWRbVF0sdz1kW1QtMV07dyYmKFMuc3RhcnREaXN0PXcuc3RhcnREaXN0K3cubGVuZ3RoKSxiKFMsUy5wMCx2W1QqeF0sMCxpLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIEU9MDtFPHgtMTtFKyspYihTLHZbVCp4K0VdLHZbVCp4K0UrMV0saS5iZXppZXJQcm9qUGN0c1tFXSxpLmJlemllclByb2pQY3RzW0UrMV0pO2IoUyx2W1QqeCt4LTFdLFMucDIsaS5iZXppZXJQcm9qUGN0c1t4LTFdLDEpfXJldHVybiBmLmNhY2hlPWR9LCJjcmVhdGVDb250cm9sUG9pbnRJbmZvIiksaD1vKGZ1bmN0aW9uKGQpe3ZhciBwLG09ZD09PSJzb3VyY2UiO2lmKGFbZF0pe3ZhciBnPXQucHN0eWxlKGQrIi10ZXh0LW9mZnNldCIpLnBmVmFsdWU7c3dpdGNoKG4uZWRnZVR5cGUpe2Nhc2Uic2VsZiI6Y2FzZSJjb21wb3VuZCI6Y2FzZSJiZXppZXIiOmNhc2UibXVsdGliZXppZXIiOntmb3IodmFyIHk9dSgpLHYseD0wLGI9MCxUPTA7VDx5Lmxlbmd0aDtUKyspe2Zvcih2YXIgUz15W20/VDp5Lmxlbmd0aC0xLVRdLHc9MDt3PFMuc2VnbWVudHMubGVuZ3RoO3crKyl7dmFyIEU9Uy5zZWdtZW50c1ttP3c6Uy5zZWdtZW50cy5sZW5ndGgtMS13XSxfPVQ9PT15Lmxlbmd0aC0xJiZ3PT09Uy5zZWdtZW50cy5sZW5ndGgtMTtpZih4PWIsYis9RS5sZW5ndGgsYj49Z3x8Xyl7dj17Y3A6UyxzZWdtZW50OkV9O2JyZWFrfX1pZih2KWJyZWFrfXZhciBDPXYuY3AsRD12LnNlZ21lbnQsTz0oZy14KS9ELmxlbmd0aCxSPUQudDEtRC50MCxrPW0/RC50MCtSKk86RC50MS1SKk87az1pNCgwLGssMSksZT1RMShDLnAwLEMucDEsQy5wMixrKSxwPVhaZShDLnAwLEMucDEsQy5wMixrKTticmVha31jYXNlInN0cmFpZ2h0IjpjYXNlInNlZ21lbnRzIjpjYXNlImhheXN0YWNrIjp7Zm9yKHZhciBMPTAsQSxJLE0sUCxCPW4uYWxscHRzLmxlbmd0aCxGPTA7RiszPEImJihtPyhNPXt4Om4uYWxscHRzW0ZdLHk6bi5hbGxwdHNbRisxXX0sUD17eDpuLmFsbHB0c1tGKzJdLHk6bi5hbGxwdHNbRiszXX0pOihNPXt4Om4uYWxscHRzW0ItMi1GXSx5Om4uYWxscHRzW0ItMS1GXX0sUD17eDpuLmFsbHB0c1tCLTQtRl0seTpuLmFsbHB0c1tCLTMtRl19KSxBPVFwKE0sUCksST1MLEwrPUEsIShMPj1nKSk7Ris9Mik7dmFyIHo9Zy1JLCQ9ei9BOyQ9aTQoMCwkLDEpLGU9SlllKE0sUCwkKSxwPUUxZShNLFApO2JyZWFrfX1zKCJsYWJlbFgiLGQsZS54KSxzKCJsYWJlbFkiLGQsZS55KSxzKCJsYWJlbEF1dG9BbmdsZSIsZCxwKX19LCJjYWxjdWxhdGVFbmRQcm9qZWN0aW9uIik7aCgic291cmNlIiksaCgidGFyZ2V0IiksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O2V1LmFwcGx5TGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3RoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0KSx0LmlzRWRnZSgpJiYodGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKHQsInNvdXJjZSIpLHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0LCJ0YXJnZXQiKSl9O2V1LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49dGhpcy5nZXRMYWJlbFRleHQodCxlKSxpPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQsbiksYT10LnBzdHlsZSgibGluZS1oZWlnaHQiKS5wZlZhbHVlLHM9dC5wc3R5bGUoInRleHQtd3JhcCIpLnN0clZhbHVlLGw9V2woci5yc2NyYXRjaCwibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGUpfHxbXSx1PXMhPT0id3JhcCI/MTpNYXRoLm1heChsLmxlbmd0aCwxKSxoPWkuaGVpZ2h0L3UsZj1oKmEsZD1pLndpZHRoLHA9aS5oZWlnaHQrKHUtMSkqKGEtMSkqaDtOZihyLnJzdHlsZSwibGFiZWxXaWR0aCIsZSxkKSxOZihyLnJzY3JhdGNoLCJsYWJlbFdpZHRoIixlLGQpLE5mKHIucnN0eWxlLCJsYWJlbEhlaWdodCIsZSxwKSxOZihyLnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZSxwKSxOZihyLnJzY3JhdGNoLCJsYWJlbExpbmVIZWlnaHQiLGUsZil9O2V1LmdldExhYmVsVGV4dD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUsbj1lP2UrIi0iOiIiLGk9dC5wc3R5bGUobisibGFiZWwiKS5zdHJWYWx1ZSxhPXQucHN0eWxlKCJ0ZXh0LXRyYW5zZm9ybSIpLnZhbHVlLHM9byhmdW5jdGlvbihLLGVlKXtyZXR1cm4gZWU/KE5mKHIucnNjcmF0Y2gsSyxlLGVlKSxlZSk6V2woci5yc2NyYXRjaCxLLGUpfSwicnNjcmF0Y2giKTtpZighaSlyZXR1cm4iIjthPT0ibm9uZSJ8fChhPT0idXBwZXJjYXNlIj9pPWkudG9VcHBlckNhc2UoKTphPT0ibG93ZXJjYXNlIiYmKGk9aS50b0xvd2VyQ2FzZSgpKSk7dmFyIGw9dC5wc3R5bGUoInRleHQtd3JhcCIpLnZhbHVlO2lmKGw9PT0id3JhcCIpe3ZhciB1PXMoImxhYmVsS2V5Iik7aWYodSE9bnVsbCYmcygibGFiZWxXcmFwS2V5Iik9PT11KXJldHVybiBzKCJsYWJlbFdyYXBDYWNoZWRUZXh0Iik7Zm9yKHZhciBoPSJcdTIwMEIiLGY9aS5zcGxpdChgCmApLGQ9dC5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxwPXQucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxtPXA9PT0iYW55d2hlcmUiLGc9W10seT0vW1xzXHUyMDBiXSt8JC9nLHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIHg9Zlt2XSxiPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQseCksVD1iLndpZHRoO2lmKG0pe3ZhciBTPXguc3BsaXQoIiIpLmpvaW4oaCk7eD1TfWlmKFQ+ZCl7dmFyIHc9eC5tYXRjaEFsbCh5KSxFPSIiLF89MCxDPXZvKHcpLEQ7dHJ5e2ZvcihDLnMoKTshKEQ9Qy5uKCkpLmRvbmU7KXt2YXIgTz1ELnZhbHVlLFI9T1swXSxrPXguc3Vic3RyaW5nKF8sTy5pbmRleCk7Xz1PLmluZGV4K1IubGVuZ3RoO3ZhciBMPUUubGVuZ3RoPT09MD9rOkUraytSLEE9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxMKSxJPUEud2lkdGg7STw9ZD9FKz1rK1I6KEUmJmcucHVzaChFKSxFPWsrUil9fWNhdGNoKFUpe0MuZShVKX1maW5hbGx5e0MuZigpfUUubWF0Y2goL15bXHNcdTIwMGJdKyQvKXx8Zy5wdXNoKEUpfWVsc2UgZy5wdXNoKHgpfXMoImxhYmVsV3JhcENhY2hlZExpbmVzIixnKSxpPXMoImxhYmVsV3JhcENhY2hlZFRleHQiLGcuam9pbihgCmApKSxzKCJsYWJlbFdyYXBLZXkiLHUpfWVsc2UgaWYobD09PSJlbGxpcHNpcyIpe3ZhciBNPXQucHN0eWxlKCJ0ZXh0LW1heC13aWR0aCIpLnBmVmFsdWUsUD0iIixCPSJcdTIwMjYiLEY9ITE7aWYodGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxpKS53aWR0aDxNKXJldHVybiBpO2Zvcih2YXIgej0wO3o8aS5sZW5ndGg7eisrKXt2YXIgJD10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LFAraVt6XStCKS53aWR0aDtpZigkPk0pYnJlYWs7UCs9aVt6XSx6PT09aS5sZW5ndGgtMSYmKEY9ITApfXJldHVybiBGfHwoUCs9QiksUH1yZXR1cm4gaX07ZXUuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJ0ZXh0LWp1c3RpZmljYXRpb24iKS5zdHJWYWx1ZSxyPXQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnN0clZhbHVlO2lmKGU9PT0iYXV0byIpaWYodC5pc05vZGUoKSlzd2l0Y2gocil7Y2FzZSJsZWZ0IjpyZXR1cm4icmlnaHQiO2Nhc2UicmlnaHQiOnJldHVybiJsZWZ0IjtkZWZhdWx0OnJldHVybiJjZW50ZXIifWVsc2UgcmV0dXJuImNlbnRlciI7ZWxzZSByZXR1cm4gZX07ZXUuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3kud2luZG93KCksaT1uLmRvY3VtZW50LGE9QmYoZSx0Ll9wcml2YXRlLmxhYmVsRGltc0tleSkscz1yLmxhYmVsRGltQ2FjaGV8fChyLmxhYmVsRGltQ2FjaGU9W10pLGw9c1thXTtpZihsIT1udWxsKXJldHVybiBsO3ZhciB1PTAsaD10LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLGY9dC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsZD10LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxwPXQucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLG09dGhpcy5sYWJlbENhbGNDYW52YXMsZz10aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7aWYoIW0pe209dGhpcy5sYWJlbENhbGNDYW52YXM9aS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxnPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1tLmdldENvbnRleHQoIjJkIik7dmFyIHk9bS5zdHlsZTt5LnBvc2l0aW9uPSJhYnNvbHV0ZSIseS5sZWZ0PSItOTk5OXB4Iix5LnRvcD0iLTk5OTlweCIseS56SW5kZXg9Ii0xIix5LnZpc2liaWxpdHk9ImhpZGRlbiIseS5wb2ludGVyRXZlbnRzPSJub25lIn1nLmZvbnQ9IiIuY29uY2F0KGgsIiAiKS5jb25jYXQocCwiICIpLmNvbmNhdChmLCJweCAiKS5jb25jYXQoZCk7Zm9yKHZhciB2PTAseD0wLGI9ZS5zcGxpdChgCmApLFQ9MDtUPGIubGVuZ3RoO1QrKyl7dmFyIFM9YltUXSx3PWcubWVhc3VyZVRleHQoUyksRT1NYXRoLmNlaWwody53aWR0aCksXz1mO3Y9TWF0aC5tYXgoRSx2KSx4Kz1ffXJldHVybiB2Kz11LHgrPXUsc1thXT17d2lkdGg6dixoZWlnaHQ6eH19O2V1LmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49ci5yc2NyYXRjaCxpPXQuaXNFZGdlKCksYT1lP2UrIi0iOiIiLHM9dC5wc3R5bGUoYSsidGV4dC1yb3RhdGlvbiIpLGw9cy5zdHJWYWx1ZTtyZXR1cm4gbD09PSJub25lIj8wOmkmJmw9PT0iYXV0b3JvdGF0ZSI/bi5sYWJlbEF1dG9BbmdsZTpsPT09ImF1dG9yb3RhdGUiPzA6cy5wZlZhbHVlfTtldS5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5pc0VkZ2UoKSxuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoO2kubGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCksciYmKGkuc291cmNlTGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCwic291cmNlIiksaS50YXJnZXRMYWJlbEFuZ2xlPWUuY2FsY3VsYXRlTGFiZWxBbmdsZSh0LCJ0YXJnZXQiKSl9O1MxZT17fSxHbWU9MjgsVm1lPSExO1MxZS5nZXROb2RlU2hhcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHI9PT0iY3V0cmVjdGFuZ2xlIiYmKHQud2lkdGgoKTxHbWV8fHQuaGVpZ2h0KCk8R21lKSlyZXR1cm4gVm1lfHwoaG4oIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxWbWU9ITApLCJyZWN0YW5nbGUiO2lmKHQuaXNQYXJlbnQoKSlyZXR1cm4gcj09PSJyZWN0YW5nbGUifHxyPT09InJvdW5kcmVjdGFuZ2xlInx8cj09PSJyb3VuZC1yZWN0YW5nbGUifHxyPT09ImN1dHJlY3RhbmdsZSJ8fHI9PT0iY3V0LXJlY3RhbmdsZSJ8fHI9PT0iYmFycmVsIj9yOiJyZWN0YW5nbGUiO2lmKHI9PT0icG9seWdvbiIpe3ZhciBuPXQucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnZhbHVlO3JldHVybiBlLm5vZGVTaGFwZXMubWFrZVBvbHlnb24obikubmFtZX1yZXR1cm4gcn07aEM9e307aEMucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3ksZT10LmNvbGxlY3Rpb24oKSxyPXRoaXMsbj1vKGZ1bmN0aW9uKHMpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtpZihlLm1lcmdlKHMpLGwpZm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5yc3R5bGU7ZC5jbGVhbj0hMSxkLmNsZWFuQ29ubmVjdGVkPSExfX0sImVucXVldWUiKTtyLmJpbmRlcih0KS5vbigiYm91bmRzLiogZGlydHkuKiIsbyhmdW5jdGlvbihzKXt2YXIgbD1zLnRhcmdldDtuKGwpfSwib25EaXJ0eUJvdW5kcyIpKS5vbigic3R5bGUuKiBiYWNrZ3JvdW5kLioiLG8oZnVuY3Rpb24ocyl7dmFyIGw9cy50YXJnZXQ7bihsLCExKX0sIm9uRGlydHlTdHlsZSIpKTt2YXIgaT1vKGZ1bmN0aW9uKHMpe2lmKHMpe3ZhciBsPXIub25VcGRhdGVFbGVDYWxjc0ZucztlLmNsZWFuU3R5bGUoKTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9ZVt1XSxmPWguX3ByaXZhdGUucnN0eWxlO2guaXNOb2RlKCkmJiFmLmNsZWFuQ29ubmVjdGVkJiYobihoLmNvbm5lY3RlZEVkZ2VzKCkpLGYuY2xlYW5Db25uZWN0ZWQ9ITApfWlmKGwpZm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspe3ZhciBwPWxbZF07cChzLGUpfXIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGUpLGU9dC5jb2xsZWN0aW9uKCl9fSwidXBkYXRlRWxlQ2FsY3MiKTtyLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlPWZ1bmN0aW9uKCl7aSghMCl9LHIuYmVmb3JlUmVuZGVyKGksci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKX07aEMub25VcGRhdGVFbGVDYWxjcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnM9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zfHxbXTtlLnB1c2godCl9O2hDLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPW8oZnVuY3Rpb24oUyl7cmV0dXJuIFMuX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkfSwiaXNDbGVhbkNvbm5lY3RlZCIpLG49W10saT1bXTtpZighdGhpcy5kZXN0cm95ZWQpe2U9PT12b2lkIDAmJihlPSEwKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPXMuX3ByaXZhdGUsdT1sLnJzdHlsZTtzLmlzRWRnZSgpJiYoIXIocy5zb3VyY2UoKSl8fCFyKHMudGFyZ2V0KCkpKSYmKHUuY2xlYW49ITEpLCEoZSYmdS5jbGVhbnx8cy5yZW1vdmVkKCkpJiZzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUiJiYobC5ncm91cD09PSJub2RlcyI/aS5wdXNoKHMpOm4ucHVzaChzKSx1LmNsZWFuPSEwKX1mb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPWYuX3ByaXZhdGUscD1kLnJzdHlsZSxtPWYucG9zaXRpb24oKTt0aGlzLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbihmKSxwLm5vZGVYPW0ueCxwLm5vZGVZPW0ueSxwLm5vZGVXPWYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscC5ub2RlSD1mLnBzdHlsZSgiaGVpZ2h0IikucGZWYWx1ZX10aGlzLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zKG4pO2Zvcih2YXIgZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddLHY9eS5fcHJpdmF0ZSx4PXYucnN0eWxlLGI9di5yc2NyYXRjaDt4LnNyY1g9Yi5hcnJvd1N0YXJ0WCx4LnNyY1k9Yi5hcnJvd1N0YXJ0WSx4LnRndFg9Yi5hcnJvd0VuZFgseC50Z3RZPWIuYXJyb3dFbmRZLHgubWlkWD1iLm1pZFgseC5taWRZPWIubWlkWSx4LmxhYmVsQW5nbGU9Yi5sYWJlbEFuZ2xlLHguc291cmNlTGFiZWxBbmdsZT1iLnNvdXJjZUxhYmVsQW5nbGUseC50YXJnZXRMYWJlbEFuZ2xlPWIudGFyZ2V0TGFiZWxBbmdsZX19fTtmQz17fTtmQy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7aWYodCl7dC5kcmFnPVtdLHQubm9uZHJhZz1bXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLGk9bi5fcHJpdmF0ZS5yc2NyYXRjaDtuLmdyYWJiZWQoKSYmIW4uaXNQYXJlbnQoKT9lLnB1c2gobik6aS5pbkRyYWdMYXllcj90LmRyYWcucHVzaChuKTp0Lm5vbmRyYWcucHVzaChuKX1mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LmRyYWcucHVzaChuKX19fTtmQy5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXM9ZnVuY3Rpb24oKXt0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW51bGx9O2ZDLmdldENhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKHQpe2lmKHR8fCF0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzKXt2YXIgZT10aGlzLmN5Lm11dGFibGVFbGVtZW50cygpLnRvQXJyYXkoKTtlLnNvcnQobDFlKSxlLmludGVyYWN0aXZlPWUuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWUsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBlfTtDMWU9e307W3IwLFk2LFlhLHY0LG5GLGV1LFMxZSxoQyxmQ10uZm9yRWFjaChmdW5jdGlvbih0KXtpcihDMWUsdCl9KTtBMWU9e307QTFlLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5pbWFnZUNhY2hlPW4uaW1hZ2VDYWNoZXx8e30sYT1pW3RdO2lmKGEpcmV0dXJuIGEuaW1hZ2UuY29tcGxldGV8fGEuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsciksYS5pbWFnZTthPWlbdF09aVt0XXx8e307dmFyIHM9YS5pbWFnZT1uZXcgSW1hZ2U7cy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe3MuZXJyb3I9ITB9KTt2YXIgbD0iZGF0YToiLHU9dC5zdWJzdHJpbmcoMCxsLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PWw7cmV0dXJuIHV8fChlPWU9PT0ibnVsbCI/bnVsbDplLHMuY3Jvc3NPcmlnaW49ZSkscy5zcmM9dCxzfTtmeT17fTtmeS5yZWdpc3RlckJpbmRpbmc9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyxbMV0pO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgYT1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107aWYobCE9PXZvaWQgMCl7dmFyIHU9dGhpcy5iaW5kZXIobCk7YS5wdXNoKHUub24uYXBwbHkodSxpKSl9fXJldHVybiBhfXZhciB1PXRoaXMuYmluZGVyKHQpO3JldHVybiB1Lm9uLmFwcGx5KHUsaSl9O2Z5LmJpbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5jeS53aW5kb3coKSxuPXQ9PT1yfHx0PT09ci5kb2N1bWVudHx8dD09PXIuZG9jdW1lbnQuYm9keXx8YnFlKHQpO2lmKGUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgaT0hMTt0cnl7dmFyIGE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaT0hMCwhMH0sImdldCIpfSk7ci5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGEpfWNhdGNoe31lLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cz1pfXZhciBzPW8oZnVuY3Rpb24odSxoLGYpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIG4mJmUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoZFsyXT17Y2FwdHVyZTpmPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxlLmJpbmRpbmdzLnB1c2goe3RhcmdldDp0LGFyZ3M6ZH0pLCh0LmFkZEV2ZW50TGlzdGVuZXJ8fHQub24pLmFwcGx5KHQsZCksdGhpc30sIm9uIik7cmV0dXJue29uOnMsYWRkRXZlbnRMaXN0ZW5lcjpzLGFkZExpc3RlbmVyOnMsYmluZDpzfX07Znkubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmlzTm9kZSgpJiYhdC5sb2NrZWQoKSYmdC5ncmFiYmFibGUoKX07Znkubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh0KSYmdC5pbnRlcmFjdGl2ZSgpfTtmeS5sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuY3kud2luZG93KCkscj1vKGZ1bmN0aW9uKHEpe3JldHVybiBxLnNlbGVjdGVkKCl9LCJpc1NlbGVjdGVkIiksbj1vKGZ1bmN0aW9uKHEpe3ZhciBkZT1xLmdldFJvb3ROb2RlKCk7aWYoZGUmJmRlLm5vZGVUeXBlPT09MTEmJmRlLmhvc3QhPT12b2lkIDApcmV0dXJuIGRlfSwiZ2V0U2hhZG93Um9vdCIpLGk9byhmdW5jdGlvbihxLGRlLGllLG9lKXtxPT1udWxsJiYocT10LmN5KTtmb3IodmFyIFY9MDtWPGRlLmxlbmd0aDtWKyspe3ZhciBUZT1kZVtWXTtxLmVtaXQoe29yaWdpbmFsRXZlbnQ6aWUsdHlwZTpUZSxwb3NpdGlvbjpvZX0pfX0sInRyaWdnZXJFdmVudHMiKSxhPW8oZnVuY3Rpb24ocSl7cmV0dXJuIHEuc2hpZnRLZXl8fHEubWV0YUtleXx8cS5jdHJsS2V5fSwiaXNNdWx0U2VsS2V5RG93biIpLHM9byhmdW5jdGlvbihxLGRlKXt2YXIgaWU9ITA7aWYodC5jeS5oYXNDb21wb3VuZE5vZGVzKCkmJnEmJnEucGFubmFibGUoKSlmb3IodmFyIG9lPTA7ZGUmJm9lPGRlLmxlbmd0aDtvZSsrKXt2YXIgcT1kZVtvZV07aWYocS5pc05vZGUoKSYmcS5pc1BhcmVudCgpJiYhcS5wYW5uYWJsZSgpKXtpZT0hMTticmVha319ZWxzZSBpZT0hMDtyZXR1cm4gaWV9LCJhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaCIpLGw9byhmdW5jdGlvbihxKXtxWzBdLl9wcml2YXRlLmdyYWJiZWQ9ITB9LCJzZXRHcmFiYmVkIiksdT1vKGZ1bmN0aW9uKHEpe3FbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sInNldEZyZWVkIiksaD1vKGZ1bmN0aW9uKHEpe3FbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LCJzZXRJbkRyYWdMYXllciIpLGY9byhmdW5jdGlvbihxKXtxWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSwic2V0T3V0RHJhZ0xheWVyIiksZD1vKGZ1bmN0aW9uKHEpe3FbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSEwfSwic2V0R3JhYlRhcmdldCIpLHA9byhmdW5jdGlvbihxKXtxWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sInJlbW92ZUdyYWJUYXJnZXQiKSxtPW8oZnVuY3Rpb24ocSxkZSl7dmFyIGllPWRlLmFkZFRvTGlzdCxvZT1pZS5oYXMocSk7IW9lJiZxLmdyYWJiYWJsZSgpJiYhcS5sb2NrZWQoKSYmKGllLm1lcmdlKHEpLGwocSkpfSwiYWRkVG9EcmFnTGlzdCIpLGc9byhmdW5jdGlvbihxLGRlKXtpZihxLmN5KCkuaGFzQ29tcG91bmROb2RlcygpJiYhKGRlLmluRHJhZ0xheWVyPT1udWxsJiZkZS5hZGRUb0xpc3Q9PW51bGwpKXt2YXIgaWU9cS5kZXNjZW5kYW50cygpO2RlLmluRHJhZ0xheWVyJiYoaWUuZm9yRWFjaChoKSxpZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goaCkpLGRlLmFkZFRvTGlzdCYmbShpZSxkZSl9fSwiYWRkRGVzY2VuZGFudHNUb0RyYWciKSx5PW8oZnVuY3Rpb24ocSxkZSl7ZGU9ZGV8fHt9O3ZhciBpZT1xLmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2RlLmluRHJhZ0xheWVyJiYocS5mb3JFYWNoKGgpLHEubmVpZ2hib3Job29kKCkuc3RkRmlsdGVyKGZ1bmN0aW9uKG9lKXtyZXR1cm4haWV8fG9lLmlzRWRnZSgpfSkuZm9yRWFjaChoKSksZGUuYWRkVG9MaXN0JiZxLmZvckVhY2goZnVuY3Rpb24ob2Upe20ob2UsZGUpfSksZyhxLGRlKSxiKHEse2luRHJhZ0xheWVyOmRlLmluRHJhZ0xheWVyfSksdC51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfSwiYWRkTm9kZXNUb0RyYWciKSx2PXkseD1vKGZ1bmN0aW9uKHEpe3EmJih0LmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbihkZSl7dShkZSksZihkZSkscChkZSl9KSx0LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCkpfSwiZnJlZURyYWdnZWRFbGVtZW50cyIpLGI9byhmdW5jdGlvbihxLGRlKXtpZighKGRlLmluRHJhZ0xheWVyPT1udWxsJiZkZS5hZGRUb0xpc3Q9PW51bGwpJiZxLmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgaWU9cS5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7aWYoIWllLnNhbWUocSkpe3ZhciBvZT1pZS5kZXNjZW5kYW50cygpLnNwYXduU2VsZigpLm1lcmdlKGllKS51bm1lcmdlKHEpLnVubWVyZ2UocS5kZXNjZW5kYW50cygpKSxWPW9lLmNvbm5lY3RlZEVkZ2VzKCk7ZGUuaW5EcmFnTGF5ZXImJihWLmZvckVhY2goaCksb2UuZm9yRWFjaChoKSksZGUuYWRkVG9MaXN0JiZvZS5mb3JFYWNoKGZ1bmN0aW9uKFRlKXttKFRlLGRlKX0pfX19LCJ1cGRhdGVBbmNlc3RvcnNJbkRyYWdMYXllciIpLFQ9byhmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPW51bGwmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1ciE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCl9LCJibHVyQWN0aXZlRG9tRWxlbWVudCIpLFM9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLHc9dHlwZW9mIFJlc2l6ZU9ic2VydmVyPCJ1IjtTPyh0LnJlbW92ZU9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKHhlKXtmb3IodmFyIHE9MDtxPHhlLmxlbmd0aDtxKyspe3ZhciBkZT14ZVtxXSxpZT1kZS5yZW1vdmVkTm9kZXM7aWYoaWUpZm9yKHZhciBvZT0wO29lPGllLmxlbmd0aDtvZSsrKXt2YXIgVj1pZVtvZV07aWYoVj09PXQuY29udGFpbmVyKXt0LmRlc3Ryb3koKTticmVha319fX0pLHQuY29udGFpbmVyLnBhcmVudE5vZGUmJnQucmVtb3ZlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lci5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSk6dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIkRPTU5vZGVSZW1vdmVkIixmdW5jdGlvbih4ZSl7dC5kZXN0cm95KCl9KTt2YXIgRT1wNChmdW5jdGlvbigpe3QuY3kucmVzaXplKCl9LDEwMCk7UyYmKHQuc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihFKSx0LnN0eWxlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lcix7YXR0cmlidXRlczohMH0pKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJyZXNpemUiLEUpLHcmJih0LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihFKSx0LnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodC5jb250YWluZXIpKTt2YXIgXz1vKGZ1bmN0aW9uKHEsZGUpe2Zvcig7cSE9bnVsbDspZGUocSkscT1xLnBhcmVudE5vZGV9LCJmb3JFYWNoVXAiKSxDPW8oZnVuY3Rpb24oKXt0LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfSwiaW52YWxpZGF0ZUNvb3JkcyIpO18odC5jb250YWluZXIsZnVuY3Rpb24oeGUpe3QucmVnaXN0ZXJCaW5kaW5nKHhlLCJ0cmFuc2l0aW9uZW5kIixDKSx0LnJlZ2lzdGVyQmluZGluZyh4ZSwiYW5pbWF0aW9uZW5kIixDKSx0LnJlZ2lzdGVyQmluZGluZyh4ZSwic2Nyb2xsIixDKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oeGUpe3hlLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgRD1vKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0aW9uWzRdIT09MH0sImluQm94U2VsZWN0aW9uIiksTz1vKGZ1bmN0aW9uKHEpe2Zvcih2YXIgZGU9dC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksaWU9ZGVbMF0sb2U9ZGVbMV0sVj1kZVsyXSxUZT1kZVszXSxXPXEudG91Y2hlcz9xLnRvdWNoZXM6W3FdLHBlPSExLHZlPTA7dmU8Vy5sZW5ndGg7dmUrKyl7dmFyIFBlPVdbdmVdO2lmKGllPD1QZS5jbGllbnRYJiZQZS5jbGllbnRYPD1pZStWJiZvZTw9UGUuY2xpZW50WSYmUGUuY2xpZW50WTw9b2UrVGUpe3BlPSEwO2JyZWFrfX1pZighcGUpcmV0dXJuITE7Zm9yKHZhciBfZT10LmNvbnRhaW5lcixiZT1xLnRhcmdldCxWZT1iZS5wYXJlbnROb2RlLERlPSExO1ZlOyl7aWYoVmU9PT1fZSl7RGU9ITA7YnJlYWt9VmU9VmUucGFyZW50Tm9kZX1yZXR1cm4hIURlfSwiZXZlbnRJbkNvbnRhaW5lciIpO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZWRvd24iLG8oZnVuY3Rpb24ocSl7aWYoTyhxKSYmISh0LmhvdmVyRGF0YS53aGljaD09PTEmJnEud2hpY2ghPT0xKSl7cS5wcmV2ZW50RGVmYXVsdCgpLFQoKSx0LmhvdmVyRGF0YS5jYXB0dXJlPSEwLHQuaG92ZXJEYXRhLndoaWNoPXEud2hpY2g7dmFyIGRlPXQuY3ksaWU9W3EuY2xpZW50WCxxLmNsaWVudFldLG9lPXQucHJvamVjdEludG9WaWV3cG9ydChpZVswXSxpZVsxXSksVj10LnNlbGVjdGlvbixUZT10LmZpbmROZWFyZXN0RWxlbWVudHMob2VbMF0sb2VbMV0sITAsITEpLFc9VGVbMF0scGU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt0LmhvdmVyRGF0YS5tZG93blBvcz1vZSx0LmhvdmVyRGF0YS5tZG93bkdQb3M9aWU7dmFyIHZlPW8oZnVuY3Rpb24oKXt0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSExLGNsZWFyVGltZW91dCh0LmhvdmVyRGF0YS50YXBob2xkVGltZW91dCksdC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCF0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkKXt2YXIgcWU9dC5ob3ZlckRhdGEuZG93bjtxZT9xZS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19KTpkZS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19KX19LHQudGFwaG9sZER1cmF0aW9uKX0sImNoZWNrRm9yVGFwaG9sZCIpO2lmKHEud2hpY2g9PTMpe3QuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyIFBlPXtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fTtXPyhXLmFjdGl2YXRlKCksVy5lbWl0KFBlKSx0LmhvdmVyRGF0YS5kb3duPVcpOmRlLmVtaXQoUGUpLHQuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHQuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihxLndoaWNoPT0xKXtXJiZXLmFjdGl2YXRlKCk7e2lmKFchPW51bGwmJnQubm9kZUlzR3JhYmJhYmxlKFcpKXt2YXIgX2U9byhmdW5jdGlvbihxZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6cSx0eXBlOnFlLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fX0sIm1ha2VFdmVudCIpLGJlPW8oZnVuY3Rpb24ocWUpe3FlLmVtaXQoX2UoImdyYWIiKSl9LCJ0cmlnZ2VyR3JhYiIpO2lmKGQoVyksIVcuc2VsZWN0ZWQoKSlwZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWRlLmNvbGxlY3Rpb24oKSx2KFcse2FkZFRvTGlzdDpwZX0pLFcuZW1pdChfZSgiZ3JhYm9uIikpLmVtaXQoX2UoImdyYWIiKSk7ZWxzZXtwZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWRlLmNvbGxlY3Rpb24oKTt2YXIgVmU9ZGUuJChmdW5jdGlvbihEZSl7cmV0dXJuIERlLmlzTm9kZSgpJiZEZS5zZWxlY3RlZCgpJiZ0Lm5vZGVJc0dyYWJiYWJsZShEZSl9KTt5KFZlLHthZGRUb0xpc3Q6cGV9KSxXLmVtaXQoX2UoImdyYWJvbiIpKSxWZS5mb3JFYWNoKGJlKX10LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKX10LmhvdmVyRGF0YS5kb3duPVcsdC5ob3ZlckRhdGEuZG93bnM9VGUsdC5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9aShXLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0scSx7eDpvZVswXSx5Om9lWzFdfSksVz09bnVsbD8oVls0XT0xLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDpvZVswXSx5Om9lWzFdfSx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpOlcucGFubmFibGUoKSYmKFZbNF09MSksdmUoKX1WWzBdPVZbMl09b2VbMF0sVlsxXT1WWzNdPW9lWzFdfX0sIm1vdXNlZG93bkhhbmRsZXIiKSwhMSk7dmFyIFI9bih0LmNvbnRhaW5lcik7dC5yZWdpc3RlckJpbmRpbmcoW2UsUl0sIm1vdXNlbW92ZSIsbyhmdW5jdGlvbihxKXt2YXIgZGU9dC5ob3ZlckRhdGEuY2FwdHVyZTtpZighKCFkZSYmIU8ocSkpKXt2YXIgaWU9ITEsb2U9dC5jeSxWPW9lLnpvb20oKSxUZT1bcS5jbGllbnRYLHEuY2xpZW50WV0sVz10LnByb2plY3RJbnRvVmlld3BvcnQoVGVbMF0sVGVbMV0pLHBlPXQuaG92ZXJEYXRhLm1kb3duUG9zLHZlPXQuaG92ZXJEYXRhLm1kb3duR1BvcyxQZT10LnNlbGVjdGlvbixfZT1udWxsOyF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmKF9lPXQuZmluZE5lYXJlc3RFbGVtZW50KFdbMF0sV1sxXSwhMCwhMSkpO3ZhciBiZT10LmhvdmVyRGF0YS5sYXN0LFZlPXQuaG92ZXJEYXRhLmRvd24sRGU9W1dbMF0tUGVbMl0sV1sxXS1QZVszXV0scWU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxhdDtpZih2ZSl7dmFyIFJ0PVRlWzBdLXZlWzBdLHN0PVJ0KlJ0LFVlPVRlWzFdLXZlWzFdLGN0PVVlKlVlLFdlPXN0K2N0O3QuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9YXQ9V2U+PXQuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIG90PWEocSk7YXQmJih0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwKTt2YXIgWXQ9byhmdW5jdGlvbigpe3ZhciBrdD10LmhvdmVyRGF0YS5kcmFnRGVsdGE9dC5ob3ZlckRhdGEuZHJhZ0RlbHRhfHxbXTtrdC5sZW5ndGg9PT0wPyhrdC5wdXNoKERlWzBdKSxrdC5wdXNoKERlWzFdKSk6KGt0WzBdKz1EZVswXSxrdFsxXSs9RGVbMV0pfSwidXBkYXRlRHJhZ0RlbHRhIik7aWU9ITAsaShfZSxbIm1vdXNlbW92ZSIsInZtb3VzZW1vdmUiLCJ0YXBkcmFnIl0scSx7eDpXWzBdLHk6V1sxXX0pO3ZhciBUdD1vKGZ1bmN0aW9uKCl7dC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LmhvdmVyRGF0YS5zZWxlY3Rpbmd8fG9lLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6V1swXSx5OldbMV19fSksUGVbNF09MSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpfSwiZ29JbnRvQm94TW9kZSIpO2lmKHQuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoYXQpe3ZhciBNdD17b3JpZ2luYWxFdmVudDpxLHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX07VmU/VmUuZW1pdChNdCk6b2UuZW1pdChNdCksdC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXQuaG92ZXJEYXRhLmN4dE92ZXJ8fF9lIT09dC5ob3ZlckRhdGEuY3h0T3ZlcikmJih0LmhvdmVyRGF0YS5jeHRPdmVyJiZ0LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDpXWzBdLHk6V1sxXX19KSx0LmhvdmVyRGF0YS5jeHRPdmVyPV9lLF9lJiZfZS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0ZHJhZ292ZXIiLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX0pKX19ZWxzZSBpZih0LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoaWU9ITAsb2UucGFubmluZ0VuYWJsZWQoKSYmb2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBidDtpZih0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIHV0PXQuaG92ZXJEYXRhLm1kb3duUG9zO2J0PXt4OihXWzBdLXV0WzBdKSpWLHk6KFdbMV0tdXRbMV0pKlZ9LHQuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuPSExfWVsc2UgYnQ9e3g6RGVbMF0qVix5OkRlWzFdKlZ9O29lLnBhbkJ5KGJ0KSxvZS5lbWl0KCJkcmFncGFuIiksdC5ob3ZlckRhdGEuZHJhZ2dlZD0hMH1XPXQucHJvamVjdEludG9WaWV3cG9ydChxLmNsaWVudFgscS5jbGllbnRZKX1lbHNlIGlmKFBlWzRdPT0xJiYoVmU9PW51bGx8fFZlLnBhbm5hYmxlKCkpKXtpZihhdCl7aWYoIXQuaG92ZXJEYXRhLmRyYWdnaW5nJiZvZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihvdHx8IW9lLnBhbm5pbmdFbmFibGVkKCl8fCFvZS51c2VyUGFubmluZ0VuYWJsZWQoKSkpVHQoKTtlbHNlIGlmKCF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJm9lLnBhbm5pbmdFbmFibGVkKCkmJm9lLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgU3Q9cyhWZSx0LmhvdmVyRGF0YS5kb3ducyk7U3QmJih0LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxQZVs0XT0wLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1qMShwZSksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX1WZSYmVmUucGFubmFibGUoKSYmVmUuYWN0aXZlKCkmJlZlLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihWZSYmVmUucGFubmFibGUoKSYmVmUuYWN0aXZlKCkmJlZlLnVuYWN0aXZhdGUoKSwoIVZlfHwhVmUuZ3JhYmJlZCgpKSYmX2UhPWJlJiYoYmUmJmkoYmUsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxxLHt4OldbMF0seTpXWzFdfSksX2UmJmkoX2UsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLHEse3g6V1swXSx5OldbMV19KSx0LmhvdmVyRGF0YS5sYXN0PV9lKSxWZSlpZihhdCl7aWYob2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZvdClWZSYmVmUuZ3JhYmJlZCgpJiYoeChxZSksVmUuZW1pdCgiZnJlZW9uIikscWUuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKFZlLmVtaXQoImRyYWdmcmVlb24iKSxxZS5lbWl0KCJkcmFnZnJlZSIpKSksVHQoKTtlbHNlIGlmKFZlJiZWZS5ncmFiYmVkKCkmJnQubm9kZUlzRHJhZ2dhYmxlKFZlKSl7dmFyIGZ0PSF0LmRyYWdEYXRhLmRpZERyYWc7ZnQmJnQucmVkcmF3SGludCgiZWxlcyIsITApLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMCx0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHkocWUse2luRHJhZ0xheWVyOiEwfSk7dmFyIHZ0PXt4OjAseTowfTtpZihfdChEZVswXSkmJl90KERlWzFdKSYmKHZ0LngrPURlWzBdLHZ0LnkrPURlWzFdLGZ0KSl7dmFyIG50PXQuaG92ZXJEYXRhLmRyYWdEZWx0YTtudCYmX3QobnRbMF0pJiZfdChudFsxXSkmJih2dC54Kz1udFswXSx2dC55Kz1udFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLHFlLnNpbGVudFNoaWZ0KHZ0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXcoKX19ZWxzZSBZdCgpO2llPSEwfWlmKFBlWzJdPVdbMF0sUGVbM109V1sxXSxpZSlyZXR1cm4gcS5zdG9wUHJvcGFnYXRpb24mJnEuc3RvcFByb3BhZ2F0aW9uKCkscS5wcmV2ZW50RGVmYXVsdCYmcS5wcmV2ZW50RGVmYXVsdCgpLCExfX0sIm1vdXNlbW92ZUhhbmRsZXIiKSwhMSk7dmFyIGssTCxBO3QucmVnaXN0ZXJCaW5kaW5nKGUsIm1vdXNldXAiLG8oZnVuY3Rpb24ocSl7aWYoISh0LmhvdmVyRGF0YS53aGljaD09PTEmJnEud2hpY2ghPT0xJiZ0LmhvdmVyRGF0YS5jYXB0dXJlKSl7dmFyIGRlPXQuaG92ZXJEYXRhLmNhcHR1cmU7aWYoZGUpe3QuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIGllPXQuY3ksb2U9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEuY2xpZW50WCxxLmNsaWVudFkpLFY9dC5zZWxlY3Rpb24sVGU9dC5maW5kTmVhcmVzdEVsZW1lbnQob2VbMF0sb2VbMV0sITAsITEpLFc9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxwZT10LmhvdmVyRGF0YS5kb3duLHZlPWEocSk7aWYodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uJiYodC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKSx0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAscGUmJnBlLnVuYWN0aXZhdGUoKSx0LmhvdmVyRGF0YS53aGljaD09PTMpe3ZhciBQZT17b3JpZ2luYWxFdmVudDpxLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19O2lmKHBlP3BlLmVtaXQoUGUpOmllLmVtaXQoUGUpLCF0LmhvdmVyRGF0YS5jeHREcmFnZ2VkKXt2YXIgX2U9e29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fTtwZT9wZS5lbWl0KF9lKTppZS5lbWl0KF9lKX10LmhvdmVyRGF0YS5jeHREcmFnZ2VkPSExLHQuaG92ZXJEYXRhLndoaWNoPW51bGx9ZWxzZSBpZih0LmhvdmVyRGF0YS53aGljaD09PTEpe2lmKGkoVGUsWyJtb3VzZXVwIiwidGFwZW5kIiwidm1vdXNldXAiXSxxLHt4Om9lWzBdLHk6b2VbMV19KSwhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuZHJhZ2dlZCYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXQuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWcmJihpKHBlLFsiY2xpY2siLCJ0YXAiLCJ2Y2xpY2siXSxxLHt4Om9lWzBdLHk6b2VbMV19KSxMPSExLHEudGltZVN0YW1wLUE8PWllLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oayYmY2xlYXJUaW1lb3V0KGspLEw9ITAsQT1udWxsLGkocGUsWyJkYmxjbGljayIsImRibHRhcCIsInZkYmxjbGljayJdLHEse3g6b2VbMF0seTpvZVsxXX0pKTooaz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7THx8aShwZSxbIm9uZWNsaWNrIiwib25ldGFwIiwidm9uZWNsaWNrIl0scSx7eDpvZVswXSx5Om9lWzFdfSl9LGllLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksQT1xLnRpbWVTdGFtcCkpLHBlPT1udWxsJiYhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiYhdC5ob3ZlckRhdGEuZHJhZ2dlZCYmIWEocSkmJihpZS4kKHIpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksVy5sZW5ndGg+MCYmdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz1XPWllLmNvbGxlY3Rpb24oKSksVGU9PXBlJiYhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZUZSE9bnVsbCYmVGUuX3ByaXZhdGUuc2VsZWN0YWJsZSYmKHQuaG92ZXJEYXRhLmRyYWdnaW5nfHwoaWUuc2VsZWN0aW9uVHlwZSgpPT09ImFkZGl0aXZlInx8dmU/VGUuc2VsZWN0ZWQoKT9UZS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOlRlLnNlbGVjdChbInRhcHNlbGVjdCJdKTp2ZXx8KGllLiQocikudW5tZXJnZShUZSkudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxUZS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSksdC5ob3ZlckRhdGEuc2VsZWN0aW5nKXt2YXIgYmU9aWUuY29sbGVjdGlvbih0LmdldEFsbEluQm94KFZbMF0sVlsxXSxWWzJdLFZbM10pKTt0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLGJlLmxlbmd0aD4wJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxpZS5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6cSxwb3NpdGlvbjp7eDpvZVswXSx5Om9lWzFdfX0pO3ZhciBWZT1vKGZ1bmN0aW9uKGF0KXtyZXR1cm4gYXQuc2VsZWN0YWJsZSgpJiYhYXQuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO2llLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fHZlfHxpZS4kKHIpLnVubWVyZ2UoYmUpLnVuc2VsZWN0KCksYmUuZW1pdCgiYm94Iikuc3RkRmlsdGVyKFZlKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx0LnJlZHJhdygpfWlmKHQuaG92ZXJEYXRhLmRyYWdnaW5nJiYodC5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKSwhVls0XSl7dC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIERlPXBlJiZwZS5ncmFiYmVkKCk7eChXKSxEZSYmKHBlLmVtaXQoImZyZWVvbiIpLFcuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKHBlLmVtaXQoImRyYWdmcmVlb24iKSxXLmVtaXQoImRyYWdmcmVlIikpKX19Vls0XT0wLHQuaG92ZXJEYXRhLmRvd249bnVsbCx0LmhvdmVyRGF0YS5jeHRTdGFydGVkPSExLHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITEsdC5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz0hMSx0LmRyYWdEYXRhLmRpZERyYWc9ITEsdC5ob3ZlckRhdGEuZHJhZ2dlZD0hMSx0LmhvdmVyRGF0YS5kcmFnRGVsdGE9W10sdC5ob3ZlckRhdGEubWRvd25Qb3M9bnVsbCx0LmhvdmVyRGF0YS5tZG93bkdQb3M9bnVsbCx0LmhvdmVyRGF0YS53aGljaD1udWxsfX19LCJtb3VzZXVwSGFuZGxlciIpLCExKTt2YXIgST1vKGZ1bmN0aW9uKHEpe2lmKCF0LnNjcm9sbGluZ1BhZ2Upe3ZhciBkZT10LmN5LGllPWRlLnpvb20oKSxvZT1kZS5wYW4oKSxWPXQucHJvamVjdEludG9WaWV3cG9ydChxLmNsaWVudFgscS5jbGllbnRZKSxUZT1bVlswXSppZStvZS54LFZbMV0qaWUrb2UueV07aWYodC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHx0LmhvdmVyRGF0YS5kcmFnZ2luZ3x8dC5ob3ZlckRhdGEuY3h0U3RhcnRlZHx8RCgpKXtxLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKGRlLnBhbm5pbmdFbmFibGVkKCkmJmRlLnVzZXJQYW5uaW5nRW5hYmxlZCgpJiZkZS56b29taW5nRW5hYmxlZCgpJiZkZS51c2VyWm9vbWluZ0VuYWJsZWQoKSl7cS5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS53aGVlbFpvb21pbmc9ITAsY2xlYXJUaW1lb3V0KHQuZGF0YS53aGVlbFRpbWVvdXQpLHQuZGF0YS53aGVlbFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QuZGF0YS53aGVlbFpvb21pbmc9ITEsdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKX0sMTUwKTt2YXIgVztxLmRlbHRhWSE9bnVsbD9XPXEuZGVsdGFZLy0yNTA6cS53aGVlbERlbHRhWSE9bnVsbD9XPXEud2hlZWxEZWx0YVkvMWUzOlc9cS53aGVlbERlbHRhLzFlMyxXPVcqdC53aGVlbFNlbnNpdGl2aXR5O3ZhciBwZT1xLmRlbHRhTW9kZT09PTE7cGUmJihXKj0zMyk7dmFyIHZlPWRlLnpvb20oKSpNYXRoLnBvdygxMCxXKTtxLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSImJih2ZT10Lmdlc3R1cmVTdGFydFpvb20qcS5zY2FsZSksZGUuem9vbSh7bGV2ZWw6dmUscmVuZGVyZWRQb3NpdGlvbjp7eDpUZVswXSx5OlRlWzFdfX0pLGRlLmVtaXQocS50eXBlPT09Imdlc3R1cmVjaGFuZ2UiPyJwaW5jaHpvb20iOiJzY3JvbGx6b29tIil9fX0sIndoZWVsSGFuZGxlciIpO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJ3aGVlbCIsSSwhMCksdC5yZWdpc3RlckJpbmRpbmcoZSwic2Nyb2xsIixvKGZ1bmN0aW9uKHEpe3Quc2Nyb2xsaW5nUGFnZT0hMCxjbGVhclRpbWVvdXQodC5zY3JvbGxpbmdQYWdlVGltZW91dCksdC5zY3JvbGxpbmdQYWdlVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zY3JvbGxpbmdQYWdlPSExfSwyNTApfSwic2Nyb2xsSGFuZGxlciIpLCEwKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwiZ2VzdHVyZXN0YXJ0IixvKGZ1bmN0aW9uKHEpe3QuZ2VzdHVyZVN0YXJ0Wm9vbT10LmN5Lnpvb20oKSx0Lmhhc1RvdWNoU3RhcnRlZHx8cS5wcmV2ZW50RGVmYXVsdCgpfSwiZ2VzdHVyZVN0YXJ0SGFuZGxlciIpLCEwKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwiZ2VzdHVyZWNoYW5nZSIsZnVuY3Rpb24oeGUpe3QuaGFzVG91Y2hTdGFydGVkfHxJKHhlKX0sITApLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZW91dCIsbyhmdW5jdGlvbihxKXt2YXIgZGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEuY2xpZW50WCxxLmNsaWVudFkpO3QuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6Im1vdXNlb3V0Iixwb3NpdGlvbjp7eDpkZVswXSx5OmRlWzFdfX0pfSwibW91c2VPdXRIYW5kbGVyIiksITEpLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZW92ZXIiLG8oZnVuY3Rpb24ocSl7dmFyIGRlPXQucHJvamVjdEludG9WaWV3cG9ydChxLmNsaWVudFgscS5jbGllbnRZKTt0LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJtb3VzZW92ZXIiLHBvc2l0aW9uOnt4OmRlWzBdLHk6ZGVbMV19fSl9LCJtb3VzZU92ZXJIYW5kbGVyIiksITEpO3ZhciBNLFAsQixGLHosJCxVLEssZWUsWSxjZSxaLHVlLFE9byhmdW5jdGlvbihxLGRlLGllLG9lKXtyZXR1cm4gTWF0aC5zcXJ0KChpZS1xKSooaWUtcSkrKG9lLWRlKSoob2UtZGUpKX0sImRpc3RhbmNlIiksaj1vKGZ1bmN0aW9uKHEsZGUsaWUsb2Upe3JldHVybihpZS1xKSooaWUtcSkrKG9lLWRlKSoob2UtZGUpfSwiZGlzdGFuY2VTcSIpLG5lO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJ0b3VjaHN0YXJ0IixuZT1vKGZ1bmN0aW9uKHEpe2lmKHQuaGFzVG91Y2hTdGFydGVkPSEwLCEhTyhxKSl7VCgpLHQudG91Y2hEYXRhLmNhcHR1cmU9ITAsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMDt2YXIgZGU9dC5jeSxpZT10LnRvdWNoRGF0YS5ub3csb2U9dC50b3VjaERhdGEuZWFybGllcjtpZihxLnRvdWNoZXNbMF0pe3ZhciBWPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7aWVbMF09VlswXSxpZVsxXT1WWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIFY9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEudG91Y2hlc1sxXS5jbGllbnRYLHEudG91Y2hlc1sxXS5jbGllbnRZKTtpZVsyXT1WWzBdLGllWzNdPVZbMV19aWYocS50b3VjaGVzWzJdKXt2YXIgVj10LnByb2plY3RJbnRvVmlld3BvcnQocS50b3VjaGVzWzJdLmNsaWVudFgscS50b3VjaGVzWzJdLmNsaWVudFkpO2llWzRdPVZbMF0saWVbNV09VlsxXX1pZihxLnRvdWNoZXNbMV0pe3QudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITAseCh0LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMpO3ZhciBUZT10LmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtlZT1UZVswXSxZPVRlWzFdLGNlPVRlWzJdLFo9VGVbM10sTT1xLnRvdWNoZXNbMF0uY2xpZW50WC1lZSxQPXEudG91Y2hlc1swXS5jbGllbnRZLVksQj1xLnRvdWNoZXNbMV0uY2xpZW50WC1lZSxGPXEudG91Y2hlc1sxXS5jbGllbnRZLVksdWU9MDw9TSYmTTw9Y2UmJjA8PUImJkI8PWNlJiYwPD1QJiZQPD1aJiYwPD1GJiZGPD1aO3ZhciBXPWRlLnBhbigpLHBlPWRlLnpvb20oKTt6PVEoTSxQLEIsRiksJD1qKE0sUCxCLEYpLFU9WyhNK0IpLzIsKFArRikvMl0sSz1bKFVbMF0tVy54KS9wZSwoVVsxXS1XLnkpL3BlXTt2YXIgdmU9MjAwLFBlPXZlKnZlO2lmKCQ8UGUmJiFxLnRvdWNoZXNbMl0pe3ZhciBfZT10LmZpbmROZWFyZXN0RWxlbWVudChpZVswXSxpZVsxXSwhMCwhMCksYmU9dC5maW5kTmVhcmVzdEVsZW1lbnQoaWVbMl0saWVbM10sITAsITApO19lJiZfZS5pc05vZGUoKT8oX2UuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmllWzBdLHk6aWVbMV19fSksdC50b3VjaERhdGEuc3RhcnQ9X2UpOmJlJiZiZS5pc05vZGUoKT8oYmUuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmllWzBdLHk6aWVbMV19fSksdC50b3VjaERhdGEuc3RhcnQ9YmUpOmRlLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aWVbMF0seTppZVsxXX19KSx0LnRvdWNoRGF0YS5zdGFydCYmKHQudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHQudG91Y2hEYXRhLmN4dD0hMCx0LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSExLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXcoKTtyZXR1cm59fWlmKHEudG91Y2hlc1syXSlkZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJnEucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKCFxLnRvdWNoZXNbMV0pe2lmKHEudG91Y2hlc1swXSl7dmFyIFZlPXQuZmluZE5lYXJlc3RFbGVtZW50cyhpZVswXSxpZVsxXSwhMCwhMCksRGU9VmVbMF07aWYoRGUhPW51bGwmJihEZS5hY3RpdmF0ZSgpLHQudG91Y2hEYXRhLnN0YXJ0PURlLHQudG91Y2hEYXRhLnN0YXJ0cz1WZSx0Lm5vZGVJc0dyYWJiYWJsZShEZSkpKXt2YXIgcWU9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzPWRlLmNvbGxlY3Rpb24oKSxhdD1udWxsO3QucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3SGludCgiZHJhZyIsITApLERlLnNlbGVjdGVkKCk/KGF0PWRlLiQoZnVuY3Rpb24oV2Upe3JldHVybiBXZS5zZWxlY3RlZCgpJiZ0Lm5vZGVJc0dyYWJiYWJsZShXZSl9KSx5KGF0LHthZGRUb0xpc3Q6cWV9KSk6dihEZSx7YWRkVG9MaXN0OnFlfSksZChEZSk7dmFyIFJ0PW8oZnVuY3Rpb24ob3Qpe3JldHVybntvcmlnaW5hbEV2ZW50OnEsdHlwZTpvdCxwb3NpdGlvbjp7eDppZVswXSx5OmllWzFdfX19LCJtYWtlRXZlbnQiKTtEZS5lbWl0KFJ0KCJncmFib24iKSksYXQ/YXQuZm9yRWFjaChmdW5jdGlvbihXZSl7V2UuZW1pdChSdCgiZ3JhYiIpKX0pOkRlLmVtaXQoUnQoImdyYWIiKSl9aShEZSxbInRvdWNoc3RhcnQiLCJ0YXBzdGFydCIsInZtb3VzZWRvd24iXSxxLHt4OmllWzBdLHk6aWVbMV19KSxEZT09bnVsbCYmKHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDpWWzBdLHk6VlsxXX0sdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSExLHQudG91Y2hEYXRhLnNpbmdsZVRvdWNoU3RhcnRUaW1lPStuZXcgRGF0ZSxjbGVhclRpbWVvdXQodC50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQpLHQudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPT09ITEmJiF0LnBpbmNoaW5nJiYhdC50b3VjaERhdGEuc2VsZWN0aW5nJiZpKHQudG91Y2hEYXRhLnN0YXJ0LFsidGFwaG9sZCJdLHEse3g6aWVbMF0seTppZVsxXX0pfSx0LnRhcGhvbGREdXJhdGlvbil9fWlmKHEudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgc3Q9dC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFVlPTA7VWU8aWUubGVuZ3RoO1VlKyspc3RbVWVdPW9lW1VlXT1pZVtVZV07dmFyIGN0PXEudG91Y2hlc1swXTt0LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bY3QuY2xpZW50WCxjdC5jbGllbnRZXX19fSwidG91Y2hzdGFydEhhbmRsZXIiKSwhMSk7dmFyIHRlO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNobW92ZSIsdGU9byhmdW5jdGlvbihxKXt2YXIgZGU9dC50b3VjaERhdGEuY2FwdHVyZTtpZighKCFkZSYmIU8ocSkpKXt2YXIgaWU9dC5zZWxlY3Rpb24sb2U9dC5jeSxWPXQudG91Y2hEYXRhLm5vdyxUZT10LnRvdWNoRGF0YS5lYXJsaWVyLFc9b2Uuem9vbSgpO2lmKHEudG91Y2hlc1swXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7VlswXT1wZVswXSxWWzFdPXBlWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMV0uY2xpZW50WCxxLnRvdWNoZXNbMV0uY2xpZW50WSk7VlsyXT1wZVswXSxWWzNdPXBlWzFdfWlmKHEudG91Y2hlc1syXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMl0uY2xpZW50WCxxLnRvdWNoZXNbMl0uY2xpZW50WSk7Vls0XT1wZVswXSxWWzVdPXBlWzFdfXZhciB2ZT10LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbixQZTtpZihkZSYmcS50b3VjaGVzWzBdJiZ2ZSl7Zm9yKHZhciBfZT1bXSxiZT0wO2JlPFYubGVuZ3RoO2JlKyspX2VbYmVdPVZbYmVdLVRlW2JlXTt2YXIgVmU9cS50b3VjaGVzWzBdLmNsaWVudFgtdmVbMF0sRGU9VmUqVmUscWU9cS50b3VjaGVzWzBdLmNsaWVudFktdmVbMV0sYXQ9cWUqcWUsUnQ9RGUrYXQ7UGU9UnQ+PXQudG91Y2hUYXBUaHJlc2hvbGQyfWlmKGRlJiZ0LnRvdWNoRGF0YS5jeHQpe3EucHJldmVudERlZmF1bHQoKTt2YXIgc3Q9cS50b3VjaGVzWzBdLmNsaWVudFgtZWUsVWU9cS50b3VjaGVzWzBdLmNsaWVudFktWSxjdD1xLnRvdWNoZXNbMV0uY2xpZW50WC1lZSxXZT1xLnRvdWNoZXNbMV0uY2xpZW50WS1ZLG90PWooc3QsVWUsY3QsV2UpLFl0PW90LyQsVHQ9MTUwLE10PVR0KlR0LGJ0PTEuNSx1dD1idCpidDtpZihZdD49dXR8fG90Pj1NdCl7dC50b3VjaERhdGEuY3h0PSExLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgU3Q9e29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OlZbMF0seTpWWzFdfX07dC50b3VjaERhdGEuc3RhcnQ/KHQudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KFN0KSx0LnRvdWNoRGF0YS5zdGFydD1udWxsKTpvZS5lbWl0KFN0KX19aWYoZGUmJnQudG91Y2hEYXRhLmN4dCl7dmFyIFN0PXtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0ZHJhZyIscG9zaXRpb246e3g6VlswXSx5OlZbMV19fTt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC50b3VjaERhdGEuc3RhcnQ/dC50b3VjaERhdGEuc3RhcnQuZW1pdChTdCk6b2UuZW1pdChTdCksdC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSEwO3ZhciBmdD10LmZpbmROZWFyZXN0RWxlbWVudChWWzBdLFZbMV0sITAsITApOyghdC50b3VjaERhdGEuY3h0T3Zlcnx8ZnQhPT10LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHQudG91Y2hEYXRhLmN4dE92ZXImJnQudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OlZbMF0seTpWWzFdfX0pLHQudG91Y2hEYXRhLmN4dE92ZXI9ZnQsZnQmJmZ0LmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6VlswXSx5OlZbMV19fSkpfWVsc2UgaWYoZGUmJnEudG91Y2hlc1syXSYmb2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpKXEucHJldmVudERlZmF1bHQoKSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHRoaXMubGFzdFRocmVlVG91Y2g9K25ldyBEYXRlLHQudG91Y2hEYXRhLnNlbGVjdGluZ3x8b2UuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6ImJveHN0YXJ0Iixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19KSx0LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAsdC50b3VjaERhdGEuZGlkU2VsZWN0PSEwLGllWzRdPTEsIWllfHxpZS5sZW5ndGg9PT0wfHxpZVswXT09PXZvaWQgMD8oaWVbMF09KFZbMF0rVlsyXStWWzRdKS8zLGllWzFdPShWWzFdK1ZbM10rVls1XSkvMyxpZVsyXT0oVlswXStWWzJdK1ZbNF0pLzMrMSxpZVszXT0oVlsxXStWWzNdK1ZbNV0pLzMrMSk6KGllWzJdPShWWzBdK1ZbMl0rVls0XSkvMyxpZVszXT0oVlsxXStWWzNdK1ZbNV0pLzMpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKTtlbHNlIGlmKGRlJiZxLnRvdWNoZXNbMV0mJiF0LnRvdWNoRGF0YS5kaWRTZWxlY3QmJm9lLnpvb21pbmdFbmFibGVkKCkmJm9lLnBhbm5pbmdFbmFibGVkKCkmJm9lLnVzZXJab29taW5nRW5hYmxlZCgpJiZvZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7cS5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgdnQ9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKHZ0KXt0LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIG50PTA7bnQ8dnQubGVuZ3RoO250Kyspe3ZhciBwbj12dFtudF0uX3ByaXZhdGU7cG4uZ3JhYmJlZD0hMSxwbi5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIGt0PXQudG91Y2hEYXRhLnN0YXJ0LHN0PXEudG91Y2hlc1swXS5jbGllbnRYLWVlLFVlPXEudG91Y2hlc1swXS5jbGllbnRZLVksY3Q9cS50b3VjaGVzWzFdLmNsaWVudFgtZWUsV2U9cS50b3VjaGVzWzFdLmNsaWVudFktWSxPbj1RKHN0LFVlLGN0LFdlKSx0bj1Pbi96O2lmKHVlKXt2YXIgTXI9c3QtTSxJcj1VZS1QLFBuPWN0LUIsRHQ9V2UtRixDZT0oTXIrUG4pLzIsdHQ9KElyK0R0KS8yLEN0PW9lLnpvb20oKSxncj1DdCp0bixybj1vZS5wYW4oKSx5bj1LWzBdKkN0K3JuLngsWnI9S1sxXSpDdCtybi55LE9pPXt4Oi1nci9DdCooeW4tcm4ueC1DZSkreW4seTotZ3IvQ3QqKFpyLXJuLnktdHQpK1pyfTtpZihrdCYma3QuYWN0aXZlKCkpe3ZhciB2dD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7eCh2dCksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksa3QudW5hY3RpdmF0ZSgpLmVtaXQoImZyZWVvbiIpLHZ0LmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihrdC5lbWl0KCJkcmFnZnJlZW9uIiksdnQuZW1pdCgiZHJhZ2ZyZWUiKSl9b2Uudmlld3BvcnQoe3pvb206Z3IscGFuOk9pLGNhbmNlbE9uRmFpbGVkWm9vbTohMH0pLG9lLmVtaXQoInBpbmNoem9vbSIpLHo9T24sTT1zdCxQPVVlLEI9Y3QsRj1XZSx0LnBpbmNoaW5nPSEwfWlmKHEudG91Y2hlc1swXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7VlswXT1wZVswXSxWWzFdPXBlWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMV0uY2xpZW50WCxxLnRvdWNoZXNbMV0uY2xpZW50WSk7VlsyXT1wZVswXSxWWzNdPXBlWzFdfWlmKHEudG91Y2hlc1syXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMl0uY2xpZW50WCxxLnRvdWNoZXNbMl0uY2xpZW50WSk7Vls0XT1wZVswXSxWWzVdPXBlWzFdfX1lbHNlIGlmKHEudG91Y2hlc1swXSYmIXQudG91Y2hEYXRhLmRpZFNlbGVjdCl7dmFyIGVpPXQudG91Y2hEYXRhLnN0YXJ0LFNuPXQudG91Y2hEYXRhLmxhc3QsZnQ7aWYoIXQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXQuc3dpcGVQYW5uaW5nJiYoZnQ9dC5maW5kTmVhcmVzdEVsZW1lbnQoVlswXSxWWzFdLCEwLCEwKSksZGUmJmVpIT1udWxsJiZxLnByZXZlbnREZWZhdWx0KCksZGUmJmVpIT1udWxsJiZ0Lm5vZGVJc0RyYWdnYWJsZShlaSkpaWYoUGUpe3ZhciB2dD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMsSHI9IXQuZHJhZ0RhdGEuZGlkRHJhZztIciYmeSh2dCx7aW5EcmFnTGF5ZXI6ITB9KSx0LmRyYWdEYXRhLmRpZERyYWc9ITA7dmFyIGV0PXt4OjAseTowfTtpZihfdChfZVswXSkmJl90KF9lWzFdKSYmKGV0LngrPV9lWzBdLGV0LnkrPV9lWzFdLEhyKSl7dC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIGd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YTtndCYmX3QoZ3RbMF0pJiZfdChndFsxXSkmJihldC54Kz1ndFswXSxldC55Kz1ndFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLHZ0LnNpbGVudFNoaWZ0KGV0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXT09VGVbMF0mJnQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV09PVRlWzFdJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfWVsc2V7dmFyIGd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YT10LnRvdWNoRGF0YS5kcmFnRGVsdGF8fFtdO2d0Lmxlbmd0aD09PTA/KGd0LnB1c2goX2VbMF0pLGd0LnB1c2goX2VbMV0pKTooZ3RbMF0rPV9lWzBdLGd0WzFdKz1fZVsxXSl9aWYoaShlaXx8ZnQsWyJ0b3VjaG1vdmUiLCJ0YXBkcmFnIiwidm1vdXNlbW92ZSJdLHEse3g6VlswXSx5OlZbMV19KSwoIWVpfHwhZWkuZ3JhYmJlZCgpKSYmZnQhPVNuJiYoU24mJlNuLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJ0YXBkcmFnb3V0Iixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19KSxmdCYmZnQuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6InRhcGRyYWdvdmVyIixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19KSksdC50b3VjaERhdGEubGFzdD1mdCxkZSlmb3IodmFyIG50PTA7bnQ8Vi5sZW5ndGg7bnQrKylWW250XSYmdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltudF0mJlBlJiYodC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoZGUmJihlaT09bnVsbHx8ZWkucGFubmFibGUoKSkmJm9lLnBhbm5pbmdFbmFibGVkKCkmJm9lLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgS3Q9cyhlaSx0LnRvdWNoRGF0YS5zdGFydHMpO0t0JiYocS5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1qMSh0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSksdC5zd2lwZVBhbm5pbmc/KG9lLnBhbkJ5KHt4Ol9lWzBdKlcseTpfZVsxXSpXfSksb2UuZW1pdCgiZHJhZ3BhbiIpKTpQZSYmKHQuc3dpcGVQYW5uaW5nPSEwLG9lLnBhbkJ5KHt4OlZlKlcseTpxZSpXfSksb2UuZW1pdCgiZHJhZ3BhbiIpLGVpJiYoZWkudW5hY3RpdmF0ZSgpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC50b3VjaERhdGEuc3RhcnQ9bnVsbCkpKTt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEudG91Y2hlc1swXS5jbGllbnRYLHEudG91Y2hlc1swXS5jbGllbnRZKTtWWzBdPXBlWzBdLFZbMV09cGVbMV19fWZvcih2YXIgYmU9MDtiZTxWLmxlbmd0aDtiZSsrKVRlW2JlXT1WW2JlXTtkZSYmcS50b3VjaGVzLmxlbmd0aD4wJiYhdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYhdC5zd2lwZVBhbm5pbmcmJnQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiE9bnVsbCYmKHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX19LCJ0b3VjaG1vdmVIYW5kbGVyIiksITEpO3ZhciBoZTt0LnJlZ2lzdGVyQmluZGluZyhlLCJ0b3VjaGNhbmNlbCIsaGU9byhmdW5jdGlvbihxKXt2YXIgZGU9dC50b3VjaERhdGEuc3RhcnQ7dC50b3VjaERhdGEuY2FwdHVyZT0hMSxkZSYmZGUudW5hY3RpdmF0ZSgpfSwidG91Y2hjYW5jZWxIYW5kbGVyIikpO3ZhciBsZSxKLFNlLHNlO2lmKHQucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNoZW5kIixsZT1vKGZ1bmN0aW9uKHEpe3ZhciBkZT10LnRvdWNoRGF0YS5zdGFydCxpZT10LnRvdWNoRGF0YS5jYXB0dXJlO2lmKGllKXEudG91Y2hlcy5sZW5ndGg9PT0wJiYodC50b3VjaERhdGEuY2FwdHVyZT0hMSkscS5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgcmV0dXJuO3ZhciBvZT10LnNlbGVjdGlvbjt0LnN3aXBlUGFubmluZz0hMSx0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITE7dmFyIFY9dC5jeSxUZT1WLnpvb20oKSxXPXQudG91Y2hEYXRhLm5vdyxwZT10LnRvdWNoRGF0YS5lYXJsaWVyO2lmKHEudG91Y2hlc1swXSl7dmFyIHZlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7V1swXT12ZVswXSxXWzFdPXZlWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIHZlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMV0uY2xpZW50WCxxLnRvdWNoZXNbMV0uY2xpZW50WSk7V1syXT12ZVswXSxXWzNdPXZlWzFdfWlmKHEudG91Y2hlc1syXSl7dmFyIHZlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMl0uY2xpZW50WCxxLnRvdWNoZXNbMl0uY2xpZW50WSk7V1s0XT12ZVswXSxXWzVdPXZlWzFdfWRlJiZkZS51bmFjdGl2YXRlKCk7dmFyIFBlO2lmKHQudG91Y2hEYXRhLmN4dCl7aWYoUGU9e29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX0sZGU/ZGUuZW1pdChQZSk6Vi5lbWl0KFBlKSwhdC50b3VjaERhdGEuY3h0RHJhZ2dlZCl7dmFyIF9lPXtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDpXWzBdLHk6V1sxXX19O2RlP2RlLmVtaXQoX2UpOlYuZW1pdChfZSl9dC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHQ9ITEsdC50b3VjaERhdGEuc3RhcnQ9bnVsbCx0LnJlZHJhdygpO3JldHVybn1pZighcS50b3VjaGVzWzJdJiZWLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmdC50b3VjaERhdGEuc2VsZWN0aW5nKXt0LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITE7dmFyIGJlPVYuY29sbGVjdGlvbih0LmdldEFsbEluQm94KG9lWzBdLG9lWzFdLG9lWzJdLG9lWzNdKSk7b2VbMF09dm9pZCAwLG9lWzFdPXZvaWQgMCxvZVsyXT12b2lkIDAsb2VbM109dm9pZCAwLG9lWzRdPTAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxWLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpxLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX0pO3ZhciBWZT1vKGZ1bmN0aW9uKE10KXtyZXR1cm4gTXQuc2VsZWN0YWJsZSgpJiYhTXQuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO2JlLmVtaXQoImJveCIpLnN0ZEZpbHRlcihWZSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IiksYmUubm9uZW1wdHkoKSYmdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKX1pZihkZT8udW5hY3RpdmF0ZSgpLHEudG91Y2hlc1syXSl0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7ZWxzZSBpZighcS50b3VjaGVzWzFdKXtpZighcS50b3VjaGVzWzBdKXtpZighcS50b3VjaGVzWzBdKXt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7dmFyIERlPXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztpZihkZSE9bnVsbCl7dmFyIHFlPWRlLl9wcml2YXRlLmdyYWJiZWQ7eChEZSksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCkscWUmJihkZS5lbWl0KCJmcmVlb24iKSxEZS5lbWl0KCJmcmVlIiksdC5kcmFnRGF0YS5kaWREcmFnJiYoZGUuZW1pdCgiZHJhZ2ZyZWVvbiIpLERlLmVtaXQoImRyYWdmcmVlIikpKSxpKGRlLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxxLHt4OldbMF0seTpXWzFdfSksZGUudW5hY3RpdmF0ZSgpLHQudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgYXQ9dC5maW5kTmVhcmVzdEVsZW1lbnQoV1swXSxXWzFdLCEwLCEwKTtpKGF0LFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxxLHt4OldbMF0seTpXWzFdfSl9dmFyIFJ0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0tV1swXSxzdD1SdCpSdCxVZT10LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLVdbMV0sY3Q9VWUqVWUsV2U9c3QrY3Qsb3Q9V2UqVGUqVGU7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZHx8KGRlfHxWLiQoIjpzZWxlY3RlZCIpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksaShkZSxbInRhcCIsInZjbGljayJdLHEse3g6V1swXSx5OldbMV19KSxKPSExLHEudGltZVN0YW1wLXNlPD1WLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oU2UmJmNsZWFyVGltZW91dChTZSksSj0hMCxzZT1udWxsLGkoZGUsWyJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxxLHt4OldbMF0seTpXWzFdfSkpOihTZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Snx8aShkZSxbIm9uZXRhcCIsInZvbmVjbGljayJdLHEse3g6V1swXSx5OldbMV19KX0sVi5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpLHNlPXEudGltZVN0YW1wKSksZGUhPW51bGwmJiF0LmRyYWdEYXRhLmRpZERyYWcmJmRlLl9wcml2YXRlLnNlbGVjdGFibGUmJm90PHQudG91Y2hUYXBUaHJlc2hvbGQyJiYhdC5waW5jaGluZyYmKFYuc2VsZWN0aW9uVHlwZSgpPT09InNpbmdsZSI/KFYuJChyKS51bm1lcmdlKGRlKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLGRlLnNlbGVjdChbInRhcHNlbGVjdCJdKSk6ZGUuc2VsZWN0ZWQoKT9kZS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOmRlLnNlbGVjdChbInRhcHNlbGVjdCJdKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSksdC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMH19fWZvcih2YXIgWXQ9MDtZdDxXLmxlbmd0aDtZdCsrKXBlW1l0XT1XW1l0XTt0LmRyYWdEYXRhLmRpZERyYWc9ITEscS50b3VjaGVzLmxlbmd0aD09PTAmJih0LnRvdWNoRGF0YS5kcmFnRGVsdGE9W10sdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLHQudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPW51bGwsdC50b3VjaERhdGEuZGlkU2VsZWN0PSExKSxxLnRvdWNoZXMubGVuZ3RoPDImJihxLnRvdWNoZXMubGVuZ3RoPT09MSYmKHQudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVtxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WV0pLHQucGluY2hpbmc9ITEsdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKSl9LCJ0b3VjaGVuZEhhbmRsZXIiKSwhMSksdHlwZW9mIFRvdWNoRXZlbnQ+InUiKXt2YXIgYWU9W10sT2U9byhmdW5jdGlvbihxKXtyZXR1cm57Y2xpZW50WDpxLmNsaWVudFgsY2xpZW50WTpxLmNsaWVudFksZm9yY2U6MSxpZGVudGlmaWVyOnEucG9pbnRlcklkLHBhZ2VYOnEucGFnZVgscGFnZVk6cS5wYWdlWSxyYWRpdXNYOnEud2lkdGgvMixyYWRpdXNZOnEuaGVpZ2h0LzIsc2NyZWVuWDpxLnNjcmVlblgsc2NyZWVuWTpxLnNjcmVlblksdGFyZ2V0OnEudGFyZ2V0fX0sIm1ha2VUb3VjaCIpLHllPW8oZnVuY3Rpb24ocSl7cmV0dXJue2V2ZW50OnEsdG91Y2g6T2UocSl9fSwibWFrZVBvaW50ZXIiKSxCZT1vKGZ1bmN0aW9uKHEpe2FlLnB1c2goeWUocSkpfSwiYWRkUG9pbnRlciIpLEhlPW8oZnVuY3Rpb24ocSl7Zm9yKHZhciBkZT0wO2RlPGFlLmxlbmd0aDtkZSsrKXt2YXIgaWU9YWVbZGVdO2lmKGllLmV2ZW50LnBvaW50ZXJJZD09PXEucG9pbnRlcklkKXthZS5zcGxpY2UoZGUsMSk7cmV0dXJufX19LCJyZW1vdmVQb2ludGVyIiksemU9byhmdW5jdGlvbihxKXt2YXIgZGU9YWUuZmlsdGVyKGZ1bmN0aW9uKGllKXtyZXR1cm4gaWUuZXZlbnQucG9pbnRlcklkPT09cS5wb2ludGVySWR9KVswXTtkZS5ldmVudD1xLGRlLnRvdWNoPU9lKHEpfSwidXBkYXRlUG9pbnRlciIpLExlPW8oZnVuY3Rpb24ocSl7cS50b3VjaGVzPWFlLm1hcChmdW5jdGlvbihkZSl7cmV0dXJuIGRlLnRvdWNofSl9LCJhZGRUb3VjaGVzVG9FdmVudCIpLEllPW8oZnVuY3Rpb24ocSl7cmV0dXJuIHEucG9pbnRlclR5cGU9PT0ibW91c2UifHxxLnBvaW50ZXJUeXBlPT09NH0sInBvaW50ZXJJc01vdXNlIik7dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInBvaW50ZXJkb3duIixmdW5jdGlvbih4ZSl7SWUoeGUpfHwoeGUucHJldmVudERlZmF1bHQoKSxCZSh4ZSksTGUoeGUpLG5lKHhlKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcnVwIixmdW5jdGlvbih4ZSl7SWUoeGUpfHwoSGUoeGUpLExlKHhlKSxsZSh4ZSkpfSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInBvaW50ZXJjYW5jZWwiLGZ1bmN0aW9uKHhlKXtJZSh4ZSl8fChIZSh4ZSksTGUoeGUpLGhlKHhlKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcm1vdmUiLGZ1bmN0aW9uKHhlKXtJZSh4ZSl8fCh4ZS5wcmV2ZW50RGVmYXVsdCgpLHplKHhlKSxMZSh4ZSksdGUoeGUpKX0pfX07c2g9e307c2guZ2VuZXJhdGVQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t0XT17cmVuZGVyZXI6dGhpcyxuYW1lOnQscG9pbnRzOmUsZHJhdzpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1KXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwoInBvbHlnb24iLG4saSxhLHMsbCx0aGlzLnBvaW50cyl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZil7cmV0dXJuIGE0KGwsdSx0aGlzLnBvaW50cyxuLGksYS8yLHMvMixoKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmKXtyZXR1cm4gaWgobixpLHRoaXMucG9pbnRzLHUsaCxzLGwsWzAsLTFdLGEpfSwiY2hlY2tQb2ludCIpfX07c2guZ2VuZXJhdGVFbGxpcHNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5lbGxpcHNlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImVsbGlwc2UiLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3JldHVybiBmWGUoYSxzLGUscixuLzIrbCxpLzIrbCl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7cmV0dXJuIGpwKGUscixpLGEscyxsLG4pfSwiY2hlY2tQb2ludCIpfX07c2guZ2VuZXJhdGVSb3VuZFBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3RdPXtyZW5kZXJlcjp0aGlzLG5hbWU6dCxwb2ludHM6ZSxnZXRPckNyZWF0ZUNvcm5lcnM6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoKXtpZih1W2hdIT09dm9pZCAwJiZ1W2grIi1jeCJdPT09biYmdVtoKyItY3kiXT09PWkpcmV0dXJuIHVbaF07dVtoXT1uZXcgQXJyYXkoZS5sZW5ndGgvMiksdVtoKyItY3giXT1uLHVbaCsiLWN5Il09aTt2YXIgZj1hLzIsZD1zLzI7bD1sPT09ImF1dG8iP0xnZShhLHMpOmw7Zm9yKHZhciBwPW5ldyBBcnJheShlLmxlbmd0aC8yKSxtPTA7bTxlLmxlbmd0aC8yO20rKylwW21dPXt4Om4rZiplW20qMl0seTppK2QqZVttKjIrMV19O3ZhciBnLHksdix4LGI9cC5sZW5ndGg7Zm9yKHk9cFtiLTFdLGc9MDtnPGI7ZysrKXY9cFtnJWJdLHg9cFsoZysxKSViXSx1W2hdW2ddPXJGKHksdix4LGwpLHk9dix2PXg7cmV0dXJuIHVbaF19LCJnZXRPckNyZWF0ZUNvcm5lcnMiKSxkcmF3Om8oZnVuY3Rpb24obixpLGEscyxsLHUsaCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJyb3VuZC1wb2x5Z29uIixuLGksYSxzLGwsdGhpcy5wb2ludHMsdGhpcy5nZXRPckNyZWF0ZUNvcm5lcnMoaSxhLHMsbCx1LGgsImRyYXdDb3JuZXJzIikpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYsZCl7cmV0dXJuIGRYZShsLHUsdGhpcy5wb2ludHMsbixpLGEscyxoLHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKG4saSxhLHMsZixkLCJjb3JuZXJzIikpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYsZCl7cmV0dXJuIGhYZShuLGksdGhpcy5wb2ludHMsdSxoLHMsbCx0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyh1LGgscyxsLGYsZCwiY29ybmVycyIpKX0sImNoZWNrUG9pbnQiKX19O3NoLmdlbmVyYXRlUm91bmRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJyb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMucm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToicm91bmQtcmVjdGFuZ2xlIixwb2ludHM6VHMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhLHRoaXMucG9pbnRzLHMpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3JldHVybiBfZ2UoYSxzLGUscixuLGksbCx1KX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1pLzIsZj1hLzI7dT11PT09ImF1dG8iP1pwKGksYSk6dSx1PU1hdGgubWluKGgsZix1KTt2YXIgZD11KjI7cmV0dXJuISEoaWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtZCxbMCwtMV0sbil8fGloKGUscix0aGlzLnBvaW50cyxzLGwsaS1kLGEsWzAsLTFdLG4pfHxqcChlLHIsZCxkLHMtaCt1LGwtZit1LG4pfHxqcChlLHIsZCxkLHMraC11LGwtZit1LG4pfHxqcChlLHIsZCxkLHMraC11LGwrZi11LG4pfHxqcChlLHIsZCxkLHMtaCt1LGwrZi11LG4pKX0sImNoZWNrUG9pbnQiKX19O3NoLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1siY3V0LXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5jdXRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiY3V0LXJlY3RhbmdsZSIsY29ybmVyTGVuZ3RoOkhCKCkscG9pbnRzOlRzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSxudWxsLHMpfSwiZHJhdyIpLGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHM6byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPWE9PT0iYXV0byI/dGhpcy5jb3JuZXJMZW5ndGg6YSxsPXIvMix1PWUvMixoPW4tdSxmPW4rdSxkPWktbCxwPWkrbDtyZXR1cm57dG9wTGVmdDpbaCxkK3MsaCtzLGQsaCtzLGQrc10sdG9wUmlnaHQ6W2YtcyxkLGYsZCtzLGYtcyxkK3NdLGJvdHRvbVJpZ2h0OltmLHAtcyxmLXMscCxmLXMscC1zXSxib3R0b21MZWZ0OltoK3MscCxoLHAtcyxoK3MscC1zXX19LCJnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzIiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKG4rMipsLGkrMipsLGUscix1KSxmPVtdLmNvbmNhdC5hcHBseShbXSxbaC50b3BMZWZ0LnNwbGljZSgwLDQpLGgudG9wUmlnaHQuc3BsaWNlKDAsNCksaC5ib3R0b21SaWdodC5zcGxpY2UoMCw0KSxoLmJvdHRvbUxlZnQuc3BsaWNlKDAsNCldKTtyZXR1cm4gYTQoYSxzLGYsZSxyKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD11PT09ImF1dG8iP3RoaXMuY29ybmVyTGVuZ3RoOnU7aWYoaWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtMipoLFswLC0xXSxuKXx8aWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLTIqaCxhLFswLC0xXSxuKSlyZXR1cm4hMDt2YXIgZj10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoaSxhLHMsbCk7cmV0dXJuIHFzKGUscixmLnRvcExlZnQpfHxxcyhlLHIsZi50b3BSaWdodCl8fHFzKGUscixmLmJvdHRvbVJpZ2h0KXx8cXMoZSxyLGYuYm90dG9tTGVmdCl9LCJjaGVja1BvaW50Iil9fTtzaC5nZW5lcmF0ZUJhcnJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXMuYmFycmVsPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJhcnJlbCIscG9pbnRzOlRzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9LjE1LGY9LjUsZD0uODUscD10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKG4rMipsLGkrMipsLGUsciksbT1vKGZ1bmN0aW9uKHYpe3ZhciB4PVExKHt4OnZbMF0seTp2WzFdfSx7eDp2WzJdLHk6dlszXX0se3g6dls0XSx5OnZbNV19LGgpLGI9UTEoe3g6dlswXSx5OnZbMV19LHt4OnZbMl0seTp2WzNdfSx7eDp2WzRdLHk6dls1XX0sZiksVD1RMSh7eDp2WzBdLHk6dlsxXX0se3g6dlsyXSx5OnZbM119LHt4OnZbNF0seTp2WzVdfSxkKTtyZXR1cm5bdlswXSx2WzFdLHgueCx4LnksYi54LGIueSxULngsVC55LHZbNF0sdls1XV19LCJhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzIiksZz1bXS5jb25jYXQobShwLnRvcExlZnQpLG0ocC50b3BSaWdodCksbShwLmJvdHRvbVJpZ2h0KSxtKHAuYm90dG9tTGVmdCkpO3JldHVybiBhNChhLHMsZyxlLHIpfSwiaW50ZXJzZWN0TGluZSIpLGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOm8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9ci8yLHM9ZS8yLGw9bi1zLHU9bitzLGg9aS1hLGY9aSthLGQ9VEIoZSxyKSxwPWQuaGVpZ2h0T2Zmc2V0LG09ZC53aWR0aE9mZnNldCxnPWQuY3RybFB0T2Zmc2V0UGN0KmUseT17dG9wTGVmdDpbbCxoK3AsbCtnLGgsbCttLGhdLHRvcFJpZ2h0Olt1LW0saCx1LWcsaCx1LGgrcF0sYm90dG9tUmlnaHQ6W3UsZi1wLHUtZyxmLHUtbSxmXSxib3R0b21MZWZ0OltsK20sZixsK2csZixsLGYtcF19O3JldHVybiB5LnRvcExlZnQuaXNUb3A9ITAseS50b3BSaWdodC5pc1RvcD0hMCx5LmJvdHRvbUxlZnQuaXNCb3R0b209ITAseS5ib3R0b21SaWdodC5pc0JvdHRvbT0hMCx5fSwiZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1UQihpLGEpLGY9aC5oZWlnaHRPZmZzZXQsZD1oLndpZHRoT2Zmc2V0O2lmKGloKGUscix0aGlzLnBvaW50cyxzLGwsaSxhLTIqZixbMCwtMV0sbil8fGloKGUscix0aGlzLnBvaW50cyxzLGwsaS0yKmQsYSxbMCwtMV0sbikpcmV0dXJuITA7Zm9yKHZhciBwPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMoaSxhLHMsbCksbT1vKGZ1bmN0aW9uKEMsRCxPKXt2YXIgUj1PWzRdLGs9T1syXSxMPU9bMF0sQT1PWzVdLEk9T1sxXSxNPU1hdGgubWluKFIsTCksUD1NYXRoLm1heChSLEwpLEI9TWF0aC5taW4oQSxJKSxGPU1hdGgubWF4KEEsSSk7aWYoTTw9QyYmQzw9UCYmQjw9RCYmRDw9Ril7dmFyIHo9cFhlKFIsayxMKSwkPW9YZSh6WzBdLHpbMV0selsyXSxDKSxVPSQuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybiAwPD1LJiZLPD0xfSk7aWYoVS5sZW5ndGg+MClyZXR1cm4gVVswXX1yZXR1cm4gbnVsbH0sImdldEN1cnZlVCIpLGc9T2JqZWN0LmtleXMocCkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgdj1nW3ldLHg9cFt2XSxiPW0oZSxyLHgpO2lmKGIhPW51bGwpe3ZhciBUPXhbNV0sUz14WzNdLHc9eFsxXSxFPXNhKFQsUyx3LGIpO2lmKHguaXNUb3AmJkU8PXJ8fHguaXNCb3R0b20mJnI8PUUpcmV0dXJuITB9fXJldHVybiExfSwiY2hlY2tQb2ludCIpfX07c2guZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuYm90dG9tcm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOlRzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSx0aGlzLnBvaW50cyxzKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1lLShuLzIrbCksZj1yLShpLzIrbCksZD1mLHA9ZSsobi8yK2wpLG09TWYoYSxzLGUscixoLGYscCxkLCExKTtyZXR1cm4gbS5sZW5ndGg+MD9tOl9nZShhLHMsZSxyLG4saSxsLHUpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3U9dT09PSJhdXRvIj9acChpLGEpOnU7dmFyIGg9Mip1O2lmKGloKGUscix0aGlzLnBvaW50cyxzLGwsaSxhLWgsWzAsLTFdLG4pfHxpaChlLHIsdGhpcy5wb2ludHMscyxsLGktaCxhLFswLC0xXSxuKSlyZXR1cm4hMDt2YXIgZj1pLzIrMipuLGQ9YS8yKzIqbixwPVtzLWYsbC1kLHMtZixsLHMrZixsLHMrZixsLWRdO3JldHVybiEhKHFzKGUscixwKXx8anAoZSxyLGgsaCxzK2kvMi11LGwrYS8yLXUsbil8fGpwKGUscixoLGgscy1pLzIrdSxsK2EvMi11LG4pKX0sImNoZWNrUG9pbnQiKX19O3NoLnJlZ2lzdGVyTm9kZVNoYXBlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubm9kZVNoYXBlcz17fSxlPXRoaXM7dGhpcy5nZW5lcmF0ZUVsbGlwc2UoKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidHJpYW5nbGUiLFRzKDMsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRyaWFuZ2xlIixUcygzLDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmVjdGFuZ2xlIixUcyg0LDApKSx0LnNxdWFyZT10LnJlY3RhbmdsZSx0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUJhcnJlbCgpLHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO3t2YXIgcj1bMCwxLDEsMCwwLC0xLC0xLDBdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJkaWFtb25kIixyKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1kaWFtb25kIixyKX10aGlzLmdlbmVyYXRlUG9seWdvbigicGVudGFnb24iLFRzKDUsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXBlbnRhZ29uIixUcyg1LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGV4YWdvbiIsVHMoNiwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGV4YWdvbiIsVHMoNiwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhlcHRhZ29uIixUcyg3LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXB0YWdvbiIsVHMoNywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oIm9jdGFnb24iLFRzKDgsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLW9jdGFnb24iLFRzKDgsMCkpO3ZhciBuPW5ldyBBcnJheSgyMCk7e3ZhciBpPWJCKDUsMCksYT1iQig1LE1hdGguUEkvNSkscz0uNSooMy1NYXRoLnNxcnQoNSkpO3MqPTEuNTc7Zm9yKHZhciBsPTA7bDxhLmxlbmd0aC8yO2wrKylhW2wqMl0qPXMsYVtsKjIrMV0qPXM7Zm9yKHZhciBsPTA7bDwyMC80O2wrKyluW2wqNF09aVtsKjJdLG5bbCo0KzFdPWlbbCoyKzFdLG5bbCo0KzJdPWFbbCoyXSxuW2wqNCszXT1hW2wqMisxXX1uPURnZShuKSx0aGlzLmdlbmVyYXRlUG9seWdvbigic3RhciIsbiksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInZlZSIsWy0xLC0xLDAsLS4zMzMsMSwtMSwwLDFdKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmhvbWJvaWQiLFstMSwtMSwuMzMzLC0xLDEsMSwtLjMzMywxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJpZ2h0LXJob21ib2lkIixbLS4zMzMsLTEsMSwtMSwuMzMzLDEsLTEsMV0pLHRoaXMubm9kZVNoYXBlcy5jb25jYXZlaGV4YWdvbj10aGlzLmdlbmVyYXRlUG9seWdvbigiY29uY2F2ZS1oZXhhZ29uIixbLTEsLS45NSwtLjc1LDAsLTEsLjk1LDEsLjk1LC43NSwwLDEsLS45NV0pO3t2YXIgdT1bLTEsLTEsLjI1LC0xLDEsMCwuMjUsMSwtMSwxXTt0aGlzLmdlbmVyYXRlUG9seWdvbigidGFnIix1KSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC10YWciLHUpfXQubWFrZVBvbHlnb249ZnVuY3Rpb24oaCl7dmFyIGY9aC5qb2luKCIkIiksZD0icG9seWdvbi0iK2YscDtyZXR1cm4ocD10aGlzW2RdKT9wOmUuZ2VuZXJhdGVQb2x5Z29uKGQsaCl9fTt4ND17fTt4NC50aW1lVG9SZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWRyYXdUb3RhbFRpbWUvdGhpcy5yZWRyYXdDb3VudH07eDQucmVkcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8a2dlKCk7dmFyIGU9dGhpcztlLmF2ZXJhZ2VSZWRyYXdUaW1lPT09dm9pZCAwJiYoZS5hdmVyYWdlUmVkcmF3VGltZT0wKSxlLmxhc3RSZWRyYXdUaW1lPT09dm9pZCAwJiYoZS5sYXN0UmVkcmF3VGltZT0wKSxlLmxhc3REcmF3VGltZT09PXZvaWQgMCYmKGUubGFzdERyYXdUaW1lPTApLGUucmVxdWVzdGVkRnJhbWU9ITAsZS5yZW5kZXJPcHRpb25zPXR9O3g0LmJlZm9yZVJlbmRlcj1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmRlc3Ryb3llZCl7ZT09bnVsbCYmb2koIlByaW9yaXR5IGlzIG5vdCBvcHRpb25hbCBmb3IgYmVmb3JlUmVuZGVyIik7dmFyIHI9dGhpcy5iZWZvcmVSZW5kZXJDYWxsYmFja3M7ci5wdXNoKHtmbjp0LHByaW9yaXR5OmV9KSxyLnNvcnQoZnVuY3Rpb24obixpKXtyZXR1cm4gaS5wcmlvcml0eS1uLnByaW9yaXR5fSl9fTtVbWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWUuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzLGE9MDthPGkubGVuZ3RoO2ErKylpW2FdLmZuKHIsbil9LCJiZWZvcmVSZW5kZXJDYWxsYmFja3MiKTt4NC5zdGFydFJlbmRlckxvb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5jeTtpZighdC5yZW5kZXJMb29wU3RhcnRlZCl7dC5yZW5kZXJMb29wU3RhcnRlZD0hMDt2YXIgcj1vKGZ1bmN0aW9uIG4oaSl7aWYoIXQuZGVzdHJveWVkKXtpZighZS5iYXRjaGluZygpKWlmKHQucmVxdWVzdGVkRnJhbWUmJiF0LnNraXBGcmFtZSl7VW1lKHQsITAsaSk7dmFyIGE9bmgoKTt0LnJlbmRlcih0LnJlbmRlck9wdGlvbnMpO3ZhciBzPXQubGFzdERyYXdUaW1lPW5oKCk7dC5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKHQuYXZlcmFnZVJlZHJhd1RpbWU9cy1hKSx0LnJlZHJhd0NvdW50PT09dm9pZCAwJiYodC5yZWRyYXdDb3VudD0wKSx0LnJlZHJhd0NvdW50KyssdC5yZWRyYXdUb3RhbFRpbWU9PT12b2lkIDAmJih0LnJlZHJhd1RvdGFsVGltZT0wKTt2YXIgbD1zLWE7dC5yZWRyYXdUb3RhbFRpbWUrPWwsdC5sYXN0UmVkcmF3VGltZT1sLHQuYXZlcmFnZVJlZHJhd1RpbWU9dC5hdmVyYWdlUmVkcmF3VGltZS8yK2wvMix0LnJlcXVlc3RlZEZyYW1lPSExfWVsc2UgVW1lKHQsITEsaSk7dC5za2lwRnJhbWU9ITEsJDYobil9fSwicmVuZGVyRm4iKTskNihyKX19O2paZT1vKGZ1bmN0aW9uKGUpe3RoaXMuaW5pdChlKX0sIkJhc2VSZW5kZXJlciIpLF8xZT1qWmUsZHk9XzFlLnByb3RvdHlwZTtkeS5jbGllbnRGdW5jdGlvbnM9WyJyZWRyYXdIaW50IiwicmVuZGVyIiwicmVuZGVyVG8iLCJtYXRjaENhbnZhc1NpemUiLCJub2RlU2hhcGVJbXBsIiwiYXJyb3dTaGFwZUltcGwiXTtkeS5pbml0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5vcHRpb25zPXQsZS5jeT10LmN5O3ZhciByPWUuY29udGFpbmVyPXQuY3kuY29udGFpbmVyKCksbj1lLmN5LndpbmRvdygpO2lmKG4pe3ZhciBpPW4uZG9jdW1lbnQsYT1pLmhlYWQscz0iX19fX19fX19fX2N5dG9zY2FwZV9zdHlsZXNoZWV0IixsPSJfX19fX19fX19fY3l0b3NjYXBlX2NvbnRhaW5lciIsdT1pLmdldEVsZW1lbnRCeUlkKHMpIT1udWxsO2lmKHIuY2xhc3NOYW1lLmluZGV4T2YobCk8MCYmKHIuY2xhc3NOYW1lPShyLmNsYXNzTmFtZXx8IiIpKyIgIitsKSwhdSl7dmFyIGg9aS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2guaWQ9cyxoLnRleHRDb250ZW50PSIuIitsKyIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0iLGEuaW5zZXJ0QmVmb3JlKGgsYS5jaGlsZHJlblswXSl9dmFyIGY9bi5nZXRDb21wdXRlZFN0eWxlKHIpLGQ9Zi5nZXRQcm9wZXJ0eVZhbHVlKCJwb3NpdGlvbiIpO2Q9PT0ic3RhdGljIiYmaG4oIkEgQ3l0b3NjYXBlIGNvbnRhaW5lciBoYXMgc3R5bGUgcG9zaXRpb246c3RhdGljIGFuZCBzbyBjYW4gbm90IHVzZSBVSSBleHRlbnNpb25zIHByb3Blcmx5Iil9ZS5zZWxlY3Rpb249W3ZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwwXSxlLmJlemllclByb2pQY3RzPVsuMDUsLjIyNSwuNCwuNSwuNiwuNzc1LC45NV0sZS5ob3ZlckRhdGE9e2Rvd246bnVsbCxsYXN0Om51bGwsZG93blRpbWU6bnVsbCx0cmlnZ2VyTW9kZTpudWxsLGRyYWdnaW5nOiExLGluaXRpYWxQYW46W251bGwsbnVsbF0sY2FwdHVyZTohMX0sZS5kcmFnRGF0YT17cG9zc2libGVEcmFnRWxlbWVudHM6W119LGUudG91Y2hEYXRhPXtzdGFydDpudWxsLGNhcHR1cmU6ITEsc3RhcnRQb3NpdGlvbjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLHNpbmdsZVRvdWNoU3RhcnRUaW1lOm51bGwsc2luZ2xlVG91Y2hNb3ZlZDohMCxub3c6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxlYXJsaWVyOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF19LGUucmVkcmF3cz0wLGUuc2hvd0Zwcz10LnNob3dGcHMsZS5kZWJ1Zz10LmRlYnVnLGUud2ViZ2w9dC53ZWJnbCxlLmhpZGVFZGdlc09uVmlld3BvcnQ9dC5oaWRlRWRnZXNPblZpZXdwb3J0LGUudGV4dHVyZU9uVmlld3BvcnQ9dC50ZXh0dXJlT25WaWV3cG9ydCxlLndoZWVsU2Vuc2l0aXZpdHk9dC53aGVlbFNlbnNpdGl2aXR5LGUubW90aW9uQmx1ckVuYWJsZWQ9dC5tb3Rpb25CbHVyLGUuZm9yY2VkUGl4ZWxSYXRpbz1fdCh0LnBpeGVsUmF0aW8pP3QucGl4ZWxSYXRpbzpudWxsLGUubW90aW9uQmx1cj10Lm1vdGlvbkJsdXIsZS5tb3Rpb25CbHVyT3BhY2l0eT10Lm1vdGlvbkJsdXJPcGFjaXR5LGUubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWUubW90aW9uQmx1ck9wYWNpdHksZS5tb3Rpb25CbHVyUHhSYXRpbz0xLGUubWJQeFJCbHVycnk9MSxlLm1pbk1iTG93UXVhbEZyYW1lcz00LGUuZnVsbFF1YWxpdHlNYj0hMSxlLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGUuZGVza3RvcFRhcFRocmVzaG9sZD10LmRlc2t0b3BUYXBUaHJlc2hvbGQsZS5kZXNrdG9wVGFwVGhyZXNob2xkMj10LmRlc2t0b3BUYXBUaHJlc2hvbGQqdC5kZXNrdG9wVGFwVGhyZXNob2xkLGUudG91Y2hUYXBUaHJlc2hvbGQ9dC50b3VjaFRhcFRocmVzaG9sZCxlLnRvdWNoVGFwVGhyZXNob2xkMj10LnRvdWNoVGFwVGhyZXNob2xkKnQudG91Y2hUYXBUaHJlc2hvbGQsZS50YXBob2xkRHVyYXRpb249NTAwLGUuYmluZGluZ3M9W10sZS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZS5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxlLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGUucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGUucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfTtkeS5ub3RpZnk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHQ9PT0iaW5pdCIpe3IubG9hZCgpO3JldHVybn1pZih0PT09ImRlc3Ryb3kiKXtyLmRlc3Ryb3koKTtyZXR1cm59KHQ9PT0iYWRkInx8dD09PSJyZW1vdmUifHx0PT09Im1vdmUiJiZuLmhhc0NvbXBvdW5kTm9kZXMoKXx8dD09PSJsb2FkInx8dD09PSJ6b3JkZXIifHx0PT09Im1vdW50IikmJnIuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCksdD09PSJ2aWV3cG9ydCImJnIucmVkcmF3SGludCgic2VsZWN0IiwhMCksdD09PSJnYyImJnIucmVkcmF3SGludCgiZ2MiLCEwKSwodD09PSJsb2FkInx8dD09PSJyZXNpemUifHx0PT09Im1vdW50IikmJihyLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpLHIubWF0Y2hDYW52YXNTaXplKHIuY29udGFpbmVyKSksci5yZWRyYXdIaW50KCJlbGVzIiwhMCksci5yZWRyYXdIaW50KCJkcmFnIiwhMCksdGhpcy5zdGFydFJlbmRlckxvb3AoKSx0aGlzLnJlZHJhdygpfX07ZHkuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5kZXN0cm95ZWQ9ITAsdC5jeS5zdG9wQW5pbWF0aW9uTG9vcCgpO2Zvcih2YXIgZT0wO2U8dC5iaW5kaW5ncy5sZW5ndGg7ZSsrKXt2YXIgcj10LmJpbmRpbmdzW2VdLG49cixpPW4udGFyZ2V0OyhpLm9mZnx8aS5yZW1vdmVFdmVudExpc3RlbmVyKS5hcHBseShpLG4uYXJncyl9aWYodC5iaW5kaW5ncz1bXSx0LmJlZm9yZVJlbmRlckNhbGxiYWNrcz1bXSx0Lm9uVXBkYXRlRWxlQ2FsY3NGbnM9W10sdC5yZW1vdmVPYnNlcnZlciYmdC5yZW1vdmVPYnNlcnZlci5kaXNjb25uZWN0KCksdC5zdHlsZU9ic2VydmVyJiZ0LnN0eWxlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHQucmVzaXplT2JzZXJ2ZXImJnQucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHQubGFiZWxDYWxjRGl2KXRyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQubGFiZWxDYWxjRGl2KX1jYXRjaHt9fTtkeS5pc0hlYWRsZXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9O1t0RixDMWUsQTFlLGZ5LHNoLHg0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKGR5LHQpfSk7ZEI9MWUzLzYwLEQxZT17c2V0dXBEZXF1ZXVlaW5nOm8oZnVuY3Rpb24oZSl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgbj10aGlzLGk9dGhpcy5yZW5kZXJlcjtpZighbi5kZXF1ZXVlaW5nU2V0dXApe24uZGVxdWV1ZWluZ1NldHVwPSEwO3ZhciBhPXA0KGZ1bmN0aW9uKCl7aS5yZWRyYXdIaW50KCJlbGVzIiwhMCksaS5yZWRyYXdIaW50KCJkcmFnIiwhMCksaS5yZWRyYXcoKX0sZS5kZXFSZWRyYXdUaHJlc2hvbGQpLHM9byhmdW5jdGlvbihoLGYpe3ZhciBkPW5oKCkscD1pLmF2ZXJhZ2VSZWRyYXdUaW1lLG09aS5sYXN0UmVkcmF3VGltZSxnPVtdLHk9aS5jeS5leHRlbnQoKSx2PWkuZ2V0UGl4ZWxSYXRpbygpO2ZvcihofHxpLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlKCk7Oyl7dmFyIHg9bmgoKSxiPXgtZCxUPXgtZjtpZihtPGRCKXt2YXIgUz1kQi0oaD9wOjApO2lmKFQ+PWUuZGVxRmFzdENvc3QqUylicmVha31lbHNlIGlmKGgpe2lmKGI+PWUuZGVxQ29zdCptfHxiPj1lLmRlcUF2Z0Nvc3QqcClicmVha31lbHNlIGlmKFQ+PWUuZGVxTm9EcmF3Q29zdCpkQilicmVhazt2YXIgdz1lLmRlcShuLHYseSk7aWYody5sZW5ndGg+MClmb3IodmFyIEU9MDtFPHcubGVuZ3RoO0UrKylnLnB1c2god1tFXSk7ZWxzZSBicmVha31nLmxlbmd0aD4wJiYoZS5vbkRlcWQobixnKSwhaCYmZS5zaG91bGRSZWRyYXcobixnLHYseSkmJmEoKSl9LCJkZXF1ZXVlIiksbD1lLnByaW9yaXR5fHx6QjtpLmJlZm9yZVJlbmRlcihzLGwobikpfX0sInNldHVwRGVxdWV1ZWluZ0ltcGwiKX0sInNldHVwRGVxdWV1ZWluZyIpfSxLWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp6NjtWZih0aGlzLHQpLHRoaXMuaWRzQnlLZXk9bmV3IFpjLHRoaXMua2V5Rm9ySWQ9bmV3IFpjLHRoaXMuY2FjaGVzQnlMdmw9bmV3IFpjLHRoaXMubHZscz1bXSx0aGlzLmdldEtleT1lLHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXk9cn1yZXR1cm4gbyh0LCJFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwIiksVWYodCxbe2tleToiZ2V0SWRzRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3I9PW51bGwmJm9pKCJDYW4gbm90IGdldCBpZCBsaXN0IGZvciBudWxsIGtleSIpO3ZhciBuPXRoaXMuaWRzQnlLZXksaT10aGlzLmlkc0J5S2V5LmdldChyKTtyZXR1cm4gaXx8KGk9bmV3IGF5LG4uc2V0KHIsaSkpLGl9LCJnZXRJZHNGb3IiKX0se2tleToiYWRkSWRGb3JLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyIT1udWxsJiZ0aGlzLmdldElkc0ZvcihyKS5hZGQobil9LCJhZGRJZEZvcktleSIpfSx7a2V5OiJkZWxldGVJZEZvcktleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3IhPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHIpLmRlbGV0ZShuKX0sImRlbGV0ZUlkRm9yS2V5Iil9LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsPzA6dGhpcy5nZXRJZHNGb3Iocikuc2l6ZX0sImdldE51bWJlck9mSWRzRm9yS2V5Iil9LHtrZXk6InVwZGF0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobiksYT10aGlzLmdldEtleShyKTt0aGlzLmRlbGV0ZUlkRm9yS2V5KGksbiksdGhpcy5hZGRJZEZvcktleShhLG4pLHRoaXMua2V5Rm9ySWQuc2V0KG4sYSl9LCJ1cGRhdGVLZXlNYXBwaW5nRm9yIil9LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobik7dGhpcy5kZWxldGVJZEZvcktleShpLG4pLHRoaXMua2V5Rm9ySWQuZGVsZXRlKG4pfSwiZGVsZXRlS2V5TWFwcGluZ0ZvciIpfSx7a2V5OiJrZXlIYXNDaGFuZ2VkRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pLGE9dGhpcy5nZXRLZXkocik7cmV0dXJuIGkhPT1hfSwia2V5SGFzQ2hhbmdlZEZvciIpfSx7a2V5OiJpc0ludmFsaWQiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMua2V5SGFzQ2hhbmdlZEZvcihyKXx8dGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleShyKX0sImlzSW52YWxpZCIpfSx7a2V5OiJnZXRDYWNoZXNBdCIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj10aGlzLmNhY2hlc0J5THZsLGk9dGhpcy5sdmxzLGE9bi5nZXQocik7cmV0dXJuIGF8fChhPW5ldyBaYyxuLnNldChyLGEpLGkucHVzaChyKSksYX0sImdldENhY2hlc0F0Iil9LHtrZXk6ImdldENhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobikuZ2V0KHIpfSwiZ2V0Q2FjaGUiKX0se2tleToiZ2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5nZXRLZXkociksYT10aGlzLmdldENhY2hlKGksbik7cmV0dXJuIGEhPW51bGwmJnRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihyKSxhfSwiZ2V0Iil9LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMua2V5Rm9ySWQuZ2V0KHIuaWQoKSksYT10aGlzLmdldENhY2hlKGksbik7cmV0dXJuIGF9LCJnZXRGb3JDYWNoZWRLZXkiKX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5nZXRDYWNoZXNBdChuKS5oYXMocil9LCJoYXNDYWNoZSIpfSx7a2V5OiJoYXMiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldEtleShyKTtyZXR1cm4gdGhpcy5oYXNDYWNoZShpLG4pfSwiaGFzIil9LHtrZXk6InNldENhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXtpLmtleT1yLHRoaXMuZ2V0Q2FjaGVzQXQobikuc2V0KHIsaSl9LCJzZXRDYWNoZSIpfSx7a2V5OiJzZXQiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXRoaXMuZ2V0S2V5KHIpO3RoaXMuc2V0Q2FjaGUoYSxuLGkpLHRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihyKX0sInNldCIpfSx7a2V5OiJkZWxldGVDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3RoaXMuZ2V0Q2FjaGVzQXQobikuZGVsZXRlKHIpfSwiZGVsZXRlQ2FjaGUiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5nZXRLZXkocik7dGhpcy5kZWxldGVDYWNoZShpLG4pfSwiX2RlbGV0ZSIpfSx7a2V5OiJpbnZhbGlkYXRlS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uZGVsZXRlQ2FjaGUocixpKX0pfSwiaW52YWxpZGF0ZUtleSIpfSx7a2V5OiJpbnZhbGlkYXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pO3RoaXMuZGVsZXRlS2V5TWFwcGluZ0ZvcihyKTt2YXIgYT10aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHIpO3JldHVybiBhJiZ0aGlzLmludmFsaWRhdGVLZXkoaSksYXx8dGhpcy5nZXROdW1iZXJPZklkc0ZvcktleShpKT09PTB9LCJpbnZhbGlkYXRlIil9XSksdH0oKSxIbWU9MjUsQzY9NTAsQjY9LTQsTkI9MyxMMWU9Ny45OSxRWmU9OCxaWmU9MTAyNCxKWmU9MTAyNCxlSmU9MTAyNCx0SmU9LjIsckplPS44LG5KZT0xMCxpSmU9LjE1LGFKZT0uMSxzSmU9Ljksb0plPS45LGxKZT0xMDAsY0plPTEsSzE9e2RlcXVldWU6ImRlcXVldWUiLGRvd25zY2FsZToiZG93bnNjYWxlIixoaWdoUXVhbGl0eToiaGlnaFF1YWxpdHkifSx1SmU9b2Eoe2dldEtleTpudWxsLGRvZXNFbGVJbnZhbGlkYXRlS2V5Ono2LGRyYXdFbGVtZW50Om51bGwsZ2V0Qm91bmRpbmdCb3g6bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6YmdlLGFsbG93RWRnZVR4ckNhY2hpbmc6ITAsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiEwfSksamI9byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7bi5yZW5kZXJlcj1lLG4ub25EZXF1ZXVlcz1bXTt2YXIgaT11SmUocik7aXIobixpKSxuLmxvb2t1cD1uZXcgS1plKGkuZ2V0S2V5LGkuZG9lc0VsZUludmFsaWRhdGVLZXkpLG4uc2V0dXBEZXF1ZXVlaW5nKCl9LCJFbGVtZW50VGV4dHVyZUNhY2hlIiksWWk9amIucHJvdG90eXBlO1lpLnJlYXNvbnM9SzE7WWkuZ2V0VGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZWxlSW1nQ2FjaGVzPWUuZWxlSW1nQ2FjaGVzfHx7fSxlLmVsZUltZ0NhY2hlc1t0XT1lLmVsZUltZ0NhY2hlc1t0XXx8W119O1lpLmdldFJldGlyZWRUZXh0dXJlUXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZWxlSW1nQ2FjaGVzLnJldGlyZWQ9ZS5lbGVJbWdDYWNoZXMucmV0aXJlZHx8e30sbj1yW3RdPXJbdF18fFtdO3JldHVybiBufTtZaS5nZXRFbGVtZW50UXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5lbGVDYWNoZVF1ZXVlPXQuZWxlQ2FjaGVRdWV1ZXx8bmV3IG00KGZ1bmN0aW9uKHIsbil7cmV0dXJuIG4ucmVxcy1yLnJlcXN9KTtyZXR1cm4gZX07WWkuZ2V0RWxlbWVudEtleVRvUXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5lbGVLZXlUb0NhY2hlUXVldWU9dC5lbGVLZXlUb0NhY2hlUXVldWV8fHt9O3JldHVybiBlfTtZaS5nZXRFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcyxzPXRoaXMucmVuZGVyZXIsbD1zLmN5Lnpvb20oKSx1PXRoaXMubG9va3VwO2lmKCFlfHxlLnc9PT0wfHxlLmg9PT0wfHxpc05hTihlLncpfHxpc05hTihlLmgpfHwhdC52aXNpYmxlKCl8fHQucmVtb3ZlZCgpfHwhYS5hbGxvd0VkZ2VUeHJDYWNoaW5nJiZ0LmlzRWRnZSgpfHwhYS5hbGxvd1BhcmVudFR4ckNhY2hpbmcmJnQuaXNQYXJlbnQoKSlyZXR1cm4gbnVsbDtpZihuPT1udWxsJiYobj1NYXRoLmNlaWwoVkIobCpyKSkpLG48QjYpbj1CNjtlbHNlIGlmKGw+PUwxZXx8bj5OQilyZXR1cm4gbnVsbDt2YXIgaD1NYXRoLnBvdygyLG4pLGY9ZS5oKmgsZD1lLncqaCxwPXMuZWxlVGV4dEJpZ2dlclRoYW5NaW4odCxoKTtpZighdGhpcy5pc1Zpc2libGUodCxwKSlyZXR1cm4gbnVsbDt2YXIgbT11LmdldCh0LG4pO2lmKG0mJm0uaW52YWxpZGF0ZWQmJihtLmludmFsaWRhdGVkPSExLG0udGV4dHVyZS5pbnZhbGlkYXRlZFdpZHRoLT1tLndpZHRoKSxtKXJldHVybiBtO3ZhciBnO2lmKGY8PUhtZT9nPUhtZTpmPD1DNj9nPUM2Omc9TWF0aC5jZWlsKGYvQzYpKkM2LGY+ZUplfHxkPkpaZSlyZXR1cm4gbnVsbDt2YXIgeT1hLmdldFRleHR1cmVRdWV1ZShnKSx2PXlbeS5sZW5ndGgtMl0seD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGEucmVjeWNsZVRleHR1cmUoZyxkKXx8YS5hZGRUZXh0dXJlKGcsZCl9LCJhZGROZXdUeHIiKTt2fHwodj15W3kubGVuZ3RoLTFdKSx2fHwodj14KCkpLHYud2lkdGgtdi51c2VkV2lkdGg8ZCYmKHY9eCgpKTtmb3IodmFyIGI9byhmdW5jdGlvbihNKXtyZXR1cm4gTSYmTS5zY2FsZWRMYWJlbFNob3duPT09cH0sInNjYWxhYmxlRnJvbSIpLFQ9aSYmaT09PUsxLmRlcXVldWUsUz1pJiZpPT09SzEuaGlnaFF1YWxpdHksdz1pJiZpPT09SzEuZG93bnNjYWxlLEUsXz1uKzE7Xzw9TkI7XysrKXt2YXIgQz11LmdldCh0LF8pO2lmKEMpe0U9QzticmVha319dmFyIEQ9RSYmRS5sZXZlbD09PW4rMT9FOm51bGwsTz1vKGZ1bmN0aW9uKCl7di5jb250ZXh0LmRyYXdJbWFnZShELnRleHR1cmUuY2FudmFzLEQueCwwLEQud2lkdGgsRC5oZWlnaHQsdi51c2VkV2lkdGgsMCxkLGYpfSwiZG93bnNjYWxlIik7aWYodi5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdi5jb250ZXh0LmNsZWFyUmVjdCh2LnVzZWRXaWR0aCwwLGQsZyksYihEKSlPKCk7ZWxzZSBpZihiKEUpKWlmKFMpe2Zvcih2YXIgUj1FLmxldmVsO1I+bjtSLS0pRD1hLmdldEVsZW1lbnQodCxlLHIsUixLMS5kb3duc2NhbGUpO08oKX1lbHNlIHJldHVybiBhLnF1ZXVlRWxlbWVudCh0LEUubGV2ZWwtMSksRTtlbHNle3ZhciBrO2lmKCFUJiYhUyYmIXcpZm9yKHZhciBMPW4tMTtMPj1CNjtMLS0pe3ZhciBBPXUuZ2V0KHQsTCk7aWYoQSl7az1BO2JyZWFrfX1pZihiKGspKXJldHVybiBhLnF1ZXVlRWxlbWVudCh0LG4pLGs7di5jb250ZXh0LnRyYW5zbGF0ZSh2LnVzZWRXaWR0aCwwKSx2LmNvbnRleHQuc2NhbGUoaCxoKSx0aGlzLmRyYXdFbGVtZW50KHYuY29udGV4dCx0LGUscCwhMSksdi5jb250ZXh0LnNjYWxlKDEvaCwxL2gpLHYuY29udGV4dC50cmFuc2xhdGUoLXYudXNlZFdpZHRoLDApfXJldHVybiBtPXt4OnYudXNlZFdpZHRoLHRleHR1cmU6dixsZXZlbDpuLHNjYWxlOmgsd2lkdGg6ZCxoZWlnaHQ6ZixzY2FsZWRMYWJlbFNob3duOnB9LHYudXNlZFdpZHRoKz1NYXRoLmNlaWwoZCtRWmUpLHYuZWxlQ2FjaGVzLnB1c2gobSksdS5zZXQodCxuLG0pLGEuY2hlY2tUZXh0dXJlRnVsbG5lc3ModiksbX07WWkuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuaW52YWxpZGF0ZUVsZW1lbnQodFtlXSl9O1lpLmludmFsaWRhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmxvb2t1cCxuPVtdLGk9ci5pc0ludmFsaWQodCk7aWYoaSl7Zm9yKHZhciBhPUI2O2E8PU5CO2ErKyl7dmFyIHM9ci5nZXRGb3JDYWNoZWRLZXkodCxhKTtzJiZuLnB1c2gocyl9dmFyIGw9ci5pbnZhbGlkYXRlKHQpO2lmKGwpZm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW5bdV0sZj1oLnRleHR1cmU7Zi5pbnZhbGlkYXRlZFdpZHRoKz1oLndpZHRoLGguaW52YWxpZGF0ZWQ9ITAsZS5jaGVja1RleHR1cmVVdGlsaXR5KGYpfWUucmVtb3ZlRnJvbVF1ZXVlKHQpfX07WWkuY2hlY2tUZXh0dXJlVXRpbGl0eT1mdW5jdGlvbih0KXt0LmludmFsaWRhdGVkV2lkdGg+PXRKZSp0LndpZHRoJiZ0aGlzLnJldGlyZVRleHR1cmUodCl9O1lpLmNoZWNrVGV4dHVyZUZ1bGxuZXNzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmdldFRleHR1cmVRdWV1ZSh0LmhlaWdodCk7dC51c2VkV2lkdGgvdC53aWR0aD5ySmUmJnQuZnVsbG5lc3NDaGVja3M+PW5KZT9GZihyLHQpOnQuZnVsbG5lc3NDaGVja3MrK307WWkucmV0aXJlVGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5oZWlnaHQsbj1lLmdldFRleHR1cmVRdWV1ZShyKSxpPXRoaXMubG9va3VwO0ZmKG4sdCksdC5yZXRpcmVkPSEwO2Zvcih2YXIgYT10LmVsZUNhY2hlcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aS5kZWxldGVDYWNoZShsLmtleSxsLmxldmVsKX1HQihhKTt2YXIgdT1lLmdldFJldGlyZWRUZXh0dXJlUXVldWUocik7dS5wdXNoKHQpfTtZaS5hZGRUZXh0dXJlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2V0VGV4dHVyZVF1ZXVlKHQpLGk9e307cmV0dXJuIG4ucHVzaChpKSxpLmVsZUNhY2hlcz1bXSxpLmhlaWdodD10LGkud2lkdGg9TWF0aC5tYXgoWlplLGUpLGkudXNlZFdpZHRoPTAsaS5pbnZhbGlkYXRlZFdpZHRoPTAsaS5mdWxsbmVzc0NoZWNrcz0wLGkuY2FudmFzPXIucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhpLndpZHRoLGkuaGVpZ2h0KSxpLmNvbnRleHQ9aS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxpfTtZaS5yZWN5Y2xlVGV4dHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLG49ci5nZXRUZXh0dXJlUXVldWUodCksaT1yLmdldFJldGlyZWRUZXh0dXJlUXVldWUodCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO2lmKHMud2lkdGg+PWUpcmV0dXJuIHMucmV0aXJlZD0hMSxzLnVzZWRXaWR0aD0wLHMuaW52YWxpZGF0ZWRXaWR0aD0wLHMuZnVsbG5lc3NDaGVja3M9MCxHQihzLmVsZUNhY2hlcykscy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscy5jb250ZXh0LmNsZWFyUmVjdCgwLDAscy53aWR0aCxzLmhlaWdodCksRmYoaSxzKSxuLnB1c2gocyksc319O1lpLnF1ZXVlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdldEVsZW1lbnRRdWV1ZSgpLGk9ci5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLGE9dGhpcy5nZXRLZXkodCkscz1pW2FdO2lmKHMpcy5sZXZlbD1NYXRoLm1heChzLmxldmVsLGUpLHMuZWxlcy5tZXJnZSh0KSxzLnJlcXMrKyxuLnVwZGF0ZUl0ZW0ocyk7ZWxzZXt2YXIgbD17ZWxlczp0LnNwYXduKCkubWVyZ2UodCksbGV2ZWw6ZSxyZXFzOjEsa2V5OmF9O24ucHVzaChsKSxpW2FdPWx9fTtZaS5kZXF1ZXVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZS5nZXRFbGVtZW50UXVldWUoKSxuPWUuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxpPVtdLGE9ZS5sb29rdXAscz0wO3M8Y0plJiZyLnNpemUoKT4wO3MrKyl7dmFyIGw9ci5wb3AoKSx1PWwua2V5LGg9bC5lbGVzWzBdLGY9YS5oYXNDYWNoZShoLGwubGV2ZWwpO2lmKG5bdV09bnVsbCxmKWNvbnRpbnVlO2kucHVzaChsKTt2YXIgZD1lLmdldEJvdW5kaW5nQm94KGgpO2UuZ2V0RWxlbWVudChoLGQsdCxsLmxldmVsLEsxLmRlcXVldWUpfXJldHVybiBpfTtZaS5yZW1vdmVGcm9tUXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2V0RWxlbWVudFF1ZXVlKCksbj1lLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksaT10aGlzLmdldEtleSh0KSxhPW5baV07YSE9bnVsbCYmKGEuZWxlcy5sZW5ndGg9PT0xPyhhLnJlcXM9JEIsci51cGRhdGVJdGVtKGEpLHIucG9wKCksbltpXT1udWxsKTphLmVsZXMudW5tZXJnZSh0KSl9O1lpLm9uRGVxdWV1ZT1mdW5jdGlvbih0KXt0aGlzLm9uRGVxdWV1ZXMucHVzaCh0KX07WWkub2ZmRGVxdWV1ZT1mdW5jdGlvbih0KXtGZih0aGlzLm9uRGVxdWV1ZXMsdCl9O1lpLnNldHVwRGVxdWV1ZWluZz1EMWUuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6bEplLGRlcUNvc3Q6aUplLGRlcUF2Z0Nvc3Q6YUplLGRlcU5vRHJhd0Nvc3Q6c0plLGRlcUZhc3RDb3N0Om9KZSxkZXE6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUuZGVxdWV1ZShyLG4pfSwiZGVxIiksb25EZXFkOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUub25EZXF1ZXVlcy5sZW5ndGg7bisrKXt2YXIgaT1lLm9uRGVxdWV1ZXNbbl07aShyKX19LCJvbkRlcWQiKSxzaG91bGRSZWRyYXc6byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKylmb3IodmFyIHM9clthXS5lbGVzLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIHU9c1tsXS5ib3VuZGluZ0JveCgpO2lmKFVCKHUsaSkpcmV0dXJuITB9cmV0dXJuITF9LCJzaG91bGRSZWRyYXciKSxwcmlvcml0eTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlVHhyRGVxfSwicHJpb3JpdHkiKX0pO2hKZT0xLFFiPS00LFg2PTIsZkplPTMuOTksZEplPTUwLHBKZT01MCxtSmU9LjE1LGdKZT0uMSx5SmU9LjksdkplPS45LHhKZT0xLFdtZT0yNTAsYkplPTRlMyo0ZTMscW1lPTMyNzY3LFRKZT0hMCxSMWU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLG49ci5yZW5kZXJlcj1lLGk9bi5jeTtyLmxheWVyc0J5TGV2ZWw9e30sci5maXJzdEdldD0hMCxyLmxhc3RJbnZhbGlkYXRpb25UaW1lPW5oKCktMipXbWUsci5za2lwcGluZz0hMSxyLmVsZVR4ckRlcXM9aS5jb2xsZWN0aW9uKCksci5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50PXA0KGZ1bmN0aW9uKCl7ci5yZWZpbmVFbGVtZW50VGV4dHVyZXMoci5lbGVUeHJEZXFzKSxyLmVsZVR4ckRlcXMudW5tZXJnZShyLmVsZVR4ckRlcXMpfSxwSmUpLG4uYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKHMsbCl7bC1yLmxhc3RJbnZhbGlkYXRpb25UaW1lPD1XbWU/ci5za2lwcGluZz0hMDpyLnNraXBwaW5nPSExfSxuLmJlZm9yZVJlbmRlclByaW9yaXRpZXMubHlyVHhyU2tpcCk7dmFyIGE9byhmdW5jdGlvbihsLHUpe3JldHVybiB1LnJlcXMtbC5yZXFzfSwicVNvcnQiKTtyLmxheWVyc1F1ZXVlPW5ldyBtNChhKSxyLnNldHVwRGVxdWV1ZWluZygpfSwiTGF5ZXJlZFRleHR1cmVDYWNoZSIpLENhPVIxZS5wcm90b3R5cGUsWW1lPTAsd0plPU1hdGgucG93KDIsNTMpLTE7Q2EubWFrZUxheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMixlKSxuPU1hdGguY2VpbCh0LncqciksaT1NYXRoLmNlaWwodC5oKnIpLGE9dGhpcy5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKG4saSkscz17aWQ6WW1lPSsrWW1lJXdKZSxiYjp0LGxldmVsOmUsd2lkdGg6bixoZWlnaHQ6aSxjYW52YXM6YSxjb250ZXh0OmEuZ2V0Q29udGV4dCgiMmQiKSxlbGVzOltdLGVsZXNRdWV1ZTpbXSxyZXFzOjB9LGw9cy5jb250ZXh0LHU9LXMuYmIueDEsaD0tcy5iYi55MTtyZXR1cm4gbC5zY2FsZShyLHIpLGwudHJhbnNsYXRlKHUsaCksc307Q2EuZ2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5yZW5kZXJlcixhPWkuY3kscz1hLnpvb20oKSxsPW4uZmlyc3RHZXQ7aWYobi5maXJzdEdldD0hMSxyPT1udWxsKXtpZihyPU1hdGguY2VpbChWQihzKmUpKSxyPFFiKXI9UWI7ZWxzZSBpZihzPj1mSmV8fHI+WDYpcmV0dXJuIG51bGx9bi52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhyLHQpO3ZhciB1PW4ubGF5ZXJzQnlMZXZlbCxoPU1hdGgucG93KDIsciksZj11W3JdPXVbcl18fFtdLGQscD1uLmxldmVsSXNDb21wbGV0ZShyLHQpLG0sZz1vKGZ1bmN0aW9uKCl7dmFyIE89byhmdW5jdGlvbihJKXtpZihuLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nKEksdCksbi5sZXZlbElzQ29tcGxldGUoSSx0KSlyZXR1cm4gbT11W0ldLCEwfSwiY2FuVXNlQXNUbXBMdmwiKSxSPW8oZnVuY3Rpb24oSSl7aWYoIW0pZm9yKHZhciBNPXIrSTtRYjw9TSYmTTw9WDYmJiFPKE0pO00rPUkpO30sImNoZWNrTHZscyIpO1IoMSksUigtMSk7Zm9yKHZhciBrPWYubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBMPWZba107TC5pbnZhbGlkJiZGZihmLEwpfX0sImNoZWNrVGVtcExldmVscyIpO2lmKCFwKWcoKTtlbHNlIHJldHVybiBmO3ZhciB5PW8oZnVuY3Rpb24oKXtpZighZCl7ZD1ZcygpO2Zvcih2YXIgTz0wO088dC5sZW5ndGg7TysrKUNnZShkLHRbT10uYm91bmRpbmdCb3goKSl9cmV0dXJuIGR9LCJnZXRCYiIpLHY9byhmdW5jdGlvbihPKXtPPU98fHt9O3ZhciBSPU8uYWZ0ZXI7eSgpO3ZhciBrPU1hdGguY2VpbChkLncqaCksTD1NYXRoLmNlaWwoZC5oKmgpO2lmKGs+cW1lfHxMPnFtZSlyZXR1cm4gbnVsbDt2YXIgQT1rKkw7aWYoQT5iSmUpcmV0dXJuIG51bGw7dmFyIEk9bi5tYWtlTGF5ZXIoZCxyKTtpZihSIT1udWxsKXt2YXIgTT1mLmluZGV4T2YoUikrMTtmLnNwbGljZShNLDAsSSl9ZWxzZShPLmluc2VydD09PXZvaWQgMHx8Ty5pbnNlcnQpJiZmLnVuc2hpZnQoSSk7cmV0dXJuIEl9LCJtYWtlTGF5ZXIiKTtpZihuLnNraXBwaW5nJiYhbClyZXR1cm4gbnVsbDtmb3IodmFyIHg9bnVsbCxiPXQubGVuZ3RoL2hKZSxUPSFsLFM9MDtTPHQubGVuZ3RoO1MrKyl7dmFyIHc9dFtTXSxFPXcuX3ByaXZhdGUucnNjcmF0Y2gsXz1FLmltZ0xheWVyQ2FjaGVzPUUuaW1nTGF5ZXJDYWNoZXN8fHt9LEM9X1tyXTtpZihDKXt4PUM7Y29udGludWV9aWYoKCF4fHx4LmVsZXMubGVuZ3RoPj1ifHwhQWdlKHguYmIsdy5ib3VuZGluZ0JveCgpKSkmJih4PXYoe2luc2VydDohMCxhZnRlcjp4fSksIXgpKXJldHVybiBudWxsO218fFQ/bi5xdWV1ZUxheWVyKHgsdyk6bi5kcmF3RWxlSW5MYXllcih4LHcscixlKSx4LmVsZXMucHVzaCh3KSxfW3JdPXh9cmV0dXJuIG18fChUP251bGw6Zil9O0NhLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbD1mdW5jdGlvbih0LGUpe3JldHVybiB0fTtDYS5kcmF3RWxlSW5MYXllcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9dGhpcy5yZW5kZXJlcixzPXQuY29udGV4dCxsPWUuYm91bmRpbmdCb3goKTtsLnc9PT0wfHxsLmg9PT0wfHwhZS52aXNpYmxlKCl8fChyPWkuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKHIsbiksYS5zZXRJbWdTbW9vdGhpbmcocywhMSksYS5kcmF3Q2FjaGVkRWxlbWVudChzLGUsbnVsbCxudWxsLHIsVEplKSxhLnNldEltZ1Ntb290aGluZyhzLCEwKSl9O0NhLmxldmVsSXNDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmxheWVyc0J5TGV2ZWxbdF07aWYoIW58fG4ubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIGk9MCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV07aWYocy5yZXFzPjB8fHMuaW52YWxpZClyZXR1cm4hMTtpKz1zLmVsZXMubGVuZ3RofXJldHVybiBpPT09ZS5sZW5ndGh9O0NhLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnNCeUxldmVsW3RdO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2Zvcih2YXIgaT1yW25dLGE9LTEscz0wO3M8ZS5sZW5ndGg7cysrKWlmKGkuZWxlc1swXT09PWVbc10pe2E9czticmVha31pZihhPDApe3RoaXMuaW52YWxpZGF0ZUxheWVyKGkpO2NvbnRpbnVlfWZvcih2YXIgbD1hLHM9MDtzPGkuZWxlcy5sZW5ndGg7cysrKWlmKGkuZWxlc1tzXSE9PWVbbCtzXSl7dGhpcy5pbnZhbGlkYXRlTGF5ZXIoaSk7YnJlYWt9fX07Q2EudXBkYXRlRWxlbWVudHNJbkxheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLG49ZjQodFswXSksaT0wO2k8dC5sZW5ndGg7aSsrKWZvcih2YXIgYT1uP251bGw6dFtpXSxzPW4/dFtpXTp0W2ldLmVsZSxsPXMuX3ByaXZhdGUucnNjcmF0Y2gsdT1sLmltZ0xheWVyQ2FjaGVzPWwuaW1nTGF5ZXJDYWNoZXN8fHt9LGg9UWI7aDw9WDY7aCsrKXt2YXIgZj11W2hdO2YmJihhJiZyLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChmLmxldmVsKSE9PWEubGV2ZWx8fGUoZixzLGEpKX19O0NhLmhhdmVMYXllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPSExLHI9UWI7cjw9WDY7cisrKXt2YXIgbj10LmxheWVyc0J5TGV2ZWxbcl07aWYobiYmbi5sZW5ndGg+MCl7ZT0hMDticmVha319cmV0dXJuIGV9O0NhLmludmFsaWRhdGVFbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QubGVuZ3RoIT09MCYmKGUubGFzdEludmFsaWRhdGlvblRpbWU9bmgoKSwhKHQubGVuZ3RoPT09MHx8IWUuaGF2ZUxheWVycygpKSYmZS51cGRhdGVFbGVtZW50c0luTGF5ZXJzKHQsbyhmdW5jdGlvbihuLGksYSl7ZS5pbnZhbGlkYXRlTGF5ZXIobil9LCJpbnZhbEFzc29jTGF5ZXJzIikpKX07Q2EuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9bmgoKSwhdC5pbnZhbGlkKXt2YXIgZT10LmxldmVsLHI9dC5lbGVzLG49dGhpcy5sYXllcnNCeUxldmVsW2VdO0ZmKG4sdCksdC5lbGVzUXVldWU9W10sdC5pbnZhbGlkPSEwLHQucmVwbGFjZW1lbnQmJih0LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO2EmJihhW2VdPW51bGwpfX19O0NhLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UudXBkYXRlRWxlbWVudHNJbkxheWVycyh0LG8oZnVuY3Rpb24obixpLGEpe3ZhciBzPW4ucmVwbGFjZW1lbnQ7aWYoc3x8KHM9bi5yZXBsYWNlbWVudD1lLm1ha2VMYXllcihuLmJiLG4ubGV2ZWwpLHMucmVwbGFjZXM9bixzLmVsZXM9bi5lbGVzKSwhcy5yZXFzKWZvcih2YXIgbD0wO2w8cy5lbGVzLmxlbmd0aDtsKyspZS5xdWV1ZUxheWVyKHMscy5lbGVzW2xdKX0sInJlZmluZUVhY2hFbGUiKSl9O0NhLmVucXVldWVFbGVtZW50UmVmaW5lbWVudD1mdW5jdGlvbih0KXt0aGlzLmVsZVR4ckRlcXMubWVyZ2UodCksdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCl9O0NhLnF1ZXVlTGF5ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5sYXllcnNRdWV1ZSxpPXQuZWxlc1F1ZXVlLGE9aS5oYXNJZD1pLmhhc0lkfHx7fTtpZighdC5yZXBsYWNlbWVudCl7aWYoZSl7aWYoYVtlLmlkKCldKXJldHVybjtpLnB1c2goZSksYVtlLmlkKCldPSEwfXQucmVxcz8odC5yZXFzKyssbi51cGRhdGVJdGVtKHQpKToodC5yZXFzPTEsbi5wdXNoKHQpKX19O0NhLmRlcXVldWU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLmxheWVyc1F1ZXVlLG49W10saT0wO2k8eEplJiZyLnNpemUoKSE9PTA7KXt2YXIgYT1yLnBlZWsoKTtpZihhLnJlcGxhY2VtZW50KXtyLnBvcCgpO2NvbnRpbnVlfWlmKGEucmVwbGFjZXMmJmEhPT1hLnJlcGxhY2VzLnJlcGxhY2VtZW50KXtyLnBvcCgpO2NvbnRpbnVlfWlmKGEuaW52YWxpZCl7ci5wb3AoKTtjb250aW51ZX12YXIgcz1hLmVsZXNRdWV1ZS5zaGlmdCgpO3MmJihlLmRyYXdFbGVJbkxheWVyKGEscyxhLmxldmVsLHQpLGkrKyksbi5sZW5ndGg9PT0wJiZuLnB1c2goITApLGEuZWxlc1F1ZXVlLmxlbmd0aD09PTAmJihyLnBvcCgpLGEucmVxcz0wLGEucmVwbGFjZXMmJmUuYXBwbHlMYXllclJlcGxhY2VtZW50KGEpLGUucmVxdWVzdFJlZHJhdygpKX1yZXR1cm4gbn07Q2EuYXBwbHlMYXllclJlcGxhY2VtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmxheWVyc0J5TGV2ZWxbdC5sZXZlbF0sbj10LnJlcGxhY2VzLGk9ci5pbmRleE9mKG4pO2lmKCEoaTwwfHxuLmludmFsaWQpKXtyW2ldPXQ7Zm9yKHZhciBhPTA7YTx0LmVsZXMubGVuZ3RoO2ErKyl7dmFyIHM9dC5lbGVzW2FdLl9wcml2YXRlLGw9cy5pbWdMYXllckNhY2hlcz1zLmltZ0xheWVyQ2FjaGVzfHx7fTtsJiYobFt0LmxldmVsXT10KX1lLnJlcXVlc3RSZWRyYXcoKX19O0NhLnJlcXVlc3RSZWRyYXc9cDQoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlbmRlcmVyO3QucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3KCl9LDEwMCk7Q2Euc2V0dXBEZXF1ZXVlaW5nPUQxZS5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDpkSmUsZGVxQ29zdDptSmUsZGVxQXZnQ29zdDpnSmUsZGVxTm9EcmF3Q29zdDp5SmUsZGVxRmFzdENvc3Q6dkplLGRlcTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZGVxdWV1ZShyKX0sImRlcSIpLG9uRGVxZDp6QixzaG91bGRSZWRyYXc6YmdlLHByaW9yaXR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9LCJwcmlvcml0eSIpfSk7TjFlPXt9O28oa0plLCJwb2x5Z29uIik7byhFSmUsInRyaWFuZ2xlQmFja2N1cnZlIik7byhqbWUsInRyaWFuZ2xlVGVlIik7byhTSmUsImNpcmNsZVRyaWFuZ2xlIik7byhDSmUsImNpcmNsZSIpO04xZS5hcnJvd1NoYXBlSW1wbD1mdW5jdGlvbih0KXtyZXR1cm4oWG1lfHwoWG1lPXtwb2x5Z29uOmtKZSwidHJpYW5nbGUtYmFja2N1cnZlIjpFSmUsInRyaWFuZ2xlLXRlZSI6am1lLCJjaXJjbGUtdHJpYW5nbGUiOlNKZSwidHJpYW5nbGUtY3Jvc3MiOmptZSxjaXJjbGU6Q0plfSkpW3RdfTt0dT17fTt0dS5kcmF3RWxlbWVudD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9dGhpcztlLmlzTm9kZSgpP3MuZHJhd05vZGUodCxlLHIsbixpLGEpOnMuZHJhd0VkZ2UodCxlLHIsbixpLGEpfTt0dS5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2UuaXNOb2RlKCk/ci5kcmF3Tm9kZU92ZXJsYXkodCxlKTpyLmRyYXdFZGdlT3ZlcmxheSh0LGUpfTt0dS5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztlLmlzTm9kZSgpP3IuZHJhd05vZGVVbmRlcmxheSh0LGUpOnIuZHJhd0VkZ2VVbmRlcmxheSh0LGUpfTt0dS5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXt2YXIgdT10aGlzLGg9ci5nZXRCb3VuZGluZ0JveChlKTtpZighKGgudz09PTB8fGguaD09PTApKXt2YXIgZj1yLmdldEVsZW1lbnQoZSxoLG4saSxhKTtpZihmIT1udWxsKXt2YXIgZD1sKHUsZSk7aWYoZD09PTApcmV0dXJuO3ZhciBwPXModSxlKSxtPWgueDEsZz1oLnkxLHk9aC53LHY9aC5oLHgsYixULFMsdztpZihwIT09MCl7dmFyIEU9ci5nZXRSb3RhdGlvblBvaW50KGUpO1Q9RS54LFM9RS55LHQudHJhbnNsYXRlKFQsUyksdC5yb3RhdGUocCksdz11LmdldEltZ1Ntb290aGluZyh0KSx3fHx1LnNldEltZ1Ntb290aGluZyh0LCEwKTt2YXIgXz1yLmdldFJvdGF0aW9uT2Zmc2V0KGUpO3g9Xy54LGI9Xy55fWVsc2UgeD1tLGI9Zzt2YXIgQztkIT09MSYmKEM9dC5nbG9iYWxBbHBoYSx0Lmdsb2JhbEFscGhhPUMqZCksdC5kcmF3SW1hZ2UoZi50ZXh0dXJlLmNhbnZhcyxmLngsMCxmLndpZHRoLGYuaGVpZ2h0LHgsYix5LHYpLGQhPT0xJiYodC5nbG9iYWxBbHBoYT1DKSxwIT09MCYmKHQucm90YXRlKC1wKSx0LnRyYW5zbGF0ZSgtVCwtUyksd3x8dS5zZXRJbWdTbW9vdGhpbmcodCwhMSkpfWVsc2Ugci5kcmF3RWxlbWVudCh0LGUpfX07QUplPW8oZnVuY3Rpb24oKXtyZXR1cm4gMH0sImdldFplcm9Sb3RhdGlvbiIpLF9KZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsbnVsbCl9LCJnZXRMYWJlbFJvdGF0aW9uIiksREplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5nZXRUZXh0QW5nbGUociwic291cmNlIil9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uIiksTEplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5nZXRUZXh0QW5nbGUociwidGFyZ2V0Iil9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uIiksUkplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gci5lZmZlY3RpdmVPcGFjaXR5KCl9LCJnZXRPcGFjaXR5IikscEI9byhmdW5jdGlvbihlLHIpe3JldHVybiByLnBzdHlsZSgidGV4dC1vcGFjaXR5IikucGZWYWx1ZSpyLmVmZmVjdGl2ZU9wYWNpdHkoKX0sImdldFRleHRPcGFjaXR5Iik7dHUuZHJhd0NhY2hlZEVsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPXRoaXMsbD1zLmRhdGEsdT1sLmVsZVR4ckNhY2hlLGg9bC5sYmxUeHJDYWNoZSxmPWwuc2xiVHhyQ2FjaGUsZD1sLnRsYlR4ckNhY2hlLHA9ZS5ib3VuZGluZ0JveCgpLG09YT09PSEwP3UucmVhc29ucy5oaWdoUXVhbGl0eTpudWxsO2lmKCEocC53PT09MHx8cC5oPT09MHx8IWUudmlzaWJsZSgpKSYmKCFufHxVQihwLG4pKSl7dmFyIGc9ZS5pc0VkZ2UoKSx5PWUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7cy5kcmF3RWxlbWVudFVuZGVybGF5KHQsZSkscy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24odCxlLHUscixpLG0sQUplLFJKZSksKCFnfHwheSkmJnMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSxoLHIsaSxtLF9KZSxwQiksZyYmIXkmJihzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsZixyLGksbSxESmUscEIpLHMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSxkLHIsaSxtLExKZSxwQikpLHMuZHJhd0VsZW1lbnRPdmVybGF5KHQsZSl9fTt0dS5kcmF3RWxlbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07ci5kcmF3RWxlbWVudCh0LGkpfX07dHUuZHJhd0NhY2hlZEVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXTtpLmRyYXdDYWNoZWRFbGVtZW50KHQscyxyLG4pfX07dHUuZHJhd0NhY2hlZE5vZGVzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXTtzLmlzTm9kZSgpJiZpLmRyYXdDYWNoZWRFbGVtZW50KHQscyxyLG4pfX07dHUuZHJhd0xheWVyZWRFbGVtZW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5kYXRhLmx5clR4ckNhY2hlLmdldExheWVycyhlLHIpO2lmKGEpZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1sLmJiO3Uudz09PTB8fHUuaD09PTB8fHQuZHJhd0ltYWdlKGwuY2FudmFzLHUueDEsdS55MSx1LncsdS5oKX1lbHNlIGkuZHJhd0NhY2hlZEVsZW1lbnRzKHQsZSxyLG4pfTtvaD17fTtvaC5kcmF3RWRnZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcyxsPWUuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShhJiYhZS52aXNpYmxlKCkpJiYhKGwuYmFkTGluZXx8bC5hbGxwdHM9PW51bGx8fGlzTmFOKGwuYWxscHRzWzBdKSkpe3ZhciB1O3ImJih1PXIsdC50cmFuc2xhdGUoLXUueDEsLXUueTEpKTt2YXIgaD1hP2UucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxmPWE/ZS5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsZD1lLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxwPWUucHN0eWxlKCJsaW5lLXN0eWxlIikudmFsdWUsbT1lLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGc9ZS5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUseT1lLnBzdHlsZSgibGluZS1vdXRsaW5lLXdpZHRoIikudmFsdWUsdj1lLnBzdHlsZSgibGluZS1vdXRsaW5lLWNvbG9yIikudmFsdWUseD1oKmYsYj1oKmYsVD1vKGZ1bmN0aW9uKCl7dmFyIEk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOng7ZD09PSJzdHJhaWdodC10cmlhbmdsZSI/KHMuZWxlU3Ryb2tlU3R5bGUodCxlLEkpLHMuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZSx0LGwuYWxscHRzKSk6KHQubGluZVdpZHRoPW0sdC5saW5lQ2FwPWcscy5lbGVTdHJva2VTdHlsZSh0LGUsSSkscy5kcmF3RWRnZVBhdGgoZSx0LGwuYWxscHRzLHApLHQubGluZUNhcD0iYnV0dCIpfSwiZHJhd0xpbmUiKSxTPW8oZnVuY3Rpb24oKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06eDtpZih0LmxpbmVXaWR0aD1tK3ksdC5saW5lQ2FwPWcseT4wKXMuY29sb3JTdHJva2VTdHlsZSh0LHZbMF0sdlsxXSx2WzJdLEkpO2Vsc2V7dC5saW5lQ2FwPSJidXR0IjtyZXR1cm59ZD09PSJzdHJhaWdodC10cmlhbmdsZSI/cy5kcmF3RWRnZVRyaWFuZ2xlUGF0aChlLHQsbC5hbGxwdHMpOihzLmRyYXdFZGdlUGF0aChlLHQsbC5hbGxwdHMscCksdC5saW5lQ2FwPSJidXR0Iil9LCJkcmF3TGluZU91dGxpbmUiKSx3PW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdFZGdlT3ZlcmxheSh0LGUpfSwiZHJhd092ZXJsYXkiKSxFPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdFZGdlVW5kZXJsYXkodCxlKX0sImRyYXdVbmRlcmxheSIpLF89byhmdW5jdGlvbigpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpiO3MuZHJhd0Fycm93aGVhZHModCxlLEkpfSwiZHJhd0Fycm93cyIpLEM9byhmdW5jdGlvbigpe3MuZHJhd0VsZW1lbnRUZXh0KHQsZSxudWxsLG4pfSwiZHJhd1RleHQiKTt0LmxpbmVKb2luPSJyb3VuZCI7dmFyIEQ9ZS5wc3R5bGUoImdob3N0IikudmFsdWU9PT0ieWVzIjtpZihEKXt2YXIgTz1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLFI9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZSxrPWUucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsTD14Kms7dC50cmFuc2xhdGUoTyxSKSxUKEwpLF8oTCksdC50cmFuc2xhdGUoLU8sLVIpfWVsc2UgUygpO0UoKSxUKCksXygpLHcoKSxDKCksciYmdC50cmFuc2xhdGUodS54MSx1LnkxKX19O00xZT1vKGZ1bmN0aW9uKGUpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKG4udmlzaWJsZSgpKXt2YXIgaT1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLW9wYWNpdHkiKSkudmFsdWU7aWYoaSE9PTApe3ZhciBhPXRoaXMscz1hLnVzZVBhdGhzKCksbD1uLl9wcml2YXRlLnJzY3JhdGNoLHU9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1wYWRkaW5nIikpLnBmVmFsdWUsaD0yKnUsZj1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLWNvbG9yIikpLnZhbHVlO3IubGluZVdpZHRoPWgsbC5lZGdlVHlwZT09PSJzZWxmIiYmIXM/ci5saW5lQ2FwPSJidXR0IjpyLmxpbmVDYXA9InJvdW5kIixhLmNvbG9yU3Ryb2tlU3R5bGUocixmWzBdLGZbMV0sZlsyXSxpKSxhLmRyYXdFZGdlUGF0aChuLHIsbC5hbGxwdHMsInNvbGlkIil9fX19LCJkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSIpO29oLmRyYXdFZGdlT3ZlcmxheT1NMWUoIm92ZXJsYXkiKTtvaC5kcmF3RWRnZVVuZGVybGF5PU0xZSgidW5kZXJsYXkiKTtvaC5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fcHJpdmF0ZS5yc2NyYXRjaCxhPWUscyxsPSExLHU9dGhpcy51c2VQYXRocygpLGg9dC5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxmPXQucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZih1KXt2YXIgZD1yLmpvaW4oIiQiKSxwPWkucGF0aENhY2hlS2V5JiZpLnBhdGhDYWNoZUtleT09PWQ7cD8ocz1lPWkucGF0aENhY2hlLGw9ITApOihzPWU9bmV3IFBhdGgyRCxpLnBhdGhDYWNoZUtleT1kLGkucGF0aENhY2hlPXMpfWlmKGEuc2V0TGluZURhc2gpc3dpdGNoKG4pe2Nhc2UiZG90dGVkIjphLnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6YS5zZXRMaW5lRGFzaChoKSxhLmxpbmVEYXNoT2Zmc2V0PWY7YnJlYWs7Y2FzZSJzb2xpZCI6YS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoIWwmJiFpLmJhZExpbmUpc3dpdGNoKGUuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHJbMF0sclsxXSksaS5lZGdlVHlwZSl7Y2FzZSJiZXppZXIiOmNhc2Uic2VsZiI6Y2FzZSJjb21wb3VuZCI6Y2FzZSJtdWx0aWJlemllciI6Zm9yKHZhciBtPTI7bSszPHIubGVuZ3RoO20rPTQpZS5xdWFkcmF0aWNDdXJ2ZVRvKHJbbV0sclttKzFdLHJbbSsyXSxyW20rM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgZz0yO2crMTxyLmxlbmd0aDtnKz0yKWUubGluZVRvKHJbZ10scltnKzFdKTticmVhaztjYXNlInNlZ21lbnRzIjppZihpLmlzUm91bmQpe3ZhciB5PXZvKGkucm91bmRDb3JuZXJzKSx2O3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIHg9di52YWx1ZTtUMWUoZSx4KX19Y2F0Y2goVCl7eS5lKFQpfWZpbmFsbHl7eS5mKCl9ZS5saW5lVG8ocltyLmxlbmd0aC0yXSxyW3IubGVuZ3RoLTFdKX1lbHNlIGZvcih2YXIgYj0yO2IrMTxyLmxlbmd0aDtiKz0yKWUubGluZVRvKHJbYl0scltiKzFdKTticmVha31lPWEsdT9lLnN0cm9rZShzKTplLnN0cm9rZSgpLGUuc2V0TGluZURhc2gmJmUuc2V0TGluZURhc2goW10pfTtvaC5kcmF3RWRnZVRyaWFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscil7ZS5maWxsU3R5bGU9ZS5zdHJva2VTdHlsZTtmb3IodmFyIG49dC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxpPTA7aSsxPHIubGVuZ3RoO2krPTIpe3ZhciBhPVtyW2krMl0tcltpXSxyW2krM10tcltpKzFdXSxzPU1hdGguc3FydChhWzBdKmFbMF0rYVsxXSphWzFdKSxsPVthWzFdL3MsLWFbMF0vc10sdT1bbFswXSpuLzIsbFsxXSpuLzJdO2UuYmVnaW5QYXRoKCksZS5tb3ZlVG8ocltpXS11WzBdLHJbaSsxXS11WzFdKSxlLmxpbmVUbyhyW2ldK3VbMF0scltpKzFdK3VbMV0pLGUubGluZVRvKHJbaSsyXSxyW2krM10pLGUuY2xvc2VQYXRoKCksZS5maWxsKCl9fTtvaC5kcmF3QXJyb3doZWFkcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5fcHJpdmF0ZS5yc2NyYXRjaCxpPW4uZWRnZVR5cGU9PT0iaGF5c3RhY2siO2l8fHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsInNvdXJjZSIsbi5hcnJvd1N0YXJ0WCxuLmFycm93U3RhcnRZLG4uc3JjQXJyb3dBbmdsZSxyKSx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJtaWQtdGFyZ2V0IixuLm1pZFgsbi5taWRZLG4ubWlkdGd0QXJyb3dBbmdsZSxyKSx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJtaWQtc291cmNlIixuLm1pZFgsbi5taWRZLG4ubWlkc3JjQXJyb3dBbmdsZSxyKSxpfHx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJ0YXJnZXQiLG4uYXJyb3dFbmRYLG4uYXJyb3dFbmRZLG4udGd0QXJyb3dBbmdsZSxyKX07b2guZHJhd0Fycm93aGVhZD1mdW5jdGlvbih0LGUscixuLGksYSxzKXtpZighKGlzTmFOKG4pfHxuPT1udWxsfHxpc05hTihpKXx8aT09bnVsbHx8aXNOYU4oYSl8fGE9PW51bGwpKXt2YXIgbD10aGlzLHU9ZS5wc3R5bGUocisiLWFycm93LXNoYXBlIikudmFsdWU7aWYodSE9PSJub25lIil7dmFyIGg9ZS5wc3R5bGUocisiLWFycm93LWZpbGwiKS52YWx1ZT09PSJob2xsb3ciPyJib3RoIjoiZmlsbGVkIixmPWUucHN0eWxlKHIrIi1hcnJvdy1maWxsIikudmFsdWUsZD1lLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHA9ZS5wc3R5bGUocisiLWFycm93LXdpZHRoIiksbT1wLnZhbHVlPT09Im1hdGNoLWxpbmUiP2Q6cC5wZlZhbHVlO3AudW5pdHM9PT0iJSImJihtKj1kKTt2YXIgZz1lLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO3M9PT12b2lkIDAmJihzPWcpO3ZhciB5PXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOyhzIT09MXx8Zj09PSJob2xsb3ciKSYmKHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLGwuY29sb3JGaWxsU3R5bGUodCwyNTUsMjU1LDI1NSwxKSxsLmNvbG9yU3Ryb2tlU3R5bGUodCwyNTUsMjU1LDI1NSwxKSxsLmRyYXdBcnJvd1NoYXBlKGUsdCxoLGQsdSxtLG4saSxhKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj15KTt2YXIgdj1lLnBzdHlsZShyKyItYXJyb3ctY29sb3IiKS52YWx1ZTtsLmNvbG9yRmlsbFN0eWxlKHQsdlswXSx2WzFdLHZbMl0scyksbC5jb2xvclN0cm9rZVN0eWxlKHQsdlswXSx2WzFdLHZbMl0scyksbC5kcmF3QXJyb3dTaGFwZShlLHQsZixkLHUsbSxuLGksYSl9fX07b2guZHJhd0Fycm93U2hhcGU9ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsLHUpe3ZhciBoPXRoaXMsZj10aGlzLnVzZVBhdGhzKCkmJmkhPT0idHJpYW5nbGUtY3Jvc3MiLGQ9ITEscCxtPWUsZz17eDpzLHk6bH0seT10LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSx2PXRoaXMuZ2V0QXJyb3dXaWR0aChuLHkpLHg9aC5hcnJvd1NoYXBlc1tpXTtpZihmKXt2YXIgYj1oLmFycm93UGF0aENhY2hlPWguYXJyb3dQYXRoQ2FjaGV8fFtdLFQ9QmYoaSksUz1iW1RdO1MhPW51bGw/KHA9ZT1TLGQ9ITApOihwPWU9bmV3IFBhdGgyRCxiW1RdPXApfWR8fChlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxmP3guZHJhdyhlLDEsMCx7eDowLHk6MH0sMSk6eC5kcmF3KGUsdix1LGcsbiksZS5jbG9zZVBhdGgmJmUuY2xvc2VQYXRoKCkpLGU9bSxmJiYoZS50cmFuc2xhdGUocyxsKSxlLnJvdGF0ZSh1KSxlLnNjYWxlKHYsdikpLChyPT09ImZpbGxlZCJ8fHI9PT0iYm90aCIpJiYoZj9lLmZpbGwocCk6ZS5maWxsKCkpLChyPT09ImhvbGxvdyJ8fHI9PT0iYm90aCIpJiYoZS5saW5lV2lkdGg9YS8oZj92OjEpLGUubGluZUpvaW49Im1pdGVyIixmP2Uuc3Ryb2tlKHApOmUuc3Ryb2tlKCkpLGYmJihlLnNjYWxlKDEvdiwxL3YpLGUucm90YXRlKC11KSxlLnRyYW5zbGF0ZSgtcywtbCkpfTtpRj17fTtpRi5zYWZlRHJhd0ltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgpe2lmKCEoaTw9MHx8YTw9MHx8dTw9MHx8aDw9MCkpdHJ5e3QuZHJhd0ltYWdlKGUscixuLGksYSxzLGwsdSxoKX1jYXRjaChmKXtobihmKX19O2lGLmRyYXdJbnNjcmliZWRJbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMscz1yLnBvc2l0aW9uKCksbD1zLngsdT1zLnksaD1yLmN5KCkuc3R5bGUoKSxmPWguZ2V0SW5kZXhlZFN0eWxlLmJpbmQoaCksZD1mKHIsImJhY2tncm91bmQtZml0IiwidmFsdWUiLG4pLHA9ZihyLCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixuKSxtPXIud2lkdGgoKSxnPXIuaGVpZ2h0KCkseT1yLnBhZGRpbmcoKSoyLHY9bSsoZihyLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIiwidmFsdWUiLG4pPT09ImlubmVyIj8wOnkpLHg9ZysoZihyLCJiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byIsInZhbHVlIixuKT09PSJpbm5lciI/MDp5KSxiPXIuX3ByaXZhdGUucnNjcmF0Y2gsVD1mKHIsImJhY2tncm91bmQtY2xpcCIsInZhbHVlIixuKSxTPVQ9PT0ibm9kZSIsdz1mKHIsImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSIsInZhbHVlIixuKSppLEU9ZihyLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixuKSxfPXIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU7XyE9PSJhdXRvIiYmKF89ci5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlKTt2YXIgQz1lLndpZHRofHxlLmNhY2hlZFcsRD1lLmhlaWdodHx8ZS5jYWNoZWRIOyhDPT1udWxsfHxEPT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksQz1lLmNhY2hlZFc9ZS53aWR0aHx8ZS5vZmZzZXRXaWR0aCxEPWUuY2FjaGVkSD1lLmhlaWdodHx8ZS5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKSk7dmFyIE89QyxSPUQ7aWYoZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLG4pIT09ImF1dG8iJiYoZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLG4pPT09IiUiP089ZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwicGZWYWx1ZSIsbikqdjpPPWYociwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLG4pKSxmKHIsImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLG4pIT09ImF1dG8iJiYoZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixuKT09PSIlIj9SPWYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJwZlZhbHVlIixuKSp4OlI9ZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLG4pKSwhKE89PT0wfHxSPT09MCkpe2lmKGQ9PT0iY29udGFpbiIpe3ZhciBrPU1hdGgubWluKHYvTyx4L1IpO08qPWssUio9a31lbHNlIGlmKGQ9PT0iY292ZXIiKXt2YXIgaz1NYXRoLm1heCh2L08seC9SKTtPKj1rLFIqPWt9dmFyIEw9bC12LzIsQT1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teCIsInVuaXRzIixuKSxJPWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsbik7QT09PSIlIj9MKz0odi1PKSpJOkwrPUk7dmFyIE09ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC14IiwidW5pdHMiLG4pLFA9ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsbik7TT09PSIlIj9MKz0odi1PKSpQOkwrPVA7dmFyIEI9dS14LzIsRj1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teSIsInVuaXRzIixuKSx6PWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi15IiwicGZWYWx1ZSIsbik7Rj09PSIlIj9CKz0oeC1SKSp6OkIrPXo7dmFyICQ9ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC15IiwidW5pdHMiLG4pLFU9ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC15IiwicGZWYWx1ZSIsbik7JD09PSIlIj9CKz0oeC1SKSpVOkIrPVUsYi5wYXRoQ2FjaGUmJihMLT1sLEItPXUsbD0wLHU9MCk7dmFyIEs9dC5nbG9iYWxBbHBoYTt0Lmdsb2JhbEFscGhhPXc7dmFyIGVlPWEuZ2V0SW1nU21vb3RoaW5nKHQpLFk9ITE7aWYoRT09PSJubyImJmVlPyhhLnNldEltZ1Ntb290aGluZyh0LCExKSxZPSEwKTpFPT09InllcyImJiFlZSYmKGEuc2V0SW1nU21vb3RoaW5nKHQsITApLFk9ITApLHA9PT0ibm8tcmVwZWF0IilTJiYodC5zYXZlKCksYi5wYXRoQ2FjaGU/dC5jbGlwKGIucGF0aENhY2hlKTooYS5ub2RlU2hhcGVzW2EuZ2V0Tm9kZVNoYXBlKHIpXS5kcmF3KHQsbCx1LHYseCxfLGIpLHQuY2xpcCgpKSksYS5zYWZlRHJhd0ltYWdlKHQsZSwwLDAsQyxELEwsQixPLFIpLFMmJnQucmVzdG9yZSgpO2Vsc2V7dmFyIGNlPXQuY3JlYXRlUGF0dGVybihlLHApO3QuZmlsbFN0eWxlPWNlLGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShyKV0uZHJhdyh0LGwsdSx2LHgsXyxiKSx0LnRyYW5zbGF0ZShMLEIpLHQuZmlsbCgpLHQudHJhbnNsYXRlKC1MLC1CKX10Lmdsb2JhbEFscGhhPUssWSYmYS5zZXRJbWdTbW9vdGhpbmcodCxlZSl9fTtuMD17fTtuMC5lbGVUZXh0QmlnZ2VyVGhhbk1pbj1mdW5jdGlvbih0LGUpe2lmKCFlKXt2YXIgcj10LmN5KCkuem9vbSgpLG49dGhpcy5nZXRQaXhlbFJhdGlvKCksaT1NYXRoLmNlaWwoVkIocipuKSk7ZT1NYXRoLnBvdygyLGkpfXZhciBhPXQucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKmUscz10LnBzdHlsZSgibWluLXpvb21lZC1mb250LXNpemUiKS5wZlZhbHVlO3JldHVybiEoYTxzKX07bjAuZHJhd0VsZW1lbnRUZXh0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcztpZihuPT1udWxsKXtpZihhJiYhcy5lbGVUZXh0QmlnZ2VyVGhhbk1pbihlKSlyZXR1cm59ZWxzZSBpZihuPT09ITEpcmV0dXJuO2lmKGUuaXNOb2RlKCkpe3ZhciBsPWUucHN0eWxlKCJsYWJlbCIpO2lmKCFsfHwhbC52YWx1ZSlyZXR1cm47dmFyIHU9cy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZSk7dC50ZXh0QWxpZ249dSx0LnRleHRCYXNlbGluZT0iYm90dG9tIn1lbHNle3ZhciBoPWUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmUsZj1lLnBzdHlsZSgibGFiZWwiKSxkPWUucHN0eWxlKCJzb3VyY2UtbGFiZWwiKSxwPWUucHN0eWxlKCJ0YXJnZXQtbGFiZWwiKTtpZihofHwoIWZ8fCFmLnZhbHVlKSYmKCFkfHwhZC52YWx1ZSkmJighcHx8IXAudmFsdWUpKXJldHVybjt0LnRleHRBbGlnbj0iY2VudGVyIix0LnRleHRCYXNlbGluZT0iYm90dG9tIn12YXIgbT0hcixnO3ImJihnPXIsdC50cmFuc2xhdGUoLWcueDEsLWcueTEpKSxpPT1udWxsPyhzLmRyYXdUZXh0KHQsZSxudWxsLG0sYSksZS5pc0VkZ2UoKSYmKHMuZHJhd1RleHQodCxlLCJzb3VyY2UiLG0sYSkscy5kcmF3VGV4dCh0LGUsInRhcmdldCIsbSxhKSkpOnMuZHJhd1RleHQodCxlLGksbSxhKSxyJiZ0LnRyYW5zbGF0ZShnLngxLGcueTEpfTtuMC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciByPTA7cjx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3IrKylpZihlPXRoaXMuZm9udENhY2hlc1tyXSxlLmNvbnRleHQ9PT10KXJldHVybiBlO3JldHVybiBlPXtjb250ZXh0OnR9LHRoaXMuZm9udENhY2hlcy5wdXNoKGUpLGV9O24wLnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLG49ZS5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxpPWUucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsYT1lLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxzPWUucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLGw9cj9lLmVmZmVjdGl2ZU9wYWNpdHkoKSplLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSx1PWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKmwsaD1lLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxmPWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt0LmZvbnQ9bisiICIrcysiICIraSsiICIrYSx0LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh0LGhbMF0saFsxXSxoWzJdLGwpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh0LGZbMF0sZlsxXSxmWzJdLHUpfTtvKG1CLCJyb3VuZFJlY3QiKTtuMC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoLGE9ZT9lKyItIjoiIixzPXQucHN0eWxlKGErInRleHQtcm90YXRpb24iKTtpZihzLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiKXt2YXIgbD1XbChpLCJsYWJlbEFuZ2xlIixlKTtyPXQuaXNFZGdlKCk/bDowfWVsc2Ugcy5zdHJWYWx1ZT09PSJub25lIj9yPTA6cj1zLnBmVmFsdWU7cmV0dXJuIHJ9O24wLmRyYXdUZXh0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsYT1lLl9wcml2YXRlLHM9YS5yc2NyYXRjaCxsPWk/ZS5lZmZlY3RpdmVPcGFjaXR5KCk6MTtpZighKGkmJihsPT09MHx8ZS5wc3R5bGUoInRleHQtb3BhY2l0eSIpLnZhbHVlPT09MCkpKXtyPT09Im1haW4iJiYocj1udWxsKTt2YXIgdT1XbChzLCJsYWJlbFgiLHIpLGg9V2wocywibGFiZWxZIixyKSxmLGQscD10aGlzLmdldExhYmVsVGV4dChlLHIpO2lmKHAhPW51bGwmJnAhPT0iIiYmIWlzTmFOKHUpJiYhaXNOYU4oaCkpe3RoaXMuc2V0dXBUZXh0U3R5bGUodCxlLGkpO3ZhciBtPXI/cisiLSI6IiIsZz1XbChzLCJsYWJlbFdpZHRoIixyKSx5PVdsKHMsImxhYmVsSGVpZ2h0IixyKSx2PWUucHN0eWxlKG0rInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHg9ZS5wc3R5bGUobSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsYj1lLmlzRWRnZSgpLFQ9ZS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUsUz1lLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtiJiYoVD0iY2VudGVyIixTPSJjZW50ZXIiKSx1Kz12LGgrPXg7dmFyIHc7c3dpdGNoKG4/dz10aGlzLmdldFRleHRBbmdsZShlLHIpOnc9MCx3IT09MCYmKGY9dSxkPWgsdC50cmFuc2xhdGUoZixkKSx0LnJvdGF0ZSh3KSx1PTAsaD0wKSxTKXtjYXNlInRvcCI6YnJlYWs7Y2FzZSJjZW50ZXIiOmgrPXkvMjticmVhaztjYXNlImJvdHRvbSI6aCs9eTticmVha312YXIgRT1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSxfPWUucHN0eWxlKCJ0ZXh0LWJvcmRlci1vcGFjaXR5IikudmFsdWUsQz1lLnBzdHlsZSgidGV4dC1ib3JkZXItd2lkdGgiKS5wZlZhbHVlLEQ9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIikucGZWYWx1ZSxPPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiKS5zdHJWYWx1ZSxSPU8uaW5kZXhPZigicm91bmQiKT09PTAsaz0yO2lmKEU+MHx8Qz4wJiZfPjApe3ZhciBMPXUtRDtzd2l0Y2goVCl7Y2FzZSJsZWZ0IjpMLT1nO2JyZWFrO2Nhc2UiY2VudGVyIjpMLT1nLzI7YnJlYWt9dmFyIEE9aC15LUQsST1nKzIqRCxNPXkrMipEO2lmKEU+MCl7dmFyIFA9dC5maWxsU3R5bGUsQj1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIikudmFsdWU7dC5maWxsU3R5bGU9InJnYmEoIitCWzBdKyIsIitCWzFdKyIsIitCWzJdKyIsIitFKmwrIikiLFI/bUIodCxMLEEsSSxNLGspOnQuZmlsbFJlY3QoTCxBLEksTSksdC5maWxsU3R5bGU9UH1pZihDPjAmJl8+MCl7dmFyIEY9dC5zdHJva2VTdHlsZSx6PXQubGluZVdpZHRoLCQ9ZS5wc3R5bGUoInRleHQtYm9yZGVyLWNvbG9yIikudmFsdWUsVT1lLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih0LnN0cm9rZVN0eWxlPSJyZ2JhKCIrJFswXSsiLCIrJFsxXSsiLCIrJFsyXSsiLCIrXypsKyIpIix0LmxpbmVXaWR0aD1DLHQuc2V0TGluZURhc2gpc3dpdGNoKFUpe2Nhc2UiZG90dGVkIjp0LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6dC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOnQubGluZVdpZHRoPUMvNCx0LnNldExpbmVEYXNoKFtdKTticmVhaztjYXNlInNvbGlkIjp0LnNldExpbmVEYXNoKFtdKTticmVha31pZihSP21CKHQsTCxBLEksTSxrLCJzdHJva2UiKTp0LnN0cm9rZVJlY3QoTCxBLEksTSksVT09PSJkb3VibGUiKXt2YXIgSz1DLzI7Uj9tQih0LEwrSyxBK0ssSS1LKjIsTS1LKjIsaywic3Ryb2tlIik6dC5zdHJva2VSZWN0KEwrSyxBK0ssSS1LKjIsTS1LKjIpfXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pLHQubGluZVdpZHRoPXosdC5zdHJva2VTdHlsZT1GfX12YXIgZWU9MiplLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihlZT4wJiYodC5saW5lV2lkdGg9ZWUpLGUucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZT09PSJ3cmFwIil7dmFyIFk9V2wocywibGFiZWxXcmFwQ2FjaGVkTGluZXMiLHIpLGNlPVdsKHMsImxhYmVsTGluZUhlaWdodCIsciksWj1nLzIsdWU9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZSk7c3dpdGNoKHVlPT09ImF1dG8ifHwoVD09PSJsZWZ0Ij91ZT09PSJsZWZ0Ij91Kz0tZzp1ZT09PSJjZW50ZXIiJiYodSs9LVopOlQ9PT0iY2VudGVyIj91ZT09PSJsZWZ0Ij91Kz0tWjp1ZT09PSJyaWdodCImJih1Kz1aKTpUPT09InJpZ2h0IiYmKHVlPT09ImNlbnRlciI/dSs9Wjp1ZT09PSJyaWdodCImJih1Kz1nKSkpLFMpe2Nhc2UidG9wIjpoLT0oWS5sZW5ndGgtMSkqY2U7YnJlYWs7Y2FzZSJjZW50ZXIiOmNhc2UiYm90dG9tIjpoLT0oWS5sZW5ndGgtMSkqY2U7YnJlYWt9Zm9yKHZhciBRPTA7UTxZLmxlbmd0aDtRKyspZWU+MCYmdC5zdHJva2VUZXh0KFlbUV0sdSxoKSx0LmZpbGxUZXh0KFlbUV0sdSxoKSxoKz1jZX1lbHNlIGVlPjAmJnQuc3Ryb2tlVGV4dChwLHUsaCksdC5maWxsVGV4dChwLHUsaCk7dyE9PTAmJih0LnJvdGF0ZSgtdyksdC50cmFuc2xhdGUoLWYsLWQpKX19fTtweT17fTtweS5kcmF3Tm9kZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcyxsLHUsaD1lLl9wcml2YXRlLGY9aC5yc2NyYXRjaCxkPWUucG9zaXRpb24oKTtpZighKCFfdChkLngpfHwhX3QoZC55KSkmJiEoYSYmIWUudmlzaWJsZSgpKSl7dmFyIHA9YT9lLmVmZmVjdGl2ZU9wYWNpdHkoKToxLG09cy51c2VQYXRocygpLGcseT0hMSx2PWUucGFkZGluZygpO2w9ZS53aWR0aCgpKzIqdix1PWUuaGVpZ2h0KCkrMip2O3ZhciB4O3ImJih4PXIsdC50cmFuc2xhdGUoLXgueDEsLXgueTEpKTtmb3IodmFyIGI9ZS5wc3R5bGUoImJhY2tncm91bmQtaW1hZ2UiKSxUPWIudmFsdWUsUz1uZXcgQXJyYXkoVC5sZW5ndGgpLHc9bmV3IEFycmF5KFQubGVuZ3RoKSxFPTAsXz0wO188VC5sZW5ndGg7XysrKXt2YXIgQz1UW19dLEQ9U1tfXT1DIT1udWxsJiZDIT09Im5vbmUiO2lmKEQpe3ZhciBPPWUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShlLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIiwidmFsdWUiLF8pO0UrKyx3W19dPXMuZ2V0Q2FjaGVkSW1hZ2UoQyxPLGZ1bmN0aW9uKCl7aC5iYWNrZ3JvdW5kVGltZXN0YW1wPURhdGUubm93KCksZS5lbWl0QW5kTm90aWZ5KCJiYWNrZ3JvdW5kIil9KX19dmFyIFI9ZS5wc3R5bGUoImJhY2tncm91bmQtYmxhY2tlbiIpLnZhbHVlLGs9ZS5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsTD1lLnBzdHlsZSgiYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUqcCxBPWUucHN0eWxlKCJib3JkZXItY29sb3IiKS52YWx1ZSxJPWUucHN0eWxlKCJib3JkZXItc3R5bGUiKS52YWx1ZSxNPWUucHN0eWxlKCJib3JkZXItam9pbiIpLnZhbHVlLFA9ZS5wc3R5bGUoImJvcmRlci1jYXAiKS52YWx1ZSxCPWUucHN0eWxlKCJib3JkZXItcG9zaXRpb24iKS52YWx1ZSxGPWUucHN0eWxlKCJib3JkZXItZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSx6PWUucHN0eWxlKCJib3JkZXItZGFzaC1vZmZzZXQiKS5wZlZhbHVlLCQ9ZS5wc3R5bGUoImJvcmRlci1vcGFjaXR5IikudmFsdWUqcCxVPWUucHN0eWxlKCJvdXRsaW5lLXdpZHRoIikucGZWYWx1ZSxLPWUucHN0eWxlKCJvdXRsaW5lLWNvbG9yIikudmFsdWUsZWU9ZS5wc3R5bGUoIm91dGxpbmUtc3R5bGUiKS52YWx1ZSxZPWUucHN0eWxlKCJvdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSpwLGNlPWUucHN0eWxlKCJvdXRsaW5lLW9mZnNldCIpLnZhbHVlLFo9ZS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZTtaIT09ImF1dG8iJiYoWj1lLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUpO3ZhciB1ZT1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpMO3MuZWxlRmlsbFN0eWxlKHQsZSxvZSl9LCJzZXR1cFNoYXBlQ29sb3IiKSxRPW8oZnVuY3Rpb24oKXt2YXIgb2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiQ7cy5jb2xvclN0cm9rZVN0eWxlKHQsQVswXSxBWzFdLEFbMl0sb2UpfSwic2V0dXBCb3JkZXJDb2xvciIpLGo9byhmdW5jdGlvbigpe3ZhciBvZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06WTtzLmNvbG9yU3Ryb2tlU3R5bGUodCxLWzBdLEtbMV0sS1syXSxvZSl9LCJzZXR1cE91dGxpbmVDb2xvciIpLG5lPW8oZnVuY3Rpb24ob2UsVixUZSxXKXt2YXIgcGU9cy5ub2RlUGF0aENhY2hlPXMubm9kZVBhdGhDYWNoZXx8W10sdmU9eGdlKFRlPT09InBvbHlnb24iP1RlKyIsIitXLmpvaW4oIiwiKTpUZSwiIitWLCIiK29lLCIiK1opLFBlPXBlW3ZlXSxfZSxiZT0hMTtyZXR1cm4gUGUhPW51bGw/KF9lPVBlLGJlPSEwLGYucGF0aENhY2hlPV9lKTooX2U9bmV3IFBhdGgyRCxwZVt2ZV09Zi5wYXRoQ2FjaGU9X2UpLHtwYXRoOl9lLGNhY2hlSGl0OmJlfX0sImdldFBhdGgiKSx0ZT1lLnBzdHlsZSgic2hhcGUiKS5zdHJWYWx1ZSxoZT1lLnBzdHlsZSgic2hhcGUtcG9seWdvbi1wb2ludHMiKS5wZlZhbHVlO2lmKG0pe3QudHJhbnNsYXRlKGQueCxkLnkpO3ZhciBsZT1uZShsLHUsdGUsaGUpO2c9bGUucGF0aCx5PWxlLmNhY2hlSGl0fXZhciBKPW8oZnVuY3Rpb24oKXtpZigheSl7dmFyIG9lPWQ7bSYmKG9lPXt4OjAseTowfSkscy5ub2RlU2hhcGVzW3MuZ2V0Tm9kZVNoYXBlKGUpXS5kcmF3KGd8fHQsb2UueCxvZS55LGwsdSxaLGYpfW0/dC5maWxsKGcpOnQuZmlsbCgpfSwiZHJhd1NoYXBlIiksU2U9byhmdW5jdGlvbigpe2Zvcih2YXIgb2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnAsVj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVGU9aC5iYWNrZ3JvdW5kaW5nLFc9MCxwZT0wO3BlPHcubGVuZ3RoO3BlKyspe3ZhciB2ZT1lLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUoZSwiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCIsInZhbHVlIixwZSk7aWYoViYmdmU9PT0ib3ZlciJ8fCFWJiZ2ZT09PSJpbnNpZGUiKXtXKys7Y29udGludWV9U1twZV0mJndbcGVdLmNvbXBsZXRlJiYhd1twZV0uZXJyb3ImJihXKysscy5kcmF3SW5zY3JpYmVkSW1hZ2UodCx3W3BlXSxlLHBlLG9lKSl9aC5iYWNrZ3JvdW5kaW5nPVchPT1FLFRlIT09aC5iYWNrZ3JvdW5kaW5nJiZlLnVwZGF0ZVN0eWxlKCExKX0sImRyYXdJbWFnZXMiKSxzZT1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxWPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpwO3MuaGFzUGllKGUpJiYocy5kcmF3UGllKHQsZSxWKSxvZSYmKG18fHMubm9kZVNoYXBlc1tzLmdldE5vZGVTaGFwZShlKV0uZHJhdyh0LGQueCxkLnksbCx1LFosZikpKX0sImRyYXdQaWUiKSxhZT1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpwLFY9KFI+MD9SOi1SKSpvZSxUZT1SPjA/MDoyNTU7UiE9PTAmJihzLmNvbG9yRmlsbFN0eWxlKHQsVGUsVGUsVGUsViksbT90LmZpbGwoZyk6dC5maWxsKCkpfSwiZGFya2VuIiksT2U9byhmdW5jdGlvbigpe2lmKGs+MCl7aWYodC5saW5lV2lkdGg9ayx0LmxpbmVDYXA9UCx0LmxpbmVKb2luPU0sdC5zZXRMaW5lRGFzaClzd2l0Y2goSSl7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKEYpLHQubGluZURhc2hPZmZzZXQ9ejticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoQiE9PSJjZW50ZXIiKXtpZih0LnNhdmUoKSx0LmxpbmVXaWR0aCo9MixCPT09Imluc2lkZSIpbT90LmNsaXAoZyk6dC5jbGlwKCk7ZWxzZXt2YXIgb2U9bmV3IFBhdGgyRDtvZS5yZWN0KC1sLzItaywtdS8yLWssbCsyKmssdSsyKmspLG9lLmFkZFBhdGgoZyksdC5jbGlwKG9lLCJldmVub2RkIil9bT90LnN0cm9rZShnKTp0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWVsc2UgbT90LnN0cm9rZShnKTp0LnN0cm9rZSgpO2lmKEk9PT0iZG91YmxlIil7dC5saW5lV2lkdGg9ay8zO3ZhciBWPXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLG0/dC5zdHJva2UoZyk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1WfXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pfX0sImRyYXdCb3JkZXIiKSx5ZT1vKGZ1bmN0aW9uKCl7aWYoVT4wKXtpZih0LmxpbmVXaWR0aD1VLHQubGluZUNhcD0iYnV0dCIsdC5zZXRMaW5lRGFzaClzd2l0Y2goZWUpe2Nhc2UiZG90dGVkIjp0LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6dC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJzb2xpZCI6Y2FzZSJkb3VibGUiOnQuc2V0TGluZURhc2goW10pO2JyZWFrfXZhciBvZT1kO20mJihvZT17eDowLHk6MH0pO3ZhciBWPXMuZ2V0Tm9kZVNoYXBlKGUpLFRlPWs7Qj09PSJpbnNpZGUiJiYoVGU9MCksQj09PSJvdXRzaWRlIiYmKFRlKj0yKTt2YXIgVz0obCtUZSsoVStjZSkpL2wscGU9KHUrVGUrKFUrY2UpKS91LHZlPWwqVyxQZT11KnBlLF9lPXMubm9kZVNoYXBlc1tWXS5wb2ludHMsYmU7aWYobSl7dmFyIFZlPW5lKHZlLFBlLFYsX2UpO2JlPVZlLnBhdGh9aWYoVj09PSJlbGxpcHNlIilzLmRyYXdFbGxpcHNlUGF0aChiZXx8dCxvZS54LG9lLnksdmUsUGUpO2Vsc2UgaWYoWyJyb3VuZC1kaWFtb25kIiwicm91bmQtaGVwdGFnb24iLCJyb3VuZC1oZXhhZ29uIiwicm91bmQtb2N0YWdvbiIsInJvdW5kLXBlbnRhZ29uIiwicm91bmQtcG9seWdvbiIsInJvdW5kLXRyaWFuZ2xlIiwicm91bmQtdGFnIl0uaW5jbHVkZXMoVikpe3ZhciBEZT0wLHFlPTAsYXQ9MDtWPT09InJvdW5kLWRpYW1vbmQiP0RlPShUZStjZStVKSoxLjQ6Vj09PSJyb3VuZC1oZXB0YWdvbiI/KERlPShUZStjZStVKSoxLjA3NSxhdD0tKFRlLzIrY2UrVSkvMzUpOlY9PT0icm91bmQtaGV4YWdvbiI/RGU9KFRlK2NlK1UpKjEuMTI6Vj09PSJyb3VuZC1wZW50YWdvbiI/KERlPShUZStjZStVKSoxLjEzLGF0PS0oVGUvMitjZStVKS8xNSk6Vj09PSJyb3VuZC10YWciPyhEZT0oVGUrY2UrVSkqMS4xMixxZT0oVGUvMitVK2NlKSouMDcpOlY9PT0icm91bmQtdHJpYW5nbGUiJiYoRGU9KFRlK2NlK1UpKihNYXRoLlBJLzIpLGF0PS0oVGUrY2UvMitVKS9NYXRoLlBJKSxEZSE9PTAmJihXPShsK0RlKS9sLHZlPWwqVyxbInJvdW5kLWhleGFnb24iLCJyb3VuZC10YWciXS5pbmNsdWRlcyhWKXx8KHBlPSh1K0RlKS91LFBlPXUqcGUpKSxaPVo9PT0iYXV0byI/TGdlKHZlLFBlKTpaO2Zvcih2YXIgUnQ9dmUvMixzdD1QZS8yLFVlPVorKFRlK1UrY2UpLzIsY3Q9bmV3IEFycmF5KF9lLmxlbmd0aC8yKSxXZT1uZXcgQXJyYXkoX2UubGVuZ3RoLzIpLG90PTA7b3Q8X2UubGVuZ3RoLzI7b3QrKyljdFtvdF09e3g6b2UueCtxZStSdCpfZVtvdCoyXSx5Om9lLnkrYXQrc3QqX2Vbb3QqMisxXX07dmFyIFl0LFR0LE10LGJ0LHV0PWN0Lmxlbmd0aDtmb3IoVHQ9Y3RbdXQtMV0sWXQ9MDtZdDx1dDtZdCsrKU10PWN0W1l0JXV0XSxidD1jdFsoWXQrMSkldXRdLFdlW1l0XT1yRihUdCxNdCxidCxVZSksVHQ9TXQsTXQ9YnQ7cy5kcmF3Um91bmRQb2x5Z29uUGF0aChiZXx8dCxvZS54K3FlLG9lLnkrYXQsbCpXLHUqcGUsX2UsV2UpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKFYpKVo9Wj09PSJhdXRvIj9acCh2ZSxQZSk6WixzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoYmV8fHQsb2UueCxvZS55LHZlLFBlLForKFRlK1UrY2UpLzIpO2Vsc2UgaWYoWyJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoVikpWj1aPT09ImF1dG8iP0hCKCk6WixzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGJlfHx0LG9lLngsb2UueSx2ZSxQZSxudWxsLForKFRlK1UrY2UpLzQpO2Vsc2UgaWYoWyJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhWKSlaPVo9PT0iYXV0byI/WnAodmUsUGUpOloscy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoKGJlfHx0LG9lLngsb2UueSx2ZSxQZSxaKyhUZStVK2NlKS8yKTtlbHNlIGlmKFY9PT0iYmFycmVsIilzLmRyYXdCYXJyZWxQYXRoKGJlfHx0LG9lLngsb2UueSx2ZSxQZSk7ZWxzZSBpZihWLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoVikpe3ZhciBTdD0oVGUrVStjZSkvbDtfZT1HNihWNihfZSxTdCkpLHMuZHJhd1BvbHlnb25QYXRoKGJlfHx0LG9lLngsb2UueSxsLHUsX2UpfWVsc2V7dmFyIGZ0PShUZStVK2NlKS9sO19lPUc2KFY2KF9lLC1mdCkpLHMuZHJhd1BvbHlnb25QYXRoKGJlfHx0LG9lLngsb2UueSxsLHUsX2UpfWlmKG0/dC5zdHJva2UoYmUpOnQuc3Ryb2tlKCksZWU9PT0iZG91YmxlIil7dC5saW5lV2lkdGg9VGUvMzt2YXIgdnQ9dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsbT90LnN0cm9rZShiZSk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj12dH10LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKFtdKX19LCJkcmF3T3V0bGluZSIpLEJlPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdOb2RlT3ZlcmxheSh0LGUsZCxsLHUpfSwiZHJhd092ZXJsYXkiKSxIZT1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3Tm9kZVVuZGVybGF5KHQsZSxkLGwsdSl9LCJkcmF3VW5kZXJsYXkiKSx6ZT1vKGZ1bmN0aW9uKCl7cy5kcmF3RWxlbWVudFRleHQodCxlLG51bGwsbil9LCJkcmF3VGV4dCIpLExlPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoTGUpe3ZhciBJZT1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHhlPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUscT1lLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLGRlPXEqcDt0LnRyYW5zbGF0ZShJZSx4ZSksaigpLHllKCksdWUocSpMKSxKKCksU2UoZGUsITApLFEocSokKSxPZSgpLHNlKFIhPT0wfHxrIT09MCksU2UoZGUsITEpLGFlKGRlKSx0LnRyYW5zbGF0ZSgtSWUsLXhlKX1tJiZ0LnRyYW5zbGF0ZSgtZC54LC1kLnkpLEhlKCksbSYmdC50cmFuc2xhdGUoZC54LGQueSksaigpLHllKCksdWUoKSxKKCksU2UocCwhMCksUSgpLE9lKCksc2UoUiE9PTB8fGshPT0wKSxTZShwLCExKSxhZSgpLG0mJnQudHJhbnNsYXRlKC1kLngsLWQueSksemUoKSxCZSgpLHImJnQudHJhbnNsYXRlKHgueDEseC55MSl9fTtJMWU9byhmdW5jdGlvbihlKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxzKXt2YXIgbD10aGlzO2lmKG4udmlzaWJsZSgpKXt2YXIgdT1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLXBhZGRpbmciKSkucGZWYWx1ZSxoPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItb3BhY2l0eSIpKS52YWx1ZSxmPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItY29sb3IiKSkudmFsdWUsZD1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLXNoYXBlIikpLnZhbHVlLHA9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1jb3JuZXItcmFkaXVzIikpLnZhbHVlO2lmKGg+MCl7aWYoaT1pfHxuLnBvc2l0aW9uKCksYT09bnVsbHx8cz09bnVsbCl7dmFyIG09bi5wYWRkaW5nKCk7YT1uLndpZHRoKCkrMiptLHM9bi5oZWlnaHQoKSsyKm19bC5jb2xvckZpbGxTdHlsZShyLGZbMF0sZlsxXSxmWzJdLGgpLGwubm9kZVNoYXBlc1tkXS5kcmF3KHIsaS54LGkueSxhK3UqMixzK3UqMixwKSxyLmZpbGwoKX19fX0sImRyYXdOb2RlT3ZlcmxheVVuZGVybGF5Iik7cHkuZHJhd05vZGVPdmVybGF5PUkxZSgib3ZlcmxheSIpO3B5LmRyYXdOb2RlVW5kZXJsYXk9STFlKCJ1bmRlcmxheSIpO3B5Lmhhc1BpZT1mdW5jdGlvbih0KXtyZXR1cm4gdD10WzBdLHQuX3ByaXZhdGUuaGFzUGllfTtweS5kcmF3UGllPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZVswXSxuPW58fGUucG9zaXRpb24oKTt2YXIgaT1lLmN5KCkuc3R5bGUoKSxhPWUucHN0eWxlKCJwaWUtc2l6ZSIpLHM9bi54LGw9bi55LHU9ZS53aWR0aCgpLGg9ZS5oZWlnaHQoKSxmPU1hdGgubWluKHUsaCkvMixkPTAscD10aGlzLnVzZVBhdGhzKCk7cCYmKHM9MCxsPTApLGEudW5pdHM9PT0iJSI/Zj1mKmEucGZWYWx1ZTphLnBmVmFsdWUhPT12b2lkIDAmJihmPWEucGZWYWx1ZS8yKTtmb3IodmFyIG09MTttPD1pLnBpZUJhY2tncm91bmROO20rKyl7dmFyIGc9ZS5wc3R5bGUoInBpZS0iK20rIi1iYWNrZ3JvdW5kLXNpemUiKS52YWx1ZSx5PWUucHN0eWxlKCJwaWUtIittKyItYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlLHY9ZS5wc3R5bGUoInBpZS0iK20rIi1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpyLHg9Zy8xMDA7eCtkPjEmJih4PTEtZCk7dmFyIGI9MS41Kk1hdGguUEkrMipNYXRoLlBJKmQsVD0yKk1hdGguUEkqeCxTPWIrVDtnPT09MHx8ZD49MXx8ZCt4PjF8fCh0LmJlZ2luUGF0aCgpLHQubW92ZVRvKHMsbCksdC5hcmMocyxsLGYsYixTKSx0LmNsb3NlUGF0aCgpLHRoaXMuY29sb3JGaWxsU3R5bGUodCx5WzBdLHlbMV0seVsyXSx2KSx0LmZpbGwoKSxkKz14KX19O3dzPXt9LE5KZT0xMDA7d3MuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YS5jb250ZXh0c1swXTtpZih0aGlzLmZvcmNlZFBpeGVsUmF0aW8hPW51bGwpcmV0dXJuIHRoaXMuZm9yY2VkUGl4ZWxSYXRpbzt2YXIgZT10aGlzLmN5LndpbmRvdygpLHI9dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4oZS5kZXZpY2VQaXhlbFJhdGlvfHwxKS9yfTt3cy5wYWludENhY2hlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLHI9ITAsbixpPTA7aTxlLmxlbmd0aDtpKyspaWYobj1lW2ldLG4uY29udGV4dD09PXQpe3I9ITE7YnJlYWt9cmV0dXJuIHImJihuPXtjb250ZXh0OnR9LGUucHVzaChuKSksbn07d3MuY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHM9dGhpcy51c2VQYXRocygpLGw9ci5wc3R5bGUoZSsiLWdyYWRpZW50LXN0b3AtY29sb3JzIikudmFsdWUsdT1yLnBzdHlsZShlKyItZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiKS5wZlZhbHVlO2lmKG49PT0icmFkaWFsLWdyYWRpZW50IilpZihyLmlzRWRnZSgpKXt2YXIgaD1yLnNvdXJjZUVuZHBvaW50KCksZj1yLnRhcmdldEVuZHBvaW50KCksZD1yLm1pZHBvaW50KCkscD1RcChoLGQpLG09UXAoZixkKTthPXQuY3JlYXRlUmFkaWFsR3JhZGllbnQoZC54LGQueSwwLGQueCxkLnksTWF0aC5tYXgocCxtKSl9ZWxzZXt2YXIgZz1zP3t4OjAseTowfTpyLnBvc2l0aW9uKCkseT1yLnBhZGRlZFdpZHRoKCksdj1yLnBhZGRlZEhlaWdodCgpO2E9dC5jcmVhdGVSYWRpYWxHcmFkaWVudChnLngsZy55LDAsZy54LGcueSxNYXRoLm1heCh5LHYpKX1lbHNlIGlmKHIuaXNFZGdlKCkpe3ZhciB4PXIuc291cmNlRW5kcG9pbnQoKSxiPXIudGFyZ2V0RW5kcG9pbnQoKTthPXQuY3JlYXRlTGluZWFyR3JhZGllbnQoeC54LHgueSxiLngsYi55KX1lbHNle3ZhciBUPXM/e3g6MCx5OjB9OnIucG9zaXRpb24oKSxTPXIucGFkZGVkV2lkdGgoKSx3PXIucGFkZGVkSGVpZ2h0KCksRT1TLzIsXz13LzIsQz1yLnBzdHlsZSgiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iKS52YWx1ZTtzd2l0Y2goQyl7Y2FzZSJ0by1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngsVC55LV8sVC54LFQueStfKTticmVhaztjYXNlInRvLXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KFQueCxULnkrXyxULngsVC55LV8pO2JyZWFrO2Nhc2UidG8tbGVmdCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KFQueCtFLFQueSxULngtRSxULnkpO2JyZWFrO2Nhc2UidG8tcmlnaHQiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngtRSxULnksVC54K0UsVC55KTticmVhaztjYXNlInRvLWJvdHRvbS1yaWdodCI6Y2FzZSJ0by1yaWdodC1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngtRSxULnktXyxULngrRSxULnkrXyk7YnJlYWs7Y2FzZSJ0by10b3AtcmlnaHQiOmNhc2UidG8tcmlnaHQtdG9wIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQoVC54LUUsVC55K18sVC54K0UsVC55LV8pO2JyZWFrO2Nhc2UidG8tYm90dG9tLWxlZnQiOmNhc2UidG8tbGVmdC1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngrRSxULnktXyxULngtRSxULnkrXyk7YnJlYWs7Y2FzZSJ0by10b3AtbGVmdCI6Y2FzZSJ0by1sZWZ0LXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KFQueCtFLFQueStfLFQueC1FLFQueS1fKTticmVha319aWYoIWEpcmV0dXJuIG51bGw7Zm9yKHZhciBEPXUubGVuZ3RoPT09bC5sZW5ndGgsTz1sLmxlbmd0aCxSPTA7UjxPO1IrKylhLmFkZENvbG9yU3RvcChEP3VbUl06Ui8oTy0xKSwicmdiYSgiK2xbUl1bMF0rIiwiK2xbUl1bMV0rIiwiK2xbUl1bMl0rIiwiK2krIikiKTtyZXR1cm4gYX07d3MuZ3JhZGllbnRGaWxsU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHQsImJhY2tncm91bmQiLGUscixuKTtpZighaSlyZXR1cm4gbnVsbDt0LmZpbGxTdHlsZT1pfTt3cy5jb2xvckZpbGxTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3QuZmlsbFN0eWxlPSJyZ2JhKCIrZSsiLCIrcisiLCIrbisiLCIraSsiKSJ9O3dzLmVsZUZpbGxTdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5wc3R5bGUoImJhY2tncm91bmQtZmlsbCIpLnZhbHVlO2lmKG49PT0ibGluZWFyLWdyYWRpZW50Inx8bj09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRGaWxsU3R5bGUodCxlLG4scik7ZWxzZXt2YXIgaT1lLnBzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JGaWxsU3R5bGUodCxpWzBdLGlbMV0saVsyXSxyKX19O3dzLmdyYWRpZW50U3Ryb2tlU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHQsImxpbmUiLGUscixuKTtpZighaSlyZXR1cm4gbnVsbDt0LnN0cm9rZVN0eWxlPWl9O3dzLmNvbG9yU3Ryb2tlU3R5bGU9ZnVuY3Rpb24odCxlLHIsbixpKXt0LnN0cm9rZVN0eWxlPSJyZ2JhKCIrZSsiLCIrcisiLCIrbisiLCIraSsiKSJ9O3dzLmVsZVN0cm9rZVN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnBzdHlsZSgibGluZS1maWxsIikudmFsdWU7aWYobj09PSJsaW5lYXItZ3JhZGllbnQifHxuPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudFN0cm9rZVN0eWxlKHQsZSxuLHIpO2Vsc2V7dmFyIGk9ZS5wc3R5bGUoImxpbmUtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yU3Ryb2tlU3R5bGUodCxpWzBdLGlbMV0saVsyXSxyKX19O3dzLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kYXRhLG49ZS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksaT1uWzJdLGE9blszXSxzPWUuZ2V0UGl4ZWxSYXRpbygpLGw9ZS5tb3Rpb25CbHVyUHhSYXRpbzsodD09PWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHx0PT09ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2UuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pJiYocz1sKTt2YXIgdT1pKnMsaD1hKnMsZjtpZighKHU9PT1lLmNhbnZhc1dpZHRoJiZoPT09ZS5jYW52YXNIZWlnaHQpKXtlLmZvbnRDYWNoZXM9bnVsbDt2YXIgZD1yLmNhbnZhc0NvbnRhaW5lcjtkLnN0eWxlLndpZHRoPWkrInB4IixkLnN0eWxlLmhlaWdodD1hKyJweCI7Zm9yKHZhciBwPTA7cDxlLkNBTlZBU19MQVlFUlM7cCsrKWY9ci5jYW52YXNlc1twXSxmLndpZHRoPXUsZi5oZWlnaHQ9aCxmLnN0eWxlLndpZHRoPWkrInB4IixmLnN0eWxlLmhlaWdodD1hKyJweCI7Zm9yKHZhciBwPTA7cDxlLkJVRkZFUl9DT1VOVDtwKyspZj1yLmJ1ZmZlckNhbnZhc2VzW3BdLGYud2lkdGg9dSxmLmhlaWdodD1oLGYuc3R5bGUud2lkdGg9aSsicHgiLGYuc3R5bGUuaGVpZ2h0PWErInB4IjtlLnRleHR1cmVNdWx0PTEsczw9MSYmKGY9ci5idWZmZXJDYW52YXNlc1tlLlRFWFRVUkVfQlVGRkVSXSxlLnRleHR1cmVNdWx0PTIsZi53aWR0aD11KmUudGV4dHVyZU11bHQsZi5oZWlnaHQ9aCplLnRleHR1cmVNdWx0KSxlLmNhbnZhc1dpZHRoPXUsZS5jYW52YXNIZWlnaHQ9aCxlLnBpeGVsUmF0aW89c319O3dzLnJlbmRlclRvPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVuZGVyKHtmb3JjZWRDb250ZXh0OnQsZm9yY2VkWm9vbTplLGZvcmNlZFBhbjpyLGRyYXdBbGxMYXllcnM6ITAsZm9yY2VkUHhSYXRpbzpufSl9O3dzLmNsZWFyQ2FudmFzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZGF0YTtmdW5jdGlvbiByKG4pe24uY2xlYXJSZWN0KDAsMCx0LmNhbnZhc1dpZHRoLHQuY2FudmFzSGVpZ2h0KX1vKHIsImNsZWFyIikscihlLmNvbnRleHRzW3QuTk9ERV0pLHIoZS5jb250ZXh0c1t0LkRSQUddKX07d3MucmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dD10fHxrZ2UoKTt2YXIgcj1lLmN5LG49dC5mb3JjZWRDb250ZXh0LGk9dC5kcmF3QWxsTGF5ZXJzLGE9dC5kcmF3T25seU5vZGVMYXllcixzPXQuZm9yY2VkWm9vbSxsPXQuZm9yY2VkUGFuLHU9dC5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnQuZm9yY2VkUHhSYXRpbyxoPWUuZGF0YSxmPWguY2FudmFzTmVlZHNSZWRyYXcsZD1lLnRleHR1cmVPblZpZXdwb3J0JiYhbiYmKGUucGluY2hpbmd8fGUuaG92ZXJEYXRhLmRyYWdnaW5nfHxlLnN3aXBlUGFubmluZ3x8ZS5kYXRhLndoZWVsWm9vbWluZykscD10Lm1vdGlvbkJsdXIhPT12b2lkIDA/dC5tb3Rpb25CbHVyOmUubW90aW9uQmx1cixtPWUubW90aW9uQmx1clB4UmF0aW8sZz1yLmhhc0NvbXBvdW5kTm9kZXMoKSx5PWUuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyx2PSEhKGUuaG92ZXJEYXRhLnNlbGVjdGluZ3x8ZS50b3VjaERhdGEuc2VsZWN0aW5nKTtwPXAmJiFuJiZlLm1vdGlvbkJsdXJFbmFibGVkJiYhdjt2YXIgeD1wO258fChlLnByZXZQeFJhdGlvIT09dSYmKGUuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksZS5tYXRjaENhbnZhc1NpemUoZS5jb250YWluZXIpLGUucmVkcmF3SGludCgiZWxlcyIsITApLGUucmVkcmF3SGludCgiZHJhZyIsITApKSxlLnByZXZQeFJhdGlvPXUpLCFuJiZlLm1vdGlvbkJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5tb3Rpb25CbHVyVGltZW91dCkscCYmKGUubWJGcmFtZXM9PW51bGwmJihlLm1iRnJhbWVzPTApLGUubWJGcmFtZXMrKyxlLm1iRnJhbWVzPDMmJih4PSExKSxlLm1iRnJhbWVzPmUubWluTWJMb3dRdWFsRnJhbWVzJiYoZS5tb3Rpb25CbHVyUHhSYXRpbz1lLm1iUHhSQmx1cnJ5KSksZS5jbGVhcmluZ01vdGlvbkJsdXImJihlLm1vdGlvbkJsdXJQeFJhdGlvPTEpLGUudGV4dHVyZURyYXdMYXN0RnJhbWUmJiFkJiYoZltlLk5PREVdPSEwLGZbZS5TRUxFQ1RfQk9YXT0hMCk7dmFyIGI9ci5zdHlsZSgpLFQ9ci56b29tKCksUz1zIT09dm9pZCAwP3M6VCx3PXIucGFuKCksRT17eDp3LngseTp3Lnl9LF89e3pvb206VCxwYW46e3g6dy54LHk6dy55fX0sQz1lLnByZXZWaWV3cG9ydCxEPUM9PT12b2lkIDB8fF8uem9vbSE9PUMuem9vbXx8Xy5wYW4ueCE9PUMucGFuLnh8fF8ucGFuLnkhPT1DLnBhbi55OyFEJiYhKHkmJiFnKSYmKGUubW90aW9uQmx1clB4UmF0aW89MSksbCYmKEU9bCksUyo9dSxFLngqPXUsRS55Kj11O3ZhciBPPWUuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtmdW5jdGlvbiBSKFEsaixuZSx0ZSxoZSl7dmFyIGxlPVEuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1EuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLGUuY29sb3JGaWxsU3R5bGUoUSwyNTUsMjU1LDI1NSxlLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLFEuZmlsbFJlY3QoaixuZSx0ZSxoZSksUS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249bGV9byhSLCJtYmNsZWFyIik7ZnVuY3Rpb24gayhRLGope3ZhciBuZSx0ZSxoZSxsZTshZS5jbGVhcmluZ01vdGlvbkJsdXImJihRPT09aC5idWZmZXJDb250ZXh0c1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHxRPT09aC5idWZmZXJDb250ZXh0c1tlLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKT8obmU9e3g6dy54Km0seTp3LnkqbX0sdGU9VCptLGhlPWUuY2FudmFzV2lkdGgqbSxsZT1lLmNhbnZhc0hlaWdodCptKToobmU9RSx0ZT1TLGhlPWUuY2FudmFzV2lkdGgsbGU9ZS5jYW52YXNIZWlnaHQpLFEuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxqPT09Im1vdGlvbkJsdXIiP1IoUSwwLDAsaGUsbGUpOiFuJiYoaj09PXZvaWQgMHx8aikmJlEuY2xlYXJSZWN0KDAsMCxoZSxsZSksaXx8KFEudHJhbnNsYXRlKG5lLngsbmUueSksUS5zY2FsZSh0ZSx0ZSkpLGwmJlEudHJhbnNsYXRlKGwueCxsLnkpLHMmJlEuc2NhbGUocyxzKX1pZihvKGssInNldENvbnRleHRUcmFuc2Zvcm0iKSxkfHwoZS50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMSksZCl7aWYoZS50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMCwhZS50ZXh0dXJlQ2FjaGUpe2UudGV4dHVyZUNhY2hlPXt9LGUudGV4dHVyZUNhY2hlLmJiPXIubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSxlLnRleHR1cmVDYWNoZS50ZXh0dXJlPWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLlRFWFRVUkVfQlVGRkVSXTt2YXIgTD1lLmRhdGEuYnVmZmVyQ29udGV4dHNbZS5URVhUVVJFX0JVRkZFUl07TC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLEwuY2xlYXJSZWN0KDAsMCxlLmNhbnZhc1dpZHRoKmUudGV4dHVyZU11bHQsZS5jYW52YXNIZWlnaHQqZS50ZXh0dXJlTXVsdCksZS5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6TCxkcmF3T25seU5vZGVMYXllcjohMCxmb3JjZWRQeFJhdGlvOnUqZS50ZXh0dXJlTXVsdH0pO3ZhciBfPWUudGV4dHVyZUNhY2hlLnZpZXdwb3J0PXt6b29tOnIuem9vbSgpLHBhbjpyLnBhbigpLHdpZHRoOmUuY2FudmFzV2lkdGgsaGVpZ2h0OmUuY2FudmFzSGVpZ2h0fTtfLm1wYW49e3g6KDAtXy5wYW4ueCkvXy56b29tLHk6KDAtXy5wYW4ueSkvXy56b29tfX1mW2UuRFJBR109ITEsZltlLk5PREVdPSExO3ZhciBBPWguY29udGV4dHNbZS5OT0RFXSxJPWUudGV4dHVyZUNhY2hlLnRleHR1cmUsXz1lLnRleHR1cmVDYWNoZS52aWV3cG9ydDtBLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscD9SKEEsMCwwLF8ud2lkdGgsXy5oZWlnaHQpOkEuY2xlYXJSZWN0KDAsMCxfLndpZHRoLF8uaGVpZ2h0KTt2YXIgTT1iLmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIpLnZhbHVlLFA9Yi5jb3JlKCJvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSIpLnZhbHVlO2UuY29sb3JGaWxsU3R5bGUoQSxNWzBdLE1bMV0sTVsyXSxQKSxBLmZpbGxSZWN0KDAsMCxfLndpZHRoLF8uaGVpZ2h0KTt2YXIgVD1yLnpvb20oKTtrKEEsITEpLEEuY2xlYXJSZWN0KF8ubXBhbi54LF8ubXBhbi55LF8ud2lkdGgvXy56b29tL3UsXy5oZWlnaHQvXy56b29tL3UpLEEuZHJhd0ltYWdlKEksXy5tcGFuLngsXy5tcGFuLnksXy53aWR0aC9fLnpvb20vdSxfLmhlaWdodC9fLnpvb20vdSl9ZWxzZSBlLnRleHR1cmVPblZpZXdwb3J0JiYhbiYmKGUudGV4dHVyZUNhY2hlPW51bGwpO3ZhciBCPXIuZXh0ZW50KCksRj1lLnBpbmNoaW5nfHxlLmhvdmVyRGF0YS5kcmFnZ2luZ3x8ZS5zd2lwZVBhbm5pbmd8fGUuZGF0YS53aGVlbFpvb21pbmd8fGUuaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8ZS5jeS5hbmltYXRlZCgpLHo9ZS5oaWRlRWRnZXNPblZpZXdwb3J0JiZGLCQ9W107aWYoJFtlLk5PREVdPSFmW2UuTk9ERV0mJnAmJiFlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuTk9ERV18fGUuY2xlYXJpbmdNb3Rpb25CbHVyLCRbZS5OT0RFXSYmKGUuY2xlYXJlZEZvck1vdGlvbkJsdXJbZS5OT0RFXT0hMCksJFtlLkRSQUddPSFmW2UuRFJBR10mJnAmJiFlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuRFJBR118fGUuY2xlYXJpbmdNb3Rpb25CbHVyLCRbZS5EUkFHXSYmKGUuY2xlYXJlZEZvck1vdGlvbkJsdXJbZS5EUkFHXT0hMCksZltlLk5PREVdfHxpfHxhfHwkW2UuTk9ERV0pe3ZhciBVPXAmJiEkW2UuTk9ERV0mJm0hPT0xLEE9bnx8KFU/ZS5kYXRhLmJ1ZmZlckNvbnRleHRzW2UuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV06aC5jb250ZXh0c1tlLk5PREVdKSxLPXAmJiFVPyJtb3Rpb25CbHVyIjp2b2lkIDA7ayhBLEspLHo/ZS5kcmF3Q2FjaGVkTm9kZXMoQSxPLm5vbmRyYWcsdSxCKTplLmRyYXdMYXllcmVkRWxlbWVudHMoQSxPLm5vbmRyYWcsdSxCKSxlLmRlYnVnJiZlLmRyYXdEZWJ1Z1BvaW50cyhBLE8ubm9uZHJhZyksIWkmJiFwJiYoZltlLk5PREVdPSExKX1pZighYSYmKGZbZS5EUkFHXXx8aXx8JFtlLkRSQUddKSl7dmFyIFU9cCYmISRbZS5EUkFHXSYmbSE9PTEsQT1ufHwoVT9lLmRhdGEuYnVmZmVyQ29udGV4dHNbZS5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTpoLmNvbnRleHRzW2UuRFJBR10pO2soQSxwJiYhVT8ibW90aW9uQmx1ciI6dm9pZCAwKSx6P2UuZHJhd0NhY2hlZE5vZGVzKEEsTy5kcmFnLHUsQik6ZS5kcmF3Q2FjaGVkRWxlbWVudHMoQSxPLmRyYWcsdSxCKSxlLmRlYnVnJiZlLmRyYXdEZWJ1Z1BvaW50cyhBLE8uZHJhZyksIWkmJiFwJiYoZltlLkRSQUddPSExKX1pZih0aGlzLmRyYXdTZWxlY3Rpb25SZWN0YW5nbGUodCxrKSxwJiZtIT09MSl7dmFyIGVlPWguY29udGV4dHNbZS5OT0RFXSxZPWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLGNlPWguY29udGV4dHNbZS5EUkFHXSxaPWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddLHVlPW8oZnVuY3Rpb24oaixuZSx0ZSl7ai5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRlfHwheD9qLmNsZWFyUmVjdCgwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCk6UihqLDAsMCxlLmNhbnZhc1dpZHRoLGUuY2FudmFzSGVpZ2h0KTt2YXIgaGU9bTtqLmRyYXdJbWFnZShuZSwwLDAsZS5jYW52YXNXaWR0aCpoZSxlLmNhbnZhc0hlaWdodCpoZSwwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCl9LCJkcmF3TW90aW9uQmx1ciIpOyhmW2UuTk9ERV18fCRbZS5OT0RFXSkmJih1ZShlZSxZLCRbZS5OT0RFXSksZltlLk5PREVdPSExKSwoZltlLkRSQUddfHwkW2UuRFJBR10pJiYodWUoY2UsWiwkW2UuRFJBR10pLGZbZS5EUkFHXT0hMSl9ZS5wcmV2Vmlld3BvcnQ9XyxlLmNsZWFyaW5nTW90aW9uQmx1ciYmKGUuY2xlYXJpbmdNb3Rpb25CbHVyPSExLGUubW90aW9uQmx1ckNsZWFyZWQ9ITAsZS5tb3Rpb25CbHVyPSEwKSxwJiYoZS5tb3Rpb25CbHVyVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tb3Rpb25CbHVyVGltZW91dD1udWxsLGUuY2xlYXJlZEZvck1vdGlvbkJsdXJbZS5OT0RFXT0hMSxlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuRFJBR109ITEsZS5tb3Rpb25CbHVyPSExLGUuY2xlYXJpbmdNb3Rpb25CbHVyPSFkLGUubWJGcmFtZXM9MCxmW2UuTk9ERV09ITAsZltlLkRSQUddPSEwLGUucmVkcmF3KCl9LE5KZSkpLG58fHIuZW1pdCgicmVuZGVyIil9O3dzLmRyYXdTZWxlY3Rpb25SZWN0YW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5jeSxpPXIuZGF0YSxhPW4uc3R5bGUoKSxzPXQuZHJhd09ubHlOb2RlTGF5ZXIsbD10LmRyYXdBbGxMYXllcnMsdT1pLmNhbnZhc05lZWRzUmVkcmF3LGg9dC5mb3JjZWRDb250ZXh0O2lmKHIuc2hvd0Zwc3x8IXMmJnVbci5TRUxFQ1RfQk9YXSYmIWwpe3ZhciBmPWh8fGkuY29udGV4dHNbci5TRUxFQ1RfQk9YXTtpZihlKGYpLHIuc2VsZWN0aW9uWzRdPT0xJiYoci5ob3ZlckRhdGEuc2VsZWN0aW5nfHxyLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgZD1yLmN5Lnpvb20oKSxwPWEuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS9kO2YubGluZVdpZHRoPXAsZi5maWxsU3R5bGU9InJnYmEoIithLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVswXSsiLCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK2EuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIithLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixmLmZpbGxSZWN0KHIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzFdLHIuc2VsZWN0aW9uWzJdLXIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzNdLXIuc2VsZWN0aW9uWzFdKSxwPjAmJihmLnN0cm9rZVN0eWxlPSJyZ2JhKCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIithLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK2EuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiKS52YWx1ZVsyXSsiLCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsZi5zdHJva2VSZWN0KHIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzFdLHIuc2VsZWN0aW9uWzJdLXIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzNdLXIuc2VsZWN0aW9uWzFdKSl9aWYoaS5iZ0FjdGl2ZVBvc2lzdGlvbiYmIXIuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIGQ9ci5jeS56b29tKCksbT1pLmJnQWN0aXZlUG9zaXN0aW9uO2YuZmlsbFN0eWxlPSJyZ2JhKCIrYS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVswXSsiLCIrYS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsxXSsiLCIrYS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsyXSsiLCIrYS5jb3JlKCJhY3RpdmUtYmctb3BhY2l0eSIpLnZhbHVlKyIpIixmLmJlZ2luUGF0aCgpLGYuYXJjKG0ueCxtLnksYS5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvZCwwLDIqTWF0aC5QSSksZi5maWxsKCl9dmFyIGc9ci5sYXN0UmVkcmF3VGltZTtpZihyLnNob3dGcHMmJmcpe2c9TWF0aC5yb3VuZChnKTt2YXIgeT1NYXRoLnJvdW5kKDFlMy9nKSx2PSIxIGZyYW1lID0gIitnKyIgbXMgPSAiK3krIiBmcHMiO2lmKGYuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxmLmZpbGxTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixmLnN0cm9rZVN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLGYuZm9udD0iMzBweCBBcmlhbCIsIVViKXt2YXIgeD1mLm1lYXN1cmVUZXh0KHYpO1ViPXguYWN0dWFsQm91bmRpbmdCb3hBc2NlbnR9Zi5maWxsVGV4dCh2LDAsVWIpO3ZhciBiPTYwO2Yuc3Ryb2tlUmVjdCgwLFViKzEwLDI1MCwyMCksZi5maWxsUmVjdCgwLFViKzEwLDI1MCpNYXRoLm1pbih5L2IsMSksMjApfWx8fCh1W3IuU0VMRUNUX0JPWF09ITEpfX07byhLbWUsImNvbXBpbGVTaGFkZXIiKTtvKE1KZSwiY3JlYXRlUHJvZ3JhbSIpO28oSUplLCJjcmVhdGVUZXh0dXJlQ2FudmFzIik7byhhRiwiZ2V0RWZmZWN0aXZlUGFuWm9vbSIpO28oZ0IsIm1vZGVsVG9SZW5kZXJlZFBvc2l0aW9uIik7byhBNiwidG9XZWJHTENvbG9yIik7byhfNiwiaW5kZXhUb1ZlYzQiKTtvKE9KZSwidmVjNFRvSW5kZXgiKTtvKFBKZSwiY3JlYXRlVGV4dHVyZSIpO28oTzFlLCJnZXRUeXBlSW5mbyIpO28oUDFlLCJjcmVhdGVUeXBlZEFycmF5Iik7byhCSmUsImNyZWF0ZVR5cGVkQXJyYXlWaWV3Iik7byhGSmUsImNyZWF0ZUJ1ZmZlclN0YXRpY0RyYXciKTtvKHlvLCJjcmVhdGVCdWZmZXJEeW5hbWljRHJhdyIpO28oJEplLCJjcmVhdGVQaWNraW5nRnJhbWVCdWZmZXIiKTtRbWU9dHlwZW9mIEZsb2F0MzJBcnJheTwidSI/RmxvYXQzMkFycmF5OkFycmF5O01hdGguaHlwb3R8fChNYXRoLmh5cG90PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoO2UtLTspdCs9YXJndW1lbnRzW2VdKmFyZ3VtZW50c1tlXTtyZXR1cm4gTWF0aC5zcXJ0KHQpfSk7byhaYiwiY3JlYXRlIik7byhCMWUsImlkZW50aXR5Iik7byh6SmUsIm11bHRpcGx5Iik7byhqNiwidHJhbnNsYXRlIik7byhGMWUsInJvdGF0ZSIpO28oc0YsInNjYWxlIik7byhHSmUsInByb2plY3Rpb24iKTtKYj17U0NSRUVOOntuYW1lOiJzY3JlZW4iLHNjcmVlbjohMH0sUElDS0lORzp7bmFtZToicGlja2luZyIscGlja2luZzohMH19LEhiPW9hKHtnZXRLZXk6bnVsbCxkcmF3RWxlbWVudDpudWxsLGdldEJvdW5kaW5nQm94Om51bGwsZ2V0Um90YXRpb246bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6bnVsbCxnZXRQYWRkaW5nOm51bGx9KSxWSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7VmYodGhpcyx0KSx0aGlzLmRlYnVnSUQ9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCksdGhpcy5yPWUsdGhpcy5hdGxhc1NpemU9ci53ZWJnbFRleFNpemUsdGhpcy5yb3dzPXIud2ViZ2xUZXhSb3dzLHRoaXMuZW5hYmxlV3JhcHBpbmc9ci5lbmFibGVXcmFwcGluZyx0aGlzLnRleEhlaWdodD1NYXRoLmZsb29yKHRoaXMuYXRsYXNTaXplL3RoaXMucm93cyksdGhpcy5tYXhUZXhXaWR0aD10aGlzLmF0bGFzU2l6ZSx0aGlzLnRleHR1cmU9bnVsbCx0aGlzLmNhbnZhcz1udWxsLHRoaXMubmVlZHNCdWZmZXI9ITAsdGhpcy5mcmVlUG9pbnRlcj17eDowLHJvdzowfSx0aGlzLmtleVRvTG9jYXRpb249bmV3IE1hcCx0aGlzLmNhbnZhcz1yLmNyZWF0ZVRleHR1cmVDYW52YXMoZSx0aGlzLmF0bGFzU2l6ZSx0aGlzLmF0bGFzU2l6ZSksdGhpcy5zY3JhdGNoPXIuY3JlYXRlVGV4dHVyZUNhbnZhcyhlLHRoaXMuYXRsYXNTaXplLHRoaXMudGV4SGVpZ2h0LCJzY3JhdGNoIil9cmV0dXJuIG8odCwiQXRsYXMiKSxVZih0LFt7a2V5OiJnZXRLZXlzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5rZXlUb0xvY2F0aW9uLmtleXMoKSl9LCJnZXRLZXlzIil9LHtrZXk6ImdldFNjYWxlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIudyxpPXIuaCxhPXRoaXMudGV4SGVpZ2h0LHM9dGhpcy5tYXhUZXhXaWR0aCxsPWEvaSx1PW4qbCxoPWkqbDtyZXR1cm4gdT5zJiYobD1zL24sdT1uKmwsaD1pKmwpLHtzY2FsZTpsLHRleFc6dSx0ZXhIOmh9fSwiZ2V0U2NhbGUiKX0se2tleToiZHJhdyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9dGhpcyxzPXRoaXMuYXRsYXNTaXplLGw9dGhpcy5yb3dzLHU9dGhpcy50ZXhIZWlnaHQsaD10aGlzLmdldFNjYWxlKG4pLGY9aC5zY2FsZSxkPWgudGV4VyxwPWgudGV4SCxtPVtudWxsLG51bGxdLGc9byhmdW5jdGlvbihULFMpe2lmKGkmJlMpe3ZhciB3PVMuY29udGV4dCxFPVQueCxfPVQucm93LEM9RSxEPXUqXzt3LnNhdmUoKSx3LnRyYW5zbGF0ZShDLEQpLHcuc2NhbGUoZixmKSxpKHcsbiksdy5yZXN0b3JlKCl9fSwiZHJhd0F0IikseT1vKGZ1bmN0aW9uKCl7ZyhhLmZyZWVQb2ludGVyLGEuY2FudmFzKSxtWzBdPXt4OmEuZnJlZVBvaW50ZXIueCx5OmEuZnJlZVBvaW50ZXIucm93KnUsdzpkLGg6cH0sbVsxXT17eDphLmZyZWVQb2ludGVyLngrZCx5OmEuZnJlZVBvaW50ZXIucm93KnUsdzowLGg6cH0sYS5mcmVlUG9pbnRlci54Kz1kLGEuZnJlZVBvaW50ZXIueD09cyYmKGEuZnJlZVBvaW50ZXIueD0wLGEuZnJlZVBvaW50ZXIucm93KyspfSwiZHJhd05vcm1hbCIpLHY9byhmdW5jdGlvbigpe3ZhciBUPWEuc2NyYXRjaCxTPWEuY2FudmFzO1QuY2xlYXIoKSxnKHt4OjAscm93OjB9LFQpO3ZhciB3PXMtYS5mcmVlUG9pbnRlci54LEU9ZC13LF89dTt7dmFyIEM9YS5mcmVlUG9pbnRlci54LEQ9YS5mcmVlUG9pbnRlci5yb3cqdSxPPXc7Uy5jb250ZXh0LmRyYXdJbWFnZShULDAsMCxPLF8sQyxELE8sXyksbVswXT17eDpDLHk6RCx3Ok8saDpwfX17dmFyIFI9dyxrPShhLmZyZWVQb2ludGVyLnJvdysxKSp1LEw9RTtTJiZTLmNvbnRleHQuZHJhd0ltYWdlKFQsUiwwLEwsXywwLGssTCxfKSxtWzFdPXt4OjAseTprLHc6TCxoOnB9fWEuZnJlZVBvaW50ZXIueD1FLGEuZnJlZVBvaW50ZXIucm93Kyt9LCJkcmF3V3JhcHBlZCIpLHg9byhmdW5jdGlvbigpe2EuZnJlZVBvaW50ZXIueD0wLGEuZnJlZVBvaW50ZXIucm93Kyt9LCJtb3ZlVG9TdGFydE9mTmV4dFJvdyIpO2lmKHRoaXMuZnJlZVBvaW50ZXIueCtkPD1zKXkoKTtlbHNle2lmKHRoaXMuZnJlZVBvaW50ZXIucm93Pj1sLTEpcmV0dXJuITE7dGhpcy5mcmVlUG9pbnRlci54PT09cz8oeCgpLHkoKSk6dGhpcy5lbmFibGVXcmFwcGluZz92KCk6KHgoKSx5KCkpfXJldHVybiB0aGlzLmtleVRvTG9jYXRpb24uc2V0KHIsbSksdGhpcy5uZWVkc0J1ZmZlcj0hMCxtfSwiZHJhdyIpfSx7a2V5OiJnZXRPZmZzZXRzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmtleVRvTG9jYXRpb24uZ2V0KHIpfSwiZ2V0T2Zmc2V0cyIpfSx7a2V5OiJpc0VtcHR5Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJlZVBvaW50ZXIueD09PTAmJnRoaXMuZnJlZVBvaW50ZXIucm93PT09MH0sImlzRW1wdHkiKX0se2tleToiY2FuRml0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuYXRsYXNTaXplLGk9dGhpcy5yb3dzLGE9dGhpcy5nZXRTY2FsZShyKSxzPWEudGV4VztyZXR1cm4gdGhpcy5mcmVlUG9pbnRlci54K3M+bj90aGlzLmZyZWVQb2ludGVyLnJvdzxpLTE6ITB9LCJjYW5GaXQiKX0se2tleToiYnVmZmVySWZOZWVkZWQiLHZhbHVlOm8oZnVuY3Rpb24ocil7dGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPVBKZShyLHRoaXMuZGVidWdJRCkpLHRoaXMubmVlZHNCdWZmZXImJih0aGlzLnRleHR1cmUuYnVmZmVyKHRoaXMuY2FudmFzKSx0aGlzLm5lZWRzQnVmZmVyPSExKX0sImJ1ZmZlcklmTmVlZGVkIil9LHtrZXk6ImRpc3Bvc2UiLHZhbHVlOm8oZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUmJih0aGlzLnRleHR1cmUuZGVsZXRlVGV4dHVyZSgpLHRoaXMudGV4dHVyZT1udWxsLHRoaXMubmVlZHNCdWZmZXI9ITApfSwiZGlzcG9zZSIpfV0pLHR9KCksVUplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe1ZmKHRoaXMsdCksdGhpcy5yPWUsdGhpcy5vcHRzPXIsdGhpcy5rZXlUb0lkcz1uZXcgTWFwLHRoaXMuaWRUb0tleT1uZXcgTWFwLHRoaXMuYXRsYXNlcz1bXSx0aGlzLnN0eWxlS2V5VG9BdGxhcz1uZXcgTWFwLHRoaXMuc3R5bGVLZXlOZWVkc1JlZHJhdz1uZXcgU2V0LHRoaXMuZm9yY2VHQz0hMX1yZXR1cm4gbyh0LCJBdGxhc0NvbGxlY3Rpb24iKSxVZih0LFt7a2V5OiJnZXRLZXlzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5zdHlsZUtleVRvQXRsYXMua2V5cygpKX0sImdldEtleXMiKX0se2tleToiZ2V0SWRzRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMua2V5VG9JZHMuZ2V0KHIpO3JldHVybiBufHwobj1uZXcgU2V0LHRoaXMua2V5VG9JZHMuc2V0KHIsbikpLG59LCJnZXRJZHNGb3IiKX0se2tleToiX2NyZWF0ZUF0bGFzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5yLG49dGhpcy5vcHRzO3JldHVybiBuZXcgVkplKHIsbil9LCJfY3JlYXRlQXRsYXMiKX0se2tleToiX2dldFNjcmF0Y2hDYW52YXMiLHZhbHVlOm8oZnVuY3Rpb24oKXtpZighdGhpcy5zY3JhdGNoKXt2YXIgcj10aGlzLnIsbj10aGlzLm9wdHMsaT1uLndlYmdsVGV4U2l6ZSxhPU1hdGguZmxvb3IoaS9uLndlYmdsVGV4Um93cyk7dGhpcy5zY3JhdGNoPW4uY3JlYXRlVGV4dHVyZUNhbnZhcyhyLGksYSwic2NyYXRjaCIpfXJldHVybiB0aGlzLnNjcmF0Y2h9LCJfZ2V0U2NyYXRjaENhbnZhcyIpfSx7a2V5OiJkcmF3Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpLGEpe2lmKHRoaXMuc3R5bGVLZXlOZWVkc1JlZHJhdy5oYXMobikpe3RoaXMuc3R5bGVLZXlOZWVkc1JlZHJhdy5kZWxldGUobiksdGhpcy5kZWxldGVLZXkocixuKTt2YXIgcz10aGlzLnN0eWxlS2V5VG9BdGxhcy5nZXQobik7cyYmKHMuZm9yY2VHQz0hMCksdGhpcy5zdHlsZUtleVRvQXRsYXMuZGVsZXRlKG4pfXZhciBsPXRoaXMuc3R5bGVLZXlUb0F0bGFzLmdldChuKTtyZXR1cm4gbHx8KGw9dGhpcy5hdGxhc2VzW3RoaXMuYXRsYXNlcy5sZW5ndGgtMV0sKCFsfHwhbC5jYW5GaXQoaSkpJiYobD10aGlzLl9jcmVhdGVBdGxhcygpLHRoaXMuYXRsYXNlcy5wdXNoKGwpKSxsLmRyYXcobixpLGEpLHRoaXMuc3R5bGVLZXlUb0F0bGFzLnNldChuLGwpLHRoaXMuZ2V0SWRzRm9yKG4pLmFkZChyKSx0aGlzLmlkVG9LZXkuc2V0KHIsbikpLGx9LCJkcmF3Iil9LHtrZXk6ImdldEF0bGFzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnN0eWxlS2V5VG9BdGxhcy5nZXQocil9LCJnZXRBdGxhcyIpfSx7a2V5OiJoYXNBdGxhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zdHlsZUtleVRvQXRsYXMuaGFzKHIpfSwiaGFzQXRsYXMiKX0se2tleToiZGVsZXRlS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dGhpcy5pZFRvS2V5LmRlbGV0ZShyKSx0aGlzLmdldElkc0ZvcihuKS5kZWxldGUocil9LCJkZWxldGVLZXkiKX0se2tleToiY2hlY2tLZXlJc0ludmFsaWQiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtpZighdGhpcy5pZFRvS2V5LmhhcyhyKSlyZXR1cm4hMTt2YXIgaT10aGlzLmlkVG9LZXkuZ2V0KHIpO3JldHVybiBpIT1uPyh0aGlzLmRlbGV0ZUtleShyLGkpLCEwKTohMX0sImNoZWNrS2V5SXNJbnZhbGlkIil9LHtrZXk6Il9nZXRLZXlzVG9Db2xsZWN0Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNldCxuPXZvKHRoaXMuc3R5bGVLZXlUb0F0bGFzLmtleXMoKSksaTt0cnl7Zm9yKG4ucygpOyEoaT1uLm4oKSkuZG9uZTspe3ZhciBhPWkudmFsdWU7dGhpcy5nZXRJZHNGb3IoYSkuc2l6ZT09MCYmci5hZGQoYSl9fWNhdGNoKHMpe24uZShzKX1maW5hbGx5e24uZigpfXJldHVybiByfSwiX2dldEtleXNUb0NvbGxlY3QiKX0se2tleToiZ2MiLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5hdGxhc2VzLnNvbWUoZnVuY3Rpb24ocCl7cmV0dXJuIHAuZm9yY2VHQ30pLGk9dGhpcy5fZ2V0S2V5c1RvQ29sbGVjdCgpO2lmKGkuc2l6ZT09PTAmJiFuKXtjb25zb2xlLmxvZygibm90aGluZyB0byBnYXJiYWdlIGNvbGxlY3QiKTtyZXR1cm59dmFyIGE9W10scz1uZXcgTWFwLGw9bnVsbCx1PXZvKHRoaXMuYXRsYXNlcyksaDt0cnl7dmFyIGY9byhmdW5jdGlvbigpe3ZhciBtPWgudmFsdWUsZz1tLmdldEtleXMoKSx5PUhKZShpLGcpO2lmKHkuc2l6ZT09PTAmJiFtLmZvcmNlR0MpcmV0dXJuIGEucHVzaChtKSxnLmZvckVhY2goZnVuY3Rpb24oXyl7cmV0dXJuIHMuc2V0KF8sbSl9KSwiY29udGludWUiO2x8fChsPXIuX2NyZWF0ZUF0bGFzKCksYS5wdXNoKGwpKTt2YXIgdj12byhnKSx4O3RyeXtmb3Iodi5zKCk7ISh4PXYubigpKS5kb25lOyl7dmFyIGI9eC52YWx1ZTtpZigheS5oYXMoYikpe3ZhciBUPW0uZ2V0T2Zmc2V0cyhiKSxTPVJpKFQsMiksdz1TWzBdLEU9U1sxXTtsLmNhbkZpdCh7dzp3LncrRS53LGg6dy5ofSl8fChsPXIuX2NyZWF0ZUF0bGFzKCksYS5wdXNoKGwpKSxyLl9jb3B5VGV4dHVyZVRvTmV3QXRsYXMoYixtLGwpLHMuc2V0KGIsbCl9fX1jYXRjaChfKXt2LmUoXyl9ZmluYWxseXt2LmYoKX19LCJfbG9vcCIpO2Zvcih1LnMoKTshKGg9dS5uKCkpLmRvbmU7KXZhciBkPWYoKX1jYXRjaChwKXt1LmUocCl9ZmluYWxseXt1LmYoKX10aGlzLmF0bGFzZXM9YSx0aGlzLnN0eWxlS2V5VG9BdGxhcz1zfSwiZ2MiKX0se2tleToiX2NvcHlUZXh0dXJlVG9OZXdBdGxhcyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9bi5nZXRPZmZzZXRzKHIpLHM9UmkoYSwyKSxsPXNbMF0sdT1zWzFdO2lmKHUudz09PTApaS5kcmF3KHIsbCxmdW5jdGlvbihwKXtwLmRyYXdJbWFnZShuLmNhbnZhcyxsLngsbC55LGwudyxsLmgsMCwwLGwudyxsLmgpfSk7ZWxzZXt2YXIgaD10aGlzLl9nZXRTY3JhdGNoQ2FudmFzKCk7aC5jbGVhcigpLGguY29udGV4dC5kcmF3SW1hZ2Uobi5jYW52YXMsbC54LGwueSxsLncsbC5oLDAsMCxsLncsbC5oKSxoLmNvbnRleHQuZHJhd0ltYWdlKG4uY2FudmFzLHUueCx1LnksdS53LHUuaCxsLncsMCx1LncsdS5oKTt2YXIgZj1sLncrdS53LGQ9bC5oO2kuZHJhdyhyLHt3OmYsaDpkfSxmdW5jdGlvbihwKXtwLmRyYXdJbWFnZShoLDAsMCxmLGQsMCwwLGYsZCl9KX19LCJfY29weVRleHR1cmVUb05ld0F0bGFzIil9LHtrZXk6ImdldENvdW50cyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybntrZXlDb3VudDp0aGlzLnN0eWxlS2V5VG9BdGxhcy5zaXplLGF0bGFzQ291bnQ6bmV3IFNldCh0aGlzLnN0eWxlS2V5VG9BdGxhcy52YWx1ZXMoKSkuc2l6ZX19LCJnZXRDb3VudHMiKX1dKSx0fSgpO28oSEplLCJpbnRlcnNlY3Rpb24iKTtXSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7VmYodGhpcyx0KSx0aGlzLnI9ZTt2YXIgbj1yO3RoaXMuZ2xvYmFsT3B0aW9ucz1uLHRoaXMubWF4QXRsYXNlcz1uLndlYmdsVGV4UGVyQmF0Y2gsdGhpcy5hdGxhc1NpemU9bi53ZWJnbFRleFNpemUsdGhpcy5yZW5kZXJUeXBlcz1uZXcgTWFwLHRoaXMubWF4QXRsYXNlc1BlckJhdGNoPXIud2ViZ2xUZXhQZXJCYXRjaCx0aGlzLmJhdGNoQXRsYXNlcz1bXSx0aGlzLl9jYWNoZVNjcmF0Y2hDYW52YXMobil9cmV0dXJuIG8odCwiQXRsYXNNYW5hZ2VyIiksVWYodCxbe2tleToiX2NhY2hlU2NyYXRjaENhbnZhcyIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj0tMSxpPS0xLGE9bnVsbCxzPXIuY3JlYXRlVGV4dHVyZUNhbnZhcztyLmNyZWF0ZVRleHR1cmVDYW52YXM9ZnVuY3Rpb24obCx1LGgsZil7cmV0dXJuIGY/KCghYXx8dSE9bnx8aCE9aSkmJihuPXUsaT1oLGE9cyhsLHUsaCkpLGEpOnMobCx1LGgpfX0sIl9jYWNoZVNjcmF0Y2hDYW52YXMiKX0se2tleToiYWRkUmVuZGVyVHlwZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPW5ldyBVSmUodGhpcy5yLHRoaXMuZ2xvYmFsT3B0aW9ucyksYT1uO3RoaXMucmVuZGVyVHlwZXMuc2V0KHIsaXIoe3R5cGU6cixhdGxhc0NvbGxlY3Rpb246aX0sYSkpfSwiYWRkUmVuZGVyVHlwZSIpfSx7a2V5OiJnZXRSZW5kZXJUeXBlcyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBhZ2UodGhpcy5yZW5kZXJUeXBlcy52YWx1ZXMoKSl9LCJnZXRSZW5kZXJUeXBlcyIpfSx7a2V5OiJnZXRSZW5kZXJUeXBlT3B0cyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5yZW5kZXJUeXBlcy5nZXQocil9LCJnZXRSZW5kZXJUeXBlT3B0cyIpfSx7a2V5OiJpbnZhbGlkYXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxpPW4uZm9yY2VSZWRyYXcsYT1pPT09dm9pZCAwPyExOmkscz1uLmZpbHRlckVsZSxsPXM9PT12b2lkIDA/ZnVuY3Rpb24oKXtyZXR1cm4hMH06cyx1PW4uZmlsdGVyVHlwZSxoPXU9PT12b2lkIDA/ZnVuY3Rpb24oKXtyZXR1cm4hMH06dSxmPSExLGQ9dm8ocikscDt0cnl7Zm9yKGQucygpOyEocD1kLm4oKSkuZG9uZTspe3ZhciBtPXAudmFsdWU7aWYobChtKSl7dmFyIGc9bS5pZCgpLHk9dm8odGhpcy5nZXRSZW5kZXJUeXBlcygpKSx2O3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIHg9di52YWx1ZTtpZihoKHgudHlwZSkpe3ZhciBiPXguZ2V0S2V5KG0pO2E/KHguYXRsYXNDb2xsZWN0aW9uLmRlbGV0ZUtleShnLGIpLHguYXRsYXNDb2xsZWN0aW9uLnN0eWxlS2V5TmVlZHNSZWRyYXcuYWRkKGIpLGY9ITApOmZ8PXguYXRsYXNDb2xsZWN0aW9uLmNoZWNrS2V5SXNJbnZhbGlkKGcsYil9fX1jYXRjaChUKXt5LmUoVCl9ZmluYWxseXt5LmYoKX19fX1jYXRjaChUKXtkLmUoVCl9ZmluYWxseXtkLmYoKX1yZXR1cm4gZn0sImludmFsaWRhdGUiKX0se2tleToiZ2MiLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj12byh0aGlzLmdldFJlbmRlclR5cGVzKCkpLG47dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KXt2YXIgaT1uLnZhbHVlO2kuYXRsYXNDb2xsZWN0aW9uLmdjKCl9fWNhdGNoKGEpe3IuZShhKX1maW5hbGx5e3IuZigpfX0sImdjIil9LHtrZXk6ImlzUmVuZGVyYWJsZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0UmVuZGVyVHlwZU9wdHMobik7cmV0dXJuIGkmJmkuaXNWaXNpYmxlKHIpfSwiaXNSZW5kZXJhYmxlIil9LHtrZXk6InN0YXJ0QmF0Y2giLHZhbHVlOm8oZnVuY3Rpb24oKXt0aGlzLmJhdGNoQXRsYXNlcz1bXX0sInN0YXJ0QmF0Y2giKX0se2tleToiZ2V0QXRsYXNDb3VudCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGh9LCJnZXRBdGxhc0NvdW50Iil9LHtrZXk6ImdldEF0bGFzZXMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXRjaEF0bGFzZXN9LCJnZXRBdGxhc2VzIil9LHtrZXk6ImdldE9yQ3JlYXRlQXRsYXMiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXRoaXMucmVuZGVyVHlwZXMuZ2V0KGkpLHM9YS5nZXRLZXkociksbD1yLmlkKCk7cmV0dXJuIGEuYXRsYXNDb2xsZWN0aW9uLmRyYXcobCxzLG4sZnVuY3Rpb24odSl7YS5kcmF3RWxlbWVudCh1LHIsbiwhMCwhMCl9KX0sImdldE9yQ3JlYXRlQXRsYXMiKX0se2tleToiZ2V0QXRsYXNJbmRleEZvckJhdGNoIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuYmF0Y2hBdGxhc2VzLmluZGV4T2Yocik7aWYobjwwKXtpZih0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGg9PT10aGlzLm1heEF0bGFzZXNQZXJCYXRjaClyZXR1cm47dGhpcy5iYXRjaEF0bGFzZXMucHVzaChyKSxuPXRoaXMuYmF0Y2hBdGxhc2VzLmxlbmd0aC0xfXJldHVybiBufSwiZ2V0QXRsYXNJbmRleEZvckJhdGNoIil9LHtrZXk6ImdldEluZGV4QXJyYXkiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOnRoaXMubWF4QXRsYXNlc30sZnVuY3Rpb24ocixuKXtyZXR1cm4gbn0pfSwiZ2V0SW5kZXhBcnJheSIpfSx7a2V5OiJnZXRBdGxhc0luZm8iLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLnJlbmRlclR5cGVzLmdldChuKSxhPWkuZ2V0Qm91bmRpbmdCb3gocikscz10aGlzLmdldE9yQ3JlYXRlQXRsYXMocixhLG4pLGw9dGhpcy5nZXRBdGxhc0luZGV4Rm9yQmF0Y2gocyk7aWYobCE9PXZvaWQgMCl7dmFyIHU9aS5nZXRLZXkociksaD1zLmdldE9mZnNldHModSksZj1SaShoLDIpLGQ9ZlswXSxwPWZbMV07cmV0dXJue2F0bGFzSUQ6bCx0ZXg6ZCx0ZXgxOmQsdGV4MjpwLGJiOmEsdHlwZTpuLHN0eWxlS2V5OnV9fX0sImdldEF0bGFzSW5mbyIpfSx7a2V5OiJjYW5BZGRUb0N1cnJlbnRCYXRjaCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe2lmKHRoaXMuYmF0Y2hBdGxhc2VzLmxlbmd0aD09PXRoaXMubWF4QXRsYXNlc1BlckJhdGNoKXt2YXIgaT10aGlzLnJlbmRlclR5cGVzLmdldChuKSxhPWkuZ2V0S2V5KHIpLHM9aS5hdGxhc0NvbGxlY3Rpb24uZ2V0QXRsYXMoYSk7cmV0dXJuIHMmJnRoaXMuYmF0Y2hBdGxhc2VzLmluY2x1ZGVzKHMpfXJldHVybiEwfSwiY2FuQWRkVG9DdXJyZW50QmF0Y2giKX0se2tleToic2V0VHJhbnNmb3JtTWF0cml4Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAscz1uLmJiLGw9bi50eXBlLHU9bi50ZXgxLGg9bi50ZXgyLGY9dGhpcy5nZXRSZW5kZXJUeXBlT3B0cyhsKSxkPWYuZ2V0UGFkZGluZz9mLmdldFBhZGRpbmcoaSk6MCxwPXUudy8odS53K2gudyk7YXx8KHA9MS1wKTt2YXIgbT10aGlzLmdldEFkanVzdGVkQkIocyxkLGEscCksZyx5O0IxZShyKTt2YXIgdj1mLmdldFJvdGF0aW9uP2YuZ2V0Um90YXRpb24oaSk6MDtpZih2IT09MCl7dmFyIHg9Zi5nZXRSb3RhdGlvblBvaW50KGkpLGI9eC54LFQ9eC55O2o2KHIscixbYixUXSksRjFlKHIscix2KTt2YXIgUz1mLmdldFJvdGF0aW9uT2Zmc2V0KGkpO2c9Uy54K20ueE9mZnNldCx5PVMueX1lbHNlIGc9bS54MSx5PW0ueTE7ajYocixyLFtnLHldKSxzRihyLHIsW20udyxtLmhdKX0sInNldFRyYW5zZm9ybU1hdHJpeCIpfSx7a2V5OiJnZXRUcmFuc2Zvcm1NYXRyaXgiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITAsYT1aYigpO3JldHVybiB0aGlzLnNldFRyYW5zZm9ybU1hdHJpeChhLHIsbixpKSxhfSwiZ2V0VHJhbnNmb3JtTWF0cml4Iil9LHtrZXk6ImdldEFkanVzdGVkQkIiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGksYSl7dmFyIHM9ci54MSxsPXIueTEsdT1yLncsaD1yLmg7biYmKHMtPW4sbC09bix1Kz0yKm4saCs9MipuKTt2YXIgZj0wLGQ9dSphO3JldHVybiBpJiZhPDE/dT1kOiFpJiZhPDEmJihmPXUtZCxzKz1mLHU9ZCkse3gxOnMseTE6bCx3OnUsaCx4T2Zmc2V0OmZ9fSwiZ2V0QWRqdXN0ZWRCQiIpfSx7a2V5OiJnZXREZWJ1Z0luZm8iLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj1bXSxuPXZvKHRoaXMucmVuZGVyVHlwZXMpLGk7dHJ5e2ZvcihuLnMoKTshKGk9bi5uKCkpLmRvbmU7KXt2YXIgYT1SaShpLnZhbHVlLDIpLHM9YVswXSxsPWFbMV0sdT1sLmF0bGFzQ29sbGVjdGlvbi5nZXRDb3VudHMoKSxoPXUua2V5Q291bnQsZj11LmF0bGFzQ291bnQ7ci5wdXNoKHt0eXBlOnMsa2V5Q291bnQ6aCxhdGxhc0NvdW50OmZ9KX19Y2F0Y2goZCl7bi5lKGQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9LCJnZXREZWJ1Z0luZm8iKX1dKSx0fSgpLHlCPTAsWm1lPTEsSm1lPTIsdkI9MyxxSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuKXtWZih0aGlzLHQpLHRoaXMucj1lLHRoaXMuZ2w9cix0aGlzLm1heEluc3RhbmNlcz1uLndlYmdsQmF0Y2hTaXplLHRoaXMubWF4QXRsYXNlcz1uLndlYmdsVGV4UGVyQmF0Y2gsdGhpcy5hdGxhc1NpemU9bi53ZWJnbFRleFNpemUsdGhpcy5iZ0NvbG9yPW4uYmdDb2xvcixuLmVuYWJsZVdyYXBwaW5nPSEwLG4uY3JlYXRlVGV4dHVyZUNhbnZhcz1JSmUsdGhpcy5hdGxhc01hbmFnZXI9bmV3IFdKZShlLG4pLHRoaXMucHJvZ3JhbT10aGlzLmNyZWF0ZVNoYWRlclByb2dyYW0oSmIuU0NSRUVOKSx0aGlzLnBpY2tpbmdQcm9ncmFtPXRoaXMuY3JlYXRlU2hhZGVyUHJvZ3JhbShKYi5QSUNLSU5HKSx0aGlzLnZhbz10aGlzLmNyZWF0ZVZBTygpLHRoaXMuZGVidWdJbmZvPVtdfXJldHVybiBvKHQsIkVsZW1lbnREcmF3aW5nV2ViR0wiKSxVZih0LFt7a2V5OiJhZGRUZXh0dXJlUmVuZGVyVHlwZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3RoaXMuYXRsYXNNYW5hZ2VyLmFkZFJlbmRlclR5cGUocixuKX0sImFkZFRleHR1cmVSZW5kZXJUeXBlIil9LHtrZXk6ImludmFsaWRhdGUiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGk9bi50eXBlLGE9dGhpcy5hdGxhc01hbmFnZXI7cmV0dXJuIGk/YS5pbnZhbGlkYXRlKHIse2ZpbHRlclR5cGU6byhmdW5jdGlvbihsKXtyZXR1cm4gbD09PWl9LCJmaWx0ZXJUeXBlIiksZm9yY2VSZWRyYXc6ITB9KTphLmludmFsaWRhdGUocil9LCJpbnZhbGlkYXRlIil9LHtrZXk6ImdjIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5hdGxhc01hbmFnZXIuZ2MoKX0sImdjIil9LHtrZXk6ImNyZWF0ZVNoYWRlclByb2dyYW0iLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpcy5nbCxpPWAjdmVyc2lvbiAzMDAgZXMKICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKICAgICAgdW5pZm9ybSBtYXQzIHVQYW5ab29tTWF0cml4OwogICAgICB1bmlmb3JtIGludCAgdUF0bGFzU2l6ZTsKICAgICAgCiAgICAgIC8vIGluc3RhbmNlZAogICAgICBpbiB2ZWMyIGFQb3NpdGlvbjsgCgogICAgICAvLyB3aGF0IGFyZSB3ZSByZW5kZXJpbmc/CiAgICAgIGluIGludCBhVmVydFR5cGU7CgogICAgICAvLyBmb3IgcGlja2luZwogICAgICBpbiB2ZWM0IGFJbmRleDsKICAgICAgCiAgICAgIC8vIEZvciB0ZXh0dXJlcwogICAgICBpbiBpbnQgYUF0bGFzSWQ7IC8vIHdoaWNoIHNoYWRlciB1bml0L2F0bGFzIHRvIHVzZQogICAgICBpbiB2ZWM0IGFUZXgxOyAvLyB4L3kvdy9oIG9mIHRleHR1cmUgaW4gYXRsYXMKICAgICAgaW4gdmVjNCBhVGV4MjsgCgogICAgICAvLyBmb3IgYW55IHRyYW5zZm9ybXMgdGhhdCBhcmUgbmVlZGVkCiAgICAgIGluIHZlYzQgYVNjYWxlUm90YXRlMTsgIC8vIHZlY3RvcnMgdXNlIGZld2VyIGF0dHJpYnV0ZXMgdGhhbiBtYXRyaWNlcwogICAgICBpbiB2ZWMyIGFUcmFuc2xhdGUxOwogICAgICBpbiB2ZWM0IGFTY2FsZVJvdGF0ZTI7CiAgICAgIGluIHZlYzIgYVRyYW5zbGF0ZTI7CgogICAgICAvLyBmb3IgZWRnZXMKICAgICAgaW4gdmVjNCBhUG9pbnRBUG9pbnRCOwogICAgICBpbiB2ZWM0IGFQb2ludENQb2ludEQ7CiAgICAgIGluIGZsb2F0IGFMaW5lV2lkdGg7CiAgICAgIGluIHZlYzQgYUVkZ2VDb2xvcjsKCiAgICAgIG91dCB2ZWMyIHZUZXhDb29yZDsKICAgICAgb3V0IHZlYzQgdkVkZ2VDb2xvcjsKICAgICAgZmxhdCBvdXQgaW50IHZBdGxhc0lkOwogICAgICBmbGF0IG91dCB2ZWM0IHZJbmRleDsKICAgICAgZmxhdCBvdXQgaW50IHZWZXJ0VHlwZTsKCiAgICAgIHZvaWQgbWFpbih2b2lkKSB7CiAgICAgICAgaW50IHZpZCA9IGdsX1ZlcnRleElEOwogICAgICAgIHZlYzIgcG9zaXRpb24gPSBhUG9zaXRpb247CgogICAgICAgIGlmKGFWZXJ0VHlwZSA9PSBgLmNvbmNhdCh5QixgKSB7CiAgICAgICAgICBmbG9hdCB0ZXhYOwogICAgICAgICAgZmxvYXQgdGV4WTsKICAgICAgICAgIGZsb2F0IHRleFc7CiAgICAgICAgICBmbG9hdCB0ZXhIOwogICAgICAgICAgbWF0MyAgdGV4TWF0cml4OwoKICAgICAgICAgIGludCB2aWQgPSBnbF9WZXJ0ZXhJRDsKICAgICAgICAgIGlmKHZpZCA8PSA1KSB7CiAgICAgICAgICAgIHRleFggPSBhVGV4MS54OwogICAgICAgICAgICB0ZXhZID0gYVRleDEueTsKICAgICAgICAgICAgdGV4VyA9IGFUZXgxLno7CiAgICAgICAgICAgIHRleEggPSBhVGV4MS53OwogICAgICAgICAgICB0ZXhNYXRyaXggPSBtYXQzKAogICAgICAgICAgICAgIHZlYzMoYVNjYWxlUm90YXRlMS54eSwgMC4wKSwKICAgICAgICAgICAgICB2ZWMzKGFTY2FsZVJvdGF0ZTIuencsIDAuMCksCiAgICAgICAgICAgICAgdmVjMyhhVHJhbnNsYXRlMSwgICAgICAxLjApCiAgICAgICAgICAgICk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0ZXhYID0gYVRleDIueDsKICAgICAgICAgICAgdGV4WSA9IGFUZXgyLnk7CiAgICAgICAgICAgIHRleFcgPSBhVGV4Mi56OwogICAgICAgICAgICB0ZXhIID0gYVRleDIudzsKICAgICAgICAgICAgdGV4TWF0cml4ID0gbWF0MygKICAgICAgICAgICAgICB2ZWMzKGFTY2FsZVJvdGF0ZTIueHksIDAuMCksCiAgICAgICAgICAgICAgdmVjMyhhU2NhbGVSb3RhdGUyLnp3LCAwLjApLAogICAgICAgICAgICAgIHZlYzMoYVRyYW5zbGF0ZTIsICAgICAgMS4wKQogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIGlmKHZpZCA9PSAxIHx8IHZpZCA9PSAyIHx8IHZpZCA9PSA0IHx8IHZpZCA9PSA3IHx8IHZpZCA9PSA4IHx8IHZpZCA9PSAxMCkgewogICAgICAgICAgICB0ZXhYICs9IHRleFc7CiAgICAgICAgICB9CiAgICAgICAgICBpZih2aWQgPT0gMiB8fCB2aWQgPT0gNCB8fCB2aWQgPT0gNSB8fCB2aWQgPT0gOCB8fCB2aWQgPT0gMTAgfHwgdmlkID09IDExKSB7CiAgICAgICAgICAgIHRleFkgKz0gdGV4SDsKICAgICAgICAgIH0KCiAgICAgICAgICBmbG9hdCBkID0gZmxvYXQodUF0bGFzU2l6ZSk7CiAgICAgICAgICB2VGV4Q29vcmQgPSB2ZWMyKHRleFggLyBkLCB0ZXhZIC8gZCk7IC8vIHRleCBjb29yZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKCiAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB0ZXhNYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApLCAxLjApOwogICAgICAgIH0gCiAgICAgICAgZWxzZSBpZihhVmVydFR5cGUgPT0gYCkuY29uY2F0KFptZSxgICYmIHZpZCA8IDYpIHsKICAgICAgICAgIHZlYzIgc291cmNlID0gYVBvaW50QVBvaW50Qi54eTsKICAgICAgICAgIHZlYzIgdGFyZ2V0ID0gYVBvaW50QVBvaW50Qi56dzsKCiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGdlb21ldHJ5IHNvIHRoYXQgdGhlIGxpbmUgaXMgY2VudGVyZWQgb24gdGhlIGVkZ2UKICAgICAgICAgIHBvc2l0aW9uLnkgPSBwb3NpdGlvbi55IC0gMC41OwoKICAgICAgICAgIHZlYzIgeEJhc2lzID0gdGFyZ2V0IC0gc291cmNlOwogICAgICAgICAgdmVjMiB5QmFzaXMgPSBub3JtYWxpemUodmVjMigteEJhc2lzLnksIHhCYXNpcy54KSk7CiAgICAgICAgICB2ZWMyIHBvaW50ID0gc291cmNlICsgeEJhc2lzICogcG9zaXRpb24ueCArIHlCYXNpcyAqIGFMaW5lV2lkdGggKiBwb3NpdGlvbi55OwoKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHZlYzMocG9pbnQsIDEuMCksIDEuMCk7CiAgICAgICAgICB2RWRnZUNvbG9yID0gYUVkZ2VDb2xvcjsKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09IGApLmNvbmNhdChKbWUsYCAmJiB2aWQgPCA2KSB7CiAgICAgICAgICB2ZWMyIHBvaW50QSA9IGFQb2ludEFQb2ludEIueHk7CiAgICAgICAgICB2ZWMyIHBvaW50QiA9IGFQb2ludEFQb2ludEIuenc7CiAgICAgICAgICB2ZWMyIHBvaW50QyA9IGFQb2ludENQb2ludEQueHk7CiAgICAgICAgICB2ZWMyIHBvaW50RCA9IGFQb2ludENQb2ludEQuenc7CgogICAgICAgICAgLy8gYWRqdXN0IHRoZSBnZW9tZXRyeSBzbyB0aGF0IHRoZSBsaW5lIGlzIGNlbnRlcmVkIG9uIHRoZSBlZGdlCiAgICAgICAgICBwb3NpdGlvbi55ID0gcG9zaXRpb24ueSAtIDAuNTsKCiAgICAgICAgICB2ZWMyIHAwID0gcG9pbnRBOwogICAgICAgICAgdmVjMiBwMSA9IHBvaW50QjsKICAgICAgICAgIHZlYzIgcDIgPSBwb2ludEM7CiAgICAgICAgICB2ZWMyIHBvcyA9IHBvc2l0aW9uOwogICAgICAgICAgaWYocG9zaXRpb24ueCA9PSAxLjApIHsKICAgICAgICAgICAgcDAgPSBwb2ludEQ7CiAgICAgICAgICAgIHAxID0gcG9pbnRDOwogICAgICAgICAgICBwMiA9IHBvaW50QjsKICAgICAgICAgICAgcG9zID0gdmVjMigwLjAsIC1wb3NpdGlvbi55KTsKICAgICAgICAgIH0KCiAgICAgICAgICB2ZWMyIHAwMSA9IHAxIC0gcDA7CiAgICAgICAgICB2ZWMyIHAxMiA9IHAyIC0gcDE7CiAgICAgICAgICB2ZWMyIHAyMSA9IHAxIC0gcDI7CgogICAgICAgICAgLy8gRmluZCB0aGUgbm9ybWFsIHZlY3Rvci4KICAgICAgICAgIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZShub3JtYWxpemUocDEyKSArIG5vcm1hbGl6ZShwMDEpKTsKICAgICAgICAgIHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpOwoKICAgICAgICAgIC8vIEZpbmQgdGhlIHZlY3RvciBwZXJwZW5kaWN1bGFyIHRvIHAwIC0+IHAxLgogICAgICAgICAgdmVjMiBwMDFOb3JtID0gbm9ybWFsaXplKHZlYzIoLXAwMS55LCBwMDEueCkpOwoKICAgICAgICAgIC8vIERldGVybWluZSB0aGUgYmVuZCBkaXJlY3Rpb24uCiAgICAgICAgICBmbG9hdCBzaWdtYSA9IHNpZ24oZG90KHAwMSArIHAyMSwgbm9ybWFsKSk7CiAgICAgICAgICBmbG9hdCB3aWR0aCA9IGFMaW5lV2lkdGg7CgogICAgICAgICAgaWYoc2lnbihwb3MueSkgPT0gLXNpZ21hKSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJzZWN0aW5nIHZlcnRleC4gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB0aGF0IHRoZXJlJ3Mgbm8gb3ZlcmxhcC4KICAgICAgICAgICAgdmVjMiBwb2ludCA9IDAuNSAqIHdpZHRoICogbm9ybWFsICogLXNpZ21hIC8gZG90KG5vcm1hbCwgcDAxTm9ybSk7CiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHZlYzMocDEgKyBwb2ludCwgMS4wKSwgMS4wKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBub24taW50ZXJzZWN0aW5nIHZlcnRleC4gVHJlYXQgaXQgbGlrZSBhIG1pdHJlIGpvaW4uCiAgICAgICAgICAgIHZlYzIgcG9pbnQgPSAwLjUgKiB3aWR0aCAqIG5vcm1hbCAqIHNpZ21hICogZG90KG5vcm1hbCwgcDAxTm9ybSk7CiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHZlYzMocDEgKyBwb2ludCwgMS4wKSwgMS4wKTsKICAgICAgICAgIH0KCiAgICAgICAgICB2RWRnZUNvbG9yID0gYUVkZ2VDb2xvcjsKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09IGApLmNvbmNhdCh2QixgICYmIHZpZCA8IDMpIHsKICAgICAgICAgIC8vIG1hc3NhZ2UgdGhlIGZpcnN0IHRyaWFuZ2xlIGludG8gYW4gZWRnZSBhcnJvdwogICAgICAgICAgaWYodmlkID09IDApCiAgICAgICAgICAgIHBvc2l0aW9uID0gdmVjMigtMC4xNSwgLTAuMyk7CiAgICAgICAgICBpZih2aWQgPT0gMSkKICAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMyKCAwLjAsICAgMC4wKTsKICAgICAgICAgIGlmKHZpZCA9PSAyKQogICAgICAgICAgICBwb3NpdGlvbiA9IHZlYzIoIDAuMTUsIC0wLjMpOwoKICAgICAgICAgIG1hdDMgdHJhbnNmb3JtID0gbWF0MygKICAgICAgICAgICAgdmVjMyhhU2NhbGVSb3RhdGUxLnh5LCAwLjApLAogICAgICAgICAgICB2ZWMzKGFTY2FsZVJvdGF0ZTEuencsIDAuMCksCiAgICAgICAgICAgIHZlYzMoYVRyYW5zbGF0ZTEsICAgICAgMS4wKQogICAgICAgICAgKTsKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHRyYW5zZm9ybSAqIHZlYzMocG9zaXRpb24sIDEuMCksIDEuMCk7CiAgICAgICAgICB2RWRnZUNvbG9yID0gYUVkZ2VDb2xvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDIuMCwgMC4wLCAwLjAsIDEuMCk7IC8vIGRpc2NhcmQgdmVydGV4IGJ5IHB1dHRpbmcgaXQgb3V0c2lkZSB3ZWJnbCBjbGlwIHNwYWNlCiAgICAgICAgfQoKICAgICAgICB2QXRsYXNJZCA9IGFBdGxhc0lkOwogICAgICAgIHZJbmRleCA9IGFJbmRleDsKICAgICAgICB2VmVydFR5cGUgPSBhVmVydFR5cGU7CiAgICAgIH0KICAgIGApLGE9dGhpcy5hdGxhc01hbmFnZXIuZ2V0SW5kZXhBcnJheSgpLHM9YCN2ZXJzaW9uIDMwMCBlcwogICAgICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgogICAgICAvLyBkZWZpbmUgdGV4dHVyZSB1bml0IGZvciBlYWNoIG5vZGUgaW4gdGhlIGJhdGNoCiAgICAgIGAuY29uY2F0KGEubWFwKGZ1bmN0aW9uKGgpe3JldHVybiJ1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZSIuY29uY2F0KGgsIjsiKX0pLmpvaW4oYAoJYCksYAoKICAgICAgdW5pZm9ybSB2ZWM0IHVCR0NvbG9yOwoKICAgICAgaW4gdmVjMiB2VGV4Q29vcmQ7CiAgICAgIGluIHZlYzQgdkVkZ2VDb2xvcjsKICAgICAgZmxhdCBpbiBpbnQgdkF0bGFzSWQ7CiAgICAgIGZsYXQgaW4gdmVjNCB2SW5kZXg7CiAgICAgIGZsYXQgaW4gaW50IHZWZXJ0VHlwZTsKCiAgICAgIG91dCB2ZWM0IG91dENvbG9yOwoKICAgICAgdm9pZCBtYWluKHZvaWQpIHsKICAgICAgICBpZih2VmVydFR5cGUgPT0gYCkuY29uY2F0KHlCLGApIHsKICAgICAgICAgIGApLmNvbmNhdChhLm1hcChmdW5jdGlvbihoKXtyZXR1cm4iaWYodkF0bGFzSWQgPT0gIi5jb25jYXQoaCwiKSBvdXRDb2xvciA9IHRleHR1cmUodVRleHR1cmUiKS5jb25jYXQoaCwiLCB2VGV4Q29vcmQpOyIpfSkuam9pbihgCgllbHNlIGApLGAKICAgICAgICB9IGVsc2UgaWYodlZlcnRUeXBlID09IGApLmNvbmNhdCh2QixgKSB7CiAgICAgICAgICAvLyBibGVuZCBhcnJvdyBjb2xvciB3aXRoIGJhY2tncm91bmQgKHVzaW5nIHByZW11bHRpcGxpZWQgYWxwaGEpCiAgICAgICAgICBvdXRDb2xvci5yZ2IgPSB2RWRnZUNvbG9yLnJnYiArICh1QkdDb2xvci5yZ2IgKiAoMS4wIC0gdkVkZ2VDb2xvci5hKSk7IAogICAgICAgICAgb3V0Q29sb3IuYSA9IDEuMDsgLy8gbWFrZSBvcGFxdWUsIG1hc2tzIG91dCBsaW5lIHVuZGVyIGFycm93CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dENvbG9yID0gdkVkZ2VDb2xvcjsKICAgICAgICB9CgogICAgICAgIGApLmNvbmNhdChyLnBpY2tpbmc/YGlmKG91dENvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOwogICAgICAgICAgICAgZWxzZSBvdXRDb2xvciA9IHZJbmRleDtgOiIiLGAKICAgICAgfQogICAgYCksbD1NSmUobixpLHMpO2wuYVBvc2l0aW9uPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVBvc2l0aW9uIiksbC5hSW5kZXg9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhSW5kZXgiKSxsLmFWZXJ0VHlwZT1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFWZXJ0VHlwZSIpLGwuYUF0bGFzSWQ9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhQXRsYXNJZCIpLGwuYVRleDE9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhVGV4MSIpLGwuYVRleDI9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhVGV4MiIpLGwuYVNjYWxlUm90YXRlMT1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFTY2FsZVJvdGF0ZTEiKSxsLmFUcmFuc2xhdGUxPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVRyYW5zbGF0ZTEiKSxsLmFTY2FsZVJvdGF0ZTI9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhU2NhbGVSb3RhdGUyIiksbC5hVHJhbnNsYXRlMj1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFUcmFuc2xhdGUyIiksbC5hUG9pbnRBUG9pbnRCPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVBvaW50QVBvaW50QiIpLGwuYVBvaW50Q1BvaW50RD1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFQb2ludENQb2ludEQiKSxsLmFMaW5lV2lkdGg9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhTGluZVdpZHRoIiksbC5hRWRnZUNvbG9yPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYUVkZ2VDb2xvciIpLGwudVBhblpvb21NYXRyaXg9bi5nZXRVbmlmb3JtTG9jYXRpb24obCwidVBhblpvb21NYXRyaXgiKSxsLnVBdGxhc1NpemU9bi5nZXRVbmlmb3JtTG9jYXRpb24obCwidUF0bGFzU2l6ZSIpLGwudUJHQ29sb3I9bi5nZXRVbmlmb3JtTG9jYXRpb24obCwidUJHQ29sb3IiKSxsLnVUZXh0dXJlcz1bXTtmb3IodmFyIHU9MDt1PHRoaXMuYXRsYXNNYW5hZ2VyLm1heEF0bGFzZXM7dSsrKWwudVRleHR1cmVzLnB1c2gobi5nZXRVbmlmb3JtTG9jYXRpb24obCwidVRleHR1cmUiLmNvbmNhdCh1KSkpO3JldHVybiBsfSwiY3JlYXRlU2hhZGVyUHJvZ3JhbSIpfSx7a2V5OiJjcmVhdGVWQU8iLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj1bMCwwLDEsMCwxLDEsMCwwLDEsMSwwLDFdLG49W10uY29uY2F0KHIscik7dGhpcy52ZXJ0ZXhDb3VudD1uLmxlbmd0aC8yO3ZhciBpPXRoaXMubWF4SW5zdGFuY2VzLGE9dGhpcy5nbCxzPXRoaXMucHJvZ3JhbSxsPWEuY3JlYXRlVmVydGV4QXJyYXkoKTtyZXR1cm4gYS5iaW5kVmVydGV4QXJyYXkobCksRkplKGEsInZlYzIiLHMuYVBvc2l0aW9uLG4pLHRoaXMuaW5kZXhCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFJbmRleCksdGhpcy52ZXJ0VHlwZUJ1ZmZlcj15byhhLGksImludCIscy5hVmVydFR5cGUpLHRoaXMuYXRsYXNJZEJ1ZmZlcj15byhhLGksImludCIscy5hQXRsYXNJZCksdGhpcy50ZXgxQnVmZmVyPXlvKGEsaSwidmVjNCIscy5hVGV4MSksdGhpcy50ZXgyQnVmZmVyPXlvKGEsaSwidmVjNCIscy5hVGV4MiksdGhpcy5zY2FsZVJvdGF0ZTFCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFTY2FsZVJvdGF0ZTEpLHRoaXMudHJhbnNsYXRlMUJ1ZmZlcj15byhhLGksInZlYzIiLHMuYVRyYW5zbGF0ZTEpLHRoaXMuc2NhbGVSb3RhdGUyQnVmZmVyPXlvKGEsaSwidmVjNCIscy5hU2NhbGVSb3RhdGUyKSx0aGlzLnRyYW5zbGF0ZTJCdWZmZXI9eW8oYSxpLCJ2ZWMyIixzLmFUcmFuc2xhdGUyKSx0aGlzLnBvaW50QVBvaW50QkJ1ZmZlcj15byhhLGksInZlYzQiLHMuYVBvaW50QVBvaW50QiksdGhpcy5wb2ludENQb2ludERCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFQb2ludENQb2ludEQpLHRoaXMubGluZVdpZHRoQnVmZmVyPXlvKGEsaSwiZmxvYXQiLHMuYUxpbmVXaWR0aCksdGhpcy5lZGdlQ29sb3JCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFFZGdlQ29sb3IpLGEuYmluZFZlcnRleEFycmF5KG51bGwpLGx9LCJjcmVhdGVWQU8iKX0se2tleToiYnVmZmVycyIsZ2V0Om8oZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9idWZmZXJzfHwodGhpcy5fYnVmZmVycz1PYmplY3Qua2V5cyh0aGlzKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uZW5kc1dpdGgoIkJ1ZmZlciIpfSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByW25dfSkpLHRoaXMuX2J1ZmZlcnN9LCJnZXQiKX0se2tleToic3RhcnRGcmFtZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpKYi5TQ1JFRU47dGhpcy5wYW5ab29tTWF0cml4PXIsdGhpcy5kZWJ1Z0luZm89bix0aGlzLnJlbmRlclRhcmdldD1pLHRoaXMuc3RhcnRCYXRjaCgpfSwic3RhcnRGcmFtZSIpfSx7a2V5OiJzdGFydEJhdGNoIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZUNvdW50PTAsdGhpcy5hdGxhc01hbmFnZXIuc3RhcnRCYXRjaCgpfSwic3RhcnRCYXRjaCIpfSx7a2V5OiJlbmRGcmFtZSIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuZW5kQmF0Y2goKX0sImVuZEZyYW1lIil9LHtrZXk6ImdldFRlbXBNYXRyaXgiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wTWF0cml4PXRoaXMudGVtcE1hdHJpeHx8WmIoKX0sImdldFRlbXBNYXRyaXgiKX0se2tleToiZHJhd1RleHR1cmUiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXRoaXMuYXRsYXNNYW5hZ2VyO2lmKGEuaXNSZW5kZXJhYmxlKHIsaSkpe2EuY2FuQWRkVG9DdXJyZW50QmF0Y2gocixpKXx8dGhpcy5lbmRCYXRjaCgpO3ZhciBzPXRoaXMuaW5zdGFuY2VDb3VudDt0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcocylbMF09eUI7dmFyIGw9dGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KHMpO182KG4sbCk7dmFyIHU9YS5nZXRBdGxhc0luZm8ocixpLHUpLGg9dS5hdGxhc0lELGY9dS50ZXgxLGQ9dS50ZXgyLHA9dGhpcy5hdGxhc0lkQnVmZmVyLmdldFZpZXcocyk7cFswXT1oO3ZhciBtPXRoaXMudGV4MUJ1ZmZlci5nZXRWaWV3KHMpO21bMF09Zi54LG1bMV09Zi55LG1bMl09Zi53LG1bM109Zi5oO3ZhciBnPXRoaXMudGV4MkJ1ZmZlci5nZXRWaWV3KHMpO2dbMF09ZC54LGdbMV09ZC55LGdbMl09ZC53LGdbM109ZC5oO2Zvcih2YXIgeT10aGlzLmdldFRlbXBNYXRyaXgoKSx2PTAseD1bMSwyXTt2PHgubGVuZ3RoO3YrKyl7dmFyIGI9eFt2XTthLnNldFRyYW5zZm9ybU1hdHJpeCh5LHUscixiPT09MSk7dmFyIFQ9dGhpc1sic2NhbGVSb3RhdGUiLmNvbmNhdChiLCJCdWZmZXIiKV0uZ2V0VmlldyhzKTtUWzBdPXlbMF0sVFsxXT15WzFdLFRbMl09eVszXSxUWzNdPXlbNF07dmFyIFM9dGhpc1sidHJhbnNsYXRlIi5jb25jYXQoYiwiQnVmZmVyIildLmdldFZpZXcocyk7U1swXT15WzZdLFNbMV09eVs3XX10aGlzLmluc3RhbmNlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9fSwiZHJhd1RleHR1cmUiKX0se2tleToiZHJhd0VkZ2VBcnJvdyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5fcHJpdmF0ZS5yc2NyYXRjaCxzLGwsdTtpZihpPT09InNvdXJjZSI/KHM9YS5hcnJvd1N0YXJ0WCxsPWEuYXJyb3dTdGFydFksdT1hLnNyY0Fycm93QW5nbGUpOihzPWEuYXJyb3dFbmRYLGw9YS5hcnJvd0VuZFksdT1hLnRndEFycm93QW5nbGUpLCEoaXNOYU4ocyl8fHM9PW51bGx8fGlzTmFOKGwpfHxsPT1udWxsfHxpc05hTih1KXx8dT09bnVsbCkpe3ZhciBoPXIucHN0eWxlKGkrIi1hcnJvdy1zaGFwZSIpLnZhbHVlO2lmKGghPT0ibm9uZSIpe3ZhciBmPXIucHN0eWxlKGkrIi1hcnJvdy1jb2xvciIpLnZhbHVlLGQ9ci5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZSxwPXIucHN0eWxlKCJsaW5lLW9wYWNpdHkiKS52YWx1ZSxtPWQqcCxnPXIucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseT1yLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSx2PXRoaXMuci5nZXRBcnJvd1dpZHRoKGcseSkseD10aGlzLmdldFRlbXBNYXRyaXgoKTtCMWUoeCksajYoeCx4LFtzLGxdKSxzRih4LHgsW3Ysdl0pLEYxZSh4LHgsdSk7dmFyIGI9dGhpcy5pbnN0YW5jZUNvdW50O3RoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhiKVswXT12Qjt2YXIgVD10aGlzLmluZGV4QnVmZmVyLmdldFZpZXcoYik7XzYobixUKTt2YXIgUz10aGlzLmVkZ2VDb2xvckJ1ZmZlci5nZXRWaWV3KGIpO0E2KGYsbSxTKTt2YXIgdz10aGlzLnNjYWxlUm90YXRlMUJ1ZmZlci5nZXRWaWV3KGIpO3dbMF09eFswXSx3WzFdPXhbMV0sd1syXT14WzNdLHdbM109eFs0XTt2YXIgRT10aGlzLnRyYW5zbGF0ZTFCdWZmZXIuZ2V0VmlldyhiKTtFWzBdPXhbNl0sRVsxXT14WzddLHRoaXMuaW5zdGFuY2VDb3VudCsrLHRoaXMuaW5zdGFuY2VDb3VudD49dGhpcy5tYXhJbnN0YW5jZXMmJnRoaXMuZW5kQmF0Y2goKX19fSwiZHJhd0VkZ2VBcnJvdyIpfSx7a2V5OiJkcmF3RWRnZUxpbmUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT1yLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlLGE9ci5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlLHM9ci5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxsPXIucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWUsdT1pKmEsaD10aGlzLmdldEVkZ2VQb2ludHMocik7aWYoaC5sZW5ndGgvMit0aGlzLmluc3RhbmNlQ291bnQ+dGhpcy5tYXhJbnN0YW5jZXMmJnRoaXMuZW5kQmF0Y2goKSxoLmxlbmd0aD09NCl7dmFyIGY9dGhpcy5pbnN0YW5jZUNvdW50O3RoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhmKVswXT1abWU7dmFyIGQ9dGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KGYpO182KG4sZCk7dmFyIHA9dGhpcy5lZGdlQ29sb3JCdWZmZXIuZ2V0VmlldyhmKTtBNihsLHUscCk7dmFyIG09dGhpcy5saW5lV2lkdGhCdWZmZXIuZ2V0VmlldyhmKTttWzBdPXM7dmFyIGc9dGhpcy5wb2ludEFQb2ludEJCdWZmZXIuZ2V0VmlldyhmKTtnWzBdPWhbMF0sZ1sxXT1oWzFdLGdbMl09aFsyXSxnWzNdPWhbM10sdGhpcy5pbnN0YW5jZUNvdW50KyssdGhpcy5pbnN0YW5jZUNvdW50Pj10aGlzLm1heEluc3RhbmNlcyYmdGhpcy5lbmRCYXRjaCgpfWVsc2UgZm9yKHZhciB5PTA7eTxoLmxlbmd0aC0yO3krPTIpe3ZhciB2PXRoaXMuaW5zdGFuY2VDb3VudDt0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcodilbMF09Sm1lO3ZhciB4PXRoaXMuaW5kZXhCdWZmZXIuZ2V0Vmlldyh2KTtfNihuLHgpO3ZhciBiPXRoaXMuZWRnZUNvbG9yQnVmZmVyLmdldFZpZXcodik7QTYobCx1LGIpO3ZhciBUPXRoaXMubGluZVdpZHRoQnVmZmVyLmdldFZpZXcodik7VFswXT1zO3ZhciBTPWhbeS0yXSx3PWhbeS0xXSxFPWhbeV0sXz1oW3krMV0sQz1oW3krMl0sRD1oW3krM10sTz1oW3krNF0sUj1oW3krNV07eT09MCYmKFM9MipFLUMrLjAwMSx3PTIqXy1EKy4wMDEpLHk9PWgubGVuZ3RoLTQmJihPPTIqQy1FKy4wMDEsUj0yKkQtXysuMDAxKTt2YXIgaz10aGlzLnBvaW50QVBvaW50QkJ1ZmZlci5nZXRWaWV3KHYpO2tbMF09UyxrWzFdPXcsa1syXT1FLGtbM109Xzt2YXIgTD10aGlzLnBvaW50Q1BvaW50REJ1ZmZlci5nZXRWaWV3KHYpO0xbMF09QyxMWzFdPUQsTFsyXT1PLExbM109Uix0aGlzLmluc3RhbmNlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9fSwiZHJhd0VkZ2VMaW5lIil9LHtrZXk6ImdldEVkZ2VQb2ludHMiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5fcHJpdmF0ZS5yc2NyYXRjaCxpPW4uYWxscHRzO2lmKGkubGVuZ3RoPT00KXJldHVybiBpO3ZhciBhPXRoaXMuZ2V0TnVtU2VnbWVudHMocik7cmV0dXJuIHRoaXMuZ2V0Q3VydmVTZWdtZW50UG9pbnRzKGksYSl9LCJnZXRFZGdlUG9pbnRzIil9LHtrZXk6ImdldE51bVNlZ21lbnRzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPTE1O3JldHVybiBNYXRoLm1pbihNYXRoLm1heChuLDUpLHRoaXMubWF4SW5zdGFuY2VzKX0sImdldE51bVNlZ21lbnRzIil9LHtrZXk6ImdldEN1cnZlU2VnbWVudFBvaW50cyIsdmFsdWU6byhmdW5jdGlvbihyLG4pe2lmKHIubGVuZ3RoPT00KXJldHVybiByO2Zvcih2YXIgaT1BcnJheSgobisxKSoyKSxhPTA7YTw9bjthKyspaWYoYT09MClpWzBdPXJbMF0saVsxXT1yWzFdO2Vsc2UgaWYoYT09bilpW2EqMl09cltyLmxlbmd0aC0yXSxpW2EqMisxXT1yW3IubGVuZ3RoLTFdO2Vsc2V7dmFyIHM9YS9uO3RoaXMuc2V0Q3VydmVQb2ludChyLHMsaSxhKjIpfXJldHVybiBpfSwiZ2V0Q3VydmVTZWdtZW50UG9pbnRzIil9LHtrZXk6InNldEN1cnZlUG9pbnQiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGksYSl7aWYoci5sZW5ndGg8PTIpaVthXT1yWzBdLGlbYSsxXT1yWzFdO2Vsc2V7Zm9yKHZhciBzPUFycmF5KHIubGVuZ3RoLTIpLGw9MDtsPHMubGVuZ3RoO2wrPTIpe3ZhciB1PSgxLW4pKnJbbF0rbipyW2wrMl0saD0oMS1uKSpyW2wrMV0rbipyW2wrM107c1tsXT11LHNbbCsxXT1ofXJldHVybiB0aGlzLnNldEN1cnZlUG9pbnQocyxuLGksYSl9fSwic2V0Q3VydmVQb2ludCIpfSx7a2V5OiJlbmRCYXRjaCIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXMuZ2wsbj10aGlzLnZhbyxpPXRoaXMudmVydGV4Q291bnQsYT10aGlzLmluc3RhbmNlQ291bnQ7aWYoYSE9PTApe3ZhciBzPXRoaXMucmVuZGVyVGFyZ2V0LnBpY2tpbmc/dGhpcy5waWNraW5nUHJvZ3JhbTp0aGlzLnByb2dyYW07ci51c2VQcm9ncmFtKHMpLHIuYmluZFZlcnRleEFycmF5KG4pO3ZhciBsPXZvKHRoaXMuYnVmZmVycyksdTt0cnl7Zm9yKGwucygpOyEodT1sLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aC5idWZmZXJTdWJEYXRhKGEpfX1jYXRjaChnKXtsLmUoZyl9ZmluYWxseXtsLmYoKX1mb3IodmFyIGY9dGhpcy5hdGxhc01hbmFnZXIuZ2V0QXRsYXNlcygpLGQ9MDtkPGYubGVuZ3RoO2QrKylmW2RdLmJ1ZmZlcklmTmVlZGVkKHIpO2Zvcih2YXIgcD0wO3A8Zi5sZW5ndGg7cCsrKXIuYWN0aXZlVGV4dHVyZShyLlRFWFRVUkUwK3ApLHIuYmluZFRleHR1cmUoci5URVhUVVJFXzJELGZbcF0udGV4dHVyZSksci51bmlmb3JtMWkocy51VGV4dHVyZXNbcF0scCk7ci51bmlmb3JtTWF0cml4M2Z2KHMudVBhblpvb21NYXRyaXgsITEsdGhpcy5wYW5ab29tTWF0cml4KSxyLnVuaWZvcm0xaShzLnVBdGxhc1NpemUsdGhpcy5hdGxhc01hbmFnZXIuYXRsYXNTaXplKTt2YXIgbT1BNih0aGlzLmJnQ29sb3IsMSk7ci51bmlmb3JtNGZ2KHMudUJHQ29sb3IsbSksci5kcmF3QXJyYXlzSW5zdGFuY2VkKHIuVFJJQU5HTEVTLDAsaSxhKSxyLmJpbmRWZXJ0ZXhBcnJheShudWxsKSxyLmJpbmRUZXh0dXJlKHIuVEVYVFVSRV8yRCxudWxsKSx0aGlzLmRlYnVnSW5mbyYmdGhpcy5kZWJ1Z0luZm8ucHVzaCh7Y291bnQ6YSxhdGxhc0NvdW50OmYubGVuZ3RofSksdGhpcy5zdGFydEJhdGNoKCl9fSwiZW5kQmF0Y2giKX0se2tleToiZ2V0RGVidWdJbmZvIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVidWdJbmZvfSwiZ2V0RGVidWdJbmZvIil9LHtrZXk6ImdldEF0bGFzRGVidWdJbmZvIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXRsYXNNYW5hZ2VyLmdldERlYnVnSW5mbygpfSwiZ2V0QXRsYXNEZWJ1Z0luZm8iKX1dKSx0fSgpO28oZWdlLCJmaWxsU3R5bGUiKTtZSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe1ZmKHRoaXMsdCksdGhpcy5yPWV9cmV0dXJuIG8odCwiT3ZlcmxheVVuZGVybGF5UmVuZGVyZXIiKSxVZih0LFt7a2V5OiJnZXRTdHlsZUtleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0U3R5bGUocixuKSxhPWkuc2hhcGUscz1pLm9wYWNpdHksbD1pLmNvbG9yO2lmKCFhKXJldHVybiBudWxsO3ZhciB1PW4ud2lkdGgoKSxoPW4uaGVpZ2h0KCksZj1lZ2UobCxzKTtyZXR1cm4gQmYoIiIuY29uY2F0KGEsIi0iKS5jb25jYXQodSwiLSIpLmNvbmNhdChoLCItIikuY29uY2F0KGYpKX0sImdldFN0eWxlS2V5Iil9LHtrZXk6ImlzVmlzaWJsZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPW4ucHN0eWxlKCIiLmNvbmNhdChyLCItb3BhY2l0eSIpKS52YWx1ZTtyZXR1cm4gaT4wfSwiaXNWaXNpYmxlIil9LHtrZXk6ImdldFN0eWxlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9bi5wc3R5bGUoIiIuY29uY2F0KHIsIi1vcGFjaXR5IikpLnZhbHVlLGE9bi5wc3R5bGUoIiIuY29uY2F0KHIsIi1jb2xvciIpKS52YWx1ZSxzPW4ucHN0eWxlKCIiLmNvbmNhdChyLCItc2hhcGUiKSkudmFsdWU7cmV0dXJue29wYWNpdHk6aSxjb2xvcjphLHNoYXBlOnN9fSwiZ2V0U3R5bGUiKX0se2tleToiZ2V0UGFkZGluZyIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiBuLnBzdHlsZSgiIi5jb25jYXQociwiLXBhZGRpbmciKSkucGZWYWx1ZX0sImdldFBhZGRpbmciKX0se2tleToiZHJhdyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSxhKXtpZih0aGlzLmlzVmlzaWJsZShyLGkpKXt2YXIgcz10aGlzLnIsbD1hLncsdT1hLmgsaD1sLzIsZj11LzIsZD10aGlzLmdldFN0eWxlKHIsaSkscD1kLnNoYXBlLG09ZC5jb2xvcixnPWQub3BhY2l0eTtuLnNhdmUoKSxuLmZpbGxTdHlsZT1lZ2UobSxnKSxwPT09InJvdW5kLXJlY3RhbmdsZSJ8fHA9PT0icm91bmRyZWN0YW5nbGUiP3MuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aChuLGgsZixsLHUsImF1dG8iKTpwPT09ImVsbGlwc2UiJiZzLmRyYXdFbGxpcHNlUGF0aChuLGgsZixsLHUpLG4uZmlsbCgpLG4ucmVzdG9yZSgpfX0sImRyYXciKX1dKSx0fSgpO28oWEplLCJnZXRCR0NvbG9yIik7JDFlPXt9OyQxZS5pbml0V2ViZ2w9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5kYXRhLmNvbnRleHRzW3IuV0VCR0xdLGk9dC5jeS5jb250YWluZXIoKTt0LmJnQ29sb3I9WEplKGkpLHQud2ViZ2xUZXhTaXplPU1hdGgubWluKHQud2ViZ2xUZXhTaXplLG4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSkpLHQud2ViZ2xUZXhSb3dzPU1hdGgubWluKHQud2ViZ2xUZXhSb3dzLDU0KSx0LndlYmdsQmF0Y2hTaXplPU1hdGgubWluKHQud2ViZ2xCYXRjaFNpemUsMTYzODQpLHQud2ViZ2xUZXhQZXJCYXRjaD1NYXRoLm1pbih0LndlYmdsVGV4UGVyQmF0Y2gsbi5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUykpLHIud2ViZ2xEZWJ1Zz10LndlYmdsRGVidWcsci53ZWJnbERlYnVnU2hvd0F0bGFzZXM9dC53ZWJnbERlYnVnU2hvd0F0bGFzZXMsY29uc29sZS5sb2coIm1heCB0ZXh0dXJlIHVuaXRzIixuLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSksY29uc29sZS5sb2coIm1heCB0ZXh0dXJlIHNpemUiLG4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSkpLGNvbnNvbGUubG9nKCJ3ZWJnbCBvcHRpb25zIix0KSxyLnBpY2tpbmdGcmFtZUJ1ZmZlcj0kSmUobiksci5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSEwO3ZhciBhPW8oZnVuY3Rpb24oZil7cmV0dXJuIHIuZ2V0VGV4dEFuZ2xlKGYsbnVsbCl9LCJnZXRMYWJlbFJvdGF0aW9uIikscz1vKGZ1bmN0aW9uKGYpe3ZhciBkPWYucHN0eWxlKCJsYWJlbCIpO3JldHVybiBkJiZkLnZhbHVlfSwiaXNMYWJlbFZpc2libGUiKTtyLmVsZURyYXdpbmc9bmV3IHFKZShyLG4sdCk7dmFyIGw9bmV3IFlKZShyKTtyLmVsZURyYXdpbmcuYWRkVGV4dHVyZVJlbmRlclR5cGUoIm5vZGUtYm9keSIsSGIoe2dldEtleTplLmdldFN0eWxlS2V5LGdldEJvdW5kaW5nQm94OmUuZ2V0RWxlbWVudEJveCxkcmF3RWxlbWVudDplLmRyYXdFbGVtZW50LGlzVmlzaWJsZTpvKGZ1bmN0aW9uKGYpe3JldHVybiBmLnZpc2libGUoKX0sImlzVmlzaWJsZSIpfSkpLHIuZWxlRHJhd2luZy5hZGRUZXh0dXJlUmVuZGVyVHlwZSgibm9kZS1sYWJlbCIsSGIoe2dldEtleTplLmdldExhYmVsS2V5LGdldEJvdW5kaW5nQm94OmUuZ2V0TGFiZWxCb3gsZHJhd0VsZW1lbnQ6ZS5kcmF3TGFiZWwsZ2V0Um90YXRpb246YSxnZXRSb3RhdGlvblBvaW50OmUuZ2V0TGFiZWxSb3RhdGlvblBvaW50LGdldFJvdGF0aW9uT2Zmc2V0OmUuZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCxpc1Zpc2libGU6c30pKSxyLmVsZURyYXdpbmcuYWRkVGV4dHVyZVJlbmRlclR5cGUoIm5vZGUtb3ZlcmxheSIsSGIoe2dldEJvdW5kaW5nQm94OmUuZ2V0RWxlbWVudEJveCxnZXRLZXk6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5nZXRTdHlsZUtleSgib3ZlcmxheSIsZil9LCJnZXRLZXkiKSxkcmF3RWxlbWVudDpvKGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gbC5kcmF3KCJvdmVybGF5IixmLGQscCl9LCJkcmF3RWxlbWVudCIpLGlzVmlzaWJsZTpvKGZ1bmN0aW9uKGYpe3JldHVybiBsLmlzVmlzaWJsZSgib3ZlcmxheSIsZil9LCJpc1Zpc2libGUiKSxnZXRQYWRkaW5nOm8oZnVuY3Rpb24oZil7cmV0dXJuIGwuZ2V0UGFkZGluZygib3ZlcmxheSIsZil9LCJnZXRQYWRkaW5nIil9KSksci5lbGVEcmF3aW5nLmFkZFRleHR1cmVSZW5kZXJUeXBlKCJub2RlLXVuZGVybGF5IixIYih7Z2V0Qm91bmRpbmdCb3g6ZS5nZXRFbGVtZW50Qm94LGdldEtleTpvKGZ1bmN0aW9uKGYpe3JldHVybiBsLmdldFN0eWxlS2V5KCJ1bmRlcmxheSIsZil9LCJnZXRLZXkiKSxkcmF3RWxlbWVudDpvKGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gbC5kcmF3KCJ1bmRlcmxheSIsZixkLHApfSwiZHJhd0VsZW1lbnQiKSxpc1Zpc2libGU6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5pc1Zpc2libGUoInVuZGVybGF5IixmKX0sImlzVmlzaWJsZSIpLGdldFBhZGRpbmc6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5nZXRQYWRkaW5nKCJ1bmRlcmxheSIsZil9LCJnZXRQYWRkaW5nIil9KSksci5lbGVEcmF3aW5nLmFkZFRleHR1cmVSZW5kZXJUeXBlKCJlZGdlLWxhYmVsIixIYih7Z2V0S2V5OmUuZ2V0TGFiZWxLZXksZ2V0Qm91bmRpbmdCb3g6ZS5nZXRMYWJlbEJveCxkcmF3RWxlbWVudDplLmRyYXdMYWJlbCxnZXRSb3RhdGlvbjphLGdldFJvdGF0aW9uUG9pbnQ6ZS5nZXRMYWJlbFJvdGF0aW9uUG9pbnQsZ2V0Um90YXRpb25PZmZzZXQ6ZS5nZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LGlzVmlzaWJsZTpzfSkpO3ZhciB1PXA0KGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coImdhcmJhZ2UgY29sbGVjdCBmbGFnIHNldCIpLHIuZGF0YS5nYz0hMH0sMWU0KTtyLm9uVXBkYXRlRWxlQ2FsY3MoZnVuY3Rpb24oaCxmKXt2YXIgZD0hMTtmJiZmLmxlbmd0aD4wJiYoZHw9ci5lbGVEcmF3aW5nLmludmFsaWRhdGUoZikpLGQmJnUoKX0pLGpKZShyKX07byhqSmUsIm92ZXJyaWRlQ2FudmFzUmVuZGVyZXJGdW5jdGlvbnMiKTtvKEtKZSwiY2xlYXJXZWJnbCIpO28oUUplLCJjbGVhckNhbnZhcyIpO28oWkplLCJjcmVhdGVQYW5ab29tTWF0cml4Iik7byh6MWUsInNldENvbnRleHRUcmFuc2Zvcm0iKTtvKEpKZSwiZHJhd1NlbGVjdGlvblJlY3RhbmdsZSIpO28oZWV0LCJkcmF3QXhlcyIpO28odGV0LCJkcmF3QXRsYXNlcyIpO28ocmV0LCJnZXRQaWNraW5nSW5kZXhlcyIpO28obmV0LCJmaW5kTmVhcmVzdEVsZW1lbnRzV2ViZ2wiKTtvKEcxZSwicmVuZGVyV2ViZ2wiKTtXZj17fTtXZi5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMjt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlK3MqYVswXSxyK2wqYVsxXSk7Zm9yKHZhciB1PTE7dTxhLmxlbmd0aC8yO3UrKyl0LmxpbmVUbyhlK3MqYVt1KjJdLHIrbCphW3UqMisxXSk7dC5jbG9zZVBhdGgoKX07V2YuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEscyl7cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe3JldHVybiBUMWUodCxsKX0pLHQuY2xvc2VQYXRoKCl9O1dmLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMix1PWE9PT0iYXV0byI/WnAobixpKTpNYXRoLm1pbihhLGwscyk7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQuYXJjVG8oZStzLHItbCxlK3Mscix1KSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQuYXJjVG8oZS1zLHItbCxlLHItbCx1KSx0LmxpbmVUbyhlLHItbCksdC5jbG9zZVBhdGgoKX07V2YuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9bi8yLGw9aS8yLHU9YT09PSJhdXRvIj9acChuLGkpOmE7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQubGluZVRvKGUrcyxyLWwpLHQubGluZVRvKGUrcyxyKSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQubGluZVRvKGUtcyxyLWwpLHQubGluZVRvKGUsci1sKSx0LmNsb3NlUGF0aCgpfTtXZi5kcmF3Q3V0UmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSxzKXt2YXIgbD1uLzIsdT1pLzIsaD1zPT09ImF1dG8iP0hCKCk6czt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLWwraCxyLXUpLHQubGluZVRvKGUrbC1oLHItdSksdC5saW5lVG8oZStsLHItdStoKSx0LmxpbmVUbyhlK2wscit1LWgpLHQubGluZVRvKGUrbC1oLHIrdSksdC5saW5lVG8oZS1sK2gscit1KSx0LmxpbmVUbyhlLWwscit1LWgpLHQubGluZVRvKGUtbCxyLXUraCksdC5jbG9zZVBhdGgoKX07V2YuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uLzIscz1pLzIsbD1lLWEsdT1lK2EsaD1yLXMsZj1yK3MsZD1UQihuLGkpLHA9ZC53aWR0aE9mZnNldCxtPWQuaGVpZ2h0T2Zmc2V0LGc9ZC5jdHJsUHRPZmZzZXRQY3QqcDt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhsLGgrbSksdC5saW5lVG8obCxmLW0pLHQucXVhZHJhdGljQ3VydmVUbyhsK2csZixsK3AsZiksdC5saW5lVG8odS1wLGYpLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsZix1LGYtbSksdC5saW5lVG8odSxoK20pLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsaCx1LXAsaCksdC5saW5lVG8obCtwLGgpLHQucXVhZHJhdGljQ3VydmVUbyhsK2csaCxsLGgrbSksdC5jbG9zZVBhdGgoKX07dGdlPU1hdGguc2luKDApLHJnZT1NYXRoLmNvcygwKSxNQj17fSxJQj17fSxWMWU9TWF0aC5QSS80MDtmb3IoSHA9MCpNYXRoLlBJO0hwPDIqTWF0aC5QSTtIcCs9VjFlKU1CW0hwXT1NYXRoLnNpbihIcCksSUJbSHBdPU1hdGguY29zKEhwKTtXZi5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0LmVsbGlwc2UpdC5lbGxpcHNlKGUscixuLzIsaS8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBhLHMsbD1uLzIsdT1pLzIsaD0wKk1hdGguUEk7aDwyKk1hdGguUEk7aCs9VjFlKWE9ZS1sKk1CW2hdKnRnZStsKklCW2hdKnJnZSxzPXIrdSpJQltoXSp0Z2UrdSpNQltoXSpyZ2UsaD09PTA/dC5tb3ZlVG8oYSxzKTp0LmxpbmVUbyhhLHMpO3QuY2xvc2VQYXRoKCl9O2I0PXt9O2I0LmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxbcixyLmdldENvbnRleHQoIjJkIildfTtiNC5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN5LHI9ZS5tdXRhYmxlRWxlbWVudHMoKSxuPXIuYm91bmRpbmdCb3goKSxpPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGE9dC5mdWxsP01hdGguY2VpbChuLncpOmlbMl0scz10LmZ1bGw/TWF0aC5jZWlsKG4uaCk6aVszXSxsPV90KHQubWF4V2lkdGgpfHxfdCh0Lm1heEhlaWdodCksdT10aGlzLmdldFBpeGVsUmF0aW8oKSxoPTE7aWYodC5zY2FsZSE9PXZvaWQgMClhKj10LnNjYWxlLHMqPXQuc2NhbGUsaD10LnNjYWxlO2Vsc2UgaWYobCl7dmFyIGY9MS8wLGQ9MS8wO190KHQubWF4V2lkdGgpJiYoZj1oKnQubWF4V2lkdGgvYSksX3QodC5tYXhIZWlnaHQpJiYoZD1oKnQubWF4SGVpZ2h0L3MpLGg9TWF0aC5taW4oZixkKSxhKj1oLHMqPWh9bHx8KGEqPXUscyo9dSxoKj11KTt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtwLndpZHRoPWEscC5oZWlnaHQ9cyxwLnN0eWxlLndpZHRoPWErInB4IixwLnN0eWxlLmhlaWdodD1zKyJweCI7dmFyIG09cC5nZXRDb250ZXh0KCIyZCIpO2lmKGE+MCYmcz4wKXttLmNsZWFyUmVjdCgwLDAsYSxzKSxtLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBnPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtpZih0LmZ1bGwpbS50cmFuc2xhdGUoLW4ueDEqaCwtbi55MSpoKSxtLnNjYWxlKGgsaCksdGhpcy5kcmF3RWxlbWVudHMobSxnKSxtLnNjYWxlKDEvaCwxL2gpLG0udHJhbnNsYXRlKG4ueDEqaCxuLnkxKmgpO2Vsc2V7dmFyIHk9ZS5wYW4oKSx2PXt4OnkueCpoLHk6eS55Kmh9O2gqPWUuem9vbSgpLG0udHJhbnNsYXRlKHYueCx2LnkpLG0uc2NhbGUoaCxoKSx0aGlzLmRyYXdFbGVtZW50cyhtLGcpLG0uc2NhbGUoMS9oLDEvaCksbS50cmFuc2xhdGUoLXYueCwtdi55KX10LmJnJiYobS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLG0uZmlsbFN0eWxlPXQuYmcsbS5yZWN0KDAsMCxhLHMpLG0uZmlsbCgpKX1yZXR1cm4gcH07byhpZXQsImI2NFRvQmxvYiIpO28obmdlLCJiNjRVcmlUb0I2NCIpO28oVTFlLCJvdXRwdXQiKTtiNC5wbmc9ZnVuY3Rpb24odCl7cmV0dXJuIFUxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL3BuZyIpfTtiNC5qcGc9ZnVuY3Rpb24odCl7cmV0dXJuIFUxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL2pwZWciKX07SDFlPXt9O0gxZS5ub2RlU2hhcGVJbXBsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7c3dpdGNoKHQpe2Nhc2UiZWxsaXBzZSI6cmV0dXJuIHRoaXMuZHJhd0VsbGlwc2VQYXRoKGUscixuLGksYSk7Y2FzZSJwb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3UG9seWdvblBhdGgoZSxyLG4saSxhLHMpO2Nhc2Uicm91bmQtcG9seWdvbiI6cmV0dXJuIHRoaXMuZHJhd1JvdW5kUG9seWdvblBhdGgoZSxyLG4saSxhLHMsbCk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZSxyLG4saSxhLGwpO2Nhc2UiY3V0cmVjdGFuZ2xlIjpjYXNlImN1dC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGUscixuLGksYSxzLGwpO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChlLHIsbixpLGEsbCk7Y2FzZSJiYXJyZWwiOnJldHVybiB0aGlzLmRyYXdCYXJyZWxQYXRoKGUscixuLGksYSl9fTthZXQ9VzFlLFNyPVcxZS5wcm90b3R5cGU7U3IuQ0FOVkFTX0xBWUVSUz0zO1NyLlNFTEVDVF9CT1g9MDtTci5EUkFHPTE7U3IuTk9ERT0yO1NyLldFQkdMPTM7U3IuQ0FOVkFTX1RZUEVTPVsiMmQiLCIyZCIsIjJkIiwid2ViZ2wyIl07U3IuQlVGRkVSX0NPVU5UPTM7U3IuVEVYVFVSRV9CVUZGRVI9MDtTci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFPTE7U3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBRz0yO28oVzFlLCJDYW52YXNSZW5kZXJlciIpO1NyLnJlZHJhd0hpbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3N3aXRjaCh0KXtjYXNlImVsZXMiOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tTci5OT0RFXT1lO2JyZWFrO2Nhc2UiZHJhZyI6ci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W1NyLkRSQUddPWU7YnJlYWs7Y2FzZSJzZWxlY3QiOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tTci5TRUxFQ1RfQk9YXT1lO2JyZWFrO2Nhc2UiZ2MiOnIuZGF0YS5nYz0hMDticmVha319O3NldD10eXBlb2YgUGF0aDJEPCJ1IjtTci5wYXRoMmRFbmFibGVkPWZ1bmN0aW9uKHQpe2lmKHQ9PT12b2lkIDApcmV0dXJuIHRoaXMucGF0aHNFbmFibGVkO3RoaXMucGF0aHNFbmFibGVkPSEhdH07U3IudXNlUGF0aHM9ZnVuY3Rpb24oKXtyZXR1cm4gc2V0JiZ0aGlzLnBhdGhzRW5hYmxlZH07U3Iuc2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHQsZSl7dC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ZToodC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSx0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZD1lLHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSl9O1NyLmdldEltZ1Ntb290aGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ6dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWR8fHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkfTtTci5tYWtlT2Zmc2NyZWVuQ2FudmFzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoKHR5cGVvZiBPZmZzY3JlZW5DYW52YXM+InUiPyJ1bmRlZmluZWQiOnFpKE9mZnNjcmVlbkNhbnZhcykpIT09InVuZGVmaW5lZCIpcj1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsZSk7ZWxzZXt2YXIgbj10aGlzLmN5LndpbmRvdygpLGk9bi5kb2N1bWVudDtyPWkuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksci53aWR0aD10LHIuaGVpZ2h0PWV9cmV0dXJuIHJ9O1tOMWUsdHUsb2gsaUYsbjAscHksd3MsJDFlLFdmLGI0LEgxZV0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihTcix0KX0pO29ldD1be25hbWU6Im51bGwiLGltcGw6djFlfSx7bmFtZToiYmFzZSIsaW1wbDpfMWV9LHtuYW1lOiJjYW52YXMiLGltcGw6YWV0fV0sY2V0PVt7dHlwZToibGF5b3V0IixleHRlbnNpb25zOkhaZX0se3R5cGU6InJlbmRlcmVyIixleHRlbnNpb25zOm9ldH1dLHExZT17fSxZMWU9e307byhYMWUsInNldEV4dGVuc2lvbiIpO28oajFlLCJnZXRFeHRlbnNpb24iKTtvKHVldCwic2V0TW9kdWxlIik7byhoZXQsImdldE1vZHVsZSIpO09CPW8oZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MilyZXR1cm4gajFlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09MylyZXR1cm4gWDFlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09NClyZXR1cm4gaGV0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09NSlyZXR1cm4gdWV0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtvaSgiSW52YWxpZCBleHRlbnNpb24gYWNjZXNzIHN5bnRheCIpfSwiZXh0ZW5zaW9uIik7dTQucHJvdG90eXBlLmV4dGVuc2lvbj1PQjtjZXQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtYMWUodC50eXBlLGUubmFtZSxlLmltcGwpfSl9KTtLMWU9byhmdW5jdGlvbiB0KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0O3RoaXMubGVuZ3RoPTB9LCJTdHlsZXNoZWV0IiksdDA9SzFlLnByb3RvdHlwZTt0MC5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZXNoZWV0In07dDAuc2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGgrKztyZXR1cm4gdGhpc1tlXT17c2VsZWN0b3I6dCxwcm9wZXJ0aWVzOltdfSx0aGlzfTt0MC5jc3M9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC0xO2lmKFp0KHQpKXRoaXNbcl0ucHJvcGVydGllcy5wdXNoKHtuYW1lOnQsdmFsdWU6ZX0pO2Vsc2UgaWYoVXIodCkpZm9yKHZhciBuPXQsaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1uW3NdO2lmKGwhPW51bGwpe3ZhciB1PVVhLnByb3BlcnRpZXNbc118fFVhLnByb3BlcnRpZXNbSzYocyldO2lmKHUhPW51bGwpe3ZhciBoPXUubmFtZSxmPWw7dGhpc1tyXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6aCx2YWx1ZTpmfSl9fX1yZXR1cm4gdGhpc307dDAuc3R5bGU9dDAuY3NzO3QwLmdlbmVyYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVhKHQpO3JldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUoZSl9O3QwLmFwcGVuZFRvU3R5bGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV0sbj1yLnNlbGVjdG9yLGk9ci5wcm9wZXJ0aWVzO3Quc2VsZWN0b3Iobik7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07dC5jc3Mocy5uYW1lLHMudmFsdWUpfX1yZXR1cm4gdH07ZmV0PSIzLjMxLjAiLHNsPW8oZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMCYmKGU9e30pLFVyKGUpKXJldHVybiBuZXcgdTQoZSk7aWYoWnQoZSkpcmV0dXJuIE9CLmFwcGx5KE9CLGFyZ3VtZW50cyl9LCJjeXRvc2NhcGUiKTtzbC51c2U9ZnVuY3Rpb24odCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBlLnVuc2hpZnQoc2wpLHQuYXBwbHkobnVsbCxlKSx0aGlzfTtzbC53YXJuaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gVGdlKHQpfTtzbC52ZXJzaW9uPWZldDtzbC5zdHlsZXNoZWV0PXNsLlN0eWxlc2hlZXQ9SzFlfSk7dmFyIGNGPVBpKChUNCxsRik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBUND09Im9iamVjdCImJnR5cGVvZiBsRj09Im9iamVjdCI/bEYuZXhwb3J0cz1yKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10scik6dHlwZW9mIFQ0PT0ib2JqZWN0Ij9UNC5sYXlvdXRCYXNlPXIoKTplLmxheW91dEJhc2U9cigpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShUNCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4pe2lmKGVbbl0pcmV0dXJuIGVbbl0uZXhwb3J0czt2YXIgaT1lW25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxyKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBvKHIsIl9fd2VicGFja19yZXF1aXJlX18iKSxyLm09dCxyLmM9ZSxyLmk9ZnVuY3Rpb24obil7cmV0dXJuIG59LHIuZD1mdW5jdGlvbihuLGksYSl7ci5vKG4saSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDphfSl9LHIubj1mdW5jdGlvbihuKXt2YXIgaT1uJiZuLl9fZXNNb2R1bGU/byhmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9LCJnZXREZWZhdWx0Iik6byhmdW5jdGlvbigpe3JldHVybiBufSwiZ2V0TW9kdWxlRXhwb3J0cyIpO3JldHVybiByLmQoaSwiYSIsaSksaX0sci5vPWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpfSxyLnA9IiIscihyLnM9MjYpfShbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiTGF5b3V0Q29uc3RhbnRzIiksbi5RVUFMSVRZPTEsbi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsbi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLG4uREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLG4uREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCxuLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsbi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSxuLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSxuLlNJTVBMRV9OT0RFX1NJWkU9NDAsbi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9bi5TSU1QTEVfTk9ERV9TSVpFLzIsbi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsbi5NSU5fRURHRV9MRU5HVEg9MSxuLldPUkxEX0JPVU5EQVJZPTFlNixuLklOSVRJQUxfV09STERfQk9VTkRBUlk9bi5XT1JMRF9CT1VOREFSWS8xZTMsbi5XT1JMRF9DRU5URVJfWD0xMjAwLG4uV09STERfQ0VOVEVSX1k9OTAwLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDgpLGE9cig5KTtmdW5jdGlvbiBzKHUsaCxmKXtuLmNhbGwodGhpcyxmKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD0hMSx0aGlzLnZHcmFwaE9iamVjdD1mLHRoaXMuYmVuZHBvaW50cz1bXSx0aGlzLnNvdXJjZT11LHRoaXMudGFyZ2V0PWh9byhzLCJMRWRnZSIpLHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbCBpbiBuKXNbbF09bltsXTtzLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LHMucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0scy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxzLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHMucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0scy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LHMucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0scy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24odSl7aWYodGhpcy5zb3VyY2U9PT11KXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PXUpcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPXRoaXMuZ2V0T3RoZXJFbmQodSksZD1oLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihmLmdldE93bmVyKCk9PWgpcmV0dXJuIGY7aWYoZi5nZXRPd25lcigpPT1kKWJyZWFrO2Y9Zi5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdT1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9aS5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSx1KSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD11WzBdLXVbMl0sdGhpcy5sZW5ndGhZPXVbMV0tdVszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSl7dGhpcy52R3JhcGhPYmplY3Q9aX1vKG4sIkxHcmFwaE9iamVjdCIpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMTMpLHM9cigwKSxsPXIoMTYpLHU9cig0KTtmdW5jdGlvbiBoKGQscCxtLGcpe209PW51bGwmJmc9PW51bGwmJihnPXApLG4uY2FsbCh0aGlzLGcpLGQuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoZD1kLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWkuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PWcsdGhpcy5lZGdlcz1bXSx0aGlzLmdyYXBoTWFuYWdlcj1kLG0hPW51bGwmJnAhPW51bGw/dGhpcy5yZWN0PW5ldyBhKHAueCxwLnksbS53aWR0aCxtLmhlaWdodCk6dGhpcy5yZWN0PW5ldyBhfW8oaCwiTE5vZGUiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gbiloW2ZdPW5bZl07aC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30saC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0saC5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0saC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihkKXt0aGlzLnJlY3Qud2lkdGg9ZH0saC5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihkKXt0aGlzLnJlY3QuaGVpZ2h0PWR9LGgucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LGgucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0saC5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxoLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0saC5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0saC5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0saC5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQueCx0aGlzLnJlY3QueT1kLnksdGhpcy5yZWN0LndpZHRoPXAud2lkdGgsdGhpcy5yZWN0LmhlaWdodD1wLmhlaWdodH0saC5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT1wLXRoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54Kz1kLHRoaXMucmVjdC55Kz1wfSxoLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkudGFyZ2V0PT1kKXtpZih5LnNvdXJjZSE9Zyl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhIjtwLnB1c2goeSl9fSkscH0saC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoISh5LnNvdXJjZT09Z3x8eS50YXJnZXQ9PWcpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsoeS50YXJnZXQ9PWR8fHkuc291cmNlPT1kKSYmcC5wdXNoKHkpfSkscH0saC5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscD10aGlzO3JldHVybiBwLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obSl7aWYobS5zb3VyY2U9PXApZC5hZGQobS50YXJnZXQpO2Vsc2V7aWYobS50YXJnZXQhPXApdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO2QuYWRkKG0uc291cmNlKX19KSxkfSxoLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHAsbTtpZihkLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgZz10aGlzLmNoaWxkLmdldE5vZGVzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKXA9Z1t5XSxtPXAud2l0aENoaWxkcmVuKCksbS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2QuYWRkKHYpfSk7cmV0dXJuIGR9LGgucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPTAscDtpZih0aGlzLmNoaWxkPT1udWxsKWQ9MTtlbHNlIGZvcih2YXIgbT10aGlzLmNoaWxkLmdldE5vZGVzKCksZz0wO2c8bS5sZW5ndGg7ZysrKXA9bVtnXSxkKz1wLmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBkPT0wJiYoZD0xKSxkfSxoLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxoLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxoLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIGQscCxtPS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksZz1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7ZD1zLldPUkxEX0NFTlRFUl9YK2wubmV4dERvdWJsZSgpKihnLW0pK207dmFyIHk9LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSx2PXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtwPXMuV09STERfQ0VOVEVSX1krbC5uZXh0RG91YmxlKCkqKHYteSkreSx0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBkPXRoaXMuZ2V0Q2hpbGQoKTtpZihkLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9ZC5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9ZC5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIHA9ZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpLG09ZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aD5wJiYodGhpcy5yZWN0LngtPSh0aGlzLmxhYmVsV2lkdGgtcCkvMix0aGlzLnNldFdpZHRoKHRoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQ+bSYmKHRoaXMubGFiZWxQb3M9PSJjZW50ZXIiP3RoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1tKS8yOnRoaXMubGFiZWxQb3M9PSJ0b3AiJiYodGhpcy5yZWN0LnktPXRoaXMubGFiZWxIZWlnaHQtbSksdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCkpfX19LGgucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe2lmKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPT1pLk1BWF9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5pbmNsdXNpb25UcmVlRGVwdGh9LGgucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihkKXt2YXIgcD10aGlzLnJlY3QueDtwPnMuV09STERfQk9VTkRBUlk/cD1zLldPUkxEX0JPVU5EQVJZOnA8LXMuV09STERfQk9VTkRBUlkmJihwPS1zLldPUkxEX0JPVU5EQVJZKTt2YXIgbT10aGlzLnJlY3QueTttPnMuV09STERfQk9VTkRBUlk/bT1zLldPUkxEX0JPVU5EQVJZOm08LXMuV09STERfQk9VTkRBUlkmJihtPS1zLldPUkxEX0JPVU5EQVJZKTt2YXIgZz1uZXcgdShwLG0pLHk9ZC5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoZyk7dGhpcy5zZXRMb2NhdGlvbih5LngseS55KX0saC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueH0saC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnl9LGgucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0fSxoLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcj09bnVsbD9udWxsOnRoaXMub3duZXIuZ2V0UGFyZW50KCl9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXtpPT1udWxsJiZhPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6KHRoaXMueD1pLHRoaXMueT1hKX1vKG4sIlBvaW50RCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWkueCx0aGlzLnktaS55KX0sbi5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLngrPWkud2lkdGgsdGhpcy55Kz1pLmhlaWdodCx0aGlzfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDApLHM9cig2KSxsPXIoMyksdT1yKDEpLGg9cigxMyksZj1yKDEyKSxkPXIoMTEpO2Z1bmN0aW9uIHAoZyx5LHYpe24uY2FsbCh0aGlzLHYpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLm1hcmdpbj1hLkRFRkFVTFRfR1JBUEhfTUFSR0lOLHRoaXMuZWRnZXM9W10sdGhpcy5ub2Rlcz1bXSx0aGlzLmlzQ29ubmVjdGVkPSExLHRoaXMucGFyZW50PWcseSE9bnVsbCYmeSBpbnN0YW5jZW9mIHM/dGhpcy5ncmFwaE1hbmFnZXI9eTp5IT1udWxsJiZ5IGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9eS5ncmFwaE1hbmFnZXIpfW8ocCwiTEdyYXBoIikscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBtIGluIG4pcFttXT1uW21dO3AucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LHAucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxwLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdH0scC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodH0scC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9wfSxwLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b219LHAucHJvdG90eXBlLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWR9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHksdil7aWYoeT09bnVsbCYmdj09bnVsbCl7dmFyIHg9ZztpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeCk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHgub3duZXI9dGhpcyx0aGlzLmdldE5vZGVzKCkucHVzaCh4KSx4fWVsc2V7dmFyIGI9ZztpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHkpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih2KT4tMSkpdGhyb3ciU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghIjtpZighKHkub3duZXI9PXYub3duZXImJnkub3duZXI9PXRoaXMpKXRocm93IkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCEiO3JldHVybiB5Lm93bmVyIT12Lm93bmVyP251bGw6KGIuc291cmNlPXksYi50YXJnZXQ9dixiLmlzSW50ZXJHcmFwaD0hMSx0aGlzLmdldEVkZ2VzKCkucHVzaChiKSx5LmVkZ2VzLnB1c2goYiksdiE9eSYmdi5lZGdlcy5wdXNoKGIpLGIpfX0scC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGcpe3ZhciB5PWc7aWYoZyBpbnN0YW5jZW9mIGwpe2lmKHk9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoISh5Lm93bmVyIT1udWxsJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJPd25lciBncmFwaCBpcyBpbnZhbGlkISI7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkISI7Zm9yKHZhciB2PXkuZWRnZXMuc2xpY2UoKSx4LGI9di5sZW5ndGgsVD0wO1Q8YjtUKyspeD12W1RdLHguaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh4KTp4LnNvdXJjZS5vd25lci5yZW1vdmUoeCk7dmFyIFM9dGhpcy5ub2Rlcy5pbmRleE9mKHkpO2lmKFM9PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKFMsMSl9ZWxzZSBpZihnIGluc3RhbmNlb2YgdSl7dmFyIHg9ZztpZih4PT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2UhPW51bGwmJngudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh4LnNvdXJjZS5vd25lciE9bnVsbCYmeC50YXJnZXQub3duZXIhPW51bGwmJnguc291cmNlLm93bmVyPT10aGlzJiZ4LnRhcmdldC5vd25lcj09dGhpcykpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCEiO3ZhciB3PXguc291cmNlLmVkZ2VzLmluZGV4T2YoeCksRT14LnRhcmdldC5lZGdlcy5pbmRleE9mKHgpO2lmKCEodz4tMSYmRT4tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3guc291cmNlLmVkZ2VzLnNwbGljZSh3LDEpLHgudGFyZ2V0IT14LnNvdXJjZSYmeC50YXJnZXQuZWRnZXMuc3BsaWNlKEUsMSk7dmFyIFM9eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHgpO2lmKFM9PS0xKXRocm93Ik5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCEiO3guc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKFMsMSl9fSxwLnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPWkuTUFYX1ZBTFVFLHk9aS5NQVhfVkFMVUUsdix4LGIsVD10aGlzLmdldE5vZGVzKCksUz1ULmxlbmd0aCx3PTA7dzxTO3crKyl7dmFyIEU9VFt3XTt2PUUuZ2V0VG9wKCkseD1FLmdldExlZnQoKSxnPnYmJihnPXYpLHk+eCYmKHk9eCl9cmV0dXJuIGc9PWkuTUFYX1ZBTFVFP251bGw6KFRbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/Yj1UWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0OmI9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PXktYix0aGlzLnRvcD1nLWIsbmV3IGYodGhpcy5sZWZ0LHRoaXMudG9wKSl9LHAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSxULFMsdyxFLF8sQz10aGlzLm5vZGVzLEQ9Qy5sZW5ndGgsTz0wO088RDtPKyspe3ZhciBSPUNbT107ZyYmUi5jaGlsZCE9bnVsbCYmUi51cGRhdGVCb3VuZHMoKSxUPVIuZ2V0TGVmdCgpLFM9Ui5nZXRSaWdodCgpLHc9Ui5nZXRUb3AoKSxFPVIuZ2V0Qm90dG9tKCkseT5UJiYoeT1UKSx2PFMmJih2PVMpLHg+dyYmKHg9dyksYjxFJiYoYj1FKX12YXIgaz1uZXcgaCh5LHgsdi15LGIteCk7eT09aS5NQVhfVkFMVUUmJih0aGlzLmxlZnQ9dGhpcy5wYXJlbnQuZ2V0TGVmdCgpLHRoaXMucmlnaHQ9dGhpcy5wYXJlbnQuZ2V0UmlnaHQoKSx0aGlzLnRvcD10aGlzLnBhcmVudC5nZXRUb3AoKSx0aGlzLmJvdHRvbT10aGlzLnBhcmVudC5nZXRCb3R0b20oKSksQ1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9fPUNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6Xz10aGlzLm1hcmdpbix0aGlzLmxlZnQ9ay54LV8sdGhpcy5yaWdodD1rLngray53aWR0aCtfLHRoaXMudG9wPWsueS1fLHRoaXMuYm90dG9tPWsueStrLmhlaWdodCtffSxwLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSxULFMsdyxFLF89Zy5sZW5ndGgsQz0wO0M8XztDKyspe3ZhciBEPWdbQ107VD1ELmdldExlZnQoKSxTPUQuZ2V0UmlnaHQoKSx3PUQuZ2V0VG9wKCksRT1ELmdldEJvdHRvbSgpLHk+VCYmKHk9VCksdjxTJiYodj1TKSx4PncmJih4PXcpLGI8RSYmKGI9RSl9dmFyIE89bmV3IGgoeSx4LHYteSxiLXgpO3JldHVybiBPfSxwLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LHAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPTAseT10aGlzLm5vZGVzLHY9eS5sZW5ndGgseD0wO3g8djt4Kyspe3ZhciBiPXlbeF07Zys9Yi5jYWxjRXN0aW1hdGVkU2l6ZSgpfXJldHVybiBnPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT1hLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9Zy9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcztpZih0aGlzLm5vZGVzLmxlbmd0aD09MCl7dGhpcy5pc0Nvbm5lY3RlZD0hMDtyZXR1cm59dmFyIHk9bmV3IGQsdj1uZXcgU2V0LHg9dGhpcy5ub2Rlc1swXSxiLFQsUz14LndpdGhDaGlsZHJlbigpO2ZvcihTLmZvckVhY2goZnVuY3Rpb24oTyl7eS5wdXNoKE8pLHYuYWRkKE8pfSk7eS5sZW5ndGghPT0wOyl7eD15LnNoaWZ0KCksYj14LmdldEVkZ2VzKCk7Zm9yKHZhciB3PWIubGVuZ3RoLEU9MDtFPHc7RSsrKXt2YXIgXz1iW0VdO2lmKFQ9Xy5nZXRPdGhlckVuZEluR3JhcGgoeCx0aGlzKSxUIT1udWxsJiYhdi5oYXMoVCkpe3ZhciBDPVQud2l0aENoaWxkcmVuKCk7Qy5mb3JFYWNoKGZ1bmN0aW9uKE8pe3kucHVzaChPKSx2LmFkZChPKX0pfX19aWYodGhpcy5pc0Nvbm5lY3RlZD0hMSx2LnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgRD0wO3YuZm9yRWFjaChmdW5jdGlvbihPKXtPLm93bmVyPT1nJiZEKyt9KSxEPT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1yKDEpO2Z1bmN0aW9uIGEocyl7bj1yKDUpLHRoaXMubGF5b3V0PXMsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX1vKGEsIkxHcmFwaE1hbmFnZXIiKSxhLnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxsPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksdT10aGlzLmFkZChzLGwpO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaCh1KSx0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMsbCx1LGgsZil7aWYodT09bnVsbCYmaD09bnVsbCYmZj09bnVsbCl7aWYocz09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYobD09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihzKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChzKSxzLnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKGwuY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBzLnBhcmVudD1sLGwuY2hpbGQ9cyxzfWVsc2V7Zj11LGg9bCx1PXM7dmFyIGQ9aC5nZXRPd25lcigpLHA9Zi5nZXRPd25lcigpO2lmKCEoZCE9bnVsbCYmZC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEocCE9bnVsbCYmcC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKGQ9PXApcmV0dXJuIHUuaXNJbnRlckdyYXBoPSExLGQuYWRkKHUsaCxmKTtpZih1LmlzSW50ZXJHcmFwaD0hMCx1LnNvdXJjZT1oLHUudGFyZ2V0PWYsdGhpcy5lZGdlcy5pbmRleE9mKHUpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2godSksISh1LnNvdXJjZSE9bnVsbCYmdS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEodS5zb3VyY2UuZWRnZXMuaW5kZXhPZih1KT09LTEmJnUudGFyZ2V0LmVkZ2VzLmluZGV4T2YodSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gdS5zb3VyY2UuZWRnZXMucHVzaCh1KSx1LnRhcmdldC5lZGdlcy5wdXNoKHUpLHV9fSxhLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24ocyl7aWYocyBpbnN0YW5jZW9mIG4pe3ZhciBsPXM7aWYobC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEobD09dGhpcy5yb290R3JhcGh8fGwucGFyZW50IT1udWxsJiZsLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgdT1bXTt1PXUuY29uY2F0KGwuZ2V0RWRnZXMoKSk7Zm9yKHZhciBoLGY9dS5sZW5ndGgsZD0wO2Q8ZjtkKyspaD11W2RdLGwucmVtb3ZlKGgpO3ZhciBwPVtdO3A9cC5jb25jYXQobC5nZXROb2RlcygpKTt2YXIgbTtmPXAubGVuZ3RoO2Zvcih2YXIgZD0wO2Q8ZjtkKyspbT1wW2RdLGwucmVtb3ZlKG0pO2w9PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZz10aGlzLmdyYXBocy5pbmRleE9mKGwpO3RoaXMuZ3JhcGhzLnNwbGljZShnLDEpLGwucGFyZW50PW51bGx9ZWxzZSBpZihzIGluc3RhbmNlb2YgaSl7aWYoaD1zLGg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIWguaXNJbnRlckdyYXBoKXRocm93Ik5vdCBhbiBpbnRlci1ncmFwaCBlZGdlISI7aWYoIShoLnNvdXJjZSE9bnVsbCYmaC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKGguc291cmNlLmVkZ2VzLmluZGV4T2YoaCkhPS0xJiZoLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpIT0tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3ZhciBnPWguc291cmNlLmVkZ2VzLmluZGV4T2YoaCk7aWYoaC5zb3VyY2UuZWRnZXMuc3BsaWNlKGcsMSksZz1oLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpLGgudGFyZ2V0LmVkZ2VzLnNwbGljZShnLDEpLCEoaC5zb3VyY2Uub3duZXIhPW51bGwmJmguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKGguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGc9aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKTtoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoZywxKX19LGEucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe3RoaXMucm9vdEdyYXBoLnVwZGF0ZUJvdW5kcyghMCl9LGEucHJvdG90eXBlLmdldEdyYXBocz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbE5vZGVzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8dTtoKyspcz1zLmNvbmNhdChsW2hdLmdldE5vZGVzKCkpO3RoaXMuYWxsTm9kZXM9c31yZXR1cm4gdGhpcy5hbGxOb2Rlc30sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxFZGdlcz1mdW5jdGlvbigpe3RoaXMuYWxsRWRnZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249bnVsbH0sYS5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbEVkZ2VzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8bC5sZW5ndGg7aCsrKXM9cy5jb25jYXQobFtoXS5nZXRFZGdlcygpKTtzPXMuY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9c31yZXR1cm4gdGhpcy5hbGxFZGdlc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sYS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24ocyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPXN9LGEucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihzKXtpZihzLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9cyxzLnBhcmVudD09bnVsbCYmKHMucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sYS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxhLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihzLGwpe2lmKCEocyE9bnVsbCYmbCE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYocz09bClyZXR1cm4hMDt2YXIgdT1zLmdldE93bmVyKCksaDtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1sKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3U9bC5nZXRPd25lcigpO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PXMpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbCx1LGgsZixkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXtpZihzPWRbbV0sbD1zLnNvdXJjZSx1PXMudGFyZ2V0LHMubGNhPW51bGwscy5zb3VyY2VJbkxjYT1sLHMudGFyZ2V0SW5MY2E9dSxsPT11KXtzLmxjYT1sLmdldE93bmVyKCk7Y29udGludWV9Zm9yKGg9bC5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7Zm9yKHMudGFyZ2V0SW5MY2E9dSxmPXUuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2lmKGY9PWgpe3MubGNhPWY7YnJlYWt9aWYoZj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYocy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cy50YXJnZXRJbkxjYT1mLmdldFBhcmVudCgpLGY9cy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKGg9PXRoaXMucm9vdEdyYXBoKWJyZWFrO3MubGNhPT1udWxsJiYocy5zb3VyY2VJbkxjYT1oLmdldFBhcmVudCgpLGg9cy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihzLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihzLGwpe2lmKHM9PWwpcmV0dXJuIHMuZ2V0T3duZXIoKTt2YXIgdT1zLmdldE93bmVyKCk7ZG97aWYodT09bnVsbClicmVhazt2YXIgaD1sLmdldE93bmVyKCk7ZG97aWYoaD09bnVsbClicmVhaztpZihoPT11KXJldHVybiBoO2g9aC5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTt1PXUuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIHV9LGEucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKHMsbCl7cz09bnVsbCYmbD09bnVsbCYmKHM9dGhpcy5yb290R3JhcGgsbD0xKTtmb3IodmFyIHUsaD1zLmdldE5vZGVzKCksZj1oLmxlbmd0aCxkPTA7ZDxmO2QrKyl1PWhbZF0sdS5pbmNsdXNpb25UcmVlRGVwdGg9bCx1LmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKHUuY2hpbGQsbCsxKX0sYS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgcyxsPXRoaXMuZWRnZXMubGVuZ3RoLHU9MDt1PGw7dSsrKWlmKHM9dGhpcy5lZGdlc1t1XSx0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKHMuc291cmNlLHMudGFyZ2V0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigwKTtmdW5jdGlvbiBpKCl7fW8oaSwiRkRMYXlvdXRDb25zdGFudHMiKTtmb3IodmFyIGEgaW4gbilpW2FdPW5bYV07aS5NQVhfSVRFUkFUSU9OUz0yNTAwLGkuREVGQVVMVF9FREdFX0xFTkdUSD01MCxpLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPS40NSxpLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPTQ1MDAsaS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9LjQsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9MSxpLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9My44LGkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0xLjUsaS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9LjMsaS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SPS4zMyxpLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD0xZTMsaS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQ9NWUzLGkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMPTEwMCxpLk1BWF9OT0RFX0RJU1BMQUNFTUVOVD1pLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCozLGkuTUlOX1JFUFVMU0lPTl9ESVNUPWkuREVGQVVMVF9FREdFX0xFTkdUSC8xMCxpLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD0xMDAsaS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPS4xLGkuTUlOX0VER0VfTEVOR1RIPTEsaS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD0xMCx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtmdW5jdGlvbiBpKCl7fW8oaSwiSUdlb21ldHJ5IiksaS5jYWxjU2VwYXJhdGlvbkFtb3VudD1mdW5jdGlvbihhLHMsbCx1KXtpZighYS5pbnRlcnNlY3RzKHMpKXRocm93ImFzc2VydCBmYWlsZWQiO3ZhciBoPW5ldyBBcnJheSgyKTt0aGlzLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzKGEscyxoKSxsWzBdPU1hdGgubWluKGEuZ2V0UmlnaHQoKSxzLmdldFJpZ2h0KCkpLU1hdGgubWF4KGEueCxzLngpLGxbMV09TWF0aC5taW4oYS5nZXRCb3R0b20oKSxzLmdldEJvdHRvbSgpKS1NYXRoLm1heChhLnkscy55KSxhLmdldFgoKTw9cy5nZXRYKCkmJmEuZ2V0UmlnaHQoKT49cy5nZXRSaWdodCgpP2xbMF0rPU1hdGgubWluKHMuZ2V0WCgpLWEuZ2V0WCgpLGEuZ2V0UmlnaHQoKS1zLmdldFJpZ2h0KCkpOnMuZ2V0WCgpPD1hLmdldFgoKSYmcy5nZXRSaWdodCgpPj1hLmdldFJpZ2h0KCkmJihsWzBdKz1NYXRoLm1pbihhLmdldFgoKS1zLmdldFgoKSxzLmdldFJpZ2h0KCktYS5nZXRSaWdodCgpKSksYS5nZXRZKCk8PXMuZ2V0WSgpJiZhLmdldEJvdHRvbSgpPj1zLmdldEJvdHRvbSgpP2xbMV0rPU1hdGgubWluKHMuZ2V0WSgpLWEuZ2V0WSgpLGEuZ2V0Qm90dG9tKCktcy5nZXRCb3R0b20oKSk6cy5nZXRZKCk8PWEuZ2V0WSgpJiZzLmdldEJvdHRvbSgpPj1hLmdldEJvdHRvbSgpJiYobFsxXSs9TWF0aC5taW4oYS5nZXRZKCktcy5nZXRZKCkscy5nZXRCb3R0b20oKS1hLmdldEJvdHRvbSgpKSk7dmFyIGY9TWF0aC5hYnMoKHMuZ2V0Q2VudGVyWSgpLWEuZ2V0Q2VudGVyWSgpKS8ocy5nZXRDZW50ZXJYKCktYS5nZXRDZW50ZXJYKCkpKTtzLmdldENlbnRlclkoKT09PWEuZ2V0Q2VudGVyWSgpJiZzLmdldENlbnRlclgoKT09PWEuZ2V0Q2VudGVyWCgpJiYoZj0xKTt2YXIgZD1mKmxbMF0scD1sWzFdL2Y7bFswXTxwP3A9bFswXTpkPWxbMV0sbFswXT0tMSpoWzBdKihwLzIrdSksbFsxXT0tMSpoWzFdKihkLzIrdSl9LGkuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXM9ZnVuY3Rpb24oYSxzLGwpe2EuZ2V0Q2VudGVyWCgpPHMuZ2V0Q2VudGVyWCgpP2xbMF09LTE6bFswXT0xLGEuZ2V0Q2VudGVyWSgpPHMuZ2V0Q2VudGVyWSgpP2xbMV09LTE6bFsxXT0xfSxpLmdldEludGVyc2VjdGlvbjI9ZnVuY3Rpb24oYSxzLGwpe3ZhciB1PWEuZ2V0Q2VudGVyWCgpLGg9YS5nZXRDZW50ZXJZKCksZj1zLmdldENlbnRlclgoKSxkPXMuZ2V0Q2VudGVyWSgpO2lmKGEuaW50ZXJzZWN0cyhzKSlyZXR1cm4gbFswXT11LGxbMV09aCxsWzJdPWYsbFszXT1kLCEwO3ZhciBwPWEuZ2V0WCgpLG09YS5nZXRZKCksZz1hLmdldFJpZ2h0KCkseT1hLmdldFgoKSx2PWEuZ2V0Qm90dG9tKCkseD1hLmdldFJpZ2h0KCksYj1hLmdldFdpZHRoSGFsZigpLFQ9YS5nZXRIZWlnaHRIYWxmKCksUz1zLmdldFgoKSx3PXMuZ2V0WSgpLEU9cy5nZXRSaWdodCgpLF89cy5nZXRYKCksQz1zLmdldEJvdHRvbSgpLEQ9cy5nZXRSaWdodCgpLE89cy5nZXRXaWR0aEhhbGYoKSxSPXMuZ2V0SGVpZ2h0SGFsZigpLGs9ITEsTD0hMTtpZih1PT09Zil7aWYoaD5kKXJldHVybiBsWzBdPXUsbFsxXT1tLGxbMl09ZixsWzNdPUMsITE7aWYoaDxkKXJldHVybiBsWzBdPXUsbFsxXT12LGxbMl09ZixsWzNdPXcsITF9ZWxzZSBpZihoPT09ZCl7aWYodT5mKXJldHVybiBsWzBdPXAsbFsxXT1oLGxbMl09RSxsWzNdPWQsITE7aWYodTxmKXJldHVybiBsWzBdPWcsbFsxXT1oLGxbMl09UyxsWzNdPWQsITF9ZWxzZXt2YXIgQT1hLmhlaWdodC9hLndpZHRoLEk9cy5oZWlnaHQvcy53aWR0aCxNPShkLWgpLyhmLXUpLFA9dm9pZCAwLEI9dm9pZCAwLEY9dm9pZCAwLHo9dm9pZCAwLCQ9dm9pZCAwLFU9dm9pZCAwO2lmKC1BPT09TT91PmY/KGxbMF09eSxsWzFdPXYsaz0hMCk6KGxbMF09ZyxsWzFdPW0saz0hMCk6QT09PU0mJih1PmY/KGxbMF09cCxsWzFdPW0saz0hMCk6KGxbMF09eCxsWzFdPXYsaz0hMCkpLC1JPT09TT9mPnU/KGxbMl09XyxsWzNdPUMsTD0hMCk6KGxbMl09RSxsWzNdPXcsTD0hMCk6ST09PU0mJihmPnU/KGxbMl09UyxsWzNdPXcsTD0hMCk6KGxbMl09RCxsWzNdPUMsTD0hMCkpLGsmJkwpcmV0dXJuITE7aWYodT5mP2g+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKEEsTSw0KSxCPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oSSxNLDIpKTooUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMyksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMSkpOmg+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMSksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMykpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQSxNLDIpLEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihJLE0sNCkpLCFrKXN3aXRjaChQKXtjYXNlIDE6ej1tLEY9dSstVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAyOkY9eCx6PWgrYipNLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAzOno9dixGPXUrVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSA0OkY9eSx6PWgrLWIqTSxsWzBdPUYsbFsxXT16O2JyZWFrfWlmKCFMKXN3aXRjaChCKXtjYXNlIDE6VT13LCQ9ZistUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAyOiQ9RCxVPWQrTypNLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAzOlU9QywkPWYrUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSA0OiQ9XyxVPWQrLU8qTSxsWzJdPSQsbFszXT1VO2JyZWFrfX1yZXR1cm4hMX0saS5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbihhLHMsbCl7cmV0dXJuIGE+cz9sOjErbCU0fSxpLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbihhLHMsbCx1KXtpZih1PT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoYSxzLGwpO3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PXZvaWQgMCxiPXZvaWQgMCxUPXZvaWQgMCxTPXZvaWQgMCx3PXZvaWQgMCxFPXZvaWQgMCxfPXZvaWQgMCxDPXZvaWQgMCxEPXZvaWQgMDtyZXR1cm4gVD1wLWYsdz1oLWQsXz1kKmYtaCpwLFM9di1nLEU9bS15LEM9eSpnLW0qdixEPVQqRS1TKncsRD09PTA/bnVsbDooeD0odypDLUUqXykvRCxiPShTKl8tVCpDKS9ELG5ldyBuKHgsYikpfSxpLmFuZ2xlT2ZWZWN0b3I9ZnVuY3Rpb24oYSxzLGwsdSl7dmFyIGg9dm9pZCAwO3JldHVybiBhIT09bD8oaD1NYXRoLmF0YW4oKHUtcykvKGwtYSkpLGw8YT9oKz1NYXRoLlBJOnU8cyYmKGgrPXRoaXMuVFdPX1BJKSk6dTxzP2g9dGhpcy5PTkVfQU5EX0hBTEZfUEk6aD10aGlzLkhBTEZfUEksaH0saS5kb0ludGVyc2VjdD1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD1hLngsZj1hLnksZD1zLngscD1zLnksbT1sLngsZz1sLnkseT11Lngsdj11LnkseD0oZC1oKSoodi1nKS0oeS1tKSoocC1mKTtpZih4PT09MClyZXR1cm4hMTt2YXIgYj0oKHYtZykqKHktaCkrKG0teSkqKHYtZikpL3gsVD0oKGYtcCkqKHktaCkrKGQtaCkqKHYtZikpL3g7cmV0dXJuIDA8YiYmYjwxJiYwPFQmJlQ8MX0saS5IQUxGX1BJPS41Kk1hdGguUEksaS5PTkVfQU5EX0hBTEZfUEk9MS41Kk1hdGguUEksaS5UV09fUEk9MipNYXRoLlBJLGkuVEhSRUVfUEk9MypNYXRoLlBJLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJTWF0aCIpLG4uc2lnbj1mdW5jdGlvbihpKXtyZXR1cm4gaT4wPzE6aTwwPy0xOjB9LG4uZmxvb3I9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmNlaWwoaSk6TWF0aC5mbG9vcihpKX0sbi5jZWlsPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5mbG9vcihpKTpNYXRoLmNlaWwoaSl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJbnRlZ2VyIiksbi5NQVhfVkFMVUU9MjE0NzQ4MzY0NyxuLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZixkKXtmb3IodmFyIHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTttLmVudW1lcmFibGU9bS5lbnVtZXJhYmxlfHwhMSxtLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbSYmKG0ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLG0ua2V5LG0pfX1yZXR1cm4gbyhoLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24oZixkLHApe3JldHVybiBkJiZoKGYucHJvdG90eXBlLGQpLHAmJmgoZixwKSxmfX0oKTtmdW5jdGlvbiBpKGgsZil7aWYoIShoIGluc3RhbmNlb2YgZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1vKGZ1bmN0aW9uKGYpe3JldHVybnt2YWx1ZTpmLG5leHQ6bnVsbCxwcmV2Om51bGx9fSwibm9kZUZyb20iKSxzPW8oZnVuY3Rpb24oZixkLHAsbSl7cmV0dXJuIGYhPT1udWxsP2YubmV4dD1kOm0uaGVhZD1kLHAhPT1udWxsP3AucHJldj1kOm0udGFpbD1kLGQucHJldj1mLGQubmV4dD1wLG0ubGVuZ3RoKyssZH0sImFkZCIpLGw9byhmdW5jdGlvbihmLGQpe3ZhciBwPWYucHJldixtPWYubmV4dDtyZXR1cm4gcCE9PW51bGw/cC5uZXh0PW06ZC5oZWFkPW0sbSE9PW51bGw/bS5wcmV2PXA6ZC50YWlsPXAsZi5wcmV2PWYubmV4dD1udWxsLGQubGVuZ3RoLS0sZn0sIl9yZW1vdmUiKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmKXt2YXIgZD10aGlzO2kodGhpcyxoKSx0aGlzLmxlbmd0aD0wLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLGY/LmZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIGQucHVzaChwKX0pfXJldHVybiBvKGgsIkxpbmtlZExpc3QiKSxuKGgsW3trZXk6InNpemUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LCJzaXplIil9LHtrZXk6Imluc2VydEJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixhKGQpLHAsdGhpcyl9LCJpbnNlcnRCZWZvcmUiKX0se2tleToiaW5zZXJ0QWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGEoZCkscC5uZXh0LHRoaXMpfSwiaW5zZXJ0QWZ0ZXIiKX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixkLHAsdGhpcyl9LCJpbnNlcnROb2RlQmVmb3JlIil9LHtrZXk6Imluc2VydE5vZGVBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsZCxwLm5leHQsdGhpcyl9LCJpbnNlcnROb2RlQWZ0ZXIiKX0se2tleToicHVzaCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyh0aGlzLnRhaWwsYShkKSxudWxsLHRoaXMpfSwicHVzaCIpfSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKG51bGwsYShkKSx0aGlzLmhlYWQsdGhpcyl9LCJ1bnNoaWZ0Iil9LHtrZXk6InJlbW92ZSIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gbChkLHRoaXMpfSwicmVtb3ZlIil9LHtrZXk6InBvcCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKS52YWx1ZX0sInBvcCIpfSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpfSwicG9wTm9kZSIpfSx7a2V5OiJzaGlmdCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX0sInNoaWZ0Iil9LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKX0sInNoaWZ0Tm9kZSIpfSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgcD0xLG09dGhpcy5oZWFkO3A8ZDspbT1tLm5leHQscCsrO3JldHVybiBtLnZhbHVlfX0sImdldF9vYmplY3RfYXQiKX0se2tleToic2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkLHApe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgbT0xLGc9dGhpcy5oZWFkO208ZDspZz1nLm5leHQsbSsrO2cudmFsdWU9cH19LCJzZXRfb2JqZWN0X2F0Iil9XSksaH0oKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzKXt0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCxpPT1udWxsJiZhPT1udWxsJiZzPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGw/KHRoaXMueD1pLHRoaXMueT1hKTppLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGwmJihzPWksdGhpcy54PXMueCx0aGlzLnk9cy55KX1vKG4sIlBvaW50Iiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oaSxhLHMpe2kuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbD8ocz1pLHRoaXMuc2V0TG9jYXRpb24ocy54LHMueSkpOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsJiYocGFyc2VJbnQoaSk9PWkmJnBhcnNlSW50KGEpPT1hP3RoaXMubW92ZShpLGEpOih0aGlzLng9TWF0aC5mbG9vcihpKy41KSx0aGlzLnk9TWF0aC5mbG9vcihhKy41KSkpfSxuLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGksYSl7dGhpcy54PWksdGhpcy55PWF9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpLGEpe3RoaXMueCs9aSx0aGlzLnkrPWF9LG4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihpKXtpZihpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBhPWk7cmV0dXJuIHRoaXMueD09YS54JiZ0aGlzLnk9PWEueX1yZXR1cm4gdGhpcz09aX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzLGwpe3RoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPW51bGwmJmEhPW51bGwmJnMhPW51bGwmJmwhPW51bGwmJih0aGlzLng9aSx0aGlzLnk9YSx0aGlzLndpZHRoPXMsdGhpcy5oZWlnaHQ9bCl9byhuLCJSZWN0YW5nbGVEIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LG4ucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGkpe3JldHVybiEodGhpcy5nZXRSaWdodCgpPGkueHx8dGhpcy5nZXRCb3R0b20oKTxpLnl8fGkuZ2V0UmlnaHQoKTx0aGlzLnh8fGkuZ2V0Qm90dG9tKCk8dGhpcy55KX0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRNaW5YPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpfSxuLnByb3RvdHlwZS5nZXRNYXhYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpK3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0LzJ9LG4ucHJvdG90eXBlLmdldE1pblk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCl9LG4ucHJvdG90eXBlLmdldE1heFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmdldFdpZHRoSGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldEhlaWdodEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHQvMn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2Z1bmN0aW9uIGkoKXt9byhpLCJVbmlxdWVJREdlbmVyZXRvciIpLGkubGFzdElEPTAsaS5jcmVhdGVJRD1mdW5jdGlvbihhKXtyZXR1cm4gaS5pc1ByaW1pdGl2ZShhKT9hOihhLnVuaXF1ZUlEIT1udWxsfHwoYS51bmlxdWVJRD1pLmdldFN0cmluZygpLGkubGFzdElEKyspLGEudW5pcXVlSUQpfSxpLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbCYmKGE9aS5sYXN0SUQpLCJPYmplY3QjIithfSxpLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGEpe3ZhciBzPXR5cGVvZiBhPiJ1Ij8idW5kZWZpbmVkIjpuKGEpO3JldHVybiBhPT1udWxsfHxzIT0ib2JqZWN0IiYmcyE9ImZ1bmN0aW9uIn0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihtKXtpZihBcnJheS5pc0FycmF5KG0pKXtmb3IodmFyIGc9MCx5PUFycmF5KG0ubGVuZ3RoKTtnPG0ubGVuZ3RoO2crKyl5W2ddPW1bZ107cmV0dXJuIHl9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShtKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMCksYT1yKDYpLHM9cigzKSxsPXIoMSksdT1yKDUpLGg9cig0KSxmPXIoMTcpLGQ9cigyNyk7ZnVuY3Rpb24gcChtKXtkLmNhbGwodGhpcyksdGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMsdGhpcy5lZGdlVG9EdW1teU5vZGVzPW5ldyBNYXAsdGhpcy5ncmFwaE1hbmFnZXI9bmV3IGEodGhpcyksdGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMuaXNTdWJMYXlvdXQ9ITEsdGhpcy5pc1JlbW90ZVVzZT0hMSxtIT1udWxsJiYodGhpcy5pc1JlbW90ZVVzZT1tKX1vKHAsIkxheW91dCIpLHAuUkFORE9NX1NFRUQ9MSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LHAucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LHAucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBtPW5ldyBhKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1tLG19LHAucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgdShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgcyh0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGwobnVsbCxudWxsLG0pfSxwLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0scC5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgbTtyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9tPSExOm09dGhpcy5sYXlvdXQoKSxpLkFOSU1BVEU9PT0iZHVyaW5nIj8hMToobSYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLG0pfSxwLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LHAucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgbSxnPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKW09Z1t5XTtmb3IodmFyIHYseD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx5PTA7eTx4Lmxlbmd0aDt5Kyspdj14W3ldO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKG0gaW5zdGFuY2VvZiBzKXt2YXIgZz1tO2lmKGcuZ2V0Q2hpbGQoKSE9bnVsbClmb3IodmFyIHk9Zy5nZXRDaGlsZCgpLmdldE5vZGVzKCksdj0wO3Y8eS5sZW5ndGg7disrKXVwZGF0ZSh5W3ZdKTtpZihnLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHg9Zy52R3JhcGhPYmplY3Q7eC51cGRhdGUoZyl9fWVsc2UgaWYobSBpbnN0YW5jZW9mIGwpe3ZhciBiPW07aWYoYi52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBUPWIudkdyYXBoT2JqZWN0O1QudXBkYXRlKGIpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiB1KXt2YXIgUz1tO2lmKFMudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgdz1TLnZHcmFwaE9iamVjdDt3LnVwZGF0ZShTKX19fSxwLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0scC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IGgoMCwwKSk7ZWxzZXt2YXIgZz1uZXcgZix5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS51cGRhdGVMZWZ0VG9wKCk7aWYoeSE9bnVsbCl7Zy5zZXRXb3JsZE9yZ1gobS54KSxnLnNldFdvcmxkT3JnWShtLnkpLGcuc2V0RGV2aWNlT3JnWCh5LngpLGcuc2V0RGV2aWNlT3JnWSh5LnkpO2Zvcih2YXIgdj10aGlzLmdldEFsbE5vZGVzKCkseCxiPTA7Yjx2Lmxlbmd0aDtiKyspeD12W2JdLHgudHJhbnNmb3JtKGcpfX19LHAucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYW5kb21seT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpKSx0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKS51cGRhdGVCb3VuZHMoITApO2Vsc2UgZm9yKHZhciBnLHksdj1tLmdldE5vZGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWc9dlt4XSx5PWcuZ2V0Q2hpbGQoKSx5PT1udWxsfHx5LmdldE5vZGVzKCkubGVuZ3RoPT0wP2cuc2NhdHRlcigpOih0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh5KSxnLnVwZGF0ZUJvdW5kcygpKX0scC5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdD1mdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxnPSEwLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksdj0hMCx4PTA7eDx5Lmxlbmd0aDt4KyspeVt4XS5nZXRDaGlsZCgpIT1udWxsJiYodj0hMSk7aWYoIXYpcmV0dXJuIG07dmFyIGI9bmV3IFNldCxUPVtdLFM9bmV3IE1hcCx3PVtdO2Zvcih3PXcuY29uY2F0KHkpO3cubGVuZ3RoPjAmJmc7KXtmb3IoVC5wdXNoKHdbMF0pO1QubGVuZ3RoPjAmJmc7KXt2YXIgRT1UWzBdO1Quc3BsaWNlKDAsMSksYi5hZGQoRSk7Zm9yKHZhciBfPUUuZ2V0RWRnZXMoKSx4PTA7eDxfLmxlbmd0aDt4Kyspe3ZhciBDPV9beF0uZ2V0T3RoZXJFbmQoRSk7aWYoUy5nZXQoRSkhPUMpaWYoIWIuaGFzKEMpKVQucHVzaChDKSxTLnNldChDLEUpO2Vsc2V7Zz0hMTticmVha319fWlmKCFnKW09W107ZWxzZXt2YXIgRD1bXS5jb25jYXQobihiKSk7bS5wdXNoKEQpO2Zvcih2YXIgeD0wO3g8RC5sZW5ndGg7eCsrKXt2YXIgTz1EW3hdLFI9dy5pbmRleE9mKE8pO1I+LTEmJncuc3BsaWNlKFIsMSl9Yj1uZXcgU2V0LFM9bmV3IE1hcH19cmV0dXJuIG19LHAucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKG0pe2Zvcih2YXIgZz1bXSx5PW0uc291cmNlLHY9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKG0uc291cmNlLG0udGFyZ2V0KSx4PTA7eDxtLmJlbmRwb2ludHMubGVuZ3RoO3grKyl7dmFyIGI9dGhpcy5uZXdOb2RlKG51bGwpO2Iuc2V0UmVjdChuZXcgUG9pbnQoMCwwKSxuZXcgRGltZW5zaW9uKDEsMSkpLHYuYWRkKGIpO3ZhciBUPXRoaXMubmV3RWRnZShudWxsKTt0aGlzLmdyYXBoTWFuYWdlci5hZGQoVCx5LGIpLGcuYWRkKGIpLHk9Yn12YXIgVD10aGlzLm5ld0VkZ2UobnVsbCk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZChULHksbS50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQobSxnKSxtLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShtKTp2LnJlbW92ZShtKSxnfSxwLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgbT1bXTttPW0uY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLG09W10uY29uY2F0KG4odGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChtKTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtpZih5LmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgdj10aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KHkpLHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIGI9dlt4XSxUPW5ldyBoKGIuZ2V0Q2VudGVyWCgpLGIuZ2V0Q2VudGVyWSgpKSxTPXkuYmVuZHBvaW50cy5nZXQoeCk7Uy54PVQueCxTLnk9VC55LGIuZ2V0T3duZXIoKS5yZW1vdmUoYil9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHkseS5zb3VyY2UseS50YXJnZXQpfX19LHAudHJhbnNmb3JtPWZ1bmN0aW9uKG0sZyx5LHYpe2lmKHkhPW51bGwmJnYhPW51bGwpe3ZhciB4PWc7aWYobTw9NTApe3ZhciBiPWcveTt4LT0oZy1iKS81MCooNTAtbSl9ZWxzZXt2YXIgVD1nKnY7eCs9KFQtZykvNTAqKG0tNTApfXJldHVybiB4fWVsc2V7dmFyIFMsdztyZXR1cm4gbTw9NTA/KFM9OSpnLzUwMCx3PWcvMTApOihTPTkqZy81MCx3PS04KmcpLFMqbSt3fX0scC5maW5kQ2VudGVyT2ZUcmVlPWZ1bmN0aW9uKG0pe3ZhciBnPVtdO2c9Zy5jb25jYXQobSk7dmFyIHk9W10sdj1uZXcgTWFwLHg9ITEsYj1udWxsOyhnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pO2Zvcih2YXIgVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgUz1nW1RdLHc9Uy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZTt2LnNldChTLFMuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemUpLHc9PTEmJnkucHVzaChTKX12YXIgRT1bXTtmb3IoRT1FLmNvbmNhdCh5KTsheDspe3ZhciBfPVtdO189Xy5jb25jYXQoRSksRT1bXTtmb3IodmFyIFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIFM9Z1tUXSxDPWcuaW5kZXhPZihTKTtDPj0wJiZnLnNwbGljZShDLDEpO3ZhciBEPVMuZ2V0TmVpZ2hib3JzTGlzdCgpO0QuZm9yRWFjaChmdW5jdGlvbihrKXtpZih5LmluZGV4T2Yoayk8MCl7dmFyIEw9di5nZXQoayksQT1MLTE7QT09MSYmRS5wdXNoKGspLHYuc2V0KGssQSl9fSl9eT15LmNvbmNhdChFKSwoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKX1yZXR1cm4gYn0scC5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKG0pe3RoaXMuZ3JhcGhNYW5hZ2VyPW19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJSYW5kb21TZWVkIiksbi5zZWVkPTEsbi54PTAsbi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ueD1NYXRoLnNpbihuLnNlZWQrKykqMWU0LG4ueC1NYXRoLmZsb29yKG4ueCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNCk7ZnVuY3Rpb24gaShhLHMpe3RoaXMubHdvcmxkT3JnWD0wLHRoaXMubHdvcmxkT3JnWT0wLHRoaXMubGRldmljZU9yZ1g9MCx0aGlzLmxkZXZpY2VPcmdZPTAsdGhpcy5sd29ybGRFeHRYPTEsdGhpcy5sd29ybGRFeHRZPTEsdGhpcy5sZGV2aWNlRXh0WD0xLHRoaXMubGRldmljZUV4dFk9MX1vKGksIlRyYW5zZm9ybSIpLGkucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWT1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFk9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFg9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFk9YX0saS5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdYKyhhLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9sKSxzfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1krKGEtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1grKGEtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1krKGEtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihhKXt2YXIgcz1uZXcgbih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKGEueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShhLnkpKTtyZXR1cm4gc30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihkKXtpZihBcnJheS5pc0FycmF5KGQpKXtmb3IodmFyIHA9MCxtPUFycmF5KGQubGVuZ3RoKTtwPGQubGVuZ3RoO3ArKyltW3BdPWRbcF07cmV0dXJuIG19ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShkKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMTUpLGE9cig3KSxzPXIoMCksbD1yKDgpLHU9cig5KTtmdW5jdGlvbiBoKCl7aS5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1hLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPWEuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PWEuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD1hLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKmEuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1hLk1BWF9JVEVSQVRJT05TfW8oaCwiRkRMYXlvdXQiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gaSloW2ZdPWlbZl07aC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLnRvdGFsSXRlcmF0aW9ucz0wLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTAsdGhpcy51c2VGUkdyaWRWYXJpYW50PWEuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OLHRoaXMuZ3JpZD1bXX0saC5wcm90b3R5cGUuY2FsY0lkZWFsRWRnZUxlbmd0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscCxtLGcseSx2LHg9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLGI9MDtiPHgubGVuZ3RoO2IrKylkPXhbYl0sZC5pZGVhbExlbmd0aD10aGlzLmlkZWFsRWRnZUxlbmd0aCxkLmlzSW50ZXJHcmFwaCYmKG09ZC5nZXRTb3VyY2UoKSxnPWQuZ2V0VGFyZ2V0KCkseT1kLmdldFNvdXJjZUluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHY9ZC5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihkLmlkZWFsTGVuZ3RoKz15K3YtMipzLlNJTVBMRV9OT0RFX1NJWkUpLHA9ZC5nZXRMY2EoKS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKSxkLmlkZWFsTGVuZ3RoKz1hLkRFRkFVTFRfRURHRV9MRU5HVEgqYS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SKihtLmdldEluY2x1c2lvblRyZWVEZXB0aCgpK2cuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMipwKSl9LGgucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oZC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKGEuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KGQ+YS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KGEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLWEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxoLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0sdGhpcy5jYWxjU3ByaW5nRm9yY2UocCxwLmlkZWFsTGVuZ3RoKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxwPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxtLGcseSx2LHg9dGhpcy5nZXRBbGxOb2RlcygpLGI7aWYodGhpcy51c2VGUkdyaWRWYXJpYW50KWZvcih0aGlzLnRvdGFsSXRlcmF0aW9ucyVhLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZkJiZ0aGlzLnVwZGF0ZUdyaWQoKSxiPW5ldyBTZXQsbT0wO208eC5sZW5ndGg7bSsrKXk9eFttXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZSh5LGIsZCxwKSxiLmFkZCh5KTtlbHNlIGZvcihtPTA7bTx4Lmxlbmd0aDttKyspZm9yKHk9eFttXSxnPW0rMTtnPHgubGVuZ3RoO2crKyl2PXhbZ10seS5nZXRPd25lcigpPT12LmdldE93bmVyKCkmJnRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKHksdil9LGgucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHA9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLG09MDttPHAubGVuZ3RoO20rKylkPXBbbV0sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKGQpfSxoLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLHAsbT0wO208ZC5sZW5ndGg7bSsrKXA9ZFttXSxwLm1vdmUoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRTb3VyY2UoKSxnPWQuZ2V0VGFyZ2V0KCkseSx2LHgsYjtpZih0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzJiZtLmdldENoaWxkKCk9PW51bGwmJmcuZ2V0Q2hpbGQoKT09bnVsbClkLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoZC51cGRhdGVMZW5ndGgoKSxkLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47eT1kLmdldExlbmd0aCgpLHkhPTAmJih2PXRoaXMuc3ByaW5nQ29uc3RhbnQqKHktcCkseD12KihkLmxlbmd0aFgveSksYj12KihkLmxlbmd0aFkveSksbS5zcHJpbmdGb3JjZVgrPXgsbS5zcHJpbmdGb3JjZVkrPWIsZy5zcHJpbmdGb3JjZVgtPXgsZy5zcHJpbmdGb3JjZVktPWIpfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2U9ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmdldFJlY3QoKSxnPXAuZ2V0UmVjdCgpLHk9bmV3IEFycmF5KDIpLHY9bmV3IEFycmF5KDQpLHgsYixULFMsdyxFLF87aWYobS5pbnRlcnNlY3RzKGcpKXtsLmNhbGNTZXBhcmF0aW9uQW1vdW50KG0sZyx5LGEuREVGQVVMVF9FREdFX0xFTkdUSC8yKSxFPTIqeVswXSxfPTIqeVsxXTt2YXIgQz1kLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi8oZC5ub09mQ2hpbGRyZW4rcC5ub09mQ2hpbGRyZW4pO2QucmVwdWxzaW9uRm9yY2VYLT1DKkUsZC5yZXB1bHNpb25Gb3JjZVktPUMqXyxwLnJlcHVsc2lvbkZvcmNlWCs9QypFLHAucmVwdWxzaW9uRm9yY2VZKz1DKl99ZWxzZSB0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzJiZkLmdldENoaWxkKCk9PW51bGwmJnAuZ2V0Q2hpbGQoKT09bnVsbD8oeD1nLmdldENlbnRlclgoKS1tLmdldENlbnRlclgoKSxiPWcuZ2V0Q2VudGVyWSgpLW0uZ2V0Q2VudGVyWSgpKToobC5nZXRJbnRlcnNlY3Rpb24obSxnLHYpLHg9dlsyXS12WzBdLGI9dlszXS12WzFdKSxNYXRoLmFicyh4KTxhLk1JTl9SRVBVTFNJT05fRElTVCYmKHg9dS5zaWduKHgpKmEuTUlOX1JFUFVMU0lPTl9ESVNUKSxNYXRoLmFicyhiKTxhLk1JTl9SRVBVTFNJT05fRElTVCYmKGI9dS5zaWduKGIpKmEuTUlOX1JFUFVMU0lPTl9ESVNUKSxUPXgqeCtiKmIsUz1NYXRoLnNxcnQoVCksdz10aGlzLnJlcHVsc2lvbkNvbnN0YW50KmQubm9PZkNoaWxkcmVuKnAubm9PZkNoaWxkcmVuL1QsRT13KngvUyxfPXcqYi9TLGQucmVwdWxzaW9uRm9yY2VYLT1FLGQucmVwdWxzaW9uRm9yY2VZLT1fLHAucmVwdWxzaW9uRm9yY2VYKz1FLHAucmVwdWxzaW9uRm9yY2VZKz1ffSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlPWZ1bmN0aW9uKGQpe3ZhciBwLG0sZyx5LHYseCxiLFQ7cD1kLmdldE93bmVyKCksbT0ocC5nZXRSaWdodCgpK3AuZ2V0TGVmdCgpKS8yLGc9KHAuZ2V0VG9wKCkrcC5nZXRCb3R0b20oKSkvMix5PWQuZ2V0Q2VudGVyWCgpLW0sdj1kLmdldENlbnRlclkoKS1nLHg9TWF0aC5hYnMoeSkrZC5nZXRXaWR0aCgpLzIsYj1NYXRoLmFicyh2KStkLmdldEhlaWdodCgpLzIsZC5nZXRPd25lcigpPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/KFQ9cC5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3IsKHg+VHx8Yj5UKSYmKGQuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnksZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdikpOihUPXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKHg+VHx8Yj5UKSYmKGQuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnkqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCxkLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCp2KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0saC5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgZCxwPSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKHA9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxkPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsZHx8cH0saC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0saC5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHA9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLGQubm9PZkNoaWxkcmVuPWQuZ2V0Tm9PZkNoaWxkcmVuKCl9LGgucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKGQpe3ZhciBwPTAsbT0wO3A9cGFyc2VJbnQoTWF0aC5jZWlsKChkLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxtPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBnPW5ldyBBcnJheShwKSx5PTA7eTxwO3krKylnW3ldPW5ldyBBcnJheShtKTtmb3IodmFyIHk9MDt5PHA7eSsrKWZvcih2YXIgdj0wO3Y8bTt2KyspZ1t5XVt2XT1uZXcgQXJyYXk7cmV0dXJuIGd9LGgucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQ9ZnVuY3Rpb24oZCxwLG0pe3ZhciBnPTAseT0wLHY9MCx4PTA7Zz1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx5PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLndpZHRoK2QuZ2V0UmVjdCgpLngtcCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHY9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueS1tKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseD1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS5oZWlnaHQrZC5nZXRSZWN0KCkueS1tKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBiPWc7Yjw9eTtiKyspZm9yKHZhciBUPXY7VDw9eDtUKyspdGhpcy5ncmlkW2JdW1RdLnB1c2goZCksZC5zZXRHcmlkQ29vcmRpbmF0ZXMoZyx5LHYseCl9LGgucHJvdG90eXBlLnVwZGF0ZUdyaWQ9ZnVuY3Rpb24oKXt2YXIgZCxwLG09dGhpcy5nZXRBbGxOb2RlcygpO2Zvcih0aGlzLmdyaWQ9dGhpcy5jYWxjR3JpZCh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpLGQ9MDtkPG0ubGVuZ3RoO2QrKylwPW1bZF0sdGhpcy5hZGROb2RlVG9HcmlkKHAsdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldExlZnQoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0VG9wKCkpfSxoLnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGU9ZnVuY3Rpb24oZCxwLG0sZyl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmbXx8Zyl7dmFyIHk9bmV3IFNldDtkLnN1cnJvdW5kaW5nPW5ldyBBcnJheTtmb3IodmFyIHYseD10aGlzLmdyaWQsYj1kLnN0YXJ0WC0xO2I8ZC5maW5pc2hYKzI7YisrKWZvcih2YXIgVD1kLnN0YXJ0WS0xO1Q8ZC5maW5pc2hZKzI7VCsrKWlmKCEoYjwwfHxUPDB8fGI+PXgubGVuZ3RofHxUPj14WzBdLmxlbmd0aCkpe2Zvcih2YXIgUz0wO1M8eFtiXVtUXS5sZW5ndGg7UysrKWlmKHY9eFtiXVtUXVtTXSwhKGQuZ2V0T3duZXIoKSE9di5nZXRPd25lcigpfHxkPT12KSYmIXAuaGFzKHYpJiYheS5oYXModikpe3ZhciB3PU1hdGguYWJzKGQuZ2V0Q2VudGVyWCgpLXYuZ2V0Q2VudGVyWCgpKS0oZC5nZXRXaWR0aCgpLzIrdi5nZXRXaWR0aCgpLzIpLEU9TWF0aC5hYnMoZC5nZXRDZW50ZXJZKCktdi5nZXRDZW50ZXJZKCkpLShkLmdldEhlaWdodCgpLzIrdi5nZXRIZWlnaHQoKS8yKTt3PD10aGlzLnJlcHVsc2lvblJhbmdlJiZFPD10aGlzLnJlcHVsc2lvblJhbmdlJiZ5LmFkZCh2KX19ZC5zdXJyb3VuZGluZz1bXS5jb25jYXQobih5KSl9Zm9yKGI9MDtiPGQuc3Vycm91bmRpbmcubGVuZ3RoO2IrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShkLGQuc3Vycm91bmRpbmdbYl0pfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5leHBvcnRzPWh9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKSxpPXIoNyk7ZnVuY3Rpb24gYShsLHUsaCl7bi5jYWxsKHRoaXMsbCx1LGgpLHRoaXMuaWRlYWxMZW5ndGg9aS5ERUZBVUxUX0VER0VfTEVOR1RIfW8oYSwiRkRMYXlvdXRFZGdlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIG4pYVtzXT1uW3NdO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMyk7ZnVuY3Rpb24gaShzLGwsdSxoKXtuLmNhbGwodGhpcyxzLGwsdSxoKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119byhpLCJGRExheW91dE5vZGUiKSxpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGEgaW4gbilpW2FdPW5bYV07aS5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKHMsbCx1LGgpe3RoaXMuc3RhcnRYPXMsdGhpcy5maW5pc2hYPWwsdGhpcy5zdGFydFk9dSx0aGlzLmZpbmlzaFk9aH0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPT1udWxsJiZhIT09bnVsbCYmKHRoaXMuaGVpZ2h0PWEsdGhpcy53aWR0aD1pKX1vKG4sIkRpbWVuc2lvbkQiKSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLm1hcD17fSx0aGlzLmtleXM9W119byhpLCJIYXNoTWFwIiksaS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGEscyl7dmFyIGw9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKGwpfHwodGhpcy5tYXBbbF09cyx0aGlzLmtleXMucHVzaChhKSl9LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW2FdIT1udWxsfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbc119LGkucHJvdG90eXBlLmtleVNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleXN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLnNldD17fX1vKGksIkhhc2hTZXQiKSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKHMpfHwodGhpcy5zZXRbc109YSl9LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5zZXRbbi5jcmVhdGVJRChhKV19LGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXT09YX0saS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxsPXMubGVuZ3RoLHU9MDt1PGw7dSsrKWEucHVzaCh0aGlzLnNldFtzW3VdXSl9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIHU9YVtsXTt0aGlzLmFkZCh1KX19LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2Zvcih2YXIgZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZC5rZXksZCl9fXJldHVybiBvKGwsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbih1LGgsZil7cmV0dXJuIGgmJmwodS5wcm90b3R5cGUsaCksZiYmbCh1LGYpLHV9fSgpO2Z1bmN0aW9uIGkobCx1KXtpZighKGwgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPXIoMTEpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7aSh0aGlzLGwpLChoIT09bnVsbHx8aCE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgZj12b2lkIDA7dSBpbnN0YW5jZW9mIGE/Zj11LnNpemUoKTpmPXUubGVuZ3RoLHRoaXMuX3F1aWNrc29ydCh1LDAsZi0xKX1yZXR1cm4gbyhsLCJRdWlja3NvcnQiKSxuKGwsW3trZXk6Il9xdWlja3NvcnQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2lmKGY8ZCl7dmFyIHA9dGhpcy5fcGFydGl0aW9uKGgsZixkKTt0aGlzLl9xdWlja3NvcnQoaCxmLHApLHRoaXMuX3F1aWNrc29ydChoLHArMSxkKX19LCJfcXVpY2tzb3J0Iil9LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2Zvcih2YXIgcD10aGlzLl9nZXQoaCxmKSxtPWYsZz1kOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24ocCx0aGlzLl9nZXQoaCxnKSk7KWctLTtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHRoaXMuX2dldChoLG0pLHApOyltKys7aWYobTxnKXRoaXMuX3N3YXAoaCxtLGcpLG0rKyxnLS07ZWxzZSByZXR1cm4gZ319LCJfcGFydGl0aW9uIil9LHtrZXk6Il9nZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gaCBpbnN0YW5jZW9mIGE/aC5nZXRfb2JqZWN0X2F0KGYpOmhbZl19LCJfZ2V0Iil9LHtrZXk6Il9zZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2ggaW5zdGFuY2VvZiBhP2guc2V0X29iamVjdF9hdChmLGQpOmhbZl09ZH0sIl9zZXQiKX0se2tleToiX3N3YXAiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe3ZhciBwPXRoaXMuX2dldChoLGYpO3RoaXMuX3NldChoLGYsdGhpcy5fZ2V0KGgsZCkpLHRoaXMuX3NldChoLGQscCl9LCJfc3dhcCIpfSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBmPmh9LCJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIpfV0pLGx9KCk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7Zm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLmtleSxmKX19cmV0dXJuIG8ocywiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGwsdSxoKXtyZXR1cm4gdSYmcyhsLnByb3RvdHlwZSx1KSxoJiZzKGwsaCksbH19KCk7ZnVuY3Rpb24gaShzLGwpe2lmKCEocyBpbnN0YW5jZW9mIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsZD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7aSh0aGlzLHMpLHRoaXMuc2VxdWVuY2UxPWwsdGhpcy5zZXF1ZW5jZTI9dSx0aGlzLm1hdGNoX3Njb3JlPWgsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWYsdGhpcy5nYXBfcGVuYWx0eT1kLHRoaXMuaU1heD1sLmxlbmd0aCsxLHRoaXMuak1heD11Lmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHA9MDtwPHRoaXMuaU1heDtwKyspe3RoaXMuZ3JpZFtwXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIG09MDttPHRoaXMuak1heDttKyspdGhpcy5ncmlkW3BdW21dPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgZz0wO2c8dGhpcy5pTWF4O2crKyl7dGhpcy50cmFjZWJhY2tHcmlkW2ddPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgeT0wO3k8dGhpcy5qTWF4O3krKyl0aGlzLnRyYWNlYmFja0dyaWRbZ11beV09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBvKHMsIk5lZWRsZW1hbld1bnNjaCIpLG4ocyxbe2tleToiZ2V0U2NvcmUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX0sImdldFNjb3JlIil9LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiZ2V0QWxpZ25tZW50cyIpfSx7a2V5OiJjb21wdXRlR3JpZHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtmb3IodmFyIHU9MTt1PHRoaXMuak1heDt1KyspdGhpcy5ncmlkWzBdW3VdPXRoaXMuZ3JpZFswXVt1LTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW3VdPVshMSwhMSwhMF07Zm9yKHZhciBoPTE7aDx0aGlzLmlNYXg7aCsrKXRoaXMuZ3JpZFtoXVswXT10aGlzLmdyaWRbaC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtoXVswXT1bITEsITAsITFdO2Zvcih2YXIgZj0xO2Y8dGhpcy5pTWF4O2YrKylmb3IodmFyIGQ9MTtkPHRoaXMuak1heDtkKyspe3ZhciBwPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtmLTFdPT09dGhpcy5zZXF1ZW5jZTJbZC0xXT9wPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5tYXRjaF9zY29yZTpwPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBtPXRoaXMuZ3JpZFtmLTFdW2RdK3RoaXMuZ2FwX3BlbmFsdHksZz10aGlzLmdyaWRbZl1bZC0xXSt0aGlzLmdhcF9wZW5hbHR5LHk9W3AsbSxnXSx2PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHkpO3RoaXMuZ3JpZFtmXVtkXT15W3ZbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtmXVtkXT1bdi5pbmNsdWRlcygwKSx2LmluY2x1ZGVzKDEpLHYuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19LCJjb21wdXRlR3JpZHMiKX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHU9W107Zm9yKHUucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTt1WzBdOyl7dmFyIGg9dVswXSxmPXRoaXMudHJhY2ViYWNrR3JpZFtoLnBvc1swXV1baC5wb3NbMV1dO2ZbMF0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksZlsxXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6Ii0iK2guc2VxMn0pLGZbMl0mJnUucHVzaCh7cG9zOltoLnBvc1swXSxoLnBvc1sxXS0xXSxzZXExOiItIitoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxoLnBvc1swXT09PTAmJmgucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpoLnNlcTEsc2VxdWVuY2UyOmguc2VxMn0pLHUuc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiYWxpZ25tZW50VHJhY2ViYWNrIil9LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9W10sZD0tMTsoZD11LmluZGV4T2YoaCxkKzEpKSE9PS0xOylmLnB1c2goZCk7cmV0dXJuIGZ9LCJnZXRBbGxJbmRleGVzIil9LHtrZXk6ImFycmF5QWxsTWF4SW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1KXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKHUsTWF0aC5tYXguYXBwbHkobnVsbCx1KSl9LCJhcnJheUFsbE1heEluZGV4ZXMiKX1dKSxzfSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW8oZnVuY3Rpb24oKXt9LCJsYXlvdXRCYXNlIik7bi5GRExheW91dD1yKDE4KSxuLkZETGF5b3V0Q29uc3RhbnRzPXIoNyksbi5GRExheW91dEVkZ2U9cigxOSksbi5GRExheW91dE5vZGU9cigyMCksbi5EaW1lbnNpb25EPXIoMjEpLG4uSGFzaE1hcD1yKDIyKSxuLkhhc2hTZXQ9cigyMyksbi5JR2VvbWV0cnk9cig4KSxuLklNYXRoPXIoOSksbi5JbnRlZ2VyPXIoMTApLG4uUG9pbnQ9cigxMiksbi5Qb2ludEQ9cig0KSxuLlJhbmRvbVNlZWQ9cigxNiksbi5SZWN0YW5nbGVEPXIoMTMpLG4uVHJhbnNmb3JtPXIoMTcpLG4uVW5pcXVlSURHZW5lcmV0b3I9cigxNCksbi5RdWlja3NvcnQ9cigyNCksbi5MaW5rZWRMaXN0PXIoMTEpLG4uTEdyYXBoT2JqZWN0PXIoMiksbi5MR3JhcGg9cig1KSxuLkxFZGdlPXIoMSksbi5MR3JhcGhNYW5hZ2VyPXIoNiksbi5MTm9kZT1yKDMpLG4uTGF5b3V0PXIoMTUpLG4uTGF5b3V0Q29uc3RhbnRzPXIoMCksbi5OZWVkbGVtYW5XdW5zY2g9cigyNSksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubGlzdGVuZXJzPVtdfW8obiwiRW1pdHRlciIpO3ZhciBpPW4ucHJvdG90eXBlO2kuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXt0aGlzLmxpc3RlbmVycy5wdXNoKHtldmVudDphLGNhbGxiYWNrOnN9KX0saS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD10aGlzLmxpc3RlbmVycy5sZW5ndGg7bD49MDtsLS0pe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO3UuZXZlbnQ9PT1hJiZ1LmNhbGxiYWNrPT09cyYmdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGwsMSl9fSxpLmVtaXQ9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9MDtsPHRoaXMubGlzdGVuZXJzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO2E9PT11LmV2ZW50JiZ1LmNhbGxiYWNrKHMpfX0sdC5leHBvcnRzPW59XSl9KX0pO3ZhciBoRj1QaSgodzQsdUYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgdzQ9PSJvYmplY3QiJiZ0eXBlb2YgdUY9PSJvYmplY3QiP3VGLmV4cG9ydHM9cihjRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImxheW91dC1iYXNlIl0scik6dHlwZW9mIHc0PT0ib2JqZWN0Ij93NC5jb3NlQmFzZT1yKGNGKCkpOmUuY29zZUJhc2U9cihlLmxheW91dEJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKSh3NCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9e307ZnVuY3Rpb24gbihpKXtpZihyW2ldKXJldHVybiByW2ldLmV4cG9ydHM7dmFyIGE9cltpXT17aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLG4pLGEubD0hMCxhLmV4cG9ydHN9cmV0dXJuIG8obiwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLG4ubT1lLG4uYz1yLG4uaT1mdW5jdGlvbihpKXtyZXR1cm4gaX0sbi5kPWZ1bmN0aW9uKGksYSxzKXtuLm8oaSxhKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGksYSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnN9KX0sbi5uPWZ1bmN0aW9uKGkpe3ZhciBhPWkmJmkuX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGl9LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIG4uZChhLCJhIixhKSxhfSxuLm89ZnVuY3Rpb24oaSxhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksYSl9LG4ucD0iIixuKG4ucz03KX0oW2Z1bmN0aW9uKGUscil7ZS5leHBvcnRzPXR9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dENvbnN0YW50cztmdW5jdGlvbiBhKCl7fW8oYSwiQ29TRUNvbnN0YW50cyIpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTthLkRFRkFVTFRfVVNFX01VTFRJX0xFVkVMX1NDQUxJTkc9ITEsYS5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OPWkuREVGQVVMVF9FREdFX0xFTkdUSCxhLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT049NjAsYS5USUxFPSEwLGEuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9MTAsYS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPTEwLGEuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITEsZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dEVkZ2U7ZnVuY3Rpb24gYShsLHUsaCl7aS5jYWxsKHRoaXMsbCx1LGgpfW8oYSwiQ29TRUVkZ2UiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5MR3JhcGg7ZnVuY3Rpb24gYShsLHUsaCl7aS5jYWxsKHRoaXMsbCx1LGgpfW8oYSwiQ29TRUdyYXBoIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2UuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuTEdyYXBoTWFuYWdlcjtmdW5jdGlvbiBhKGwpe2kuY2FsbCh0aGlzLGwpfW8oYSwiQ29TRUdyYXBoTWFuYWdlciIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTtlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0Tm9kZSxhPW4oMCkuSU1hdGg7ZnVuY3Rpb24gcyh1LGgsZixkKXtpLmNhbGwodGhpcyx1LGgsZixkKX1vKHMsIkNvU0VOb2RlIikscy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBsIGluIGkpc1tsXT1pW2xdO3MucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTt0aGlzLmRpc3BsYWNlbWVudFg9dS5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWCt0aGlzLnJlcHVsc2lvbkZvcmNlWCt0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKS90aGlzLm5vT2ZDaGlsZHJlbix0aGlzLmRpc3BsYWNlbWVudFk9dS5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWSt0aGlzLnJlcHVsc2lvbkZvcmNlWSt0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKS90aGlzLm5vT2ZDaGlsZHJlbixNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpPnUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFg9dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCphLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKSksTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKT51LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRZPXUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQqYS5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSkpLHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSk6dGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aD09MD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSksdS50b3RhbERpc3BsYWNlbWVudCs9TWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKStNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MH0scy5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbj1mdW5jdGlvbih1LGgpe2Zvcih2YXIgZj10aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxkLHA9MDtwPGYubGVuZ3RoO3ArKylkPWZbcF0sZC5nZXRDaGlsZCgpPT1udWxsPyhkLm1vdmVCeSh1LGgpLGQuZGlzcGxhY2VtZW50WCs9dSxkLmRpc3BsYWNlbWVudFkrPWgpOmQucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih1LGgpfSxzLnByb3RvdHlwZS5zZXRQcmVkMT1mdW5jdGlvbih1KXt0aGlzLnByZWQxPXV9LHMucHJvdG90eXBlLmdldFByZWQxPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQxfSxzLnByb3RvdHlwZS5nZXRQcmVkMj1mdW5jdGlvbigpe3JldHVybiBwcmVkMn0scy5wcm90b3R5cGUuc2V0TmV4dD1mdW5jdGlvbih1KXt0aGlzLm5leHQ9dX0scy5wcm90b3R5cGUuZ2V0TmV4dD1mdW5jdGlvbigpe3JldHVybiBuZXh0fSxzLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQ9ZnVuY3Rpb24odSl7dGhpcy5wcm9jZXNzZWQ9dX0scy5wcm90b3R5cGUuaXNQcm9jZXNzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcHJvY2Vzc2VkfSxlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0LGE9big0KSxzPW4oMyksbD1uKDUpLHU9bigyKSxoPW4oMSksZj1uKDApLkZETGF5b3V0Q29uc3RhbnRzLGQ9bigwKS5MYXlvdXRDb25zdGFudHMscD1uKDApLlBvaW50LG09bigwKS5Qb2ludEQsZz1uKDApLkxheW91dCx5PW4oMCkuSW50ZWdlcix2PW4oMCkuSUdlb21ldHJ5LHg9bigwKS5MR3JhcGgsYj1uKDApLlRyYW5zZm9ybTtmdW5jdGlvbiBUKCl7aS5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9fW8oVCwiQ29TRUxheW91dCIpLFQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgUyBpbiBpKVRbU109aVtTXTtULnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgdz1uZXcgYSh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9dyx3fSxULnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IHMobnVsbCx0aGlzLmdyYXBoTWFuYWdlcix3KX0sVC5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IGwodGhpcy5ncmFwaE1hbmFnZXIsdyl9LFQucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyB1KG51bGwsbnVsbCx3KX0sVC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLmlzU3ViTGF5b3V0fHwoaC5ERUZBVUxUX0VER0VfTEVOR1RIPDEwP3RoaXMuaWRlYWxFZGdlTGVuZ3RoPTEwOnRoaXMuaWRlYWxFZGdlTGVuZ3RoPWguREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249aC5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLnNwcmluZ0NvbnN0YW50PWYuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD1mLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PWYuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9Zi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9Zi5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9Zi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMucHJ1bmVkTm9kZXNBbGw9W10sdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnM9MCx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucz0wLHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITEsdGhpcy5jb29saW5nQ3ljbGU9MCx0aGlzLm1heENvb2xpbmdDeWNsZT10aGlzLm1heEl0ZXJhdGlvbnMvZi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QsdGhpcy5maW5hbFRlbXBlcmF0dXJlPWYuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EL3RoaXMubWF4SXRlcmF0aW9ucyx0aGlzLmNvb2xpbmdBZGp1c3Rlcj0xKX0sVC5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIHc9ZC5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ7cmV0dXJuIHcmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCkpLHRoaXMubGV2ZWw9MCx0aGlzLmNsYXNzaWNMYXlvdXQoKX0sVC5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKGguVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIEU9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLF89dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihPKXtyZXR1cm4gRS5oYXMoTyl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihfKX19ZWxzZXt2YXIgdz10aGlzLmdldEZsYXRGb3Jlc3QoKTtpZih3Lmxlbmd0aD4wKXRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KHcpO2Vsc2V7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgRT1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksXz10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBFLmhhcyhDKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKF8pLHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KCl9fXJldHVybiB0aGlzLmluaXRTcHJpbmdFbWJlZGRlcigpLHRoaXMucnVuU3ByaW5nRW1iZWRkZXIoKSwhMH0sVC5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVmLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgdz1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksRT10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiB3LmhhcyhEKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKEUpLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuY29vbGluZ0ZhY3Rvcj1mLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUx9ZWxzZSB0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSEwO3RoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zKyt9aWYodGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpcmV0dXJuITA7dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTAmJih0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSksdGhpcy5jb29saW5nRmFjdG9yPWYuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBfPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQsQz10aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc1RyZWVHcm93aW5nfHx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc0dyb3d0aEZpbmlzaGVkO3JldHVybiB0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCksdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2VzKF8sQyksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LFQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIHc9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxFPXt9LF89MDtfPHcubGVuZ3RoO18rKyl7dmFyIEM9d1tfXS5yZWN0LEQ9d1tfXS5pZDtFW0RdPXtpZDpELHg6Qy5nZXRDZW50ZXJYKCkseTpDLmdldENlbnRlclkoKSx3OkMud2lkdGgsaDpDLmhlaWdodH19cmV0dXJuIEV9LFQucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kPTI1LHRoaXMuYW5pbWF0aW9uUGVyaW9kPXRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDt2YXIgdz0hMTtpZihmLkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IXc7KXc9dGhpcy50aWNrKCk7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCl9fSxULnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHc9W10sRSxfPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEdyYXBocygpLEM9Xy5sZW5ndGgsRDtmb3IoRD0wO0Q8QztEKyspRT1fW0RdLEUudXBkYXRlQ29ubmVjdGVkKCksRS5pc0Nvbm5lY3RlZHx8KHc9dy5jb25jYXQoRS5nZXROb2RlcygpKSk7cmV0dXJuIHd9LFQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdz1bXTt3PXcuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciBFPW5ldyBTZXQsXztmb3IoXz0wO188dy5sZW5ndGg7XysrKXt2YXIgQz13W19dO2lmKCFFLmhhcyhDKSl7dmFyIEQ9Qy5nZXRTb3VyY2UoKSxPPUMuZ2V0VGFyZ2V0KCk7aWYoRD09TylDLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBtKSxDLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBtKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKEMpLEUuYWRkKEMpO2Vsc2V7dmFyIFI9W107aWYoUj1SLmNvbmNhdChELmdldEVkZ2VMaXN0VG9Ob2RlKE8pKSxSPVIuY29uY2F0KE8uZ2V0RWRnZUxpc3RUb05vZGUoRCkpLCFFLmhhcyhSWzBdKSl7aWYoUi5sZW5ndGg+MSl7dmFyIGs7Zm9yKGs9MDtrPFIubGVuZ3RoO2srKyl7dmFyIEw9UltrXTtMLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBtKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKEwpfX1SLmZvckVhY2goZnVuY3Rpb24oQSl7RS5hZGQoQSl9KX19fWlmKEUuc2l6ZT09dy5sZW5ndGgpYnJlYWt9fSxULnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHk9ZnVuY3Rpb24odyl7Zm9yKHZhciBFPW5ldyBwKDAsMCksXz1NYXRoLmNlaWwoTWF0aC5zcXJ0KHcubGVuZ3RoKSksQz0wLEQ9MCxPPTAsUj1uZXcgbSgwLDApLGs9MDtrPHcubGVuZ3RoO2srKyl7ayVfPT0wJiYoTz0wLEQ9QyxrIT0wJiYoRCs9aC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKSxDPTApO3ZhciBMPXdba10sQT1nLmZpbmRDZW50ZXJPZlRyZWUoTCk7RS54PU8sRS55PUQsUj1ULnJhZGlhbExheW91dChMLEEsRSksUi55PkMmJihDPU1hdGguZmxvb3IoUi55KSksTz1NYXRoLmZsb29yKFIueCtoLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pfXRoaXMudHJhbnNmb3JtKG5ldyBtKGQuV09STERfQ0VOVEVSX1gtUi54LzIsZC5XT1JMRF9DRU5URVJfWS1SLnkvMikpfSxULnJhZGlhbExheW91dD1mdW5jdGlvbih3LEUsXyl7dmFyIEM9TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZSh3KSxoLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04pO1QuYnJhbmNoUmFkaWFsTGF5b3V0KEUsbnVsbCwwLDM1OSwwLEMpO3ZhciBEPXguY2FsY3VsYXRlQm91bmRzKHcpLE89bmV3IGI7Ty5zZXREZXZpY2VPcmdYKEQuZ2V0TWluWCgpKSxPLnNldERldmljZU9yZ1koRC5nZXRNaW5ZKCkpLE8uc2V0V29ybGRPcmdYKF8ueCksTy5zZXRXb3JsZE9yZ1koXy55KTtmb3IodmFyIFI9MDtSPHcubGVuZ3RoO1IrKyl7dmFyIGs9d1tSXTtrLnRyYW5zZm9ybShPKX12YXIgTD1uZXcgbShELmdldE1heFgoKSxELmdldE1heFkoKSk7cmV0dXJuIE8uaW52ZXJzZVRyYW5zZm9ybVBvaW50KEwpfSxULmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbih3LEUsXyxDLEQsTyl7dmFyIFI9KEMtXysxKS8yO1I8MCYmKFIrPTE4MCk7dmFyIGs9KFIrXyklMzYwLEw9ayp2LlRXT19QSS8zNjAsQT1NYXRoLmNvcyhMKSxJPUQqTWF0aC5jb3MoTCksTT1EKk1hdGguc2luKEwpO3cuc2V0Q2VudGVyKEksTSk7dmFyIFA9W107UD1QLmNvbmNhdCh3LmdldEVkZ2VzKCkpO3ZhciBCPVAubGVuZ3RoO0UhPW51bGwmJkItLTtmb3IodmFyIEY9MCx6PVAubGVuZ3RoLCQsVT13LmdldEVkZ2VzQmV0d2VlbihFKTtVLmxlbmd0aD4xOyl7dmFyIEs9VVswXTtVLnNwbGljZSgwLDEpO3ZhciBlZT1QLmluZGV4T2YoSyk7ZWU+PTAmJlAuc3BsaWNlKGVlLDEpLHotLSxCLS19RSE9bnVsbD8kPShQLmluZGV4T2YoVVswXSkrMSklejokPTA7Zm9yKHZhciBZPU1hdGguYWJzKEMtXykvQixjZT0kO0YhPUI7Y2U9KytjZSV6KXt2YXIgWj1QW2NlXS5nZXRPdGhlckVuZCh3KTtpZihaIT1FKXt2YXIgdWU9KF8rRipZKSUzNjAsUT0odWUrWSklMzYwO1QuYnJhbmNoUmFkaWFsTGF5b3V0KFosdyx1ZSxRLEQrTyxPKSxGKyt9fX0sVC5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbih3KXtmb3IodmFyIEU9eS5NSU5fVkFMVUUsXz0wO188dy5sZW5ndGg7XysrKXt2YXIgQz13W19dLEQ9Qy5nZXREaWFnb25hbCgpO0Q+RSYmKEU9RCl9cmV0dXJuIEV9LFQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAyKih0aGlzLmxldmVsKzEpKnRoaXMuaWRlYWxFZGdlTGVuZ3RofSxULnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcyxFPXt9O3RoaXMubWVtYmVyR3JvdXBzPXt9LHRoaXMuaWRUb0R1bW15Tm9kZT17fTtmb3IodmFyIF89W10sQz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEQ9MDtEPEMubGVuZ3RoO0QrKyl7dmFyIE89Q1tEXSxSPU8uZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKE8pPT09MCYmKFIuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChSKSkmJl8ucHVzaChPKX1mb3IodmFyIEQ9MDtEPF8ubGVuZ3RoO0QrKyl7dmFyIE89X1tEXSxrPU8uZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIEVba10+InUiJiYoRVtrXT1bXSksRVtrXT1FW2tdLmNvbmNhdChPKX1PYmplY3Qua2V5cyhFKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe2lmKEVbTF0ubGVuZ3RoPjEpe3ZhciBBPSJEdW1teUNvbXBvdW5kXyIrTDt3Lm1lbWJlckdyb3Vwc1tBXT1FW0xdO3ZhciBJPUVbTF1bMF0uZ2V0UGFyZW50KCksTT1uZXcgbCh3LmdyYXBoTWFuYWdlcik7TS5pZD1BLE0ucGFkZGluZ0xlZnQ9SS5wYWRkaW5nTGVmdHx8MCxNLnBhZGRpbmdSaWdodD1JLnBhZGRpbmdSaWdodHx8MCxNLnBhZGRpbmdCb3R0b209SS5wYWRkaW5nQm90dG9tfHwwLE0ucGFkZGluZ1RvcD1JLnBhZGRpbmdUb3B8fDAsdy5pZFRvRHVtbXlOb2RlW0FdPU07dmFyIFA9dy5nZXRHcmFwaE1hbmFnZXIoKS5hZGQody5uZXdHcmFwaCgpLE0pLEI9SS5nZXRDaGlsZCgpO0IuYWRkKE0pO2Zvcih2YXIgRj0wO0Y8RVtMXS5sZW5ndGg7RisrKXt2YXIgej1FW0xdW0ZdO0IucmVtb3ZlKHopLFAuYWRkKHopfX19KX0sVC5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdz17fSxFPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBfPTA7Xzx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO18rKylFW3RoaXMuY29tcG91bmRPcmRlcltfXS5pZF09dGhpcy5jb21wb3VuZE9yZGVyW19dLHdbdGhpcy5jb21wb3VuZE9yZGVyW19dLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW19dLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltfXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbX10uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKHcsRSl9LFQucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLEU9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrPVtdO09iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe3ZhciBDPXcuaWRUb0R1bW15Tm9kZVtfXTtFW19dPXcudGlsZU5vZGVzKHcubWVtYmVyR3JvdXBzW19dLEMucGFkZGluZ0xlZnQrQy5wYWRkaW5nUmlnaHQpLEMucmVjdC53aWR0aD1FW19dLndpZHRoLEMucmVjdC5oZWlnaHQ9RVtfXS5oZWlnaHR9KX0sVC5wcm90b3R5cGUucmVwb3B1bGF0ZUNvbXBvdW5kcz1mdW5jdGlvbigpe2Zvcih2YXIgdz10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7dz49MDt3LS0pe3ZhciBFPXRoaXMuY29tcG91bmRPcmRlclt3XSxfPUUuaWQsQz1FLnBhZGRpbmdMZWZ0LEQ9RS5wYWRkaW5nVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW19dLEUucmVjdC54LEUucmVjdC55LEMsRCl9fSxULnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLEU9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrO09iamVjdC5rZXlzKEUpLmZvckVhY2goZnVuY3Rpb24oXyl7dmFyIEM9dy5pZFRvRHVtbXlOb2RlW19dLEQ9Qy5wYWRkaW5nTGVmdCxPPUMucGFkZGluZ1RvcDt3LmFkanVzdExvY2F0aW9ucyhFW19dLEMucmVjdC54LEMucmVjdC55LEQsTyl9KX0sVC5wcm90b3R5cGUuZ2V0VG9CZVRpbGVkPWZ1bmN0aW9uKHcpe3ZhciBFPXcuaWQ7aWYodGhpcy50b0JlVGlsZWRbRV0hPW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdO3ZhciBfPXcuZ2V0Q2hpbGQoKTtpZihfPT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMSwhMTtmb3IodmFyIEM9Xy5nZXROb2RlcygpLEQ9MDtEPEMubGVuZ3RoO0QrKyl7dmFyIE89Q1tEXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoTyk+MClyZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITEsITE7aWYoTy5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFtPLmlkXT0hMTtjb250aW51ZX1pZighdGhpcy5nZXRUb0JlVGlsZWQoTykpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMCwhMH0sVC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZT1mdW5jdGlvbih3KXtmb3IodmFyIEU9dy5pZCxfPXcuZ2V0RWRnZXMoKSxDPTAsRD0wO0Q8Xy5sZW5ndGg7RCsrKXt2YXIgTz1fW0RdO08uZ2V0U291cmNlKCkuaWQhPT1PLmdldFRhcmdldCgpLmlkJiYoQz1DKzEpfXJldHVybiBDfSxULnByb3RvdHlwZS5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuPWZ1bmN0aW9uKHcpe3ZhciBFPXRoaXMuZ2V0Tm9kZURlZ3JlZSh3KTtpZih3LmdldENoaWxkKCk9PW51bGwpcmV0dXJuIEU7Zm9yKHZhciBfPXcuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLEM9MDtDPF8ubGVuZ3RoO0MrKyl7dmFyIEQ9X1tDXTtFKz10aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oRCl9cmV0dXJuIEV9LFQucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0sVC5wcm90b3R5cGUuZmlsbENvbXBleE9yZGVyQnlERlM9ZnVuY3Rpb24odyl7Zm9yKHZhciBFPTA7RTx3Lmxlbmd0aDtFKyspe3ZhciBfPXdbRV07Xy5nZXRDaGlsZCgpIT1udWxsJiZ0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKF8uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdldFRvQmVUaWxlZChfKSYmdGhpcy5jb21wb3VuZE9yZGVyLnB1c2goXyl9fSxULnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24odyxFLF8sQyxEKXtFKz1DLF8rPUQ7Zm9yKHZhciBPPUUsUj0wO1I8dy5yb3dzLmxlbmd0aDtSKyspe3ZhciBrPXcucm93c1tSXTtFPU87Zm9yKHZhciBMPTAsQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgST1rW0FdO0kucmVjdC54PUUsSS5yZWN0Lnk9XyxFKz1JLnJlY3Qud2lkdGgrdy5ob3Jpem9udGFsUGFkZGluZyxJLnJlY3QuaGVpZ2h0PkwmJihMPUkucmVjdC5oZWlnaHQpfV8rPUwrdy52ZXJ0aWNhbFBhZGRpbmd9fSxULnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKHcsRSl7dmFyIF89dGhpczt0aGlzLnRpbGVkTWVtYmVyUGFjaz1bXSxPYmplY3Qua2V5cyh3KS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUVbQ107Xy50aWxlZE1lbWJlclBhY2tbQ109Xy50aWxlTm9kZXMod1tDXSxELnBhZGRpbmdMZWZ0K0QucGFkZGluZ1JpZ2h0KSxELnJlY3Qud2lkdGg9Xy50aWxlZE1lbWJlclBhY2tbQ10ud2lkdGgsRC5yZWN0LmhlaWdodD1fLnRpbGVkTWVtYmVyUGFja1tDXS5oZWlnaHR9KX0sVC5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKHcsRSl7dmFyIF89aC5USUxJTkdfUEFERElOR19WRVJUSUNBTCxDPWguVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxEPXtyb3dzOltdLHJvd1dpZHRoOltdLHJvd0hlaWdodDpbXSx3aWR0aDowLGhlaWdodDpFLHZlcnRpY2FsUGFkZGluZzpfLGhvcml6b250YWxQYWRkaW5nOkN9O3cuc29ydChmdW5jdGlvbihrLEwpe3JldHVybiBrLnJlY3Qud2lkdGgqay5yZWN0LmhlaWdodD5MLnJlY3Qud2lkdGgqTC5yZWN0LmhlaWdodD8tMTprLnJlY3Qud2lkdGgqay5yZWN0LmhlaWdodDxMLnJlY3Qud2lkdGgqTC5yZWN0LmhlaWdodD8xOjB9KTtmb3IodmFyIE89MDtPPHcubGVuZ3RoO08rKyl7dmFyIFI9d1tPXTtELnJvd3MubGVuZ3RoPT0wP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KEQsUiwwLEUpOnRoaXMuY2FuQWRkSG9yaXpvbnRhbChELFIucmVjdC53aWR0aCxSLnJlY3QuaGVpZ2h0KT90aGlzLmluc2VydE5vZGVUb1JvdyhELFIsdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KEQpLEUpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KEQsUixELnJvd3MubGVuZ3RoLEUpLHRoaXMuc2hpZnRUb0xhc3RSb3coRCl9cmV0dXJuIER9LFQucHJvdG90eXBlLmluc2VydE5vZGVUb1Jvdz1mdW5jdGlvbih3LEUsXyxDKXt2YXIgRD1DO2lmKF89PXcucm93cy5sZW5ndGgpe3ZhciBPPVtdO3cucm93cy5wdXNoKE8pLHcucm93V2lkdGgucHVzaChEKSx3LnJvd0hlaWdodC5wdXNoKDApfXZhciBSPXcucm93V2lkdGhbX10rRS5yZWN0LndpZHRoO3cucm93c1tfXS5sZW5ndGg+MCYmKFIrPXcuaG9yaXpvbnRhbFBhZGRpbmcpLHcucm93V2lkdGhbX109Uix3LndpZHRoPFImJih3LndpZHRoPVIpO3ZhciBrPUUucmVjdC5oZWlnaHQ7Xz4wJiYoays9dy52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBMPTA7az53LnJvd0hlaWdodFtfXSYmKEw9dy5yb3dIZWlnaHRbX10sdy5yb3dIZWlnaHRbX109ayxMPXcucm93SGVpZ2h0W19dLUwpLHcuaGVpZ2h0Kz1MLHcucm93c1tfXS5wdXNoKEUpfSxULnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4PWZ1bmN0aW9uKHcpe2Zvcih2YXIgRT0tMSxfPU51bWJlci5NQVhfVkFMVUUsQz0wO0M8dy5yb3dzLmxlbmd0aDtDKyspdy5yb3dXaWR0aFtDXTxfJiYoRT1DLF89dy5yb3dXaWR0aFtDXSk7cmV0dXJuIEV9LFQucHJvdG90eXBlLmdldExvbmdlc3RSb3dJbmRleD1mdW5jdGlvbih3KXtmb3IodmFyIEU9LTEsXz1OdW1iZXIuTUlOX1ZBTFVFLEM9MDtDPHcucm93cy5sZW5ndGg7QysrKXcucm93V2lkdGhbQ10+XyYmKEU9QyxfPXcucm93V2lkdGhbQ10pO3JldHVybiBFfSxULnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKHcsRSxfKXt2YXIgQz10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgodyk7aWYoQzwwKXJldHVybiEwO3ZhciBEPXcucm93V2lkdGhbQ107aWYoRCt3Lmhvcml6b250YWxQYWRkaW5nK0U8PXcud2lkdGgpcmV0dXJuITA7dmFyIE89MDt3LnJvd0hlaWdodFtDXTxfJiZDPjAmJihPPV8rdy52ZXJ0aWNhbFBhZGRpbmctdy5yb3dIZWlnaHRbQ10pO3ZhciBSO3cud2lkdGgtRD49RSt3Lmhvcml6b250YWxQYWRkaW5nP1I9KHcuaGVpZ2h0K08pLyhEK0Urdy5ob3Jpem9udGFsUGFkZGluZyk6Uj0ody5oZWlnaHQrTykvdy53aWR0aCxPPV8rdy52ZXJ0aWNhbFBhZGRpbmc7dmFyIGs7cmV0dXJuIHcud2lkdGg8RT9rPSh3LmhlaWdodCtPKS9FOms9KHcuaGVpZ2h0K08pL3cud2lkdGgsazwxJiYoaz0xL2spLFI8MSYmKFI9MS9SKSxSPGt9LFQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKHcpe3ZhciBFPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KHcpLF89dy5yb3dXaWR0aC5sZW5ndGgtMSxDPXcucm93c1tFXSxEPUNbQy5sZW5ndGgtMV0sTz1ELndpZHRoK3cuaG9yaXpvbnRhbFBhZGRpbmc7aWYody53aWR0aC13LnJvd1dpZHRoW19dPk8mJkUhPV8pe0Muc3BsaWNlKC0xLDEpLHcucm93c1tfXS5wdXNoKEQpLHcucm93V2lkdGhbRV09dy5yb3dXaWR0aFtFXS1PLHcucm93V2lkdGhbX109dy5yb3dXaWR0aFtfXStPLHcud2lkdGg9dy5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgodyldO2Zvcih2YXIgUj1OdW1iZXIuTUlOX1ZBTFVFLGs9MDtrPEMubGVuZ3RoO2srKylDW2tdLmhlaWdodD5SJiYoUj1DW2tdLmhlaWdodCk7RT4wJiYoUis9dy52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBMPXcucm93SGVpZ2h0W0VdK3cucm93SGVpZ2h0W19dO3cucm93SGVpZ2h0W0VdPVIsdy5yb3dIZWlnaHRbX108RC5oZWlnaHQrdy52ZXJ0aWNhbFBhZGRpbmcmJih3LnJvd0hlaWdodFtfXT1ELmhlaWdodCt3LnZlcnRpY2FsUGFkZGluZyk7dmFyIEE9dy5yb3dIZWlnaHRbRV0rdy5yb3dIZWlnaHRbX107dy5oZWlnaHQrPUEtTCx0aGlzLnNoaWZ0VG9MYXN0Um93KHcpfX0sVC5wcm90b3R5cGUudGlsaW5nUHJlTGF5b3V0PWZ1bmN0aW9uKCl7aC5USUxFJiYodGhpcy5ncm91cFplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5jbGVhckNvbXBvdW5kcygpLHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpKX0sVC5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe2guVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSxULnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgdz1bXSxFPSEwLF87RTspe3ZhciBDPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksRD1bXTtFPSExO2Zvcih2YXIgTz0wO088Qy5sZW5ndGg7TysrKV89Q1tPXSxfLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhXy5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmXy5nZXRDaGlsZCgpPT1udWxsJiYoRC5wdXNoKFtfLF8uZ2V0RWRnZXMoKVswXSxfLmdldE93bmVyKCldKSxFPSEwKTtpZihFPT0hMCl7Zm9yKHZhciBSPVtdLGs9MDtrPEQubGVuZ3RoO2srKylEW2tdWzBdLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYoUi5wdXNoKERba10pLERba11bMF0uZ2V0T3duZXIoKS5yZW1vdmUoRFtrXVswXSkpO3cucHVzaChSKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPXd9LFQucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgRT13Lmxlbmd0aCxfPXdbRS0xXSxDLEQ9MDtEPF8ubGVuZ3RoO0QrKylDPV9bRF0sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKEMpLENbMl0uYWRkKENbMF0pLENbMl0uYWRkKENbMV0sQ1sxXS5zb3VyY2UsQ1sxXS50YXJnZXQpO3cuc3BsaWNlKHcubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sVC5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZT1mdW5jdGlvbih3KXt2YXIgRSxfLEM9d1swXTtDPT13WzFdLnNvdXJjZT9fPXdbMV0udGFyZ2V0Ol89d1sxXS5zb3VyY2U7dmFyIEQ9Xy5zdGFydFgsTz1fLmZpbmlzaFgsUj1fLnN0YXJ0WSxrPV8uZmluaXNoWSxMPTAsQT0wLEk9MCxNPTAsUD1bTCxJLEEsTV07aWYoUj4wKWZvcih2YXIgQj1EO0I8PU87QisrKVBbMF0rPXRoaXMuZ3JpZFtCXVtSLTFdLmxlbmd0aCt0aGlzLmdyaWRbQl1bUl0ubGVuZ3RoLTE7aWYoTzx0aGlzLmdyaWQubGVuZ3RoLTEpZm9yKHZhciBCPVI7Qjw9aztCKyspUFsxXSs9dGhpcy5ncmlkW08rMV1bQl0ubGVuZ3RoK3RoaXMuZ3JpZFtPXVtCXS5sZW5ndGgtMTtpZihrPHRoaXMuZ3JpZFswXS5sZW5ndGgtMSlmb3IodmFyIEI9RDtCPD1PO0IrKylQWzJdKz10aGlzLmdyaWRbQl1baysxXS5sZW5ndGgrdGhpcy5ncmlkW0JdW2tdLmxlbmd0aC0xO2lmKEQ+MClmb3IodmFyIEI9UjtCPD1rO0IrKylQWzNdKz10aGlzLmdyaWRbRC0xXVtCXS5sZW5ndGgrdGhpcy5ncmlkW0RdW0JdLmxlbmd0aC0xO2Zvcih2YXIgRj15Lk1BWF9WQUxVRSx6LCQsVT0wO1U8UC5sZW5ndGg7VSsrKVBbVV08Rj8oRj1QW1VdLHo9MSwkPVUpOlBbVV09PUYmJnorKztpZih6PT0zJiZGPT0wKVBbMF09PTAmJlBbMV09PTAmJlBbMl09PTA/RT0xOlBbMF09PTAmJlBbMV09PTAmJlBbM109PTA/RT0wOlBbMF09PTAmJlBbMl09PTAmJlBbM109PTA/RT0zOlBbMV09PTAmJlBbMl09PTAmJlBbM109PTAmJihFPTIpO2Vsc2UgaWYoej09MiYmRj09MCl7dmFyIEs9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIpO1BbMF09PTAmJlBbMV09PTA/Sz09MD9FPTA6RT0xOlBbMF09PTAmJlBbMl09PTA/Sz09MD9FPTA6RT0yOlBbMF09PTAmJlBbM109PTA/Sz09MD9FPTA6RT0zOlBbMV09PTAmJlBbMl09PTA/Sz09MD9FPTE6RT0yOlBbMV09PTAmJlBbM109PTA/Sz09MD9FPTE6RT0zOks9PTA/RT0yOkU9M31lbHNlIGlmKHo9PTQmJkY9PTApe3ZhciBLPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTtFPUt9ZWxzZSBFPSQ7RT09MD9DLnNldENlbnRlcihfLmdldENlbnRlclgoKSxfLmdldENlbnRlclkoKS1fLmdldEhlaWdodCgpLzItZi5ERUZBVUxUX0VER0VfTEVOR1RILUMuZ2V0SGVpZ2h0KCkvMik6RT09MT9DLnNldENlbnRlcihfLmdldENlbnRlclgoKStfLmdldFdpZHRoKCkvMitmLkRFRkFVTFRfRURHRV9MRU5HVEgrQy5nZXRXaWR0aCgpLzIsXy5nZXRDZW50ZXJZKCkpOkU9PTI/Qy5zZXRDZW50ZXIoXy5nZXRDZW50ZXJYKCksXy5nZXRDZW50ZXJZKCkrXy5nZXRIZWlnaHQoKS8yK2YuREVGQVVMVF9FREdFX0xFTkdUSCtDLmdldEhlaWdodCgpLzIpOkMuc2V0Q2VudGVyKF8uZ2V0Q2VudGVyWCgpLV8uZ2V0V2lkdGgoKS8yLWYuREVGQVVMVF9FREdFX0xFTkdUSC1DLmdldFdpZHRoKCkvMixfLmdldENlbnRlclkoKSl9LGUuZXhwb3J0cz1UfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPXt9O2kubGF5b3V0QmFzZT1uKDApLGkuQ29TRUNvbnN0YW50cz1uKDEpLGkuQ29TRUVkZ2U9bigyKSxpLkNvU0VHcmFwaD1uKDMpLGkuQ29TRUdyYXBoTWFuYWdlcj1uKDQpLGkuQ29TRUxheW91dD1uKDYpLGkuQ29TRU5vZGU9big1KSxlLmV4cG9ydHM9aX1dKX0pfSk7dmFyIFExZT1QaSgoazQsZkYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgazQ9PSJvYmplY3QiJiZ0eXBlb2YgZkY9PSJvYmplY3QiP2ZGLmV4cG9ydHM9cihoRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImNvc2UtYmFzZSJdLHIpOnR5cGVvZiBrND09Im9iamVjdCI/azQuY3l0b3NjYXBlQ29zZUJpbGtlbnQ9cihoRigpKTplLmN5dG9zY2FwZUNvc2VCaWxrZW50PXIoZS5jb3NlQmFzZSl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKGs0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj17fTtmdW5jdGlvbiBuKGkpe2lmKHJbaV0pcmV0dXJuIHJbaV0uZXhwb3J0czt2YXIgYT1yW2ldPXtpLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChhLmV4cG9ydHMsYSxhLmV4cG9ydHMsbiksYS5sPSEwLGEuZXhwb3J0c31yZXR1cm4gbyhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksbi5tPWUsbi5jPXIsbi5pPWZ1bmN0aW9uKGkpe3JldHVybiBpfSxuLmQ9ZnVuY3Rpb24oaSxhLHMpe24ubyhpLGEpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6c30pfSxuLm49ZnVuY3Rpb24oaSl7dmFyIGE9aSYmaS5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gaX0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gbi5kKGEsImEiLGEpLGF9LG4ubz1mdW5jdGlvbihpLGEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKX0sbi5wPSIiLG4obi5zPTEpfShbZnVuY3Rpb24oZSxyKXtlLmV4cG9ydHM9dH0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzLGE9bigwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLHM9bigwKS5Db1NFQ29uc3RhbnRzLGw9bigwKS5Db1NFTGF5b3V0LHU9bigwKS5Db1NFTm9kZSxoPW4oMCkubGF5b3V0QmFzZS5Qb2ludEQsZj1uKDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxkPXtyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIikscXVhbGl0eToiZGVmYXVsdCIsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJlZnJlc2g6MzAsZml0OiEwLHBhZGRpbmc6MTAscmFuZG9taXplOiEwLG5vZGVSZXB1bHNpb246NDUwMCxpZGVhbEVkZ2VMZW5ndGg6NTAsZWRnZUVsYXN0aWNpdHk6LjQ1LG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsYW5pbWF0ZToiZW5kIixhbmltYXRpb25EdXJhdGlvbjo1MDAsdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOjEwLHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOjEwLGdyYXZpdHlSYW5nZUNvbXBvdW5kOjEuNSxncmF2aXR5Q29tcG91bmQ6MSxncmF2aXR5UmFuZ2U6My44LGluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsOi41fTtmdW5jdGlvbiBwKHYseCl7dmFyIGI9e307Zm9yKHZhciBUIGluIHYpYltUXT12W1RdO2Zvcih2YXIgVCBpbiB4KWJbVF09eFtUXTtyZXR1cm4gYn1vKHAsImV4dGVuZCIpO2Z1bmN0aW9uIG0odil7dGhpcy5vcHRpb25zPXAoZCx2KSxnKHRoaXMub3B0aW9ucyl9byhtLCJfQ29TRUxheW91dCIpO3ZhciBnPW8oZnVuY3Rpb24oeCl7eC5ub2RlUmVwdWxzaW9uIT1udWxsJiYocy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD1hLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPXgubm9kZVJlcHVsc2lvbikseC5pZGVhbEVkZ2VMZW5ndGghPW51bGwmJihzLkRFRkFVTFRfRURHRV9MRU5HVEg9YS5ERUZBVUxUX0VER0VfTEVOR1RIPXguaWRlYWxFZGdlTGVuZ3RoKSx4LmVkZ2VFbGFzdGljaXR5IT1udWxsJiYocy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1hLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPXguZWRnZUVsYXN0aWNpdHkpLHgubmVzdGluZ0ZhY3RvciE9bnVsbCYmKHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1hLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9eC5uZXN0aW5nRmFjdG9yKSx4LmdyYXZpdHkhPW51bGwmJihzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD1hLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD14LmdyYXZpdHkpLHgubnVtSXRlciE9bnVsbCYmKHMuTUFYX0lURVJBVElPTlM9YS5NQVhfSVRFUkFUSU9OUz14Lm51bUl0ZXIpLHguZ3Jhdml0eVJhbmdlIT1udWxsJiYocy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWEuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj14LmdyYXZpdHlSYW5nZSkseC5ncmF2aXR5Q29tcG91bmQhPW51bGwmJihzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD14LmdyYXZpdHlDb21wb3VuZCkseC5ncmF2aXR5UmFuZ2VDb21wb3VuZCE9bnVsbCYmKHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eC5ncmF2aXR5UmFuZ2VDb21wb3VuZCkseC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCE9bnVsbCYmKHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9eC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCkseC5xdWFsaXR5PT0iZHJhZnQiP2kuUVVBTElUWT0wOngucXVhbGl0eT09InByb29mIj9pLlFVQUxJVFk9MjppLlFVQUxJVFk9MSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1hLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1pLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz14Lm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyxzLkRFRkFVTFRfSU5DUkVNRU5UQUw9YS5ERUZBVUxUX0lOQ1JFTUVOVEFMPWkuREVGQVVMVF9JTkNSRU1FTlRBTD0heC5yYW5kb21pemUscy5BTklNQVRFPWEuQU5JTUFURT1pLkFOSU1BVEU9eC5hbmltYXRlLHMuVElMRT14LnRpbGUscy5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgeC50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/eC50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOngudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgeC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj94LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTp4LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsfSwiZ2V0VXNlck9wdGlvbnMiKTttLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdix4LGI9dGhpcy5vcHRpb25zLFQ9dGhpcy5pZFRvTE5vZGU9e30sUz10aGlzLmxheW91dD1uZXcgbCx3PXRoaXM7dy5zdG9wcGVkPSExLHRoaXMuY3k9dGhpcy5vcHRpb25zLmN5LHRoaXMuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp0aGlzfSk7dmFyIEU9Uy5uZXdHcmFwaE1hbmFnZXIoKTt0aGlzLmdtPUU7dmFyIF89dGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKSxDPXRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCk7dGhpcy5yb290PUUuYWRkUm9vdCgpLHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsdGhpcy5nZXRUb3BNb3N0Tm9kZXMoXyksUyk7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDtEKyspe3ZhciBPPUNbRF0sUj10aGlzLmlkVG9MTm9kZVtPLmRhdGEoInNvdXJjZSIpXSxrPXRoaXMuaWRUb0xOb2RlW08uZGF0YSgidGFyZ2V0IildO2lmKFIhPT1rJiZSLmdldEVkZ2VzQmV0d2VlbihrKS5sZW5ndGg9PTApe3ZhciBMPUUuYWRkKFMubmV3RWRnZSgpLFIsayk7TC5pZD1PLmlkKCl9fXZhciBBPW8oZnVuY3Rpb24oUCxCKXt0eXBlb2YgUD09Im51bWJlciImJihQPUIpO3ZhciBGPVAuZGF0YSgiaWQiKSx6PXcuaWRUb0xOb2RlW0ZdO3JldHVybnt4OnouZ2V0UmVjdCgpLmdldENlbnRlclgoKSx5OnouZ2V0UmVjdCgpLmdldENlbnRlclkoKX19LCJnZXRQb3NpdGlvbnMiKSxJPW8oZnVuY3Rpb24gTSgpe2Zvcih2YXIgUD1vKGZ1bmN0aW9uKCl7Yi5maXQmJmIuY3kuZml0KGIuZWxlcyxiLnBhZGRpbmcpLHZ8fCh2PSEwLHcuY3kub25lKCJsYXlvdXRyZWFkeSIsYi5yZWFkeSksdy5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0Ond9KSl9LCJhZnRlclJlcG9zaXRpb24iKSxCPXcub3B0aW9ucy5yZWZyZXNoLEYsej0wO3o8QiYmIUY7eisrKUY9dy5zdG9wcGVkfHx3LmxheW91dC50aWNrKCk7aWYoRil7Uy5jaGVja0xheW91dFN1Y2Nlc3MoKSYmIVMuaXNTdWJMYXlvdXQmJlMuZG9Qb3N0TGF5b3V0KCksUy50aWxpbmdQb3N0TGF5b3V0JiZTLnRpbGluZ1Bvc3RMYXlvdXQoKSxTLmlzTGF5b3V0RmluaXNoZWQ9ITAsdy5vcHRpb25zLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoQSksUCgpLHcuY3kub25lKCJsYXlvdXRzdG9wIix3Lm9wdGlvbnMuc3RvcCksdy5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6d30pLHgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHgpLHY9ITE7cmV0dXJufXZhciAkPXcubGF5b3V0LmdldFBvc2l0aW9uc0RhdGEoKTtiLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oVSxLKXtpZih0eXBlb2YgVT09Im51bWJlciImJihVPUspLCFVLmlzUGFyZW50KCkpe2Zvcih2YXIgZWU9VS5pZCgpLFk9JFtlZV0sY2U9VTtZPT1udWxsJiYoWT0kW2NlLmRhdGEoInBhcmVudCIpXXx8JFsiRHVtbXlDb21wb3VuZF8iK2NlLmRhdGEoInBhcmVudCIpXSwkW2VlXT1ZLGNlPWNlLnBhcmVudCgpWzBdLGNlIT1udWxsKTspO3JldHVybiBZIT1udWxsP3t4OlkueCx5OlkueX06e3g6VS5wb3NpdGlvbigieCIpLHk6VS5wb3NpdGlvbigieSIpfX19KSxQKCkseD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTSl9LCJpdGVyYXRlQW5pbWF0ZWQiKTtyZXR1cm4gUy5hZGRMaXN0ZW5lcigibGF5b3V0c3RhcnRlZCIsZnVuY3Rpb24oKXt3Lm9wdGlvbnMuYW5pbWF0ZT09PSJkdXJpbmciJiYoeD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoSSkpfSksUy5ydW5MYXlvdXQoKSx0aGlzLm9wdGlvbnMuYW5pbWF0ZSE9PSJkdXJpbmciJiYody5vcHRpb25zLmVsZXMubm9kZXMoKS5ub3QoIjpwYXJlbnQiKS5sYXlvdXRQb3NpdGlvbnModyx3Lm9wdGlvbnMsQSksdj0hMSksdGhpc30sbS5wcm90b3R5cGUuZ2V0VG9wTW9zdE5vZGVzPWZ1bmN0aW9uKHYpe2Zvcih2YXIgeD17fSxiPTA7Yjx2Lmxlbmd0aDtiKyspeFt2W2JdLmlkKCldPSEwO3ZhciBUPXYuZmlsdGVyKGZ1bmN0aW9uKFMsdyl7dHlwZW9mIFM9PSJudW1iZXIiJiYoUz13KTtmb3IodmFyIEU9Uy5wYXJlbnQoKVswXTtFIT1udWxsOyl7aWYoeFtFLmlkKCldKXJldHVybiExO0U9RS5wYXJlbnQoKVswXX1yZXR1cm4hMH0pO3JldHVybiBUfSxtLnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW5MaXN0PWZ1bmN0aW9uKHYseCxiKXtmb3IodmFyIFQ9eC5sZW5ndGgsUz0wO1M8VDtTKyspe3ZhciB3PXhbU10sRT13LmNoaWxkcmVuKCksXyxDPXcubGF5b3V0RGltZW5zaW9ucyh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOnRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZih3Lm91dGVyV2lkdGgoKSE9bnVsbCYmdy5vdXRlckhlaWdodCgpIT1udWxsP189di5hZGQobmV3IHUoYi5ncmFwaE1hbmFnZXIsbmV3IGgody5wb3NpdGlvbigieCIpLUMudy8yLHcucG9zaXRpb24oInkiKS1DLmgvMiksbmV3IGYocGFyc2VGbG9hdChDLncpLHBhcnNlRmxvYXQoQy5oKSkpKTpfPXYuYWRkKG5ldyB1KHRoaXMuZ3JhcGhNYW5hZ2VyKSksXy5pZD13LmRhdGEoImlkIiksXy5wYWRkaW5nTGVmdD1wYXJzZUludCh3LmNzcygicGFkZGluZyIpKSxfLnBhZGRpbmdUb3A9cGFyc2VJbnQody5jc3MoInBhZGRpbmciKSksXy5wYWRkaW5nUmlnaHQ9cGFyc2VJbnQody5jc3MoInBhZGRpbmciKSksXy5wYWRkaW5nQm90dG9tPXBhcnNlSW50KHcuY3NzKCJwYWRkaW5nIikpLHRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJncuaXNQYXJlbnQoKSl7dmFyIEQ9dy5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS53LE89dy5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS5oLFI9dy5jc3MoInRleHQtaGFsaWduIik7Xy5sYWJlbFdpZHRoPUQsXy5sYWJlbEhlaWdodD1PLF8ubGFiZWxQb3M9Un1pZih0aGlzLmlkVG9MTm9kZVt3LmRhdGEoImlkIildPV8saXNOYU4oXy5yZWN0LngpJiYoXy5yZWN0Lng9MCksaXNOYU4oXy5yZWN0LnkpJiYoXy5yZWN0Lnk9MCksRSE9bnVsbCYmRS5sZW5ndGg+MCl7dmFyIGs7az1iLmdldEdyYXBoTWFuYWdlcigpLmFkZChiLm5ld0dyYXBoKCksXyksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KGssRSxiKX19fSxtLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzfTt2YXIgeT1vKGZ1bmN0aW9uKHgpe3goImxheW91dCIsImNvc2UtYmlsa2VudCIsbSl9LCJyZWdpc3RlciIpO3R5cGVvZiBjeXRvc2NhcGU8InUiJiZ5KGN5dG9zY2FwZSksZS5leHBvcnRzPXl9XSl9KX0pO2Z1bmN0aW9uIHhldCh0LGUscixuLGkpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueCsiLCIrYS55fSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS53aWR0aC1lKS8yKyIsICIrcisiKSIpfXZhciBkZXQscGV0LG1ldCxnZXQseWV0LHZldCxiZXQsVGV0LFoxZSxKMWUsZXllPU4oKCk9PnsidXNlIHN0cmljdCI7YW8oKTtlcigpO2RldD0xMixwZXQ9byhmdW5jdGlvbih0LGUscixuKXtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiZCIsYE0wICR7ci5oZWlnaHQtNX0gdiR7LXIuaGVpZ2h0KzIqNX0gcTAsLTUgNSwtNSBoJHtyLndpZHRoLTIqNX0gcTUsMCA1LDUgdiR7ci5oZWlnaHQtNX0gSDAgWmApLGUuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJub2RlLWxpbmUtIituKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLHIuaGVpZ2h0KS5hdHRyKCJ4MiIsci53aWR0aCkuYXR0cigieTIiLHIuaGVpZ2h0KX0sImRlZmF1bHRCa2ciKSxtZXQ9byhmdW5jdGlvbih0LGUscil7ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIityLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIit0LnR5cGUyU3RyKHIudHlwZSkpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpLmF0dHIoIndpZHRoIixyLndpZHRoKX0sInJlY3RCa2ciKSxnZXQ9byhmdW5jdGlvbih0LGUscil7bGV0IG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9LjE1Km4scz0uMjUqbixsPS4zNSpuLHU9LjIqbjtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiZCIsYE0wIDAgYSR7YX0sJHthfSAwIDAsMSAke24qLjI1fSwkey0xKm4qLjF9CiAgICAgIGEke2x9LCR7bH0gMSAwLDEgJHtuKi40fSwkey0xKm4qLjF9CiAgICAgIGEke3N9LCR7c30gMSAwLDEgJHtuKi4zNX0sJHsxKm4qLjJ9CgogICAgICBhJHthfSwke2F9IDEgMCwxICR7biouMTV9LCR7MSppKi4zNX0KICAgICAgYSR7dX0sJHt1fSAxIDAsMSAkey0xKm4qLjE1fSwkezEqaSouNjV9CgogICAgICBhJHtzfSwke2F9IDEgMCwxICR7LTEqbiouMjV9LCR7biouMTV9CiAgICAgIGEke2x9LCR7bH0gMSAwLDEgJHstMSpuKi41fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDEgJHstMSpuKi4yNX0sJHstMSpuKi4xNX0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDEgJHstMSpuKi4xfSwkey0xKmkqLjM1fQogICAgICBhJHt1fSwke3V9IDEgMCwxICR7biouMX0sJHstMSppKi42NX0KCiAgICBIMCBWMCBaYCl9LCJjbG91ZEJrZyIpLHlldD1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0uMTUqbjtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiZCIsYE0wIDAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwkey0xKmkqLjF9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwkezEqaSouMX0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4xNX0sJHsxKmkqLjMzfQogICAgICBhJHthKi44fSwke2EqLjh9IDEgMCwwIDAsJHsxKmkqLjM0fQogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMTV9LCR7MSppKi4zM30KCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sJHtpKi4xNX0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMjV9LCR7LTEqaSouMTV9CgogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMX0sJHstMSppKi4zM30KICAgICAgYSR7YSouOH0sJHthKi44fSAxIDAsMCAwLCR7LTEqaSouMzR9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4xfSwkey0xKmkqLjMzfQoKICAgIEgwIFYwIFpgKX0sImJhbmdCa2ciKSx2ZXQ9byhmdW5jdGlvbih0LGUscil7ZS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiciIsci53aWR0aC8yKX0sImNpcmNsZUJrZyIpO28oeGV0LCJpbnNlcnRQb2x5Z29uU2hhcGUiKTtiZXQ9byhmdW5jdGlvbih0LGUscil7bGV0IG49ci5oZWlnaHQsYT1uLzQscz1yLndpZHRoLXIucGFkZGluZysyKmEsbD1be3g6YSx5OjB9LHt4OnMtYSx5OjB9LHt4OnMseTotbi8yfSx7eDpzLWEseTotbn0se3g6YSx5Oi1ufSx7eDowLHk6LW4vMn1dO3hldChlLHMsbixsLHIpfSwiaGV4YWdvbkJrZyIpLFRldD1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigicngiLHIucGFkZGluZykuYXR0cigicnkiLHIucGFkZGluZykuYXR0cigid2lkdGgiLHIud2lkdGgpfSwicm91bmRlZFJlY3RCa2ciKSxaMWU9byhhc3luYyBmdW5jdGlvbih0LGUscixuLGkpe2xldCBhPWkuaHRtbExhYmVscyxzPW4lKGRldC0xKSxsPWUuYXBwZW5kKCJnIik7ci5zZWN0aW9uPXM7bGV0IHU9InNlY3Rpb24tIitzO3M8MCYmKHUrPSIgc2VjdGlvbi1yb290IiksbC5hdHRyKCJjbGFzcyIsKHIuY2xhc3M/ci5jbGFzcysiICI6IiIpKyJtaW5kbWFwLW5vZGUgIit1KTtsZXQgaD1sLmFwcGVuZCgiZyIpLGY9bC5hcHBlbmQoImciKSxkPXIuZGVzY3IucmVwbGFjZSgvKDxiclwvKj4pL2csYApgKTthd2FpdCBxbihmLGQse3VzZUh0bWxMYWJlbHM6YSx3aWR0aDpyLndpZHRoLGNsYXNzZXM6Im1pbmRtYXAtbm9kZS1sYWJlbCJ9LGkpLGF8fGYuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7bGV0IHA9Zi5ub2RlKCkuZ2V0QkJveCgpLFttXT16byhpLmZvbnRTaXplKTtpZihyLmhlaWdodD1wLmhlaWdodCttKjEuMSouNStyLnBhZGRpbmcsci53aWR0aD1wLndpZHRoKzIqci5wYWRkaW5nLHIuaWNvbilpZihyLnR5cGU9PT10Lm5vZGVUeXBlLkNJUkNMRSlyLmhlaWdodCs9NTAsci53aWR0aCs9NTAsbC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJoZWlnaHQiLCI1MHB4IikuYXR0cigid2lkdGgiLHIud2lkdGgpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyOyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrcysiICIrci5pY29uKSxmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Iud2lkdGgvMisiLCAiKyhyLmhlaWdodC8yLTEuNSpyLnBhZGRpbmcpKyIpIik7ZWxzZXtyLndpZHRoKz01MDtsZXQgZz1yLmhlaWdodDtyLmhlaWdodD1NYXRoLm1heChnLDYwKTtsZXQgeT1NYXRoLmFicyhyLmhlaWdodC1nKTtsLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiNjBweCIpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi10b3A6Iit5LzIrInB4OyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrcysiICIrci5pY29uKSxmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygyNStyLndpZHRoLzIpKyIsICIrKHkvMityLnBhZGRpbmcvMikrIikiKX1lbHNlIGlmKGEpe2xldCBnPShyLndpZHRoLXAud2lkdGgpLzIseT0oci5oZWlnaHQtcC5oZWlnaHQpLzI7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitnKyIsICIreSsiKSIpfWVsc2V7bGV0IGc9ci53aWR0aC8yLHk9ci5wYWRkaW5nLzI7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitnKyIsICIreSsiKSIpfXN3aXRjaChyLnR5cGUpe2Nhc2UgdC5ub2RlVHlwZS5ERUZBVUxUOnBldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuUk9VTkRFRF9SRUNUOlRldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuUkVDVDptZXQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLkNJUkNMRTpoLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Iud2lkdGgvMisiLCAiKyArci5oZWlnaHQvMisiKSIpLHZldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuQ0xPVUQ6Z2V0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5CQU5HOnlldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuSEVYQUdPTjpiZXQodCxoLHIscyk7YnJlYWt9cmV0dXJuIHQuc2V0RWxlbWVudEZvcklkKHIuaWQsbCksci5oZWlnaHR9LCJkcmF3Tm9kZSIpLEoxZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5nZXRFbGVtZW50QnlJZChlLmlkKSxuPWUueHx8MCxpPWUueXx8MDtyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rIiwiK2krIikiKX0sInBvc2l0aW9uTm9kZSIpfSk7YXN5bmMgZnVuY3Rpb24gcnllKHQsZSxyLG4saSl7YXdhaXQgWjFlKHQsZSxyLG4saSksci5jaGlsZHJlbiYmYXdhaXQgUHJvbWlzZS5hbGwoci5jaGlsZHJlbi5tYXAoKGEscyk9PnJ5ZSh0LGUsYSxuPDA/czpuLGkpKSl9ZnVuY3Rpb24gd2V0KHQsZSl7ZS5lZGdlcygpLm1hcCgocixuKT0+e2xldCBpPXIuZGF0YSgpO2lmKHJbMF0uX3ByaXZhdGUuYm9keUJvdW5kcyl7bGV0IGE9clswXS5fcHJpdmF0ZS5yc2NyYXRjaDtYLnRyYWNlKCJFZGdlOiAiLG4saSksdC5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke2Euc3RhcnRYfSwke2Euc3RhcnRZfSBMICR7YS5taWRYfSwke2EubWlkWX0gTCR7YS5lbmRYfSwke2EuZW5kWX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK2kuc2VjdGlvbisiIGVkZ2UtZGVwdGgtIitpLmRlcHRoKX19KX1mdW5jdGlvbiBueWUodCxlLHIsbil7ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7aWQ6dC5pZC50b1N0cmluZygpLGxhYmVsVGV4dDp0LmRlc2NyLGhlaWdodDp0LmhlaWdodCx3aWR0aDp0LndpZHRoLGxldmVsOm4sbm9kZUlkOnQuaWQscGFkZGluZzp0LnBhZGRpbmcsdHlwZTp0LnR5cGV9LHBvc2l0aW9uOnt4OnQueCx5OnQueX19KSx0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLmZvckVhY2goaT0+e255ZShpLGUscixuKzEpLGUuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e2lkOmAke3QuaWR9XyR7aS5pZH1gLHNvdXJjZTp0LmlkLHRhcmdldDppLmlkLGRlcHRoOm4sc2VjdGlvbjppLnNlY3Rpb259fSl9KX1mdW5jdGlvbiBrZXQodCxlKXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPUdlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImN5IikuYXR0cigic3R5bGUiLCJkaXNwbGF5Om5vbmUiKSxpPXNsKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6ImJlemllciJ9fV19KTtuLnJlbW92ZSgpLG55ZSh0LGksZSwwKSxpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXthLmxheW91dERpbWVuc2lvbnM9KCk9PntsZXQgcz1hLmRhdGEoKTtyZXR1cm57dzpzLndpZHRoLGg6cy5oZWlnaHR9fX0pLGkubGF5b3V0KHtuYW1lOiJjb3NlLWJpbGtlbnQiLHF1YWxpdHk6InByb29mIixzdHlsZUVuYWJsZWQ6ITEsYW5pbWF0ZTohMX0pLnJ1bigpLGkucmVhZHkoYT0+e1guaW5mbygiUmVhZHkiLGEpLHIoaSl9KX0pfWZ1bmN0aW9uIEVldCh0LGUpe2Uubm9kZXMoKS5tYXAoKHIsbik9PntsZXQgaT1yLmRhdGEoKTtpLng9ci5wb3NpdGlvbigpLngsaS55PXIucG9zaXRpb24oKS55LEoxZSh0LGkpO2xldCBhPXQuZ2V0RWxlbWVudEJ5SWQoaS5ub2RlSWQpO1guaW5mbygiaWQ6IixuLCJQb3NpdGlvbjogKCIsci5wb3NpdGlvbigpLngsIiwgIixyLnBvc2l0aW9uKCkueSwiKSIsaSksYS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtyLnBvc2l0aW9uKCkueC1pLndpZHRoLzJ9LCAke3IucG9zaXRpb24oKS55LWkuaGVpZ2h0LzJ9KWApLGEuYXR0cigiYXR0ciIsYGFwYS0ke259KWApfSl9dmFyIHR5ZSxDZXQsaXllLGF5ZT1OKCgpPT57InVzZSBzdHJpY3QiO29GKCk7dHllPUFhKFExZSgpLDEpO2ZyKCk7R3QoKTt5dCgpO1ZsKCk7eGkoKTtleWUoKTtfYSgpO3NsLnVzZSh0eWUuZGVmYXVsdCk7byhyeWUsImRyYXdOb2RlcyIpO28od2V0LCJkcmF3RWRnZXMiKTtvKG55ZSwiYWRkTm9kZXMiKTtvKGtldCwibGF5b3V0TWluZG1hcCIpO28oRWV0LCJwb3NpdGlvbk5vZGVzIik7Q2V0PW8oYXN5bmModCxlLHIsbik9PntYLmRlYnVnKGBSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtCmArdCk7bGV0IGk9bi5kYixhPWkuZ2V0TWluZG1hcCgpO2lmKCFhKXJldHVybjtsZXQgcz1tZSgpO3MuaHRtbExhYmVscz0hMTtsZXQgbD1MaShlKSx1PWwuYXBwZW5kKCJnIik7dS5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtsZXQgaD1sLmFwcGVuZCgiZyIpO2guYXR0cigiY2xhc3MiLCJtaW5kbWFwLW5vZGVzIiksYXdhaXQgcnllKGksaCxhLC0xLHMpO2xldCBmPWF3YWl0IGtldChhLHMpO3dldCh1LGYpLEVldChpLGYpLExvKHZvaWQgMCxsLHMubWluZG1hcD8ucGFkZGluZz8/b3IubWluZG1hcC5wYWRkaW5nLHMubWluZG1hcD8udXNlTWF4V2lkdGg/P29yLm1pbmRtYXAudXNlTWF4V2lkdGgpfSwiZHJhdyIpLGl5ZT17ZHJhdzpDZXR9fSk7dmFyIEFldCxfZXQsc3llLG95ZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7QWV0PW8odD0+e2xldCBlPSIiO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspdFsibGluZUNvbG9yIityXT10WyJsaW5lQ29sb3IiK3JdfHx0WyJjU2NhbGVJbnYiK3JdLGxhKHRbImxpbmVDb2xvciIrcl0pP3RbImxpbmVDb2xvciIrcl09THQodFsibGluZUNvbG9yIityXSwyMCk6dFsibGluZUNvbG9yIityXT1PdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTtmb3IobGV0IHI9MDtyPHQuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXtsZXQgbj0iIisoMTctMypyKTtlKz1gCiAgICAuc2VjdGlvbi0ke3ItMX0gcmVjdCwgLnNlY3Rpb24tJHtyLTF9IHBhdGgsIC5zZWN0aW9uLSR7ci0xfSBjaXJjbGUsIC5zZWN0aW9uLSR7ci0xfSBwb2x5Z29uLCAuc2VjdGlvbi0ke3ItMX0gcGF0aCAgewogICAgICBmaWxsOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IHRleHQgewogICAgIGZpbGw6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfTsKICAgIH0KICAgIC5ub2RlLWljb24tJHtyLTF9IHsKICAgICAgZm9udC1zaXplOiA0MHB4OwogICAgICBjb2xvcjogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLnNlY3Rpb24tZWRnZS0ke3ItMX17CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGUiK3JdfTsKICAgIH0KICAgIC5lZGdlLWRlcHRoLSR7ci0xfXsKICAgICAgc3Ryb2tlLXdpZHRoOiAke259OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IGxpbmUgewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlSW52IityXX0gOwogICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLF9ldD1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7QWV0KHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmAsImdldFN0eWxlcyIpLHN5ZT1fZXR9KTt2YXIgbHllPXt9O3VyKGx5ZSx7ZGlhZ3JhbTooKT0+RGV0fSk7dmFyIERldCxjeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCMGUoKTtGMGUoKTtheWUoKTtveWUoKTtEZXQ9e2dldCBkYigpe3JldHVybiBuZXcgcDZ9LHJlbmRlcmVyOml5ZSxwYXJzZXI6UDBlLHN0eWxlczpzeWV9fSk7dmFyIGRGLGZ5ZSxkeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkRj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oXyxDLEQsTyl7Zm9yKEQ9RHx8e30sTz1fLmxlbmd0aDtPLS07RFtfW09dXT1DKTtyZXR1cm4gRH0sIm8iKSxlPVsxLDRdLHI9WzEsMTNdLG49WzEsMTJdLGk9WzEsMTVdLGE9WzEsMTZdLHM9WzEsMjBdLGw9WzEsMTldLHU9WzYsNyw4XSxoPVsxLDI2XSxmPVsxLDI0XSxkPVsxLDI1XSxwPVs2LDcsMTFdLG09WzEsMzFdLGc9WzYsNywxMSwyNF0seT1bMSw2LDEzLDE2LDE3LDIwLDIzXSx2PVsxLDM1XSx4PVsxLDM2XSxiPVsxLDYsNywxMSwxMywxNiwxNywyMCwyM10sVD1bMSwzOF0sUz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsS0FOQkFOOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsc2hhcGVEYXRhOjE1LElDT046MTYsQ0xBU1M6MTcsbm9kZVdpdGhJZDoxOCxub2RlV2l0aG91dElkOjE5LE5PREVfRFNUQVJUOjIwLE5PREVfREVTQ1I6MjEsTk9ERV9ERU5EOjIyLE5PREVfSUQ6MjMsU0hBUEVfREFUQToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiS0FOQkFOIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNjoiSUNPTiIsMTc6IkNMQVNTIiwyMDoiTk9ERV9EU1RBUlQiLDIxOiJOT0RFX0RFU0NSIiwyMjoiTk9ERV9ERU5EIiwyMzoiTk9ERV9JRCIsMjQ6IlNIQVBFX0RBVEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsM10sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTksM10sWzE4LDFdLFsxOCw0XSxbMTUsMl0sWzE1LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oQyxELE8sUixrLEwsQSl7dmFyIEk9TC5sZW5ndGgtMTtzd2l0Y2goayl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4gUjtjYXNlIDg6Ui5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6Ui5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTpSLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOlIuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OlIuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixMW0ktMV0uaWQpLFIuYWRkTm9kZShMW0ktMl0ubGVuZ3RoLExbSS0xXS5pZCxMW0ktMV0uZGVzY3IsTFtJLTFdLnR5cGUsTFtJXSk7YnJlYWs7Y2FzZSAxNjpSLmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIsTFtJXS5pZCksUi5hZGROb2RlKExbSS0xXS5sZW5ndGgsTFtJXS5pZCxMW0ldLmRlc2NyLExbSV0udHlwZSk7YnJlYWs7Y2FzZSAxNzpSLmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLExbSV0pLFIuZGVjb3JhdGVOb2RlKHtpY29uOkxbSV19KTticmVhaztjYXNlIDE4OmNhc2UgMjM6Ui5kZWNvcmF0ZU5vZGUoe2NsYXNzOkxbSV19KTticmVhaztjYXNlIDE5OlIuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMjA6Ui5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIixMW0ktMV0uaWQpLFIuYWRkTm9kZSgwLExbSS0xXS5pZCxMW0ktMV0uZGVzY3IsTFtJLTFdLnR5cGUsTFtJXSk7YnJlYWs7Y2FzZSAyMTpSLmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLExbSV0uaWQpLFIuYWRkTm9kZSgwLExbSV0uaWQsTFtJXS5kZXNjcixMW0ldLnR5cGUpO2JyZWFrO2Nhc2UgMjI6Ui5kZWNvcmF0ZU5vZGUoe2ljb246TFtJXX0pO2JyZWFrO2Nhc2UgMjc6Ui5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsTFtJLTJdKSx0aGlzLiQ9e2lkOkxbSS0xXSxkZXNjcjpMW0ktMV0sdHlwZTpSLmdldFR5cGUoTFtJLTJdLExbSV0pfTticmVhaztjYXNlIDI4OnRoaXMuJD17aWQ6TFtJXSxkZXNjcjpMW0ldLHR5cGU6MH07YnJlYWs7Y2FzZSAyOTpSLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixMW0ktM10pLHRoaXMuJD17aWQ6TFtJLTNdLGRlc2NyOkxbSS0xXSx0eXBlOlIuZ2V0VHlwZShMW0ktMl0sTFtJXSl9O2JyZWFrO2Nhc2UgMzA6dGhpcy4kPUxbSS0xXStMW0ldO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPUxbSV07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6ZX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODplfSx7NjpyLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHQodSxbMiwzXSksezE6WzIsMl19LHQodSxbMiw0XSksdCh1LFsyLDVdKSx7MTpbMiw2XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpyLDk6MjIsMTI6MTEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpoLDc6ZiwxMDoyMywxMTpkfSx0KHAsWzIsMjRdLHsxODoxNywxOToxOCwxNDoyNywxNjpbMSwyOF0sMTc6WzEsMjldLDIwOnMsMjM6bH0pLHQocCxbMiwxOV0pLHQocCxbMiwyMV0sezE1OjMwLDI0Om19KSx0KHAsWzIsMjJdKSx0KHAsWzIsMjNdKSx0KGcsWzIsMjVdKSx0KGcsWzIsMjZdKSx0KGcsWzIsMjhdLHsyMDpbMSwzMl19KSx7MjE6WzEsMzNdfSx7NjpoLDc6ZiwxMDozNCwxMTpkfSx7MTpbMiw3XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx0KHksWzIsMTRdLHs3OnYsMTE6eH0pLHQoYixbMiw4XSksdChiLFsyLDldKSx0KGIsWzIsMTBdKSx0KHAsWzIsMTZdLHsxNTozNywyNDptfSksdChwLFsyLDE3XSksdChwLFsyLDE4XSksdChwLFsyLDIwXSx7MjQ6VH0pLHQoZyxbMiwzMV0pLHsyMTpbMSwzOV19LHsyMjpbMSw0MF19LHQoeSxbMiwxM10sezc6diwxMTp4fSksdChiLFsyLDExXSksdChiLFsyLDEyXSksdChwLFsyLDE1XSx7MjQ6VH0pLHQoZyxbMiwzMF0pLHsyMjpbMSw0MV19LHQoZyxbMiwyN10pLHQoZyxbMiwyOV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oQyxEKXtpZihELnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQyk7ZWxzZXt2YXIgTz1uZXcgRXJyb3IoQyk7dGhyb3cgTy5oYXNoPUQsT319LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihDKXt2YXIgRD10aGlzLE89WzBdLFI9W10saz1bbnVsbF0sTD1bXSxBPXRoaXMudGFibGUsST0iIixNPTAsUD0wLEI9MCxGPTIsej0xLCQ9TC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxVPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSz17eXk6e319O2Zvcih2YXIgZWUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxlZSkmJihLLnl5W2VlXT10aGlzLnl5W2VlXSk7VS5zZXRJbnB1dChDLEsueXkpLEsueXkubGV4ZXI9VSxLLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBVLnl5bGxvYz4idSImJihVLnl5bGxvYz17fSk7dmFyIFk9VS55eWxsb2M7TC5wdXNoKFkpO3ZhciBjZT1VLm9wdGlvbnMmJlUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEsueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Sy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBaKEJlKXtPLmxlbmd0aD1PLmxlbmd0aC0yKkJlLGsubGVuZ3RoPWsubGVuZ3RoLUJlLEwubGVuZ3RoPUwubGVuZ3RoLUJlfW8oWiwicG9wU3RhY2siKTtmdW5jdGlvbiB1ZSgpe3ZhciBCZTtyZXR1cm4gQmU9Ui5wb3AoKXx8VS5sZXgoKXx8eix0eXBlb2YgQmUhPSJudW1iZXIiJiYoQmUgaW5zdGFuY2VvZiBBcnJheSYmKFI9QmUsQmU9Ui5wb3AoKSksQmU9RC5zeW1ib2xzX1tCZV18fEJlKSxCZX1vKHVlLCJsZXgiKTtmb3IodmFyIFEsaixuZSx0ZSxoZSxsZSxKPXt9LFNlLHNlLGFlLE9lOzspe2lmKG5lPU9bTy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tuZV0/dGU9dGhpcy5kZWZhdWx0QWN0aW9uc1tuZV06KChRPT09bnVsbHx8dHlwZW9mIFE+InUiKSYmKFE9dWUoKSksdGU9QVtuZV0mJkFbbmVdW1FdKSx0eXBlb2YgdGU+InUifHwhdGUubGVuZ3RofHwhdGVbMF0pe3ZhciB5ZT0iIjtPZT1bXTtmb3IoU2UgaW4gQVtuZV0pdGhpcy50ZXJtaW5hbHNfW1NlXSYmU2U+RiYmT2UucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1NlXSsiJyIpO1Uuc2hvd1Bvc2l0aW9uP3llPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE0rMSkrYDoKYCtVLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArT2Uuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tRXXx8USkrIiciOnllPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE0rMSkrIjogVW5leHBlY3RlZCAiKyhRPT16PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1FdfHxRKSsiJyIpLHRoaXMucGFyc2VFcnJvcih5ZSx7dGV4dDpVLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tRXXx8USxsaW5lOlUueXlsaW5lbm8sbG9jOlksZXhwZWN0ZWQ6T2V9KX1pZih0ZVswXWluc3RhbmNlb2YgQXJyYXkmJnRlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrbmUrIiwgdG9rZW46ICIrUSk7c3dpdGNoKHRlWzBdKXtjYXNlIDE6Ty5wdXNoKFEpLGsucHVzaChVLnl5dGV4dCksTC5wdXNoKFUueXlsbG9jKSxPLnB1c2godGVbMV0pLFE9bnVsbCxqPyhRPWosaj1udWxsKTooUD1VLnl5bGVuZyxJPVUueXl0ZXh0LE09VS55eWxpbmVubyxZPVUueXlsbG9jLEI+MCYmQi0tKTticmVhaztjYXNlIDI6aWYoc2U9dGhpcy5wcm9kdWN0aW9uc19bdGVbMV1dWzFdLEouJD1rW2subGVuZ3RoLXNlXSxKLl8kPXtmaXJzdF9saW5lOkxbTC5sZW5ndGgtKHNlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6TFtMLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkxbTC5sZW5ndGgtKHNlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkxbTC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGNlJiYoSi5fJC5yYW5nZT1bTFtMLmxlbmd0aC0oc2V8fDEpXS5yYW5nZVswXSxMW0wubGVuZ3RoLTFdLnJhbmdlWzFdXSksbGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEosW0ksUCxNLEsueXksdGVbMV0sayxMXS5jb25jYXQoJCkpLHR5cGVvZiBsZTwidSIpcmV0dXJuIGxlO3NlJiYoTz1PLnNsaWNlKDAsLTEqc2UqMiksaz1rLnNsaWNlKDAsLTEqc2UpLEw9TC5zbGljZSgwLC0xKnNlKSksTy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3RlWzFdXVswXSksay5wdXNoKEouJCksTC5wdXNoKEouXyQpLGFlPUFbT1tPLmxlbmd0aC0yXV1bT1tPLmxlbmd0aC0xXV0sTy5wdXNoKGFlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sdz1mdW5jdGlvbigpe3ZhciBfPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oRCxPKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEQsTyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihDLEQpe3JldHVybiB0aGlzLnl5PUR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUMsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Qyx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Qyx0aGlzLm1hdGNoZWQrPUM7dmFyIEQ9Qy5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEN9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oQyl7dmFyIEQ9Qy5sZW5ndGgsTz1DLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Qyt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRCksdGhpcy5vZmZzZXQtPUQ7dmFyIFI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksTy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPU8ubGVuZ3RoLTEpO3ZhciBrPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpPPyhPLmxlbmd0aD09PVIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStSW1IubGVuZ3RoLU8ubGVuZ3RoXS5sZW5ndGgtT1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba1swXSxrWzBdK3RoaXMueXlsZW5nLURdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihDKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoQykpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihDLmxlbmd0aD4yMD8iLi4uIjoiIikrQy5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBDPXRoaXMubWF0Y2g7cmV0dXJuIEMubGVuZ3RoPDIwJiYoQys9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtQy5sZW5ndGgpKSwoQy5zdWJzdHIoMCwyMCkrKEMubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLnBhc3RJbnB1dCgpLEQ9bmV3IEFycmF5KEMubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gQyt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oQyxEKXt2YXIgTyxSLGs7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGs9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoay55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxSPUNbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFImJih0aGlzLnl5bGluZW5vKz1SLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlI/UltSLmxlbmd0aC0xXS5sZW5ndGgtUltSLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0NbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9Q1swXSx0aGlzLm1hdGNoKz1DWzBdLHRoaXMubWF0Y2hlcz1DLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKENbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUNbMF0sTz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxELHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLE8pcmV0dXJuIE87aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEwgaW4gayl0aGlzW0xdPWtbTF07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEMsRCxPLFI7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaz10aGlzLl9jdXJyZW50UnVsZXMoKSxMPTA7TDxrLmxlbmd0aDtMKyspaWYoTz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2tbTF1dKSxPJiYoIUR8fE9bMF0ubGVuZ3RoPkRbMF0ubGVuZ3RoKSl7aWYoRD1PLFI9TCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihDPXRoaXMudGVzdF9tYXRjaChPLGtbTF0pLEMhPT0hMSlyZXR1cm4gQztpZih0aGlzLl9iYWNrdHJhY2spe0Q9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRD8oQz10aGlzLnRlc3RfbWF0Y2goRCxrW1JdKSxDIT09ITE/QzohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBEPXRoaXMubmV4dCgpO3JldHVybiBEfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihEKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgRD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBEPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oRCl7cmV0dXJuIEQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhEfHwwKSxEPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihEKXt0aGlzLmJlZ2luKEQpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oRCxPLFIsayl7dmFyIEw9aztzd2l0Y2goUil7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhIiksTy55eXRleHQ9IiIsMjQ7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhU3RyIiksMjQ7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7YnJlYWs7Y2FzZSAzOmxldCBBPS9cblxzKi9nO3JldHVybiBPLnl5dGV4dD1PLnl5dGV4dC5yZXBsYWNlKEEsIjxici8+IiksMjQ7YnJlYWs7Y2FzZSA0OnJldHVybiAyNDtjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gRC5nZXRMb2dnZXIoKS50cmFjZSgiRm91bmQgY29tbWVudCIsTy55eXRleHQpLDY7YnJlYWs7Y2FzZSA3OnJldHVybiA4O2Nhc2UgODp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2JyZWFrO2Nhc2UgMTA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTE6RC5nZXRMb2dnZXIoKS50cmFjZSgiQmVnaW4gaWNvbiIpLHRoaXMuYmVnaW4oIklDT04iKTticmVhaztjYXNlIDEyOnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJTkUiKSw2O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIDc7Y2FzZSAxNDpyZXR1cm4gMTY7Y2FzZSAxNTpELmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb2Rpbmcgbm9kZSIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDE3OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDE4OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDE5OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIxOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDI0OnJldHVybiAxMztjYXNlIDI1OnJldHVybiAyMztjYXNlIDI2OnJldHVybiAxMTtjYXNlIDI3OnRoaXMuYmVnaW4oIk5TVFIyIik7YnJlYWs7Y2FzZSAyODpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpELmdldExvZ2dlcigpLnRyYWNlKCJTdGFydGluZyBOU1RSIiksdGhpcy5iZWdpbigiTlNUUiIpO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIEQuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsTy55eXRleHQpLCJOT0RFX0RFU0NSIjticmVhaztjYXNlIDMyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxELmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAuLi4iLE8ueXl0ZXh0KSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQxOnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsTy55eXRleHQpLDIxO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIEQuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixPLnl5dGV4dCksMjE7YnJlYWt9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86QFx7KS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W15cIl0rKS9pLC9eKD86W159XiJdKykvaSwvXig/Olx9KS9pLC9eKD86XHMqJSUuKikvaSwvXig/OmthbmJhblxiKS9pLC9eKD86Ojo6KS9pLC9eKD86LispL2ksL14oPzpcbikvaSwvXig/Ojo6aWNvblwoKS9pLC9eKD86W1xzXStbXG5dKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXlwpXSspL2ksL14oPzpcKSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoLSkvaSwvXig/OlwpXCkpL2ksL14oPzpcKSkvaSwvXig/OlwoXCgpL2ksL14oPzpce1x7KS9pLC9eKD86XCgpL2ksL14oPzpcWykvaSwvXig/Oltcc10rKS9pLC9eKD86W15cKFxbXG5cKVx7XH1AXSspL2ksL14oPzokKS9pLC9eKD86WyJdW2BdKS9pLC9eKD86W15gIl0rKS9pLC9eKD86W2BdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSspL2ksL14oPzpbIl0pL2ksL14oPzpbXCldXCkpL2ksL14oPzpbXCldKS9pLC9eKD86W1xdXSkvaSwvXig/Olx9XH0pL2ksL14oPzpcKC0pL2ksL14oPzotXCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XCgpL2ksL14oPzpbXlwpXF1cKFx9XSspL2ksL14oPzouKyg/IVwoXCgpKS9pXSxjb25kaXRpb25zOntzaGFwZURhdGFFbmRCcmFja2V0OntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YVN0cjp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxzaGFwZURhdGE6e3J1bGVzOlsxLDQsNV0saW5jbHVzaXZlOiExfSxDTEFTUzp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzE0LDE1XSxpbmNsdXNpdmU6ITF9LE5TVFIyOntydWxlczpbMjgsMjldLGluY2x1c2l2ZTohMX0sTlNUUjp7cnVsZXM6WzMxLDMyXSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlsyNywzMCwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Ml0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw2LDcsOCwxMSwxMiwxMywxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNl0saW5jbHVzaXZlOiEwfX19O3JldHVybiBffSgpO1MubGV4ZXI9dztmdW5jdGlvbiBFKCl7dGhpcy55eT17fX1yZXR1cm4gbyhFLCJQYXJzZXIiKSxFLnByb3RvdHlwZT1TLFMuUGFyc2VyPUUsbmV3IEV9KCk7ZEYucGFyc2VyPWRGO2Z5ZT1kRn0pO3ZhciBvbCxtRixwRixnRixNZXQsSWV0LHB5ZSxPZXQsUGV0LFhpLEJldCxGZXQsJGV0LHpldCxHZXQsVmV0LFVldCxteWUsZ3llPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtwcigpO3l0KCk7X2EoKTtQVCgpO29sPVtdLG1GPVtdLHBGPTAsZ0Y9e30sTWV0PW8oKCk9PntvbD1bXSxtRj1bXSxwRj0wLGdGPXt9fSwiY2xlYXIiKSxJZXQ9byh0PT57aWYob2wubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgZT1vbFswXS5sZXZlbCxyPW51bGw7Zm9yKGxldCBuPW9sLmxlbmd0aC0xO24+PTA7bi0tKWlmKG9sW25dLmxldmVsPT09ZSYmIXImJihyPW9sW25dKSxvbFtuXS5sZXZlbDxlKXRocm93IG5ldyBFcnJvcignSXRlbXMgd2l0aG91dCBzZWN0aW9uIGRldGVjdGVkLCBmb3VuZCBzZWN0aW9uICgiJytvbFtuXS5sYWJlbCsnIiknKTtyZXR1cm4gdD09PXI/LmxldmVsP251bGw6cn0sImdldFNlY3Rpb24iKSxweWU9byhmdW5jdGlvbigpe3JldHVybiBtRn0sImdldFNlY3Rpb25zIiksT2V0PW8oZnVuY3Rpb24oKXtsZXQgdD1bXSxlPVtdLHI9cHllKCksbj1tZSgpO2ZvcihsZXQgaSBvZiByKXtsZXQgYT17aWQ6aS5pZCxsYWJlbDp3cihpLmxhYmVsPz8iIixuKSxpc0dyb3VwOiEwLHRpY2tldDppLnRpY2tldCxzaGFwZToia2FuYmFuU2VjdGlvbiIsbGV2ZWw6aS5sZXZlbCxsb29rOm4ubG9va307ZS5wdXNoKGEpO2xldCBzPW9sLmZpbHRlcihsPT5sLnBhcmVudElkPT09aS5pZCk7Zm9yKGxldCBsIG9mIHMpe2xldCB1PXtpZDpsLmlkLHBhcmVudElkOmkuaWQsbGFiZWw6d3IobC5sYWJlbD8/IiIsbiksaXNHcm91cDohMSx0aWNrZXQ6bD8udGlja2V0LHByaW9yaXR5Omw/LnByaW9yaXR5LGFzc2lnbmVkOmw/LmFzc2lnbmVkLGljb246bD8uaWNvbixzaGFwZToia2FuYmFuSXRlbSIsbGV2ZWw6bC5sZXZlbCxyeDo1LHJ5OjUsY3NzU3R5bGVzOlsidGV4dC1hbGlnbjogbGVmdCJdfTtlLnB1c2godSl9fXJldHVybntub2RlczplLGVkZ2VzOnQsb3RoZXI6e30sY29uZmlnOm1lKCl9fSwiZ2V0RGF0YSIpLFBldD1vKCh0LGUscixuLGkpPT57bGV0IGE9bWUoKSxzPWEubWluZG1hcD8ucGFkZGluZz8/b3IubWluZG1hcC5wYWRkaW5nO3N3aXRjaChuKXtjYXNlIFhpLlJPVU5ERURfUkVDVDpjYXNlIFhpLlJFQ1Q6Y2FzZSBYaS5IRVhBR09OOnMqPTJ9bGV0IGw9e2lkOndyKGUsYSl8fCJrYm4iK3BGKyssbGV2ZWw6dCxsYWJlbDp3cihyLGEpLHdpZHRoOmEubWluZG1hcD8ubWF4Tm9kZVdpZHRoPz9vci5taW5kbWFwLm1heE5vZGVXaWR0aCxwYWRkaW5nOnMsaXNHcm91cDohMX07aWYoaSE9PXZvaWQgMCl7bGV0IGg7aS5pbmNsdWRlcyhgCmApP2g9aStgCmA6aD1gewpgK2krYAp9YDtsZXQgZj1UbShoLHtzY2hlbWE6Ym19KTtpZihmLnNoYXBlJiYoZi5zaGFwZSE9PWYuc2hhcGUudG9Mb3dlckNhc2UoKXx8Zi5zaGFwZS5pbmNsdWRlcygiXyIpKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7Zi5zaGFwZX0uIFNoYXBlIG5hbWVzIHNob3VsZCBiZSBsb3dlcmNhc2UuYCk7Zj8uc2hhcGUmJmYuc2hhcGU9PT0ia2FuYmFuSXRlbSImJihsLnNoYXBlPWY/LnNoYXBlKSxmPy5sYWJlbCYmKGwubGFiZWw9Zj8ubGFiZWwpLGY/Lmljb24mJihsLmljb249Zj8uaWNvbi50b1N0cmluZygpKSxmPy5hc3NpZ25lZCYmKGwuYXNzaWduZWQ9Zj8uYXNzaWduZWQudG9TdHJpbmcoKSksZj8udGlja2V0JiYobC50aWNrZXQ9Zj8udGlja2V0LnRvU3RyaW5nKCkpLGY/LnByaW9yaXR5JiYobC5wcmlvcml0eT1mPy5wcmlvcml0eSl9bGV0IHU9SWV0KHQpO3U/bC5wYXJlbnRJZD11LmlkfHwia2JuIitwRisrOm1GLnB1c2gobCksb2wucHVzaChsKX0sImFkZE5vZGUiKSxYaT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LEJldD1vKCh0LGUpPT57c3dpdGNoKFguZGVidWcoIkluIGdldCB0eXBlIix0LGUpLHQpe2Nhc2UiWyI6cmV0dXJuIFhpLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gZT09PSIpIj9YaS5ST1VOREVEX1JFQ1Q6WGkuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIFhpLkNJUkNMRTtjYXNlIikiOnJldHVybiBYaS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gWGkuQkFORztjYXNlInt7IjpyZXR1cm4gWGkuSEVYQUdPTjtkZWZhdWx0OnJldHVybiBYaS5ERUZBVUxUfX0sImdldFR5cGUiKSxGZXQ9bygodCxlKT0+e2dGW3RdPWV9LCJzZXRFbGVtZW50Rm9ySWQiKSwkZXQ9byh0PT57aWYoIXQpcmV0dXJuO2xldCBlPW1lKCkscj1vbFtvbC5sZW5ndGgtMV07dC5pY29uJiYoci5pY29uPXdyKHQuaWNvbixlKSksdC5jbGFzcyYmKHIuY3NzQ2xhc3Nlcz13cih0LmNsYXNzLGUpKX0sImRlY29yYXRlTm9kZSIpLHpldD1vKHQ9Pntzd2l0Y2godCl7Y2FzZSBYaS5ERUZBVUxUOnJldHVybiJuby1ib3JkZXIiO2Nhc2UgWGkuUkVDVDpyZXR1cm4icmVjdCI7Y2FzZSBYaS5ST1VOREVEX1JFQ1Q6cmV0dXJuInJvdW5kZWQtcmVjdCI7Y2FzZSBYaS5DSVJDTEU6cmV0dXJuImNpcmNsZSI7Y2FzZSBYaS5DTE9VRDpyZXR1cm4iY2xvdWQiO2Nhc2UgWGkuQkFORzpyZXR1cm4iYmFuZyI7Y2FzZSBYaS5IRVhBR09OOnJldHVybiJoZXhnb24iO2RlZmF1bHQ6cmV0dXJuIm5vLWJvcmRlciJ9fSwidHlwZTJTdHIiKSxHZXQ9bygoKT0+WCwiZ2V0TG9nZ2VyIiksVmV0PW8odD0+Z0ZbdF0sImdldEVsZW1lbnRCeUlkIiksVWV0PXtjbGVhcjpNZXQsYWRkTm9kZTpQZXQsZ2V0U2VjdGlvbnM6cHllLGdldERhdGE6T2V0LG5vZGVUeXBlOlhpLGdldFR5cGU6QmV0LHNldEVsZW1lbnRGb3JJZDpGZXQsZGVjb3JhdGVOb2RlOiRldCx0eXBlMlN0cjp6ZXQsZ2V0TG9nZ2VyOkdldCxnZXRFbGVtZW50QnlJZDpWZXR9LG15ZT1VZXR9KTt2YXIgSGV0LHl5ZSx2eWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3l0KCk7VmwoKTt4aSgpO19hKCk7YXcoKTttdygpO0hldD1vKGFzeW5jKHQsZSxyLG4pPT57WC5kZWJ1ZyhgUmVuZGVyaW5nIGthbmJhbiBkaWFncmFtCmArdCk7bGV0IGE9bi5kYi5nZXREYXRhKCkscz1tZSgpO3MuaHRtbExhYmVscz0hMTtsZXQgbD1MaShlKSx1PWwuYXBwZW5kKCJnIik7dS5hdHRyKCJjbGFzcyIsInNlY3Rpb25zIik7bGV0IGg9bC5hcHBlbmQoImciKTtoLmF0dHIoImNsYXNzIiwiaXRlbXMiKTtsZXQgZj1hLm5vZGVzLmZpbHRlcih2PT52LmlzR3JvdXApLGQ9MCxwPTEwLG09W10sZz0yNTtmb3IobGV0IHYgb2YgZil7bGV0IHg9cz8ua2FuYmFuPy5zZWN0aW9uV2lkdGh8fDIwMDtkPWQrMSx2Lng9eCpkKyhkLTEpKnAvMix2LndpZHRoPXgsdi55PTAsdi5oZWlnaHQ9eCozLHYucng9NSx2LnJ5PTUsdi5jc3NDbGFzc2VzPXYuY3NzQ2xhc3NlcysiIHNlY3Rpb24tIitkO2xldCBiPWF3YWl0IENtKHUsdik7Zz1NYXRoLm1heChnLGI/LmxhYmVsQkJveD8uaGVpZ2h0KSxtLnB1c2goYil9bGV0IHk9MDtmb3IobGV0IHYgb2YgZil7bGV0IHg9bVt5XTt5PXkrMTtsZXQgYj1zPy5rYW5iYW4/LnNlY3Rpb25XaWR0aHx8MjAwLFQ9LWIqMy8yK2csUz1ULHc9YS5ub2Rlcy5maWx0ZXIoQz0+Qy5wYXJlbnRJZD09PXYuaWQpO2ZvcihsZXQgQyBvZiB3KXtpZihDLmlzR3JvdXApdGhyb3cgbmV3IEVycm9yKCJHcm91cHMgd2l0aGluIGdyb3VwcyBhcmUgbm90IGFsbG93ZWQgaW4gS2FuYmFuIGRpYWdyYW1zIik7Qy54PXYueCxDLndpZHRoPWItMS41KnA7bGV0IE89KGF3YWl0IEFtKGgsQyx7Y29uZmlnOnN9KSkubm9kZSgpLmdldEJCb3goKTtDLnk9UytPLmhlaWdodC8yLGF3YWl0IE0yKEMpLFM9Qy55K08uaGVpZ2h0LzIrcC8yfWxldCBFPXguY2x1c3Rlci5zZWxlY3QoInJlY3QiKSxfPU1hdGgubWF4KFMtVCszKnAsNTApKyhnLTI1KTtFLmF0dHIoImhlaWdodCIsXyl9TG8odm9pZCAwLGwscy5taW5kbWFwPy5wYWRkaW5nPz9vci5rYW5iYW4ucGFkZGluZyxzLm1pbmRtYXA/LnVzZU1heFdpZHRoPz9vci5rYW5iYW4udXNlTWF4V2lkdGgpfSwiZHJhdyIpLHl5ZT17ZHJhdzpIZXR9fSk7dmFyIFdldCxxZXQseHllLGJ5ZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7WG0oKTtXZXQ9byh0PT57bGV0IGU9IiI7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl0WyJsaW5lQ29sb3IiK25dPXRbImxpbmVDb2xvciIrbl18fHRbImNTY2FsZUludiIrbl0sbGEodFsibGluZUNvbG9yIituXSk/dFsibGluZUNvbG9yIituXT1MdCh0WyJsaW5lQ29sb3IiK25dLDIwKTp0WyJsaW5lQ29sb3IiK25dPU90KHRbImxpbmVDb2xvciIrbl0sMjApO2xldCByPW8oKG4saSk9PnQuZGFya01vZGU/T3QobixpKTpMdChuLGkpLCJhZGp1c3RlciIpO2ZvcihsZXQgbj0wO248dC5USEVNRV9DT0xPUl9MSU1JVDtuKyspe2xldCBpPSIiKygxNy0zKm4pO2UrPWAKICAgIC5zZWN0aW9uLSR7bi0xfSByZWN0LCAuc2VjdGlvbi0ke24tMX0gcGF0aCwgLnNlY3Rpb24tJHtuLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtuLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7bi0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7cih0WyJjU2NhbGUiK25dLDEwKX07CiAgICAgIHN0cm9rZTogJHtyKHRbImNTY2FsZSIrbl0sMTApfTsKCiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrbl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke24tMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIituXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7bi0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrbl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtuLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7aX07CiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK25dfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmthbmJhbi10aWNrZXQtbGluayB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLHFldD1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7V2V0KHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLmNsdXN0ZXItbGFiZWwsIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn07CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICAgIH0KICAua2FuYmFuLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAgICR7TmMoKX0KYCwiZ2V0U3R5bGVzIikseHllPXFldH0pO3ZhciBUeWU9e307dXIoVHllLHtkaWFncmFtOigpPT5ZZXR9KTt2YXIgWWV0LHd5ZT1OKCgpPT57InVzZSBzdHJpY3QiO2R5ZSgpO2d5ZSgpO3Z5ZSgpO2J5ZSgpO1lldD17ZGI6bXllLHJlbmRlcmVyOnl5ZSxwYXJzZXI6ZnllLHN0eWxlczp4eWV9fSk7dmFyIHlGLEU0LFN5ZT1OKCgpPT57InVzZSBzdHJpY3QiO3lGPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihsLHUsaCxmKXtmb3IoaD1ofHx7fSxmPWwubGVuZ3RoO2YtLTtoW2xbZl1dPXUpO3JldHVybiBofSwibyIpLGU9WzEsOV0scj1bMSwxMF0sbj1bMSw1LDEwLDEyXSxpPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNBTktFWTo0LE5FV0xJTkU6NSxjc3Y6NixvcHRfZW9mOjcscmVjb3JkOjgsY3N2X3RhaWw6OSxFT0Y6MTAsImZpZWxkW3NvdXJjZV0iOjExLENPTU1BOjEyLCJmaWVsZFt0YXJnZXRdIjoxMywiZmllbGRbdmFsdWVdIjoxNCxmaWVsZDoxNSxlc2NhcGVkOjE2LG5vbl9lc2NhcGVkOjE3LERRVU9URToxOCxFU0NBUEVEX1RFWFQ6MTksTk9OX0VTQ0FQRURfVEVYVDoyMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU0FOS0VZIiw1OiJORVdMSU5FIiwxMDoiRU9GIiwxMToiZmllbGRbc291cmNlXSIsMTI6IkNPTU1BIiwxMzoiZmllbGRbdGFyZ2V0XSIsMTQ6ImZpZWxkW3ZhbHVlXSIsMTg6IkRRVU9URSIsMTk6IkVTQ0FQRURfVEVYVCIsMjA6Ik5PTl9FU0NBUEVEX1RFWFQifSxwcm9kdWN0aW9uc186WzAsWzMsNF0sWzYsMl0sWzksMl0sWzksMF0sWzcsMV0sWzcsMF0sWzgsNV0sWzE1LDFdLFsxNSwxXSxbMTYsM10sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24odSxoLGYsZCxwLG0sZyl7dmFyIHk9bS5sZW5ndGgtMTtzd2l0Y2gocCl7Y2FzZSA3OmxldCB2PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSx4PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktMl0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxiPXBhcnNlRmxvYXQobVt5XS50cmltKCkpO2QuYWRkTGluayh2LHgsYik7YnJlYWs7Y2FzZSA4OmNhc2UgOTpjYXNlIDExOnRoaXMuJD1tW3ldO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPW1beS0xXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdfSx7Njo0LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxOlsyLDZdLDc6MTEsMTA6WzEsMTJdfSx0KHIsWzIsNF0sezk6MTMsNTpbMSwxNF19KSx7MTI6WzEsMTVdfSx0KG4sWzIsOF0pLHQobixbMiw5XSksezE5OlsxLDE2XX0sdChuLFsyLDExXSksezE6WzIsMV19LHsxOlsyLDVdfSx0KHIsWzIsMl0pLHs2OjE3LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxNToxOCwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx7MTg6WzEsMTldfSx0KHIsWzIsM10pLHsxMjpbMSwyMF19LHQobixbMiwxMF0pLHsxNToyMSwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx0KFsxLDUsMTBdLFsyLDddKV0sZGVmYXVsdEFjdGlvbnM6ezExOlsyLDFdLDEyOlsyLDVdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24odSxoKXtpZihoLnJlY292ZXJhYmxlKXRoaXMudHJhY2UodSk7ZWxzZXt2YXIgZj1uZXcgRXJyb3IodSk7dGhyb3cgZi5oYXNoPWgsZn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbih1KXt2YXIgaD10aGlzLGY9WzBdLGQ9W10scD1bbnVsbF0sbT1bXSxnPXRoaXMudGFibGUseT0iIix2PTAseD0wLGI9MCxUPTIsUz0xLHc9bS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxFPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksXz17eXk6e319O2Zvcih2YXIgQyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEMpJiYoXy55eVtDXT10aGlzLnl5W0NdKTtFLnNldElucHV0KHUsXy55eSksXy55eS5sZXhlcj1FLF8ueXkucGFyc2VyPXRoaXMsdHlwZW9mIEUueXlsbG9jPiJ1IiYmKEUueXlsbG9jPXt9KTt2YXIgRD1FLnl5bGxvYzttLnB1c2goRCk7dmFyIE89RS5vcHRpb25zJiZFLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBfLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPV8ueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUihZKXtmLmxlbmd0aD1mLmxlbmd0aC0yKlkscC5sZW5ndGg9cC5sZW5ndGgtWSxtLmxlbmd0aD1tLmxlbmd0aC1ZfW8oUiwicG9wU3RhY2siKTtmdW5jdGlvbiBrKCl7dmFyIFk7cmV0dXJuIFk9ZC5wb3AoKXx8RS5sZXgoKXx8Uyx0eXBlb2YgWSE9Im51bWJlciImJihZIGluc3RhbmNlb2YgQXJyYXkmJihkPVksWT1kLnBvcCgpKSxZPWguc3ltYm9sc19bWV18fFkpLFl9byhrLCJsZXgiKTtmb3IodmFyIEwsQSxJLE0sUCxCLEY9e30seiwkLFUsSzs7KXtpZihJPWZbZi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tJXT9NPXRoaXMuZGVmYXVsdEFjdGlvbnNbSV06KChMPT09bnVsbHx8dHlwZW9mIEw+InUiKSYmKEw9aygpKSxNPWdbSV0mJmdbSV1bTF0pLHR5cGVvZiBNPiJ1Inx8IU0ubGVuZ3RofHwhTVswXSl7dmFyIGVlPSIiO0s9W107Zm9yKHogaW4gZ1tJXSl0aGlzLnRlcm1pbmFsc19bel0mJno+VCYmSy5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bel0rIiciKTtFLnNob3dQb3NpdGlvbj9lZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2KzEpK2A6CmArRS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0suam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tMXXx8TCkrIiciOmVlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHYrMSkrIjogVW5leHBlY3RlZCAiKyhMPT1TPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0xdfHxMKSsiJyIpLHRoaXMucGFyc2VFcnJvcihlZSx7dGV4dDpFLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tMXXx8TCxsaW5lOkUueXlsaW5lbm8sbG9jOkQsZXhwZWN0ZWQ6S30pfWlmKE1bMF1pbnN0YW5jZW9mIEFycmF5JiZNLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSSsiLCB0b2tlbjogIitMKTtzd2l0Y2goTVswXSl7Y2FzZSAxOmYucHVzaChMKSxwLnB1c2goRS55eXRleHQpLG0ucHVzaChFLnl5bGxvYyksZi5wdXNoKE1bMV0pLEw9bnVsbCxBPyhMPUEsQT1udWxsKTooeD1FLnl5bGVuZyx5PUUueXl0ZXh0LHY9RS55eWxpbmVubyxEPUUueXlsbG9jLGI+MCYmYi0tKTticmVhaztjYXNlIDI6aWYoJD10aGlzLnByb2R1Y3Rpb25zX1tNWzFdXVsxXSxGLiQ9cFtwLmxlbmd0aC0kXSxGLl8kPXtmaXJzdF9saW5lOm1bbS5sZW5ndGgtKCR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTptW20ubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bVttLmxlbmd0aC0oJHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptW20ubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxPJiYoRi5fJC5yYW5nZT1bbVttLmxlbmd0aC0oJHx8MSldLnJhbmdlWzBdLG1bbS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxCPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShGLFt5LHgsdixfLnl5LE1bMV0scCxtXS5jb25jYXQodykpLHR5cGVvZiBCPCJ1IilyZXR1cm4gQjskJiYoZj1mLnNsaWNlKDAsLTEqJCoyKSxwPXAuc2xpY2UoMCwtMSokKSxtPW0uc2xpY2UoMCwtMSokKSksZi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW01bMV1dWzBdKSxwLnB1c2goRi4kKSxtLnB1c2goRi5fJCksVT1nW2ZbZi5sZW5ndGgtMl1dW2ZbZi5sZW5ndGgtMV1dLGYucHVzaChVKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sYT1mdW5jdGlvbigpe3ZhciBsPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oaCxmKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGgsZik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih1LGgpe3JldHVybiB0aGlzLnl5PWh8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9dSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dSx0aGlzLm1hdGNoZWQrPXU7dmFyIGg9dS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGg/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24odSl7dmFyIGg9dS5sZW5ndGgsZj11LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtaCksdGhpcy5vZmZzZXQtPWg7dmFyIGQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWYubGVuZ3RoLTEpO3ZhciBwPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpmPyhmLmxlbmd0aD09PWQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStkW2QubGVuZ3RoLWYubGVuZ3RoXS5sZW5ndGgtZlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWh9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcFswXSxwWzBdK3RoaXMueXlsZW5nLWhdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbih1KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih1Lmxlbmd0aD4yMD8iLi4uIjoiIikrdS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB1PXRoaXMubWF0Y2g7cmV0dXJuIHUubGVuZ3RoPDIwJiYodSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdS5sZW5ndGgpKSwodS5zdWJzdHIoMCwyMCkrKHUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLnBhc3RJbnB1dCgpLGg9bmV3IEFycmF5KHUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmAraCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24odSxoKXt2YXIgZixkLHA7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHA9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYocC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxkPXVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGQmJih0aGlzLnl5bGluZW5vKz1kLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmQ/ZFtkLmxlbmd0aC0xXS5sZW5ndGgtZFtkLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3VbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dVswXSx0aGlzLm1hdGNoKz11WzBdLHRoaXMubWF0Y2hlcz11LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXVbMF0sZj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxoLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGYpcmV0dXJuIGY7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG0gaW4gcCl0aGlzW21dPXBbbV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHUsaCxmLGQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgcD10aGlzLl9jdXJyZW50UnVsZXMoKSxtPTA7bTxwLmxlbmd0aDttKyspaWYoZj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3BbbV1dKSxmJiYoIWh8fGZbMF0ubGVuZ3RoPmhbMF0ubGVuZ3RoKSl7aWYoaD1mLGQ9bSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih1PXRoaXMudGVzdF9tYXRjaChmLHBbbV0pLHUhPT0hMSlyZXR1cm4gdTtpZih0aGlzLl9iYWNrdHJhY2spe2g9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaD8odT10aGlzLnRlc3RfbWF0Y2goaCxwW2RdKSx1IT09ITE/dTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBoPXRoaXMubmV4dCgpO3JldHVybiBofHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihoKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goaCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgaD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBoPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oaCl7cmV0dXJuIGg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhofHwwKSxoPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbaF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihoKXt0aGlzLmJlZ2luKGgpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oaCxmLGQscCl7dmFyIG09cDtzd2l0Y2goZCl7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDticmVhaztjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2JyZWFrO2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODticmVhaztjYXNlIDc6cmV0dXJuIDE5fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OnNhbmtleS1iZXRhXGIpL2ksL14oPzokKS9pLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvaSwvXig/OihcdTAwMkMpKS9pLC9eKD86KFx1MDAyMikpL2ksL14oPzooW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pKikvaSwvXig/OihcdTAwMjIpKD8hKFx1MDAyMikpKS9pLC9eKD86KChbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSl8KFx1MDAyQyl8KFx1MDAwRCl8KFx1MDAwQSl8KFx1MDAyMikoXHUwMDIyKSkqKS9pXSxjb25kaXRpb25zOntjc3Y6e3J1bGVzOlsxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITF9LGVzY2FwZWRfdGV4dDp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGx9KCk7aS5sZXhlcj1hO2Z1bmN0aW9uIHMoKXt0aGlzLnl5PXt9fXJldHVybiBvKHMsIlBhcnNlciIpLHMucHJvdG90eXBlPWksaS5QYXJzZXI9cyxuZXcgc30oKTt5Ri5wYXJzZXI9eUY7RTQ9eUZ9KTt2YXIgcEMsbUMsZEMsUWV0LHZGLFpldCx4RixKZXQsZXR0LHR0dCxydHQsQ3llLEF5ZT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7cHIoKTtjaSgpO3BDPVtdLG1DPVtdLGRDPW5ldyBNYXAsUWV0PW8oKCk9PntwQz1bXSxtQz1bXSxkQz1uZXcgTWFwLGtyKCl9LCJjbGVhciIpLHZGPWNsYXNze2NvbnN0cnVjdG9yKGUscixuPTApe3RoaXMuc291cmNlPWU7dGhpcy50YXJnZXQ9cjt0aGlzLnZhbHVlPW59c3RhdGlje28odGhpcywiU2Fua2V5TGluayIpfX0sWmV0PW8oKHQsZSxyKT0+e3BDLnB1c2gobmV3IHZGKHQsZSxyKSl9LCJhZGRMaW5rIikseEY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5JRD1lfXN0YXRpY3tvKHRoaXMsIlNhbmtleU5vZGUiKX19LEpldD1vKHQ9Pnt0PVplLnNhbml0aXplVGV4dCh0LG1lKCkpO2xldCBlPWRDLmdldCh0KTtyZXR1cm4gZT09PXZvaWQgMCYmKGU9bmV3IHhGKHQpLGRDLnNldCh0LGUpLG1DLnB1c2goZSkpLGV9LCJmaW5kT3JDcmVhdGVOb2RlIiksZXR0PW8oKCk9Pm1DLCJnZXROb2RlcyIpLHR0dD1vKCgpPT5wQywiZ2V0TGlua3MiKSxydHQ9bygoKT0+KHtub2RlczptQy5tYXAodD0+KHtpZDp0LklEfSkpLGxpbmtzOnBDLm1hcCh0PT4oe3NvdXJjZTp0LnNvdXJjZS5JRCx0YXJnZXQ6dC50YXJnZXQuSUQsdmFsdWU6dC52YWx1ZX0pKX0pLCJnZXRHcmFwaCIpLEN5ZT17bm9kZXNNYXA6ZEMsZ2V0Q29uZmlnOm8oKCk9Pm1lKCkuc2Fua2V5LCJnZXRDb25maWciKSxnZXROb2RlczpldHQsZ2V0TGlua3M6dHR0LGdldEdyYXBoOnJ0dCxhZGRMaW5rOlpldCxmaW5kT3JDcmVhdGVOb2RlOkpldCxnZXRBY2NUaXRsZTpEcixzZXRBY2NUaXRsZTpBcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcixnZXREaWFncmFtVGl0bGU6TnIsc2V0RGlhZ3JhbVRpdGxlOk9yLGNsZWFyOlFldH19KTtmdW5jdGlvbiBTNCh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI8bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPGl8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgX3llPU4oKCk9PnsidXNlIHN0cmljdCI7byhTNCwibWF4Iil9KTtmdW5jdGlvbiBteSh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPml8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgRHllPU4oKCk9PnsidXNlIHN0cmljdCI7byhteSwibWluIil9KTtmdW5jdGlvbiBneSh0LGUpe2xldCByPTA7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCkobj0rbikmJihyKz1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPStlKGksKytuLHQpKSYmKHIrPWkpfXJldHVybiByfXZhciBMeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGd5LCJzdW0iKX0pO3ZhciBiRj1OKCgpPT57InVzZSBzdHJpY3QiO195ZSgpO0R5ZSgpO0x5ZSgpfSk7ZnVuY3Rpb24gbnR0KHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBURih0KXtyZXR1cm4gdC5kZXB0aH1mdW5jdGlvbiB3Rih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9ZnVuY3Rpb24gQzQodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24ga0YodCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/bXkodC5zb3VyY2VMaW5rcyxudHQpLTE6MH12YXIgRUY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiRigpO28obnR0LCJ0YXJnZXREZXB0aCIpO28oVEYsImxlZnQiKTtvKHdGLCJyaWdodCIpO28oQzQsImp1c3RpZnkiKTtvKGtGLCJjZW50ZXIiKX0pO2Z1bmN0aW9uIHl5KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgUnllPU4oKCk9PnsidXNlIHN0cmljdCI7byh5eSwiY29uc3RhbnQiKX0pO2Z1bmN0aW9uIE55ZSh0LGUpe3JldHVybiBnQyh0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBNeWUodCxlKXtyZXR1cm4gZ0ModC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gZ0ModCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIFNGKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGl0dCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBhdHQodCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24gc3R0KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIEl5ZSh0LGUpe2xldCByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBPeWUoe25vZGVzOnR9KXtmb3IobGV0IGUgb2YgdCl7bGV0IHI9ZS55MCxuPXI7Zm9yKGxldCBpIG9mIGUuc291cmNlTGlua3MpaS55MD1yK2kud2lkdGgvMixyKz1pLndpZHRoO2ZvcihsZXQgaSBvZiBlLnRhcmdldExpbmtzKWkueTE9bitpLndpZHRoLzIsbis9aS53aWR0aH19ZnVuY3Rpb24geUMoKXtsZXQgdD0wLGU9MCxyPTEsbj0xLGk9MjQsYT04LHMsbD1pdHQsdT1DNCxoLGYsZD1hdHQscD1zdHQsbT02O2Z1bmN0aW9uIGcoKXtsZXQgST17bm9kZXM6ZC5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6cC5hcHBseShudWxsLGFyZ3VtZW50cyl9O3JldHVybiB5KEkpLHYoSSkseChJKSxiKEkpLHcoSSksT3llKEkpLEl9byhnLCJzYW5rZXkiKSxnLnVwZGF0ZT1mdW5jdGlvbihJKXtyZXR1cm4gT3llKEkpLEl9LGcubm9kZUlkPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6eXkoSSksZyk6bH0sZy5ub2RlQWxpZ249ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIEk9PSJmdW5jdGlvbiI/STp5eShJKSxnKTp1fSxnLm5vZGVTb3J0PWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUksZyk6aH0sZy5ub2RlV2lkdGg9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K0ksZyk6aX0sZy5ub2RlUGFkZGluZz1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1zPStJLGcpOmF9LGcubm9kZXM9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dHlwZW9mIEk9PSJmdW5jdGlvbiI/STp5eShJKSxnKTpkfSxnLmxpbmtzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6eXkoSSksZyk6cH0sZy5saW5rU29ydD1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1JLGcpOmZ9LGcuc2l6ZT1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lPTAscj0rSVswXSxuPStJWzFdLGcpOltyLXQsbi1lXX0sZy5leHRlbnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K0lbMF1bMF0scj0rSVsxXVswXSxlPStJWzBdWzFdLG49K0lbMV1bMV0sZyk6W1t0LGVdLFtyLG5dXX0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPStJLGcpOm19O2Z1bmN0aW9uIHkoe25vZGVzOkksbGlua3M6TX0pe2ZvcihsZXRbQixGXW9mIEkuZW50cmllcygpKUYuaW5kZXg9QixGLnNvdXJjZUxpbmtzPVtdLEYudGFyZ2V0TGlua3M9W107bGV0IFA9bmV3IE1hcChJLm1hcCgoQixGKT0+W2woQixGLEkpLEJdKSk7Zm9yKGxldFtCLEZdb2YgTS5lbnRyaWVzKCkpe0YuaW5kZXg9QjtsZXR7c291cmNlOnosdGFyZ2V0OiR9PUY7dHlwZW9mIHohPSJvYmplY3QiJiYoej1GLnNvdXJjZT1JeWUoUCx6KSksdHlwZW9mICQhPSJvYmplY3QiJiYoJD1GLnRhcmdldD1JeWUoUCwkKSksei5zb3VyY2VMaW5rcy5wdXNoKEYpLCQudGFyZ2V0TGlua3MucHVzaChGKX1pZihmIT1udWxsKWZvcihsZXR7c291cmNlTGlua3M6Qix0YXJnZXRMaW5rczpGfW9mIEkpQi5zb3J0KGYpLEYuc29ydChmKX1vKHksImNvbXB1dGVOb2RlTGlua3MiKTtmdW5jdGlvbiB2KHtub2RlczpJfSl7Zm9yKGxldCBNIG9mIEkpTS52YWx1ZT1NLmZpeGVkVmFsdWU9PT12b2lkIDA/TWF0aC5tYXgoZ3koTS5zb3VyY2VMaW5rcyxTRiksZ3koTS50YXJnZXRMaW5rcyxTRikpOk0uZml4ZWRWYWx1ZX1vKHYsImNvbXB1dGVOb2RlVmFsdWVzIik7ZnVuY3Rpb24geCh7bm9kZXM6SX0pe2xldCBNPUkubGVuZ3RoLFA9bmV3IFNldChJKSxCPW5ldyBTZXQsRj0wO2Zvcig7UC5zaXplOyl7Zm9yKGxldCB6IG9mIFApe3ouZGVwdGg9Rjtmb3IobGV0e3RhcmdldDokfW9mIHouc291cmNlTGlua3MpQi5hZGQoJCl9aWYoKytGPk0pdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7UD1CLEI9bmV3IFNldH19byh4LCJjb21wdXRlTm9kZURlcHRocyIpO2Z1bmN0aW9uIGIoe25vZGVzOkl9KXtsZXQgTT1JLmxlbmd0aCxQPW5ldyBTZXQoSSksQj1uZXcgU2V0LEY9MDtmb3IoO1Auc2l6ZTspe2ZvcihsZXQgeiBvZiBQKXt6LmhlaWdodD1GO2ZvcihsZXR7c291cmNlOiR9b2Ygei50YXJnZXRMaW5rcylCLmFkZCgkKX1pZigrK0Y+TSl0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtQPUIsQj1uZXcgU2V0fX1vKGIsImNvbXB1dGVOb2RlSGVpZ2h0cyIpO2Z1bmN0aW9uIFQoe25vZGVzOkl9KXtsZXQgTT1TNChJLEY9PkYuZGVwdGgpKzEsUD0oci10LWkpLyhNLTEpLEI9bmV3IEFycmF5KE0pO2ZvcihsZXQgRiBvZiBJKXtsZXQgej1NYXRoLm1heCgwLE1hdGgubWluKE0tMSxNYXRoLmZsb29yKHUuY2FsbChudWxsLEYsTSkpKSk7Ri5sYXllcj16LEYueDA9dCt6KlAsRi54MT1GLngwK2ksQlt6XT9CW3pdLnB1c2goRik6Qlt6XT1bRl19aWYoaClmb3IobGV0IEYgb2YgQilGLnNvcnQoaCk7cmV0dXJuIEJ9byhULCJjb21wdXRlTm9kZUxheWVycyIpO2Z1bmN0aW9uIFMoSSl7bGV0IE09bXkoSSxQPT4obi1lLShQLmxlbmd0aC0xKSpzKS9neShQLFNGKSk7Zm9yKGxldCBQIG9mIEkpe2xldCBCPWU7Zm9yKGxldCBGIG9mIFApe0YueTA9QixGLnkxPUIrRi52YWx1ZSpNLEI9Ri55MStzO2ZvcihsZXQgeiBvZiBGLnNvdXJjZUxpbmtzKXoud2lkdGg9ei52YWx1ZSpNfUI9KG4tQitzKS8oUC5sZW5ndGgrMSk7Zm9yKGxldCBGPTA7RjxQLmxlbmd0aDsrK0Ype2xldCB6PVBbRl07ei55MCs9QiooRisxKSx6LnkxKz1CKihGKzEpfWsoUCl9fW8oUywiaW5pdGlhbGl6ZU5vZGVCcmVhZHRocyIpO2Z1bmN0aW9uIHcoSSl7bGV0IE09VChJKTtzPU1hdGgubWluKGEsKG4tZSkvKFM0KE0sUD0+UC5sZW5ndGgpLTEpKSxTKE0pO2ZvcihsZXQgUD0wO1A8bTsrK1Ape2xldCBCPU1hdGgucG93KC45OSxQKSxGPU1hdGgubWF4KDEtQiwoUCsxKS9tKTtfKE0sQixGKSxFKE0sQixGKX19byh3LCJjb21wdXRlTm9kZUJyZWFkdGhzIik7ZnVuY3Rpb24gRShJLE0sUCl7Zm9yKGxldCBCPTEsRj1JLmxlbmd0aDtCPEY7KytCKXtsZXQgej1JW0JdO2ZvcihsZXQgJCBvZiB6KXtsZXQgVT0wLEs9MDtmb3IobGV0e3NvdXJjZTpZLHZhbHVlOmNlfW9mICQudGFyZ2V0TGlua3Mpe2xldCBaPWNlKigkLmxheWVyLVkubGF5ZXIpO1UrPUwoWSwkKSpaLEsrPVp9aWYoIShLPjApKWNvbnRpbnVlO2xldCBlZT0oVS9LLSQueTApKk07JC55MCs9ZWUsJC55MSs9ZWUsUigkKX1oPT09dm9pZCAwJiZ6LnNvcnQoZ0MpLEMoeixQKX19byhFLCJyZWxheExlZnRUb1JpZ2h0Iik7ZnVuY3Rpb24gXyhJLE0sUCl7Zm9yKGxldCBCPUkubGVuZ3RoLEY9Qi0yO0Y+PTA7LS1GKXtsZXQgej1JW0ZdO2ZvcihsZXQgJCBvZiB6KXtsZXQgVT0wLEs9MDtmb3IobGV0e3RhcmdldDpZLHZhbHVlOmNlfW9mICQuc291cmNlTGlua3Mpe2xldCBaPWNlKihZLmxheWVyLSQubGF5ZXIpO1UrPUEoJCxZKSpaLEsrPVp9aWYoIShLPjApKWNvbnRpbnVlO2xldCBlZT0oVS9LLSQueTApKk07JC55MCs9ZWUsJC55MSs9ZWUsUigkKX1oPT09dm9pZCAwJiZ6LnNvcnQoZ0MpLEMoeixQKX19byhfLCJyZWxheFJpZ2h0VG9MZWZ0Iik7ZnVuY3Rpb24gQyhJLE0pe2xldCBQPUkubGVuZ3RoPj4xLEI9SVtQXTtPKEksQi55MC1zLFAtMSxNKSxEKEksQi55MStzLFArMSxNKSxPKEksbixJLmxlbmd0aC0xLE0pLEQoSSxlLDAsTSl9byhDLCJyZXNvbHZlQ29sbGlzaW9ucyIpO2Z1bmN0aW9uIEQoSSxNLFAsQil7Zm9yKDtQPEkubGVuZ3RoOysrUCl7bGV0IEY9SVtQXSx6PShNLUYueTApKkI7ej4xZS02JiYoRi55MCs9eixGLnkxKz16KSxNPUYueTErc319byhELCJyZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tIik7ZnVuY3Rpb24gTyhJLE0sUCxCKXtmb3IoO1A+PTA7LS1QKXtsZXQgRj1JW1BdLHo9KEYueTEtTSkqQjt6PjFlLTYmJihGLnkwLT16LEYueTEtPXopLE09Ri55MC1zfX1vKE8sInJlc29sdmVDb2xsaXNpb25zQm90dG9tVG9Ub3AiKTtmdW5jdGlvbiBSKHtzb3VyY2VMaW5rczpJLHRhcmdldExpbmtzOk19KXtpZihmPT09dm9pZCAwKXtmb3IobGV0e3NvdXJjZTp7c291cmNlTGlua3M6UH19b2YgTSlQLnNvcnQoTXllKTtmb3IobGV0e3RhcmdldDp7dGFyZ2V0TGlua3M6UH19b2YgSSlQLnNvcnQoTnllKX19byhSLCJyZW9yZGVyTm9kZUxpbmtzIik7ZnVuY3Rpb24gayhJKXtpZihmPT09dm9pZCAwKWZvcihsZXR7c291cmNlTGlua3M6TSx0YXJnZXRMaW5rczpQfW9mIEkpTS5zb3J0KE15ZSksUC5zb3J0KE55ZSl9byhrLCJyZW9yZGVyTGlua3MiKTtmdW5jdGlvbiBMKEksTSl7bGV0IFA9SS55MC0oSS5zb3VyY2VMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7dGFyZ2V0OkIsd2lkdGg6Rn1vZiBJLnNvdXJjZUxpbmtzKXtpZihCPT09TSlicmVhaztQKz1GK3N9Zm9yKGxldHtzb3VyY2U6Qix3aWR0aDpGfW9mIE0udGFyZ2V0TGlua3Mpe2lmKEI9PT1JKWJyZWFrO1AtPUZ9cmV0dXJuIFB9byhMLCJ0YXJnZXRUb3AiKTtmdW5jdGlvbiBBKEksTSl7bGV0IFA9TS55MC0oTS50YXJnZXRMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7c291cmNlOkIsd2lkdGg6Rn1vZiBNLnRhcmdldExpbmtzKXtpZihCPT09SSlicmVhaztQKz1GK3N9Zm9yKGxldHt0YXJnZXQ6Qix3aWR0aDpGfW9mIEkuc291cmNlTGlua3Mpe2lmKEI9PT1NKWJyZWFrO1AtPUZ9cmV0dXJuIFB9cmV0dXJuIG8oQSwic291cmNlVG9wIiksZ312YXIgUHllPU4oKCk9PnsidXNlIHN0cmljdCI7YkYoKTtFRigpO1J5ZSgpO28oTnllLCJhc2NlbmRpbmdTb3VyY2VCcmVhZHRoIik7byhNeWUsImFzY2VuZGluZ1RhcmdldEJyZWFkdGgiKTtvKGdDLCJhc2NlbmRpbmdCcmVhZHRoIik7byhTRiwidmFsdWUiKTtvKGl0dCwiZGVmYXVsdElkIik7byhhdHQsImRlZmF1bHROb2RlcyIpO28oc3R0LCJkZWZhdWx0TGlua3MiKTtvKEl5ZSwiZmluZCIpO28oT3llLCJjb21wdXRlTGlua0JyZWFkdGhzIik7byh5QywiU2Fua2V5Iil9KTtmdW5jdGlvbiBfRigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIEJ5ZSgpe3JldHVybiBuZXcgX0Z9dmFyIENGLEFGLGkwLG90dCxERixGeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDRj1NYXRoLlBJLEFGPTIqQ0YsaTA9MWUtNixvdHQ9QUYtaTA7byhfRiwiUGF0aCIpO28oQnllLCJwYXRoIik7X0YucHJvdG90eXBlPUJ5ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9GLG1vdmVUbzpvKGZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sIm1vdmVUbyIpLGNsb3NlUGF0aDpvKGZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSwiY2xvc2VQYXRoIiksbGluZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSwibGluZVRvIikscXVhZHJhdGljQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSwicXVhZHJhdGljQ3VydmVUbyIpLGJlemllckN1cnZlVG86byhmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSwiYmV6aWVyQ3VydmVUbyIpLGFyY1RvOm8oZnVuY3Rpb24odCxlLHIsbixpKXt0PSt0LGU9K2Uscj0rcixuPStuLGk9K2k7dmFyIGE9dGhpcy5feDEscz10aGlzLl95MSxsPXItdCx1PW4tZSxoPWEtdCxmPXMtZSxkPWgqaCtmKmY7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGQ+aTApaWYoIShNYXRoLmFicyhmKmwtdSpoKT5pMCl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2V7dmFyIHA9ci1hLG09bi1zLGc9bCpsK3UqdSx5PXAqcCttKm0sdj1NYXRoLnNxcnQoZykseD1NYXRoLnNxcnQoZCksYj1pKk1hdGgudGFuKChDRi1NYXRoLmFjb3MoKGcrZC15KS8oMip2KngpKSkvMiksVD1iL3gsUz1iL3Y7TWF0aC5hYnMoVC0xKT5pMCYmKHRoaXMuXys9IkwiKyh0K1QqaCkrIiwiKyhlK1QqZikpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhmKnA+aCptKSsiLCIrKHRoaXMuX3gxPXQrUypsKSsiLCIrKHRoaXMuX3kxPWUrUyp1KX19LCJhcmNUbyIpLGFyYzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0PSt0LGU9K2Uscj0rcixhPSEhYTt2YXIgcz1yKk1hdGguY29zKG4pLGw9cipNYXRoLnNpbihuKSx1PXQrcyxoPWUrbCxmPTFeYSxkPWE/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK3UrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLXUpPmkwfHxNYXRoLmFicyh0aGlzLl95MS1oKT5pMCkmJih0aGlzLl8rPSJMIit1KyIsIitoKSxyJiYoZDwwJiYoZD1kJUFGK0FGKSxkPm90dD90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHQtcykrIiwiKyhlLWwpKyJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHRoaXMuX3gxPXUpKyIsIisodGhpcy5feTE9aCk6ZD5pMCYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoZD49Q0YpKyIsIitmKyIsIisodGhpcy5feDE9dCtyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrcipNYXRoLnNpbihpKSkpKX0sImFyYyIpLHJlY3Q6byhmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSwicmVjdCIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffSwidG9TdHJpbmciKX07REY9QnllfSk7dmFyICR5ZT1OKCgpPT57InVzZSBzdHJpY3QiO0Z5ZSgpfSk7ZnVuY3Rpb24gdkModCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdH0sImNvbnN0YW50Iil9dmFyIHp5ZT1OKCgpPT57InVzZSBzdHJpY3QiO28odkMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEd5ZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBWeWUodCl7cmV0dXJuIHRbMV19dmFyIFV5ZT1OKCgpPT57InVzZSBzdHJpY3QiO28oR3llLCJ4Iik7byhWeWUsInkiKX0pO3ZhciBIeWUsV3llPU4oKCk9PnsidXNlIHN0cmljdCI7SHllPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIGx0dCh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gY3R0KHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiB1dHQodCl7dmFyIGU9bHR0LHI9Y3R0LG49R3llLGk9VnllLGE9bnVsbDtmdW5jdGlvbiBzKCl7dmFyIGwsdT1IeWUuY2FsbChhcmd1bWVudHMpLGg9ZS5hcHBseSh0aGlzLHUpLGY9ci5hcHBseSh0aGlzLHUpO2lmKGF8fChhPWw9REYoKSksdChhLCtuLmFwcGx5KHRoaXMsKHVbMF09aCx1KSksK2kuYXBwbHkodGhpcyx1KSwrbi5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLCtpLmFwcGx5KHRoaXMsdSkpLGwpcmV0dXJuIGE9bnVsbCxsKyIifHxudWxsfXJldHVybiBvKHMsImxpbmsiKSxzLnNvdXJjZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1sLHMpOmV9LHMudGFyZ2V0PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWwscyk6cn0scy54PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6dkMoK2wpLHMpOm59LHMueT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnZDKCtsKSxzKTppfSxzLmNvbnRleHQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bD8/bnVsbCxzKTphfSxzfWZ1bmN0aW9uIGh0dCh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIExGKCl7cmV0dXJuIHV0dChodHQpfXZhciBxeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjskeWUoKTtXeWUoKTt6eWUoKTtVeWUoKTtvKGx0dCwibGlua1NvdXJjZSIpO28oY3R0LCJsaW5rVGFyZ2V0Iik7byh1dHQsImxpbmsiKTtvKGh0dCwiY3VydmVIb3Jpem9udGFsIik7byhMRiwibGlua0hvcml6b250YWwiKX0pO3ZhciBZeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxeWUoKX0pO2Z1bmN0aW9uIGZ0dCh0KXtyZXR1cm5bdC5zb3VyY2UueDEsdC55MF19ZnVuY3Rpb24gZHR0KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX1mdW5jdGlvbiB4Qygpe3JldHVybiBMRigpLnNvdXJjZShmdHQpLnRhcmdldChkdHQpfXZhciBYeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZeWUoKTtvKGZ0dCwiaG9yaXpvbnRhbFNvdXJjZSIpO28oZHR0LCJob3Jpem9udGFsVGFyZ2V0Iik7byh4QywiZGVmYXVsdCIpfSk7dmFyIGp5ZT1OKCgpPT57InVzZSBzdHJpY3QiO1B5ZSgpO0VGKCk7WHllKCl9KTt2YXIgQTQsS3llPU4oKCk9PnsidXNlIHN0cmljdCI7QTQ9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJVaWQiKX1zdGF0aWN7dGhpcy5jb3VudD0wfXN0YXRpYyBuZXh0KGUpe3JldHVybiBuZXcgdChlKyArK3QuY291bnQpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWQ9ZSx0aGlzLmhyZWY9YCMke2V9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX19KTt2YXIgcHR0LG10dCxReWUsWnllPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtmcigpO2p5ZSgpO3hpKCk7S3llKCk7cHR0PXtsZWZ0OlRGLHJpZ2h0OndGLGNlbnRlcjprRixqdXN0aWZ5OkM0fSxtdHQ9byhmdW5jdGlvbih0LGUscixuKXtsZXR7c2VjdXJpdHlMZXZlbDppLHNhbmtleTphfT1tZSgpLHM9JDMuc2Fua2V5LGw7aT09PSJzYW5kYm94IiYmKGw9R2UoIiNpIitlKSk7bGV0IHU9aT09PSJzYW5kYm94Ij9HZShsLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksaD1pPT09InNhbmRib3giP3Uuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApOkdlKGBbaWQ9IiR7ZX0iXWApLGY9YT8ud2lkdGg/P3Mud2lkdGgsZD1hPy5oZWlnaHQ/P3Mud2lkdGgscD1hPy51c2VNYXhXaWR0aD8/cy51c2VNYXhXaWR0aCxtPWE/Lm5vZGVBbGlnbm1lbnQ/P3Mubm9kZUFsaWdubWVudCxnPWE/LnByZWZpeD8/cy5wcmVmaXgseT1hPy5zdWZmaXg/P3Muc3VmZml4LHY9YT8uc2hvd1ZhbHVlcz8/cy5zaG93VmFsdWVzLHg9bi5kYi5nZXRHcmFwaCgpLGI9cHR0W21dO3lDKCkubm9kZUlkKE89Pk8uaWQpLm5vZGVXaWR0aCgxMCkubm9kZVBhZGRpbmcoMTArKHY/MTU6MCkpLm5vZGVBbGlnbihiKS5leHRlbnQoW1swLDBdLFtmLGRdXSkoeCk7bGV0IHc9SnMoUEQpO2guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLnNlbGVjdEFsbCgiLm5vZGUiKS5kYXRhKHgubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsTz0+KE8udWlkPUE0Lm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE8pe3JldHVybiJ0cmFuc2xhdGUoIitPLngwKyIsIitPLnkwKyIpIn0pLmF0dHIoIngiLE89Pk8ueDApLmF0dHIoInkiLE89Pk8ueTApLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIsTz0+Ty55MS1PLnkwKS5hdHRyKCJ3aWR0aCIsTz0+Ty54MS1PLngwKS5hdHRyKCJmaWxsIixPPT53KE8uaWQpKTtsZXQgRT1vKCh7aWQ6Tyx2YWx1ZTpSfSk9PnY/YCR7T30KJHtnfSR7TWF0aC5yb3VuZChSKjEwMCkvMTAwfSR7eX1gOk8sImdldFRleHQiKTtoLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbHMiKS5hdHRyKCJmb250LXNpemUiLDE0KS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHgubm9kZXMpLmpvaW4oInRleHQiKS5hdHRyKCJ4IixPPT5PLngwPGYvMj9PLngxKzY6Ty54MC02KS5hdHRyKCJ5IixPPT4oTy55MStPLnkwKS8yKS5hdHRyKCJkeSIsYCR7dj8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLE89Pk8ueDA8Zi8yPyJzdGFydCI6ImVuZCIpLnRleHQoRSk7bGV0IF89aC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKHgubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLEM9YT8ubGlua0NvbG9yPz8iZ3JhZGllbnQiO2lmKEM9PT0iZ3JhZGllbnQiKXtsZXQgTz1fLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsUj0+KFIudWlkPUE0Lm5leHQoImxpbmVhckdyYWRpZW50LSIpKS5pZCkuYXR0cigiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigieDEiLFI9PlIuc291cmNlLngxKS5hdHRyKCJ4MiIsUj0+Ui50YXJnZXQueDApO08uYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixSPT53KFIuc291cmNlLmlkKSksTy5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIxMDAlIikuYXR0cigic3RvcC1jb2xvciIsUj0+dyhSLnRhcmdldC5pZCkpfWxldCBEO3N3aXRjaChDKXtjYXNlImdyYWRpZW50IjpEPW8oTz0+Ty51aWQsImNvbG9yaW5nIik7YnJlYWs7Y2FzZSJzb3VyY2UiOkQ9byhPPT53KE8uc291cmNlLmlkKSwiY29sb3JpbmciKTticmVhaztjYXNlInRhcmdldCI6RD1vKE89PncoTy50YXJnZXQuaWQpLCJjb2xvcmluZyIpO2JyZWFrO2RlZmF1bHQ6RD1DfV8uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIseEMoKSkuYXR0cigic3Ryb2tlIixEKS5hdHRyKCJzdHJva2Utd2lkdGgiLE89Pk1hdGgubWF4KDEsTy53aWR0aCkpLExvKHZvaWQgMCxoLDAscCl9LCJkcmF3IiksUXllPXtkcmF3Om10dH19KTt2YXIgSnllLGV2ZT1OKCgpPT57InVzZSBzdHJpY3QiO0p5ZT1vKHQ9PnQucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksInByZXBhcmVUZXh0Rm9yUGFyc2luZyIpfSk7dmFyIGd0dCx0dmUscnZlPU4oKCk9PnsidXNlIHN0cmljdCI7Z3R0PW8odD0+YC5sYWJlbCB7CiAgICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICB9YCwiZ2V0U3R5bGVzIiksdHZlPWd0dH0pO3ZhciBudmU9e307dXIobnZlLHtkaWFncmFtOigpPT52dHR9KTt2YXIgeXR0LHZ0dCxpdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTeWUoKTtBeWUoKTtaeWUoKTtldmUoKTtydmUoKTt5dHQ9RTQucGFyc2UuYmluZChFNCk7RTQucGFyc2U9dD0+eXR0KEp5ZSh0KSk7dnR0PXtzdHlsZXM6dHZlLHBhcnNlcjpFNCxkYjpDeWUscmVuZGVyZXI6UXllfX0pO3ZhciBvdmUsUkYsd3R0LGt0dCxFdHQsU3R0LEN0dCxxZixORj1OKCgpPT57InVzZSBzdHJpY3QiO21pKCk7X2EoKTtlcigpO2NpKCk7b3ZlPXtwYWNrZXQ6W119LFJGPXN0cnVjdHVyZWRDbG9uZShvdmUpLHd0dD1vci5wYWNrZXQsa3R0PW8oKCk9PntsZXQgdD0kbih7Li4ud3R0LC4uLnRyKCkucGFja2V0fSk7cmV0dXJuIHQuc2hvd0JpdHMmJih0LnBhZGRpbmdZKz0xMCksdH0sImdldENvbmZpZyIpLEV0dD1vKCgpPT5SRi5wYWNrZXQsImdldFBhY2tldCIpLFN0dD1vKHQ9Pnt0Lmxlbmd0aD4wJiZSRi5wYWNrZXQucHVzaCh0KX0sInB1c2hXb3JkIiksQ3R0PW8oKCk9PntrcigpLFJGPXN0cnVjdHVyZWRDbG9uZShvdmUpfSwiY2xlYXIiKSxxZj17cHVzaFdvcmQ6U3R0LGdldFBhY2tldDpFdHQsZ2V0Q29uZmlnOmt0dCxjbGVhcjpDdHQsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcn19KTt2YXIgQXR0LF90dCxEdHQsbHZlLGN2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtNcCgpO05GKCk7QXR0PTFlNCxfdHQ9byh0PT57Sm8odCxxZik7bGV0IGU9LTEscj1bXSxuPTEse2JpdHNQZXJSb3c6aX09cWYuZ2V0Q29uZmlnKCk7Zm9yKGxldHtzdGFydDphLGVuZDpzLGJpdHM6bCxsYWJlbDp1fW9mIHQuYmxvY2tzKXtpZihhIT09dm9pZCAwJiZzIT09dm9pZCAwJiZzPGEpdGhyb3cgbmV3IEVycm9yKGBQYWNrZXQgYmxvY2sgJHthfSAtICR7c30gaXMgaW52YWxpZC4gRW5kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHN0YXJ0LmApO2lmKGE/Pz1lKzEsYSE9PWUrMSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzPz9hfSBpcyBub3QgY29udGlndW91cy4gSXQgc2hvdWxkIHN0YXJ0IGZyb20gJHtlKzF9LmApO2lmKGw9PT0wKXRocm93IG5ldyBFcnJvcihgUGFja2V0IGJsb2NrICR7YX0gaXMgaW52YWxpZC4gQ2Fubm90IGhhdmUgYSB6ZXJvIGJpdCBmaWVsZC5gKTtmb3Iocz8/PWErKGw/PzEpLTEsbD8/PXMtYSsxLGU9cyxYLmRlYnVnKGBQYWNrZXQgYmxvY2sgJHthfSAtICR7ZX0gd2l0aCBsYWJlbCAke3V9YCk7ci5sZW5ndGg8PWkrMSYmcWYuZ2V0UGFja2V0KCkubGVuZ3RoPEF0dDspe2xldFtoLGZdPUR0dCh7c3RhcnQ6YSxlbmQ6cyxiaXRzOmwsbGFiZWw6dX0sbixpKTtpZihyLnB1c2goaCksaC5lbmQrMT09PW4qaSYmKHFmLnB1c2hXb3JkKHIpLHI9W10sbisrKSwhZilicmVhazsoe3N0YXJ0OmEsZW5kOnMsYml0czpsLGxhYmVsOnV9PWYpfX1xZi5wdXNoV29yZChyKX0sInBvcHVsYXRlIiksRHR0PW8oKHQsZSxyKT0+e2lmKHQuc3RhcnQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJzdGFydCBzaG91bGQgaGF2ZSBiZWVuIHNldCBkdXJpbmcgZmlyc3QgcGhhc2UiKTtpZih0LmVuZD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImVuZCBzaG91bGQgaGF2ZSBiZWVuIHNldCBkdXJpbmcgZmlyc3QgcGhhc2UiKTtpZih0LnN0YXJ0PnQuZW5kKXRocm93IG5ldyBFcnJvcihgQmxvY2sgc3RhcnQgJHt0LnN0YXJ0fSBpcyBncmVhdGVyIHRoYW4gYmxvY2sgZW5kICR7dC5lbmR9LmApO2lmKHQuZW5kKzE8PWUqcilyZXR1cm5bdCx2b2lkIDBdO2xldCBuPWUqci0xLGk9ZSpyO3JldHVyblt7c3RhcnQ6dC5zdGFydCxlbmQ6bixsYWJlbDp0LmxhYmVsLGJpdHM6bi10LnN0YXJ0fSx7c3RhcnQ6aSxlbmQ6dC5lbmQsbGFiZWw6dC5sYWJlbCxiaXRzOnQuZW5kLWl9XX0sImdldE5leHRGaXR0aW5nQmxvY2siKSxsdmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJwYWNrZXQiLHQpO1guZGVidWcoZSksX3R0KGUpfSwicGFyc2UiKX19KTt2YXIgTHR0LFJ0dCx1dmUsaHZlPU4oKCk9PnsidXNlIHN0cmljdCI7VmwoKTt4aSgpO0x0dD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldENvbmZpZygpLHtyb3dIZWlnaHQ6cyxwYWRkaW5nWTpsLGJpdFdpZHRoOnUsYml0c1BlclJvdzpofT1hLGY9aS5nZXRQYWNrZXQoKSxkPWkuZ2V0RGlhZ3JhbVRpdGxlKCkscD1zK2wsbT1wKihmLmxlbmd0aCsxKS0oZD8wOnMpLGc9dSpoKzIseT1MaShlKTt5LmF0dHIoInZpZXdib3giLGAwIDAgJHtnfSAke219YCksZm4oeSxtLGcsYS51c2VNYXhXaWR0aCk7Zm9yKGxldFt2LHhdb2YgZi5lbnRyaWVzKCkpUnR0KHkseCx2LGEpO3kuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixnLzIpLmF0dHIoInkiLG0tcC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJwYWNrZXRUaXRsZSIpfSwiZHJhdyIpLFJ0dD1vKCh0LGUscix7cm93SGVpZ2h0Om4scGFkZGluZ1g6aSxwYWRkaW5nWTphLGJpdFdpZHRoOnMsYml0c1BlclJvdzpsLHNob3dCaXRzOnV9KT0+e2xldCBoPXQuYXBwZW5kKCJnIiksZj1yKihuK2EpK2E7Zm9yKGxldCBkIG9mIGUpe2xldCBwPWQuc3RhcnQlbCpzKzEsbT0oZC5lbmQtZC5zdGFydCsxKSpzLWk7aWYoaC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixmKS5hdHRyKCJ3aWR0aCIsbSkuYXR0cigiaGVpZ2h0IixuKS5hdHRyKCJjbGFzcyIsInBhY2tldEJsb2NrIiksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwK20vMikuYXR0cigieSIsZituLzIpLmF0dHIoImNsYXNzIiwicGFja2V0TGFiZWwiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkLmxhYmVsKSwhdSljb250aW51ZTtsZXQgZz1kLmVuZD09PWQuc3RhcnQseT1mLTI7aC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwKyhnP20vMjowKSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIHN0YXJ0IikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidGV4dC1hbmNob3IiLGc/Im1pZGRsZSI6InN0YXJ0IikudGV4dChkLnN0YXJ0KSxnfHxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHArbSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIGVuZCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikudGV4dChkLmVuZCl9fSwiZHJhd1dvcmQiKSx1dmU9e2RyYXc6THR0fX0pO3ZhciBOdHQsZnZlLGR2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2VyKCk7TnR0PXtieXRlRm9udFNpemU6IjEwcHgiLHN0YXJ0Qnl0ZUNvbG9yOiJibGFjayIsZW5kQnl0ZUNvbG9yOiJibGFjayIsbGFiZWxDb2xvcjoiYmxhY2siLGxhYmVsRm9udFNpemU6IjEycHgiLHRpdGxlQ29sb3I6ImJsYWNrIix0aXRsZUZvbnRTaXplOiIxNHB4IixibG9ja1N0cm9rZUNvbG9yOiJibGFjayIsYmxvY2tTdHJva2VXaWR0aDoiMSIsYmxvY2tGaWxsQ29sb3I6IiNlZmVmZWYifSxmdmU9bygoe3BhY2tldDp0fT17fSk9PntsZXQgZT0kbihOdHQsdCk7cmV0dXJuYAoJLnBhY2tldEJ5dGUgewoJCWZvbnQtc2l6ZTogJHtlLmJ5dGVGb250U2l6ZX07Cgl9CgkucGFja2V0Qnl0ZS5zdGFydCB7CgkJZmlsbDogJHtlLnN0YXJ0Qnl0ZUNvbG9yfTsKCX0KCS5wYWNrZXRCeXRlLmVuZCB7CgkJZmlsbDogJHtlLmVuZEJ5dGVDb2xvcn07Cgl9CgkucGFja2V0TGFiZWwgewoJCWZpbGw6ICR7ZS5sYWJlbENvbG9yfTsKCQlmb250LXNpemU6ICR7ZS5sYWJlbEZvbnRTaXplfTsKCX0KCS5wYWNrZXRUaXRsZSB7CgkJZmlsbDogJHtlLnRpdGxlQ29sb3J9OwoJCWZvbnQtc2l6ZTogJHtlLnRpdGxlRm9udFNpemV9OwoJfQoJLnBhY2tldEJsb2NrIHsKCQlzdHJva2U6ICR7ZS5ibG9ja1N0cm9rZUNvbG9yfTsKCQlzdHJva2Utd2lkdGg6ICR7ZS5ibG9ja1N0cm9rZVdpZHRofTsKCQlmaWxsOiAke2UuYmxvY2tGaWxsQ29sb3J9OwoJfQoJYH0sInN0eWxlcyIpfSk7dmFyIHB2ZT17fTt1cihwdmUse2RpYWdyYW06KCk9Pk10dH0pO3ZhciBNdHQsbXZlPU4oKCk9PnsidXNlIHN0cmljdCI7TkYoKTtjdmUoKTtodmUoKTtkdmUoKTtNdHQ9e3BhcnNlcjpsdmUsZGI6cWYscmVuZGVyZXI6dXZlLHN0eWxlczpmdmV9fSk7dmFyIHZ5LHZ2ZSxhMCxQdHQsQnR0LHh2ZSxGdHQsJHR0LHp0dCxHdHQsVnR0LFV0dCxIdHQsczAsTUY9TigoKT0+eyJ1c2Ugc3RyaWN0IjttaSgpO19hKCk7ZXIoKTtjaSgpO3Z5PXtzaG93TGVnZW5kOiEwLHRpY2tzOjUsbWF4Om51bGwsbWluOjAsZ3JhdGljdWxlOiJjaXJjbGUifSx2dmU9e2F4ZXM6W10sY3VydmVzOltdLG9wdGlvbnM6dnl9LGEwPXN0cnVjdHVyZWRDbG9uZSh2dmUpLFB0dD1vci5yYWRhcixCdHQ9bygoKT0+JG4oey4uLlB0dCwuLi50cigpLnJhZGFyfSksImdldENvbmZpZyIpLHh2ZT1vKCgpPT5hMC5heGVzLCJnZXRBeGVzIiksRnR0PW8oKCk9PmEwLmN1cnZlcywiZ2V0Q3VydmVzIiksJHR0PW8oKCk9PmEwLm9wdGlvbnMsImdldE9wdGlvbnMiKSx6dHQ9byh0PT57YTAuYXhlcz10Lm1hcChlPT4oe25hbWU6ZS5uYW1lLGxhYmVsOmUubGFiZWw/P2UubmFtZX0pKX0sInNldEF4ZXMiKSxHdHQ9byh0PT57YTAuY3VydmVzPXQubWFwKGU9Pih7bmFtZTplLm5hbWUsbGFiZWw6ZS5sYWJlbD8/ZS5uYW1lLGVudHJpZXM6VnR0KGUuZW50cmllcyl9KSl9LCJzZXRDdXJ2ZXMiKSxWdHQ9byh0PT57aWYodFswXS5heGlzPT1udWxsKXJldHVybiB0Lm1hcChyPT5yLnZhbHVlKTtsZXQgZT14dmUoKTtpZihlLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJBeGVzIG11c3QgYmUgcG9wdWxhdGVkIGJlZm9yZSBjdXJ2ZXMgZm9yIHJlZmVyZW5jZSBlbnRyaWVzIik7cmV0dXJuIGUubWFwKHI9PntsZXQgbj10LmZpbmQoaT0+aS5heGlzPy4kcmVmVGV4dD09PXIubmFtZSk7aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgZW50cnkgZm9yIGF4aXMgIityLmxhYmVsKTtyZXR1cm4gbi52YWx1ZX0pfSwiY29tcHV0ZUN1cnZlRW50cmllcyIpLFV0dD1vKHQ9PntsZXQgZT10LnJlZHVjZSgocixuKT0+KHJbbi5uYW1lXT1uLHIpLHt9KTthMC5vcHRpb25zPXtzaG93TGVnZW5kOmUuc2hvd0xlZ2VuZD8udmFsdWU/P3Z5LnNob3dMZWdlbmQsdGlja3M6ZS50aWNrcz8udmFsdWU/P3Z5LnRpY2tzLG1heDplLm1heD8udmFsdWU/P3Z5Lm1heCxtaW46ZS5taW4/LnZhbHVlPz92eS5taW4sZ3JhdGljdWxlOmUuZ3JhdGljdWxlPy52YWx1ZT8/dnkuZ3JhdGljdWxlfX0sInNldE9wdGlvbnMiKSxIdHQ9bygoKT0+e2tyKCksYTA9c3RydWN0dXJlZENsb25lKHZ2ZSl9LCJjbGVhciIpLHMwPXtnZXRBeGVzOnh2ZSxnZXRDdXJ2ZXM6RnR0LGdldE9wdGlvbnM6JHR0LHNldEF4ZXM6enR0LHNldEN1cnZlczpHdHQsc2V0T3B0aW9uczpVdHQsZ2V0Q29uZmlnOkJ0dCxjbGVhcjpIdHQsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcn19KTt2YXIgV3R0LGJ2ZSxUdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZigpO3l0KCk7TXAoKTtNRigpO1d0dD1vKHQ9PntKbyh0LHMwKTtsZXR7YXhlczplLGN1cnZlczpyLG9wdGlvbnM6bn09dDtzMC5zZXRBeGVzKGUpLHMwLnNldEN1cnZlcyhyKSxzMC5zZXRPcHRpb25zKG4pfSwicG9wdWxhdGUiKSxidmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJyYWRhciIsdCk7WC5kZWJ1ZyhlKSxXdHQoZSl9LCJwYXJzZSIpfX0pO2Z1bmN0aW9uIEt0dCh0LGUscixuLGksYSxzKXtsZXQgbD1lLmxlbmd0aCx1PU1hdGgubWluKHMud2lkdGgscy5oZWlnaHQpLzI7ci5mb3JFYWNoKChoLGYpPT57aWYoaC5lbnRyaWVzLmxlbmd0aCE9PWwpcmV0dXJuO2xldCBkPWguZW50cmllcy5tYXAoKHAsbSk9PntsZXQgZz0yKk1hdGguUEkqbS9sLU1hdGguUEkvMix5PVF0dChwLG4saSx1KSx2PXkqTWF0aC5jb3MoZykseD15Kk1hdGguc2luKGcpO3JldHVybnt4OnYseTp4fX0pO2E9PT0iY2lyY2xlIj90LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLFp0dChkLHMuY3VydmVUZW5zaW9uKSkuYXR0cigiY2xhc3MiLGByYWRhckN1cnZlLSR7Zn1gKTphPT09InBvbHlnb24iJiZ0LmFwcGVuZCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsZC5tYXAocD0+YCR7cC54fSwke3AueX1gKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIixgcmFkYXJDdXJ2ZS0ke2Z9YCl9KX1mdW5jdGlvbiBRdHQodCxlLHIsbil7bGV0IGk9TWF0aC5taW4oTWF0aC5tYXgodCxlKSxyKTtyZXR1cm4gbiooaS1lKS8oci1lKX1mdW5jdGlvbiBadHQodCxlKXtsZXQgcj10Lmxlbmd0aCxuPWBNJHt0WzBdLnh9LCR7dFswXS55fWA7Zm9yKGxldCBpPTA7aTxyO2krKyl7bGV0IGE9dFsoaS0xK3IpJXJdLHM9dFtpXSxsPXRbKGkrMSklcl0sdT10WyhpKzIpJXJdLGg9e3g6cy54KyhsLngtYS54KSplLHk6cy55KyhsLnktYS55KSplfSxmPXt4OmwueC0odS54LXMueCkqZSx5OmwueS0odS55LXMueSkqZX07bis9YCBDJHtoLnh9LCR7aC55fSAke2YueH0sJHtmLnl9ICR7bC54fSwke2wueX1gfXJldHVybmAke259IFpgfWZ1bmN0aW9uIEp0dCh0LGUscixuKXtpZighcilyZXR1cm47bGV0IGk9KG4ud2lkdGgvMituLm1hcmdpblJpZ2h0KSozLzQsYT0tKG4uaGVpZ2h0LzIrbi5tYXJnaW5Ub3ApKjMvNCxzPTIwO2UuZm9yRWFjaCgobCx1KT0+e2xldCBoPXQuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aX0sICR7YSt1KnN9KWApO2guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDEyKS5hdHRyKCJoZWlnaHQiLDEyKS5hdHRyKCJjbGFzcyIsYHJhZGFyTGVnZW5kQm94LSR7dX1gKSxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDE2KS5hdHRyKCJ5IiwwKS5hdHRyKCJjbGFzcyIsInJhZGFyTGVnZW5kVGV4dCIpLnRleHQobC5sYWJlbCl9KX12YXIgcXR0LFl0dCxYdHQsanR0LHd2ZSxrdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWbCgpO3F0dD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldEF4ZXMoKSxzPWkuZ2V0Q3VydmVzKCksbD1pLmdldE9wdGlvbnMoKSx1PWkuZ2V0Q29uZmlnKCksaD1pLmdldERpYWdyYW1UaXRsZSgpLGY9TGkoZSksZD1ZdHQoZix1KSxwPWwubWF4Pz9NYXRoLm1heCguLi5zLm1hcCh5PT5NYXRoLm1heCguLi55LmVudHJpZXMpKSksbT1sLm1pbixnPU1hdGgubWluKHUud2lkdGgsdS5oZWlnaHQpLzI7WHR0KGQsYSxnLGwudGlja3MsbC5ncmF0aWN1bGUpLGp0dChkLGEsZyx1KSxLdHQoZCxhLHMsbSxwLGwuZ3JhdGljdWxlLHUpLEp0dChkLHMsbC5zaG93TGVnZW5kLHUpLGQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyYWRhclRpdGxlIikudGV4dChoKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtdS5oZWlnaHQvMi11Lm1hcmdpblRvcCl9LCJkcmF3IiksWXR0PW8oKHQsZSk9PntsZXQgcj1lLndpZHRoK2UubWFyZ2luTGVmdCtlLm1hcmdpblJpZ2h0LG49ZS5oZWlnaHQrZS5tYXJnaW5Ub3ArZS5tYXJnaW5Cb3R0b20saT17eDplLm1hcmdpbkxlZnQrZS53aWR0aC8yLHk6ZS5tYXJnaW5Ub3ArZS5oZWlnaHQvMn07cmV0dXJuIHQuYXR0cigidmlld2JveCIsYDAgMCAke3J9ICR7bn1gKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixuKSx0LmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2kueH0sICR7aS55fSlgKX0sImRyYXdGcmFtZSIpLFh0dD1vKCh0LGUscixuLGkpPT57aWYoaT09PSJjaXJjbGUiKWZvcihsZXQgYT0wO2E8bjthKyspe2xldCBzPXIqKGErMSkvbjt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIscykuYXR0cigiY2xhc3MiLCJyYWRhckdyYXRpY3VsZSIpfWVsc2UgaWYoaT09PSJwb2x5Z29uIil7bGV0IGE9ZS5sZW5ndGg7Zm9yKGxldCBzPTA7czxuO3MrKyl7bGV0IGw9cioocysxKS9uLHU9ZS5tYXAoKGgsZik9PntsZXQgZD0yKmYqTWF0aC5QSS9hLU1hdGguUEkvMixwPWwqTWF0aC5jb3MoZCksbT1sKk1hdGguc2luKGQpO3JldHVybmAke3B9LCR7bX1gfSkuam9pbigiICIpO3QuYXBwZW5kKCJwb2x5Z29uIikuYXR0cigicG9pbnRzIix1KS5hdHRyKCJjbGFzcyIsInJhZGFyR3JhdGljdWxlIil9fX0sImRyYXdHcmF0aWN1bGUiKSxqdHQ9bygodCxlLHIsbik9PntsZXQgaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz1lW2FdLmxhYmVsLGw9MiphKk1hdGguUEkvaS1NYXRoLlBJLzI7dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLDApLmF0dHIoIngyIixyKm4uYXhpc1NjYWxlRmFjdG9yKk1hdGguY29zKGwpKS5hdHRyKCJ5MiIscipuLmF4aXNTY2FsZUZhY3RvcipNYXRoLnNpbihsKSkuYXR0cigiY2xhc3MiLCJyYWRhckF4aXNMaW5lIiksdC5hcHBlbmQoInRleHQiKS50ZXh0KHMpLmF0dHIoIngiLHIqbi5heGlzTGFiZWxGYWN0b3IqTWF0aC5jb3MobCkpLmF0dHIoInkiLHIqbi5heGlzTGFiZWxGYWN0b3IqTWF0aC5zaW4obCkpLmF0dHIoImNsYXNzIiwicmFkYXJBeGlzTGFiZWwiKX19LCJkcmF3QXhlcyIpO28oS3R0LCJkcmF3Q3VydmVzIik7byhRdHQsInJlbGF0aXZlUmFkaXVzIik7byhadHQsImNsb3NlZFJvdW5kQ3VydmUiKTtvKEp0dCwiZHJhd0xlZ2VuZCIpO3d2ZT17ZHJhdzpxdHR9fSk7dmFyIGVydCx0cnQsRXZlLFN2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2VyKCk7QnkoKTttaSgpO2VydD1vKCh0LGUpPT57bGV0IHI9IiI7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl7bGV0IGk9dFtgY1NjYWxlJHtufWBdO3IrPWAKCQkucmFkYXJDdXJ2ZS0ke259IHsKCQkJY29sb3I6ICR7aX07CgkJCWZpbGw6ICR7aX07CgkJCWZpbGwtb3BhY2l0eTogJHtlLmN1cnZlT3BhY2l0eX07CgkJCXN0cm9rZTogJHtpfTsKCQkJc3Ryb2tlLXdpZHRoOiAke2UuY3VydmVTdHJva2VXaWR0aH07CgkJfQoJCS5yYWRhckxlZ2VuZEJveC0ke259IHsKCQkJZmlsbDogJHtpfTsKCQkJZmlsbC1vcGFjaXR5OiAke2UuY3VydmVPcGFjaXR5fTsKCQkJc3Ryb2tlOiAke2l9OwoJCX0KCQlgfXJldHVybiByfSwiZ2VuSW5kZXhTdHlsZXMiKSx0cnQ9byh0PT57bGV0IGU9ZGgoKSxyPXRyKCksbj0kbihlLHIudGhlbWVWYXJpYWJsZXMpLGk9JG4obi5yYWRhcix0KTtyZXR1cm57dGhlbWVWYXJpYWJsZXM6bixyYWRhck9wdGlvbnM6aX19LCJidWlsZFJhZGFyU3R5bGVPcHRpb25zIiksRXZlPW8oKHtyYWRhcjp0fT17fSk9PntsZXR7dGhlbWVWYXJpYWJsZXM6ZSxyYWRhck9wdGlvbnM6cn09dHJ0KHQpO3JldHVybmAKCS5yYWRhclRpdGxlIHsKCQlmb250LXNpemU6ICR7ZS5mb250U2l6ZX07CgkJY29sb3I6ICR7ZS50aXRsZUNvbG9yfTsKCQlkb21pbmFudC1iYXNlbGluZTogaGFuZ2luZzsKCQl0ZXh0LWFuY2hvcjogbWlkZGxlOwoJfQoJLnJhZGFyQXhpc0xpbmUgewoJCXN0cm9rZTogJHtyLmF4aXNDb2xvcn07CgkJc3Ryb2tlLXdpZHRoOiAke3IuYXhpc1N0cm9rZVdpZHRofTsKCX0KCS5yYWRhckF4aXNMYWJlbCB7CgkJZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKCQl0ZXh0LWFuY2hvcjogbWlkZGxlOwoJCWZvbnQtc2l6ZTogJHtyLmF4aXNMYWJlbEZvbnRTaXplfXB4OwoJCWNvbG9yOiAke3IuYXhpc0NvbG9yfTsKCX0KCS5yYWRhckdyYXRpY3VsZSB7CgkJZmlsbDogJHtyLmdyYXRpY3VsZUNvbG9yfTsKCQlmaWxsLW9wYWNpdHk6ICR7ci5ncmF0aWN1bGVPcGFjaXR5fTsKCQlzdHJva2U6ICR7ci5ncmF0aWN1bGVDb2xvcn07CgkJc3Ryb2tlLXdpZHRoOiAke3IuZ3JhdGljdWxlU3Ryb2tlV2lkdGh9OwoJfQoJLnJhZGFyTGVnZW5kVGV4dCB7CgkJdGV4dC1hbmNob3I6IHN0YXJ0OwoJCWZvbnQtc2l6ZTogJHtyLmxlZ2VuZEZvbnRTaXplfXB4OwoJCWRvbWluYW50LWJhc2VsaW5lOiBoYW5naW5nOwoJfQoJJHtlcnQoZSxyKX0KCWB9LCJzdHlsZXMiKX0pO3ZhciBDdmU9e307dXIoQ3ZlLHtkaWFncmFtOigpPT5ycnR9KTt2YXIgcnJ0LEF2ZT1OKCgpPT57InVzZSBzdHJpY3QiO01GKCk7VHZlKCk7a3ZlKCk7U3ZlKCk7cnJ0PXtwYXJzZXI6YnZlLGRiOnMwLHJlbmRlcmVyOnd2ZSxzdHlsZXM6RXZlfX0pO3ZhciBJRixMdmUsUnZlPU4oKCk9PnsidXNlIHN0cmljdCI7SUY9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFQsUyx3LEUpe2Zvcih3PXd8fHt9LEU9VC5sZW5ndGg7RS0tO3dbVFtFXV09Uyk7cmV0dXJuIHd9LCJvIiksZT1bMSw3XSxyPVsxLDEzXSxuPVsxLDE0XSxpPVsxLDE1XSxhPVsxLDE5XSxzPVsxLDE2XSxsPVsxLDE3XSx1PVsxLDE4XSxoPVs4LDMwXSxmPVs4LDIxLDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSxkPVsxLDIzXSxwPVsxLDI0XSxtPVs4LDE1LDE2LDIxLDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSxnPVs4LDE1LDE2LDIxLDI3LDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSx5PVsxLDQ5XSx2PXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzcGFjZUxpbmVzOjMsU1BBQ0VMSU5FOjQsTkw6NSxzZXBhcmF0b3I6NixTUEFDRTo3LEVPRjo4LHN0YXJ0OjksQkxPQ0tfRElBR1JBTV9LRVk6MTAsZG9jdW1lbnQ6MTEsc3RvcDoxMixzdGF0ZW1lbnQ6MTMsbGluazoxNCxMSU5LOjE1LFNUQVJUX0xJTks6MTYsTElOS19MQUJFTDoxNyxTVFI6MTgsbm9kZVN0YXRlbWVudDoxOSxjb2x1bW5zU3RhdGVtZW50OjIwLFNQQUNFX0JMT0NLOjIxLGJsb2NrU3RhdGVtZW50OjIyLGNsYXNzRGVmU3RhdGVtZW50OjIzLGNzc0NsYXNzU3RhdGVtZW50OjI0LHN0eWxlU3RhdGVtZW50OjI1LG5vZGU6MjYsU0laRToyNyxDT0xVTU5TOjI4LCJpZC1ibG9jayI6MjksZW5kOjMwLGJsb2NrOjMxLE5PREVfSUQ6MzIsbm9kZVNoYXBlTkxhYmVsOjMzLGRpckxpc3Q6MzQsRElSOjM1LE5PREVfRFNUQVJUOjM2LE5PREVfREVORDozNyxCTE9DS19BUlJPV19TVEFSVDozOCxCTE9DS19BUlJPV19FTkQ6MzksY2xhc3NEZWY6NDAsQ0xBU1NERUZfSUQ6NDEsQ0xBU1NERUZfU1RZTEVPUFRTOjQyLERFRkFVTFQ6NDMsY2xhc3M6NDQsQ0xBU1NFTlRJVFlfSURTOjQ1LFNUWUxFQ0xBU1M6NDYsc3R5bGU6NDcsU1RZTEVfRU5USVRZX0lEUzo0OCxTVFlMRV9ERUZJTklUSU9OX0RBVEE6NDksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFTElORSIsNToiTkwiLDc6IlNQQUNFIiw4OiJFT0YiLDEwOiJCTE9DS19ESUFHUkFNX0tFWSIsMTU6IkxJTksiLDE2OiJTVEFSVF9MSU5LIiwxNzoiTElOS19MQUJFTCIsMTg6IlNUUiIsMjE6IlNQQUNFX0JMT0NLIiwyNzoiU0laRSIsMjg6IkNPTFVNTlMiLDI5OiJpZC1ibG9jayIsMzA6ImVuZCIsMzE6ImJsb2NrIiwzMjoiTk9ERV9JRCIsMzU6IkRJUiIsMzY6Ik5PREVfRFNUQVJUIiwzNzoiTk9ERV9ERU5EIiwzODoiQkxPQ0tfQVJST1dfU1RBUlQiLDM5OiJCTE9DS19BUlJPV19FTkQiLDQwOiJjbGFzc0RlZiIsNDE6IkNMQVNTREVGX0lEIiw0MjoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MzoiREVGQVVMVCIsNDQ6ImNsYXNzIiw0NToiQ0xBU1NFTlRJVFlfSURTIiw0NjoiU1RZTEVDTEFTUyIsNDc6InN0eWxlIiw0ODoiU1RZTEVfRU5USVRZX0lEUyIsNDk6IlNUWUxFX0RFRklOSVRJT05fREFUQSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbMywyXSxbNiwxXSxbNiwxXSxbNiwxXSxbOSwzXSxbMTIsMV0sWzEyLDFdLFsxMiwyXSxbMTIsMl0sWzExLDFdLFsxMSwyXSxbMTQsMV0sWzE0LDRdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTksM10sWzE5LDJdLFsxOSwxXSxbMjAsMV0sWzIyLDRdLFsyMiwzXSxbMjYsMV0sWzI2LDJdLFszNCwxXSxbMzQsMl0sWzMzLDNdLFszMyw0XSxbMjMsM10sWzIzLDNdLFsyNCwzXSxbMjUsM11dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihTLHcsRSxfLEMsRCxPKXt2YXIgUj1ELmxlbmd0aC0xO3N3aXRjaChDKXtjYXNlIDQ6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChOTCkgIik7YnJlYWs7Y2FzZSA1Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoU3BhY2UpICIpO2JyZWFrO2Nhc2UgNjpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKEVPRikgIik7YnJlYWs7Y2FzZSA3Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGhpZXJhcmNoeTogIixEW1ItMV0pLF8uc2V0SGllcmFyY2h5KERbUi0xXSk7YnJlYWs7Y2FzZSA4Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTA6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTDIgIik7YnJlYWs7Y2FzZSAxMTpfLmdldExvZ2dlcigpLmRlYnVnKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxMjpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQ6ICIsRFtSXSksdHlwZW9mIERbUl0ubGVuZ3RoPT0ibnVtYmVyIj90aGlzLiQ9RFtSXTp0aGlzLiQ9W0RbUl1dO2JyZWFrO2Nhc2UgMTM6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc3RhdGVtZW50ICMyOiAiLERbUi0xXSksdGhpcy4kPVtEW1ItMV1dLmNvbmNhdChEW1JdKTticmVhaztjYXNlIDE0Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGxpbms6ICIsRFtSXSxTKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOkRbUl0sbGFiZWw6IiJ9O2JyZWFrO2Nhc2UgMTU6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogTEFCRUwgbGluazogIixEW1ItM10sRFtSLTFdLERbUl0pLHRoaXMuJD17ZWRnZVR5cGVTdHI6RFtSXSxsYWJlbDpEW1ItMV19O2JyZWFrO2Nhc2UgMTg6bGV0IGs9cGFyc2VJbnQoRFtSXSksTD1fLmdlbmVyYXRlSWQoKTt0aGlzLiQ9e2lkOkwsdHlwZToic3BhY2UiLGxhYmVsOiIiLHdpZHRoOmssY2hpbGRyZW46W119O2JyZWFrO2Nhc2UgMjM6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogKG5vZGVTdGF0ZW1lbnQgbGluayBub2RlKSAiLERbUi0yXSxEW1ItMV0sRFtSXSwiIHR5cGVzdHI6ICIsRFtSLTFdLmVkZ2VUeXBlU3RyKTtsZXQgQT1fLmVkZ2VTdHJUb0VkZ2VEYXRhKERbUi0xXS5lZGdlVHlwZVN0cik7dGhpcy4kPVt7aWQ6RFtSLTJdLmlkLGxhYmVsOkRbUi0yXS5sYWJlbCx0eXBlOkRbUi0yXS50eXBlLGRpcmVjdGlvbnM6RFtSLTJdLmRpcmVjdGlvbnN9LHtpZDpEW1ItMl0uaWQrIi0iK0RbUl0uaWQsc3RhcnQ6RFtSLTJdLmlkLGVuZDpEW1JdLmlkLGxhYmVsOkRbUi0xXS5sYWJlbCx0eXBlOiJlZGdlIixkaXJlY3Rpb25zOkRbUl0uZGlyZWN0aW9ucyxhcnJvd1R5cGVFbmQ6QSxhcnJvd1R5cGVTdGFydDoiYXJyb3dfb3BlbiJ9LHtpZDpEW1JdLmlkLGxhYmVsOkRbUl0ubGFiZWwsdHlwZTpfLnR5cGVTdHIyVHlwZShEW1JdLnR5cGVTdHIpLGRpcmVjdGlvbnM6RFtSXS5kaXJlY3Rpb25zfV07YnJlYWs7Y2FzZSAyNDpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU3RhdGVtZW50IChhYmM4OCBub2RlIHNpemUpICIsRFtSLTFdLERbUl0pLHRoaXMuJD17aWQ6RFtSLTFdLmlkLGxhYmVsOkRbUi0xXS5sYWJlbCx0eXBlOl8udHlwZVN0cjJUeXBlKERbUi0xXS50eXBlU3RyKSxkaXJlY3Rpb25zOkRbUi0xXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOnBhcnNlSW50KERbUl0sMTApfTticmVhaztjYXNlIDI1Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKG5vZGUpICIsRFtSXSksdGhpcy4kPXtpZDpEW1JdLmlkLGxhYmVsOkRbUl0ubGFiZWwsdHlwZTpfLnR5cGVTdHIyVHlwZShEW1JdLnR5cGVTdHIpLGRpcmVjdGlvbnM6RFtSXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOjF9O2JyZWFrO2Nhc2UgMjY6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiQVBBMTIzIix0aGlzP3RoaXM6Im5hIiksXy5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUzogIixEW1JdKSx0aGlzLiQ9e3R5cGU6ImNvbHVtbi1zZXR0aW5nIixjb2x1bW5zOkRbUl09PT0iYXV0byI/LTE6cGFyc2VJbnQoRFtSXSl9O2JyZWFrO2Nhc2UgMjc6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogaWQtYmxvY2sgc3RhdGVtZW50IDogIixEW1ItMl0sRFtSLTFdKTtsZXQgST1fLmdlbmVyYXRlSWQoKTt0aGlzLiQ9ey4uLkRbUi0yXSx0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOkRbUi0xXX07YnJlYWs7Y2FzZSAyODpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBibG9ja1N0YXRlbWVudCA6ICIsRFtSLTJdLERbUi0xXSxEW1JdKTtsZXQgTT1fLmdlbmVyYXRlSWQoKTt0aGlzLiQ9e2lkOk0sdHlwZToiY29tcG9zaXRlIixsYWJlbDoiIixjaGlsZHJlbjpEW1ItMV19O2JyZWFrO2Nhc2UgMjk6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZSAoTk9ERV9JRCBzZXBhcmF0b3IpOiAiLERbUl0pLHRoaXMuJD17aWQ6RFtSXX07YnJlYWs7Y2FzZSAzMDpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlIChOT0RFX0lEIG5vZGVTaGFwZU5MYWJlbCBzZXBhcmF0b3IpOiAiLERbUi0xXSxEW1JdKSx0aGlzLiQ9e2lkOkRbUi0xXSxsYWJlbDpEW1JdLmxhYmVsLHR5cGVTdHI6RFtSXS50eXBlU3RyLGRpcmVjdGlvbnM6RFtSXS5kaXJlY3Rpb25zfTticmVhaztjYXNlIDMxOl8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsRFtSXSksdGhpcy4kPVtEW1JdXTticmVhaztjYXNlIDMyOl8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsRFtSLTFdLERbUl0pLHRoaXMuJD1bRFtSLTFdXS5jb25jYXQoRFtSXSk7YnJlYWs7Y2FzZSAzMzpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU2hhcGVOTGFiZWw6ICIsRFtSLTJdLERbUi0xXSxEW1JdKSx0aGlzLiQ9e3R5cGVTdHI6RFtSLTJdK0RbUl0sbGFiZWw6RFtSLTFdfTticmVhaztjYXNlIDM0Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogIixEW1ItM10sRFtSLTJdLCIgIzM6IixEW1ItMV0sRFtSXSksdGhpcy4kPXt0eXBlU3RyOkRbUi0zXStEW1JdLGxhYmVsOkRbUi0yXSxkaXJlY3Rpb25zOkRbUi0xXX07YnJlYWs7Y2FzZSAzNTpjYXNlIDM2OnRoaXMuJD17dHlwZToiY2xhc3NEZWYiLGlkOkRbUi0xXS50cmltKCksY3NzOkRbUl0udHJpbSgpfTticmVhaztjYXNlIDM3OnRoaXMuJD17dHlwZToiYXBwbHlDbGFzcyIsaWQ6RFtSLTFdLnRyaW0oKSxzdHlsZUNsYXNzOkRbUl0udHJpbSgpfTticmVhaztjYXNlIDM4OnRoaXMuJD17dHlwZToiYXBwbHlTdHlsZXMiLGlkOkRbUi0xXS50cmltKCksc3R5bGVzU3RyOkRbUl0udHJpbSgpfTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezk6MSwxMDpbMSwyXX0sezE6WzNdfSx7MTE6MywxMzo0LDE5OjUsMjA6NiwyMTplLDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyODpyLDI5Om4sMzE6aSwzMjphLDQwOnMsNDQ6bCw0Nzp1fSx7ODpbMSwyMF19LHQoaCxbMiwxMl0sezEzOjQsMTk6NSwyMDo2LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwxMToyMSwyMTplLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9KSx0KGYsWzIsMTZdLHsxNDoyMiwxNTpkLDE2OnB9KSx0KGYsWzIsMTddKSx0KGYsWzIsMThdKSx0KGYsWzIsMTldKSx0KGYsWzIsMjBdKSx0KGYsWzIsMjFdKSx0KGYsWzIsMjJdKSx0KG0sWzIsMjVdLHsyNzpbMSwyNV19KSx0KGYsWzIsMjZdKSx7MTk6MjYsMjY6MTIsMzI6YX0sezExOjI3LDEzOjQsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHs0MTpbMSwyOF0sNDM6WzEsMjldfSx7NDU6WzEsMzBdfSx7NDg6WzEsMzFdfSx0KGcsWzIsMjldLHszMzozMiwzNjpbMSwzM10sMzg6WzEsMzRdfSksezE6WzIsN119LHQoaCxbMiwxM10pLHsyNjozNSwzMjphfSx7MzI6WzIsMTRdfSx7MTc6WzEsMzZdfSx0KG0sWzIsMjRdKSx7MTE6MzcsMTM6NCwxNDoyMiwxNTpkLDE2OnAsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHszMDpbMSwzOF19LHs0MjpbMSwzOV19LHs0MjpbMSw0MF19LHs0NjpbMSw0MV19LHs0OTpbMSw0Ml19LHQoZyxbMiwzMF0pLHsxODpbMSw0M119LHsxODpbMSw0NF19LHQobSxbMiwyM10pLHsxODpbMSw0NV19LHszMDpbMSw0Nl19LHQoZixbMiwyOF0pLHQoZixbMiwzNV0pLHQoZixbMiwzNl0pLHQoZixbMiwzN10pLHQoZixbMiwzOF0pLHszNzpbMSw0N119LHszNDo0OCwzNTp5fSx7MTU6WzEsNTBdfSx0KGYsWzIsMjddKSx0KGcsWzIsMzNdKSx7Mzk6WzEsNTFdfSx7MzQ6NTIsMzU6eSwzOTpbMiwzMV19LHszMjpbMiwxNV19LHQoZyxbMiwzNF0pLHszOTpbMiwzMl19XSxkZWZhdWx0QWN0aW9uczp7MjA6WzIsN10sMjM6WzIsMTRdLDUwOlsyLDE1XSw1MjpbMiwzMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihTLHcpe2lmKHcucmVjb3ZlcmFibGUpdGhpcy50cmFjZShTKTtlbHNle3ZhciBFPW5ldyBFcnJvcihTKTt0aHJvdyBFLmhhc2g9dyxFfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKFMpe3ZhciB3PXRoaXMsRT1bMF0sXz1bXSxDPVtudWxsXSxEPVtdLE89dGhpcy50YWJsZSxSPSIiLGs9MCxMPTAsQT0wLEk9MixNPTEsUD1ELnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEI9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxGPXt5eTp7fX07Zm9yKHZhciB6IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseikmJihGLnl5W3pdPXRoaXMueXlbel0pO0Iuc2V0SW5wdXQoUyxGLnl5KSxGLnl5LmxleGVyPUIsRi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQi55eWxsb2M+InUiJiYoQi55eWxsb2M9e30pO3ZhciAkPUIueXlsbG9jO0QucHVzaCgkKTt2YXIgVT1CLm9wdGlvbnMmJkIub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEYueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Ri55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBLKHNlKXtFLmxlbmd0aD1FLmxlbmd0aC0yKnNlLEMubGVuZ3RoPUMubGVuZ3RoLXNlLEQubGVuZ3RoPUQubGVuZ3RoLXNlfW8oSywicG9wU3RhY2siKTtmdW5jdGlvbiBlZSgpe3ZhciBzZTtyZXR1cm4gc2U9Xy5wb3AoKXx8Qi5sZXgoKXx8TSx0eXBlb2Ygc2UhPSJudW1iZXIiJiYoc2UgaW5zdGFuY2VvZiBBcnJheSYmKF89c2Usc2U9Xy5wb3AoKSksc2U9dy5zeW1ib2xzX1tzZV18fHNlKSxzZX1vKGVlLCJsZXgiKTtmb3IodmFyIFksY2UsWix1ZSxRLGosbmU9e30sdGUsaGUsbGUsSjs7KXtpZihaPUVbRS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1taXT91ZT10aGlzLmRlZmF1bHRBY3Rpb25zW1pdOigoWT09PW51bGx8fHR5cGVvZiBZPiJ1IikmJihZPWVlKCkpLHVlPU9bWl0mJk9bWl1bWV0pLHR5cGVvZiB1ZT4idSJ8fCF1ZS5sZW5ndGh8fCF1ZVswXSl7dmFyIFNlPSIiO0o9W107Zm9yKHRlIGluIE9bWl0pdGhpcy50ZXJtaW5hbHNfW3RlXSYmdGU+SSYmSi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bdGVdKyInIik7Qi5zaG93UG9zaXRpb24/U2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoaysxKStgOgpgK0Iuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtKLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWV18fFkpKyInIjpTZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrKzEpKyI6IFVuZXhwZWN0ZWQgIisoWT09TT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tZXXx8WSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoU2Use3RleHQ6Qi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWV18fFksbGluZTpCLnl5bGluZW5vLGxvYzokLGV4cGVjdGVkOkp9KX1pZih1ZVswXWluc3RhbmNlb2YgQXJyYXkmJnVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWisiLCB0b2tlbjogIitZKTtzd2l0Y2godWVbMF0pe2Nhc2UgMTpFLnB1c2goWSksQy5wdXNoKEIueXl0ZXh0KSxELnB1c2goQi55eWxsb2MpLEUucHVzaCh1ZVsxXSksWT1udWxsLGNlPyhZPWNlLGNlPW51bGwpOihMPUIueXlsZW5nLFI9Qi55eXRleHQsaz1CLnl5bGluZW5vLCQ9Qi55eWxsb2MsQT4wJiZBLS0pO2JyZWFrO2Nhc2UgMjppZihoZT10aGlzLnByb2R1Y3Rpb25zX1t1ZVsxXV1bMV0sbmUuJD1DW0MubGVuZ3RoLWhlXSxuZS5fJD17Zmlyc3RfbGluZTpEW0QubGVuZ3RoLShoZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkRbRC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpEW0QubGVuZ3RoLShoZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpEW0QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxVJiYobmUuXyQucmFuZ2U9W0RbRC5sZW5ndGgtKGhlfHwxKV0ucmFuZ2VbMF0sRFtELmxlbmd0aC0xXS5yYW5nZVsxXV0pLGo9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG5lLFtSLEwsayxGLnl5LHVlWzFdLEMsRF0uY29uY2F0KFApKSx0eXBlb2YgajwidSIpcmV0dXJuIGo7aGUmJihFPUUuc2xpY2UoMCwtMSpoZSoyKSxDPUMuc2xpY2UoMCwtMSpoZSksRD1ELnNsaWNlKDAsLTEqaGUpKSxFLnB1c2godGhpcy5wcm9kdWN0aW9uc19bdWVbMV1dWzBdKSxDLnB1c2gobmUuJCksRC5wdXNoKG5lLl8kKSxsZT1PW0VbRS5sZW5ndGgtMl1dW0VbRS5sZW5ndGgtMV1dLEUucHVzaChsZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHg9ZnVuY3Rpb24oKXt2YXIgVD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHcsRSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih3LEUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHcpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oUyx3KXtyZXR1cm4gdGhpcy55eT13fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1TLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVMsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVMsdGhpcy5tYXRjaGVkKz1TO3ZhciB3PVMubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiB3Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxTfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKFMpe3ZhciB3PVMubGVuZ3RoLEU9Uy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVMrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXcpLHRoaXMub2Zmc2V0LT13O3ZhciBfPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1FLmxlbmd0aC0xKTt2YXIgQz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RT8oRS5sZW5ndGg9PT1fLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrX1tfLmxlbmd0aC1FLmxlbmd0aF0ubGVuZ3RoLUVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi13fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0NbMF0sQ1swXSt0aGlzLnl5bGVuZy13XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oUyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFMpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oUy5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Muc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgUz10aGlzLm1hdGNoO3JldHVybiBTLmxlbmd0aDwyMCYmKFMrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVMubGVuZ3RoKSksKFMuc3Vic3RyKDAsMjApKyhTLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5wYXN0SW5wdXQoKSx3PW5ldyBBcnJheShTLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFMrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3crIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKFMsdyl7dmFyIEUsXyxDO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihDPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEMueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksXz1TWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxfJiYodGhpcy55eWxpbmVubys9Xy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpfP19bXy5sZW5ndGgtMV0ubGVuZ3RoLV9bXy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitTWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVNbMF0sdGhpcy5tYXRjaCs9U1swXSx0aGlzLm1hdGNoZXM9Uyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShTWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1TWzBdLEU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsdyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxFKXJldHVybiBFO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBEIGluIEMpdGhpc1tEXT1DW0RdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBTLHcsRSxfO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEM9dGhpcy5fY3VycmVudFJ1bGVzKCksRD0wO0Q8Qy5sZW5ndGg7RCsrKWlmKEU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tDW0RdXSksRSYmKCF3fHxFWzBdLmxlbmd0aD53WzBdLmxlbmd0aCkpe2lmKHc9RSxfPUQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUz10aGlzLnRlc3RfbWF0Y2goRSxDW0RdKSxTIT09ITEpcmV0dXJuIFM7aWYodGhpcy5fYmFja3RyYWNrKXt3PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHc/KFM9dGhpcy50ZXN0X21hdGNoKHcsQ1tfXSksUyE9PSExP1M6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgdz10aGlzLm5leHQoKTtyZXR1cm4gd3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24odyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHcpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gdz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKHcpe3JldHVybiB3PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMod3x8MCksdz49MD90aGlzLmNvbmRpdGlvblN0YWNrW3ddOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24odyl7dGhpcy5iZWdpbih3KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHcsRSxfLEMpe3ZhciBEPUM7c3dpdGNoKF8pe2Nhc2UgMDpyZXR1cm4gMTA7Y2FzZSAxOnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBzcGFjZS1ibG9jayIpLDMxO2JyZWFrO2Nhc2UgMjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgbmwtYmxvY2siKSwzMTticmVhaztjYXNlIDM6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIHNwYWNlLWJsb2NrIiksMjk7YnJlYWs7Y2FzZSA0OncuZ2V0TG9nZ2VyKCkuZGVidWcoIi4iLEUueXl0ZXh0KTticmVhaztjYXNlIDU6dy5nZXRMb2dnZXIoKS5kZWJ1ZygiXyIsRS55eXRleHQpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gNTtjYXNlIDc6cmV0dXJuIEUueXl0ZXh0PS0xLDI4O2JyZWFrO2Nhc2UgODpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvY29sdW1uc1xzKy8sIiIpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkNPTFVNTlMgKExFWCkiLEUueXl0ZXh0KSwyODticmVhaztjYXNlIDk6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzp3LmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFBPUFBJTkcgU1RSOiIsRS55eXRleHQpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE0OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFNUUiBlbmQ6IixFLnl5dGV4dCksIlNUUiI7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvc3BhY2VcOi8sIiIpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIlNQQUNFIE5VTSAoTEVYKSIsRS55eXRleHQpLDIxO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIEUueXl0ZXh0PSIxIix3LmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TIChMRVgpIixFLnl5dGV4dCksMjE7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gNDM7Y2FzZSAxODpyZXR1cm4iTElOS1NUWUxFIjtjYXNlIDE5OnJldHVybiJJTlRFUlBPTEFURSI7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksNDA7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDQxO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MjticmVhaztjYXNlIDI0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0NDticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDU7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ2O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVFlMRV9TVE1OVCIpLDQ3O2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RZTEVfREVGSU5JVElPTiIpLDQ4O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksImFjY190aXRsZSI7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3IiKSwiYWNjX2Rlc2NyIjticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAzNDp0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMzU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMzc6cmV0dXJuIDMwO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoLSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC0pIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC9dIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdPiIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IF0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDU1OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiAtKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1NjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKC0iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNTc6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkpIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU4OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU5OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoKCIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MzpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YzogPiIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjU6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MzpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogWyIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkJMT0NLX0FSUk9XIiksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIEFSUiBTVEFSVCIpLDM4O2JyZWFrO2Nhc2UgNzU6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTk9ERV9JRCIsRS55eXRleHQpLDMyO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogRU9GIixFLnl5dGV4dCksODticmVhaztjYXNlIDc3OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc4OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc5OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDgwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgxOncuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU3RhcnRpbmcgc3RyaW5nIiksdGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgODI6dy5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIEFSUjogU3RhcnRpbmcgc3RyaW5nIiksdGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgODM6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWDogTk9ERV9ERVNDUjoiLEUueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSA4NDp3LmdldExvZ2dlcigpLmRlYnVnKCJMRVggUE9QUElORyIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDg1OncuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogPT5CQUUiKSx0aGlzLnB1c2hTdGF0ZSgiQVJST1dfRElSIik7YnJlYWs7Y2FzZSA4NjpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHJpZ2h0KTogZGlyOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgODc6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChsZWZ0KToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDg4OnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoeCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA4OTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHkpOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTA6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh1cCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA5MTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXggKGRvd24pOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTI6cmV0dXJuIEUueXl0ZXh0PSJdPiIsdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChBUlJPV19ESVIgZW5kKToiLEUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLCJCTE9DS19BUlJPV19FTkQiO2JyZWFrO2Nhc2UgOTM6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsIiMiK0UueXl0ZXh0KyIjIiksMTU7YnJlYWs7Y2FzZSA5NDpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NTpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NzpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixFLnl5dGV4dCksdGhpcy5wdXNoU3RhdGUoIkxMQUJFTCIpLDE2O2JyZWFrO2Nhc2UgOTg6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU1RBUlRfTElOSyIsRS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjticmVhaztjYXNlIDk5OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFNUQVJUX0xJTksiLEUueXl0ZXh0KSx0aGlzLnB1c2hTdGF0ZSgiTExBQkVMIiksMTY7YnJlYWs7Y2FzZSAxMDA6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTAxOnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKSwiTElOS19MQUJFTCI7YnJlYWs7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIitFLnl5dGV4dCsiIyIpLDE1O2JyZWFrO2Nhc2UgMTAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSAxMDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLEUueXl0ZXh0KSwxNTticmVhaztjYXNlIDEwNTpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBDT0xPTiIsRS55eXRleHQpLEUueXl0ZXh0PUUueXl0ZXh0LnNsaWNlKDEpLDI3O2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OmJsb2NrLWJldGFcYikvLC9eKD86YmxvY2tccyspLywvXig/OmJsb2NrXG4rKS8sL14oPzpibG9jazopLywvXig/Oltcc10rKS8sL14oPzpbXG5dKykvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86Y29sdW1uc1xzK2F1dG9cYikvLC9eKD86Y29sdW1uc1xzK1tcZF0rKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnNwYWNlWzpdXGQrKS8sL14oPzpzcGFjZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxzKykvLC9eKD86REVGQVVMVFxzKykvLC9eKD86XHcrXHMrKS8sL14oPzpbXlxuXSopLywvXig/OmNsYXNzXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86c3R5bGVccyspLywvXig/OihcdyspKygoLFxzKlx3KykqKSkvLC9eKD86W15cbl0qKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86ZW5kXGJccyopLywvXig/OlwoXChcKCkvLC9eKD86XClcKVwpKS8sL14oPzpbXCldXCkpLywvXig/Olx9XH0pLywvXig/Olx9KS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcKCkvLC9eKD86XF1cXSkvLC9eKD86XCgpLywvXig/OlxdXCkpLywvXig/OlxcXF0pLywvXig/OlwvXF0pLywvXig/OlwpXF0pLywvXig/OltcKV0pLywvXig/OlxdPikvLC9eKD86W1xdXSkvLC9eKD86LVwpKS8sL14oPzpcKC0pLywvXig/OlwpXCkpLywvXig/OlwpKS8sL14oPzpcKFwoXCgpLywvXig/OlwoXCgpLywvXig/Olx7XHspLywvXig/Olx7KS8sL14oPzo+KS8sL14oPzpcKFxbKS8sL14oPzpcKCkvLC9eKD86XFtcWykvLC9eKD86XFtcfCkvLC9eKD86XFtcKCkvLC9eKD86XClcKVwpKS8sL14oPzpcW1xcKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzpcWykvLC9eKD86PFxbKS8sL14oPzpbXlwoXFtcblwtXClce1x9XHNcPFw+Ol0rKS8sL14oPzokKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXVtgXSkvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpcXT5ccypcKCkvLC9eKD86LD9ccypyaWdodFxzKikvLC9eKD86LD9ccypsZWZ0XHMqKS8sL14oPzosP1xzKnhccyopLywvXig/Oiw/XHMqeVxzKikvLC9eKD86LD9ccyp1cFxzKikvLC9eKD86LD9ccypkb3duXHMqKS8sL14oPzpcKVxzKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqfn5bXH5dK1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlsiXVtgXSkvLC9eKD86WyJdKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzo6XGQrKS9dLGNvbmRpdGlvbnM6e1NUWUxFX0RFRklOSVRJT046e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxTVFlMRV9TVE1OVDp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyM10saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjZdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxMTEFCRUw6e3J1bGVzOlsxMDAsMTAxLDEwMiwxMDMsMTA0XSxpbmNsdXNpdmU6ITF9LEFSUk9XX0RJUjp7cnVsZXM6Wzg2LDg3LDg4LDg5LDkwLDkxLDkyXSxpbmNsdXNpdmU6ITF9LEJMT0NLX0FSUk9XOntydWxlczpbNzcsODIsODVdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc4LDgxXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEwLDExLDc5LDgwXSxpbmNsdXNpdmU6ITF9LHNwYWNlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0LDgzLDg0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlszMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMiwxNSwxNiwxNywxOCwxOSwyMCwyNCwyNywzMCwzMiwzNCwzNyw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVH0oKTt2LmxleGVyPXg7ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIG8oYiwiUGFyc2VyIiksYi5wcm90b3R5cGU9dix2LlBhcnNlcj1iLG5ldyBifSgpO0lGLnBhcnNlcj1JRjtMdmU9SUZ9KTtmdW5jdGlvbiBmcnQodCl7c3dpdGNoKFguZGVidWcoInR5cGVTdHIyVHlwZSIsdCksdCl7Y2FzZSJbXSI6cmV0dXJuInNxdWFyZSI7Y2FzZSIoKSI6cmV0dXJuIFguZGVidWcoIndlIGhhdmUgYSByb3VuZCIpLCJyb3VuZCI7Y2FzZSIoKCkpIjpyZXR1cm4iY2lyY2xlIjtjYXNlIj5dIjpyZXR1cm4icmVjdF9sZWZ0X2ludl9hcnJvdyI7Y2FzZSJ7fSI6cmV0dXJuImRpYW1vbmQiO2Nhc2Uie3t9fSI6cmV0dXJuImhleGFnb24iO2Nhc2UiKFtdKSI6cmV0dXJuInN0YWRpdW0iO2Nhc2UiW1tdXSI6cmV0dXJuInN1YnJvdXRpbmUiO2Nhc2UiWygpXSI6cmV0dXJuImN5bGluZGVyIjtjYXNlIigoKCkpKSI6cmV0dXJuImRvdWJsZWNpcmNsZSI7Y2FzZSJbLy9dIjpyZXR1cm4ibGVhbl9yaWdodCI7Y2FzZSJbXFxcXF0iOnJldHVybiJsZWFuX2xlZnQiO2Nhc2UiWy9cXF0iOnJldHVybiJ0cmFwZXpvaWQiO2Nhc2UiW1xcL10iOnJldHVybiJpbnZfdHJhcGV6b2lkIjtjYXNlIjxbXT4iOnJldHVybiJibG9ja19hcnJvdyI7ZGVmYXVsdDpyZXR1cm4ibmEifX1mdW5jdGlvbiBkcnQodCl7c3dpdGNoKFguZGVidWcoInR5cGVTdHIyVHlwZSIsdCksdCl7Y2FzZSI9PSI6cmV0dXJuInRoaWNrIjtkZWZhdWx0OnJldHVybiJub3JtYWwifX1mdW5jdGlvbiBwcnQodCl7c3dpdGNoKHQudHJpbSgpKXtjYXNlIi0teCI6cmV0dXJuImFycm93X2Nyb3NzIjtjYXNlIi0tbyI6cmV0dXJuImFycm93X2NpcmNsZSI7ZGVmYXVsdDpyZXR1cm4iYXJyb3dfcG9pbnQifX12YXIgWWwsUEYsT0YsTnZlLE12ZSxhcnQsT3ZlLHNydCxiQyxvcnQsbHJ0LGNydCx1cnQsUHZlLEJGLF80LGhydCxJdmUsbXJ0LGdydCx5cnQsdnJ0LHhydCxicnQsVHJ0LHdydCxrcnQsRXJ0LFNydCxCdmUsRnZlPU4oKCk9PnsidXNlIHN0cmljdCI7SkwoKTttaSgpO0d0KCk7eXQoKTtwcigpO2NpKCk7WWw9bmV3IE1hcCxQRj1bXSxPRj1uZXcgTWFwLE52ZT0iY29sb3IiLE12ZT0iZmlsbCIsYXJ0PSJiZ0ZpbGwiLE92ZT0iLCIsc3J0PW1lKCksYkM9bmV3IE1hcCxvcnQ9byh0PT5aZS5zYW5pdGl6ZVRleHQodCxzcnQpLCJzYW5pdGl6ZVRleHQiKSxscnQ9byhmdW5jdGlvbih0LGU9IiIpe2xldCByPWJDLmdldCh0KTtyfHwocj17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sYkMuc2V0KHQscikpLGU/LnNwbGl0KE92ZSkuZm9yRWFjaChuPT57bGV0IGk9bi5yZXBsYWNlKC8oW147XSopOy8sIiQxIikudHJpbSgpO2lmKFJlZ0V4cChOdmUpLmV4ZWMobikpe2xldCBzPWkucmVwbGFjZShNdmUsYXJ0KS5yZXBsYWNlKE52ZSxNdmUpO3IudGV4dFN0eWxlcy5wdXNoKHMpfXIuc3R5bGVzLnB1c2goaSl9KX0sImFkZFN0eWxlQ2xhc3MiKSxjcnQ9byhmdW5jdGlvbih0LGU9IiIpe2xldCByPVlsLmdldCh0KTtlIT1udWxsJiYoci5zdHlsZXM9ZS5zcGxpdChPdmUpKX0sImFkZFN0eWxlMk5vZGUiKSx1cnQ9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPVlsLmdldChyKTtpZihuPT09dm9pZCAwKXtsZXQgaT1yLnRyaW0oKTtuPXtpZDppLHR5cGU6Im5hIixjaGlsZHJlbjpbXX0sWWwuc2V0KGksbil9bi5jbGFzc2VzfHwobi5jbGFzc2VzPVtdKSxuLmNsYXNzZXMucHVzaChlKX0pfSwic2V0Q3NzQ2xhc3MiKSxQdmU9bygodCxlKT0+e2xldCByPXQuZmxhdCgpLG49W107Zm9yKGxldCBpIG9mIHIpe2lmKGkubGFiZWwmJihpLmxhYmVsPW9ydChpLmxhYmVsKSksaS50eXBlPT09ImNsYXNzRGVmIil7bHJ0KGkuaWQsaS5jc3MpO2NvbnRpbnVlfWlmKGkudHlwZT09PSJhcHBseUNsYXNzIil7dXJ0KGkuaWQsaT8uc3R5bGVDbGFzcz8/IiIpO2NvbnRpbnVlfWlmKGkudHlwZT09PSJhcHBseVN0eWxlcyIpe2k/LnN0eWxlc1N0ciYmY3J0KGkuaWQsaT8uc3R5bGVzU3RyKTtjb250aW51ZX1pZihpLnR5cGU9PT0iY29sdW1uLXNldHRpbmciKWUuY29sdW1ucz1pLmNvbHVtbnM/Py0xO2Vsc2UgaWYoaS50eXBlPT09ImVkZ2UiKXtsZXQgYT0oT0YuZ2V0KGkuaWQpPz8wKSsxO09GLnNldChpLmlkLGEpLGkuaWQ9YSsiLSIraS5pZCxQRi5wdXNoKGkpfWVsc2V7aS5sYWJlbHx8KGkudHlwZT09PSJjb21wb3NpdGUiP2kubGFiZWw9IiI6aS5sYWJlbD1pLmlkKTtsZXQgYT1ZbC5nZXQoaS5pZCk7aWYoYT09PXZvaWQgMD9ZbC5zZXQoaS5pZCxpKTooaS50eXBlIT09Im5hIiYmKGEudHlwZT1pLnR5cGUpLGkubGFiZWwhPT1pLmlkJiYoYS5sYWJlbD1pLmxhYmVsKSksaS5jaGlsZHJlbiYmUHZlKGkuY2hpbGRyZW4saSksaS50eXBlPT09InNwYWNlIil7bGV0IHM9aS53aWR0aD8/MTtmb3IobGV0IGw9MDtsPHM7bCsrKXtsZXQgdT1hbihpKTt1LmlkPXUuaWQrIi0iK2wsWWwuc2V0KHUuaWQsdSksbi5wdXNoKHUpfX1lbHNlIGE9PT12b2lkIDAmJm4ucHVzaChpKX19ZS5jaGlsZHJlbj1ufSwicG9wdWxhdGVCbG9ja0RhdGFiYXNlIiksQkY9W10sXzQ9e2lkOiJyb290Iix0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOltdLGNvbHVtbnM6LTF9LGhydD1vKCgpPT57WC5kZWJ1ZygiQ2xlYXIgY2FsbGVkIiksa3IoKSxfND17aWQ6InJvb3QiLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46W10sY29sdW1uczotMX0sWWw9bmV3IE1hcChbWyJyb290IixfNF1dKSxCRj1bXSxiQz1uZXcgTWFwLFBGPVtdLE9GPW5ldyBNYXB9LCJjbGVhciIpO28oZnJ0LCJ0eXBlU3RyMlR5cGUiKTtvKGRydCwiZWRnZVR5cGVTdHIyVHlwZSIpO28ocHJ0LCJlZGdlU3RyVG9FZGdlRGF0YSIpO0l2ZT0wLG1ydD1vKCgpPT4oSXZlKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitJdmUpLCJnZW5lcmF0ZUlkIiksZ3J0PW8odD0+e180LmNoaWxkcmVuPXQsUHZlKHQsXzQpLEJGPV80LmNoaWxkcmVufSwic2V0SGllcmFyY2h5IikseXJ0PW8odD0+e2xldCBlPVlsLmdldCh0KTtyZXR1cm4gZT9lLmNvbHVtbnM/ZS5jb2x1bW5zOmUuY2hpbGRyZW4/ZS5jaGlsZHJlbi5sZW5ndGg6LTE6LTF9LCJnZXRDb2x1bW5zIiksdnJ0PW8oKCk9PlsuLi5ZbC52YWx1ZXMoKV0sImdldEJsb2Nrc0ZsYXQiKSx4cnQ9bygoKT0+QkZ8fFtdLCJnZXRCbG9ja3MiKSxicnQ9bygoKT0+UEYsImdldEVkZ2VzIiksVHJ0PW8odD0+WWwuZ2V0KHQpLCJnZXRCbG9jayIpLHdydD1vKHQ9PntZbC5zZXQodC5pZCx0KX0sInNldEJsb2NrIiksa3J0PW8oKCk9PlgsImdldExvZ2dlciIpLEVydD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGJDfSwiZ2V0Q2xhc3NlcyIpLFNydD17Z2V0Q29uZmlnOm8oKCk9PnRyKCkuYmxvY2ssImdldENvbmZpZyIpLHR5cGVTdHIyVHlwZTpmcnQsZWRnZVR5cGVTdHIyVHlwZTpkcnQsZWRnZVN0clRvRWRnZURhdGE6cHJ0LGdldExvZ2dlcjprcnQsZ2V0QmxvY2tzRmxhdDp2cnQsZ2V0QmxvY2tzOnhydCxnZXRFZGdlczpicnQsc2V0SGllcmFyY2h5OmdydCxnZXRCbG9jazpUcnQsc2V0QmxvY2s6d3J0LGdldENvbHVtbnM6eXJ0LGdldENsYXNzZXM6RXJ0LGNsZWFyOmhydCxnZW5lcmF0ZUlkOm1ydH0sQnZlPVNydH0pO3ZhciBUQyxDcnQsJHZlLHp2ZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7WG0oKTtUQz1vKCh0LGUpPT57bGV0IHI9aWQsbj1yKHQsInIiKSxpPXIodCwiZyIpLGE9cih0LCJiIik7cmV0dXJuIFFhKG4saSxhLGUpfSwiZmFkZSIpLENydD1vKHQ9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQoKCgogIC5sYWJlbCB0ZXh0LHNwYW4scCB7CiAgICBmaWxsOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAuZmxvd2NoYXJ0LWxhYmVsIHRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1vdXRlci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIC8vIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LWlubmVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAvLyB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke3QuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDIuMHB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC8qIEZvciBodG1sIGxhYmVscyBvbmx5ICovCiAgLmxhYmVsQmtnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7VEModC5lZGdlTGFiZWxCYWNrZ3JvdW5kLC41KX07CiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOgogIH0KCiAgLm5vZGUgLmNsdXN0ZXIgewogICAgLy8gZmlsbDogJHtUQyh0Lm1haW5Ca2csLjUpfTsKICAgIGZpbGw6ICR7VEModC5jbHVzdGVyQmtnLC41KX07CiAgICBzdHJva2U6ICR7VEModC5jbHVzdGVyQm9yZGVyLC4yKX07CiAgICBib3gtc2hhZG93OiByZ2JhKDUwLCA1MCwgOTMsIDAuMjUpIDBweCAxM3B4IDI3cHggLTVweCwgcmdiYSgwLCAwLCAwLCAwLjMpIDBweCA4cHggMTZweCAtOHB4OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5jbHVzdGVyIHNwYW4scCB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAvKiAuY2x1c3RlciBkaXYgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9ICovCgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLmZsb3djaGFydFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQogICR7TmMoKX0KYCwiZ2V0U3R5bGVzIiksJHZlPUNydH0pO3ZhciBBcnQsX3J0LERydCxMcnQsUnJ0LE5ydCxNcnQsSXJ0LE9ydCxQcnQsQnJ0LEd2ZSxWdmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0FydD1vKCh0LGUscixuKT0+e2UuZm9yRWFjaChpPT57QnJ0W2ldKHQscixuKX0pfSwiaW5zZXJ0TWFya2VycyIpLF9ydD1vKCh0LGUscik9PntYLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixyKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LCJleHRlbnNpb24iKSxEcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJjb21wb3NpdGlvbiIpLExydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sImFnZ3JlZ2F0aW9uIiksUnJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJkZXBlbmRlbmN5IiksTnJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSwibG9sbGlwb3AiKSxNcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNC41KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJwb2ludCIpLElydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjaXJjbGUiKSxPcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNyb3NzIiksUHJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJiYXJiIiksQnJ0PXtleHRlbnNpb246X3J0LGNvbXBvc2l0aW9uOkRydCxhZ2dyZWdhdGlvbjpMcnQsZGVwZW5kZW5jeTpScnQsbG9sbGlwb3A6TnJ0LHBvaW50Ok1ydCxjaXJjbGU6SXJ0LGNyb3NzOk9ydCxiYXJiOlBydH0sR3ZlPUFydH0pO2Z1bmN0aW9uIEZydCh0LGUpe2lmKHQ9PT0wfHwhTnVtYmVyLmlzSW50ZWdlcih0KSl0aHJvdyBuZXcgRXJyb3IoIkNvbHVtbnMgbXVzdCBiZSBhbiBpbnRlZ2VyICE9PSAwLiIpO2lmKGU8MHx8IU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IEVycm9yKCJQb3NpdGlvbiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIitlKTtpZih0PDApcmV0dXJue3B4OmUscHk6MH07aWYodD09PTEpcmV0dXJue3B4OjAscHk6ZX07bGV0IHI9ZSV0LG49TWF0aC5mbG9vcihlL3QpO3JldHVybntweDpyLHB5Om59fWZ1bmN0aW9uIEZGKHQsZSxyPTAsbj0wKXtYLmRlYnVnKCJzZXRCbG9ja1NpemVzIGFiYzk1IChzdGFydCkiLHQuaWQsdD8uc2l6ZT8ueCwiYmxvY2sgd2lkdGggPSIsdD8uc2l6ZSwic2libGluZ1dpZHRoIixyKSx0Py5zaXplPy53aWR0aHx8KHQuc2l6ZT17d2lkdGg6cixoZWlnaHQ6bix4OjAseTowfSk7bGV0IGk9MCxhPTA7aWYodC5jaGlsZHJlbj8ubGVuZ3RoPjApe2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKUZGKG0sZSk7bGV0IHM9JHJ0KHQpO2k9cy53aWR0aCxhPXMuaGVpZ2h0LFguZGVidWcoInNldEJsb2NrU2l6ZXMgYWJjOTUgbWF4V2lkdGggb2YiLHQuaWQsIjpzIGNoaWxkcmVuIGlzICIsaSxhKTtmb3IobGV0IG0gb2YgdC5jaGlsZHJlbiltLnNpemUmJihYLmRlYnVnKGBhYmM5NSBTZXR0aW5nIHNpemUgb2YgY2hpbGRyZW4gb2YgJHt0LmlkfSBpZD0ke20uaWR9ICR7aX0gJHthfSAke0pTT04uc3RyaW5naWZ5KG0uc2l6ZSl9YCksbS5zaXplLndpZHRoPWkqKG0ud2lkdGhJbkNvbHVtbnM/PzEpK2tpKigobS53aWR0aEluQ29sdW1ucz8/MSktMSksbS5zaXplLmhlaWdodD1hLG0uc2l6ZS54PTAsbS5zaXplLnk9MCxYLmRlYnVnKGBhYmM5NSB1cGRhdGluZyBzaXplIG9mICR7dC5pZH0gY2hpbGRyZW4gY2hpbGQ6JHttLmlkfSBtYXhXaWR0aDoke2l9IG1heEhlaWdodDoke2F9YCkpO2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKUZGKG0sZSxpLGEpO2xldCBsPXQuY29sdW1ucz8/LTEsdT0wO2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKXUrPW0ud2lkdGhJbkNvbHVtbnM/PzE7bGV0IGg9dC5jaGlsZHJlbi5sZW5ndGg7bD4wJiZsPHUmJihoPWwpO2xldCBmPU1hdGguY2VpbCh1L2gpLGQ9aCooaStraSkra2kscD1mKihhK2tpKStraTtpZihkPHIpe1guZGVidWcoYERldGVjdGVkIHRvIHNtYWxsIHNpYmxpbmc6IGFiYzk1ICR7dC5pZH0gc2libGluZ1dpZHRoICR7cn0gc2libGluZ0hlaWdodCAke259IHdpZHRoICR7ZH1gKSxkPXIscD1uO2xldCBtPShyLWgqa2kta2kpL2gsZz0obi1mKmtpLWtpKS9mO1guZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4Iix0LmlkLCJjaGlsZFdpZHRoIixtLCJtYXhXaWR0aCIsaSksWC5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODgiLHQuaWQsImNoaWxkSGVpZ2h0IixnLCJtYXhIZWlnaHQiLGEpLFguZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IHhTaXplIixoLCJwYWRkaW5nIixraSk7Zm9yKGxldCB5IG9mIHQuY2hpbGRyZW4peS5zaXplJiYoeS5zaXplLndpZHRoPW0seS5zaXplLmhlaWdodD1nLHkuc2l6ZS54PTAseS5zaXplLnk9MCl9aWYoWC5kZWJ1ZyhgYWJjOTUgKGZpbmFsZSBjYWxjKSAke3QuaWR9IHhTaXplICR7aH0geVNpemUgJHtmfSBjb2x1bW5zICR7bH0ke3QuY2hpbGRyZW4ubGVuZ3RofSB3aWR0aD0ke01hdGgubWF4KGQsdC5zaXplPy53aWR0aHx8MCl9YCksZDwodD8uc2l6ZT8ud2lkdGh8fDApKXtkPXQ/LnNpemU/LndpZHRofHwwO2xldCBtPWw+MD9NYXRoLm1pbih0LmNoaWxkcmVuLmxlbmd0aCxsKTp0LmNoaWxkcmVuLmxlbmd0aDtpZihtPjApe2xldCBnPShkLW0qa2kta2kpL207WC5kZWJ1ZygiYWJjOTUgKGdyb3dpbmcgdG8gZml0KSB3aWR0aCIsdC5pZCxkLHQuc2l6ZT8ud2lkdGgsZyk7Zm9yKGxldCB5IG9mIHQuY2hpbGRyZW4peS5zaXplJiYoeS5zaXplLndpZHRoPWcpfX10LnNpemU9e3dpZHRoOmQsaGVpZ2h0OnAseDowLHk6MH19WC5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NCAoZG9uZSkiLHQuaWQsdD8uc2l6ZT8ueCx0Py5zaXplPy53aWR0aCx0Py5zaXplPy55LHQ/LnNpemU/LmhlaWdodCl9ZnVuY3Rpb24gVXZlKHQsZSl7WC5kZWJ1ZyhgYWJjODUgbGF5b3V0IGJsb2NrcyAoPT5sYXlvdXRCbG9ja3MpICR7dC5pZH0geDogJHt0Py5zaXplPy54fSB5OiAke3Q/LnNpemU/Lnl9IHdpZHRoOiAke3Q/LnNpemU/LndpZHRofWApO2xldCByPXQuY29sdW1ucz8/LTE7aWYoWC5kZWJ1ZygibGF5b3V0QmxvY2tzIGNvbHVtbnMgYWJjOTUiLHQuaWQsIj0+IixyLHQpLHQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubGVuZ3RoPjApe2xldCBuPXQ/LmNoaWxkcmVuWzBdPy5zaXplPy53aWR0aD8/MCxpPXQuY2hpbGRyZW4ubGVuZ3RoKm4rKHQuY2hpbGRyZW4ubGVuZ3RoLTEpKmtpO1guZGVidWcoIndpZHRoT2ZDaGlsZHJlbiA4OCIsaSwicG9zWCIpO2xldCBhPTA7WC5kZWJ1ZygiYWJjOTEgYmxvY2s/LnNpemU/LngiLHQuaWQsdD8uc2l6ZT8ueCk7bGV0IHM9dD8uc2l6ZT8ueD90Py5zaXplPy54KygtdD8uc2l6ZT8ud2lkdGgvMnx8MCk6LWtpLGw9MDtmb3IobGV0IHUgb2YgdC5jaGlsZHJlbil7bGV0IGg9dDtpZighdS5zaXplKWNvbnRpbnVlO2xldHt3aWR0aDpmLGhlaWdodDpkfT11LnNpemUse3B4OnAscHk6bX09RnJ0KHIsYSk7aWYobSE9bCYmKGw9bSxzPXQ/LnNpemU/Lng/dD8uc2l6ZT8ueCsoLXQ/LnNpemU/LndpZHRoLzJ8fDApOi1raSxYLmRlYnVnKCJOZXcgcm93IGluIGxheW91dCBmb3IgYmxvY2siLHQuaWQsIiBhbmQgY2hpbGQgIix1LmlkLGwpKSxYLmRlYnVnKGBhYmM4OSBsYXlvdXQgYmxvY2tzIChjaGlsZCkgaWQ6ICR7dS5pZH0gUG9zOiAke2F9IChweCwgcHkpICR7cH0sJHttfSAoJHtoPy5zaXplPy54fSwke2g/LnNpemU/Lnl9KSBwYXJlbnQ6ICR7aC5pZH0gd2lkdGg6ICR7Zn0ke2tpfWApLGguc2l6ZSl7bGV0IGc9Zi8yO3Uuc2l6ZS54PXMra2krZyxYLmRlYnVnKGBhYmM5MSBsYXlvdXQgYmxvY2tzIChjYWxjKSBweCwgcHlpZDoke3UuaWR9IHN0YXJ0aW5nUG9zPVgke3N9IG5ldyBzdGFydGluZ1Bvc1gke3Uuc2l6ZS54fSAke2d9IHBhZGRpbmc9JHtraX0gd2lkdGg9JHtmfSBoYWxmV2lkdGg9JHtnfSA9PiB4OiR7dS5zaXplLnh9IHk6JHt1LnNpemUueX0gJHt1LndpZHRoSW5Db2x1bW5zfSAod2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiAke2YqKHU/LndpZHRoSW5Db2x1bW5zPz8xKS8yfWApLHM9dS5zaXplLngrZyx1LnNpemUueT1oLnNpemUueS1oLnNpemUuaGVpZ2h0LzIrbSooZCtraSkrZC8yK2tpLFguZGVidWcoYGFiYzg4IGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7dS5pZH1zdGFydGluZ1Bvc1gke3N9JHtraX0ke2d9PT54OiR7dS5zaXplLnh9eToke3Uuc2l6ZS55fSR7dS53aWR0aEluQ29sdW1uc30od2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiR7ZioodT8ud2lkdGhJbkNvbHVtbnM/PzEpLzJ9YCl9dS5jaGlsZHJlbiYmVXZlKHUsZSksYSs9dT8ud2lkdGhJbkNvbHVtbnM/PzEsWC5kZWJ1ZygiYWJjODggY29sdW1uc1BvcyIsdSxhKX19WC5kZWJ1ZyhgbGF5b3V0IGJsb2NrcyAoPD09bGF5b3V0QmxvY2tzKSAke3QuaWR9IHg6ICR7dD8uc2l6ZT8ueH0geTogJHt0Py5zaXplPy55fSB3aWR0aDogJHt0Py5zaXplPy53aWR0aH1gKX1mdW5jdGlvbiBIdmUodCx7bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfT17bWluWDowLG1pblk6MCxtYXhYOjAsbWF4WTowfSl7aWYodC5zaXplJiZ0LmlkIT09InJvb3QiKXtsZXR7eDphLHk6cyx3aWR0aDpsLGhlaWdodDp1fT10LnNpemU7YS1sLzI8ZSYmKGU9YS1sLzIpLHMtdS8yPHImJihyPXMtdS8yKSxhK2wvMj5uJiYobj1hK2wvMikscyt1LzI+aSYmKGk9cyt1LzIpfWlmKHQuY2hpbGRyZW4pZm9yKGxldCBhIG9mIHQuY2hpbGRyZW4pKHttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9PUh2ZShhLHttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9KSk7cmV0dXJue21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX19ZnVuY3Rpb24gV3ZlKHQpe2xldCBlPXQuZ2V0QmxvY2soInJvb3QiKTtpZighZSlyZXR1cm47RkYoZSx0LDAsMCksVXZlKGUsdCksWC5kZWJ1ZygiZ2V0QmxvY2tzIixKU09OLnN0cmluZ2lmeShlLG51bGwsMikpO2xldHttaW5YOnIsbWluWTpuLG1heFg6aSxtYXhZOmF9PUh2ZShlKSxzPWEtbixsPWktcjtyZXR1cm57eDpyLHk6bix3aWR0aDpsLGhlaWdodDpzfX12YXIga2ksJHJ0LHF2ZT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7R3QoKTtraT1tZSgpPy5ibG9jaz8ucGFkZGluZz8/ODtvKEZydCwiY2FsY3VsYXRlQmxvY2tQb3NpdGlvbiIpOyRydD1vKHQ9PntsZXQgZT0wLHI9MDtmb3IobGV0IG4gb2YgdC5jaGlsZHJlbil7bGV0e3dpZHRoOmksaGVpZ2h0OmEseDpzLHk6bH09bi5zaXplPz97d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfTtYLmRlYnVnKCJnZXRNYXhDaGlsZFNpemUgYWJjOTUgY2hpbGQ6IixuLmlkLCJ3aWR0aDoiLGksImhlaWdodDoiLGEsIng6IixzLCJ5OiIsbCxuLnR5cGUpLG4udHlwZSE9PSJzcGFjZSImJihpPmUmJihlPWkvKHQud2lkdGhJbkNvbHVtbnM/PzEpKSxhPnImJihyPWEpKX1yZXR1cm57d2lkdGg6ZSxoZWlnaHQ6cn19LCJnZXRNYXhDaGlsZFNpemUiKTtvKEZGLCJzZXRCbG9ja1NpemVzIik7byhVdmUsImxheW91dEJsb2NrcyIpO28oSHZlLCJmaW5kQm91bmRzIik7byhXdmUsImxheW91dCIpfSk7ZnVuY3Rpb24gWXZlKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9ZnVuY3Rpb24genJ0KHQpe2xldCBlPUdlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLHI9ZS5hcHBlbmQoInhodG1sOmRpdiIpLG49dC5sYWJlbCxpPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiLGE9ci5hcHBlbmQoInNwYW4iKTtyZXR1cm4gYS5odG1sKG4pLFl2ZShhLHQubGFiZWxTdHlsZSksYS5hdHRyKCJjbGFzcyIsaSksWXZlKHIsdC5sYWJlbFN0eWxlKSxyLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksci5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxyLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGUubm9kZSgpfXZhciBHcnQsa3Msd0M9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO3l0KCk7R3QoKTtwcigpO2VyKCk7YW8oKTtvKFl2ZSwiYXBwbHlTdHlsZSIpO28oenJ0LCJhZGRIdG1sTGFiZWwiKTtHcnQ9byhhc3luYyh0LGUscixuKT0+e2xldCBpPXR8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0IiYmKGk9aVswXSksZHIobWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2k9aS5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksWC5kZWJ1ZygidmVydGV4VGV4dCIraSk7bGV0IGE9YXdhaXQgZEwobmEoaSkpLHM9e2lzTm9kZTpuLGxhYmVsOmEsbGFiZWxTdHlsZTplLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiB6cnQocyl9ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtsZXQgcz1bXTt0eXBlb2YgaT09InN0cmluZyI/cz1pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT9zPWk6cz1bXTtmb3IobGV0IGwgb2Ygcyl7bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7dS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSx1LnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSx1LnNldEF0dHJpYnV0ZSgieCIsIjAiKSxyP3Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOnUuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHUudGV4dENvbnRlbnQ9bC50cmltKCksYS5hcHBlbmRDaGlsZCh1KX1yZXR1cm4gYX19LCJjcmVhdGVMYWJlbCIpLGtzPUdydH0pO3ZhciBqdmUsVnJ0LFh2ZSxLdmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO2p2ZT1vKCh0LGUscixuLGkpPT57ZS5hcnJvd1R5cGVTdGFydCYmWHZlKHQsInN0YXJ0IixlLmFycm93VHlwZVN0YXJ0LHIsbixpKSxlLmFycm93VHlwZUVuZCYmWHZlKHQsImVuZCIsZS5hcnJvd1R5cGVFbmQscixuLGkpfSwiYWRkRWRnZU1hcmtlcnMiKSxWcnQ9e2Fycm93X2Nyb3NzOiJjcm9zcyIsYXJyb3dfcG9pbnQ6InBvaW50IixhcnJvd19iYXJiOiJiYXJiIixhcnJvd19jaXJjbGU6ImNpcmNsZSIsYWdncmVnYXRpb246ImFnZ3JlZ2F0aW9uIixleHRlbnNpb246ImV4dGVuc2lvbiIsY29tcG9zaXRpb246ImNvbXBvc2l0aW9uIixkZXBlbmRlbmN5OiJkZXBlbmRlbmN5Iixsb2xsaXBvcDoibG9sbGlwb3AifSxYdmU9bygodCxlLHIsbixpLGEpPT57bGV0IHM9VnJ0W3JdO2lmKCFzKXtYLndhcm4oYFVua25vd24gYXJyb3cgdHlwZTogJHtyfWApO3JldHVybn1sZXQgbD1lPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQiO3QuYXR0cihgbWFya2VyLSR7ZX1gLGB1cmwoJHtufSMke2l9XyR7YX0tJHtzfSR7bH0pYCl9LCJhZGRFZGdlTWFya2VyIil9KTtmdW5jdGlvbiBrQyh0LGUpe21lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPWUubGVuZ3RoKjkrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfXZhciAkRixYYSxadmUsSnZlLFVydCxIcnQsUXZlLGUyZSx0MmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO3dDKCk7YW8oKTtmcigpO0d0KCk7ZXIoKTtwcigpO1BMKCk7UjIoKTtLdmUoKTskRj17fSxYYT17fSxadmU9byhhc3luYyh0LGUpPT57bGV0IHI9bWUoKSxuPWRyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGk9ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP3FuKHQsZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6bixhZGRTdmdCYWNrZ3JvdW5kOiEwfSxyKTphd2FpdCBrcyhlLmxhYmVsLGUubGFiZWxTdHlsZSksYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIikscz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTtzLm5vZGUoKS5hcHBlbmRDaGlsZChpKTtsZXQgbD1pLmdldEJCb3goKTtpZihuKXtsZXQgaD1pLmNoaWxkcmVuWzBdLGY9R2UoaSk7bD1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGYuYXR0cigid2lkdGgiLGwud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixsLmhlaWdodCl9cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistbC53aWR0aC8yKyIsICIrLWwuaGVpZ2h0LzIrIikiKSwkRltlLmlkXT1hLGUud2lkdGg9bC53aWR0aCxlLmhlaWdodD1sLmhlaWdodDtsZXQgdTtpZihlLnN0YXJ0TGFiZWxMZWZ0KXtsZXQgaD1hd2FpdCBrcyhlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0TGVmdD1mLGtDKHUsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCBoPWF3YWl0IGtzKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1mLm5vZGUoKS5hcHBlbmRDaGlsZChoKSxkLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0UmlnaHQ9ZixrQyh1LGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7bGV0IGg9YXdhaXQga3MoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksZi5ub2RlKCkuYXBwZW5kQ2hpbGQoaCksWGFbZS5pZF18fChYYVtlLmlkXT17fSksWGFbZS5pZF0uZW5kTGVmdD1mLGtDKHUsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7bGV0IGg9YXdhaXQga3MoZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLGYubm9kZSgpLmFwcGVuZENoaWxkKGgpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLmVuZFJpZ2h0PWYsa0ModSxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBpfSwiaW5zZXJ0RWRnZUxhYmVsIik7byhrQywic2V0VGVybWluYWxXaWR0aCIpO0p2ZT1vKCh0LGUpPT57WC5kZWJ1ZygiTW92aW5nIGxhYmVsIGFiYzg4ICIsdC5pZCx0LmxhYmVsLCRGW3QuaWRdLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPW1lKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1CdShuKTtpZih0LmxhYmVsKXtsZXQgYT0kRlt0LmlkXSxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjTGFiZWxQb3NpdGlvbihyKTtYLmRlYnVnKCJNb3ZpbmcgbGFiZWwgIit0LmxhYmVsKyIgZnJvbSAoIixzLCIsIixsLCIpIHRvICgiLHUueCwiLCIsdS55LCIpIGFiYzg4IiksZS51cGRhdGVkUGF0aCYmKHM9dS54LGw9dS55KX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2wraS8yfSlgKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5zdGFydExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5zdGFydExhYmVsUmlnaHQpe2xldCBhPVhhW3QuaWRdLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5lbmRMZWZ0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVZ0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbFJpZ2h0KXtsZXQgYT1YYVt0LmlkXS5lbmRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX19LCJwb3NpdGlvbkVkZ2VMYWJlbCIpLFVydD1vKCh0LGUpPT57bGV0IHI9dC54LG49dC55LGk9TWF0aC5hYnMoZS54LXIpLGE9TWF0aC5hYnMoZS55LW4pLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtyZXR1cm4gaT49c3x8YT49bH0sIm91dHNpZGVOb2RlIiksSHJ0PW8oKHQsZSxyKT0+e1guZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OgogIG91dHNpZGVQb2ludDogJHtKU09OLnN0cmluZ2lmeShlKX0KICBpbnNpZGVQb2ludCA6ICR7SlNPTi5zdHJpbmdpZnkocil9CiAgbm9kZSAgICAgICAgOiB4OiR7dC54fSB5OiR7dC55fSB3OiR7dC53aWR0aH0gaDoke3QuaGVpZ2h0fWApO2xldCBuPXQueCxpPXQueSxhPU1hdGguYWJzKG4tci54KSxzPXQud2lkdGgvMixsPXIueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsaD1NYXRoLmFicyhlLnktci55KSxmPU1hdGguYWJzKGUueC1yLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKG4tZS54KSp1KXtsZXQgZD1yLnk8ZS55P2UueS11LWk6aS11LWUueTtsPWYqZC9oO2xldCBwPXt4OnIueDxlLng/ci54K2w6ci54LWYrbCx5OnIueTxlLnk/ci55K2gtZDpyLnktaCtkfTtyZXR1cm4gbD09PTAmJihwLng9ZS54LHAueT1lLnkpLGY9PT0wJiYocC54PWUueCksaD09PTAmJihwLnk9ZS55KSxYLmRlYnVnKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBYLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksUXZlPW8oKHQsZSk9PntYLmRlYnVnKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLHQsZSk7bGV0IHI9W10sbj10WzBdLGk9ITE7cmV0dXJuIHQuZm9yRWFjaChhPT57aWYoIVVydChlLGEpJiYhaSl7bGV0IHM9SHJ0KGUsbixhKSxsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSl8fHIucHVzaChzKSxpPSEwfWVsc2Ugbj1hLGl8fHIucHVzaChhKX0pLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKSxlMmU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD1yLnBvaW50cztYLmRlYnVnKCJhYmM4OCBJbnNlcnRFZGdlOiBlZGdlPSIsciwiZT0iLGUpO2xldCB1PSExLGg9YS5ub2RlKGUudik7dmFyIGY9YS5ub2RlKGUudyk7Zj8uaW50ZXJzZWN0JiZoPy5pbnRlcnNlY3QmJihsPWwuc2xpY2UoMSxyLnBvaW50cy5sZW5ndGgtMSksbC51bnNoaWZ0KGguaW50ZXJzZWN0KGxbMF0pKSxsLnB1c2goZi5pbnRlcnNlY3QobFtsLmxlbmd0aC0xXSkpKSxyLnRvQ2x1c3RlciYmKFguZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLG5bci50b0NsdXN0ZXJdKSxsPVF2ZShyLnBvaW50cyxuW3IudG9DbHVzdGVyXS5ub2RlKSx1PSEwKSxyLmZyb21DbHVzdGVyJiYoWC5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixuW3IuZnJvbUNsdXN0ZXJdKSxsPVF2ZShsLnJldmVyc2UoKSxuW3IuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSx1PSEwKTtsZXQgZD1sLmZpbHRlcihTPT4hTnVtYmVyLmlzTmFOKFMueSkpLHA9Tm87ci5jdXJ2ZSYmKGk9PT0iZ3JhcGgifHxpPT09ImZsb3djaGFydCIpJiYocD1yLmN1cnZlKTtsZXR7eDptLHk6Z309b3cocikseT1DbCgpLngobSkueShnKS5jdXJ2ZShwKSx2O3N3aXRjaChyLnRoaWNrbmVzcyl7Y2FzZSJub3JtYWwiOnY9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6dj0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjp2PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDp2PSIifXN3aXRjaChyLnBhdHRlcm4pe2Nhc2Uic29saWQiOnYrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6dis9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6dis9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31sZXQgeD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkoZCkpLmF0dHIoImlkIixyLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3YrKHIuY2xhc3Nlcz8iICIrci5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLHIuc3R5bGUpLGI9IiI7KG1lKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fG1lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihiPW11KCEwKSksanZlKHgscixiLHMsaSk7bGV0IFQ9e307cmV0dXJuIHUmJihULnVwZGF0ZWRQYXRoPWwpLFQub3JpZ2luYWxQYXRoPXIucG9pbnRzLFR9LCJpbnNlcnRFZGdlIil9KTt2YXIgV3J0LHIyZSxuMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXcnQ9byh0PT57bGV0IGU9bmV3IFNldDtmb3IobGV0IHIgb2YgdClzd2l0Y2gocil7Y2FzZSJ4IjplLmFkZCgicmlnaHQiKSxlLmFkZCgibGVmdCIpO2JyZWFrO2Nhc2UieSI6ZS5hZGQoInVwIiksZS5hZGQoImRvd24iKTticmVhaztkZWZhdWx0OmUuYWRkKHIpO2JyZWFrfXJldHVybiBlfSwiZXhwYW5kQW5kRGVkdXBsaWNhdGVEaXJlY3Rpb25zIikscjJlPW8oKHQsZSxyKT0+e2xldCBuPVdydCh0KSxpPTIsYT1lLmhlaWdodCsyKnIucGFkZGluZyxzPWEvaSxsPWUud2lkdGgrMipzK3IucGFkZGluZyx1PXIucGFkZGluZy8yO3JldHVybiBuLmhhcygicmlnaHQiKSYmbi5oYXMoImxlZnQiKSYmbi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpzLHk6MH0se3g6bC8yLHk6Mip1fSx7eDpsLXMseTowfSx7eDpsLHk6MH0se3g6bCx5Oi1hLzN9LHt4OmwrMip1LHk6LWEvMn0se3g6bCx5Oi0yKmEvM30se3g6bCx5Oi1hfSx7eDpsLXMseTotYX0se3g6bC8yLHk6LWEtMip1fSx7eDpzLHk6LWF9LHt4OjAseTotYX0se3g6MCx5Oi0yKmEvM30se3g6LTIqdSx5Oi1hLzJ9LHt4OjAseTotYS8zfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpP1t7eDpzLHk6MH0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpzLHk6LWF9LHt4Omwtcyx5Oi1hfSx7eDpsLHk6MH1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygidXAiKSYmbi5oYXMoImRvd24iKT9be3g6MCx5OjB9LHt4OmwseTotc30se3g6bCx5Oi1hK3N9LHt4OjAseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDpsLHk6MH0se3g6MCx5Oi1zfSx7eDowLHk6LWErc30se3g6bCx5Oi1hfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0Iik/W3t4OnMseTowfSx7eDpzLHk6LXV9LHt4Omwtcyx5Oi11fSx7eDpsLXMseTowfSx7eDpsLHk6LWEvMn0se3g6bC1zLHk6LWF9LHt4Omwtcyx5Oi1hK3V9LHt4OnMseTotYSt1fSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OmwvMix5OjB9LHt4OjAseTotdX0se3g6cyx5Oi11fSx7eDpzLHk6LWErdX0se3g6MCx5Oi1hK3V9LHt4OmwvMix5Oi1hfSx7eDpsLHk6LWErdX0se3g6bC1zLHk6LWErdX0se3g6bC1zLHk6LXV9LHt4OmwseTotdX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygidXAiKT9be3g6MCx5OjB9LHt4OmwseTotc30se3g6MCx5Oi1hfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpsLHk6MH0se3g6MCx5Oi1hfV06bi5oYXMoImxlZnQiKSYmbi5oYXMoInVwIik/W3t4OmwseTowfSx7eDowLHk6LXN9LHt4OmwseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJkb3duIik/W3t4OmwseTowfSx7eDowLHk6MH0se3g6bCx5Oi1hfV06bi5oYXMoInJpZ2h0Iik/W3t4OnMseTotdX0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpsLXMseTotYSt1fSx7eDpzLHk6LWErdX0se3g6cyx5Oi1hK3V9XTpuLmhhcygibGVmdCIpP1t7eDpzLHk6MH0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6LWErdX0se3g6cyx5Oi1hK3V9LHt4OnMseTotYX0se3g6MCx5Oi1hLzJ9XTpuLmhhcygidXAiKT9be3g6cyx5Oi11fSx7eDpzLHk6LWErdX0se3g6MCx5Oi1hK3V9LHt4OmwvMix5Oi1hfSx7eDpsLHk6LWErdX0se3g6bC1zLHk6LWErdX0se3g6bC1zLHk6LXV9XTpuLmhhcygiZG93biIpP1t7eDpsLzIseTowfSx7eDowLHk6LXV9LHt4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fSx7eDpsLHk6LXV9XTpbe3g6MCx5OjB9XX0sImdldEFycm93UG9pbnRzIil9KTtmdW5jdGlvbiBxcnQodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9dmFyIGkyZSxhMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHFydCwiaW50ZXJzZWN0Tm9kZSIpO2kyZT1xcnR9KTtmdW5jdGlvbiBZcnQodCxlLHIsbil7dmFyIGk9dC54LGE9dC55LHM9aS1uLngsbD1hLW4ueSx1PU1hdGguc3FydChlKmUqbCpsK3IqcipzKnMpLGg9TWF0aC5hYnMoZSpyKnMvdSk7bi54PGkmJihoPS1oKTt2YXIgZj1NYXRoLmFicyhlKnIqbC91KTtyZXR1cm4gbi55PGEmJihmPS1mKSx7eDppK2gseTphK2Z9fXZhciBFQyx6Rj1OKCgpPT57InVzZSBzdHJpY3QiO28oWXJ0LCJpbnRlcnNlY3RFbGxpcHNlIik7RUM9WXJ0fSk7ZnVuY3Rpb24gWHJ0KHQsZSxyKXtyZXR1cm4gRUModCxlLGUscil9dmFyIHMyZSxvMmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6RigpO28oWHJ0LCJpbnRlcnNlY3RDaXJjbGUiKTtzMmU9WHJ0fSk7ZnVuY3Rpb24ganJ0KHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2LHgsYjtpZihpPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LHA9aSpyLngrcypyLnkrdSxtPWkqbi54K3Mqbi55K3UsIShwIT09MCYmbSE9PTAmJmwyZShwLG0pKSYmKGE9bi55LXIueSxsPXIueC1uLngsaD1uLngqci55LXIueCpuLnksZj1hKnQueCtsKnQueStoLGQ9YSplLngrbCplLnkraCwhKGYhPT0wJiZkIT09MCYmbDJlKGYsZCkpJiYoZz1pKmwtYSpzLGchPT0wKSkpcmV0dXJuIHk9TWF0aC5hYnMoZy8yKSx2PXMqaC1sKnUseD12PDA/KHYteSkvZzoodit5KS9nLHY9YSp1LWkqaCxiPXY8MD8odi15KS9nOih2K3kpL2cse3gseTpifX1mdW5jdGlvbiBsMmUodCxlKXtyZXR1cm4gdCplPjB9dmFyIGMyZSx1MmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpydCwiaW50ZXJzZWN0TGluZSIpO28obDJlLCJzYW1lU2lnbiIpO2MyZT1qcnR9KTtmdW5jdGlvbiBLcnQodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPVtdLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBlLmZvckVhY2g9PSJmdW5jdGlvbiI/ZS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3M9TWF0aC5taW4ocyxnLngpLGw9TWF0aC5taW4obCxnLnkpfSk6KHM9TWF0aC5taW4ocyxlLngpLGw9TWF0aC5taW4obCxlLnkpKTtmb3IodmFyIHU9bi10LndpZHRoLzItcyxoPWktdC5oZWlnaHQvMi1sLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGQ9ZVtmXSxwPWVbZjxlLmxlbmd0aC0xP2YrMTowXSxtPWMyZSh0LHIse3g6dStkLngseTpoK2QueX0se3g6dStwLngseTpoK3AueX0pO20mJmEucHVzaChtKX1yZXR1cm4gYS5sZW5ndGg/KGEubGVuZ3RoPjEmJmEuc29ydChmdW5jdGlvbihnLHkpe3ZhciB2PWcueC1yLngseD1nLnktci55LGI9TWF0aC5zcXJ0KHYqdit4KngpLFQ9eS54LXIueCxTPXkueS1yLnksdz1NYXRoLnNxcnQoVCpUK1MqUyk7cmV0dXJuIGI8dz8tMTpiPT09dz8wOjF9KSxhWzBdKTp0fXZhciBoMmUsZjJlPU4oKCk9PnsidXNlIHN0cmljdCI7dTJlKCk7aDJlPUtydDtvKEtydCwiaW50ZXJzZWN0UG9seWdvbiIpfSk7dmFyIFFydCxkMmUscDJlPU4oKCk9PnsidXNlIHN0cmljdCI7UXJ0PW8oKHQsZSk9Pnt2YXIgcj10Lngsbj10LnksaT1lLngtcixhPWUueS1uLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMix1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1hPT09MD8wOmwqaS9hLGg9bCk6KGk8MCYmKHM9LXMpLHU9cyxoPWk9PT0wPzA6cyphL2kpLHt4OnIrdSx5Om4raH19LCJpbnRlcnNlY3RSZWN0IiksZDJlPVFydH0pO3ZhciBJbixHRj1OKCgpPT57InVzZSBzdHJpY3QiO2EyZSgpO28yZSgpO3pGKCk7ZjJlKCk7cDJlKCk7SW49e25vZGU6aTJlLGNpcmNsZTpzMmUsZWxsaXBzZTpFQyxwb2x5Z29uOmgyZSxyZWN0OmQyZX19KTtmdW5jdGlvbiBYbCh0LGUscixuKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLG4ubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLngrIiwiK2kueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIityLzIrIikiKX12YXIgTmksSm4sVkY9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt3QygpO2FvKCk7R3QoKTtmcigpO3ByKCk7ZXIoKTtOaT1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9bWUoKSxhLHM9ZS51c2VIdG1sTGFiZWxzfHxkcihpLmZsb3djaGFydC5odG1sTGFiZWxzKTtyP2E9cjphPSJub2RlIGRlZmF1bHQiO2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGEpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSx1PWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpLGg7ZS5sYWJlbFRleHQ9PT12b2lkIDA/aD0iIjpoPXR5cGVvZiBlLmxhYmVsVGV4dD09InN0cmluZyI/ZS5sYWJlbFRleHQ6ZS5sYWJlbFRleHRbMF07bGV0IGY9dS5ub2RlKCksZDtlLmxhYmVsVHlwZT09PSJtYXJrZG93biI/ZD1xbih1LHdyKG5hKGgpLGkpLHt1c2VIdG1sTGFiZWxzOnMsd2lkdGg6ZS53aWR0aHx8aS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0saSk6ZD1mLmFwcGVuZENoaWxkKGF3YWl0IGtzKHdyKG5hKGgpLGkpLGUubGFiZWxTdHlsZSwhMSxuKSk7bGV0IHA9ZC5nZXRCQm94KCksbT1lLnBhZGRpbmcvMjtpZihkcihpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IGc9ZC5jaGlsZHJlblswXSx5PUdlKGQpLHY9Zy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYodil7bGV0IHg9aC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi52XS5tYXAoYj0+bmV3IFByb21pc2UoVD0+e2Z1bmN0aW9uIFMoKXtpZihiLnN0eWxlLmRpc3BsYXk9ImZsZXgiLGIuc3R5bGUuZmxleERpcmVjdGlvbj0iY29sdW1uIix4KXtsZXQgdz1pLmZvbnRTaXplP2kuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsXz1wYXJzZUludCh3LDEwKSo1KyJweCI7Yi5zdHlsZS5taW5XaWR0aD1fLGIuc3R5bGUubWF4V2lkdGg9X31lbHNlIGIuc3R5bGUud2lkdGg9IjEwMCUiO1QoYil9byhTLCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e2IuY29tcGxldGUmJlMoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLFMpLGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsUyl9KSkpfXA9Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx5LmF0dHIoIndpZHRoIixwLndpZHRoKSx5LmF0dHIoImhlaWdodCIscC5oZWlnaHQpfXJldHVybiBzP3UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIik6dS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistcC5oZWlnaHQvMisiKSIpLGUuY2VudGVyTGFiZWwmJnUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksdS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6bCxiYm94OnAsaGFsZlBhZGRpbmc6bSxsYWJlbDp1fX0sImxhYmVsSGVscGVyIiksSm49bygodCxlKT0+e2xldCByPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9LCJ1cGRhdGVOb2RlQm91bmRzIik7byhYbCwiaW5zZXJ0UG9seWdvblNoYXBlIil9KTt2YXIgWnJ0LG0yZSxnMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWRigpO3l0KCk7R3QoKTtHRigpO1pydD1vKGFzeW5jKHQsZSk9PntlLnVzZUh0bWxMYWJlbHN8fG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHN8fChlLmNlbnRlckxhYmVsPSEwKTtsZXR7c2hhcGVTdmc6bixiYm94OmksaGFsZlBhZGRpbmc6YX09YXdhaXQgTmkodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKTtYLmluZm8oIkNsYXNzZXMgPSAiLGUuY2xhc3Nlcyk7bGV0IHM9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcy5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksSm4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gSW4ucmVjdChlLGwpfSxufSwibm90ZSIpLG0yZT1acnR9KTtmdW5jdGlvbiBVRih0LGUscixuKXtsZXQgaT1bXSxhPW8obD0+e2kucHVzaChsLDApfSwiYWRkQm9yZGVyIikscz1vKGw9PntpLnB1c2goMCxsKX0sInNraXBCb3JkZXIiKTtlLmluY2x1ZGVzKCJ0Iik/KFguZGVidWcoImFkZCB0b3AgYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJyIik/KFguZGVidWcoImFkZCByaWdodCBib3JkZXIiKSxhKG4pKTpzKG4pLGUuaW5jbHVkZXMoImIiKT8oWC5kZWJ1ZygiYWRkIGJvdHRvbSBib3JkZXIiKSxhKHIpKTpzKHIpLGUuaW5jbHVkZXMoImwiKT8oWC5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksYShuKSk6cyhuKSx0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLGkuam9pbigiICIpKX12YXIgeTJlLGJvLHYyZSxKcnQsZW50LHRudCxybnQsbm50LGludCxhbnQsc250LG9udCxsbnQsY250LHVudCxobnQsZm50LGRudCxwbnQsbW50LGdudCx5bnQseDJlLHZudCx4bnQsYjJlLFNDLEhGLFQyZSx3MmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO0d0KCk7cHIoKTt5dCgpO24yZSgpO3dDKCk7R0YoKTtnMmUoKTtWRigpO3kyZT1vKHQ9PnQ/IiAiK3Q6IiIsImZvcm1hdENsYXNzIiksYm89bygodCxlKT0+YCR7ZXx8Im5vZGUgZGVmYXVsdCJ9JHt5MmUodC5jbGFzc2VzKX0gJHt5MmUodC5jbGFzcyl9YCwiZ2V0Q2xhc3Nlc0Zyb21Ob2RlIiksdjJlPW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgTmkodCxlLGJvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPWkrYSxsPVt7eDpzLzIseTowfSx7eDpzLHk6LXMvMn0se3g6cy8yLHk6LXN9LHt4OjAseTotcy8yfV07WC5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7bGV0IHU9WGwocixzLHMsbCk7cmV0dXJuIHUuYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oaCl7cmV0dXJuIFgud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLEluLnBvbHlnb24oZSxsLGgpfSxyfSwicXVlc3Rpb24iKSxKcnQ9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbj0yOCxpPVt7eDowLHk6bi8yfSx7eDpuLzIseTowfSx7eDowLHk6LW4vMn0se3g6LW4vMix5OjB9XTtyZXR1cm4gci5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLGkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLngrIiwiK3MueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gSW4uY2lyY2xlKGUsMTQscyl9LHJ9LCJjaG9pY2UiKSxlbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPTQsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1hL2ksbD1uLndpZHRoKzIqcytlLnBhZGRpbmcsdT1be3g6cyx5OjB9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dLGg9WGwocixsLGEsdSk7cmV0dXJuIGguYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIEluLnBvbHlnb24oZSx1LGYpfSxyfSwiaGV4YWdvbiIpLHRudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSx2b2lkIDAsITApLGk9MixhPW4uaGVpZ2h0KzIqZS5wYWRkaW5nLHM9YS9pLGw9bi53aWR0aCsyKnMrZS5wYWRkaW5nLHU9cjJlKGUuZGlyZWN0aW9ucyxuLGUpLGg9WGwocixsLGEsdSk7cmV0dXJuIGguYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIEluLnBvbHlnb24oZSx1LGYpfSxyfSwiYmxvY2tfYXJyb3ciKSxybnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi1hLzIseTowfSx7eDppLHk6MH0se3g6aSx5Oi1hfSx7eDotYS8yLHk6LWF9LHt4OjAseTotYS8yfV07cmV0dXJuIFhsKHIsaSxhLHMpLmF0dHIoInN0eWxlIixlLnN0eWxlKSxlLndpZHRoPWkrYSxlLmhlaWdodD1hLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sInJlY3RfbGVmdF9pbnZfYXJyb3ciKSxubnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqYS82LHk6MH0se3g6aS1hLzYseTowfSx7eDppKzIqYS82LHk6LWF9LHt4OmEvNix5Oi1hfV0sbD1YbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSm4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJsZWFuX3JpZ2h0IiksaW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgTmkodCxlLGJvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKmEvNix5OjB9LHt4OmkrYS82LHk6MH0se3g6aS0yKmEvNix5Oi1hfSx7eDotYS82LHk6LWF9XSxsPVhsKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxKbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sImxlYW5fbGVmdCIpLGFudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqYS82LHk6MH0se3g6aSsyKmEvNix5OjB9LHt4OmktYS82LHk6LWF9LHt4OmEvNix5Oi1hfV0sbD1YbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSm4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJ0cmFwZXpvaWQiKSxzbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OmEvNix5OjB9LHt4OmktYS82LHk6MH0se3g6aSsyKmEvNix5Oi1hfSx7eDotMiphLzYseTotYX1dLGw9WGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwiaW52X3RyYXBlem9pZCIpLG9udD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmkrYS8yLHk6MH0se3g6aSx5Oi1hLzJ9LHt4OmkrYS8yLHk6LWF9LHt4OjAseTotYX1dLGw9WGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwicmVjdF9yaWdodF9pbnZfYXJyb3ciKSxsbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9aS8yLHM9YS8oMi41K2kvNTApLGw9bi5oZWlnaHQrcytlLnBhZGRpbmcsdT0iTSAwLCIrcysiIGEgIithKyIsIitzKyIgMCwwLDAgIitpKyIgMCBhICIrYSsiLCIrcysiIDAsMCwwICIrLWkrIiAwIGwgMCwiK2wrIiBhICIrYSsiLCIrcysiIDAsMCwwICIraSsiIDAgbCAwLCIrLWwsaD1yLmF0dHIoImxhYmVsLW9mZnNldC15IixzKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigiZCIsdSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWkvMisiLCIrLShsLzIrcykrIikiKTtyZXR1cm4gSm4oZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtsZXQgZD1Jbi5yZWN0KGUsZikscD1kLngtZS54O2lmKGEhPTAmJihNYXRoLmFicyhwKTxlLndpZHRoLzJ8fE1hdGguYWJzKHApPT1lLndpZHRoLzImJk1hdGguYWJzKGQueS1lLnkpPmUuaGVpZ2h0LzItcykpe2xldCBtPXMqcyooMS1wKnAvKGEqYSkpO20hPTAmJihtPU1hdGguc3FydChtKSksbT1zLW0sZi55LWUueT4wJiYobT0tbSksZC55Kz1tfXJldHVybiBkfSxyfSwiY3lsaW5kZXIiKSxjbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IE5pKHQsZSwibm9kZSAiK2UuY2xhc3NlcysiICIrZS5jbGFzcywhMCksYT1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHM9ZS5wb3NpdGlvbmVkP2Uud2lkdGg6bi53aWR0aCtlLnBhZGRpbmcsbD1lLnBvc2l0aW9uZWQ/ZS5oZWlnaHQ6bi5oZWlnaHQrZS5wYWRkaW5nLHU9ZS5wb3NpdGlvbmVkPy1zLzI6LW4ud2lkdGgvMi1pLGg9ZS5wb3NpdGlvbmVkPy1sLzI6LW4uaGVpZ2h0LzItaTtpZihhLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsdSkuYXR0cigieSIsaCkuYXR0cigid2lkdGgiLHMpLmF0dHIoImhlaWdodCIsbCksZS5wcm9wcyl7bGV0IGY9bmV3IFNldChPYmplY3Qua2V5cyhlLnByb3BzKSk7ZS5wcm9wcy5ib3JkZXJzJiYoVUYoYSxlLnByb3BzLmJvcmRlcnMscyxsKSxmLmRlbGV0ZSgiYm9yZGVycyIpKSxmLmZvckVhY2goZD0+e1gud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7ZH1gKX0pfXJldHVybiBKbihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5yZWN0KGUsZil9LHJ9LCJyZWN0IiksdW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBOaSh0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxzPWUucG9zaXRpb25lZD9lLndpZHRoOm4ud2lkdGgrZS5wYWRkaW5nLGw9ZS5wb3NpdGlvbmVkP2UuaGVpZ2h0Om4uaGVpZ2h0K2UucGFkZGluZyx1PWUucG9zaXRpb25lZD8tcy8yOi1uLndpZHRoLzItaSxoPWUucG9zaXRpb25lZD8tbC8yOi1uLmhlaWdodC8yLWk7aWYoYS5hdHRyKCJjbGFzcyIsImJhc2ljIGNsdXN0ZXIgY29tcG9zaXRlIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGUucHJvcHMpe2xldCBmPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKFVGKGEsZS5wcm9wcy5ib3JkZXJzLHMsbCksZi5kZWxldGUoImJvcmRlcnMiKSksZi5mb3JFYWNoKGQ9PntYLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2R9YCl9KX1yZXR1cm4gSm4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gSW4ucmVjdChlLGYpfSxyfSwiY29tcG9zaXRlIiksaG50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyfT1hd2FpdCBOaSh0LGUsImxhYmVsIiwhMCk7WC50cmFjZSgiQ2xhc3NlcyA9ICIsZS5jbGFzcyk7bGV0IG49ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPTAsYT0wO2lmKG4uYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsYSksci5hdHRyKCJjbGFzcyIsImxhYmVsIGVkZ2VMYWJlbCIpLGUucHJvcHMpe2xldCBzPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKFVGKG4sZS5wcm9wcy5ib3JkZXJzLGksYSkscy5kZWxldGUoImJvcmRlcnMiKSkscy5mb3JFYWNoKGw9PntYLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2x9YCl9KX1yZXR1cm4gSm4oZSxuKSxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gSW4ucmVjdChlLHMpfSxyfSwibGFiZWxSZWN0Iik7byhVRiwiYXBwbHlOb2RlUHJvcGVydHlCb3JkZXJzIik7Zm50PW8oYXN5bmModCxlKT0+e2xldCByO2UuY2xhc3Nlcz9yPSJub2RlICIrZS5jbGFzc2VzOnI9Im5vZGUgZGVmYXVsdCI7bGV0IG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIscikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxhPW4uaW5zZXJ0KCJsaW5lIikscz1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxsPWUubGFiZWxUZXh0LmZsYXQ/ZS5sYWJlbFRleHQuZmxhdCgpOmUubGFiZWxUZXh0LHU9IiI7dHlwZW9mIGw9PSJvYmplY3QiP3U9bFswXTp1PWwsWC5pbmZvKCJMYWJlbCB0ZXh0IGFiYzc5Iix1LGwsdHlwZW9mIGw9PSJvYmplY3QiKTtsZXQgaD1zLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBrcyh1LGUubGFiZWxTdHlsZSwhMCwhMCkpLGY9e3dpZHRoOjAsaGVpZ2h0OjB9O2lmKGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgeT1oLmNoaWxkcmVuWzBdLHY9R2UoaCk7Zj15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGYud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixmLmhlaWdodCl9WC5pbmZvKCJUZXh0IDIiLGwpO2xldCBkPWwuc2xpY2UoMSxsLmxlbmd0aCkscD1oLmdldEJCb3goKSxtPXMubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IGtzKGQuam9pbj9kLmpvaW4oIjxici8+Iik6ZCxlLmxhYmVsU3R5bGUsITAsITApKTtpZihkcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IHk9bS5jaGlsZHJlblswXSx2PUdlKG0pO2Y9eS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2LmF0dHIoIndpZHRoIixmLndpZHRoKSx2LmF0dHIoImhlaWdodCIsZi5oZWlnaHQpfWxldCBnPWUucGFkZGluZy8yO3JldHVybiBHZShtKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGYud2lkdGg+cC53aWR0aD8wOihwLndpZHRoLWYud2lkdGgpLzIpKyIsICIrKHAuaGVpZ2h0K2crNSkrIikiKSxHZShoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGYud2lkdGg8cC53aWR0aD8wOi0ocC53aWR0aC1mLndpZHRoKS8yKSsiLCAwKSIpLGY9cy5ub2RlKCkuZ2V0QkJveCgpLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWYud2lkdGgvMisiLCAiKygtZi5oZWlnaHQvMi1nKzMpKyIpIiksaS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLWYud2lkdGgvMi1nKS5hdHRyKCJ5IiwtZi5oZWlnaHQvMi1nKS5hdHRyKCJ3aWR0aCIsZi53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrZS5wYWRkaW5nKSxhLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtZi53aWR0aC8yLWcpLmF0dHIoIngyIixmLndpZHRoLzIrZykuYXR0cigieTEiLC1mLmhlaWdodC8yLWcrcC5oZWlnaHQrZykuYXR0cigieTIiLC1mLmhlaWdodC8yLWcrcC5oZWlnaHQrZyksSm4oZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gSW4ucmVjdChlLHkpfSxufSwicmVjdFdpdGhUaXRsZSIpLGRudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGk9bi5oZWlnaHQrZS5wYWRkaW5nLGE9bi53aWR0aCtpLzQrZS5wYWRkaW5nLHM9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGkvMikuYXR0cigicnkiLGkvMikuYXR0cigieCIsLWEvMikuYXR0cigieSIsLWkvMikuYXR0cigid2lkdGgiLGEpLmF0dHIoImhlaWdodCIsaSk7cmV0dXJuIEpuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIEluLnJlY3QoZSxsKX0scn0sInN0YWRpdW0iKSxwbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGE9ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBhLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLG4ud2lkdGgvMitpKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrZS5wYWRkaW5nKSxYLmluZm8oIkNpcmNsZSBtYWluIiksSm4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gWC5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLG4ud2lkdGgvMitpLHMpLEluLmNpcmNsZShlLG4ud2lkdGgvMitpLHMpfSxyfSwiY2lyY2xlIiksbW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxhPTUscz1yLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLGw9cy5pbnNlcnQoImNpcmNsZSIpLHU9cy5pbnNlcnQoImNpcmNsZSIpO3JldHVybiBzLmF0dHIoImNsYXNzIixlLmNsYXNzKSxsLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLG4ud2lkdGgvMitpK2EpLmF0dHIoIndpZHRoIixuLndpZHRoK2UucGFkZGluZythKjIpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrZS5wYWRkaW5nK2EqMiksdS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJyIixuLndpZHRoLzIraSkuYXR0cigid2lkdGgiLG4ud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0K2UucGFkZGluZyksWC5pbmZvKCJEb3VibGVDaXJjbGUgbWFpbiIpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oaCl7cmV0dXJuIFguaW5mbygiRG91YmxlQ2lyY2xlIGludGVyc2VjdCIsZSxuLndpZHRoLzIraSthLGgpLEluLmNpcmNsZShlLG4ud2lkdGgvMitpK2EsaCl9LHJ9LCJkb3VibGVjaXJjbGUiKSxnbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDppLHk6MH0se3g6aSx5Oi1hfSx7eDowLHk6LWF9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmkrOCx5OjB9LHt4OmkrOCx5Oi1hfSx7eDotOCx5Oi1hfSx7eDotOCx5OjB9XSxsPVhsKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxKbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sInN1YnJvdXRpbmUiKSx5bnQ9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbj1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG4uYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksSm4oZSxuKSxlLmludGVyc2VjdD1mdW5jdGlvbihpKXtyZXR1cm4gSW4uY2lyY2xlKGUsNyxpKX0scn0sInN0YXJ0IikseDJlPW8oKHQsZSxyKT0+e2xldCBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT03MCxhPTEwO3I9PT0iTFIiJiYoaT0xMCxhPTcwKTtsZXQgcz1uLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0xKmkvMikuYXR0cigieSIsLTEqYS8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixhKS5hdHRyKCJjbGFzcyIsImZvcmstam9pbiIpO3JldHVybiBKbihlLHMpLGUuaGVpZ2h0PWUuaGVpZ2h0K2UucGFkZGluZy8yLGUud2lkdGg9ZS53aWR0aCtlLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gSW4ucmVjdChlLGwpfSxufSwiZm9ya0pvaW4iKSx2bnQ9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbj1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksaT1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksbi5hdHRyKCJjbGFzcyIsInN0YXRlLWVuZCIpLmF0dHIoInIiLDUpLmF0dHIoIndpZHRoIiwxMCkuYXR0cigiaGVpZ2h0IiwxMCksSm4oZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbihhKXtyZXR1cm4gSW4uY2lyY2xlKGUsNyxhKX0scn0sImVuZCIpLHhudD1vKGFzeW5jKHQsZSk9PntsZXQgcj1lLnBhZGRpbmcvMixuPTQsaT04LGE7ZS5jbGFzc2VzP2E9Im5vZGUgIitlLmNsYXNzZXM6YT0ibm9kZSBkZWZhdWx0IjtsZXQgcz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbD1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHU9cy5pbnNlcnQoImxpbmUiKSxoPXMuaW5zZXJ0KCJsaW5lIiksZj0wLGQ9bixwPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLG09MCxnPWUuY2xhc3NEYXRhLmFubm90YXRpb25zPy5bMF0seT1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iXHhBQiIrZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIlx4QkIiOiIiLHY9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQga3MoeSxlLmxhYmVsU3R5bGUsITAsITApKSx4PXYuZ2V0QkJveCgpO2lmKGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgQz12LmNoaWxkcmVuWzBdLEQ9R2Uodik7eD1DLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQuYXR0cigid2lkdGgiLHgud2lkdGgpLEQuYXR0cigiaGVpZ2h0Iix4LmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihkKz14LmhlaWdodCtuLGYrPXgud2lkdGgpO2xldCBiPWUuY2xhc3NEYXRhLmxhYmVsO2UuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmUuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/Yis9IiZsdDsiK2UuY2xhc3NEYXRhLnR5cGUrIiZndDsiOmIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7bGV0IFQ9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQga3MoYixlLmxhYmVsU3R5bGUsITAsITApKTtHZShUKS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgUz1ULmdldEJCb3goKTtpZihkcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEM9VC5jaGlsZHJlblswXSxEPUdlKFQpO1M9Qy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxELmF0dHIoIndpZHRoIixTLndpZHRoKSxELmF0dHIoImhlaWdodCIsUy5oZWlnaHQpfWQrPVMuaGVpZ2h0K24sUy53aWR0aD5mJiYoZj1TLndpZHRoKTtsZXQgdz1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goYXN5bmMgQz0+e2xldCBEPUMuZ2V0RGlzcGxheURldGFpbHMoKSxPPUQuZGlzcGxheVRleHQ7bWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKE89Ty5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7bGV0IFI9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQga3MoTyxELmNzc1N0eWxlP0QuY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksaz1SLmdldEJCb3goKTtpZihkcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEw9Ui5jaGlsZHJlblswXSxBPUdlKFIpO2s9TC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBLmF0dHIoIndpZHRoIixrLndpZHRoKSxBLmF0dHIoImhlaWdodCIsay5oZWlnaHQpfWsud2lkdGg+ZiYmKGY9ay53aWR0aCksZCs9ay5oZWlnaHQrbix3LnB1c2goUil9KSxkKz1pO2xldCBFPVtdO2lmKGUuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChhc3luYyBDPT57bGV0IEQ9Qy5nZXREaXNwbGF5RGV0YWlscygpLE89RC5kaXNwbGF5VGV4dDttZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoTz1PLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtsZXQgUj1wLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBrcyhPLEQuY3NzU3R5bGU/RC5jc3NTdHlsZTplLmxhYmVsU3R5bGUsITAsITApKSxrPVIuZ2V0QkJveCgpO2lmKGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgTD1SLmNoaWxkcmVuWzBdLEE9R2UoUik7az1MLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLGsud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixrLmhlaWdodCl9ay53aWR0aD5mJiYoZj1rLndpZHRoKSxkKz1rLmhlaWdodCtuLEUucHVzaChSKX0pLGQrPWksZyl7bGV0IEM9KGYteC53aWR0aCkvMjtHZSh2KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitDKSsiLCAiKy0xKmQvMisiKSIpLG09eC5oZWlnaHQrbn1sZXQgXz0oZi1TLndpZHRoKS8yO3JldHVybiBHZShUKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitfKSsiLCAiKygtMSpkLzIrbSkrIikiKSxtKz1TLmhlaWdodCtuLHUuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksdy5mb3JFYWNoKEM9PntHZShDKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbStpLzIpKyIpIik7bGV0IEQ9Qz8uZ2V0QkJveCgpO20rPShEPy5oZWlnaHQ/PzApK259KSxtKz1pLGguYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksRS5mb3JFYWNoKEM9PntHZShDKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbSkrIikiKTtsZXQgRD1DPy5nZXRCQm94KCk7bSs9KEQ/LmhlaWdodD8/MCkrbn0pLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi8yLXIpLmF0dHIoInkiLC0oZC8yKS1yKS5hdHRyKCJ3aWR0aCIsZitlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZCtlLnBhZGRpbmcpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIEluLnJlY3QoZSxDKX0sc30sImNsYXNzX2JveCIpLGIyZT17cmhvbWJ1czp2MmUsY29tcG9zaXRlOnVudCxxdWVzdGlvbjp2MmUscmVjdDpjbnQsbGFiZWxSZWN0OmhudCxyZWN0V2l0aFRpdGxlOmZudCxjaG9pY2U6SnJ0LGNpcmNsZTpwbnQsZG91YmxlY2lyY2xlOm1udCxzdGFkaXVtOmRudCxoZXhhZ29uOmVudCxibG9ja19hcnJvdzp0bnQscmVjdF9sZWZ0X2ludl9hcnJvdzpybnQsbGVhbl9yaWdodDpubnQsbGVhbl9sZWZ0OmludCx0cmFwZXpvaWQ6YW50LGludl90cmFwZXpvaWQ6c250LHJlY3RfcmlnaHRfaW52X2Fycm93Om9udCxjeWxpbmRlcjpsbnQsc3RhcnQ6eW50LGVuZDp2bnQsbm90ZTptMmUsc3Vicm91dGluZTpnbnQsZm9yazp4MmUsam9pbjp4MmUsY2xhc3NfYm94OnhudH0sU0M9e30sSEY9byhhc3luYyh0LGUscik9PntsZXQgbixpO2lmKGUubGluayl7bGV0IGE7bWUoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP2E9Il90b3AiOmUubGlua1RhcmdldCYmKGE9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksbj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsYSksaT1hd2FpdCBiMmVbZS5zaGFwZV0obixlLHIpfWVsc2UgaT1hd2FpdCBiMmVbZS5zaGFwZV0odCxlLHIpLG49aTtyZXR1cm4gZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxTQ1tlLmlkXT1uLGUuaGF2ZUNhbGxiYWNrJiZTQ1tlLmlkXS5hdHRyKCJjbGFzcyIsU0NbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLG59LCJpbnNlcnROb2RlIiksVDJlPW8odD0+e2xldCBlPVNDW3QuaWRdO1gudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LmRpZmYsdCwidHJhbnNsYXRlKCIrKHQueC10LndpZHRoLzItNSkrIiwgIit0LndpZHRoLzIrIikiKTtsZXQgcj04LG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItcikrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LCJwb3NpdGlvbk5vZGUiKX0pO2Z1bmN0aW9uIGsyZSh0LGUscj0hMSl7bGV0IG49dCxpPSJkZWZhdWx0Ijsobj8uY2xhc3Nlcz8ubGVuZ3RofHwwKT4wJiYoaT0obj8uY2xhc3Nlcz8/W10pLmpvaW4oIiAiKSksaT1pKyIgZmxvd2NoYXJ0LWxhYmVsIjtsZXQgYT0wLHM9IiIsbDtzd2l0Y2gobi50eXBlKXtjYXNlInJvdW5kIjphPTUscz0icmVjdCI7YnJlYWs7Y2FzZSJjb21wb3NpdGUiOmE9MCxzPSJjb21wb3NpdGUiLGw9MDticmVhaztjYXNlInNxdWFyZSI6cz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpzPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpzPSJoZXhhZ29uIjticmVhaztjYXNlImJsb2NrX2Fycm93IjpzPSJibG9ja19hcnJvdyI7YnJlYWs7Y2FzZSJvZGQiOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6cz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOnM9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnM9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpzPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlInJlY3RfbGVmdF9pbnZfYXJyb3ciOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpzPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6cz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpzPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOnM9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOnM9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpzPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6cz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0OnM9InJlY3QifWxldCB1PUQ5KG4/LnN0eWxlcz8/W10pLGg9bi5sYWJlbCxmPW4uc2l6ZT8/e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07cmV0dXJue2xhYmVsU3R5bGU6dS5sYWJlbFN0eWxlLHNoYXBlOnMsbGFiZWxUZXh0Omgscng6YSxyeTphLGNsYXNzOmksc3R5bGU6dS5zdHlsZSxpZDpuLmlkLGRpcmVjdGlvbnM6bi5kaXJlY3Rpb25zLHdpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHg6Zi54LHk6Zi55LHBvc2l0aW9uZWQ6cixpbnRlcnNlY3Q6dm9pZCAwLHR5cGU6bi50eXBlLHBhZGRpbmc6bD8/dHIoKT8uYmxvY2s/LnBhZGRpbmc/PzB9fWFzeW5jIGZ1bmN0aW9uIGJudCh0LGUscil7bGV0IG49azJlKGUsciwhMSk7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bGV0IGk9dHIoKSxhPWF3YWl0IEhGKHQsbix7Y29uZmlnOml9KSxzPWEubm9kZSgpLmdldEJCb3goKSxsPXIuZ2V0QmxvY2sobi5pZCk7bC5zaXplPXt3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCx4OjAseTowLG5vZGU6YX0sci5zZXRCbG9jayhsKSxhLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIFRudCh0LGUscil7bGV0IG49azJlKGUsciwhMCk7aWYoci5nZXRCbG9jayhuLmlkKS50eXBlIT09InNwYWNlIil7bGV0IGE9dHIoKTthd2FpdCBIRih0LG4se2NvbmZpZzphfSksZS5pbnRlcnNlY3Q9bj8uaW50ZXJzZWN0LFQyZShuKX19YXN5bmMgZnVuY3Rpb24gV0YodCxlLHIsbil7Zm9yKGxldCBpIG9mIGUpYXdhaXQgbih0LGksciksaS5jaGlsZHJlbiYmYXdhaXQgV0YodCxpLmNoaWxkcmVuLHIsbil9YXN5bmMgZnVuY3Rpb24gRTJlKHQsZSxyKXthd2FpdCBXRih0LGUscixibnQpfWFzeW5jIGZ1bmN0aW9uIFMyZSh0LGUscil7YXdhaXQgV0YodCxlLHIsVG50KX1hc3luYyBmdW5jdGlvbiBDMmUodCxlLHIsbixpKXtsZXQgYT1uZXcgc24oe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTthLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IobGV0IHMgb2YgcilzLnNpemUmJmEuc2V0Tm9kZShzLmlkLHt3aWR0aDpzLnNpemUud2lkdGgsaGVpZ2h0OnMuc2l6ZS5oZWlnaHQsaW50ZXJzZWN0OnMuaW50ZXJzZWN0fSk7Zm9yKGxldCBzIG9mIGUpaWYocy5zdGFydCYmcy5lbmQpe2xldCBsPW4uZ2V0QmxvY2socy5zdGFydCksdT1uLmdldEJsb2NrKHMuZW5kKTtpZihsPy5zaXplJiZ1Py5zaXplKXtsZXQgaD1sLnNpemUsZj11LnNpemUsZD1be3g6aC54LHk6aC55fSx7eDpoLngrKGYueC1oLngpLzIseTpoLnkrKGYueS1oLnkpLzJ9LHt4OmYueCx5OmYueX1dO2UyZSh0LHt2OnMuc3RhcnQsdzpzLmVuZCxuYW1lOnMuaWR9LHsuLi5zLGFycm93VHlwZUVuZDpzLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpzLmFycm93VHlwZVN0YXJ0LHBvaW50czpkLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSx2b2lkIDAsImJsb2NrIixhLGkpLHMubGFiZWwmJihhd2FpdCBadmUodCx7Li4ucyxsYWJlbDpzLmxhYmVsLGxhYmVsU3R5bGU6InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IixhcnJvd1R5cGVFbmQ6cy5hcnJvd1R5cGVFbmQsYXJyb3dUeXBlU3RhcnQ6cy5hcnJvd1R5cGVTdGFydCxwb2ludHM6ZCxjbGFzc2VzOiJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIExTLWExIExFLWIxIn0pLEp2ZSh7Li4ucyx4OmRbMV0ueCx5OmRbMV0ueX0se29yaWdpbmFsUGF0aDpkfSkpfX19dmFyIEEyZT1OKCgpPT57InVzZSBzdHJpY3QiO1dvKCk7bWkoKTt0MmUoKTt3MmUoKTtlcigpO28oazJlLCJnZXROb2RlRnJvbUJsb2NrIik7byhibnQsImNhbGN1bGF0ZUJsb2NrU2l6ZSIpO28oVG50LCJpbnNlcnRCbG9ja1Bvc2l0aW9uZWQiKTtvKFdGLCJwZXJmb3JtT3BlcmF0aW9ucyIpO28oRTJlLCJjYWxjdWxhdGVCbG9ja1NpemVzIik7byhTMmUsImluc2VydEJsb2NrcyIpO28oQzJlLCJpbnNlcnRFZGdlcyIpfSk7dmFyIHdudCxrbnQsXzJlLEQyZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7bWkoKTtWdmUoKTt5dCgpO3hpKCk7cXZlKCk7QTJlKCk7d250PW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksa250PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxibG9jazphfT10cigpLHM9bi5kYixsO2k9PT0ic2FuZGJveCImJihsPUdlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/R2UobC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpLGg9aT09PSJzYW5kYm94Ij91LnNlbGVjdChgW2lkPSIke2V9Il1gKTpHZShgW2lkPSIke2V9Il1gKTtHdmUoaCxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxuLnR5cGUsZSk7bGV0IGQ9cy5nZXRCbG9ja3MoKSxwPXMuZ2V0QmxvY2tzRmxhdCgpLG09cy5nZXRFZGdlcygpLGc9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJsb2NrIik7YXdhaXQgRTJlKGcsZCxzKTtsZXQgeT1XdmUocyk7aWYoYXdhaXQgUzJlKGcsZCxzKSxhd2FpdCBDMmUoZyxtLHAscyxlKSx5KXtsZXQgdj15LHg9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKC4xMjUqKHYud2lkdGgvdi5oZWlnaHQpKSksYj12LmhlaWdodCt4KzEwLFQ9di53aWR0aCsxMCx7dXNlTWF4V2lkdGg6U309YTtmbihoLGIsVCwhIVMpLFguZGVidWcoIkhlcmUgQm91bmRzIix5LHYpLGguYXR0cigidmlld0JveCIsYCR7di54LTV9ICR7di55LTV9ICR7di53aWR0aCsxMH0gJHt2LmhlaWdodCsxMH1gKX19LCJkcmF3IiksXzJlPXtkcmF3OmtudCxnZXRDbGFzc2VzOndudH19KTt2YXIgTDJlPXt9O3VyKEwyZSx7ZGlhZ3JhbTooKT0+RW50fSk7dmFyIEVudCxSMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtSdmUoKTtGdmUoKTt6dmUoKTtEMmUoKTtFbnQ9e3BhcnNlcjpMdmUsZGI6QnZlLHJlbmRlcmVyOl8yZSxzdHlsZXM6JHZlfX0pO3ZhciBxRixZRixENCxJMmUsWEYsamEscnUsTDQsTzJlLF9udCxSNCxQMmUsQjJlLEYyZSwkMmUsejJlLENDLFlmLEFDPU4oKCk9PnsidXNlIHN0cmljdCI7cUY9e0w6ImxlZnQiLFI6InJpZ2h0IixUOiJ0b3AiLEI6ImJvdHRvbSJ9LFlGPXtMOm8odD0+YCR7dH0sJHt0LzJ9IDAsJHt0fSAwLDBgLCJMIiksUjpvKHQ9PmAwLCR7dC8yfSAke3R9LDAgJHt0fSwke3R9YCwiUiIpLFQ6byh0PT5gMCwwICR7dH0sMCAke3QvMn0sJHt0fWAsIlQiKSxCOm8odD0+YCR7dC8yfSwwICR7dH0sJHt0fSAwLCR7dH1gLCJCIil9LEQ0PXtMOm8oKHQsZSk9PnQtZSsyLCJMIiksUjpvKCh0LGUpPT50LTIsIlIiKSxUOm8oKHQsZSk9PnQtZSsyLCJUIiksQjpvKCh0LGUpPT50LTIsIkIiKX0sSTJlPW8oZnVuY3Rpb24odCl7cmV0dXJuIGphKHQpP3Q9PT0iTCI/IlIiOiJMIjp0PT09IlQiPyJCIjoiVCJ9LCJnZXRPcHBvc2l0ZUFyY2hpdGVjdHVyZURpcmVjdGlvbiIpLFhGPW8oZnVuY3Rpb24odCl7bGV0IGU9dDtyZXR1cm4gZT09PSJMInx8ZT09PSJSInx8ZT09PSJUInx8ZT09PSJCIn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uIiksamE9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IkwifHxlPT09IlIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YIikscnU9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IlQifHxlPT09IkIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25ZIiksTDQ9byhmdW5jdGlvbih0LGUpe2xldCByPWphKHQpJiZydShlKSxuPXJ1KHQpJiZqYShlKTtyZXR1cm4gcnx8bn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFkiKSxPMmU9byhmdW5jdGlvbih0KXtsZXQgZT10WzBdLHI9dFsxXSxuPWphKGUpJiZydShyKSxpPXJ1KGUpJiZqYShyKTtyZXR1cm4gbnx8aX0sImlzQXJjaGl0ZWN0dXJlUGFpclhZIiksX250PW8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT0iTEwiJiZ0IT09IlJSIiYmdCE9PSJUVCImJnQhPT0iQkIifSwiaXNWYWxpZEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIiKSxSND1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9YCR7dH0ke2V9YDtyZXR1cm4gX250KHIpP3I6dm9pZCAwfSwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciIpLFAyZT1vKGZ1bmN0aW9uKFt0LGVdLHIpe2xldCBuPXJbMF0saT1yWzFdO3JldHVybiBqYShuKT9ydShpKT9bdCsobj09PSJMIj8tMToxKSxlKyhpPT09IlQiPzE6LTEpXTpbdCsobj09PSJMIj8tMToxKSxlXTpqYShpKT9bdCsoaT09PSJMIj8xOi0xKSxlKyhuPT09IlQiPzE6LTEpXTpbdCxlKyhuPT09IlQiPzE6LTEpXX0sInNoaWZ0UG9zaXRpb25CeUFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIiKSxCMmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09PSJMVCJ8fHQ9PT0iVEwiP1sxLDFdOnQ9PT0iQkwifHx0PT09IkxCIj9bMSwtMV06dD09PSJCUiJ8fHQ9PT0iUkIiP1stMSwtMV06Wy0xLDFdfSwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFlGYWN0b3JzIiksRjJlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gTDQodCxlKT8iYmVuZCI6amEodCk/Imhvcml6b250YWwiOiJ2ZXJ0aWNhbCJ9LCJnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25BbGlnbm1lbnQiKSwkMmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09InNlcnZpY2UifSwiaXNBcmNoaXRlY3R1cmVTZXJ2aWNlIiksejJlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PSJqdW5jdGlvbiJ9LCJpc0FyY2hpdGVjdHVyZUp1bmN0aW9uIiksQ0M9byh0PT50LmRhdGEoKSwiZWRnZURhdGEiKSxZZj1vKHQ9PnQuZGF0YSgpLCJub2RlRGF0YSIpfSk7ZnVuY3Rpb24gTWkodCl7cmV0dXJuIFYyZSgpW3RdfXZhciBHMmUsdnIsRG50LExudCxSbnQsTm50LE1udCxJbnQsakYsT250LFBudCxCbnQsRm50LCRudCx6bnQsR250LFYyZSxvMCxOND1OKCgpPT57InVzZSBzdHJpY3QiO19hKCk7bWkoKTtTUygpO2NpKCk7QUMoKTtlcigpO0cyZT1vci5hcmNoaXRlY3R1cmUsdnI9bmV3IFRmKCgpPT4oe25vZGVzOnt9LGdyb3Vwczp7fSxlZGdlczpbXSxyZWdpc3RlcmVkSWRzOnt9LGNvbmZpZzpHMmUsZGF0YVN0cnVjdHVyZXM6dm9pZCAwLGVsZW1lbnRzOnt9fSkpLERudD1vKCgpPT57dnIucmVzZXQoKSxrcigpfSwiY2xlYXIiKSxMbnQ9byhmdW5jdGlvbih7aWQ6dCxpY29uOmUsaW46cix0aXRsZTpuLGljb25UZXh0Oml9KXtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBpZCBbJHt0fV0gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciAke3ZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XX1gKTtpZihyIT09dm9pZCAwKXtpZih0PT09cil0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIFske3R9XSBjYW5ub3QgYmUgcGxhY2VkIHdpdGhpbiBpdHNlbGZgKTtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcl09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHt0fV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIHNlcnZpY2VgKTtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcl09PT0ibm9kZSIpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHt0fV0ncyBwYXJlbnQgaXMgbm90IGEgZ3JvdXBgKX12ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF09Im5vZGUiLHZyLnJlY29yZHMubm9kZXNbdF09e2lkOnQsdHlwZToic2VydmljZSIsaWNvbjplLGljb25UZXh0OmksdGl0bGU6bixlZGdlczpbXSxpbjpyfX0sImFkZFNlcnZpY2UiKSxSbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyh2ci5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoJDJlKSwiZ2V0U2VydmljZXMiKSxObnQ9byhmdW5jdGlvbih7aWQ6dCxpbjplfSl7dnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdPSJub2RlIix2ci5yZWNvcmRzLm5vZGVzW3RdPXtpZDp0LHR5cGU6Imp1bmN0aW9uIixlZGdlczpbXSxpbjplfX0sImFkZEp1bmN0aW9uIiksTW50PW8oKCk9Pk9iamVjdC52YWx1ZXModnIucmVjb3Jkcy5ub2RlcykuZmlsdGVyKHoyZSksImdldEp1bmN0aW9ucyIpLEludD1vKCgpPT5PYmplY3QudmFsdWVzKHZyLnJlY29yZHMubm9kZXMpLCJnZXROb2RlcyIpLGpGPW8odD0+dnIucmVjb3Jkcy5ub2Rlc1t0XSwiZ2V0Tm9kZSIpLE9udD1vKGZ1bmN0aW9uKHtpZDp0LGljb246ZSxpbjpyLHRpdGxlOm59KXtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgaWQgWyR7dH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHt2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF19YCk7aWYociE9PXZvaWQgMCl7aWYodD09PXIpdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7dH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO2lmKHZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHt0fV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIGdyb3VwYCk7aWYodnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09Im5vZGUiKXRocm93IG5ldyBFcnJvcihgVGhlIGdyb3VwIFske3R9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApfXZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0iZ3JvdXAiLHZyLnJlY29yZHMuZ3JvdXBzW3RdPXtpZDp0LGljb246ZSx0aXRsZTpuLGluOnJ9fSwiYWRkR3JvdXAiKSxQbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyh2ci5yZWNvcmRzLmdyb3VwcyksImdldEdyb3VwcyIpLEJudD1vKGZ1bmN0aW9uKHtsaHNJZDp0LHJoc0lkOmUsbGhzRGlyOnIscmhzRGlyOm4sbGhzSW50bzppLHJoc0ludG86YSxsaHNHcm91cDpzLHJoc0dyb3VwOmwsdGl0bGU6dX0pe2lmKCFYRihyKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciBsZWZ0IGhhbmQgc2lkZSBvZiBlZGdlICR7dH0tLSR7ZX0uIEV4cGVjdGVkIChMLFIsVCxCKSBnb3QgJHtyfWApO2lmKCFYRihuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciByaWdodCBoYW5kIHNpZGUgb2YgZWRnZSAke3R9LS0ke2V9LiBFeHBlY3RlZCAoTCxSLFQsQikgZ290ICR7bn1gKTtpZih2ci5yZWNvcmRzLm5vZGVzW3RdPT09dm9pZCAwJiZ2ci5yZWNvcmRzLmdyb3Vwc1t0XT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBsZWZ0LWhhbmQgaWQgWyR7dH1dIGRvZXMgbm90IHlldCBleGlzdC4gUGxlYXNlIGNyZWF0ZSB0aGUgc2VydmljZS9ncm91cCBiZWZvcmUgZGVjbGFyaW5nIGFuIGVkZ2UgdG8gaXQuYCk7aWYodnIucmVjb3Jkcy5ub2Rlc1tlXT09PXZvaWQgMCYmdnIucmVjb3Jkcy5ncm91cHNbdF09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtlfV0gZG9lcyBub3QgeWV0IGV4aXN0LiBQbGVhc2UgY3JlYXRlIHRoZSBzZXJ2aWNlL2dyb3VwIGJlZm9yZSBkZWNsYXJpbmcgYW4gZWRnZSB0byBpdC5gKTtsZXQgaD12ci5yZWNvcmRzLm5vZGVzW3RdLmluLGY9dnIucmVjb3Jkcy5ub2Rlc1tlXS5pbjtpZihzJiZoJiZmJiZoPT1mKXRocm93IG5ldyBFcnJvcihgVGhlIGxlZnQtaGFuZCBpZCBbJHt0fV0gaXMgbW9kaWZpZWQgdG8gdHJhdmVyc2UgdGhlIGdyb3VwIGJvdW5kYXJ5LCBidXQgdGhlIGVkZ2UgZG9lcyBub3QgcGFzcyB0aHJvdWdoIHR3byBncm91cHMuYCk7aWYobCYmaCYmZiYmaD09Zil0aHJvdyBuZXcgRXJyb3IoYFRoZSByaWdodC1oYW5kIGlkIFske2V9XSBpcyBtb2RpZmllZCB0byB0cmF2ZXJzZSB0aGUgZ3JvdXAgYm91bmRhcnksIGJ1dCB0aGUgZWRnZSBkb2VzIG5vdCBwYXNzIHRocm91Z2ggdHdvIGdyb3Vwcy5gKTtsZXQgZD17bGhzSWQ6dCxsaHNEaXI6cixsaHNJbnRvOmksbGhzR3JvdXA6cyxyaHNJZDplLHJoc0RpcjpuLHJoc0ludG86YSxyaHNHcm91cDpsLHRpdGxlOnV9O3ZyLnJlY29yZHMuZWRnZXMucHVzaChkKSx2ci5yZWNvcmRzLm5vZGVzW3RdJiZ2ci5yZWNvcmRzLm5vZGVzW2VdJiYodnIucmVjb3Jkcy5ub2Rlc1t0XS5lZGdlcy5wdXNoKHZyLnJlY29yZHMuZWRnZXNbdnIucmVjb3Jkcy5lZGdlcy5sZW5ndGgtMV0pLHZyLnJlY29yZHMubm9kZXNbZV0uZWRnZXMucHVzaCh2ci5yZWNvcmRzLmVkZ2VzW3ZyLnJlY29yZHMuZWRnZXMubGVuZ3RoLTFdKSl9LCJhZGRFZGdlIiksRm50PW8oKCk9PnZyLnJlY29yZHMuZWRnZXMsImdldEVkZ2VzIiksJG50PW8oKCk9PntpZih2ci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPT09dm9pZCAwKXtsZXQgdD17fSxlPU9iamVjdC5lbnRyaWVzKHZyLnJlY29yZHMubm9kZXMpLnJlZHVjZSgobCxbdSxoXSk9PihsW3VdPWguZWRnZXMucmVkdWNlKChmLGQpPT57bGV0IHA9akYoZC5saHNJZCk/LmluLG09akYoZC5yaHNJZCk/LmluO2lmKHAmJm0mJnAhPT1tKXtsZXQgZz1GMmUoZC5saHNEaXIsZC5yaHNEaXIpO2chPT0iYmVuZCImJih0W3BdPz89e30sdFtwXVttXT1nLHRbbV0/Pz17fSx0W21dW3BdPWcpfWlmKGQubGhzSWQ9PT11KXtsZXQgZz1SNChkLmxoc0RpcixkLnJoc0Rpcik7ZyYmKGZbZ109ZC5yaHNJZCl9ZWxzZXtsZXQgZz1SNChkLnJoc0RpcixkLmxoc0Rpcik7ZyYmKGZbZ109ZC5saHNJZCl9cmV0dXJuIGZ9LHt9KSxsKSx7fSkscj1PYmplY3Qua2V5cyhlKVswXSxuPXtbcl06MX0saT1PYmplY3Qua2V5cyhlKS5yZWR1Y2UoKGwsdSk9PnU9PT1yP2w6ey4uLmwsW3VdOjF9LHt9KSxhPW8obD0+e2xldCB1PXtbbF06WzAsMF19LGg9W2xdO2Zvcig7aC5sZW5ndGg+MDspe2xldCBmPWguc2hpZnQoKTtpZihmKXtuW2ZdPTEsZGVsZXRlIGlbZl07bGV0IGQ9ZVtmXSxbcCxtXT11W2ZdO09iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtnLHldKT0+e25beV18fCh1W3ldPVAyZShbcCxtXSxnKSxoLnB1c2goeSkpfSl9fXJldHVybiB1fSwiQkZTIikscz1bYShyKV07Zm9yKDtPYmplY3Qua2V5cyhpKS5sZW5ndGg+MDspcy5wdXNoKGEoT2JqZWN0LmtleXMoaSlbMF0pKTt2ci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPXthZGpMaXN0OmUsc3BhdGlhbE1hcHM6cyxncm91cEFsaWdubWVudHM6dH19cmV0dXJuIHZyLnJlY29yZHMuZGF0YVN0cnVjdHVyZXN9LCJnZXREYXRhU3RydWN0dXJlcyIpLHpudD1vKCh0LGUpPT57dnIucmVjb3Jkcy5lbGVtZW50c1t0XT1lfSwic2V0RWxlbWVudEZvcklkIiksR250PW8odD0+dnIucmVjb3Jkcy5lbGVtZW50c1t0XSwiZ2V0RWxlbWVudEJ5SWQiKSxWMmU9bygoKT0+JG4oey4uLkcyZSwuLi50cigpLmFyY2hpdGVjdHVyZX0pLCJnZXRDb25maWciKSxvMD17Y2xlYXI6RG50LHNldERpYWdyYW1UaXRsZTpPcixnZXREaWFncmFtVGl0bGU6TnIsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0QWNjRGVzY3JpcHRpb246THIsZ2V0QWNjRGVzY3JpcHRpb246UnIsZ2V0Q29uZmlnOlYyZSxhZGRTZXJ2aWNlOkxudCxnZXRTZXJ2aWNlczpSbnQsYWRkSnVuY3Rpb246Tm50LGdldEp1bmN0aW9uczpNbnQsZ2V0Tm9kZXM6SW50LGdldE5vZGU6akYsYWRkR3JvdXA6T250LGdldEdyb3VwczpQbnQsYWRkRWRnZTpCbnQsZ2V0RWRnZXM6Rm50LHNldEVsZW1lbnRGb3JJZDp6bnQsZ2V0RWxlbWVudEJ5SWQ6R250LGdldERhdGFTdHJ1Y3R1cmVzOiRudH07byhNaSwiZ2V0Q29uZmlnRmllbGQiKX0pO3ZhciBWbnQsVTJlLEgyZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtNcCgpO040KCk7Vm50PW8oKHQsZSk9PntKbyh0LGUpLHQuZ3JvdXBzLm1hcChlLmFkZEdyb3VwKSx0LnNlcnZpY2VzLm1hcChyPT5lLmFkZFNlcnZpY2Uoey4uLnIsdHlwZToic2VydmljZSJ9KSksdC5qdW5jdGlvbnMubWFwKHI9PmUuYWRkSnVuY3Rpb24oey4uLnIsdHlwZToianVuY3Rpb24ifSkpLHQuZWRnZXMubWFwKGUuYWRkRWRnZSl9LCJwb3B1bGF0ZURiIiksVTJlPXtwYXJzZTpvKGFzeW5jIHQ9PntsZXQgZT1hd2FpdCB2cygiYXJjaGl0ZWN0dXJlIix0KTtYLmRlYnVnKGUpLFZudChlLG8wKX0sInBhcnNlIil9fSk7dmFyIFVudCxXMmUscTJlPU4oKCk9PnsidXNlIHN0cmljdCI7VW50PW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogJHt0LmFyY2hFZGdlV2lkdGh9OwogICAgc3Ryb2tlOiAke3QuYXJjaEVkZ2VDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmFycm93IHsKICAgIGZpbGw6ICR7dC5hcmNoRWRnZUFycm93Q29sb3J9OwogIH0KCiAgLm5vZGUtYmtnIHsKICAgIGZpbGw6IG5vbmU7CiAgICBzdHJva2U6ICR7dC5hcmNoR3JvdXBCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5hcmNoR3JvdXBCb3JkZXJXaWR0aH07CiAgICBzdHJva2UtZGFzaGFycmF5OiA4OwogIH0KICAubm9kZS1pY29uLXRleHQgewogICAgZGlzcGxheTogZmxleDsgCiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAKICAubm9kZS1pY29uLXRleHQgPiBkaXYgewogICAgY29sb3I6ICNmZmY7CiAgICBtYXJnaW46IDFweDsKICAgIGhlaWdodDogZml0LWNvbnRlbnQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogIH0KYCwiZ2V0U3R5bGVzIiksVzJlPVVudH0pO3ZhciBRRj1QaSgoTTQsS0YpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgTTQ9PSJvYmplY3QiJiZ0eXBlb2YgS0Y9PSJvYmplY3QiP0tGLmV4cG9ydHM9cigpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHIpOnR5cGVvZiBNND09Im9iamVjdCI/TTQubGF5b3V0QmFzZT1yKCk6ZS5sYXlvdXRCYXNlPXIoKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikoTTQsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXtpZihlW25dKXJldHVybiBlW25dLmV4cG9ydHM7dmFyIGk9ZVtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsciksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbyhyLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksci5tPXQsci5jPWUsci5pPWZ1bmN0aW9uKG4pe3JldHVybiBufSxyLmQ9ZnVuY3Rpb24obixpLGEpe3IubyhuLGkpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixpLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6YX0pfSxyLm49ZnVuY3Rpb24obil7dmFyIGk9biYmbi5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gbn0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gci5kKGksImEiLGkpLGl9LHIubz1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKX0sci5wPSIiLHIoci5zPTI4KX0oW2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIkxheW91dENvbnN0YW50cyIpLG4uUVVBTElUWT0xLG4uREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEPSExLG4uREVGQVVMVF9JTkNSRU1FTlRBTD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVD0hMCxuLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ9ITEsbi5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q9NTAsbi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPSExLG4uREVGQVVMVF9HUkFQSF9NQVJHSU49MTUsbi5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9ITEsbi5TSU1QTEVfTk9ERV9TSVpFPTQwLG4uU0lNUExFX05PREVfSEFMRl9TSVpFPW4uU0lNUExFX05PREVfU0laRS8yLG4uRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFPTQwLG4uTUlOX0VER0VfTEVOR1RIPTEsbi5XT1JMRF9CT1VOREFSWT0xZTYsbi5JTklUSUFMX1dPUkxEX0JPVU5EQVJZPW4uV09STERfQk9VTkRBUlkvMWUzLG4uV09STERfQ0VOVEVSX1g9MTIwMCxuLldPUkxEX0NFTlRFUl9ZPTkwMCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cig4KSxhPXIoOSk7ZnVuY3Rpb24gcyh1LGgsZil7bi5jYWxsKHRoaXMsZiksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ITEsdGhpcy52R3JhcGhPYmplY3Q9Zix0aGlzLmJlbmRwb2ludHM9W10sdGhpcy5zb3VyY2U9dSx0aGlzLnRhcmdldD1ofW8ocywiTEVkZ2UiKSxzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGwgaW4gbilzW2xdPW5bbF07cy5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxzLnByb3RvdHlwZS5nZXRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXR9LHMucHJvdG90eXBlLmlzSW50ZXJHcmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW50ZXJHcmFwaH0scy5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxzLnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR9LHMucHJvdG90eXBlLmdldEJlbmRwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZW5kcG9pbnRzfSxzLnByb3RvdHlwZS5nZXRMY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sY2F9LHMucHJvdG90eXBlLmdldFNvdXJjZUluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlSW5MY2F9LHMucHJvdG90eXBlLmdldFRhcmdldEluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0SW5MY2F9LHMucHJvdG90eXBlLmdldE90aGVyRW5kPWZ1bmN0aW9uKHUpe2lmKHRoaXMuc291cmNlPT09dSlyZXR1cm4gdGhpcy50YXJnZXQ7aWYodGhpcy50YXJnZXQ9PT11KXJldHVybiB0aGlzLnNvdXJjZTt0aHJvdyJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZSJ9LHMucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaD1mdW5jdGlvbih1LGgpe2Zvcih2YXIgZj10aGlzLmdldE90aGVyRW5kKHUpLGQ9aC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCk7Oyl7aWYoZi5nZXRPd25lcigpPT1oKXJldHVybiBmO2lmKGYuZ2V0T3duZXIoKT09ZClicmVhaztmPWYuZ2V0T3duZXIoKS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9bmV3IEFycmF5KDQpO3RoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWkuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSx0aGlzLnNvdXJjZS5nZXRSZWN0KCksdSksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR8fCh0aGlzLmxlbmd0aFg9dVswXS11WzJdLHRoaXMubGVuZ3RoWT11WzFdLXVbM10sTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpKX0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGhYPXRoaXMudGFyZ2V0LmdldENlbnRlclgoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCksdGhpcy5sZW5ndGhZPXRoaXMudGFyZ2V0LmdldENlbnRlclkoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJZKCksTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpfSx0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGkpe3RoaXMudkdyYXBoT2JqZWN0PWl9byhuLCJMR3JhcGhPYmplY3QiKSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDEzKSxzPXIoMCksbD1yKDE2KSx1PXIoNSk7ZnVuY3Rpb24gaChkLHAsbSxnKXttPT1udWxsJiZnPT1udWxsJiYoZz1wKSxuLmNhbGwodGhpcyxnKSxkLmdyYXBoTWFuYWdlciE9bnVsbCYmKGQ9ZC5ncmFwaE1hbmFnZXIpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLmluY2x1c2lvblRyZWVEZXB0aD1pLk1BWF9WQUxVRSx0aGlzLnZHcmFwaE9iamVjdD1nLHRoaXMuZWRnZXM9W10sdGhpcy5ncmFwaE1hbmFnZXI9ZCxtIT1udWxsJiZwIT1udWxsP3RoaXMucmVjdD1uZXcgYShwLngscC55LG0ud2lkdGgsbS5oZWlnaHQpOnRoaXMucmVjdD1uZXcgYX1vKGgsIkxOb2RlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIG4paFtmXT1uW2ZdO2gucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LGgucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGR9LGgucHJvdG90eXBlLmdldE93bmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJ9LGgucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LndpZHRoPWR9LGgucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QuaGVpZ2h0fSxoLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LmhlaWdodD1kfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMil9LGgucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54LHRoaXMucmVjdC55KX0saC5wcm90b3R5cGUuZ2V0UmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3R9LGgucHJvdG90eXBlLmdldERpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCl9LGgucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0K3RoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgpLzJ9LGgucHJvdG90eXBlLnNldFJlY3Q9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLngsdGhpcy5yZWN0Lnk9ZC55LHRoaXMucmVjdC53aWR0aD1wLndpZHRoLHRoaXMucmVjdC5oZWlnaHQ9cC5oZWlnaHR9LGgucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQtdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0Lnk9cC10aGlzLnJlY3QuaGVpZ2h0LzJ9LGgucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS5tb3ZlQnk9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueCs9ZCx0aGlzLnJlY3QueSs9cH0saC5wcm90b3R5cGUuZ2V0RWRnZUxpc3RUb05vZGU9ZnVuY3Rpb24oZCl7dmFyIHA9W10sbSxnPXRoaXM7cmV0dXJuIGcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LnRhcmdldD09ZCl7aWYoeS5zb3VyY2UhPWcpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlISI7cC5wdXNoKHkpfX0pLHB9LGgucHJvdG90eXBlLmdldEVkZ2VzQmV0d2Vlbj1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKCEoeS5zb3VyY2U9PWd8fHkudGFyZ2V0PT1nKSl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCI7KHkudGFyZ2V0PT1kfHx5LnNvdXJjZT09ZCkmJnAucHVzaCh5KX0pLHB9LGgucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3Q9ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHA9dGhpcztyZXR1cm4gcC5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0uc291cmNlPT1wKWQuYWRkKG0udGFyZ2V0KTtlbHNle2lmKG0udGFyZ2V0IT1wKXRocm93IkluY29ycmVjdCBpbmNpZGVuY3khIjtkLmFkZChtLnNvdXJjZSl9fSksZH0saC5wcm90b3R5cGUud2l0aENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGQ9bmV3IFNldCxwLG07aWYoZC5hZGQodGhpcyksdGhpcy5jaGlsZCE9bnVsbClmb3IodmFyIGc9dGhpcy5jaGlsZC5nZXROb2RlcygpLHk9MDt5PGcubGVuZ3RoO3krKylwPWdbeV0sbT1wLndpdGhDaGlsZHJlbigpLG0uZm9yRWFjaChmdW5jdGlvbih2KXtkLmFkZCh2KX0pO3JldHVybiBkfSxoLnByb3RvdHlwZS5nZXROb09mQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD0wLHA7aWYodGhpcy5jaGlsZD09bnVsbClkPTE7ZWxzZSBmb3IodmFyIG09dGhpcy5jaGlsZC5nZXROb2RlcygpLGc9MDtnPG0ubGVuZ3RoO2crKylwPW1bZ10sZCs9cC5nZXROb09mQ2hpbGRyZW4oKTtyZXR1cm4gZD09MCYmKGQ9MSksZH0saC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09aS5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0saC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZD09bnVsbD90aGlzLmVzdGltYXRlZFNpemU9KHRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KS8yOih0aGlzLmVzdGltYXRlZFNpemU9dGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMucmVjdC53aWR0aD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5yZWN0LmhlaWdodD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5lc3RpbWF0ZWRTaXplKX0saC5wcm90b3R5cGUuc2NhdHRlcj1mdW5jdGlvbigpe3ZhciBkLHAsbT0tcy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLGc9cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO2Q9cy5XT1JMRF9DRU5URVJfWCtsLm5leHREb3VibGUoKSooZy1tKSttO3ZhciB5PS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksdj1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7cD1zLldPUkxEX0NFTlRFUl9ZK2wubmV4dERvdWJsZSgpKih2LXkpK3ksdGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmdldENoaWxkKCk9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYodGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkubGVuZ3RoIT0wKXt2YXIgZD10aGlzLmdldENoaWxkKCk7aWYoZC51cGRhdGVCb3VuZHMoITApLHRoaXMucmVjdC54PWQuZ2V0TGVmdCgpLHRoaXMucmVjdC55PWQuZ2V0VG9wKCksdGhpcy5zZXRXaWR0aChkLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCkpLHRoaXMuc2V0SGVpZ2h0KGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkscy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBwPWQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSxtPWQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKTt0aGlzLmxhYmVsV2lkdGgmJih0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiPyh0aGlzLnJlY3QueC09dGhpcy5sYWJlbFdpZHRoLHRoaXMuc2V0V2lkdGgocCt0aGlzLmxhYmVsV2lkdGgpKTp0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbD09ImNlbnRlciImJnRoaXMubGFiZWxXaWR0aD5wPyh0aGlzLnJlY3QueC09KHRoaXMubGFiZWxXaWR0aC1wKS8yLHRoaXMuc2V0V2lkdGgodGhpcy5sYWJlbFdpZHRoKSk6dGhpcy5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJnRoaXMuc2V0V2lkdGgocCt0aGlzLmxhYmVsV2lkdGgpKSx0aGlzLmxhYmVsSGVpZ2h0JiYodGhpcy5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8odGhpcy5yZWN0LnktPXRoaXMubGFiZWxIZWlnaHQsdGhpcy5zZXRIZWlnaHQobSt0aGlzLmxhYmVsSGVpZ2h0KSk6dGhpcy5sYWJlbFBvc1ZlcnRpY2FsPT0iY2VudGVyIiYmdGhpcy5sYWJlbEhlaWdodD5tPyh0aGlzLnJlY3QueS09KHRoaXMubGFiZWxIZWlnaHQtbSkvMix0aGlzLnNldEhlaWdodCh0aGlzLmxhYmVsSGVpZ2h0KSk6dGhpcy5sYWJlbFBvc1ZlcnRpY2FsPT0iYm90dG9tIiYmdGhpcy5zZXRIZWlnaHQobSt0aGlzLmxhYmVsSGVpZ2h0KSl9fX0saC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9PWkuTUFYX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmluY2x1c2lvblRyZWVEZXB0aH0saC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGQpe3ZhciBwPXRoaXMucmVjdC54O3A+cy5XT1JMRF9CT1VOREFSWT9wPXMuV09STERfQk9VTkRBUlk6cDwtcy5XT1JMRF9CT1VOREFSWSYmKHA9LXMuV09STERfQk9VTkRBUlkpO3ZhciBtPXRoaXMucmVjdC55O20+cy5XT1JMRF9CT1VOREFSWT9tPXMuV09STERfQk9VTkRBUlk6bTwtcy5XT1JMRF9CT1VOREFSWSYmKG09LXMuV09STERfQk9VTkRBUlkpO3ZhciBnPW5ldyB1KHAsbSkseT1kLmludmVyc2VUcmFuc2Zvcm1Qb2ludChnKTt0aGlzLnNldExvY2F0aW9uKHkueCx5LnkpfSxoLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54fSxoLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGh9LGgucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueX0saC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyPT1udWxsP251bGw6dGhpcy5vd25lci5nZXRQYXJlbnQoKX0sdC5leHBvcnRzPWh9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigwKTtmdW5jdGlvbiBpKCl7fW8oaSwiRkRMYXlvdXRDb25zdGFudHMiKTtmb3IodmFyIGEgaW4gbilpW2FdPW5bYV07aS5NQVhfSVRFUkFUSU9OUz0yNTAwLGkuREVGQVVMVF9FREdFX0xFTkdUSD01MCxpLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPS40NSxpLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPTQ1MDAsaS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9LjQsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9MSxpLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9My44LGkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0xLjUsaS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9LjMsaS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SPS4zMyxpLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD0xZTMsaS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQ9NWUzLGkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMPTEwMCxpLk1BWF9OT0RFX0RJU1BMQUNFTUVOVD1pLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCozLGkuTUlOX1JFUFVMU0lPTl9ESVNUPWkuREVGQVVMVF9FREdFX0xFTkdUSC8xMCxpLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD0xMDAsaS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPS4xLGkuTUlOX0VER0VfTEVOR1RIPTEsaS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD0xMCx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSl7aT09bnVsbCYmYT09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOih0aGlzLng9aSx0aGlzLnk9YSl9byhuLCJQb2ludEQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oaSl7dGhpcy55PWl9LG4ucHJvdG90eXBlLmdldERpZmZlcmVuY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueC1pLngsdGhpcy55LWkueSl9LG4ucHJvdG90eXBlLmdldENvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy54Kz1pLndpZHRoLHRoaXMueSs9aS5oZWlnaHQsdGhpc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoMTApLGE9cigwKSxzPXIoNyksbD1yKDMpLHU9cigxKSxoPXIoMTMpLGY9cigxMiksZD1yKDExKTtmdW5jdGlvbiBwKGcseSx2KXtuLmNhbGwodGhpcyx2KSx0aGlzLmVzdGltYXRlZFNpemU9aS5NSU5fVkFMVUUsdGhpcy5tYXJnaW49YS5ERUZBVUxUX0dSQVBIX01BUkdJTix0aGlzLmVkZ2VzPVtdLHRoaXMubm9kZXM9W10sdGhpcy5pc0Nvbm5lY3RlZD0hMSx0aGlzLnBhcmVudD1nLHkhPW51bGwmJnkgaW5zdGFuY2VvZiBzP3RoaXMuZ3JhcGhNYW5hZ2VyPXk6eSE9bnVsbCYmeSBpbnN0YW5jZW9mIExheW91dCYmKHRoaXMuZ3JhcGhNYW5hZ2VyPXkuZ3JhcGhNYW5hZ2VyKX1vKHAsIkxHcmFwaCIpLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbSBpbiBuKXBbbV09blttXTtwLnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxwLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0scC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LHAucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LHAucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0scC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxwLnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxwLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5LHYpe2lmKHk9PW51bGwmJnY9PW51bGwpe3ZhciB4PWc7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciR3JhcGggaGFzIG5vIGdyYXBoIG1nciEiO2lmKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHgpPi0xKXRocm93Ik5vZGUgYWxyZWFkeSBpbiBncmFwaCEiO3JldHVybiB4Lm93bmVyPXRoaXMsdGhpcy5nZXROb2RlcygpLnB1c2goeCkseH1lbHNle3ZhciBiPWc7aWYoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih5KT4tMSYmdGhpcy5nZXROb2RlcygpLmluZGV4T2Yodik+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoISh5Lm93bmVyPT12Lm93bmVyJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghIjtyZXR1cm4geS5vd25lciE9di5vd25lcj9udWxsOihiLnNvdXJjZT15LGIudGFyZ2V0PXYsYi5pc0ludGVyR3JhcGg9ITEsdGhpcy5nZXRFZGdlcygpLnB1c2goYikseS5lZGdlcy5wdXNoKGIpLHYhPXkmJnYuZWRnZXMucHVzaChiKSxiKX19LHAucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihnKXt2YXIgeT1nO2lmKGcgaW5zdGFuY2VvZiBsKXtpZih5PT1udWxsKXRocm93Ik5vZGUgaXMgbnVsbCEiO2lmKCEoeS5vd25lciE9bnVsbCYmeS5vd25lcj09dGhpcykpdGhyb3ciT3duZXIgZ3JhcGggaXMgaW52YWxpZCEiO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93Ik93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCEiO2Zvcih2YXIgdj15LmVkZ2VzLnNsaWNlKCkseCxiPXYubGVuZ3RoLFQ9MDtUPGI7VCsrKXg9dltUXSx4LmlzSW50ZXJHcmFwaD90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoeCk6eC5zb3VyY2Uub3duZXIucmVtb3ZlKHgpO3ZhciBTPXRoaXMubm9kZXMuaW5kZXhPZih5KTtpZihTPT0tMSl0aHJvdyJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhIjt0aGlzLm5vZGVzLnNwbGljZShTLDEpfWVsc2UgaWYoZyBpbnN0YW5jZW9mIHUpe3ZhciB4PWc7aWYoeD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighKHguc291cmNlIT1udWxsJiZ4LnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2Uub3duZXIhPW51bGwmJngudGFyZ2V0Lm93bmVyIT1udWxsJiZ4LnNvdXJjZS5vd25lcj09dGhpcyYmeC50YXJnZXQub3duZXI9PXRoaXMpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhIjt2YXIgdz14LnNvdXJjZS5lZGdlcy5pbmRleE9mKHgpLEU9eC50YXJnZXQuZWRnZXMuaW5kZXhPZih4KTtpZighKHc+LTEmJkU+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt4LnNvdXJjZS5lZGdlcy5zcGxpY2UodywxKSx4LnRhcmdldCE9eC5zb3VyY2UmJngudGFyZ2V0LmVkZ2VzLnNwbGljZShFLDEpO3ZhciBTPXguc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZih4KTtpZihTPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhIjt4LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLnNwbGljZShTLDEpfX0scC5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgZz1pLk1BWF9WQUxVRSx5PWkuTUFYX1ZBTFVFLHYseCxiLFQ9dGhpcy5nZXROb2RlcygpLFM9VC5sZW5ndGgsdz0wO3c8Uzt3Kyspe3ZhciBFPVRbd107dj1FLmdldFRvcCgpLHg9RS5nZXRMZWZ0KCksZz52JiYoZz12KSx5PngmJih5PXgpfXJldHVybiBnPT1pLk1BWF9WQUxVRT9udWxsOihUWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP2I9VFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpiPXRoaXMubWFyZ2luLHRoaXMubGVmdD15LWIsdGhpcy50b3A9Zy1iLG5ldyBmKHRoaXMubGVmdCx0aGlzLnRvcCkpfSxwLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsVCxTLHcsRSxfLEM9dGhpcy5ub2RlcyxEPUMubGVuZ3RoLE89MDtPPEQ7TysrKXt2YXIgUj1DW09dO2cmJlIuY2hpbGQhPW51bGwmJlIudXBkYXRlQm91bmRzKCksVD1SLmdldExlZnQoKSxTPVIuZ2V0UmlnaHQoKSx3PVIuZ2V0VG9wKCksRT1SLmdldEJvdHRvbSgpLHk+VCYmKHk9VCksdjxTJiYodj1TKSx4PncmJih4PXcpLGI8RSYmKGI9RSl9dmFyIGs9bmV3IGgoeSx4LHYteSxiLXgpO3k9PWkuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLENbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/Xz1DWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0Ol89dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PWsueC1fLHRoaXMucmlnaHQ9ay54K2sud2lkdGgrXyx0aGlzLnRvcD1rLnktXyx0aGlzLmJvdHRvbT1rLnkray5oZWlnaHQrX30scC5jYWxjdWxhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsVCxTLHcsRSxfPWcubGVuZ3RoLEM9MDtDPF87QysrKXt2YXIgRD1nW0NdO1Q9RC5nZXRMZWZ0KCksUz1ELmdldFJpZ2h0KCksdz1ELmdldFRvcCgpLEU9RC5nZXRCb3R0b20oKSx5PlQmJih5PVQpLHY8UyYmKHY9UykseD53JiYoeD13KSxiPEUmJihiPUUpfXZhciBPPW5ldyBoKHkseCx2LXksYi14KTtyZXR1cm4gT30scC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSxwLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxwLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZz0wLHk9dGhpcy5ub2Rlcyx2PXkubGVuZ3RoLHg9MDt4PHY7eCsrKXt2YXIgYj15W3hdO2crPWIuY2FsY0VzdGltYXRlZFNpemUoKX1yZXR1cm4gZz09MD90aGlzLmVzdGltYXRlZFNpemU9YS5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU6dGhpcy5lc3RpbWF0ZWRTaXplPWcvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYodGhpcy5ub2Rlcy5sZW5ndGg9PTApe3RoaXMuaXNDb25uZWN0ZWQ9ITA7cmV0dXJufXZhciB5PW5ldyBkLHY9bmV3IFNldCx4PXRoaXMubm9kZXNbMF0sYixULFM9eC53aXRoQ2hpbGRyZW4oKTtmb3IoUy5mb3JFYWNoKGZ1bmN0aW9uKE8pe3kucHVzaChPKSx2LmFkZChPKX0pO3kubGVuZ3RoIT09MDspe3g9eS5zaGlmdCgpLGI9eC5nZXRFZGdlcygpO2Zvcih2YXIgdz1iLmxlbmd0aCxFPTA7RTx3O0UrKyl7dmFyIF89YltFXTtpZihUPV8uZ2V0T3RoZXJFbmRJbkdyYXBoKHgsdGhpcyksVCE9bnVsbCYmIXYuaGFzKFQpKXt2YXIgQz1ULndpdGhDaGlsZHJlbigpO0MuZm9yRWFjaChmdW5jdGlvbihPKXt5LnB1c2goTyksdi5hZGQoTyl9KX19fWlmKHRoaXMuaXNDb25uZWN0ZWQ9ITEsdi5zaXplPj10aGlzLm5vZGVzLmxlbmd0aCl7dmFyIEQ9MDt2LmZvckVhY2goZnVuY3Rpb24oTyl7Ty5vd25lcj09ZyYmRCsrfSksRD09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9cigxKTtmdW5jdGlvbiBhKHMpe249cig2KSx0aGlzLmxheW91dD1zLHRoaXMuZ3JhcGhzPVtdLHRoaXMuZWRnZXM9W119byhhLCJMR3JhcGhNYW5hZ2VyIiksYS5wcm90b3R5cGUuYWRkUm9vdD1mdW5jdGlvbigpe3ZhciBzPXRoaXMubGF5b3V0Lm5ld0dyYXBoKCksbD10aGlzLmxheW91dC5uZXdOb2RlKG51bGwpLHU9dGhpcy5hZGQocyxsKTtyZXR1cm4gdGhpcy5zZXRSb290R3JhcGgodSksdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLGwsdSxoLGYpe2lmKHU9PW51bGwmJmg9PW51bGwmJmY9PW51bGwpe2lmKHM9PW51bGwpdGhyb3ciR3JhcGggaXMgbnVsbCEiO2lmKGw9PW51bGwpdGhyb3ciUGFyZW50IG5vZGUgaXMgbnVsbCEiO2lmKHRoaXMuZ3JhcGhzLmluZGV4T2Yocyk+LTEpdGhyb3ciR3JhcGggYWxyZWFkeSBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKHRoaXMuZ3JhcGhzLnB1c2gocykscy5wYXJlbnQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBwYXJlbnQhIjtpZihsLmNoaWxkIT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgY2hpbGQhIjtyZXR1cm4gcy5wYXJlbnQ9bCxsLmNoaWxkPXMsc31lbHNle2Y9dSxoPWwsdT1zO3ZhciBkPWguZ2V0T3duZXIoKSxwPWYuZ2V0T3duZXIoKTtpZighKGQhPW51bGwmJmQuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlNvdXJjZSBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZighKHAhPW51bGwmJnAuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlRhcmdldCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZihkPT1wKXJldHVybiB1LmlzSW50ZXJHcmFwaD0hMSxkLmFkZCh1LGgsZik7aWYodS5pc0ludGVyR3JhcGg9ITAsdS5zb3VyY2U9aCx1LnRhcmdldD1mLHRoaXMuZWRnZXMuaW5kZXhPZih1KT4tMSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gaW50ZXItZ3JhcGggZWRnZSBsaXN0ISI7aWYodGhpcy5lZGdlcy5wdXNoKHUpLCEodS5zb3VyY2UhPW51bGwmJnUudGFyZ2V0IT1udWxsKSl0aHJvdyJFZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKHUuc291cmNlLmVkZ2VzLmluZGV4T2YodSk9PS0xJiZ1LnRhcmdldC5lZGdlcy5pbmRleE9mKHUpPT0tMSkpdGhyb3ciRWRnZSBhbHJlYWR5IGluIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGluY2lkZW5jeSBsaXN0ISI7cmV0dXJuIHUuc291cmNlLmVkZ2VzLnB1c2godSksdS50YXJnZXQuZWRnZXMucHVzaCh1KSx1fX0sYS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHMpe2lmKHMgaW5zdGFuY2VvZiBuKXt2YXIgbD1zO2lmKGwuZ2V0R3JhcGhNYW5hZ2VyKCkhPXRoaXMpdGhyb3ciR3JhcGggbm90IGluIHRoaXMgZ3JhcGggbWdyIjtpZighKGw9PXRoaXMucm9vdEdyYXBofHxsLnBhcmVudCE9bnVsbCYmbC5wYXJlbnQuZ3JhcGhNYW5hZ2VyPT10aGlzKSl0aHJvdyJJbnZhbGlkIHBhcmVudCBub2RlISI7dmFyIHU9W107dT11LmNvbmNhdChsLmdldEVkZ2VzKCkpO2Zvcih2YXIgaCxmPXUubGVuZ3RoLGQ9MDtkPGY7ZCsrKWg9dVtkXSxsLnJlbW92ZShoKTt2YXIgcD1bXTtwPXAuY29uY2F0KGwuZ2V0Tm9kZXMoKSk7dmFyIG07Zj1wLmxlbmd0aDtmb3IodmFyIGQ9MDtkPGY7ZCsrKW09cFtkXSxsLnJlbW92ZShtKTtsPT10aGlzLnJvb3RHcmFwaCYmdGhpcy5zZXRSb290R3JhcGgobnVsbCk7dmFyIGc9dGhpcy5ncmFwaHMuaW5kZXhPZihsKTt0aGlzLmdyYXBocy5zcGxpY2UoZywxKSxsLnBhcmVudD1udWxsfWVsc2UgaWYocyBpbnN0YW5jZW9mIGkpe2lmKGg9cyxoPT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCFoLmlzSW50ZXJHcmFwaCl0aHJvdyJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSEiO2lmKCEoaC5zb3VyY2UhPW51bGwmJmgudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShoLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpIT0tMSYmaC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSE9LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt2YXIgZz1oLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpO2lmKGguc291cmNlLmVkZ2VzLnNwbGljZShnLDEpLGc9aC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSxoLnRhcmdldC5lZGdlcy5zcGxpY2UoZywxKSwhKGguc291cmNlLm93bmVyIT1udWxsJiZoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKSE9bnVsbCkpdGhyb3ciRWRnZSBvd25lciBncmFwaCBvciBvd25lciBncmFwaCBtYW5hZ2VyIGlzIG51bGwhIjtpZihoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGgpPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIgZ3JhcGggbWFuYWdlcidzIGVkZ2UgbGlzdCEiO3ZhciBnPWguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk7aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGcsMSl9fSxhLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHMoITApfSxhLnByb3RvdHlwZS5nZXRHcmFwaHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaHN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxOb2Rlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPHU7aCsrKXM9cy5jb25jYXQobFtoXS5nZXROb2RlcygpKTt0aGlzLmFsbE5vZGVzPXN9cmV0dXJuIHRoaXMuYWxsTm9kZXN9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbEVkZ2VzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPW51bGx9LGEucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxFZGdlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPGwubGVuZ3RoO2grKylzPXMuY29uY2F0KGxbaF0uZ2V0RWRnZXMoKSk7cz1zLmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPXN9cmV0dXJuIHRoaXMuYWxsRWRnZXN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LGEucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKHMpe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1zfSxhLnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSxhLnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24ocyl7aWYocy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPXMscy5wYXJlbnQ9PW51bGwmJihzLnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LGEucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0sYS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24ocyxsKXtpZighKHMhPW51bGwmJmwhPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHM9PWwpcmV0dXJuITA7dmFyIHU9cy5nZXRPd25lcigpLGg7ZG97aWYoaD11LmdldFBhcmVudCgpLGg9PW51bGwpYnJlYWs7aWYoaD09bClyZXR1cm4hMDtpZih1PWguZ2V0T3duZXIoKSx1PT1udWxsKWJyZWFrfXdoaWxlKCEwKTt1PWwuZ2V0T3duZXIoKTtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1zKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBzLGwsdSxoLGYsZD10aGlzLmdldEFsbEVkZ2VzKCkscD1kLmxlbmd0aCxtPTA7bTxwO20rKyl7aWYocz1kW21dLGw9cy5zb3VyY2UsdT1zLnRhcmdldCxzLmxjYT1udWxsLHMuc291cmNlSW5MY2E9bCxzLnRhcmdldEluTGNhPXUsbD09dSl7cy5sY2E9bC5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihoPWwuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2ZvcihzLnRhcmdldEluTGNhPXUsZj11LmdldE93bmVyKCk7cy5sY2E9PW51bGw7KXtpZihmPT1oKXtzLmxjYT1mO2JyZWFrfWlmKGY9PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKHMubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO3MudGFyZ2V0SW5MY2E9Zi5nZXRQYXJlbnQoKSxmPXMudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihoPT10aGlzLnJvb3RHcmFwaClicmVhaztzLmxjYT09bnVsbCYmKHMuc291cmNlSW5MY2E9aC5nZXRQYXJlbnQoKSxoPXMuc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYocy5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24ocyxsKXtpZihzPT1sKXJldHVybiBzLmdldE93bmVyKCk7dmFyIHU9cy5nZXRPd25lcigpO2Rve2lmKHU9PW51bGwpYnJlYWs7dmFyIGg9bC5nZXRPd25lcigpO2Rve2lmKGg9PW51bGwpYnJlYWs7aWYoaD09dSlyZXR1cm4gaDtoPWguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7dT11LmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiB1fSxhLnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihzLGwpe3M9PW51bGwmJmw9PW51bGwmJihzPXRoaXMucm9vdEdyYXBoLGw9MSk7Zm9yKHZhciB1LGg9cy5nZXROb2RlcygpLGY9aC5sZW5ndGgsZD0wO2Q8ZjtkKyspdT1oW2RdLHUuaW5jbHVzaW9uVHJlZURlcHRoPWwsdS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyh1LmNoaWxkLGwrMSl9LGEucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbD1bXSx1PXRoaXMuZWRnZXMubGVuZ3RoLGg9MDtoPHU7aCsrKXM9dGhpcy5lZGdlc1toXSx0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKHMuc291cmNlLHMudGFyZ2V0KSYmbC5wdXNoKHMpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMucmVtb3ZlKGxbaF0pO3JldHVybiExfSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtmdW5jdGlvbiBpKCl7fW8oaSwiSUdlb21ldHJ5IiksaS5jYWxjU2VwYXJhdGlvbkFtb3VudD1mdW5jdGlvbihhLHMsbCx1KXtpZighYS5pbnRlcnNlY3RzKHMpKXRocm93ImFzc2VydCBmYWlsZWQiO3ZhciBoPW5ldyBBcnJheSgyKTt0aGlzLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzKGEscyxoKSxsWzBdPU1hdGgubWluKGEuZ2V0UmlnaHQoKSxzLmdldFJpZ2h0KCkpLU1hdGgubWF4KGEueCxzLngpLGxbMV09TWF0aC5taW4oYS5nZXRCb3R0b20oKSxzLmdldEJvdHRvbSgpKS1NYXRoLm1heChhLnkscy55KSxhLmdldFgoKTw9cy5nZXRYKCkmJmEuZ2V0UmlnaHQoKT49cy5nZXRSaWdodCgpP2xbMF0rPU1hdGgubWluKHMuZ2V0WCgpLWEuZ2V0WCgpLGEuZ2V0UmlnaHQoKS1zLmdldFJpZ2h0KCkpOnMuZ2V0WCgpPD1hLmdldFgoKSYmcy5nZXRSaWdodCgpPj1hLmdldFJpZ2h0KCkmJihsWzBdKz1NYXRoLm1pbihhLmdldFgoKS1zLmdldFgoKSxzLmdldFJpZ2h0KCktYS5nZXRSaWdodCgpKSksYS5nZXRZKCk8PXMuZ2V0WSgpJiZhLmdldEJvdHRvbSgpPj1zLmdldEJvdHRvbSgpP2xbMV0rPU1hdGgubWluKHMuZ2V0WSgpLWEuZ2V0WSgpLGEuZ2V0Qm90dG9tKCktcy5nZXRCb3R0b20oKSk6cy5nZXRZKCk8PWEuZ2V0WSgpJiZzLmdldEJvdHRvbSgpPj1hLmdldEJvdHRvbSgpJiYobFsxXSs9TWF0aC5taW4oYS5nZXRZKCktcy5nZXRZKCkscy5nZXRCb3R0b20oKS1hLmdldEJvdHRvbSgpKSk7dmFyIGY9TWF0aC5hYnMoKHMuZ2V0Q2VudGVyWSgpLWEuZ2V0Q2VudGVyWSgpKS8ocy5nZXRDZW50ZXJYKCktYS5nZXRDZW50ZXJYKCkpKTtzLmdldENlbnRlclkoKT09PWEuZ2V0Q2VudGVyWSgpJiZzLmdldENlbnRlclgoKT09PWEuZ2V0Q2VudGVyWCgpJiYoZj0xKTt2YXIgZD1mKmxbMF0scD1sWzFdL2Y7bFswXTxwP3A9bFswXTpkPWxbMV0sbFswXT0tMSpoWzBdKihwLzIrdSksbFsxXT0tMSpoWzFdKihkLzIrdSl9LGkuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXM9ZnVuY3Rpb24oYSxzLGwpe2EuZ2V0Q2VudGVyWCgpPHMuZ2V0Q2VudGVyWCgpP2xbMF09LTE6bFswXT0xLGEuZ2V0Q2VudGVyWSgpPHMuZ2V0Q2VudGVyWSgpP2xbMV09LTE6bFsxXT0xfSxpLmdldEludGVyc2VjdGlvbjI9ZnVuY3Rpb24oYSxzLGwpe3ZhciB1PWEuZ2V0Q2VudGVyWCgpLGg9YS5nZXRDZW50ZXJZKCksZj1zLmdldENlbnRlclgoKSxkPXMuZ2V0Q2VudGVyWSgpO2lmKGEuaW50ZXJzZWN0cyhzKSlyZXR1cm4gbFswXT11LGxbMV09aCxsWzJdPWYsbFszXT1kLCEwO3ZhciBwPWEuZ2V0WCgpLG09YS5nZXRZKCksZz1hLmdldFJpZ2h0KCkseT1hLmdldFgoKSx2PWEuZ2V0Qm90dG9tKCkseD1hLmdldFJpZ2h0KCksYj1hLmdldFdpZHRoSGFsZigpLFQ9YS5nZXRIZWlnaHRIYWxmKCksUz1zLmdldFgoKSx3PXMuZ2V0WSgpLEU9cy5nZXRSaWdodCgpLF89cy5nZXRYKCksQz1zLmdldEJvdHRvbSgpLEQ9cy5nZXRSaWdodCgpLE89cy5nZXRXaWR0aEhhbGYoKSxSPXMuZ2V0SGVpZ2h0SGFsZigpLGs9ITEsTD0hMTtpZih1PT09Zil7aWYoaD5kKXJldHVybiBsWzBdPXUsbFsxXT1tLGxbMl09ZixsWzNdPUMsITE7aWYoaDxkKXJldHVybiBsWzBdPXUsbFsxXT12LGxbMl09ZixsWzNdPXcsITF9ZWxzZSBpZihoPT09ZCl7aWYodT5mKXJldHVybiBsWzBdPXAsbFsxXT1oLGxbMl09RSxsWzNdPWQsITE7aWYodTxmKXJldHVybiBsWzBdPWcsbFsxXT1oLGxbMl09UyxsWzNdPWQsITF9ZWxzZXt2YXIgQT1hLmhlaWdodC9hLndpZHRoLEk9cy5oZWlnaHQvcy53aWR0aCxNPShkLWgpLyhmLXUpLFA9dm9pZCAwLEI9dm9pZCAwLEY9dm9pZCAwLHo9dm9pZCAwLCQ9dm9pZCAwLFU9dm9pZCAwO2lmKC1BPT09TT91PmY/KGxbMF09eSxsWzFdPXYsaz0hMCk6KGxbMF09ZyxsWzFdPW0saz0hMCk6QT09PU0mJih1PmY/KGxbMF09cCxsWzFdPW0saz0hMCk6KGxbMF09eCxsWzFdPXYsaz0hMCkpLC1JPT09TT9mPnU/KGxbMl09XyxsWzNdPUMsTD0hMCk6KGxbMl09RSxsWzNdPXcsTD0hMCk6ST09PU0mJihmPnU/KGxbMl09UyxsWzNdPXcsTD0hMCk6KGxbMl09RCxsWzNdPUMsTD0hMCkpLGsmJkwpcmV0dXJuITE7aWYodT5mP2g+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKEEsTSw0KSxCPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oSSxNLDIpKTooUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMyksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMSkpOmg+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMSksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMykpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQSxNLDIpLEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihJLE0sNCkpLCFrKXN3aXRjaChQKXtjYXNlIDE6ej1tLEY9dSstVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAyOkY9eCx6PWgrYipNLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAzOno9dixGPXUrVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSA0OkY9eSx6PWgrLWIqTSxsWzBdPUYsbFsxXT16O2JyZWFrfWlmKCFMKXN3aXRjaChCKXtjYXNlIDE6VT13LCQ9ZistUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAyOiQ9RCxVPWQrTypNLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAzOlU9QywkPWYrUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSA0OiQ9XyxVPWQrLU8qTSxsWzJdPSQsbFszXT1VO2JyZWFrfX1yZXR1cm4hMX0saS5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbihhLHMsbCl7cmV0dXJuIGE+cz9sOjErbCU0fSxpLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbihhLHMsbCx1KXtpZih1PT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoYSxzLGwpO3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PXZvaWQgMCxiPXZvaWQgMCxUPXZvaWQgMCxTPXZvaWQgMCx3PXZvaWQgMCxFPXZvaWQgMCxfPXZvaWQgMCxDPXZvaWQgMCxEPXZvaWQgMDtyZXR1cm4gVD1wLWYsdz1oLWQsXz1kKmYtaCpwLFM9di1nLEU9bS15LEM9eSpnLW0qdixEPVQqRS1TKncsRD09PTA/bnVsbDooeD0odypDLUUqXykvRCxiPShTKl8tVCpDKS9ELG5ldyBuKHgsYikpfSxpLmFuZ2xlT2ZWZWN0b3I9ZnVuY3Rpb24oYSxzLGwsdSl7dmFyIGg9dm9pZCAwO3JldHVybiBhIT09bD8oaD1NYXRoLmF0YW4oKHUtcykvKGwtYSkpLGw8YT9oKz1NYXRoLlBJOnU8cyYmKGgrPXRoaXMuVFdPX1BJKSk6dTxzP2g9dGhpcy5PTkVfQU5EX0hBTEZfUEk6aD10aGlzLkhBTEZfUEksaH0saS5kb0ludGVyc2VjdD1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD1hLngsZj1hLnksZD1zLngscD1zLnksbT1sLngsZz1sLnkseT11Lngsdj11LnkseD0oZC1oKSoodi1nKS0oeS1tKSoocC1mKTtpZih4PT09MClyZXR1cm4hMTt2YXIgYj0oKHYtZykqKHktaCkrKG0teSkqKHYtZikpL3gsVD0oKGYtcCkqKHktaCkrKGQtaCkqKHYtZikpL3g7cmV0dXJuIDA8YiYmYjwxJiYwPFQmJlQ8MX0saS5maW5kQ2lyY2xlTGluZUludGVyc2VjdGlvbnM9ZnVuY3Rpb24oYSxzLGwsdSxoLGYsZCl7dmFyIHA9KGwtYSkqKGwtYSkrKHUtcykqKHUtcyksbT0yKigoYS1oKSoobC1hKSsocy1mKSoodS1zKSksZz0oYS1oKSooYS1oKSsocy1mKSoocy1mKS1kKmQseT1tKm0tNCpwKmc7aWYoeT49MCl7dmFyIHY9KC1tK01hdGguc3FydChtKm0tNCpwKmcpKS8oMipwKSx4PSgtbS1NYXRoLnNxcnQobSptLTQqcCpnKSkvKDIqcCksYj1udWxsO3JldHVybiB2Pj0wJiZ2PD0xP1t2XTp4Pj0wJiZ4PD0xP1t4XTpifWVsc2UgcmV0dXJuIG51bGx9LGkuSEFMRl9QST0uNSpNYXRoLlBJLGkuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGkuVFdPX1BJPTIqTWF0aC5QSSxpLlRIUkVFX1BJPTMqTWF0aC5QSSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSU1hdGgiKSxuLnNpZ249ZnVuY3Rpb24oaSl7cmV0dXJuIGk+MD8xOmk8MD8tMTowfSxuLmZsb29yPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5jZWlsKGkpOk1hdGguZmxvb3IoaSl9LG4uY2VpbD1mdW5jdGlvbihpKXtyZXR1cm4gaTwwP01hdGguZmxvb3IoaSk6TWF0aC5jZWlsKGkpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSW50ZWdlciIpLG4uTUFYX1ZBTFVFPTIxNDc0ODM2NDcsbi5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGYsZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF07bS5lbnVtZXJhYmxlPW0uZW51bWVyYWJsZXx8ITEsbS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG0mJihtLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixtLmtleSxtKX19cmV0dXJuIG8oaCwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gZCYmaChmLnByb3RvdHlwZSxkKSxwJiZoKGYscCksZn19KCk7ZnVuY3Rpb24gaShoLGYpe2lmKCEoaCBpbnN0YW5jZW9mIGYpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9byhmdW5jdGlvbihmKXtyZXR1cm57dmFsdWU6ZixuZXh0Om51bGwscHJldjpudWxsfX0sIm5vZGVGcm9tIikscz1vKGZ1bmN0aW9uKGYsZCxwLG0pe3JldHVybiBmIT09bnVsbD9mLm5leHQ9ZDptLmhlYWQ9ZCxwIT09bnVsbD9wLnByZXY9ZDptLnRhaWw9ZCxkLnByZXY9ZixkLm5leHQ9cCxtLmxlbmd0aCsrLGR9LCJhZGQiKSxsPW8oZnVuY3Rpb24oZixkKXt2YXIgcD1mLnByZXYsbT1mLm5leHQ7cmV0dXJuIHAhPT1udWxsP3AubmV4dD1tOmQuaGVhZD1tLG0hPT1udWxsP20ucHJldj1wOmQudGFpbD1wLGYucHJldj1mLm5leHQ9bnVsbCxkLmxlbmd0aC0tLGZ9LCJfcmVtb3ZlIiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZil7dmFyIGQ9dGhpcztpKHRoaXMsaCksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxmPy5mb3JFYWNoKGZ1bmN0aW9uKHApe3JldHVybiBkLnB1c2gocCl9KX1yZXR1cm4gbyhoLCJMaW5rZWRMaXN0IiksbihoLFt7a2V5OiJzaXplIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSwic2l6ZSIpfSx7a2V5OiJpbnNlcnRCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsYShkKSxwLHRoaXMpfSwiaW5zZXJ0QmVmb3JlIil9LHtrZXk6Imluc2VydEFmdGVyIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocCxhKGQpLHAubmV4dCx0aGlzKX0sImluc2VydEFmdGVyIil9LHtrZXk6Imluc2VydE5vZGVCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsZCxwLHRoaXMpfSwiaW5zZXJ0Tm9kZUJlZm9yZSIpfSx7a2V5OiJpbnNlcnROb2RlQWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGQscC5uZXh0LHRoaXMpfSwiaW5zZXJ0Tm9kZUFmdGVyIil9LHtrZXk6InB1c2giLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIHModGhpcy50YWlsLGEoZCksbnVsbCx0aGlzKX0sInB1c2giKX0se2tleToidW5zaGlmdCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyhudWxsLGEoZCksdGhpcy5oZWFkLHRoaXMpfSwidW5zaGlmdCIpfSx7a2V5OiJyZW1vdmUiLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIGwoZCx0aGlzKX0sInJlbW92ZSIpfSx7a2V5OiJwb3AiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLnRhaWwsdGhpcykudmFsdWV9LCJwb3AiKX0se2tleToicG9wTm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKX0sInBvcE5vZGUiKX0se2tleToic2hpZnQiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcykudmFsdWV9LCJzaGlmdCIpfSx7a2V5OiJzaGlmdE5vZGUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcyl9LCJzaGlmdE5vZGUiKX0se2tleToiZ2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIHA9MSxtPXRoaXMuaGVhZDtwPGQ7KW09bS5uZXh0LHArKztyZXR1cm4gbS52YWx1ZX19LCJnZXRfb2JqZWN0X2F0Iil9LHtrZXk6InNldF9vYmplY3RfYXQiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIG09MSxnPXRoaXMuaGVhZDttPGQ7KWc9Zy5uZXh0LG0rKztnLnZhbHVlPXB9fSwic2V0X29iamVjdF9hdCIpfV0pLGh9KCk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsaT09bnVsbCYmYT09bnVsbCYmcz09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsPyh0aGlzLng9aSx0aGlzLnk9YSk6aS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZhPT1udWxsJiZzPT1udWxsJiYocz1pLHRoaXMueD1zLngsdGhpcy55PXMueSl9byhuLCJQb2ludCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGksYSxzKXtpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGw/KHM9aSx0aGlzLnNldExvY2F0aW9uKHMueCxzLnkpKTp0eXBlb2YgaT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmcz09bnVsbCYmKHBhcnNlSW50KGkpPT1pJiZwYXJzZUludChhKT09YT90aGlzLm1vdmUoaSxhKToodGhpcy54PU1hdGguZmxvb3IoaSsuNSksdGhpcy55PU1hdGguZmxvb3IoYSsuNSkpKX0sbi5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihpLGEpe3RoaXMueD1pLHRoaXMueT1hfSxuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oaSxhKXt0aGlzLngrPWksdGhpcy55Kz1hfSxuLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oaSl7aWYoaS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiKXt2YXIgYT1pO3JldHVybiB0aGlzLng9PWEueCYmdGhpcy55PT1hLnl9cmV0dXJuIHRoaXM9PWl9LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKCkuY29uc3RydWN0b3IubmFtZSsiW3g9Iit0aGlzLngrIix5PSIrdGhpcy55KyJdIn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyxsKXt0aGlzLng9MCx0aGlzLnk9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT1udWxsJiZhIT1udWxsJiZzIT1udWxsJiZsIT1udWxsJiYodGhpcy54PWksdGhpcy55PWEsdGhpcy53aWR0aD1zLHRoaXMuaGVpZ2h0PWwpfW8obiwiUmVjdGFuZ2xlRCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGkpe3RoaXMueD1pfSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSxuLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihpKXtyZXR1cm4hKHRoaXMuZ2V0UmlnaHQoKTxpLnh8fHRoaXMuZ2V0Qm90dG9tKCk8aS55fHxpLmdldFJpZ2h0KCk8dGhpcy54fHxpLmdldEJvdHRvbSgpPHRoaXMueSl9LG4ucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGgvMn0sbi5wcm90b3R5cGUuZ2V0TWluWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKX0sbi5wcm90b3R5cGUuZ2V0TWF4WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKSt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodC8yfSxuLnByb3RvdHlwZS5nZXRNaW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpfSxuLnByb3RvdHlwZS5nZXRNYXhZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpK3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5nZXRXaWR0aEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRIZWlnaHRIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0LzJ9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYX06ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmEuY29uc3RydWN0b3I9PT1TeW1ib2wmJmEhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhfTtmdW5jdGlvbiBpKCl7fW8oaSwiVW5pcXVlSURHZW5lcmV0b3IiKSxpLmxhc3RJRD0wLGkuY3JlYXRlSUQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNQcmltaXRpdmUoYSk/YTooYS51bmlxdWVJRCE9bnVsbHx8KGEudW5pcXVlSUQ9aS5nZXRTdHJpbmcoKSxpLmxhc3RJRCsrKSxhLnVuaXF1ZUlEKX0saS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGwmJihhPWkubGFzdElEKSwiT2JqZWN0IyIrYX0saS5pc1ByaW1pdGl2ZT1mdW5jdGlvbihhKXt2YXIgcz10eXBlb2YgYT4idSI/InVuZGVmaW5lZCI6bihhKTtyZXR1cm4gYT09bnVsbHx8cyE9Im9iamVjdCImJnMhPSJmdW5jdGlvbiJ9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4obSl7aWYoQXJyYXkuaXNBcnJheShtKSl7Zm9yKHZhciBnPTAseT1BcnJheShtLmxlbmd0aCk7ZzxtLmxlbmd0aDtnKyspeVtnXT1tW2ddO3JldHVybiB5fWVsc2UgcmV0dXJuIEFycmF5LmZyb20obSl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDApLGE9cig3KSxzPXIoMyksbD1yKDEpLHU9cig2KSxoPXIoNSksZj1yKDE3KSxkPXIoMjkpO2Z1bmN0aW9uIHAobSl7ZC5jYWxsKHRoaXMpLHRoaXMubGF5b3V0UXVhbGl0eT1pLlFVQUxJVFksdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWkuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWkuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9aS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcz1uZXcgTWFwLHRoaXMuZ3JhcGhNYW5hZ2VyPW5ldyBhKHRoaXMpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLmlzU3ViTGF5b3V0PSExLHRoaXMuaXNSZW1vdGVVc2U9ITEsbSE9bnVsbCYmKHRoaXMuaXNSZW1vdGVVc2U9bSl9byhwLCJMYXlvdXQiKSxwLlJBTkRPTV9TRUVEPTEscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSkscC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpfSxwLnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgbT1uZXcgYSh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9bSxtfSxwLnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHUobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHModGhpcy5ncmFwaE1hbmFnZXIsbSl9LHAucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBsKG51bGwsbnVsbCxtKX0scC5wcm90b3R5cGUuY2hlY2tMYXlvdXRTdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT09bnVsbHx8dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkubGVuZ3RoPT0wfHx0aGlzLmdyYXBoTWFuYWdlci5pbmNsdWRlc0ludmFsaWRFZGdlKCl9LHAucHJvdG90eXBlLnJ1bkxheW91dD1mdW5jdGlvbigpe3RoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLnRpbGluZ1ByZUxheW91dCYmdGhpcy50aWxpbmdQcmVMYXlvdXQoKSx0aGlzLmluaXRQYXJhbWV0ZXJzKCk7dmFyIG07cmV0dXJuIHRoaXMuY2hlY2tMYXlvdXRTdWNjZXNzKCk/bT0hMTptPXRoaXMubGF5b3V0KCksaS5BTklNQVRFPT09ImR1cmluZyI/ITE6KG0mJih0aGlzLmlzU3ViTGF5b3V0fHx0aGlzLmRvUG9zdExheW91dCgpKSx0aGlzLnRpbGluZ1Bvc3RMYXlvdXQmJnRoaXMudGlsaW5nUG9zdExheW91dCgpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMCxtKX0scC5wcm90b3R5cGUuZG9Qb3N0TGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pbmNyZW1lbnRhbHx8dGhpcy50cmFuc2Zvcm0oKSx0aGlzLnVwZGF0ZSgpfSxwLnByb3RvdHlwZS51cGRhdGUyPWZ1bmN0aW9uKCl7aWYodGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCkpLCF0aGlzLmlzUmVtb3RlVXNlKXtmb3IodmFyIG0sZz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLHk9MDt5PGcubGVuZ3RoO3krKyltPWdbeV07Zm9yKHZhciB2LHg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkseT0wO3k8eC5sZW5ndGg7eSsrKXY9eFt5XTt0aGlzLnVwZGF0ZSh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpfX0scC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy51cGRhdGUyKCk7ZWxzZSBpZihtIGluc3RhbmNlb2Ygcyl7dmFyIGc9bTtpZihnLmdldENoaWxkKCkhPW51bGwpZm9yKHZhciB5PWcuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHY9MDt2PHkubGVuZ3RoO3YrKyl1cGRhdGUoeVt2XSk7aWYoZy52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB4PWcudkdyYXBoT2JqZWN0O3gudXBkYXRlKGcpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiBsKXt2YXIgYj1tO2lmKGIudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgVD1iLnZHcmFwaE9iamVjdDtULnVwZGF0ZShiKX19ZWxzZSBpZihtIGluc3RhbmNlb2YgdSl7dmFyIFM9bTtpZihTLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHc9Uy52R3JhcGhPYmplY3Q7dy51cGRhdGUoUyl9fX0scC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt0aGlzLmlzU3ViTGF5b3V0fHwodGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmluY3JlbWVudGFsPWkuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMpLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYodGhpcy5hbmltYXRpb25PbkxheW91dD0hMSl9LHAucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMudHJhbnNmb3JtKG5ldyBoKDAsMCkpO2Vsc2V7dmFyIGc9bmV3IGYseT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO2lmKHkhPW51bGwpe2cuc2V0V29ybGRPcmdYKG0ueCksZy5zZXRXb3JsZE9yZ1kobS55KSxnLnNldERldmljZU9yZ1goeS54KSxnLnNldERldmljZU9yZ1koeS55KTtmb3IodmFyIHY9dGhpcy5nZXRBbGxOb2RlcygpLHgsYj0wO2I8di5sZW5ndGg7YisrKXg9dltiXSx4LnRyYW5zZm9ybShnKX19fSxwLnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHk9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSksdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKCEwKTtlbHNlIGZvcih2YXIgZyx5LHY9bS5nZXROb2RlcygpLHg9MDt4PHYubGVuZ3RoO3grKylnPXZbeF0seT1nLmdldENoaWxkKCkseT09bnVsbHx8eS5nZXROb2RlcygpLmxlbmd0aD09MD9nLnNjYXR0ZXIoKToodGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoeSksZy51cGRhdGVCb3VuZHMoKSl9LHAucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIG09W10sZz0hMCx5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLHY9ITAseD0wO3g8eS5sZW5ndGg7eCsrKXlbeF0uZ2V0Q2hpbGQoKSE9bnVsbCYmKHY9ITEpO2lmKCF2KXJldHVybiBtO3ZhciBiPW5ldyBTZXQsVD1bXSxTPW5ldyBNYXAsdz1bXTtmb3Iodz13LmNvbmNhdCh5KTt3Lmxlbmd0aD4wJiZnOyl7Zm9yKFQucHVzaCh3WzBdKTtULmxlbmd0aD4wJiZnOyl7dmFyIEU9VFswXTtULnNwbGljZSgwLDEpLGIuYWRkKEUpO2Zvcih2YXIgXz1FLmdldEVkZ2VzKCkseD0wO3g8Xy5sZW5ndGg7eCsrKXt2YXIgQz1fW3hdLmdldE90aGVyRW5kKEUpO2lmKFMuZ2V0KEUpIT1DKWlmKCFiLmhhcyhDKSlULnB1c2goQyksUy5zZXQoQyxFKTtlbHNle2c9ITE7YnJlYWt9fX1pZighZyltPVtdO2Vsc2V7dmFyIEQ9W10uY29uY2F0KG4oYikpO20ucHVzaChEKTtmb3IodmFyIHg9MDt4PEQubGVuZ3RoO3grKyl7dmFyIE89RFt4XSxSPXcuaW5kZXhPZihPKTtSPi0xJiZ3LnNwbGljZShSLDEpfWI9bmV3IFNldCxTPW5ldyBNYXB9fXJldHVybiBtfSxwLnByb3RvdHlwZS5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cz1mdW5jdGlvbihtKXtmb3IodmFyIGc9W10seT1tLnNvdXJjZSx2PXRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcihtLnNvdXJjZSxtLnRhcmdldCkseD0wO3g8bS5iZW5kcG9pbnRzLmxlbmd0aDt4Kyspe3ZhciBiPXRoaXMubmV3Tm9kZShudWxsKTtiLnNldFJlY3QobmV3IFBvaW50KDAsMCksbmV3IERpbWVuc2lvbigxLDEpKSx2LmFkZChiKTt2YXIgVD10aGlzLm5ld0VkZ2UobnVsbCk7dGhpcy5ncmFwaE1hbmFnZXIuYWRkKFQseSxiKSxnLmFkZChiKSx5PWJ9dmFyIFQ9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoVCx5LG0udGFyZ2V0KSx0aGlzLmVkZ2VUb0R1bW15Tm9kZXMuc2V0KG0sZyksbS5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUobSk6di5yZW1vdmUobSksZ30scC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzPWZ1bmN0aW9uKCl7dmFyIG09W107bT1tLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKSxtPVtdLmNvbmNhdChuKHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5rZXlzKCkpKS5jb25jYXQobSk7Zm9yKHZhciBnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ107aWYoeS5iZW5kcG9pbnRzLmxlbmd0aD4wKXtmb3IodmFyIHY9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldCh5KSx4PTA7eDx2Lmxlbmd0aDt4Kyspe3ZhciBiPXZbeF0sVD1uZXcgaChiLmdldENlbnRlclgoKSxiLmdldENlbnRlclkoKSksUz15LmJlbmRwb2ludHMuZ2V0KHgpO1MueD1ULngsUy55PVQueSxiLmdldE93bmVyKCkucmVtb3ZlKGIpfXRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5LHkuc291cmNlLHkudGFyZ2V0KX19fSxwLnRyYW5zZm9ybT1mdW5jdGlvbihtLGcseSx2KXtpZih5IT1udWxsJiZ2IT1udWxsKXt2YXIgeD1nO2lmKG08PTUwKXt2YXIgYj1nL3k7eC09KGctYikvNTAqKDUwLW0pfWVsc2V7dmFyIFQ9Zyp2O3grPShULWcpLzUwKihtLTUwKX1yZXR1cm4geH1lbHNle3ZhciBTLHc7cmV0dXJuIG08PTUwPyhTPTkqZy81MDAsdz1nLzEwKTooUz05KmcvNTAsdz0tOCpnKSxTKm0rd319LHAuZmluZENlbnRlck9mVHJlZT1mdW5jdGlvbihtKXt2YXIgZz1bXTtnPWcuY29uY2F0KG0pO3ZhciB5PVtdLHY9bmV3IE1hcCx4PSExLGI9bnVsbDsoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKTtmb3IodmFyIFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIFM9Z1tUXSx3PVMuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7di5zZXQoUyxTLmdldE5laWdoYm9yc0xpc3QoKS5zaXplKSx3PT0xJiZ5LnB1c2goUyl9dmFyIEU9W107Zm9yKEU9RS5jb25jYXQoeSk7IXg7KXt2YXIgXz1bXTtfPV8uY29uY2F0KEUpLEU9W107Zm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspe3ZhciBTPWdbVF0sQz1nLmluZGV4T2YoUyk7Qz49MCYmZy5zcGxpY2UoQywxKTt2YXIgRD1TLmdldE5laWdoYm9yc0xpc3QoKTtELmZvckVhY2goZnVuY3Rpb24oayl7aWYoeS5pbmRleE9mKGspPDApe3ZhciBMPXYuZ2V0KGspLEE9TC0xO0E9PTEmJkUucHVzaChrKSx2LnNldChrLEEpfX0pfXk9eS5jb25jYXQoRSksKGcubGVuZ3RoPT0xfHxnLmxlbmd0aD09MikmJih4PSEwLGI9Z1swXSl9cmV0dXJuIGJ9LHAucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihtKXt0aGlzLmdyYXBoTWFuYWdlcj1tfSx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiUmFuZG9tU2VlZCIpLG4uc2VlZD0xLG4ueD0wLG4ubmV4dERvdWJsZT1mdW5jdGlvbigpe3JldHVybiBuLng9TWF0aC5zaW4obi5zZWVkKyspKjFlNCxuLngtTWF0aC5mbG9vcihuLngpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDUpO2Z1bmN0aW9uIGkoYSxzKXt0aGlzLmx3b3JsZE9yZ1g9MCx0aGlzLmx3b3JsZE9yZ1k9MCx0aGlzLmxkZXZpY2VPcmdYPTAsdGhpcy5sZGV2aWNlT3JnWT0wLHRoaXMubHdvcmxkRXh0WD0xLHRoaXMubHdvcmxkRXh0WT0xLHRoaXMubGRldmljZUV4dFg9MSx0aGlzLmxkZXZpY2VFeHRZPTF9byhpLCJUcmFuc2Zvcm0iKSxpLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdYfSxpLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRPcmdYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1l9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WH0saS5wcm90b3R5cGUuc2V0V29ybGRFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkRXh0WD1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRZfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFk9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRZPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWH0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdYPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWX0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdZPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WH0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRYPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WX0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRZPWF9LGkucHJvdG90eXBlLnRyYW5zZm9ybVg9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubHdvcmxkRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sZGV2aWNlT3JnWCsoYS10aGlzLmx3b3JsZE9yZ1gpKnRoaXMubGRldmljZUV4dFgvbCksc30saS5wcm90b3R5cGUudHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdZKyhhLXRoaXMubHdvcmxkT3JnWSkqdGhpcy5sZGV2aWNlRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdYKyhhLXRoaXMubGRldmljZU9yZ1gpKnRoaXMubHdvcmxkRXh0WC9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WTtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdZKyhhLXRoaXMubGRldmljZU9yZ1kpKnRoaXMubHdvcmxkRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9bmV3IG4odGhpcy5pbnZlcnNlVHJhbnNmb3JtWChhLngpLHRoaXMuaW52ZXJzZVRyYW5zZm9ybVkoYS55KSk7cmV0dXJuIHN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZCl7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciBwPTAsbT1BcnJheShkLmxlbmd0aCk7cDxkLmxlbmd0aDtwKyspbVtwXT1kW3BdO3JldHVybiBtfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZCl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDE1KSxhPXIoNCkscz1yKDApLGw9cig4KSx1PXIoOSk7ZnVuY3Rpb24gaCgpe2kuY2FsbCh0aGlzKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249YS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLmdyYXZpdHlDb25zdGFudD1hLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGU9MyphLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAwLHRoaXMuY29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm1heEl0ZXJhdGlvbnM9YS5NQVhfSVRFUkFUSU9OU31vKGgsIkZETGF5b3V0IiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIGkpaFtmXT1pW2ZdO2gucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy50b3RhbEl0ZXJhdGlvbnM9MCx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wLHRoaXMudXNlRlJHcmlkVmFyaWFudD1hLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTix0aGlzLmdyaWQ9W119LGgucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHAsbSxnLHksdix4LGI9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLFQ9MDtUPGIubGVuZ3RoO1QrKylkPWJbVF0scD1kLmlkZWFsTGVuZ3RoLGQuaXNJbnRlckdyYXBoJiYoZz1kLmdldFNvdXJjZSgpLHk9ZC5nZXRUYXJnZXQoKSx2PWQuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCkseD1kLmdldFRhcmdldEluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiYmKGQuaWRlYWxMZW5ndGgrPXYreC0yKnMuU0lNUExFX05PREVfU0laRSksbT1kLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLGQuaWRlYWxMZW5ndGgrPXAqYS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SKihnLmdldEluY2x1c2lvblRyZWVEZXB0aCgpK3kuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMiptKSl9LGgucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oZC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKGEuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KGQ+YS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KGEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLWEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKmEuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZD10aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUqdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCx0aGlzLnJlcHVsc2lvblJhbmdlPXRoaXMuY2FsY1JlcHVsc2lvblJhbmdlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy5nZXRBbGxFZGdlcygpLHAsbT0wO208ZC5sZW5ndGg7bSsrKXA9ZFttXSx0aGlzLmNhbGNTcHJpbmdGb3JjZShwLHAuaWRlYWxMZW5ndGgpfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2VzPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLHA9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLG0sZyx5LHYseD10aGlzLmdldEFsbE5vZGVzKCksYjtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJmQmJnRoaXMudXBkYXRlR3JpZCgpLGI9bmV3IFNldCxtPTA7bTx4Lmxlbmd0aDttKyspeT14W21dLHRoaXMuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlKHksYixkLHApLGIuYWRkKHkpO2Vsc2UgZm9yKG09MDttPHgubGVuZ3RoO20rKylmb3IoeT14W21dLGc9bSsxO2c8eC5sZW5ndGg7ZysrKXY9eFtnXSx5LmdldE93bmVyKCk9PXYuZ2V0T3duZXIoKSYmdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoeSx2KX0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UoZCl9LGgucHJvdG90eXBlLm1vdmVOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbE5vZGVzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHAubW92ZSgpfSxoLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2U9ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmdldFNvdXJjZSgpLGc9ZC5nZXRUYXJnZXQoKSx5LHYseCxiO2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJm0uZ2V0Q2hpbGQoKT09bnVsbCYmZy5nZXRDaGlsZCgpPT1udWxsKWQudXBkYXRlTGVuZ3RoU2ltcGxlKCk7ZWxzZSBpZihkLnVwZGF0ZUxlbmd0aCgpLGQuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KXJldHVybjt5PWQuZ2V0TGVuZ3RoKCkseSE9MCYmKHY9ZC5lZGdlRWxhc3RpY2l0eSooeS1wKSx4PXYqKGQubGVuZ3RoWC95KSxiPXYqKGQubGVuZ3RoWS95KSxtLnNwcmluZ0ZvcmNlWCs9eCxtLnNwcmluZ0ZvcmNlWSs9YixnLnNwcmluZ0ZvcmNlWC09eCxnLnNwcmluZ0ZvcmNlWS09Yil9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0UmVjdCgpLGc9cC5nZXRSZWN0KCkseT1uZXcgQXJyYXkoMiksdj1uZXcgQXJyYXkoNCkseCxiLFQsUyx3LEUsXztpZihtLmludGVyc2VjdHMoZykpe2wuY2FsY1NlcGFyYXRpb25BbW91bnQobSxnLHksYS5ERUZBVUxUX0VER0VfTEVOR1RILzIpLEU9Mip5WzBdLF89Mip5WzFdO3ZhciBDPWQubm9PZkNoaWxkcmVuKnAubm9PZkNoaWxkcmVuLyhkLm5vT2ZDaGlsZHJlbitwLm5vT2ZDaGlsZHJlbik7ZC5yZXB1bHNpb25Gb3JjZVgtPUMqRSxkLnJlcHVsc2lvbkZvcmNlWS09QypfLHAucmVwdWxzaW9uRm9yY2VYKz1DKkUscC5yZXB1bHNpb25Gb3JjZVkrPUMqX31lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJmQuZ2V0Q2hpbGQoKT09bnVsbCYmcC5nZXRDaGlsZCgpPT1udWxsPyh4PWcuZ2V0Q2VudGVyWCgpLW0uZ2V0Q2VudGVyWCgpLGI9Zy5nZXRDZW50ZXJZKCktbS5nZXRDZW50ZXJZKCkpOihsLmdldEludGVyc2VjdGlvbihtLGcsdikseD12WzJdLXZbMF0sYj12WzNdLXZbMV0pLE1hdGguYWJzKHgpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoeD11LnNpZ24oeCkqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKGIpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoYj11LnNpZ24oYikqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLFQ9eCp4K2IqYixTPU1hdGguc3FydChUKSx3PShkLm5vZGVSZXB1bHNpb24vMitwLm5vZGVSZXB1bHNpb24vMikqZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vVCxFPXcqeC9TLF89dypiL1MsZC5yZXB1bHNpb25Gb3JjZVgtPUUsZC5yZXB1bHNpb25Gb3JjZVktPV8scC5yZXB1bHNpb25Gb3JjZVgrPUUscC5yZXB1bHNpb25Gb3JjZVkrPV99LGgucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oZCl7dmFyIHAsbSxnLHksdix4LGIsVDtwPWQuZ2V0T3duZXIoKSxtPShwLmdldFJpZ2h0KCkrcC5nZXRMZWZ0KCkpLzIsZz0ocC5nZXRUb3AoKStwLmdldEJvdHRvbSgpKS8yLHk9ZC5nZXRDZW50ZXJYKCktbSx2PWQuZ2V0Q2VudGVyWSgpLWcseD1NYXRoLmFicyh5KStkLmdldFdpZHRoKCkvMixiPU1hdGguYWJzKHYpK2QuZ2V0SGVpZ2h0KCkvMixkLmdldE93bmVyKCk9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8oVD1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwoeD5UfHxiPlQpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSxkLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCp2KSk6KFQ9cC5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciwoeD5UfHxiPlQpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCkpfSxoLnByb3RvdHlwZS5pc0NvbnZlcmdlZD1mdW5jdGlvbigpe3ZhciBkLHA9ITE7cmV0dXJuIHRoaXMudG90YWxJdGVyYXRpb25zPnRoaXMubWF4SXRlcmF0aW9ucy8zJiYocD1NYXRoLmFicyh0aGlzLnRvdGFsRGlzcGxhY2VtZW50LXRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQpPDIpLGQ9dGhpcy50b3RhbERpc3BsYWNlbWVudDx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9dGhpcy50b3RhbERpc3BsYWNlbWVudCxkfHxwfSxoLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJiF0aGlzLmlzU3ViTGF5b3V0JiYodGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9PXRoaXMuYW5pbWF0aW9uUGVyaW9kPyh0aGlzLnVwZGF0ZSgpLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTApOnRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zKyspfSxoLnByb3RvdHlwZS5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLG09MDttPHAubGVuZ3RoO20rKylkPXBbbV0sZC5ub09mQ2hpbGRyZW49ZC5nZXROb09mQ2hpbGRyZW4oKX0saC5wcm90b3R5cGUuY2FsY0dyaWQ9ZnVuY3Rpb24oZCl7dmFyIHA9MCxtPTA7cD1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLG09cGFyc2VJbnQoTWF0aC5jZWlsKChkLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGc9bmV3IEFycmF5KHApLHk9MDt5PHA7eSsrKWdbeV09bmV3IEFycmF5KG0pO2Zvcih2YXIgeT0wO3k8cDt5KyspZm9yKHZhciB2PTA7djxtO3YrKylnW3ldW3ZdPW5ldyBBcnJheTtyZXR1cm4gZ30saC5wcm90b3R5cGUuYWRkTm9kZVRvR3JpZD1mdW5jdGlvbihkLHAsbSl7dmFyIGc9MCx5PTAsdj0wLHg9MDtnPXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLngtcCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHk9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkud2lkdGgrZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSksdj1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx4PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLmhlaWdodCtkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGI9ZztiPD15O2IrKylmb3IodmFyIFQ9djtUPD14O1QrKyl0aGlzLmdyaWRbYl1bVF0ucHVzaChkKSxkLnNldEdyaWRDb29yZGluYXRlcyhnLHksdix4KX0saC5wcm90b3R5cGUudXBkYXRlR3JpZD1mdW5jdGlvbigpe3ZhciBkLHAsbT10aGlzLmdldEFsbE5vZGVzKCk7Zm9yKHRoaXMuZ3JpZD10aGlzLmNhbGNHcmlkKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSksZD0wO2Q8bS5sZW5ndGg7ZCsrKXA9bVtkXSx0aGlzLmFkZE5vZGVUb0dyaWQocCx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0TGVmdCgpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSl9LGgucHJvdG90eXBlLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZT1mdW5jdGlvbihkLHAsbSxnKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVhLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZtfHxnKXt2YXIgeT1uZXcgU2V0O2Quc3Vycm91bmRpbmc9bmV3IEFycmF5O2Zvcih2YXIgdix4PXRoaXMuZ3JpZCxiPWQuc3RhcnRYLTE7YjxkLmZpbmlzaFgrMjtiKyspZm9yKHZhciBUPWQuc3RhcnRZLTE7VDxkLmZpbmlzaFkrMjtUKyspaWYoIShiPDB8fFQ8MHx8Yj49eC5sZW5ndGh8fFQ+PXhbMF0ubGVuZ3RoKSl7Zm9yKHZhciBTPTA7Uzx4W2JdW1RdLmxlbmd0aDtTKyspaWYodj14W2JdW1RdW1NdLCEoZC5nZXRPd25lcigpIT12LmdldE93bmVyKCl8fGQ9PXYpJiYhcC5oYXModikmJiF5Lmhhcyh2KSl7dmFyIHc9TWF0aC5hYnMoZC5nZXRDZW50ZXJYKCktdi5nZXRDZW50ZXJYKCkpLShkLmdldFdpZHRoKCkvMit2LmdldFdpZHRoKCkvMiksRT1NYXRoLmFicyhkLmdldENlbnRlclkoKS12LmdldENlbnRlclkoKSktKGQuZ2V0SGVpZ2h0KCkvMit2LmdldEhlaWdodCgpLzIpO3c8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJkU8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnkuYWRkKHYpfX1kLnN1cnJvdW5kaW5nPVtdLmNvbmNhdChuKHkpKX1mb3IoYj0wO2I8ZC5zdXJyb3VuZGluZy5sZW5ndGg7YisrKXRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKGQsZC5zdXJyb3VuZGluZ1tiXSl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAwfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEpLGk9cig0KTtmdW5jdGlvbiBhKGwsdSxoKXtuLmNhbGwodGhpcyxsLHUsaCksdGhpcy5pZGVhbExlbmd0aD1pLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy5lZGdlRWxhc3RpY2l0eT1pLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIfW8oYSwiRkRMYXlvdXRFZGdlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIG4pYVtzXT1uW3NdO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMyksaT1yKDQpO2Z1bmN0aW9uIGEobCx1LGgsZil7bi5jYWxsKHRoaXMsbCx1LGgsZiksdGhpcy5ub2RlUmVwdWxzaW9uPWkuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wLHRoaXMuc3RhcnRYPTAsdGhpcy5maW5pc2hYPTAsdGhpcy5zdGFydFk9MCx0aGlzLmZpbmlzaFk9MCx0aGlzLnN1cnJvdW5kaW5nPVtdfW8oYSwiRkRMYXlvdXROb2RlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIG4pYVtzXT1uW3NdO2EucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihsLHUsaCxmKXt0aGlzLnN0YXJ0WD1sLHRoaXMuZmluaXNoWD11LHRoaXMuc3RhcnRZPWgsdGhpcy5maW5pc2hZPWZ9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXt0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT09bnVsbCYmYSE9PW51bGwmJih0aGlzLmhlaWdodD1hLHRoaXMud2lkdGg9aSl9byhuLCJEaW1lbnNpb25EIiksbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5tYXA9e30sdGhpcy5rZXlzPVtdfW8oaSwiSGFzaE1hcCIpLGkucHJvdG90eXBlLnB1dD1mdW5jdGlvbihhLHMpe3ZhciBsPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhsKXx8KHRoaXMubWFwW2xdPXMsdGhpcy5rZXlzLnB1c2goYSkpfSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3JldHVybiB0aGlzLm1hcFthXSE9bnVsbH0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW3NdfSxpLnByb3RvdHlwZS5rZXlTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5zZXQ9e319byhpLCJIYXNoU2V0IiksaS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhzKXx8KHRoaXMuc2V0W3NdPWEpfSxpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuc2V0W24uY3JlYXRlSUQoYSldfSxpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRbbi5jcmVhdGVJRChhKV09PWF9LGkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1PYmplY3Qua2V5cyh0aGlzLnNldCksbD1zLmxlbmd0aCx1PTA7dTxsO3UrKylhLnB1c2godGhpcy5zZXRbc1t1XV0pfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbihhKXtmb3IodmFyIHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciB1PWFbbF07dGhpcy5hZGQodSl9fSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiTWF0cml4Iiksbi5tdWx0TWF0PWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKyl7c1tsXT1bXTtmb3IodmFyIHU9MDt1PGFbMF0ubGVuZ3RoO3UrKyl7c1tsXVt1XT0wO2Zvcih2YXIgaD0wO2g8aVswXS5sZW5ndGg7aCsrKXNbbF1bdV0rPWlbbF1baF0qYVtoXVt1XX19cmV0dXJuIHN9LG4udHJhbnNwb3NlPWZ1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXSxzPTA7czxpWzBdLmxlbmd0aDtzKyspe2Fbc109W107Zm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspYVtzXVtsXT1pW2xdW3NdfXJldHVybiBhfSxuLm11bHRDb25zPWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2xdPWlbbF0qYTtyZXR1cm4gc30sbi5taW51c09wPWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2xdPWlbbF0tYVtsXTtyZXR1cm4gc30sbi5kb3RQcm9kdWN0PWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPTAsbD0wO2w8aS5sZW5ndGg7bCsrKXMrPWlbbF0qYVtsXTtyZXR1cm4gc30sbi5tYWc9ZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRvdFByb2R1Y3QoaSxpKSl9LG4ubm9ybWFsaXplPWZ1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXSxzPXRoaXMubWFnKGkpLGw9MDtsPGkubGVuZ3RoO2wrKylhW2xdPWlbbF0vcztyZXR1cm4gYX0sbi5tdWx0R2FtbWE9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9MCxsPTA7bDxpLmxlbmd0aDtsKyspcys9aVtsXTtzKj0tMS9pLmxlbmd0aDtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylhW3VdPXMraVt1XTtyZXR1cm4gYX0sbi5tdWx0TD1mdW5jdGlvbihpLGEscyl7Zm9yKHZhciBsPVtdLHU9W10saD1bXSxmPTA7ZjxhWzBdLmxlbmd0aDtmKyspe2Zvcih2YXIgZD0wLHA9MDtwPGEubGVuZ3RoO3ArKylkKz0tLjUqYVtwXVtmXSppW3BdO3VbZl09ZH1mb3IodmFyIG09MDttPHMubGVuZ3RoO20rKyl7Zm9yKHZhciBnPTAseT0wO3k8cy5sZW5ndGg7eSsrKWcrPXNbbV1beV0qdVt5XTtoW21dPWd9Zm9yKHZhciB2PTA7djxhLmxlbmd0aDt2Kyspe2Zvcih2YXIgeD0wLGI9MDtiPGFbMF0ubGVuZ3RoO2IrKyl4Kz1hW3ZdW2JdKmhbYl07bFt2XT14fXJldHVybiBsfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGwodSxoKXtmb3IodmFyIGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGQua2V5LGQpfX1yZXR1cm4gbyhsLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24odSxoLGYpe3JldHVybiBoJiZsKHUucHJvdG90eXBlLGgpLGYmJmwodSxmKSx1fX0oKTtmdW5jdGlvbiBpKGwsdSl7aWYoIShsIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1yKDExKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2kodGhpcyxsKSwoaCE9PW51bGx8fGghPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIGY9dm9pZCAwO3UgaW5zdGFuY2VvZiBhP2Y9dS5zaXplKCk6Zj11Lmxlbmd0aCx0aGlzLl9xdWlja3NvcnQodSwwLGYtMSl9cmV0dXJuIG8obCwiUXVpY2tzb3J0IiksbihsLFt7a2V5OiJfcXVpY2tzb3J0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtpZihmPGQpe3ZhciBwPXRoaXMuX3BhcnRpdGlvbihoLGYsZCk7dGhpcy5fcXVpY2tzb3J0KGgsZixwKSx0aGlzLl9xdWlja3NvcnQoaCxwKzEsZCl9fSwiX3F1aWNrc29ydCIpfSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtmb3IodmFyIHA9dGhpcy5fZ2V0KGgsZiksbT1mLGc9ZDs7KXtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHAsdGhpcy5fZ2V0KGgsZykpOylnLS07Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoaCxtKSxwKTspbSsrO2lmKG08Zyl0aGlzLl9zd2FwKGgsbSxnKSxtKyssZy0tO2Vsc2UgcmV0dXJuIGd9fSwiX3BhcnRpdGlvbiIpfSx7a2V5OiJfZ2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZil7cmV0dXJuIGggaW5zdGFuY2VvZiBhP2guZ2V0X29iamVjdF9hdChmKTpoW2ZdfSwiX2dldCIpfSx7a2V5OiJfc2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtoIGluc3RhbmNlb2YgYT9oLnNldF9vYmplY3RfYXQoZixkKTpoW2ZdPWR9LCJfc2V0Iil9LHtrZXk6Il9zd2FwIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXt2YXIgcD10aGlzLl9nZXQoaCxmKTt0aGlzLl9zZXQoaCxmLHRoaXMuX2dldChoLGQpKSx0aGlzLl9zZXQoaCxkLHApfSwiX3N3YXAiKX0se2tleToiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gZj5ofSwiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iKX1dKSxsfSgpO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJTVkQiKSxuLnN2ZD1mdW5jdGlvbihpKXt0aGlzLlU9bnVsbCx0aGlzLlY9bnVsbCx0aGlzLnM9bnVsbCx0aGlzLm09MCx0aGlzLm49MCx0aGlzLm09aS5sZW5ndGgsdGhpcy5uPWlbMF0ubGVuZ3RoO3ZhciBhPU1hdGgubWluKHRoaXMubSx0aGlzLm4pO3RoaXMucz1mdW5jdGlvbihidCl7Zm9yKHZhciB1dD1bXTtidC0tID4wOyl1dC5wdXNoKDApO3JldHVybiB1dH0oTWF0aC5taW4odGhpcy5tKzEsdGhpcy5uKSksdGhpcy5VPWZ1bmN0aW9uKGJ0KXt2YXIgdXQ9byhmdW5jdGlvbiBTdChmdCl7aWYoZnQubGVuZ3RoPT0wKXJldHVybiAwO2Zvcih2YXIgdnQ9W10sbnQ9MDtudDxmdFswXTtudCsrKXZ0LnB1c2goU3QoZnQuc2xpY2UoMSkpKTtyZXR1cm4gdnR9LCJhbGxvY2F0ZSIpO3JldHVybiB1dChidCl9KFt0aGlzLm0sYV0pLHRoaXMuVj1mdW5jdGlvbihidCl7dmFyIHV0PW8oZnVuY3Rpb24gU3QoZnQpe2lmKGZ0Lmxlbmd0aD09MClyZXR1cm4gMDtmb3IodmFyIHZ0PVtdLG50PTA7bnQ8ZnRbMF07bnQrKyl2dC5wdXNoKFN0KGZ0LnNsaWNlKDEpKSk7cmV0dXJuIHZ0fSwiYWxsb2NhdGUiKTtyZXR1cm4gdXQoYnQpfShbdGhpcy5uLHRoaXMubl0pO2Zvcih2YXIgcz1mdW5jdGlvbihidCl7Zm9yKHZhciB1dD1bXTtidC0tID4wOyl1dC5wdXNoKDApO3JldHVybiB1dH0odGhpcy5uKSxsPWZ1bmN0aW9uKGJ0KXtmb3IodmFyIHV0PVtdO2J0LS0gPjA7KXV0LnB1c2goMCk7cmV0dXJuIHV0fSh0aGlzLm0pLHU9ITAsaD0hMCxmPU1hdGgubWluKHRoaXMubS0xLHRoaXMubiksZD1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMubi0yLHRoaXMubSkpLHA9MDtwPE1hdGgubWF4KGYsZCk7cCsrKXtpZihwPGYpe3RoaXMuc1twXT0wO2Zvcih2YXIgbT1wO208dGhpcy5tO20rKyl0aGlzLnNbcF09bi5oeXBvdCh0aGlzLnNbcF0saVttXVtwXSk7aWYodGhpcy5zW3BdIT09MCl7aVtwXVtwXTwwJiYodGhpcy5zW3BdPS10aGlzLnNbcF0pO2Zvcih2YXIgZz1wO2c8dGhpcy5tO2crKylpW2ddW3BdLz10aGlzLnNbcF07aVtwXVtwXSs9MX10aGlzLnNbcF09LXRoaXMuc1twXX1mb3IodmFyIHk9cCsxO3k8dGhpcy5uO3krKyl7aWYoZnVuY3Rpb24oYnQsdXQpe3JldHVybiBidCYmdXR9KHA8Zix0aGlzLnNbcF0hPT0wKSl7Zm9yKHZhciB2PTAseD1wO3g8dGhpcy5tO3grKyl2Kz1pW3hdW3BdKmlbeF1beV07dj0tdi9pW3BdW3BdO2Zvcih2YXIgYj1wO2I8dGhpcy5tO2IrKylpW2JdW3ldKz12KmlbYl1bcF19c1t5XT1pW3BdW3ldfWlmKGZ1bmN0aW9uKGJ0LHV0KXtyZXR1cm4gYnQmJnV0fSh1LHA8ZikpZm9yKHZhciBUPXA7VDx0aGlzLm07VCsrKXRoaXMuVVtUXVtwXT1pW1RdW3BdO2lmKHA8ZCl7c1twXT0wO2Zvcih2YXIgUz1wKzE7Uzx0aGlzLm47UysrKXNbcF09bi5oeXBvdChzW3BdLHNbU10pO2lmKHNbcF0hPT0wKXtzW3ArMV08MCYmKHNbcF09LXNbcF0pO2Zvcih2YXIgdz1wKzE7dzx0aGlzLm47dysrKXNbd10vPXNbcF07c1twKzFdKz0xfWlmKHNbcF09LXNbcF0sZnVuY3Rpb24oYnQsdXQpe3JldHVybiBidCYmdXR9KHArMTx0aGlzLm0sc1twXSE9PTApKXtmb3IodmFyIEU9cCsxO0U8dGhpcy5tO0UrKylsW0VdPTA7Zm9yKHZhciBfPXArMTtfPHRoaXMubjtfKyspZm9yKHZhciBDPXArMTtDPHRoaXMubTtDKyspbFtDXSs9c1tfXSppW0NdW19dO2Zvcih2YXIgRD1wKzE7RDx0aGlzLm47RCsrKWZvcih2YXIgTz0tc1tEXS9zW3ArMV0sUj1wKzE7Ujx0aGlzLm07UisrKWlbUl1bRF0rPU8qbFtSXX1pZihoKWZvcih2YXIgaz1wKzE7azx0aGlzLm47aysrKXRoaXMuVltrXVtwXT1zW2tdfX12YXIgTD1NYXRoLm1pbih0aGlzLm4sdGhpcy5tKzEpO2lmKGY8dGhpcy5uJiYodGhpcy5zW2ZdPWlbZl1bZl0pLHRoaXMubTxMJiYodGhpcy5zW0wtMV09MCksZCsxPEwmJihzW2RdPWlbZF1bTC0xXSksc1tMLTFdPTAsdSl7Zm9yKHZhciBBPWY7QTxhO0ErKyl7Zm9yKHZhciBJPTA7STx0aGlzLm07SSsrKXRoaXMuVVtJXVtBXT0wO3RoaXMuVVtBXVtBXT0xfWZvcih2YXIgTT1mLTE7TT49MDtNLS0paWYodGhpcy5zW01dIT09MCl7Zm9yKHZhciBQPU0rMTtQPGE7UCsrKXtmb3IodmFyIEI9MCxGPU07Rjx0aGlzLm07RisrKUIrPXRoaXMuVVtGXVtNXSp0aGlzLlVbRl1bUF07Qj0tQi90aGlzLlVbTV1bTV07Zm9yKHZhciB6PU07ejx0aGlzLm07eisrKXRoaXMuVVt6XVtQXSs9Qip0aGlzLlVbel1bTV19Zm9yKHZhciAkPU07JDx0aGlzLm07JCsrKXRoaXMuVVskXVtNXT0tdGhpcy5VWyRdW01dO3RoaXMuVVtNXVtNXT0xK3RoaXMuVVtNXVtNXTtmb3IodmFyIFU9MDtVPE0tMTtVKyspdGhpcy5VW1VdW01dPTB9ZWxzZXtmb3IodmFyIEs9MDtLPHRoaXMubTtLKyspdGhpcy5VW0tdW01dPTA7dGhpcy5VW01dW01dPTF9fWlmKGgpZm9yKHZhciBlZT10aGlzLm4tMTtlZT49MDtlZS0tKXtpZihmdW5jdGlvbihidCx1dCl7cmV0dXJuIGJ0JiZ1dH0oZWU8ZCxzW2VlXSE9PTApKWZvcih2YXIgWT1lZSsxO1k8YTtZKyspe2Zvcih2YXIgY2U9MCxaPWVlKzE7Wjx0aGlzLm47WisrKWNlKz10aGlzLlZbWl1bZWVdKnRoaXMuVltaXVtZXTtjZT0tY2UvdGhpcy5WW2VlKzFdW2VlXTtmb3IodmFyIHVlPWVlKzE7dWU8dGhpcy5uO3VlKyspdGhpcy5WW3VlXVtZXSs9Y2UqdGhpcy5WW3VlXVtlZV19Zm9yKHZhciBRPTA7UTx0aGlzLm47USsrKXRoaXMuVltRXVtlZV09MDt0aGlzLlZbZWVdW2VlXT0xfWZvcih2YXIgaj1MLTEsbmU9MCx0ZT1NYXRoLnBvdygyLC01MiksaGU9TWF0aC5wb3coMiwtOTY2KTtMPjA7KXt2YXIgbGU9dm9pZCAwLEo9dm9pZCAwO2ZvcihsZT1MLTI7bGU+PS0xJiZsZSE9PS0xO2xlLS0paWYoTWF0aC5hYnMoc1tsZV0pPD1oZSt0ZSooTWF0aC5hYnModGhpcy5zW2xlXSkrTWF0aC5hYnModGhpcy5zW2xlKzFdKSkpe3NbbGVdPTA7YnJlYWt9aWYobGU9PT1MLTIpSj00O2Vsc2V7dmFyIFNlPXZvaWQgMDtmb3IoU2U9TC0xO1NlPj1sZSYmU2UhPT1sZTtTZS0tKXt2YXIgc2U9KFNlIT09TD9NYXRoLmFicyhzW1NlXSk6MCkrKFNlIT09bGUrMT9NYXRoLmFicyhzW1NlLTFdKTowKTtpZihNYXRoLmFicyh0aGlzLnNbU2VdKTw9aGUrdGUqc2Upe3RoaXMuc1tTZV09MDticmVha319U2U9PT1sZT9KPTM6U2U9PT1MLTE/Sj0xOihKPTIsbGU9U2UpfXN3aXRjaChsZSsrLEope2Nhc2UgMTp7dmFyIGFlPXNbTC0yXTtzW0wtMl09MDtmb3IodmFyIE9lPUwtMjtPZT49bGU7T2UtLSl7dmFyIHllPW4uaHlwb3QodGhpcy5zW09lXSxhZSksQmU9dGhpcy5zW09lXS95ZSxIZT1hZS95ZTtpZih0aGlzLnNbT2VdPXllLE9lIT09bGUmJihhZT0tSGUqc1tPZS0xXSxzW09lLTFdPUJlKnNbT2UtMV0pLGgpZm9yKHZhciB6ZT0wO3plPHRoaXMubjt6ZSsrKXllPUJlKnRoaXMuVlt6ZV1bT2VdK0hlKnRoaXMuVlt6ZV1bTC0xXSx0aGlzLlZbemVdW0wtMV09LUhlKnRoaXMuVlt6ZV1bT2VdK0JlKnRoaXMuVlt6ZV1bTC0xXSx0aGlzLlZbemVdW09lXT15ZX19YnJlYWs7Y2FzZSAyOnt2YXIgTGU9c1tsZS0xXTtzW2xlLTFdPTA7Zm9yKHZhciBJZT1sZTtJZTxMO0llKyspe3ZhciB4ZT1uLmh5cG90KHRoaXMuc1tJZV0sTGUpLHE9dGhpcy5zW0llXS94ZSxkZT1MZS94ZTtpZih0aGlzLnNbSWVdPXhlLExlPS1kZSpzW0llXSxzW0llXT1xKnNbSWVdLHUpZm9yKHZhciBpZT0wO2llPHRoaXMubTtpZSsrKXhlPXEqdGhpcy5VW2llXVtJZV0rZGUqdGhpcy5VW2llXVtsZS0xXSx0aGlzLlVbaWVdW2xlLTFdPS1kZSp0aGlzLlVbaWVdW0llXStxKnRoaXMuVVtpZV1bbGUtMV0sdGhpcy5VW2llXVtJZV09eGV9fWJyZWFrO2Nhc2UgMzp7dmFyIG9lPU1hdGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGguYWJzKHRoaXMuc1tMLTFdKSxNYXRoLmFicyh0aGlzLnNbTC0yXSkpLE1hdGguYWJzKHNbTC0yXSkpLE1hdGguYWJzKHRoaXMuc1tsZV0pKSxNYXRoLmFicyhzW2xlXSkpLFY9dGhpcy5zW0wtMV0vb2UsVGU9dGhpcy5zW0wtMl0vb2UsVz1zW0wtMl0vb2UscGU9dGhpcy5zW2xlXS9vZSx2ZT1zW2xlXS9vZSxQZT0oKFRlK1YpKihUZS1WKStXKlcpLzIsX2U9VipXKihWKlcpLGJlPTA7KGZ1bmN0aW9uKGJ0LHV0KXtyZXR1cm4gYnR8fHV0fSkoUGUhPT0wLF9lIT09MCkmJihiZT1NYXRoLnNxcnQoUGUqUGUrX2UpLFBlPDAmJihiZT0tYmUpLGJlPV9lLyhQZStiZSkpO2Zvcih2YXIgVmU9KHBlK1YpKihwZS1WKStiZSxEZT1wZSp2ZSxxZT1sZTtxZTxMLTE7cWUrKyl7dmFyIGF0PW4uaHlwb3QoVmUsRGUpLFJ0PVZlL2F0LHN0PURlL2F0O2lmKHFlIT09bGUmJihzW3FlLTFdPWF0KSxWZT1SdCp0aGlzLnNbcWVdK3N0KnNbcWVdLHNbcWVdPVJ0KnNbcWVdLXN0KnRoaXMuc1txZV0sRGU9c3QqdGhpcy5zW3FlKzFdLHRoaXMuc1txZSsxXT1SdCp0aGlzLnNbcWUrMV0saClmb3IodmFyIFVlPTA7VWU8dGhpcy5uO1VlKyspYXQ9UnQqdGhpcy5WW1VlXVtxZV0rc3QqdGhpcy5WW1VlXVtxZSsxXSx0aGlzLlZbVWVdW3FlKzFdPS1zdCp0aGlzLlZbVWVdW3FlXStSdCp0aGlzLlZbVWVdW3FlKzFdLHRoaXMuVltVZV1bcWVdPWF0O2lmKGF0PW4uaHlwb3QoVmUsRGUpLFJ0PVZlL2F0LHN0PURlL2F0LHRoaXMuc1txZV09YXQsVmU9UnQqc1txZV0rc3QqdGhpcy5zW3FlKzFdLHRoaXMuc1txZSsxXT0tc3Qqc1txZV0rUnQqdGhpcy5zW3FlKzFdLERlPXN0KnNbcWUrMV0sc1txZSsxXT1SdCpzW3FlKzFdLHUmJnFlPHRoaXMubS0xKWZvcih2YXIgY3Q9MDtjdDx0aGlzLm07Y3QrKylhdD1SdCp0aGlzLlVbY3RdW3FlXStzdCp0aGlzLlVbY3RdW3FlKzFdLHRoaXMuVVtjdF1bcWUrMV09LXN0KnRoaXMuVVtjdF1bcWVdK1J0KnRoaXMuVVtjdF1bcWUrMV0sdGhpcy5VW2N0XVtxZV09YXR9c1tMLTJdPVZlLG5lPW5lKzF9YnJlYWs7Y2FzZSA0OntpZih0aGlzLnNbbGVdPD0wJiYodGhpcy5zW2xlXT10aGlzLnNbbGVdPDA/LXRoaXMuc1tsZV06MCxoKSlmb3IodmFyIFdlPTA7V2U8PWo7V2UrKyl0aGlzLlZbV2VdW2xlXT0tdGhpcy5WW1dlXVtsZV07Zm9yKDtsZTxqJiYhKHRoaXMuc1tsZV0+PXRoaXMuc1tsZSsxXSk7KXt2YXIgb3Q9dGhpcy5zW2xlXTtpZih0aGlzLnNbbGVdPXRoaXMuc1tsZSsxXSx0aGlzLnNbbGUrMV09b3QsaCYmbGU8dGhpcy5uLTEpZm9yKHZhciBZdD0wO1l0PHRoaXMubjtZdCsrKW90PXRoaXMuVltZdF1bbGUrMV0sdGhpcy5WW1l0XVtsZSsxXT10aGlzLlZbWXRdW2xlXSx0aGlzLlZbWXRdW2xlXT1vdDtpZih1JiZsZTx0aGlzLm0tMSlmb3IodmFyIFR0PTA7VHQ8dGhpcy5tO1R0Kyspb3Q9dGhpcy5VW1R0XVtsZSsxXSx0aGlzLlVbVHRdW2xlKzFdPXRoaXMuVVtUdF1bbGVdLHRoaXMuVVtUdF1bbGVdPW90O2xlKyt9bmU9MCxMLS19YnJlYWt9fXZhciBNdD17VTp0aGlzLlUsVjp0aGlzLlYsUzp0aGlzLnN9O3JldHVybiBNdH0sbi5oeXBvdD1mdW5jdGlvbihpLGEpe3ZhciBzPXZvaWQgMDtyZXR1cm4gTWF0aC5hYnMoaSk+TWF0aC5hYnMoYSk/KHM9YS9pLHM9TWF0aC5hYnMoaSkqTWF0aC5zcXJ0KDErcypzKSk6YSE9MD8ocz1pL2Escz1NYXRoLmFicyhhKSpNYXRoLnNxcnQoMStzKnMpKTpzPTAsc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7Zm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLmtleSxmKX19cmV0dXJuIG8ocywiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGwsdSxoKXtyZXR1cm4gdSYmcyhsLnByb3RvdHlwZSx1KSxoJiZzKGwsaCksbH19KCk7ZnVuY3Rpb24gaShzLGwpe2lmKCEocyBpbnN0YW5jZW9mIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsZD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7aSh0aGlzLHMpLHRoaXMuc2VxdWVuY2UxPWwsdGhpcy5zZXF1ZW5jZTI9dSx0aGlzLm1hdGNoX3Njb3JlPWgsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWYsdGhpcy5nYXBfcGVuYWx0eT1kLHRoaXMuaU1heD1sLmxlbmd0aCsxLHRoaXMuak1heD11Lmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHA9MDtwPHRoaXMuaU1heDtwKyspe3RoaXMuZ3JpZFtwXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIG09MDttPHRoaXMuak1heDttKyspdGhpcy5ncmlkW3BdW21dPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgZz0wO2c8dGhpcy5pTWF4O2crKyl7dGhpcy50cmFjZWJhY2tHcmlkW2ddPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgeT0wO3k8dGhpcy5qTWF4O3krKyl0aGlzLnRyYWNlYmFja0dyaWRbZ11beV09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBvKHMsIk5lZWRsZW1hbld1bnNjaCIpLG4ocyxbe2tleToiZ2V0U2NvcmUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX0sImdldFNjb3JlIil9LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiZ2V0QWxpZ25tZW50cyIpfSx7a2V5OiJjb21wdXRlR3JpZHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtmb3IodmFyIHU9MTt1PHRoaXMuak1heDt1KyspdGhpcy5ncmlkWzBdW3VdPXRoaXMuZ3JpZFswXVt1LTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW3VdPVshMSwhMSwhMF07Zm9yKHZhciBoPTE7aDx0aGlzLmlNYXg7aCsrKXRoaXMuZ3JpZFtoXVswXT10aGlzLmdyaWRbaC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtoXVswXT1bITEsITAsITFdO2Zvcih2YXIgZj0xO2Y8dGhpcy5pTWF4O2YrKylmb3IodmFyIGQ9MTtkPHRoaXMuak1heDtkKyspe3ZhciBwPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtmLTFdPT09dGhpcy5zZXF1ZW5jZTJbZC0xXT9wPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5tYXRjaF9zY29yZTpwPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBtPXRoaXMuZ3JpZFtmLTFdW2RdK3RoaXMuZ2FwX3BlbmFsdHksZz10aGlzLmdyaWRbZl1bZC0xXSt0aGlzLmdhcF9wZW5hbHR5LHk9W3AsbSxnXSx2PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHkpO3RoaXMuZ3JpZFtmXVtkXT15W3ZbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtmXVtkXT1bdi5pbmNsdWRlcygwKSx2LmluY2x1ZGVzKDEpLHYuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19LCJjb21wdXRlR3JpZHMiKX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHU9W107Zm9yKHUucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTt1WzBdOyl7dmFyIGg9dVswXSxmPXRoaXMudHJhY2ViYWNrR3JpZFtoLnBvc1swXV1baC5wb3NbMV1dO2ZbMF0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksZlsxXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6Ii0iK2guc2VxMn0pLGZbMl0mJnUucHVzaCh7cG9zOltoLnBvc1swXSxoLnBvc1sxXS0xXSxzZXExOiItIitoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxoLnBvc1swXT09PTAmJmgucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpoLnNlcTEsc2VxdWVuY2UyOmguc2VxMn0pLHUuc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiYWxpZ25tZW50VHJhY2ViYWNrIil9LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9W10sZD0tMTsoZD11LmluZGV4T2YoaCxkKzEpKSE9PS0xOylmLnB1c2goZCk7cmV0dXJuIGZ9LCJnZXRBbGxJbmRleGVzIil9LHtrZXk6ImFycmF5QWxsTWF4SW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1KXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKHUsTWF0aC5tYXguYXBwbHkobnVsbCx1KSl9LCJhcnJheUFsbE1heEluZGV4ZXMiKX1dKSxzfSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW8oZnVuY3Rpb24oKXt9LCJsYXlvdXRCYXNlIik7bi5GRExheW91dD1yKDE4KSxuLkZETGF5b3V0Q29uc3RhbnRzPXIoNCksbi5GRExheW91dEVkZ2U9cigxOSksbi5GRExheW91dE5vZGU9cigyMCksbi5EaW1lbnNpb25EPXIoMjEpLG4uSGFzaE1hcD1yKDIyKSxuLkhhc2hTZXQ9cigyMyksbi5JR2VvbWV0cnk9cig4KSxuLklNYXRoPXIoOSksbi5JbnRlZ2VyPXIoMTApLG4uUG9pbnQ9cigxMiksbi5Qb2ludEQ9cig1KSxuLlJhbmRvbVNlZWQ9cigxNiksbi5SZWN0YW5nbGVEPXIoMTMpLG4uVHJhbnNmb3JtPXIoMTcpLG4uVW5pcXVlSURHZW5lcmV0b3I9cigxNCksbi5RdWlja3NvcnQ9cigyNSksbi5MaW5rZWRMaXN0PXIoMTEpLG4uTEdyYXBoT2JqZWN0PXIoMiksbi5MR3JhcGg9cig2KSxuLkxFZGdlPXIoMSksbi5MR3JhcGhNYW5hZ2VyPXIoNyksbi5MTm9kZT1yKDMpLG4uTGF5b3V0PXIoMTUpLG4uTGF5b3V0Q29uc3RhbnRzPXIoMCksbi5OZWVkbGVtYW5XdW5zY2g9cigyNyksbi5NYXRyaXg9cigyNCksbi5TVkQ9cigyNiksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubGlzdGVuZXJzPVtdfW8obiwiRW1pdHRlciIpO3ZhciBpPW4ucHJvdG90eXBlO2kuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXt0aGlzLmxpc3RlbmVycy5wdXNoKHtldmVudDphLGNhbGxiYWNrOnN9KX0saS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD10aGlzLmxpc3RlbmVycy5sZW5ndGg7bD49MDtsLS0pe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO3UuZXZlbnQ9PT1hJiZ1LmNhbGxiYWNrPT09cyYmdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGwsMSl9fSxpLmVtaXQ9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9MDtsPHRoaXMubGlzdGVuZXJzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO2E9PT11LmV2ZW50JiZ1LmNhbGxiYWNrKHMpfX0sdC5leHBvcnRzPW59XSl9KX0pO3ZhciBKRj1QaSgoSTQsWkYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgSTQ9PSJvYmplY3QiJiZ0eXBlb2YgWkY9PSJvYmplY3QiP1pGLmV4cG9ydHM9cihRRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImxheW91dC1iYXNlIl0scik6dHlwZW9mIEk0PT0ib2JqZWN0Ij9JNC5jb3NlQmFzZT1yKFFGKCkpOmUuY29zZUJhc2U9cihlLmxheW91dEJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShJNCxmdW5jdGlvbih0KXtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIGU9ezQ1OihhLHMsbCk9Pnt2YXIgdT17fTt1LmxheW91dEJhc2U9bCg1NTEpLHUuQ29TRUNvbnN0YW50cz1sKDgwNiksdS5Db1NFRWRnZT1sKDc2NyksdS5Db1NFR3JhcGg9bCg4ODApLHUuQ29TRUdyYXBoTWFuYWdlcj1sKDU3OCksdS5Db1NFTGF5b3V0PWwoNzY1KSx1LkNvU0VOb2RlPWwoOTkxKSx1LkNvbnN0cmFpbnRIYW5kbGVyPWwoOTAyKSxhLmV4cG9ydHM9dX0sODA2OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gaCgpe31vKGgsIkNvU0VDb25zdGFudHMiKTtmb3IodmFyIGYgaW4gdSloW2ZdPXVbZl07aC5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLGguREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj11LkRFRkFVTFRfRURHRV9MRU5HVEgsaC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLGguVElMRT0hMCxoLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLGguVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxoLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSEwLGguRU5GT1JDRV9DT05TVFJBSU5UUz0hMCxoLkFQUExZX0xBWU9VVD0hMCxoLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTPSEwLGguVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITAsaC5QVVJFX0lOQ1JFTUVOVEFMPWguREVGQVVMVF9JTkNSRU1FTlRBTCxhLmV4cG9ydHM9aH0sNzY3OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRFZGdlO2Z1bmN0aW9uIGgoZCxwLG0pe3UuY2FsbCh0aGlzLGQscCxtKX1vKGgsIkNvU0VFZGdlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw4ODA6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGg7ZnVuY3Rpb24gaChkLHAsbSl7dS5jYWxsKHRoaXMsZCxwLG0pfW8oaCwiQ29TRUdyYXBoIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw1Nzg6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGhNYW5hZ2VyO2Z1bmN0aW9uIGgoZCl7dS5jYWxsKHRoaXMsZCl9byhoLCJDb1NFR3JhcGhNYW5hZ2VyIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw3NjU6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5GRExheW91dCxoPWwoNTc4KSxmPWwoODgwKSxkPWwoOTkxKSxwPWwoNzY3KSxtPWwoODA2KSxnPWwoOTAyKSx5PWwoNTUxKS5GRExheW91dENvbnN0YW50cyx2PWwoNTUxKS5MYXlvdXRDb25zdGFudHMseD1sKDU1MSkuUG9pbnQsYj1sKDU1MSkuUG9pbnRELFQ9bCg1NTEpLkRpbWVuc2lvbkQsUz1sKDU1MSkuTGF5b3V0LHc9bCg1NTEpLkludGVnZXIsRT1sKDU1MSkuSUdlb21ldHJ5LF89bCg1NTEpLkxHcmFwaCxDPWwoNTUxKS5UcmFuc2Zvcm0sRD1sKDU1MSkuTGlua2VkTGlzdDtmdW5jdGlvbiBPKCl7dS5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9LHRoaXMuY29uc3RyYWludHM9e319byhPLCJDb1NFTGF5b3V0IiksTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBSIGluIHUpT1tSXT11W1JdO08ucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBrPW5ldyBoKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1rLGt9LE8ucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZihudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLGspfSxPLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZCh0aGlzLmdyYXBoTWFuYWdlcixrKX0sTy5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IHAobnVsbCxudWxsLGspfSxPLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3UucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChtLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9bS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1tLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuZ3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMucHJ1bmVkTm9kZXNBbGw9W10sdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnM9MCx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucz0wLHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITEpfSxPLnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt1LnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXIuY2FsbCh0aGlzKSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy95LkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9LjA0LHRoaXMuY29vbGluZ0FkanVzdGVyPTF9LE8ucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbigpe3ZhciBrPXYuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBrJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LE8ucHJvdG90eXBlLmNsYXNzaWNMYXlvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVzV2l0aEdyYXZpdHk9dGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCksdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KSx0aGlzLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKSx0aGlzLmluY3JlbWVudGFsKXtpZihtLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBMPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxBPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oUCl7cmV0dXJuIEwuaGFzKFApfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oQSl9fWVsc2V7dmFyIGs9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoay5sZW5ndGg+MCl0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShrKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIEw9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLEE9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihJKXtyZXR1cm4gTC5oYXMoSSl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihBKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25zdHJhaW50cykubGVuZ3RoPjAmJihnLmhhbmRsZUNvbnN0cmFpbnRzKHRoaXMpLHRoaXMuaW5pdENvbnN0cmFpbnRWYXJpYWJsZXMoKSksdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSxtLkFQUExZX0xBWU9VVCYmdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSxPLnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJXkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBrPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxMPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIGsuaGFzKE0pfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oTCksdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksbS5QVVJFX0lOQ1JFTUVOVEFMP3RoaXMuY29vbGluZ0ZhY3Rvcj15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwvMjp0aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLG0uUFVSRV9JTkNSRU1FTlRBTD90aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLzIqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCk6dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBBPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQsST10aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc1RyZWVHcm93aW5nfHx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc0dyb3d0aEZpbmlzaGVkO3JldHVybiB0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCksdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2VzKEEsSSksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LE8ucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxMPXt9LEE9MDtBPGsubGVuZ3RoO0ErKyl7dmFyIEk9a1tBXS5yZWN0LE09a1tBXS5pZDtMW01dPXtpZDpNLHg6SS5nZXRDZW50ZXJYKCkseTpJLmdldENlbnRlclkoKSx3Okkud2lkdGgsaDpJLmhlaWdodH19cmV0dXJuIEx9LE8ucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kPTI1LHRoaXMuYW5pbWF0aW9uUGVyaW9kPXRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDt2YXIgaz0hMTtpZih5LkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IWs7KWs9dGhpcy50aWNrKCk7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCl9fSxPLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5nZXRBbGxOb2RlcygpLEwsQT0wO0E8ay5sZW5ndGg7QSsrKUw9a1tBXSxMLmNhbGN1bGF0ZURpc3BsYWNlbWVudCgpO09iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aD4wJiZ0aGlzLnVwZGF0ZURpc3BsYWNlbWVudHMoKTtmb3IodmFyIEE9MDtBPGsubGVuZ3RoO0ErKylMPWtbQV0sTC5tb3ZlKCl9LE8ucHJvdG90eXBlLmluaXRDb25zdHJhaW50VmFyaWFibGVzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpczt0aGlzLmlkVG9Ob2RlTWFwPW5ldyBNYXAsdGhpcy5maXhlZE5vZGVTZXQ9bmV3IFNldDtmb3IodmFyIEw9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxBPTA7QTxMLmxlbmd0aDtBKyspe3ZhciBJPUxbQV07dGhpcy5pZFRvTm9kZU1hcC5zZXQoSS5pZCxJKX12YXIgTT1vKGZ1bmN0aW9uIFoodWUpe2Zvcih2YXIgUT11ZS5nZXRDaGlsZCgpLmdldE5vZGVzKCksaixuZT0wLHRlPTA7dGU8US5sZW5ndGg7dGUrKylqPVFbdGVdLGouZ2V0Q2hpbGQoKT09bnVsbD9rLmZpeGVkTm9kZVNldC5oYXMoai5pZCkmJihuZSs9MTAwKTpuZSs9WihqKTtyZXR1cm4gbmV9LCJjYWxjdWxhdGVDb21wb3VuZFdlaWdodCIpO2lmKHRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCl7dGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oUSl7ay5maXhlZE5vZGVTZXQuYWRkKFEubm9kZUlkKX0pO2Zvcih2YXIgTD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEksQT0wO0E8TC5sZW5ndGg7QSsrKWlmKEk9TFtBXSxJLmdldENoaWxkKCkhPW51bGwpe3ZhciBQPU0oSSk7UD4wJiYoSS5maXhlZE5vZGVXZWlnaHQ9UCl9fWlmKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KXt2YXIgQj1uZXcgTWFwLEY9bmV3IE1hcDtpZih0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQ9bmV3IE1hcCx0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudD1uZXcgTWFwLHRoaXMuZml4ZWROb2Rlc09uSG9yaXpvbnRhbD1uZXcgU2V0LHRoaXMuZml4ZWROb2Rlc09uVmVydGljYWw9bmV3IFNldCx0aGlzLmZpeGVkTm9kZVNldC5mb3JFYWNoKGZ1bmN0aW9uKFope2suZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoWiksay5maXhlZE5vZGVzT25WZXJ0aWNhbC5hZGQoWil9KSx0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIHo9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLEE9MDtBPHoubGVuZ3RoO0ErKyl0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuc2V0KCJkdW1teSIrQSxbXSkseltBXS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtCLnNldCh1ZSwiZHVtbXkiK0EpLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoImR1bW15IitBKS5wdXNoKHVlKSxrLmZpeGVkTm9kZVNldC5oYXModWUpJiZrLmZpeGVkTm9kZXNPbkhvcml6b250YWwuYWRkKCJkdW1teSIrQSl9KTtpZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbClmb3IodmFyICQ9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsQT0wO0E8JC5sZW5ndGg7QSsrKXRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LnNldCgiZHVtbXkiK0EsW10pLCRbQV0uZm9yRWFjaChmdW5jdGlvbih1ZSl7Ri5zZXQodWUsImR1bW15IitBKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoImR1bW15IitBKS5wdXNoKHVlKSxrLmZpeGVkTm9kZVNldC5oYXModWUpJiZrLmZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZCgiZHVtbXkiK0EpfSl9aWYobS5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUyl0aGlzLnNodWZmbGU9ZnVuY3Rpb24oWil7dmFyIHVlLFEsajtmb3Ioaj1aLmxlbmd0aC0xO2o+PTIqWi5sZW5ndGgvMztqLS0pdWU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihqKzEpKSxRPVpbal0sWltqXT1aW3VlXSxaW3VlXT1RO3JldHVybiBafSx0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWw9W10sdGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbD1bXSx0aGlzLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWw9bmV3IE1hcCx0aGlzLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsPW5ldyBNYXAsdGhpcy5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsPW5ldyBNYXAsdGhpcy5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbD1uZXcgTWFwLHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oWil7aWYoWi5sZWZ0KXt2YXIgdWU9Qi5oYXMoWi5sZWZ0KT9CLmdldChaLmxlZnQpOloubGVmdCxRPUIuaGFzKFoucmlnaHQpP0IuZ2V0KFoucmlnaHQpOloucmlnaHQ7ay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmluY2x1ZGVzKHVlKXx8KGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5wdXNoKHVlKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuc2V0KHVlLFtdKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKHVlKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KHVlLGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQodWUpWzBdKS5nZXRDZW50ZXJYKCkpOmsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQodWUsay5pZFRvTm9kZU1hcC5nZXQodWUpLmdldENlbnRlclgoKSkpLGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5pbmNsdWRlcyhRKXx8KGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5wdXNoKFEpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5zZXQoUSxbXSksay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcyhRKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KFEsay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChRKVswXSkuZ2V0Q2VudGVyWCgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KFEsay5pZFRvTm9kZU1hcC5nZXQoUSkuZ2V0Q2VudGVyWCgpKSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldCh1ZSkucHVzaCh7cmlnaHQ6USxnYXA6Wi5nYXB9KSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KFEpLnB1c2goe2xlZnQ6dWUsZ2FwOlouZ2FwfSl9ZWxzZXt2YXIgaj1GLmhhcyhaLnRvcCk/Ri5nZXQoWi50b3ApOloudG9wLG5lPUYuaGFzKFouYm90dG9tKT9GLmdldChaLmJvdHRvbSk6Wi5ib3R0b207ay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5pbmNsdWRlcyhqKXx8KGsubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChqKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLnNldChqLFtdKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoaik/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoaixrLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoailbMF0pLmdldENlbnRlclkoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoaixrLmlkVG9Ob2RlTWFwLmdldChqKS5nZXRDZW50ZXJZKCkpKSxrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmluY2x1ZGVzKG5lKXx8KGsubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChuZSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5zZXQobmUsW10pLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhuZSk/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQobmUsay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KG5lKVswXSkuZ2V0Q2VudGVyWSgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChuZSxrLmlkVG9Ob2RlTWFwLmdldChuZSkuZ2V0Q2VudGVyWSgpKSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQoaikucHVzaCh7Ym90dG9tOm5lLGdhcDpaLmdhcH0pLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KG5lKS5wdXNoKHt0b3A6aixnYXA6Wi5nYXB9KX19KTtlbHNle3ZhciBVPW5ldyBNYXAsSz1uZXcgTWFwO3RoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oWil7aWYoWi5sZWZ0KXt2YXIgdWU9Qi5oYXMoWi5sZWZ0KT9CLmdldChaLmxlZnQpOloubGVmdCxRPUIuaGFzKFoucmlnaHQpP0IuZ2V0KFoucmlnaHQpOloucmlnaHQ7VS5oYXModWUpP1UuZ2V0KHVlKS5wdXNoKFEpOlUuc2V0KHVlLFtRXSksVS5oYXMoUSk/VS5nZXQoUSkucHVzaCh1ZSk6VS5zZXQoUSxbdWVdKX1lbHNle3ZhciBqPUYuaGFzKFoudG9wKT9GLmdldChaLnRvcCk6Wi50b3AsbmU9Ri5oYXMoWi5ib3R0b20pP0YuZ2V0KFouYm90dG9tKTpaLmJvdHRvbTtLLmhhcyhqKT9LLmdldChqKS5wdXNoKG5lKTpLLnNldChqLFtuZV0pLEsuaGFzKG5lKT9LLmdldChuZSkucHVzaChqKTpLLnNldChuZSxbal0pfX0pO3ZhciBlZT1vKGZ1bmN0aW9uKHVlLFEpe3ZhciBqPVtdLG5lPVtdLHRlPW5ldyBELGhlPW5ldyBTZXQsbGU9MDtyZXR1cm4gdWUuZm9yRWFjaChmdW5jdGlvbihKLFNlKXtpZighaGUuaGFzKFNlKSl7altsZV09W10sbmVbbGVdPSExO3ZhciBzZT1TZTtmb3IodGUucHVzaChzZSksaGUuYWRkKHNlKSxqW2xlXS5wdXNoKHNlKTt0ZS5sZW5ndGghPTA7KXtzZT10ZS5zaGlmdCgpLFEuaGFzKHNlKSYmKG5lW2xlXT0hMCk7dmFyIGFlPXVlLmdldChzZSk7YWUuZm9yRWFjaChmdW5jdGlvbihPZSl7aGUuaGFzKE9lKXx8KHRlLnB1c2goT2UpLGhlLmFkZChPZSksaltsZV0ucHVzaChPZSkpfSl9bGUrK319KSx7Y29tcG9uZW50czpqLGlzRml4ZWQ6bmV9fSwiY29uc3RydWN0Q29tcG9uZW50cyIpLFk9ZWUoVSxrLmZpeGVkTm9kZXNPbkhvcml6b250YWwpO3RoaXMuY29tcG9uZW50c09uSG9yaXpvbnRhbD1ZLmNvbXBvbmVudHMsdGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWw9WS5pc0ZpeGVkO3ZhciBjZT1lZShLLGsuZml4ZWROb2Rlc09uVmVydGljYWwpO3RoaXMuY29tcG9uZW50c09uVmVydGljYWw9Y2UuY29tcG9uZW50cyx0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWw9Y2UuaXNGaXhlZH19fSxPLnByb3RvdHlwZS51cGRhdGVEaXNwbGFjZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcztpZih0aGlzLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQmJnRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKGNlKXt2YXIgWj1rLmlkVG9Ob2RlTWFwLmdldChjZS5ub2RlSWQpO1ouZGlzcGxhY2VtZW50WD0wLFouZGlzcGxhY2VtZW50WT0wfSksdGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KXtpZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpZm9yKHZhciBMPXRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxBPTA7QTxMLmxlbmd0aDtBKyspe2Zvcih2YXIgST0wLE09MDtNPExbQV0ubGVuZ3RoO00rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKExbQV1bTV0pKXtJPTA7YnJlYWt9SSs9dGhpcy5pZFRvTm9kZU1hcC5nZXQoTFtBXVtNXSkuZGlzcGxhY2VtZW50WH1mb3IodmFyIFA9SS9MW0FdLmxlbmd0aCxNPTA7TTxMW0FdLmxlbmd0aDtNKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoTFtBXVtNXSkuZGlzcGxhY2VtZW50WD1QfWlmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgQj10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxBPTA7QTxCLmxlbmd0aDtBKyspe2Zvcih2YXIgRj0wLE09MDtNPEJbQV0ubGVuZ3RoO00rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKEJbQV1bTV0pKXtGPTA7YnJlYWt9Ris9dGhpcy5pZFRvTm9kZU1hcC5nZXQoQltBXVtNXSkuZGlzcGxhY2VtZW50WX1mb3IodmFyIHo9Ri9CW0FdLmxlbmd0aCxNPTA7TTxCW0FdLmxlbmd0aDtNKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoQltBXVtNXSkuZGlzcGxhY2VtZW50WT16fX1pZih0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludClpZihtLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTKXRoaXMudG90YWxJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbCksdGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwpKSx0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuZm9yRWFjaChmdW5jdGlvbihjZSl7aWYoIWsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMoY2UpKXt2YXIgWj0wO2suZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoY2UpP1o9ay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChjZSlbMF0pLmRpc3BsYWNlbWVudFg6Wj1rLmlkVG9Ob2RlTWFwLmdldChjZSkuZGlzcGxhY2VtZW50WCxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KGNlKS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtpZih1ZS5yaWdodCl7dmFyIFE9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldCh1ZS5yaWdodCktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChjZSktWjtRPHVlLmdhcCYmKFotPXVlLmdhcC1RKX1lbHNle3ZhciBRPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoY2UpLWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQodWUubGVmdCkrWjtRPHVlLmdhcCYmKForPXVlLmdhcC1RKX19KSxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KGNlLGsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoY2UpK1opLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoY2UpP2suZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY2UpLmZvckVhY2goZnVuY3Rpb24odWUpe2suaWRUb05vZGVNYXAuZ2V0KHVlKS5kaXNwbGFjZW1lbnRYPVp9KTprLmlkVG9Ob2RlTWFwLmdldChjZSkuZGlzcGxhY2VtZW50WD1afX0pLHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwuZm9yRWFjaChmdW5jdGlvbihjZSl7aWYoIWsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMoY2UpKXt2YXIgWj0wO2suZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhjZSk/Wj1rLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoY2UpWzBdKS5kaXNwbGFjZW1lbnRZOlo9ay5pZFRvTm9kZU1hcC5nZXQoY2UpLmRpc3BsYWNlbWVudFksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQoY2UpLmZvckVhY2goZnVuY3Rpb24odWUpe2lmKHVlLmJvdHRvbSl7dmFyIFE9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQodWUuYm90dG9tKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChjZSktWjtRPHVlLmdhcCYmKFotPXVlLmdhcC1RKX1lbHNle3ZhciBRPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KGNlKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldCh1ZS50b3ApK1o7UTx1ZS5nYXAmJihaKz11ZS5nYXAtUSl9fSksay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoY2Usay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoY2UpK1opLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhjZSk/ay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNlKS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtrLmlkVG9Ob2RlTWFwLmdldCh1ZSkuZGlzcGxhY2VtZW50WT1afSk6ay5pZFRvTm9kZU1hcC5nZXQoY2UpLmRpc3BsYWNlbWVudFk9Wn19KTtlbHNle2Zvcih2YXIgQT0wO0E8dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsLmxlbmd0aDtBKyspe3ZhciAkPXRoaXMuY29tcG9uZW50c09uSG9yaXpvbnRhbFtBXTtpZih0aGlzLmZpeGVkQ29tcG9uZW50c09uSG9yaXpvbnRhbFtBXSlmb3IodmFyIE09MDtNPCQubGVuZ3RoO00rKyl0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKCRbTV0pP3RoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoJFtNXSkuZm9yRWFjaChmdW5jdGlvbih1ZSl7ay5pZFRvTm9kZU1hcC5nZXQodWUpLmRpc3BsYWNlbWVudFg9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KCRbTV0pLmRpc3BsYWNlbWVudFg9MDtlbHNle2Zvcih2YXIgVT0wLEs9MCxNPTA7TTwkLmxlbmd0aDtNKyspaWYodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcygkW01dKSl7dmFyIGVlPXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoJFtNXSk7VSs9ZWUubGVuZ3RoKnRoaXMuaWRUb05vZGVNYXAuZ2V0KGVlWzBdKS5kaXNwbGFjZW1lbnRYLEsrPWVlLmxlbmd0aH1lbHNlIFUrPXRoaXMuaWRUb05vZGVNYXAuZ2V0KCRbTV0pLmRpc3BsYWNlbWVudFgsSysrO2Zvcih2YXIgWT1VL0ssTT0wO008JC5sZW5ndGg7TSsrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoJFtNXSk/dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCgkW01dKS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtrLmlkVG9Ob2RlTWFwLmdldCh1ZSkuZGlzcGxhY2VtZW50WD1ZfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoJFtNXSkuZGlzcGxhY2VtZW50WD1ZfX1mb3IodmFyIEE9MDtBPHRoaXMuY29tcG9uZW50c09uVmVydGljYWwubGVuZ3RoO0ErKyl7dmFyICQ9dGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbFtBXTtpZih0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWxbQV0pZm9yKHZhciBNPTA7TTwkLmxlbmd0aDtNKyspdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKCRbTV0pP3RoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCgkW01dKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2suaWRUb05vZGVNYXAuZ2V0KFEpLmRpc3BsYWNlbWVudFk9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KCRbTV0pLmRpc3BsYWNlbWVudFk9MDtlbHNle2Zvcih2YXIgVT0wLEs9MCxNPTA7TTwkLmxlbmd0aDtNKyspaWYodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKCRbTV0pKXt2YXIgZWU9dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KCRbTV0pO1UrPWVlLmxlbmd0aCp0aGlzLmlkVG9Ob2RlTWFwLmdldChlZVswXSkuZGlzcGxhY2VtZW50WSxLKz1lZS5sZW5ndGh9ZWxzZSBVKz10aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRZLEsrKztmb3IodmFyIFk9VS9LLE09MDtNPCQubGVuZ3RoO00rKyl0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoJFtNXSk/dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KCRbTV0pLmZvckVhY2goZnVuY3Rpb24odGUpe2suaWRUb05vZGVNYXAuZ2V0KHRlKS5kaXNwbGFjZW1lbnRZPVl9KTp0aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRZPVl9fX19LE8ucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgaz1bXSxMLEE9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCksST1BLmxlbmd0aCxNO2ZvcihNPTA7TTxJO00rKylMPUFbTV0sTC51cGRhdGVDb25uZWN0ZWQoKSxMLmlzQ29ubmVjdGVkfHwoaz1rLmNvbmNhdChMLmdldE5vZGVzKCkpKTtyZXR1cm4ga30sTy5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50cz1mdW5jdGlvbigpe3ZhciBrPVtdO2s9ay5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7dmFyIEw9bmV3IFNldCxBO2ZvcihBPTA7QTxrLmxlbmd0aDtBKyspe3ZhciBJPWtbQV07aWYoIUwuaGFzKEkpKXt2YXIgTT1JLmdldFNvdXJjZSgpLFA9SS5nZXRUYXJnZXQoKTtpZihNPT1QKUkuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IGIpLEkuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IGIpLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoSSksTC5hZGQoSSk7ZWxzZXt2YXIgQj1bXTtpZihCPUIuY29uY2F0KE0uZ2V0RWRnZUxpc3RUb05vZGUoUCkpLEI9Qi5jb25jYXQoUC5nZXRFZGdlTGlzdFRvTm9kZShNKSksIUwuaGFzKEJbMF0pKXtpZihCLmxlbmd0aD4xKXt2YXIgRjtmb3IoRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgej1CW0ZdO3ouZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IGIpLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoeil9fUIuZm9yRWFjaChmdW5jdGlvbigkKXtMLmFkZCgkKX0pfX19aWYoTC5zaXplPT1rLmxlbmd0aClicmVha319LE8ucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihrKXtmb3IodmFyIEw9bmV3IHgoMCwwKSxBPU1hdGguY2VpbChNYXRoLnNxcnQoay5sZW5ndGgpKSxJPTAsTT0wLFA9MCxCPW5ldyBiKDAsMCksRj0wO0Y8ay5sZW5ndGg7RisrKXtGJUE9PTAmJihQPTAsTT1JLEYhPTAmJihNKz1tLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pLEk9MCk7dmFyIHo9a1tGXSwkPVMuZmluZENlbnRlck9mVHJlZSh6KTtMLng9UCxMLnk9TSxCPU8ucmFkaWFsTGF5b3V0KHosJCxMKSxCLnk+SSYmKEk9TWF0aC5mbG9vcihCLnkpKSxQPU1hdGguZmxvb3IoQi54K20uREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IGIodi5XT1JMRF9DRU5URVJfWC1CLngvMix2LldPUkxEX0NFTlRFUl9ZLUIueS8yKSl9LE8ucmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGssTCxBKXt2YXIgST1NYXRoLm1heCh0aGlzLm1heERpYWdvbmFsSW5UcmVlKGspLG0uREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7Ty5icmFuY2hSYWRpYWxMYXlvdXQoTCxudWxsLDAsMzU5LDAsSSk7dmFyIE09Xy5jYWxjdWxhdGVCb3VuZHMoayksUD1uZXcgQztQLnNldERldmljZU9yZ1goTS5nZXRNaW5YKCkpLFAuc2V0RGV2aWNlT3JnWShNLmdldE1pblkoKSksUC5zZXRXb3JsZE9yZ1goQS54KSxQLnNldFdvcmxkT3JnWShBLnkpO2Zvcih2YXIgQj0wO0I8ay5sZW5ndGg7QisrKXt2YXIgRj1rW0JdO0YudHJhbnNmb3JtKFApfXZhciB6PW5ldyBiKE0uZ2V0TWF4WCgpLE0uZ2V0TWF4WSgpKTtyZXR1cm4gUC5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoeil9LE8uYnJhbmNoUmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGssTCxBLEksTSxQKXt2YXIgQj0oSS1BKzEpLzI7QjwwJiYoQis9MTgwKTt2YXIgRj0oQitBKSUzNjAsej1GKkUuVFdPX1BJLzM2MCwkPU1hdGguY29zKHopLFU9TSpNYXRoLmNvcyh6KSxLPU0qTWF0aC5zaW4oeik7ay5zZXRDZW50ZXIoVSxLKTt2YXIgZWU9W107ZWU9ZWUuY29uY2F0KGsuZ2V0RWRnZXMoKSk7dmFyIFk9ZWUubGVuZ3RoO0whPW51bGwmJlktLTtmb3IodmFyIGNlPTAsWj1lZS5sZW5ndGgsdWUsUT1rLmdldEVkZ2VzQmV0d2VlbihMKTtRLmxlbmd0aD4xOyl7dmFyIGo9UVswXTtRLnNwbGljZSgwLDEpO3ZhciBuZT1lZS5pbmRleE9mKGopO25lPj0wJiZlZS5zcGxpY2UobmUsMSksWi0tLFktLX1MIT1udWxsP3VlPShlZS5pbmRleE9mKFFbMF0pKzEpJVo6dWU9MDtmb3IodmFyIHRlPU1hdGguYWJzKEktQSkvWSxoZT11ZTtjZSE9WTtoZT0rK2hlJVope3ZhciBsZT1lZVtoZV0uZ2V0T3RoZXJFbmQoayk7aWYobGUhPUwpe3ZhciBKPShBK2NlKnRlKSUzNjAsU2U9KEordGUpJTM2MDtPLmJyYW5jaFJhZGlhbExheW91dChsZSxrLEosU2UsTStQLFApLGNlKyt9fX0sTy5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbihrKXtmb3IodmFyIEw9dy5NSU5fVkFMVUUsQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgST1rW0FdLE09SS5nZXREaWFnb25hbCgpO00+TCYmKEw9TSl9cmV0dXJuIEx9LE8ucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAyKih0aGlzLmxldmVsKzEpKnRoaXMuaWRlYWxFZGdlTGVuZ3RofSxPLnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxMPXt9O3RoaXMubWVtYmVyR3JvdXBzPXt9LHRoaXMuaWRUb0R1bW15Tm9kZT17fTtmb3IodmFyIEE9W10sST10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLE09MDtNPEkubGVuZ3RoO00rKyl7dmFyIFA9SVtNXSxCPVAuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFApPT09MCYmKEIuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChCKSkmJkEucHVzaChQKX1mb3IodmFyIE09MDtNPEEubGVuZ3RoO00rKyl7dmFyIFA9QVtNXSxGPVAuZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIExbRl0+InUiJiYoTFtGXT1bXSksTFtGXT1MW0ZdLmNvbmNhdChQKX1PYmplY3Qua2V5cyhMKS5mb3JFYWNoKGZ1bmN0aW9uKHope2lmKExbel0ubGVuZ3RoPjEpe3ZhciAkPSJEdW1teUNvbXBvdW5kXyIrejtrLm1lbWJlckdyb3Vwc1skXT1MW3pdO3ZhciBVPUxbel1bMF0uZ2V0UGFyZW50KCksSz1uZXcgZChrLmdyYXBoTWFuYWdlcik7Sy5pZD0kLEsucGFkZGluZ0xlZnQ9VS5wYWRkaW5nTGVmdHx8MCxLLnBhZGRpbmdSaWdodD1VLnBhZGRpbmdSaWdodHx8MCxLLnBhZGRpbmdCb3R0b209VS5wYWRkaW5nQm90dG9tfHwwLEsucGFkZGluZ1RvcD1VLnBhZGRpbmdUb3B8fDAsay5pZFRvRHVtbXlOb2RlWyRdPUs7dmFyIGVlPWsuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGsubmV3R3JhcGgoKSxLKSxZPVUuZ2V0Q2hpbGQoKTtZLmFkZChLKTtmb3IodmFyIGNlPTA7Y2U8TFt6XS5sZW5ndGg7Y2UrKyl7dmFyIFo9TFt6XVtjZV07WS5yZW1vdmUoWiksZWUuYWRkKFopfX19KX0sTy5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHM9ZnVuY3Rpb24oKXt2YXIgaz17fSxMPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBBPTA7QTx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO0ErKylMW3RoaXMuY29tcG91bmRPcmRlcltBXS5pZF09dGhpcy5jb21wb3VuZE9yZGVyW0FdLGtbdGhpcy5jb21wb3VuZE9yZGVyW0FdLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW0FdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltBXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbQV0uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKGssTCl9LE8ucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLEw9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrPVtdO09iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBJPWsuaWRUb0R1bW15Tm9kZVtBXTtpZihMW0FdPWsudGlsZU5vZGVzKGsubWVtYmVyR3JvdXBzW0FdLEkucGFkZGluZ0xlZnQrSS5wYWRkaW5nUmlnaHQpLEkucmVjdC53aWR0aD1MW0FdLndpZHRoLEkucmVjdC5oZWlnaHQ9TFtBXS5oZWlnaHQsSS5zZXRDZW50ZXIoTFtBXS5jZW50ZXJYLExbQV0uY2VudGVyWSksSS5sYWJlbE1hcmdpbkxlZnQ9MCxJLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBNPUkucmVjdC53aWR0aCxQPUkucmVjdC5oZWlnaHQ7SS5sYWJlbFdpZHRoJiYoSS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oSS5yZWN0LngtPUkubGFiZWxXaWR0aCxJLnNldFdpZHRoKE0rSS5sYWJlbFdpZHRoKSxJLmxhYmVsTWFyZ2luTGVmdD1JLmxhYmVsV2lkdGgpOkkubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmSS5sYWJlbFdpZHRoPk0/KEkucmVjdC54LT0oSS5sYWJlbFdpZHRoLU0pLzIsSS5zZXRXaWR0aChJLmxhYmVsV2lkdGgpLEkubGFiZWxNYXJnaW5MZWZ0PShJLmxhYmVsV2lkdGgtTSkvMik6SS5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJkkuc2V0V2lkdGgoTStJLmxhYmVsV2lkdGgpKSxJLmxhYmVsSGVpZ2h0JiYoSS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oSS5yZWN0LnktPUkubGFiZWxIZWlnaHQsSS5zZXRIZWlnaHQoUCtJLmxhYmVsSGVpZ2h0KSxJLmxhYmVsTWFyZ2luVG9wPUkubGFiZWxIZWlnaHQpOkkubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJkkubGFiZWxIZWlnaHQ+UD8oSS5yZWN0LnktPShJLmxhYmVsSGVpZ2h0LVApLzIsSS5zZXRIZWlnaHQoSS5sYWJlbEhlaWdodCksSS5sYWJlbE1hcmdpblRvcD0oSS5sYWJlbEhlaWdodC1QKS8yKTpJLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZJLnNldEhlaWdodChQK0kubGFiZWxIZWlnaHQpKX19KX0sTy5wcm90b3R5cGUucmVwb3B1bGF0ZUNvbXBvdW5kcz1mdW5jdGlvbigpe2Zvcih2YXIgaz10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBMPXRoaXMuY29tcG91bmRPcmRlcltrXSxBPUwuaWQsST1MLnBhZGRpbmdMZWZ0LE09TC5wYWRkaW5nVG9wLFA9TC5sYWJlbE1hcmdpbkxlZnQsQj1MLmxhYmVsTWFyZ2luVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW0FdLEwucmVjdC54LEwucmVjdC55LEksTSxQLEIpfX0sTy5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxMPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhMKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBJPWsuaWRUb0R1bW15Tm9kZVtBXSxNPUkucGFkZGluZ0xlZnQsUD1JLnBhZGRpbmdUb3AsQj1JLmxhYmVsTWFyZ2luTGVmdCxGPUkubGFiZWxNYXJnaW5Ub3A7ay5hZGp1c3RMb2NhdGlvbnMoTFtBXSxJLnJlY3QueCxJLnJlY3QueSxNLFAsQixGKX0pfSxPLnByb3RvdHlwZS5nZXRUb0JlVGlsZWQ9ZnVuY3Rpb24oayl7dmFyIEw9ay5pZDtpZih0aGlzLnRvQmVUaWxlZFtMXSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbTF07dmFyIEE9ay5nZXRDaGlsZCgpO2lmKEE9PW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0xdPSExLCExO2Zvcih2YXIgST1BLmdldE5vZGVzKCksTT0wO008SS5sZW5ndGg7TSsrKXt2YXIgUD1JW01dO2lmKHRoaXMuZ2V0Tm9kZURlZ3JlZShQKT4wKXJldHVybiB0aGlzLnRvQmVUaWxlZFtMXT0hMSwhMTtpZihQLmdldENoaWxkKCk9PW51bGwpe3RoaXMudG9CZVRpbGVkW1AuaWRdPSExO2NvbnRpbnVlfWlmKCF0aGlzLmdldFRvQmVUaWxlZChQKSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbTF09ITEsITF9cmV0dXJuIHRoaXMudG9CZVRpbGVkW0xdPSEwLCEwfSxPLnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKGspe2Zvcih2YXIgTD1rLmlkLEE9ay5nZXRFZGdlcygpLEk9MCxNPTA7TTxBLmxlbmd0aDtNKyspe3ZhciBQPUFbTV07UC5nZXRTb3VyY2UoKS5pZCE9PVAuZ2V0VGFyZ2V0KCkuaWQmJihJPUkrMSl9cmV0dXJuIEl9LE8ucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oayl7dmFyIEw9dGhpcy5nZXROb2RlRGVncmVlKGspO2lmKGsuZ2V0Q2hpbGQoKT09bnVsbClyZXR1cm4gTDtmb3IodmFyIEE9ay5nZXRDaGlsZCgpLmdldE5vZGVzKCksST0wO0k8QS5sZW5ndGg7SSsrKXt2YXIgTT1BW0ldO0wrPXRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihNKX1yZXR1cm4gTH0sTy5wcm90b3R5cGUucGVyZm9ybURGU09uQ29tcG91bmRzPWZ1bmN0aW9uKCl7dGhpcy5jb21wb3VuZE9yZGVyPVtdLHRoaXMuZmlsbENvbXBleE9yZGVyQnlERlModGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkpfSxPLnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUz1mdW5jdGlvbihrKXtmb3IodmFyIEw9MDtMPGsubGVuZ3RoO0wrKyl7dmFyIEE9a1tMXTtBLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoQS5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKEEpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChBKX19LE8ucHJvdG90eXBlLmFkanVzdExvY2F0aW9ucz1mdW5jdGlvbihrLEwsQSxJLE0sUCxCKXtMKz1JK1AsQSs9TStCO2Zvcih2YXIgRj1MLHo9MDt6PGsucm93cy5sZW5ndGg7eisrKXt2YXIgJD1rLnJvd3Nbel07TD1GO2Zvcih2YXIgVT0wLEs9MDtLPCQubGVuZ3RoO0srKyl7dmFyIGVlPSRbS107ZWUucmVjdC54PUwsZWUucmVjdC55PUEsTCs9ZWUucmVjdC53aWR0aCtrLmhvcml6b250YWxQYWRkaW5nLGVlLnJlY3QuaGVpZ2h0PlUmJihVPWVlLnJlY3QuaGVpZ2h0KX1BKz1VK2sudmVydGljYWxQYWRkaW5nfX0sTy5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihrLEwpe3ZhciBBPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoaykuZm9yRWFjaChmdW5jdGlvbihJKXt2YXIgTT1MW0ldO2lmKEEudGlsZWRNZW1iZXJQYWNrW0ldPUEudGlsZU5vZGVzKGtbSV0sTS5wYWRkaW5nTGVmdCtNLnBhZGRpbmdSaWdodCksTS5yZWN0LndpZHRoPUEudGlsZWRNZW1iZXJQYWNrW0ldLndpZHRoLE0ucmVjdC5oZWlnaHQ9QS50aWxlZE1lbWJlclBhY2tbSV0uaGVpZ2h0LE0uc2V0Q2VudGVyKEEudGlsZWRNZW1iZXJQYWNrW0ldLmNlbnRlclgsQS50aWxlZE1lbWJlclBhY2tbSV0uY2VudGVyWSksTS5sYWJlbE1hcmdpbkxlZnQ9MCxNLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBQPU0ucmVjdC53aWR0aCxCPU0ucmVjdC5oZWlnaHQ7TS5sYWJlbFdpZHRoJiYoTS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oTS5yZWN0LngtPU0ubGFiZWxXaWR0aCxNLnNldFdpZHRoKFArTS5sYWJlbFdpZHRoKSxNLmxhYmVsTWFyZ2luTGVmdD1NLmxhYmVsV2lkdGgpOk0ubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmTS5sYWJlbFdpZHRoPlA/KE0ucmVjdC54LT0oTS5sYWJlbFdpZHRoLVApLzIsTS5zZXRXaWR0aChNLmxhYmVsV2lkdGgpLE0ubGFiZWxNYXJnaW5MZWZ0PShNLmxhYmVsV2lkdGgtUCkvMik6TS5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJk0uc2V0V2lkdGgoUCtNLmxhYmVsV2lkdGgpKSxNLmxhYmVsSGVpZ2h0JiYoTS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oTS5yZWN0LnktPU0ubGFiZWxIZWlnaHQsTS5zZXRIZWlnaHQoQitNLmxhYmVsSGVpZ2h0KSxNLmxhYmVsTWFyZ2luVG9wPU0ubGFiZWxIZWlnaHQpOk0ubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJk0ubGFiZWxIZWlnaHQ+Qj8oTS5yZWN0LnktPShNLmxhYmVsSGVpZ2h0LUIpLzIsTS5zZXRIZWlnaHQoTS5sYWJlbEhlaWdodCksTS5sYWJlbE1hcmdpblRvcD0oTS5sYWJlbEhlaWdodC1CKS8yKTpNLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZNLnNldEhlaWdodChCK00ubGFiZWxIZWlnaHQpKX19KX0sTy5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKGssTCl7dmFyIEE9dGhpcy50aWxlTm9kZXNCeUZhdm9yaW5nRGltKGssTCwhMCksST10aGlzLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0oayxMLCExKSxNPXRoaXMuZ2V0T3JnUmF0aW8oQSksUD10aGlzLmdldE9yZ1JhdGlvKEkpLEI7cmV0dXJuIFA8TT9CPUk6Qj1BLEJ9LE8ucHJvdG90eXBlLmdldE9yZ1JhdGlvPWZ1bmN0aW9uKGspe3ZhciBMPWsud2lkdGgsQT1rLmhlaWdodCxJPUwvQTtyZXR1cm4gSTwxJiYoST0xL0kpLEl9LE8ucHJvdG90eXBlLmNhbGNJZGVhbFJvd1dpZHRoPWZ1bmN0aW9uKGssTCl7dmFyIEE9bS5USUxJTkdfUEFERElOR19WRVJUSUNBTCxJPW0uVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxNPWsubGVuZ3RoLFA9MCxCPTAsRj0wO2suZm9yRWFjaChmdW5jdGlvbihjZSl7UCs9Y2UuZ2V0V2lkdGgoKSxCKz1jZS5nZXRIZWlnaHQoKSxjZS5nZXRXaWR0aCgpPkYmJihGPWNlLmdldFdpZHRoKCkpfSk7dmFyIHo9UC9NLCQ9Qi9NLFU9TWF0aC5wb3coQS1JLDIpKzQqKHorSSkqKCQrQSkqTSxLPShJLUErTWF0aC5zcXJ0KFUpKS8oMiooeitJKSksZWU7TD8oZWU9TWF0aC5jZWlsKEspLGVlPT1LJiZlZSsrKTplZT1NYXRoLmZsb29yKEspO3ZhciBZPWVlKih6K0kpLUk7cmV0dXJuIEY+WSYmKFk9RiksWSs9SSoyLFl9LE8ucHJvdG90eXBlLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW09ZnVuY3Rpb24oayxMLEEpe3ZhciBJPW0uVElMSU5HX1BBRERJTkdfVkVSVElDQUwsTT1tLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsUD1tLlRJTElOR19DT01QQVJFX0JZLEI9e3Jvd3M6W10scm93V2lkdGg6W10scm93SGVpZ2h0OltdLHdpZHRoOjAsaGVpZ2h0OkwsdmVydGljYWxQYWRkaW5nOkksaG9yaXpvbnRhbFBhZGRpbmc6TSxjZW50ZXJYOjAsY2VudGVyWTowfTtQJiYoQi5pZGVhbFJvd1dpZHRoPXRoaXMuY2FsY0lkZWFsUm93V2lkdGgoayxBKSk7dmFyIEY9byhmdW5jdGlvbihaKXtyZXR1cm4gWi5yZWN0LndpZHRoKloucmVjdC5oZWlnaHR9LCJnZXROb2RlQXJlYSIpLHo9byhmdW5jdGlvbihaLHVlKXtyZXR1cm4gRih1ZSktRihaKX0sImFyZWFDb21wYXJlRmNuIik7ay5zb3J0KGZ1bmN0aW9uKGNlLFope3ZhciB1ZT16O3JldHVybiBCLmlkZWFsUm93V2lkdGg/KHVlPVAsdWUoY2UuaWQsWi5pZCkpOnVlKGNlLFopfSk7Zm9yKHZhciAkPTAsVT0wLEs9MDtLPGsubGVuZ3RoO0srKyl7dmFyIGVlPWtbS107JCs9ZWUuZ2V0Q2VudGVyWCgpLFUrPWVlLmdldENlbnRlclkoKX1CLmNlbnRlclg9JC9rLmxlbmd0aCxCLmNlbnRlclk9VS9rLmxlbmd0aDtmb3IodmFyIEs9MDtLPGsubGVuZ3RoO0srKyl7dmFyIGVlPWtbS107aWYoQi5yb3dzLmxlbmd0aD09MCl0aGlzLmluc2VydE5vZGVUb1JvdyhCLGVlLDAsTCk7ZWxzZSBpZih0aGlzLmNhbkFkZEhvcml6b250YWwoQixlZS5yZWN0LndpZHRoLGVlLnJlY3QuaGVpZ2h0KSl7dmFyIFk9Qi5yb3dzLmxlbmd0aC0xO0IuaWRlYWxSb3dXaWR0aHx8KFk9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KEIpKSx0aGlzLmluc2VydE5vZGVUb1JvdyhCLGVlLFksTCl9ZWxzZSB0aGlzLmluc2VydE5vZGVUb1JvdyhCLGVlLEIucm93cy5sZW5ndGgsTCk7dGhpcy5zaGlmdFRvTGFzdFJvdyhCKX1yZXR1cm4gQn0sTy5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93PWZ1bmN0aW9uKGssTCxBLEkpe3ZhciBNPUk7aWYoQT09ay5yb3dzLmxlbmd0aCl7dmFyIFA9W107ay5yb3dzLnB1c2goUCksay5yb3dXaWR0aC5wdXNoKE0pLGsucm93SGVpZ2h0LnB1c2goMCl9dmFyIEI9ay5yb3dXaWR0aFtBXStMLnJlY3Qud2lkdGg7ay5yb3dzW0FdLmxlbmd0aD4wJiYoQis9ay5ob3Jpem9udGFsUGFkZGluZyksay5yb3dXaWR0aFtBXT1CLGsud2lkdGg8QiYmKGsud2lkdGg9Qik7dmFyIEY9TC5yZWN0LmhlaWdodDtBPjAmJihGKz1rLnZlcnRpY2FsUGFkZGluZyk7dmFyIHo9MDtGPmsucm93SGVpZ2h0W0FdJiYoej1rLnJvd0hlaWdodFtBXSxrLnJvd0hlaWdodFtBXT1GLHo9ay5yb3dIZWlnaHRbQV0teiksay5oZWlnaHQrPXosay5yb3dzW0FdLnB1c2goTCl9LE8ucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oayl7Zm9yKHZhciBMPS0xLEE9TnVtYmVyLk1BWF9WQUxVRSxJPTA7STxrLnJvd3MubGVuZ3RoO0krKylrLnJvd1dpZHRoW0ldPEEmJihMPUksQT1rLnJvd1dpZHRoW0ldKTtyZXR1cm4gTH0sTy5wcm90b3R5cGUuZ2V0TG9uZ2VzdFJvd0luZGV4PWZ1bmN0aW9uKGspe2Zvcih2YXIgTD0tMSxBPU51bWJlci5NSU5fVkFMVUUsST0wO0k8ay5yb3dzLmxlbmd0aDtJKyspay5yb3dXaWR0aFtJXT5BJiYoTD1JLEE9ay5yb3dXaWR0aFtJXSk7cmV0dXJuIEx9LE8ucHJvdG90eXBlLmNhbkFkZEhvcml6b250YWw9ZnVuY3Rpb24oayxMLEEpe2lmKGsuaWRlYWxSb3dXaWR0aCl7dmFyIEk9ay5yb3dzLmxlbmd0aC0xLE09ay5yb3dXaWR0aFtJXTtyZXR1cm4gTStMK2suaG9yaXpvbnRhbFBhZGRpbmc8PWsuaWRlYWxSb3dXaWR0aH12YXIgUD10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoayk7aWYoUDwwKXJldHVybiEwO3ZhciBCPWsucm93V2lkdGhbUF07aWYoQitrLmhvcml6b250YWxQYWRkaW5nK0w8PWsud2lkdGgpcmV0dXJuITA7dmFyIEY9MDtrLnJvd0hlaWdodFtQXTxBJiZQPjAmJihGPUEray52ZXJ0aWNhbFBhZGRpbmctay5yb3dIZWlnaHRbUF0pO3ZhciB6O2sud2lkdGgtQj49TCtrLmhvcml6b250YWxQYWRkaW5nP3o9KGsuaGVpZ2h0K0YpLyhCK0wray5ob3Jpem9udGFsUGFkZGluZyk6ej0oay5oZWlnaHQrRikvay53aWR0aCxGPUEray52ZXJ0aWNhbFBhZGRpbmc7dmFyICQ7cmV0dXJuIGsud2lkdGg8TD8kPShrLmhlaWdodCtGKS9MOiQ9KGsuaGVpZ2h0K0YpL2sud2lkdGgsJDwxJiYoJD0xLyQpLHo8MSYmKHo9MS96KSx6PCR9LE8ucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKGspe3ZhciBMPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KGspLEE9ay5yb3dXaWR0aC5sZW5ndGgtMSxJPWsucm93c1tMXSxNPUlbSS5sZW5ndGgtMV0sUD1NLndpZHRoK2suaG9yaXpvbnRhbFBhZGRpbmc7aWYoay53aWR0aC1rLnJvd1dpZHRoW0FdPlAmJkwhPUEpe0kuc3BsaWNlKC0xLDEpLGsucm93c1tBXS5wdXNoKE0pLGsucm93V2lkdGhbTF09ay5yb3dXaWR0aFtMXS1QLGsucm93V2lkdGhbQV09ay5yb3dXaWR0aFtBXStQLGsud2lkdGg9ay5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgoayldO2Zvcih2YXIgQj1OdW1iZXIuTUlOX1ZBTFVFLEY9MDtGPEkubGVuZ3RoO0YrKylJW0ZdLmhlaWdodD5CJiYoQj1JW0ZdLmhlaWdodCk7TD4wJiYoQis9ay52ZXJ0aWNhbFBhZGRpbmcpO3ZhciB6PWsucm93SGVpZ2h0W0xdK2sucm93SGVpZ2h0W0FdO2sucm93SGVpZ2h0W0xdPUIsay5yb3dIZWlnaHRbQV08TS5oZWlnaHQray52ZXJ0aWNhbFBhZGRpbmcmJihrLnJvd0hlaWdodFtBXT1NLmhlaWdodCtrLnZlcnRpY2FsUGFkZGluZyk7dmFyICQ9ay5yb3dIZWlnaHRbTF0ray5yb3dIZWlnaHRbQV07ay5oZWlnaHQrPSQteix0aGlzLnNoaWZ0VG9MYXN0Um93KGspfX0sTy5wcm90b3R5cGUudGlsaW5nUHJlTGF5b3V0PWZ1bmN0aW9uKCl7bS5USUxFJiYodGhpcy5ncm91cFplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5jbGVhckNvbXBvdW5kcygpLHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpKX0sTy5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe20uVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSxPLnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgaz1bXSxMPSEwLEE7TDspe3ZhciBJPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksTT1bXTtMPSExO2Zvcih2YXIgUD0wO1A8SS5sZW5ndGg7UCsrKWlmKEE9SVtQXSxBLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhQS5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmQS5nZXRDaGlsZCgpPT1udWxsKXtpZihtLlBVUkVfSU5DUkVNRU5UQUwpe3ZhciBCPUEuZ2V0RWRnZXMoKVswXS5nZXRPdGhlckVuZChBKSxGPW5ldyBUKEEuZ2V0Q2VudGVyWCgpLUIuZ2V0Q2VudGVyWCgpLEEuZ2V0Q2VudGVyWSgpLUIuZ2V0Q2VudGVyWSgpKTtNLnB1c2goW0EsQS5nZXRFZGdlcygpWzBdLEEuZ2V0T3duZXIoKSxGXSl9ZWxzZSBNLnB1c2goW0EsQS5nZXRFZGdlcygpWzBdLEEuZ2V0T3duZXIoKV0pO0w9ITB9aWYoTD09ITApe2Zvcih2YXIgej1bXSwkPTA7JDxNLmxlbmd0aDskKyspTVskXVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKHoucHVzaChNWyRdKSxNWyRdWzBdLmdldE93bmVyKCkucmVtb3ZlKE1bJF1bMF0pKTtrLnB1c2goeiksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD1rfSxPLnByb3RvdHlwZS5ncm93VHJlZT1mdW5jdGlvbihrKXtmb3IodmFyIEw9ay5sZW5ndGgsQT1rW0wtMV0sSSxNPTA7TTxBLmxlbmd0aDtNKyspST1BW01dLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShJKSxJWzJdLmFkZChJWzBdKSxJWzJdLmFkZChJWzFdLElbMV0uc291cmNlLElbMV0udGFyZ2V0KTtrLnNwbGljZShrLmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LE8ucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oayl7dmFyIEwsQSxJPWtbMF07aWYoST09a1sxXS5zb3VyY2U/QT1rWzFdLnRhcmdldDpBPWtbMV0uc291cmNlLG0uUFVSRV9JTkNSRU1FTlRBTClJLnNldENlbnRlcihBLmdldENlbnRlclgoKStrWzNdLmdldFdpZHRoKCksQS5nZXRDZW50ZXJZKCkra1szXS5nZXRIZWlnaHQoKSk7ZWxzZXt2YXIgTT1BLnN0YXJ0WCxQPUEuZmluaXNoWCxCPUEuc3RhcnRZLEY9QS5maW5pc2hZLHo9MCwkPTAsVT0wLEs9MCxlZT1beixVLCQsS107aWYoQj4wKWZvcih2YXIgWT1NO1k8PVA7WSsrKWVlWzBdKz10aGlzLmdyaWRbWV1bQi0xXS5sZW5ndGgrdGhpcy5ncmlkW1ldW0JdLmxlbmd0aC0xO2lmKFA8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgWT1CO1k8PUY7WSsrKWVlWzFdKz10aGlzLmdyaWRbUCsxXVtZXS5sZW5ndGgrdGhpcy5ncmlkW1BdW1ldLmxlbmd0aC0xO2lmKEY8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIgWT1NO1k8PVA7WSsrKWVlWzJdKz10aGlzLmdyaWRbWV1bRisxXS5sZW5ndGgrdGhpcy5ncmlkW1ldW0ZdLmxlbmd0aC0xO2lmKE0+MClmb3IodmFyIFk9QjtZPD1GO1krKyllZVszXSs9dGhpcy5ncmlkW00tMV1bWV0ubGVuZ3RoK3RoaXMuZ3JpZFtNXVtZXS5sZW5ndGgtMTtmb3IodmFyIGNlPXcuTUFYX1ZBTFVFLFosdWUsUT0wO1E8ZWUubGVuZ3RoO1ErKyllZVtRXTxjZT8oY2U9ZWVbUV0sWj0xLHVlPVEpOmVlW1FdPT1jZSYmWisrO2lmKFo9PTMmJmNlPT0wKWVlWzBdPT0wJiZlZVsxXT09MCYmZWVbMl09PTA/TD0xOmVlWzBdPT0wJiZlZVsxXT09MCYmZWVbM109PTA/TD0wOmVlWzBdPT0wJiZlZVsyXT09MCYmZWVbM109PTA/TD0zOmVlWzFdPT0wJiZlZVsyXT09MCYmZWVbM109PTAmJihMPTIpO2Vsc2UgaWYoWj09MiYmY2U9PTApe3ZhciBqPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtlZVswXT09MCYmZWVbMV09PTA/aj09MD9MPTA6TD0xOmVlWzBdPT0wJiZlZVsyXT09MD9qPT0wP0w9MDpMPTI6ZWVbMF09PTAmJmVlWzNdPT0wP2o9PTA/TD0wOkw9MzplZVsxXT09MCYmZWVbMl09PTA/aj09MD9MPTE6TD0yOmVlWzFdPT0wJiZlZVszXT09MD9qPT0wP0w9MTpMPTM6aj09MD9MPTI6TD0zfWVsc2UgaWYoWj09NCYmY2U9PTApe3ZhciBqPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTtMPWp9ZWxzZSBMPXVlO0w9PTA/SS5zZXRDZW50ZXIoQS5nZXRDZW50ZXJYKCksQS5nZXRDZW50ZXJZKCktQS5nZXRIZWlnaHQoKS8yLXkuREVGQVVMVF9FREdFX0xFTkdUSC1JLmdldEhlaWdodCgpLzIpOkw9PTE/SS5zZXRDZW50ZXIoQS5nZXRDZW50ZXJYKCkrQS5nZXRXaWR0aCgpLzIreS5ERUZBVUxUX0VER0VfTEVOR1RIK0kuZ2V0V2lkdGgoKS8yLEEuZ2V0Q2VudGVyWSgpKTpMPT0yP0kuc2V0Q2VudGVyKEEuZ2V0Q2VudGVyWCgpLEEuZ2V0Q2VudGVyWSgpK0EuZ2V0SGVpZ2h0KCkvMit5LkRFRkFVTFRfRURHRV9MRU5HVEgrSS5nZXRIZWlnaHQoKS8yKTpJLnNldENlbnRlcihBLmdldENlbnRlclgoKS1BLmdldFdpZHRoKCkvMi15LkRFRkFVTFRfRURHRV9MRU5HVEgtSS5nZXRXaWR0aCgpLzIsQS5nZXRDZW50ZXJZKCkpfX0sYS5leHBvcnRzPU99LDk5MTooYSxzLGwpPT57dmFyIHU9bCg1NTEpLkZETGF5b3V0Tm9kZSxoPWwoNTUxKS5JTWF0aDtmdW5jdGlvbiBmKHAsbSxnLHkpe3UuY2FsbCh0aGlzLHAsbSxnLHkpfW8oZiwiQ29TRU5vZGUiKSxmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHUucHJvdG90eXBlKTtmb3IodmFyIGQgaW4gdSlmW2RdPXVbZF07Zi5wcm90b3R5cGUuY2FsY3VsYXRlRGlzcGxhY2VtZW50PWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7dGhpcy5nZXRDaGlsZCgpIT1udWxsJiZ0aGlzLmZpeGVkTm9kZVdlaWdodD8odGhpcy5kaXNwbGFjZW1lbnRYKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMuZml4ZWROb2RlV2VpZ2h0LHRoaXMuZGlzcGxhY2VtZW50WSs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWSt0aGlzLnJlcHVsc2lvbkZvcmNlWSt0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKS90aGlzLmZpeGVkTm9kZVdlaWdodCk6KHRoaXMuZGlzcGxhY2VtZW50WCs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWCt0aGlzLnJlcHVsc2lvbkZvcmNlWCt0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKS90aGlzLm5vT2ZDaGlsZHJlbix0aGlzLmRpc3BsYWNlbWVudFkrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5ub09mQ2hpbGRyZW4pLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD1wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50Kmguc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPnAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCpoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZCYmdGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aD4wJiZ0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSl9LGYucHJvdG90eXBlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW49ZnVuY3Rpb24ocCxtKXtmb3IodmFyIGc9dGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkseSx2PTA7djxnLmxlbmd0aDt2KyspeT1nW3ZdLHkuZ2V0Q2hpbGQoKT09bnVsbD8oeS5kaXNwbGFjZW1lbnRYKz1wLHkuZGlzcGxhY2VtZW50WSs9bSk6eS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHAsbSl9LGYucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTsodGhpcy5jaGlsZD09bnVsbHx8dGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aD09MCkmJih0aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSxwLnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSkpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MH0sZi5wcm90b3R5cGUuc2V0UHJlZDE9ZnVuY3Rpb24ocCl7dGhpcy5wcmVkMT1wfSxmLnByb3RvdHlwZS5nZXRQcmVkMT1mdW5jdGlvbigpe3JldHVybiBwcmVkMX0sZi5wcm90b3R5cGUuZ2V0UHJlZDI9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDJ9LGYucHJvdG90eXBlLnNldE5leHQ9ZnVuY3Rpb24ocCl7dGhpcy5uZXh0PXB9LGYucHJvdG90eXBlLmdldE5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV4dH0sZi5wcm90b3R5cGUuc2V0UHJvY2Vzc2VkPWZ1bmN0aW9uKHApe3RoaXMucHJvY2Vzc2VkPXB9LGYucHJvdG90eXBlLmlzUHJvY2Vzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3NlZH0sYS5leHBvcnRzPWZ9LDkwMjooYSxzLGwpPT57ZnVuY3Rpb24gdShnKXtpZihBcnJheS5pc0FycmF5KGcpKXtmb3IodmFyIHk9MCx2PUFycmF5KGcubGVuZ3RoKTt5PGcubGVuZ3RoO3krKyl2W3ldPWdbeV07cmV0dXJuIHZ9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShnKX1vKHUsIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBoPWwoODA2KSxmPWwoNTUxKS5MaW5rZWRMaXN0LGQ9bCg1NTEpLk1hdHJpeCxwPWwoNTUxKS5TVkQ7ZnVuY3Rpb24gbSgpe31vKG0sIkNvbnN0cmFpbnRIYW5kbGVyIiksbS5oYW5kbGVDb25zdHJhaW50cz1mdW5jdGlvbihnKXt2YXIgeT17fTt5LmZpeGVkTm9kZUNvbnN0cmFpbnQ9Zy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LHkuYWxpZ25tZW50Q29uc3RyYWludD1nLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQseS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9Zy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7Zm9yKHZhciB2PW5ldyBNYXAseD1uZXcgTWFwLGI9W10sVD1bXSxTPWcuZ2V0QWxsTm9kZXMoKSx3PTAsRT0wO0U8Uy5sZW5ndGg7RSsrKXt2YXIgXz1TW0VdO18uZ2V0Q2hpbGQoKT09bnVsbCYmKHguc2V0KF8uaWQsdysrKSxiLnB1c2goXy5nZXRDZW50ZXJYKCkpLFQucHVzaChfLmdldENlbnRlclkoKSksdi5zZXQoXy5pZCxfKSl9eS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJnkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2UpeyFvZS5nYXAmJm9lLmdhcCE9MCYmKG9lLmxlZnQ/b2UuZ2FwPWguREVGQVVMVF9FREdFX0xFTkdUSCt2LmdldChvZS5sZWZ0KS5nZXRXaWR0aCgpLzIrdi5nZXQob2UucmlnaHQpLmdldFdpZHRoKCkvMjpvZS5nYXA9aC5ERUZBVUxUX0VER0VfTEVOR1RIK3YuZ2V0KG9lLnRvcCkuZ2V0SGVpZ2h0KCkvMit2LmdldChvZS5ib3R0b20pLmdldEhlaWdodCgpLzIpfSk7dmFyIEM9byhmdW5jdGlvbihWLFRlKXtyZXR1cm57eDpWLngtVGUueCx5OlYueS1UZS55fX0sImNhbGN1bGF0ZVBvc2l0aW9uRGlmZiIpLEQ9byhmdW5jdGlvbihWKXt2YXIgVGU9MCxXPTA7cmV0dXJuIFYuZm9yRWFjaChmdW5jdGlvbihwZSl7VGUrPWJbeC5nZXQocGUpXSxXKz1UW3guZ2V0KHBlKV19KSx7eDpUZS9WLnNpemUseTpXL1Yuc2l6ZX19LCJjYWxjdWxhdGVBdmdQb3NpdGlvbiIpLE89byhmdW5jdGlvbihWLFRlLFcscGUsdmUpe2Z1bmN0aW9uIFBlKHN0LFVlKXt2YXIgY3Q9bmV3IFNldChzdCksV2U9ITAsb3Q9ITEsWXQ9dm9pZCAwO3RyeXtmb3IodmFyIFR0PVVlW1N5bWJvbC5pdGVyYXRvcl0oKSxNdDshKFdlPShNdD1UdC5uZXh0KCkpLmRvbmUpO1dlPSEwKXt2YXIgYnQ9TXQudmFsdWU7Y3QuYWRkKGJ0KX19Y2F0Y2godXQpe290PSEwLFl0PXV0fWZpbmFsbHl7dHJ5eyFXZSYmVHQucmV0dXJuJiZUdC5yZXR1cm4oKX1maW5hbGx5e2lmKG90KXRocm93IFl0fX1yZXR1cm4gY3R9byhQZSwic2V0VW5pb24iKTt2YXIgX2U9bmV3IE1hcDtWLmZvckVhY2goZnVuY3Rpb24oc3QsVWUpe19lLnNldChVZSwwKX0pLFYuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7c3QuZm9yRWFjaChmdW5jdGlvbihjdCl7X2Uuc2V0KGN0LmlkLF9lLmdldChjdC5pZCkrMSl9KX0pO3ZhciBiZT1uZXcgTWFwLFZlPW5ldyBNYXAsRGU9bmV3IGY7X2UuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7c3Q9PTA/KERlLnB1c2goVWUpLFd8fChUZT09Imhvcml6b250YWwiP2JlLnNldChVZSx4LmhhcyhVZSk/Ylt4LmdldChVZSldOnBlLmdldChVZSkpOmJlLnNldChVZSx4LmhhcyhVZSk/VFt4LmdldChVZSldOnBlLmdldChVZSkpKSk6YmUuc2V0KFVlLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSksVyYmVmUuc2V0KFVlLG5ldyBTZXQoW1VlXSkpfSksVyYmdmUuZm9yRWFjaChmdW5jdGlvbihzdCl7dmFyIFVlPVtdO2lmKHN0LmZvckVhY2goZnVuY3Rpb24ob3Qpe1cuaGFzKG90KSYmVWUucHVzaChvdCl9KSxVZS5sZW5ndGg+MCl7dmFyIGN0PTA7VWUuZm9yRWFjaChmdW5jdGlvbihvdCl7VGU9PSJob3Jpem9udGFsIj8oYmUuc2V0KG90LHguaGFzKG90KT9iW3guZ2V0KG90KV06cGUuZ2V0KG90KSksY3QrPWJlLmdldChvdCkpOihiZS5zZXQob3QseC5oYXMob3QpP1RbeC5nZXQob3QpXTpwZS5nZXQob3QpKSxjdCs9YmUuZ2V0KG90KSl9KSxjdD1jdC9VZS5sZW5ndGgsc3QuZm9yRWFjaChmdW5jdGlvbihvdCl7Vy5oYXMob3QpfHxiZS5zZXQob3QsY3QpfSl9ZWxzZXt2YXIgV2U9MDtzdC5mb3JFYWNoKGZ1bmN0aW9uKG90KXtUZT09Imhvcml6b250YWwiP1dlKz14LmhhcyhvdCk/Ylt4LmdldChvdCldOnBlLmdldChvdCk6V2UrPXguaGFzKG90KT9UW3guZ2V0KG90KV06cGUuZ2V0KG90KX0pLFdlPVdlL3N0Lmxlbmd0aCxzdC5mb3JFYWNoKGZ1bmN0aW9uKG90KXtiZS5zZXQob3QsV2UpfSl9fSk7Zm9yKHZhciBxZT1vKGZ1bmN0aW9uKCl7dmFyIFVlPURlLnNoaWZ0KCksY3Q9Vi5nZXQoVWUpO2N0LmZvckVhY2goZnVuY3Rpb24oV2Upe2lmKGJlLmdldChXZS5pZCk8YmUuZ2V0KFVlKStXZS5nYXApaWYoVyYmVy5oYXMoV2UuaWQpKXt2YXIgb3Q9dm9pZCAwO2lmKFRlPT0iaG9yaXpvbnRhbCI/b3Q9eC5oYXMoV2UuaWQpP2JbeC5nZXQoV2UuaWQpXTpwZS5nZXQoV2UuaWQpOm90PXguaGFzKFdlLmlkKT9UW3guZ2V0KFdlLmlkKV06cGUuZ2V0KFdlLmlkKSxiZS5zZXQoV2UuaWQsb3QpLG90PGJlLmdldChVZSkrV2UuZ2FwKXt2YXIgWXQ9YmUuZ2V0KFVlKStXZS5nYXAtb3Q7VmUuZ2V0KFVlKS5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtiZS5zZXQoVHQsYmUuZ2V0KFR0KS1ZdCl9KX19ZWxzZSBiZS5zZXQoV2UuaWQsYmUuZ2V0KFVlKStXZS5nYXApO19lLnNldChXZS5pZCxfZS5nZXQoV2UuaWQpLTEpLF9lLmdldChXZS5pZCk9PTAmJkRlLnB1c2goV2UuaWQpLFcmJlZlLnNldChXZS5pZCxQZShWZS5nZXQoVWUpLFZlLmdldChXZS5pZCkpKX0pfSwiX2xvb3AiKTtEZS5sZW5ndGghPTA7KXFlKCk7aWYoVyl7dmFyIGF0PW5ldyBTZXQ7Vi5mb3JFYWNoKGZ1bmN0aW9uKHN0LFVlKXtzdC5sZW5ndGg9PTAmJmF0LmFkZChVZSl9KTt2YXIgUnQ9W107VmUuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7aWYoYXQuaGFzKFVlKSl7dmFyIGN0PSExLFdlPSEwLG90PSExLFl0PXZvaWQgMDt0cnl7Zm9yKHZhciBUdD1zdFtTeW1ib2wuaXRlcmF0b3JdKCksTXQ7IShXZT0oTXQ9VHQubmV4dCgpKS5kb25lKTtXZT0hMCl7dmFyIGJ0PU10LnZhbHVlO1cuaGFzKGJ0KSYmKGN0PSEwKX19Y2F0Y2goZnQpe290PSEwLFl0PWZ0fWZpbmFsbHl7dHJ5eyFXZSYmVHQucmV0dXJuJiZUdC5yZXR1cm4oKX1maW5hbGx5e2lmKG90KXRocm93IFl0fX1pZighY3Qpe3ZhciB1dD0hMSxTdD12b2lkIDA7UnQuZm9yRWFjaChmdW5jdGlvbihmdCx2dCl7ZnQuaGFzKFtdLmNvbmNhdCh1KHN0KSlbMF0pJiYodXQ9ITAsU3Q9dnQpfSksdXQ/c3QuZm9yRWFjaChmdW5jdGlvbihmdCl7UnRbU3RdLmFkZChmdCl9KTpSdC5wdXNoKG5ldyBTZXQoc3QpKX19fSksUnQuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7dmFyIGN0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxXZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksb3Q9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFl0PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxUdD0hMCxNdD0hMSxidD12b2lkIDA7dHJ5e2Zvcih2YXIgdXQ9c3RbU3ltYm9sLml0ZXJhdG9yXSgpLFN0OyEoVHQ9KFN0PXV0Lm5leHQoKSkuZG9uZSk7VHQ9ITApe3ZhciBmdD1TdC52YWx1ZSx2dD12b2lkIDA7VGU9PSJob3Jpem9udGFsIj92dD14LmhhcyhmdCk/Ylt4LmdldChmdCldOnBlLmdldChmdCk6dnQ9eC5oYXMoZnQpP1RbeC5nZXQoZnQpXTpwZS5nZXQoZnQpO3ZhciBudD1iZS5nZXQoZnQpO3Z0PGN0JiYoY3Q9dnQpLHZ0Pm90JiYob3Q9dnQpLG50PFdlJiYoV2U9bnQpLG50Pll0JiYoWXQ9bnQpfX1jYXRjaChEdCl7TXQ9ITAsYnQ9RHR9ZmluYWxseXt0cnl7IVR0JiZ1dC5yZXR1cm4mJnV0LnJldHVybigpfWZpbmFsbHl7aWYoTXQpdGhyb3cgYnR9fXZhciBwbj0oY3Qrb3QpLzItKFdlK1l0KS8yLGt0PSEwLE9uPSExLHRuPXZvaWQgMDt0cnl7Zm9yKHZhciBNcj1zdFtTeW1ib2wuaXRlcmF0b3JdKCksSXI7IShrdD0oSXI9TXIubmV4dCgpKS5kb25lKTtrdD0hMCl7dmFyIFBuPUlyLnZhbHVlO2JlLnNldChQbixiZS5nZXQoUG4pK3BuKX19Y2F0Y2goRHQpe09uPSEwLHRuPUR0fWZpbmFsbHl7dHJ5eyFrdCYmTXIucmV0dXJuJiZNci5yZXR1cm4oKX1maW5hbGx5e2lmKE9uKXRocm93IHRufX19KX1yZXR1cm4gYmV9LCJmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50IiksUj1vKGZ1bmN0aW9uKFYpe3ZhciBUZT0wLFc9MCxwZT0wLHZlPTA7aWYoVi5mb3JFYWNoKGZ1bmN0aW9uKFZlKXtWZS5sZWZ0P2JbeC5nZXQoVmUubGVmdCldLWJbeC5nZXQoVmUucmlnaHQpXT49MD9UZSsrOlcrKzpUW3guZ2V0KFZlLnRvcCldLVRbeC5nZXQoVmUuYm90dG9tKV0+PTA/cGUrKzp2ZSsrfSksVGU+VyYmcGU+dmUpZm9yKHZhciBQZT0wO1BlPHguc2l6ZTtQZSsrKWJbUGVdPS0xKmJbUGVdLFRbUGVdPS0xKlRbUGVdO2Vsc2UgaWYoVGU+Vylmb3IodmFyIF9lPTA7X2U8eC5zaXplO19lKyspYltfZV09LTEqYltfZV07ZWxzZSBpZihwZT52ZSlmb3IodmFyIGJlPTA7YmU8eC5zaXplO2JlKyspVFtiZV09LTEqVFtiZV19LCJhcHBseVJlZmxlY3Rpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudCIpLGs9byhmdW5jdGlvbihWKXt2YXIgVGU9W10sVz1uZXcgZixwZT1uZXcgU2V0LHZlPTA7cmV0dXJuIFYuZm9yRWFjaChmdW5jdGlvbihQZSxfZSl7aWYoIXBlLmhhcyhfZSkpe1RlW3ZlXT1bXTt2YXIgYmU9X2U7Zm9yKFcucHVzaChiZSkscGUuYWRkKGJlKSxUZVt2ZV0ucHVzaChiZSk7Vy5sZW5ndGghPTA7KXtiZT1XLnNoaWZ0KCk7dmFyIFZlPVYuZ2V0KGJlKTtWZS5mb3JFYWNoKGZ1bmN0aW9uKERlKXtwZS5oYXMoRGUuaWQpfHwoVy5wdXNoKERlLmlkKSxwZS5hZGQoRGUuaWQpLFRlW3ZlXS5wdXNoKERlLmlkKSl9KX12ZSsrfX0pLFRlfSwiZmluZENvbXBvbmVudHMiKSxMPW8oZnVuY3Rpb24oVil7dmFyIFRlPW5ldyBNYXA7cmV0dXJuIFYuZm9yRWFjaChmdW5jdGlvbihXLHBlKXtUZS5zZXQocGUsW10pfSksVi5mb3JFYWNoKGZ1bmN0aW9uKFcscGUpe1cuZm9yRWFjaChmdW5jdGlvbih2ZSl7VGUuZ2V0KHBlKS5wdXNoKHZlKSxUZS5nZXQodmUuaWQpLnB1c2goe2lkOnBlLGdhcDp2ZS5nYXAsZGlyZWN0aW9uOnZlLmRpcmVjdGlvbn0pfSl9KSxUZX0sImRhZ1RvVW5kaXJlY3RlZCIpLEE9byhmdW5jdGlvbihWKXt2YXIgVGU9bmV3IE1hcDtyZXR1cm4gVi5mb3JFYWNoKGZ1bmN0aW9uKFcscGUpe1RlLnNldChwZSxbXSl9KSxWLmZvckVhY2goZnVuY3Rpb24oVyxwZSl7Vy5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtUZS5nZXQodmUuaWQpLnB1c2goe2lkOnBlLGdhcDp2ZS5nYXAsZGlyZWN0aW9uOnZlLmRpcmVjdGlvbn0pfSl9KSxUZX0sImRhZ1RvUmV2ZXJzZWQiKSxJPVtdLE09W10sUD0hMSxCPSExLEY9bmV3IFNldCx6PW5ldyBNYXAsJD1uZXcgTWFwLFU9W107aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihvZSl7Ri5hZGQob2Uubm9kZUlkKX0pLHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihvZSl7b2UubGVmdD8oei5oYXMob2UubGVmdCk/ei5nZXQob2UubGVmdCkucHVzaCh7aWQ6b2UucmlnaHQsZ2FwOm9lLmdhcCxkaXJlY3Rpb246Imhvcml6b250YWwifSk6ei5zZXQob2UubGVmdCxbe2lkOm9lLnJpZ2h0LGdhcDpvZS5nYXAsZGlyZWN0aW9uOiJob3Jpem9udGFsIn1dKSx6LmhhcyhvZS5yaWdodCl8fHouc2V0KG9lLnJpZ2h0LFtdKSk6KHouaGFzKG9lLnRvcCk/ei5nZXQob2UudG9wKS5wdXNoKHtpZDpvZS5ib3R0b20sZ2FwOm9lLmdhcCxkaXJlY3Rpb246InZlcnRpY2FsIn0pOnouc2V0KG9lLnRvcCxbe2lkOm9lLmJvdHRvbSxnYXA6b2UuZ2FwLGRpcmVjdGlvbjoidmVydGljYWwifV0pLHouaGFzKG9lLmJvdHRvbSl8fHouc2V0KG9lLmJvdHRvbSxbXSkpfSksJD1MKHopLFU9aygkKSksaC5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORyl7aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoPjEpeS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2UsVil7SVtWXT1bb2UucG9zaXRpb24ueCxvZS5wb3NpdGlvbi55XSxNW1ZdPVtiW3guZ2V0KG9lLm5vZGVJZCldLFRbeC5nZXQob2Uubm9kZUlkKV1dfSksUD0hMDtlbHNlIGlmKHkuYWxpZ25tZW50Q29uc3RyYWludCkoZnVuY3Rpb24oKXt2YXIgb2U9MDtpZih5LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpe2Zvcih2YXIgVj15LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsVGU9byhmdW5jdGlvbihiZSl7dmFyIFZlPW5ldyBTZXQ7VltiZV0uZm9yRWFjaChmdW5jdGlvbihhdCl7VmUuYWRkKGF0KX0pO3ZhciBEZT1uZXcgU2V0KFtdLmNvbmNhdCh1KFZlKSkuZmlsdGVyKGZ1bmN0aW9uKGF0KXtyZXR1cm4gRi5oYXMoYXQpfSkpLHFlPXZvaWQgMDtEZS5zaXplPjA/cWU9Ylt4LmdldChEZS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTpxZT1EKFZlKS54LFZbYmVdLmZvckVhY2goZnVuY3Rpb24oYXQpe0lbb2VdPVtxZSxUW3guZ2V0KGF0KV1dLE1bb2VdPVtiW3guZ2V0KGF0KV0sVFt4LmdldChhdCldXSxvZSsrfSl9LCJfbG9vcDIiKSxXPTA7VzxWLmxlbmd0aDtXKyspVGUoVyk7UD0hMH1pZih5LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCl7Zm9yKHZhciBwZT15LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCx2ZT1vKGZ1bmN0aW9uKGJlKXt2YXIgVmU9bmV3IFNldDtwZVtiZV0uZm9yRWFjaChmdW5jdGlvbihhdCl7VmUuYWRkKGF0KX0pO3ZhciBEZT1uZXcgU2V0KFtdLmNvbmNhdCh1KFZlKSkuZmlsdGVyKGZ1bmN0aW9uKGF0KXtyZXR1cm4gRi5oYXMoYXQpfSkpLHFlPXZvaWQgMDtEZS5zaXplPjA/cWU9Ylt4LmdldChEZS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTpxZT1EKFZlKS55LHBlW2JlXS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtJW29lXT1bYlt4LmdldChhdCldLHFlXSxNW29lXT1bYlt4LmdldChhdCldLFRbeC5nZXQoYXQpXV0sb2UrK30pfSwiX2xvb3AzIiksUGU9MDtQZTxwZS5sZW5ndGg7UGUrKyl2ZShQZSk7UD0hMH15LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmKEI9ITApfSkoKTtlbHNlIGlmKHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KXtmb3IodmFyIEs9MCxlZT0wLFk9MDtZPFUubGVuZ3RoO1krKylVW1ldLmxlbmd0aD5LJiYoSz1VW1ldLmxlbmd0aCxlZT1ZKTtpZihLPCQuc2l6ZS8yKVIoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpLFA9ITEsQj0hMTtlbHNle3ZhciBjZT1uZXcgTWFwLFo9bmV3IE1hcCx1ZT1bXTtVW2VlXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt6LmdldChvZSkuZm9yRWFjaChmdW5jdGlvbihWKXtWLmRpcmVjdGlvbj09Imhvcml6b250YWwiPyhjZS5oYXMob2UpP2NlLmdldChvZSkucHVzaChWKTpjZS5zZXQob2UsW1ZdKSxjZS5oYXMoVi5pZCl8fGNlLnNldChWLmlkLFtdKSx1ZS5wdXNoKHtsZWZ0Om9lLHJpZ2h0OlYuaWR9KSk6KFouaGFzKG9lKT9aLmdldChvZSkucHVzaChWKTpaLnNldChvZSxbVl0pLFouaGFzKFYuaWQpfHxaLnNldChWLmlkLFtdKSx1ZS5wdXNoKHt0b3A6b2UsYm90dG9tOlYuaWR9KSl9KX0pLFIodWUpLEI9ITE7dmFyIFE9TyhjZSwiaG9yaXpvbnRhbCIpLGo9TyhaLCJ2ZXJ0aWNhbCIpO1VbZWVdLmZvckVhY2goZnVuY3Rpb24ob2UsVil7TVtWXT1bYlt4LmdldChvZSldLFRbeC5nZXQob2UpXV0sSVtWXT1bXSxRLmhhcyhvZSk/SVtWXVswXT1RLmdldChvZSk6SVtWXVswXT1iW3guZ2V0KG9lKV0sai5oYXMob2UpP0lbVl1bMV09ai5nZXQob2UpOklbVl1bMV09VFt4LmdldChvZSldfSksUD0hMH19aWYoUCl7Zm9yKHZhciBuZT12b2lkIDAsdGU9ZC50cmFuc3Bvc2UoSSksaGU9ZC50cmFuc3Bvc2UoTSksbGU9MDtsZTx0ZS5sZW5ndGg7bGUrKyl0ZVtsZV09ZC5tdWx0R2FtbWEodGVbbGVdKSxoZVtsZV09ZC5tdWx0R2FtbWEoaGVbbGVdKTt2YXIgSj1kLm11bHRNYXQodGUsZC50cmFuc3Bvc2UoaGUpKSxTZT1wLnN2ZChKKTtuZT1kLm11bHRNYXQoU2UuVixkLnRyYW5zcG9zZShTZS5VKSk7Zm9yKHZhciBzZT0wO3NlPHguc2l6ZTtzZSsrKXt2YXIgYWU9W2Jbc2VdLFRbc2VdXSxPZT1bbmVbMF1bMF0sbmVbMV1bMF1dLHllPVtuZVswXVsxXSxuZVsxXVsxXV07YltzZV09ZC5kb3RQcm9kdWN0KGFlLE9lKSxUW3NlXT1kLmRvdFByb2R1Y3QoYWUseWUpfUImJlIoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfX1pZihoLkVORk9SQ0VfQ09OU1RSQUlOVFMpe2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aD4wKXt2YXIgQmU9e3g6MCx5OjB9O3kuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKG9lLFYpe3ZhciBUZT17eDpiW3guZ2V0KG9lLm5vZGVJZCldLHk6VFt4LmdldChvZS5ub2RlSWQpXX0sVz1vZS5wb3NpdGlvbixwZT1DKFcsVGUpO0JlLngrPXBlLngsQmUueSs9cGUueX0pLEJlLngvPXkuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGgsQmUueS89eS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aCxiLmZvckVhY2goZnVuY3Rpb24ob2UsVil7YltWXSs9QmUueH0pLFQuZm9yRWFjaChmdW5jdGlvbihvZSxWKXtUW1ZdKz1CZS55fSkseS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2Upe2JbeC5nZXQob2Uubm9kZUlkKV09b2UucG9zaXRpb24ueCxUW3guZ2V0KG9lLm5vZGVJZCldPW9lLnBvc2l0aW9uLnl9KX1pZih5LmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIEhlPXkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCx6ZT1vKGZ1bmN0aW9uKFYpe3ZhciBUZT1uZXcgU2V0O0hlW1ZdLmZvckVhY2goZnVuY3Rpb24odmUpe1RlLmFkZCh2ZSl9KTt2YXIgVz1uZXcgU2V0KFtdLmNvbmNhdCh1KFRlKSkuZmlsdGVyKGZ1bmN0aW9uKHZlKXtyZXR1cm4gRi5oYXModmUpfSkpLHBlPXZvaWQgMDtXLnNpemU+MD9wZT1iW3guZ2V0KFcudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06cGU9RChUZSkueCxUZS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtGLmhhcyh2ZSl8fChiW3guZ2V0KHZlKV09cGUpfSl9LCJfbG9vcDQiKSxMZT0wO0xlPEhlLmxlbmd0aDtMZSsrKXplKExlKTtpZih5LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbClmb3IodmFyIEllPXkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLHhlPW8oZnVuY3Rpb24oVil7dmFyIFRlPW5ldyBTZXQ7SWVbVl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7VGUuYWRkKHZlKX0pO3ZhciBXPW5ldyBTZXQoW10uY29uY2F0KHUoVGUpKS5maWx0ZXIoZnVuY3Rpb24odmUpe3JldHVybiBGLmhhcyh2ZSl9KSkscGU9dm9pZCAwO1cuc2l6ZT4wP3BlPVRbeC5nZXQoVy52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTpwZT1EKFRlKS55LFRlLmZvckVhY2goZnVuY3Rpb24odmUpe0YuaGFzKHZlKXx8KFRbeC5nZXQodmUpXT1wZSl9KX0sIl9sb29wNSIpLHE9MDtxPEllLmxlbmd0aDtxKyspeGUocSl9eS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJmZ1bmN0aW9uKCl7dmFyIG9lPW5ldyBNYXAsVj1uZXcgTWFwLFRlPW5ldyBNYXAsVz1uZXcgTWFwLHBlPW5ldyBNYXAsdmU9bmV3IE1hcCxQZT1uZXcgU2V0LF9lPW5ldyBTZXQ7aWYoRi5mb3JFYWNoKGZ1bmN0aW9uKEhyKXtQZS5hZGQoSHIpLF9lLmFkZChIcil9KSx5LmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIGJlPXkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxWZT1vKGZ1bmN0aW9uKGV0KXtUZS5zZXQoImR1bW15IitldCxbXSksYmVbZXRdLmZvckVhY2goZnVuY3Rpb24oZ3Qpe29lLnNldChndCwiZHVtbXkiK2V0KSxUZS5nZXQoImR1bW15IitldCkucHVzaChndCksRi5oYXMoZ3QpJiZQZS5hZGQoImR1bW15IitldCl9KSxwZS5zZXQoImR1bW15IitldCxiW3guZ2V0KGJlW2V0XVswXSldKX0sIl9sb29wNiIpLERlPTA7RGU8YmUubGVuZ3RoO0RlKyspVmUoRGUpO2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgcWU9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsYXQ9byhmdW5jdGlvbihldCl7Vy5zZXQoImR1bW15IitldCxbXSkscWVbZXRdLmZvckVhY2goZnVuY3Rpb24oZ3Qpe1Yuc2V0KGd0LCJkdW1teSIrZXQpLFcuZ2V0KCJkdW1teSIrZXQpLnB1c2goZ3QpLEYuaGFzKGd0KSYmX2UuYWRkKCJkdW1teSIrZXQpfSksdmUuc2V0KCJkdW1teSIrZXQsVFt4LmdldChxZVtldF1bMF0pXSl9LCJfbG9vcDciKSxSdD0wO1J0PHFlLmxlbmd0aDtSdCsrKWF0KFJ0KX12YXIgc3Q9bmV3IE1hcCxVZT1uZXcgTWFwLGN0PW8oZnVuY3Rpb24oZXQpe3ouZ2V0KGV0KS5mb3JFYWNoKGZ1bmN0aW9uKGd0KXt2YXIgS3Q9dm9pZCAwLGx0PXZvaWQgMDtndC5kaXJlY3Rpb249PSJob3Jpem9udGFsIj8oS3Q9b2UuZ2V0KGV0KT9vZS5nZXQoZXQpOmV0LG9lLmdldChndC5pZCk/bHQ9e2lkOm9lLmdldChndC5pZCksZ2FwOmd0LmdhcCxkaXJlY3Rpb246Z3QuZGlyZWN0aW9ufTpsdD1ndCxzdC5oYXMoS3QpP3N0LmdldChLdCkucHVzaChsdCk6c3Quc2V0KEt0LFtsdF0pLHN0LmhhcyhsdC5pZCl8fHN0LnNldChsdC5pZCxbXSkpOihLdD1WLmdldChldCk/Vi5nZXQoZXQpOmV0LFYuZ2V0KGd0LmlkKT9sdD17aWQ6Vi5nZXQoZ3QuaWQpLGdhcDpndC5nYXAsZGlyZWN0aW9uOmd0LmRpcmVjdGlvbn06bHQ9Z3QsVWUuaGFzKEt0KT9VZS5nZXQoS3QpLnB1c2gobHQpOlVlLnNldChLdCxbbHRdKSxVZS5oYXMobHQuaWQpfHxVZS5zZXQobHQuaWQsW10pKX0pfSwiX2xvb3A4IiksV2U9ITAsb3Q9ITEsWXQ9dm9pZCAwO3RyeXtmb3IodmFyIFR0PXoua2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSxNdDshKFdlPShNdD1UdC5uZXh0KCkpLmRvbmUpO1dlPSEwKXt2YXIgYnQ9TXQudmFsdWU7Y3QoYnQpfX1jYXRjaChIcil7b3Q9ITAsWXQ9SHJ9ZmluYWxseXt0cnl7IVdlJiZUdC5yZXR1cm4mJlR0LnJldHVybigpfWZpbmFsbHl7aWYob3QpdGhyb3cgWXR9fXZhciB1dD1MKHN0KSxTdD1MKFVlKSxmdD1rKHV0KSx2dD1rKFN0KSxudD1BKHN0KSxwbj1BKFVlKSxrdD1bXSxPbj1bXTtmdC5mb3JFYWNoKGZ1bmN0aW9uKEhyLGV0KXtrdFtldF09W10sSHIuZm9yRWFjaChmdW5jdGlvbihndCl7bnQuZ2V0KGd0KS5sZW5ndGg9PTAmJmt0W2V0XS5wdXNoKGd0KX0pfSksdnQuZm9yRWFjaChmdW5jdGlvbihIcixldCl7T25bZXRdPVtdLEhyLmZvckVhY2goZnVuY3Rpb24oZ3Qpe3BuLmdldChndCkubGVuZ3RoPT0wJiZPbltldF0ucHVzaChndCl9KX0pO3ZhciB0bj1PKHN0LCJob3Jpem9udGFsIixQZSxwZSxrdCksTXI9TyhVZSwidmVydGljYWwiLF9lLHZlLE9uKSxJcj1vKGZ1bmN0aW9uKGV0KXtUZS5nZXQoZXQpP1RlLmdldChldCkuZm9yRWFjaChmdW5jdGlvbihndCl7Ylt4LmdldChndCldPXRuLmdldChldCl9KTpiW3guZ2V0KGV0KV09dG4uZ2V0KGV0KX0sIl9sb29wOSIpLFBuPSEwLER0PSExLENlPXZvaWQgMDt0cnl7Zm9yKHZhciB0dD10bi5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLEN0OyEoUG49KEN0PXR0Lm5leHQoKSkuZG9uZSk7UG49ITApe3ZhciBncj1DdC52YWx1ZTtJcihncil9fWNhdGNoKEhyKXtEdD0hMCxDZT1Icn1maW5hbGx5e3RyeXshUG4mJnR0LnJldHVybiYmdHQucmV0dXJuKCl9ZmluYWxseXtpZihEdCl0aHJvdyBDZX19dmFyIHJuPW8oZnVuY3Rpb24oZXQpe1cuZ2V0KGV0KT9XLmdldChldCkuZm9yRWFjaChmdW5jdGlvbihndCl7VFt4LmdldChndCldPU1yLmdldChldCl9KTpUW3guZ2V0KGV0KV09TXIuZ2V0KGV0KX0sIl9sb29wMTAiKSx5bj0hMCxacj0hMSxPaT12b2lkIDA7dHJ5e2Zvcih2YXIgZWk9TXIua2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSxTbjshKHluPShTbj1laS5uZXh0KCkpLmRvbmUpO3luPSEwKXt2YXIgZ3I9U24udmFsdWU7cm4oZ3IpfX1jYXRjaChIcil7WnI9ITAsT2k9SHJ9ZmluYWxseXt0cnl7IXluJiZlaS5yZXR1cm4mJmVpLnJldHVybigpfWZpbmFsbHl7aWYoWnIpdGhyb3cgT2l9fX0oKX1mb3IodmFyIGRlPTA7ZGU8Uy5sZW5ndGg7ZGUrKyl7dmFyIGllPVNbZGVdO2llLmdldENoaWxkKCk9PW51bGwmJmllLnNldENlbnRlcihiW3guZ2V0KGllLmlkKV0sVFt4LmdldChpZS5pZCldKX19LGEuZXhwb3J0cz1tfSw1NTE6YT0+e2EuZXhwb3J0cz10fX0scj17fTtmdW5jdGlvbiBuKGEpe3ZhciBzPXJbYV07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBsPXJbYV09e2V4cG9ydHM6e319O3JldHVybiBlW2FdKGwsbC5leHBvcnRzLG4pLGwuZXhwb3J0c31vKG4sIl9fd2VicGFja19yZXF1aXJlX18iKTt2YXIgaT1uKDQ1KTtyZXR1cm4gaX0pKCl9KX0pO3ZhciBZMmU9UGkoKE80LGUkKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIE80PT0ib2JqZWN0IiYmdHlwZW9mIGUkPT0ib2JqZWN0Ij9lJC5leHBvcnRzPXIoSkYoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJjb3NlLWJhc2UiXSxyKTp0eXBlb2YgTzQ9PSJvYmplY3QiP080LmN5dG9zY2FwZUZjb3NlPXIoSkYoKSk6ZS5jeXRvc2NhcGVGY29zZT1yKGUuY29zZUJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShPNCxmdW5jdGlvbih0KXtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIGU9ezY1ODphPT57YS5leHBvcnRzPU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24ocyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShsPjE/bC0xOjApLGg9MTtoPGw7aCsrKXVbaC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihmKXtPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3JldHVybiBzW2RdPWZbZF19KX0pLHN9fSw1NDg6KGEscyxsKT0+e3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZChwLG0pe3ZhciBnPVtdLHk9ITAsdj0hMSx4PXZvaWQgMDt0cnl7Zm9yKHZhciBiPXBbU3ltYm9sLml0ZXJhdG9yXSgpLFQ7ISh5PShUPWIubmV4dCgpKS5kb25lKSYmKGcucHVzaChULnZhbHVlKSwhKG0mJmcubGVuZ3RoPT09bSkpO3k9ITApO31jYXRjaChTKXt2PSEwLHg9U31maW5hbGx5e3RyeXsheSYmYi5yZXR1cm4mJmIucmV0dXJuKCl9ZmluYWxseXtpZih2KXRocm93IHh9fXJldHVybiBnfXJldHVybiBvKGQsInNsaWNlSXRlcmF0b3IiKSxmdW5jdGlvbihwLG0pe2lmKEFycmF5LmlzQXJyYXkocCkpcmV0dXJuIHA7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChwKSlyZXR1cm4gZChwLG0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksaD1sKDE0MCkubGF5b3V0QmFzZS5MaW5rZWRMaXN0LGY9e307Zi5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24oZCl7Zm9yKHZhciBwPXt9LG09MDttPGQubGVuZ3RoO20rKylwW2RbbV0uaWQoKV09ITA7dmFyIGc9ZC5maWx0ZXIoZnVuY3Rpb24oeSx2KXt0eXBlb2YgeT09Im51bWJlciImJih5PXYpO2Zvcih2YXIgeD15LnBhcmVudCgpWzBdO3ghPW51bGw7KXtpZihwW3guaWQoKV0pcmV0dXJuITE7eD14LnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIGd9LGYuY29ubmVjdENvbXBvbmVudHM9ZnVuY3Rpb24oZCxwLG0sZyl7dmFyIHk9bmV3IGgsdj1uZXcgU2V0LHg9W10sYj12b2lkIDAsVD12b2lkIDAsUz12b2lkIDAsdz0hMSxFPTEsXz1bXSxDPVtdLEQ9byhmdW5jdGlvbigpe3ZhciBSPWQuY29sbGVjdGlvbigpO0MucHVzaChSKTt2YXIgaz1tWzBdLEw9ZC5jb2xsZWN0aW9uKCk7TC5tZXJnZShrKS5tZXJnZShrLmRlc2NlbmRhbnRzKCkuaW50ZXJzZWN0aW9uKHApKSx4LnB1c2goayksTC5mb3JFYWNoKGZ1bmN0aW9uKE0pe3kucHVzaChNKSx2LmFkZChNKSxSLm1lcmdlKE0pfSk7Zm9yKHZhciBBPW8oZnVuY3Rpb24oKXtrPXkuc2hpZnQoKTt2YXIgUD1kLmNvbGxlY3Rpb24oKTtrLm5laWdoYm9yaG9vZCgpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbigkKXtwLmludGVyc2VjdGlvbihrLmVkZ2VzV2l0aCgkKSkubGVuZ3RoPjAmJlAubWVyZ2UoJCl9KTtmb3IodmFyIEI9MDtCPFAubGVuZ3RoO0IrKyl7dmFyIEY9UFtCXTtpZihiPW0uaW50ZXJzZWN0aW9uKEYudW5pb24oRi5hbmNlc3RvcnMoKSkpLGIhPW51bGwmJiF2LmhhcyhiWzBdKSl7dmFyIHo9Yi51bmlvbihiLmRlc2NlbmRhbnRzKCkpO3ouZm9yRWFjaChmdW5jdGlvbigkKXt5LnB1c2goJCksdi5hZGQoJCksUi5tZXJnZSgkKSxtLmhhcygkKSYmeC5wdXNoKCQpfSl9fX0sIl9sb29wMiIpO3kubGVuZ3RoIT0wOylBKCk7aWYoUi5mb3JFYWNoKGZ1bmN0aW9uKE0pe3AuaW50ZXJzZWN0aW9uKE0uY29ubmVjdGVkRWRnZXMoKSkuZm9yRWFjaChmdW5jdGlvbihQKXtSLmhhcyhQLnNvdXJjZSgpKSYmUi5oYXMoUC50YXJnZXQoKSkmJlIubWVyZ2UoUCl9KX0pLHgubGVuZ3RoPT1tLmxlbmd0aCYmKHc9ITApLCF3fHx3JiZFPjEpe1Q9eFswXSxTPVQuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgseC5mb3JFYWNoKGZ1bmN0aW9uKE0pe00uY29ubmVjdGVkRWRnZXMoKS5sZW5ndGg8UyYmKFM9TS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCxUPU0pfSksXy5wdXNoKFQuaWQoKSk7dmFyIEk9ZC5jb2xsZWN0aW9uKCk7SS5tZXJnZSh4WzBdKSx4LmZvckVhY2goZnVuY3Rpb24oTSl7SS5tZXJnZShNKX0pLHg9W10sbT1tLmRpZmZlcmVuY2UoSSksRSsrfX0sIl9sb29wIik7ZG8gRCgpO3doaWxlKCF3KTtyZXR1cm4gZyYmXy5sZW5ndGg+MCYmZy5zZXQoImR1bW15IisoZy5zaXplKzEpLF8pLEN9LGYucmVsb2NhdGVDb21wb25lbnQ9ZnVuY3Rpb24oZCxwLG0pe2lmKCFtLmZpeGVkTm9kZUNvbnN0cmFpbnQpe3ZhciBnPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx5PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSx2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx4PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtpZihtLnF1YWxpdHk9PSJkcmFmdCIpe3ZhciBiPSEwLFQ9ITEsUz12b2lkIDA7dHJ5e2Zvcih2YXIgdz1wLm5vZGVJbmRleGVzW1N5bWJvbC5pdGVyYXRvcl0oKSxFOyEoYj0oRT13Lm5leHQoKSkuZG9uZSk7Yj0hMCl7dmFyIF89RS52YWx1ZSxDPXUoXywyKSxEPUNbMF0sTz1DWzFdLFI9bS5jeS5nZXRFbGVtZW50QnlJZChEKTtpZihSKXt2YXIgaz1SLmJvdW5kaW5nQm94KCksTD1wLnhDb29yZHNbT10tay53LzIsQT1wLnhDb29yZHNbT10ray53LzIsST1wLnlDb29yZHNbT10tay5oLzIsTT1wLnlDb29yZHNbT10ray5oLzI7TDxnJiYoZz1MKSxBPnkmJih5PUEpLEk8diYmKHY9SSksTT54JiYoeD1NKX19fWNhdGNoKCQpe1Q9ITAsUz0kfWZpbmFsbHl7dHJ5eyFiJiZ3LnJldHVybiYmdy5yZXR1cm4oKX1maW5hbGx5e2lmKFQpdGhyb3cgU319dmFyIFA9ZC54LSh5K2cpLzIsQj1kLnktKHgrdikvMjtwLnhDb29yZHM9cC54Q29vcmRzLm1hcChmdW5jdGlvbigkKXtyZXR1cm4gJCtQfSkscC55Q29vcmRzPXAueUNvb3Jkcy5tYXAoZnVuY3Rpb24oJCl7cmV0dXJuICQrQn0pfWVsc2V7T2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbigkKXt2YXIgVT1wWyRdLEs9VS5nZXRSZWN0KCkueCxlZT1VLmdldFJlY3QoKS54K1UuZ2V0UmVjdCgpLndpZHRoLFk9VS5nZXRSZWN0KCkueSxjZT1VLmdldFJlY3QoKS55K1UuZ2V0UmVjdCgpLmhlaWdodDtLPGcmJihnPUspLGVlPnkmJih5PWVlKSxZPHYmJih2PVkpLGNlPngmJih4PWNlKX0pO3ZhciBGPWQueC0oeStnKS8yLHo9ZC55LSh4K3YpLzI7T2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbigkKXt2YXIgVT1wWyRdO1Uuc2V0Q2VudGVyKFUuZ2V0Q2VudGVyWCgpK0YsVS5nZXRDZW50ZXJZKCkreil9KX19fSxmLmNhbGNCb3VuZGluZ0JveD1mdW5jdGlvbihkLHAsbSxnKXtmb3IodmFyIHk9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdj1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUix4PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLGI9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsVD12b2lkIDAsUz12b2lkIDAsdz12b2lkIDAsRT12b2lkIDAsXz1kLmRlc2NlbmRhbnRzKCkubm90KCI6cGFyZW50IiksQz1fLmxlbmd0aCxEPTA7RDxDO0QrKyl7dmFyIE89X1tEXTtUPXBbZy5nZXQoTy5pZCgpKV0tTy53aWR0aCgpLzIsUz1wW2cuZ2V0KE8uaWQoKSldK08ud2lkdGgoKS8yLHc9bVtnLmdldChPLmlkKCkpXS1PLmhlaWdodCgpLzIsRT1tW2cuZ2V0KE8uaWQoKSldK08uaGVpZ2h0KCkvMix5PlQmJih5PVQpLHY8UyYmKHY9UykseD53JiYoeD13KSxiPEUmJihiPUUpfXZhciBSPXt9O3JldHVybiBSLnRvcExlZnRYPXksUi50b3BMZWZ0WT14LFIud2lkdGg9di15LFIuaGVpZ2h0PWIteCxSfSxmLmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5jb2xsZWN0aW9uKCk7cmV0dXJuIHAubm9kZXMoIjpwYXJlbnQiKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3ZhciB5PSExO2cuY2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3YuY3NzKCJkaXNwbGF5IikhPSJub25lIiYmKHk9ITApfSkseXx8bS5tZXJnZShnKX0pLG19LGEuZXhwb3J0cz1mfSw4MTY6KGEscyxsKT0+e3ZhciB1PWwoNTQ4KSxoPWwoMTQwKS5Db1NFTGF5b3V0LGY9bCgxNDApLkNvU0VOb2RlLGQ9bCgxNDApLmxheW91dEJhc2UuUG9pbnRELHA9bCgxNDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxtPWwoMTQwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyxnPWwoMTQwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLHk9bCgxNDApLkNvU0VDb25zdGFudHMsdj1vKGZ1bmN0aW9uKGIsVCl7dmFyIFM9Yi5jeSx3PWIuZWxlcyxFPXcubm9kZXMoKSxfPXcuZWRnZXMoKSxDPXZvaWQgMCxEPXZvaWQgMCxPPXZvaWQgMCxSPXt9O2IucmFuZG9taXplJiYoQz1ULm5vZGVJbmRleGVzLEQ9VC54Q29vcmRzLE89VC55Q29vcmRzKTt2YXIgaz1vKGZ1bmN0aW9uKCQpe3JldHVybiB0eXBlb2YgJD09ImZ1bmN0aW9uIn0sImlzRm4iKSxMPW8oZnVuY3Rpb24oJCxVKXtyZXR1cm4gaygkKT8kKFUpOiR9LCJvcHRGbiIpLEE9dS5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbihTLHcpLEk9byhmdW5jdGlvbiB6KCQsVSxLLGVlKXtmb3IodmFyIFk9VS5sZW5ndGgsY2U9MDtjZTxZO2NlKyspe3ZhciBaPVVbY2VdLHVlPW51bGw7Wi5pbnRlcnNlY3Rpb24oQSkubGVuZ3RoPT0wJiYodWU9Wi5jaGlsZHJlbigpKTt2YXIgUT12b2lkIDAsaj1aLmxheW91dERpbWVuc2lvbnMoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczplZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZihaLm91dGVyV2lkdGgoKSE9bnVsbCYmWi5vdXRlckhlaWdodCgpIT1udWxsKWlmKGVlLnJhbmRvbWl6ZSlpZighWi5pc1BhcmVudCgpKVE9JC5hZGQobmV3IGYoSy5ncmFwaE1hbmFnZXIsbmV3IGQoRFtDLmdldChaLmlkKCkpXS1qLncvMixPW0MuZ2V0KFouaWQoKSldLWouaC8yKSxuZXcgcChwYXJzZUZsb2F0KGoudykscGFyc2VGbG9hdChqLmgpKSkpO2Vsc2V7dmFyIG5lPXUuY2FsY0JvdW5kaW5nQm94KFosRCxPLEMpO1ouaW50ZXJzZWN0aW9uKEEpLmxlbmd0aD09MD9RPSQuYWRkKG5ldyBmKEsuZ3JhcGhNYW5hZ2VyLG5ldyBkKG5lLnRvcExlZnRYLG5lLnRvcExlZnRZKSxuZXcgcChuZS53aWR0aCxuZS5oZWlnaHQpKSk6UT0kLmFkZChuZXcgZihLLmdyYXBoTWFuYWdlcixuZXcgZChuZS50b3BMZWZ0WCxuZS50b3BMZWZ0WSksbmV3IHAocGFyc2VGbG9hdChqLncpLHBhcnNlRmxvYXQoai5oKSkpKX1lbHNlIFE9JC5hZGQobmV3IGYoSy5ncmFwaE1hbmFnZXIsbmV3IGQoWi5wb3NpdGlvbigieCIpLWoudy8yLFoucG9zaXRpb24oInkiKS1qLmgvMiksbmV3IHAocGFyc2VGbG9hdChqLncpLHBhcnNlRmxvYXQoai5oKSkpKTtlbHNlIFE9JC5hZGQobmV3IGYodGhpcy5ncmFwaE1hbmFnZXIpKTtpZihRLmlkPVouZGF0YSgiaWQiKSxRLm5vZGVSZXB1bHNpb249TChlZS5ub2RlUmVwdWxzaW9uLFopLFEucGFkZGluZ0xlZnQ9cGFyc2VJbnQoWi5jc3MoInBhZGRpbmciKSksUS5wYWRkaW5nVG9wPXBhcnNlSW50KFouY3NzKCJwYWRkaW5nIikpLFEucGFkZGluZ1JpZ2h0PXBhcnNlSW50KFouY3NzKCJwYWRkaW5nIikpLFEucGFkZGluZ0JvdHRvbT1wYXJzZUludChaLmNzcygicGFkZGluZyIpKSxlZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJihRLmxhYmVsV2lkdGg9Wi5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITEsaW5jbHVkZU92ZXJsYXlzOiExfSkudyxRLmxhYmVsSGVpZ2h0PVouYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExLGluY2x1ZGVPdmVybGF5czohMX0pLmgsUS5sYWJlbFBvc1ZlcnRpY2FsPVouY3NzKCJ0ZXh0LXZhbGlnbiIpLFEubGFiZWxQb3NIb3Jpem9udGFsPVouY3NzKCJ0ZXh0LWhhbGlnbiIpKSxSW1ouZGF0YSgiaWQiKV09USxpc05hTihRLnJlY3QueCkmJihRLnJlY3QueD0wKSxpc05hTihRLnJlY3QueSkmJihRLnJlY3QueT0wKSx1ZSE9bnVsbCYmdWUubGVuZ3RoPjApe3ZhciB0ZT12b2lkIDA7dGU9Sy5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoSy5uZXdHcmFwaCgpLFEpLHoodGUsdWUsSyxlZSl9fX0sInByb2Nlc3NDaGlsZHJlbkxpc3QiKSxNPW8oZnVuY3Rpb24oJCxVLEspe2Zvcih2YXIgZWU9MCxZPTAsY2U9MDtjZTxLLmxlbmd0aDtjZSsrKXt2YXIgWj1LW2NlXSx1ZT1SW1ouZGF0YSgic291cmNlIildLFE9UltaLmRhdGEoInRhcmdldCIpXTtpZih1ZSYmUSYmdWUhPT1RJiZ1ZS5nZXRFZGdlc0JldHdlZW4oUSkubGVuZ3RoPT0wKXt2YXIgaj1VLmFkZCgkLm5ld0VkZ2UoKSx1ZSxRKTtqLmlkPVouaWQoKSxqLmlkZWFsTGVuZ3RoPUwoYi5pZGVhbEVkZ2VMZW5ndGgsWiksai5lZGdlRWxhc3RpY2l0eT1MKGIuZWRnZUVsYXN0aWNpdHksWiksZWUrPWouaWRlYWxMZW5ndGgsWSsrfX1iLmlkZWFsRWRnZUxlbmd0aCE9bnVsbCYmKFk+MD95LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWVlL1k6ayhiLmlkZWFsRWRnZUxlbmd0aCk/eS5ERUZBVUxUX0VER0VfTEVOR1RIPWcuREVGQVVMVF9FREdFX0xFTkdUSD01MDp5LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWIuaWRlYWxFZGdlTGVuZ3RoLHkuTUlOX1JFUFVMU0lPTl9ESVNUPWcuTUlOX1JFUFVMU0lPTl9ESVNUPWcuREVGQVVMVF9FREdFX0xFTkdUSC8xMCx5LkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049Zy5ERUZBVUxUX0VER0VfTEVOR1RIKX0sInByb2Nlc3NFZGdlcyIpLFA9byhmdW5jdGlvbigkLFUpe1UuZml4ZWROb2RlQ29uc3RyYWludCYmKCQuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludD1VLmZpeGVkTm9kZUNvbnN0cmFpbnQpLFUuYWxpZ25tZW50Q29uc3RyYWludCYmKCQuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludD1VLmFsaWdubWVudENvbnN0cmFpbnQpLFUucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoJC5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9VS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfSwicHJvY2Vzc0NvbnN0cmFpbnRzIik7Yi5uZXN0aW5nRmFjdG9yIT1udWxsJiYoeS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWcuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1iLm5lc3RpbmdGYWN0b3IpLGIuZ3Jhdml0eSE9bnVsbCYmKHkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eSksYi5udW1JdGVyIT1udWxsJiYoeS5NQVhfSVRFUkFUSU9OUz1nLk1BWF9JVEVSQVRJT05TPWIubnVtSXRlciksYi5ncmF2aXR5UmFuZ2UhPW51bGwmJih5LkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Zy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWIuZ3Jhdml0eVJhbmdlKSxiLmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKHkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eUNvbXBvdW5kKSxiLmdyYXZpdHlSYW5nZUNvbXBvdW5kIT1udWxsJiYoeS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1iLmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxiLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsIT1udWxsJiYoeS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWcuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1iLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsKSxiLnRpbGluZ0NvbXBhcmVCeSE9bnVsbCYmKHkuVElMSU5HX0NPTVBBUkVfQlk9Yi50aWxpbmdDb21wYXJlQnkpLGIucXVhbGl0eT09InByb29mIj9tLlFVQUxJVFk9MjptLlFVQUxJVFk9MCx5Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1nLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1tLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyx5LkRFRkFVTFRfSU5DUkVNRU5UQUw9Zy5ERUZBVUxUX0lOQ1JFTUVOVEFMPW0uREVGQVVMVF9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUseS5BTklNQVRFPWcuQU5JTUFURT1tLkFOSU1BVEU9Yi5hbmltYXRlLHkuVElMRT1iLnRpbGUseS5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/Yi50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOmIudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLHkuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj9iLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpiLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLHkuREVGQVVMVF9JTkNSRU1FTlRBTD1nLkRFRkFVTFRfSU5DUkVNRU5UQUw9bS5ERUZBVUxUX0lOQ1JFTUVOVEFMPSEwLHkuUFVSRV9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUsbS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPWIudW5pZm9ybU5vZGVEaW1lbnNpb25zLGIuc3RlcD09InRyYW5zZm9ybWVkIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITAseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSExLHkuQVBQTFlfTEFZT1VUPSExKSxiLnN0ZXA9PSJlbmZvcmNlZCImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMCx5LkFQUExZX0xBWU9VVD0hMSksYi5zdGVwPT0iY29zZSImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMSx5LkFQUExZX0xBWU9VVD0hMCksYi5zdGVwPT0iYWxsIiYmKGIucmFuZG9taXplP3kuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITA6eS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMSx5LkVORk9SQ0VfQ09OU1RSQUlOVFM9ITAseS5BUFBMWV9MQVlPVVQ9ITApLGIuZml4ZWROb2RlQ29uc3RyYWludHx8Yi5hbGlnbm1lbnRDb25zdHJhaW50fHxiLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD95LlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExOnkuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITA7dmFyIEI9bmV3IGgsRj1CLm5ld0dyYXBoTWFuYWdlcigpO3JldHVybiBJKEYuYWRkUm9vdCgpLHUuZ2V0VG9wTW9zdE5vZGVzKEUpLEIsYiksTShCLEYsXyksUChCLGIpLEIucnVuTGF5b3V0KCksUn0sImNvc2VMYXlvdXQiKTthLmV4cG9ydHM9e2Nvc2VMYXlvdXQ6dn19LDIxMjooYSxzLGwpPT57dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKFQsUyl7Zm9yKHZhciB3PTA7dzxTLmxlbmd0aDt3Kyspe3ZhciBFPVNbd107RS5lbnVtZXJhYmxlPUUuZW51bWVyYWJsZXx8ITEsRS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEUmJihFLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVCxFLmtleSxFKX19cmV0dXJuIG8oYiwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKFQsUyx3KXtyZXR1cm4gUyYmYihULnByb3RvdHlwZSxTKSx3JiZiKFQsdyksVH19KCk7ZnVuY3Rpb24gaChiLFQpe2lmKCEoYiBpbnN0YW5jZW9mIFQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaCwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGY9bCg2NTgpLGQ9bCg1NDgpLHA9bCg2NTcpLG09cC5zcGVjdHJhbExheW91dCxnPWwoODE2KSx5PWcuY29zZUxheW91dCx2PU9iamVjdC5mcmVlemUoe3F1YWxpdHk6ImRlZmF1bHQiLHJhbmRvbWl6ZTohMCxhbmltYXRlOiEwLGFuaW1hdGlvbkR1cmF0aW9uOjFlMyxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGZpdDohMCxwYWRkaW5nOjMwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSx1bmlmb3JtTm9kZURpbWVuc2lvbnM6ITEscGFja0NvbXBvbmVudHM6ITAsc3RlcDoiYWxsIixzYW1wbGluZ1R5cGU6ITAsc2FtcGxlU2l6ZToyNSxub2RlU2VwYXJhdGlvbjo3NSxwaVRvbDoxZS03LG5vZGVSZXB1bHNpb246byhmdW5jdGlvbihUKXtyZXR1cm4gNDUwMH0sIm5vZGVSZXB1bHNpb24iKSxpZGVhbEVkZ2VMZW5ndGg6byhmdW5jdGlvbihUKXtyZXR1cm4gNTB9LCJpZGVhbEVkZ2VMZW5ndGgiKSxlZGdlRWxhc3RpY2l0eTpvKGZ1bmN0aW9uKFQpe3JldHVybiAuNDV9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsdGlsaW5nQ29tcGFyZUJ5OnZvaWQgMCx0aWxpbmdQYWRkaW5nVmVydGljYWw6MTAsdGlsaW5nUGFkZGluZ0hvcml6b250YWw6MTAsZ3Jhdml0eVJhbmdlQ29tcG91bmQ6MS41LGdyYXZpdHlDb21wb3VuZDoxLGdyYXZpdHlSYW5nZTozLjgsaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWw6LjMsZml4ZWROb2RlQ29uc3RyYWludDp2b2lkIDAsYWxpZ25tZW50Q29uc3RyYWludDp2b2lkIDAscmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50OnZvaWQgMCxyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIil9KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihUKXtoKHRoaXMsYiksdGhpcy5vcHRpb25zPWYoe30sdixUKX1yZXR1cm4gbyhiLCJMYXlvdXQiKSx1KGIsW3trZXk6InJ1biIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMsdz10aGlzLm9wdGlvbnMsRT13LmN5LF89dy5lbGVzLEM9W10sRD12b2lkIDAsTz12b2lkIDAsUj1bXSxrPXZvaWQgMCxMPVtdO3cuZml4ZWROb2RlQ29uc3RyYWludCYmKCFBcnJheS5pc0FycmF5KHcuZml4ZWROb2RlQ29uc3RyYWludCl8fHcuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGg9PTApJiYody5maXhlZE5vZGVDb25zdHJhaW50PXZvaWQgMCksdy5hbGlnbm1lbnRDb25zdHJhaW50JiYody5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsJiYoIUFycmF5LmlzQXJyYXkody5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKXx8dy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLmxlbmd0aD09MCkmJih3LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWw9dm9pZCAwKSx3LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCYmKCFBcnJheS5pc0FycmF5KHcuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKXx8dy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwubGVuZ3RoPT0wKSYmKHcuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsPXZvaWQgMCkpLHcucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoIUFycmF5LmlzQXJyYXkody5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfHx3LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5sZW5ndGg9PTApJiYody5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9dm9pZCAwKTt2YXIgQT13LmZpeGVkTm9kZUNvbnN0cmFpbnR8fHcuYWxpZ25tZW50Q29uc3RyYWludHx8dy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7QSYmKHcudGlsZT0hMSx3LnBhY2tDb21wb25lbnRzPSExKTt2YXIgST12b2lkIDAsTT0hMTtpZihFLmxheW91dFV0aWxpdGllcyYmdy5wYWNrQ29tcG9uZW50cyYmKEk9RS5sYXlvdXRVdGlsaXRpZXMoImdldCIpLEl8fChJPUUubGF5b3V0VXRpbGl0aWVzKCkpLE09ITApLF8ubm9kZXMoKS5sZW5ndGg+MClpZihNKXt2YXIgRj1kLmdldFRvcE1vc3ROb2Rlcyh3LmVsZXMubm9kZXMoKSk7aWYoaz1kLmNvbm5lY3RDb21wb25lbnRzKEUsdy5lbGVzLEYpLGsuZm9yRWFjaChmdW5jdGlvbihzZSl7dmFyIGFlPXNlLmJvdW5kaW5nQm94KCk7TC5wdXNoKHt4OmFlLngxK2FlLncvMix5OmFlLnkxK2FlLmgvMn0pfSksdy5yYW5kb21pemUmJmsuZm9yRWFjaChmdW5jdGlvbihzZSl7dy5lbGVzPXNlLEMucHVzaChtKHcpKX0pLHcucXVhbGl0eT09ImRlZmF1bHQifHx3LnF1YWxpdHk9PSJwcm9vZiIpe3ZhciB6PUUuY29sbGVjdGlvbigpO2lmKHcudGlsZSl7dmFyICQ9bmV3IE1hcCxVPVtdLEs9W10sZWU9MCxZPXtub2RlSW5kZXhlczokLHhDb29yZHM6VSx5Q29vcmRzOkt9LGNlPVtdO2lmKGsuZm9yRWFjaChmdW5jdGlvbihzZSxhZSl7c2UuZWRnZXMoKS5sZW5ndGg9PTAmJihzZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oT2UseWUpe3oubWVyZ2Uoc2Uubm9kZXMoKVt5ZV0pLE9lLmlzUGFyZW50KCl8fChZLm5vZGVJbmRleGVzLnNldChzZS5ub2RlcygpW3llXS5pZCgpLGVlKyspLFkueENvb3Jkcy5wdXNoKHNlLm5vZGVzKClbMF0ucG9zaXRpb24oKS54KSxZLnlDb29yZHMucHVzaChzZS5ub2RlcygpWzBdLnBvc2l0aW9uKCkueSkpfSksY2UucHVzaChhZSkpfSksei5sZW5ndGg+MSl7dmFyIFo9ei5ib3VuZGluZ0JveCgpO0wucHVzaCh7eDpaLngxK1oudy8yLHk6Wi55MStaLmgvMn0pLGsucHVzaCh6KSxDLnB1c2goWSk7Zm9yKHZhciB1ZT1jZS5sZW5ndGgtMTt1ZT49MDt1ZS0tKWsuc3BsaWNlKGNlW3VlXSwxKSxDLnNwbGljZShjZVt1ZV0sMSksTC5zcGxpY2UoY2VbdWVdLDEpfX1rLmZvckVhY2goZnVuY3Rpb24oc2UsYWUpe3cuZWxlcz1zZSxSLnB1c2goeSh3LENbYWVdKSksZC5yZWxvY2F0ZUNvbXBvbmVudChMW2FlXSxSW2FlXSx3KX0pfWVsc2Ugay5mb3JFYWNoKGZ1bmN0aW9uKHNlLGFlKXtkLnJlbG9jYXRlQ29tcG9uZW50KExbYWVdLENbYWVdLHcpfSk7dmFyIFE9bmV3IFNldDtpZihrLmxlbmd0aD4xKXt2YXIgaj1bXSxuZT1fLmZpbHRlcihmdW5jdGlvbihzZSl7cmV0dXJuIHNlLmNzcygiZGlzcGxheSIpPT0ibm9uZSJ9KTtrLmZvckVhY2goZnVuY3Rpb24oc2UsYWUpe3ZhciBPZT12b2lkIDA7aWYody5xdWFsaXR5PT0iZHJhZnQiJiYoT2U9Q1thZV0ubm9kZUluZGV4ZXMpLHNlLm5vZGVzKCkubm90KG5lKS5sZW5ndGg+MCl7dmFyIHllPXt9O3llLmVkZ2VzPVtdLHllLm5vZGVzPVtdO3ZhciBCZT12b2lkIDA7c2Uubm9kZXMoKS5ub3QobmUpLmZvckVhY2goZnVuY3Rpb24oSGUpe2lmKHcucXVhbGl0eT09ImRyYWZ0IilpZighSGUuaXNQYXJlbnQoKSlCZT1PZS5nZXQoSGUuaWQoKSkseWUubm9kZXMucHVzaCh7eDpDW2FlXS54Q29vcmRzW0JlXS1IZS5ib3VuZGluZ2JveCgpLncvMix5OkNbYWVdLnlDb29yZHNbQmVdLUhlLmJvdW5kaW5nYm94KCkuaC8yLHdpZHRoOkhlLmJvdW5kaW5nYm94KCkudyxoZWlnaHQ6SGUuYm91bmRpbmdib3goKS5ofSk7ZWxzZXt2YXIgemU9ZC5jYWxjQm91bmRpbmdCb3goSGUsQ1thZV0ueENvb3JkcyxDW2FlXS55Q29vcmRzLE9lKTt5ZS5ub2Rlcy5wdXNoKHt4OnplLnRvcExlZnRYLHk6emUudG9wTGVmdFksd2lkdGg6emUud2lkdGgsaGVpZ2h0OnplLmhlaWdodH0pfWVsc2UgUlthZV1bSGUuaWQoKV0mJnllLm5vZGVzLnB1c2goe3g6UlthZV1bSGUuaWQoKV0uZ2V0TGVmdCgpLHk6UlthZV1bSGUuaWQoKV0uZ2V0VG9wKCksd2lkdGg6UlthZV1bSGUuaWQoKV0uZ2V0V2lkdGgoKSxoZWlnaHQ6UlthZV1bSGUuaWQoKV0uZ2V0SGVpZ2h0KCl9KX0pLHNlLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihIZSl7dmFyIHplPUhlLnNvdXJjZSgpLExlPUhlLnRhcmdldCgpO2lmKHplLmNzcygiZGlzcGxheSIpIT0ibm9uZSImJkxlLmNzcygiZGlzcGxheSIpIT0ibm9uZSIpaWYody5xdWFsaXR5PT0iZHJhZnQiKXt2YXIgSWU9T2UuZ2V0KHplLmlkKCkpLHhlPU9lLmdldChMZS5pZCgpKSxxPVtdLGRlPVtdO2lmKHplLmlzUGFyZW50KCkpe3ZhciBpZT1kLmNhbGNCb3VuZGluZ0JveCh6ZSxDW2FlXS54Q29vcmRzLENbYWVdLnlDb29yZHMsT2UpO3EucHVzaChpZS50b3BMZWZ0WCtpZS53aWR0aC8yKSxxLnB1c2goaWUudG9wTGVmdFkraWUuaGVpZ2h0LzIpfWVsc2UgcS5wdXNoKENbYWVdLnhDb29yZHNbSWVdKSxxLnB1c2goQ1thZV0ueUNvb3Jkc1tJZV0pO2lmKExlLmlzUGFyZW50KCkpe3ZhciBvZT1kLmNhbGNCb3VuZGluZ0JveChMZSxDW2FlXS54Q29vcmRzLENbYWVdLnlDb29yZHMsT2UpO2RlLnB1c2gob2UudG9wTGVmdFgrb2Uud2lkdGgvMiksZGUucHVzaChvZS50b3BMZWZ0WStvZS5oZWlnaHQvMil9ZWxzZSBkZS5wdXNoKENbYWVdLnhDb29yZHNbeGVdKSxkZS5wdXNoKENbYWVdLnlDb29yZHNbeGVdKTt5ZS5lZGdlcy5wdXNoKHtzdGFydFg6cVswXSxzdGFydFk6cVsxXSxlbmRYOmRlWzBdLGVuZFk6ZGVbMV19KX1lbHNlIFJbYWVdW3plLmlkKCldJiZSW2FlXVtMZS5pZCgpXSYmeWUuZWRnZXMucHVzaCh7c3RhcnRYOlJbYWVdW3plLmlkKCldLmdldENlbnRlclgoKSxzdGFydFk6UlthZV1bemUuaWQoKV0uZ2V0Q2VudGVyWSgpLGVuZFg6UlthZV1bTGUuaWQoKV0uZ2V0Q2VudGVyWCgpLGVuZFk6UlthZV1bTGUuaWQoKV0uZ2V0Q2VudGVyWSgpfSl9KSx5ZS5ub2Rlcy5sZW5ndGg+MCYmKGoucHVzaCh5ZSksUS5hZGQoYWUpKX19KTt2YXIgdGU9SS5wYWNrQ29tcG9uZW50cyhqLHcucmFuZG9taXplKS5zaGlmdHM7aWYody5xdWFsaXR5PT0iZHJhZnQiKUMuZm9yRWFjaChmdW5jdGlvbihzZSxhZSl7dmFyIE9lPXNlLnhDb29yZHMubWFwKGZ1bmN0aW9uKEJlKXtyZXR1cm4gQmUrdGVbYWVdLmR4fSkseWU9c2UueUNvb3Jkcy5tYXAoZnVuY3Rpb24oQmUpe3JldHVybiBCZSt0ZVthZV0uZHl9KTtzZS54Q29vcmRzPU9lLHNlLnlDb29yZHM9eWV9KTtlbHNle3ZhciBoZT0wO1EuZm9yRWFjaChmdW5jdGlvbihzZSl7T2JqZWN0LmtleXMoUltzZV0pLmZvckVhY2goZnVuY3Rpb24oYWUpe3ZhciBPZT1SW3NlXVthZV07T2Uuc2V0Q2VudGVyKE9lLmdldENlbnRlclgoKSt0ZVtoZV0uZHgsT2UuZ2V0Q2VudGVyWSgpK3RlW2hlXS5keSl9KSxoZSsrfSl9fX1lbHNle3ZhciBQPXcuZWxlcy5ib3VuZGluZ0JveCgpO2lmKEwucHVzaCh7eDpQLngxK1Audy8yLHk6UC55MStQLmgvMn0pLHcucmFuZG9taXplKXt2YXIgQj1tKHcpO0MucHVzaChCKX13LnF1YWxpdHk9PSJkZWZhdWx0Inx8dy5xdWFsaXR5PT0icHJvb2YiPyhSLnB1c2goeSh3LENbMF0pKSxkLnJlbG9jYXRlQ29tcG9uZW50KExbMF0sUlswXSx3KSk6ZC5yZWxvY2F0ZUNvbXBvbmVudChMWzBdLENbMF0sdyl9dmFyIGxlPW8oZnVuY3Rpb24oYWUsT2Upe2lmKHcucXVhbGl0eT09ImRlZmF1bHQifHx3LnF1YWxpdHk9PSJwcm9vZiIpe3R5cGVvZiBhZT09Im51bWJlciImJihhZT1PZSk7dmFyIHllPXZvaWQgMCxCZT12b2lkIDAsSGU9YWUuZGF0YSgiaWQiKTtyZXR1cm4gUi5mb3JFYWNoKGZ1bmN0aW9uKExlKXtIZSBpbiBMZSYmKHllPXt4OkxlW0hlXS5nZXRSZWN0KCkuZ2V0Q2VudGVyWCgpLHk6TGVbSGVdLmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9LEJlPUxlW0hlXSl9KSx3Lm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmKEJlLmxhYmVsV2lkdGgmJihCZS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij95ZS54Kz1CZS5sYWJlbFdpZHRoLzI6QmUubGFiZWxQb3NIb3Jpem9udGFsPT0icmlnaHQiJiYoeWUueC09QmUubGFiZWxXaWR0aC8yKSksQmUubGFiZWxIZWlnaHQmJihCZS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj95ZS55Kz1CZS5sYWJlbEhlaWdodC8yOkJlLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiYoeWUueS09QmUubGFiZWxIZWlnaHQvMikpKSx5ZT09bnVsbCYmKHllPXt4OmFlLnBvc2l0aW9uKCJ4IikseTphZS5wb3NpdGlvbigieSIpfSkse3g6eWUueCx5OnllLnl9fWVsc2V7dmFyIHplPXZvaWQgMDtyZXR1cm4gQy5mb3JFYWNoKGZ1bmN0aW9uKExlKXt2YXIgSWU9TGUubm9kZUluZGV4ZXMuZ2V0KGFlLmlkKCkpO0llIT1udWxsJiYoemU9e3g6TGUueENvb3Jkc1tJZV0seTpMZS55Q29vcmRzW0llXX0pfSksemU9PW51bGwmJih6ZT17eDphZS5wb3NpdGlvbigieCIpLHk6YWUucG9zaXRpb24oInkiKX0pLHt4OnplLngseTp6ZS55fX19LCJnZXRQb3NpdGlvbnMiKTtpZih3LnF1YWxpdHk9PSJkZWZhdWx0Inx8dy5xdWFsaXR5PT0icHJvb2YifHx3LnJhbmRvbWl6ZSl7dmFyIEo9ZC5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbihFLF8pLFNlPV8uZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuY3NzKCJkaXNwbGF5Iik9PSJub25lIn0pO3cuZWxlcz1fLm5vdChTZSksXy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLm5vdChTZSkubGF5b3V0UG9zaXRpb25zKFMsdyxsZSksSi5sZW5ndGg+MCYmSi5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtzZS5wb3NpdGlvbihsZShzZSkpfSl9ZWxzZSBjb25zb2xlLmxvZygiSWYgcmFuZG9taXplIG9wdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gcXVhbGl0eSBvcHRpb24gbXVzdCBiZSAnZGVmYXVsdCcgb3IgJ3Byb29mJy4iKX0sInJ1biIpfV0pLGJ9KCk7YS5leHBvcnRzPXh9LDY1NzooYSxzLGwpPT57dmFyIHU9bCg1NDgpLGg9bCgxNDApLmxheW91dEJhc2UuTWF0cml4LGY9bCgxNDApLmxheW91dEJhc2UuU1ZELGQ9byhmdW5jdGlvbihtKXt2YXIgZz1tLmN5LHk9bS5lbGVzLHY9eS5ub2RlcygpLHg9eS5ub2RlcygiOnBhcmVudCIpLGI9bmV3IE1hcCxUPW5ldyBNYXAsUz1uZXcgTWFwLHc9W10sRT1bXSxfPVtdLEM9W10sRD1bXSxPPVtdLFI9W10saz1bXSxMPXZvaWQgMCxBPXZvaWQgMCxJPTFlOCxNPTFlLTksUD1tLnBpVG9sLEI9bS5zYW1wbGluZ1R5cGUsRj1tLm5vZGVTZXBhcmF0aW9uLHo9dm9pZCAwLCQ9byhmdW5jdGlvbigpe2Zvcih2YXIgVGU9MCxXPTAscGU9ITE7Vzx6Oyl7VGU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKkEpLHBlPSExO2Zvcih2YXIgdmU9MDt2ZTxXO3ZlKyspaWYoQ1t2ZV09PVRlKXtwZT0hMDticmVha31pZighcGUpQ1tXXT1UZSxXKys7ZWxzZSBjb250aW51ZX19LCJyYW5kb21TYW1wbGVDUiIpLFU9byhmdW5jdGlvbihUZSxXLHBlKXtmb3IodmFyIHZlPVtdLFBlPTAsX2U9MCxiZT0wLFZlPXZvaWQgMCxEZT1bXSxxZT0wLGF0PTEsUnQ9MDtSdDxBO1J0KyspRGVbUnRdPUk7Zm9yKHZlW19lXT1UZSxEZVtUZV09MDtfZT49UGU7KXtiZT12ZVtQZSsrXTtmb3IodmFyIHN0PXdbYmVdLFVlPTA7VWU8c3QubGVuZ3RoO1VlKyspVmU9VC5nZXQoc3RbVWVdKSxEZVtWZV09PUkmJihEZVtWZV09RGVbYmVdKzEsdmVbKytfZV09VmUpO09bYmVdW1ddPURlW2JlXSpGfWlmKHBlKXtmb3IodmFyIGN0PTA7Y3Q8QTtjdCsrKU9bY3RdW1ddPERbY3RdJiYoRFtjdF09T1tjdF1bV10pO2Zvcih2YXIgV2U9MDtXZTxBO1dlKyspRFtXZV0+cWUmJihxZT1EW1dlXSxhdD1XZSl9cmV0dXJuIGF0fSwiQkZTIiksSz1vKGZ1bmN0aW9uKFRlKXt2YXIgVz12b2lkIDA7aWYoVGUpe1c9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKkEpLEw9Vztmb3IodmFyIHZlPTA7dmU8QTt2ZSsrKURbdmVdPUk7Zm9yKHZhciBQZT0wO1BlPHo7UGUrKylDW1BlXT1XLFc9VShXLFBlLFRlKX1lbHNleyQoKTtmb3IodmFyIHBlPTA7cGU8ejtwZSsrKVUoQ1twZV0scGUsVGUsITEpfWZvcih2YXIgX2U9MDtfZTxBO19lKyspZm9yKHZhciBiZT0wO2JlPHo7YmUrKylPW19lXVtiZV0qPU9bX2VdW2JlXTtmb3IodmFyIFZlPTA7VmU8ejtWZSsrKVJbVmVdPVtdO2Zvcih2YXIgRGU9MDtEZTx6O0RlKyspZm9yKHZhciBxZT0wO3FlPHo7cWUrKylSW0RlXVtxZV09T1tDW3FlXV1bRGVdfSwiYWxsQkZTIiksZWU9byhmdW5jdGlvbigpe2Zvcih2YXIgVGU9Zi5zdmQoUiksVz1UZS5TLHBlPVRlLlUsdmU9VGUuVixQZT1XWzBdKldbMF0qV1swXSxfZT1bXSxiZT0wO2JlPHo7YmUrKyl7X2VbYmVdPVtdO2Zvcih2YXIgVmU9MDtWZTx6O1ZlKyspX2VbYmVdW1ZlXT0wLGJlPT1WZSYmKF9lW2JlXVtWZV09V1tiZV0vKFdbYmVdKldbYmVdK1BlLyhXW2JlXSpXW2JlXSkpKX1rPWgubXVsdE1hdChoLm11bHRNYXQodmUsX2UpLGgudHJhbnNwb3NlKHBlKSl9LCJzYW1wbGUiKSxZPW8oZnVuY3Rpb24oKXtmb3IodmFyIFRlPXZvaWQgMCxXPXZvaWQgMCxwZT1bXSx2ZT1bXSxQZT1bXSxfZT1bXSxiZT0wO2JlPEE7YmUrKylwZVtiZV09TWF0aC5yYW5kb20oKSx2ZVtiZV09TWF0aC5yYW5kb20oKTtwZT1oLm5vcm1hbGl6ZShwZSksdmU9aC5ub3JtYWxpemUodmUpO2Zvcih2YXIgVmU9MCxEZT1NLHFlPU0sYXQ9dm9pZCAwOzspe1ZlKys7Zm9yKHZhciBSdD0wO1J0PEE7UnQrKylQZVtSdF09cGVbUnRdO2lmKHBlPWgubXVsdEdhbW1hKGgubXVsdEwoaC5tdWx0R2FtbWEoUGUpLE8saykpLFRlPWguZG90UHJvZHVjdChQZSxwZSkscGU9aC5ub3JtYWxpemUocGUpLERlPWguZG90UHJvZHVjdChQZSxwZSksYXQ9TWF0aC5hYnMoRGUvcWUpLGF0PD0xK1AmJmF0Pj0xKWJyZWFrO3FlPURlfWZvcih2YXIgc3Q9MDtzdDxBO3N0KyspUGVbc3RdPXBlW3N0XTtmb3IoVmU9MCxxZT1NOzspe1ZlKys7Zm9yKHZhciBVZT0wO1VlPEE7VWUrKylfZVtVZV09dmVbVWVdO2lmKF9lPWgubWludXNPcChfZSxoLm11bHRDb25zKFBlLGguZG90UHJvZHVjdChQZSxfZSkpKSx2ZT1oLm11bHRHYW1tYShoLm11bHRMKGgubXVsdEdhbW1hKF9lKSxPLGspKSxXPWguZG90UHJvZHVjdChfZSx2ZSksdmU9aC5ub3JtYWxpemUodmUpLERlPWguZG90UHJvZHVjdChfZSx2ZSksYXQ9TWF0aC5hYnMoRGUvcWUpLGF0PD0xK1AmJmF0Pj0xKWJyZWFrO3FlPURlfWZvcih2YXIgY3Q9MDtjdDxBO2N0KyspX2VbY3RdPXZlW2N0XTtFPWgubXVsdENvbnMoUGUsTWF0aC5zcXJ0KE1hdGguYWJzKFRlKSkpLF89aC5tdWx0Q29ucyhfZSxNYXRoLnNxcnQoTWF0aC5hYnMoVykpKX0sInBvd2VySXRlcmF0aW9uIik7dS5jb25uZWN0Q29tcG9uZW50cyhnLHksdS5nZXRUb3BNb3N0Tm9kZXModiksYikseC5mb3JFYWNoKGZ1bmN0aW9uKFYpe3UuY29ubmVjdENvbXBvbmVudHMoZyx5LHUuZ2V0VG9wTW9zdE5vZGVzKFYuZGVzY2VuZGFudHMoKS5pbnRlcnNlY3Rpb24oeSkpLGIpfSk7Zm9yKHZhciBjZT0wLFo9MDtaPHYubGVuZ3RoO1orKyl2W1pdLmlzUGFyZW50KCl8fFQuc2V0KHZbWl0uaWQoKSxjZSsrKTt2YXIgdWU9ITAsUT0hMSxqPXZvaWQgMDt0cnl7Zm9yKHZhciBuZT1iLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksdGU7ISh1ZT0odGU9bmUubmV4dCgpKS5kb25lKTt1ZT0hMCl7dmFyIGhlPXRlLnZhbHVlO1Quc2V0KGhlLGNlKyspfX1jYXRjaChWKXtRPSEwLGo9Vn1maW5hbGx5e3RyeXshdWUmJm5lLnJldHVybiYmbmUucmV0dXJuKCl9ZmluYWxseXtpZihRKXRocm93IGp9fWZvcih2YXIgbGU9MDtsZTxULnNpemU7bGUrKyl3W2xlXT1bXTt4LmZvckVhY2goZnVuY3Rpb24oVil7Zm9yKHZhciBUZT1WLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKHkpO1RlLm5vZGVzKCI6Y2hpbGRsZXNzIikubGVuZ3RoPT0wOylUZT1UZS5ub2RlcygpWzBdLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKHkpO3ZhciBXPTAscGU9VGUubm9kZXMoIjpjaGlsZGxlc3MiKVswXS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtUZS5ub2RlcygiOmNoaWxkbGVzcyIpLmZvckVhY2goZnVuY3Rpb24odmUsUGUpe3ZlLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoPHBlJiYocGU9dmUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgsVz1QZSl9KSxTLnNldChWLmlkKCksVGUubm9kZXMoIjpjaGlsZGxlc3MiKVtXXS5pZCgpKX0pLHYuZm9yRWFjaChmdW5jdGlvbihWKXt2YXIgVGU9dm9pZCAwO1YuaXNQYXJlbnQoKT9UZT1ULmdldChTLmdldChWLmlkKCkpKTpUZT1ULmdldChWLmlkKCkpLFYubmVpZ2hib3Job29kKCkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFcpe3kuaW50ZXJzZWN0aW9uKFYuZWRnZXNXaXRoKFcpKS5sZW5ndGg+MCYmKFcuaXNQYXJlbnQoKT93W1RlXS5wdXNoKFMuZ2V0KFcuaWQoKSkpOndbVGVdLnB1c2goVy5pZCgpKSl9KX0pO3ZhciBKPW8oZnVuY3Rpb24oVGUpe3ZhciBXPVQuZ2V0KFRlKSxwZT12b2lkIDA7Yi5nZXQoVGUpLmZvckVhY2goZnVuY3Rpb24odmUpe2cuZ2V0RWxlbWVudEJ5SWQodmUpLmlzUGFyZW50KCk/cGU9Uy5nZXQodmUpOnBlPXZlLHdbV10ucHVzaChwZSksd1tULmdldChwZSldLnB1c2goVGUpfSl9LCJfbG9vcCIpLFNlPSEwLHNlPSExLGFlPXZvaWQgMDt0cnl7Zm9yKHZhciBPZT1iLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCkseWU7IShTZT0oeWU9T2UubmV4dCgpKS5kb25lKTtTZT0hMCl7dmFyIEJlPXllLnZhbHVlO0ooQmUpfX1jYXRjaChWKXtzZT0hMCxhZT1WfWZpbmFsbHl7dHJ5eyFTZSYmT2UucmV0dXJuJiZPZS5yZXR1cm4oKX1maW5hbGx5e2lmKHNlKXRocm93IGFlfX1BPVQuc2l6ZTt2YXIgSGU9dm9pZCAwO2lmKEE+Mil7ej1BPG0uc2FtcGxlU2l6ZT9BOm0uc2FtcGxlU2l6ZTtmb3IodmFyIHplPTA7emU8QTt6ZSsrKU9bemVdPVtdO2Zvcih2YXIgTGU9MDtMZTx6O0xlKyspa1tMZV09W107cmV0dXJuIG0ucXVhbGl0eT09ImRyYWZ0Inx8bS5zdGVwPT0iYWxsIj8oSyhCKSxlZSgpLFkoKSxIZT17bm9kZUluZGV4ZXM6VCx4Q29vcmRzOkUseUNvb3JkczpffSk6KFQuZm9yRWFjaChmdW5jdGlvbihWLFRlKXtFLnB1c2goZy5nZXRFbGVtZW50QnlJZChUZSkucG9zaXRpb24oIngiKSksXy5wdXNoKGcuZ2V0RWxlbWVudEJ5SWQoVGUpLnBvc2l0aW9uKCJ5IikpfSksSGU9e25vZGVJbmRleGVzOlQseENvb3JkczpFLHlDb29yZHM6X30pLEhlfWVsc2V7dmFyIEllPVQua2V5cygpLHhlPWcuZ2V0RWxlbWVudEJ5SWQoSWUubmV4dCgpLnZhbHVlKSxxPXhlLnBvc2l0aW9uKCksZGU9eGUub3V0ZXJXaWR0aCgpO2lmKEUucHVzaChxLngpLF8ucHVzaChxLnkpLEE9PTIpe3ZhciBpZT1nLmdldEVsZW1lbnRCeUlkKEllLm5leHQoKS52YWx1ZSksb2U9aWUub3V0ZXJXaWR0aCgpO0UucHVzaChxLngrZGUvMitvZS8yK20uaWRlYWxFZGdlTGVuZ3RoKSxfLnB1c2gocS55KX1yZXR1cm4gSGU9e25vZGVJbmRleGVzOlQseENvb3JkczpFLHlDb29yZHM6X30sSGV9fSwic3BlY3RyYWxMYXlvdXQiKTthLmV4cG9ydHM9e3NwZWN0cmFsTGF5b3V0OmR9fSw1Nzk6KGEscyxsKT0+e3ZhciB1PWwoMjEyKSxoPW8oZnVuY3Rpb24oZCl7ZCYmZCgibGF5b3V0IiwiZmNvc2UiLHUpfSwicmVnaXN0ZXIiKTt0eXBlb2YgY3l0b3NjYXBlPCJ1IiYmaChjeXRvc2NhcGUpLGEuZXhwb3J0cz1ofSwxNDA6YT0+e2EuZXhwb3J0cz10fX0scj17fTtmdW5jdGlvbiBuKGEpe3ZhciBzPXJbYV07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBsPXJbYV09e2V4cG9ydHM6e319O3JldHVybiBlW2FdKGwsbC5leHBvcnRzLG4pLGwuZXhwb3J0c31vKG4sIl9fd2VicGFja19yZXF1aXJlX18iKTt2YXIgaT1uKDU3OSk7cmV0dXJuIGl9KSgpfSl9KTt2YXIgeHksbDAsdCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqbCgpO3h5PW8odD0+YDxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPiR7dH08L2c+YCwid3JhcEljb24iKSxsMD17cHJlZml4OiJtZXJtYWlkLWFyY2hpdGVjdHVyZSIsaGVpZ2h0OjgwLHdpZHRoOjgwLGljb25zOntkYXRhYmFzZTp7Ym9keTp4eSgnPHBhdGggaWQ9ImIiIGRhdGEtbmFtZT0iNCIgZD0ibTIwLDU3Ljg2YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBpZD0iYyIgZGF0YS1uYW1lPSIzIiBkPSJtMjAsNDUuOTVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxwYXRoIGlkPSJkIiBkYXRhLW5hbWU9IjIiIGQ9Im0yMCwzNC4wNWMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgaWQ9ImUiIGRhdGEtbmFtZT0iMSIgY3g9IjQwIiBjeT0iMjIuMTQiIHJ4PSIyMCIgcnk9IjcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjIwIiB5MT0iNTcuODYiIHgyPSIyMCIgeTI9IjIyLjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSI2MCIgeTE9IjU3Ljg2IiB4Mj0iNjAiIHkyPSIyMi4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sc2VydmVyOntib2R5Onh5KCc8cmVjdCB4PSIxNy41IiB5PSIxNy41IiB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIHJ4PSIyIiByeT0iMiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTcuNSIgeTE9IjMyLjUiIHgyPSI2Mi41IiB5Mj0iMzIuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTcuNSIgeTE9IjQ3LjUiIHgyPSI2Mi41IiB5Mj0iNDcuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48Zz48cGF0aCBkPSJtNTYuMjUsMjVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48cGF0aCBkPSJtNTYuMjUsNDBjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48cGF0aCBkPSJtNTYuMjUsNTVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDU1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48Y2lyY2xlIGN4PSIzMi41IiBjeT0iMjUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjI3LjUiIGN5PSIyNSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjI1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PGNpcmNsZSBjeD0iMzIuNSIgY3k9IjQwIiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyNy41IiBjeT0iNDAiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjIyLjUiIGN5PSI0MCIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PC9nPjxnPjxjaXJjbGUgY3g9IjMyLjUiIGN5PSI1NSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjcuNSIgY3k9IjU1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyMi41IiBjeT0iNTUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz4nKX0sZGlzazp7Ym9keTp4eSgnPHJlY3QgeD0iMjAiIHk9IjE1IiB3aWR0aD0iNDAiIGhlaWdodD0iNTAiIHJ4PSIxIiByeT0iMSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iMjQiIGN5PSIxOS4xNyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSI1NiIgY3k9IjE5LjE3IiByeD0iLjgiIHJ5PSIuODMiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjI0IiBjeT0iNjAuODMiIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNTYiIGN5PSI2MC44MyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSI0MCIgY3k9IjMzLjc1IiByeD0iMTQiIHJ5PSIxNC41OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNDAiIGN5PSIzMy43NSIgcng9IjQiIHJ5PSI0LjE3IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxwYXRoIGQ9Im0zNy41MSw0Mi41MmwtNC44MywxMy4yMmMtLjI2LjcxLTEuMSwxLjAyLTEuNzYuNjRsLTQuMTgtMi40MmMtLjY2LS4zOC0uODEtMS4yNi0uMzMtMS44NGw5LjAxLTEwLjhjLjg4LTEuMDUsMi41Ni0uMDgsMi4wOSwxLjJaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+Jyl9LGludGVybmV0Ontib2R5Onh5KCc8Y2lyY2xlIGN4PSI0MCIgY3k9IjQwIiByPSIyMi41IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSI0MCIgeTE9IjE3LjUiIHgyPSI0MCIgeTI9IjYyLjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSI0MCIgeDI9IjYyLjUiIHkyPSI0MCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtMzkuOTksMTcuNTFjLTE1LjI4LDExLjEtMTUuMjgsMzMuODgsMCw0NC45OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtNDAuMDEsMTcuNTFjMTUuMjgsMTEuMSwxNS4yOCwzMy44OCwwLDQ0Ljk4IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxOS43NSIgeTE9IjMwLjEiIHgyPSI2MC4yNSIgeTI9IjMwLjEiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE5Ljc1IiB5MT0iNDkuOSIgeDI9IjYwLjI1IiB5Mj0iNDkuOSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sY2xvdWQ6e2JvZHk6eHkoJzxwYXRoIGQ9Im02NSw0Ny41YzAsMi43Ni0yLjI0LDUtNSw1SDIwYy0yLjc2LDAtNS0yLjI0LTUtNSwwLTEuODcsMS4wMy0zLjUxLDIuNTYtNC4zNi0uMDQtLjIxLS4wNi0uNDItLjA2LS42NCwwLTIuNiwyLjQ4LTQuNzQsNS42NS00Ljk3LDEuNjUtNC41MSw2LjM0LTcuNzYsMTEuODUtNy43Ni44NiwwLDEuNjkuMDgsMi41LjIzLDIuMDktMS41Nyw0LjY5LTIuNSw3LjUtMi41LDYuMSwwLDExLjE5LDQuMzgsMTIuMjgsMTAuMTcsMi4xNC41NiwzLjcyLDIuNTEsMy43Miw0LjgzLDAsLjAzLDAsLjA3LS4wMS4xLDIuMjkuNDYsNC4wMSwyLjQ4LDQuMDEsNC45WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sdW5rbm93bjp0NyxibGFuazp7Ym9keTp4eSgiIil9fX19KTt2YXIgWDJlLGoyZSxLMmUsUTJlLFoyZT1OKCgpPT57InVzZSBzdHJpY3QiO2psKCk7R3QoKTthbygpO040KCk7dCQoKTtBQygpO1gyZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSl7bGV0IHI9TWkoInBhZGRpbmciKSxuPU1pKCJpY29uU2l6ZSIpLGk9bi8yLGE9bi82LHM9YS8yO2F3YWl0IFByb21pc2UuYWxsKGUuZWRnZXMoKS5tYXAoYXN5bmMgbD0+e2xldHtzb3VyY2U6dSxzb3VyY2VEaXI6aCxzb3VyY2VBcnJvdzpmLHNvdXJjZUdyb3VwOmQsdGFyZ2V0OnAsdGFyZ2V0RGlyOm0sdGFyZ2V0QXJyb3c6Zyx0YXJnZXRHcm91cDp5LGxhYmVsOnZ9PUNDKGwpLHt4LHk6Yn09bFswXS5zb3VyY2VFbmRwb2ludCgpLHt4OlQseTpTfT1sWzBdLm1pZHBvaW50KCkse3g6dyx5OkV9PWxbMF0udGFyZ2V0RW5kcG9pbnQoKSxfPXIrNDtpZihkJiYoamEoaCk/eCs9aD09PSJMIj8tXzpfOmIrPWg9PT0iVCI/LV86XysxOCkseSYmKGphKG0pP3crPW09PT0iTCI/LV86XzpFKz1tPT09IlQiPy1fOl8rMTgpLCFkJiZvMC5nZXROb2RlKHUpPy50eXBlPT09Imp1bmN0aW9uIiYmKGphKGgpP3grPWg9PT0iTCI/aTotaTpiKz1oPT09IlQiP2k6LWkpLCF5JiZvMC5nZXROb2RlKHApPy50eXBlPT09Imp1bmN0aW9uIiYmKGphKG0pP3crPW09PT0iTCI/aTotaTpFKz1tPT09IlQiP2k6LWkpLGxbMF0uX3ByaXZhdGUucnNjcmF0Y2gpe2xldCBDPXQuaW5zZXJ0KCJnIik7aWYoQy5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke3h9LCR7Yn0gTCAke1R9LCR7U30gTCR7d30sJHtFfSBgKS5hdHRyKCJjbGFzcyIsImVkZ2UiKSxmKXtsZXQgRD1qYShoKT9ENFtoXSh4LGEpOngtcyxPPXJ1KGgpP0Q0W2hdKGIsYSk6Yi1zO0MuaW5zZXJ0KCJwb2x5Z29uIikuYXR0cigicG9pbnRzIixZRltoXShhKSkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7RH0sJHtPfSlgKS5hdHRyKCJjbGFzcyIsImFycm93Iil9aWYoZyl7bGV0IEQ9amEobSk/RDRbbV0odyxhKTp3LXMsTz1ydShtKT9ENFttXShFLGEpOkUtcztDLmluc2VydCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsWUZbbV0oYSkpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke0R9LCR7T30pYCkuYXR0cigiY2xhc3MiLCJhcnJvdyIpfWlmKHYpe2xldCBEPUw0KGgsbSk/IlhZIjpqYShoKT8iWCI6IlkiLE89MDtEPT09IlgiP089TWF0aC5hYnMoeC13KTpEPT09IlkiP089TWF0aC5hYnMoYi1FKS8xLjU6Tz1NYXRoLmFicyh4LXcpLzI7bGV0IFI9Qy5hcHBlbmQoImciKTtpZihhd2FpdCBxbihSLHYse3VzZUh0bWxMYWJlbHM6ITEsd2lkdGg6TyxjbGFzc2VzOiJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbCJ9LG1lKCkpLFIuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIiksRD09PSJYIilSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QrIiwgIitTKyIpIik7ZWxzZSBpZihEPT09IlkiKVIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVCsiLCAiK1MrIikgcm90YXRlKC05MCkiKTtlbHNlIGlmKEQ9PT0iWFkiKXtsZXQgaz1SNChoLG0pO2lmKGsmJk8yZShrKSl7bGV0IEw9Ui5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksW0EsSV09QjJlKGspO1IuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixgcm90YXRlKCR7LTEqQSpJKjQ1fSlgKTtsZXQgTT1SLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtSLmF0dHIoInRyYW5zZm9ybSIsYAogICAgICAgICAgICAgICAgdHJhbnNsYXRlKCR7VH0sICR7Uy1MLmhlaWdodC8yfSkKICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke0EqTS53aWR0aC8yfSwgJHtJKk0uaGVpZ2h0LzJ9KQogICAgICAgICAgICAgICAgcm90YXRlKCR7LTEqQSpJKjQ1fSwgMCwgJHtMLmhlaWdodC8yfSkKICAgICAgICAgICAgICBgKX19fX19KSl9LCJkcmF3RWRnZXMiKSxqMmU9byhhc3luYyBmdW5jdGlvbih0LGUpe2xldCBuPU1pKCJwYWRkaW5nIikqLjc1LGk9TWkoImZvbnRTaXplIikscz1NaSgiaWNvblNpemUiKS8yO2F3YWl0IFByb21pc2UuYWxsKGUubm9kZXMoKS5tYXAoYXN5bmMgbD0+e2xldCB1PVlmKGwpO2lmKHUudHlwZT09PSJncm91cCIpe2xldHtoLHc6Zix4MTpkLHkxOnB9PWwuYm91bmRpbmdCb3goKTt0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGQrcykuYXR0cigieSIscCtzKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixoKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIik7bGV0IG09dC5hcHBlbmQoImciKSxnPWQseT1wO2lmKHUuaWNvbil7bGV0IHY9bS5hcHBlbmQoImciKTt2Lmh0bWwoYDxnPiR7YXdhaXQgRXModS5pY29uLHtoZWlnaHQ6bix3aWR0aDpuLGZhbGxiYWNrUHJlZml4OmwwLnByZWZpeH0pfTwvZz5gKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhnK3MrMSkrIiwgIisoeStzKzEpKyIpIiksZys9bix5Kz1pLzItMS0yfWlmKHUubGFiZWwpe2xldCB2PW0uYXBwZW5kKCJnIik7YXdhaXQgcW4odix1LmxhYmVsLHt1c2VIdG1sTGFiZWxzOiExLHdpZHRoOmYsY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxtZSgpKSx2LmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJzdGFydCIpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhnK3MrNCkrIiwgIisoeStzKzIpKyIpIil9fX0pKX0sImRyYXdHcm91cHMiKSxLMmU9byhhc3luYyBmdW5jdGlvbih0LGUscil7Zm9yKGxldCBuIG9mIHIpe2xldCBpPWUuYXBwZW5kKCJnIiksYT1NaSgiaWNvblNpemUiKTtpZihuLnRpdGxlKXtsZXQgaD1pLmFwcGVuZCgiZyIpO2F3YWl0IHFuKGgsbi50aXRsZSx7dXNlSHRtbExhYmVsczohMSx3aWR0aDphKjEuNSxjbGFzc2VzOiJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbCJ9LG1lKCkpLGguYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIiksaC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLzIrIiwgIithKyIpIil9bGV0IHM9aS5hcHBlbmQoImciKTtpZihuLmljb24pcy5odG1sKGA8Zz4ke2F3YWl0IEVzKG4uaWNvbix7aGVpZ2h0OmEsd2lkdGg6YSxmYWxsYmFja1ByZWZpeDpsMC5wcmVmaXh9KX08L2c+YCk7ZWxzZSBpZihuLmljb25UZXh0KXtzLmh0bWwoYDxnPiR7YXdhaXQgRXMoImJsYW5rIix7aGVpZ2h0OmEsd2lkdGg6YSxmYWxsYmFja1ByZWZpeDpsMC5wcmVmaXh9KX08L2c+YCk7bGV0IGQ9cy5hcHBlbmQoImciKS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixhKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLXRleHQiKS5hdHRyKCJzdHlsZSIsYGhlaWdodDogJHthfXB4O2ApLmFwcGVuZCgiZGl2IikuaHRtbChuLmljb25UZXh0KSxwPXBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQubm9kZSgpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoImZvbnQtc2l6ZSIpLnJlcGxhY2UoL1xEL2csIiIpKT8/MTY7ZC5hdHRyKCJzdHlsZSIsYC13ZWJraXQtbGluZS1jbGFtcDogJHtNYXRoLmZsb29yKChhLTIpL3ApfTtgKX1lbHNlIHMuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJub2RlLWJrZyIpLmF0dHIoImlkIiwibm9kZS0iK24uaWQpLmF0dHIoImQiLGBNMCAke2F9IHYkey1hfSBxMCwtNSA1LC01IGgke2F9IHE1LDAgNSw1IHYke2F9IEgwIFpgKTtpLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLXNlcnZpY2UiKTtsZXR7d2lkdGg6bCxoZWlnaHQ6dX09aS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSx0LnNldEVsZW1lbnRGb3JJZChuLmlkLGkpfXJldHVybiAwfSwiZHJhd1NlcnZpY2VzIiksUTJlPW8oZnVuY3Rpb24odCxlLHIpe3IuZm9yRWFjaChuPT57bGV0IGk9ZS5hcHBlbmQoImciKSxhPU1pKCJpY29uU2l6ZSIpO2kuYXBwZW5kKCJnIikuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrbi5pZCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMCIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLGEpLGkuYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtanVuY3Rpb24iKTtsZXR7d2lkdGg6bCxoZWlnaHQ6dX09aS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtpLndpZHRoPWwsaS5oZWlnaHQ9dSx0LnNldEVsZW1lbnRGb3JJZChuLmlkLGkpfSl9LCJkcmF3SnVuY3Rpb25zIil9KTtmdW5jdGlvbiBIbnQodCxlKXt0LmZvckVhY2gocj0+e2UuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e3R5cGU6InNlcnZpY2UiLGlkOnIuaWQsaWNvbjpyLmljb24sbGFiZWw6ci50aXRsZSxwYXJlbnQ6ci5pbix3aWR0aDpNaSgiaWNvblNpemUiKSxoZWlnaHQ6TWkoImljb25TaXplIil9LGNsYXNzZXM6Im5vZGUtc2VydmljZSJ9KX0pfWZ1bmN0aW9uIFdudCh0LGUpe3QuZm9yRWFjaChyPT57ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7dHlwZToianVuY3Rpb24iLGlkOnIuaWQscGFyZW50OnIuaW4sd2lkdGg6TWkoImljb25TaXplIiksaGVpZ2h0Ok1pKCJpY29uU2l6ZSIpfSxjbGFzc2VzOiJub2RlLWp1bmN0aW9uIn0pfSl9ZnVuY3Rpb24gcW50KHQsZSl7ZS5ub2RlcygpLm1hcChyPT57bGV0IG49WWYocik7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bi54PXIucG9zaXRpb24oKS54LG4ueT1yLnBvc2l0aW9uKCkueSx0LmdldEVsZW1lbnRCeUlkKG4uaWQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLnh8fDApKyIsIisobi55fHwwKSsiKSIpfSl9ZnVuY3Rpb24gWW50KHQsZSl7dC5mb3JFYWNoKHI9PntlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOnt0eXBlOiJncm91cCIsaWQ6ci5pZCxpY29uOnIuaWNvbixsYWJlbDpyLnRpdGxlLHBhcmVudDpyLmlufSxjbGFzc2VzOiJub2RlLWdyb3VwIn0pfSl9ZnVuY3Rpb24gWG50KHQsZSl7dC5mb3JFYWNoKHI9PntsZXR7bGhzSWQ6bixyaHNJZDppLGxoc0ludG86YSxsaHNHcm91cDpzLHJoc0ludG86bCxsaHNEaXI6dSxyaHNEaXI6aCxyaHNHcm91cDpmLHRpdGxlOmR9PXIscD1MNChyLmxoc0RpcixyLnJoc0Rpcik/InNlZ21lbnRzIjoic3RyYWlnaHQiLG09e2lkOmAke259LSR7aX1gLGxhYmVsOmQsc291cmNlOm4sc291cmNlRGlyOnUsc291cmNlQXJyb3c6YSxzb3VyY2VHcm91cDpzLHNvdXJjZUVuZHBvaW50OnU9PT0iTCI/IjAgNTAlIjp1PT09IlIiPyIxMDAlIDUwJSI6dT09PSJUIj8iNTAlIDAiOiI1MCUgMTAwJSIsdGFyZ2V0OmksdGFyZ2V0RGlyOmgsdGFyZ2V0QXJyb3c6bCx0YXJnZXRHcm91cDpmLHRhcmdldEVuZHBvaW50Omg9PT0iTCI/IjAgNTAlIjpoPT09IlIiPyIxMDAlIDUwJSI6aD09PSJUIj8iNTAlIDAiOiI1MCUgMTAwJSJ9O2UuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6bSxjbGFzc2VzOnB9KX0pfWZ1bmN0aW9uIGpudCh0LGUscil7bGV0IG49bygobCx1KT0+T2JqZWN0LmVudHJpZXMobCkucmVkdWNlKChoLFtmLGRdKT0+e2xldCBwPTAsbT1PYmplY3QuZW50cmllcyhkKTtpZihtLmxlbmd0aD09PTEpcmV0dXJuIGhbZl09bVswXVsxXSxoO2ZvcihsZXQgZz0wO2c8bS5sZW5ndGgtMTtnKyspZm9yKGxldCB5PWcrMTt5PG0ubGVuZ3RoO3krKyl7bGV0W3YseF09bVtnXSxbYixUXT1tW3ldO2lmKHJbdl0/LltiXT09PXUpaFtmXT8/PVtdLGhbZl09Wy4uLmhbZl0sLi4ueCwuLi5UXTtlbHNlIGlmKHY9PT0iZGVmYXVsdCJ8fGI9PT0iZGVmYXVsdCIpaFtmXT8/PVtdLGhbZl09Wy4uLmhbZl0sLi4ueCwuLi5UXTtlbHNle2xldCB3PWAke2Z9LSR7cCsrfWA7aFt3XT14O2xldCBFPWAke2Z9LSR7cCsrfWA7aFtFXT1UfX1yZXR1cm4gaH0se30pLCJmbGF0dGVuQWxpZ25tZW50cyIpLGk9ZS5tYXAobD0+e2xldCB1PXt9LGg9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFtmLFtkLHBdXSk9PntsZXQgbT10LmdldE5vZGUoZik/LmluPz8iZGVmYXVsdCI7dVtwXT8/PXt9LHVbcF1bbV0/Pz1bXSx1W3BdW21dLnB1c2goZiksaFtkXT8/PXt9LGhbZF1bbV0/Pz1bXSxoW2RdW21dLnB1c2goZil9KSx7aG9yaXo6T2JqZWN0LnZhbHVlcyhuKHUsImhvcml6b250YWwiKSkuZmlsdGVyKGY9PmYubGVuZ3RoPjEpLHZlcnQ6T2JqZWN0LnZhbHVlcyhuKGgsInZlcnRpY2FsIikpLmZpbHRlcihmPT5mLmxlbmd0aD4xKX19KSxbYSxzXT1pLnJlZHVjZSgoW2wsdV0se2hvcml6OmgsdmVydDpmfSk9PltbLi4ubCwuLi5oXSxbLi4udSwuLi5mXV0sW1tdLFtdXSk7cmV0dXJue2hvcml6b250YWw6YSx2ZXJ0aWNhbDpzfX1mdW5jdGlvbiBLbnQodCl7bGV0IGU9W10scj1vKGk9PmAke2lbMF19LCR7aVsxXX1gLCJwb3NUb1N0ciIpLG49byhpPT5pLnNwbGl0KCIsIikubWFwKGE9PnBhcnNlSW50KGEpKSwic3RyVG9Qb3MiKTtyZXR1cm4gdC5mb3JFYWNoKGk9PntsZXQgYT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaSkubWFwKChbaCxmXSk9PltyKGYpLGhdKSkscz1bcihbMCwwXSldLGw9e30sdT17TDpbLTEsMF0sUjpbMSwwXSxUOlswLDFdLEI6WzAsLTFdfTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgaD1zLnNoaWZ0KCk7aWYoaCl7bFtoXT0xO2xldCBmPWFbaF07aWYoZil7bGV0IGQ9bihoKTtPYmplY3QuZW50cmllcyh1KS5mb3JFYWNoKChbcCxtXSk9PntsZXQgZz1yKFtkWzBdK21bMF0sZFsxXSttWzFdXSkseT1hW2ddO3kmJiFsW2ddJiYocy5wdXNoKGcpLGUucHVzaCh7W3FGW3BdXTp5LFtxRltJMmUocCldXTpmLGdhcDoxLjUqTWkoImljb25TaXplIil9KSl9KX19fX0pLGV9ZnVuY3Rpb24gUW50KHQsZSxyLG4saSx7c3BhdGlhbE1hcHM6YSxncm91cEFsaWdubWVudHM6c30pe3JldHVybiBuZXcgUHJvbWlzZShsPT57bGV0IHU9R2UoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLGg9c2woe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoic3RyYWlnaHQiLGxhYmVsOiJkYXRhKGxhYmVsKSIsInNvdXJjZS1lbmRwb2ludCI6ImRhdGEoc291cmNlRW5kcG9pbnQpIiwidGFyZ2V0LWVuZHBvaW50IjoiZGF0YSh0YXJnZXRFbmRwb2ludCkifX0se3NlbGVjdG9yOiJlZGdlLnNlZ21lbnRzIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoic2VnbWVudHMiLCJzZWdtZW50LXdlaWdodHMiOiIwIiwic2VnbWVudC1kaXN0YW5jZXMiOlsuNV0sImVkZ2UtZGlzdGFuY2VzIjoiZW5kcG9pbnRzIiwic291cmNlLWVuZHBvaW50IjoiZGF0YShzb3VyY2VFbmRwb2ludCkiLCJ0YXJnZXQtZW5kcG9pbnQiOiJkYXRhKHRhcmdldEVuZHBvaW50KSJ9fSx7c2VsZWN0b3I6Im5vZGUiLHN0eWxlOnsiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOiJpbmNsdWRlIn19LHtzZWxlY3Rvcjoibm9kZVtsYWJlbF0iLHN0eWxlOnsidGV4dC12YWxpZ24iOiJib3R0b20iLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsImZvbnQtc2l6ZSI6YCR7TWkoImZvbnRTaXplIil9cHhgfX0se3NlbGVjdG9yOiIubm9kZS1zZXJ2aWNlIixzdHlsZTp7bGFiZWw6ImRhdGEobGFiZWwpIix3aWR0aDoiZGF0YSh3aWR0aCkiLGhlaWdodDoiZGF0YShoZWlnaHQpIn19LHtzZWxlY3RvcjoiLm5vZGUtanVuY3Rpb24iLHN0eWxlOnt3aWR0aDoiZGF0YSh3aWR0aCkiLGhlaWdodDoiZGF0YShoZWlnaHQpIn19LHtzZWxlY3RvcjoiLm5vZGUtZ3JvdXAiLHN0eWxlOntwYWRkaW5nOmAke01pKCJwYWRkaW5nIil9cHhgfX1dLGxheW91dDp7bmFtZToiZ3JpZCIsYm91bmRpbmdCb3g6e3gxOjAseDI6MTAwLHkxOjAseTI6MTAwfX19KTt1LnJlbW92ZSgpLFludChyLGgpLEhudCh0LGgpLFdudChlLGgpLFhudChuLGgpO2xldCBmPWpudChpLGEscyksZD1LbnQoYSkscD1oLmxheW91dCh7bmFtZToiZmNvc2UiLHF1YWxpdHk6InByb29mIixzdHlsZUVuYWJsZWQ6ITEsYW5pbWF0ZTohMSxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaWRlYWxFZGdlTGVuZ3RoKG0pe2xldFtnLHldPW0uY29ubmVjdGVkTm9kZXMoKSx7cGFyZW50OnZ9PVlmKGcpLHtwYXJlbnQ6eH09WWYoeSk7cmV0dXJuIHY9PT14PzEuNSpNaSgiaWNvblNpemUiKTouNSpNaSgiaWNvblNpemUiKX0sZWRnZUVsYXN0aWNpdHkobSl7bGV0W2cseV09bS5jb25uZWN0ZWROb2RlcygpLHtwYXJlbnQ6dn09WWYoZykse3BhcmVudDp4fT1ZZih5KTtyZXR1cm4gdj09PXg/LjQ1Oi4wMDF9LGFsaWdubWVudENvbnN0cmFpbnQ6ZixyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ6ZH0pO3Aub25lKCJsYXlvdXRzdG9wIiwoKT0+e2Z1bmN0aW9uIG0oZyx5LHYseCl7bGV0IGIsVCx7eDpTLHk6d309Zyx7eDpFLHk6X309eTtUPSh4LXcrKFMtdikqKHctXykvKFMtRSkpL01hdGguc3FydCgxK01hdGgucG93KCh3LV8pLyhTLUUpLDIpKSxiPU1hdGguc3FydChNYXRoLnBvdyh4LXcsMikrTWF0aC5wb3codi1TLDIpLU1hdGgucG93KFQsMikpO2xldCBDPU1hdGguc3FydChNYXRoLnBvdyhFLVMsMikrTWF0aC5wb3coXy13LDIpKTtiPWIvQztsZXQgRD0oRS1TKSooeC13KS0oXy13KSoodi1TKTtzd2l0Y2goITApe2Nhc2UgRD49MDpEPTE7YnJlYWs7Y2FzZSBEPDA6RD0tMTticmVha31sZXQgTz0oRS1TKSoodi1TKSsoXy13KSooeC13KTtzd2l0Y2goITApe2Nhc2UgTz49MDpPPTE7YnJlYWs7Y2FzZSBPPDA6Tz0tMTticmVha31yZXR1cm4gVD1NYXRoLmFicyhUKSpELGI9YipPLHtkaXN0YW5jZXM6VCx3ZWlnaHRzOmJ9fW8obSwiZ2V0U2VnbWVudFdlaWdodHMiKSxoLnN0YXJ0QmF0Y2goKTtmb3IobGV0IGcgb2YgT2JqZWN0LnZhbHVlcyhoLmVkZ2VzKCkpKWlmKGcuZGF0YT8uKCkpe2xldHt4OnkseTp2fT1nLnNvdXJjZSgpLnBvc2l0aW9uKCkse3gseTpifT1nLnRhcmdldCgpLnBvc2l0aW9uKCk7aWYoeSE9PXgmJnYhPT1iKXtsZXQgVD1nLnNvdXJjZUVuZHBvaW50KCksUz1nLnRhcmdldEVuZHBvaW50KCkse3NvdXJjZURpcjp3fT1DQyhnKSxbRSxfXT1ydSh3KT9bVC54LFMueV06W1MueCxULnldLHt3ZWlnaHRzOkMsZGlzdGFuY2VzOkR9PW0oVCxTLEUsXyk7Zy5zdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiLEQpLGcuc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIsQyl9fWguZW5kQmF0Y2goKSxwLnJ1bigpfSkscC5ydW4oKSxoLnJlYWR5KG09PntYLmluZm8oIlJlYWR5IixtKSxsKGgpfSl9KX12YXIgSjJlLFpudCxleGUsdHhlPU4oKCk9PnsidXNlIHN0cmljdCI7amwoKTtvRigpO0oyZT1BYShZMmUoKSwxKTtmcigpO3l0KCk7VmwoKTt4aSgpO040KCk7dCQoKTtBQygpO1oyZSgpO1g0KFt7bmFtZTpsMC5wcmVmaXgsaWNvbnM6bDB9XSk7c2wudXNlKEoyZS5kZWZhdWx0KTtvKEhudCwiYWRkU2VydmljZXMiKTtvKFdudCwiYWRkSnVuY3Rpb25zIik7byhxbnQsInBvc2l0aW9uTm9kZXMiKTtvKFludCwiYWRkR3JvdXBzIik7byhYbnQsImFkZEVkZ2VzIik7byhqbnQsImdldEFsaWdubWVudHMiKTtvKEtudCwiZ2V0UmVsYXRpdmVDb25zdHJhaW50cyIpO28oUW50LCJsYXlvdXRBcmNoaXRlY3R1cmUiKTtabnQ9byhhc3luYyh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldFNlcnZpY2VzKCkscz1pLmdldEp1bmN0aW9ucygpLGw9aS5nZXRHcm91cHMoKSx1PWkuZ2V0RWRnZXMoKSxoPWkuZ2V0RGF0YVN0cnVjdHVyZXMoKSxmPUxpKGUpLGQ9Zi5hcHBlbmQoImciKTtkLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWVkZ2VzIik7bGV0IHA9Zi5hcHBlbmQoImciKTtwLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLXNlcnZpY2VzIik7bGV0IG09Zi5hcHBlbmQoImciKTttLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWdyb3VwcyIpLGF3YWl0IEsyZShpLHAsYSksUTJlKGkscCxzKTtsZXQgZz1hd2FpdCBRbnQoYSxzLGwsdSxpLGgpO2F3YWl0IFgyZShkLGcpLGF3YWl0IGoyZShtLGcpLHFudChpLGcpLExvKHZvaWQgMCxmLE1pKCJwYWRkaW5nIiksTWkoInVzZU1heFdpZHRoIikpfSwiZHJhdyIpLGV4ZT17ZHJhdzpabnR9fSk7dmFyIHJ4ZT17fTt1cihyeGUse2RpYWdyYW06KCk9PkpudH0pO3ZhciBKbnQsbnhlPU4oKCk9PnsidXNlIHN0cmljdCI7SDJlKCk7TjQoKTtxMmUoKTt0eGUoKTtKbnQ9e3BhcnNlcjpVMmUsZGI6bzAscmVuZGVyZXI6ZXhlLHN0eWxlczpXMmV9fSk7dmFyIGJ5LHIkPU4oKCk9PnsidXNlIHN0cmljdCI7X2EoKTttaSgpO2VyKCk7enQoKTtjaSgpO2J5PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz1bXTt0aGlzLmxldmVscz1uZXcgTWFwO3RoaXMub3V0ZXJOb2Rlcz1bXTt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLnNldEFjY1RpdGxlPUFyO3RoaXMuZ2V0QWNjVGl0bGU9RHI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5nZXRBY2NEZXNjcmlwdGlvbj1Scjt0aGlzLnNldEFjY0Rlc2NyaXB0aW9uPUxyfXN0YXRpY3tvKHRoaXMsIlRyZWVNYXBEQiIpfWdldE5vZGVzKCl7cmV0dXJuIHRoaXMubm9kZXN9Z2V0Q29uZmlnKCl7bGV0IGU9b3Iscj10cigpO3JldHVybiAkbih7Li4uZS50cmVlbWFwLC4uLnIudHJlZW1hcD8/e319KX1hZGROb2RlKGUscil7dGhpcy5ub2Rlcy5wdXNoKGUpLHRoaXMubGV2ZWxzLnNldChlLHIpLHI9PT0wJiYodGhpcy5vdXRlck5vZGVzLnB1c2goZSksdGhpcy5yb290Pz89ZSl9Z2V0Um9vdCgpe3JldHVybntuYW1lOiIiLGNoaWxkcmVuOnRoaXMub3V0ZXJOb2Rlc319YWRkQ2xhc3MoZSxyKXtsZXQgbj10aGlzLmNsYXNzZXMuZ2V0KGUpPz97aWQ6ZSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0saT1yLnJlcGxhY2UoL1xcLC9nLCJceEE3XHhBN1x4QTciKS5yZXBsYWNlKC8sL2csIjsiKS5yZXBsYWNlKC/Cp8KnwqcvZywiLCIpLnNwbGl0KCI7Iik7aSYmaS5mb3JFYWNoKGE9PntTMihhKSYmKG4/LnRleHRTdHlsZXM/bi50ZXh0U3R5bGVzLnB1c2goYSk6bi50ZXh0U3R5bGVzPVthXSksbj8uc3R5bGVzP24uc3R5bGVzLnB1c2goYSk6bi5zdHlsZXM9W2FdfSksdGhpcy5jbGFzc2VzLnNldChlLG4pfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfWdldFN0eWxlc0ZvckNsYXNzKGUpe3JldHVybiB0aGlzLmNsYXNzZXMuZ2V0KGUpPy5zdHlsZXM/P1tdfWNsZWFyKCl7a3IoKSx0aGlzLm5vZGVzPVtdLHRoaXMubGV2ZWxzPW5ldyBNYXAsdGhpcy5vdXRlck5vZGVzPVtdLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLHRoaXMucm9vdD12b2lkIDB9fX0pO2Z1bmN0aW9uIHN4ZSh0KXtpZighdC5sZW5ndGgpcmV0dXJuW107bGV0IGU9W10scj1bXTtyZXR1cm4gdC5mb3JFYWNoKG49PntsZXQgaT17bmFtZTpuLm5hbWUsY2hpbGRyZW46bi50eXBlPT09IkxlYWYiP3ZvaWQgMDpbXX07Zm9yKGkuY2xhc3NTZWxlY3Rvcj1uPy5jbGFzc1NlbGVjdG9yLG4/LmNzc0NvbXBpbGVkU3R5bGVzJiYoaS5jc3NDb21waWxlZFN0eWxlcz1bbi5jc3NDb21waWxlZFN0eWxlc10pLG4udHlwZT09PSJMZWFmIiYmbi52YWx1ZSE9PXZvaWQgMCYmKGkudmFsdWU9bi52YWx1ZSk7ci5sZW5ndGg+MCYmcltyLmxlbmd0aC0xXS5sZXZlbD49bi5sZXZlbDspci5wb3AoKTtpZihyLmxlbmd0aD09PTApZS5wdXNoKGkpO2Vsc2V7bGV0IGE9cltyLmxlbmd0aC0xXS5ub2RlO2EuY2hpbGRyZW4/YS5jaGlsZHJlbi5wdXNoKGkpOmEuY2hpbGRyZW49W2ldfW4udHlwZSE9PSJMZWFmIiYmci5wdXNoKHtub2RlOmksbGV2ZWw6bi5sZXZlbH0pfSksZX12YXIgb3hlPU4oKCk9PnsidXNlIHN0cmljdCI7byhzeGUsImJ1aWxkSGllcmFyY2h5Iil9KTt2YXIgbml0LGlpdCxuJCxseGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZigpO3l0KCk7TXAoKTtveGUoKTtyJCgpO25pdD1vKCh0LGUpPT57Sm8odCxlKTtsZXQgcj1bXTtmb3IobGV0IGEgb2YgdC5UcmVlbWFwUm93cz8/W10pYS4kdHlwZT09PSJDbGFzc0RlZlN0YXRlbWVudCImJmUuYWRkQ2xhc3MoYS5jbGFzc05hbWU/PyIiLGEuc3R5bGVUZXh0Pz8iIik7Zm9yKGxldCBhIG9mIHQuVHJlZW1hcFJvd3M/P1tdKXtsZXQgcz1hLml0ZW07aWYoIXMpY29udGludWU7bGV0IGw9YS5pbmRlbnQ/cGFyc2VJbnQoYS5pbmRlbnQpOjAsdT1paXQocyksaD1zLmNsYXNzU2VsZWN0b3I/ZS5nZXRTdHlsZXNGb3JDbGFzcyhzLmNsYXNzU2VsZWN0b3IpOltdLGY9aC5sZW5ndGg+MD9oLmpvaW4oIjsiKTp2b2lkIDAsZD17bGV2ZWw6bCxuYW1lOnUsdHlwZTpzLiR0eXBlLHZhbHVlOnMudmFsdWUsY2xhc3NTZWxlY3RvcjpzLmNsYXNzU2VsZWN0b3IsY3NzQ29tcGlsZWRTdHlsZXM6Zn07ci5wdXNoKGQpfWxldCBuPXN4ZShyKSxpPW8oKGEscyk9Pntmb3IobGV0IGwgb2YgYSllLmFkZE5vZGUobCxzKSxsLmNoaWxkcmVuJiZsLmNoaWxkcmVuLmxlbmd0aD4wJiZpKGwuY2hpbGRyZW4scysxKX0sImFkZE5vZGVzUmVjdXJzaXZlbHkiKTtpKG4sMCl9LCJwb3B1bGF0ZSIpLGlpdD1vKHQ9PnQubmFtZT9TdHJpbmcodC5uYW1lKToiIiwiZ2V0SXRlbU5hbWUiKSxuJD17cGFyc2VyOnt5eTp2b2lkIDB9LHBhcnNlOm8oYXN5bmMgdD0+e3RyeXtsZXQgcj1hd2FpdCB2cygidHJlZW1hcCIsdCk7WC5kZWJ1ZygiVHJlZW1hcCBBU1Q6IixyKTtsZXQgbj1uJC5wYXJzZXI/Lnl5O2lmKCEobiBpbnN0YW5jZW9mIGJ5KSl0aHJvdyBuZXcgRXJyb3IoInBhcnNlci5wYXJzZXI/Lnl5IHdhcyBub3QgYSBUcmVlbWFwREIuIFRoaXMgaXMgZHVlIHRvIGEgYnVnIHdpdGhpbiBNZXJtYWlkLCBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZC9pc3N1ZXMuIik7bml0KHIsbil9Y2F0Y2goZSl7dGhyb3cgWC5lcnJvcigiRXJyb3IgcGFyc2luZyB0cmVlbWFwOiIsZSksZX19LCJwYXJzZSIpfX0pO3ZhciBhaXQsVHksUDQsc2l0LG9pdCxjeGUsdXhlPU4oKCk9PnsidXNlIHN0cmljdCI7VmwoKTtucCgpO3hpKCk7ZnIoKTt6dCgpO21pKCk7eXQoKTthaXQ9MTAsVHk9MTAsUDQ9MjUsc2l0PW8oKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0Q29uZmlnKCkscz1hLnBhZGRpbmc/P2FpdCxsPWkuZ2V0RGlhZ3JhbVRpdGxlKCksdT1pLmdldFJvb3QoKSx7dGhlbWVWYXJpYWJsZXM6aH09dHIoKTtpZighdSlyZXR1cm47bGV0IGY9bD8zMDowLGQ9TGkoZSkscD1hLm5vZGVXaWR0aD9hLm5vZGVXaWR0aCpUeTo5NjAsbT1hLm5vZGVIZWlnaHQ/YS5ub2RlSGVpZ2h0KlR5OjUwMCxnPXAseT1tK2Y7ZC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7Z30gJHt5fWApLGZuKGQseSxnLGEudXNlTWF4V2lkdGgpO2xldCB2O3RyeXtsZXQgQT1hLnZhbHVlRm9ybWF0fHwiLCI7aWYoQT09PSIkMCwwIil2PW8oST0+IiQiK2NjKCIsIikoSSksInZhbHVlRm9ybWF0Iik7ZWxzZSBpZihBLnN0YXJ0c1dpdGgoIiQiKSYmQS5pbmNsdWRlcygiLCIpKXtsZXQgST0vXC5cZCsvLmV4ZWMoQSksTT1JP0lbMF06IiI7dj1vKFA9PiIkIitjYygiLCIrTSkoUCksInZhbHVlRm9ybWF0Iil9ZWxzZSBpZihBLnN0YXJ0c1dpdGgoIiQiKSl7bGV0IEk9QS5zdWJzdHJpbmcoMSk7dj1vKE09PiIkIitjYyhJfHwiIikoTSksInZhbHVlRm9ybWF0Iil9ZWxzZSB2PWNjKEEpfWNhdGNoKEEpe1guZXJyb3IoIkVycm9yIGNyZWF0aW5nIGZvcm1hdCBmdW5jdGlvbjoiLEEpLHY9Y2MoIiwiKX1sZXQgeD1KcygpLnJhbmdlKFsidHJhbnNwYXJlbnQiLGguY1NjYWxlMCxoLmNTY2FsZTEsaC5jU2NhbGUyLGguY1NjYWxlMyxoLmNTY2FsZTQsaC5jU2NhbGU1LGguY1NjYWxlNixoLmNTY2FsZTcsaC5jU2NhbGU4LGguY1NjYWxlOSxoLmNTY2FsZTEwLGguY1NjYWxlMTFdKSxiPUpzKCkucmFuZ2UoWyJ0cmFuc3BhcmVudCIsaC5jU2NhbGVQZWVyMCxoLmNTY2FsZVBlZXIxLGguY1NjYWxlUGVlcjIsaC5jU2NhbGVQZWVyMyxoLmNTY2FsZVBlZXI0LGguY1NjYWxlUGVlcjUsaC5jU2NhbGVQZWVyNixoLmNTY2FsZVBlZXI3LGguY1NjYWxlUGVlcjgsaC5jU2NhbGVQZWVyOSxoLmNTY2FsZVBlZXIxMCxoLmNTY2FsZVBlZXIxMV0pLFQ9SnMoKS5yYW5nZShbaC5jU2NhbGVMYWJlbDAsaC5jU2NhbGVMYWJlbDEsaC5jU2NhbGVMYWJlbDIsaC5jU2NhbGVMYWJlbDMsaC5jU2NhbGVMYWJlbDQsaC5jU2NhbGVMYWJlbDUsaC5jU2NhbGVMYWJlbDYsaC5jU2NhbGVMYWJlbDcsaC5jU2NhbGVMYWJlbDgsaC5jU2NhbGVMYWJlbDksaC5jU2NhbGVMYWJlbDEwLGguY1NjYWxlTGFiZWwxMV0pO2wmJmQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsZy8yKS5hdHRyKCJ5IixmLzIpLmF0dHIoImNsYXNzIiwidHJlZW1hcFRpdGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQobCk7bGV0IFM9ZC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwgJHtmfSlgKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBDb250YWluZXIiKSx3PXowKHUpLnN1bShBPT5BLnZhbHVlPz8wKS5zb3J0KChBLEkpPT4oSS52YWx1ZT8/MCktKEEudmFsdWU/PzApKSxfPUQ1KCkuc2l6ZShbcCxtXSkucGFkZGluZ1RvcChBPT5BLmNoaWxkcmVuJiZBLmNoaWxkcmVuLmxlbmd0aD4wP1A0K1R5OjApLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nTGVmdChBPT5BLmNoaWxkcmVuJiZBLmNoaWxkcmVuLmxlbmd0aD4wP1R5OjApLnBhZGRpbmdSaWdodChBPT5BLmNoaWxkcmVuJiZBLmNoaWxkcmVuLmxlbmd0aD4wP1R5OjApLnBhZGRpbmdCb3R0b20oQT0+QS5jaGlsZHJlbiYmQS5jaGlsZHJlbi5sZW5ndGg+MD9UeTowKS5yb3VuZCghMCkodyksQz1fLmRlc2NlbmRhbnRzKCkuZmlsdGVyKEE9PkEuY2hpbGRyZW4mJkEuY2hpbGRyZW4ubGVuZ3RoPjApLEQ9Uy5zZWxlY3RBbGwoIi50cmVlbWFwU2VjdGlvbiIpLmRhdGEoQykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBTZWN0aW9uIikuYXR0cigidHJhbnNmb3JtIixBPT5gdHJhbnNsYXRlKCR7QS54MH0sJHtBLnkwfSlgKTtELmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIixBPT5BLngxLUEueDApLmF0dHIoImhlaWdodCIsUDQpLmF0dHIoImNsYXNzIiwidHJlZW1hcFNlY3Rpb25IZWFkZXIiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjYpLmF0dHIoInN0cm9rZS13aWR0aCIsLjYpLmF0dHIoInN0eWxlIixBPT5BLmRlcHRoPT09MD8iZGlzcGxheTogbm9uZTsiOiIiKSxELmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsKEEsSSk9PmBjbGlwLXNlY3Rpb24tJHtlfS0ke0l9YCkuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEE9Pk1hdGgubWF4KDAsQS54MS1BLngwLTEyKSkuYXR0cigiaGVpZ2h0IixQNCksRC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsQT0+QS54MS1BLngwKS5hdHRyKCJoZWlnaHQiLEE9PkEueTEtQS55MCkuYXR0cigiY2xhc3MiLChBLEkpPT5gdHJlZW1hcFNlY3Rpb24gc2VjdGlvbiR7SX1gKS5hdHRyKCJmaWxsIixBPT54KEEuZGF0YS5uYW1lKSkuYXR0cigiZmlsbC1vcGFjaXR5IiwuNikuYXR0cigic3Ryb2tlIixBPT5iKEEuZGF0YS5uYW1lKSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjQpLmF0dHIoInN0eWxlIixBPT57aWYoQS5kZXB0aD09PTApcmV0dXJuImRpc3BsYXk6IG5vbmU7IjtsZXQgST1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6QS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIEkubm9kZVN0eWxlcysiOyIrSS5ib3JkZXJTdHlsZXMuam9pbigiOyIpfSksRC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBTZWN0aW9uTGFiZWwiKS5hdHRyKCJ4Iiw2KS5hdHRyKCJ5IixQNC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQoQT0+QS5kZXB0aD09PTA/IiI6QS5kYXRhLm5hbWUpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInN0eWxlIixBPT57aWYoQS5kZXB0aD09PTApcmV0dXJuImRpc3BsYXk6IG5vbmU7IjtsZXQgST0iZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsgZm9udC1zaXplOiAxMnB4OyBmaWxsOiIrVChBLmRhdGEubmFtZSkrIjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IixNPVllKHtjc3NDb21waWxlZFN0eWxlczpBLmRhdGEuY3NzQ29tcGlsZWRTdHlsZXN9KTtyZXR1cm4gSStNLmxhYmVsU3R5bGVzLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6Iil9KS5lYWNoKGZ1bmN0aW9uKEEpe2lmKEEuZGVwdGg9PT0wKXJldHVybjtsZXQgST1HZSh0aGlzKSxNPUEuZGF0YS5uYW1lO0kudGV4dChNKTtsZXQgUD1BLngxLUEueDAsQj02LEY7YS5zaG93VmFsdWVzIT09ITEmJkEudmFsdWU/Rj1QLTEwLTMwLTEwLUI6Rj1QLUItNjtsZXQgJD1NYXRoLm1heCgxNSxGKSxVPUkubm9kZSgpO2lmKFUuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+JCl7bGV0IGVlPSIuLi4iLFk9TTtmb3IoO1kubGVuZ3RoPjA7KXtpZihZPU0uc3Vic3RyaW5nKDAsWS5sZW5ndGgtMSksWS5sZW5ndGg9PT0wKXtJLnRleHQoZWUpLFUuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+JCYmSS50ZXh0KCIiKTticmVha31pZihJLnRleHQoWStlZSksVS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTw9JClicmVha319fSksYS5zaG93VmFsdWVzIT09ITEmJkQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0cmVlbWFwU2VjdGlvblZhbHVlIikuYXR0cigieCIsQT0+QS54MS1BLngwLTEwKS5hdHRyKCJ5IixQNC8yKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChBPT5BLnZhbHVlP3YoQS52YWx1ZSk6IiIpLmF0dHIoImZvbnQtc3R5bGUiLCJpdGFsaWMiKS5hdHRyKCJzdHlsZSIsQT0+e2lmKEEuZGVwdGg9PT0wKXJldHVybiJkaXNwbGF5OiBub25lOyI7bGV0IEk9InRleHQtYW5jaG9yOiBlbmQ7IGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7IGZvbnQtc2l6ZTogMTBweDsgZmlsbDoiK1QoQS5kYXRhLm5hbWUpKyI7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyIsTT1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6QS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIEkrTS5sYWJlbFN0eWxlcy5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpfSk7bGV0IE89Xy5sZWF2ZXMoKSxSPVMuc2VsZWN0QWxsKCIudHJlZW1hcExlYWZHcm91cCIpLmRhdGEoTykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKEEsSSk9PmB0cmVlbWFwTm9kZSB0cmVlbWFwTGVhZkdyb3VwIGxlYWYke0l9JHtBLmRhdGEuY2xhc3NTZWxlY3Rvcj9gICR7QS5kYXRhLmNsYXNzU2VsZWN0b3J9YDoiIn14YCkuYXR0cigidHJhbnNmb3JtIixBPT5gdHJhbnNsYXRlKCR7QS54MH0sJHtBLnkwfSlgKTtSLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIixBPT5BLngxLUEueDApLmF0dHIoImhlaWdodCIsQT0+QS55MS1BLnkwKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBMZWFmIikuYXR0cigiZmlsbCIsQT0+QS5wYXJlbnQ/eChBLnBhcmVudC5kYXRhLm5hbWUpOngoQS5kYXRhLm5hbWUpKS5hdHRyKCJzdHlsZSIsQT0+WWUoe2Nzc0NvbXBpbGVkU3R5bGVzOkEuZGF0YS5jc3NDb21waWxlZFN0eWxlc30pLm5vZGVTdHlsZXMpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsQT0+QS5wYXJlbnQ/eChBLnBhcmVudC5kYXRhLm5hbWUpOngoQS5kYXRhLm5hbWUpKS5hdHRyKCJzdHJva2Utd2lkdGgiLDMpLFIuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwoQSxJKT0+YGNsaXAtJHtlfS0ke0l9YCkuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEE9Pk1hdGgubWF4KDAsQS54MS1BLngwLTQpKS5hdHRyKCJoZWlnaHQiLEE9Pk1hdGgubWF4KDAsQS55MS1BLnkwLTQpKSxSLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHJlZW1hcExhYmVsIikuYXR0cigieCIsQT0+KEEueDEtQS54MCkvMikuYXR0cigieSIsQT0+KEEueTEtQS55MCkvMikuYXR0cigic3R5bGUiLEE9PntsZXQgST0idGV4dC1hbmNob3I6IG1pZGRsZTsgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsgZm9udC1zaXplOiAzOHB4O2ZpbGw6IitUKEEuZGF0YS5uYW1lKSsiOyIsTT1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6QS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIEkrTS5sYWJlbFN0eWxlcy5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpfSkuYXR0cigiY2xpcC1wYXRoIiwoQSxJKT0+YHVybCgjY2xpcC0ke2V9LSR7SX0pYCkudGV4dChBPT5BLmRhdGEubmFtZSkuZWFjaChmdW5jdGlvbihBKXtsZXQgST1HZSh0aGlzKSxNPUEueDEtQS54MCxQPUEueTEtQS55MCxCPUkubm9kZSgpLEY9NCx6PU0tMipGLCQ9UC0yKkY7aWYoejwxMHx8JDwxMCl7SS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTtyZXR1cm59bGV0IFU9cGFyc2VJbnQoSS5zdHlsZSgiZm9udC1zaXplIiksMTApLEs9OCxlZT0yOCxZPS42LGNlPTYsWj0yO2Zvcig7Qi5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT56JiZVPks7KVUtLSxJLnN0eWxlKCJmb250LXNpemUiLGAke1V9cHhgKTtsZXQgdWU9TWF0aC5tYXgoY2UsTWF0aC5taW4oZWUsTWF0aC5yb3VuZChVKlkpKSksUT1VK1ordWU7Zm9yKDtRPiQmJlU+SyYmKFUtLSx1ZT1NYXRoLm1heChjZSxNYXRoLm1pbihlZSxNYXRoLnJvdW5kKFUqWSkpKSwhKHVlPGNlJiZVPT09SykpOylJLnN0eWxlKCJmb250LXNpemUiLGAke1V9cHhgKSxRPVUrWit1ZSx1ZTw9Y2UmJlE+JDtJLnN0eWxlKCJmb250LXNpemUiLGAke1V9cHhgKSwoQi5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT56fHxVPEt8fCQ8VSkmJkkuc3R5bGUoImRpc3BsYXkiLCJub25lIil9KSxhLnNob3dWYWx1ZXMhPT0hMSYmUi5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBWYWx1ZSIpLmF0dHIoIngiLEk9PihJLngxLUkueDApLzIpLmF0dHIoInkiLGZ1bmN0aW9uKEkpe3JldHVybihJLnkxLUkueTApLzJ9KS5hdHRyKCJzdHlsZSIsST0+e2xldCBNPSJ0ZXh0LWFuY2hvcjogbWlkZGxlOyBkb21pbmFudC1iYXNlbGluZTogaGFuZ2luZzsgZm9udC1zaXplOiAyOHB4O2ZpbGw6IitUKEkuZGF0YS5uYW1lKSsiOyIsUD1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6SS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIE0rUC5sYWJlbFN0eWxlcy5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpfSkuYXR0cigiY2xpcC1wYXRoIiwoSSxNKT0+YHVybCgjY2xpcC0ke2V9LSR7TX0pYCkudGV4dChJPT5JLnZhbHVlP3YoSS52YWx1ZSk6IiIpLmVhY2goZnVuY3Rpb24oSSl7bGV0IE09R2UodGhpcyksUD10aGlzLnBhcmVudE5vZGU7aWYoIVApe00uc3R5bGUoImRpc3BsYXkiLCJub25lIik7cmV0dXJufWxldCBCPUdlKFApLnNlbGVjdCgiLnRyZWVtYXBMYWJlbCIpO2lmKEIuZW1wdHkoKXx8Qi5zdHlsZSgiZGlzcGxheSIpPT09Im5vbmUiKXtNLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO3JldHVybn1sZXQgRj1wYXJzZUZsb2F0KEIuc3R5bGUoImZvbnQtc2l6ZSIpKSx6PTI4LCQ9LjYsVT02LEs9MixlZT1NYXRoLm1heChVLE1hdGgubWluKHosTWF0aC5yb3VuZChGKiQpKSk7TS5zdHlsZSgiZm9udC1zaXplIixgJHtlZX1weGApO2xldCBjZT0oSS55MS1JLnkwKS8yK0YvMitLO00uYXR0cigieSIsY2UpO2xldCBaPUkueDEtSS54MCxqPUkueTEtSS55MC00LG5lPVotMio0O00ubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPm5lfHxjZStlZT5qfHxlZTxVP00uc3R5bGUoImRpc3BsYXkiLCJub25lIik6TS5zdHlsZSgiZGlzcGxheSIsbnVsbCl9KTtsZXQgTD1hLmRpYWdyYW1QYWRkaW5nPz84O1lvKGQsTCwiZmxvd2NoYXJ0IixhPy51c2VNYXhXaWR0aHx8ITEpfSwiZHJhdyIpLG9pdD1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLGN4ZT17ZHJhdzpzaXQsZ2V0Q2xhc3NlczpvaXR9fSk7dmFyIGxpdCxjaXQsaHhlLGZ4ZT1OKCgpPT57InVzZSBzdHJpY3QiO2VyKCk7bGl0PXtzZWN0aW9uU3Ryb2tlQ29sb3I6ImJsYWNrIixzZWN0aW9uU3Ryb2tlV2lkdGg6IjEiLHNlY3Rpb25GaWxsQ29sb3I6IiNlZmVmZWYiLGxlYWZTdHJva2VDb2xvcjoiYmxhY2siLGxlYWZTdHJva2VXaWR0aDoiMSIsbGVhZkZpbGxDb2xvcjoiI2VmZWZlZiIsbGFiZWxDb2xvcjoiYmxhY2siLGxhYmVsRm9udFNpemU6IjEycHgiLHZhbHVlRm9udFNpemU6IjEwcHgiLHZhbHVlQ29sb3I6ImJsYWNrIix0aXRsZUNvbG9yOiJibGFjayIsdGl0bGVGb250U2l6ZToiMTRweCJ9LGNpdD1vKCh7dHJlZW1hcDp0fT17fSk9PntsZXQgZT0kbihsaXQsdCk7cmV0dXJuYAogIC50cmVlbWFwTm9kZS5zZWN0aW9uIHsKICAgIHN0cm9rZTogJHtlLnNlY3Rpb25TdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7ZS5zZWN0aW9uU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogJHtlLnNlY3Rpb25GaWxsQ29sb3J9OwogIH0KICAudHJlZW1hcE5vZGUubGVhZiB7CiAgICBzdHJva2U6ICR7ZS5sZWFmU3Ryb2tlQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2UubGVhZlN0cm9rZVdpZHRofTsKICAgIGZpbGw6ICR7ZS5sZWFmRmlsbENvbG9yfTsKICB9CiAgLnRyZWVtYXBMYWJlbCB7CiAgICBmaWxsOiAke2UubGFiZWxDb2xvcn07CiAgICBmb250LXNpemU6ICR7ZS5sYWJlbEZvbnRTaXplfTsKICB9CiAgLnRyZWVtYXBWYWx1ZSB7CiAgICBmaWxsOiAke2UudmFsdWVDb2xvcn07CiAgICBmb250LXNpemU6ICR7ZS52YWx1ZUZvbnRTaXplfTsKICB9CiAgLnRyZWVtYXBUaXRsZSB7CiAgICBmaWxsOiAke2UudGl0bGVDb2xvcn07CiAgICBmb250LXNpemU6ICR7ZS50aXRsZUZvbnRTaXplfTsKICB9CiAgYH0sImdldFN0eWxlcyIpLGh4ZT1jaXR9KTt2YXIgZHhlPXt9O3VyKGR4ZSx7ZGlhZ3JhbTooKT0+dWl0fSk7dmFyIHVpdCxweGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyJCgpO2x4ZSgpO3V4ZSgpO2Z4ZSgpO3VpdD17cGFyc2VyOm4kLGdldCBkYigpe3JldHVybiBuZXcgYnl9LHJlbmRlcmVyOmN4ZSxzdHlsZXM6aHhlfX0pO3ZhciBLaXQ9e307dXIoS2l0LHtkZWZhdWx0OigpPT5qaXR9KTtqbCgpO3I3KCk7cmQoKTt2YXIgY0s9ImM0IixsQWU9byh0PT4vXlxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KHQpLCJkZXRlY3RvciIpLGNBZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obEsoKSxvSykpO3JldHVybntpZDpjSyxkaWFncmFtOnR9fSwibG9hZGVyIiksdUFlPXtpZDpjSyxkZXRlY3RvcjpsQWUsbG9hZGVyOmNBZX0sdUs9dUFlO3ZhciB1c2U9ImZsb3djaGFydCIscVBlPW8oKHQsZSk9PmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIifHxlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QodCksImRldGVjdG9yIiksWVBlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihiaygpLHhrKSk7cmV0dXJue2lkOnVzZSxkaWFncmFtOnR9fSwibG9hZGVyIiksWFBlPXtpZDp1c2UsZGV0ZWN0b3I6cVBlLGxvYWRlcjpZUGV9LGhzZT1YUGU7dmFyIGZzZT0iZmxvd2NoYXJ0LXYyIixqUGU9bygodCxlKT0+ZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtZDMiPyExOihlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiJiYoZS5sYXlvdXQ9ImVsayIpLC9eXHMqZ3JhcGgvLnRlc3QodCkmJmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqZmxvd2NoYXJ0Ly50ZXN0KHQpKSwiZGV0ZWN0b3IiKSxLUGU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGJrKCkseGspKTtyZXR1cm57aWQ6ZnNlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxRUGU9e2lkOmZzZSxkZXRlY3RvcjpqUGUsbG9hZGVyOktQZX0sZHNlPVFQZTt2YXIgd3NlPSJlciIsckJlPW8odD0+L15ccyplckRpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksbkJlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihUc2UoKSxic2UpKTtyZXR1cm57aWQ6d3NlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxpQmU9e2lkOndzZSxkZXRlY3RvcjpyQmUsbG9hZGVyOm5CZX0sa3NlPWlCZTt2YXIgTGhlPSJnaXRHcmFwaCIsSUdlPW8odD0+L15ccypnaXRHcmFwaC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxPR2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KERoZSgpLF9oZSkpO3JldHVybntpZDpMaGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLFBHZT17aWQ6TGhlLGRldGVjdG9yOklHZSxsb2FkZXI6T0dlfSxSaGU9UEdlO3ZhciBvZmU9ImdhbnR0IixrVmU9byh0PT4vXlxzKmdhbnR0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLEVWZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oc2ZlKCksYWZlKSk7cmV0dXJue2lkOm9mZSxkaWFncmFtOnR9fSwibG9hZGVyIiksU1ZlPXtpZDpvZmUsZGV0ZWN0b3I6a1ZlLGxvYWRlcjpFVmV9LGxmZT1TVmU7dmFyIHlmZT0iaW5mbyIsUlZlPW8odD0+L15ccyppbmZvLy50ZXN0KHQpLCJkZXRlY3RvciIpLE5WZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZ2ZlKCksbWZlKSk7cmV0dXJue2lkOnlmZSxkaWFncmFtOnR9fSwibG9hZGVyIiksdmZlPXtpZDp5ZmUsZGV0ZWN0b3I6UlZlLGxvYWRlcjpOVmV9O3ZhciBfZmU9InBpZSIsV1ZlPW8odD0+L15ccypwaWUvLnRlc3QodCksImRldGVjdG9yIikscVZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBZmUoKSxDZmUpKTtyZXR1cm57aWQ6X2ZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxEZmU9e2lkOl9mZSxkZXRlY3RvcjpXVmUsbG9hZGVyOnFWZX07dmFyIFZmZT0icXVhZHJhbnRDaGFydCIsdVVlPW8odD0+L15ccypxdWFkcmFudENoYXJ0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLGhVZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oR2ZlKCksemZlKSk7cmV0dXJue2lkOlZmZSxkaWFncmFtOnR9fSwibG9hZGVyIiksZlVlPXtpZDpWZmUsZGV0ZWN0b3I6dVVlLGxvYWRlcjpoVWV9LFVmZT1mVWU7dmFyIGdkZT0ieHljaGFydCIsRFVlPW8odD0+L15ccyp4eWNoYXJ0LWJldGEvLnRlc3QodCksImRldGVjdG9yIiksTFVlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihtZGUoKSxwZGUpKTtyZXR1cm57aWQ6Z2RlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxSVWU9e2lkOmdkZSxkZXRlY3RvcjpEVWUsbG9hZGVyOkxVZX0seWRlPVJVZTt2YXIgQ2RlPSJyZXF1aXJlbWVudCIsT1VlPW8odD0+L15ccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QodCksImRldGVjdG9yIiksUFVlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTZGUoKSxFZGUpKTtyZXR1cm57aWQ6Q2RlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxCVWU9e2lkOkNkZSxkZXRlY3RvcjpPVWUsbG9hZGVyOlBVZX0sQWRlPUJVZTt2YXIgWWRlPSJzZXF1ZW5jZSIsYkhlPW8odD0+L15ccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksVEhlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihxZGUoKSxXZGUpKTtyZXR1cm57aWQ6WWRlLGRpYWdyYW06dH19LCJsb2FkZXIiKSx3SGU9e2lkOllkZSxkZXRlY3RvcjpiSGUsbG9hZGVyOlRIZX0sWGRlPXdIZTt2YXIgZXBlPSJjbGFzcyIsX0hlPW8oKHQsZSk9PmU/LmNsYXNzPy5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypjbGFzc0RpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksREhlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihKZGUoKSxaZGUpKTtyZXR1cm57aWQ6ZXBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxMSGU9e2lkOmVwZSxkZXRlY3RvcjpfSGUsbG9hZGVyOkRIZX0sdHBlPUxIZTt2YXIgaXBlPSJjbGFzc0RpYWdyYW0iLE5IZT1vKCh0LGUpPT4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdCh0KSYmZT8uY2xhc3M/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMDovXlxzKmNsYXNzRGlhZ3JhbS12Mi8udGVzdCh0KSwiZGV0ZWN0b3IiKSxNSGU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG5wZSgpLHJwZSkpO3JldHVybntpZDppcGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLElIZT17aWQ6aXBlLGRldGVjdG9yOk5IZSxsb2FkZXI6TUhlfSxhcGU9SUhlO3ZhciBQcGU9InN0YXRlIixhV2U9bygodCxlKT0+ZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxzV2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE9wZSgpLElwZSkpO3JldHVybntpZDpQcGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLG9XZT17aWQ6UHBlLGRldGVjdG9yOmFXZSxsb2FkZXI6c1dlfSxCcGU9b1dlO3ZhciB6cGU9InN0YXRlRGlhZ3JhbSIsY1dlPW8oKHQsZSk9PiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KHQpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSYmZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIiksImRldGVjdG9yIiksdVdlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PigkcGUoKSxGcGUpKTtyZXR1cm57aWQ6enBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxoV2U9e2lkOnpwZSxkZXRlY3RvcjpjV2UsbG9hZGVyOnVXZX0sR3BlPWhXZTt2YXIgbjBlPSJqb3VybmV5IixOV2U9byh0PT4vXlxzKmpvdXJuZXkvLnRlc3QodCksImRldGVjdG9yIiksTVdlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihyMGUoKSx0MGUpKTtyZXR1cm57aWQ6bjBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxJV2U9e2lkOm4wZSxkZXRlY3RvcjpOV2UsbG9hZGVyOk1XZX0saTBlPUlXZTt5dCgpO1ZsKCk7eGkoKTt2YXIgT1dlPW8oKHQsZSxyKT0+e1guZGVidWcoYHJlbmRlcmluZyBzdmcgZm9yIHN5bnRheCBlcnJvcgpgKTtsZXQgbj1MaShlKSxpPW4uYXBwZW5kKCJnIik7bi5hdHRyKCJ2aWV3Qm94IiwiMCAwIDI0MTIgNTEyIiksZm4obiwxMDAsNTEyLCEwKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6IiksaS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSxpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHtyfWApfSwiZHJhdyIpLFFQPXtkcmF3Ok9XZX0sYTBlPVFQO3ZhciBQV2U9e2RiOnt9LHJlbmRlcmVyOlFQLHBhcnNlcjp7cGFyc2U6bygoKT0+e30sInBhcnNlIil9fSxzMGU9UFdlO3ZhciBvMGU9ImZsb3djaGFydC1lbGsiLEJXZT1vKCh0LGU9e30pPT4vXlxzKmZsb3djaGFydC1lbGsvLnRlc3QodCl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KHQpJiZlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyhlLmxheW91dD0iZWxrIiwhMCk6ITEsImRldGVjdG9yIiksRldlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihiaygpLHhrKSk7cmV0dXJue2lkOm8wZSxkaWFncmFtOnR9fSwibG9hZGVyIiksJFdlPXtpZDpvMGUsZGV0ZWN0b3I6QldlLGxvYWRlcjpGV2V9LGwwZT0kV2U7dmFyIEkwZT0idGltZWxpbmUiLGlxZT1vKHQ9Pi9eXHMqdGltZWxpbmUvLnRlc3QodCksImRldGVjdG9yIiksYXFlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihNMGUoKSxOMGUpKTtyZXR1cm57aWQ6STBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxzcWU9e2lkOkkwZSxkZXRlY3RvcjppcWUsbG9hZGVyOmFxZX0sTzBlPXNxZTt2YXIgdXllPSJtaW5kbWFwIixMZXQ9byh0PT4vXlxzKm1pbmRtYXAvLnRlc3QodCksImRldGVjdG9yIiksUmV0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjeWUoKSxseWUpKTtyZXR1cm57aWQ6dXllLGRpYWdyYW06dH19LCJsb2FkZXIiKSxOZXQ9e2lkOnV5ZSxkZXRlY3RvcjpMZXQsbG9hZGVyOlJldH0saHllPU5ldDt2YXIga3llPSJrYW5iYW4iLFhldD1vKHQ9Pi9eXHMqa2FuYmFuLy50ZXN0KHQpLCJkZXRlY3RvciIpLGpldD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od3llKCksVHllKSk7cmV0dXJue2lkOmt5ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksS2V0PXtpZDpreWUsZGV0ZWN0b3I6WGV0LGxvYWRlcjpqZXR9LEV5ZT1LZXQ7dmFyIGF2ZT0ic2Fua2V5Iix4dHQ9byh0PT4vXlxzKnNhbmtleS1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLGJ0dD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaXZlKCksbnZlKSk7cmV0dXJue2lkOmF2ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksVHR0PXtpZDphdmUsZGV0ZWN0b3I6eHR0LGxvYWRlcjpidHR9LHN2ZT1UdHQ7dmFyIGd2ZT0icGFja2V0IixJdHQ9byh0PT4vXlxzKnBhY2tldCgtYmV0YSk/Ly50ZXN0KHQpLCJkZXRlY3RvciIpLE90dD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obXZlKCkscHZlKSk7cmV0dXJue2lkOmd2ZSxkaWFncmFtOnR9fSwibG9hZGVyIikseXZlPXtpZDpndmUsZGV0ZWN0b3I6SXR0LGxvYWRlcjpPdHR9O3ZhciBfdmU9InJhZGFyIixucnQ9byh0PT4vXlxzKnJhZGFyLWJldGEvLnRlc3QodCksImRldGVjdG9yIiksaXJ0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBdmUoKSxDdmUpKTtyZXR1cm57aWQ6X3ZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxEdmU9e2lkOl92ZSxkZXRlY3RvcjpucnQsbG9hZGVyOmlydH07dmFyIE4yZT0iYmxvY2siLFNudD1vKHQ9Pi9eXHMqYmxvY2stYmV0YS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxDbnQ9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFIyZSgpLEwyZSkpO3JldHVybntpZDpOMmUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLEFudD17aWQ6TjJlLGRldGVjdG9yOlNudCxsb2FkZXI6Q250fSxNMmU9QW50O3ZhciBpeGU9ImFyY2hpdGVjdHVyZSIsZWl0PW8odD0+L15ccyphcmNoaXRlY3R1cmUvLnRlc3QodCksImRldGVjdG9yIiksdGl0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihueGUoKSxyeGUpKTtyZXR1cm57aWQ6aXhlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxyaXQ9e2lkOml4ZSxkZXRlY3RvcjplaXQsbG9hZGVyOnRpdH0sYXhlPXJpdDtyZCgpO0d0KCk7dmFyIG14ZT0idHJlZW1hcCIsaGl0PW8odD0+L15ccyp0cmVlbWFwLy50ZXN0KHQpLCJkZXRlY3RvciIpLGZpdD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocHhlKCksZHhlKSk7cmV0dXJue2lkOm14ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksZ3hlPXtpZDpteGUsZGV0ZWN0b3I6aGl0LGxvYWRlcjpmaXR9O3ZhciB5eGU9ITEsd3k9bygoKT0+e3l4ZXx8KHl4ZT0hMCxkZCgiZXJyb3IiLHMwZSx0PT50LnRvTG93ZXJDYXNlKCkudHJpbSgpPT09ImVycm9yIiksZGQoIi0tLSIse2RiOntjbGVhcjpvKCgpPT57fSwiY2xlYXIiKX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3Om8oKCk9Pnt9LCJkcmF3Iil9LHBhcnNlcjp7cGFyc2U6bygoKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9LCJwYXJzZSIpfSxpbml0Om8oKCk9Pm51bGwsImluaXQiKX0sdD0+dC50b0xvd2VyQ2FzZSgpLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoIi0tLSIpKSxMeShsMGUsaHllLGF4ZSksTHkodUssRXllLGFwZSx0cGUsa3NlLGxmZSx2ZmUsRGZlLEFkZSxYZGUsZHNlLGhzZSxPMGUsUmhlLEdwZSxCcGUsaTBlLFVmZSxzdmUseXZlLHlkZSxNMmUsRHZlLGd4ZSkpfSwiYWRkRGlhZ3JhbXMiKTt5dCgpO3JkKCk7R3QoKTt2YXIgdnhlPW8oYXN5bmMoKT0+e1guZGVidWcoIkxvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtcyIpO2xldCBlPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoYXUpLm1hcChhc3luYyhbcix7ZGV0ZWN0b3I6bixsb2FkZXI6aX1dKT0+e2lmKGkpdHJ5e2l2KHIpfWNhdGNoe3RyeXtsZXR7ZGlhZ3JhbTphLGlkOnN9PWF3YWl0IGkoKTtkZChzLGEsbil9Y2F0Y2goYSl7dGhyb3cgWC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGlhZ3JhbSB3aXRoIGtleSAke3J9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKSxkZWxldGUgYXVbcl0sYX19fSkpKS5maWx0ZXIocj0+ci5zdGF0dXM9PT0icmVqZWN0ZWQiKTtpZihlLmxlbmd0aD4wKXtYLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApO2ZvcihsZXQgciBvZiBlKVguZXJyb3Iocik7dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApfX0sImxvYWRSZWdpc3RlcmVkRGlhZ3JhbXMiKTt5dCgpO2ZyKCk7dmFyIF9DPSJjb21tIixEQz0icnVsZSIsTEM9ImRlY2wiO3ZhciB4eGU9IkBpbXBvcnQiO3ZhciBieGU9IkBuYW1lc3BhY2UiLFR4ZT0iQGtleWZyYW1lcyI7dmFyIHd4ZT0iQGxheWVyIjt2YXIgaSQ9TWF0aC5hYnMsQjQ9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBSQyh0KXtyZXR1cm4gdC50cmltKCl9byhSQywidHJpbSIpO2Z1bmN0aW9uIEY0KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGUscil9byhGNCwicmVwbGFjZSIpO2Z1bmN0aW9uIGt4ZSh0LGUscil7cmV0dXJuIHQuaW5kZXhPZihlLHIpfW8oa3hlLCJpbmRleG9mIik7ZnVuY3Rpb24gWGYodCxlKXtyZXR1cm4gdC5jaGFyQ29kZUF0KGUpfDB9byhYZiwiY2hhcmF0Iik7ZnVuY3Rpb24gamYodCxlLHIpe3JldHVybiB0LnNsaWNlKGUscil9byhqZiwic3Vic3RyIik7ZnVuY3Rpb24gVG8odCl7cmV0dXJuIHQubGVuZ3RofW8oVG8sInN0cmxlbiIpO2Z1bmN0aW9uIEV4ZSh0KXtyZXR1cm4gdC5sZW5ndGh9byhFeGUsInNpemVvZiIpO2Z1bmN0aW9uIGt5KHQsZSl7cmV0dXJuIGUucHVzaCh0KSx0fW8oa3ksImFwcGVuZCIpO3ZhciBOQz0xLEV5PTEsU3hlPTAsbGw9MCxJaT0wLEN5PSIiO2Z1bmN0aW9uIE1DKHQsZSxyLG4saSxhLHMsbCl7cmV0dXJue3ZhbHVlOnQscm9vdDplLHBhcmVudDpyLHR5cGU6bixwcm9wczppLGNoaWxkcmVuOmEsbGluZTpOQyxjb2x1bW46RXksbGVuZ3RoOnMscmV0dXJuOiIiLHNpYmxpbmdzOmx9fW8oTUMsIm5vZGUiKTtmdW5jdGlvbiBDeGUoKXtyZXR1cm4gSWl9byhDeGUsImNoYXIiKTtmdW5jdGlvbiBBeGUoKXtyZXR1cm4gSWk9bGw+MD9YZihDeSwtLWxsKTowLEV5LS0sSWk9PT0xMCYmKEV5PTEsTkMtLSksSWl9byhBeGUsInByZXYiKTtmdW5jdGlvbiBjbCgpe3JldHVybiBJaT1sbDxTeGU/WGYoQ3ksbGwrKyk6MCxFeSsrLElpPT09MTAmJihFeT0xLE5DKyspLElpfW8oY2wsIm5leHQiKTtmdW5jdGlvbiBsaCgpe3JldHVybiBYZihDeSxsbCl9byhsaCwicGVlayIpO2Z1bmN0aW9uICQ0KCl7cmV0dXJuIGxsfW8oJDQsImNhcmV0Iik7ZnVuY3Rpb24gSUModCxlKXtyZXR1cm4gamYoQ3ksdCxlKX1vKElDLCJzbGljZSIpO2Z1bmN0aW9uIFN5KHQpe3N3aXRjaCh0KXtjYXNlIDA6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiA1O2Nhc2UgMzM6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDc6Y2FzZSA2MjpjYXNlIDY0OmNhc2UgMTI2OmNhc2UgNTk6Y2FzZSAxMjM6Y2FzZSAxMjU6cmV0dXJuIDQ7Y2FzZSA1ODpyZXR1cm4gMztjYXNlIDM0OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDkxOnJldHVybiAyO2Nhc2UgNDE6Y2FzZSA5MzpyZXR1cm4gMX1yZXR1cm4gMH1vKFN5LCJ0b2tlbiIpO2Z1bmN0aW9uIF94ZSh0KXtyZXR1cm4gTkM9RXk9MSxTeGU9VG8oQ3k9dCksbGw9MCxbXX1vKF94ZSwiYWxsb2MiKTtmdW5jdGlvbiBEeGUodCl7cmV0dXJuIEN5PSIiLHR9byhEeGUsImRlYWxsb2MiKTtmdW5jdGlvbiBPQyh0KXtyZXR1cm4gUkMoSUMobGwtMSxhJCh0PT09OTE/dCsyOnQ9PT00MD90KzE6dCkpKX1vKE9DLCJkZWxpbWl0Iik7ZnVuY3Rpb24gTHhlKHQpe2Zvcig7KElpPWxoKCkpJiZJaTwzMzspY2woKTtyZXR1cm4gU3kodCk+Mnx8U3koSWkpPjM/IiI6IiAifW8oTHhlLCJ3aGl0ZXNwYWNlIik7ZnVuY3Rpb24gUnhlKHQsZSl7Zm9yKDstLWUmJmNsKCkmJiEoSWk8NDh8fElpPjEwMnx8SWk+NTcmJklpPDY1fHxJaT43MCYmSWk8OTcpOyk7cmV0dXJuIElDKHQsJDQoKSsoZTw2JiZsaCgpPT0zMiYmY2woKT09MzIpKX1vKFJ4ZSwiZXNjYXBpbmciKTtmdW5jdGlvbiBhJCh0KXtmb3IoO2NsKCk7KXN3aXRjaChJaSl7Y2FzZSB0OnJldHVybiBsbDtjYXNlIDM0OmNhc2UgMzk6dCE9PTM0JiZ0IT09MzkmJmEkKElpKTticmVhaztjYXNlIDQwOnQ9PT00MSYmYSQodCk7YnJlYWs7Y2FzZSA5MjpjbCgpO2JyZWFrfXJldHVybiBsbH1vKGEkLCJkZWxpbWl0ZXIiKTtmdW5jdGlvbiBOeGUodCxlKXtmb3IoO2NsKCkmJnQrSWkhPT01NzspaWYodCtJaT09PTg0JiZsaCgpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitJQyhlLGxsLTEpKyIqIitCNCh0PT09NDc/dDpjbCgpKX1vKE54ZSwiY29tbWVudGVyIik7ZnVuY3Rpb24gTXhlKHQpe2Zvcig7IVN5KGxoKCkpOyljbCgpO3JldHVybiBJQyh0LGxsKX1vKE14ZSwiaWRlbnRpZmllciIpO2Z1bmN0aW9uIFB4ZSh0KXtyZXR1cm4gRHhlKFBDKCIiLG51bGwsbnVsbCxudWxsLFsiIl0sdD1feGUodCksMCxbMF0sdCkpfW8oUHhlLCJjb21waWxlIik7ZnVuY3Rpb24gUEModCxlLHIsbixpLGEscyxsLHUpe2Zvcih2YXIgaD0wLGY9MCxkPXMscD0wLG09MCxnPTAseT0xLHY9MSx4PTEsYj0wLFQ9IiIsUz1pLHc9YSxFPW4sXz1UO3Y7KXN3aXRjaChnPWIsYj1jbCgpKXtjYXNlIDQwOmlmKGchPTEwOCYmWGYoXyxkLTEpPT01OCl7a3hlKF8rPUY0KE9DKGIpLCImIiwiJlxmIiksIiZcZiIsaSQoaD9sW2gtMV06MCkpIT0tMSYmKHg9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOl8rPU9DKGIpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpfKz1MeGUoZyk7YnJlYWs7Y2FzZSA5MjpfKz1SeGUoJDQoKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKGxoKCkpe2Nhc2UgNDI6Y2FzZSA0NzpreShkaXQoTnhlKGNsKCksJDQoKSksZSxyLHUpLHUpLChTeShnfHwxKT09NXx8U3kobGgoKXx8MSk9PTUpJiZUbyhfKSYmamYoXywtMSx2b2lkIDApIT09IiAiJiYoXys9IiAiKTticmVhaztkZWZhdWx0Ol8rPSIvIn1icmVhaztjYXNlIDEyMyp5OmxbaCsrXT1UbyhfKSp4O2Nhc2UgMTI1Knk6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKGIpe2Nhc2UgMDpjYXNlIDEyNTp2PTA7Y2FzZSA1OStmOng9PS0xJiYoXz1GNChfLC9cZi9nLCIiKSksbT4wJiYoVG8oXyktZHx8eT09PTAmJmc9PT00NykmJmt5KG0+MzI/T3hlKF8rIjsiLG4scixkLTEsdSk6T3hlKEY0KF8sIiAiLCIiKSsiOyIsbixyLGQtMix1KSx1KTticmVhaztjYXNlIDU5Ol8rPSI7IjtkZWZhdWx0OmlmKGt5KEU9SXhlKF8sZSxyLGgsZixpLGwsVCxTPVtdLHc9W10sZCxhKSxhKSxiPT09MTIzKWlmKGY9PT0wKVBDKF8sZSxFLEUsUyxhLGQsbCx3KTtlbHNle3N3aXRjaChwKXtjYXNlIDk5OmlmKFhmKF8sMyk9PT0xMTApYnJlYWs7Y2FzZSAxMDg6aWYoWGYoXywyKT09PTk3KWJyZWFrO2RlZmF1bHQ6Zj0wO2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1On1mP1BDKHQsRSxFLG4mJmt5KEl4ZSh0LEUsRSwwLDAsaSxsLFQsaSxTPVtdLGQsdyksdyksaSx3LGQsbCxuP1M6dyk6UEMoXyxFLEUsRSxbIiJdLHcsMCxsLHcpfX1oPWY9bT0wLHk9eD0xLFQ9Xz0iIixkPXM7YnJlYWs7Y2FzZSA1ODpkPTErVG8oXyksbT1nO2RlZmF1bHQ6aWYoeTwxKXtpZihiPT0xMjMpLS15O2Vsc2UgaWYoYj09MTI1JiZ5Kys9PTAmJkF4ZSgpPT0xMjUpY29udGludWV9c3dpdGNoKF8rPUI0KGIpLGIqeSl7Y2FzZSAzODp4PWY+MD8xOihfKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OmxbaCsrXT0oVG8oXyktMSkqeCx4PTE7YnJlYWs7Y2FzZSA2NDpsaCgpPT09NDUmJihfKz1PQyhjbCgpKSkscD1saCgpLGY9ZD1UbyhUPV8rPU14ZSgkNCgpKSksYisrO2JyZWFrO2Nhc2UgNDU6Zz09PTQ1JiZUbyhfKT09MiYmKHk9MCl9fXJldHVybiBhfW8oUEMsInBhcnNlIik7ZnVuY3Rpb24gSXhlKHQsZSxyLG4saSxhLHMsbCx1LGgsZixkKXtmb3IodmFyIHA9aS0xLG09aT09PTA/YTpbIiJdLGc9RXhlKG0pLHk9MCx2PTAseD0wO3k8bjsrK3kpZm9yKHZhciBiPTAsVD1qZih0LHArMSxwPWkkKHY9c1t5XSkpLFM9dDtiPGc7KytiKShTPVJDKHY+MD9tW2JdKyIgIitUOkY0KFQsLyZcZi9nLG1bYl0pKSkmJih1W3grK109Uyk7cmV0dXJuIE1DKHQsZSxyLGk9PT0wP0RDOmwsdSxoLGYsZCl9byhJeGUsInJ1bGVzZXQiKTtmdW5jdGlvbiBkaXQodCxlLHIsbil7cmV0dXJuIE1DKHQsZSxyLF9DLEI0KEN4ZSgpKSxqZih0LDIsLTIpLDAsbil9byhkaXQsImNvbW1lbnQiKTtmdW5jdGlvbiBPeGUodCxlLHIsbixpKXtyZXR1cm4gTUModCxlLHIsTEMsamYodCwwLG4pLGpmKHQsbisxLC0xKSxuLGkpfW8oT3hlLCJkZWNsYXJhdGlvbiIpO2Z1bmN0aW9uIEJDKHQsZSl7Zm9yKHZhciByPSIiLG49MDtuPHQubGVuZ3RoO24rKylyKz1lKHRbbl0sbix0LGUpfHwiIjtyZXR1cm4gcn1vKEJDLCJzZXJpYWxpemUiKTtmdW5jdGlvbiBCeGUodCxlLHIsbil7c3dpdGNoKHQudHlwZSl7Y2FzZSB3eGU6aWYodC5jaGlsZHJlbi5sZW5ndGgpYnJlYWs7Y2FzZSB4eGU6Y2FzZSBieGU6Y2FzZSBMQzpyZXR1cm4gdC5yZXR1cm49dC5yZXR1cm58fHQudmFsdWU7Y2FzZSBfQzpyZXR1cm4iIjtjYXNlIFR4ZTpyZXR1cm4gdC5yZXR1cm49dC52YWx1ZSsieyIrQkModC5jaGlsZHJlbixuKSsifSI7Y2FzZSBEQzppZighVG8odC52YWx1ZT10LnByb3BzLmpvaW4oIiwiKSkpcmV0dXJuIiJ9cmV0dXJuIFRvKHI9QkModC5jaGlsZHJlbixuKSk/dC5yZXR1cm49dC52YWx1ZSsieyIrcisifSI6IiJ9byhCeGUsInN0cmluZ2lmeSIpO0w3KCk7YWsoKTtYTygpO3ZhciBwaXQ9ImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50IjtmdW5jdGlvbiBGeGUodCxlKXt0LmF0dHIoInJvbGUiLHBpdCksZSE9PSIiJiZ0LmF0dHIoImFyaWEtcm9sZWRlc2NyaXB0aW9uIixlKX1vKEZ4ZSwic2V0QTExeURpYWdyYW1JbmZvIik7ZnVuY3Rpb24gJHhlKHQsZSxyLG4pe2lmKHQuaW5zZXJ0IT09dm9pZCAwKXtpZihyKXtsZXQgaT1gY2hhcnQtZGVzYy0ke259YDt0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLGkpLHQuaW5zZXJ0KCJkZXNjIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLGkpLnRleHQocil9aWYoZSl7bGV0IGk9YGNoYXJ0LXRpdGxlLSR7bn1gO3QuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixpKSx0Lmluc2VydCgidGl0bGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIsaSkudGV4dChlKX19fW8oJHhlLCJhZGRTVkdhMTF5VGl0bGVEZXNjcmlwdGlvbiIpO2cwKCk7bWkoKTttaSgpO0d0KCk7cmQoKTtuNygpO2VyKCk7dmFyIEF5PWNsYXNzIHR7Y29uc3RydWN0b3IoZSxyLG4saSxhKXt0aGlzLnR5cGU9ZTt0aGlzLnRleHQ9cjt0aGlzLmRiPW47dGhpcy5wYXJzZXI9aTt0aGlzLnJlbmRlcmVyPWF9c3RhdGlje28odGhpcywiRGlhZ3JhbSIpfXN0YXRpYyBhc3luYyBmcm9tVGV4dChlLHI9e30pe2xldCBuPXRyKCksaT1tMChlLG4pO2U9WmooZSkrYApgO3RyeXtpdihpKX1jYXRjaHtsZXQgaD16JChpKTtpZighaCl0aHJvdyBuZXcgcDAoYERpYWdyYW0gJHtpfSBub3QgZm91bmQuYCk7bGV0e2lkOmYsZGlhZ3JhbTpkfT1hd2FpdCBoKCk7ZGQoZixkKX1sZXR7ZGI6YSxwYXJzZXI6cyxyZW5kZXJlcjpsLGluaXQ6dX09aXYoaSk7cmV0dXJuIHMucGFyc2VyJiYocy5wYXJzZXIueXk9YSksYS5jbGVhcj8uKCksdT8uKG4pLHIudGl0bGUmJmEuc2V0RGlhZ3JhbVRpdGxlPy4oci50aXRsZSksYXdhaXQgcy5wYXJzZShlKSxuZXcgdChpLGUsYSxzLGwpfWFzeW5jIHJlbmRlcihlLHIpe2F3YWl0IHRoaXMucmVuZGVyZXIuZHJhdyh0aGlzLnRleHQsZSxyLHRoaXMpfWdldFBhcnNlcigpe3JldHVybiB0aGlzLnBhcnNlcn1nZXRUeXBlKCl7cmV0dXJuIHRoaXMudHlwZX19O3ByKCk7dmFyIHp4ZT1bXTt2YXIgR3hlPW8oKCk9Pnt6eGUuZm9yRWFjaCh0PT57dCgpfSksenhlPVtdfSwiYXR0YWNoRnVuY3Rpb25zIik7eXQoKTt2YXIgVnhlPW8odD0+dC5yZXBsYWNlKC9eXHMqJSUoPyF7KVteXG5dK1xuPy9nbSwiIikudHJpbVN0YXJ0KCksImNsZWFudXBDb21tZW50cyIpO1E0KCk7UFQoKTtmdW5jdGlvbiBVeGUodCl7bGV0IGU9dC5tYXRjaChLNCk7aWYoIWUpcmV0dXJue3RleHQ6dCxtZXRhZGF0YTp7fX07bGV0IHI9VG0oZVsxXSx7c2NoZW1hOmJtfSk/P3t9O3I9dHlwZW9mIHI9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShyKT9yOnt9O2xldCBuPXt9O3JldHVybiByLmRpc3BsYXlNb2RlJiYobi5kaXNwbGF5TW9kZT1yLmRpc3BsYXlNb2RlLnRvU3RyaW5nKCkpLHIudGl0bGUmJihuLnRpdGxlPXIudGl0bGUudG9TdHJpbmcoKSksci5jb25maWcmJihuLmNvbmZpZz1yLmNvbmZpZykse3RleHQ6dC5zbGljZShlWzBdLmxlbmd0aCksbWV0YWRhdGE6bn19byhVeGUsImV4dHJhY3RGcm9udE1hdHRlciIpO2VyKCk7dmFyIG1pdD1vKHQ9PnQucmVwbGFjZSgvXHJcbj8vZyxgCmApLnJlcGxhY2UoLzwoXHcrKShbXj5dKik+L2csKGUscixuKT0+IjwiK3Irbi5yZXBsYWNlKC89IihbXiJdKikiL2csIj0nJDEnIikrIj4iKSwiY2xlYW51cFRleHQiKSxnaXQ9byh0PT57bGV0e3RleHQ6ZSxtZXRhZGF0YTpyfT1VeGUodCkse2Rpc3BsYXlNb2RlOm4sdGl0bGU6aSxjb25maWc6YT17fX09cjtyZXR1cm4gbiYmKGEuZ2FudHR8fChhLmdhbnR0PXt9KSxhLmdhbnR0LmRpc3BsYXlNb2RlPW4pLHt0aXRsZTppLGNvbmZpZzphLHRleHQ6ZX19LCJwcm9jZXNzRnJvbnRtYXR0ZXIiKSx5aXQ9byh0PT57bGV0IGU9VnQuZGV0ZWN0SW5pdCh0KT8/e30scj1WdC5kZXRlY3REaXJlY3RpdmUodCwid3JhcCIpO3JldHVybiBBcnJheS5pc0FycmF5KHIpP2Uud3JhcD1yLnNvbWUoKHt0eXBlOm59KT0+bj09PSJ3cmFwIik6cj8udHlwZT09PSJ3cmFwIiYmKGUud3JhcD0hMCkse3RleHQ6S2oodCksZGlyZWN0aXZlOmV9fSwicHJvY2Vzc0RpcmVjdGl2ZXMiKTtmdW5jdGlvbiBzJCh0KXtsZXQgZT1taXQodCkscj1naXQoZSksbj15aXQoci50ZXh0KSxpPSRuKHIuY29uZmlnLG4uZGlyZWN0aXZlKTtyZXR1cm4gdD1WeGUobi50ZXh0KSx7Y29kZTp0LHRpdGxlOnIudGl0bGUsY29uZmlnOml9fW8ocyQsInByZXByb2Nlc3NEaWFncmFtIik7VEEoKTtuMygpO2VyKCk7ZnVuY3Rpb24gSHhlKHQpe2xldCBlPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSxyPUFycmF5LmZyb20oZSxuPT5TdHJpbmcuZnJvbUNvZGVQb2ludChuKSkuam9pbigiIik7cmV0dXJuIGJ0b2Eocil9byhIeGUsInRvQmFzZTY0Iik7dmFyIHZpdD01ZTQseGl0PSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIixiaXQ9InNhbmRib3giLFRpdD0ibG9vc2UiLHdpdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGtpdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsRWl0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTaXQ9IjEwMCUiLENpdD0iMTAwJSIsQWl0PSJib3JkZXI6MDttYXJnaW46MDsiLF9pdD0ibWFyZ2luOjAiLERpdD0iYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uIGFsbG93LXBvcHVwcyIsTGl0PSdUaGUgImlmcmFtZSIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLicsUml0PVsiZm9yZWlnbm9iamVjdCJdLE5pdD1bImRvbWluYW50LWJhc2VsaW5lIl07ZnVuY3Rpb24gWHhlKHQpe2xldCBlPXMkKHQpO3JldHVybiAkeSgpLE16KGUuY29uZmlnPz97fSksZX1vKFh4ZSwicHJvY2Vzc0FuZFNldENvbmZpZ3MiKTthc3luYyBmdW5jdGlvbiBNaXQodCxlKXt3eSgpO3RyeXtsZXR7Y29kZTpyLGNvbmZpZzpufT1YeGUodCk7cmV0dXJue2RpYWdyYW1UeXBlOihhd2FpdCBqeGUocikpLnR5cGUsY29uZmlnOm59fWNhdGNoKHIpe2lmKGU/LnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IHJ9fW8oTWl0LCJwYXJzZSIpO3ZhciBXeGU9bygodCxlLHI9W10pPT5gCi4ke3R9ICR7ZX0geyAke3Iuam9pbigiICFpbXBvcnRhbnQ7ICIpfSAhaW1wb3J0YW50OyB9YCwiY3NzSW1wb3J0YW50U3R5bGVzIiksSWl0PW8oKHQsZT1uZXcgTWFwKT0+e2xldCByPSIiO2lmKHQudGhlbWVDU1MhPT12b2lkIDAmJihyKz1gCiR7dC50aGVtZUNTU31gKSx0LmZvbnRGYW1pbHkhPT12b2lkIDAmJihyKz1gCjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX19YCksdC5hbHRGb250RmFtaWx5IT09dm9pZCAwJiYocis9YAo6cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICR7dC5hbHRGb250RmFtaWx5fX1gKSxlIGluc3RhbmNlb2YgTWFwKXtsZXQgcz10Lmh0bWxMYWJlbHM/P3QuZmxvd2NoYXJ0Py5odG1sTGFiZWxzP1siPiAqIiwic3BhbiJdOlsicmVjdCIsInBvbHlnb24iLCJlbGxpcHNlIiwiY2lyY2xlIiwicGF0aCJdO2UuZm9yRWFjaChsPT57aHIobC5zdHlsZXMpfHxzLmZvckVhY2godT0+e3IrPVd4ZShsLmlkLHUsbC5zdHlsZXMpfSksaHIobC50ZXh0U3R5bGVzKXx8KHIrPVd4ZShsLmlkLCJ0c3BhbiIsKGw/LnRleHRTdHlsZXN8fFtdKS5tYXAodT0+dS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKSkpKX0pfXJldHVybiByfSwiY3JlYXRlQ3NzU3R5bGVzIiksT2l0PW8oKHQsZSxyLG4pPT57bGV0IGk9SWl0KHQsciksYT1NVihlLGksdC50aGVtZVZhcmlhYmxlcyk7cmV0dXJuIEJDKFB4ZShgJHtufXske2F9fWApLEJ4ZSl9LCJjcmVhdGVVc2VyU3R5bGVzIiksUGl0PW8oKHQ9IiIsZSxyKT0+e2xldCBuPXQ7cmV0dXJuIXImJiFlJiYobj1uLnJlcGxhY2UoL21hcmtlci1lbmQ9InVybFwoW1xkKy4vOj0/QS1aYS16LV0qPyMvZywnbWFya2VyLWVuZD0idXJsKCMnKSksbj1uYShuKSxuPW4ucmVwbGFjZSgvPGJyPi9nLCI8YnIvPiIpLG59LCJjbGVhblVwU3ZnQ29kZSIpLEJpdD1vKCh0PSIiLGUpPT57bGV0IHI9ZT8udmlld0JveD8uYmFzZVZhbD8uaGVpZ2h0P2Uudmlld0JveC5iYXNlVmFsLmhlaWdodCsicHgiOkNpdCxuPUh4ZShgPGJvZHkgc3R5bGU9IiR7X2l0fSI+JHt0fTwvYm9keT5gKTtyZXR1cm5gPGlmcmFtZSBzdHlsZT0id2lkdGg6JHtTaXR9O2hlaWdodDoke3J9OyR7QWl0fSIgc3JjPSJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PVVURi04O2Jhc2U2NCwke259IiBzYW5kYm94PSIke0RpdH0iPgogICR7TGl0fQo8L2lmcmFtZT5gfSwicHV0SW50b0lGcmFtZSIpLHF4ZT1vKCh0LGUscixuLGkpPT57bGV0IGE9dC5hcHBlbmQoImRpdiIpO2EuYXR0cigiaWQiLHIpLG4mJmEuYXR0cigic3R5bGUiLG4pO2xldCBzPWEuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsZSkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLHdpdCk7cmV0dXJuIGkmJnMuYXR0cigieG1sbnM6eGxpbmsiLGkpLHMuYXBwZW5kKCJnIiksdH0sImFwcGVuZERpdlN2Z0ciKTtmdW5jdGlvbiBZeGUodCxlKXtyZXR1cm4gdC5hcHBlbmQoImlmcmFtZSIpLmF0dHIoImlkIixlKS5hdHRyKCJzdHlsZSIsIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IikuYXR0cigic2FuZGJveCIsIiIpfW8oWXhlLCJzYW5kYm94ZWRJZnJhbWUiKTt2YXIgRml0PW8oKHQsZSxyLG4pPT57dC5nZXRFbGVtZW50QnlJZChlKT8ucmVtb3ZlKCksdC5nZXRFbGVtZW50QnlJZChyKT8ucmVtb3ZlKCksdC5nZXRFbGVtZW50QnlJZChuKT8ucmVtb3ZlKCl9LCJyZW1vdmVFeGlzdGluZ0VsZW1lbnRzIiksJGl0PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe3d5KCk7bGV0IG49WHhlKGUpO2U9bi5jb2RlO2xldCBpPXRyKCk7WC5kZWJ1ZyhpKSxlLmxlbmd0aD4oaT8ubWF4VGV4dFNpemU/P3ZpdCkmJihlPXhpdCk7bGV0IGE9IiMiK3Qscz0iaSIrdCxsPSIjIitzLHU9ImQiK3QsaD0iIyIrdSxmPW8oKCk9PntsZXQgTD1HZShwP2w6aCkubm9kZSgpO0wmJiJyZW1vdmUiaW4gTCYmTC5yZW1vdmUoKX0sInJlbW92ZVRlbXBFbGVtZW50cyIpLGQ9R2UoImJvZHkiKSxwPWkuc2VjdXJpdHlMZXZlbD09PWJpdCxtPWkuc2VjdXJpdHlMZXZlbD09PVRpdCxnPWkuZm9udEZhbWlseTtpZihyIT09dm9pZCAwKXtpZihyJiYoci5pbm5lckhUTUw9IiIpLHApe2xldCBrPVl4ZShHZShyKSxzKTtkPUdlKGsubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksZC5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBkPUdlKHIpO3F4ZShkLHQsdSxgZm9udC1mYW1pbHk6ICR7Z31gLGtpdCl9ZWxzZXtpZihGaXQoZG9jdW1lbnQsdCx1LHMpLHApe2xldCBrPVl4ZShHZSgiYm9keSIpLHMpO2Q9R2Uoay5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxkLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIGQ9R2UoImJvZHkiKTtxeGUoZCx0LHUpfWxldCB5LHY7dHJ5e3k9YXdhaXQgQXkuZnJvbVRleHQoZSx7dGl0bGU6bi50aXRsZX0pfWNhdGNoKGspe2lmKGkuc3VwcHJlc3NFcnJvclJlbmRlcmluZyl0aHJvdyBmKCksazt5PWF3YWl0IEF5LmZyb21UZXh0KCJlcnJvciIpLHY9a31sZXQgeD1kLnNlbGVjdChoKS5ub2RlKCksYj15LnR5cGUsVD14LmZpcnN0Q2hpbGQsUz1ULmZpcnN0Q2hpbGQsdz15LnJlbmRlcmVyLmdldENsYXNzZXM/LihlLHkpLEU9T2l0KGksYix3LGEpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtfLmlubmVySFRNTD1FLFQuaW5zZXJ0QmVmb3JlKF8sUyk7dHJ5e2F3YWl0IHkucmVuZGVyZXIuZHJhdyhlLHQsRGIudmVyc2lvbix5KX1jYXRjaChrKXt0aHJvdyBpLnN1cHByZXNzRXJyb3JSZW5kZXJpbmc/ZigpOmEwZS5kcmF3KGUsdCxEYi52ZXJzaW9uKSxrfWxldCBDPWQuc2VsZWN0KGAke2h9IHN2Z2ApLEQ9eS5kYi5nZXRBY2NUaXRsZT8uKCksTz15LmRiLmdldEFjY0Rlc2NyaXB0aW9uPy4oKTtHaXQoYixDLEQsTyksZC5zZWxlY3QoYFtpZD0iJHt0fSJdYCkuc2VsZWN0QWxsKCJmb3JlaWdub2JqZWN0ID4gKiIpLmF0dHIoInhtbG5zIixFaXQpO2xldCBSPWQuc2VsZWN0KGgpLm5vZGUoKS5pbm5lckhUTUw7aWYoWC5kZWJ1ZygiY29uZmlnLmFycm93TWFya2VyQWJzb2x1dGUiLGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSksUj1QaXQoUixwLGRyKGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkpLHApe2xldCBrPWQuc2VsZWN0KGgrIiBzdmciKS5ub2RlKCk7Uj1CaXQoUixrKX1lbHNlIG18fChSPW1oLnNhbml0aXplKFIse0FERF9UQUdTOlJpdCxBRERfQVRUUjpOaXQsSFRNTF9JTlRFR1JBVElPTl9QT0lOVFM6e2ZvcmVpZ25vYmplY3Q6ITB9fSkpO2lmKEd4ZSgpLHYpdGhyb3cgdjtyZXR1cm4gZigpLHtkaWFncmFtVHlwZTpiLHN2ZzpSLGJpbmRGdW5jdGlvbnM6eS5kYi5iaW5kRnVuY3Rpb25zfX0sInJlbmRlciIpO2Z1bmN0aW9uIHppdCh0PXt9KXtsZXQgZT1Vbih7fSx0KTtlPy5mb250RmFtaWx5JiYhZS50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKGUudGhlbWVWYXJpYWJsZXN8fChlLnRoZW1lVmFyaWFibGVzPXt9KSxlLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHk9ZS5mb250RmFtaWx5KSxMeihlKSxlPy50aGVtZSYmZS50aGVtZSBpbiBFbz9lLnRoZW1lVmFyaWFibGVzPUVvW2UudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGUudGhlbWVWYXJpYWJsZXMpOmUmJihlLnRoZW1lVmFyaWFibGVzPUVvLmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoZS50aGVtZVZhcmlhYmxlcykpO2xldCByPXR5cGVvZiBlPT0ib2JqZWN0Ij9UNyhlKTp3NygpO0R5KHIubG9nTGV2ZWwpLHd5KCl9byh6aXQsImluaXRpYWxpemUiKTt2YXIganhlPW8oKHQsZT17fSk9PntsZXR7Y29kZTpyfT1zJCh0KTtyZXR1cm4gQXkuZnJvbVRleHQocixlKX0sImdldERpYWdyYW1Gcm9tVGV4dCIpO2Z1bmN0aW9uIEdpdCh0LGUscixuKXtGeGUoZSx0KSwkeGUoZSxyLG4sZS5hdHRyKCJpZCIpKX1vKEdpdCwiYWRkQTExeUluZm8iKTt2YXIgS2Y9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOiRpdCxwYXJzZTpNaXQsZ2V0RGlhZ3JhbUZyb21UZXh0Omp4ZSxpbml0aWFsaXplOnppdCxnZXRDb25maWc6dHIsc2V0Q29uZmlnOmEzLGdldFNpdGVDb25maWc6dzcsdXBkYXRlU2l0ZUNvbmZpZzpSeixyZXNldDpvKCgpPT57JHkoKX0sInJlc2V0IiksZ2xvYmFsUmVzZXQ6bygoKT0+eyR5KHBoKX0sImdsb2JhbFJlc2V0IiksZGVmYXVsdENvbmZpZzpwaH0pO0R5KHRyKCkubG9nTGV2ZWwpOyR5KHRyKCkpO3JwKCk7ZXIoKTt2YXIgVml0PW8oKHQsZSxyKT0+e1gud2Fybih0KSxJOSh0KT8ociYmcih0LnN0cix0Lmhhc2gpLGUucHVzaCh7Li4udCxtZXNzYWdlOnQuc3RyLGVycm9yOnR9KSk6KHImJnIodCksdCBpbnN0YW5jZW9mIEVycm9yJiZlLnB1c2goe3N0cjp0Lm1lc3NhZ2UsbWVzc2FnZTp0Lm1lc3NhZ2UsaGFzaDp0Lm5hbWUsZXJyb3I6dH0pKX0sImhhbmRsZUVycm9yIiksS3hlPW8oYXN5bmMgZnVuY3Rpb24odD17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IFVpdCh0KX1jYXRjaChlKXtpZihJOShlKSYmWC5lcnJvcihlLnN0ciksY2gucGFyc2VFcnJvciYmY2gucGFyc2VFcnJvcihlKSwhdC5zdXBwcmVzc0Vycm9ycyl0aHJvdyBYLmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxlfX0sInJ1biIpLFVpdD1vKGFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6dCxxdWVyeVNlbGVjdG9yOmUsbm9kZXM6cn09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2xldCBuPUtmLmdldENvbmZpZygpO1guZGVidWcoYCR7dD8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCBpO2lmKHIpaT1yO2Vsc2UgaWYoZSlpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1guZGVidWcoYEZvdW5kICR7aS5sZW5ndGh9IGRpYWdyYW1zYCksbj8uc3RhcnRPbkxvYWQhPT12b2lkIDAmJihYLmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiK24/LnN0YXJ0T25Mb2FkKSxLZi51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpuPy5zdGFydE9uTG9hZH0pKTtsZXQgYT1uZXcgVnQuSW5pdElER2VuZXJhdG9yKG4uZGV0ZXJtaW5pc3RpY0lkcyxuLmRldGVybWluaXN0aWNJRFNlZWQpLHMsbD1bXTtmb3IobGV0IHUgb2YgQXJyYXkuZnJvbShpKSl7WC5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIit1LmlkKTtpZih1LmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTt1LnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7bGV0IGg9YG1lcm1haWQtJHthLm5leHQoKX1gO3M9dS5pbm5lckhUTUwscz1qNChWdC5lbnRpdHlEZWNvZGUocykpLnRyaW0oKS5yZXBsYWNlKC88YnJccypcLz8+L2dpLCI8YnIvPiIpO2xldCBmPVZ0LmRldGVjdEluaXQocyk7ZiYmWC5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGYpO3RyeXtsZXR7c3ZnOmQsYmluZEZ1bmN0aW9uczpwfT1hd2FpdCBlYmUoaCxzLHUpO3UuaW5uZXJIVE1MPWQsdCYmYXdhaXQgdChoKSxwJiZwKHUpfWNhdGNoKGQpe1ZpdChkLGwsY2gucGFyc2VFcnJvcil9fWlmKGwubGVuZ3RoPjApdGhyb3cgbFswXX0sInJ1blRocm93c0Vycm9ycyIpLFF4ZT1vKGZ1bmN0aW9uKHQpe0tmLmluaXRpYWxpemUodCl9LCJpbml0aWFsaXplIiksSGl0PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe1gud2FybigibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuIiksdCYmUXhlKHQpO2xldCBuPXtwb3N0UmVuZGVyQ2FsbGJhY2s6cixxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBlPT0ic3RyaW5nIj9uLnF1ZXJ5U2VsZWN0b3I9ZTplJiYoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P24ubm9kZXM9W2VdOm4ubm9kZXM9ZSksYXdhaXQgS3hlKG4pfSwiaW5pdCIpLFdpdD1vKGFzeW5jKHQse2xhenlMb2FkOmU9ITB9PXt9KT0+e3d5KCksTHkoLi4udCksZT09PSExJiZhd2FpdCB2eGUoKX0sInJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyIpLFp4ZT1vKGZ1bmN0aW9uKCl7aWYoY2guc3RhcnRPbkxvYWQpe2xldHtzdGFydE9uTG9hZDp0fT1LZi5nZXRDb25maWcoKTt0JiZjaC5ydW4oKS5jYXRjaChlPT5YLmVycm9yKCJNZXJtYWlkIGZhaWxlZCB0byBpbml0aWFsaXplIixlKSl9fSwiY29udGVudExvYWRlZCIpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixaeGUsITEpfXZhciBxaXQ9byhmdW5jdGlvbih0KXtjaC5wYXJzZUVycm9yPXR9LCJzZXRQYXJzZUVycm9ySGFuZGxlciIpLEZDPVtdLG8kPSExLEp4ZT1vKGFzeW5jKCk9PntpZighbyQpe2ZvcihvJD0hMDtGQy5sZW5ndGg+MDspe2xldCB0PUZDLnNoaWZ0KCk7aWYodCl0cnl7YXdhaXQgdCgpfWNhdGNoKGUpe1guZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIsZSl9fW8kPSExfX0sImV4ZWN1dGVRdWV1ZSIpLFlpdD1vKGFzeW5jKHQsZSk9Pm5ldyBQcm9taXNlKChyLG4pPT57bGV0IGk9bygoKT0+bmV3IFByb21pc2UoKGEscyk9PntLZi5wYXJzZSh0LGUpLnRoZW4obD0+e2EobCkscihsKX0sbD0+e1guZXJyb3IoIkVycm9yIHBhcnNpbmciLGwpLGNoLnBhcnNlRXJyb3I/LihsKSxzKGwpLG4obCl9KX0pLCJwZXJmb3JtQ2FsbCIpO0ZDLnB1c2goaSksSnhlKCkuY2F0Y2gobil9KSwicGFyc2UiKSxlYmU9bygodCxlLHIpPT5uZXcgUHJvbWlzZSgobixpKT0+e2xldCBhPW8oKCk9Pm5ldyBQcm9taXNlKChzLGwpPT57S2YucmVuZGVyKHQsZSxyKS50aGVuKHU9PntzKHUpLG4odSl9LHU9PntYLmVycm9yKCJFcnJvciBwYXJzaW5nIix1KSxjaC5wYXJzZUVycm9yPy4odSksbCh1KSxpKHUpfSl9KSwicGVyZm9ybUNhbGwiKTtGQy5wdXNoKGEpLEp4ZSgpLmNhdGNoKGkpfSksInJlbmRlciIpLFhpdD1vKCgpPT5PYmplY3Qua2V5cyhhdSkubWFwKHQ9Pih7aWQ6dH0pKSwiZ2V0UmVnaXN0ZXJlZERpYWdyYW1zTWV0YWRhdGEiKSxjaD17c3RhcnRPbkxvYWQ6ITAsbWVybWFpZEFQSTpLZixwYXJzZTpZaXQscmVuZGVyOmViZSxpbml0OkhpdCxydW46S3hlLHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtczpXaXQscmVnaXN0ZXJMYXlvdXRMb2FkZXJzOnROLGluaXRpYWxpemU6UXhlLHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6WnhlLHNldFBhcnNlRXJyb3JIYW5kbGVyOnFpdCxkZXRlY3RUeXBlOm0wLHJlZ2lzdGVySWNvblBhY2tzOlg0LGdldFJlZ2lzdGVyZWREaWFncmFtc01ldGFkYXRhOlhpdH0saml0PWNoO3JldHVybiB1YmUoS2l0KTt9KSgpOwovKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi8KLyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi8KLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmRvbXB1cmlmeS9kaXN0L3B1cmlmeS5lcy5tanM6CiAgKCohIEBsaWNlbnNlIERPTVB1cmlmeSAzLjIuNSB8IChjKSBDdXJlNTMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IFJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZSAyLjAgYW5kIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIHwgZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvMy4yLjUvTElDRU5TRSAqKQoKanMteWFtbC9kaXN0L2pzLXlhbWwubWpzOgogICgqISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKikKCmxvZGFzaC1lcy9sb2Rhc2guanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAgICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPSJlcyIgLW8gLi9gCiAgICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogICAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KICAgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogICAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogICAqKQoKY3l0b3NjYXBlL2Rpc3QvY3l0b3NjYXBlLmVzbS5tanM6CiAgKCohCiAgRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQogIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFJhbGYgUy4gRW5nZWxzY2hhbGwgKGh0dHA6Ly9lbmdlbHNjaGFsbC5jb20pCiAgTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlIChodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUKQogICopCiAgKCohCiAgRXZlbnQgb2JqZWN0IGJhc2VkIG9uIGpRdWVyeSBldmVudHMsIE1JVCBsaWNlbnNlCiAgCiAgaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UvCiAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UKICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAqKQogICgqISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKikKICAoKiEgUnVuZ2UtS3V0dGEgc3ByaW5nIHBoeXNpY3MgZnVuY3Rpb24gZ2VuZXJhdG9yLiBBZGFwdGVkIGZyb20gRnJhbWVyLmpzLCBjb3B5cmlnaHQgS29lbiBCb2suIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICopCiovCmdsb2JhbFRoaXNbIm1lcm1haWQiXSA9IGdsb2JhbFRoaXMuX19lc2J1aWxkX2VzbV9tZXJtYWlkX25tWyJtZXJtYWlkIl0uZGVmYXVsdDsK`;