uni-jsframework-vue3-dev.js 790 KB
//{"version":"4.63","encode":"base64"}
dmFyIF9fVW5pU2VydmljZVN0YXJ0VGltZV9fID0gRGF0ZS5ub3coKTt2YXIgZ2xvYmFsPXRoaXM7IHZhciBwcm9jZXNzPXtlbnY6e319OyB2YXIgc2V0VGltZW91dD1nbG9iYWwuc2V0VGltZW91dDsKKCgpPT57dmFyIEl2PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Y9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczt2YXIgZEk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwST1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO3ZhciBSdj0oZyxjLF8pPT5jIGluIGc/SXYoZyxjLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpffSk6Z1tjXT1fLHh2PShnLGMpPT57Zm9yKHZhciBfIGluIGN8fChjPXt9KSlkSS5jYWxsKGMsXykmJlJ2KGcsXyxjW19dKTtpZihrdilmb3IodmFyIF8gb2Yga3YoYykpcEkuY2FsbChjLF8pJiZSdihnLF8sY1tfXSk7cmV0dXJuIGd9O3ZhciBoST0oZyxjKT0+e2Zvcih2YXIgXyBpbiBjKUl2KGcsXyx7Z2V0OmNbX10sZW51bWVyYWJsZTohMH0pfTt2YXIgVnM9T2JqZWN0LmZyZWV6ZTtmdW5jdGlvbiBuZih7Z2V0Q3VycmVudFBhZ2VzOmcsdW5pOmMsVW5pU2hhcmVkOl8sVnVlOkEsVnVlU2hhcmVkOlJ9KXt2YXIgdz1mdW5jdGlvbihkLG0sSSxPZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGF0KHplKXtyZXR1cm4gemUuJHBhZ2V9ZnVuY3Rpb24gRXQoKXtsZXQgemU9ZygpLG90PXplLmxlbmd0aDtpZihvdClyZXR1cm4gemVbb3QtMV19ZnVuY3Rpb24gY2UoKXtsZXQgemU9RXQoKTtpZih6ZSlyZXR1cm4gemUuJHZtfWZ1bmN0aW9uIE8oemUsb3QsRHQpe2lmKEkuaXNTdHJpbmcoemUpKUR0PW90LG90PXplLHplPWNlKCk7ZWxzZSBpZih0eXBlb2YgemU9PSJudW1iZXIiKXtsZXQgbm49ZygpLmZpbmQoYW49PmF0KGFuKS5pZD09PXplKTtubj96ZT1ubi4kdm06emU9Y2UoKX1pZighemUpcmV0dXJuO2lmKHplLl9fY2FsbF9ob29rKXJldHVybiB6ZS5fX2NhbGxfaG9vayhvdCxEdCk7bGV0IGNuPXplLiRbb3RdO3JldHVybiBjbiYmbS5pbnZva2VBcnJheUZucyhjbixEdCl9ZnVuY3Rpb24gVHQoemUsb3QsRHQsY24pe0kuaXNGdW5jdGlvbihvdCkmJk9lLmluamVjdEhvb2soemUsb3QuYmluZChEdCksY24pfWZ1bmN0aW9uIHZyKHplLG90LER0KXtsZXQgY249emUubXBUeXBlfHxEdC4kbXBUeXBlO2lmKCEoIWNufHxjbj09PSJjb21wb25lbnQiKSYmKE9iamVjdC5rZXlzKHplKS5mb3JFYWNoKG5uPT57aWYobS5pc1VuaUxpZmVjeWNsZUhvb2sobm4semVbbm5dLCExKSl7bGV0IGFuPXplW25uXTtJLmlzQXJyYXkoYW4pP2FuLmZvckVhY2goem49PlR0KG5uLHpuLER0LG90KSk6VHQobm4sYW4sRHQsb3QpfX0pLGNuPT09InBhZ2UiKSl7b3QuX19pc1Zpc2libGU9ITA7dHJ5e2xldCBubj1vdC5hdHRycy5fX3BhZ2VRdWVyeTtPKER0LG0uT05fTE9BRCxubiksZGVsZXRlIG90LmF0dHJzLl9fcGFnZVF1ZXJ5O2xldCBhbj1EdC4kcGFnZTsoYW49PW51bGw/dm9pZCAwOmFuLm9wZW5UeXBlKSE9PSJwcmVsb2FkUGFnZSImJk8oRHQsbS5PTl9TSE9XKX1jYXRjaChubil7Y29uc29sZS5lcnJvcihubi5tZXNzYWdlK20uTElORUZFRUQrbm4uc3RhY2spfX19ZnVuY3Rpb24gcHQoemUsb3Qpe1oob3QsemUuJHJlbmRlcmpzLHplWyIkIittLlJFTkRFUkpTX01PRFVMRVNdKX1mdW5jdGlvbiBaKHplLG90LER0PXt9KXtpZighSS5pc0FycmF5KG90KSlyZXR1cm47bGV0IGNuPXplLnVpZCxubj16ZS4kd3hzTW9kdWxlc3x8KHplLiR3eHNNb2R1bGVzPVtdKSxhbj16ZS5jdHg7b3QuZm9yRWFjaCh6bj0+e0R0W3puXSYmKGFuW3puXT1zZShjbixEdFt6bl0sem4pLG5uLnB1c2goem4pKX0pfWZ1bmN0aW9uIHNlKHplLG90LER0KXtsZXQgY249e307cmV0dXJuIG5ldyBQcm94eShjbix7Z2V0KG5uLGFuKXtyZXR1cm4gY25bYW5dfHwoY25bYW5dPXBuKHplLG90LER0LGFuKSl9fSl9ZnVuY3Rpb24gcG4oemUsb3QsRHQsY24pe2xldCBubj0oKT0+e30sYW49KCk9Pm0uV1hTX1BST1RPQ09MK0pTT04uc3RyaW5naWZ5KFt6ZSxvdCxEdCsiLiIrY25dKTtyZXR1cm4gbmV3IFByb3h5KG5uLHtnZXQoem4sRHIpe3JldHVybiBEcj09PSJ0b0pTT04iP2FuOm5uW0RyXXx8KG5uW0RyXT1wbih6ZSxvdCxEdCsiLiIrY24sRHIpKX0sYXBwbHkoem4sRHIsbnIpe3JldHVybiBtLldYU19QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShbemUsb3QsRHQrIi4iK2NuLFsuLi5ucl1dKX19KX1mdW5jdGlvbiBNcih6ZSxvdCl7WihvdCx6ZS4kd3hzLHplWyIkIittLldYU19NT0RVTEVTXSl9ZnVuY3Rpb24gS24oemUsb3QsRHQpe01yKHplLG90KSxwdCh6ZSxvdCksdnIoemUsb3QsRHQpfWZ1bmN0aW9uIHNuKHplLG90LER0KXtyZXR1cm4gemVbb3RdPUR0fWZ1bmN0aW9uIGtuKHplLC4uLm90KXtsZXQgRHQ9dGhpc1t6ZV07cmV0dXJuIER0P0R0KC4uLm90KTooY29uc29sZS5lcnJvcihgbWV0aG9kICR7emV9IG5vdCBmb3VuZGApLG51bGwpfWZ1bmN0aW9uIExyKHplKXtsZXQgb3Q9emUuY29uZmlnLmVycm9ySGFuZGxlcjtyZXR1cm4gZnVuY3Rpb24oY24sbm4sYW4pe290JiZvdChjbixubixhbik7bGV0IHpuPXplLl9pbnN0YW5jZTtpZighem58fCF6bi5wcm94eSl0aHJvdyBjbjt6blttLk9OX0VSUk9SXT9PKHpuLnByb3h5LG0uT05fRVJST1IsY24pOk9lLmxvZ0Vycm9yKGNuLGFuLG5uP25uLiQudm5vZGU6bnVsbCwhMSl9fWZ1bmN0aW9uIFRyKHplLG90KXtyZXR1cm4gemU/Wy4uLm5ldyBTZXQoW10uY29uY2F0KHplLG90KSldOm90fWZ1bmN0aW9uIGVyKHplKXttLlVuaUxpZmVjeWNsZUhvb2tzLmZvckVhY2gob3Q9Pnt6ZVtvdF09VHJ9KX1sZXQgaG4sZW49IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IixSbj0vXig/OltBLVphLXpcZCsvXXs0fSkqPyg/OltBLVphLXpcZCsvXXsyfSg/Oj09KT98W0EtWmEtelxkKy9dezN9PT8pPyQvO3R5cGVvZiBhdG9iIT0iZnVuY3Rpb24iP2huPWZ1bmN0aW9uKHplKXtpZih6ZT1TdHJpbmcoemUpLnJlcGxhY2UoL1tcdFxuXGZcciBdKy9nLCIiKSwhUm4udGVzdCh6ZSkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXRvYicgb24gJ1dpbmRvdyc6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7emUrPSI9PSIuc2xpY2UoMi0oemUubGVuZ3RoJjMpKTtmb3IodmFyIG90LER0PSIiLGNuLG5uLGFuPTA7YW48emUubGVuZ3RoOylvdD1lbi5pbmRleE9mKHplLmNoYXJBdChhbisrKSk8PDE4fGVuLmluZGV4T2YoemUuY2hhckF0KGFuKyspKTw8MTJ8KGNuPWVuLmluZGV4T2YoemUuY2hhckF0KGFuKyspKSk8PDZ8KG5uPWVuLmluZGV4T2YoemUuY2hhckF0KGFuKyspKSksRHQrPWNuPT09NjQ/U3RyaW5nLmZyb21DaGFyQ29kZShvdD4+MTYmMjU1KTpubj09PTY0P1N0cmluZy5mcm9tQ2hhckNvZGUob3Q+PjE2JjI1NSxvdD4+OCYyNTUpOlN0cmluZy5mcm9tQ2hhckNvZGUob3Q+PjE2JjI1NSxvdD4+OCYyNTUsb3QmMjU1KTtyZXR1cm4gRHR9OmhuPWF0b2I7ZnVuY3Rpb24gdHIoemUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaG4oemUpLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiIlIisoIjAwIitvdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkuam9pbigiIikpfWZ1bmN0aW9uIHhuKCl7bGV0IHplPWMuZ2V0U3RvcmFnZVN5bmMoInVuaV9pZF90b2tlbiIpfHwiIixvdD16ZS5zcGxpdCgiLiIpO2lmKCF6ZXx8b3QubGVuZ3RoIT09MylyZXR1cm57dWlkOm51bGwscm9sZTpbXSxwZXJtaXNzaW9uOltdLHRva2VuRXhwaXJlZDowfTtsZXQgRHQ7dHJ5e0R0PUpTT04ucGFyc2UodHIob3RbMV0pKX1jYXRjaChjbil7dGhyb3cgbmV3IEVycm9yKCJcdTgzQjdcdTUzRDZcdTVGNTNcdTUyNERcdTc1MjhcdTYyMzdcdTRGRTFcdTYwNkZcdTUxRkFcdTk1MTlcdUZGMENcdThCRTZcdTdFQzZcdTk1MTlcdThCRUZcdTRGRTFcdTYwNkZcdTRFM0FcdUZGMUEiK2NuLm1lc3NhZ2UpfXJldHVybiBEdC50b2tlbkV4cGlyZWQ9RHQuZXhwKjFlMyxkZWxldGUgRHQuZXhwLGRlbGV0ZSBEdC5pYXQsRHR9ZnVuY3Rpb24gam4oemUpe3plLnVuaUlESGFzUm9sZT1mdW5jdGlvbihvdCl7bGV0e3JvbGU6RHR9PXhuKCk7cmV0dXJuIER0LmluZGV4T2Yob3QpPi0xfSx6ZS51bmlJREhhc1Blcm1pc3Npb249ZnVuY3Rpb24ob3Qpe2xldHtwZXJtaXNzaW9uOkR0fT14bigpO3JldHVybiB0aGlzLnVuaUlESGFzUm9sZSgiYWRtaW4iKXx8RHQuaW5kZXhPZihvdCk+LTF9LHplLnVuaUlEVG9rZW5WYWxpZD1mdW5jdGlvbigpe2xldHt0b2tlbkV4cGlyZWQ6b3R9PXhuKCk7cmV0dXJuIG90PkRhdGUubm93KCl9fWZ1bmN0aW9uIGhpKHplKXtsZXQgb3Q9emUuY29uZmlnO290LmVycm9ySGFuZGxlcj1tLmludm9rZUNyZWF0ZUVycm9ySGFuZGxlcih6ZSxMciksZXIob3Qub3B0aW9uTWVyZ2VTdHJhdGVnaWVzKTtsZXQgRHQ9b3QuZ2xvYmFsUHJvcGVydGllcztqbihEdCksRHQuJHNldD1zbixEdC4kYXBwbHlPcHRpb25zPUtuLER0LiRjYWxsTWV0aG9kPWtuLG0uaW52b2tlQ3JlYXRlVnVlQXBwSG9vayh6ZSl9cmV0dXJuIGQuaW5pdEFwcD1oaSxkfSh7fSxfLFIsQSk7cmV0dXJuIHd9ZnVuY3Rpb24gR2YoZyx7bnZ1ZTpjLFVuaVNoYXJlZDpfLFZ1ZVNoYXJlZDpBLFZ1ZVJlYWN0aXZpdHk6Un0pe2xldCB3PXtwbGF0Zm9ybTpjLmNvbmZpZy5lbnYucGxhdGZvcm0sVW5pU2hhcmVkOl8sVnVlU2hhcmVkOkEsVnVlUmVhY3Rpdml0eTpSfTtyZXR1cm4gZyh3LGMuZG9jdW1lbnQpfWZ1bmN0aW9uIGdJKHtzZXRUaW1lb3V0OmcsY2xlYXJUaW1lb3V0OmMsdW5pOl8sZ2V0Q3VycmVudFBhZ2VzOkEsVnVlOlIsd2VleDp3LHBsdXM6ZCxCcm9hZGNhc3RDaGFubmVsOm0sVW5pVmlld0pTQnJpZGdlOkksVnVlU2hhcmVkOk9lLFVuaVNoYXJlZDphdCxfX3VuaUNvbmZpZzpFdH0pe3ZhciBjZT1mdW5jdGlvbihPLFR0LHZyKXsidXNlIHN0cmljdCI7bGV0IHB0PVsibmF2aWdhdGUiLCJyZWRpcmVjdCIsInN3aXRjaFRhYiIsInJlTGF1bmNoIiwibmF2aWdhdGVCYWNrIl0sWj1bInNsaWRlLWluLXJpZ2h0Iiwic2xpZGUtaW4tbGVmdCIsInNsaWRlLWluLXRvcCIsInNsaWRlLWluLWJvdHRvbSIsImZhZGUtaW4iLCJ6b29tLW91dCIsInpvb20tZmFkZS1vdXQiLCJwb3AtaW4iLCJub25lIl0sc2U9WyJzbGlkZS1vdXQtcmlnaHQiLCJzbGlkZS1vdXQtbGVmdCIsInNsaWRlLW91dC10b3AiLCJzbGlkZS1vdXQtYm90dG9tIiwiZmFkZS1vdXQiLCJ6b29tLWluIiwiem9vbS1mYWRlLWluIiwicG9wLW91dCIsIm5vbmUiXSxwbj17aG92ZXJDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibmF2aWdhdG9yLWhvdmVyIn0sdXJsOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxvcGVuVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibmF2aWdhdGUiLHZhbGlkYXRvcih5KXtyZXR1cm4gQm9vbGVhbih+cHQuaW5kZXhPZih5KSl9fSxkZWx0YTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxob3ZlclN0YXJ0VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1MH0saG92ZXJTdGF5VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo2MDB9LGV4aXN0czp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0saG92ZXJTdG9wUHJvcGFnYXRpb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhbmltYXRpb25UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIiLHZhbGlkYXRvcih5KXtyZXR1cm4heXx8Wi5jb25jYXQoc2UpLmluY2x1ZGVzKHkpfX0sYW5pbWF0aW9uRHVyYXRpb246e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6MzAwfX07ZnVuY3Rpb24gTXIoeSl7cmV0dXJuKCk9PntpZih5Lm9wZW5UeXBlIT09Im5hdmlnYXRlQmFjayImJiF5LnVybCl7Y29uc29sZS5lcnJvcigiPG5hdmlnYXRvci8+IHNob3VsZCBoYXZlIHVybCBhdHRyaWJ1dGUgd2hlbiB1c2luZyBuYXZpZ2F0ZVRvLCByZWRpcmVjdFRvLCByZUxhdW5jaCBvciBzd2l0Y2hUYWIiKTtyZXR1cm59bGV0IEQ9cGFyc2VJbnQoeS5hbmltYXRpb25EdXJhdGlvbik7c3dpdGNoKHkub3BlblR5cGUpe2Nhc2UibmF2aWdhdGUiOl8ubmF2aWdhdGVUbyh7dXJsOnkudXJsLGFuaW1hdGlvblR5cGU6eS5hbmltYXRpb25UeXBlfHwicG9wLWluIixhbmltYXRpb25EdXJhdGlvbjpEfSk7YnJlYWs7Y2FzZSJyZWRpcmVjdCI6Xy5yZWRpcmVjdFRvKHt1cmw6eS51cmwsZXhpc3RzOnkuZXhpc3RzfSk7YnJlYWs7Y2FzZSJzd2l0Y2hUYWIiOl8uc3dpdGNoVGFiKHt1cmw6eS51cmx9KTticmVhaztjYXNlInJlTGF1bmNoIjpfLnJlTGF1bmNoKHt1cmw6eS51cmx9KTticmVhaztjYXNlIm5hdmlnYXRlQmFjayI6Xy5uYXZpZ2F0ZUJhY2soe2RlbHRhOnkuZGVsdGEsYW5pbWF0aW9uVHlwZTp5LmFuaW1hdGlvblR5cGV8fCJwb3Atb3V0IixhbmltYXRpb25EdXJhdGlvbjpEfSk7YnJlYWt9fX1mdW5jdGlvbiBLbih5KXtpZih5LmhvdmVyQ2xhc3MmJnkuaG92ZXJDbGFzcyE9PSJub25lIil7bGV0IEQ9e2hvdmVyQ2xhc3M6eS5ob3ZlckNsYXNzfTtyZXR1cm4gVHQuaGFzT3duKHksImhvdmVyU3RhcnRUaW1lIikmJihELmhvdmVyU3RhcnRUaW1lPXkuaG92ZXJTdGFydFRpbWUpLFR0Lmhhc093bih5LCJob3ZlclN0YXlUaW1lIikmJihELmhvdmVyU3RheVRpbWU9eS5ob3ZlclN0YXlUaW1lKSxUdC5oYXNPd24oeSwiaG92ZXJTdG9wUHJvcGFnYXRpb24iKSYmKEQuaG92ZXJTdG9wUHJvcGFnYXRpb249eS5ob3ZlclN0b3BQcm9wYWdhdGlvbiksRH1yZXR1cm57fX1mdW5jdGlvbiBzbih5LEQpe3JldHVybiBPLmNyZWF0ZUVsZW1lbnRWTm9kZSgidS10ZXh0IixUdC5leHRlbmQoe2FwcGVuZEFzVHJlZTohMH0sRCkseSl9bGV0IGtuPVt7Im5hdmlnYXRvci1ob3ZlciI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMC4xKSIsb3BhY2l0eTouN319fV0sTHI9Ty5kZWZpbmVDb21wb25lbnQoe25hbWU6Ik5hdmlnYXRvciIscHJvcHM6cG4sc3R5bGVzOmtuLHNldHVwKHkse3Nsb3RzOkR9KXtsZXQgVz1Ncih5KTtyZXR1cm4oKT0+Ty5jcmVhdGVWTm9kZSgidmlldyIsTy5tZXJnZVByb3BzKEtuKHkpLHtvbkNsaWNrOld9KSxbRC5kZWZhdWx0JiZELmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIFRyKHkpe3JldHVybiBTeW1ib2woeSl9ZnVuY3Rpb24gZXIoKXtsZXQgeTt0cnl7eT1PLmdldEN1cnJlbnRJbnN0YW5jZSgpLnJvb3QucHJveHkuJHBhZ2UuaWR9Y2F0Y2goRCl7bGV0IFc9ZC53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuaWQ7eT1pc05hTihOdW1iZXIoVykpP1c6TnVtYmVyKFcpfXJldHVybiB5fWxldCBobixlbixSbjtmdW5jdGlvbiB0cigpe3JldHVybiB0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmdHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJnR5cGVvZiBkb2N1bWVudD09Im9iamVjdCI/IndlYnZpZXciOiJ2OCJ9ZnVuY3Rpb24geG4oKXtyZXR1cm4gaG4ud2Vidmlldy5jdXJyZW50V2VidmlldygpLmlkfWxldCBqbixoaSx6ZT17fTtmdW5jdGlvbiBvdCh5KXtsZXQgRD15LmRhdGEmJnkuZGF0YS5fX21lc3NhZ2U7aWYoIUR8fCFELl9fcGFnZSlyZXR1cm47bGV0IFc9RC5fX3BhZ2UsJD16ZVtXXTskJiYkKEQpLEQua2VlcHx8ZGVsZXRlIHplW1ddfWZ1bmN0aW9uIER0KHksRCl7dHIoKT09PSJ2OCI/Um4/KGpuJiZqbi5jbG9zZSgpLGpuPW5ldyBSbih4bigpKSxqbi5vbm1lc3NhZ2U9b3QpOmhpfHwoaGk9ZW4ucmVxdWlyZU1vZHVsZSgiZ2xvYmFsRXZlbnQiKSxoaS5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsb3QpKTp3aW5kb3cuX19wbHVzTWVzc2FnZT1vdCx6ZVt5XT1EfWNsYXNzIGNue2NvbnN0cnVjdG9yKEQpe3RoaXMud2Vidmlldz1EfXNlbmRNZXNzYWdlKEQpe2xldCBXPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe19fbWVzc2FnZTp7ZGF0YTpEfX0pKSwkPXRoaXMud2Vidmlldy5pZDtSbj9uZXcgUm4oJCkucG9zdE1lc3NhZ2UoVyk6aG4ud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcmJmhuLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KFcsJCl9Y2xvc2UoKXt0aGlzLndlYnZpZXcuY2xvc2UoKX19ZnVuY3Rpb24gbm4oe2NvbnRleHQ6eT17fSx1cmw6RCxkYXRhOlc9e30sc3R5bGU6JD17fSxvbk1lc3NhZ2U6bmUsb25DbG9zZTppZX0pe2xldCBnZT1FdC5kYXJrbW9kZTtobj15LnBsdXN8fGQsZW49eS53ZWV4fHwodHlwZW9mIHc9PSJvYmplY3QiP3c6bnVsbCksUm49eS5Ccm9hZGNhc3RDaGFubmVsfHwodHlwZW9mIG09PSJvYmplY3QiP206bnVsbCk7bGV0IHdlPXthdXRvQmFja0J1dHRvbjohMCx0aXRsZVNpemU6IjE3cHgifSxCZT1gcGFnZSR7RGF0ZS5ub3coKX1gOyQ9VHQuZXh0ZW5kKHt9LCQpLCQudGl0bGVOVmlldyE9PSExJiYkLnRpdGxlTlZpZXchPT0ibm9uZSImJigkLnRpdGxlTlZpZXc9VHQuZXh0ZW5kKHdlLCQudGl0bGVOVmlldykpO2xldCBIZT17dG9wOjAsYm90dG9tOjAsdXNpbmdDb21wb25lbnRzOnt9LHBvcEdlc3R1cmU6ImNsb3NlIixzY3JvbGxJbmRpY2F0b3I6Im5vbmUiLGFuaW1hdGlvblR5cGU6InBvcC1pbiIsYW5pbWF0aW9uRHVyYXRpb246MjAwLHVuaU5WaWV3OntwYXRoOmAvJHtEfS5qc2AsZGVmYXVsdEZvbnRTaXplOjE2LHZpZXdwb3J0OmhuLnNjcmVlbi5yZXNvbHV0aW9uV2lkdGh9fTskPVR0LmV4dGVuZChIZSwkKTtsZXQgRWU9aG4ud2Vidmlldy5jcmVhdGUoIiIsQmUsJCx7ZXh0cmFzOntmcm9tOnhuKCkscnVudGltZTp0cigpLGRhdGE6VHQuZXh0ZW5kKHt9LFcse2Rhcmttb2RlOmdlfSksdXNlR2xvYmFsRXZlbnQ6IVJufX0pO3JldHVybiBFZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsaWUpLER0KEJlLEZlPT57VHQuaXNGdW5jdGlvbihuZSkmJm5lKEZlLmRhdGEpLEZlLmtlZXB8fEVlLmNsb3NlKCJhdXRvIil9KSxFZS5zaG93KCQuYW5pbWF0aW9uVHlwZSwkLmFuaW1hdGlvbkR1cmF0aW9uKSxuZXcgY24oRWUpfWxldCBhbj17Zm9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sem49VHIoInVsIik7ZnVuY3Rpb24gRHIoKXtsZXQgeT1bXTtyZXR1cm4gTy5wcm92aWRlKHpuLHthZGRIYW5kbGVyKEQpe3kucHVzaChEKX0scmVtb3ZlSGFuZGxlcihEKXt5LnNwbGljZSh5LmluZGV4T2YoRCksMSl9fSkseX1sZXQgbnI9Ty5kZWZpbmVDb21wb25lbnQoe25hbWU6IkxhYmVsIixwcm9wczphbixzdHlsZXM6W10sc2V0dXAoeSx7c2xvdHM6RH0pe2xldCBXPWVyKCksJD1EcigpLG5lPWllPT57eS5mb3I/SS5lbWl0KGB1bmktbGFiZWwtY2xpY2stJHtXfS0ke3kuZm9yfWAsaWUsITApOiQubGVuZ3RoJiYkWzBdKGllLCEwKX07cmV0dXJuKCk9Pk8uY3JlYXRlVk5vZGUoInZpZXciLHtvbkNsaWNrOm5lfSxbRC5kZWZhdWx0JiZELmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIHFyKHksRCl7VXIoeS5pZCxEKSxPLndhdGNoKCgpPT55LmlkLChXLCQpPT57Q2koJCxELCEwKSxVcihXLEQsITApfSksTy5vblVubW91bnRlZCgoKT0+e0NpKHkuaWQsRCl9KX1mdW5jdGlvbiBVcih5LEQsVyl7bGV0ICQ9ZXIoKTtXJiYheXx8IVR0LmlzUGxhaW5PYmplY3QoRCl8fE9iamVjdC5rZXlzKEQpLmZvckVhY2gobmU9PntXP25lLmluZGV4T2YoIkAiKSE9PTAmJm5lLmluZGV4T2YoInVuaS0iKSE9PTAmJkkub24oYHVuaS0ke25lfS0keyR9LSR7eX1gLERbbmVdKTpuZS5pbmRleE9mKCJ1bmktIik9PT0wP0kub24obmUsRFtuZV0pOnkmJkkub24oYHVuaS0ke25lfS0keyR9LSR7eX1gLERbbmVdKX0pfWZ1bmN0aW9uIENpKHksRCxXKXtsZXQgJD1lcigpO1cmJiF5fHwhVHQuaXNQbGFpbk9iamVjdChEKXx8T2JqZWN0LmtleXMoRCkuZm9yRWFjaChuZT0+e1c/bmUuaW5kZXhPZigiQCIpIT09MCYmbmUuaW5kZXhPZigidW5pLSIpIT09MCYmSS5vZmYoYHVuaS0ke25lfS0keyR9LSR7eX1gLERbbmVdKTpuZS5pbmRleE9mKCJ1bmktIik9PT0wP0kub2ZmKG5lLERbbmVdKTp5JiZJLm9mZihgdW5pLSR7bmV9LSR7JH0tJHt5fWAsRFtuZV0pfSl9ZnVuY3Rpb24gVWEoeSl7cmV0dXJuIE9iamVjdC5rZXlzKHkpLm1hcChEPT5bRCx5W0RdXSl9bGV0IHFvPVsiY2xhc3MiLCJzdHlsZSJdLGdpPS9eb25bQS1aXSsvLFByPSh5PXt9KT0+e2xldHtleGNsdWRlTGlzdGVuZXJzOkQ9ITEsZXhjbHVkZUtleXM6Vz1bXX09eSwkPU8uZ2V0Q3VycmVudEluc3RhbmNlKCksbmU9Ty5zaGFsbG93UmVmKHt9KSxpZT1PLnNoYWxsb3dSZWYoe30pLGdlPU8uc2hhbGxvd1JlZih7fSksd2U9Vy5jb25jYXQocW8pO3JldHVybiAkLmF0dHJzPU8ucmVhY3RpdmUoJC5hdHRycyksTy53YXRjaEVmZmVjdCgoKT0+e2xldCBCZT1VYSgkLmF0dHJzKS5yZWR1Y2UoKEhlLFtFZSxGZV0pPT4od2UuaW5jbHVkZXMoRWUpP0hlLmV4Y2x1ZGVbRWVdPUZlOmdpLnRlc3QoRWUpPyhEfHwoSGUuYXR0cnNbRWVdPUZlKSxIZS5saXN0ZW5lcnNbRWVdPUZlKTpIZS5hdHRyc1tFZV09RmUsSGUpLHtleGNsdWRlOnt9LGF0dHJzOnt9LGxpc3RlbmVyczp7fX0pO25lLnZhbHVlPUJlLmF0dHJzLGllLnZhbHVlPUJlLmxpc3RlbmVycyxnZS52YWx1ZT1CZS5leGNsdWRlfSkseyRhdHRyczpuZSwkbGlzdGVuZXJzOmllLCRleGNsdWRlQXR0cnM6Z2V9fSxOcj17aWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGhvdmVyQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImJ1dHRvbi1ob3ZlciJ9LGhvdmVyU3RhcnRUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjIwfSxob3ZlclN0YXlUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjcwfSxob3ZlclN0b3BQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sZm9ybVR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG9wZW5UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxsb2FkaW5nOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0scGxhaW46e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfX0sdXI9VHIoInVmIiksUm89W3t1Yjp7IiI6e2ZsZXhEaXJlY3Rpb246InJvdyIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwb3NpdGlvbjoicmVsYXRpdmUiLHBhZGRpbmdMZWZ0OiI1IixwYWRkaW5nUmlnaHQ6IjUiLG92ZXJmbG93OiJoaWRkZW4iLGNvbG9yOiIjMDAwMDAwIixiYWNrZ3JvdW5kQ29sb3I6IiNmOGY4ZjgiLGJvcmRlclJhZGl1czoiNSIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkYmRiZGIifX0sInViLXQiOnsiIjp7Y29sb3I6IiMwMDAwMDAiLGZvbnRTaXplOiIxOCIsdGV4dERlY29yYXRpb246Im5vbmUiLGxpbmVIZWlnaHQ6IjQ2In19LCJ1Yi1kIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2Y4ZjhmOCJ9fSwidWItcCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiMwMDdhZmYiLGJvcmRlckNvbG9yOiIjMDA2MmNjIn19LCJ1Yi13Ijp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2U2NDM0MCIsYm9yZGVyQ29sb3I6IiNiODM2MzMifX0sInViLWQtdCI6eyIiOntjb2xvcjoiIzAwMDAwMCJ9fSwidWItcC10Ijp7IiI6e2NvbG9yOiIjZmZmZmZmIn19LCJ1Yi13LXQiOnsiIjp7Y29sb3I6IiNmZmZmZmYifX0sInViLWQtZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNmN2Y3ZjcifX0sInViLXAtZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiM2M2FjZmMiLGJvcmRlckNvbG9yOiIjNGY4YWNhIn19LCJ1Yi13LWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZWM4Yjg5Iixib3JkZXJDb2xvcjoiI2JkNmY2ZSJ9fSwidWItZC10LWQiOnsiIjp7Y29sb3I6IiNjY2NjY2MifX0sInViLXAtdC1kIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikifX0sInViLXctdC1kIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikifX0sInViLWQtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiMzNTM1MzUiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItcC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiIzAwN2FmZiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi13LXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjZTY0MzQwIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLWQtdC1wbGFpbiI6eyIiOntjb2xvcjoiIzM1MzUzNSJ9fSwidWItcC10LXBsYWluIjp7IiI6e2NvbG9yOiIjMDA3YWZmIn19LCJ1Yi13LXQtcGxhaW4iOnsiIjp7Y29sb3I6IiNlNjQzNDAifX0sInViLWQtZC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiI2M2YzZjNiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1wLWQtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiNjNmM2YzYiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItdy1kLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjYzZjNmM2IixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLWQtdC1kLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuMikifX0sInViLXAtdC1kLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuMikifX0sInViLXctdC1kLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuMikifX0sInViLW1pbmkiOnsiIjp7bGluZUhlaWdodDoiMzAiLGZvbnRTaXplOiIxMyIscGFkZGluZ1RvcDowLHBhZGRpbmdSaWdodDoiMTcuNSIscGFkZGluZ0JvdHRvbTowLHBhZGRpbmdMZWZ0OiIxNy41In19LCJ1Yi1sb2FkaW5nIjp7IiI6e3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsbWFyZ2luUmlnaHQ6IjEwIn19LCJ1Yi1kLWxvYWRpbmciOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1wLWxvYWRpbmciOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi13LWxvYWRpbmciOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1kLWxvYWRpbmctcGxhaW4iOnsiIjp7Y29sb3I6IiMzNTM1MzUifX0sInViLXAtbG9hZGluZy1wbGFpbiI6eyIiOntjb2xvcjoiIzAwN2FmZiIsYmFja2dyb3VuZENvbG9yOiIjMDA2MmNjIn19LCJ1Yi13LWxvYWRpbmctcGxhaW4iOnsiIjp7Y29sb3I6IiNlNjQzNDAiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItZC1ob3ZlciI6eyIiOntvcGFjaXR5Oi44LGJhY2tncm91bmRDb2xvcjoiI2RlZGVkZSJ9fSwidWItcC1ob3ZlciI6eyIiOntvcGFjaXR5Oi44LGJhY2tncm91bmRDb2xvcjoiIzAwNjJjYyJ9fSwidWItdy1ob3ZlciI6eyIiOntvcGFjaXR5Oi44LGJhY2tncm91bmRDb2xvcjoiI2NlM2MzOSJ9fSwidWItZC10LWhvdmVyIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuNikifX0sInViLXAtdC1ob3ZlciI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIn19LCJ1Yi13LXQtaG92ZXIiOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9fSwidWItZC1ob3Zlci1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSg1Myw1Myw1MywwLjYpIixib3JkZXJDb2xvcjoicmdiYSg1Myw1Myw1MywwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXAtaG92ZXItcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoMjYsMTczLDI1LDAuNikiLGJvcmRlckNvbG9yOiJyZ2JhKDAsMTIyLDI1NSwwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXctaG92ZXItcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoMjMwLDY3LDY0LDAuNikiLGJvcmRlckNvbG9yOiJyZ2JhKDIzMCw2Nyw2NCwwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX19XSxLaT17ZGVmYXVsdDoiZCIscHJpbWFyeToicCIsd2FybjoidyJ9LEppPU8uZGVmaW5lQ29tcG9uZW50KHtpbmhlcml0QXR0cnM6ITEsbmFtZToiQnV0dG9uIixwcm9wczpUdC5leHRlbmQoTnIse3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRlZmF1bHQifSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJkZWZhdWx0In19KSxzdHlsZXM6Um8sc2V0dXAoeSx7c2xvdHM6RCxhdHRyczpXfSl7bGV0eyRhdHRyczokLCRleGNsdWRlQXR0cnM6bmUsJGxpc3RlbmVyczppZX09UHIoe2V4Y2x1ZGVMaXN0ZW5lcnM6ITB9KSxnZT15LnR5cGUsd2U9Ty5yZWYobnVsbCksQmU9Ty5pbmplY3QodXIsITEpLEhlPShTdCxfdCk9PntsZXQgVnQ9aWUudmFsdWUub25DbGlja3x8KCgpPT57fSk7aWYoeS5kaXNhYmxlZClyZXR1cm47VnQoU3QpO2xldCBibj15LmZvcm1UeXBlO2lmKGJuKXtpZighQmUpcmV0dXJuO2JuPT09InN1Ym1pdCI/QmUuc3VibWl0KFN0KTpibj09PSJyZXNldCImJkJlLnJlc2V0KFN0KX19LEVlPVN0PT57bGV0IF90PSJ1Yi0iK0tpW2dlXStTdDtyZXR1cm4geS5kaXNhYmxlZCYmKF90Kz0iLWQiKSx5LnBsYWluJiYoX3QrPSItcGxhaW4iKSx5LnNpemU9PT0ibWluaSImJlN0PT09Ii10IiYmKF90Kz0iIHViLW1pbmkiKSxfdH0sRmU9U3Q9PntpZih5LmRpc2FibGVkKXJldHVybiIiO2xldCBfdD0idWItIitLaVtnZV0rU3QrIi1ob3ZlciI7cmV0dXJuIHkucGxhaW4mJihfdCs9Ii1wbGFpbiIpLF90fSx2dD1PLmluamVjdCh6biwhMSk7dnQmJih2dC5hZGRIYW5kbGVyKEhlKSxPLm9uQmVmb3JlVW5tb3VudCgoKT0+e3Z0LnJlbW92ZUhhbmRsZXIoSGUpfSkpLHFyKHkseyJsYWJlbC1jbGljayI6SGV9KTtsZXQgUHQ9Ty5jb21wdXRlZCgoKT0+e2xldCBTdD17fTtmb3IobGV0IF90IGluIGllLnZhbHVlKXtsZXQgVnQ9aWUudmFsdWVbX3RdO190IT09Im9uQ2xpY2siJiYoU3RbX3RdPVZ0KX1yZXR1cm4gU3R9KSxGdD0oKT0+e2lmKCFELmRlZmF1bHQpcmV0dXJuW107bGV0IFN0PUQuZGVmYXVsdCgpO3JldHVybiBTdC5sZW5ndGg9PT0xJiZTdFswXS50eXBlPT09Ty5UZXh0P1tzbihTdFswXS5jaGlsZHJlbix7Y2xhc3M6InViLXQgIitFZSgiLXQiKX0pXTpTdH07cmV0dXJuKCk9PntsZXQgU3Q9VHQuZXh0ZW5kKHt9LEtuKHkpLHtob3ZlckNsYXNzOkZlKCIiKX0sJC52YWx1ZSxuZS52YWx1ZSxQdC52YWx1ZSk7cmV0dXJuIE8uY3JlYXRlVk5vZGUoInZpZXciLE8ubWVyZ2VQcm9wcyh7cmVmOndlLGNsYXNzOlsidWIiLEVlKCIiKV0sb25DbGljazpIZX0sU3QpLFt5LmxvYWRpbmc/Ty5jcmVhdGVWTm9kZSgibG9hZGluZy1pbmRpY2F0b3IiLE8ubWVyZ2VQcm9wcyh7Y2xhc3M6WyJ1Yi1sb2FkaW5nIixgdWItJHtLaVtnZV19LWxvYWRpbmdgXX0se2Fycm93OiJmYWxzZSIsYW5pbWF0aW5nOiJ0cnVlIn0pLG51bGwpOm51bGwsLi4uRnQoKV0pfX19KSxobz17c2NhbGVBcmVhOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19O2Z1bmN0aW9uIFppKHkpe2xldCBEPVtdO3JldHVybiBUdC5pc0FycmF5KHkpJiZ5LmZvckVhY2goVz0+e08uaXNWTm9kZShXKT9XLnR5cGU9PT1PLkZyYWdtZW50P0QucHVzaCguLi5aaShXLmNoaWxkcmVuKSk6RC5wdXNoKFcpOlR0LmlzQXJyYXkoVykmJkQucHVzaCguLi5aaShXKSl9KSxEfWZ1bmN0aW9uIENhKHkpe2xldCBEPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKCQpe3JldHVybiBEWyRdfHwoRFskXT15KCQpKX19bGV0IEJpPUNhKGZ1bmN0aW9uKHkpe2xldCBEPXt9LFc9LzsoPyFbXihdKlwpKS9nLCQ9LzooLispLztyZXR1cm4geS5zcGxpdChXKS5mb3JFYWNoKGZ1bmN0aW9uKG5lKXtpZihuZSl7bGV0IGllPW5lLnNwbGl0KCQpO2llLmxlbmd0aD4xJiYoRFtpZVswXS50cmltKCldPWllWzFdLnRyaW0oKSl9fSksRH0pLG1uPXk9Pm5ldyBQcm9taXNlKChELFcpPT57aWYoIXkpcmV0dXJuIEQoe3dpZHRoOjAsaGVpZ2h0OjAsdG9wOjAsbGVmdDowfSk7dy5yZXF1aXJlTW9kdWxlKCJkb20iKS5nZXRDb21wb25lbnRSZWN0KHksKHtzaXplOm5lfSk9PntEKG5lKX0pfSksQW49Ty5kZWZpbmVDb21wb25lbnQoe25hbWU6Ik1vdmFibGVBcmVhIixwcm9wczpobyxzdHlsZXM6W3sidW5pLW1vdmFibGUtYXJlYSI6eyIiOntvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDoiMTBweCIsaGVpZ2h0OiIxMHB4In19fV0sc2V0dXAoeSx7c2xvdHM6RH0pe2xldCBXPU8ucmVmKDApLCQ9Ty5yZWYoMCksbmU9Ty5yZWYoMCksaWU9Ty5yZWYoMCksZ2U9Ty5yZWYoITEpLHdlPU8ucmVmKG51bGwpLEJlPVtdLEhlPW51bGwsRWU9X3Q9PntIZT1fdH0sRmU9KCk9Pm1uKHdlLnZhbHVlKS50aGVuKCh7d2lkdGg6X3QsaGVpZ2h0OlZ0LHRvcDpibixsZWZ0OlBufSk9PntXLnZhbHVlPV90LCQudmFsdWU9VnQsbmUudmFsdWU9Ym4saWUudmFsdWU9UG59KSx2dD0oKT0+e0ZlKCkudGhlbigoKT0+e0JlLmZvckVhY2goZnVuY3Rpb24oX3Qpe190LnNldFBhcmVudCgpfSl9KX07Ty5vbk1vdW50ZWQoKCk9PntnKCgpPT57Z2UudmFsdWU9ITAsdnQoKX0sMjAwKX0pO2xldCBQdD17b25QYW5zdGFydChfdCl7SGUmJkhlLnRvdWNoc3RhcnQoX3QpfSxvblBhbm1vdmUoX3Qpe190LnN0b3BQcm9wYWdhdGlvbigpLEhlJiZIZS50b3VjaG1vdmUoX3QpfSxvblBhbmVuZChfdCl7SGUmJkhlLnRvdWNoZW5kKF90KSxIZT1udWxsfX0sRnQ9X3Q9PntCZS5wdXNoKF90KX0sU3Q9X3Q9PntsZXQgVnQ9QmUuaW5kZXhPZihfdCk7VnQ+PTAmJkJlLnNwbGljZShWdCwxKX07cmV0dXJuIE8ucHJvdmlkZSgiX2lzTW91bnRlZCIsZ2UpLE8ucHJvdmlkZSgicGFyZW50U2l6ZSIse3dpZHRoOlcsaGVpZ2h0OiQsdG9wOm5lLGxlZnQ6aWV9KSxPLnByb3ZpZGUoImFkZE1vdmFibGVWaWV3Q29udGV4dCIsRnQpLE8ucHJvdmlkZSgicmVtb3ZlTW92YWJsZVZpZXdDb250ZXh0IixTdCksTy5wcm92aWRlKCJzZXRUb3VjaE1vdmFibGVWaWV3Q29udGV4dCIsRWUpLCgpPT57bGV0IF90PUQuZGVmYXVsdCYmRC5kZWZhdWx0KCksVnQ9WmkoX3QpO3JldHVybiBPLmNyZWF0ZVZOb2RlKCJ2aWV3IixPLm1lcmdlUHJvcHMoe3JlZjp3ZSxjbGFzczoidW5pLW1vdmFibGUtYXJlYSJ9LFB0KSxbVnRdKX19fSk7ZnVuY3Rpb24gTWkoeSl7bGV0IEQ9e307ZnVuY3Rpb24gVyhFZSxGZSl7RFtFZV0mJkRbRWVdKEZlKX1mdW5jdGlvbiAkKEVlLEZlKXtEW0VlXT1mdW5jdGlvbih2dCl7VHQuaXNGdW5jdGlvbihGZSkmJih2dC50b3VjaGVzPXZ0LmNoYW5nZWRUb3VjaGVzLEZlKHZ0KT09PSExJiZ2dC5zdG9wUHJvcGFnYXRpb24oKSl9fWxldCBuZT0wLGllPTAsZ2U9MCx3ZT0wLEJlPWZ1bmN0aW9uKEVlLEZlLHZ0LFB0KXtpZih5KHt0YXJnZXQ6RWUudGFyZ2V0LGN1cnJlbnRUYXJnZXQ6RWUuY3VycmVudFRhcmdldCxzdG9wUHJvcGFnYXRpb246RWUuc3RvcFByb3BhZ2F0aW9uLmJpbmQoRWUpLHRvdWNoZXM6RWUudG91Y2hlcyxjaGFuZ2VkVG91Y2hlczpFZS5jaGFuZ2VkVG91Y2hlcyxkZXRhaWw6e3N0YXRlOkZlLHg6dnQseTpQdCxkeDp2dC1uZSxkeTpQdC1pZSxkZHg6dnQtZ2UsZGR5OlB0LXdlLHRpbWVTdGFtcDpFZS50aW1lU3RhbXB8fERhdGUubm93KCl9fSk9PT0hMSlyZXR1cm4hMX0sSGU9bnVsbDtyZXR1cm4gJCgidG91Y2hzdGFydCIsZnVuY3Rpb24oRWUpe2lmKCFIZSlyZXR1cm4gSGU9RWUsbmU9Z2U9RWUudG91Y2hlc1swXS5wYWdlWCxpZT13ZT1FZS50b3VjaGVzWzBdLnBhZ2VZLEJlKEVlLCJzdGFydCIsbmUsaWUpfSksJCgidG91Y2htb3ZlIixmdW5jdGlvbihFZSl7aWYoSGUpe2xldCBGZT1CZShFZSwibW92ZSIsRWUudG91Y2hlc1swXS5wYWdlWCxFZS50b3VjaGVzWzBdLnBhZ2VZKTtyZXR1cm4gZ2U9RWUudG91Y2hlc1swXS5wYWdlWCx3ZT1FZS50b3VjaGVzWzBdLnBhZ2VZLEZlfX0pLCQoInRvdWNoZW5kIixmdW5jdGlvbihFZSl7aWYoSGUpcmV0dXJuIEhlPW51bGwsQmUoRWUsImVuZCIsRWUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgsRWUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkpfSkse3RvdWNoc3RhcnQ6ZnVuY3Rpb24oRWUpe1coInRvdWNoc3RhcnQiLEVlKX0sdG91Y2htb3ZlOmZ1bmN0aW9uKEVlKXtXKCJ0b3VjaG1vdmUiLEVlKX0sdG91Y2hlbmQ6ZnVuY3Rpb24oRWUpe1coInRvdWNoZW5kIixFZSl9fX1mdW5jdGlvbiBvcih5LEQpe3JldHVybihXLCQpPT57eS52YWx1ZSYmRChXLHZpKFcseS52YWx1ZSwkfHx7fSkpfX1mdW5jdGlvbiB2aSh5LEQsVz17fSl7cmV0dXJuIEQ9S28oRCkse3R5cGU6eSx0aW1lU3RhbXA6RGF0ZS5ub3coKSx0YXJnZXQ6RCxjdXJyZW50VGFyZ2V0OkQsZGV0YWlsOld9fWxldCBZbz12ci5jYWNoZVN0cmluZ0Z1bmN0aW9uKHk9PnkuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkreS5zbGljZSgxKSk7ZnVuY3Rpb24gS28oeSl7bGV0e29mZnNldExlZnQ6RCxvZmZzZXRUb3A6V309eSwkPXkuYXR0cixuZT17fTtyZXR1cm4gT2JqZWN0LmtleXMoJHx8e30pLmZvckVhY2goaWU9PntpZS5pbmRleE9mKCJkYXRhIik9PT0wJiYobmVbWW8oaWUucmVwbGFjZSgiZGF0YSIsIiIpKV09JFtpZV0pfSkse2lkOiQmJiQuaWR8fCIiLGRhdGFzZXQ6bmUsb2Zmc2V0TGVmdDpEfHwwLG9mZnNldFRvcDpXfHwwfX1mdW5jdGlvbiBtaSh5LEQsVyl7cmV0dXJuIHk+RC1XJiZ5PEQrV31mdW5jdGlvbiBZcih5LEQpe3JldHVybiBtaSh5LDAsRCl9ZnVuY3Rpb24gQWEoKXt9QWEucHJvdG90eXBlLng9ZnVuY3Rpb24oeSl7cmV0dXJuIE1hdGguc3FydCh5KX07ZnVuY3Rpb24gcmkoeSxEKXt0aGlzLl9tPXksdGhpcy5fZj0xZTMqRCx0aGlzLl9zdGFydFRpbWU9MCx0aGlzLl92PTB9cmkucHJvdG90eXBlLnNldFY9ZnVuY3Rpb24oeSxEKXtsZXQgVz1NYXRoLnBvdyhNYXRoLnBvdyh5LDIpK01hdGgucG93KEQsMiksLjUpO3RoaXMuX3hfdj15LHRoaXMuX3lfdj1ELHRoaXMuX3hfYT0tdGhpcy5fZip0aGlzLl94X3YvVyx0aGlzLl95X2E9LXRoaXMuX2YqdGhpcy5feV92L1csdGhpcy5fdD1NYXRoLmFicyh5L3RoaXMuX3hfYSl8fE1hdGguYWJzKEQvdGhpcy5feV9hKSx0aGlzLl9sYXN0RHQ9bnVsbCx0aGlzLl9zdGFydFRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9LHJpLnByb3RvdHlwZS5zZXRTPWZ1bmN0aW9uKHksRCl7dGhpcy5feF9zPXksdGhpcy5feV9zPUR9LHJpLnByb3RvdHlwZS5zPWZ1bmN0aW9uKHkpe3k9PT12b2lkIDAmJih5PShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMykseT50aGlzLl90JiYoeT10aGlzLl90LHRoaXMuX2xhc3REdD15KTtsZXQgRD10aGlzLl94X3YqeSsuNSp0aGlzLl94X2EqTWF0aC5wb3coeSwyKSt0aGlzLl94X3MsVz10aGlzLl95X3YqeSsuNSp0aGlzLl95X2EqTWF0aC5wb3coeSwyKSt0aGlzLl95X3M7cmV0dXJuKHRoaXMuX3hfYT4wJiZEPHRoaXMuX2VuZFBvc2l0aW9uWHx8dGhpcy5feF9hPDAmJkQ+dGhpcy5fZW5kUG9zaXRpb25YKSYmKEQ9dGhpcy5fZW5kUG9zaXRpb25YKSwodGhpcy5feV9hPjAmJlc8dGhpcy5fZW5kUG9zaXRpb25ZfHx0aGlzLl95X2E8MCYmVz50aGlzLl9lbmRQb3NpdGlvblkpJiYoVz10aGlzLl9lbmRQb3NpdGlvblkpLHt4OkQseTpXfX0scmkucHJvdG90eXBlLmRzPWZ1bmN0aW9uKHkpe3JldHVybiB5PT09dm9pZCAwJiYoeT0obmV3IERhdGUoKS5nZXRUaW1lKCktdGhpcy5fc3RhcnRUaW1lKS8xZTMpLHk+dGhpcy5fdCYmKHk9dGhpcy5fdCkse2R4OnRoaXMuX3hfdit0aGlzLl94X2EqeSxkeTp0aGlzLl95X3YrdGhpcy5feV9hKnl9fSxyaS5wcm90b3R5cGUuZGVsdGE9ZnVuY3Rpb24oKXtyZXR1cm57eDotMS41Kk1hdGgucG93KHRoaXMuX3hfdiwyKS90aGlzLl94X2F8fDAseTotMS41Kk1hdGgucG93KHRoaXMuX3lfdiwyKS90aGlzLl95X2F8fDB9fSxyaS5wcm90b3R5cGUuZHQ9ZnVuY3Rpb24oKXtyZXR1cm4tdGhpcy5feF92L3RoaXMuX3hfYX0scmkucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oKXtsZXQgeT1taSh0aGlzLnMoKS54LHRoaXMuX2VuZFBvc2l0aW9uWCl8fG1pKHRoaXMucygpLnksdGhpcy5fZW5kUG9zaXRpb25ZKXx8dGhpcy5fbGFzdER0PT09dGhpcy5fdDtyZXR1cm4gdGhpcy5fbGFzdER0PW51bGwseX0scmkucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbih5LEQpe3RoaXMuX2VuZFBvc2l0aW9uWD15LHRoaXMuX2VuZFBvc2l0aW9uWT1EfSxyaS5wcm90b3R5cGUucmVjb25maWd1cmU9ZnVuY3Rpb24oeSxEKXt0aGlzLl9tPXksdGhpcy5fZj0xZTMqRH07ZnVuY3Rpb24gYnIoeSxELFcpe3RoaXMuX209eSx0aGlzLl9rPUQsdGhpcy5fYz1XLHRoaXMuX3NvbHV0aW9uPW51bGwsdGhpcy5fZW5kUG9zaXRpb249MCx0aGlzLl9zdGFydFRpbWU9MH1ici5wcm90b3R5cGUuX3NvbHZlPWZ1bmN0aW9uKHksRCl7bGV0IFc9dGhpcy5fYywkPXRoaXMuX20sbmU9dGhpcy5fayxpZT1XKlctNCokKm5lO2lmKGllPT09MCl7bGV0IEVlPS1XLygyKiQpLEZlPXksdnQ9RC8oRWUqeSk7cmV0dXJue3g6ZnVuY3Rpb24oUHQpe3JldHVybihGZSt2dCpQdCkqTWF0aC5wb3coTWF0aC5FLEVlKlB0KX0sZHg6ZnVuY3Rpb24oUHQpe2xldCBGdD1NYXRoLnBvdyhNYXRoLkUsRWUqUHQpO3JldHVybiBFZSooRmUrdnQqUHQpKkZ0K3Z0KkZ0fX19aWYoaWU+MCl7bGV0IEVlPSgtVy1NYXRoLnNxcnQoaWUpKS8oMiokKSxGZT0oLVcrTWF0aC5zcXJ0KGllKSkvKDIqJCksdnQ9KEQtRWUqeSkvKEZlLUVlKSxQdD15LXZ0O3JldHVybnt4OmZ1bmN0aW9uKEZ0KXtsZXQgU3QsX3Q7cmV0dXJuIEZ0PT09dGhpcy5fdCYmKFN0PXRoaXMuX3Bvd0VSMVQsX3Q9dGhpcy5fcG93RVIyVCksdGhpcy5fdD1GdCxTdHx8KFN0PXRoaXMuX3Bvd0VSMVQ9TWF0aC5wb3coTWF0aC5FLEVlKkZ0KSksX3R8fChfdD10aGlzLl9wb3dFUjJUPU1hdGgucG93KE1hdGguRSxGZSpGdCkpLFB0KlN0K3Z0Kl90fSxkeDpmdW5jdGlvbihGdCl7bGV0IFN0LF90O3JldHVybiBGdD09PXRoaXMuX3QmJihTdD10aGlzLl9wb3dFUjFULF90PXRoaXMuX3Bvd0VSMlQpLHRoaXMuX3Q9RnQsU3R8fChTdD10aGlzLl9wb3dFUjFUPU1hdGgucG93KE1hdGguRSxFZSpGdCkpLF90fHwoX3Q9dGhpcy5fcG93RVIyVD1NYXRoLnBvdyhNYXRoLkUsRmUqRnQpKSxQdCpFZSpTdCt2dCpGZSpfdH19fWxldCBnZT1NYXRoLnNxcnQoNCokKm5lLVcqVykvKDIqJCksd2U9LVcvMiokLEJlPXksSGU9KEQtd2UqeSkvZ2U7cmV0dXJue3g6ZnVuY3Rpb24oRWUpe3JldHVybiBNYXRoLnBvdyhNYXRoLkUsd2UqRWUpKihCZSpNYXRoLmNvcyhnZSpFZSkrSGUqTWF0aC5zaW4oZ2UqRWUpKX0sZHg6ZnVuY3Rpb24oRWUpe2xldCBGZT1NYXRoLnBvdyhNYXRoLkUsd2UqRWUpLHZ0PU1hdGguY29zKGdlKkVlKSxQdD1NYXRoLnNpbihnZSpFZSk7cmV0dXJuIEZlKihIZSpnZSp2dC1CZSpnZSpQdCkrd2UqRmUqKEhlKlB0K0JlKnZ0KX19fSxici5wcm90b3R5cGUueD1mdW5jdGlvbih5KXtyZXR1cm4geT09PXZvaWQgMCYmKHk9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9lbmRQb3NpdGlvbit0aGlzLl9zb2x1dGlvbi54KHkpOjB9LGJyLnByb3RvdHlwZS5keD1mdW5jdGlvbih5KXtyZXR1cm4geT09PXZvaWQgMCYmKHk9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9zb2x1dGlvbi5keCh5KTowfSxici5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKHksRCxXKXtpZihXfHwoVz1uZXcgRGF0ZSgpLmdldFRpbWUoKSkseSE9PXRoaXMuX2VuZFBvc2l0aW9ufHwhWXIoRCwuMSkpe0Q9RHx8MDtsZXQgJD10aGlzLl9lbmRQb3NpdGlvbjt0aGlzLl9zb2x1dGlvbiYmKFlyKEQsLjEpJiYoRD10aGlzLl9zb2x1dGlvbi5keCgoVy10aGlzLl9zdGFydFRpbWUpLzFlMykpLCQ9dGhpcy5fc29sdXRpb24ueCgoVy10aGlzLl9zdGFydFRpbWUpLzFlMyksWXIoRCwuMSkmJihEPTApLFlyKCQsLjEpJiYoJD0wKSwkKz10aGlzLl9lbmRQb3NpdGlvbiksdGhpcy5fc29sdXRpb24mJllyKCQteSwuMSkmJllyKEQsLjEpfHwodGhpcy5fZW5kUG9zaXRpb249eSx0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZSgkLXRoaXMuX2VuZFBvc2l0aW9uLEQpLHRoaXMuX3N0YXJ0VGltZT1XKX19LGJyLnByb3RvdHlwZS5zbmFwPWZ1bmN0aW9uKHkpe3RoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx0aGlzLl9lbmRQb3NpdGlvbj15LHRoaXMuX3NvbHV0aW9uPXt4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGR4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9fX0sYnIucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oeSl7cmV0dXJuIHl8fCh5PW5ldyBEYXRlKCkuZ2V0VGltZSgpKSxtaSh0aGlzLngoKSx0aGlzLl9lbmRQb3NpdGlvbiwuMSkmJllyKHRoaXMuZHgoKSwuMSl9LGJyLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbih5LEQsVyl7dGhpcy5fbT15LHRoaXMuX2s9RCx0aGlzLl9jPVcsdGhpcy5kb25lKCl8fCh0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZSh0aGlzLngoKS10aGlzLl9lbmRQb3NpdGlvbix0aGlzLmR4KCkpLHRoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSl9LGJyLnByb3RvdHlwZS5zcHJpbmdDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSxici5wcm90b3R5cGUuZGFtcGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jfSxici5wcm90b3R5cGUuY29uZmlndXJhdGlvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoVywkKXtXLnJlY29uZmlndXJlKDEsJCxXLmRhbXBpbmcoKSl9ZnVuY3Rpb24gRChXLCQpe1cucmVjb25maWd1cmUoMSxXLnNwcmluZ0NvbnN0YW50KCksJCl9cmV0dXJuW3tsYWJlbDoiU3ByaW5nIENvbnN0YW50IixyZWFkOnRoaXMuc3ByaW5nQ29uc3RhbnQuYmluZCh0aGlzKSx3cml0ZTp5LmJpbmQodGhpcyx0aGlzKSxtaW46MTAwLG1heDoxZTN9LHtsYWJlbDoiRGFtcGluZyIscmVhZDp0aGlzLmRhbXBpbmcuYmluZCh0aGlzKSx3cml0ZTpELmJpbmQodGhpcyx0aGlzKSxtaW46MSxtYXg6NTAwfV19O2Z1bmN0aW9uIGdvKHksRCxXKXt0aGlzLl9zcHJpbmdYPW5ldyBicih5LEQsVyksdGhpcy5fc3ByaW5nWT1uZXcgYnIoeSxELFcpLHRoaXMuX3NwcmluZ1NjYWxlPW5ldyBicih5LEQsVyksdGhpcy5fc3RhcnRUaW1lPTB9Z28ucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbih5LEQsVywkKXtsZXQgbmU9bmV3IERhdGUoKS5nZXRUaW1lKCk7dGhpcy5fc3ByaW5nWC5zZXRFbmQoeSwkLG5lKSx0aGlzLl9zcHJpbmdZLnNldEVuZChELCQsbmUpLHRoaXMuX3NwcmluZ1NjYWxlLnNldEVuZChXLCQsbmUpLHRoaXMuX3N0YXJ0VGltZT1uZX0sZ28ucHJvdG90eXBlLng9ZnVuY3Rpb24oKXtsZXQgeT0obmV3IERhdGUoKS5nZXRUaW1lKCktdGhpcy5fc3RhcnRUaW1lKS8xZTM7cmV0dXJue3g6dGhpcy5fc3ByaW5nWC54KHkpLHk6dGhpcy5fc3ByaW5nWS54KHkpLHNjYWxlOnRoaXMuX3NwcmluZ1NjYWxlLngoeSl9fSxnby5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbigpe2xldCB5PW5ldyBEYXRlKCkuZ2V0VGltZSgpO3JldHVybiB0aGlzLl9zcHJpbmdYLmRvbmUoeSkmJnRoaXMuX3NwcmluZ1kuZG9uZSh5KSYmdGhpcy5fc3ByaW5nU2NhbGUuZG9uZSh5KX0sZ28ucHJvdG90eXBlLnJlY29uZmlndXJlPWZ1bmN0aW9uKHksRCxXKXt0aGlzLl9zcHJpbmdYLnJlY29uZmlndXJlKHksRCxXKSx0aGlzLl9zcHJpbmdZLnJlY29uZmlndXJlKHksRCxXKSx0aGlzLl9zcHJpbmdTY2FsZS5yZWNvbmZpZ3VyZSh5LEQsVyl9O2xldCBPYT17ZGlyZWN0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJub25lIn0saW5lcnRpYTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LG91dE9mQm91bmRzOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0seDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSx5Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9LGRhbXBpbmc6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MjB9LGZyaWN0aW9uOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sc2NhbGU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzY2FsZU1pbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDouNX0sc2NhbGVNYXg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MTB9LHNjYWxlVmFsdWU6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MX0sYW5pbWF0aW9uOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMH19O2Z1bmN0aW9uIExpKHksRCl7cmV0dXJuKygoMWUzKnktMWUzKkQpLzFlMykudG9GaXhlZCgxKX1mdW5jdGlvbiBBaSh5LEQsVyl7bGV0ICQ9e2lkOjAsY2FuY2VsbGVkOiExfSxuZT1mdW5jdGlvbihnZSl7Z2UmJmdlLmlkJiZnbihnZS5pZCksZ2UmJihnZS5jYW5jZWxsZWQ9ITApfTtmdW5jdGlvbiBpZShnZSx3ZSxCZSxIZSl7aWYoIWdlfHwhZ2UuY2FuY2VsbGVkKXtCZSh3ZSk7bGV0IEVlPXdlLmRvbmUoKTtFZXx8Z2UuY2FuY2VsbGVkfHwoZ2UuaWQ9dm8oaWUuYmluZChudWxsLGdlLHdlLEJlLEhlKSkpLEVlJiZIZSYmSGUod2UpfX1yZXR1cm4gaWUoJCx5LEQsVykse2NhbmNlbDpuZS5iaW5kKG51bGwsJCksbW9kZWw6eX19bGV0IHhvPSExO2Z1bmN0aW9uIEpvKHkpe3hvfHwoeG89ITAsdm8oZnVuY3Rpb24oKXt5KCkseG89ITF9KSl9ZnVuY3Rpb24gdm8oeSl7cmV0dXJuIGcoeSwxNil9ZnVuY3Rpb24gZ24oeSl7Yyh5KX1sZXQgT249dy5yZXF1aXJlTW9kdWxlKCJhbmltYXRpb24iKSxLcj1PLmRlZmluZUNvbXBvbmVudCh7bmFtZToiTW92YWJsZVZpZXciLHByb3BzOk9hLGVtaXRzOlsiY2hhbmdlIiwic2NhbGUiXSxzdHlsZXM6W3sidW5pLW1vdmFibGUtdmlldyI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiMHB4IixsZWZ0OiIwcHgiLHdpZHRoOiIxMHB4IixoZWlnaHQ6IjEwcHgifX19XSxzZXR1cCh5LHtlbWl0OkQsc2xvdHM6V30pe2xldCAkPU8ucmVmKG51bGwpLG5lPW9yKCQsRCksaWU9Ty5pbmplY3QoInNldFRvdWNoTW92YWJsZVZpZXdDb250ZXh0IiwoKT0+e30pLGdlPUZuKHksbmUsJCxpZSk7cmV0dXJuKCk9PntsZXQgd2U9e3ByZXZlbnRHZXN0dXJlOiEwfTtyZXR1cm4gTy5jcmVhdGVWTm9kZSgidmlldyIsTy5tZXJnZVByb3BzKHtyZWY6JCxvblRvdWNoc3RhcnQ6Z2UsY2xhc3M6InVuaS1tb3ZhYmxlLXZpZXciLHN0eWxlOiJ0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7In0sd2UpLFtXLmRlZmF1bHQmJlcuZGVmYXVsdCgpXSl9fX0pO2Z1bmN0aW9uIEZuKHksRCxXLCQpe2xldCBuZT1PLmluamVjdCgiX2lzTW91bnRlZCIsTy5yZWYoITEpKSxpZT1PLmluamVjdCgicGFyZW50U2l6ZSIse3dpZHRoOk8ucmVmKDApLGhlaWdodDpPLnJlZigwKSx0b3A6Ty5yZWYoMCksbGVmdDpPLnJlZigwKX0pLGdlPU8uaW5qZWN0KCJhZGRNb3ZhYmxlVmlld0NvbnRleHQiLCgpPT57fSksd2U9Ty5pbmplY3QoInJlbW92ZU1vdmFibGVWaWV3Q29udGV4dCIsKCk9Pnt9KSxCZT17dG91Y2hzdGFydDooKT0+e30sdG91Y2htb3ZlOigpPT57fSx0b3VjaGVuZDooKT0+e319O2Z1bmN0aW9uIEhlKEdlKXtyZXR1cm4gTnVtYmVyKEdlKXx8MH1mdW5jdGlvbiBFZShHZSl7cmV0dXJuIEdlPU51bWJlcihHZSksaXNOYU4oR2UpPzE6R2V9bGV0IEZlPU8ucmVmKEhlKHkueCkpLHZ0PU8ucmVmKEhlKHkueSkpLFB0PU8ucmVmKEVlKE51bWJlcih5LnNjYWxlVmFsdWUpKSksRnQ9Ty5yZWYoMCksU3Q9Ty5yZWYoMCksX3Q9Ty5yZWYoMCksVnQ9Ty5yZWYoMCksYm49Ty5yZWYoMCksUG49Ty5yZWYoMCksT3Q9bnVsbCxsbj1udWxsLFVuPXt4OjAseTowfSxpcj17eDowLHk6MH0sVG49MSxIbj0wLEFyPTAscWE9ITEsbXMsVnIsR3Q9bnVsbCwkbz1udWxsLFlhPXt0b3A6MCxsZWZ0OjAsd2lkdGg6MCxoZWlnaHQ6MH0sX3M9bmV3IEFhLGJzPW5ldyBBYSxacj17aGlzdG9yeVg6WzAsMF0saGlzdG9yeVk6WzAsMF0saGlzdG9yeVQ6WzAsMF19LGpvPU8uY29tcHV0ZWQoKCk9PntsZXQgR2U9TnVtYmVyKHkuZGFtcGluZyk7cmV0dXJuIGlzTmFOKEdlKT8yMDpHZX0pLEJuPU8uY29tcHV0ZWQoKCk9PntsZXQgR2U9TnVtYmVyKHkuZnJpY3Rpb24pO3JldHVybiBpc05hTihHZSl8fEdlPD0wPzI6R2V9KSxHbj1PLmNvbXB1dGVkKCgpPT57bGV0IEdlPU51bWJlcih5LnNjYWxlTWluKTtyZXR1cm4gaXNOYU4oR2UpPy41OkdlfSksb2E9Ty5jb21wdXRlZCgoKT0+e2xldCBHZT1OdW1iZXIoeS5zY2FsZU1heCk7cmV0dXJuIGlzTmFOKEdlKT8xMDpHZX0pLEthPU8uY29tcHV0ZWQoKCk9PnkuZGlyZWN0aW9uPT09ImFsbCJ8fHkuZGlyZWN0aW9uPT09Imhvcml6b250YWwiKSxKYT1PLmNvbXB1dGVkKCgpPT55LmRpcmVjdGlvbj09PSJhbGwifHx5LmRpcmVjdGlvbj09PSJ2ZXJ0aWNhbCIpLGlvPW5ldyBnbygxLDkqTWF0aC5wb3coam8udmFsdWUsMikvNDAsam8udmFsdWUpLHpvPW5ldyByaSgxLEJuLnZhbHVlKTtPLndhdGNoKCgpPT55LngsR2U9PntGZS52YWx1ZT1IZShHZSl9KSxPLndhdGNoKCgpPT55LnksR2U9Pnt2dC52YWx1ZT1IZShHZSl9KSxPLndhdGNoKCgpPT55LnNjYWxlVmFsdWUsR2U9PntQdC52YWx1ZT1FZShOdW1iZXIoR2UpKX0pLE8ud2F0Y2goRmUsJHMpLE8ud2F0Y2godnQsbWwpLE8ud2F0Y2goUHQsanMpLE8ud2F0Y2goR24sWmEpLE8ud2F0Y2gob2EsWmEpO2Z1bmN0aW9uIFhyKCl7bG4mJmxuLmNhbmNlbCgpLE90JiZPdC5jYW5jZWwoKX1mdW5jdGlvbiAkcyhHZSl7aWYoS2EudmFsdWUpe2lmKEdlK2lyLng9PT1IbilyZXR1cm4gSG47T3QmJk90LmNhbmNlbCgpLHlzKEdlK2lyLngsdnQudmFsdWUraXIueSxUbil9cmV0dXJuIEdlfWZ1bmN0aW9uIG1sKEdlKXtpZihKYS52YWx1ZSl7aWYoR2UraXIueT09PUFyKXJldHVybiBBcjtPdCYmT3QuY2FuY2VsKCkseXMoRmUudmFsdWUraXIueCxHZStpci55LFRuKX1yZXR1cm4gR2V9ZnVuY3Rpb24gWmEoKXtpZigheS5zY2FsZSlyZXR1cm4hMTtiaShUbiwhMCl9ZnVuY3Rpb24ganMoR2Upe3JldHVybiB5LnNjYWxlPyhHZT1YYShHZSksYmkoR2UsITApLEdlKTohMX1mdW5jdGlvbiBfbCgpe3kuZGlzYWJsZWR8fChYcigpLFpyLmhpc3RvcnlYPVswLDBdLFpyLmhpc3RvcnlZPVswLDBdLFpyLmhpc3RvcnlUPVswLDBdLEthLnZhbHVlJiYobXM9SG4pLEphLnZhbHVlJiYoVnI9QXIpLEd0PW51bGwsJG89bnVsbCxxYT0hMCl9ZnVuY3Rpb24genMoR2Upe2lmKCF5LmRpc2FibGVkJiZxYSl7bGV0IEh0PUhuLEl0PUFyO2lmKCRvPT09bnVsbCYmKCRvPU1hdGguYWJzKEdlLmRldGFpbC5keC9HZS5kZXRhaWwuZHkpPjE/Imh0b3VjaG1vdmUiOiJ2dG91Y2htb3ZlIiksS2EudmFsdWUmJihIdD1HZS5kZXRhaWwuZHgrbXMsWnIuaGlzdG9yeVguc2hpZnQoKSxaci5oaXN0b3J5WC5wdXNoKEh0KSwhSmEudmFsdWUmJkd0PT09bnVsbCYmKEd0PU1hdGguYWJzKEdlLmRldGFpbC5keC9HZS5kZXRhaWwuZHkpPDEpKSxKYS52YWx1ZSYmKEl0PUdlLmRldGFpbC5keStWcixaci5oaXN0b3J5WS5zaGlmdCgpLFpyLmhpc3RvcnlZLnB1c2goSXQpLCFLYS52YWx1ZSYmR3Q9PT1udWxsJiYoR3Q9TWF0aC5hYnMoR2UuZGV0YWlsLmR5L0dlLmRldGFpbC5keCk8MSkpLFpyLmhpc3RvcnlULnNoaWZ0KCksWnIuaGlzdG9yeVQucHVzaChHZS5kZXRhaWwudGltZVN0YW1wKSwhR3Qpe2xldCB2bj0idG91Y2giO0h0PF90LnZhbHVlP3kub3V0T2ZCb3VuZHM/KHZuPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixIdD1fdC52YWx1ZS1fcy54KF90LnZhbHVlLUh0KSk6SHQ9X3QudmFsdWU6SHQ+Ym4udmFsdWUmJih5Lm91dE9mQm91bmRzPyh2bj0idG91Y2gtb3V0LW9mLWJvdW5kcyIsSHQ9Ym4udmFsdWUrX3MueChIdC1ibi52YWx1ZSkpOkh0PWJuLnZhbHVlKSxJdDxWdC52YWx1ZT95Lm91dE9mQm91bmRzPyh2bj0idG91Y2gtb3V0LW9mLWJvdW5kcyIsSXQ9VnQudmFsdWUtYnMueChWdC52YWx1ZS1JdCkpOkl0PVZ0LnZhbHVlOkl0PlBuLnZhbHVlJiYoeS5vdXRPZkJvdW5kcz8odm49InRvdWNoLW91dC1vZi1ib3VuZHMiLEl0PVBuLnZhbHVlK2JzLngoSXQtUG4udmFsdWUpKTpJdD1Qbi52YWx1ZSksSm8oZnVuY3Rpb24oKXtWaShIdCxJdCxUbix2bil9KX19fWZ1bmN0aW9uIExsKCl7aWYoIXkuZGlzYWJsZWQmJnFhJiYocWE9ITEsIUd0JiYhRXMoIm91dC1vZi1ib3VuZHMiKSYmeS5pbmVydGlhKSl7bGV0IEdlPTFlMyooWnIuaGlzdG9yeVhbMV0tWnIuaGlzdG9yeVhbMF0pLyhaci5oaXN0b3J5VFsxXS1aci5oaXN0b3J5VFswXSksSHQ9MWUzKihaci5oaXN0b3J5WVsxXS1aci5oaXN0b3J5WVswXSkvKFpyLmhpc3RvcnlUWzFdLVpyLmhpc3RvcnlUWzBdKTt6by5zZXRWKEdlLEh0KSx6by5zZXRTKEhuLEFyKTtsZXQgSXQ9em8uZGVsdGEoKS54LHZuPXpvLmRlbHRhKCkueSxxbj1JdCtIbixJcj12bitBcjtxbjxfdC52YWx1ZT8ocW49X3QudmFsdWUsSXI9QXIrKF90LnZhbHVlLUhuKSp2bi9JdCk6cW4+Ym4udmFsdWUmJihxbj1ibi52YWx1ZSxJcj1BcisoYm4udmFsdWUtSG4pKnZuL0l0KSxJcjxWdC52YWx1ZT8oSXI9VnQudmFsdWUscW49SG4rKFZ0LnZhbHVlLUFyKSpJdC92bik6SXI+UG4udmFsdWUmJihJcj1Qbi52YWx1ZSxxbj1IbisoUG4udmFsdWUtQXIpKkl0L3ZuKSx6by5zZXRFbmQocW4sSXIpLGxuPUFpKHpvLGZ1bmN0aW9uKCl7bGV0IGFyPXpvLnMoKSx5aT1hci54LGJsPWFyLnk7VmkoeWksYmwsVG4sImZyaWN0aW9uIil9LGZ1bmN0aW9uKCl7bG4uY2FuY2VsKCl9KX19ZnVuY3Rpb24gV3MoR2UsSHQpe2xldCBJdD0hMTtyZXR1cm4gR2U+Ym4udmFsdWU/KEdlPWJuLnZhbHVlLEl0PSEwKTpHZTxfdC52YWx1ZSYmKEdlPV90LnZhbHVlLEl0PSEwKSxIdD5Qbi52YWx1ZT8oSHQ9UG4udmFsdWUsSXQ9ITApOkh0PFZ0LnZhbHVlJiYoSHQ9VnQudmFsdWUsSXQ9ITApLHt4OkdlLHk6SHQsb3V0T2ZCb3VuZHM6SXR9fWZ1bmN0aW9uIEdzKCl7VW4ueD1ZYS5sZWZ0LWllLmxlZnQudmFsdWUsVW4ueT1ZYS50b3AtaWUudG9wLnZhbHVlfWZ1bmN0aW9uIERsKEdlKXtHZT1HZXx8VG4sR2U9WGEoR2UpLFN0LnZhbHVlPVlhLmhlaWdodC9UbixGdC52YWx1ZT1ZYS53aWR0aC9UbjtsZXQgSHQ9U3QudmFsdWUqR2UsSXQ9RnQudmFsdWUqR2U7aXIueD0oSXQtRnQudmFsdWUpLzIsaXIueT0oSHQtU3QudmFsdWUpLzJ9ZnVuY3Rpb24gcXMoKXtsZXQgR2U9MC1Vbi54K2lyLngsSHQ9aWUud2lkdGgudmFsdWUtRnQudmFsdWUtVW4ueC1pci54O190LnZhbHVlPU1hdGgubWluKEdlLEh0KSxibi52YWx1ZT1NYXRoLm1heChHZSxIdCk7bGV0IEl0PTAtVW4ueStpci55LHZuPWllLmhlaWdodC52YWx1ZS1TdC52YWx1ZS1Vbi55LWlyLnk7VnQudmFsdWU9TWF0aC5taW4oSXQsdm4pLFBuLnZhbHVlPU1hdGgubWF4KEl0LHZuKX1mdW5jdGlvbiBiaShHZSxIdCl7aWYoeS5zY2FsZSl7R2U9WGEoR2UpLERsKEdlKSxxcygpO2xldCBJdD1XcyhIbixBciksdm49SXQueCxxbj1JdC55O0h0P3lzKHZuLHFuLEdlLCIiLCEwLCEwKTpKbyhmdW5jdGlvbigpe1ZpKHZuLHFuLEdlLCIiLCEwLCEwKX0pfX1mdW5jdGlvbiBYYShHZSl7cmV0dXJuIEdlPU1hdGgubWF4KC41LEduLnZhbHVlLEdlKSxHZT1NYXRoLm1pbigxMCxvYS52YWx1ZSxHZSksR2V9ZnVuY3Rpb24geXMoR2UsSHQsSXQsdm4scW4sSXIpe1hyKCksS2EudmFsdWV8fChHZT1IbiksSmEudmFsdWV8fChIdD1BcikseS5zY2FsZXx8KEl0PVRuKTtsZXQgYXI9V3MoR2UsSHQpO2lmKEdlPWFyLngsSHQ9YXIueSwheS5hbmltYXRpb24pe1ZpKEdlLEh0LEl0LHZuLHFuLElyKTtyZXR1cm59aW8uX3NwcmluZ1guX3NvbHV0aW9uPW51bGwsaW8uX3NwcmluZ1kuX3NvbHV0aW9uPW51bGwsaW8uX3NwcmluZ1NjYWxlLl9zb2x1dGlvbj1udWxsLGlvLl9zcHJpbmdYLl9lbmRQb3NpdGlvbj1Ibixpby5fc3ByaW5nWS5fZW5kUG9zaXRpb249QXIsaW8uX3NwcmluZ1NjYWxlLl9lbmRQb3NpdGlvbj1Ubixpby5zZXRFbmQoR2UsSHQsSXQsMSksT3Q9QWkoaW8sZnVuY3Rpb24oKXtsZXQgeWk9aW8ueCgpLGJsPXlpLngsRmw9eWkueSx5bD15aS5zY2FsZTtWaShibCxGbCx5bCx2bixxbixJcil9LGZ1bmN0aW9uKCl7T3QuY2FuY2VsKCl9KX1mdW5jdGlvbiBFcyhHZSl7bGV0IEh0PVdzKEhuLEFyKSxJdD1IdC54LHZuPUh0LnkscW49SHQub3V0T2ZCb3VuZHM7cmV0dXJuIHFuJiZ5cyhJdCx2bixUbixHZSkscW59ZnVuY3Rpb24gVmkoR2UsSHQsSXQsdm49IiIscW4sSXIpe0dlIT09bnVsbCYmR2UudG9TdHJpbmcoKSE9PSJOYU4iJiZ0eXBlb2YgR2U9PSJudW1iZXIifHwoR2U9SG58fDApLEh0IT09bnVsbCYmSHQudG9TdHJpbmcoKSE9PSJOYU4iJiZ0eXBlb2YgSHQ9PSJudW1iZXIifHwoSHQ9QXJ8fDApLEdlPU51bWJlcihHZS50b0ZpeGVkKDEpKSxIdD1OdW1iZXIoSHQudG9GaXhlZCgxKSksSXQ9TnVtYmVyKEl0LnRvRml4ZWQoMSkpLEhuPT09R2UmJkFyPT09SHR8fHFufHxEKCJjaGFuZ2UiLHt4OkxpKEdlLGlyLngpLHk6TGkoSHQsaXIueSksc291cmNlOnZufSkseS5zY2FsZXx8KEl0PVRuKSxJdD1YYShJdCksSXQ9K0l0LnRvRml4ZWQoMyksSXImJkl0IT09VG4mJkQoInNjYWxlIix7eDpHZSx5Okh0LHNjYWxlOkl0fSk7bGV0IGFyPWB0cmFuc2xhdGUoJHtHZX1weCwgJHtIdH1weCkgc2NhbGUoJHtJdH0pYDtPbi50cmFuc2l0aW9uKFcudmFsdWUse3N0eWxlczp7dHJhbnNmb3JtOmFyfSxkdXJhdGlvbjowLGRlbGF5OjB9KSxIbj1HZSxBcj1IdCxUbj1JdH1mdW5jdGlvbiBTcygpe3JldHVybiBtbihXLnZhbHVlKS50aGVuKEdlPT57WWE9R2V9KX1mdW5jdGlvbiBRYSgpe2lmKCFuZS52YWx1ZSlyZXR1cm47WHIoKTtsZXQgR2U9eS5zY2FsZT9QdC52YWx1ZToxO0dzKCksRGwoR2UpLHFzKCksSG49RmUudmFsdWUraXIueCxBcj12dC52YWx1ZStpci55O2xldCBIdD1XcyhIbixBciksSXQ9SHQueCx2bj1IdC55O1ZpKEl0LHZuLEdlLCIiLCEwKX1yZXR1cm4gTy5vbk1vdW50ZWQoKCk9PntCZT1NaShIdD0+e3N3aXRjaChIdC5kZXRhaWwuc3RhdGUpe2Nhc2Uic3RhcnQiOl9sKCk7YnJlYWs7Y2FzZSJtb3ZlIjp6cyhIdCk7YnJlYWs7Y2FzZSJlbmQiOkxsKCl9fSksZygoKT0+e1NzKCkudGhlbigoKT0+e1FhKCl9KX0sMTAwKSx6by5yZWNvbmZpZ3VyZSgxLEJuLnZhbHVlKSxpby5yZWNvbmZpZ3VyZSgxLDkqTWF0aC5wb3coam8udmFsdWUsMikvNDAsam8udmFsdWUpO2xldCBHZT17c2V0UGFyZW50OlFhfTtnZShHZSksTy5vblVubW91bnRlZCgoKT0+e3dlKEdlKX0pfSksTy5vblVubW91bnRlZCgoKT0+e1hyKCl9KSwoKT0+eyQoQmUpfX1sZXQgaWk9MTYsRnI9e2FjdGl2ZUNvbG9yOnZyLlBSSU1BUllfQ09MT1IsYmFja2dyb3VuZENvbG9yOiIjRUJFQkVCIixhY3RpdmVNb2RlOiJiYWNrd2FyZHMifSwkdD17cGVyY2VudDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowLHZhbGlkYXRvcih5KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh5KSl9fSxmb250U2l6ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDppaX0sc2hvd0luZm86e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzdHJva2VXaWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo2LHZhbGlkYXRvcih5KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh5KSl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpGci5hY3RpdmVDb2xvcn0sYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6RnIuYWN0aXZlQ29sb3J9LGJhY2tncm91bmRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpGci5iYWNrZ3JvdW5kQ29sb3J9LGFjdGl2ZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGFjdGl2ZU1vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6RnIuYWN0aXZlTW9kZX0sZHVyYXRpb246e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MzAsdmFsaWRhdG9yKHkpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHkpKX19LGJvcmRlclJhZGl1czp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfX0sUmU9W3sidW5pLXByb2dyZXNzIjp7IiI6e2ZsZXg6MSxmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciJ9fSwidW5pLXByb2dyZXNzLWJhciI6eyIiOntmbGV4OjF9fSwidW5pLXByb2dyZXNzLWlubmVyLWJhciI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUifX0sInVuaS1wcm9ncmVzcy1pbmZvIjp7IiI6e21hcmdpbkxlZnQ6IjE1cHgifX19XSxYaT1PLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUHJvZ3Jlc3MiLHByb3BzOiR0LHN0eWxlczpSZSxlbWl0czpbImFjdGl2ZWVuZCJdLHNldHVwKHkse2VtaXQ6RH0pe2xldCBXPU8ucmVmKG51bGwpLCQ9Ty5yZWYobnVsbCksbmU9b3IoVyxEKSxpZT10bih5KTtyZXR1cm4gTy53YXRjaCgoKT0+aWUucmVhbFBlcmNlbnQsKGdlLHdlKT0+e2llLmxhc3RQZXJjZW50PXdlfHwwLG1vKGllLHksbmUpfSksTy5vbk1vdW50ZWQoKCk9PntnKCgpPT57bW4oJC52YWx1ZSkudGhlbigoe3dpZHRoOmdlfSk9PntpZS5wcm9ncmVzc1dpZHRoPWdlfHwwLG1vKGllLHksbmUpfSl9LDUwKX0pLCgpPT57bGV0e3Nob3dJbmZvOmdlLGZvbnRTaXplOndlfT15LHtvdXRlckJhclN0eWxlOkJlLGlubmVyQmFyU3R5bGU6SGUsY3VycmVudFBlcmNlbnQ6RWV9PWllO3JldHVybiBPLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6VyxjbGFzczoidW5pLXByb2dyZXNzIn0sW08uY3JlYXRlVk5vZGUoImRpdiIse3JlZjokLHN0eWxlOkJlLGNsYXNzOiJ1bmktcHJvZ3Jlc3MtYmFyIn0sW08uY3JlYXRlVk5vZGUoImRpdiIse3N0eWxlOkhlLGNsYXNzOiJ1bmktcHJvZ3Jlc3MtaW5uZXItYmFyIn0sbnVsbCldKSxnZT9zbihFZSsiJSIse2NsYXNzOiJ1bmktcHJvZ3Jlc3MtaW5mbyIsc3R5bGU6e2ZvbnRTaXplOndlfX0pOm51bGxdKX19fSk7ZnVuY3Rpb24gdG4oeSl7bGV0IEQ9Ty5yZWYoMCksVz1PLnJlZigwKSwkPU8uY29tcHV0ZWQoKCk9Pih7YmFja2dyb3VuZENvbG9yOnkuYmFja2dyb3VuZENvbG9yLGJvcmRlclJhZGl1czp5LmJvcmRlclJhZGl1cyxoZWlnaHQ6eS5zdHJva2VXaWR0aH0pKSxuZT1PLmNvbXB1dGVkKCgpPT57bGV0IHdlPXkuY29sb3IhPT1Gci5hY3RpdmVDb2xvciYmeS5hY3RpdmVDb2xvcj09PUZyLmFjdGl2ZUNvbG9yP3kuY29sb3I6eS5hY3RpdmVDb2xvcjtyZXR1cm57d2lkdGg6RC52YWx1ZSpXLnZhbHVlLzEwMCxoZWlnaHQ6eS5zdHJva2VXaWR0aCxiYWNrZ3JvdW5kQ29sb3I6d2UsYm9yZGVyUmFkaXVzOnkuYm9yZGVyUmFkaXVzfX0pLGllPU8uY29tcHV0ZWQoKCk9PntsZXQgd2U9cGFyc2VGbG9hdCh5LnBlcmNlbnQpO3JldHVybiB3ZTwwJiYod2U9MCksd2U+MTAwJiYod2U9MTAwKSx3ZX0pO3JldHVybiBPLnJlYWN0aXZlKHtvdXRlckJhclN0eWxlOiQsaW5uZXJCYXJTdHlsZTpuZSxyZWFsUGVyY2VudDppZSxjdXJyZW50UGVyY2VudDpELHN0cm9rZVRpbWVyOjAsbGFzdFBlcmNlbnQ6MCxwcm9ncmVzc1dpZHRoOld9KX1mdW5jdGlvbiBtbyh5LEQsVyl7eS5zdHJva2VUaW1lciYmY2xlYXJJbnRlcnZhbCh5LnN0cm9rZVRpbWVyKSxELmFjdGl2ZT8oeS5jdXJyZW50UGVyY2VudD1ELmFjdGl2ZU1vZGU9PT1Gci5hY3RpdmVNb2RlPzA6eS5sYXN0UGVyY2VudCx5LnN0cm9rZVRpbWVyPXNldEludGVydmFsKCgpPT57eS5jdXJyZW50UGVyY2VudCsxPnkucmVhbFBlcmNlbnQ/KHkuY3VycmVudFBlcmNlbnQ9eS5yZWFsUGVyY2VudCx5LnN0cm9rZVRpbWVyJiZjbGVhckludGVydmFsKHkuc3Ryb2tlVGltZXIpLFcoImFjdGl2ZWVuZCIse30pKTp5LmN1cnJlbnRQZXJjZW50Kz0xfSxwYXJzZUZsb2F0KEQuZHVyYXRpb24pKSk6eS5jdXJyZW50UGVyY2VudD15LnJlYWxQZXJjZW50fWxldCBvaT17dmFsdWU6e3R5cGU6QXJyYXksZGVmYXVsdCgpe3JldHVybltdfSx2YWxpZGF0b3I6ZnVuY3Rpb24oeSl7cmV0dXJuIFR0LmlzQXJyYXkoeSkmJnkuZmlsdGVyKEQ9PnR5cGVvZiBEPT0ibnVtYmVyIikubGVuZ3RoPT09eS5sZW5ndGh9fSxpbmRpY2F0b3JTdHlsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0saW5kaWNhdG9yQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1hc2tTdHlsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbWFza0NsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sT2k9VHQuZXh0ZW5kKHt9LG9pLHtoZWlnaHQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0sbWFza1RvcFN0eWxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtYXNrQm90dG9tU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSksWm89Ty5kZWZpbmVDb21wb25lbnQoe25hbWU6IlBpY2tlclZpZXciLHByb3BzOk9pLGVtaXRzOlsiY2hhbmdlIiwidXBkYXRlOnZhbHVlIl0sc2V0dXAoeSx7c2xvdHM6RCxlbWl0Old9KXtsZXQgJD1PLnJlZihudWxsKSxuZT1Ybyh5KSxpZT1vcigkLFcpLGdlPVtdLHdlPUhlPT5BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGdlLmZpbHRlcihFZT0+RWUudHlwZSE9PU8uQ29tbWVudCksSGUpLEJlPUhlPT5PLmNvbXB1dGVkKHtnZXQoKXtsZXQgRWU9d2UoSGUudm5vZGUpO3JldHVybiBuZS52YWx1ZVtFZV18fDB9LHNldChFZSl7aWYoIUhlLmRhdGEuX2lzTW91bnRlZClyZXR1cm47bGV0IEZlPXdlKEhlLnZub2RlKTtpZihGZTwwKXJldHVybjtpZihuZS52YWx1ZVtGZV0hPT1FZSl7bmUudmFsdWVbRmVdPUVlO2xldCBQdD1uZS52YWx1ZS5tYXAoRnQ9PkZ0KTtXKCJ1cGRhdGU6dmFsdWUiLFB0KSxpZSgiY2hhbmdlIix7dmFsdWU6UHR9KX19fSk7cmV0dXJuIE8ucHJvdmlkZSgiZ2V0UGlja2VyVmlld0NvbHVtbiIsQmUpLE8ucHJvdmlkZSgicGlja2VyVmlld1Byb3BzIix5KSwoKT0+e2xldCBIZT1ELmRlZmF1bHQmJkQuZGVmYXVsdCgpO2dlPVppKEhlKTtsZXQgRWU9eS5oZWlnaHQ/e2hlaWdodDpgJHtwYXJzZUZsb2F0KHkuaGVpZ2h0KX1weGB9Ont9O3JldHVybiBPLmNyZWF0ZVZOb2RlKCJ2aWV3IixPLm1lcmdlUHJvcHMoe3JlZjokLGNsYXNzOiJ1bmktcGlja2VyLXZpZXciLHN0eWxlOkVlfSx7cHJldmVudEdlc3R1cmU6ITB9KSxbTy5jcmVhdGVWTm9kZSgidmlldyIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctd3JhcHBlciJ9LFtnZV0pXSl9fSxzdHlsZXM6W3sidW5pLXBpY2tlci12aWV3Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9fSwidW5pLXBpY2tlci12aWV3LXdyYXBwZXIiOnsiIjp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoicm93Iixwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowLG92ZXJmbG93OiJoaWRkZW4ifX19XX0pO2Z1bmN0aW9uIFhvKHkpe2xldCBEPU8ucmVhY3RpdmUoWy4uLnkudmFsdWVdKSxXPU8ucmVhY3RpdmUoe3ZhbHVlOkR9KTtyZXR1cm4gTy53YXRjaCgoKT0+eS52YWx1ZSwkPT57Vy52YWx1ZS5sZW5ndGg9JC5sZW5ndGgsTy5uZXh0VGljaygoKT0+eyQuZm9yRWFjaCgobmUsaWUpPT57bmUhPT1XLnZhbHVlW2llXSYmVy52YWx1ZS5zcGxpY2UoaWUsMSxuZSl9KX0pfSksV31sZXQgVGE9dy5yZXF1aXJlTW9kdWxlKCJkb20iKSxEaT13LmNvbmZpZy5lbnYucGxhdGZvcm0udG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIjtmdW5jdGlvbiBhaSh5KXtyZXR1cm4gVHQuZXh0ZW5kKHt9LFR0LmlzU3RyaW5nKHkpP0JpKHkpOnkpfWxldCB5cj17bGVuZ3RoOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9fSxfbz1PLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUGlja2VyVmlld0NvbHVtbiIscHJvcHM6eXIsZGF0YTooKT0+KHtfaXNNb3VudGVkOiExfSksc2V0dXAoeSx7c2xvdHM6RH0pe2xldCBXPU8uZ2V0Q3VycmVudEluc3RhbmNlKCksJD1PLnJlZihudWxsKSxuZT1PLnJlZihudWxsKSxpZT1PLnJlZihudWxsKSxnZT1PLnJlZihudWxsKSx3ZT1PLmluamVjdCgicGlja2VyVmlld1Byb3BzIiksSGU9Ty5pbmplY3QoImdldFBpY2tlclZpZXdDb2x1bW4iKShXKSxFZT1PLmNvbXB1dGVkKCgpPT5haSh3ZS5pbmRpY2F0b3JTdHlsZSkpLEZlPU8uY29tcHV0ZWQoKCk9PmFpKHdlLm1hc2tUb3BTdHlsZSkpLHZ0PU8uY29tcHV0ZWQoKCk9PmFpKHdlLm1hc2tCb3R0b21TdHlsZSkpLFB0PU8ucmVmKDApO1B0LnZhbHVlPWZzKEVlLnZhbHVlKTtsZXQgRnQ9Ty5yZWYoMCk7RnQudmFsdWU9cGFyc2VGbG9hdCh3ZS5oZWlnaHQpO2xldHtzZXRDdXJyZW50OlN0LG9uU2Nyb2xsZW5kOl90fT1Rbyh5LEhlLG5lLFB0KSxWdD0oKT0+e2xldCBQbixPdDtnKCgpPT57UHJvbWlzZS5hbGwoW21uKCQudmFsdWUpLnRoZW4oKHtoZWlnaHQ6bG59KT0+e1BuPUZ0LnZhbHVlPWxufSksRGkmJnkubGVuZ3RoP21uKGllLnZhbHVlKS50aGVuKCh7aGVpZ2h0OmxufSk9PntPdD1QdC52YWx1ZT1sbi9wYXJzZUZsb2F0KHkubGVuZ3RoKX0pOm1uKGdlLnZhbHVlKS50aGVuKCh7aGVpZ2h0OmxufSk9PntPdD1QdC52YWx1ZT1sbn0pXSkudGhlbigoKT0+e1BuJiZPdD9nKCgpPT57Vy5kYXRhLl9pc01vdW50ZWQ9ITAsU3QoSGUudmFsdWUsITEsITApfSw1MCk6VnQoKX0pfSw1MCl9O08ub25Nb3VudGVkKFZ0KTtsZXQgYm49UG49PlBuP0RpP08uY3JlYXRlVk5vZGUoImRpdiIse3JlZjppZSxzdHlsZToiZmxleC1kaXJlY3Rpb246Y29sdW1uOyJ9LFtQbl0pOlBuOm51bGw7cmV0dXJuKCk9PntsZXQgUG49RC5kZWZhdWx0JiZELmRlZmF1bHQoKSxPdD0oRnQudmFsdWUtUHQudmFsdWUpLzIsbG49YCR7RnQudmFsdWUtT3R9cHhgLFVuPXtzaG93U2Nyb2xsYmFyOiExLHNjcm9sbFRvQmVnaW46ITEsZGVjZWxlcmF0aW9uUmF0ZTouMyxzY3JvbGxZOiEwfTtyZXR1cm4gRGl8fChVbi5zY3JvbGxUb3A9SGUudmFsdWUqUHQudmFsdWUpLE8uY3JlYXRlVk5vZGUoInZpZXciLHtyZWY6JCxjbGFzczoidW5pLXBpY2tlci12aWV3LWNvbHVtbiJ9LFtPLmNyZWF0ZVZOb2RlKCJzY3JvbGwtdmlldyIsTy5tZXJnZVByb3BzKHtjbGFzczoidW5pLXBpY2tlci12aWV3LWdyb3VwIixzdHlsZToiZmxleC1kaXJlY3Rpb246Y29sdW1uOyIsb25TY3JvbGxlbmQ6X3R9LFVuKSxbTy5jcmVhdGVWTm9kZSgidmlldyIse3JlZjpuZSxjbGFzczoidW5pLXBpY2tlci12aWV3LWNvbnRlbnQiLHN0eWxlOntwYWRkaW5nVG9wOmAke090fXB4YCxwYWRkaW5nQm90dG9tOmAke090fXB4YH19LFtibihQbildKV0pLE8uY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sifSxbTy5jcmVhdGVWTm9kZSgidS1zY2FsYWJsZSIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctbWFzayB1bmktcGlja2VyLXZpZXctbWFzay10b3AiLHN0eWxlOlR0LmV4dGVuZCh7fSxGZS52YWx1ZSx7Ym90dG9tOmxufSl9LG51bGwpLE8uY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sgdW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIixzdHlsZTpUdC5leHRlbmQoe30sdnQudmFsdWUse3RvcDpsbn0pfSxudWxsKV0pLE8uY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtyZWY6Z2UsY2xhc3M6InVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiLHN0eWxlOlR0LmV4dGVuZCh7fSxFZS52YWx1ZSx7dG9wOmAke090fXB4YH0pfSxudWxsKV0pfX0sc3R5bGVzOlt7InVuaS1waWNrZXItdmlldy1jb2x1bW4iOnsiIjp7ZmxleDoxLHBvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoic3RyZXRjaCIsb3ZlcmZsb3c6ImhpZGRlbiJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2siOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MCxwb2ludGVyRXZlbnRzOiJub25lIn19LCJ1bmktcGlja2VyLXZpZXctbWFzay10b3AiOnsiIjp7Ym90dG9tOjAsYmFja2dyb3VuZEltYWdlOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkscmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIjp7IiI6e3RvcDowLGJhY2tncm91bmRJbWFnZToibGluZWFyLWdyYWRpZW50KHRvIHRvcCxyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSkifX0sInVuaS1waWNrZXItdmlldy1ncm91cCI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowfX0sInVuaS1waWNrZXItdmlldy1jb250ZW50Ijp7IiI6e2ZsZXhEaXJlY3Rpb246ImNvbHVtbiIscGFkZGluZ1RvcDowLHBhZGRpbmdSaWdodDowLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDowfX0sInVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAscmlnaHQ6MCx0b3A6MCxoZWlnaHQ6IjM0cHgiLHBvaW50ZXJFdmVudHM6Im5vbmUiLGJvcmRlckNvbG9yOiIjZTVlNWU1Iixib3JkZXJUb3BXaWR0aDoiMXB4Iixib3JkZXJCb3R0b21XaWR0aDoiMXB4In19fV19KTtmdW5jdGlvbiBmcyh5KXtsZXQgVz0oeS5oZWlnaHR8fHkubGluZUhlaWdodHx8IiIpLm1hdGNoKC8oLT9bXGRcLl0rKXB4LyksJD0wO3JldHVybiBXJiYoJD1wYXJzZUZsb2F0KFdbMV0pKSwkfWZ1bmN0aW9uIFFvKHksRCxXLCQpe2xldCBuZTtmdW5jdGlvbiBpZShCZSxIZT0hMCl7VGEuc2Nyb2xsVG9FbGVtZW50KFcudmFsdWUse29mZnNldDpCZSokLnZhbHVlLGFuaW1hdGVkOkhlfSksSGUmJihuZT1EYXRlLm5vdygpKX1PLndhdGNoKCgpPT55Lmxlbmd0aCwoKT0+e2coKCk9PntnZShELnZhbHVlLCEwLCEwKX0sMTUwKX0pLE8ud2F0Y2goRCxCZT0+aWUoQmUpKTtsZXQgZ2U9KEJlLEhlPSEwLEVlKT0+e0QudmFsdWU9PT1CZSYmIUVlfHwoRC52YWx1ZT1CZSxEaSYmaWUoQmUsSGUpKX07cmV0dXJue3NldEN1cnJlbnQ6Z2Usb25TY3JvbGxlbmQ6QmU9PntpZihEYXRlLm5vdygpLW5lPDM0MClyZXR1cm47bGV0IEhlPUJlLmRldGFpbC5jb250ZW50T2Zmc2V0LnksRWU9TWF0aC5yb3VuZChIZS8kLnZhbHVlKTtIZSUkLnZhbHVlP2dlKEVlLCEwLCEwKTpELnZhbHVlPUVlfX19bGV0IHJuPXtTRUxFQ1RPUjoic2VsZWN0b3IiLE1VTFRJU0VMRUNUT1I6Im11bHRpU2VsZWN0b3IiLFRJTUU6InRpbWUiLERBVEU6ImRhdGUifSxFcj17WUVBUjoieWVhciIsTU9OVEg6Im1vbnRoIixEQVk6ImRheSJ9O2Z1bmN0aW9uIFduKHkpe3JldHVybiB5Pjk/eTpgMCR7eX1gfWZ1bmN0aW9uIFNyKHksRCl7eT1TdHJpbmcoeXx8IiIpO2xldCBXPW5ldyBEYXRlO2lmKEQ9PT1ybi5USU1FKXtsZXQgJD15LnNwbGl0KCI6Iik7JC5sZW5ndGg9PT0yJiZXLnNldEhvdXJzKHBhcnNlSW50KCRbMF0pLHBhcnNlSW50KCRbMV0pKX1lbHNle2xldCAkPXkuc3BsaXQoIi0iKTskLmxlbmd0aD09PTMmJlcuc2V0RnVsbFllYXIocGFyc2VJbnQoJFswXSkscGFyc2VJbnQoU3RyaW5nKHBhcnNlRmxvYXQoJFsxXSktMSkpLHBhcnNlSW50KCRbMl0pKX1yZXR1cm4gV31mdW5jdGlvbiBKcih5KXtpZih5Lm1vZGU9PT1ybi5USU1FKXJldHVybiIwMDowMCI7aWYoeS5tb2RlPT09cm4uREFURSl7bGV0IEQ9bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLTEwMDtzd2l0Y2goeS5maWVsZHMpe2Nhc2UgRXIuWUVBUjpyZXR1cm4gRDtjYXNlIEVyLk1PTlRIOnJldHVybiBEKyItMDEiO2RlZmF1bHQ6cmV0dXJuIEQrIi0wMS0wMSJ9fXJldHVybiIifWZ1bmN0aW9uIGVhKHkpe2lmKHkubW9kZT09PXJuLlRJTUUpcmV0dXJuIjIzOjU5IjtpZih5Lm1vZGU9PT1ybi5EQVRFKXtsZXQgRD1uZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkrMTAwO3N3aXRjaCh5LmZpZWxkcyl7Y2FzZSBFci5ZRUFSOnJldHVybiBEO2Nhc2UgRXIuTU9OVEg6cmV0dXJuIEQrIi0xMiI7ZGVmYXVsdDpyZXR1cm4gRCsiLTEyLTMxIn19cmV0dXJuIiJ9bGV0IHRhPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxyYW5nZTp7dHlwZTpBcnJheSxkZWZhdWx0KCl7cmV0dXJuW119fSxyYW5nZUtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdmFsdWU6e3R5cGU6W051bWJlcixTdHJpbmcsQXJyYXldLGRlZmF1bHQ6MH0sbW9kZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpybi5TRUxFQ1RPUix2YWxpZGF0b3IoeSl7cmV0dXJuIE9iamVjdC52YWx1ZXMocm4pLmluZGV4T2YoeSk+PTB9fSxmaWVsZHM6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHN0YXJ0Ont0eXBlOlN0cmluZyxkZWZhdWx0OkpyfSxlbmQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ZWF9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LGRzPU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJQaWNrZXIiLHByb3BzOnRhLGVtaXRzOlsiY2hhbmdlIiwiY2FuY2VsIiwiY29sdW1uY2hhbmdlIl0sc2V0dXAoeSx7c2xvdHM6RCxlbWl0Old9KXtsZXQgJD1PLnJlZihudWxsKSxuZT1vcigkLFcpLGllPU8ucmVmKG51bGwpLGdlPU8ucmVmKG51bGwpLHdlPSgpPT57bGV0IFN0PXkudmFsdWU7c3dpdGNoKHkubW9kZSl7Y2FzZSBybi5NVUxUSVNFTEVDVE9SOntUdC5pc0FycmF5KFN0KXx8KFN0PVtdKSxUdC5pc0FycmF5KGllLnZhbHVlKXx8KGllLnZhbHVlPVtdKTtsZXQgX3Q9aWUudmFsdWUubGVuZ3RoPU1hdGgubWF4KFN0Lmxlbmd0aCx5LnJhbmdlLmxlbmd0aCk7Zm9yKGxldCBWdD0wO1Z0PF90O1Z0Kyspe2xldCBibj1OdW1iZXIoU3RbVnRdKSxQbj1OdW1iZXIoaWUudmFsdWVbVnRdKSxPdD1pc05hTihibik/aXNOYU4oUG4pPzA6UG46Ym47aWUudmFsdWUuc3BsaWNlKFZ0LDEsT3Q8MD8wOk90KX19YnJlYWs7Y2FzZSBybi5USU1FOmNhc2Ugcm4uREFURTppZS52YWx1ZT1TdHJpbmcoU3QpO2JyZWFrO2RlZmF1bHQ6e2xldCBfdD1OdW1iZXIoU3QpO2llLnZhbHVlPV90PDA/MDpfdDticmVha319fSxCZT1TdD0+e2dlLnZhbHVlJiZnZS52YWx1ZS5zZW5kTWVzc2FnZShTdCl9LEhlPVN0PT57bGV0IF90PXtldmVudDoiY2FuY2VsIn07Z2UudmFsdWU9bm4oe3VybDoiX191bmlhcHBwaWNrZXIiLGRhdGE6U3Qsc3R5bGU6e3RpdGxlTlZpZXc6ITEsYW5pbWF0aW9uVHlwZToibm9uZSIsYW5pbWF0aW9uRHVyYXRpb246MCxiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDApIixwb3BHZXN0dXJlOiJub25lIn0sb25NZXNzYWdlOlZ0PT57bGV0IGJuPVZ0LmV2ZW50O2lmKGJuPT09ImNyZWF0ZWQiKXtCZShTdCk7cmV0dXJufWlmKGJuPT09ImNvbHVtbmNoYW5nZSIpe2RlbGV0ZSBWdC5ldmVudCxuZShibixWdCk7cmV0dXJufV90PVZ0fSxvbkNsb3NlOigpPT57Z2UudmFsdWU9bnVsbDtsZXQgVnQ9X3QuZXZlbnQ7ZGVsZXRlIF90LmV2ZW50LFZ0JiZuZShWdCxfdCl9fSl9LEVlPVN0PT57ZC5uYXRpdmVVSVt5Lm1vZGU9PT1ybi5USU1FPyJwaWNrVGltZSI6InBpY2tEYXRlIl0oX3Q9PntsZXQgVnQ9X3QuZGF0ZTtuZSgiY2hhbmdlIix7dmFsdWU6eS5tb2RlPT09cm4uVElNRT9gJHtXbihWdC5nZXRIb3VycygpKX06JHtXbihWdC5nZXRNaW51dGVzKCkpfWA6YCR7VnQuZ2V0RnVsbFllYXIoKX0tJHtXbihWdC5nZXRNb250aCgpKzEpfS0ke1duKFZ0LmdldERhdGUoKSl9YH0pfSwoKT0+e25lKCJjYW5jZWwiLHt9KX0seS5tb2RlPT09cm4uVElNRT97dGltZTpTcih5LnZhbHVlLHJuLlRJTUUpfTp7ZGF0ZTpTcih5LnZhbHVlLHJuLkRBVEUpLG1pbkRhdGU6U3IoeS5zdGFydCxybi5EQVRFKSxtYXhEYXRlOlNyKHkuZW5kLHJuLkRBVEUpfSl9LEZlPVN0PT57KFN0Lm1vZGU9PT1ybi5USU1FfHxTdC5tb2RlPT09cm4uREFURSkmJiFTdC5maWVsZHM/RWUoKTooU3QuZmllbGRzPU9iamVjdC52YWx1ZXMoRXIpLmluY2x1ZGVzKFN0LmZpZWxkcyk/U3QuZmllbGRzOkVyLkRBWSxIZShTdCkpfSx2dD1TdD0+e3kuZGlzYWJsZWR8fEZlKFR0LmV4dGVuZCh7fSx5LHt2YWx1ZTppZS52YWx1ZSxsb2NhbGU6Xy5nZXRMb2NhbGUoKX0pKX0sUHQ9Ty5pbmplY3QodXIsITEpLEZ0PXtzdWJtaXQ6KCk9Plt5Lm5hbWUsaWUudmFsdWVdLHJlc2V0OigpPT57c3dpdGNoKHkubW9kZSl7Y2FzZSBybi5TRUxFQ1RPUjppZS52YWx1ZT0wO2JyZWFrO2Nhc2Ugcm4uTVVMVElTRUxFQ1RPUjpUdC5pc0FycmF5KHkudmFsdWUpJiYoaWUudmFsdWU9eS52YWx1ZS5tYXAoU3Q9PjApKTticmVhaztjYXNlIHJuLkRBVEU6Y2FzZSBybi5USU1FOmllLnZhbHVlPSIiO2JyZWFrfX19O3JldHVybiBQdCYmKFB0LmFkZEZpZWxkKEZ0KSxPLm9uQmVmb3JlVW5tb3VudCgoKT0+UHQucmVtb3ZlRmllbGQoRnQpKSksT2JqZWN0LmtleXMoeSkuZm9yRWFjaChTdD0+e08ud2F0Y2goKCk9PnlbU3RdLF90PT57bGV0IFZ0PXt9O1Z0W1N0XT1fdCxCZShWdCl9LHtkZWVwOiEwfSl9KSxPLndhdGNoKCgpPT55LnZhbHVlLHdlLHtkZWVwOiEwfSksd2UoKSwoKT0+Ty5jcmVhdGVWTm9kZSgidmlldyIse3JlZjokLG9uQ2xpY2s6dnR9LFtELmRlZmF1bHQmJkQuZGVmYXVsdCgpXSl9fSksQm89e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1pbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxtYXg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MTAwfSx2YWx1ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxzdGVwOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxiYWNrZ3JvdW5kQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxhY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHNlbGVjdGVkQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSxibG9ja0NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjZmZmZmZmIn0sYmxvY2tTaXplOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjI4fSxzaG93VmFsdWU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfX0sTW89W3sidW5pLXNsaWRlciI6eyIiOntmbGV4OjEsZmxleERpcmVjdGlvbjoiY29sdW1uIn19LCJ1bmktc2xpZGVyLXdyYXBwZXIiOnsiIjp7ZmxleERpcmVjdGlvbjoicm93IixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixhbGlnbkl0ZW1zOiJjZW50ZXIifX0sInVuaS1zbGlkZXItdGFwLWFyZWEiOnsiIjp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBhZGRpbmdUb3A6IjE0IixwYWRkaW5nQm90dG9tOiIxNCJ9fSwidW5pLXNsaWRlci1oYW5kbGUtd3JhcHBlciI6eyIiOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxiYWNrZ3JvdW5kQ29sb3I6IiNlOWU5ZTkiLGhlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI1IixtYXJnaW5SaWdodDoiMTQiLG1hcmdpbkxlZnQ6IjE0In19LCJ1bmktc2xpZGVyLXRyYWNrIjp7IiI6e2hlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI2IixiYWNrZ3JvdW5kQ29sb3I6IiMwMDdhZmYifX0sInVuaS1zbGlkZXItdGh1bWIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6IjEiLHdpZHRoOiIyOCIsaGVpZ2h0OiIyOCIsYm9yZGVyUmFkaXVzOjUwLGJveFNoYWRvdzoiMCAwIDRweCAjZWJlYmViIn19LCJ1bmktc2xpZGVyLXZhbHVlIjp7IiI6e2NvbG9yOiIjODg4ODg4Iixmb250U2l6ZToiMTYiLHdpZHRoOiIzMCJ9fX1dLEhhPU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJVU2xpZGVyIixwcm9wczpCbyxzdHlsZXM6TW8sc2V0dXAoeSx7ZW1pdDpEfSl7bGV0IFc9Ty5yZWYobnVsbCksJD1PLnJlZihudWxsKSxuZT1vcihXLEQpLGllPSRhKHkpLGdlPUxvKHksaWUsbmUpO3JldHVybiBQYSh5LGllKSxPLndhdGNoKCgpPT55LnZhbHVlLHdlPT57aWUuc2xpZGVyVmFsdWU9TnVtYmVyKHdlKX0pLE8ub25Nb3VudGVkKCgpPT57ZygoKT0+e21uKCQudmFsdWUpLnRoZW4oKHt3aWR0aDp3ZSxsZWZ0OkJlfSk9PntpZS5zbGlkZXJMZWZ0PUJlLGllLnNsaWRlcldpZHRoPXdlfHwwLGllLnNsaWRlclZhbHVlPU51bWJlcih5LnZhbHVlKX0pfSwxMDApfSksKCk9PntsZXR7c2hvd1ZhbHVlOndlfT15LHt0cmFja1RhcFN0eWxlOkJlLHRyYWNrU3R5bGU6SGUsdHJhY2tBY3RpdmVTdHlsZTpFZSx0aHVtYlN0eWxlOkZlLHNsaWRlclZhbHVlOnZ0fT1pZTtyZXR1cm4gTy5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXIiLHJlZjpXfSxbTy5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItd3JhcHBlciJ9LFtPLmNyZWF0ZVZOb2RlKCJkaXYiLE8ubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1zbGlkZXItdGFwLWFyZWEiLHN0eWxlOkJlfSxnZSksW08uY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc2xpZGVyLWhhbmRsZS13cmFwcGVyIixzdHlsZTpIZSxyZWY6JH0sW08uY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc2xpZGVyLXRyYWNrIixzdHlsZTpFZX0sbnVsbCldKSxPLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlci10aHVtYiIsc3R5bGU6RmV9LG51bGwpXSksd2U/c24odnQrIiIse2NsYXNzOiJ1bmktc2xpZGVyLXZhbHVlIn0pOm51bGxdKV0pfX19KTtmdW5jdGlvbiAkYSh5KXtsZXQgRD1PLnJlZigwKSxXPU8ucmVmKDApLCQ9Ty5yZWYoMCksbmU9KCk9PnkuYmFja2dyb3VuZENvbG9yIT09IiNlOWU5ZTkiP3kuYmFja2dyb3VuZENvbG9yOnkuY29sb3IhPT0iIzAwN2FmZiI/eS5jb2xvcjoiIzAwN2FmZiIsaWU9KCk9PnkuYWN0aXZlQ29sb3IhPT0iIzAwN2FmZiI/eS5hY3RpdmVDb2xvcjp5LnNlbGVjdGVkQ29sb3IhPT0iI2U5ZTllOSI/eS5zZWxlY3RlZENvbG9yOiIjZTllOWU5IixnZT0oKT0+e2xldCBIZT1OdW1iZXIoeS5tYXgpLEVlPU51bWJlcih5Lm1pbik7cmV0dXJuKCQudmFsdWUtRWUpLyhIZS1FZSkqVy52YWx1ZX0sd2U9TnVtYmVyKHkuYmxvY2tTaXplKS8yO3JldHVybiBPLnJlYWN0aXZlKHtzbGlkZXJMZWZ0OkQsc2xpZGVyV2lkdGg6VyxzbGlkZXJWYWx1ZTokLHNsaWRlclRodW1iT2Zmc2V0OndlLHRyYWNrVGFwU3R5bGU6Ty5jb21wdXRlZCgoKT0+KHtwYWRkaW5nVG9wOndlLHBhZGRpbmdCb3R0b206d2V9KSksdHJhY2tTdHlsZTpPLmNvbXB1dGVkKCgpPT4oe2JhY2tncm91bmRDb2xvcjpuZSgpLG1hcmdpbkxlZnQ6d2UsbWFyZ2luUmlnaHQ6d2V9KSksdHJhY2tBY3RpdmVTdHlsZTpPLmNvbXB1dGVkKCgpPT4oe2JhY2tncm91bmRDb2xvcjppZSgpLHdpZHRoOmdlKCl9KSksdGh1bWJTdHlsZTpPLmNvbXB1dGVkKCgpPT4oe3dpZHRoOnkuYmxvY2tTaXplLGhlaWdodDp5LmJsb2NrU2l6ZSxiYWNrZ3JvdW5kQ29sb3I6eS5ibG9ja0NvbG9yLGxlZnQ6Z2UoKX0pKX0pfWZ1bmN0aW9uIExvKHksRCxXKXtsZXQgJD1udWxsO2Z1bmN0aW9uIG5lKHdlLEJlKXt5LmRpc2FibGVkfHwod2U9PT0ibW92ZSI/KGllKEJlKSxXKCJjaGFuZ2luZyIse3ZhbHVlOkQuc2xpZGVyVmFsdWV9KSk6d2U9PT0iZW5kIiYmKGllKEJlKSxXKCJjaGFuZ2UiLHt2YWx1ZTpELnNsaWRlclZhbHVlfSkpKX1mdW5jdGlvbiBpZSh3ZSl7d2UtPUQuc2xpZGVyVGh1bWJPZmZzZXQsd2U8MCYmKHdlPTApLHdlPkQuc2xpZGVyV2lkdGgmJih3ZT1ELnNsaWRlcldpZHRoKTtsZXQgQmU9TnVtYmVyKHkubWF4KSxIZT1OdW1iZXIoeS5taW4pLEVlPU51bWJlcih5LnN0ZXApLEZlPXdlL0Quc2xpZGVyV2lkdGgqKEJlLUhlKTtFZT4wJiZGZT5FZSYmRmUlRWUvRWUhPT0wP0ZlLT1GZSVFZTpGZT1wYXJzZUludChGZSsiIiksRC5zbGlkZXJWYWx1ZT1GZStIZX1yZXR1cm57b25Ub3VjaHN0YXJ0KHdlKXt3ZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiYhJCYmKCQ9d2UsbmUoInN0YXJ0Iix3ZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCkpfSxvblRvdWNobW92ZSh3ZSl7d2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09MSYmJCYmbmUoIm1vdmUiLHdlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYKX0sb25Ub3VjaGVuZCh3ZSl7d2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09MSYmJCYmKCQ9bnVsbCxuZSgiZW5kIix3ZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCkpfX19ZnVuY3Rpb24gUGEoeSxEKXtsZXQgVz1PLmluamVjdCh1ciwhMSksJD17c3VibWl0OigpPT57bGV0IG5lPVsiIixudWxsXTtyZXR1cm4geS5uYW1lJiYobmVbMF09eS5uYW1lLG5lWzFdPUQuc2xpZGVyVmFsdWUpLG5lfSxyZXNldDooKT0+e0Quc2xpZGVyVmFsdWU9TnVtYmVyKHkudmFsdWUpfX07VyYmKFcuYWRkRmllbGQoJCksTy5vblVubW91bnRlZCgoKT0+e1cucmVtb3ZlRmllbGQoJCl9KSl9bGV0IHBzPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjaGVja2VkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoic3dpdGNoIn0saWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifX0sbmE9e3N3aXRjaDoic3dpdGNoIixjaGVja2JveDoiY2hlY2tib3gifSxEbz17d2lkdGg6NTIsaGVpZ2h0OjMyfSxWPU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJTd2l0Y2giLHByb3BzOnBzLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAoeSx7ZW1pdDpEfSl7bGV0IFc9Ty5yZWYobnVsbCksJD1PLnJlZih5LmNoZWNrZWQpLG5lPXEoeSwkKSxpZT1vcihXLEQpO08ud2F0Y2goKCk9PnkuY2hlY2tlZCx3ZT0+eyQudmFsdWU9d2V9KTtsZXQgZ2U9KHdlLEJlKT0+e3kuZGlzYWJsZWR8fCgkLnZhbHVlPXdlLmRldGFpbD93ZS5kZXRhaWwudmFsdWU6ISQudmFsdWUsaWUoImNoYW5nZSIse3ZhbHVlOiQudmFsdWV9KSl9O3JldHVybiBuZSYmKG5lLmFkZEhhbmRsZXIoZ2UpLE8ub25CZWZvcmVVbm1vdW50KCgpPT57bmUucmVtb3ZlSGFuZGxlcihnZSl9KSkscXIoeSx7ImxhYmVsLWNsaWNrIjpnZX0pLCgpPT57bGV0e2NvbG9yOndlLHR5cGU6QmUsZGlzYWJsZWQ6SGV9PXk7cmV0dXJuIE8uY3JlYXRlVk5vZGUoImRpdiIse3JlZjpXfSxbQmU9PT1uYS5zd2l0Y2g/Ty5jcmVhdGVWTm9kZSgiZGMtc3dpdGNoIixPLm1lcmdlUHJvcHMoe2RhdGFVbmNUeXBlOiJ1bmktc3dpdGNoIn0se29uQ2hhbmdlOmdlfSx7Y2hlY2tlZDokLnZhbHVlLGNvbG9yOndlLGRpc2FibGVkOkhlfSx7c3R5bGU6RG99KSxudWxsKTpudWxsLEJlPT09bmEuY2hlY2tib3g/Ty5jcmVhdGVWTm9kZShPLnJlc29sdmVDb21wb25lbnQoImNoZWNrYm94IiksTy5tZXJnZVByb3BzKHtzdHlsZTp7Y29sb3I6d2V9fSx7Y2hlY2tlZDokLnZhbHVlLGRpc2FibGVkOkhlfSx7b25DbGljazpnZX0pLG51bGwpOm51bGxdKX19fSk7ZnVuY3Rpb24gcSh5LEQpe2xldCBXPU8uaW5qZWN0KHVyLCExKSwkPU8uaW5qZWN0KHpuLCExKSxuZT17c3VibWl0OigpPT57bGV0IGllPVsiIixudWxsXTtyZXR1cm4geS5uYW1lJiYoaWVbMF09eS5uYW1lLGllWzFdPUQudmFsdWUpLGllfSxyZXNldDooKT0+e0QudmFsdWU9ITF9fTtyZXR1cm4gVyYmKFcuYWRkRmllbGQobmUpLE8ub25Vbm1vdW50ZWQoKCk9PntXLnJlbW92ZUZpZWxkKG5lKX0pKSwkfWxldCBwZT17Y2hlY2tlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjMDA3YWZmIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxaZT1UcigidWNnIiksS2U9e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxtdD1beyJ1bmktY2hlY2tib3giOnsiIjp7ZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIifX0sInVuaS1jaGVja2JveC1pbnB1dCI6eyIiOntqdXN0aWZ5Q29udGVudDoiY2VudGVyIixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBvc2l0aW9uOiJyZWxhdGl2ZSIsYm9yZGVyV2lkdGg6IjEiLGJvcmRlckNvbG9yOiIjZDFkMWQxIixib3JkZXJTdHlsZToic29saWQiLGJhY2tncm91bmRDb2xvcjoiI2ZmZmZmZiIsYm9yZGVyUmFkaXVzOiIzIix3aWR0aDoiMjIiLGhlaWdodDoiMjIifX0sInVuaS1pY29uIjp7IiI6e2ZvbnRGYW1pbHk6InVuaW5jb21wb25lbnRzIixmb250U2l6ZToiMTYiLG1hcmdpbkxlZnQ6IjIiLG1hcmdpblRvcDoiMiIsY29sb3I6IiMwMDdhZmYifX0sInVuaS1jaGVja2JveC1pbnB1dC1kaXNhYmxlZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNlMWUxZTEifX0sInVuaS1jaGVja2JveC1pbnB1dC1kaXNhYmxlZC1iZWZvcmUiOnsiIjp7Y29sb3I6IiNhZGFkYWQifX0sInVuaS1jaGVja2JveC1zbG90Ijp7IiI6e2ZvbnRTaXplOiIxNiIsbWFyZ2luTGVmdDoiNSJ9fX1dLGV0PU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJDaGVja2JveCIscHJvcHM6cGUsc3R5bGVzOm10LHNldHVwKHkse3Nsb3RzOkR9KXtsZXQgVz1PLnJlZihudWxsKSwkPU8ucmVmKHkuY2hlY2tlZCksbmU9Ty5yZWYoeS52YWx1ZSksaWU9Ty5jb21wdXRlZCgoKT0+eS5kaXNhYmxlZD8iI2FkYWRhZCI6eS5jb2xvciksZ2U9KCk9PnskLnZhbHVlPSExfSx3ZT0oRmUsdnQpPT57eS5kaXNhYmxlZHx8KCQudmFsdWU9ISQudmFsdWUsQmUmJkJlLmNoZWNrYm94Q2hhbmdlKEZlKSl9LHt1bmlDaGVja0dyb3VwOkJlLHVuaUxhYmVsOkhlfT1sdCgkLG5lLGdlKTtIZSYmKEhlLmFkZEhhbmRsZXIod2UpLE8ub25CZWZvcmVVbm1vdW50KCgpPT57SGUucmVtb3ZlSGFuZGxlcih3ZSl9KSkscXIoeSx7ImxhYmVsLWNsaWNrIjp3ZX0pLE8ud2F0Y2goWygpPT55LmNoZWNrZWQsKCk9PnkudmFsdWVdLChbRmUsdnRdKT0+eyQudmFsdWU9RmUsbmUudmFsdWU9dnR9KTtsZXQgRWU9KCk9PntpZighRC5kZWZhdWx0KXJldHVybltdO2xldCBGZT1ELmRlZmF1bHQoKTtyZXR1cm4gRmUubGVuZ3RoPT09MSYmRmVbMF0udHlwZT09PVRleHQ/W3NuKEZlWzBdLmNoaWxkcmVuLHtjbGFzczoidW5pLWNoZWNrYm94LXNsb3QifSldOkZlfTtyZXR1cm4oKT0+Ty5jcmVhdGVWTm9kZSgiZGl2IixPLm1lcmdlUHJvcHMoe3JlZjpXfSx7ZGF0YVVuY1R5cGU6InVuaS1jaGVja2JveCJ9LHtvbkNsaWNrOndlLGNsYXNzOiJ1bmktY2hlY2tib3gifSksW08uY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOlsidW5pLWNoZWNrYm94LWlucHV0Iix7InVuaS1jaGVja2JveC1pbnB1dC1kaXNhYmxlZCI6eS5kaXNhYmxlZH1dfSxbJC52YWx1ZT9zbigiXHVFQTA4Iix7Y2xhc3M6InVuaS1pY29uIixzdHlsZTp7Y29sb3I6aWUudmFsdWV9fSk6bnVsbF0pLC4uLkVlKCldKX19KTtmdW5jdGlvbiBsdCh5LEQsVyl7bGV0ICQ9Ty5jb21wdXRlZCgoKT0+KHtjaGVja2JveENoZWNrZWQ6Qm9vbGVhbih5LnZhbHVlKSx2YWx1ZTpELnZhbHVlfSkpLG5lPXtyZXNldDpXfSxpZT1PLmluamVjdChaZSwhMSk7aWUmJmllLmFkZEZpZWxkKCQpO2xldCBnZT1PLmluamVjdCh1ciwhMSk7Z2UmJmdlLmFkZEZpZWxkKG5lKTtsZXQgd2U9Ty5pbmplY3Qoem4sITEpO3JldHVybiBPLm9uQmVmb3JlVW5tb3VudCgoKT0+e2llJiZpZS5yZW1vdmVGaWVsZCgkKSxnZSYmZ2UucmVtb3ZlRmllbGQobmUpfSkse3VuaUNoZWNrR3JvdXA6aWUsdW5pRm9ybTpnZSx1bmlMYWJlbDp3ZX19bGV0IGZyPU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJDaGVja2JveEdyb3VwIixwcm9wczpLZSxlbWl0czpbImNoYW5nZSJdLHNldHVwKHkse3Nsb3RzOkQsZW1pdDpXfSl7bGV0ICQ9Ty5yZWYobnVsbCksbmU9b3IoJCxXKTtyZXR1cm4gSHIoeSxuZSksKCk9Pk8uY3JlYXRlVk5vZGUoImRpdiIse3JlZjokLGNsYXNzOiJ1bmktY2hlY2tib3gtZ3JvdXAifSxbRC5kZWZhdWx0JiZELmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIEhyKHksRCl7bGV0IFc9W10sJD0oKT0+Vy5yZWR1Y2UoKGllLGdlKT0+KGdlLnZhbHVlLmNoZWNrYm94Q2hlY2tlZCYmaWUucHVzaChnZS52YWx1ZS52YWx1ZSksaWUpLG5ldyBBcnJheSk7Ty5wcm92aWRlKFplLHthZGRGaWVsZChpZSl7Vy5wdXNoKGllKX0scmVtb3ZlRmllbGQoaWUpe1cuc3BsaWNlKFcuaW5kZXhPZihpZSksMSl9LGNoZWNrYm94Q2hhbmdlKGllKXtEKCJjaGFuZ2UiLHt2YWx1ZTokKCl9KX19KTtsZXQgbmU9Ty5pbmplY3QodXIsITEpO3JldHVybiBuZSYmbmUuYWRkRmllbGQoe3N1Ym1pdDooKT0+e2xldCBpZT1bIiIsbnVsbF07cmV0dXJuIHkubmFtZSE9PSIiJiYoaWVbMF09eS5uYW1lLGllWzFdPSQoKSksaWV9fSksJH1sZXQgJHI9e2NoZWNrZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHZhbHVlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sUWk9VHIoInVjZyIpLF9pPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sZW89W3sidW5pLXJhZGlvIjp7IiI6e2FsaWduSXRlbXM6ImNlbnRlciIsZmxleERpcmVjdGlvbjoicm93In19LCJ1bmktcmFkaW8taW5wdXQiOnsiIjp7cG9zaXRpb246InJlbGF0aXZlIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLG1hcmdpblJpZ2h0OiI1Iixib3JkZXJTdHlsZToic29saWQiLGJvcmRlcldpZHRoOiIxIixib3JkZXJDb2xvcjoiI2QxZDFkMSIsYm9yZGVyUmFkaXVzOjUwLHdpZHRoOiIyMiIsaGVpZ2h0OiIyMiIsb3V0bGluZTowfX0sInVuaS1yYWRpby1pbnB1dC1pY29uIjp7IiI6e2ZvbnRGYW1pbHk6InVuaW5jb21wb25lbnRzIixmb250U2l6ZToiMTQiLGNvbG9yOiIjZmZmZmZmIn19LCJ1bmktcmFkaW8taW5wdXQtZGlzYWJsZWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZTFlMWUxIixib3JkZXJDb2xvcjoiI2QxZDFkMSIsY29sb3I6IiNhZGFkYWQifX0sInVuaS1yYWRpby1zbG90Ijp7IiI6e2ZvbnRTaXplOiIxNiIsbWFyZ2luTGVmdDoiNSJ9fX1dLGhzPU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJSYWRpbyIscHJvcHM6JHIsc3R5bGVzOmVvLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAoeSx7c2xvdHM6RH0pe2xldCBXPU8ucmVmKG51bGwpLCQ9Ty5yZWYoeS5jaGVja2VkKSxuZT1PLnJlZih5LnZhbHVlKSxpZT1PLmNvbXB1dGVkKCgpPT57bGV0IHZ0PXkuZGlzYWJsZWQ/IiNhZGFkYWQiOnkuY29sb3I7cmV0dXJuICQudmFsdWU/e2JhY2tncm91bmRDb2xvcjp2dCxib3JkZXJDb2xvcjp2dH06e2JvcmRlckNvbG9yOiIjZDFkMWQxIn19KSxnZT0oKT0+eyQudmFsdWU9ITF9LHt1bmlDaGVja0dyb3VwOndlLHVuaUxhYmVsOkJlLGZpZWxkOkhlfT1GaSgkLG5lLGdlKSxFZT0odnQsUHQpPT57eS5kaXNhYmxlZHx8JC52YWx1ZXx8KCQudmFsdWU9ISQudmFsdWUsd2UmJndlLnJhZGlvQ2hhbmdlKHZ0LEhlKSl9O0JlJiYoQmUuYWRkSGFuZGxlcihFZSksTy5vbkJlZm9yZVVubW91bnQoKCk9PntCZS5yZW1vdmVIYW5kbGVyKEVlKX0pKSxxcih5LHsibGFiZWwtY2xpY2siOkVlfSksTy53YXRjaChbKCk9PnkuY2hlY2tlZCwoKT0+eS52YWx1ZV0sKFt2dCxQdF0pPT57JC52YWx1ZT12dCxuZS52YWx1ZT1QdH0pO2xldCBGZT0oKT0+e2lmKCFELmRlZmF1bHQpcmV0dXJuW107bGV0IHZ0PUQuZGVmYXVsdCgpO3JldHVybiB2dC5sZW5ndGg9PT0xJiZ2dFswXS50eXBlPT09VGV4dD9bc24odnRbMF0uY2hpbGRyZW4se2NsYXNzOiJ1bmktcmFkaW8tc2xvdCJ9KV06dnR9O3JldHVybigpPT57bGV0e2Rpc2FibGVkOnZ0fT15O3JldHVybiBPLmNyZWF0ZVZOb2RlKCJkaXYiLE8ubWVyZ2VQcm9wcyh7cmVmOld9LHtkYXRhVW5jVHlwZToidW5pLXJhZGlvIn0se29uQ2xpY2s6RWUsY2xhc3M6InVuaS1yYWRpbyJ9KSxbTy5jcmVhdGVWTm9kZSgiZGl2Iix7c3R5bGU6aWUudmFsdWUsY2xhc3M6WyJ1bmktcmFkaW8taW5wdXQiLHsidW5pLXJhZGlvLWlucHV0LWRpc2FibGVkIjp2dH1dfSxbJC52YWx1ZT9zbigiXHVFQTA4Iix7Y2xhc3M6InVuaS1yYWRpby1pbnB1dC1pY29uIn0pOm51bGxdKSwuLi5GZSgpXSl9fX0pO2Z1bmN0aW9uIEZpKHksRCxXKXtsZXQgJD1PLmNvbXB1dGVkKHtnZXQ6KCk9Pih7cmFkaW9DaGVja2VkOkJvb2xlYW4oeS52YWx1ZSksdmFsdWU6RC52YWx1ZX0pLHNldDooe3JhZGlvQ2hlY2tlZDpCZX0pPT57eS52YWx1ZT1CZX19KSxuZT17cmVzZXQ6V30saWU9Ty5pbmplY3QoUWksITEpO2llJiZpZS5hZGRGaWVsZCgkKTtsZXQgZ2U9Ty5pbmplY3QodXIsITEpO2dlJiZnZS5hZGRGaWVsZChuZSk7bGV0IHdlPU8uaW5qZWN0KHpuLCExKTtyZXR1cm4gTy5vbkJlZm9yZVVubW91bnQoKCk9PntpZSYmaWUucmVtb3ZlRmllbGQoJCksZ2UmJmdlLnJlbW92ZUZpZWxkKG5lKX0pLHt1bmlDaGVja0dyb3VwOmllLHVuaUZvcm06Z2UsdW5pTGFiZWw6d2UsZmllbGQ6JH19bGV0IHdyPU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJSYWRpb0dyb3VwIixwcm9wczpfaSxlbWl0czpbImNoYW5nZSJdLHNldHVwKHkse3Nsb3RzOkQsZW1pdDpXfSl7bGV0ICQ9Ty5yZWYobnVsbCksbmU9b3IoJCxXKTtyZXR1cm4gc2koeSxuZSksKCk9Pk8uY3JlYXRlVk5vZGUoImRpdiIse3JlZjokfSxbRC5kZWZhdWx0JiZELmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIHNpKHksRCl7bGV0IFc9W107Ty5vbk1vdW50ZWQoKCk9Pnt3ZShXLmxlbmd0aC0xKX0pO2xldCAkPSgpPT57dmFyIEJlO3JldHVybihCZT1XLmZpbmQoSGU9PkhlLnZhbHVlLnJhZGlvQ2hlY2tlZCkpPT1udWxsP3ZvaWQgMDpCZS52YWx1ZS52YWx1ZX07Ty5wcm92aWRlKFFpLHthZGRGaWVsZChCZSl7Vy5wdXNoKEJlKX0scmVtb3ZlRmllbGQoQmUpe1cuc3BsaWNlKFcuaW5kZXhPZihCZSksMSl9LHJhZGlvQ2hhbmdlKEJlLEhlKXtsZXQgRWU9Vy5pbmRleE9mKEhlKTt3ZShFZSwhMCksRCgiY2hhbmdlIix7dmFsdWU6JCgpfSl9fSk7bGV0IG5lPU8uaW5qZWN0KHVyLCExKSxpZT17c3VibWl0OigpPT57bGV0IEJlPVsiIixudWxsXTtyZXR1cm4geS5uYW1lIT09IiImJihCZVswXT15Lm5hbWUsQmVbMV09JCgpKSxCZX19O25lJiYobmUuYWRkRmllbGQoaWUpLE8ub25CZWZvcmVVbm1vdW50KCgpPT57bmUucmVtb3ZlRmllbGQoaWUpfSkpO2Z1bmN0aW9uIGdlKEJlLEhlKXtCZS52YWx1ZT17cmFkaW9DaGVja2VkOkhlLHZhbHVlOkJlLnZhbHVlLnZhbHVlfX1mdW5jdGlvbiB3ZShCZSxIZSl7Vy5mb3JFYWNoKChFZSxGZSk9PntGZSE9PUJlJiZIZSYmZ2UoV1tGZV0sITEpfSl9cmV0dXJuIFd9bGV0IE5hPVsidS1pbnB1dCIsInUtdGV4dGFyZWEiXSxsZT1PLmRlZmluZUNvbXBvbmVudCh7bmFtZToiRm9ybSIsZW1pdHM6WyJzdWJtaXQiLCJyZXNldCJdLHNldHVwKHt9LHtzbG90czp5LGVtaXQ6RH0pe2xldCBXPU8ucmVmKG51bGwpLCQ9b3IoVyxEKSxuZT1bXSxpZTtyZXR1cm4gTy5wcm92aWRlKHVyLHthZGRGaWVsZChnZSl7bmUucHVzaChnZSl9LHJlbW92ZUZpZWxkKGdlKXtuZS5zcGxpY2UobmUuaW5kZXhPZihnZSksMSl9LHN1Ym1pdChnZSl7bGV0IHdlPXt9O2llJiZpZSh3ZSk7bGV0IEJlPW5lLnJlZHVjZSgoSGUsRWUpPT57aWYoRWUuc3VibWl0KXtsZXRbRmUsdnRdPUVlLnN1Ym1pdCgpO0ZlJiYoSGVbRmVdPXZ0KX1yZXR1cm4gSGV9LE9iamVjdC5jcmVhdGUobnVsbCkpO09iamVjdC5hc3NpZ24od2UsQmUpLCQoInN1Ym1pdCIse3ZhbHVlOndlfSl9LHJlc2V0KGdlKXtpZSYmaWUoKSxuZS5mb3JFYWNoKHdlPT53ZS5yZXNldCYmd2UucmVzZXQoKSksJCgicmVzZXQiLGdlKX19KSwoKT0+e2xldCBnZT15LmRlZmF1bHQmJnkuZGVmYXVsdCgpO3JldHVybiBpZT1KKGdlKSxPLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7cmVmOld9LFtnZV0pfX19KTtmdW5jdGlvbiBKKHkpe2xldCBEPXcucmVxdWlyZU1vZHVsZSgicGx1cyIpLFc9KCQsbmUpPT57KG5lfHx5fHxbXSkuZm9yRWFjaChmdW5jdGlvbihpZSl7TmEuaW5kZXhPZihTdHJpbmcoaWUudHlwZSkpPj0wJiZpZS5lbCYmaWUuZWwuYXR0ciYmaWUuZWwuYXR0ci5uYW1lJiYoJD8kW2llLmVsLmF0dHIubmFtZV09RC5nZXRWYWx1ZShpZS5lbC5ub2RlSWQpOmllLmVsLnNldFZhbHVlKCIiKSksVHQuaXNBcnJheShpZS5jaGlsZHJlbikmJmllLmNoaWxkcmVuJiZpZS5jaGlsZHJlbi5sZW5ndGgmJlcoJCxpZS5jaGlsZHJlbil9KX07cmV0dXJuIFd9bGV0IGRlPXt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxzaXplOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OjIzfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LFVlPXtzdWNjZXNzOiIjMDliYjA3IixpbmZvOiIjMTBhZWZmIix3YXJuOiIjZjc2MjYwIix3YWl0aW5nOiIjMTBhZWZmIixzYWZlX3N1Y2Nlc3M6IiMwOWJiMDciLHNhZmVfd2FybjoiI2ZmYmUwMCIsc3VjY2Vzc19jaXJjbGU6IiMwOWJiMDciLHN1Y2Nlc3Nfbm9fY2lyY2xlOiIjMDliYjA3Iix3YWl0aW5nX2NpcmNsZToiIzEwYWVmZiIsY2lyY2xlOiIjYzljOWM5Iixkb3dubG9hZDoiIzA5YmIwNyIsaW5mb19jaXJjbGU6IiMwOWJiMDciLGNhbmNlbDoiI2Y0MzUzMCIsc2VhcmNoOiIjYjJiMmIyIixjbGVhcjoiI2IyYjJiMiJ9LGR0PXtzdWNjZXNzOiJcdUVBMDYiLGluZm86Ilx1RUEwMyIsd2FybjoiXHVFQTBCIix3YWl0aW5nOiJcdUVBMDkiLHNhZmVfc3VjY2VzczoiXHVFQTA0IixzYWZlX3dhcm46Ilx1RUEwNSIsc3VjY2Vzc19jaXJjbGU6Ilx1RUEwNyIsc3VjY2Vzc19ub19jaXJjbGU6Ilx1RUEwOCIsd2FpdGluZ19jaXJjbGU6Ilx1RUEwQSIsY2lyY2xlOiJcdUVBMDEiLGRvd25sb2FkOiJcdUVBMDIiLGluZm9fY2lyY2xlOiJcdUVBMEMiLGNhbmNlbDoiXHVFQTBEIixzZWFyY2g6Ilx1RUEwRSIsY2xlYXI6Ilx1RUEwRiJ9LG9uPVt7InVuaS1pY29uIjp7IiI6e2ZvbnRGYW1pbHk6InVuaW5jb21wb25lbnRzIn19fV0sSm49Ty5kZWZpbmVDb21wb25lbnQoe25hbWU6Ikljb24iLHByb3BzOmRlLHN0eWxlczpvbixzZXR1cCh5LHt9KXtyZXR1cm4oKT0+c24oZHRbeS50eXBlXSx7Y2xhc3M6InVuaS1pY29uIixzdHlsZTp7Y29sb3I6eS5jb2xvcnx8VWVbeS50eXBlXSxmb250U2l6ZTp5LnNpemV9fSl9fSksX249e2luZGljYXRvckRvdHM6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx2ZXJ0aWNhbDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGF1dG9wbGF5Ont0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY2lyY3VsYXI6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxpbnRlcnZhbDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1ZTN9LGR1cmF0aW9uOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjUwMH0sY3VycmVudDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxpbmRpY2F0b3JDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoicmdiYSgwLDAsMCwuMykifSxpbmRpY2F0b3JBY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwMDAwMCJ9LHByZXZpb3VzTWFyZ2luOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxuZXh0TWFyZ2luOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjdXJyZW50SXRlbUlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxza2lwSGlkZGVuSXRlbUxheW91dDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGRpc3BsYXlNdWx0aXBsZUl0ZW1zOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGRpc2FibGVUb3VjaDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9fSxWbj13LmNvbmZpZy5lbnYucGxhdGZvcm0udG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIixkcj1beyJ1bmktc3dpcGVyIjp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OiIxNTBweCJ9fSwidW5pLXN3aXBlci1zbGlkZXIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MH19LCJ1bmktc3dpcGVyLWRvdHMiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAscmlnaHQ6MCxib3R0b206IjEwIixoZWlnaHQ6IjEwIn19fV0sdG89Ty5kZWZpbmVDb21wb25lbnQoe25hbWU6IlN3aXBlciIscHJvcHM6X24sc3R5bGVzOmRyLGVtaXRzOlsiY2hhbmdlIiwidHJhbnNpdGlvbiIsImFuaW1hdGlvbmZpbmlzaCJdLHNldHVwKHkse3Nsb3RzOkQsZW1pdDpXfSl7bGV0ICQ9Ty5yZWYobnVsbCksbmU9W10saWU9b3IoJCxXKSxnZT1abih5KSx3ZT1ibyhnZSx5LG5lLGllKTtyZXR1cm4gTy53YXRjaChbKCk9PnkuY3VycmVudCwoKT0+eS5jdXJyZW50SXRlbUlkXSwoW0JlLEhlXSk9PntJYShnZSx5LG5lKX0pLE8ub25Nb3VudGVkKCgpPT57ZygoKT0+e21uKCQudmFsdWUpLnRoZW4oKHt3aWR0aDpCZSxoZWlnaHQ6SGV9KT0+e2dlLnN3aXBlcldpZHRoPUJlLGdlLnN3aXBlckhlaWdodD1IZX0pfSw1MCl9KSwoKT0+e2xldCBCZT1ELmRlZmF1bHQmJkQuZGVmYXVsdCgpLHtpbmRpY2F0b3JTdHlsZTpIZSxjdXJyZW50U3luYzpFZX09Z2U7cmV0dXJuIG5lPVppKEJlKSxPLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6JCxjbGFzczoidW5pLXN3aXBlciJ9LFtPLmNyZWF0ZVZOb2RlKCJzbGlkZXIiLE8ubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1zd2lwZXItc2xpZGVyIn0se2F1dG9QbGF5OnkuYXV0b3BsYXksaW50ZXJ2YWw6eS5pbnRlcnZhbCxpbmRleDpFZSxrZWVwSW5kZXg6ITAsc2hvd0luZGljYXRvcnM6eS5pbmRpY2F0b3JEb3RzLGluZmluaXRlOnkuY2lyY3VsYXIsdmVydGljYWw6eS52ZXJ0aWNhbCxzY3JvbGxhYmxlOiF5LmRpc2FibGVUb3VjaH0sd2UpLFtuZSxPLmNyZWF0ZVZOb2RlKCJpbmRpY2F0b3IiLHtjbGFzczoidW5pLXN3aXBlci1kb3RzIixzdHlsZTpIZX0sbnVsbCldKV0pfX19KTtmdW5jdGlvbiBabih5KXtsZXQgRD1PLnJlZigwKSxXPU8ucmVmKDApLCQ9Ty5yZWYoeS5jdXJyZW50KSxuZT1PLnJlZigiYXV0b3BsYXkiKSxpZT1PLmNvbXB1dGVkKCgpPT4oe2l0ZW1Db2xvcjp5LmluZGljYXRvckNvbG9yLGl0ZW1TZWxlY3RlZENvbG9yOnkuaW5kaWNhdG9yQWN0aXZlQ29sb3IsaXRlbVNpemU6OCxvcGFjaXR5OnkuaW5kaWNhdG9yRG90cz8xOjB9KSk7cmV0dXJuIE8ucmVhY3RpdmUoe3N3aXBlcldpZHRoOkQsc3dpcGVySGVpZ2h0OlcsaW5kaWNhdG9yU3R5bGU6aWUsY3VycmVudFN5bmM6JCxjdXJyZW50Q2hhbmdlU291cmNlOm5lfSl9ZnVuY3Rpb24gYm8oeSxELFcsJCl7bGV0IG5lPTAsaWU9RWU9PntsZXQgRmU9RWUuZGV0YWlsLHZ0PUQudmVydGljYWwsUHQ9KHZ0P0ZlLm9mZnNldFlSYXRpbzpGZS5vZmZzZXRYUmF0aW8pfHwwO2lmKChFZS5kcmFnfHxFZS5kcmFnKSYmKHkuY3VycmVudENoYW5nZVNvdXJjZT0idG91Y2giKSxQdD09PTApe2xldCBGdD1NYXRoLmFicyhuZSk7aWYoRnQ9PT0xKXJldHVybjtGdD4uNSYmKFB0PTEpfW5lPVB0LCQoInRyYW5zaXRpb24iLHtkeDp2dD8wOi15LnN3aXBlcldpZHRoKlB0LGR5OnZ0Py15LnN3aXBlckhlaWdodCpQdDowfSl9LGdlPUVlPT57bGV0IEZlPSgpPT57JCgiYW5pbWF0aW9uZmluaXNoIixCZSgpKSx5LmN1cnJlbnRDaGFuZ2VTb3VyY2U9ImF1dG9wbGF5In07Vm4/RmUoKTpnKEZlLDUwKX0sd2U9RWU9PntUdC5pc1N0cmluZyhFZS5kZXRhaWwuc291cmNlKSYmKHkuY3VycmVudENoYW5nZVNvdXJjZT1FZS5kZXRhaWwuc291cmNlKSx5LmN1cnJlbnRTeW5jPUVlLmRldGFpbC5pbmRleCxuZT0wfTtmdW5jdGlvbiBCZSgpe2xldCBFZT1OdW1iZXIoeS5jdXJyZW50U3luYyksRmU9V1tFZV18fHt9LHZ0PUZlLmNvbXBvbmVudEluc3RhbmNlJiZGZS5jb21wb25lbnRJbnN0YW5jZS5pdGVtSWR8fCIiO3JldHVybntjdXJyZW50OkVlLGN1cnJlbnRJdGVtSWQ6dnQsc291cmNlOnkuY3VycmVudENoYW5nZVNvdXJjZX19cmV0dXJuIE8ud2F0Y2goKCk9PnkuY3VycmVudFN5bmMsRWU9PnskKCJjaGFuZ2UiLEJlKCkpfSkse29uU2Nyb2xsOmllLG9uU2Nyb2xsZW5kOmdlLG9uQ2hhbmdlOndlfX1mdW5jdGlvbiBJYSh5LEQsVyl7bGV0ICQ9LTE7aWYoRC5jdXJyZW50SXRlbUlkKWZvcihsZXQgbmU9MCxpZT1XO25lPGllLmxlbmd0aDtuZSsrKXtsZXQgZ2U9aWVbbmVdLmNvbXBvbmVudEluc3RhbmNlO2lmKGdlJiZnZS5pdGVtSWQ9PT1ELmN1cnJlbnRJdGVtSWQpeyQ9bmU7YnJlYWt9fSQ8MCYmKCQ9TWF0aC5yb3VuZChOdW1iZXIoRC5jdXJyZW50KSl8fDApLCQ9JDwwPzA6JCx5LmN1cnJlbnRTeW5jIT09JCYmKHkuY3VycmVudENoYW5nZVNvdXJjZT0iIix5LmN1cnJlbnRTeW5jPSQpfWxldCB5bz17aXRlbUlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sRm89Ty5kZWZpbmVDb21wb25lbnQoe25hbWU6IlN3aXBlckl0ZW0iLHByb3BzOnlvLHNldHVwKHkse3Nsb3RzOkR9KXtyZXR1cm4oKT0+Ty5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zd2lwZXItaXRlbSIsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjAsb3ZlcmZsb3c6ImhpZGRlbiJ9fSxbRC5kZWZhdWx0JiZELmRlZmF1bHQoKV0pfX0pO3ZhciBSbD0vXjwoWy1BLVphLXowLTlfXSspKCg/OlxzK1thLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qKD86XHMqPVxzKig/Oig/OiJbXiJdKiIpfCg/OidbXiddKicpfFtePlxzXSspKT8pKilccyooXC8/KT4vLHJhPS9ePFwvKFstQS1aYS16MC05X10rKVtePl0qPi8sa2E9LyhbYS16QS1aXzpdWy1hLXpBLVowLTlfOi5dKikoPzpccyo9XHMqKD86KD86IigoPzpcXC58W14iXSkqKSIpfCg/OicoKD86XFwufFteJ10pKiknKXwoW14+XHNdKykpKT8vZyxobD1DcigiYXJlYSxiYXNlLGJhc2Vmb250LGJyLGNvbCxmcmFtZSxocixpbWcsaW5wdXQsbGluayxtZXRhLHBhcmFtLGVtYmVkLGNvbW1hbmQsa2V5Z2VuLHNvdXJjZSx0cmFjayx3YnIiKSxycj1DcigiYSxhZGRyZXNzLGFydGljbGUsYXBwbGV0LGFzaWRlLGF1ZGlvLGJsb2NrcXVvdGUsYnV0dG9uLGNhbnZhcyxjZW50ZXIsZGQsZGVsLGRpcixkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0sZnJhbWVzZXQsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpZnJhbWUsaXNpbmRleCxsaSxtYXAsbWVudSxub2ZyYW1lcyxub3NjcmlwdCxvYmplY3Qsb2wsb3V0cHV0LHAscHJlLHNlY3Rpb24sc2NyaXB0LHRhYmxlLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyLHVsLHZpZGVvIikseGw9Q3IoImFiYnIsYWNyb255bSxhcHBsZXQsYixiYXNlZm9udCxiZG8sYmlnLGJyLGJ1dHRvbixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaWZyYW1lLGltZyxpbnB1dCxpbnMsa2JkLGxhYmVsLG1hcCxvYmplY3QscSxzLHNhbXAsc2NyaXB0LHNlbGVjdCxzbWFsbCxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0ZXh0YXJlYSx0dCx1LHZhciIpLGphPUNyKCJjb2xncm91cCxkZCxkdCxsaSxvcHRpb25zLHAsdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxUaT1DcigiY2hlY2tlZCxjb21wYWN0LGRlY2xhcmUsZGVmZXIsZGlzYWJsZWQsaXNtYXAsbXVsdGlwbGUsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm93cmFwLHJlYWRvbmx5LHNlbGVjdGVkIiksaWE9Q3IoInNjcmlwdCxzdHlsZSIpO2Z1bmN0aW9uIFBpKHksRCl7dmFyIFcsJCxuZSxpZT1bXSxnZT15O2ZvcihpZS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5sZW5ndGgtMV19O3k7KXtpZigkPSEwLCFpZS5sYXN0KCl8fCFpYVtpZS5sYXN0KCldKXtpZih5LmluZGV4T2YoIjwhLS0iKT09MD8oVz15LmluZGV4T2YoIi0tPiIpLFc+PTAmJihELmNvbW1lbnQmJkQuY29tbWVudCh5LnN1YnN0cmluZyg0LFcpKSx5PXkuc3Vic3RyaW5nKFcrMyksJD0hMSkpOnkuaW5kZXhPZigiPC8iKT09MD8obmU9eS5tYXRjaChyYSksbmUmJih5PXkuc3Vic3RyaW5nKG5lWzBdLmxlbmd0aCksbmVbMF0ucmVwbGFjZShyYSxIZSksJD0hMSkpOnkuaW5kZXhPZigiPCIpPT0wJiYobmU9eS5tYXRjaChSbCksbmUmJih5PXkuc3Vic3RyaW5nKG5lWzBdLmxlbmd0aCksbmVbMF0ucmVwbGFjZShSbCxCZSksJD0hMSkpLCQpe1c9eS5pbmRleE9mKCI8Iik7dmFyIHdlPVc8MD95Onkuc3Vic3RyaW5nKDAsVyk7eT1XPDA/IiI6eS5zdWJzdHJpbmcoVyksRC5jaGFycyYmRC5jaGFycyh3ZSl9fWVsc2UgeT15LnJlcGxhY2UobmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pPC8iK2llLmxhc3QoKSsiW14+XSo+IiksZnVuY3Rpb24oRWUsRmUpe3JldHVybiBGZT1GZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPnw8IVxbQ0RBVEFcWyhbXHNcU10qPyldXT4vZywiJDEkMiIpLEQuY2hhcnMmJkQuY2hhcnMoRmUpLCIifSksSGUoIiIsaWUubGFzdCgpKTtpZih5PT1nZSl0aHJvdyJQYXJzZSBFcnJvcjogIit5O2dlPXl9SGUoKTtmdW5jdGlvbiBCZShFZSxGZSx2dCxQdCl7aWYoRmU9RmUudG9Mb3dlckNhc2UoKSxycltGZV0pZm9yKDtpZS5sYXN0KCkmJnhsW2llLmxhc3QoKV07KUhlKCIiLGllLmxhc3QoKSk7aWYoamFbRmVdJiZpZS5sYXN0KCk9PUZlJiZIZSgiIixGZSksUHQ9aGxbRmVdfHwhIVB0LFB0fHxpZS5wdXNoKEZlKSxELnN0YXJ0KXt2YXIgRnQ9W107dnQucmVwbGFjZShrYSxmdW5jdGlvbihTdCxfdCl7dmFyIFZ0PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTphcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOlRpW190XT9fdDoiIjtGdC5wdXNoKHtuYW1lOl90LHZhbHVlOlZ0LGVzY2FwZWQ6VnQucmVwbGFjZSgvKF58W15cXF0pIi9nLCckMVxcIicpfSl9KSxELnN0YXJ0JiZELnN0YXJ0KEZlLEZ0LFB0KX19ZnVuY3Rpb24gSGUoRWUsRmUpe2lmKEZlKWZvcih2YXIgdnQ9aWUubGVuZ3RoLTE7dnQ+PTAmJmllW3Z0XSE9RmU7dnQtLSk7ZWxzZSB2YXIgdnQ9MDtpZih2dD49MCl7Zm9yKHZhciBQdD1pZS5sZW5ndGgtMTtQdD49dnQ7UHQtLSlELmVuZCYmRC5lbmQoaWVbUHRdKTtpZS5sZW5ndGg9dnR9fX1mdW5jdGlvbiBDcih5KXtmb3IodmFyIEQ9e30sVz15LnNwbGl0KCIsIiksJD0wOyQ8Vy5sZW5ndGg7JCsrKURbV1skXV09ITA7cmV0dXJuIER9ZnVuY3Rpb24gUmEoeSl7cmV0dXJuIHkucmVwbGFjZSgvPFw/eG1sLipcPz5cbi8sIiIpLnJlcGxhY2UoLzwhZG9jdHlwZS4qPlxuLywiIikucmVwbGFjZSgvPCFET0NUWVBFLio+XG4vLCIiKX1mdW5jdGlvbiBubyh5KXtyZXR1cm4geS5yZWR1Y2UoZnVuY3Rpb24oRCxXKXtsZXQgJD1XLnZhbHVlLG5lPVcubmFtZTtyZXR1cm4gJC5tYXRjaCgvIC8pJiZbInN0eWxlIiwic3JjIl0uaW5kZXhPZihuZSk9PT0tMSYmKCQ9JC5zcGxpdCgiICIpKSxEW25lXT9BcnJheS5pc0FycmF5KERbbmVdKT9EW25lXS5wdXNoKCQpOkRbbmVdPVtEW25lXSwkXTpEW25lXT0kLER9LHt9KX1mdW5jdGlvbiB6YSh5KXt5PVJhKHkpO2xldCBEPVtdLFc9e25vZGU6InJvb3QiLGNoaWxkcmVuOltdfTtyZXR1cm4gUGkoeSx7c3RhcnQ6ZnVuY3Rpb24oJCxuZSxpZSl7bGV0IGdlPXtuYW1lOiR9O2lmKG5lLmxlbmd0aCE9PTAmJihnZS5hdHRycz1ubyhuZSkpLGllKXtsZXQgd2U9RFswXXx8Vzt3ZS5jaGlsZHJlbnx8KHdlLmNoaWxkcmVuPVtdKSx3ZS5jaGlsZHJlbi5wdXNoKGdlKX1lbHNlIEQudW5zaGlmdChnZSl9LGVuZDpmdW5jdGlvbigkKXtsZXQgbmU9RC5zaGlmdCgpO2lmKG5lLm5hbWUhPT0kJiZjb25zb2xlLmVycm9yKCJpbnZhbGlkIHN0YXRlOiBtaXNtYXRjaCBlbmQgdGFnIiksRC5sZW5ndGg9PT0wKVcuY2hpbGRyZW4ucHVzaChuZSk7ZWxzZXtsZXQgaWU9RFswXTtpZS5jaGlsZHJlbnx8KGllLmNoaWxkcmVuPVtdKSxpZS5jaGlsZHJlbi5wdXNoKG5lKX19LGNoYXJzOmZ1bmN0aW9uKCQpe2xldCBuZT17dHlwZToidGV4dCIsdGV4dDokfTtpZihELmxlbmd0aD09PTApVy5jaGlsZHJlbi5wdXNoKG5lKTtlbHNle2xldCBpZT1EWzBdO2llLmNoaWxkcmVufHwoaWUuY2hpbGRyZW49W10pLGllLmNoaWxkcmVuLnB1c2gobmUpfX0sY29tbWVudDpmdW5jdGlvbigkKXtsZXQgbmU9e25vZGU6ImNvbW1lbnQiLHRleHQ6JH0saWU9RFswXTtpZS5jaGlsZHJlbnx8KGllLmNoaWxkcmVuPVtdKSxpZS5jaGlsZHJlbi5wdXNoKG5lKX19KSxXLmNoaWxkcmVufWxldCBWbz17bm9kZXM6e3R5cGU6W0FycmF5LFN0cmluZ10sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX19LFVvPTE2LFdhPU8uZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJSaWNoVGV4dCIscHJvcHM6Vm8sc2V0dXAoeSl7bGV0IEQ9Ty5nZXRDdXJyZW50SW5zdGFuY2UoKTtyZXR1cm4oKT0+e2xldCBXPXkubm9kZXM7cmV0dXJuIFR0LmlzU3RyaW5nKFcpJiYoVz16YShXKSksTy5jcmVhdGVWTm9kZSgidS1yaWNoLXRleHQiLHt2YWx1ZTpncyhXfHxbXSxELnJvb3Qse2RlZmF1bHRGb250U2l6ZTpVb30pfSxudWxsKX19fSk7ZnVuY3Rpb24gZ3MoeSxELFcpe2xldCAkPVsic3BhbiIsImEiLCJpbWFnZSIsImltZyJdLG5lPXtibG9ja3F1b3RlOkZlLGJyOlN0LGRpdjpGZSxkbDpGZSxoMTpQdCgyKSxoMjpQdCgxLjUpLGgzOlB0KDEuMTcpLGg0OlB0KDEpLGg1OlB0KC44MyksaDY6UHQoLjY3KSxocjpGZSxvbDpGZSxwOkZlLHN0cm9uZzpGdCx0YWJsZTpGZSx0Ym9keTpGZSx0Zm9vdDpGZSx0aGVhZDpGZSx1bDpGZX0saWU9LyYoYW1wfGd0fGx0fG5ic3B8cXVvdHxhcG9zKTsvZyxnZT17YW1wOiImIixndDoiPiIsbHQ6IjwiLG5ic3A6IiAiLHF1b3Q6JyInLGFwb3M6IicifSx3ZT17dHlwZToic3BhbiIsX190eXBlOiJicmVhayIsYXR0cjp7dmFsdWU6YApgfX0sQmU9e19fYmxvY2s6ITAsX19icmVhazohMCxjaGlsZHJlbjpbXX0sSGU9bnVsbDtmdW5jdGlvbiBFZShPdCl7bGV0IGxuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoT3QuYXR0cnMpe2xldCBVbj0oT3QuYXR0cnMuY2xhc3N8fCIiKS5zcGxpdCgiICIpO09iamVjdC5hc3NpZ24obG4sTy5wYXJzZUNsYXNzTGlzdChVbixEKSxCaShPdC5hdHRycy5zdHlsZXx8IiIpKX1pZihPdC5uYW1lPT09ImltZyJ8fE90Lm5hbWU9PT0iaW1hZ2UiKXtsZXQgVW49T3QuYXR0cnM7bG4ud2lkdGg9bG4ud2lkdGh8fFVuLndpZHRoLGxuLmhlaWdodD1sbi5oZWlnaHR8fFVuLmhlaWdodH1yZXR1cm4gbG59ZnVuY3Rpb24gRmUoT3Qpe3JldHVybiBPdC5fX2Jsb2NrPSEwLE90fWZ1bmN0aW9uIHZ0KE90LGxuKXtyZXR1cm4gT3Quc3R5bGUmJiFPdC5zdHlsZS5mb250U2l6ZSYmKE90LnN0eWxlLmZvbnRTaXplPVcuZGVmYXVsdEZvbnRTaXplKmxuKSxGZShGdChPdCkpfWZ1bmN0aW9uIFB0KE90KXtyZXR1cm4gZnVuY3Rpb24obG4pe3JldHVybiB2dChsbixPdCl9fWZ1bmN0aW9uIEZ0KE90KXtyZXR1cm4gT3Quc3R5bGUmJiFPdC5zdHlsZS5mb250V2VpZ2h0JiYoT3Quc3R5bGUuZm9udFdlaWdodD0iYm9sZCIpLE90fWZ1bmN0aW9uIFN0KE90KXtyZXR1cm4gT3QuX192YWx1ZT0iICIsRmUoT3QpfWZ1bmN0aW9uIF90KE90KXtyZXR1cm4gT3QucmVwbGFjZShpZSxmdW5jdGlvbihsbixVbil7cmV0dXJuIGdlW1VuXX0pfWZ1bmN0aW9uIFZ0KE90KXtsZXQgbG49KE90Lm5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpLFVuPWxuLGlyPW5lW2xuXTskLmluZGV4T2YobG4pPT09LTEmJihsbj0ic3BhbiIpLGxuPT09ImltZyImJihsbj0iaW1hZ2UiKTtsZXQgVG49e3R5cGU6bG4sX190eXBlOlVuLGF0dHI6T2JqZWN0LmNyZWF0ZShudWxsKX07cmV0dXJuKE90LnR5cGU9PT0idGV4dCJ8fE90LnRleHQpJiYoVG4uX192YWx1ZT1Ubi5hdHRyLnZhbHVlPV90KChPdC50ZXh0fHwiIikudHJpbSgpKSksT3QuYXR0cnMmJk9iamVjdC5rZXlzKE90LmF0dHJzKS5mb3JFYWNoKEhuPT57SG4hPT0iY2xhc3MiJiZIbiE9PSJzdHlsZSImJihUbi5hdHRyW0huXT1PdC5hdHRyc1tIbl0pfSksVG4uc3R5bGU9RWUoT3QpLGlyJiZpcihUbiksKEJlLl9fYmxvY2t8fFRuLl9fYmxvY2spJiYoSGV8fChCZS5jaGlsZHJlbi5wdXNoKHdlKSxIZT1bQmUsd2VdKSksQmU9VG4sKEJlLl9fdmFsdWV8fEJlLnR5cGU9PT0iaW1hZ2UiJiZCZS5hdHRyLnNyYykmJihIZT1udWxsKSxUbi5jaGlsZHJlbj1ibihPdC5jaGlsZHJlbiksQmU9VG4sQmUuX19ibG9jayYmQmUuc3R5bGUuaGVpZ2h0JiYhL14wKHB4KT8kLy50ZXN0KEJlLnN0eWxlLmhlaWdodCkmJihIZT1udWxsKSxUbn1mdW5jdGlvbiBibihPdCl7cmV0dXJuIFR0LmlzQXJyYXkoT3QpP090Lm1hcChsbj0+VnQobG4pKTpbXX1sZXQgUG49Ym4oeSk7aWYoSGUpe2xldFtPdCxsbl09SGUsVW49T3QuY2hpbGRyZW4saXI9VW4uaW5kZXhPZihsbik7VW4uc3BsaWNlKGlyLDEpfXJldHVybiBQbn1sZXQgR2E9e307ZnVuY3Rpb24gZ2woeSxELFcpe2xldHthZHBpZDokLHdpZHRoOm5lfT15LGllPSQrIi0iK25lLGdlPUdhW2llXTtpZihnZSYmZ2UubGVuZ3RoPjApe0QoZ2Uuc3BsaWNlKDAsMSlbMF0pO3JldHVybn1kLmFkLmdldEFkcyh5LHdlPT57bGV0IEJlPXdlLmFkcztEKEJlLnNwbGljZSgwLDEpWzBdKSxHYVtpZV09Z2U/Z2UuY29uY2F0KEJlKTpCZX0sd2U9PntXKHtlcnJDb2RlOndlLmNvZGUsZXJyTXNnOndlLm1lc3NhZ2V9KX0pfWxldCBCbD17YWRwaWQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6IiJ9LGRhdGE6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHdpZHRoOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjaGFubmVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sRW89e2xvYWQ6ImxvYWQiLGNsb3NlOiJjbG9zZSIsZXJyb3I6ImVycm9yIixkb3dubG9hZGNoYW5nZToiZG93bmxvYWRjaGFuZ2UifSxmYz1PLmRlZmluZUNvbXBvbmVudCh7bmFtZToiQWQiLHByb3BzOkJsLGVtaXRzOltFby5sb2FkLEVvLmNsb3NlLEVvLmVycm9yLEVvLmRvd25sb2FkY2hhbmdlXSxzZXR1cCh5LHtlbWl0OkR9KXtsZXQgVz1PLnJlZihudWxsKSwkPW9yKFcsRCksbmU9dmwoKTtPLndhdGNoKCgpPT55LmFkcGlkLGdlPT57VXMobmUseSwkKX0pLE8ud2F0Y2goKCk9PnkuZGF0YSxnZT0+e25lLmRhdGE9Z2V9KSxPLm9uTW91bnRlZCgoKT0+e2coKCk9PnttbihXLnZhbHVlKS50aGVuKCh7d2lkdGg6Z2V9KT0+e25lLndpZHRoPWdlPT09MD8tMTpnZSxVcyhuZSx5LCQpfSl9LDUwKX0pO2xldCBpZT17b25Eb3dubG9hZGNoYW5nZShnZSl7JChFby5kb3dubG9hZGNoYW5nZSxnZSl9LG9uRGlzbGlrZShnZSl7JChFby5jbG9zZSxnZSl9fTtyZXR1cm4oKT0+Ty5jcmVhdGVWTm9kZSgidS1hZCIsTy5tZXJnZVByb3BzKHtyZWY6V30se2RhdGE6bmUuZGF0YSxyZW5kZXJpbmc6ITB9LGllKSxudWxsKX19KTtmdW5jdGlvbiB2bCh5KXtsZXQgRD1PLnJlZigiIik7cmV0dXJuIE8ucmVhY3RpdmUoe3dpZHRoOjAsZGF0YTpEfSl9ZnVuY3Rpb24gVXMoeSxELFcpe2dsKHthZHBpZDpELmFkcGlkLHdpZHRoOnkud2lkdGh9LCQ9Pnt5LmRhdGE9JCxXKEVvLmxvYWQse30pfSwkPT57VyhFby5lcnJvciwkKX0pfWxldCBIcz17fTtmdW5jdGlvbiBIbyh5LEQsVywkLG5lKXtsZXQgaWU9eSsiLSIrRCxnZT1Ic1tpZV07aWYoZ2UmJmdlLmxlbmd0aD4wKXskKGdlLnNwbGljZSgwLDEpWzBdKTtyZXR1cm59ZC5hZC5nZXREcmF3QWRzKHthZHBpZDpTdHJpbmcoeSksY291bnQ6Myx3aWR0aDpEfSx3ZT0+e2xldCBCZT13ZS5hZHM7JChCZS5zcGxpY2UoMCwxKVswXSksSHNbaWVdPWdlP2dlLmNvbmNhdChCZSk6QmV9LHdlPT57bmUoe2VyckNvZGU6d2UuY29kZSxlcnJNc2c6d2UubWVzc2FnZX0pfSl9bGV0IHJvPXthZHBpZDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoiIn0sZGF0YTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sd2lkdGg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxTbz17bG9hZDoibG9hZCIsY2xvc2U6ImNsb3NlIixlcnJvcjoiZXJyb3IifSx3bz1PLmRlZmluZUNvbXBvbmVudCh7bmFtZToiQWREcmF3Iixwcm9wczpybyxlbWl0czpbU28ubG9hZCxTby5jbG9zZSxTby5lcnJvcl0sc2V0dXAoeSx7ZW1pdDpEfSl7bGV0IFc9Ty5yZWYobnVsbCksJD1vcihXLEQpLG5lPXZzKCk7Ty53YXRjaCgoKT0+eS5hZHBpZCxnZT0+e01sKG5lLHksJCl9KSxPLndhdGNoKCgpPT55LmRhdGEsZ2U9PntuZS5kYXRhPWdlfSk7bGV0IGllPXtvbkRpc2xpa2UoZ2UpeyQoU28uY2xvc2UsZ2UpfX07cmV0dXJuIE8ub25Nb3VudGVkKCgpPT57ZygoKT0+e21uKFcudmFsdWUpLnRoZW4oKHt3aWR0aDpnZSxoZWlnaHQ6d2V9KT0+e25lLndpZHRoPWdlPT09MD8tMTpnZSxuZS5oZWlnaHQ9d2U9PT0wPy0xOndlLE1sKG5lLHksJCl9KX0sNTApfSksKCk9PntsZXR7ZGF0YTpnZX09bmU7cmV0dXJuIE8uY3JlYXRlVk5vZGUoInUtYWQtZHJhdyIsTy5tZXJnZVByb3BzKHtyZWY6V30se2RhdGE6Z2UscmVuZGVyaW5nOiEwfSxpZSksbnVsbCl9fX0pO2Z1bmN0aW9uIHZzKHkpe2xldCBEPU8ucmVmKCIiKTtyZXR1cm4gTy5yZWFjdGl2ZSh7d2lkdGg6MCxoZWlnaHQ6MCxkYXRhOkR9KX1mdW5jdGlvbiBNbCh5LEQsVyl7SG8oRC5hZHBpZCx5LndpZHRoLHkuaGVpZ2h0LCQ9Pnt5LmRhdGE9JCxXKFNvLmxvYWQse30pfSwkPT57VyhTby5lcnJvciwkKX0pfXJldHVybntOYXZpZ2F0b3I6THIsTGFiZWw6bnIsQnV0dG9uOkppLE1vdmFibGVBcmVhOkFuLE1vdmFibGVWaWV3OktyLFByb2dyZXNzOlhpLFBpY2tlclZpZXc6Wm8sUGlja2VyVmlld0NvbHVtbjpfbyxQaWNrZXI6ZHMsVVNsaWRlcjpIYSxTd2l0Y2g6VixDaGVja2JveDpldCxDaGVja2JveEdyb3VwOmZyLFJhZGlvOmhzLFJhZGlvR3JvdXA6d3IsRm9ybTpsZSxJY29uOkpuLFN3aXBlcjp0byxTd2lwZXJJdGVtOkZvLFJpY2hUZXh0OldhLEFkOmZjLEFkRHJhdzp3b319KFIsT2UsYXQpO3JldHVybiBjZX1mdW5jdGlvbiB2SShnLGMpe2xldHtVbmlTaGFyZWQ6XyxWdWU6QX09YztmdW5jdGlvbiBSKGQsbSxJKXtsZXQgT2U9ZC4kW21dO3JldHVybiBPZSYmXy5pbnZva2VBcnJheUZucyhPZSxJKX1sZXQgdz1nLnNldHVwO3JldHVybiBnLmluaGVyaXRBdHRycz0hMSxnLnNldHVwPShkLG0pPT57bGV0e2F0dHJzOntfX3BhZ2VJZDpJLF9fcGFnZVBhdGg6T2UsX19wYWdlUXVlcnk6YXR9fT1tLEV0PWMuX191bmlSb3V0ZXMuZmluZChUdD0+VHQubWV0YS5yb3V0ZT09PU9lKSxjZT1BLmdldEN1cnJlbnRJbnN0YW5jZSgpLE89Y2UucHJveHk7aWYoRXQmJihFdC5tZXRhLmlzU3ViTlZ1ZXx8bUkoTyxjLHtfX3BhZ2VJZDpJLF9fcGFnZVBhdGg6T2V9KSksQS5vbk1vdW50ZWQoKCk9PntBLm5leHRUaWNrKCgpPT57UihPLF8uT05fUkVBRFkpfSksY2Uub25QYWdlU2Nyb2xsJiZPLiRlbC5hZGRFdmVudCgic2Nyb2xsIixUdD0+e1R0LnNjcm9sbFRvcD1UdC5kZXRhaWwuc2Nyb2xsVG9wLFIoTyxfLk9OX1BBR0VfU0NST0xMLFR0KX0pLGNlLm9uUmVhY2hCb3R0b20mJk8uJGVsLmFkZEV2ZW50KCJzY3JvbGx0b2xvd2VyIixUdD0+e1IoTyxfLk9OX1JFQUNIX0JPVFRPTSxUdCl9KX0pLEEub25CZWZvcmVVbm1vdW50KCgpPT57UihPLF8uT05fVU5MT0FEKX0pLHcpcmV0dXJuIHcoYXQsbSl9LGd9ZnVuY3Rpb24gbUkoZyxjLHtfX3BhZ2VJZDpfLF9fcGFnZVBhdGg6QX0pe2xldCBSPWMuZ2V0Q3VycmVudFBhZ2VzKCksdz1SW1IubGVuZ3RoLTFdO2lmKHcmJncuX19zZXR1cCl3Ll9fc2V0dXAoZyx3KTtlbHNle2xldCBkPSIvIitBO3JldHVybiBjLl9fcmVnaXN0ZXJQYWdlKHt1cmw6ZCxwYXRoOmQscXVlcnk6e30sb3BlblR5cGU6ImxhdW5jaCIsd2Vidmlldzp7aWQ6XysiIn0sbnZ1ZVBhZ2VWbTpnfSl9fXZhciB3dT17fSxCdjtmdW5jdGlvbiBNdihnKXtCdj1nfXZhciBxZjtmdW5jdGlvbiBfSShnKXtpZihxZilyZXR1cm4gcWY7bGV0IGM9bmV3IGcuRW1pdHRlcjtyZXR1cm4gcWY9e29uKF8sQSl7cmV0dXJuIGMub24oXyxBKX0sb25jZShfLEEpe3JldHVybiBjLm9uY2UoXyxBKX0sb2ZmKF8sQSl7cmV0dXJuIGMub2ZmKF8sQSl9LGVtaXQoXywuLi5BKXtyZXR1cm4gYy5lbWl0KF8sLi4uQSl9fSxxZn1mdW5jdGlvbiBiSShnKXtyZXR1cm4oYyxfLEEpPT57bGV0e252dWU6Un09Xyx3PUdmKGcsXyk7Xy5WdWU9dyx3dVtjXT17aW5zdGFuY2VJZDpjLGNvbmZpZzpSLmNvbmZpZyxkb2N1bWVudDpSLmRvY3VtZW50LGRhdGE6QX07bGV0e2NyZWF0ZUFwcDpkfT13O3cuY3JlYXRlVnVlQXBwPXcuY3JlYXRlQXBwPShtLEkpPT4oXy5fX3VuaUNvbmZpZy5zdHlsZXM9bS5zdHlsZXN8fFtdLGQobSxJKS51c2UoeUksYyxfKSksdy5jcmVhdGVQYWdlQXBwPShtLEkpPT57dkkobSxfKTtsZXQgT2U9SS4kc3RvcmU7ZGVsZXRlIEkuJHN0b3JlO2xldCBhdD1kKG0sSSk7cmV0dXJuIE9lJiZhdC51c2UoT2UpLGF0LnVzZShTSSx3LGMsXyl9fX12YXIgeUk9e2luc3RhbGwoZyxjLF8pe25mKF8pLmluaXRBcHAoZyksRUkoZyxjLF8pfX07ZnVuY3Rpb24gRUkoZyxjLF8pe2xldHttb3VudDpBfT1nLFI9d3VbY107cmV0dXJuIGcubW91bnQ9dz0+e2xldCBkPXc9PT0iI2FwcCIsbT1SLmFwcD1BKEx2KFIuZG9jdW1lbnQse2lzUm9vdDpkfSkpO3JldHVybiBkJiZfLl9fcmVnaXN0ZXJBcHAobSksbX0sZ312YXIgU0k9e2luc3RhbGwoZyxjLF8sQSl7bGV0e3dlZXg6UixwbHVzOncsQnJvYWRjYXN0Q2hhbm5lbDpkLFZ1ZVNoYXJlZDptLFVuaVNoYXJlZDpJLGdldEN1cnJlbnRQYWdlczpPZSxzZXRUaW1lb3V0OmF0LGNsZWFyVGltZW91dDpFdCxfX3VuaUNvbmZpZzpjZX09QTtnLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRyZXF1aXJlTmF0aXZlUGx1Z2luPVIucmVxdWlyZU1vZHVsZTtsZXQgTz1nSSh7dW5pOkJ2LFZ1ZTpjLHdlZXg6UixwbHVzOncsQnJvYWRjYXN0Q2hhbm5lbDpkLFVuaVZpZXdKU0JyaWRnZTpfSShJKSxWdWVTaGFyZWQ6bSxVbmlTaGFyZWQ6SSxnZXRDdXJyZW50UGFnZXM6T2Usc2V0VGltZW91dDphdCxjbGVhclRpbWVvdXQ6RXQsX191bmlDb25maWc6Y2V9KTtPYmplY3Qua2V5cyhPKS5mb3JFYWNoKFR0PT57Zy5jb21wb25lbnQoYy5oeXBoZW5hdGUoVHQpLE9bVHRdKX0pLG5mKEEpLmluaXRBcHAoZyksd0koZyxfLEEpfX07ZnVuY3Rpb24gd0koZyxjLHtudnVlOl99KXtsZXR7Y29uZmlnOntjb21waWxlck9wdGlvbnM6QX0sbW91bnQ6Un09ZztBLmlzQ3VzdG9tRWxlbWVudD1kPT4hIV8uc3VwcG9ydHMoYEBjb21wb25lbnQvJHtkfWApO2xldCB3PXd1W2NdO3JldHVybiBnLm1vdW50PWQ9PntsZXQgbT1kPT09IiNyb290IixJPXcuYXBwPVIoTHYody5kb2N1bWVudCx7aXNSb290Om19KSk7aWYobSl0cnl7Xy5kb2N1bWVudC50YXNrQ2VudGVyLnNlbmQoImRvbSIse2FjdGlvbjoiY3JlYXRlRmluaXNoIn0sW10pfWNhdGNoKE9lKXt9cmV0dXJuIEl9LGd9ZnVuY3Rpb24gTHYoZyx7aXNSb290OmN9KXtpZihjKXJldHVybiBnLmRvY3VtZW50RWxlbWVudDtsZXQgXz1nLmNyZWF0ZUNvbW1lbnQoInJvb3QiKTtyZXR1cm4gZy5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoXyksX31mdW5jdGlvbiBEdihnKXtsZXQgYz13dVtnXTtpZihjJiZjLmFwcCYmYy5kb2N1bWVudCl7dHJ5e2MuYXBwLiQuYXBwQ29udGV4dC5hcHAudW5tb3VudCgpLGMuZG9jdW1lbnQuZGVzdHJveSgpfWNhdGNoKF8pe31kZWxldGUgYy5kb2N1bWVudCxkZWxldGUgYy5hcHB9ZGVsZXRlIHd1W2ddfWZ1bmN0aW9uIEZ2KGcpe2xldCBjPXd1W2ddO2lmKCFjfHwhYy5hcHApcmV0dXJuIG5ldyBFcnJvcihgcmVmcmVzaEluc3RhbmNlOiBpbnN0YW5jZSAke2d9IG5vdCBmb3VuZCFgKTtjLmRvY3VtZW50LnRhc2tDZW50ZXIuc2VuZCgiZG9tIix7YWN0aW9uOiJyZWZyZXNoRmluaXNoIn0sW10pfWZ1bmN0aW9uIENJKGcsYyl7bGV0e1VuaVNoYXJlZDpfLFZ1ZVNoYXJlZDpBLFZ1ZVJlYWN0aXZpdHk6Un09Zzt2YXIgdz1mdW5jdGlvbihkLG0sSSxPZSl7InVzZSBzdHJpY3QiO3ZhciBhdD1bXTtmdW5jdGlvbiBFdChvKXthdC5wdXNoKG8pfWZ1bmN0aW9uIGNlKCl7YXQucG9wKCl9ZnVuY3Rpb24gTyhvKXtJLnBhdXNlVHJhY2tpbmcoKTtmb3IodmFyIGw9YXQubGVuZ3RoP2F0W2F0Lmxlbmd0aC0xXS5jb21wb25lbnQ6bnVsbCxwPWwmJmwuYXBwQ29udGV4dC5jb25maWcud2FybkhhbmRsZXIsYj1UdCgpLFA9YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShQPjE/UC0xOjApLHg9MTt4PFA7eCsrKVRbeC0xXT1hcmd1bWVudHNbeF07aWYocClzbihwLGwsMTEsW28rVC5tYXAoSD0+e3ZhciBYLHllO3JldHVybih5ZT0oWD1ILnRvU3RyaW5nKT09bnVsbD92b2lkIDA6WC5jYWxsKEgpKSE9bnVsbD95ZTpKU09OLnN0cmluZ2lmeShIKX0pLmpvaW4oIiIpLGwmJmwucHJveHksYi5tYXAoSD0+e3Zhcnt2bm9kZTpYfT1IO3JldHVybiJhdCA8Ii5jb25jYXQoaXMobCxYLnR5cGUpLCI+Iil9KS5qb2luKGAKYCksYl0pO2Vsc2V7dmFyIHo9WyJbVnVlIHdhcm5dOiAiLmNvbmNhdChvKSwuLi5UXTtiLmxlbmd0aCYmei5wdXNoKGAKYCwuLi52cihiKSksY29uc29sZS53YXJuKC4uLnopfUkucmVzZXRUcmFja2luZygpfWZ1bmN0aW9uIFR0KCl7dmFyIG89YXRbYXQubGVuZ3RoLTFdO2lmKCFvKXJldHVybltdO2Zvcih2YXIgbD1bXTtvOyl7dmFyIHA9bFswXTtwJiZwLnZub2RlPT09bz9wLnJlY3Vyc2VDb3VudCsrOmwucHVzaCh7dm5vZGU6byxyZWN1cnNlQ291bnQ6MH0pO3ZhciBiPW8uY29tcG9uZW50JiZvLmNvbXBvbmVudC5wYXJlbnQ7bz1iJiZiLnZub2RlfXJldHVybiBsfWZ1bmN0aW9uIHZyKG8pe3ZhciBsPVtdO3JldHVybiBvLmZvckVhY2goKHAsYik9PntsLnB1c2goLi4uYj09PTA/W106W2AKYF0sLi4ucHQocCkpfSksbH1mdW5jdGlvbiBwdChvKXt2YXJ7dm5vZGU6bCxyZWN1cnNlQ291bnQ6cH09byxiPXA+MD8iLi4uICgiLmNvbmNhdChwLCIgcmVjdXJzaXZlIGNhbGxzKSIpOiIiLFA9bC5jb21wb25lbnQ/bC5jb21wb25lbnQucGFyZW50PT1udWxsOiExLFQ9IiBhdCA8Ii5jb25jYXQoaXMobC5jb21wb25lbnQsbC50eXBlLFApKSx4PSI+IitiO3JldHVybiBsLnByb3BzP1tULC4uLloobC5wcm9wcykseF06W1QreF19ZnVuY3Rpb24gWihvKXt2YXIgbD1bXSxwPU9iamVjdC5rZXlzKG8pO3JldHVybiBwLnNsaWNlKDAsMykuZm9yRWFjaChiPT57bC5wdXNoKC4uLnNlKGIsb1tiXSkpfSkscC5sZW5ndGg+MyYmbC5wdXNoKCIgLi4uIiksbH1mdW5jdGlvbiBzZShvLGwscCl7cmV0dXJuIG0uaXNTdHJpbmcobCk/KGw9SlNPTi5zdHJpbmdpZnkobCkscD9sOlsiIi5jb25jYXQobywiPSIpLmNvbmNhdChsKV0pOnR5cGVvZiBsPT0ibnVtYmVyInx8dHlwZW9mIGw9PSJib29sZWFuInx8bD09bnVsbD9wP2w6WyIiLmNvbmNhdChvLCI9IikuY29uY2F0KGwpXTpJLmlzUmVmKGwpPyhsPXNlKG8sSS50b1JhdyhsLnZhbHVlKSwhMCkscD9sOlsiIi5jb25jYXQobywiPVJlZjwiKSxsLCI+Il0pOm0uaXNGdW5jdGlvbihsKT9bIiIuY29uY2F0KG8sIj1mbiIpLmNvbmNhdChsLm5hbWU/IjwiLmNvbmNhdChsLm5hbWUsIj4iKToiIildOihsPUkudG9SYXcobCkscD9sOlsiIi5jb25jYXQobywiPSIpLGxdKX1mdW5jdGlvbiBwbihvLGwpe28hPT12b2lkIDAmJih0eXBlb2YgbyE9Im51bWJlciI/TygiIi5jb25jYXQobCwiIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIGdvdCAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobyksIi4iKSk6aXNOYU4obykmJk8oIiIuY29uY2F0KGwsIiBpcyBOYU4gLSB0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuIikpKX12YXIgTXI9e1NFVFVQX0ZVTkNUSU9OOjAsIjAiOiJTRVRVUF9GVU5DVElPTiIsUkVOREVSX0ZVTkNUSU9OOjEsIjEiOiJSRU5ERVJfRlVOQ1RJT04iLFdBVENIX0dFVFRFUjoyLCIyIjoiV0FUQ0hfR0VUVEVSIixXQVRDSF9DQUxMQkFDSzozLCIzIjoiV0FUQ0hfQ0FMTEJBQ0siLFdBVENIX0NMRUFOVVA6NCwiNCI6IldBVENIX0NMRUFOVVAiLE5BVElWRV9FVkVOVF9IQU5ETEVSOjUsIjUiOiJOQVRJVkVfRVZFTlRfSEFORExFUiIsQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVI6NiwiNiI6IkNPTVBPTkVOVF9FVkVOVF9IQU5ETEVSIixWTk9ERV9IT09LOjcsIjciOiJWTk9ERV9IT09LIixESVJFQ1RJVkVfSE9PSzo4LCI4IjoiRElSRUNUSVZFX0hPT0siLFRSQU5TSVRJT05fSE9PSzo5LCI5IjoiVFJBTlNJVElPTl9IT09LIixBUFBfRVJST1JfSEFORExFUjoxMCwiMTAiOiJBUFBfRVJST1JfSEFORExFUiIsQVBQX1dBUk5fSEFORExFUjoxMSwiMTEiOiJBUFBfV0FSTl9IQU5ETEVSIixGVU5DVElPTl9SRUY6MTIsIjEyIjoiRlVOQ1RJT05fUkVGIixBU1lOQ19DT01QT05FTlRfTE9BREVSOjEzLCIxMyI6IkFTWU5DX0NPTVBPTkVOVF9MT0FERVIiLFNDSEVEVUxFUjoxNCwiMTQiOiJTQ0hFRFVMRVIifSxLbj17c3A6InNlcnZlclByZWZldGNoIGhvb2siLGJjOiJiZWZvcmVDcmVhdGUgaG9vayIsYzoiY3JlYXRlZCBob29rIixibToiYmVmb3JlTW91bnQgaG9vayIsbToibW91bnRlZCBob29rIixidToiYmVmb3JlVXBkYXRlIGhvb2siLHU6InVwZGF0ZWQiLGJ1bToiYmVmb3JlVW5tb3VudCBob29rIix1bToidW5tb3VudGVkIGhvb2siLGE6ImFjdGl2YXRlZCBob29rIixkYToiZGVhY3RpdmF0ZWQgaG9vayIsZWM6ImVycm9yQ2FwdHVyZWQgaG9vayIscnRjOiJyZW5kZXJUcmFja2VkIGhvb2siLHJ0ZzoicmVuZGVyVHJpZ2dlcmVkIGhvb2siLFswXToic2V0dXAgZnVuY3Rpb24iLFsxXToicmVuZGVyIGZ1bmN0aW9uIixbMl06IndhdGNoZXIgZ2V0dGVyIixbM106IndhdGNoZXIgY2FsbGJhY2siLFs0XToid2F0Y2hlciBjbGVhbnVwIGZ1bmN0aW9uIixbNV06Im5hdGl2ZSBldmVudCBoYW5kbGVyIixbNl06ImNvbXBvbmVudCBldmVudCBoYW5kbGVyIixbN106InZub2RlIGhvb2siLFs4XToiZGlyZWN0aXZlIGhvb2siLFs5XToidHJhbnNpdGlvbiBob29rIixbMTBdOiJhcHAgZXJyb3JIYW5kbGVyIixbMTFdOiJhcHAgd2FybkhhbmRsZXIiLFsxMl06InJlZiBmdW5jdGlvbiIsWzEzXToiYXN5bmMgY29tcG9uZW50IGxvYWRlciIsWzE0XToic2NoZWR1bGVyIGZsdXNoLiBUaGlzIGlzIGxpa2VseSBhIFZ1ZSBpbnRlcm5hbHMgYnVnLiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvY29yZSAuIn07ZnVuY3Rpb24gc24obyxsLHAsYil7dHJ5e3JldHVybiBiP28oLi4uYik6bygpfWNhdGNoKFApe0xyKFAsbCxwKX19ZnVuY3Rpb24ga24obyxsLHAsYil7aWYobS5pc0Z1bmN0aW9uKG8pKXt2YXIgUD1zbihvLGwscCxiKTtyZXR1cm4gUCYmbS5pc1Byb21pc2UoUCkmJlAuY2F0Y2goej0+e0xyKHosbCxwKX0pLFB9Zm9yKHZhciBUPVtdLHg9MDt4PG8ubGVuZ3RoO3grKylULnB1c2goa24ob1t4XSxsLHAsYikpO3JldHVybiBUfWZ1bmN0aW9uIExyKG8sbCxwKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsUD1sP2wudm5vZGU6bnVsbDtpZihsKXtmb3IodmFyIFQ9bC5wYXJlbnQseD1sLnByb3h5LHo9S25bcF18fHA7VDspe3ZhciBIPVQuZWM7aWYoSCl7Zm9yKHZhciBYPTA7WDxILmxlbmd0aDtYKyspaWYoSFtYXShvLHgseik9PT0hMSlyZXR1cm59VD1ULnBhcmVudH12YXIgeWU9bC5hcHBDb250ZXh0LmNvbmZpZy5lcnJvckhhbmRsZXI7aWYoeWUpe3NuKHllLG51bGwsMTAsW28seCx6XSk7cmV0dXJufX1UcihvLHAsUCxiKX1mdW5jdGlvbiBUcihvLGwscCl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwO3t2YXIgUD1LbltsXXx8bDtpZihwJiZFdChwKSxPKCJVbmhhbmRsZWQgZXJyb3IiLmNvbmNhdChQPyIgZHVyaW5nIGV4ZWN1dGlvbiBvZiAiLmNvbmNhdChQKToiIikpLHAmJmNlKCksYil0aHJvdyBvO2NvbnNvbGUuZXJyb3Iobyl9fXZhciBlcj0hMSxobj0hMSxlbj1bXSxSbj0wLHRyPVtdLHhuPW51bGwsam49MCxoaT1Qcm9taXNlLnJlc29sdmUoKSx6ZT1udWxsLG90PTEwMDtmdW5jdGlvbiBEdChvKXt2YXIgbD16ZXx8aGk7cmV0dXJuIG8/bC50aGVuKHRoaXM/by5iaW5kKHRoaXMpOm8pOmx9ZnVuY3Rpb24gY24obyl7Zm9yKHZhciBsPVJuKzEscD1lbi5sZW5ndGg7bDxwOyl7dmFyIGI9bCtwPj4+MSxQPWVuW2JdLFQ9VXIoUCk7VDxvfHxUPT09byYmUC5wcmU/bD1iKzE6cD1ifXJldHVybiBsfWZ1bmN0aW9uIG5uKG8peyghZW4ubGVuZ3RofHwhZW4uaW5jbHVkZXMobyxlciYmby5hbGxvd1JlY3Vyc2U/Um4rMTpSbikpJiYoby5pZD09bnVsbD9lbi5wdXNoKG8pOmVuLnNwbGljZShjbihvLmlkKSwwLG8pLGFuKCkpfWZ1bmN0aW9uIGFuKCl7IWVyJiYhaG4mJihobj0hMCx6ZT1oaS50aGVuKFVhKSl9ZnVuY3Rpb24gem4obyl7dmFyIGw9ZW4uaW5kZXhPZihvKTtsPlJuJiZlbi5zcGxpY2UobCwxKX1mdW5jdGlvbiBEcihvKXttLmlzQXJyYXkobyk/dHIucHVzaCguLi5vKTooIXhufHwheG4uaW5jbHVkZXMobyxvLmFsbG93UmVjdXJzZT9qbisxOmpuKSkmJnRyLnB1c2gobyksYW4oKX1mdW5jdGlvbiBucihvLGwpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplcj9SbisxOjA7Zm9yKGw9bHx8bmV3IE1hcDtwPGVuLmxlbmd0aDtwKyspe3ZhciBiPWVuW3BdO2lmKGImJmIucHJlKXtpZihvJiZiLmlkIT09by51aWR8fHFvKGwsYikpY29udGludWU7ZW4uc3BsaWNlKHAsMSkscC0tLGIoKX19fWZ1bmN0aW9uIHFyKG8pe2lmKHRyLmxlbmd0aCl7dmFyIGw9Wy4uLm5ldyBTZXQodHIpXS5zb3J0KChwLGIpPT5VcihwKS1VcihiKSk7aWYodHIubGVuZ3RoPTAseG4pe3huLnB1c2goLi4ubCk7cmV0dXJufWZvcih4bj1sLG89b3x8bmV3IE1hcCxqbj0wO2puPHhuLmxlbmd0aDtqbisrKXFvKG8seG5bam5dKXx8eG5bam5dKCk7eG49bnVsbCxqbj0wfX12YXIgVXI9bz0+by5pZD09bnVsbD8xLzA6by5pZCxDaT0obyxsKT0+e3ZhciBwPVVyKG8pLVVyKGwpO2lmKHA9PT0wKXtpZihvLnByZSYmIWwucHJlKXJldHVybi0xO2lmKGwucHJlJiYhby5wcmUpcmV0dXJuIDF9cmV0dXJuIHB9O2Z1bmN0aW9uIFVhKG8pe2huPSExLGVyPSEwLG89b3x8bmV3IE1hcCxlbi5zb3J0KENpKTt2YXIgbD1iPT5xbyhvLGIpO3RyeXtmb3IoUm49MDtSbjxlbi5sZW5ndGg7Um4rKyl7dmFyIHA9ZW5bUm5dO2lmKHAmJnAuYWN0aXZlIT09ITEpe2lmKGwocCkpY29udGludWU7c24ocCxudWxsLDE0KX19fWZpbmFsbHl7Um49MCxlbi5sZW5ndGg9MCxxcihvKSxlcj0hMSx6ZT1udWxsLChlbi5sZW5ndGh8fHRyLmxlbmd0aCkmJlVhKG8pfX1mdW5jdGlvbiBxbyhvLGwpe2lmKCFvLmhhcyhsKSlvLnNldChsLDEpO2Vsc2V7dmFyIHA9by5nZXQobCk7aWYocD5vdCl7dmFyIGI9bC5vd25lckluc3RhbmNlLFA9YiYmQWwoYi50eXBlKTtyZXR1cm4gTHIoIk1heGltdW0gcmVjdXJzaXZlIHVwZGF0ZXMgZXhjZWVkZWQiLmNvbmNhdChQPyIgaW4gY29tcG9uZW50IDwiLmNvbmNhdChQLCI+Iik6IiIsIi4gVGhpcyBtZWFucyB5b3UgaGF2ZSBhIHJlYWN0aXZlIGVmZmVjdCB0aGF0IGlzIG11dGF0aW5nIGl0cyBvd24gZGVwZW5kZW5jaWVzIGFuZCB0aHVzIHJlY3Vyc2l2ZWx5IHRyaWdnZXJpbmcgaXRzZWxmLiBQb3NzaWJsZSBzb3VyY2VzIGluY2x1ZGUgY29tcG9uZW50IHRlbXBsYXRlLCByZW5kZXIgZnVuY3Rpb24sIHVwZGF0ZWQgaG9vayBvciB3YXRjaGVyIHNvdXJjZSBmdW5jdGlvbi4iKSxudWxsLDEwKSwhMH1lbHNlIG8uc2V0KGwscCsxKX19dmFyIGdpPSExLFByPW5ldyBTZXQ7bS5nZXRHbG9iYWxUaGlzKCkuX19WVUVfSE1SX1JVTlRJTUVfXz17Y3JlYXRlUmVjb3JkOkJpKEtpKSxyZXJlbmRlcjpCaShobykscmVsb2FkOkJpKFppKX07dmFyIE5yPW5ldyBNYXA7ZnVuY3Rpb24gdXIobyl7dmFyIGw9by50eXBlLl9faG1ySWQscD1Oci5nZXQobCk7cHx8KEtpKGwsby50eXBlKSxwPU5yLmdldChsKSkscC5pbnN0YW5jZXMuYWRkKG8pfWZ1bmN0aW9uIFJvKG8pe05yLmdldChvLnR5cGUuX19obXJJZCkuaW5zdGFuY2VzLmRlbGV0ZShvKX1mdW5jdGlvbiBLaShvLGwpe3JldHVybiBOci5oYXMobyk/ITE6KE5yLnNldChvLHtpbml0aWFsRGVmOkppKGwpLGluc3RhbmNlczpuZXcgU2V0fSksITApfWZ1bmN0aW9uIEppKG8pe3JldHVybiBvcyhvKT9vLl9fdmNjT3B0czpvfWZ1bmN0aW9uIGhvKG8sbCl7dmFyIHA9TnIuZ2V0KG8pOyFwfHwocC5pbml0aWFsRGVmLnJlbmRlcj1sLFsuLi5wLmluc3RhbmNlc10uZm9yRWFjaChiPT57bCYmKGIucmVuZGVyPWwsSmkoYi50eXBlKS5yZW5kZXI9bCksYi5yZW5kZXJDYWNoZT1bXSxnaT0hMCxiLmVmZmVjdC5kaXJ0eT0hMCxiLnVwZGF0ZSgpLGdpPSExfSkpfWZ1bmN0aW9uIFppKG8sbCl7dmFyIHA9TnIuZ2V0KG8pO2lmKCEhcCl7bD1KaShsKSxDYShwLmluaXRpYWxEZWYsbCk7dmFyIGI9Wy4uLnAuaW5zdGFuY2VzXTtmb3IodmFyIFAgb2YgYil7dmFyIFQ9SmkoUC50eXBlKTtQci5oYXMoVCl8fChUIT09cC5pbml0aWFsRGVmJiZDYShULGwpLFByLmFkZChUKSksUC5hcHBDb250ZXh0LnByb3BzQ2FjaGUuZGVsZXRlKFAudHlwZSksUC5hcHBDb250ZXh0LmVtaXRzQ2FjaGUuZGVsZXRlKFAudHlwZSksUC5hcHBDb250ZXh0Lm9wdGlvbnNDYWNoZS5kZWxldGUoUC50eXBlKSxQLmNlUmVsb2FkPyhQci5hZGQoVCksUC5jZVJlbG9hZChsLnN0eWxlcyksUHIuZGVsZXRlKFQpKTpQLnBhcmVudD8oUC5wYXJlbnQuZWZmZWN0LmRpcnR5PSEwLG5uKFAucGFyZW50LnVwZGF0ZSkpOlAuYXBwQ29udGV4dC5yZWxvYWQ/UC5hcHBDb250ZXh0LnJlbG9hZCgpOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTpjb25zb2xlLndhcm4oIltITVJdIFJvb3Qgb3IgbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSBtb2RpZmllZC4gRnVsbCByZWxvYWQgcmVxdWlyZWQuIil9RHIoKCk9Pntmb3IodmFyIHggb2YgYilQci5kZWxldGUoSmkoeC50eXBlKSl9KX19ZnVuY3Rpb24gQ2EobyxsKXttLmV4dGVuZChvLGwpO2Zvcih2YXIgcCBpbiBvKXAhPT0iX19maWxlIiYmIShwIGluIGwpJiZkZWxldGUgb1twXX1mdW5jdGlvbiBCaShvKXtyZXR1cm4obCxwKT0+e3RyeXtyZXR1cm4gbyhsLHApfWNhdGNoKGIpe2NvbnNvbGUuZXJyb3IoYiksY29uc29sZS53YXJuKCJbSE1SXSBTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgVnVlIGNvbXBvbmVudCBob3QtcmVsb2FkLiBGdWxsIHJlbG9hZCByZXF1aXJlZC4iKX19fXZhciBtbixBbj1bXSxNaT0hMTtmdW5jdGlvbiBvcihvKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxwPW5ldyBBcnJheShsPjE/bC0xOjApLGI9MTtiPGw7YisrKXBbYi0xXT1hcmd1bWVudHNbYl07bW4/bW4uZW1pdChvLC4uLnApOk1pfHxBbi5wdXNoKHtldmVudDpvLGFyZ3M6cH0pfWZ1bmN0aW9uIHZpKG8sbCl7dmFyIHAsYjtpZihtbj1vLG1uKW1uLmVuYWJsZWQ9ITAsQW4uZm9yRWFjaChUPT57dmFye2V2ZW50OngsYXJnczp6fT1UO3JldHVybiBtbi5lbWl0KHgsLi4ueil9KSxBbj1bXTtlbHNlIGlmKHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuSFRNTEVsZW1lbnQmJiEoKGI9KHA9d2luZG93Lm5hdmlnYXRvcik9PW51bGw/dm9pZCAwOnAudXNlckFnZW50KT09bnVsbD92b2lkIDA6Yi5pbmNsdWRlcygianNkb20iKSkpe3ZhciBQPWwuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1sLl9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX198fFtdO1AucHVzaChUPT57dmkoVCxsKX0pLHNldFRpbWVvdXQoKCk9Pnttbnx8KGwuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1udWxsLE1pPSEwLEFuPVtdKX0sM2UzKX1lbHNlIE1pPSEwLEFuPVtdfWZ1bmN0aW9uIFlvKG8sbCl7b3IoImFwcDppbml0IixvLGwse0ZyYWdtZW50Om1yLFRleHQ6TW4sQ29tbWVudDpMbixTdGF0aWM6RG59KX1mdW5jdGlvbiBLbyhvKXtvcigiYXBwOnVubW91bnQiLG8pfXZhciBtaT1icigiY29tcG9uZW50OmFkZGVkIiksWXI9YnIoImNvbXBvbmVudDp1cGRhdGVkIiksQWE9YnIoImNvbXBvbmVudDpyZW1vdmVkIikscmk9bz0+e21uJiZ0eXBlb2YgbW4uY2xlYW51cEJ1ZmZlcj09ImZ1bmN0aW9uIiYmIW1uLmNsZWFudXBCdWZmZXIobykmJkFhKG8pfTtmdW5jdGlvbiBicihvKXtyZXR1cm4gbD0+e29yKG8sbC5hcHBDb250ZXh0LmFwcCxsLnVpZCxsLnBhcmVudD9sLnBhcmVudC51aWQ6dm9pZCAwLGwpfX12YXIgZ289TGkoInBlcmY6c3RhcnQiKSxPYT1MaSgicGVyZjplbmQiKTtmdW5jdGlvbiBMaShvKXtyZXR1cm4obCxwLGIpPT57b3IobyxsLmFwcENvbnRleHQuYXBwLGwudWlkLGwscCxiKX19ZnVuY3Rpb24gQWkobyxsLHApe29yKCJjb21wb25lbnQ6ZW1pdCIsby5hcHBDb250ZXh0LmFwcCxvLGwscCl9ZnVuY3Rpb24geG8obyxsKXtpZighby5pc1VubW91bnRlZCl7Zm9yKHZhciBwPW8udm5vZGUucHJvcHN8fG0uRU1QVFlfT0JKLGI9YXJndW1lbnRzLmxlbmd0aCxQPW5ldyBBcnJheShiPjI/Yi0yOjApLFQ9MjtUPGI7VCsrKVBbVC0yXT1hcmd1bWVudHNbVF07e3ZhcntlbWl0c09wdGlvbnM6eCxwcm9wc09wdGlvbnM6W3pdfT1vO2lmKHgpaWYoIShsIGluIHgpKSghenx8IShtLnRvSGFuZGxlcktleShsKWluIHopKSYmTygnQ29tcG9uZW50IGVtaXR0ZWQgZXZlbnQgIicuY29uY2F0KGwsJyIgYnV0IGl0IGlzIG5laXRoZXIgZGVjbGFyZWQgaW4gdGhlIGVtaXRzIG9wdGlvbiBub3IgYXMgYW4gIicpLmNvbmNhdChtLnRvSGFuZGxlcktleShsKSwnIiBwcm9wLicpKTtlbHNle3ZhciBIPXhbbF07aWYobS5pc0Z1bmN0aW9uKEgpKXt2YXIgWD1IKC4uLlApO1h8fE8oJ0ludmFsaWQgZXZlbnQgYXJndW1lbnRzOiBldmVudCB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgZXZlbnQgIicuY29uY2F0KGwsJyIuJykpfX19dmFyIHllPVAsdWU9bC5zdGFydHNXaXRoKCJ1cGRhdGU6IiksYWU9dWUmJmwuc2xpY2UoNyk7aWYoYWUmJmFlIGluIHApe3ZhciBrZT0iIi5jb25jYXQoYWU9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsIjphZSwiTW9kaWZpZXJzIikse251bWJlcjpNZSx0cmltOnd0fT1wW2tlXXx8bS5FTVBUWV9PQko7d3QmJih5ZT1QLm1hcChJZT0+bS5pc1N0cmluZyhJZSk/SWUudHJpbSgpOkllKSksTWUmJih5ZT1QLm1hcChtLmxvb3NlVG9OdW1iZXIpKX1BaShvLGwseWUpO3t2YXIgdXQ9bC50b0xvd2VyQ2FzZSgpO3V0IT09bCYmcFttLnRvSGFuZGxlcktleSh1dCldJiZPKCdFdmVudCAiJy5jb25jYXQodXQsJyIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgJykuY29uY2F0KGlzKG8sby50eXBlKSwnIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciAiJykuY29uY2F0KGwsJyIuIE5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIHYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSAiJykuY29uY2F0KG0uaHlwaGVuYXRlKGwpLCciIGluc3RlYWQgb2YgIicpLmNvbmNhdChsLCciLicpKX12YXIga3QsUnQ9cFtrdD1tLnRvSGFuZGxlcktleShsKV18fHBba3Q9bS50b0hhbmRsZXJLZXkobS5jYW1lbGl6ZShsKSldOyFSdCYmdWUmJihSdD1wW2t0PW0udG9IYW5kbGVyS2V5KG0uaHlwaGVuYXRlKGwpKV0pLFJ0JiZrbihSdCxvLDYseWUpO3ZhciBmZT1wW2t0KyJPbmNlIl07aWYoZmUpe2lmKCFvLmVtaXR0ZWQpby5lbWl0dGVkPXt9O2Vsc2UgaWYoby5lbWl0dGVkW2t0XSlyZXR1cm47by5lbWl0dGVkW2t0XT0hMCxrbihmZSxvLDYseWUpfX19ZnVuY3Rpb24gSm8obyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsYj1sLmVtaXRzQ2FjaGUsUD1iLmdldChvKTtpZihQIT09dm9pZCAwKXJldHVybiBQO3ZhciBUPW8uZW1pdHMseD17fSx6PSExO2lmKCFtLmlzRnVuY3Rpb24obykpe3ZhciBIPVg9Pnt2YXIgeWU9Sm8oWCxsLCEwKTt5ZSYmKHo9ITAsbS5leHRlbmQoeCx5ZSkpfTshcCYmbC5taXhpbnMubGVuZ3RoJiZsLm1peGlucy5mb3JFYWNoKEgpLG8uZXh0ZW5kcyYmSChvLmV4dGVuZHMpLG8ubWl4aW5zJiZvLm1peGlucy5mb3JFYWNoKEgpfXJldHVybiFUJiYhej8obS5pc09iamVjdChvKSYmYi5zZXQobyxudWxsKSxudWxsKToobS5pc0FycmF5KFQpP1QuZm9yRWFjaChYPT54W1hdPW51bGwpOm0uZXh0ZW5kKHgsVCksbS5pc09iamVjdChvKSYmYi5zZXQobyx4KSx4KX1mdW5jdGlvbiB2byhvLGwpe3JldHVybiFvfHwhbS5pc09uKGwpPyExOihsPWwuc2xpY2UoMikucmVwbGFjZSgvT25jZSQvLCIiKSxtLmhhc093bihvLGxbMF0udG9Mb3dlckNhc2UoKStsLnNsaWNlKDEpKXx8bS5oYXNPd24obyxtLmh5cGhlbmF0ZShsKSl8fG0uaGFzT3duKG8sbCkpfXZhciBnbj1udWxsLE9uPW51bGw7ZnVuY3Rpb24gS3Iobyl7dmFyIGw9Z247cmV0dXJuIGduPW8sT249byYmby50eXBlLl9fc2NvcGVJZHx8bnVsbCxsfWZ1bmN0aW9uIEZuKG8pe09uPW99ZnVuY3Rpb24gaWkoKXtPbj1udWxsfXZhciBGcj1vPT4kdDtmdW5jdGlvbiAkdChvKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06Z247aWYoIWx8fG8uX24pcmV0dXJuIG87dmFyIHA9ZnVuY3Rpb24oKXtwLl9kJiZjYSgtMSk7dmFyIGI9S3IobCksUDt0cnl7UD1vKC4uLmFyZ3VtZW50cyl9ZmluYWxseXtLcihiKSxwLl9kJiZjYSgxKX1yZXR1cm4gWXIobCksUH07cmV0dXJuIHAuX249ITAscC5fYz0hMCxwLl9kPSEwLHB9dmFyIFJlPSExO2Z1bmN0aW9uIFhpKCl7UmU9ITB9ZnVuY3Rpb24gdG4obyl7dmFye3R5cGU6bCx2bm9kZTpwLHByb3h5OmIsd2l0aFByb3h5OlAscHJvcHM6VCxwcm9wc09wdGlvbnM6W3hdLHNsb3RzOnosYXR0cnM6SCxlbWl0OlgscmVuZGVyOnllLHJlbmRlckNhY2hlOnVlLGRhdGE6YWUsc2V0dXBTdGF0ZTprZSxjdHg6TWUsaW5oZXJpdEF0dHJzOnd0fT1vLHV0LGt0LFJ0PUtyKG8pO1JlPSExO3RyeXtpZihwLnNoYXBlRmxhZyY0KXt2YXIgZmU9UHx8YixJZT1rZS5fX2lzU2NyaXB0U2V0dXA/bmV3IFByb3h5KGZlLHtnZXQoQixLLFEpe3JldHVybiBPKCJQcm9wZXJ0eSAnIi5jb25jYXQoU3RyaW5nKEspLCInIHdhcyBhY2Nlc3NlZCB2aWEgJ3RoaXMnLiBBdm9pZCB1c2luZyAndGhpcycgaW4gdGVtcGxhdGVzLiIpKSxSZWZsZWN0LmdldChCLEssUSl9fSk6ZmU7dXQ9SWkoeWUuY2FsbChJZSxmZSx1ZSxULGtlLGFlLE1lKSksa3Q9SH1lbHNle3ZhciBOZT1sO0g9PT1UJiZYaSgpLHV0PUlpKE5lLmxlbmd0aD4xP05lKFQse2dldCBhdHRycygpe3JldHVybiBYaSgpLEh9LHNsb3RzOnosZW1pdDpYfSk6TmUoVCxudWxsKSksa3Q9bC5wcm9wcz9IOk9pKEgpfX1jYXRjaChCKXtIaS5sZW5ndGg9MCxMcihCLG8sMSksdXQ9WG4oTG4pfXZhciBYZT11dCxjdD12b2lkIDA7aWYodXQucGF0Y2hGbGFnPjAmJnV0LnBhdGNoRmxhZyYyMDQ4JiYoW1hlLGN0XT1tbyh1dCkpLGt0JiZ3dCE9PSExKXt2YXIgaT1PYmplY3Qua2V5cyhrdCkse3NoYXBlRmxhZzphfT1YZTtpZihpLmxlbmd0aCl7aWYoYSYoMXw2KSl4JiZpLnNvbWUobS5pc01vZGVsTGlzdGVuZXIpJiYoa3Q9Wm8oa3QseCkpLFhlPSRpKFhlLGt0KTtlbHNlIGlmKCFSZSYmWGUudHlwZSE9PUxuKXtmb3IodmFyIGY9T2JqZWN0LmtleXMoSCksaD1bXSxDPVtdLFM9MCxrPWYubGVuZ3RoO1M8aztTKyspe3ZhciBVPWZbU107bS5pc09uKFUpP20uaXNNb2RlbExpc3RlbmVyKFUpfHxoLnB1c2goVVsyXS50b0xvd2VyQ2FzZSgpK1Uuc2xpY2UoMykpOkMucHVzaChVKX1DLmxlbmd0aCYmTygiRXh0cmFuZW91cyBub24tcHJvcHMgYXR0cmlidXRlcyAoIi5jb25jYXQoQy5qb2luKCIsICIpLCIpIHdlcmUgcGFzc2VkIHRvIGNvbXBvbmVudCBidXQgY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkIGJlY2F1c2UgY29tcG9uZW50IHJlbmRlcnMgZnJhZ21lbnQgb3IgdGV4dCByb290IG5vZGVzLiIpKSxoLmxlbmd0aCYmTygiRXh0cmFuZW91cyBub24tZW1pdHMgZXZlbnQgbGlzdGVuZXJzICgiLmNvbmNhdChoLmpvaW4oIiwgIiksJykgd2VyZSBwYXNzZWQgdG8gY29tcG9uZW50IGJ1dCBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBpbmhlcml0ZWQgYmVjYXVzZSBjb21wb25lbnQgcmVuZGVycyBmcmFnbWVudCBvciB0ZXh0IHJvb3Qgbm9kZXMuIElmIHRoZSBsaXN0ZW5lciBpcyBpbnRlbmRlZCB0byBiZSBhIGNvbXBvbmVudCBjdXN0b20gZXZlbnQgbGlzdGVuZXIgb25seSwgZGVjbGFyZSBpdCB1c2luZyB0aGUgImVtaXRzIiBvcHRpb24uJykpfX19cmV0dXJuIHAuZGlycyYmKFhvKFhlKXx8TygiUnVudGltZSBkaXJlY3RpdmUgdXNlZCBvbiBjb21wb25lbnQgd2l0aCBub24tZWxlbWVudCByb290IG5vZGUuIFRoZSBkaXJlY3RpdmVzIHdpbGwgbm90IGZ1bmN0aW9uIGFzIGludGVuZGVkLiIpLFhlPSRpKFhlKSxYZS5kaXJzPVhlLmRpcnM/WGUuZGlycy5jb25jYXQocC5kaXJzKTpwLmRpcnMpLHAudHJhbnNpdGlvbiYmKFhvKFhlKXx8TygiQ29tcG9uZW50IGluc2lkZSA8VHJhbnNpdGlvbj4gcmVuZGVycyBub24tZWxlbWVudCByb290IG5vZGUgdGhhdCBjYW5ub3QgYmUgYW5pbWF0ZWQuIiksWGUudHJhbnNpdGlvbj1wLnRyYW5zaXRpb24pLGN0P2N0KFhlKTp1dD1YZSxLcihSdCksdXR9dmFyIG1vPW89Pnt2YXIgbD1vLmNoaWxkcmVuLHA9by5keW5hbWljQ2hpbGRyZW4sYj1vaShsLCExKTtpZihiKXtpZihiLnBhdGNoRmxhZz4wJiZiLnBhdGNoRmxhZyYyMDQ4KXJldHVybiBtbyhiKX1lbHNlIHJldHVybltvLHZvaWQgMF07dmFyIFA9bC5pbmRleE9mKGIpLFQ9cD9wLmluZGV4T2YoYik6LTEseD16PT57bFtQXT16LHAmJihUPi0xP3BbVF09ejp6LnBhdGNoRmxhZz4wJiYoby5keW5hbWljQ2hpbGRyZW49Wy4uLnAsel0pKX07cmV0dXJuW0lpKGIpLHhdfTtmdW5jdGlvbiBvaShvKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLHAsYj0wO2I8by5sZW5ndGg7YisrKXt2YXIgUD1vW2JdO2lmKFRvKFApKXtpZihQLnR5cGUhPT1Mbnx8UC5jaGlsZHJlbj09PSJ2LWlmIil7aWYocClyZXR1cm47aWYocD1QLGwmJnAucGF0Y2hGbGFnPjAmJnAucGF0Y2hGbGFnJjIwNDgpcmV0dXJuIG9pKHAuY2hpbGRyZW4pfX1lbHNlIHJldHVybn1yZXR1cm4gcH12YXIgT2k9bz0+e3ZhciBsO2Zvcih2YXIgcCBpbiBvKShwPT09ImNsYXNzInx8cD09PSJzdHlsZSJ8fG0uaXNPbihwKSkmJigobHx8KGw9e30pKVtwXT1vW3BdKTtyZXR1cm4gbH0sWm89KG8sbCk9Pnt2YXIgcD17fTtmb3IodmFyIGIgaW4gbykoIW0uaXNNb2RlbExpc3RlbmVyKGIpfHwhKGIuc2xpY2UoOSlpbiBsKSkmJihwW2JdPW9bYl0pO3JldHVybiBwfSxYbz1vPT5vLnNoYXBlRmxhZyYoNnwxKXx8by50eXBlPT09TG47ZnVuY3Rpb24gVGEobyxsLHApe3Zhcntwcm9wczpiLGNoaWxkcmVuOlAsY29tcG9uZW50OlR9PW8se3Byb3BzOngsY2hpbGRyZW46eixwYXRjaEZsYWc6SH09bCxYPVQuZW1pdHNPcHRpb25zO2lmKChQfHx6KSYmZ2l8fGwuZGlyc3x8bC50cmFuc2l0aW9uKXJldHVybiEwO2lmKHAmJkg+PTApe2lmKEgmMTAyNClyZXR1cm4hMDtpZihIJjE2KXJldHVybiBiP0RpKGIseCxYKTohIXg7aWYoSCY4KWZvcih2YXIgeWU9bC5keW5hbWljUHJvcHMsdWU9MDt1ZTx5ZS5sZW5ndGg7dWUrKyl7dmFyIGFlPXllW3VlXTtpZih4W2FlXSE9PWJbYWVdJiYhdm8oWCxhZSkpcmV0dXJuITB9fWVsc2UgcmV0dXJuKFB8fHopJiYoIXp8fCF6LiRzdGFibGUpPyEwOmI9PT14PyExOmI/eD9EaShiLHgsWCk6ITA6ISF4O3JldHVybiExfWZ1bmN0aW9uIERpKG8sbCxwKXt2YXIgYj1PYmplY3Qua2V5cyhsKTtpZihiLmxlbmd0aCE9PU9iamVjdC5rZXlzKG8pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIFA9MDtQPGIubGVuZ3RoO1ArKyl7dmFyIFQ9YltQXTtpZihsW1RdIT09b1tUXSYmIXZvKHAsVCkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gYWkobyxsKXtmb3IodmFye3Zub2RlOnAscGFyZW50OmJ9PW87Yjspe3ZhciBQPWIuc3ViVHJlZTtpZihQLnN1c3BlbnNlJiZQLnN1c3BlbnNlLmFjdGl2ZUJyYW5jaD09PXAmJihQLmVsPXAuZWwpLFA9PT1wKShwPWIudm5vZGUpLmVsPWwsYj1iLnBhcmVudDtlbHNlIGJyZWFrfX12YXIgeXI9ImNvbXBvbmVudHMiLF9vPSJkaXJlY3RpdmVzIjtmdW5jdGlvbiBmcyhvLGwpe3JldHVybiBXbih5cixvLCEwLGwpfHxvfXZhciBRbz1TeW1ib2wuZm9yKCJ2LW5kYyIpO2Z1bmN0aW9uIHJuKG8pe3JldHVybiBtLmlzU3RyaW5nKG8pP1duKHlyLG8sITEpfHxvOm98fFFvfWZ1bmN0aW9uIEVyKG8pe3JldHVybiBXbihfbyxvKX1mdW5jdGlvbiBXbihvLGwpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMCxiPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxQPWdufHxwcjtpZihQKXt2YXIgVD1QLnR5cGU7aWYobz09PXlyKXt2YXIgeD1BbChULCExKTtpZih4JiYoeD09PWx8fHg9PT1tLmNhbWVsaXplKGwpfHx4PT09bS5jYXBpdGFsaXplKG0uY2FtZWxpemUobCkpKSlyZXR1cm4gVH12YXIgej1TcihQW29dfHxUW29dLGwpfHxTcihQLmFwcENvbnRleHRbb10sbCk7aWYoIXomJmIpcmV0dXJuIFQ7aWYocCYmIXope3ZhciBIPW89PT15cj9gCklmIHRoaXMgaXMgYSBuYXRpdmUgY3VzdG9tIGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBleGNsdWRlIGl0IGZyb20gY29tcG9uZW50IHJlc29sdXRpb24gdmlhIGNvbXBpbGVyT3B0aW9ucy5pc0N1c3RvbUVsZW1lbnQuYDoiIjtPKCJGYWlsZWQgdG8gcmVzb2x2ZSAiLmNvbmNhdChvLnNsaWNlKDAsLTEpLCI6ICIpLmNvbmNhdChsKS5jb25jYXQoSCkpfXJldHVybiB6fWVsc2UgTygicmVzb2x2ZSIuY29uY2F0KG0uY2FwaXRhbGl6ZShvLnNsaWNlKDAsLTEpKSwiIGNhbiBvbmx5IGJlIHVzZWQgaW4gcmVuZGVyKCkgb3Igc2V0dXAoKS4iKSl9ZnVuY3Rpb24gU3IobyxsKXtyZXR1cm4gbyYmKG9bbF18fG9bbS5jYW1lbGl6ZShsKV18fG9bbS5jYXBpdGFsaXplKG0uY2FtZWxpemUobCkpXSl9dmFyIEpyPW89Pm8uX19pc1N1c3BlbnNlLGVhPTAsdGE9e25hbWU6IlN1c3BlbnNlIixfX2lzU3VzcGVuc2U6ITAscHJvY2VzcyhvLGwscCxiLFAsVCx4LHosSCxYKXtpZihvPT1udWxsKU1vKGwscCxiLFAsVCx4LHosSCxYKTtlbHNle2lmKFQmJlQuZGVwcz4wJiYhby5zdXNwZW5zZS5pc0luRmFsbGJhY2spe2wuc3VzcGVuc2U9by5zdXNwZW5zZSxsLnN1c3BlbnNlLnZub2RlPWwsbC5lbD1vLmVsO3JldHVybn1IYShvLGwscCxiLFAseCx6LEgsWCl9fSxoeWRyYXRlOlBhLGNyZWF0ZTpMbyxub3JtYWxpemU6cHN9LGRzPXRhO2Z1bmN0aW9uIEJvKG8sbCl7dmFyIHA9by5wcm9wcyYmby5wcm9wc1tsXTttLmlzRnVuY3Rpb24ocCkmJnAoKX1mdW5jdGlvbiBNbyhvLGwscCxiLFAsVCx4LHosSCl7dmFye3A6WCxvOntjcmVhdGVFbGVtZW50OnllfX09SCx1ZT15ZSgiZGl2IiksYWU9by5zdXNwZW5zZT1MbyhvLFAsYixsLHVlLHAsVCx4LHosSCk7WChudWxsLGFlLnBlbmRpbmdCcmFuY2g9by5zc0NvbnRlbnQsdWUsbnVsbCxiLGFlLFQseCksYWUuZGVwcz4wPyhCbyhvLCJvblBlbmRpbmciKSxCbyhvLCJvbkZhbGxiYWNrIiksWChudWxsLG8uc3NGYWxsYmFjayxsLHAsYixudWxsLFQseCksVihhZSxvLnNzRmFsbGJhY2spKTphZS5yZXNvbHZlKCExLCEwKX1mdW5jdGlvbiBIYShvLGwscCxiLFAsVCx4LHosSCl7dmFye3A6WCx1bTp5ZSxvOntjcmVhdGVFbGVtZW50OnVlfX09SCxhZT1sLnN1c3BlbnNlPW8uc3VzcGVuc2U7YWUudm5vZGU9bCxsLmVsPW8uZWw7dmFyIGtlPWwuc3NDb250ZW50LE1lPWwuc3NGYWxsYmFjayx7YWN0aXZlQnJhbmNoOnd0LHBlbmRpbmdCcmFuY2g6dXQsaXNJbkZhbGxiYWNrOmt0LGlzSHlkcmF0aW5nOlJ0fT1hZTtpZih1dClhZS5wZW5kaW5nQnJhbmNoPWtlLFdyKGtlLHV0KT8oWCh1dCxrZSxhZS5oaWRkZW5Db250YWluZXIsbnVsbCxQLGFlLFQseCx6KSxhZS5kZXBzPD0wP2FlLnJlc29sdmUoKTprdCYmKFJ0fHwoWCh3dCxNZSxwLGIsUCxudWxsLFQseCx6KSxWKGFlLE1lKSkpKTooYWUucGVuZGluZ0lkPWVhKyssUnQ/KGFlLmlzSHlkcmF0aW5nPSExLGFlLmFjdGl2ZUJyYW5jaD11dCk6eWUodXQsUCxhZSksYWUuZGVwcz0wLGFlLmVmZmVjdHMubGVuZ3RoPTAsYWUuaGlkZGVuQ29udGFpbmVyPXVlKCJkaXYiKSxrdD8oWChudWxsLGtlLGFlLmhpZGRlbkNvbnRhaW5lcixudWxsLFAsYWUsVCx4LHopLGFlLmRlcHM8PTA/YWUucmVzb2x2ZSgpOihYKHd0LE1lLHAsYixQLG51bGwsVCx4LHopLFYoYWUsTWUpKSk6d3QmJldyKGtlLHd0KT8oWCh3dCxrZSxwLGIsUCxhZSxULHgseiksYWUucmVzb2x2ZSghMCkpOihYKG51bGwsa2UsYWUuaGlkZGVuQ29udGFpbmVyLG51bGwsUCxhZSxULHgseiksYWUuZGVwczw9MCYmYWUucmVzb2x2ZSgpKSk7ZWxzZSBpZih3dCYmV3Ioa2Usd3QpKVgod3Qsa2UscCxiLFAsYWUsVCx4LHopLFYoYWUsa2UpO2Vsc2UgaWYoQm8obCwib25QZW5kaW5nIiksYWUucGVuZGluZ0JyYW5jaD1rZSxrZS5zaGFwZUZsYWcmNTEyP2FlLnBlbmRpbmdJZD1rZS5jb21wb25lbnQuc3VzcGVuc2VJZDphZS5wZW5kaW5nSWQ9ZWErKyxYKG51bGwsa2UsYWUuaGlkZGVuQ29udGFpbmVyLG51bGwsUCxhZSxULHgseiksYWUuZGVwczw9MClhZS5yZXNvbHZlKCk7ZWxzZXt2YXJ7dGltZW91dDpmZSxwZW5kaW5nSWQ6SWV9PWFlO2ZlPjA/c2V0VGltZW91dCgoKT0+e2FlLnBlbmRpbmdJZD09PUllJiZhZS5mYWxsYmFjayhNZSl9LGZlKTpmZT09PTAmJmFlLmZhbGxiYWNrKE1lKX19dmFyICRhPSExO2Z1bmN0aW9uIExvKG8sbCxwLGIsUCxULHgseixILFgpe3ZhciB5ZT1hcmd1bWVudHMubGVuZ3RoPjEwJiZhcmd1bWVudHNbMTBdIT09dm9pZCAwP2FyZ3VtZW50c1sxMF06ITE7JGF8fCgkYT0hMCxjb25zb2xlW2NvbnNvbGUuaW5mbz8iaW5mbyI6ImxvZyJdKCI8U3VzcGVuc2U+IGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGFuZCBpdHMgQVBJIHdpbGwgbGlrZWx5IGNoYW5nZS4iKSk7dmFye3A6dWUsbTphZSx1bTprZSxuOk1lLG86e3BhcmVudE5vZGU6d3QscmVtb3ZlOnV0fX09WCxrdCxSdD1xKG8pO1J0JiYobD09bnVsbD92b2lkIDA6bC5wZW5kaW5nQnJhbmNoKSYmKGt0PWwucGVuZGluZ0lkLGwuZGVwcysrKTt2YXIgZmU9by5wcm9wcz9tLnRvTnVtYmVyKG8ucHJvcHMudGltZW91dCk6dm9pZCAwO3BuKGZlLCJTdXNwZW5zZSB0aW1lb3V0Iik7dmFyIEllPVQsTmU9e3Zub2RlOm8scGFyZW50OmwscGFyZW50Q29tcG9uZW50OnAsbmFtZXNwYWNlOngsY29udGFpbmVyOmIsaGlkZGVuQ29udGFpbmVyOlAsZGVwczowLHBlbmRpbmdJZDplYSsrLHRpbWVvdXQ6dHlwZW9mIGZlPT0ibnVtYmVyIj9mZTotMSxhY3RpdmVCcmFuY2g6bnVsbCxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiF5ZSxpc0h5ZHJhdGluZzp5ZSxpc1VubW91bnRlZDohMSxlZmZlY3RzOltdLHJlc29sdmUoKXt2YXIgWGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLGN0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTt7aWYoIVhlJiYhTmUucGVuZGluZ0JyYW5jaCl0aHJvdyBuZXcgRXJyb3IoInN1c3BlbnNlLnJlc29sdmUoKSBpcyBjYWxsZWQgd2l0aG91dCBhIHBlbmRpbmcgYnJhbmNoLiIpO2lmKE5lLmlzVW5tb3VudGVkKXRocm93IG5ldyBFcnJvcigic3VzcGVuc2UucmVzb2x2ZSgpIGlzIGNhbGxlZCBvbiBhbiBhbHJlYWR5IHVubW91bnRlZCBzdXNwZW5zZSBib3VuZGFyeS4iKX12YXJ7dm5vZGU6aSxhY3RpdmVCcmFuY2g6YSxwZW5kaW5nQnJhbmNoOmYscGVuZGluZ0lkOmgsZWZmZWN0czpDLHBhcmVudENvbXBvbmVudDpTLGNvbnRhaW5lcjprfT1OZSxVPSExO05lLmlzSHlkcmF0aW5nP05lLmlzSHlkcmF0aW5nPSExOlhlfHwoVT1hJiZmLnRyYW5zaXRpb24mJmYudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiIsVSYmKGEudHJhbnNpdGlvbi5hZnRlckxlYXZlPSgpPT57aD09PU5lLnBlbmRpbmdJZCYmKGFlKGYsayxUPT09SWU/TWUoYSk6VCwwKSxEcihDKSl9KSxhJiYod3QoYS5lbCkhPT1OZS5oaWRkZW5Db250YWluZXImJihUPU1lKGEpKSxrZShhLFMsTmUsITApKSxVfHxhZShmLGssVCwwKSksVihOZSxmKSxOZS5wZW5kaW5nQnJhbmNoPW51bGwsTmUuaXNJbkZhbGxiYWNrPSExO2Zvcih2YXIgQj1OZS5wYXJlbnQsSz0hMTtCOyl7aWYoQi5wZW5kaW5nQnJhbmNoKXtCLmVmZmVjdHMucHVzaCguLi5DKSxLPSEwO2JyZWFrfUI9Qi5wYXJlbnR9IUsmJiFVJiZEcihDKSxOZS5lZmZlY3RzPVtdLFJ0JiZsJiZsLnBlbmRpbmdCcmFuY2gmJmt0PT09bC5wZW5kaW5nSWQmJihsLmRlcHMtLSxsLmRlcHM9PT0wJiYhY3QmJmwucmVzb2x2ZSgpKSxCbyhpLCJvblJlc29sdmUiKX0sZmFsbGJhY2soWGUpe2lmKCEhTmUucGVuZGluZ0JyYW5jaCl7dmFye3Zub2RlOmN0LGFjdGl2ZUJyYW5jaDppLHBhcmVudENvbXBvbmVudDphLGNvbnRhaW5lcjpmLG5hbWVzcGFjZTpofT1OZTtCbyhjdCwib25GYWxsYmFjayIpO3ZhciBDPU1lKGkpLFM9KCk9PnshTmUuaXNJbkZhbGxiYWNrfHwodWUobnVsbCxYZSxmLEMsYSxudWxsLGgseixIKSxWKE5lLFhlKSl9LGs9WGUudHJhbnNpdGlvbiYmWGUudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiI7ayYmKGkudHJhbnNpdGlvbi5hZnRlckxlYXZlPVMpLE5lLmlzSW5GYWxsYmFjaz0hMCxrZShpLGEsbnVsbCwhMCksa3x8UygpfX0sbW92ZShYZSxjdCxpKXtOZS5hY3RpdmVCcmFuY2gmJmFlKE5lLmFjdGl2ZUJyYW5jaCxYZSxjdCxpKSxOZS5jb250YWluZXI9WGV9LG5leHQoKXtyZXR1cm4gTmUuYWN0aXZlQnJhbmNoJiZNZShOZS5hY3RpdmVCcmFuY2gpfSxyZWdpc3RlckRlcChYZSxjdCl7dmFyIGk9ISFOZS5wZW5kaW5nQnJhbmNoO2kmJk5lLmRlcHMrKzt2YXIgYT1YZS52bm9kZS5lbDtYZS5hc3luY0RlcC5jYXRjaChmPT57THIoZixYZSwwKX0pLnRoZW4oZj0+e2lmKCEoWGUuaXNVbm1vdW50ZWR8fE5lLmlzVW5tb3VudGVkfHxOZS5wZW5kaW5nSWQhPT1YZS5zdXNwZW5zZUlkKSl7WGUuYXN5bmNSZXNvbHZlZD0hMDt2YXJ7dm5vZGU6aH09WGU7RXQoaCkscGEoWGUsZiwhMSksYSYmKGguZWw9YSk7dmFyIEM9IWEmJlhlLnN1YlRyZWUuZWw7Y3QoWGUsaCx3dChhfHxYZS5zdWJUcmVlLmVsKSxhP251bGw6TWUoWGUuc3ViVHJlZSksTmUseCxIKSxDJiZ1dChDKSxhaShYZSxoLmVsKSxjZSgpLGkmJi0tTmUuZGVwcz09PTAmJk5lLnJlc29sdmUoKX19KX0sdW5tb3VudChYZSxjdCl7TmUuaXNVbm1vdW50ZWQ9ITAsTmUuYWN0aXZlQnJhbmNoJiZrZShOZS5hY3RpdmVCcmFuY2gscCxYZSxjdCksTmUucGVuZGluZ0JyYW5jaCYma2UoTmUucGVuZGluZ0JyYW5jaCxwLFhlLGN0KX19O3JldHVybiBOZX1mdW5jdGlvbiBQYShvLGwscCxiLFAsVCx4LHosSCl7dmFyIFg9bC5zdXNwZW5zZT1MbyhsLGIscCxvLnBhcmVudE5vZGUsYy5jcmVhdGVFbGVtZW50KCJkaXYiKSxudWxsLFAsVCx4LHosITApLHllPUgobyxYLnBlbmRpbmdCcmFuY2g9bC5zc0NvbnRlbnQscCxYLFQseCk7cmV0dXJuIFguZGVwcz09PTAmJlgucmVzb2x2ZSghMSwhMCkseWV9ZnVuY3Rpb24gcHMobyl7dmFye3NoYXBlRmxhZzpsLGNoaWxkcmVuOnB9PW8sYj1sJjMyO28uc3NDb250ZW50PW5hKGI/cC5kZWZhdWx0OnApLG8uc3NGYWxsYmFjaz1iP25hKHAuZmFsbGJhY2spOlhuKExuKX1mdW5jdGlvbiBuYShvKXt2YXIgbDtpZihtLmlzRnVuY3Rpb24obykpe3ZhciBwPWxhJiZvLl9jO3AmJihvLl9kPSExLFFyKCkpLG89bygpLHAmJihvLl9kPSEwLGw9enIsWnMoKSl9aWYobS5pc0FycmF5KG8pKXt2YXIgYj1vaShvKTshYiYmby5maWx0ZXIoUD0+UCE9PVFvKS5sZW5ndGg+MCYmTygiPFN1c3BlbnNlPiBzbG90cyBleHBlY3QgYSBzaW5nbGUgcm9vdCBub2RlLiIpLG89Yn1yZXR1cm4gbz1JaShvKSxsJiYhby5keW5hbWljQ2hpbGRyZW4mJihvLmR5bmFtaWNDaGlsZHJlbj1sLmZpbHRlcihQPT5QIT09bykpLG99ZnVuY3Rpb24gRG8obyxsKXtsJiZsLnBlbmRpbmdCcmFuY2g/bS5pc0FycmF5KG8pP2wuZWZmZWN0cy5wdXNoKC4uLm8pOmwuZWZmZWN0cy5wdXNoKG8pOkRyKG8pfWZ1bmN0aW9uIFYobyxsKXtvLmFjdGl2ZUJyYW5jaD1sO2Zvcih2YXJ7dm5vZGU6cCxwYXJlbnRDb21wb25lbnQ6Yn09byxQPWwuZWw7IVAmJmwuY29tcG9uZW50OylsPWwuY29tcG9uZW50LnN1YlRyZWUsUD1sLmVsO3AuZWw9UCxiJiZiLnN1YlRyZWU9PT1wJiYoYi52bm9kZS5lbD1QLGFpKGIsUCkpfWZ1bmN0aW9uIHEobyl7dmFyIGw7cmV0dXJuKChsPW8ucHJvcHMpPT1udWxsP3ZvaWQgMDpsLnN1c3BlbnNpYmxlKSE9bnVsbCYmby5wcm9wcy5zdXNwZW5zaWJsZSE9PSExfXZhciBwZT1TeW1ib2wuZm9yKCJ2LXNjeCIpLFplPSgpPT57e3ZhciBvPUduKHBlKTtyZXR1cm4gb3x8TygiU2VydmVyIHJlbmRlcmluZyBjb250ZXh0IG5vdCBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIG9ubHkgY2FsbCB1c2VTU1JDb250ZXh0KCkgY29uZGl0aW9uYWxseSBpbiB0aGUgc2VydmVyIGJ1aWxkLiIpLG99fTtmdW5jdGlvbiBLZShvLGwpe3JldHVybiBIcihvLG51bGwsbCl9ZnVuY3Rpb24gbXQobyxsKXtyZXR1cm4gSHIobyxudWxsLG0uZXh0ZW5kKHt9LGwse2ZsdXNoOiJwb3N0In0pKX1mdW5jdGlvbiBldChvLGwpe3JldHVybiBIcihvLG51bGwsbS5leHRlbmQoe30sbCx7Zmx1c2g6InN5bmMifSkpfXZhciBsdD17fTtmdW5jdGlvbiBmcihvLGwscCl7cmV0dXJuIG0uaXNGdW5jdGlvbihsKXx8TygiYHdhdGNoKGZuLCBvcHRpb25zPylgIHNpZ25hdHVyZSBoYXMgYmVlbiBtb3ZlZCB0byBhIHNlcGFyYXRlIEFQSS4gVXNlIGB3YXRjaEVmZmVjdChmbiwgb3B0aW9ucz8pYCBpbnN0ZWFkLiBgd2F0Y2hgIG5vdyBvbmx5IHN1cHBvcnRzIGB3YXRjaChzb3VyY2UsIGNiLCBvcHRpb25zPykgc2lnbmF0dXJlLiIpLEhyKG8sbCxwKX1mdW5jdGlvbiBIcihvLGwpe3ZhcntpbW1lZGlhdGU6cCxkZWVwOmIsZmx1c2g6UCxvbmNlOlQsb25UcmFjazp4LG9uVHJpZ2dlcjp6fT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bS5FTVBUWV9PQko7aWYobCYmVCl7dmFyIEg9bDtsPWZ1bmN0aW9uKCl7SCguLi5hcmd1bWVudHMpLGEoKX19YiE9PXZvaWQgMCYmdHlwZW9mIGI9PSJudW1iZXIiJiZPKCd3YXRjaCgpICJkZWVwIiBvcHRpb24gd2l0aCBudW1iZXIgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHdhdGNoIGRlcHRoIGluIGZ1dHVyZSB2ZXJzaW9ucy4gUGxlYXNlIHVzZSBhIGJvb2xlYW4gaW5zdGVhZCB0byBhdm9pZCBwb3RlbnRpYWwgYnJlYWthZ2UuJyksbHx8KHAhPT12b2lkIDAmJk8oJ3dhdGNoKCkgImltbWVkaWF0ZSIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIHdhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuJyksYiE9PXZvaWQgMCYmTygnd2F0Y2goKSAiZGVlcCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIHdhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuJyksVCE9PXZvaWQgMCYmTygnd2F0Y2goKSAib25jZSIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIHdhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuJykpO3ZhciBYPWY9PntPKCJJbnZhbGlkIHdhdGNoIHNvdXJjZTogIixmLCJBIHdhdGNoIHNvdXJjZSBjYW4gb25seSBiZSBhIGdldHRlci9lZmZlY3QgZnVuY3Rpb24sIGEgcmVmLCBhIHJlYWN0aXZlIG9iamVjdCwgb3IgYW4gYXJyYXkgb2YgdGhlc2UgdHlwZXMuIil9LHllPXByLHVlPWY9PmI9PT0hMD9mOl9pKGYsYj09PSExPzE6dm9pZCAwKSxhZSxrZT0hMSxNZT0hMTtpZihJLmlzUmVmKG8pPyhhZT0oKT0+by52YWx1ZSxrZT1JLmlzU2hhbGxvdyhvKSk6SS5pc1JlYWN0aXZlKG8pPyhhZT0oKT0+dWUobyksa2U9ITApOm0uaXNBcnJheShvKT8oTWU9ITAsa2U9by5zb21lKGY9PkkuaXNSZWFjdGl2ZShmKXx8SS5pc1NoYWxsb3coZikpLGFlPSgpPT5vLm1hcChmPT57aWYoSS5pc1JlZihmKSlyZXR1cm4gZi52YWx1ZTtpZihJLmlzUmVhY3RpdmUoZikpcmV0dXJuIHVlKGYpO2lmKG0uaXNGdW5jdGlvbihmKSlyZXR1cm4gc24oZix5ZSwyKTtYKGYpfSkpOm0uaXNGdW5jdGlvbihvKT9sP2FlPSgpPT5zbihvLHllLDIpOmFlPSgpPT4odXQmJnV0KCksa24obyx5ZSwzLFtrdF0pKTooYWU9bS5OT09QLFgobykpLGwmJmIpe3ZhciB3dD1hZTthZT0oKT0+X2kod3QoKSl9dmFyIHV0LGt0PWY9Pnt1dD1jdC5vblN0b3A9KCk9PntzbihmLHllLDQpLHV0PWN0Lm9uU3RvcD12b2lkIDB9fSxSdDtpZihkLmlzSW5TU1JDb21wb25lbnRTZXR1cClpZihrdD1tLk5PT1AsbD9wJiZrbihsLHllLDMsW2FlKCksTWU/W106dm9pZCAwLGt0XSk6YWUoKSxQPT09InN5bmMiKXt2YXIgZmU9WmUoKTtSdD1mZS5fX3dhdGNoZXJIYW5kbGVzfHwoZmUuX193YXRjaGVySGFuZGxlcz1bXSl9ZWxzZSByZXR1cm4gbS5OT09QO3ZhciBJZT1NZT9uZXcgQXJyYXkoby5sZW5ndGgpLmZpbGwobHQpOmx0LE5lPSgpPT57aWYoISghY3QuYWN0aXZlfHwhY3QuZGlydHkpKWlmKGwpe3ZhciBmPWN0LnJ1bigpOyhifHxrZXx8KE1lP2Yuc29tZSgoaCxDKT0+bS5oYXNDaGFuZ2VkKGgsSWVbQ10pKTptLmhhc0NoYW5nZWQoZixJZSkpKSYmKHV0JiZ1dCgpLGtuKGwseWUsMyxbZixJZT09PWx0P3ZvaWQgMDpNZSYmSWVbMF09PT1sdD9bXTpJZSxrdF0pLEllPWYpfWVsc2UgY3QucnVuKCl9O05lLmFsbG93UmVjdXJzZT0hIWw7dmFyIFhlO1A9PT0ic3luYyI/WGU9TmU6UD09PSJwb3N0Ij9YZT0oKT0+anIoTmUseWUmJnllLnN1c3BlbnNlKTooTmUucHJlPSEwLHllJiYoTmUuaWQ9eWUudWlkKSxYZT0oKT0+bm4oTmUpKTt2YXIgY3Q9bmV3IEkuUmVhY3RpdmVFZmZlY3QoYWUsbS5OT09QLFhlKSxpPUkuZ2V0Q3VycmVudFNjb3BlKCksYT0oKT0+e2N0LnN0b3AoKSxpJiZtLnJlbW92ZShpLmVmZmVjdHMsY3QpfTtyZXR1cm4gY3Qub25UcmFjaz14LGN0Lm9uVHJpZ2dlcj16LGw/cD9OZSgpOkllPWN0LnJ1bigpOlA9PT0icG9zdCI/anIoY3QucnVuLmJpbmQoY3QpLHllJiZ5ZS5zdXNwZW5zZSk6Y3QucnVuKCksUnQmJlJ0LnB1c2goYSksYX1mdW5jdGlvbiAkcihvLGwscCl7dmFyIGI9dGhpcy5wcm94eSxQPW0uaXNTdHJpbmcobyk/by5pbmNsdWRlcygiLiIpP1FpKGIsbyk6KCk9PmJbb106by5iaW5kKGIsYiksVDttLmlzRnVuY3Rpb24obCk/VD1sOihUPWwuaGFuZGxlcixwPWwpO3ZhciB4PUdyKHRoaXMpLHo9SHIoUCxULmJpbmQoYikscCk7cmV0dXJuIHgoKSx6fWZ1bmN0aW9uIFFpKG8sbCl7dmFyIHA9bC5zcGxpdCgiLiIpO3JldHVybigpPT57Zm9yKHZhciBiPW8sUD0wO1A8cC5sZW5ndGgmJmI7UCsrKWI9YltwW1BdXTtyZXR1cm4gYn19ZnVuY3Rpb24gX2kobyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06MCxiPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2lmKCFtLmlzT2JqZWN0KG8pfHxvLl9fdl9za2lwKXJldHVybiBvO2lmKGwmJmw+MCl7aWYocD49bClyZXR1cm4gbztwKyt9aWYoYj1ifHxuZXcgU2V0LGIuaGFzKG8pKXJldHVybiBvO2lmKGIuYWRkKG8pLEkuaXNSZWYobykpX2koby52YWx1ZSxsLHAsYik7ZWxzZSBpZihtLmlzQXJyYXkobykpZm9yKHZhciBQPTA7UDxvLmxlbmd0aDtQKyspX2kob1tQXSxsLHAsYik7ZWxzZSBpZihtLmlzU2V0KG8pfHxtLmlzTWFwKG8pKW8uZm9yRWFjaCh4PT57X2koeCxsLHAsYil9KTtlbHNlIGlmKG0uaXNQbGFpbk9iamVjdChvKSlmb3IodmFyIFQgaW4gbylfaShvW1RdLGwscCxiKTtyZXR1cm4gb31mdW5jdGlvbiBlbyhvKXttLmlzQnVpbHRJbkRpcmVjdGl2ZShvKSYmTygiRG8gbm90IHVzZSBidWlsdC1pbiBkaXJlY3RpdmUgaWRzIGFzIGN1c3RvbSBkaXJlY3RpdmUgaWQ6ICIrbyl9ZnVuY3Rpb24gaHMobyxsKXtpZihnbj09PW51bGwpcmV0dXJuIE8oIndpdGhEaXJlY3RpdmVzIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHJlbmRlciBmdW5jdGlvbnMuIiksbztmb3IodmFyIHA9cnMoZ24pfHxnbi5wcm94eSxiPW8uZGlyc3x8KG8uZGlycz1bXSksUD0wO1A8bC5sZW5ndGg7UCsrKXt2YXJbVCx4LHosSD1tLkVNUFRZX09CSl09bFtQXTtUJiYobS5pc0Z1bmN0aW9uKFQpJiYoVD17bW91bnRlZDpULHVwZGF0ZWQ6VH0pLFQuZGVlcCYmX2koeCksYi5wdXNoKHtkaXI6VCxpbnN0YW5jZTpwLHZhbHVlOngsb2xkVmFsdWU6dm9pZCAwLGFyZzp6LG1vZGlmaWVyczpIfSkpfXJldHVybiBvfWZ1bmN0aW9uIEZpKG8sbCxwLGIpe2Zvcih2YXIgUD1vLmRpcnMsVD1sJiZsLmRpcnMseD0wO3g8UC5sZW5ndGg7eCsrKXt2YXIgej1QW3hdO1QmJih6Lm9sZFZhbHVlPVRbeF0udmFsdWUpO3ZhciBIPXouZGlyW2JdO0gmJihJLnBhdXNlVHJhY2tpbmcoKSxrbihILHAsOCxbby5lbCx6LG8sbF0pLEkucmVzZXRUcmFja2luZygpKX19dmFyIHdyPVN5bWJvbCgiX2xlYXZlQ2IiKSxzaT1TeW1ib2woIl9lbnRlckNiIik7ZnVuY3Rpb24gTmEoKXt2YXIgbz17aXNNb3VudGVkOiExLGlzTGVhdmluZzohMSxpc1VubW91bnRpbmc6ITEsbGVhdmluZ1ZOb2RlczpuZXcgTWFwfTtyZXR1cm4gUmEoKCk9PntvLmlzTW91bnRlZD0hMH0pLFZvKCgpPT57by5pc1VubW91bnRpbmc9ITB9KSxvfXZhciBsZT1bRnVuY3Rpb24sQXJyYXldLEo9e21vZGU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLHBlcnNpc3RlZDpCb29sZWFuLG9uQmVmb3JlRW50ZXI6bGUsb25FbnRlcjpsZSxvbkFmdGVyRW50ZXI6bGUsb25FbnRlckNhbmNlbGxlZDpsZSxvbkJlZm9yZUxlYXZlOmxlLG9uTGVhdmU6bGUsb25BZnRlckxlYXZlOmxlLG9uTGVhdmVDYW5jZWxsZWQ6bGUsb25CZWZvcmVBcHBlYXI6bGUsb25BcHBlYXI6bGUsb25BZnRlckFwcGVhcjpsZSxvbkFwcGVhckNhbmNlbGxlZDpsZX0sZGU9e25hbWU6IkJhc2VUcmFuc2l0aW9uIixwcm9wczpKLHNldHVwKG8sbCl7dmFye3Nsb3RzOnB9PWwsYj1ObigpLFA9TmEoKTtyZXR1cm4oKT0+e3ZhciBUPXAuZGVmYXVsdCYmZHIocC5kZWZhdWx0KCksITApO2lmKCEoIVR8fCFULmxlbmd0aCkpe3ZhciB4PVRbMF07aWYoVC5sZW5ndGg+MSl7dmFyIHo9ITE7Zm9yKHZhciBIIG9mIFQpaWYoSC50eXBlIT09TG4pe2lmKHope08oIjx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQgb3IgY29tcG9uZW50LiBVc2UgPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy4iKTticmVha314PUgsej0hMH19dmFyIFg9SS50b1JhdyhvKSx7bW9kZTp5ZX09WDtpZih5ZSYmeWUhPT0iaW4tb3V0IiYmeWUhPT0ib3V0LWluIiYmeWUhPT0iZGVmYXVsdCImJk8oImludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICIuY29uY2F0KHllKSksUC5pc0xlYXZpbmcpcmV0dXJuIEpuKHgpO3ZhciB1ZT1fbih4KTtpZighdWUpcmV0dXJuIEpuKHgpO3ZhciBhZT1vbih1ZSxYLFAsYik7Vm4odWUsYWUpO3ZhciBrZT1iLnN1YlRyZWUsTWU9a2UmJl9uKGtlKTtpZihNZSYmTWUudHlwZSE9PUxuJiYhV3IodWUsTWUpKXt2YXIgd3Q9b24oTWUsWCxQLGIpO2lmKFZuKE1lLHd0KSx5ZT09PSJvdXQtaW4iKXJldHVybiBQLmlzTGVhdmluZz0hMCx3dC5hZnRlckxlYXZlPSgpPT57UC5pc0xlYXZpbmc9ITEsYi51cGRhdGUuYWN0aXZlIT09ITEmJihiLmVmZmVjdC5kaXJ0eT0hMCxiLnVwZGF0ZSgpKX0sSm4oeCk7eWU9PT0iaW4tb3V0IiYmdWUudHlwZSE9PUxuJiYod3QuZGVsYXlMZWF2ZT0odXQsa3QsUnQpPT57dmFyIGZlPWR0KFAsTWUpO2ZlW1N0cmluZyhNZS5rZXkpXT1NZSx1dFt3cl09KCk9PntrdCgpLHV0W3dyXT12b2lkIDAsZGVsZXRlIGFlLmRlbGF5ZWRMZWF2ZX0sYWUuZGVsYXllZExlYXZlPVJ0fSl9cmV0dXJuIHh9fX19LFVlPWRlO2Z1bmN0aW9uIGR0KG8sbCl7dmFye2xlYXZpbmdWTm9kZXM6cH09byxiPXAuZ2V0KGwudHlwZSk7cmV0dXJuIGJ8fChiPU9iamVjdC5jcmVhdGUobnVsbCkscC5zZXQobC50eXBlLGIpKSxifWZ1bmN0aW9uIG9uKG8sbCxwLGIpe3ZhcnthcHBlYXI6UCxtb2RlOlQscGVyc2lzdGVkOng9ITEsb25CZWZvcmVFbnRlcjp6LG9uRW50ZXI6SCxvbkFmdGVyRW50ZXI6WCxvbkVudGVyQ2FuY2VsbGVkOnllLG9uQmVmb3JlTGVhdmU6dWUsb25MZWF2ZTphZSxvbkFmdGVyTGVhdmU6a2Usb25MZWF2ZUNhbmNlbGxlZDpNZSxvbkJlZm9yZUFwcGVhcjp3dCxvbkFwcGVhcjp1dCxvbkFmdGVyQXBwZWFyOmt0LG9uQXBwZWFyQ2FuY2VsbGVkOlJ0fT1sLGZlPVN0cmluZyhvLmtleSksSWU9ZHQocCxvKSxOZT0oaSxhKT0+e2kmJmtuKGksYiw5LGEpfSxYZT0oaSxhKT0+e3ZhciBmPWFbMV07TmUoaSxhKSxtLmlzQXJyYXkoaSk/aS5ldmVyeShoPT5oLmxlbmd0aDw9MSkmJmYoKTppLmxlbmd0aDw9MSYmZigpfSxjdD17bW9kZTpULHBlcnNpc3RlZDp4LGJlZm9yZUVudGVyKGkpe3ZhciBhPXo7aWYoIXAuaXNNb3VudGVkKWlmKFApYT13dHx8ejtlbHNlIHJldHVybjtpW3dyXSYmaVt3cl0oITApO3ZhciBmPUllW2ZlXTtmJiZXcihvLGYpJiZmLmVsW3dyXSYmZi5lbFt3cl0oKSxOZShhLFtpXSl9LGVudGVyKGkpe3ZhciBhPUgsZj1YLGg9eWU7aWYoIXAuaXNNb3VudGVkKWlmKFApYT11dHx8SCxmPWt0fHxYLGg9UnR8fHllO2Vsc2UgcmV0dXJuO3ZhciBDPSExLFM9aVtzaV09az0+e0N8fChDPSEwLGs/TmUoaCxbaV0pOk5lKGYsW2ldKSxjdC5kZWxheWVkTGVhdmUmJmN0LmRlbGF5ZWRMZWF2ZSgpLGlbc2ldPXZvaWQgMCl9O2E/WGUoYSxbaSxTXSk6UygpfSxsZWF2ZShpLGEpe3ZhciBmPVN0cmluZyhvLmtleSk7aWYoaVtzaV0mJmlbc2ldKCEwKSxwLmlzVW5tb3VudGluZylyZXR1cm4gYSgpO05lKHVlLFtpXSk7dmFyIGg9ITEsQz1pW3dyXT1TPT57aHx8KGg9ITAsYSgpLFM/TmUoTWUsW2ldKTpOZShrZSxbaV0pLGlbd3JdPXZvaWQgMCxJZVtmXT09PW8mJmRlbGV0ZSBJZVtmXSl9O0llW2ZdPW8sYWU/WGUoYWUsW2ksQ10pOkMoKX0sY2xvbmUoaSl7cmV0dXJuIG9uKGksbCxwLGIpfX07cmV0dXJuIGN0fWZ1bmN0aW9uIEpuKG8pe2lmKHlvKG8pKXJldHVybiBvPSRpKG8pLG8uY2hpbGRyZW49bnVsbCxvfWZ1bmN0aW9uIF9uKG8pe3JldHVybiB5byhvKT9vLmNvbXBvbmVudD9vLmNvbXBvbmVudC5zdWJUcmVlOm8uY2hpbGRyZW4/by5jaGlsZHJlblswXTp2b2lkIDA6b31mdW5jdGlvbiBWbihvLGwpe28uc2hhcGVGbGFnJjYmJm8uY29tcG9uZW50P1ZuKG8uY29tcG9uZW50LnN1YlRyZWUsbCk6by5zaGFwZUZsYWcmMTI4PyhvLnNzQ29udGVudC50cmFuc2l0aW9uPWwuY2xvbmUoby5zc0NvbnRlbnQpLG8uc3NGYWxsYmFjay50cmFuc2l0aW9uPWwuY2xvbmUoby5zc0ZhbGxiYWNrKSk6by50cmFuc2l0aW9uPWx9ZnVuY3Rpb24gZHIobyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxwPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGI9W10sUD0wLFQ9MDtUPG8ubGVuZ3RoO1QrKyl7dmFyIHg9b1tUXSx6PXA9PW51bGw/eC5rZXk6U3RyaW5nKHApK1N0cmluZyh4LmtleSE9bnVsbD94LmtleTpUKTt4LnR5cGU9PT1tcj8oeC5wYXRjaEZsYWcmMTI4JiZQKyssYj1iLmNvbmNhdChkcih4LmNoaWxkcmVuLGwseikpKToobHx8eC50eXBlIT09TG4pJiZiLnB1c2goeiE9bnVsbD8kaSh4LHtrZXk6en0pOngpfWlmKFA+MSlmb3IodmFyIEg9MDtIPGIubGVuZ3RoO0grKyliW0hdLnBhdGNoRmxhZz0tMjtyZXR1cm4gYn1mdW5jdGlvbiB0byhvLGwpe3JldHVybiBtLmlzRnVuY3Rpb24obyk/KCgpPT5tLmV4dGVuZCh7bmFtZTpvLm5hbWV9LGwse3NldHVwOm99KSkoKTpvfXZhciBabj1vPT4hIW8udHlwZS5fX2FzeW5jTG9hZGVyO2Z1bmN0aW9uIGJvKG8pe20uaXNGdW5jdGlvbihvKSYmKG89e2xvYWRlcjpvfSk7dmFye2xvYWRlcjpsLGxvYWRpbmdDb21wb25lbnQ6cCxlcnJvckNvbXBvbmVudDpiLGRlbGF5OlA9MjAwLHRpbWVvdXQ6VCxzdXNwZW5zaWJsZTp4PSEwLG9uRXJyb3I6en09byxIPW51bGwsWCx5ZT0wLHVlPSgpPT4oeWUrKyxIPW51bGwsYWUoKSksYWU9KCk9Pnt2YXIga2U7cmV0dXJuIEh8fChrZT1IPWwoKS5jYXRjaChNZT0+e2lmKE1lPU1lIGluc3RhbmNlb2YgRXJyb3I/TWU6bmV3IEVycm9yKFN0cmluZyhNZSkpLHopcmV0dXJuIG5ldyBQcm9taXNlKCh3dCx1dCk9Pnt2YXIga3Q9KCk9Pnd0KHVlKCkpLFJ0PSgpPT51dChNZSk7eihNZSxrdCxSdCx5ZSsxKX0pO3Rocm93IE1lfSkudGhlbihNZT0+e2lmKGtlIT09SCYmSClyZXR1cm4gSDtpZihNZXx8TygiQXN5bmMgY29tcG9uZW50IGxvYWRlciByZXNvbHZlZCB0byB1bmRlZmluZWQuIElmIHlvdSBhcmUgdXNpbmcgcmV0cnkoKSwgbWFrZSBzdXJlIHRvIHJldHVybiBpdHMgcmV0dXJuIHZhbHVlLiIpLE1lJiYoTWUuX19lc01vZHVsZXx8TWVbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJNb2R1bGUiKSYmKE1lPU1lLmRlZmF1bHQpLE1lJiYhbS5pc09iamVjdChNZSkmJiFtLmlzRnVuY3Rpb24oTWUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhc3luYyBjb21wb25lbnQgbG9hZCByZXN1bHQ6ICIuY29uY2F0KE1lKSk7cmV0dXJuIFg9TWUsTWV9KSl9O3JldHVybiB0byh7bmFtZToiQXN5bmNDb21wb25lbnRXcmFwcGVyIixfX2FzeW5jTG9hZGVyOmFlLGdldCBfX2FzeW5jUmVzb2x2ZWQoKXtyZXR1cm4gWH0sc2V0dXAoKXt2YXIga2U9cHI7aWYoWClyZXR1cm4oKT0+SWEoWCxrZSk7dmFyIE1lPVJ0PT57SD1udWxsLExyKFJ0LGtlLDEzLCFiKX07aWYoeCYma2Uuc3VzcGVuc2V8fGQuaXNJblNTUkNvbXBvbmVudFNldHVwKXJldHVybiBhZSgpLnRoZW4oUnQ9PigpPT5JYShSdCxrZSkpLmNhdGNoKFJ0PT4oTWUoUnQpLCgpPT5iP1huKGIse2Vycm9yOlJ0fSk6bnVsbCkpO3ZhciB3dD1JLnJlZighMSksdXQ9SS5yZWYoKSxrdD1JLnJlZighIVApO3JldHVybiBQJiZzZXRUaW1lb3V0KCgpPT57a3QudmFsdWU9ITF9LFApLFQhPW51bGwmJnNldFRpbWVvdXQoKCk9PntpZighd3QudmFsdWUmJiF1dC52YWx1ZSl7dmFyIFJ0PW5ldyBFcnJvcigiQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAiLmNvbmNhdChULCJtcy4iKSk7TWUoUnQpLHV0LnZhbHVlPVJ0fX0sVCksYWUoKS50aGVuKCgpPT57d3QudmFsdWU9ITAsa2UucGFyZW50JiZ5byhrZS5wYXJlbnQudm5vZGUpJiYoa2UucGFyZW50LmVmZmVjdC5kaXJ0eT0hMCxubihrZS5wYXJlbnQudXBkYXRlKSl9KS5jYXRjaChSdD0+e01lKFJ0KSx1dC52YWx1ZT1SdH0pLCgpPT57aWYod3QudmFsdWUmJlgpcmV0dXJuIElhKFgsa2UpO2lmKHV0LnZhbHVlJiZiKXJldHVybiBYbihiLHtlcnJvcjp1dC52YWx1ZX0pO2lmKHAmJiFrdC52YWx1ZSlyZXR1cm4gWG4ocCl9fX0pfWZ1bmN0aW9uIElhKG8sbCl7dmFye3JlZjpwLHByb3BzOmIsY2hpbGRyZW46UCxjZTpUfT1sLnZub2RlLHg9WG4obyxiLFApO3JldHVybiB4LnJlZj1wLHguY2U9VCxkZWxldGUgbC52bm9kZS5jZSx4fXZhciB5bz1vPT5vLnR5cGUuX19pc0tlZXBBbGl2ZSxGbz17bmFtZToiS2VlcEFsaXZlIixfX2lzS2VlcEFsaXZlOiEwLHByb3BzOntpbmNsdWRlOltTdHJpbmcsUmVnRXhwLEFycmF5XSxleGNsdWRlOltTdHJpbmcsUmVnRXhwLEFycmF5XSxtYXg6W1N0cmluZyxOdW1iZXJdfSxzZXR1cChvLGwpe3ZhcntzbG90czpwfT1sLGI9Tm4oKSxQPWIuY3R4O2lmKCFQLnJlbmRlcmVyKXJldHVybigpPT57dmFyIGZlPXAuZGVmYXVsdCYmcC5kZWZhdWx0KCk7cmV0dXJuIGZlJiZmZS5sZW5ndGg9PT0xP2ZlWzBdOmZlfTt2YXIgVD1uZXcgTWFwLHg9bmV3IFNldCx6PW51bGw7Yi5fX3ZfY2FjaGU9VDt2YXIgSD1iLnN1c3BlbnNlLHtyZW5kZXJlcjp7cDpYLG06eWUsdW06dWUsbzp7Y3JlYXRlRWxlbWVudDphZX19fT1QLGtlPWFlKCJkaXYiKTtQLmFjdGl2YXRlPShmZSxJZSxOZSxYZSxjdCk9Pnt2YXIgaT1mZS5jb21wb25lbnQ7eWUoZmUsSWUsTmUsMCxIKSxYKGkudm5vZGUsZmUsSWUsTmUsaSxILFhlLGZlLnNsb3RTY29wZUlkcyxjdCksanIoKCk9PntpLmlzRGVhY3RpdmF0ZWQ9ITEsaS5hJiZtLmludm9rZUFycmF5Rm5zKGkuYSk7dmFyIGE9ZmUucHJvcHMmJmZlLnByb3BzLm9uVm5vZGVNb3VudGVkO2EmJmtpKGEsaS5wYXJlbnQsZmUpfSxIKSxtaShpKX0sUC5kZWFjdGl2YXRlPWZlPT57dmFyIEllPWZlLmNvbXBvbmVudDt5ZShmZSxrZSxudWxsLDEsSCksanIoKCk9PntJZS5kYSYmbS5pbnZva2VBcnJheUZucyhJZS5kYSk7dmFyIE5lPWZlLnByb3BzJiZmZS5wcm9wcy5vblZub2RlVW5tb3VudGVkO05lJiZraShOZSxJZS5wYXJlbnQsZmUpLEllLmlzRGVhY3RpdmF0ZWQ9ITB9LEgpLG1pKEllKX07ZnVuY3Rpb24gTWUoZmUpe2phKGZlKSx1ZShmZSxiLEgsITApfWZ1bmN0aW9uIHd0KGZlKXtULmZvckVhY2goKEllLE5lKT0+e3ZhciBYZT1BbChJZS50eXBlKTtYZSYmKCFmZXx8IWZlKFhlKSkmJnV0KE5lKX0pfWZ1bmN0aW9uIHV0KGZlKXt2YXIgSWU9VC5nZXQoZmUpOyF6fHwhV3IoSWUseik/TWUoSWUpOnomJmphKHopLFQuZGVsZXRlKGZlKSx4LmRlbGV0ZShmZSl9ZnIoKCk9PltvLmluY2x1ZGUsby5leGNsdWRlXSxmZT0+e3ZhcltJZSxOZV09ZmU7SWUmJnd0KFhlPT5yYShJZSxYZSkpLE5lJiZ3dChYZT0+IXJhKE5lLFhlKSl9LHtmbHVzaDoicG9zdCIsZGVlcDohMH0pO3ZhciBrdD1udWxsLFJ0PSgpPT57a3QhPW51bGwmJlQuc2V0KGt0LFRpKGIuc3ViVHJlZSkpfTtyZXR1cm4gUmEoUnQpLHphKFJ0KSxWbygoKT0+e1QuZm9yRWFjaChmZT0+e3ZhcntzdWJUcmVlOkllLHN1c3BlbnNlOk5lfT1iLFhlPVRpKEllKTtpZihmZS50eXBlPT09WGUudHlwZSYmZmUua2V5PT09WGUua2V5KXtqYShYZSk7dmFyIGN0PVhlLmNvbXBvbmVudC5kYTtjdCYmanIoY3QsTmUpO3JldHVybn1NZShmZSl9KX0pLCgpPT57aWYoa3Q9bnVsbCwhcC5kZWZhdWx0KXJldHVybiBudWxsO3ZhciBmZT1wLmRlZmF1bHQoKSxJZT1mZVswXTtpZihmZS5sZW5ndGg+MSlyZXR1cm4gTygiS2VlcEFsaXZlIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIGNvbXBvbmVudCBjaGlsZC4iKSx6PW51bGwsZmU7aWYoIVRvKEllKXx8IShJZS5zaGFwZUZsYWcmNCkmJiEoSWUuc2hhcGVGbGFnJjEyOCkpcmV0dXJuIHo9bnVsbCxJZTt2YXIgTmU9VGkoSWUpLFhlPU5lLnR5cGUsY3Q9QWwoWm4oTmUpP05lLnR5cGUuX19hc3luY1Jlc29sdmVkfHx7fTpYZSkse2luY2x1ZGU6aSxleGNsdWRlOmEsbWF4OmZ9PW87aWYoaSYmKCFjdHx8IXJhKGksY3QpKXx8YSYmY3QmJnJhKGEsY3QpKXJldHVybiB6PU5lLEllO3ZhciBoPU5lLmtleT09bnVsbD9YZTpOZS5rZXksQz1ULmdldChoKTtyZXR1cm4gTmUuZWwmJihOZT0kaShOZSksSWUuc2hhcGVGbGFnJjEyOCYmKEllLnNzQ29udGVudD1OZSkpLGt0PWgsQz8oTmUuZWw9Qy5lbCxOZS5jb21wb25lbnQ9Qy5jb21wb25lbnQsTmUudHJhbnNpdGlvbiYmVm4oTmUsTmUudHJhbnNpdGlvbiksTmUuc2hhcGVGbGFnfD01MTIseC5kZWxldGUoaCkseC5hZGQoaCkpOih4LmFkZChoKSxmJiZ4LnNpemU+cGFyc2VJbnQoZiwxMCkmJnV0KHgudmFsdWVzKCkubmV4dCgpLnZhbHVlKSksTmUuc2hhcGVGbGFnfD0yNTYsej1OZSxKcihJZS50eXBlKT9JZTpOZX19fSxSbD1GbztmdW5jdGlvbiByYShvLGwpe3JldHVybiBtLmlzQXJyYXkobyk/by5zb21lKHA9PnJhKHAsbCkpOm0uaXNTdHJpbmcobyk/by5zcGxpdCgiLCIpLmluY2x1ZGVzKGwpOm0uaXNSZWdFeHAobyk/by50ZXN0KGwpOiExfWZ1bmN0aW9uIGthKG8sbCl7cnIobywiYSIsbCl9ZnVuY3Rpb24gaGwobyxsKXtycihvLCJkYSIsbCl9ZnVuY3Rpb24gcnIobyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06cHIsYj1vLl9fd2RjfHwoby5fX3dkYz0oKT0+e2Zvcih2YXIgVD1wO1Q7KXtpZihULmlzRGVhY3RpdmF0ZWQpcmV0dXJuO1Q9VC5wYXJlbnR9cmV0dXJuIG8oKX0pO2lmKGlhKGwsYixwKSxwKWZvcih2YXIgUD1wLnBhcmVudDtQJiZQLnBhcmVudDspeW8oUC5wYXJlbnQudm5vZGUpJiZ4bChiLGwscCxQKSxQPVAucGFyZW50fWZ1bmN0aW9uIHhsKG8sbCxwLGIpe3ZhciBQPWlhKGwsbyxiLCEwKTtVbygoKT0+e20ucmVtb3ZlKGJbbF0sUCl9LHApfWZ1bmN0aW9uIGphKG8pe28uc2hhcGVGbGFnJj1+MjU2LG8uc2hhcGVGbGFnJj1+NTEyfWZ1bmN0aW9uIFRpKG8pe3JldHVybiBvLnNoYXBlRmxhZyYxMjg/by5zc0NvbnRlbnQ6b31mdW5jdGlvbiBpYShvLGwpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpwcixiPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZihwKXtpZihPZS5pc1Jvb3RIb29rKG8pJiZwIT09cC5yb290JiYocD1wLnJvb3QsT2UuaXNSb290SW1tZWRpYXRlSG9vayhvKSkpe3ZhciBQPXAucHJveHk7a24obC5iaW5kKFApLHAsbyxPZS5PTl9MT0FEPT09bz9bUC4kcGFnZS5vcHRpb25zXTpbXSl9dmFyIFQ9cFtvXXx8KHBbb109W10pLHg9bC5fX3dlaHx8KGwuX193ZWg9ZnVuY3Rpb24oKXtpZighcC5pc1VubW91bnRlZCl7SS5wYXVzZVRyYWNraW5nKCk7Zm9yKHZhciBIPUdyKHApLFg9YXJndW1lbnRzLmxlbmd0aCx5ZT1uZXcgQXJyYXkoWCksdWU9MDt1ZTxYO3VlKyspeWVbdWVdPWFyZ3VtZW50c1t1ZV07dmFyIGFlPWtuKGwscCxvLHllKTtyZXR1cm4gSCgpLEkucmVzZXRUcmFja2luZygpLGFlfX0pO3JldHVybiBiP1QudW5zaGlmdCh4KTpULnB1c2goeCkseH1lbHNle3ZhciB6PW0udG9IYW5kbGVyS2V5KChLbltvXXx8by5yZXBsYWNlKC9eb24vLCIiKSkucmVwbGFjZSgvIGhvb2skLywiIikpO08oIiIuY29uY2F0KHosIiBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC4gTGlmZWN5Y2xlIGluamVjdGlvbiBBUElzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBzZXR1cCgpLiIpKyIgSWYgeW91IGFyZSB1c2luZyBhc3luYyBzZXR1cCgpLCBtYWtlIHN1cmUgdG8gcmVnaXN0ZXIgbGlmZWN5Y2xlIGhvb2tzIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQgc3RhdGVtZW50LiIpfX12YXIgUGk9bz0+ZnVuY3Rpb24obCl7dmFyIHA9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnByO3JldHVybighZC5pc0luU1NSQ29tcG9uZW50U2V0dXB8fG89PT0ic3AiKSYmaWEobyxmdW5jdGlvbigpe3JldHVybiBsKC4uLmFyZ3VtZW50cyl9LHApfSxDcj1QaSgiYm0iKSxSYT1QaSgibSIpLG5vPVBpKCJidSIpLHphPVBpKCJ1IiksVm89UGkoImJ1bSIpLFVvPVBpKCJ1bSIpLFdhPVBpKCJzcCIpLGdzPVBpKCJydGciKSxHYT1QaSgicnRjIik7ZnVuY3Rpb24gZ2wobyl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnByO2lhKCJlYyIsbyxsKX1mdW5jdGlvbiBCbChvLGwscCxiKXt2YXIgUCxUPXAmJnBbYl07aWYobS5pc0FycmF5KG8pfHxtLmlzU3RyaW5nKG8pKXtQPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKHZhciB4PTAsej1vLmxlbmd0aDt4PHo7eCsrKVBbeF09bChvW3hdLHgsdm9pZCAwLFQmJlRbeF0pfWVsc2UgaWYodHlwZW9mIG89PSJudW1iZXIiKXtOdW1iZXIuaXNJbnRlZ2VyKG8pfHxPKCJUaGUgdi1mb3IgcmFuZ2UgZXhwZWN0IGFuIGludGVnZXIgdmFsdWUgYnV0IGdvdCAiLmNvbmNhdChvLCIuIikpLFA9bmV3IEFycmF5KG8pO2Zvcih2YXIgSD0wO0g8bztIKyspUFtIXT1sKEgrMSxILHZvaWQgMCxUJiZUW0hdKX1lbHNlIGlmKG0uaXNPYmplY3QobykpaWYob1tTeW1ib2wuaXRlcmF0b3JdKVA9QXJyYXkuZnJvbShvLChrZSxNZSk9Pmwoa2UsTWUsdm9pZCAwLFQmJlRbTWVdKSk7ZWxzZXt2YXIgWD1PYmplY3Qua2V5cyhvKTtQPW5ldyBBcnJheShYLmxlbmd0aCk7Zm9yKHZhciB5ZT0wLHVlPVgubGVuZ3RoO3llPHVlO3llKyspe3ZhciBhZT1YW3llXTtQW3llXT1sKG9bYWVdLGFlLHllLFQmJlRbeWVdKX19ZWxzZSBQPVtdO3JldHVybiBwJiYocFtiXT1QKSxQfWZ1bmN0aW9uIEVvKG8sbCl7Zm9yKHZhciBwPWZ1bmN0aW9uKFApe3ZhciBUPWxbUF07aWYobS5pc0FycmF5KFQpKWZvcih2YXIgeD0wO3g8VC5sZW5ndGg7eCsrKW9bVFt4XS5uYW1lXT1UW3hdLmZuO2Vsc2UgVCYmKG9bVC5uYW1lXT1ULmtleT9mdW5jdGlvbigpe3ZhciB6PVQuZm4oLi4uYXJndW1lbnRzKTtyZXR1cm4geiYmKHoua2V5PVQua2V5KSx6fTpULmZuKX0sYj0wO2I8bC5sZW5ndGg7YisrKXAoYik7cmV0dXJuIG99ZnVuY3Rpb24gZmMobyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30sYj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxQPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06dm9pZCAwO2lmKGduLmlzQ0V8fGduLnBhcmVudCYmWm4oZ24ucGFyZW50KSYmZ24ucGFyZW50LmlzQ0UpcmV0dXJuIGwhPT0iZGVmYXVsdCImJihwLm5hbWU9bCksWG4oInNsb3QiLHAsYiYmYigpKTt2YXIgVD1vW2xdO1QmJlQubGVuZ3RoPjEmJihPKCJTU1Itb3B0aW1pemVkIHNsb3QgZnVuY3Rpb24gZGV0ZWN0ZWQgaW4gYSBub24tU1NSLW9wdGltaXplZCByZW5kZXIgZnVuY3Rpb24uIFlvdSBuZWVkIHRvIG1hcmsgdGhpcyBjb21wb25lbnQgd2l0aCAkZHluYW1pYy1zbG90cyBpbiB0aGUgcGFyZW50IHRlbXBsYXRlLiIpLFQ9KCk9PltdKSxUJiZULl9jJiYoVC5fZD0hMSksUXIoKTt2YXIgeD1UJiZ2bChUKHApKSx6PU9vKG1yLHtrZXk6cC5rZXl8fHgmJngua2V5fHwiXyIuY29uY2F0KGwpfSx4fHwoYj9iKCk6W10pLHgmJm8uXz09PTE/NjQ6LTIpO3JldHVybiFQJiZ6LnNjb3BlSWQmJih6LnNsb3RTY29wZUlkcz1bei5zY29wZUlkKyItcyJdKSxUJiZULl9jJiYoVC5fZD0hMCksen1mdW5jdGlvbiB2bChvKXtyZXR1cm4gby5zb21lKGw9PlRvKGwpPyEobC50eXBlPT09TG58fGwudHlwZT09PW1yJiYhdmwobC5jaGlsZHJlbikpOiEwKT9vOm51bGx9ZnVuY3Rpb24gVXMobyxsKXt2YXIgcD17fTtpZighbS5pc09iamVjdChvKSlyZXR1cm4gTygidi1vbiB3aXRoIG5vIGFyZ3VtZW50IGV4cGVjdHMgYW4gb2JqZWN0IHZhbHVlLiIpLHA7Zm9yKHZhciBiIGluIG8pcFtsJiYvW0EtWl0vLnRlc3QoYik/Im9uOiIuY29uY2F0KGIpOm0udG9IYW5kbGVyS2V5KGIpXT1vW2JdO3JldHVybiBwfXZhciBIcz1vPT5vP2RhKG8pP3JzKG8pfHxvLnByb3h5OkhzKG8ucGFyZW50KTpudWxsLEhvPW0uZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCkseyQ6bz0+bywkZWw6bz0+by52bm9kZS5lbCwkZGF0YTpvPT5vLmRhdGEsJHByb3BzOm89Pkkuc2hhbGxvd1JlYWRvbmx5KG8ucHJvcHMpLCRhdHRyczpvPT5JLnNoYWxsb3dSZWFkb25seShvLmF0dHJzKSwkc2xvdHM6bz0+SS5zaGFsbG93UmVhZG9ubHkoby5zbG90cyksJHJlZnM6bz0+SS5zaGFsbG93UmVhZG9ubHkoby5yZWZzKSwkcGFyZW50Om89PkhzKG8ucGFyZW50KSwkcm9vdDpvPT5IcyhvLnJvb3QpLCRlbWl0Om89Pm8uZW1pdCwkb3B0aW9uczpvPT5pcihvKSwkZm9yY2VVcGRhdGU6bz0+by5mfHwoby5mPSgpPT57by5lZmZlY3QuZGlydHk9ITAsbm4oby51cGRhdGUpfSksJG5leHRUaWNrOm89Pm8ubnx8KG8ubj1EdC5iaW5kKG8ucHJveHkpKSwkd2F0Y2g6bz0+JHIuYmluZChvKX0pLHJvPW89Pm89PT0iXyJ8fG89PT0iJCIsU289KG8sbCk9Pm8hPT1tLkVNUFRZX09CSiYmIW8uX19pc1NjcmlwdFNldHVwJiZtLmhhc093bihvLGwpLHdvPXtnZXQobyxsKXt2YXJ7XzpwfT1vLHtjdHg6YixzZXR1cFN0YXRlOlAsZGF0YTpULHByb3BzOngsYWNjZXNzQ2FjaGU6eix0eXBlOkgsYXBwQ29udGV4dDpYfT1wO2lmKGw9PT0iX19pc1Z1ZSIpcmV0dXJuITA7dmFyIHllO2lmKGxbMF0hPT0iJCIpe3ZhciB1ZT16W2xdO2lmKHVlIT09dm9pZCAwKXN3aXRjaCh1ZSl7Y2FzZSAxOnJldHVybiBQW2xdO2Nhc2UgMjpyZXR1cm4gVFtsXTtjYXNlIDQ6cmV0dXJuIGJbbF07Y2FzZSAzOnJldHVybiB4W2xdfWVsc2V7aWYoU28oUCxsKSlyZXR1cm4geltsXT0xLFBbbF07aWYoVCE9PW0uRU1QVFlfT0JKJiZtLmhhc093bihULGwpKXJldHVybiB6W2xdPTIsVFtsXTtpZigoeWU9cC5wcm9wc09wdGlvbnNbMF0pJiZtLmhhc093bih5ZSxsKSlyZXR1cm4geltsXT0zLHhbbF07aWYoYiE9PW0uRU1QVFlfT0JKJiZtLmhhc093bihiLGwpKXJldHVybiB6W2xdPTQsYltsXTtibiYmKHpbbF09MCl9fXZhciBhZT1Ib1tsXSxrZSxNZTtpZihhZSlyZXR1cm4gbD09PSIkYXR0cnMiPyhJLnRyYWNrKHAsImdldCIsbCksWGkoKSk6bD09PSIkc2xvdHMiJiZJLnRyYWNrKHAsImdldCIsbCksYWUocCk7aWYoKGtlPUguX19jc3NNb2R1bGVzKSYmKGtlPWtlW2xdKSlyZXR1cm4ga2U7aWYoYiE9PW0uRU1QVFlfT0JKJiZtLmhhc093bihiLGwpKXJldHVybiB6W2xdPTQsYltsXTtpZihNZT1YLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLG0uaGFzT3duKE1lLGwpKXJldHVybiBNZVtsXTtnbiYmKCFtLmlzU3RyaW5nKGwpfHxsLmluZGV4T2YoIl9fdiIpIT09MCkmJihUIT09bS5FTVBUWV9PQkomJnJvKGxbMF0pJiZtLmhhc093bihULGwpP08oIlByb3BlcnR5ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGwpLCcgbXVzdCBiZSBhY2Nlc3NlZCB2aWEgJGRhdGEgYmVjYXVzZSBpdCBzdGFydHMgd2l0aCBhIHJlc2VydmVkIGNoYXJhY3RlciAoIiQiIG9yICJfIikgYW5kIGlzIG5vdCBwcm94aWVkIG9uIHRoZSByZW5kZXIgY29udGV4dC4nKSk6cD09PWduJiZPKCJQcm9wZXJ0eSAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShsKSwiIHdhcyBhY2Nlc3NlZCBkdXJpbmcgcmVuZGVyIGJ1dCBpcyBub3QgZGVmaW5lZCBvbiBpbnN0YW5jZS4iKSkpfSxzZXQobyxsLHApe3ZhcntfOmJ9PW8se2RhdGE6UCxzZXR1cFN0YXRlOlQsY3R4Onh9PWI7cmV0dXJuIFNvKFQsbCk/KFRbbF09cCwhMCk6VC5fX2lzU2NyaXB0U2V0dXAmJm0uaGFzT3duKFQsbCk/KE8oJ0Nhbm5vdCBtdXRhdGUgPHNjcmlwdCBzZXR1cD4gYmluZGluZyAiJy5jb25jYXQobCwnIiBmcm9tIE9wdGlvbnMgQVBJLicpKSwhMSk6UCE9PW0uRU1QVFlfT0JKJiZtLmhhc093bihQLGwpPyhQW2xdPXAsITApOm0uaGFzT3duKGIucHJvcHMsbCk/KE8oJ0F0dGVtcHRpbmcgdG8gbXV0YXRlIHByb3AgIicuY29uY2F0KGwsJyIuIFByb3BzIGFyZSByZWFkb25seS4nKSksITEpOmxbMF09PT0iJCImJmwuc2xpY2UoMSlpbiBiPyhPKCdBdHRlbXB0aW5nIHRvIG11dGF0ZSBwdWJsaWMgcHJvcGVydHkgIicuY29uY2F0KGwsJyIuIFByb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCAkIGFyZSByZXNlcnZlZCBhbmQgcmVhZG9ubHkuJykpLCExKToobCBpbiBiLmFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5KHgsbCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6cH0pOnhbbF09cCwhMCl9LGhhcyhvLGwpe3ZhcntfOntkYXRhOnAsc2V0dXBTdGF0ZTpiLGFjY2Vzc0NhY2hlOlAsY3R4OlQsYXBwQ29udGV4dDp4LHByb3BzT3B0aW9uczp6fX09byxIO3JldHVybiEhUFtsXXx8cCE9PW0uRU1QVFlfT0JKJiZtLmhhc093bihwLGwpfHxTbyhiLGwpfHwoSD16WzBdKSYmbS5oYXNPd24oSCxsKXx8bS5oYXNPd24oVCxsKXx8bS5oYXNPd24oSG8sbCl8fG0uaGFzT3duKHguY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsbCl9LGRlZmluZVByb3BlcnR5KG8sbCxwKXtyZXR1cm4gcC5nZXQhPW51bGw/by5fLmFjY2Vzc0NhY2hlW2xdPTA6bS5oYXNPd24ocCwidmFsdWUiKSYmdGhpcy5zZXQobyxsLHAudmFsdWUsbnVsbCksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShvLGwscCl9fTt3by5vd25LZXlzPW89PihPKCJBdm9pZCBhcHAgbG9naWMgdGhhdCByZWxpZXMgb24gZW51bWVyYXRpbmcga2V5cyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhlIGtleXMgd2lsbCBiZSBlbXB0eSBpbiBwcm9kdWN0aW9uIG1vZGUgdG8gYXZvaWQgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuIiksUmVmbGVjdC5vd25LZXlzKG8pKTt2YXIgdnM9bS5leHRlbmQoe30sd28se2dldChvLGwpe2lmKGwhPT1TeW1ib2wudW5zY29wYWJsZXMpcmV0dXJuIHdvLmdldChvLGwsbyl9LGhhcyhvLGwpe3ZhciBwPWxbMF0hPT0iXyImJiFtLmlzR2xvYmFsbHlBbGxvd2VkKGwpO3JldHVybiFwJiZ3by5oYXMobyxsKSYmTygiUHJvcGVydHkgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkobCksIiBzaG91bGQgbm90IHN0YXJ0IHdpdGggXyB3aGljaCBpcyBhIHJlc2VydmVkIHByZWZpeCBmb3IgVnVlIGludGVybmFscy4iKSkscH19KTtmdW5jdGlvbiBNbChvKXt2YXIgbD17fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl8iLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQ6KCk9Pm99KSxPYmplY3Qua2V5cyhIbykuZm9yRWFjaChwPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGwscCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OigpPT5Ib1twXShvKSxzZXQ6bS5OT09QfSl9KSxsfWZ1bmN0aW9uIHpjKG8pe3ZhcntjdHg6bCxwcm9wc09wdGlvbnM6W3BdfT1vO3AmJk9iamVjdC5rZXlzKHApLmZvckVhY2goYj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+by5wcm9wc1tiXSxzZXQ6bS5OT09QfSl9KX1mdW5jdGlvbiB5KG8pe3ZhcntjdHg6bCxzZXR1cFN0YXRlOnB9PW87T2JqZWN0LmtleXMoSS50b1JhdyhwKSkuZm9yRWFjaChiPT57aWYoIXAuX19pc1NjcmlwdFNldHVwKXtpZihybyhiWzBdKSl7Tygic2V0dXAoKSByZXR1cm4gcHJvcGVydHkgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYiksJyBzaG91bGQgbm90IHN0YXJ0IHdpdGggIiQiIG9yICJfIiB3aGljaCBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMgZm9yIFZ1ZSBpbnRlcm5hbHMuJykpO3JldHVybn1PYmplY3QuZGVmaW5lUHJvcGVydHkobCxiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PnBbYl0sc2V0Om0uTk9PUH0pfX0pfXZhciBEPW89Pk8oIiIuY29uY2F0KG8sIigpIGlzIGEgY29tcGlsZXItaGludCBoZWxwZXIgdGhhdCBpcyBvbmx5IHVzYWJsZSBpbnNpZGUgPHNjcmlwdCBzZXR1cD4gb2YgYSBzaW5nbGUgZmlsZSBjb21wb25lbnQuIEl0cyBhcmd1bWVudHMgc2hvdWxkIGJlIGNvbXBpbGVkIGF3YXkgYW5kIHBhc3NpbmcgaXQgYXQgcnVudGltZSBoYXMgbm8gZWZmZWN0LiIpKTtmdW5jdGlvbiBXKCl7cmV0dXJuIEQoImRlZmluZVByb3BzIiksbnVsbH1mdW5jdGlvbiAkKCl7cmV0dXJuIEQoImRlZmluZUVtaXRzIiksbnVsbH1mdW5jdGlvbiBuZShvKXtEKCJkZWZpbmVFeHBvc2UiKX1mdW5jdGlvbiBpZShvKXtEKCJkZWZpbmVPcHRpb25zIil9ZnVuY3Rpb24gZ2UoKXtyZXR1cm4gRCgiZGVmaW5lU2xvdHMiKSxudWxsfWZ1bmN0aW9uIHdlKCl7RCgiZGVmaW5lTW9kZWwiKX1mdW5jdGlvbiBCZShvLGwpe3JldHVybiBEKCJ3aXRoRGVmYXVsdHMiKSxudWxsfWZ1bmN0aW9uIEhlKCl7cmV0dXJuIEZlKCkuc2xvdHN9ZnVuY3Rpb24gRWUoKXtyZXR1cm4gRmUoKS5hdHRyc31mdW5jdGlvbiBGZSgpe3ZhciBvPU5uKCk7cmV0dXJuIG98fE8oInVzZUNvbnRleHQoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuIiksby5zZXR1cENvbnRleHR8fChvLnNldHVwQ29udGV4dD1xYyhvKSl9ZnVuY3Rpb24gdnQobyl7cmV0dXJuIG0uaXNBcnJheShvKT9vLnJlZHVjZSgobCxwKT0+KGxbcF09bnVsbCxsKSx7fSk6b31mdW5jdGlvbiBQdChvLGwpe3ZhciBwPXZ0KG8pO2Zvcih2YXIgYiBpbiBsKWlmKCFiLnN0YXJ0c1dpdGgoIl9fc2tpcCIpKXt2YXIgUD1wW2JdO1A/bS5pc0FycmF5KFApfHxtLmlzRnVuY3Rpb24oUCk/UD1wW2JdPXt0eXBlOlAsZGVmYXVsdDpsW2JdfTpQLmRlZmF1bHQ9bFtiXTpQPT09bnVsbD9QPXBbYl09e2RlZmF1bHQ6bFtiXX06TygncHJvcHMgZGVmYXVsdCBrZXkgIicuY29uY2F0KGIsJyIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24uJykpLFAmJmxbIl9fc2tpcF8iLmNvbmNhdChiKV0mJihQLnNraXBGYWN0b3J5PSEwKX1yZXR1cm4gcH1mdW5jdGlvbiBGdChvLGwpe3JldHVybiFvfHwhbD9vfHxsOm0uaXNBcnJheShvKSYmbS5pc0FycmF5KGwpP28uY29uY2F0KGwpOm0uZXh0ZW5kKHt9LHZ0KG8pLHZ0KGwpKX1mdW5jdGlvbiBTdChvLGwpe3ZhciBwPXt9LGI9ZnVuY3Rpb24oVCl7bC5pbmNsdWRlcyhUKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsVCx7ZW51bWVyYWJsZTohMCxnZXQ6KCk9Pm9bVF19KX07Zm9yKHZhciBQIGluIG8pYihQKTtyZXR1cm4gcH1mdW5jdGlvbiBfdChvKXt2YXIgbD1ObigpO2x8fE8oIndpdGhBc3luY0NvbnRleHQgY2FsbGVkIHdpdGhvdXQgYWN0aXZlIGN1cnJlbnQgaW5zdGFuY2UuIFRoaXMgaXMgbGlrZWx5IGEgYnVnLiIpO3ZhciBwPW8oKTtyZXR1cm4gdWEoKSxtLmlzUHJvbWlzZShwKSYmKHA9cC5jYXRjaChiPT57dGhyb3cgR3IobCksYn0pKSxbcCwoKT0+R3IobCldfWZ1bmN0aW9uIFZ0KCl7dmFyIG89T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4obCxwKT0+e29bcF0/TygiIi5jb25jYXQobCwnIHByb3BlcnR5ICInKS5jb25jYXQocCwnIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gJykuY29uY2F0KG9bcF0sIi4iKSk6b1twXT1sfX12YXIgYm49ITA7ZnVuY3Rpb24gUG4obyl7dmFyIGw9aXIobykscD1vLnByb3h5LGI9by5jdHg7Ym49ITEsbC5iZWZvcmVDcmVhdGUmJmxuKGwuYmVmb3JlQ3JlYXRlLG8sImJjIik7dmFye2RhdGE6UCxjb21wdXRlZDpULG1ldGhvZHM6eCx3YXRjaDp6LHByb3ZpZGU6SCxpbmplY3Q6WCxjcmVhdGVkOnllLGJlZm9yZU1vdW50OnVlLG1vdW50ZWQ6YWUsYmVmb3JlVXBkYXRlOmtlLHVwZGF0ZWQ6TWUsYWN0aXZhdGVkOnd0LGRlYWN0aXZhdGVkOnV0LGJlZm9yZURlc3Ryb3k6a3QsYmVmb3JlVW5tb3VudDpSdCxkZXN0cm95ZWQ6ZmUsdW5tb3VudGVkOkllLHJlbmRlcjpOZSxyZW5kZXJUcmFja2VkOlhlLHJlbmRlclRyaWdnZXJlZDpjdCxlcnJvckNhcHR1cmVkOmksc2VydmVyUHJlZmV0Y2g6YSxleHBvc2U6Zixpbmhlcml0QXR0cnM6aCxjb21wb25lbnRzOkMsZGlyZWN0aXZlczpTLGZpbHRlcnM6a309bCxVPVZ0KCk7e3ZhcltCXT1vLnByb3BzT3B0aW9ucztpZihCKWZvcih2YXIgSyBpbiBCKVUoIlByb3BzIixLKX1pZihYJiZPdChYLGIsVSkseClmb3IodmFyIFEgaW4geCl7dmFyIGVlPXhbUV07bS5pc0Z1bmN0aW9uKGVlKT8oT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsUSx7dmFsdWU6ZWUuYmluZChwKSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMH0pLFUoIk1ldGhvZHMiLFEpKTpPKCdNZXRob2QgIicuY29uY2F0KFEsJyIgaGFzIHR5cGUgIicpLmNvbmNhdCh0eXBlb2YgZWUsJyIgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5PycpKX1pZihQJiZmdW5jdGlvbigpe20uaXNGdW5jdGlvbihQKXx8TygiVGhlIGRhdGEgb3B0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4gUGxhaW4gb2JqZWN0IHVzYWdlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7dmFyIG9lPVAuY2FsbChwLHApO2lmKG0uaXNQcm9taXNlKG9lKSYmTygiZGF0YSgpIHJldHVybmVkIGEgUHJvbWlzZSAtIG5vdGUgZGF0YSgpIGNhbm5vdCBiZSBhc3luYzsgSWYgeW91IGludGVuZCB0byBwZXJmb3JtIGRhdGEgZmV0Y2hpbmcgYmVmb3JlIGNvbXBvbmVudCByZW5kZXJzLCB1c2UgYXN5bmMgc2V0dXAoKSArIDxTdXNwZW5zZT4uIiksIW0uaXNPYmplY3Qob2UpKU8oImRhdGEoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4iKTtlbHNle28uZGF0YT1JLnJlYWN0aXZlKG9lKTt7dmFyIGhlPWZ1bmN0aW9uKCRlKXtVKCJEYXRhIiwkZSkscm8oJGVbMF0pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwkZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OigpPT5vZVskZV0sc2V0Om0uTk9PUH0pfTtmb3IodmFyIF9lIGluIG9lKWhlKF9lKX19fSgpLGJuPSEwLFQpe3ZhciBZPWZ1bmN0aW9uKG9lKXt2YXIgaGU9VFtvZV0sX2U9bS5pc0Z1bmN0aW9uKGhlKT9oZS5iaW5kKHAscCk6bS5pc0Z1bmN0aW9uKGhlLmdldCk/aGUuZ2V0LmJpbmQocCxwKTptLk5PT1A7X2U9PT1tLk5PT1AmJk8oJ0NvbXB1dGVkIHByb3BlcnR5ICInLmNvbmNhdChvZSwnIiBoYXMgbm8gZ2V0dGVyLicpKTt2YXIgJGU9IW0uaXNGdW5jdGlvbihoZSkmJm0uaXNGdW5jdGlvbihoZS5zZXQpP2hlLnNldC5iaW5kKHApOigpPT57TygnV3JpdGUgb3BlcmF0aW9uIGZhaWxlZDogY29tcHV0ZWQgcHJvcGVydHkgIicuY29uY2F0KG9lLCciIGlzIHJlYWRvbmx5LicpKX0sc3Q9RWMoe2dldDpfZSxzZXQ6JGV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixvZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5zdC52YWx1ZSxzZXQ6dHQ9PnN0LnZhbHVlPXR0fSksVSgiQ29tcHV0ZWQiLG9lKX07Zm9yKHZhciB2ZSBpbiBUKVkodmUpfWlmKHopZm9yKHZhciBUZSBpbiB6KVVuKHpbVGVdLGIscCxUZSk7aWYoSCl7dmFyIGh0PW0uaXNGdW5jdGlvbihIKT9ILmNhbGwocCk6SDtSZWZsZWN0Lm93bktleXMoaHQpLmZvckVhY2gob2U9PntCbihvZSxodFtvZV0pfSl9eWUmJmxuKHllLG8sImMiKTtmdW5jdGlvbiBxZShvZSxoZSl7bS5pc0FycmF5KGhlKT9oZS5mb3JFYWNoKF9lPT5vZShfZS5iaW5kKHApKSk6aGUmJm9lKGhlLmJpbmQocCkpfWlmKHFlKENyLHVlKSxxZShSYSxhZSkscWUobm8sa2UpLHFlKHphLE1lKSxxZShrYSx3dCkscWUoaGwsdXQpLHFlKGdsLGkpLHFlKEdhLFhlKSxxZShncyxjdCkscWUoVm8sUnQpLHFlKFVvLEllKSxxZShXYSxhKSxtLmlzQXJyYXkoZikpaWYoZi5sZW5ndGgpe3ZhciBOdD1vLmV4cG9zZWR8fChvLmV4cG9zZWQ9e30pO2YuZm9yRWFjaChvZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShOdCxvZSx7Z2V0OigpPT5wW29lXSxzZXQ6aGU9PnBbb2VdPWhlfSl9KX1lbHNlIG8uZXhwb3NlZHx8KG8uZXhwb3NlZD17fSk7TmUmJm8ucmVuZGVyPT09bS5OT09QJiYoby5yZW5kZXI9TmUpLGghPW51bGwmJihvLmluaGVyaXRBdHRycz1oKSxDJiYoby5jb21wb25lbnRzPUMpLFMmJihvLmRpcmVjdGl2ZXM9Uyk7dmFyIHh0PW8uYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kYXBwbHlPcHRpb25zO3h0JiZ4dChsLG8scCl9ZnVuY3Rpb24gT3QobyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bS5OT09QO20uaXNBcnJheShvKSYmKG89bXMobykpO3ZhciBiPWZ1bmN0aW9uKFQpe3ZhciB4PW9bVF0sej12b2lkIDA7bS5pc09iamVjdCh4KT8iZGVmYXVsdCJpbiB4P3o9R24oeC5mcm9tfHxULHguZGVmYXVsdCwhMCk6ej1Hbih4LmZyb218fFQpOno9R24oeCksSS5pc1JlZih6KT9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxULHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PnoudmFsdWUsc2V0Okg9PnoudmFsdWU9SH0pOmxbVF09eixwKCJJbmplY3QiLFQpfTtmb3IodmFyIFAgaW4gbyliKFApfWZ1bmN0aW9uIGxuKG8sbCxwKXtrbihtLmlzQXJyYXkobyk/by5tYXAoYj0+Yi5iaW5kKGwucHJveHkpKTpvLmJpbmQobC5wcm94eSksbCxwKX1mdW5jdGlvbiBVbihvLGwscCxiKXt2YXIgUD1iLmluY2x1ZGVzKCIuIik/UWkocCxiKTooKT0+cFtiXTtpZihtLmlzU3RyaW5nKG8pKXt2YXIgVD1sW29dO20uaXNGdW5jdGlvbihUKT9mcihQLFQpOk8oJ0ludmFsaWQgd2F0Y2ggaGFuZGxlciBzcGVjaWZpZWQgYnkga2V5ICInLmNvbmNhdChvLCciJyksVCl9ZWxzZSBpZihtLmlzRnVuY3Rpb24obykpZnIoUCxvLmJpbmQocCkpO2Vsc2UgaWYobS5pc09iamVjdChvKSlpZihtLmlzQXJyYXkobykpby5mb3JFYWNoKHo9PlVuKHosbCxwLGIpKTtlbHNle3ZhciB4PW0uaXNGdW5jdGlvbihvLmhhbmRsZXIpP28uaGFuZGxlci5iaW5kKHApOmxbby5oYW5kbGVyXTttLmlzRnVuY3Rpb24oeCk/ZnIoUCx4LG8pOk8oJ0ludmFsaWQgd2F0Y2ggaGFuZGxlciBzcGVjaWZpZWQgYnkga2V5ICInLmNvbmNhdChvLmhhbmRsZXIsJyInKSx4KX1lbHNlIE8oJ0ludmFsaWQgd2F0Y2ggb3B0aW9uOiAiJy5jb25jYXQoYiwnIicpLG8pfWZ1bmN0aW9uIGlyKG8pe3ZhciBsPW8udHlwZSx7bWl4aW5zOnAsZXh0ZW5kczpifT1sLHttaXhpbnM6UCxvcHRpb25zQ2FjaGU6VCxjb25maWc6e29wdGlvbk1lcmdlU3RyYXRlZ2llczp4fX09by5hcHBDb250ZXh0LHo9VC5nZXQobCksSDtyZXR1cm4gej9IPXo6IVAubGVuZ3RoJiYhcCYmIWI/SD1sOihIPXt9LFAubGVuZ3RoJiZQLmZvckVhY2goWD0+VG4oSCxYLHgsITApKSxUbihILGwseCkpLG0uaXNPYmplY3QobCkmJlQuc2V0KGwsSCksSH1mdW5jdGlvbiBUbihvLGwscCl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLHttaXhpbnM6UCxleHRlbmRzOlR9PWw7VCYmVG4obyxULHAsITApLFAmJlAuZm9yRWFjaChIPT5UbihvLEgscCwhMCkpO2Zvcih2YXIgeCBpbiBsKWlmKGImJng9PT0iZXhwb3NlIilPKCciZXhwb3NlIiBvcHRpb24gaXMgaWdub3JlZCB3aGVuIGRlY2xhcmVkIGluIG1peGlucyBvciBleHRlbmRzLiBJdCBzaG91bGQgb25seSBiZSBkZWNsYXJlZCBpbiB0aGUgYmFzZSBjb21wb25lbnQgaXRzZWxmLicpO2Vsc2V7dmFyIHo9SG5beF18fHAmJnBbeF07b1t4XT16P3oob1t4XSxsW3hdKTpsW3hdfXJldHVybiBvfXZhciBIbj17ZGF0YTpBcixwcm9wczokbyxlbWl0czokbyxtZXRob2RzOkd0LGNvbXB1dGVkOkd0LGJlZm9yZUNyZWF0ZTpWcixjcmVhdGVkOlZyLGJlZm9yZU1vdW50OlZyLG1vdW50ZWQ6VnIsYmVmb3JlVXBkYXRlOlZyLHVwZGF0ZWQ6VnIsYmVmb3JlRGVzdHJveTpWcixiZWZvcmVVbm1vdW50OlZyLGRlc3Ryb3llZDpWcix1bm1vdW50ZWQ6VnIsYWN0aXZhdGVkOlZyLGRlYWN0aXZhdGVkOlZyLGVycm9yQ2FwdHVyZWQ6VnIsc2VydmVyUHJlZmV0Y2g6VnIsY29tcG9uZW50czpHdCxkaXJlY3RpdmVzOkd0LHdhdGNoOllhLHByb3ZpZGU6QXIsaW5qZWN0OnFhfTtmdW5jdGlvbiBBcihvLGwpe3JldHVybiBsP28/ZnVuY3Rpb24oKXtyZXR1cm4gbS5leHRlbmQobS5pc0Z1bmN0aW9uKG8pP28uY2FsbCh0aGlzLHRoaXMpOm8sbS5pc0Z1bmN0aW9uKGwpP2wuY2FsbCh0aGlzLHRoaXMpOmwpfTpsOm99ZnVuY3Rpb24gcWEobyxsKXtyZXR1cm4gR3QobXMobyksbXMobCkpfWZ1bmN0aW9uIG1zKG8pe2lmKG0uaXNBcnJheShvKSl7Zm9yKHZhciBsPXt9LHA9MDtwPG8ubGVuZ3RoO3ArKylsW29bcF1dPW9bcF07cmV0dXJuIGx9cmV0dXJuIG99ZnVuY3Rpb24gVnIobyxsKXtyZXR1cm4gbz9bLi4ubmV3IFNldChbXS5jb25jYXQobyxsKSldOmx9ZnVuY3Rpb24gR3QobyxsKXtyZXR1cm4gbz9tLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLG8sbCk6bH1mdW5jdGlvbiAkbyhvLGwpe3JldHVybiBvP20uaXNBcnJheShvKSYmbS5pc0FycmF5KGwpP1suLi5uZXcgU2V0KFsuLi5vLC4uLmxdKV06bS5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSx2dChvKSx2dChsIT1udWxsP2w6e30pKTpsfWZ1bmN0aW9uIFlhKG8sbCl7aWYoIW8pcmV0dXJuIGw7aWYoIWwpcmV0dXJuIG87dmFyIHA9bS5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxvKTtmb3IodmFyIGIgaW4gbClwW2JdPVZyKG9bYl0sbFtiXSk7cmV0dXJuIHB9ZnVuY3Rpb24gX3MoKXtyZXR1cm57YXBwOm51bGwsY29uZmlnOntpc05hdGl2ZVRhZzptLk5PLHBlcmZvcm1hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOnt9LGVycm9ySGFuZGxlcjp2b2lkIDAsd2FybkhhbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudHM6e30sZGlyZWN0aXZlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZTpuZXcgV2Vha01hcCxwcm9wc0NhY2hlOm5ldyBXZWFrTWFwLGVtaXRzQ2FjaGU6bmV3IFdlYWtNYXB9fXZhciBicz0wO2Z1bmN0aW9uIFpyKG8sbCl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBQPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO20uaXNGdW5jdGlvbihiKXx8KGI9bS5leHRlbmQoe30sYikpLFAhPW51bGwmJiFtLmlzT2JqZWN0KFApJiYoTygicm9vdCBwcm9wcyBwYXNzZWQgdG8gYXBwLm1vdW50KCkgbXVzdCBiZSBhbiBvYmplY3QuIiksUD1udWxsKTt2YXIgVD1fcygpLHg9bmV3IFdlYWtTZXQsej0hMSxIPVQuYXBwPXtfdWlkOmJzKyssX2NvbXBvbmVudDpiLF9wcm9wczpQLF9jb250YWluZXI6bnVsbCxfY29udGV4dDpULF9pbnN0YW5jZTpudWxsLHZlcnNpb246WmwsZ2V0IGNvbmZpZygpe3JldHVybiBULmNvbmZpZ30sc2V0IGNvbmZpZyhYKXtPKCJhcHAuY29uZmlnIGNhbm5vdCBiZSByZXBsYWNlZC4gTW9kaWZ5IGluZGl2aWR1YWwgb3B0aW9ucyBpbnN0ZWFkLiIpfSx1c2UoWCl7Zm9yKHZhciB5ZT1hcmd1bWVudHMubGVuZ3RoLHVlPW5ldyBBcnJheSh5ZT4xP3llLTE6MCksYWU9MTthZTx5ZTthZSsrKXVlW2FlLTFdPWFyZ3VtZW50c1thZV07cmV0dXJuIHguaGFzKFgpP08oIlBsdWdpbiBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgdG8gdGFyZ2V0IGFwcC4iKTpYJiZtLmlzRnVuY3Rpb24oWC5pbnN0YWxsKT8oeC5hZGQoWCksWC5pbnN0YWxsKEgsLi4udWUpKTptLmlzRnVuY3Rpb24oWCk/KHguYWRkKFgpLFgoSCwuLi51ZSkpOk8oJ0EgcGx1Z2luIG11c3QgZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IHdpdGggYW4gImluc3RhbGwiIGZ1bmN0aW9uLicpLEh9LG1peGluKFgpe3JldHVybiBULm1peGlucy5pbmNsdWRlcyhYKT9PKCJNaXhpbiBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgdG8gdGFyZ2V0IGFwcCIrKFgubmFtZT8iOiAiLmNvbmNhdChYLm5hbWUpOiIiKSk6VC5taXhpbnMucHVzaChYKSxIfSxjb21wb25lbnQoWCx5ZSl7cmV0dXJuIF9jKFgsVC5jb25maWcpLHllPyhULmNvbXBvbmVudHNbWF0mJk8oJ0NvbXBvbmVudCAiJy5jb25jYXQoWCwnIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgaW4gdGFyZ2V0IGFwcC4nKSksVC5jb21wb25lbnRzW1hdPXllLEgpOlQuY29tcG9uZW50c1tYXX0sZGlyZWN0aXZlKFgseWUpe3JldHVybiBlbyhYKSx5ZT8oVC5kaXJlY3RpdmVzW1hdJiZPKCdEaXJlY3RpdmUgIicuY29uY2F0KFgsJyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGluIHRhcmdldCBhcHAuJykpLFQuZGlyZWN0aXZlc1tYXT15ZSxIKTpULmRpcmVjdGl2ZXNbWF19LG1vdW50KFgseWUsdWUpe2lmKHopTygiQXBwIGhhcyBhbHJlYWR5IGJlZW4gbW91bnRlZC5cbklmIHlvdSB3YW50IHRvIHJlbW91bnQgdGhlIHNhbWUgYXBwLCBtb3ZlIHlvdXIgYXBwIGNyZWF0aW9uIGxvZ2ljIGludG8gYSBmYWN0b3J5IGZ1bmN0aW9uIGFuZCBjcmVhdGUgZnJlc2ggYXBwIGluc3RhbmNlcyBmb3IgZWFjaCBtb3VudCAtIGUuZy4gYGNvbnN0IGNyZWF0ZU15QXBwID0gKCkgPT4gY3JlYXRlQXBwKEFwcClgIik7ZWxzZXtYLl9fdnVlX2FwcF9fJiZPKCJUaGVyZSBpcyBhbHJlYWR5IGFuIGFwcCBpbnN0YW5jZSBtb3VudGVkIG9uIHRoZSBob3N0IGNvbnRhaW5lci5cbiBJZiB5b3Ugd2FudCB0byBtb3VudCBhbm90aGVyIGFwcCBvbiB0aGUgc2FtZSBob3N0IGNvbnRhaW5lciwgeW91IG5lZWQgdG8gdW5tb3VudCB0aGUgcHJldmlvdXMgYXBwIGJ5IGNhbGxpbmcgYGFwcC51bm1vdW50KClgIGZpcnN0LiIpO3ZhciBhZT1YbihiLFApO3JldHVybiBhZS5hcHBDb250ZXh0PVQsdWU9PT0hMD91ZT0ic3ZnIjp1ZT09PSExJiYodWU9dm9pZCAwKSxULnJlbG9hZD0oKT0+e28oJGkoYWUpLFgsdWUpfSx5ZSYmbD9sKGFlLFgpOm8oYWUsWCx1ZSksej0hMCxILl9jb250YWluZXI9WCxYLl9fdnVlX2FwcF9fPUgsSC5faW5zdGFuY2U9YWUuY29tcG9uZW50LFlvKEgsWmwpLHJzKGFlLmNvbXBvbmVudCl8fGFlLmNvbXBvbmVudC5wcm94eX19LHVubW91bnQoKXt6PyhvKG51bGwsSC5fY29udGFpbmVyKSxILl9pbnN0YW5jZT1udWxsLEtvKEgpLGRlbGV0ZSBILl9jb250YWluZXIuX192dWVfYXBwX18pOk8oIkNhbm5vdCB1bm1vdW50IGFuIGFwcCB0aGF0IGlzIG5vdCBtb3VudGVkLiIpfSxwcm92aWRlKFgseWUpe3JldHVybiBYIGluIFQucHJvdmlkZXMmJk8oJ0FwcCBhbHJlYWR5IHByb3ZpZGVzIHByb3BlcnR5IHdpdGgga2V5ICInLmNvbmNhdChTdHJpbmcoWCksJyIuIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IHZhbHVlLicpKSxULnByb3ZpZGVzW1hdPXllLEh9LHJ1bldpdGhDb250ZXh0KFgpe3ZhciB5ZT1qbztqbz1IO3RyeXtyZXR1cm4gWCgpfWZpbmFsbHl7am89eWV9fX07cmV0dXJuIEh9fXZhciBqbz1udWxsO2Z1bmN0aW9uIEJuKG8sbCl7aWYoIXByKU8oInByb3ZpZGUoKSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBzZXR1cCgpLiIpO2Vsc2V7dmFyIHA9cHIucHJvdmlkZXMsYj1wci5wYXJlbnQmJnByLnBhcmVudC5wcm92aWRlcztiPT09cCYmKHA9cHIucHJvdmlkZXM9T2JqZWN0LmNyZWF0ZShiKSkscFtvXT1sLHByLnR5cGUubXBUeXBlPT09ImFwcCImJnByLmFwcENvbnRleHQuYXBwLnByb3ZpZGUobyxsKX19ZnVuY3Rpb24gR24obyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsYj1wcnx8Z247aWYoYnx8am8pe3ZhciBQPWI/Yi5wYXJlbnQ9PW51bGw/Yi52bm9kZS5hcHBDb250ZXh0JiZiLnZub2RlLmFwcENvbnRleHQucHJvdmlkZXM6Yi5wYXJlbnQucHJvdmlkZXM6am8uX2NvbnRleHQucHJvdmlkZXM7aWYoUCYmbyBpbiBQKXJldHVybiBQW29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gcCYmbS5pc0Z1bmN0aW9uKGwpP2wuY2FsbChiJiZiLnByb3h5KTpsO08oJ2luamVjdGlvbiAiJy5jb25jYXQoU3RyaW5nKG8pLCciIG5vdCBmb3VuZC4nKSl9ZWxzZSBPKCJpbmplY3QoKSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBzZXR1cCgpIG9yIGZ1bmN0aW9uYWwgY29tcG9uZW50cy4iKX1mdW5jdGlvbiBvYSgpe3JldHVybiEhKHByfHxnbnx8am8pfWZ1bmN0aW9uIEthKG8sbCxwKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsUD17fSxUPXt9O20uZGVmKFQsd2wsMSksby5wcm9wc0RlZmF1bHRzPU9iamVjdC5jcmVhdGUobnVsbCksem8obyxsLFAsVCk7Zm9yKHZhciB4IGluIG8ucHJvcHNPcHRpb25zWzBdKXggaW4gUHx8KFBbeF09dm9pZCAwKTt6cyhsfHx7fSxQLG8pLHA/by5wcm9wcz1iP1A6SS5zaGFsbG93UmVhY3RpdmUoUCk6by50eXBlLnByb3BzP28ucHJvcHM9UDpvLnByb3BzPVQsby5hdHRycz1UfWZ1bmN0aW9uIEphKG8pe2Zvcig7bzspe2lmKG8udHlwZS5fX2htcklkKXJldHVybiEwO289by5wYXJlbnR9fWZ1bmN0aW9uIGlvKG8sbCxwLGIpe3Zhcntwcm9wczpQLGF0dHJzOlQsdm5vZGU6e3BhdGNoRmxhZzp4fX09byx6PUkudG9SYXcoUCksW0hdPW8ucHJvcHNPcHRpb25zLFg9ITE7aWYoIUphKG8pJiYoYnx8eD4wKSYmISh4JjE2KSl7aWYoeCY4KWZvcih2YXIgeWU9by52bm9kZS5keW5hbWljUHJvcHMsdWU9MDt1ZTx5ZS5sZW5ndGg7dWUrKyl7dmFyIGFlPXllW3VlXTtpZighdm8oby5lbWl0c09wdGlvbnMsYWUpKXt2YXIga2U9bFthZV07aWYoSClpZihtLmhhc093bihULGFlKSlrZSE9PVRbYWVdJiYoVFthZV09a2UsWD0hMCk7ZWxzZXt2YXIgTWU9bS5jYW1lbGl6ZShhZSk7UFtNZV09WHIoSCx6LE1lLGtlLG8sITEpfWVsc2Uga2UhPT1UW2FlXSYmKFRbYWVdPWtlLFg9ITApfX19ZWxzZXt6byhvLGwsUCxUKSYmKFg9ITApO3ZhciB3dDtmb3IodmFyIHV0IGluIHopKCFsfHwhbS5oYXNPd24obCx1dCkmJigod3Q9bS5oeXBoZW5hdGUodXQpKT09PXV0fHwhbS5oYXNPd24obCx3dCkpKSYmKEg/cCYmKHBbdXRdIT09dm9pZCAwfHxwW3d0XSE9PXZvaWQgMCkmJihQW3V0XT1YcihILHosdXQsdm9pZCAwLG8sITApKTpkZWxldGUgUFt1dF0pO2lmKFQhPT16KWZvcih2YXIga3QgaW4gVCkoIWx8fCFtLmhhc093bihsLGt0KSYmITApJiYoZGVsZXRlIFRba3RdLFg9ITApfVgmJkkudHJpZ2dlcihvLCJzZXQiLCIkYXR0cnMiKSx6cyhsfHx7fSxQLG8pfWZ1bmN0aW9uIHpvKG8sbCxwLGIpe3ZhcltQLFRdPW8ucHJvcHNPcHRpb25zLHg9ITEsejtpZihsKXtmb3IodmFyIEggaW4gbClpZighbS5pc1Jlc2VydmVkUHJvcChIKSl7dmFyIFg9bFtIXSx5ZT12b2lkIDA7UCYmbS5oYXNPd24oUCx5ZT1tLmNhbWVsaXplKEgpKT8hVHx8IVQuaW5jbHVkZXMoeWUpP3BbeWVdPVg6KHp8fCh6PXt9KSlbeWVdPVg6dm8oby5lbWl0c09wdGlvbnMsSCl8fCghKEggaW4gYil8fFghPT1iW0hdKSYmKGJbSF09WCx4PSEwKX19aWYoVClmb3IodmFyIHVlPUkudG9SYXcocCksYWU9enx8bS5FTVBUWV9PQkosa2U9MDtrZTxULmxlbmd0aDtrZSsrKXt2YXIgTWU9VFtrZV07cFtNZV09WHIoUCx1ZSxNZSxhZVtNZV0sbywhbS5oYXNPd24oYWUsTWUpKX1yZXR1cm4geH1mdW5jdGlvbiBYcihvLGwscCxiLFAsVCl7dmFyIHg9b1twXTtpZih4IT1udWxsKXt2YXIgej1tLmhhc093bih4LCJkZWZhdWx0Iik7aWYoeiYmYj09PXZvaWQgMCl7dmFyIEg9eC5kZWZhdWx0O2lmKHgudHlwZSE9PUZ1bmN0aW9uJiYheC5za2lwRmFjdG9yeSYmbS5pc0Z1bmN0aW9uKEgpKXt2YXJ7cHJvcHNEZWZhdWx0czpYfT1QO2lmKHAgaW4gWCliPVhbcF07ZWxzZXt2YXIgeWU9R3IoUCk7Yj1YW3BdPUguY2FsbChudWxsLGwpLHllKCl9fWVsc2UgYj1IfXhbMF0mJihUJiYhej9iPSExOnhbMV0mJihiPT09IiJ8fGI9PT1tLmh5cGhlbmF0ZShwKSkmJihiPSEwKSl9cmV0dXJuIGJ9ZnVuY3Rpb24gJHMobyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsYj1sLnByb3BzQ2FjaGUsUD1iLmdldChvKTtpZihQKXJldHVybiBQO3ZhciBUPW8ucHJvcHMseD17fSx6PVtdLEg9ITE7aWYoIW0uaXNGdW5jdGlvbihvKSl7dmFyIFg9ZmU9PntIPSEwO3ZhcltJZSxOZV09JHMoZmUsbCwhMCk7bS5leHRlbmQoeCxJZSksTmUmJnoucHVzaCguLi5OZSl9OyFwJiZsLm1peGlucy5sZW5ndGgmJmwubWl4aW5zLmZvckVhY2goWCksby5leHRlbmRzJiZYKG8uZXh0ZW5kcyksby5taXhpbnMmJm8ubWl4aW5zLmZvckVhY2goWCl9aWYoIVQmJiFIKXJldHVybiBtLmlzT2JqZWN0KG8pJiZiLnNldChvLG0uRU1QVFlfQVJSKSxtLkVNUFRZX0FSUjtpZihtLmlzQXJyYXkoVCkpZm9yKHZhciB5ZT0wO3llPFQubGVuZ3RoO3llKyspe20uaXNTdHJpbmcoVFt5ZV0pfHxPKCJwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguIixUW3llXSk7dmFyIHVlPW0uY2FtZWxpemUoVFt5ZV0pO21sKHVlKSYmKHhbdWVdPW0uRU1QVFlfT0JKKX1lbHNlIGlmKFQpe20uaXNPYmplY3QoVCl8fE8oImludmFsaWQgcHJvcHMgb3B0aW9ucyIsVCk7Zm9yKHZhciBhZSBpbiBUKXt2YXIga2U9bS5jYW1lbGl6ZShhZSk7aWYobWwoa2UpKXt2YXIgTWU9VFthZV0sd3Q9eFtrZV09bS5pc0FycmF5KE1lKXx8bS5pc0Z1bmN0aW9uKE1lKT97dHlwZTpNZX06bS5leHRlbmQoe30sTWUpO2lmKHd0KXt2YXIgdXQ9X2woQm9vbGVhbix3dC50eXBlKSxrdD1fbChTdHJpbmcsd3QudHlwZSk7d3RbMF09dXQ+LTEsd3RbMV09a3Q8MHx8dXQ8a3QsKHV0Pi0xfHxtLmhhc093bih3dCwiZGVmYXVsdCIpKSYmei5wdXNoKGtlKX19fX12YXIgUnQ9W3gsel07cmV0dXJuIG0uaXNPYmplY3QobykmJmIuc2V0KG8sUnQpLFJ0fWZ1bmN0aW9uIG1sKG8pe3JldHVybiBvWzBdIT09IiQiJiYhbS5pc1Jlc2VydmVkUHJvcChvKT8hMDooTygnSW52YWxpZCBwcm9wIG5hbWU6ICInLmNvbmNhdChvLCciIGlzIGEgcmVzZXJ2ZWQgcHJvcGVydHkuJykpLCExKX1mdW5jdGlvbiBaYShvKXtpZihvPT09bnVsbClyZXR1cm4ibnVsbCI7aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpcmV0dXJuIG8ubmFtZXx8IiI7aWYodHlwZW9mIG89PSJvYmplY3QiKXt2YXIgbD1vLmNvbnN0cnVjdG9yJiZvLmNvbnN0cnVjdG9yLm5hbWU7cmV0dXJuIGx8fCIifXJldHVybiIifWZ1bmN0aW9uIGpzKG8sbCl7cmV0dXJuIFphKG8pPT09WmEobCl9ZnVuY3Rpb24gX2wobyxsKXtyZXR1cm4gbS5pc0FycmF5KGwpP2wuZmluZEluZGV4KHA9PmpzKHAsbykpOm0uaXNGdW5jdGlvbihsKSYmanMobCxvKT8wOi0xfWZ1bmN0aW9uIHpzKG8sbCxwKXt2YXIgYj1JLnRvUmF3KGwpLFA9cC5wcm9wc09wdGlvbnNbMF07Zm9yKHZhciBUIGluIFApe3ZhciB4PVBbVF07eCE9bnVsbCYmTGwoVCxiW1RdLHgsSS5zaGFsbG93UmVhZG9ubHkoYiksIW0uaGFzT3duKG8sVCkmJiFtLmhhc093bihvLG0uaHlwaGVuYXRlKFQpKSl9fWZ1bmN0aW9uIExsKG8sbCxwLGIsUCl7dmFye3R5cGU6VCxyZXF1aXJlZDp4LHZhbGlkYXRvcjp6LHNraXBDaGVjazpIfT1wO2lmKHgmJlApe08oJ01pc3NpbmcgcmVxdWlyZWQgcHJvcDogIicrbysnIicpO3JldHVybn1pZighKGw9PW51bGwmJiF4KSl7aWYoVCE9bnVsbCYmVCE9PSEwJiYhSCl7Zm9yKHZhciBYPSExLHllPW0uaXNBcnJheShUKT9UOltUXSx1ZT1bXSxhZT0wO2FlPHllLmxlbmd0aCYmIVg7YWUrKyl7dmFye3ZhbGlkOmtlLGV4cGVjdGVkVHlwZTpNZX09R3MobCx5ZVthZV0pO3VlLnB1c2goTWV8fCIiKSxYPWtlfWlmKCFYKXtPKERsKG8sbCx1ZSkpO3JldHVybn19eiYmIXoobCxiKSYmTygnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCAiJytvKyciLicpfX12YXIgV3M9bS5tYWtlTWFwKCJTdHJpbmcsTnVtYmVyLEJvb2xlYW4sRnVuY3Rpb24sU3ltYm9sLEJpZ0ludCIpO2Z1bmN0aW9uIEdzKG8sbCl7dmFyIHAsYj1aYShsKTtpZihXcyhiKSl7dmFyIFA9dHlwZW9mIG87cD1QPT09Yi50b0xvd2VyQ2FzZSgpLCFwJiZQPT09Im9iamVjdCImJihwPW8gaW5zdGFuY2VvZiBsKX1lbHNlIGI9PT0iT2JqZWN0Ij9wPW0uaXNPYmplY3Qobyk6Yj09PSJBcnJheSI/cD1tLmlzQXJyYXkobyk6Yj09PSJudWxsIj9wPW89PT1udWxsOnA9byBpbnN0YW5jZW9mIGw7cmV0dXJue3ZhbGlkOnAsZXhwZWN0ZWRUeXBlOmJ9fWZ1bmN0aW9uIERsKG8sbCxwKXtpZihwLmxlbmd0aD09PTApcmV0dXJuJ1Byb3AgdHlwZSBbXSBmb3IgcHJvcCAiJy5jb25jYXQobyxgIiB3b24ndCBtYXRjaCBhbnl0aGluZy4gRGlkIHlvdSBtZWFuIHRvIHVzZSB0eXBlIEFycmF5IGluc3RlYWQ/YCk7dmFyIGI9J0ludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgIicuY29uY2F0KG8sJyIuIEV4cGVjdGVkICcpLmNvbmNhdChwLm1hcChtLmNhcGl0YWxpemUpLmpvaW4oIiB8ICIpKSxQPXBbMF0sVD1tLnRvUmF3VHlwZShsKSx4PXFzKGwsUCksej1xcyhsLFQpO3JldHVybiBwLmxlbmd0aD09PTEmJmJpKFApJiYhWGEoUCxUKSYmKGIrPSIgd2l0aCB2YWx1ZSAiLmNvbmNhdCh4KSksYis9IiwgZ290ICIuY29uY2F0KFQsIiAiKSxiaShUKSYmKGIrPSJ3aXRoIHZhbHVlICIuY29uY2F0KHosIi4iKSksYn1mdW5jdGlvbiBxcyhvLGwpe3JldHVybiBsPT09IlN0cmluZyI/JyInLmNvbmNhdChvLCciJyk6bD09PSJOdW1iZXIiPyIiLmNvbmNhdChOdW1iZXIobykpOiIiLmNvbmNhdChvKX1mdW5jdGlvbiBiaShvKXt2YXIgbD1bInN0cmluZyIsIm51bWJlciIsImJvb2xlYW4iXTtyZXR1cm4gbC5zb21lKHA9Pm8udG9Mb3dlckNhc2UoKT09PXApfWZ1bmN0aW9uIFhhKCl7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkobykscD0wO3A8bztwKyspbFtwXT1hcmd1bWVudHNbcF07cmV0dXJuIGwuc29tZShiPT5iLnRvTG93ZXJDYXNlKCk9PT0iYm9vbGVhbiIpfXZhciB5cz1vPT5vWzBdPT09Il8ifHxvPT09IiRzdGFibGUiLEVzPW89Pm0uaXNBcnJheShvKT9vLm1hcChJaSk6W0lpKG8pXSxWaT0obyxsLHApPT57aWYobC5fbilyZXR1cm4gbDt2YXIgYj0kdChmdW5jdGlvbigpe3JldHVybiBwciYmKCFwfHxwLnJvb3Q9PT1wci5yb290KSYmTygnU2xvdCAiJy5jb25jYXQobywnIiBpbnZva2VkIG91dHNpZGUgb2YgdGhlIHJlbmRlciBmdW5jdGlvbjogdGhpcyB3aWxsIG5vdCB0cmFjayBkZXBlbmRlbmNpZXMgdXNlZCBpbiB0aGUgc2xvdC4gSW52b2tlIHRoZSBzbG90IGZ1bmN0aW9uIGluc2lkZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuJykpLEVzKGwoLi4uYXJndW1lbnRzKSl9LHApO3JldHVybiBiLl9jPSExLGJ9LFNzPShvLGwscCk9Pnt2YXIgYj1vLl9jdHg7Zm9yKHZhciBQIGluIG8paWYoIXlzKFApKXt2YXIgVD1vW1BdO20uaXNGdW5jdGlvbihUKT9sW1BdPVZpKFAsVCxiKTpUIT1udWxsJiZmdW5jdGlvbigpe08oJ05vbi1mdW5jdGlvbiB2YWx1ZSBlbmNvdW50ZXJlZCBmb3Igc2xvdCAiJy5jb25jYXQoUCwnIi4gUHJlZmVyIGZ1bmN0aW9uIHNsb3RzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuJykpO3ZhciB4PUVzKFQpO2xbUF09KCk9Pnh9KCl9fSxRYT0obyxsKT0+e3lvKG8udm5vZGUpfHxPKCJOb24tZnVuY3Rpb24gdmFsdWUgZW5jb3VudGVyZWQgZm9yIGRlZmF1bHQgc2xvdC4gUHJlZmVyIGZ1bmN0aW9uIHNsb3RzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuIik7dmFyIHA9RXMobCk7by5zbG90cy5kZWZhdWx0PSgpPT5wfSxkYz0obyxsKT0+e2lmKG8udm5vZGUuc2hhcGVGbGFnJjMyKXt2YXIgcD1sLl87cD8oby5zbG90cz1JLnRvUmF3KGwpLG0uZGVmKGwsIl8iLHApKTpTcyhsLG8uc2xvdHM9e30pfWVsc2Ugby5zbG90cz17fSxsJiZRYShvLGwpO20uZGVmKG8uc2xvdHMsd2wsMSl9LEdlPShvLGwscCk9Pnt2YXJ7dm5vZGU6YixzbG90czpQfT1vLFQ9ITAseD1tLkVNUFRZX09CSjtpZihiLnNoYXBlRmxhZyYzMil7dmFyIHo9bC5fO3o/Z2k/KG0uZXh0ZW5kKFAsbCksSS50cmlnZ2VyKG8sInNldCIsIiRzbG90cyIpKTpwJiZ6PT09MT9UPSExOihtLmV4dGVuZChQLGwpLCFwJiZ6PT09MSYmZGVsZXRlIFAuXyk6KFQ9IWwuJHN0YWJsZSxTcyhsLFApKSx4PWx9ZWxzZSBsJiYoUWEobyxsKSx4PXtkZWZhdWx0OjF9KTtpZihUKWZvcih2YXIgSCBpbiBQKSF5cyhIKSYmeFtIXT09bnVsbCYmZGVsZXRlIFBbSF19O2Z1bmN0aW9uIEh0KG8sbCxwLGIpe3ZhciBQPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMTtpZihtLmlzQXJyYXkobykpe28uZm9yRWFjaCgod3QsdXQpPT5IdCh3dCxsJiYobS5pc0FycmF5KGwpP2xbdXRdOmwpLHAsYixQKSk7cmV0dXJufWlmKCEoWm4oYikmJiFQKSl7dmFyIFQ9Yi5zaGFwZUZsYWcmND9ycyhiLmNvbXBvbmVudCl8fGIuY29tcG9uZW50LnByb3h5OmIuZWwseD1QP251bGw6VCx7aTp6LHI6SH09bztpZigheil7TygiTWlzc2luZyByZWYgb3duZXIgY29udGV4dC4gcmVmIGNhbm5vdCBiZSB1c2VkIG9uIGhvaXN0ZWQgdm5vZGVzLiBBIHZub2RlIHdpdGggcmVmIG11c3QgYmUgY3JlYXRlZCBpbnNpZGUgdGhlIHJlbmRlciBmdW5jdGlvbi4iKTtyZXR1cm59dmFyIFg9bCYmbC5yLHllPXoucmVmcz09PW0uRU1QVFlfT0JKP3oucmVmcz17fTp6LnJlZnMsdWU9ei5zZXR1cFN0YXRlO2lmKFghPW51bGwmJlghPT1IJiYobS5pc1N0cmluZyhYKT8oeWVbWF09bnVsbCxtLmhhc093bih1ZSxYKSYmKHVlW1hdPW51bGwpKTpJLmlzUmVmKFgpJiYoWC52YWx1ZT1udWxsKSksbS5pc0Z1bmN0aW9uKEgpKXNuKEgseiwxMixbeCx5ZV0pO2Vsc2V7dmFyIGFlPW0uaXNTdHJpbmcoSCksa2U9SS5pc1JlZihIKTtpZihhZXx8a2Upe3ZhciBNZT0oKT0+e2lmKG8uZil7dmFyIHd0PWFlP20uaGFzT3duKHVlLEgpP3VlW0hdOnllW0hdOkgudmFsdWU7UD9tLmlzQXJyYXkod3QpJiZtLnJlbW92ZSh3dCxUKTptLmlzQXJyYXkod3QpP3d0LmluY2x1ZGVzKFQpfHx3dC5wdXNoKFQpOmFlPyh5ZVtIXT1bVF0sbS5oYXNPd24odWUsSCkmJih1ZVtIXT15ZVtIXSkpOihILnZhbHVlPVtUXSxvLmsmJih5ZVtvLmtdPUgudmFsdWUpKX1lbHNlIGFlPyh5ZVtIXT14LG0uaGFzT3duKHVlLEgpJiYodWVbSF09eCkpOmtlPyhILnZhbHVlPXgsby5rJiYoeWVbby5rXT14KSk6TygiSW52YWxpZCB0ZW1wbGF0ZSByZWYgdHlwZToiLEgsIigiLmNvbmNhdCh0eXBlb2YgSCwiKSIpKX07eD8oTWUuaWQ9LTEsanIoTWUscCkpOk1lKCl9ZWxzZSBPKCJJbnZhbGlkIHRlbXBsYXRlIHJlZiB0eXBlOiIsSCwiKCIuY29uY2F0KHR5cGVvZiBILCIpIikpfX19dmFyIEl0PSExLHZuPW89Pm8ubmFtZXNwYWNlVVJJLmluY2x1ZGVzKCJzdmciKSYmby50YWdOYW1lIT09ImZvcmVpZ25PYmplY3QiLHFuPW89Pm8ubmFtZXNwYWNlVVJJLmluY2x1ZGVzKCJNYXRoTUwiKSxJcj1vPT57aWYodm4obykpcmV0dXJuInN2ZyI7aWYocW4obykpcmV0dXJuIm1hdGhtbCJ9LGFyPW89Pm8ubm9kZVR5cGU9PT04O2Z1bmN0aW9uIHlpKG8pe3ZhcnttdDpsLHAsbzp7cGF0Y2hQcm9wOmIsY3JlYXRlVGV4dDpQLG5leHRTaWJsaW5nOlQscGFyZW50Tm9kZTp4LHJlbW92ZTp6LGluc2VydDpILGNyZWF0ZUNvbW1lbnQ6WH19PW8seWU9KGZlLEllKT0+e2lmKCFJZS5oYXNDaGlsZE5vZGVzKCkpe08oIkF0dGVtcHRpbmcgdG8gaHlkcmF0ZSBleGlzdGluZyBtYXJrdXAgYnV0IGNvbnRhaW5lciBpcyBlbXB0eS4gUGVyZm9ybWluZyBmdWxsIG1vdW50IGluc3RlYWQuIikscChudWxsLGZlLEllKSxxcigpLEllLl92bm9kZT1mZTtyZXR1cm59SXQ9ITEsdWUoSWUuZmlyc3RDaGlsZCxmZSxudWxsLG51bGwsbnVsbCkscXIoKSxJZS5fdm5vZGU9ZmUsSXQmJmNvbnNvbGUuZXJyb3IoIkh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuIil9LHVlPWZ1bmN0aW9uKGZlLEllLE5lLFhlLGN0KXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITEsYT1hcihmZSkmJmZlLmRhdGE9PT0iWyIsZj0oKT0+d3QoZmUsSWUsTmUsWGUsY3QsYSkse3R5cGU6aCxyZWY6QyxzaGFwZUZsYWc6UyxwYXRjaEZsYWc6a309SWUsVT1mZS5ub2RlVHlwZTtJZS5lbD1mZSwiX192bm9kZSJpbiBmZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGZlLCJfX3Zub2RlIix7dmFsdWU6SWUsZW51bWVyYWJsZTohMX0pLCJfX3Z1ZVBhcmVudENvbXBvbmVudCJpbiBmZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGZlLCJfX3Z1ZVBhcmVudENvbXBvbmVudCIse3ZhbHVlOk5lLGVudW1lcmFibGU6ITF9KSxrPT09LTImJihpPSExLEllLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXIgQj1udWxsO3N3aXRjaChoKXtjYXNlIE1uOlUhPT0zP0llLmNoaWxkcmVuPT09IiI/KEgoSWUuZWw9UCgiIikseChmZSksZmUpLEI9ZmUpOkI9ZigpOihmZS5kYXRhIT09SWUuY2hpbGRyZW4mJihJdD0hMCxPKCJIeWRyYXRpb24gdGV4dCBtaXNtYXRjaCBpbiIsZmUucGFyZW50Tm9kZSxgCiAgLSByZW5kZXJlZCBvbiBzZXJ2ZXI6IGAuY29uY2F0KEpTT04uc3RyaW5naWZ5KGZlLmRhdGEpLGAKICAtIGV4cGVjdGVkIG9uIGNsaWVudDogYCkuY29uY2F0KEpTT04uc3RyaW5naWZ5KEllLmNoaWxkcmVuKSkpLGZlLmRhdGE9SWUuY2hpbGRyZW4pLEI9VChmZSkpO2JyZWFrO2Nhc2UgTG46UnQoZmUpPyhCPVQoZmUpLGt0KEllLmVsPWZlLmNvbnRlbnQuZmlyc3RDaGlsZCxmZSxOZSkpOlUhPT04fHxhP0I9ZigpOkI9VChmZSk7YnJlYWs7Y2FzZSBEbjppZihhJiYoZmU9VChmZSksVT1mZS5ub2RlVHlwZSksVT09PTF8fFU9PT0zKXtCPWZlO2Zvcih2YXIgSz0hSWUuY2hpbGRyZW4ubGVuZ3RoLFE9MDtRPEllLnN0YXRpY0NvdW50O1ErKylLJiYoSWUuY2hpbGRyZW4rPUIubm9kZVR5cGU9PT0xP0Iub3V0ZXJIVE1MOkIuZGF0YSksUT09PUllLnN0YXRpY0NvdW50LTEmJihJZS5hbmNob3I9QiksQj1UKEIpO3JldHVybiBhP1QoQik6Qn1lbHNlIGYoKTticmVhaztjYXNlIG1yOmE/Qj1NZShmZSxJZSxOZSxYZSxjdCxpKTpCPWYoKTticmVhaztkZWZhdWx0OmlmKFMmMSkoVSE9PTF8fEllLnR5cGUudG9Mb3dlckNhc2UoKSE9PWZlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJiFSdChmZSk/Qj1mKCk6Qj1hZShmZSxJZSxOZSxYZSxjdCxpKTtlbHNlIGlmKFMmNil7SWUuc2xvdFNjb3BlSWRzPWN0O3ZhciBlZT14KGZlKTtpZihhP0I9dXQoZmUpOmFyKGZlKSYmZmUuZGF0YT09PSJ0ZWxlcG9ydCBzdGFydCI/Qj11dChmZSxmZS5kYXRhLCJ0ZWxlcG9ydCBlbmQiKTpCPVQoZmUpLGwoSWUsZWUsbnVsbCxOZSxYZSxJcihlZSksaSksWm4oSWUpKXt2YXIgWTthPyhZPVhuKG1yKSxZLmFuY2hvcj1CP0IucHJldmlvdXNTaWJsaW5nOmVlLmxhc3RDaGlsZCk6WT1mZS5ub2RlVHlwZT09PTM/V2woIiIpOlhuKCJkaXYiKSxZLmVsPWZlLEllLmNvbXBvbmVudC5zdWJUcmVlPVl9fWVsc2UgUyY2ND9VIT09OD9CPWYoKTpCPUllLnR5cGUuaHlkcmF0ZShmZSxJZSxOZSxYZSxjdCxpLG8sa2UpOlMmMTI4P0I9SWUudHlwZS5oeWRyYXRlKGZlLEllLE5lLFhlLElyKHgoZmUpKSxjdCxpLG8sdWUpOk8oIkludmFsaWQgSG9zdFZOb2RlIHR5cGU6IixoLCIoIi5jb25jYXQodHlwZW9mIGgsIikiKSl9cmV0dXJuIEMhPW51bGwmJkh0KEMsbnVsbCxYZSxJZSksQn0sYWU9KGZlLEllLE5lLFhlLGN0LGkpPT57aT1pfHwhIUllLmR5bmFtaWNDaGlsZHJlbjt2YXJ7dHlwZTphLHByb3BzOmYscGF0Y2hGbGFnOmgsc2hhcGVGbGFnOkMsZGlyczpTLHRyYW5zaXRpb246a309SWUsVT1hPT09ImlucHV0Inx8YT09PSJvcHRpb24iO3tTJiZGaShJZSxudWxsLE5lLCJjcmVhdGVkIik7dmFyIEI9ITE7aWYoUnQoZmUpKXtCPVVpKFhlLGspJiZOZSYmTmUudm5vZGUucHJvcHMmJk5lLnZub2RlLnByb3BzLmFwcGVhcjt2YXIgSz1mZS5jb250ZW50LmZpcnN0Q2hpbGQ7QiYmay5iZWZvcmVFbnRlcihLKSxrdChLLGZlLE5lKSxJZS5lbD1mZT1LfWlmKEMmMTYmJiEoZiYmKGYuaW5uZXJIVE1MfHxmLnRleHRDb250ZW50KSkpZm9yKHZhciBRPWtlKGZlLmZpcnN0Q2hpbGQsSWUsZmUsTmUsWGUsY3QsaSksZWU9ITE7UTspe0l0PSEwLGVlfHwoTygiSHlkcmF0aW9uIGNoaWxkcmVuIG1pc21hdGNoIG9uIixmZSxgClNlcnZlciByZW5kZXJlZCBlbGVtZW50IGNvbnRhaW5zIG1vcmUgY2hpbGQgbm9kZXMgdGhhbiBjbGllbnQgdmRvbS5gKSxlZT0hMCk7dmFyIFk9UTtRPVEubmV4dFNpYmxpbmcseihZKX1lbHNlIEMmOCYmZmUudGV4dENvbnRlbnQhPT1JZS5jaGlsZHJlbiYmKEl0PSEwLE8oIkh5ZHJhdGlvbiB0ZXh0IGNvbnRlbnQgbWlzbWF0Y2ggb24iLGZlLGAKICAtIHJlbmRlcmVkIG9uIHNlcnZlcjogYC5jb25jYXQoZmUudGV4dENvbnRlbnQsYAogIC0gZXhwZWN0ZWQgb24gY2xpZW50OiBgKS5jb25jYXQoSWUuY2hpbGRyZW4pKSxmZS50ZXh0Q29udGVudD1JZS5jaGlsZHJlbik7aWYoZilmb3IodmFyIHZlIGluIGYpYmwoZmUsdmUsZlt2ZV0sSWUsTmUpJiYoSXQ9ITApLChVJiYodmUuZW5kc1dpdGgoInZhbHVlIil8fHZlPT09ImluZGV0ZXJtaW5hdGUiKXx8bS5pc09uKHZlKSYmIW0uaXNSZXNlcnZlZFByb3AodmUpfHx2ZVswXT09PSIuIikmJmIoZmUsdmUsbnVsbCxmW3ZlXSx2b2lkIDAsdm9pZCAwLE5lKTt2YXIgVGU7KFRlPWYmJmYub25Wbm9kZUJlZm9yZU1vdW50KSYma2koVGUsTmUsSWUpLFMmJkZpKEllLG51bGwsTmUsImJlZm9yZU1vdW50IiksKChUZT1mJiZmLm9uVm5vZGVNb3VudGVkKXx8U3x8QikmJkRvKCgpPT57VGUmJmtpKFRlLE5lLEllKSxCJiZrLmVudGVyKGZlKSxTJiZGaShJZSxudWxsLE5lLCJtb3VudGVkIil9LFhlKX1yZXR1cm4gZmUubmV4dFNpYmxpbmd9LGtlPShmZSxJZSxOZSxYZSxjdCxpLGEpPT57YT1hfHwhIUllLmR5bmFtaWNDaGlsZHJlbjtmb3IodmFyIGY9SWUuY2hpbGRyZW4saD1mLmxlbmd0aCxDPSExLFM9MDtTPGg7UysrKXt2YXIgaz1hP2ZbU106ZltTXT1JaShmW1NdKTtpZihmZSlmZT11ZShmZSxrLFhlLGN0LGksYSk7ZWxzZXtpZihrLnR5cGU9PT1NbiYmIWsuY2hpbGRyZW4pY29udGludWU7SXQ9ITAsQ3x8KE8oIkh5ZHJhdGlvbiBjaGlsZHJlbiBtaXNtYXRjaCBvbiIsTmUsYApTZXJ2ZXIgcmVuZGVyZWQgZWxlbWVudCBjb250YWlucyBmZXdlciBjaGlsZCBub2RlcyB0aGFuIGNsaWVudCB2ZG9tLmApLEM9ITApLHAobnVsbCxrLE5lLG51bGwsWGUsY3QsSXIoTmUpLGkpfX1yZXR1cm4gZmV9LE1lPShmZSxJZSxOZSxYZSxjdCxpKT0+e3ZhcntzbG90U2NvcGVJZHM6YX09SWU7YSYmKGN0PWN0P2N0LmNvbmNhdChhKTphKTt2YXIgZj14KGZlKSxoPWtlKFQoZmUpLEllLGYsTmUsWGUsY3QsaSk7cmV0dXJuIGgmJmFyKGgpJiZoLmRhdGE9PT0iXSI/VChJZS5hbmNob3I9aCk6KEl0PSEwLEgoSWUuYW5jaG9yPVgoIl0iKSxmLGgpLGgpfSx3dD0oZmUsSWUsTmUsWGUsY3QsaSk9PntpZihJdD0hMCxPKGBIeWRyYXRpb24gbm9kZSBtaXNtYXRjaDoKLSByZW5kZXJlZCBvbiBzZXJ2ZXI6YCxmZSxmZS5ub2RlVHlwZT09PTM/Iih0ZXh0KSI6YXIoZmUpJiZmZS5kYXRhPT09IlsiPyIoc3RhcnQgb2YgZnJhZ21lbnQpIjoiIixgCi0gZXhwZWN0ZWQgb24gY2xpZW50OmAsSWUudHlwZSksSWUuZWw9bnVsbCxpKWZvcih2YXIgYT11dChmZSk7Oyl7dmFyIGY9VChmZSk7aWYoZiYmZiE9PWEpeihmKTtlbHNlIGJyZWFrfXZhciBoPVQoZmUpLEM9eChmZSk7cmV0dXJuIHooZmUpLHAobnVsbCxJZSxDLGgsTmUsWGUsSXIoQyksY3QpLGh9LHV0PWZ1bmN0aW9uKGZlKXtmb3IodmFyIEllPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXToiWyIsTmU9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiJdIixYZT0wO2ZlOylpZihmZT1UKGZlKSxmZSYmYXIoZmUpJiYoZmUuZGF0YT09PUllJiZYZSsrLGZlLmRhdGE9PT1OZSkpe2lmKFhlPT09MClyZXR1cm4gVChmZSk7WGUtLX1yZXR1cm4gZmV9LGt0PShmZSxJZSxOZSk9Pnt2YXIgWGU9SWUucGFyZW50Tm9kZTtYZSYmWGUucmVwbGFjZUNoaWxkKGZlLEllKTtmb3IodmFyIGN0PU5lO2N0OyljdC52bm9kZS5lbD09PUllJiYoY3Qudm5vZGUuZWw9Y3Quc3ViVHJlZS5lbD1mZSksY3Q9Y3QucGFyZW50fSxSdD1mZT0+ZmUubm9kZVR5cGU9PT0xJiZmZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT0idGVtcGxhdGUiO3JldHVyblt5ZSx1ZV19ZnVuY3Rpb24gYmwobyxsLHAsYixQKXt2YXIgVCx4LHosSCxYO2lmKGw9PT0iY2xhc3MiKUg9by5nZXRBdHRyaWJ1dGUoImNsYXNzIiksWD1tLm5vcm1hbGl6ZUNsYXNzKHApLHlsKEZsKEh8fCIiKSxGbChYKSl8fCh4PXo9ImNsYXNzIik7ZWxzZSBpZihsPT09InN0eWxlIil7SD1vLmdldEF0dHJpYnV0ZSgic3R5bGUiKSxYPW0uaXNTdHJpbmcocCk/cDptLnN0cmluZ2lmeVN0eWxlKG0ubm9ybWFsaXplU3R5bGUocCkpO3ZhciB5ZT1wYyhIKSx1ZT1wYyhYKTtpZihiLmRpcnMpZm9yKHZhcntkaXI6YWUsdmFsdWU6a2V9b2YgYi5kaXJzKWFlLm5hbWU9PT0ic2hvdyImJiFrZSYmdWUuc2V0KCJkaXNwbGF5Iiwibm9uZSIpO3ZhciBNZT1QPT1udWxsP3ZvaWQgMDpQLnN1YlRyZWU7aWYoYj09PU1lfHwoTWU9PW51bGw/dm9pZCAwOk1lLnR5cGUpPT09bXImJk1lLmNoaWxkcmVuLmluY2x1ZGVzKGIpKXt2YXIgd3Q9KFQ9UD09bnVsbD92b2lkIDA6UC5nZXRDc3NWYXJzKT09bnVsbD92b2lkIDA6VC5jYWxsKFApO2Zvcih2YXIgdXQgaW4gd3QpdWUuc2V0KCItLSIuY29uY2F0KHV0KSxTdHJpbmcod3RbdXRdKSl9V2MoeWUsdWUpfHwoeD16PSJzdHlsZSIpfWVsc2UobyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQmJm0uaXNLbm93blN2Z0F0dHIobCl8fG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmKG0uaXNCb29sZWFuQXR0cihsKXx8bS5pc0tub3duSHRtbEF0dHIobCkpKSYmKG0uaXNCb29sZWFuQXR0cihsKT8oSD1vLmhhc0F0dHJpYnV0ZShsKSxYPW0uaW5jbHVkZUJvb2xlYW5BdHRyKHApKTpwPT1udWxsPyhIPW8uaGFzQXR0cmlidXRlKGwpLFg9ITEpOihvLmhhc0F0dHJpYnV0ZShsKT9IPW8uZ2V0QXR0cmlidXRlKGwpOmw9PT0idmFsdWUiJiZvLnRhZ05hbWU9PT0iVEVYVEFSRUEiP0g9by52YWx1ZTpIPSExLFg9bS5pc1JlbmRlcmFibGVBdHRyVmFsdWUocCk/U3RyaW5nKHApOiExKSxIIT09WCYmKHg9ImF0dHJpYnV0ZSIsej1sKSk7aWYoeCl7dmFyIGt0PUllPT5JZT09PSExPyIobm90IHJlbmRlcmVkKSI6IiIuY29uY2F0KHosJz0iJykuY29uY2F0KEllLCciJyksUnQ9Ikh5ZHJhdGlvbiAiLmNvbmNhdCh4LCIgbWlzbWF0Y2ggb24iKSxmZT1gCiAgLSByZW5kZXJlZCBvbiBzZXJ2ZXI6IGAuY29uY2F0KGt0KEgpLGAKICAtIGV4cGVjdGVkIG9uIGNsaWVudDogYCkuY29uY2F0KGt0KFgpLGAKICBOb3RlOiB0aGlzIG1pc21hdGNoIGlzIGNoZWNrLW9ubHkuIFRoZSBET00gd2lsbCBub3QgYmUgcmVjdGlmaWVkIGluIHByb2R1Y3Rpb24gZHVlIHRvIHBlcmZvcm1hbmNlIG92ZXJoZWFkLgogIFlvdSBzaG91bGQgZml4IHRoZSBzb3VyY2Ugb2YgdGhlIG1pc21hdGNoLmApO3JldHVybiBPKFJ0LG8sZmUpLCEwfXJldHVybiExfWZ1bmN0aW9uIEZsKG8pe3JldHVybiBuZXcgU2V0KG8udHJpbSgpLnNwbGl0KC9ccysvKSl9ZnVuY3Rpb24geWwobyxsKXtpZihvLnNpemUhPT1sLnNpemUpcmV0dXJuITE7Zm9yKHZhciBwIG9mIG8paWYoIWwuaGFzKHApKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHBjKG8pe3ZhciBsPW5ldyBNYXA7Zm9yKHZhciBwIG9mIG8uc3BsaXQoIjsiKSl7dmFyW2IsUF09cC5zcGxpdCgiOiIpO2I9Yj09bnVsbD92b2lkIDA6Yi50cmltKCksUD1QPT1udWxsP3ZvaWQgMDpQLnRyaW0oKSxiJiZQJiZsLnNldChiLFApfXJldHVybiBsfWZ1bmN0aW9uIFdjKG8sbCl7aWYoby5zaXplIT09bC5zaXplKXJldHVybiExO2Zvcih2YXJbcCxiXW9mIG8paWYoYiE9PWwuZ2V0KHApKXJldHVybiExO3JldHVybiEwfXZhciBhYSxDbztmdW5jdGlvbiBsaShvLGwpe28uYXBwQ29udGV4dC5jb25maWcucGVyZm9ybWFuY2UmJkFvKCkmJkNvLm1hcmsoInZ1ZS0iLmNvbmNhdChsLCItIikuY29uY2F0KG8udWlkKSksZ28obyxsLEFvKCk/Q28ubm93KCk6RGF0ZS5ub3coKSl9ZnVuY3Rpb24gY2kobyxsKXtpZihvLmFwcENvbnRleHQuY29uZmlnLnBlcmZvcm1hbmNlJiZBbygpKXt2YXIgcD0idnVlLSIuY29uY2F0KGwsIi0iKS5jb25jYXQoby51aWQpLGI9cCsiOmVuZCI7Q28ubWFyayhiKSxDby5tZWFzdXJlKCI8Ii5jb25jYXQoaXMobyxvLnR5cGUpLCI+ICIpLmNvbmNhdChsKSxwLGIpLENvLmNsZWFyTWFya3MocCksQ28uY2xlYXJNYXJrcyhiKX1PYShvLGwsQW8oKT9Dby5ub3coKTpEYXRlLm5vdygpKX1mdW5jdGlvbiBBbygpe3JldHVybiBhYSE9PXZvaWQgMHx8KHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cucGVyZm9ybWFuY2U/KGFhPSEwLENvPXdpbmRvdy5wZXJmb3JtYW5jZSk6YWE9ITEpLGFhfWZ1bmN0aW9uIFZsKCl7dmFyIG89W107aWYoby5sZW5ndGgpe3ZhciBsPW8ubGVuZ3RoPjE7Y29uc29sZS53YXJuKCJGZWF0dXJlIGZsYWciLmNvbmNhdChsPyJzIjoiIiwiICIpLmNvbmNhdChvLmpvaW4oIiwgIiksIiAiKS5jb25jYXQobD8iYXJlIjoiaXMiLGAgbm90IGV4cGxpY2l0bHkgZGVmaW5lZC4gWW91IGFyZSBydW5uaW5nIHRoZSBlc20tYnVuZGxlciBidWlsZCBvZiBWdWUsIHdoaWNoIGV4cGVjdHMgdGhlc2UgY29tcGlsZS10aW1lIGZlYXR1cmUgZmxhZ3MgdG8gYmUgZ2xvYmFsbHkgaW5qZWN0ZWQgdmlhIHRoZSBidW5kbGVyIGNvbmZpZyBpbiBvcmRlciB0byBnZXQgYmV0dGVyIHRyZWUtc2hha2luZyBpbiB0aGUgcHJvZHVjdGlvbiBidW5kbGUuCgpGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9saW5rLnZ1ZWpzLm9yZy9mZWF0dXJlLWZsYWdzLmApKX19dmFyIGpyPURvO2Z1bmN0aW9uIE9yKG8pe3JldHVybiB3cyhvKX1mdW5jdGlvbiBZcyhvKXtyZXR1cm4gd3Mobyx5aSl9ZnVuY3Rpb24gd3MobyxsKXtWbCgpO3ZhciBwPW0uZ2V0R2xvYmFsVGhpcygpO3AuX19WVUVfXz0hMCx2aShwLl9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX18scCk7dmFye2luc2VydDpiLHJlbW92ZTpQLHBhdGNoUHJvcDpULGZvcmNlUGF0Y2hQcm9wOngsY3JlYXRlRWxlbWVudDp6LGNyZWF0ZVRleHQ6SCxjcmVhdGVDb21tZW50Olgsc2V0VGV4dDp5ZSxzZXRFbGVtZW50VGV4dDp1ZSxwYXJlbnROb2RlOmFlLG5leHRTaWJsaW5nOmtlLHNldFNjb3BlSWQ6TWU9bS5OT09QLGluc2VydFN0YXRpY0NvbnRlbnQ6d3R9PW8sdXQ9ZnVuY3Rpb24oTCxHLHRlKXt2YXIgYmU9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGwsU2U9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsQ2U9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOm51bGwsbnQ9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0hPT12b2lkIDA/YXJndW1lbnRzWzZdOnZvaWQgMCxXZT1hcmd1bWVudHMubGVuZ3RoPjcmJmFyZ3VtZW50c1s3XSE9PXZvaWQgMD9hcmd1bWVudHNbN106bnVsbCxRZT1hcmd1bWVudHMubGVuZ3RoPjgmJmFyZ3VtZW50c1s4XSE9PXZvaWQgMD9hcmd1bWVudHNbOF06Z2k/ITE6ISFHLmR5bmFtaWNDaGlsZHJlbjtpZihMIT09Ryl7TCYmIVdyKEwsRykmJihiZT1fZShMKSxxZShMLFNlLENlLCEwKSxMPW51bGwpLEcucGF0Y2hGbGFnPT09LTImJihRZT0hMSxHLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXJ7dHlwZTpWZSxyZWY6Q3Qsc2hhcGVGbGFnOmp0fT1HO3N3aXRjaChWZSl7Y2FzZSBNbjprdChMLEcsdGUsYmUpO2JyZWFrO2Nhc2UgTG46UnQoTCxHLHRlLGJlKTticmVhaztjYXNlIERuOkw9PW51bGw/ZmUoRyx0ZSxiZSxudCk6SWUoTCxHLHRlLG50KTticmVhaztjYXNlIG1yOmsoTCxHLHRlLGJlLFNlLENlLG50LFdlLFFlKTticmVhaztkZWZhdWx0Omp0JjE/Y3QoTCxHLHRlLGJlLFNlLENlLG50LFdlLFFlKTpqdCY2P1UoTCxHLHRlLGJlLFNlLENlLG50LFdlLFFlKTpqdCY2NHx8anQmMTI4P1ZlLnByb2Nlc3MoTCxHLHRlLGJlLFNlLENlLG50LFdlLFFlLHR0KTpPKCJJbnZhbGlkIFZOb2RlIHR5cGU6IixWZSwiKCIuY29uY2F0KHR5cGVvZiBWZSwiKSIpKX1DdCE9bnVsbCYmU2UmJkh0KEN0LEwmJkwucmVmLENlLEd8fEwsIUcpfX0sa3Q9KEwsRyx0ZSxiZSk9PntpZihMPT1udWxsKWIoRy5lbD1IKEcuY2hpbGRyZW4pLHRlLGJlKTtlbHNle3ZhciBTZT1HLmVsPUwuZWw7Ry5jaGlsZHJlbiE9PUwuY2hpbGRyZW4mJnllKFNlLEcuY2hpbGRyZW4pfX0sUnQ9KEwsRyx0ZSxiZSk9PntMPT1udWxsP2IoRy5lbD1YKEcuY2hpbGRyZW58fCIiKSx0ZSxiZSk6Ry5lbD1MLmVsfSxmZT0oTCxHLHRlLGJlKT0+e1tMLmVsLEwuYW5jaG9yXT13dChMLmNoaWxkcmVuLEcsdGUsYmUsTC5lbCxMLmFuY2hvcil9LEllPShMLEcsdGUsYmUpPT57aWYoRy5jaGlsZHJlbiE9PUwuY2hpbGRyZW4pe3ZhciBTZT1rZShMLmFuY2hvcik7WGUoTCksW0cuZWwsRy5hbmNob3JdPXd0KEcuY2hpbGRyZW4sdGUsU2UsYmUpfWVsc2UgRy5lbD1MLmVsLEcuYW5jaG9yPUwuYW5jaG9yfSxOZT0oTCxHLHRlKT0+e2Zvcih2YXJ7ZWw6YmUsYW5jaG9yOlNlfT1MLENlO2JlJiZiZSE9PVNlOylDZT1rZShiZSksYihiZSxHLHRlKSxiZT1DZTtiKFNlLEcsdGUpfSxYZT1MPT57Zm9yKHZhcntlbDpHLGFuY2hvcjp0ZX09TCxiZTtHJiZHIT09dGU7KWJlPWtlKEcpLFAoRyksRz1iZTtQKHRlKX0sY3Q9KEwsRyx0ZSxiZSxTZSxDZSxudCxXZSxRZSk9PntHLnR5cGU9PT0ic3ZnIj9udD0ic3ZnIjpHLnR5cGU9PT0ibWF0aCImJihudD0ibWF0aG1sIiksTD09bnVsbD9pKEcsdGUsYmUsU2UsQ2UsbnQsV2UsUWUpOmgoTCxHLFNlLENlLG50LFdlLFFlKX0saT0oTCxHLHRlLGJlLFNlLENlLG50LFdlKT0+e3ZhciBRZSxWZSx7cHJvcHM6Q3Qsc2hhcGVGbGFnOmp0LHRyYW5zaXRpb246VXQsZGlyczpCdH09TDtpZihRZT1MLmVsPXooTC50eXBlLENlLEN0JiZDdC5pcyxDdCksanQmOD91ZShRZSxMLmNoaWxkcmVuKTpqdCYxNiYmZihMLmNoaWxkcmVuLFFlLG51bGwsYmUsU2UsS3MoTCxDZSksbnQsV2UpLEJ0JiZGaShMLG51bGwsYmUsImNyZWF0ZWQiKSxhKFFlLEwsTC5zY29wZUlkLG50LGJlKSxDdCl7Zm9yKHZhciBsciBpbiBDdClsciE9PSJ2YWx1ZSImJiFtLmlzUmVzZXJ2ZWRQcm9wKGxyKSYmVChRZSxscixudWxsLEN0W2xyXSxDZSxMLmNoaWxkcmVuLGJlLFNlLGhlLEwuaG9zdEluc3RhbmNlKTsidmFsdWUiaW4gQ3QmJlQoUWUsInZhbHVlIixudWxsLEN0LnZhbHVlLENlLFtdLGJlLG51bGwsdm9pZCAwLEwuaG9zdEluc3RhbmNlKSwoVmU9Q3Qub25Wbm9kZUJlZm9yZU1vdW50KSYma2koVmUsYmUsTCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFFlLCJfX3Zub2RlIix7dmFsdWU6TCxlbnVtZXJhYmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFFlLCJfX3Z1ZVBhcmVudENvbXBvbmVudCIse3ZhbHVlOmJlLGVudW1lcmFibGU6ITF9KSxCdCYmRmkoTCxudWxsLGJlLCJiZWZvcmVNb3VudCIpO3ZhciAkbj1VaShTZSxVdCk7JG4mJlV0LmJlZm9yZUVudGVyKFFlKSxiKFFlLEcsdGUpLCgoVmU9Q3QmJkN0Lm9uVm5vZGVNb3VudGVkKXx8JG58fEJ0KSYmanIoKCk9PntWZSYma2koVmUsYmUsTCksJG4mJlV0LmVudGVyKFFlKSxCdCYmRmkoTCxudWxsLGJlLCJtb3VudGVkIil9LFNlKX0sYT0oTCxHLHRlLGJlLFNlKT0+e2lmKHRlJiZNZShMLHRlKSxiZSlmb3IodmFyIENlPTA7Q2U8YmUubGVuZ3RoO0NlKyspTWUoTCxiZVtDZV0pO2lmKFNlKXt2YXIgbnQ9U2Uuc3ViVHJlZTtpZihudC5wYXRjaEZsYWc+MCYmbnQucGF0Y2hGbGFnJjIwNDgmJihudD1vaShudC5jaGlsZHJlbil8fG50KSxHPT09bnQpe3ZhciBXZT1TZS52bm9kZTthKEwsV2UsV2Uuc2NvcGVJZCxXZS5zbG90U2NvcGVJZHMsU2UucGFyZW50KX19fSxmPWZ1bmN0aW9uKEwsRyx0ZSxiZSxTZSxDZSxudCxXZSl7Zm9yKHZhciBRZT1hcmd1bWVudHMubGVuZ3RoPjgmJmFyZ3VtZW50c1s4XSE9PXZvaWQgMD9hcmd1bWVudHNbOF06MCxWZT1RZTtWZTxMLmxlbmd0aDtWZSsrKXt2YXIgQ3Q9TFtWZV09V2U/a3IoTFtWZV0pOklpKExbVmVdKTt1dChudWxsLEN0LEcsdGUsYmUsU2UsQ2UsbnQsV2UpfX0saD0oTCxHLHRlLGJlLFNlLENlLG50KT0+e3ZhciBXZT1HLmVsPUwuZWwse3BhdGNoRmxhZzpRZSxkeW5hbWljQ2hpbGRyZW46VmUsZGlyczpDdH09RztRZXw9TC5wYXRjaEZsYWcmMTY7dmFyIGp0PUwucHJvcHN8fG0uRU1QVFlfT0JKLFV0PUcucHJvcHN8fG0uRU1QVFlfT0JKLEJ0O2lmKHRlJiZzYSh0ZSwhMSksKEJ0PVV0Lm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZraShCdCx0ZSxHLEwpLEN0JiZGaShHLEwsdGUsImJlZm9yZVVwZGF0ZSIpLHRlJiZzYSh0ZSwhMCksZ2kmJihRZT0wLG50PSExLFZlPW51bGwpLFZlPyhDKEwuZHluYW1pY0NoaWxkcmVuLFZlLFdlLHRlLGJlLEtzKEcsU2UpLENlKSxDcyhMLEcpKTpudHx8WShMLEcsV2UsbnVsbCx0ZSxiZSxLcyhHLFNlKSxDZSwhMSksUWU+MCl7aWYoUWUmMTYpUyhXZSxHLGp0LFV0LHRlLGJlLFNlKTtlbHNlIGlmKFFlJjImJmp0LmNsYXNzIT09VXQuY2xhc3MmJlQoV2UsImNsYXNzIixudWxsLFV0LmNsYXNzLFNlLFtdLHRlLG51bGwsdm9pZCAwLEcuaG9zdEluc3RhbmNlKSxRZSY0JiZUKFdlLCJzdHlsZSIsanQuc3R5bGUsVXQuc3R5bGUsU2UsW10sdGUsbnVsbCx2b2lkIDAsRy5ob3N0SW5zdGFuY2UpLFFlJjgpZm9yKHZhciBscj1HLmR5bmFtaWNQcm9wcywkbj0wOyRuPGxyLmxlbmd0aDskbisrKXt2YXIgdW49bHJbJG5dLHduPWp0W3VuXSxlaT1VdFt1bl07KGVpIT09d258fHVuPT09InZhbHVlInx8eCYmeChXZSx1bikpJiZUKFdlLHVuLHduLGVpLFNlLEwuY2hpbGRyZW4sdGUsYmUsaGUsRy5ob3N0SW5zdGFuY2UpfVFlJjEmJkwuY2hpbGRyZW4hPT1HLmNoaWxkcmVuJiZ1ZShXZSxHLmNoaWxkcmVuKX1lbHNlIW50JiZWZT09bnVsbCYmUyhXZSxHLGp0LFV0LHRlLGJlLFNlKTsoKEJ0PVV0Lm9uVm5vZGVVcGRhdGVkKXx8Q3QpJiZqcigoKT0+e0J0JiZraShCdCx0ZSxHLEwpLEN0JiZGaShHLEwsdGUsInVwZGF0ZWQiKX0sYmUpfSxDPShMLEcsdGUsYmUsU2UsQ2UsbnQpPT57Zm9yKHZhciBXZT0wO1dlPEcubGVuZ3RoO1dlKyspe3ZhciBRZT1MW1dlXSxWZT1HW1dlXSxDdD1RZS5lbCYmKFFlLnR5cGU9PT1tcnx8IVdyKFFlLFZlKXx8UWUuc2hhcGVGbGFnJig2fDY0KSk/YWUoUWUuZWwpOnRlO3V0KFFlLFZlLEN0LG51bGwsYmUsU2UsQ2UsbnQsITApfX0sUz0oTCxHLHRlLGJlLFNlLENlLG50KT0+e2lmKHRlIT09YmUpe2lmKHRlIT09bS5FTVBUWV9PQkopZm9yKHZhciBXZSBpbiB0ZSkhbS5pc1Jlc2VydmVkUHJvcChXZSkmJiEoV2UgaW4gYmUpJiZUKEwsV2UsdGVbV2VdLG51bGwsbnQsRy5jaGlsZHJlbixTZSxDZSxoZSxHLmhvc3RJbnN0YW5jZSk7Zm9yKHZhciBRZSBpbiBiZSlpZighbS5pc1Jlc2VydmVkUHJvcChRZSkpe3ZhciBWZT1iZVtRZV0sQ3Q9dGVbUWVdOyhWZSE9PUN0JiZRZSE9PSJ2YWx1ZSJ8fHgmJngoTCxRZSkpJiZUKEwsUWUsQ3QsVmUsbnQsRy5jaGlsZHJlbixTZSxDZSxoZSxHLmhvc3RJbnN0YW5jZSl9InZhbHVlImluIGJlJiZUKEwsInZhbHVlIix0ZS52YWx1ZSxiZS52YWx1ZSxudCxbXSxTZSxudWxsLHZvaWQgMCxHLmhvc3RJbnN0YW5jZSl9fSxrPShMLEcsdGUsYmUsU2UsQ2UsbnQsV2UsUWUpPT57dmFyIFZlPUcuZWw9TD9MLmVsOkgoIiIpLEN0PUcuYW5jaG9yPUw/TC5hbmNob3I6SCgiIikse3BhdGNoRmxhZzpqdCxkeW5hbWljQ2hpbGRyZW46VXQsc2xvdFNjb3BlSWRzOkJ0fT1HOyhnaXx8anQmMjA0OCkmJihqdD0wLFFlPSExLFV0PW51bGwpLEJ0JiYoV2U9V2U/V2UuY29uY2F0KEJ0KTpCdCksTD09bnVsbD8oYihWZSx0ZSxiZSksYihDdCx0ZSxiZSksZihHLmNoaWxkcmVufHxbXSx0ZSxDdCxTZSxDZSxudCxXZSxRZSkpOmp0PjAmJmp0JjY0JiZVdCYmTC5keW5hbWljQ2hpbGRyZW4/KEMoTC5keW5hbWljQ2hpbGRyZW4sVXQsdGUsU2UsQ2UsbnQsV2UpLENzKEwsRykpOlkoTCxHLHRlLEN0LFNlLENlLG50LFdlLFFlKX0sVT0oTCxHLHRlLGJlLFNlLENlLG50LFdlLFFlKT0+e0cuc2xvdFNjb3BlSWRzPVdlLEw9PW51bGw/Ry5zaGFwZUZsYWcmNTEyP1NlLmN0eC5hY3RpdmF0ZShHLHRlLGJlLG50LFFlKTpCKEcsdGUsYmUsU2UsQ2UsbnQsUWUpOksoTCxHLFFlKX0sQj0oTCxHLHRlLGJlLFNlLENlLG50KT0+e3ZhciBXZT1MLmNvbXBvbmVudD1tYyhMLGJlLFNlKTtpZihXZS50eXBlLl9faG1ySWQmJnVyKFdlKSxFdChMKSxsaShXZSwibW91bnQiKSx5byhMKSYmKFdlLmN0eC5yZW5kZXJlcj10dCksbGkoV2UsImluaXQiKSxiYyhXZSksY2koV2UsImluaXQiKSxXZS5hc3luY0RlcCl7aWYoU2UmJlNlLnJlZ2lzdGVyRGVwKFdlLFEpLCFMLmVsKXt2YXIgUWU9V2Uuc3ViVHJlZT1YbihMbik7UnQobnVsbCxRZSxHLHRlKX19ZWxzZSBRKFdlLEwsRyx0ZSxTZSxDZSxudCk7Y2UoKSxjaShXZSwibW91bnQiKX0sSz0oTCxHLHRlKT0+e3ZhciBiZT1HLmNvbXBvbmVudD1MLmNvbXBvbmVudDtpZihUYShMLEcsdGUpKWlmKGJlLmFzeW5jRGVwJiYhYmUuYXN5bmNSZXNvbHZlZCl7RXQoRyksZWUoYmUsRyx0ZSksY2UoKTtyZXR1cm59ZWxzZSBiZS5uZXh0PUcsem4oYmUudXBkYXRlKSxiZS5lZmZlY3QuZGlydHk9ITAsYmUudXBkYXRlKCk7ZWxzZSBHLmVsPUwuZWwsYmUudm5vZGU9R30sUT0oTCxHLHRlLGJlLFNlLENlLG50KT0+e3ZhciBXZT0oKT0+e2lmKEwuaXNNb3VudGVkKXt2YXJ7bmV4dDpZbixidTpTaSx1Ok5vLHBhcmVudDp3aSx2bm9kZTpqfT1MO3t2YXIgcmU9SGwoTCk7aWYocmUpe1luJiYoWW4uZWw9ai5lbCxlZShMLFluLG50KSkscmUuYXN5bmNEZXAudGhlbigoKT0+e0wuaXNVbm1vdW50ZWR8fFdlKCl9KTtyZXR1cm59fXZhciBQZT1ZbixEZTtFdChZbnx8TC52bm9kZSksc2EoTCwhMSksWW4/KFluLmVsPWouZWwsZWUoTCxZbixudCkpOlluPWosU2kmJm0uaW52b2tlQXJyYXlGbnMoU2kpLChEZT1Zbi5wcm9wcyYmWW4ucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJmtpKERlLHdpLFluLGopLHNhKEwsITApLGxpKEwsInJlbmRlciIpO3ZhciBqZT10bihMKTtjaShMLCJyZW5kZXIiKTt2YXIgcnQ9TC5zdWJUcmVlO0wuc3ViVHJlZT1qZSxsaShMLCJwYXRjaCIpLHV0KHJ0LGplLGFlKHJ0LmVsKSxfZShydCksTCxTZSxDZSksY2koTCwicGF0Y2giKSxZbi5lbD1qZS5lbCxQZT09PW51bGwmJmFpKEwsamUuZWwpLE5vJiZqcihObyxTZSksKERlPVluLnByb3BzJiZZbi5wcm9wcy5vblZub2RlVXBkYXRlZCkmJmpyKCgpPT5raShEZSx3aSxZbixqKSxTZSksWXIoTCksY2UoKX1lbHNle3ZhciBDdCx7ZWw6anQscHJvcHM6VXR9PUcse2JtOkJ0LG06bHIscGFyZW50OiRufT1MLHVuPVpuKEcpO2lmKHNhKEwsITEpLEJ0JiZtLmludm9rZUFycmF5Rm5zKEJ0KSwhdW4mJihDdD1VdCYmVXQub25Wbm9kZUJlZm9yZU1vdW50KSYma2koQ3QsJG4sRyksc2EoTCwhMCksanQmJlllKXt2YXIgd249KCk9PntsaShMLCJyZW5kZXIiKSxMLnN1YlRyZWU9dG4oTCksY2koTCwicmVuZGVyIiksbGkoTCwiaHlkcmF0ZSIpLFllKGp0LEwuc3ViVHJlZSxMLFNlLG51bGwpLGNpKEwsImh5ZHJhdGUiKX07dW4/Ry50eXBlLl9fYXN5bmNMb2FkZXIoKS50aGVuKCgpPT4hTC5pc1VubW91bnRlZCYmd24oKSk6d24oKX1lbHNle2xpKEwsInJlbmRlciIpO3ZhciBlaT1MLnN1YlRyZWU9dG4oTCk7Y2koTCwicmVuZGVyIiksbGkoTCwicGF0Y2giKSx1dChudWxsLGVpLHRlLGJlLEwsU2UsQ2UpLGNpKEwsInBhdGNoIiksRy5lbD1laS5lbH1pZihsciYmanIobHIsU2UpLCF1biYmKEN0PVV0JiZVdC5vblZub2RlTW91bnRlZCkpe3ZhciBsbz1HO2pyKCgpPT5raShDdCwkbixsbyksU2UpfShHLnNoYXBlRmxhZyYyNTZ8fCRuJiZabigkbi52bm9kZSkmJiRuLnZub2RlLnNoYXBlRmxhZyYyNTYpJiZMLmEmJmpyKEwuYSxTZSksTC5pc01vdW50ZWQ9ITAsbWkoTCksRz10ZT1iZT1udWxsfX0sUWU9TC5lZmZlY3Q9bmV3IEkuUmVhY3RpdmVFZmZlY3QoV2UsbS5OT09QLCgpPT5ubihWZSksTC5zY29wZSksVmU9TC51cGRhdGU9KCk9PntRZS5kaXJ0eSYmUWUucnVuKCl9O1ZlLmlkPUwudWlkLHNhKEwsITApLFFlLm9uVHJhY2s9TC5ydGM/Q3Q9Pm0uaW52b2tlQXJyYXlGbnMoTC5ydGMsQ3QpOnZvaWQgMCxRZS5vblRyaWdnZXI9TC5ydGc/Q3Q9Pm0uaW52b2tlQXJyYXlGbnMoTC5ydGcsQ3QpOnZvaWQgMCxWZS5vd25lckluc3RhbmNlPUwsVmUoKX0sZWU9KEwsRyx0ZSk9PntHLmNvbXBvbmVudD1MO3ZhciBiZT1MLnZub2RlLnByb3BzO0wudm5vZGU9RyxMLm5leHQ9bnVsbCxpbyhMLEcucHJvcHMsYmUsdGUpLEdlKEwsRy5jaGlsZHJlbix0ZSksSS5wYXVzZVRyYWNraW5nKCksbnIoTCksSS5yZXNldFRyYWNraW5nKCl9LFk9ZnVuY3Rpb24oTCxHLHRlLGJlLFNlLENlLG50LFdlKXt2YXIgUWU9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiExLFZlPUwmJkwuY2hpbGRyZW4sQ3Q9TD9MLnNoYXBlRmxhZzowLGp0PUcuY2hpbGRyZW4se3BhdGNoRmxhZzpVdCxzaGFwZUZsYWc6QnR9PUc7aWYoVXQ+MCl7aWYoVXQmMTI4KXtUZShWZSxqdCx0ZSxiZSxTZSxDZSxudCxXZSxRZSk7cmV0dXJufWVsc2UgaWYoVXQmMjU2KXt2ZShWZSxqdCx0ZSxiZSxTZSxDZSxudCxXZSxRZSk7cmV0dXJufX1CdCY4PyhDdCYxNiYmaGUoVmUsU2UsQ2UpLGp0IT09VmUmJnVlKHRlLGp0KSk6Q3QmMTY/QnQmMTY/VGUoVmUsanQsdGUsYmUsU2UsQ2UsbnQsV2UsUWUpOmhlKFZlLFNlLENlLCEwKTooQ3QmOCYmdWUodGUsIiIpLEJ0JjE2JiZmKGp0LHRlLGJlLFNlLENlLG50LFdlLFFlKSl9LHZlPShMLEcsdGUsYmUsU2UsQ2UsbnQsV2UsUWUpPT57TD1MfHxtLkVNUFRZX0FSUixHPUd8fG0uRU1QVFlfQVJSO3ZhciBWZT1MLmxlbmd0aCxDdD1HLmxlbmd0aCxqdD1NYXRoLm1pbihWZSxDdCksVXQ7Zm9yKFV0PTA7VXQ8anQ7VXQrKyl7dmFyIEJ0PUdbVXRdPVFlP2tyKEdbVXRdKTpJaShHW1V0XSk7dXQoTFtVdF0sQnQsdGUsbnVsbCxTZSxDZSxudCxXZSxRZSl9VmU+Q3Q/aGUoTCxTZSxDZSwhMCwhMSxqdCk6ZihHLHRlLGJlLFNlLENlLG50LFdlLFFlLGp0KX0sVGU9KEwsRyx0ZSxiZSxTZSxDZSxudCxXZSxRZSk9Pntmb3IodmFyIFZlPTAsQ3Q9Ry5sZW5ndGgsanQ9TC5sZW5ndGgtMSxVdD1DdC0xO1ZlPD1qdCYmVmU8PVV0Oyl7dmFyIEJ0PUxbVmVdLGxyPUdbVmVdPVFlP2tyKEdbVmVdKTpJaShHW1ZlXSk7aWYoV3IoQnQsbHIpKXV0KEJ0LGxyLHRlLG51bGwsU2UsQ2UsbnQsV2UsUWUpO2Vsc2UgYnJlYWs7VmUrK31mb3IoO1ZlPD1qdCYmVmU8PVV0Oyl7dmFyICRuPUxbanRdLHVuPUdbVXRdPVFlP2tyKEdbVXRdKTpJaShHW1V0XSk7aWYoV3IoJG4sdW4pKXV0KCRuLHVuLHRlLG51bGwsU2UsQ2UsbnQsV2UsUWUpO2Vsc2UgYnJlYWs7anQtLSxVdC0tfWlmKFZlPmp0KXtpZihWZTw9VXQpZm9yKHZhciB3bj1VdCsxLGVpPXduPEN0P0dbd25dLmVsOmJlO1ZlPD1VdDspdXQobnVsbCxHW1ZlXT1RZT9rcihHW1ZlXSk6SWkoR1tWZV0pLHRlLGVpLFNlLENlLG50LFdlLFFlKSxWZSsrfWVsc2UgaWYoVmU+VXQpZm9yKDtWZTw9anQ7KXFlKExbVmVdLFNlLENlLCEwKSxWZSsrO2Vsc2V7dmFyIGxvPVZlLFluPVZlLFNpPW5ldyBNYXA7Zm9yKFZlPVluO1ZlPD1VdDtWZSsrKXt2YXIgTm89R1tWZV09UWU/a3IoR1tWZV0pOklpKEdbVmVdKTtOby5rZXkhPW51bGwmJihTaS5oYXMoTm8ua2V5KSYmTygiRHVwbGljYXRlIGtleXMgZm91bmQgZHVyaW5nIHVwZGF0ZToiLEpTT04uc3RyaW5naWZ5KE5vLmtleSksIk1ha2Ugc3VyZSBrZXlzIGFyZSB1bmlxdWUuIiksU2kuc2V0KE5vLmtleSxWZSkpfXZhciB3aSxqPTAscmU9VXQtWW4rMSxQZT0hMSxEZT0wLGplPW5ldyBBcnJheShyZSk7Zm9yKFZlPTA7VmU8cmU7VmUrKylqZVtWZV09MDtmb3IoVmU9bG87VmU8PWp0O1ZlKyspe3ZhciBydD1MW1ZlXTtpZihqPj1yZSl7cWUocnQsU2UsQ2UsITApO2NvbnRpbnVlfXZhciBndD12b2lkIDA7aWYocnQua2V5IT1udWxsKWd0PVNpLmdldChydC5rZXkpO2Vsc2UgZm9yKHdpPVluO3dpPD1VdDt3aSsrKWlmKGplW3dpLVluXT09PTAmJldyKHJ0LEdbd2ldKSl7Z3Q9d2k7YnJlYWt9Z3Q9PT12b2lkIDA/cWUocnQsU2UsQ2UsITApOihqZVtndC1Zbl09VmUrMSxndD49RGU/RGU9Z3Q6UGU9ITAsdXQocnQsR1tndF0sdGUsbnVsbCxTZSxDZSxudCxXZSxRZSksaisrKX12YXIgTGU9UGU/VWwoamUpOm0uRU1QVFlfQVJSO2Zvcih3aT1MZS5sZW5ndGgtMSxWZT1yZS0xO1ZlPj0wO1ZlLS0pe3ZhciBpdD1ZbitWZSxKZT1HW2l0XSxNdD1pdCsxPEN0P0dbaXQrMV0uZWw6YmU7amVbVmVdPT09MD91dChudWxsLEplLHRlLE10LFNlLENlLG50LFdlLFFlKTpQZSYmKHdpPDB8fFZlIT09TGVbd2ldP2h0KEplLHRlLE10LDIpOndpLS0pfX19LGh0PWZ1bmN0aW9uKEwsRyx0ZSxiZSl7dmFyIFNlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLHtlbDpDZSx0eXBlOm50LHRyYW5zaXRpb246V2UsY2hpbGRyZW46UWUsc2hhcGVGbGFnOlZlfT1MO2lmKFZlJjYpe2h0KEwuY29tcG9uZW50LnN1YlRyZWUsRyx0ZSxiZSk7cmV0dXJufWlmKFZlJjEyOCl7TC5zdXNwZW5zZS5tb3ZlKEcsdGUsYmUpO3JldHVybn1pZihWZSY2NCl7bnQubW92ZShMLEcsdGUsdHQpO3JldHVybn1pZihudD09PW1yKXtiKENlLEcsdGUpO2Zvcih2YXIgQ3Q9MDtDdDxRZS5sZW5ndGg7Q3QrKylodChRZVtDdF0sRyx0ZSxiZSk7YihMLmFuY2hvcixHLHRlKTtyZXR1cm59aWYobnQ9PT1Ebil7TmUoTCxHLHRlKTtyZXR1cm59dmFyIGp0PWJlIT09MiYmVmUmMSYmV2U7aWYoanQpaWYoYmU9PT0wKVdlLmJlZm9yZUVudGVyKENlKSxiKENlLEcsdGUpLGpyKCgpPT5XZS5lbnRlcihDZSksU2UpO2Vsc2V7dmFye2xlYXZlOlV0LGRlbGF5TGVhdmU6QnQsYWZ0ZXJMZWF2ZTpscn09V2UsJG49KCk9PmIoQ2UsRyx0ZSksdW49KCk9PntVdChDZSwoKT0+eyRuKCksbHImJmxyKCl9KX07QnQ/QnQoQ2UsJG4sdW4pOnVuKCl9ZWxzZSBiKENlLEcsdGUpfSxxZT1mdW5jdGlvbihMLEcsdGUpe3ZhciBiZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsU2U9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLHt0eXBlOkNlLHByb3BzOm50LHJlZjpXZSxjaGlsZHJlbjpRZSxkeW5hbWljQ2hpbGRyZW46VmUsc2hhcGVGbGFnOkN0LHBhdGNoRmxhZzpqdCxkaXJzOlV0fT1MO2lmKFdlIT1udWxsJiZIdChXZSxudWxsLHRlLEwsITApLEN0JjI1Nil7Ry5jdHguZGVhY3RpdmF0ZShMKTtyZXR1cm59dmFyIEJ0PUN0JjEmJlV0LGxyPSFabihMKSwkbjtpZihsciYmKCRuPW50JiZudC5vblZub2RlQmVmb3JlVW5tb3VudCkmJmtpKCRuLEcsTCksQ3QmNilvZShMLmNvbXBvbmVudCx0ZSxiZSk7ZWxzZXtpZihDdCYxMjgpe0wuc3VzcGVuc2UudW5tb3VudCh0ZSxiZSk7cmV0dXJufUJ0JiZGaShMLG51bGwsRywiYmVmb3JlVW5tb3VudCIpLEN0JjY0P0wudHlwZS5yZW1vdmUoTCxHLHRlLFNlLHR0LGJlKTpWZSYmKENlIT09bXJ8fGp0PjAmJmp0JjY0KT9oZShWZSxHLHRlLCExLCEwKTooQ2U9PT1tciYmanQmKDEyOHwyNTYpfHwhU2UmJkN0JjE2KSYmaGUoUWUsRyx0ZSksYmUmJk50KEwpfShsciYmKCRuPW50JiZudC5vblZub2RlVW5tb3VudGVkKXx8QnQpJiZqcigoKT0+eyRuJiZraSgkbixHLEwpLEJ0JiZGaShMLG51bGwsRywidW5tb3VudGVkIil9LHRlKX0sTnQ9TD0+e3Zhcnt0eXBlOkcsZWw6dGUsYW5jaG9yOmJlLHRyYW5zaXRpb246U2V9PUw7aWYoRz09PW1yKXtMLnBhdGNoRmxhZz4wJiZMLnBhdGNoRmxhZyYyMDQ4JiZTZSYmIVNlLnBlcnNpc3RlZD9MLmNoaWxkcmVuLmZvckVhY2goVmU9PntWZS50eXBlPT09TG4/UChWZS5lbCk6TnQoVmUpfSk6eHQodGUsYmUpO3JldHVybn1pZihHPT09RG4pe1hlKEwpO3JldHVybn12YXIgQ2U9KCk9PntQKHRlKSxTZSYmIVNlLnBlcnNpc3RlZCYmU2UuYWZ0ZXJMZWF2ZSYmU2UuYWZ0ZXJMZWF2ZSgpfTtpZihMLnNoYXBlRmxhZyYxJiZTZSYmIVNlLnBlcnNpc3RlZCl7dmFye2xlYXZlOm50LGRlbGF5TGVhdmU6V2V9PVNlLFFlPSgpPT5udCh0ZSxDZSk7V2U/V2UoTC5lbCxDZSxRZSk6UWUoKX1lbHNlIENlKCl9LHh0PShMLEcpPT57Zm9yKHZhciB0ZTtMIT09RzspdGU9a2UoTCksUChMKSxMPXRlO1AoRyl9LG9lPShMLEcsdGUpPT57TC50eXBlLl9faG1ySWQmJlJvKEwpO3ZhcntidW06YmUsc2NvcGU6U2UsdXBkYXRlOkNlLHN1YlRyZWU6bnQsdW06V2V9PUw7YmUmJm0uaW52b2tlQXJyYXlGbnMoYmUpLFNlLnN0b3AoKSxDZSYmKENlLmFjdGl2ZT0hMSxxZShudCxMLEcsdGUpKSxXZSYmanIoV2UsRyksanIoKCk9PntMLmlzVW5tb3VudGVkPSEwfSxHKSxHJiZHLnBlbmRpbmdCcmFuY2gmJiFHLmlzVW5tb3VudGVkJiZMLmFzeW5jRGVwJiYhTC5hc3luY1Jlc29sdmVkJiZMLnN1c3BlbnNlSWQ9PT1HLnBlbmRpbmdJZCYmKEcuZGVwcy0tLEcuZGVwcz09PTAmJkcucmVzb2x2ZSgpKSxyaShMKX0saGU9ZnVuY3Rpb24oTCxHLHRlKXtmb3IodmFyIGJlPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxTZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITEsQ2U9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOjAsbnQ9Q2U7bnQ8TC5sZW5ndGg7bnQrKylxZShMW250XSxHLHRlLGJlLFNlKX0sX2U9TD0+TC5zaGFwZUZsYWcmNj9fZShMLmNvbXBvbmVudC5zdWJUcmVlKTpMLnNoYXBlRmxhZyYxMjg/TC5zdXNwZW5zZS5uZXh0KCk6a2UoTC5hbmNob3J8fEwuZWwpLCRlPSExLHN0PShMLEcsdGUpPT57TD09bnVsbD9HLl92bm9kZSYmcWUoRy5fdm5vZGUsbnVsbCxudWxsLCEwKTp1dChHLl92bm9kZXx8bnVsbCxMLEcsbnVsbCxudWxsLG51bGwsdGUpLCRlfHwoJGU9ITAsbnIoKSxxcigpLCRlPSExKSxHLl92bm9kZT1MfSx0dD17cDp1dCx1bTpxZSxtOmh0LHI6TnQsbXQ6QixtYzpmLHBjOlkscGJjOkMsbjpfZSxvfSx5dCxZZTtyZXR1cm4gbCYmKFt5dCxZZV09bCh0dCkpLHtyZW5kZXI6c3QsaHlkcmF0ZTp5dCxjcmVhdGVBcHA6WnIoc3QseXQpfX1mdW5jdGlvbiBLcyhvLGwpe3Zhcnt0eXBlOnAscHJvcHM6Yn09bztyZXR1cm4gbD09PSJzdmciJiZwPT09ImZvcmVpZ25PYmplY3QifHxsPT09Im1hdGhtbCImJnA9PT0iYW5ub3RhdGlvbi14bWwiJiZiJiZiLmVuY29kaW5nJiZiLmVuY29kaW5nLmluY2x1ZGVzKCJodG1sIik/dm9pZCAwOmx9ZnVuY3Rpb24gc2EobyxsKXt2YXJ7ZWZmZWN0OnAsdXBkYXRlOmJ9PW87cC5hbGxvd1JlY3Vyc2U9Yi5hbGxvd1JlY3Vyc2U9bH1mdW5jdGlvbiBVaShvLGwpe3JldHVybighb3x8byYmIW8ucGVuZGluZ0JyYW5jaCkmJmwmJiFsLnBlcnNpc3RlZH1mdW5jdGlvbiBDcyhvLGwpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxiPW8uY2hpbGRyZW4sUD1sLmNoaWxkcmVuO2lmKG0uaXNBcnJheShiKSYmbS5pc0FycmF5KFApKWZvcih2YXIgVD0wO1Q8Yi5sZW5ndGg7VCsrKXt2YXIgeD1iW1RdLHo9UFtUXTt6LnNoYXBlRmxhZyYxJiYhei5keW5hbWljQ2hpbGRyZW4mJigoei5wYXRjaEZsYWc8PTB8fHoucGF0Y2hGbGFnPT09MzIpJiYoej1QW1RdPWtyKFBbVF0pLHouZWw9eC5lbCkscHx8Q3MoeCx6KSksei50eXBlPT09TW4mJih6LmVsPXguZWwpLHoudHlwZT09PUxuJiYhei5lbCYmKHouZWw9eC5lbCl9fWZ1bmN0aW9uIFVsKG8pe3ZhciBsPW8uc2xpY2UoKSxwPVswXSxiLFAsVCx4LHosSD1vLmxlbmd0aDtmb3IoYj0wO2I8SDtiKyspe3ZhciBYPW9bYl07aWYoWCE9PTApe2lmKFA9cFtwLmxlbmd0aC0xXSxvW1BdPFgpe2xbYl09UCxwLnB1c2goYik7Y29udGludWV9Zm9yKFQ9MCx4PXAubGVuZ3RoLTE7VDx4Oyl6PVQreD4+MSxvW3Bbel1dPFg/VD16KzE6eD16O1g8b1twW1RdXSYmKFQ+MCYmKGxbYl09cFtULTFdKSxwW1RdPWIpfX1mb3IoVD1wLmxlbmd0aCx4PXBbVC0xXTtULS0gPjA7KXBbVF09eCx4PWxbeF07cmV0dXJuIHB9ZnVuY3Rpb24gSGwobyl7dmFyIGw9by5zdWJUcmVlLmNvbXBvbmVudDtpZihsKXJldHVybiBsLmFzeW5jRGVwJiYhbC5hc3luY1Jlc29sdmVkP2w6SGwobCl9dmFyIGhjPW89Pm8uX19pc1RlbGVwb3J0LEFzPW89Pm8mJihvLmRpc2FibGVkfHxvLmRpc2FibGVkPT09IiIpLGVzPW89PnR5cGVvZiBTVkdFbGVtZW50IT0idW5kZWZpbmVkIiYmbyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQsRWw9bz0+dHlwZW9mIE1hdGhNTEVsZW1lbnQ9PSJmdW5jdGlvbiImJm8gaW5zdGFuY2VvZiBNYXRoTUxFbGVtZW50LE9zPShvLGwpPT57dmFyIHA9byYmby50bztpZihtLmlzU3RyaW5nKHApKWlmKGwpe3ZhciBiPWwocCk7cmV0dXJuIGJ8fE8oJ0ZhaWxlZCB0byBsb2NhdGUgVGVsZXBvcnQgdGFyZ2V0IHdpdGggc2VsZWN0b3IgIicuY29uY2F0KHAsJyIuIE5vdGUgdGhlIHRhcmdldCBlbGVtZW50IG11c3QgZXhpc3QgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZCAtIGkuZS4gdGhlIHRhcmdldCBjYW5ub3QgYmUgcmVuZGVyZWQgYnkgdGhlIGNvbXBvbmVudCBpdHNlbGYsIGFuZCBpZGVhbGx5IHNob3VsZCBiZSBvdXRzaWRlIG9mIHRoZSBlbnRpcmUgVnVlIGNvbXBvbmVudCB0cmVlLicpKSxifWVsc2UgcmV0dXJuIE8oIkN1cnJlbnQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJpbmcgdGFyZ2V0IGZvciBUZWxlcG9ydHMuIChtaXNzaW5nIHF1ZXJ5U2VsZWN0b3IgcmVuZGVyZXIgb3B0aW9uKSIpLG51bGw7ZWxzZSByZXR1cm4hcCYmIUFzKG8pJiZPKCJJbnZhbGlkIFRlbGVwb3J0IHRhcmdldDogIi5jb25jYXQocCkpLHB9LGdjPXtuYW1lOiJUZWxlcG9ydCIsX19pc1RlbGVwb3J0OiEwLHByb2Nlc3MobyxsLHAsYixQLFQseCx6LEgsWCl7dmFye21jOnllLHBjOnVlLHBiYzphZSxvOntpbnNlcnQ6a2UscXVlcnlTZWxlY3RvcjpNZSxjcmVhdGVUZXh0Ond0LGNyZWF0ZUNvbW1lbnQ6dXR9fT1YLGt0PUFzKGwucHJvcHMpLHtzaGFwZUZsYWc6UnQsY2hpbGRyZW46ZmUsZHluYW1pY0NoaWxkcmVuOkllfT1sO2lmKGdpJiYoSD0hMSxJZT1udWxsKSxvPT1udWxsKXt2YXIgTmU9bC5lbD11dCgidGVsZXBvcnQgc3RhcnQiKSxYZT1sLmFuY2hvcj11dCgidGVsZXBvcnQgZW5kIik7a2UoTmUscCxiKSxrZShYZSxwLGIpO3ZhciBjdD1sLnRhcmdldD1PcyhsLnByb3BzLE1lKSxpPWwudGFyZ2V0QW5jaG9yPXd0KCIiKTtjdD8oa2UoaSxjdCkseD09PSJzdmcifHxlcyhjdCk/eD0ic3ZnIjooeD09PSJtYXRobWwifHxFbChjdCkpJiYoeD0ibWF0aG1sIikpOmt0fHxPKCJJbnZhbGlkIFRlbGVwb3J0IHRhcmdldCBvbiBtb3VudDoiLGN0LCIoIi5jb25jYXQodHlwZW9mIGN0LCIpIikpO3ZhciBhPShLLFEpPT57UnQmMTYmJnllKGZlLEssUSxQLFQseCx6LEgpfTtrdD9hKHAsWGUpOmN0JiZhKGN0LGkpfWVsc2V7bC5lbD1vLmVsO3ZhciBmPWwuYW5jaG9yPW8uYW5jaG9yLGg9bC50YXJnZXQ9by50YXJnZXQsQz1sLnRhcmdldEFuY2hvcj1vLnRhcmdldEFuY2hvcixTPUFzKG8ucHJvcHMpLGs9Uz9wOmgsVT1TP2Y6QztpZih4PT09InN2ZyJ8fGVzKGgpP3g9InN2ZyI6KHg9PT0ibWF0aG1sInx8RWwoaCkpJiYoeD0ibWF0aG1sIiksSWU/KGFlKG8uZHluYW1pY0NoaWxkcmVuLEllLGssUCxULHgseiksQ3MobyxsLCEwKSk6SHx8dWUobyxsLGssVSxQLFQseCx6LCExKSxrdClTP2wucHJvcHMmJm8ucHJvcHMmJmwucHJvcHMudG8hPT1vLnByb3BzLnRvJiYobC5wcm9wcy50bz1vLnByb3BzLnRvKTpTbChsLHAsZixYLDEpO2Vsc2UgaWYoKGwucHJvcHMmJmwucHJvcHMudG8pIT09KG8ucHJvcHMmJm8ucHJvcHMudG8pKXt2YXIgQj1sLnRhcmdldD1PcyhsLnByb3BzLE1lKTtCP1NsKGwsQixudWxsLFgsMCk6TygiSW52YWxpZCBUZWxlcG9ydCB0YXJnZXQgb24gdXBkYXRlOiIsaCwiKCIuY29uY2F0KHR5cGVvZiBoLCIpIikpfWVsc2UgUyYmU2wobCxoLEMsWCwxKX1KcyhsKX0scmVtb3ZlKG8sbCxwLGIsUCxUKXt2YXJ7dW06eCxvOntyZW1vdmU6en19PVAse3NoYXBlRmxhZzpILGNoaWxkcmVuOlgsYW5jaG9yOnllLHRhcmdldEFuY2hvcjp1ZSx0YXJnZXQ6YWUscHJvcHM6a2V9PW87aWYoYWUmJnoodWUpLFQmJnooeWUpLEgmMTYpZm9yKHZhciBNZT1UfHwhQXMoa2UpLHd0PTA7d3Q8WC5sZW5ndGg7d3QrKyl7dmFyIHV0PVhbd3RdO3godXQsbCxwLE1lLCEhdXQuZHluYW1pY0NoaWxkcmVuKX19LG1vdmU6U2wsaHlkcmF0ZTokbH07ZnVuY3Rpb24gU2wobyxsLHAsYil7dmFye286e2luc2VydDpQfSxtOlR9PWIseD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06Mjt4PT09MCYmUChvLnRhcmdldEFuY2hvcixsLHApO3ZhcntlbDp6LGFuY2hvcjpILHNoYXBlRmxhZzpYLGNoaWxkcmVuOnllLHByb3BzOnVlfT1vLGFlPXg9PT0yO2lmKGFlJiZQKHosbCxwKSwoIWFlfHxBcyh1ZSkpJiZYJjE2KWZvcih2YXIga2U9MDtrZTx5ZS5sZW5ndGg7a2UrKylUKHllW2tlXSxsLHAsMik7YWUmJlAoSCxsLHApfWZ1bmN0aW9uICRsKG8sbCxwLGIsUCxULHgseil7dmFye286e25leHRTaWJsaW5nOkgscGFyZW50Tm9kZTpYLHF1ZXJ5U2VsZWN0b3I6eWV9fT14LHVlPWwudGFyZ2V0PU9zKGwucHJvcHMseWUpO2lmKHVlKXt2YXIgYWU9dWUuX2xwYXx8dWUuZmlyc3RDaGlsZDtpZihsLnNoYXBlRmxhZyYxNilpZihBcyhsLnByb3BzKSlsLmFuY2hvcj16KEgobyksbCxYKG8pLHAsYixQLFQpLGwudGFyZ2V0QW5jaG9yPWFlO2Vsc2V7bC5hbmNob3I9SChvKTtmb3IodmFyIGtlPWFlO2tlOylpZihrZT1IKGtlKSxrZSYma2Uubm9kZVR5cGU9PT04JiZrZS5kYXRhPT09InRlbGVwb3J0IGFuY2hvciIpe2wudGFyZ2V0QW5jaG9yPWtlLHVlLl9scGE9bC50YXJnZXRBbmNob3ImJkgobC50YXJnZXRBbmNob3IpO2JyZWFrfXooYWUsbCx1ZSxwLGIsUCxUKX1KcyhsKX1yZXR1cm4gbC5hbmNob3ImJkgobC5hbmNob3IpfXZhciB4YT1nYztmdW5jdGlvbiBKcyhvKXt2YXIgbD1vLmN0eDtpZihsJiZsLnV0KXtmb3IodmFyIHA9by5jaGlsZHJlblswXS5lbDtwJiZwIT09by50YXJnZXRBbmNob3I7KXAubm9kZVR5cGU9PT0xJiZwLnNldEF0dHJpYnV0ZSgiZGF0YS12LW93bmVyIixsLnVpZCkscD1wLm5leHRTaWJsaW5nO2wudXQoKX19dmFyIG1yPVN5bWJvbC5mb3IoInYtZmd0IiksTW49U3ltYm9sLmZvcigidi10eHQiKSxMbj1TeW1ib2wuZm9yKCJ2LWNtdCIpLERuPVN5bWJvbC5mb3IoInYtc3RjIiksSGk9W10senI9bnVsbDtmdW5jdGlvbiBRcigpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMTtIaS5wdXNoKHpyPW8/bnVsbDpbXSl9ZnVuY3Rpb24gWnMoKXtIaS5wb3AoKSx6cj1IaVtIaS5sZW5ndGgtMV18fG51bGx9dmFyIGxhPTE7ZnVuY3Rpb24gY2Eobyl7bGErPW99ZnVuY3Rpb24gdHMobyl7cmV0dXJuIG8uZHluYW1pY0NoaWxkcmVuPWxhPjA/enJ8fG0uRU1QVFlfQVJSOm51bGwsWnMoKSxsYT4wJiZ6ciYmenIucHVzaChvKSxvfWZ1bmN0aW9uIE5pKG8sbCxwLGIsUCxUKXtyZXR1cm4gdHMoVHMobyxsLHAsYixQLFQsITApKX1mdW5jdGlvbiBPbyhvLGwscCxiLFApe3JldHVybiB0cyhYbihvLGwscCxiLFAsITApKX1mdW5jdGlvbiBUbyhvKXtyZXR1cm4gbz9vLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gV3IobyxsKXtyZXR1cm4gbC5zaGFwZUZsYWcmNiYmUHIuaGFzKGwudHlwZSk/KG8uc2hhcGVGbGFnJj1+MjU2LGwuc2hhcGVGbGFnJj1+NTEyLCExKTpvLnR5cGU9PT1sLnR5cGUmJm8ua2V5PT09bC5rZXl9dmFyIG9vO2Z1bmN0aW9uIGpsKG8pe29vPW99dmFyIFB1PWZ1bmN0aW9uKCl7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkobykscD0wO3A8bztwKyspbFtwXT1hcmd1bWVudHNbcF07cmV0dXJuIHNyKC4uLm9vP29vKGwsZ24pOmwpfSx3bD0iX192SW50ZXJuYWwiLFhzPW89Pnt2YXJ7a2V5Omx9PW87cmV0dXJuIGwhPW51bGw/bDpudWxsfSxDbD1vPT57dmFye3JlZjpsLHJlZl9rZXk6cCxyZWZfZm9yOmJ9PW87cmV0dXJuIHR5cGVvZiBsPT0ibnVtYmVyIiYmKGw9IiIrbCksbCE9bnVsbD9tLmlzU3RyaW5nKGwpfHxJLmlzUmVmKGwpfHxtLmlzRnVuY3Rpb24obCk/e2k6Z24scjpsLGs6cCxmOiEhYn06bDpudWxsfTtmdW5jdGlvbiBUcyhvKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbCxwPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLGI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOjAsUD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxUPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTpvPT09bXI/MDoxLHg9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0hPT12b2lkIDA/YXJndW1lbnRzWzZdOiExLHo9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOiExLEg9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6byxwcm9wczpsLGtleTpsJiZYcyhsKSxyZWY6bCYmQ2wobCksc2NvcGVJZDpPbixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpwLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRBbmNob3I6bnVsbCxzdGF0aWNDb3VudDowLHNoYXBlRmxhZzpULHBhdGNoRmxhZzpiLGR5bmFtaWNQcm9wczpQLGR5bmFtaWNDaGlsZHJlbjpudWxsLGFwcENvbnRleHQ6bnVsbCxob3N0SW5zdGFuY2U6Z24sY3R4OmdufTtyZXR1cm4gej8oV28oSCxwKSxUJjEyOCYmby5ub3JtYWxpemUoSCkpOnAmJihILnNoYXBlRmxhZ3w9bS5pc1N0cmluZyhwKT84OjE2KSxILmtleSE9PUgua2V5JiZPKCJWTm9kZSBjcmVhdGVkIHdpdGggaW52YWxpZCBrZXkgKE5hTikuIFZOb2RlIHR5cGU6IixILnR5cGUpLGxhPjAmJiF4JiZ6ciYmKEgucGF0Y2hGbGFnPjB8fFQmNikmJkgucGF0Y2hGbGFnIT09MzImJnpyLnB1c2goSCksSH12YXIgWG49UHU7ZnVuY3Rpb24gc3Iobyl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGwscD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbCxiPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTowLFA9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsVD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITE7aWYoKCFvfHxvPT09UW8pJiYob3x8TygiSW52YWxpZCB2bm9kZSB0eXBlIHdoZW4gY3JlYXRpbmcgdm5vZGU6ICIuY29uY2F0KG8sIi4iKSksbz1MbiksVG8obykpe3ZhciB4PSRpKG8sbCwhMCk7cmV0dXJuIHAmJldvKHgscCksbGE+MCYmIVQmJnpyJiYoeC5zaGFwZUZsYWcmNj96clt6ci5pbmRleE9mKG8pXT14OnpyLnB1c2goeCkpLHgucGF0Y2hGbGFnfD0tMix4fWlmKG9zKG8pJiYobz1vLl9fdmNjT3B0cyksbCl7bD16bChsKTt2YXJ7Y2xhc3M6eixzdHlsZTpIfT1sO3omJiFtLmlzU3RyaW5nKHopJiYobC5jbGFzcz1tLm5vcm1hbGl6ZUNsYXNzKHopKSxtLmlzT2JqZWN0KEgpJiYoSS5pc1Byb3h5KEgpJiYhbS5pc0FycmF5KEgpJiYoSD1tLmV4dGVuZCh7fSxIKSksbC5zdHlsZT1tLm5vcm1hbGl6ZVN0eWxlKEgpKX12YXIgWD1tLmlzU3RyaW5nKG8pPzE6SnIobyk/MTI4OmhjKG8pPzY0Om0uaXNPYmplY3Qobyk/NDptLmlzRnVuY3Rpb24obyk/MjowO3JldHVybiBYJjQmJkkuaXNQcm94eShvKSYmKG89SS50b1JhdyhvKSxPKCJWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgdGhhdCB3YXMgbWFkZSBhIHJlYWN0aXZlIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCBhbmQgc2hvdWxkIGJlIGF2b2lkZWQgYnkgbWFya2luZyB0aGUgY29tcG9uZW50IHdpdGggYG1hcmtSYXdgIG9yIHVzaW5nIGBzaGFsbG93UmVmYCBpbnN0ZWFkIG9mIGByZWZgLiIsYApDb21wb25lbnQgdGhhdCB3YXMgbWFkZSByZWFjdGl2ZTogYCxvKSksVHMobyxsLHAsYixQLFgsVCwhMCl9ZnVuY3Rpb24gemwobyl7cmV0dXJuIG8/SS5pc1Byb3h5KG8pfHx3bCBpbiBvP20uZXh0ZW5kKHt9LG8pOm86bnVsbH1mdW5jdGlvbiAkaShvLGwpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSx7cHJvcHM6YixyZWY6UCxwYXRjaEZsYWc6VCxjaGlsZHJlbjp4fT1vLHo9bD9HbChifHx7fSxsKTpiLEg9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6by50eXBlLHByb3BzOnosa2V5OnomJlhzKHopLHJlZjpsJiZsLnJlZj9wJiZQP20uaXNBcnJheShQKT9QLmNvbmNhdChDbChsKSk6W1AsQ2wobCldOkNsKGwpOlAsc2NvcGVJZDpvLnNjb3BlSWQsc2xvdFNjb3BlSWRzOm8uc2xvdFNjb3BlSWRzLGNoaWxkcmVuOlQ9PT0tMSYmbS5pc0FycmF5KHgpP3gubWFwKGppKTp4LHRhcmdldDpvLnRhcmdldCx0YXJnZXRBbmNob3I6by50YXJnZXRBbmNob3Isc3RhdGljQ291bnQ6by5zdGF0aWNDb3VudCxzaGFwZUZsYWc6by5zaGFwZUZsYWcscGF0Y2hGbGFnOmwmJm8udHlwZSE9PW1yP1Q9PT0tMT8xNjpUfDE2OlQsZHluYW1pY1Byb3BzOm8uZHluYW1pY1Byb3BzLGR5bmFtaWNDaGlsZHJlbjpvLmR5bmFtaWNDaGlsZHJlbixhcHBDb250ZXh0Om8uYXBwQ29udGV4dCxob3N0SW5zdGFuY2U6by5ob3N0SW5zdGFuY2UsZGlyczpvLmRpcnMsdHJhbnNpdGlvbjpvLnRyYW5zaXRpb24sY29tcG9uZW50Om8uY29tcG9uZW50LHN1c3BlbnNlOm8uc3VzcGVuc2Usc3NDb250ZW50Om8uc3NDb250ZW50JiYkaShvLnNzQ29udGVudCksc3NGYWxsYmFjazpvLnNzRmFsbGJhY2smJiRpKG8uc3NGYWxsYmFjayksZWw6by5lbCxhbmNob3I6by5hbmNob3IsY3R4Om8uY3R4LGNlOm8uY2V9O3JldHVybiBIfWZ1bmN0aW9uIGppKG8pe3ZhciBsPSRpKG8pO3JldHVybiBtLmlzQXJyYXkoby5jaGlsZHJlbikmJihsLmNoaWxkcmVuPW8uY2hpbGRyZW4ubWFwKGppKSksbH1mdW5jdGlvbiBXbCgpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiICIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gWG4oTW4sbnVsbCxvLGwpfWZ1bmN0aW9uIHZjKG8sbCl7dmFyIHA9WG4oRG4sbnVsbCxvKTtyZXR1cm4gcC5zdGF0aWNDb3VudD1sLHB9ZnVuY3Rpb24gTnUoKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIGw/KFFyKCksT28oTG4sbnVsbCxvKSk6WG4oTG4sbnVsbCxvKX1mdW5jdGlvbiBJaShvKXtyZXR1cm4gbz09bnVsbHx8dHlwZW9mIG89PSJib29sZWFuIj9YbihMbik6bS5pc0FycmF5KG8pP1huKG1yLG51bGwsby5zbGljZSgpKTp0eXBlb2Ygbz09Im9iamVjdCI/a3Iobyk6WG4oTW4sbnVsbCxTdHJpbmcobykpfWZ1bmN0aW9uIGtyKG8pe3JldHVybiBvLmVsPT09bnVsbCYmby5wYXRjaEZsYWchPT0tMXx8by5tZW1vP286JGkobyl9ZnVuY3Rpb24gV28obyxsKXt2YXIgcD0wLHtzaGFwZUZsYWc6Yn09bztpZihsPT1udWxsKWw9bnVsbDtlbHNlIGlmKG0uaXNBcnJheShsKSlwPTE2O2Vsc2UgaWYodHlwZW9mIGw9PSJvYmplY3QiKWlmKGImKDF8NjQpKXt2YXIgUD1sLmRlZmF1bHQ7UCYmKFAuX2MmJihQLl9kPSExKSxXbyhvLFAoKSksUC5fYyYmKFAuX2Q9ITApKTtyZXR1cm59ZWxzZXtwPTMyO3ZhciBUPWwuXzshVCYmISh3bCBpbiBsKT9sLl9jdHg9Z246VD09PTMmJmduJiYoZ24uc2xvdHMuXz09PTE/bC5fPTE6KGwuXz0yLG8ucGF0Y2hGbGFnfD0xMDI0KSl9ZWxzZSBtLmlzRnVuY3Rpb24obCk/KGw9e2RlZmF1bHQ6bCxfY3R4OmdufSxwPTMyKToobD1TdHJpbmcobCksYiY2ND8ocD0xNixsPVtXbChsKV0pOnA9OCk7by5jaGlsZHJlbj1sLG8uc2hhcGVGbGFnfD1wfWZ1bmN0aW9uIEdsKCl7Zm9yKHZhciBvPXt9LGw9MDtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXt2YXIgcD1sPDB8fGFyZ3VtZW50cy5sZW5ndGg8PWw/dm9pZCAwOmFyZ3VtZW50c1tsXTtmb3IodmFyIGIgaW4gcClpZihiPT09ImNsYXNzIilvLmNsYXNzIT09cC5jbGFzcyYmKG8uY2xhc3M9bS5ub3JtYWxpemVDbGFzcyhbby5jbGFzcyxwLmNsYXNzXSkpO2Vsc2UgaWYoYj09PSJzdHlsZSIpby5zdHlsZT1tLm5vcm1hbGl6ZVN0eWxlKFtvLnN0eWxlLHAuc3R5bGVdKTtlbHNlIGlmKG0uaXNPbihiKSl7dmFyIFA9b1tiXSxUPXBbYl07VCYmUCE9PVQmJiEobS5pc0FycmF5KFApJiZQLmluY2x1ZGVzKFQpKSYmKG9bYl09UD9bXS5jb25jYXQoUCxUKTpUKX1lbHNlIGIhPT0iIiYmKG9bYl09cFtiXSl9cmV0dXJuIG99ZnVuY3Rpb24ga2kobyxsLHApe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO2tuKG8sbCw3LFtwLGJdKX12YXIgemk9X3MoKSxJdT0wO2Z1bmN0aW9uIG1jKG8sbCxwKXt2YXIgYj1vLnR5cGUsUD0obD9sLmFwcENvbnRleHQ6by5hcHBDb250ZXh0KXx8emksVD17dWlkOkl1Kyssdm5vZGU6byx0eXBlOmIscGFyZW50OmwsYXBwQ29udGV4dDpQLHJvb3Q6bnVsbCxuZXh0Om51bGwsc3ViVHJlZTpudWxsLGVmZmVjdDpudWxsLHVwZGF0ZTpudWxsLHNjb3BlOm5ldyBJLkVmZmVjdFNjb3BlKCEwKSxyZW5kZXI6bnVsbCxwcm94eTpudWxsLGV4cG9zZWQ6bnVsbCxleHBvc2VQcm94eTpudWxsLHdpdGhQcm94eTpudWxsLHByb3ZpZGVzOmw/bC5wcm92aWRlczpPYmplY3QuY3JlYXRlKFAucHJvdmlkZXMpLGFjY2Vzc0NhY2hlOm51bGwscmVuZGVyQ2FjaGU6W10sY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZXM6bnVsbCxwcm9wc09wdGlvbnM6JHMoYixQKSxlbWl0c09wdGlvbnM6Sm8oYixQKSxlbWl0Om51bGwsZW1pdHRlZDpudWxsLHByb3BzRGVmYXVsdHM6bS5FTVBUWV9PQkosaW5oZXJpdEF0dHJzOmIuaW5oZXJpdEF0dHJzLGN0eDptLkVNUFRZX09CSixkYXRhOm0uRU1QVFlfT0JKLHByb3BzOm0uRU1QVFlfT0JKLGF0dHJzOm0uRU1QVFlfT0JKLHNsb3RzOm0uRU1QVFlfT0JKLHJlZnM6bS5FTVBUWV9PQkosc2V0dXBTdGF0ZTptLkVNUFRZX09CSixzZXR1cENvbnRleHQ6bnVsbCxhdHRyc1Byb3h5Om51bGwsc2xvdHNQcm94eTpudWxsLHN1c3BlbnNlOnAsc3VzcGVuc2VJZDpwP3AucGVuZGluZ0lkOjAsYXN5bmNEZXA6bnVsbCxhc3luY1Jlc29sdmVkOiExLGlzTW91bnRlZDohMSxpc1VubW91bnRlZDohMSxpc0RlYWN0aXZhdGVkOiExLGJjOm51bGwsYzpudWxsLGJtOm51bGwsbTpudWxsLGJ1Om51bGwsdTpudWxsLHVtOm51bGwsYnVtOm51bGwsZGE6bnVsbCxhOm51bGwscnRnOm51bGwscnRjOm51bGwsZWM6bnVsbCxzcDpudWxsfTtyZXR1cm4gVC5jdHg9TWwoVCksVC5yb290PWw/bC5yb290OlQsVC5lbWl0PXhvLmJpbmQobnVsbCxUKSxvLmNlJiZvLmNlKFQpLFR9dmFyIHByPW51bGwsTm49KCk9PnByfHxnbixhbyxQczt7dmFyIFFzPW0uZ2V0R2xvYmFsVGhpcygpLHVpPShvLGwpPT57dmFyIHA7cmV0dXJuKHA9UXNbb10pfHwocD1Rc1tvXT1bXSkscC5wdXNoKGwpLGI9PntwLmxlbmd0aD4xP3AuZm9yRWFjaChQPT5QKGIpKTpwWzBdKGIpfX07YW89dWkoIl9fVlVFX0lOU1RBTkNFX1NFVFRFUlNfXyIsbz0+cHI9byksUHM9dWkoIl9fVlVFX1NTUl9TRVRURVJTX18iLG89PmQuaXNJblNTUkNvbXBvbmVudFNldHVwPW8pfXZhciBHcj1vPT57dmFyIGw9cHI7cmV0dXJuIGFvKG8pLG8uc2NvcGUub24oKSwoKT0+e28uc2NvcGUub2ZmKCksYW8obCl9fSx1YT0oKT0+e3ByJiZwci5zY29wZS5vZmYoKSxhbyhudWxsKX0sZmE9bS5tYWtlTWFwKCJzbG90LGNvbXBvbmVudCIpO2Z1bmN0aW9uIF9jKG8sbCl7dmFye2lzTmF0aXZlVGFnOnB9PWw7KGZhKG8pfHxwKG8pKSYmTygiRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCBpZDogIitvKX1mdW5jdGlvbiBkYShvKXtyZXR1cm4gby52bm9kZS5zaGFwZUZsYWcmNH1kLmlzSW5TU1JDb21wb25lbnRTZXR1cD0hMTtmdW5jdGlvbiBiYyhvKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7bCYmUHMobCk7dmFye3Byb3BzOnAsY2hpbGRyZW46Yn09by52bm9kZSxQPWRhKG8pO0thKG8scCxQLGwpLGRjKG8sYik7dmFyIFQ9UD9HYyhvLGwpOnZvaWQgMDtyZXR1cm4gbCYmUHMoITEpLFR9ZnVuY3Rpb24gR2MobyxsKXt2YXIgcCxiPW8udHlwZTt7aWYoYi5uYW1lJiZfYyhiLm5hbWUsby5hcHBDb250ZXh0LmNvbmZpZyksYi5jb21wb25lbnRzKWZvcih2YXIgUD1PYmplY3Qua2V5cyhiLmNvbXBvbmVudHMpLFQ9MDtUPFAubGVuZ3RoO1QrKylfYyhQW1RdLG8uYXBwQ29udGV4dC5jb25maWcpO2lmKGIuZGlyZWN0aXZlcylmb3IodmFyIHg9T2JqZWN0LmtleXMoYi5kaXJlY3RpdmVzKSx6PTA7ejx4Lmxlbmd0aDt6KyspZW8oeFt6XSk7Yi5jb21waWxlck9wdGlvbnMmJnNvKCkmJk8oJyJjb21waWxlck9wdGlvbnMiIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSBidWlsZCBvZiBWdWUgdGhhdCBpbmNsdWRlcyB0aGUgcnVudGltZSBjb21waWxlci4gU2luY2UgeW91IGFyZSB1c2luZyBhIHJ1bnRpbWUtb25seSBidWlsZCwgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCB2aWEgeW91ciBidWlsZCB0b29sIGNvbmZpZyBpbnN0ZWFkLicpfW8uYWNjZXNzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSxvLnByb3h5PUkubWFya1JhdyhuZXcgUHJveHkoby5jdHgsd28pKSx6YyhvKTt2YXJ7c2V0dXA6SH09YjtpZihIKXt2YXIgWD1vLnNldHVwQ29udGV4dD1ILmxlbmd0aD4xP3FjKG8pOm51bGwseWU9R3Iobyk7SS5wYXVzZVRyYWNraW5nKCk7dmFyIHVlPXNuKEgsbywwLFtJLnNoYWxsb3dSZWFkb25seShvLnByb3BzKSxYXSk7aWYoSS5yZXNldFRyYWNraW5nKCkseWUoKSxtLmlzUHJvbWlzZSh1ZSkpe2lmKHVlLnRoZW4odWEsdWEpLGwpcmV0dXJuIHVlLnRoZW4oa2U9PntwYShvLGtlLGwpfSkuY2F0Y2goa2U9PntMcihrZSxvLDApfSk7aWYoby5hc3luY0RlcD11ZSwhby5zdXNwZW5zZSl7dmFyIGFlPShwPWIubmFtZSkhPW51bGw/cDoiQW5vbnltb3VzIjtPKCJDb21wb25lbnQgPCIuY29uY2F0KGFlLCI+OiBzZXR1cCBmdW5jdGlvbiByZXR1cm5lZCBhIHByb21pc2UsIGJ1dCBubyA8U3VzcGVuc2U+IGJvdW5kYXJ5IHdhcyBmb3VuZCBpbiB0aGUgcGFyZW50IGNvbXBvbmVudCB0cmVlLiBBIGNvbXBvbmVudCB3aXRoIGFzeW5jIHNldHVwKCkgbXVzdCBiZSBuZXN0ZWQgaW4gYSA8U3VzcGVuc2U+IGluIG9yZGVyIHRvIGJlIHJlbmRlcmVkLiIpKX19ZWxzZSBwYShvLHVlLGwpfWVsc2UgeWMobyxsKX1mdW5jdGlvbiBwYShvLGwscCl7bS5pc0Z1bmN0aW9uKGwpP28udHlwZS5fX3NzcklubGluZVJlbmRlcj9vLnNzclJlbmRlcj1sOm8ucmVuZGVyPWw6bS5pc09iamVjdChsKT8oVG8obCkmJk8oInNldHVwKCkgc2hvdWxkIG5vdCByZXR1cm4gVk5vZGVzIGRpcmVjdGx5IC0gcmV0dXJuIGEgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuIiksby5kZXZ0b29sc1Jhd1NldHVwU3RhdGU9bCxvLnNldHVwU3RhdGU9SS5wcm94eVJlZnMobCkseShvKSk6bCE9PXZvaWQgMCYmTygic2V0dXAoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4gUmVjZWl2ZWQ6ICIuY29uY2F0KGw9PT1udWxsPyJudWxsIjp0eXBlb2YgbCkpLHljKG8scCl9dmFyIG5zLEVpO2Z1bmN0aW9uIHFsKG8pe25zPW8sRWk9bD0+e2wucmVuZGVyLl9yYyYmKGwud2l0aFByb3h5PW5ldyBQcm94eShsLmN0eCx2cykpfX12YXIgc289KCk9PiFucztmdW5jdGlvbiB5YyhvLGwscCl7dmFyIGI9by50eXBlO2lmKCFvLnJlbmRlcil7aWYoIWwmJm5zJiYhYi5yZW5kZXIpe3ZhciBQPWIudGVtcGxhdGV8fGlyKG8pLnRlbXBsYXRlO2lmKFApe2xpKG8sImNvbXBpbGUiKTt2YXJ7aXNDdXN0b21FbGVtZW50OlQsY29tcGlsZXJPcHRpb25zOnh9PW8uYXBwQ29udGV4dC5jb25maWcse2RlbGltaXRlcnM6eixjb21waWxlck9wdGlvbnM6SH09YixYPW0uZXh0ZW5kKG0uZXh0ZW5kKHtpc0N1c3RvbUVsZW1lbnQ6VCxkZWxpbWl0ZXJzOnp9LHgpLEgpO2IucmVuZGVyPW5zKFAsWCksY2kobywiY29tcGlsZSIpfX1vLnJlbmRlcj1iLnJlbmRlcnx8bS5OT09QLEVpJiZFaShvKX17dmFyIHllPUdyKG8pO0kucGF1c2VUcmFja2luZygpO3RyeXtQbihvKX1maW5hbGx5e0kucmVzZXRUcmFja2luZygpLHllKCl9fSFiLnJlbmRlciYmby5yZW5kZXI9PT1tLk5PT1AmJiFsJiYoIW5zJiZiLnRlbXBsYXRlP08oJ0NvbXBvbmVudCBwcm92aWRlZCB0ZW1wbGF0ZSBvcHRpb24gYnV0IHJ1bnRpbWUgY29tcGlsYXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIG9mIFZ1ZS4gQ29uZmlndXJlIHlvdXIgYnVuZGxlciB0byBhbGlhcyAidnVlIiB0byAidnVlL2Rpc3QvdnVlLmVzbS1idW5kbGVyLmpzIi4nKTpPKCJDb21wb25lbnQgaXMgbWlzc2luZyB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24uIikpfWZ1bmN0aW9uIFlsKG8pe3JldHVybiBvLmF0dHJzUHJveHl8fChvLmF0dHJzUHJveHk9bmV3IFByb3h5KG8uYXR0cnMse2dldChsLHApe3JldHVybiBYaSgpLEkudHJhY2sobywiZ2V0IiwiJGF0dHJzIiksbFtwXX0sc2V0KCl7cmV0dXJuIE8oInNldHVwQ29udGV4dC5hdHRycyBpcyByZWFkb25seS4iKSwhMX0sZGVsZXRlUHJvcGVydHkoKXtyZXR1cm4gTygic2V0dXBDb250ZXh0LmF0dHJzIGlzIHJlYWRvbmx5LiIpLCExfX0pKX1mdW5jdGlvbiBrdShvKXtyZXR1cm4gby5zbG90c1Byb3h5fHwoby5zbG90c1Byb3h5PW5ldyBQcm94eShvLnNsb3RzLHtnZXQobCxwKXtyZXR1cm4gSS50cmFjayhvLCJnZXQiLCIkc2xvdHMiKSxsW3BdfX0pKX1mdW5jdGlvbiBxYyhvKXt2YXIgbD1wPT57aWYoby5leHBvc2VkJiZPKCJleHBvc2UoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBwZXIgc2V0dXAoKS4iKSxwIT1udWxsKXt2YXIgYj10eXBlb2YgcDtiPT09Im9iamVjdCImJihtLmlzQXJyYXkocCk/Yj0iYXJyYXkiOkkuaXNSZWYocCkmJihiPSJyZWYiKSksYiE9PSJvYmplY3QiJiZPKCJleHBvc2UoKSBzaG91bGQgYmUgcGFzc2VkIGEgcGxhaW4gb2JqZWN0LCByZWNlaXZlZCAiLmNvbmNhdChiLCIuIikpfW8uZXhwb3NlZD1wfHx7fX07cmV0dXJuIE9iamVjdC5mcmVlemUoe2dldCBhdHRycygpe3JldHVybiBZbChvKX0sZ2V0IHNsb3RzKCl7cmV0dXJuIGt1KG8pfSxnZXQgZW1pdCgpe3JldHVybiBmdW5jdGlvbihwKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCxQPW5ldyBBcnJheShiPjE/Yi0xOjApLFQ9MTtUPGI7VCsrKVBbVC0xXT1hcmd1bWVudHNbVF07cmV0dXJuIG8uZW1pdChwLC4uLlApfX0sZXhwb3NlOmx9KX1mdW5jdGlvbiBycyhvKXtpZihvLmV4cG9zZWQpcmV0dXJuIG8uZXhwb3NlUHJveHl8fChvLmV4cG9zZVByb3h5PW5ldyBQcm94eShJLnByb3h5UmVmcyhJLm1hcmtSYXcoby5leHBvc2VkKSkse2dldChsLHApe2lmKHAgaW4gbClyZXR1cm4gbFtwXTtpZihwIGluIEhvKXJldHVybiBIb1twXShvKX0saGFzKGwscCl7cmV0dXJuIHAgaW4gbHx8cCBpbiBIb319KSl9dmFyIEtsPS8oPzpefFstX10pKFx3KS9nLFJ1PW89Pm8ucmVwbGFjZShLbCxsPT5sLnRvVXBwZXJDYXNlKCkpLnJlcGxhY2UoL1stX10vZywiIik7ZnVuY3Rpb24gQWwobyl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBtLmlzRnVuY3Rpb24obyk/by5kaXNwbGF5TmFtZXx8by5uYW1lOm8ubmFtZXx8bCYmby5fX25hbWV9ZnVuY3Rpb24gaXMobyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsYj1BbChsKTtpZighYiYmbC5fX2ZpbGUpe3ZhciBQPWwuX19maWxlLm1hdGNoKC8oW14vXFxdKylcLlx3KyQvKTtQJiYoYj1QWzFdKX1pZighYiYmbyYmby5wYXJlbnQpe3ZhciBUPXg9Pntmb3IodmFyIHogaW4geClpZih4W3pdPT09bClyZXR1cm4gen07Yj1UKG8uY29tcG9uZW50c3x8by5wYXJlbnQudHlwZS5jb21wb25lbnRzKXx8VChvLmFwcENvbnRleHQuY29tcG9uZW50cyl9cmV0dXJuIGI/UnUoYik6cD8iQXBwIjoiQW5vbnltb3VzIn1mdW5jdGlvbiBvcyhvKXtyZXR1cm4gbS5pc0Z1bmN0aW9uKG8pJiYiX192Y2NPcHRzImluIG99dmFyIEVjPShvLGwpPT57dmFyIHA9SS5jb21wdXRlZChvLGwsZC5pc0luU1NSQ29tcG9uZW50U2V0dXApO3t2YXIgYj1ObigpO2ImJmIuYXBwQ29udGV4dC5jb25maWcud2FyblJlY3Vyc2l2ZUNvbXB1dGVkJiYocC5fd2FyblJlY3Vyc2l2ZT0hMCl9cmV0dXJuIHB9O2Z1bmN0aW9uIFljKG8sbCl7dmFyIHA9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0uRU1QVFlfT0JKLGI9Tm4oKTtpZighYilyZXR1cm4gTygidXNlTW9kZWwoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuIiksSS5yZWYoKTtpZighYi5wcm9wc09wdGlvbnNbMF1bbF0pcmV0dXJuIE8oJ3VzZU1vZGVsKCkgY2FsbGVkIHdpdGggcHJvcCAiJy5jb25jYXQobCwnIiB3aGljaCBpcyBub3QgZGVjbGFyZWQuJykpLEkucmVmKCk7dmFyIFA9bS5jYW1lbGl6ZShsKSxUPW0uaHlwaGVuYXRlKGwpLHg9SS5jdXN0b21SZWYoKEgsWCk9Pnt2YXIgeWU7cmV0dXJuIGV0KCgpPT57dmFyIHVlPW9bbF07bS5oYXNDaGFuZ2VkKHllLHVlKSYmKHllPXVlLFgoKSl9KSx7Z2V0KCl7cmV0dXJuIEgoKSxwLmdldD9wLmdldCh5ZSk6eWV9LHNldCh1ZSl7dmFyIGFlPWIudm5vZGUucHJvcHM7IShhZSYmKGwgaW4gYWV8fFAgaW4gYWV8fFQgaW4gYWUpJiYoIm9uVXBkYXRlOiIuY29uY2F0KGwpaW4gYWV8fCJvblVwZGF0ZToiLmNvbmNhdChQKWluIGFlfHwib25VcGRhdGU6Ii5jb25jYXQoVClpbiBhZSkpJiZtLmhhc0NoYW5nZWQodWUseWUpJiYoeWU9dWUsWCgpKSxiLmVtaXQoInVwZGF0ZToiLmNvbmNhdChsKSxwLnNldD9wLnNldCh1ZSk6dWUpfX19KSx6PWw9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsTW9kaWZpZXJzIjoiIi5jb25jYXQobCwiTW9kaWZpZXJzIik7cmV0dXJuIHhbU3ltYm9sLml0ZXJhdG9yXT0oKT0+e3ZhciBIPTA7cmV0dXJue25leHQoKXtyZXR1cm4gSDwyP3t2YWx1ZTpIKys/b1t6XXx8e306eCxkb25lOiExfTp7ZG9uZTohMH19fX0seH1mdW5jdGlvbiB4dShvLGwscCl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gYj09PTI/bS5pc09iamVjdChsKSYmIW0uaXNBcnJheShsKT9UbyhsKT9YbihvLG51bGwsW2xdKTpYbihvLGwpOlhuKG8sbnVsbCxsKTooYj4zP3A9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOmI9PT0zJiZUbyhwKSYmKHA9W3BdKSxYbihvLGwscCkpfWZ1bmN0aW9uIEtjKCl7aWYodHlwZW9mIHdpbmRvdz09InVuZGVmaW5lZCIpcmV0dXJuO3ZhciBvPXtzdHlsZToiY29sb3I6IzNiYTc3NiJ9LGw9e3N0eWxlOiJjb2xvcjojMTY3N2ZmIn0scD17c3R5bGU6ImNvbG9yOiNmNTIyMmQifSxiPXtzdHlsZToiY29sb3I6I2ViMmY5NiJ9LFA9e2hlYWRlcih1ZSl7cmV0dXJuIG0uaXNPYmplY3QodWUpP3VlLl9faXNWdWU/WyJkaXYiLG8sIlZ1ZUluc3RhbmNlIl06SS5pc1JlZih1ZSk/WyJkaXYiLHt9LFsic3BhbiIsbyx5ZSh1ZSldLCI8Iix6KHVlLnZhbHVlKSwiPiJdOkkuaXNSZWFjdGl2ZSh1ZSk/WyJkaXYiLHt9LFsic3BhbiIsbyxJLmlzU2hhbGxvdyh1ZSk/IlNoYWxsb3dSZWFjdGl2ZSI6IlJlYWN0aXZlIl0sIjwiLHoodWUpLCI+Ii5jb25jYXQoSS5pc1JlYWRvbmx5KHVlKT8iIChyZWFkb25seSkiOiIiKV06SS5pc1JlYWRvbmx5KHVlKT9bImRpdiIse30sWyJzcGFuIixvLEkuaXNTaGFsbG93KHVlKT8iU2hhbGxvd1JlYWRvbmx5IjoiUmVhZG9ubHkiXSwiPCIseih1ZSksIj4iXTpudWxsOm51bGx9LGhhc0JvZHkodWUpe3JldHVybiB1ZSYmdWUuX19pc1Z1ZX0sYm9keSh1ZSl7aWYodWUmJnVlLl9faXNWdWUpcmV0dXJuWyJkaXYiLHt9LC4uLlQodWUuJCldfX07ZnVuY3Rpb24gVCh1ZSl7dmFyIGFlPVtdO3VlLnR5cGUucHJvcHMmJnVlLnByb3BzJiZhZS5wdXNoKHgoInByb3BzIixJLnRvUmF3KHVlLnByb3BzKSkpLHVlLnNldHVwU3RhdGUhPT1tLkVNUFRZX09CSiYmYWUucHVzaCh4KCJzZXR1cCIsdWUuc2V0dXBTdGF0ZSkpLHVlLmRhdGEhPT1tLkVNUFRZX09CSiYmYWUucHVzaCh4KCJkYXRhIixJLnRvUmF3KHVlLmRhdGEpKSk7dmFyIGtlPUgodWUsImNvbXB1dGVkIik7a2UmJmFlLnB1c2goeCgiY29tcHV0ZWQiLGtlKSk7dmFyIE1lPUgodWUsImluamVjdCIpO3JldHVybiBNZSYmYWUucHVzaCh4KCJpbmplY3RlZCIsTWUpKSxhZS5wdXNoKFsiZGl2Iix7fSxbInNwYW4iLHtzdHlsZTpiLnN0eWxlKyI7b3BhY2l0eTowLjY2In0sIiQgKGludGVybmFsKTogIl0sWyJvYmplY3QiLHtvYmplY3Q6dWV9XV0pLGFlfWZ1bmN0aW9uIHgodWUsYWUpe3JldHVybiBhZT1tLmV4dGVuZCh7fSxhZSksT2JqZWN0LmtleXMoYWUpLmxlbmd0aD9bImRpdiIse3N0eWxlOiJsaW5lLWhlaWdodDoxLjI1ZW07bWFyZ2luLWJvdHRvbTowLjZlbSJ9LFsiZGl2Iix7c3R5bGU6ImNvbG9yOiM0NzY1ODIifSx1ZV0sWyJkaXYiLHtzdHlsZToicGFkZGluZy1sZWZ0OjEuMjVlbSJ9LC4uLk9iamVjdC5rZXlzKGFlKS5tYXAoa2U9PlsiZGl2Iix7fSxbInNwYW4iLGIsa2UrIjogIl0seihhZVtrZV0sITEpXSldXTpbInNwYW4iLHt9XX1mdW5jdGlvbiB6KHVlKXt2YXIgYWU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiB0eXBlb2YgdWU9PSJudW1iZXIiP1sic3BhbiIsbCx1ZV06dHlwZW9mIHVlPT0ic3RyaW5nIj9bInNwYW4iLHAsSlNPTi5zdHJpbmdpZnkodWUpXTp0eXBlb2YgdWU9PSJib29sZWFuIj9bInNwYW4iLGIsdWVdOm0uaXNPYmplY3QodWUpP1sib2JqZWN0Iix7b2JqZWN0OmFlP0kudG9SYXcodWUpOnVlfV06WyJzcGFuIixwLFN0cmluZyh1ZSldfWZ1bmN0aW9uIEgodWUsYWUpe3ZhciBrZT11ZS50eXBlO2lmKCFtLmlzRnVuY3Rpb24oa2UpKXt2YXIgTWU9e307Zm9yKHZhciB3dCBpbiB1ZS5jdHgpWChrZSx3dCxhZSkmJihNZVt3dF09dWUuY3R4W3d0XSk7cmV0dXJuIE1lfX1mdW5jdGlvbiBYKHVlLGFlLGtlKXt2YXIgTWU9dWVba2VdO2lmKG0uaXNBcnJheShNZSkmJk1lLmluY2x1ZGVzKGFlKXx8bS5pc09iamVjdChNZSkmJmFlIGluIE1lfHx1ZS5leHRlbmRzJiZYKHVlLmV4dGVuZHMsYWUsa2UpfHx1ZS5taXhpbnMmJnVlLm1peGlucy5zb21lKHd0PT5YKHd0LGFlLGtlKSkpcmV0dXJuITB9ZnVuY3Rpb24geWUodWUpe3JldHVybiBJLmlzU2hhbGxvdyh1ZSk/IlNoYWxsb3dSZWYiOnVlLmVmZmVjdD8iQ29tcHV0ZWRSZWYiOiJSZWYifXdpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnM/d2luZG93LmRldnRvb2xzRm9ybWF0dGVycy5wdXNoKFApOndpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnM9W1BdfWZ1bmN0aW9uIEJ1KG8sbCxwLGIpe3ZhciBQPXBbYl07aWYoUCYmSmwoUCxvKSlyZXR1cm4gUDt2YXIgVD1sKCk7cmV0dXJuIFQubWVtbz1vLnNsaWNlKCkscFtiXT1UfWZ1bmN0aW9uIEpsKG8sbCl7dmFyIHA9by5tZW1vO2lmKHAubGVuZ3RoIT1sLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKylpZihtLmhhc0NoYW5nZWQocFtiXSxsW2JdKSlyZXR1cm4hMTtyZXR1cm4gbGE+MCYmenImJnpyLnB1c2gobyksITB9dmFyIFpsPSIzLjQuMjEiLGFzPU8sc3M9S24sTXU9bW4sRW49dmksbHM9e2NyZWF0ZUNvbXBvbmVudEluc3RhbmNlOm1jLHNldHVwQ29tcG9uZW50OmJjLHJlbmRlckNvbXBvbmVudFJvb3Q6dG4sc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlOktyLGlzVk5vZGU6VG8sbm9ybWFsaXplVk5vZGU6SWl9LEdvPWxzLEx1PW51bGwsWGw9bnVsbCxTYz1udWxsLFFsPXtpbnNlcnQ6KG8sbCxwKT0+cD9sLmluc2VydEJlZm9yZShvLHApOmwuYXBwZW5kQ2hpbGQobykscmVtb3ZlOm89Pnt2YXIgbD1vLnBhcmVudE5vZGU7bCYmbC5yZW1vdmVDaGlsZChvKX0sY3JlYXRlRWxlbWVudDpvPT5jLmNyZWF0ZUVsZW1lbnQobyksY3JlYXRlVGV4dDpvPT5jLmNyZWF0ZVRleHQobyksY3JlYXRlQ29tbWVudDpvPT5jLmNyZWF0ZUNvbW1lbnQobyksc2V0VGV4dDoobyxsKT0+e28uc2V0QXR0cigidmFsdWUiLGwpfSxzZXRFbGVtZW50VGV4dDoobyxsKT0+e28uc2V0QXR0cigidmFsdWUiLGwpfSxwYXJlbnROb2RlOm89Pm8ucGFyZW50Tm9kZSxuZXh0U2libGluZzpvPT5vLm5leHRTaWJsaW5nfTtmdW5jdGlvbiBoYShvKXtyZXR1cm4gT2JqZWN0LmtleXMobyl9ZnVuY3Rpb24gTnMobyl7dmFyIGw9e307cmV0dXJuIG0uaXNBcnJheShvKSYmby5mb3JFYWNoKHA9PntoYShwKS5mb3JFYWNoKGI9Pnt2YXIgUD1wW2JdLFQ9bFtiXXx8KGxbYl09e30pO2hhKFApLmZvckVhY2goeD0+e3ZhciB6PVBbeF0sSD1UW3hdfHwoVFt4XT17fSk7aGEoeikuZm9yRWFjaChYPT57WFswXT09PSIhIj8oSFtYXT16W1hdLGRlbGV0ZSBIW1guc2xpY2UoMSldKTptLmhhc093bihILCIhIitYKXx8KEhbWF09eltYXSl9KX0pfSl9KSxsfWZ1bmN0aW9uIGdhKG8sbCl7dmFyIHA9bCYmbC5jbGFzc0xpc3Q7cmV0dXJuIHAmJnAuaW5jbHVkZXMobyl9dmFyIGVsPS9bK34+IF0kLyxScj0icGFyZW50Tm9kZSIsdGw9InByZXZpb3VzU2libGluZyI7ZnVuY3Rpb24gSXMobyxsKXtmb3IodmFyIHA9by5zcGxpdCgiLiIpLGI9cC5sZW5ndGgtMTtiPjA7Yi0tKXt2YXIgUD1wW2JdLFQ9UFtQLmxlbmd0aC0xXSx4PVAucmVwbGFjZShlbCwiIik7aWYoVD09PSJ+Inx8VD09PSIgIil7Zm9yKHZhciB6PVQ9PT0ifiI/dGw6UnI7bCYmKGw9bFt6XSwhZ2EoeCxsKSk7KTtpZighbClyZXR1cm4hMX1lbHNlIGlmKFQ9PT0iPiI/bD1sJiZsW1JyXTpUPT09IisiJiYobD1sJiZsW3RsXSksIWdhKHgsbCkpcmV0dXJuITF9cmV0dXJuITB9dmFyIG5sPTFlMztmdW5jdGlvbiBKYyhvLGwscCl7dmFye3N0eWxlczpiLHdlaWdodHM6UH09bztoYShsKS5mb3JFYWNoKFQ9PntpZighKFQmJnAmJiFJcyhULHApKSl7dmFyIHg9VC5zcGxpdCgiLiIpLmxlbmd0aCx6PWxbVF07aGEoeikuZm9yRWFjaChIPT57dmFyIFg9eltIXSx5ZT1IWzBdPT09IiEiO3llJiYoSD1ILnNsaWNlKDEpKTt2YXIgdWU9UFtIXXx8MCxhZT14Kyh5ZT9ubDowKTthZT49dWUmJihQW0hdPWFlLGJbSF09WCl9KX19KX1mdW5jdGlvbiBCYShvLGwpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLGI9e3N0eWxlczp7fSx3ZWlnaHRzOnt9fTtyZXR1cm4gby5mb3JFYWNoKFA9Pnt2YXIgVD1sW1BdO1QmJkpjKGIsVCxwKX0pLGIuc3R5bGVzfWZ1bmN0aW9uIFpjKG8pe3JldHVybiBCYShvLmNsYXNzTGlzdCxvLnN0eWxlU2hlZXQsbyl9ZnVuY3Rpb24gdmEobyxsKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbDtyZXR1cm4gQmEobyxNYShsKSxwKX1mdW5jdGlvbiBNYShvKXt2YXJ7dHlwZTpsLGFwcENvbnRleHQ6cH09byxiPWw7aWYoIWIuX19zdHlsZXMpaWYocCYmbS5pc0FycmF5KHAucHJvdmlkZXMuX19nbG9iYWxTdHlsZXMpJiYocC5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcz1OcyhwLnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzKSksYi5tcFR5cGU9PT0icGFnZSImJnApYi5fX3N0eWxlcz1wLnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzO2Vsc2V7dmFyIFA9W107cCYmUC5wdXNoKHAucHJvdmlkZXMuX19nbG9iYWxTdHlsZXMpLG0uaXNBcnJheShiLnN0eWxlcykmJmIuc3R5bGVzLmZvckVhY2goVD0+UC5wdXNoKFQpKSxiLl9fc3R5bGVzPU5zKFApfXJldHVybiBiLl9fc3R5bGVzfWZ1bmN0aW9uIGZpKG8sbCxwKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtiJiYoW2wscF09d2MobyxsLHAsYikpLG8uc2V0QXR0cihsLHApfXZhciBTbj0iaG92ZXJDbGFzcyIscmw9InBsYWNlaG9sZGVyQ2xhc3MiLFhjPSJwbGFjZWhvbGRlclN0eWxlIixRYz0iaW5kaWNhdG9yQ2xhc3MiLExhPSJpbmRpY2F0b3JTdHlsZSIsZXU9Im1hc2tDbGFzcyIsbWE9Im1hc2tTdHlsZSIsX2E9e3ZpZXc6e2NsYXNzOltTbl0sc3R5bGU6W119LGJ1dHRvbjp7Y2xhc3M6W1NuXSxzdHlsZTpbXX0sbmF2aWdhdG9yOntjbGFzczpbU25dLHN0eWxlOltdfSwidS1pbnB1dCI6e2NsYXNzOltybF0sc3R5bGU6W1hjXX0sInUtdGV4dGFyZWEiOntjbGFzczpbcmxdLHN0eWxlOltYY119LCJwaWNrZXItdmlldyI6e2NsYXNzOltRYyxldV0sc3R5bGU6W0xhLG1hXX19O2Z1bmN0aW9uIHdjKG8sbCxwLGIpe2lmKCFwKXJldHVybltsLHBdO3ZhciBQPV9hW28udHlwZV07aWYoUCl7dmFyIFQ9bS5jYW1lbGl6ZShsKTtpZihQLmNsYXNzLmluZGV4T2YoVCk+LTEpcmV0dXJuW1QsdmEoW3BdLGIsbyldO2lmKFAuc3R5bGUuaW5kZXhPZihsKT4tMSlyZXR1cm4gbS5pc1N0cmluZyhwKT9bVCxtLnBhcnNlU3RyaW5nU3R5bGUocCldOltULG0ubm9ybWFsaXplU3R5bGUocCldfXJldHVybltsLHBdfWZ1bmN0aW9uIHR1KG8sbCxwKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtpZighIWIpe3ZhciBQPXA/cC5zcGxpdCgiICIpOltdO28uc2V0Q2xhc3NMaXN0KFApLG8uc2V0U3R5bGVTaGVldChNYShiKSl9fWZ1bmN0aW9uIGJhKG8sbCxwLGIpe28uYWRkRXZlbnQobCxwKX1mdW5jdGlvbiBQbyhvLGwpe28ucmVtb3ZlRXZlbnQobCl9ZnVuY3Rpb24gbnUobyxsLHAsYil7dmFyIFA9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsVD1vLl92ZWl8fChvLl92ZWk9e30pLHg9VFtsXTtpZihiJiZ4KXgudmFsdWU9YjtlbHNle3Zhclt6LEhdPWVjKGwpO2lmKGIpe3ZhciBYPVRbbF09RHUoYixQKTtiYShvLHosWCl9ZWxzZSB4JiYoUG8obyx6KSxUW2xdPXZvaWQgMCl9fXZhciBDYz0vKD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gcnUobyl7cmV0dXJuIG89PT0ib24tcG9zdC1tZXNzYWdlIj8ib25Qb3N0TWVzc2FnZSI6b31mdW5jdGlvbiBlYyhvKXt2YXIgbDtpZihDYy50ZXN0KG8pKXtsPXt9O2Zvcih2YXIgcDtwPW8ubWF0Y2goQ2MpOylvPW8uc2xpY2UoMCxvLmxlbmd0aC1wWzBdLmxlbmd0aCksbFtwWzBdLnRvTG93ZXJDYXNlKCldPSEwfXZhciBiPW9bMl09PT0iOiI/by5zbGljZSgzKTptLmh5cGhlbmF0ZShvLnNsaWNlKDIpKTtyZXR1cm5bcnUoYiksbF19ZnVuY3Rpb24gRHUobyxsKXt2YXIgcD1QPT57a24ocC52YWx1ZSxsLDUsW1BdKX07cC52YWx1ZT1vO3ZhciBiPW5ldyBTZXQ7cmV0dXJuIG0uaXNBcnJheShwLnZhbHVlKT9wLnZhbHVlLmZvckVhY2goUD0+e1AubW9kaWZpZXJzJiZQLm1vZGlmaWVycy5mb3JFYWNoKFQ9PntiLmFkZChUKX0pfSk6cC52YWx1ZS5tb2RpZmllcnMmJnAudmFsdWUubW9kaWZpZXJzLmZvckVhY2goUD0+e2IuYWRkKFApfSkscC5tb2RpZmllcnM9Wy4uLmJdLHB9ZnVuY3Rpb24geWEobyxsLHApe2lmKCEhcCl7bS5pc1N0cmluZyhwKSYmKHA9bS5wYXJzZVN0cmluZ1N0eWxlKHApKTt2YXIgYj17fSxQPWwmJiFtLmlzU3RyaW5nKGwpO2lmKFApe2Zvcih2YXIgVCBpbiBsKXBbVF09PW51bGwmJihiW20uY2FtZWxpemUoVCldPSIiKTtmb3IodmFyIHggaW4gcCl7dmFyIHo9cFt4XTt6IT09bFt4XSYmKGJbbS5jYW1lbGl6ZSh4KV09eil9fWVsc2UgZm9yKHZhciBIIGluIHApYlttLmNhbWVsaXplKEgpXT1wW0hdO28uc2V0U3R5bGVzKGIpfX12YXIga3M9WyJ1LWlucHV0IiwidS10ZXh0YXJlYSJdLGl1PShvLGwscCxiLFAsVCx4LHosSCxYKT0+e2w9PT0iY2xhc3MiP3R1KG8scCxiLFh8fHgpOmw9PT0ic3R5bGUiP3lhKG8scCxiKTptLmlzT24obCk/bS5pc01vZGVsTGlzdGVuZXIobCl8fG51KG8sbCxwLGIseCk6bD09PSJtb2RlbFZhbHVlIiYma3MuaW5jbHVkZXMoby50eXBlKT9vLnNldEF0dHJzKHttb2RlbFZhbHVlOmIsdmFsdWU6Yn0pOmZpKG8sbCxiLHgpfTtmdW5jdGlvbiBGdSgpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiJHN0eWxlIjt7dmFyIGw9Tm4oKTtpZighbClyZXR1cm4gYXMoInVzZUNzc01vZHVsZSBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgc2V0dXAoKSIpLG0uRU1QVFlfT0JKO3ZhciBwPWwudHlwZS5fX2Nzc01vZHVsZXM7aWYoIXApcmV0dXJuIGFzKCJDdXJyZW50IGluc3RhbmNlIGRvZXMgbm90IGhhdmUgQ1NTIG1vZHVsZXMgaW5qZWN0ZWQuIiksbS5FTVBUWV9PQko7dmFyIGI9cFtvXTtyZXR1cm4gYnx8KGFzKCdDdXJyZW50IGluc3RhbmNlIGRvZXMgbm90IGhhdmUgQ1NTIG1vZHVsZSBuYW1lZCAiJy5jb25jYXQobywnIi4nKSksbS5FTVBUWV9PQkopfX1mdW5jdGlvbiBvdShvKXt2YXIgbD1ObigpO2lmKCFsKXthcygidXNlQ3NzVmFycyBpcyBjYWxsZWQgd2l0aG91dCBjdXJyZW50IGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UuIik7cmV0dXJufXZhciBwPSgpPT5FYShsLnN1YlRyZWUsbyhsLnByb3h5KSk7UmEoKCk9PktlKHAse2ZsdXNoOiJwb3N0In0pKSx6YShwKX1mdW5jdGlvbiBFYShvLGwpe2lmKG8uc2hhcGVGbGFnJjEyOCl7dmFyIHA9by5zdXNwZW5zZTtvPXAuYWN0aXZlQnJhbmNoLHAucGVuZGluZ0JyYW5jaCYmIXAuaXNIeWRyYXRpbmcmJnAuZWZmZWN0cy5wdXNoKCgpPT57RWEocC5hY3RpdmVCcmFuY2gsbCl9KX1mb3IoO28uY29tcG9uZW50OylvPW8uY29tcG9uZW50LnN1YlRyZWU7aWYoby5zaGFwZUZsYWcmMSYmby5lbCl7dmFyIGI9by5lbC5zdHlsZTtmb3IodmFyIFAgaW4gbCliLnNldFByb3BlcnR5KCItLSIuY29uY2F0KFApLGxbUF0pfWVsc2Ugby50eXBlPT09bXImJm8uY2hpbGRyZW4uZm9yRWFjaChUPT5FYShULGwpKX12YXIgT2w9WyJjdHJsIiwic2hpZnQiLCJhbHQiLCJtZXRhIl0sQWM9e3N0b3A6bz0+by5zdG9wUHJvcGFnYXRpb24oKSxwcmV2ZW50Om89Pm8ucHJldmVudERlZmF1bHQoKSxzZWxmOm89Pm8udGFyZ2V0IT09by5jdXJyZW50VGFyZ2V0LGN0cmw6bz0+IW8uY3RybEtleSxzaGlmdDpvPT4hby5zaGlmdEtleSxhbHQ6bz0+IW8uYWx0S2V5LG1ldGE6bz0+IW8ubWV0YUtleSxsZWZ0Om89PiJidXR0b24iaW4gbyYmby5idXR0b24hPT0wLG1pZGRsZTpvPT4iYnV0dG9uImluIG8mJm8uYnV0dG9uIT09MSxyaWdodDpvPT4iYnV0dG9uImluIG8mJm8uYnV0dG9uIT09MixleGFjdDoobyxsKT0+T2wuc29tZShwPT5vWyIiLmNvbmNhdChwLCJLZXkiKV0mJiFsLmluY2x1ZGVzKHApKX0sT2M9KG8sbCk9PmZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wO2I8bC5sZW5ndGg7YisrKXt2YXIgUD1BY1tsW2JdXTtpZihQJiZQKHAsbCkpcmV0dXJufWZvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLHg9bmV3IEFycmF5KFQ+MT9ULTE6MCksej0xO3o8VDt6KyspeFt6LTFdPWFyZ3VtZW50c1t6XTtyZXR1cm4gbyhwLC4uLngpfSxpbD0obyxsKT0+cD0+e2lmKCJrZXkiaW4gcCl7dmFyIGI9bS5oeXBoZW5hdGUocC5rZXkpO2lmKGwuc29tZShQPT5QPT09YikpcmV0dXJuIG8ocCl9fSxEYT1tLmV4dGVuZCh7cGF0Y2hQcm9wOml1fSxRbCksdGM7ZnVuY3Rpb24gYXUoKXtyZXR1cm4gdGN8fCh0Yz1PcihEYSkpfXZhciBzdT1mdW5jdGlvbigpe2F1KCkucmVuZGVyKC4uLmFyZ3VtZW50cyl9LFRsPWZ1bmN0aW9uKCl7dmFyIG89YXUoKS5jcmVhdGVBcHAoLi4uYXJndW1lbnRzKSx7bW91bnQ6bH09bztyZXR1cm4gby5tb3VudD1wPT5sKHApLG99O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiY2FtZWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLmNhbWVsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJjYXBpdGFsaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jYXBpdGFsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJoeXBoZW5hdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLmh5cGhlbmF0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibm9ybWFsaXplQ2xhc3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLm5vcm1hbGl6ZUNsYXNzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJub3JtYWxpemVQcm9wcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9ybWFsaXplUHJvcHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIm5vcm1hbGl6ZVN0eWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5ub3JtYWxpemVTdHlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwidG9EaXNwbGF5U3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS50b0Rpc3BsYXlTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInRvSGFuZGxlcktleSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0udG9IYW5kbGVyS2V5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJFZmZlY3RTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuRWZmZWN0U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIlJlYWN0aXZlRWZmZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5SZWFjdGl2ZUVmZmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiVHJhY2tPcFR5cGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5UcmFja09wVHlwZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIlRyaWdnZXJPcFR5cGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5UcmlnZ2VyT3BUeXBlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiY3VzdG9tUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jdXN0b21SZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsImVmZmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZWZmZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJlZmZlY3RTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZWZmZWN0U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsImdldEN1cnJlbnRTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0Q3VycmVudFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJpc1Byb3h5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1Byb3h5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJpc1JlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1JlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJpc1JlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1JlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJpc1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsImlzU2hhbGxvdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNTaGFsbG93fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJtYXJrUmF3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5tYXJrUmF3fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJvblNjb3BlRGlzcG9zZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkub25TY29wZURpc3Bvc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInByb3h5UmVmcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucHJveHlSZWZzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJyZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInJlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5yZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwicmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5yZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInNoYWxsb3dSZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuc2hhbGxvd1JlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJzaGFsbG93UmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnNoYWxsb3dSZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwic2hhbGxvd1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuc2hhbGxvd1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwic3RvcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuc3RvcH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwidG9SYXciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnRvUmF3fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJ0b1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudG9SZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInRvUmVmcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudG9SZWZzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJ0b1ZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS50b1ZhbHVlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJ0cmlnZ2VyUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS50cmlnZ2VyUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJ1bnJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudW5yZWZ9fSksZC5CYXNlVHJhbnNpdGlvbj1VZSxkLkJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzPUosZC5Db21tZW50PUxuLGQuRGVwcmVjYXRpb25UeXBlcz1TYyxkLkVycm9yQ29kZXM9TXIsZC5FcnJvclR5cGVTdHJpbmdzPXNzLGQuRnJhZ21lbnQ9bXIsZC5LZWVwQWxpdmU9UmwsZC5TdGF0aWM9RG4sZC5TdXNwZW5zZT1kcyxkLlRlbGVwb3J0PXhhLGQuVGV4dD1NbixkLmFzc2VydE51bWJlcj1wbixkLmNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nPWtuLGQuY2FsbFdpdGhFcnJvckhhbmRsaW5nPXNuLGQuY2xvbmVWTm9kZT0kaSxkLmNvbXBhdFV0aWxzPVhsLGQuY29tcHV0ZWQ9RWMsZC5jcmVhdGVBcHA9VGwsZC5jcmVhdGVCbG9jaz1PbyxkLmNyZWF0ZUNvbW1lbnRWTm9kZT1OdSxkLmNyZWF0ZUVsZW1lbnRCbG9jaz1OaSxkLmNyZWF0ZUVsZW1lbnRWTm9kZT1UcyxkLmNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyPVlzLGQuY3JlYXRlUHJvcHNSZXN0UHJveHk9U3QsZC5jcmVhdGVSZW5kZXJlcj1PcixkLmNyZWF0ZVNsb3RzPUVvLGQuY3JlYXRlU3RhdGljVk5vZGU9dmMsZC5jcmVhdGVUZXh0Vk5vZGU9V2wsZC5jcmVhdGVWTm9kZT1YbixkLmRlZmluZUFzeW5jQ29tcG9uZW50PWJvLGQuZGVmaW5lQ29tcG9uZW50PXRvLGQuZGVmaW5lRW1pdHM9JCxkLmRlZmluZUV4cG9zZT1uZSxkLmRlZmluZU1vZGVsPXdlLGQuZGVmaW5lT3B0aW9ucz1pZSxkLmRlZmluZVByb3BzPVcsZC5kZWZpbmVTbG90cz1nZSxkLmRldnRvb2xzPU11LGQuZ2V0Q3VycmVudEluc3RhbmNlPU5uLGQuZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuPWRyLGQuZ3VhcmRSZWFjdGl2ZVByb3BzPXpsLGQuaD14dSxkLmhhbmRsZUVycm9yPUxyLGQuaGFzSW5qZWN0aW9uQ29udGV4dD1vYSxkLmluaXRDdXN0b21Gb3JtYXR0ZXI9S2MsZC5pbmplY3Q9R24sZC5pbmplY3RIb29rPWlhLGQuaXNNZW1vU2FtZT1KbCxkLmlzUnVudGltZU9ubHk9c28sZC5pc1ZOb2RlPVRvLGQubG9nRXJyb3I9VHIsZC5tZXJnZURlZmF1bHRzPVB0LGQubWVyZ2VNb2RlbHM9RnQsZC5tZXJnZVByb3BzPUdsLGQubmV4dFRpY2s9RHQsZC5vbkFjdGl2YXRlZD1rYSxkLm9uQmVmb3JlTW91bnQ9Q3IsZC5vbkJlZm9yZVVubW91bnQ9Vm8sZC5vbkJlZm9yZVVwZGF0ZT1ubyxkLm9uRGVhY3RpdmF0ZWQ9aGwsZC5vbkVycm9yQ2FwdHVyZWQ9Z2wsZC5vbk1vdW50ZWQ9UmEsZC5vblJlbmRlclRyYWNrZWQ9R2EsZC5vblJlbmRlclRyaWdnZXJlZD1ncyxkLm9uU2VydmVyUHJlZmV0Y2g9V2EsZC5vblVubW91bnRlZD1VbyxkLm9uVXBkYXRlZD16YSxkLm9wZW5CbG9jaz1RcixkLnBhcnNlQ2xhc3NMaXN0PXZhLGQucGFyc2VDbGFzc1N0eWxlcz1aYyxkLnBvcFNjb3BlSWQ9aWksZC5wcm92aWRlPUJuLGQucHVzaFNjb3BlSWQ9Rm4sZC5xdWV1ZVBvc3RGbHVzaENiPURyLGQucmVnaXN0ZXJSdW50aW1lQ29tcGlsZXI9cWwsZC5yZW5kZXI9c3UsZC5yZW5kZXJMaXN0PUJsLGQucmVuZGVyU2xvdD1mYyxkLnJlc29sdmVDb21wb25lbnQ9ZnMsZC5yZXNvbHZlRGlyZWN0aXZlPUVyLGQucmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ9cm4sZC5yZXNvbHZlRmlsdGVyPUx1LGQucmVzb2x2ZVRyYW5zaXRpb25Ib29rcz1vbixkLnNldEJsb2NrVHJhY2tpbmc9Y2EsZC5zZXREZXZ0b29sc0hvb2s9RW4sZC5zZXRUcmFuc2l0aW9uSG9va3M9Vm4sZC5zc3JDb250ZXh0S2V5PXBlLGQuc3NyVXRpbHM9R28sZC50b0hhbmRsZXJzPVVzLGQudHJhbnNmb3JtVk5vZGVBcmdzPWpsLGQudXNlQXR0cnM9RWUsZC51c2VDc3NNb2R1bGU9RnUsZC51c2VDc3NTdHlsZXM9TnMsZC51c2VDc3NWYXJzPW91LGQudXNlTW9kZWw9WWMsZC51c2VTU1JDb250ZXh0PVplLGQudXNlU2xvdHM9SGUsZC51c2VUcmFuc2l0aW9uU3RhdGU9TmEsZC52ZXJzaW9uPVpsLGQud2Fybj1hcyxkLndhdGNoPWZyLGQud2F0Y2hFZmZlY3Q9S2UsZC53YXRjaFBvc3RFZmZlY3Q9bXQsZC53YXRjaFN5bmNFZmZlY3Q9ZXQsZC53aXRoQXN5bmNDb250ZXh0PV90LGQud2l0aEN0eD0kdCxkLndpdGhEZWZhdWx0cz1CZSxkLndpdGhEaXJlY3RpdmVzPWhzLGQud2l0aEtleXM9aWwsZC53aXRoTWVtbz1CdSxkLndpdGhNb2RpZmllcnM9T2MsZC53aXRoU2NvcGVJZD1GcixkfSh7fSxBLFIsXyk7cmV0dXJuIHcuX19UWVBFX189Im52dWUiLHd9dmFyIFZ2PWJJKENJKTt2YXIgYWY9e307aEkoYWYse0VNUFRZX0FSUjooKT0+VEksRU1QVFlfT0JKOigpPT5PSSxOTzooKT0+TkksTk9PUDooKT0+UEksY2FtZWxpemU6KCk9PkhJLGNhcGl0YWxpemU6KCk9Pm9mLGRlZjooKT0+R0ksZXh0ZW5kOigpPT5mbyxnZXRHbG9iYWxUaGlzOigpPT5LSSxoYXNDaGFuZ2VkOigpPT56SSxoYXNPd246KCk9PkxjLGh5cGhlbmF0ZTooKT0+cmYsaW5jbHVkZUJvb2xlYW5BdHRyOigpPT5mayxpbnZva2VBcnJheUZuczooKT0+V0ksaXNBcnJheTooKT0+WWksaXNCb29sZWFuQXR0cjooKT0+dWssaXNCdWlsdEluRGlyZWN0aXZlOigpPT5WSSxpc0Z1bmN0aW9uOigpPT5Rbixpc0dsb2JhbGx5QWxsb3dlZDooKT0+WkksaXNIVE1MVGFnOigpPT5hayxpc0ludGVnZXJLZXk6KCk9PkRJLGlzS25vd25IdG1sQXR0cjooKT0+ZGssaXNLbm93blN2Z0F0dHI6KCk9PnBrLGlzTWFwOigpPT5Vdixpc01vZGVsTGlzdGVuZXI6KCk9PmtJLGlzT2JqZWN0OigpPT5DdSxpc09uOigpPT5JSSxpc1BsYWluT2JqZWN0OigpPT5BdSxpc1Byb21pc2U6KCk9Pk1JLGlzUmVnRXhwOigpPT5CSSxpc1JlbmRlcmFibGVBdHRyVmFsdWU6KCk9PmhrLGlzUmVzZXJ2ZWRQcm9wOigpPT5GSSxpc1NWR1RhZzooKT0+c2ssaXNTZXQ6KCk9Pkh2LGlzU3RyaW5nOigpPT5waSxpc1N5bWJvbDooKT0+S2QsaXNWb2lkVGFnOigpPT5sayxsb29zZVRvTnVtYmVyOigpPT5xSSxtYWtlTWFwOigpPT5mbCxub3JtYWxpemVDbGFzczooKT0+WmQsbm9ybWFsaXplUHJvcHM6KCk9Pm5rLG5vcm1hbGl6ZVN0eWxlOigpPT5KZCxwYXJzZVN0cmluZ1N0eWxlOigpPT56dixyZW1vdmU6KCk9PlJJLHN0cmluZ2lmeVN0eWxlOigpPT50ayx0b0Rpc3BsYXlTdHJpbmc6KCk9PmdrLHRvSGFuZGxlcktleTooKT0+akksdG9OdW1iZXI6KCk9PllJLHRvUmF3VHlwZTooKT0+TEksdG9UeXBlU3RyaW5nOigpPT5kbH0pO2Z1bmN0aW9uIGZsKGcsYyl7bGV0IF89bmV3IFNldChnLnNwbGl0KCIsIikpO3JldHVybiBjP0E9Pl8uaGFzKEEudG9Mb3dlckNhc2UoKSk6QT0+Xy5oYXMoQSl9dmFyIE9JPXt9LFRJPVtdLFBJPSgpPT57fSxOST0oKT0+ITEsSUk9Zz0+Zy5jaGFyQ29kZUF0KDApPT09MTExJiZnLmNoYXJDb2RlQXQoMSk9PT0xMTAmJihnLmNoYXJDb2RlQXQoMik+MTIyfHxnLmNoYXJDb2RlQXQoMik8OTcpLGtJPWc9Pmcuc3RhcnRzV2l0aCgib25VcGRhdGU6IiksZm89T2JqZWN0LmFzc2lnbixSST0oZyxjKT0+e2xldCBfPWcuaW5kZXhPZihjKTtfPi0xJiZnLnNwbGljZShfLDEpfSx4ST1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LExjPShnLGMpPT54SS5jYWxsKGcsYyksWWk9QXJyYXkuaXNBcnJheSxVdj1nPT5kbChnKT09PSJbb2JqZWN0IE1hcF0iLEh2PWc9PmRsKGcpPT09IltvYmplY3QgU2V0XSIsQkk9Zz0+ZGwoZyk9PT0iW29iamVjdCBSZWdFeHBdIixRbj1nPT50eXBlb2YgZz09ImZ1bmN0aW9uIixwaT1nPT50eXBlb2YgZz09InN0cmluZyIsS2Q9Zz0+dHlwZW9mIGc9PSJzeW1ib2wiLEN1PWc9PmchPT1udWxsJiZ0eXBlb2YgZz09Im9iamVjdCIsTUk9Zz0+KEN1KGcpfHxRbihnKSkmJlFuKGcudGhlbikmJlFuKGcuY2F0Y2gpLCR2PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZGw9Zz0+JHYuY2FsbChnKSxMST1nPT5kbChnKS5zbGljZSg4LC0xKSxBdT1nPT5kbChnKT09PSJbb2JqZWN0IE9iamVjdF0iLERJPWc9PnBpKGcpJiZnIT09Ik5hTiImJmdbMF0hPT0iLSImJiIiK3BhcnNlSW50KGcsMTApPT09ZyxGST1mbCgiLGtleSxyZWYscmVmX2ZvcixyZWZfa2V5LG9uVm5vZGVCZWZvcmVNb3VudCxvblZub2RlTW91bnRlZCxvblZub2RlQmVmb3JlVXBkYXRlLG9uVm5vZGVVcGRhdGVkLG9uVm5vZGVCZWZvcmVVbm1vdW50LG9uVm5vZGVVbm1vdW50ZWQiKSxWST1mbCgiYmluZCxjbG9hayxlbHNlLWlmLGVsc2UsZm9yLGh0bWwsaWYsbW9kZWwsb24sb25jZSxwcmUsc2hvdyxzbG90LHRleHQsbWVtbyIpLFlmPWc9PntsZXQgYz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBfPT5jW19dfHwoY1tfXT1nKF8pKX0sVUk9Ly0oXHcpL2csSEk9WWYoZz0+Zy5yZXBsYWNlKFVJLChjLF8pPT5fP18udG9VcHBlckNhc2UoKToiIikpLCRJPS9cQihbQS1aXSkvZyxyZj1ZZihnPT5nLnJlcGxhY2UoJEksIi0kMSIpLnRvTG93ZXJDYXNlKCkpLG9mPVlmKGc9PmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZy5zbGljZSgxKSksakk9WWYoZz0+Zz9gb24ke29mKGcpfWA6IiIpLHpJPShnLGMpPT4hT2JqZWN0LmlzKGcsYyksV0k9KGcsYyk9Pntmb3IobGV0IF89MDtfPGcubGVuZ3RoO18rKylnW19dKGMpfSxHST0oZyxjLF8pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsYyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6X30pfSxxST1nPT57bGV0IGM9cGFyc2VGbG9hdChnKTtyZXR1cm4gaXNOYU4oYyk/ZzpjfSxZST1nPT57bGV0IGM9cGkoZyk/TnVtYmVyKGcpOk5hTjtyZXR1cm4gaXNOYU4oYyk/ZzpjfSxqdixLST0oKT0+anZ8fChqdj10eXBlb2YgZ2xvYmFsVGhpcyE9InVuZGVmaW5lZCI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIj93aW5kb3c6dHlwZW9mIGdsb2JhbCE9InVuZGVmaW5lZCI/Z2xvYmFsOnt9KSxKST0iSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LGNvbnNvbGUsRXJyb3IiLFpJPWZsKEpJKTtmdW5jdGlvbiBKZChnKXtpZihZaShnKSl7bGV0IGM9e307Zm9yKGxldCBfPTA7XzxnLmxlbmd0aDtfKyspe2xldCBBPWdbX10sUj1waShBKT96dihBKTpKZChBKTtpZihSKWZvcihsZXQgdyBpbiBSKWNbd109Ult3XX1yZXR1cm4gY31lbHNlIGlmKHBpKGcpfHxDdShnKSlyZXR1cm4gZ312YXIgWEk9LzsoPyFbXihdKlwpKS9nLFFJPS86KFteXSspLyxlaz0vXC9cKlteXSo/XCpcLy9nO2Z1bmN0aW9uIHp2KGcpe2xldCBjPXt9O3JldHVybiBnLnJlcGxhY2UoZWssIiIpLnNwbGl0KFhJKS5mb3JFYWNoKF89PntpZihfKXtsZXQgQT1fLnNwbGl0KFFJKTtBLmxlbmd0aD4xJiYoY1tBWzBdLnRyaW0oKV09QVsxXS50cmltKCkpfX0pLGN9ZnVuY3Rpb24gdGsoZyl7bGV0IGM9IiI7aWYoIWd8fHBpKGcpKXJldHVybiBjO2ZvcihsZXQgXyBpbiBnKXtsZXQgQT1nW19dLFI9Xy5zdGFydHNXaXRoKCItLSIpP186cmYoXyk7KHBpKEEpfHx0eXBlb2YgQT09Im51bWJlciIpJiYoYys9YCR7Un06JHtBfTtgKX1yZXR1cm4gY31mdW5jdGlvbiBaZChnKXtsZXQgYz0iIjtpZihwaShnKSljPWc7ZWxzZSBpZihZaShnKSlmb3IobGV0IF89MDtfPGcubGVuZ3RoO18rKyl7bGV0IEE9WmQoZ1tfXSk7QSYmKGMrPUErIiAiKX1lbHNlIGlmKEN1KGcpKWZvcihsZXQgXyBpbiBnKWdbX10mJihjKz1fKyIgIik7cmV0dXJuIGMudHJpbSgpfWZ1bmN0aW9uIG5rKGcpe2lmKCFnKXJldHVybiBudWxsO2xldHtjbGFzczpjLHN0eWxlOl99PWc7cmV0dXJuIGMmJiFwaShjKSYmKGcuY2xhc3M9WmQoYykpLF8mJihnLnN0eWxlPUpkKF8pKSxnfXZhciByaz0iaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaGdyb3VwLGgxLGgyLGgzLGg0LGg1LGg2LG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LHN1bW1hcnksdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QiLGlrPSJzdmcsYW5pbWF0ZSxhbmltYXRlTW90aW9uLGFuaW1hdGVUcmFuc2Zvcm0sY2lyY2xlLGNsaXBQYXRoLGNvbG9yLXByb2ZpbGUsZGVmcyxkZXNjLGRpc2NhcmQsZWxsaXBzZSxmZUJsZW5kLGZlQ29sb3JNYXRyaXgsZmVDb21wb25lbnRUcmFuc2ZlcixmZUNvbXBvc2l0ZSxmZUNvbnZvbHZlTWF0cml4LGZlRGlmZnVzZUxpZ2h0aW5nLGZlRGlzcGxhY2VtZW50TWFwLGZlRGlzdGFudExpZ2h0LGZlRHJvcFNoYWRvdyxmZUZsb29kLGZlRnVuY0EsZmVGdW5jQixmZUZ1bmNHLGZlRnVuY1IsZmVHYXVzc2lhbkJsdXIsZmVJbWFnZSxmZU1lcmdlLGZlTWVyZ2VOb2RlLGZlTW9ycGhvbG9neSxmZU9mZnNldCxmZVBvaW50TGlnaHQsZmVTcGVjdWxhckxpZ2h0aW5nLGZlU3BvdExpZ2h0LGZlVGlsZSxmZVR1cmJ1bGVuY2UsZmlsdGVyLGZvcmVpZ25PYmplY3QsZyxoYXRjaCxoYXRjaHBhdGgsaW1hZ2UsbGluZSxsaW5lYXJHcmFkaWVudCxtYXJrZXIsbWFzayxtZXNoLG1lc2hncmFkaWVudCxtZXNocGF0Y2gsbWVzaHJvdyxtZXRhZGF0YSxtcGF0aCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyYWRpYWxHcmFkaWVudCxyZWN0LHNldCxzb2xpZGNvbG9yLHN0b3Asc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRQYXRoLHRpdGxlLHRzcGFuLHVua25vd24sdXNlLHZpZXciLG9rPSJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGhyLGltZyxpbnB1dCxsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiciIsYWs9ZmwocmspLHNrPWZsKGlrKSxsaz1mbChvayksY2s9Iml0ZW1zY29wZSxhbGxvd2Z1bGxzY3JlZW4sZm9ybW5vdmFsaWRhdGUsaXNtYXAsbm9tb2R1bGUsbm92YWxpZGF0ZSxyZWFkb25seSIsdWs9ZmwoY2srIixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY29udHJvbHMsZGVmYXVsdCxkZWZlcixkaXNhYmxlZCxoaWRkZW4saW5lcnQsbG9vcCxvcGVuLHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxjaGVja2VkLG11dGVkLG11bHRpcGxlLHNlbGVjdGVkIik7ZnVuY3Rpb24gZmsoZyl7cmV0dXJuISFnfHxnPT09IiJ9dmFyIGRrPWZsKCJhY2NlcHQsYWNjZXB0LWNoYXJzZXQsYWNjZXNza2V5LGFjdGlvbixhbGlnbixhbGxvdyxhbHQsYXN5bmMsYXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLGF1dG9mb2N1cyxhdXRvcGxheSxiYWNrZ3JvdW5kLGJnY29sb3IsYm9yZGVyLGJ1ZmZlcmVkLGNhcHR1cmUsY2hhbGxlbmdlLGNoYXJzZXQsY2hlY2tlZCxjaXRlLGNsYXNzLGNvZGUsY29kZWJhc2UsY29sb3IsY29scyxjb2xzcGFuLGNvbnRlbnQsY29udGVudGVkaXRhYmxlLGNvbnRleHRtZW51LGNvbnRyb2xzLGNvb3Jkcyxjcm9zc29yaWdpbixjc3AsZGF0YSxkYXRldGltZSxkZWNvZGluZyxkZWZhdWx0LGRlZmVyLGRpcixkaXJuYW1lLGRpc2FibGVkLGRvd25sb2FkLGRyYWdnYWJsZSxkcm9wem9uZSxlbmN0eXBlLGVudGVya2V5aGludCxmb3IsZm9ybSxmb3JtYWN0aW9uLGZvcm1lbmN0eXBlLGZvcm1tZXRob2QsZm9ybW5vdmFsaWRhdGUsZm9ybXRhcmdldCxoZWFkZXJzLGhlaWdodCxoaWRkZW4saGlnaCxocmVmLGhyZWZsYW5nLGh0dHAtZXF1aXYsaWNvbixpZCxpbXBvcnRhbmNlLGluZXJ0LGludGVncml0eSxpc21hcCxpdGVtcHJvcCxrZXl0eXBlLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb2FkaW5nLGxpc3QsbG9vcCxsb3csbWFuaWZlc3QsbWF4LG1heGxlbmd0aCxtaW5sZW5ndGgsbWVkaWEsbWluLG11bHRpcGxlLG11dGVkLG5hbWUsbm92YWxpZGF0ZSxvcGVuLG9wdGltdW0scGF0dGVybixwaW5nLHBsYWNlaG9sZGVyLHBvc3RlcixwcmVsb2FkLHJhZGlvZ3JvdXAscmVhZG9ubHkscmVmZXJyZXJwb2xpY3kscmVsLHJlcXVpcmVkLHJldmVyc2VkLHJvd3Mscm93c3BhbixzYW5kYm94LHNjb3BlLHNjb3BlZCxzZWxlY3RlZCxzaGFwZSxzaXplLHNpemVzLHNsb3Qsc3BhbixzcGVsbGNoZWNrLHNyYyxzcmNkb2Msc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3RlcCxzdHlsZSxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsdWUsd2lkdGgsd3JhcCIpLHBrPWZsKCJ4bWxucyxhY2NlbnQtaGVpZ2h0LGFjY3VtdWxhdGUsYWRkaXRpdmUsYWxpZ25tZW50LWJhc2VsaW5lLGFscGhhYmV0aWMsYW1wbGl0dWRlLGFyYWJpYy1mb3JtLGFzY2VudCxhdHRyaWJ1dGVOYW1lLGF0dHJpYnV0ZVR5cGUsYXppbXV0aCxiYXNlRnJlcXVlbmN5LGJhc2VsaW5lLXNoaWZ0LGJhc2VQcm9maWxlLGJib3gsYmVnaW4sYmlhcyxieSxjYWxjTW9kZSxjYXAtaGVpZ2h0LGNsYXNzLGNsaXAsY2xpcFBhdGhVbml0cyxjbGlwLXBhdGgsY2xpcC1ydWxlLGNvbG9yLGNvbG9yLWludGVycG9sYXRpb24sY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLGNvbG9yLXByb2ZpbGUsY29sb3ItcmVuZGVyaW5nLGNvbnRlbnRTY3JpcHRUeXBlLGNvbnRlbnRTdHlsZVR5cGUsY3Jvc3NvcmlnaW4sY3Vyc29yLGN4LGN5LGQsZGVjZWxlcmF0ZSxkZXNjZW50LGRpZmZ1c2VDb25zdGFudCxkaXJlY3Rpb24sZGlzcGxheSxkaXZpc29yLGRvbWluYW50LWJhc2VsaW5lLGR1cixkeCxkeSxlZGdlTW9kZSxlbGV2YXRpb24sZW5hYmxlLWJhY2tncm91bmQsZW5kLGV4cG9uZW50LGZpbGwsZmlsbC1vcGFjaXR5LGZpbGwtcnVsZSxmaWx0ZXIsZmlsdGVyUmVzLGZpbHRlclVuaXRzLGZsb29kLWNvbG9yLGZsb29kLW9wYWNpdHksZm9udC1mYW1pbHksZm9udC1zaXplLGZvbnQtc2l6ZS1hZGp1c3QsZm9udC1zdHJldGNoLGZvbnQtc3R5bGUsZm9udC12YXJpYW50LGZvbnQtd2VpZ2h0LGZvcm1hdCxmcm9tLGZyLGZ4LGZ5LGcxLGcyLGdseXBoLW5hbWUsZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCxnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCxnbHlwaFJlZixncmFkaWVudFRyYW5zZm9ybSxncmFkaWVudFVuaXRzLGhhbmdpbmcsaGVpZ2h0LGhyZWYsaHJlZmxhbmcsaG9yaXotYWR2LXgsaG9yaXotb3JpZ2luLXgsaWQsaWRlb2dyYXBoaWMsaW1hZ2UtcmVuZGVyaW5nLGluLGluMixpbnRlcmNlcHQsayxrMSxrMixrMyxrNCxrZXJuZWxNYXRyaXgsa2VybmVsVW5pdExlbmd0aCxrZXJuaW5nLGtleVBvaW50cyxrZXlTcGxpbmVzLGtleVRpbWVzLGxhbmcsbGVuZ3RoQWRqdXN0LGxldHRlci1zcGFjaW5nLGxpZ2h0aW5nLWNvbG9yLGxpbWl0aW5nQ29uZUFuZ2xlLGxvY2FsLG1hcmtlci1lbmQsbWFya2VyLW1pZCxtYXJrZXItc3RhcnQsbWFya2VySGVpZ2h0LG1hcmtlclVuaXRzLG1hcmtlcldpZHRoLG1hc2ssbWFza0NvbnRlbnRVbml0cyxtYXNrVW5pdHMsbWF0aGVtYXRpY2FsLG1heCxtZWRpYSxtZXRob2QsbWluLG1vZGUsbmFtZSxudW1PY3RhdmVzLG9mZnNldCxvcGFjaXR5LG9wZXJhdG9yLG9yZGVyLG9yaWVudCxvcmllbnRhdGlvbixvcmlnaW4sb3ZlcmZsb3csb3ZlcmxpbmUtcG9zaXRpb24sb3ZlcmxpbmUtdGhpY2tuZXNzLHBhbm9zZS0xLHBhaW50LW9yZGVyLHBhdGgscGF0aExlbmd0aCxwYXR0ZXJuQ29udGVudFVuaXRzLHBhdHRlcm5UcmFuc2Zvcm0scGF0dGVyblVuaXRzLHBpbmcscG9pbnRlci1ldmVudHMscG9pbnRzLHBvaW50c0F0WCxwb2ludHNBdFkscG9pbnRzQXRaLHByZXNlcnZlQWxwaGEscHJlc2VydmVBc3BlY3RSYXRpbyxwcmltaXRpdmVVbml0cyxyLHJhZGl1cyxyZWZlcnJlclBvbGljeSxyZWZYLHJlZlkscmVsLHJlbmRlcmluZy1pbnRlbnQscmVwZWF0Q291bnQscmVwZWF0RHVyLHJlcXVpcmVkRXh0ZW5zaW9ucyxyZXF1aXJlZEZlYXR1cmVzLHJlc3RhcnQscmVzdWx0LHJvdGF0ZSxyeCxyeSxzY2FsZSxzZWVkLHNoYXBlLXJlbmRlcmluZyxzbG9wZSxzcGFjaW5nLHNwZWN1bGFyQ29uc3RhbnQsc3BlY3VsYXJFeHBvbmVudCxzcGVlZCxzcHJlYWRNZXRob2Qsc3RhcnRPZmZzZXQsc3RkRGV2aWF0aW9uLHN0ZW1oLHN0ZW12LHN0aXRjaFRpbGVzLHN0b3AtY29sb3Isc3RvcC1vcGFjaXR5LHN0cmlrZXRocm91Z2gtcG9zaXRpb24sc3RyaWtldGhyb3VnaC10aGlja25lc3Msc3RyaW5nLHN0cm9rZSxzdHJva2UtZGFzaGFycmF5LHN0cm9rZS1kYXNob2Zmc2V0LHN0cm9rZS1saW5lY2FwLHN0cm9rZS1saW5lam9pbixzdHJva2UtbWl0ZXJsaW1pdCxzdHJva2Utb3BhY2l0eSxzdHJva2Utd2lkdGgsc3R5bGUsc3VyZmFjZVNjYWxlLHN5c3RlbUxhbmd1YWdlLHRhYmluZGV4LHRhYmxlVmFsdWVzLHRhcmdldCx0YXJnZXRYLHRhcmdldFksdGV4dC1hbmNob3IsdGV4dC1kZWNvcmF0aW9uLHRleHQtcmVuZGVyaW5nLHRleHRMZW5ndGgsdG8sdHJhbnNmb3JtLHRyYW5zZm9ybS1vcmlnaW4sdHlwZSx1MSx1Mix1bmRlcmxpbmUtcG9zaXRpb24sdW5kZXJsaW5lLXRoaWNrbmVzcyx1bmljb2RlLHVuaWNvZGUtYmlkaSx1bmljb2RlLXJhbmdlLHVuaXRzLXBlci1lbSx2LWFscGhhYmV0aWMsdi1oYW5naW5nLHYtaWRlb2dyYXBoaWMsdi1tYXRoZW1hdGljYWwsdmFsdWVzLHZlY3Rvci1lZmZlY3QsdmVyc2lvbix2ZXJ0LWFkdi15LHZlcnQtb3JpZ2luLXgsdmVydC1vcmlnaW4teSx2aWV3Qm94LHZpZXdUYXJnZXQsdmlzaWJpbGl0eSx3aWR0aCx3aWR0aHMsd29yZC1zcGFjaW5nLHdyaXRpbmctbW9kZSx4LHgtaGVpZ2h0LHgxLHgyLHhDaGFubmVsU2VsZWN0b3IseGxpbms6YWN0dWF0ZSx4bGluazphcmNyb2xlLHhsaW5rOmhyZWYseGxpbms6cm9sZSx4bGluazpzaG93LHhsaW5rOnRpdGxlLHhsaW5rOnR5cGUseG1sbnM6eGxpbmsseG1sOmJhc2UseG1sOmxhbmcseG1sOnNwYWNlLHkseTEseTIseUNoYW5uZWxTZWxlY3Rvcix6LHpvb21BbmRQYW4iKTtmdW5jdGlvbiBoayhnKXtpZihnPT1udWxsKXJldHVybiExO2xldCBjPXR5cGVvZiBnO3JldHVybiBjPT09InN0cmluZyJ8fGM9PT0ibnVtYmVyInx8Yz09PSJib29sZWFuIn12YXIgZ2s9Zz0+cGkoZyk/ZzpnPT1udWxsPyIiOllpKGcpfHxDdShnKSYmKGcudG9TdHJpbmc9PT0kdnx8IVFuKGcudG9TdHJpbmcpKT9KU09OLnN0cmluZ2lmeShnLFd2LDIpOlN0cmluZyhnKSxXdj0oZyxjKT0+YyYmYy5fX3ZfaXNSZWY/V3YoZyxjLnZhbHVlKTpVdihjKT97W2BNYXAoJHtjLnNpemV9KWBdOlsuLi5jLmVudHJpZXMoKV0ucmVkdWNlKChfLFtBLFJdLHcpPT4oX1tYZChBLHcpKyIgPT4iXT1SLF8pLHt9KX06SHYoYyk/e1tgU2V0KCR7Yy5zaXplfSlgXTpbLi4uYy52YWx1ZXMoKV0ubWFwKF89PlhkKF8pKX06S2QoYyk/WGQoYyk6Q3UoYykmJiFZaShjKSYmIUF1KGMpP1N0cmluZyhjKTpjLFhkPShnLGM9IiIpPT57dmFyIF87cmV0dXJuIEtkKGcpP2BTeW1ib2woJHsoXz1nLmRlc2NyaXB0aW9uKSE9bnVsbD9fOmN9KWA6Z307ZnVuY3Rpb24gR3YoZyl7dmFyIGM9ZnVuY3Rpb24oXyxBKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUihWLC4uLnEpe2NvbnNvbGUud2FybihgW1Z1ZSB3YXJuXSAke1Z9YCwuLi5xKX1sZXQgdztjbGFzcyBke2NvbnN0cnVjdG9yKHE9ITEpe3RoaXMuZGV0YWNoZWQ9cSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5lZmZlY3RzPVtdLHRoaXMuY2xlYW51cHM9W10sdGhpcy5wYXJlbnQ9dywhcSYmdyYmKHRoaXMuaW5kZXg9KHcuc2NvcGVzfHwody5zY29wZXM9W10pKS5wdXNoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXJ1bihxKXtpZih0aGlzLl9hY3RpdmUpe2xldCBwZT13O3RyeXtyZXR1cm4gdz10aGlzLHEoKX1maW5hbGx5e3c9cGV9fX1vbigpe3c9dGhpc31vZmYoKXt3PXRoaXMucGFyZW50fXN0b3AocSl7aWYodGhpcy5fYWN0aXZlKXtsZXQgcGUsWmU7Zm9yKHBlPTAsWmU9dGhpcy5lZmZlY3RzLmxlbmd0aDtwZTxaZTtwZSsrKXRoaXMuZWZmZWN0c1twZV0uc3RvcCgpO2ZvcihwZT0wLFplPXRoaXMuY2xlYW51cHMubGVuZ3RoO3BlPFplO3BlKyspdGhpcy5jbGVhbnVwc1twZV0oKTtpZih0aGlzLnNjb3Blcylmb3IocGU9MCxaZT10aGlzLnNjb3Blcy5sZW5ndGg7cGU8WmU7cGUrKyl0aGlzLnNjb3Blc1twZV0uc3RvcCghMCk7aWYoIXRoaXMuZGV0YWNoZWQmJnRoaXMucGFyZW50JiYhcSl7bGV0IEtlPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtLZSYmS2UhPT10aGlzJiYodGhpcy5wYXJlbnQuc2NvcGVzW3RoaXMuaW5kZXhdPUtlLEtlLmluZGV4PXRoaXMuaW5kZXgpfXRoaXMucGFyZW50PXZvaWQgMCx0aGlzLl9hY3RpdmU9ITF9fX1mdW5jdGlvbiBtKFYpe3JldHVybiBuZXcgZChWKX1mdW5jdGlvbiBJKFYscT13KXtxJiZxLmFjdGl2ZSYmcS5lZmZlY3RzLnB1c2goVil9ZnVuY3Rpb24gT2UoKXtyZXR1cm4gd31mdW5jdGlvbiBhdChWKXt3JiZ3LmNsZWFudXBzLnB1c2goVil9bGV0IEV0O2NsYXNzIGNle2NvbnN0cnVjdG9yKHEscGUsWmUsS2Upe3RoaXMuZm49cSx0aGlzLnRyaWdnZXI9cGUsdGhpcy5zY2hlZHVsZXI9WmUsdGhpcy5hY3RpdmU9ITAsdGhpcy5kZXBzPVtdLHRoaXMuX2RpcnR5TGV2ZWw9NCx0aGlzLl90cmFja0lkPTAsdGhpcy5fcnVubmluZ3M9MCx0aGlzLl9zaG91bGRTY2hlZHVsZT0hMSx0aGlzLl9kZXBzTGVuZ3RoPTAsSSh0aGlzLEtlKX1nZXQgZGlydHkoKXtpZih0aGlzLl9kaXJ0eUxldmVsPT09Mnx8dGhpcy5fZGlydHlMZXZlbD09PTMpe3RoaXMuX2RpcnR5TGV2ZWw9MSxzbigpO2ZvcihsZXQgcT0wO3E8dGhpcy5fZGVwc0xlbmd0aDtxKyspe2xldCBwZT10aGlzLmRlcHNbcV07aWYocGUuY29tcHV0ZWQmJihPKHBlLmNvbXB1dGVkKSx0aGlzLl9kaXJ0eUxldmVsPj00KSlicmVha310aGlzLl9kaXJ0eUxldmVsPT09MSYmKHRoaXMuX2RpcnR5TGV2ZWw9MCksTHIoKX1yZXR1cm4gdGhpcy5fZGlydHlMZXZlbD49NH1zZXQgZGlydHkocSl7dGhpcy5fZGlydHlMZXZlbD1xPzQ6MH1ydW4oKXtpZih0aGlzLl9kaXJ0eUxldmVsPTAsIXRoaXMuYWN0aXZlKXJldHVybiB0aGlzLmZuKCk7bGV0IHE9cG4scGU9RXQ7dHJ5e3JldHVybiBwbj0hMCxFdD10aGlzLHRoaXMuX3J1bm5pbmdzKyssVHQodGhpcyksdGhpcy5mbigpfWZpbmFsbHl7dnIodGhpcyksdGhpcy5fcnVubmluZ3MtLSxFdD1wZSxwbj1xfX1zdG9wKCl7dmFyIHE7dGhpcy5hY3RpdmUmJihUdCh0aGlzKSx2cih0aGlzKSwocT10aGlzLm9uU3RvcCk9PW51bGx8fHEuY2FsbCh0aGlzKSx0aGlzLmFjdGl2ZT0hMSl9fWZ1bmN0aW9uIE8oVil7cmV0dXJuIFYudmFsdWV9ZnVuY3Rpb24gVHQoVil7Vi5fdHJhY2tJZCsrLFYuX2RlcHNMZW5ndGg9MH1mdW5jdGlvbiB2cihWKXtpZihWLmRlcHMubGVuZ3RoPlYuX2RlcHNMZW5ndGgpe2ZvcihsZXQgcT1WLl9kZXBzTGVuZ3RoO3E8Vi5kZXBzLmxlbmd0aDtxKyspcHQoVi5kZXBzW3FdLFYpO1YuZGVwcy5sZW5ndGg9Vi5fZGVwc0xlbmd0aH19ZnVuY3Rpb24gcHQoVixxKXtsZXQgcGU9Vi5nZXQocSk7cGUhPT12b2lkIDAmJnEuX3RyYWNrSWQhPT1wZSYmKFYuZGVsZXRlKHEpLFYuc2l6ZT09PTAmJlYuY2xlYW51cCgpKX1mdW5jdGlvbiBaKFYscSl7Vi5lZmZlY3QgaW5zdGFuY2VvZiBjZSYmKFY9Vi5lZmZlY3QuZm4pO2xldCBwZT1uZXcgY2UoVixBLk5PT1AsKCk9PntwZS5kaXJ0eSYmcGUucnVuKCl9KTtxJiYoQS5leHRlbmQocGUscSkscS5zY29wZSYmSShwZSxxLnNjb3BlKSksKCFxfHwhcS5sYXp5KSYmcGUucnVuKCk7bGV0IFplPXBlLnJ1bi5iaW5kKHBlKTtyZXR1cm4gWmUuZWZmZWN0PXBlLFplfWZ1bmN0aW9uIHNlKFYpe1YuZWZmZWN0LnN0b3AoKX1sZXQgcG49ITAsTXI9MCxLbj1bXTtmdW5jdGlvbiBzbigpe0tuLnB1c2gocG4pLHBuPSExfWZ1bmN0aW9uIGtuKCl7S24ucHVzaChwbikscG49ITB9ZnVuY3Rpb24gTHIoKXtsZXQgVj1Lbi5wb3AoKTtwbj1WPT09dm9pZCAwPyEwOlZ9ZnVuY3Rpb24gVHIoKXtNcisrfWZ1bmN0aW9uIGVyKCl7Zm9yKE1yLS07IU1yJiZlbi5sZW5ndGg7KWVuLnNoaWZ0KCkoKX1mdW5jdGlvbiBobihWLHEscGUpe3ZhciBaZTtpZihxLmdldChWKSE9PVYuX3RyYWNrSWQpe3Euc2V0KFYsVi5fdHJhY2tJZCk7bGV0IEtlPVYuZGVwc1tWLl9kZXBzTGVuZ3RoXTtLZSE9PXE/KEtlJiZwdChLZSxWKSxWLmRlcHNbVi5fZGVwc0xlbmd0aCsrXT1xKTpWLl9kZXBzTGVuZ3RoKyt9fWxldCBlbj1bXTtmdW5jdGlvbiBSbihWLHEscGUpe3ZhciBaZTtUcigpO2ZvcihsZXQgS2Ugb2YgVi5rZXlzKCkpe2xldCBtdDtLZS5fZGlydHlMZXZlbDxxJiYobXQhPW51bGw/bXQ6bXQ9Vi5nZXQoS2UpPT09S2UuX3RyYWNrSWQpJiYoS2UuX3Nob3VsZFNjaGVkdWxlfHwoS2UuX3Nob3VsZFNjaGVkdWxlPUtlLl9kaXJ0eUxldmVsPT09MCksS2UuX2RpcnR5TGV2ZWw9cSksS2UuX3Nob3VsZFNjaGVkdWxlJiYobXQhPW51bGw/bXQ6bXQ9Vi5nZXQoS2UpPT09S2UuX3RyYWNrSWQpJiYoS2UudHJpZ2dlcigpLCghS2UuX3J1bm5pbmdzfHxLZS5hbGxvd1JlY3Vyc2UpJiZLZS5fZGlydHlMZXZlbCE9PTImJihLZS5fc2hvdWxkU2NoZWR1bGU9ITEsS2Uuc2NoZWR1bGVyJiZlbi5wdXNoKEtlLnNjaGVkdWxlcikpKX1lcigpfWxldCB0cj0oVixxKT0+e2xldCBwZT1uZXcgTWFwO3JldHVybiBwZS5jbGVhbnVwPVYscGUuY29tcHV0ZWQ9cSxwZX0seG49bmV3IFdlYWtNYXAsam49U3ltYm9sKCIiKSxoaT1TeW1ib2woIiIpO2Z1bmN0aW9uIHplKFYscSxwZSl7aWYocG4mJkV0KXtsZXQgWmU9eG4uZ2V0KFYpO1plfHx4bi5zZXQoVixaZT1uZXcgTWFwKTtsZXQgS2U9WmUuZ2V0KHBlKTtLZXx8WmUuc2V0KHBlLEtlPXRyKCgpPT5aZS5kZWxldGUocGUpKSksaG4oRXQsS2Usdm9pZCAwKX19ZnVuY3Rpb24gb3QoVixxLHBlLFplLEtlLG10KXtsZXQgZXQ9eG4uZ2V0KFYpO2lmKCFldClyZXR1cm47bGV0IGx0PVtdO2lmKHE9PT0iY2xlYXIiKWx0PVsuLi5ldC52YWx1ZXMoKV07ZWxzZSBpZihwZT09PSJsZW5ndGgiJiZBLmlzQXJyYXkoVikpe2xldCBmcj1OdW1iZXIoWmUpO2V0LmZvckVhY2goKEhyLCRyKT0+eygkcj09PSJsZW5ndGgifHwhQS5pc1N5bWJvbCgkcikmJiRyPj1mcikmJmx0LnB1c2goSHIpfSl9ZWxzZSBzd2l0Y2gocGUhPT12b2lkIDAmJmx0LnB1c2goZXQuZ2V0KHBlKSkscSl7Y2FzZSJhZGQiOkEuaXNBcnJheShWKT9BLmlzSW50ZWdlcktleShwZSkmJmx0LnB1c2goZXQuZ2V0KCJsZW5ndGgiKSk6KGx0LnB1c2goZXQuZ2V0KGpuKSksQS5pc01hcChWKSYmbHQucHVzaChldC5nZXQoaGkpKSk7YnJlYWs7Y2FzZSJkZWxldGUiOkEuaXNBcnJheShWKXx8KGx0LnB1c2goZXQuZ2V0KGpuKSksQS5pc01hcChWKSYmbHQucHVzaChldC5nZXQoaGkpKSk7YnJlYWs7Y2FzZSJzZXQiOkEuaXNNYXAoVikmJmx0LnB1c2goZXQuZ2V0KGpuKSk7YnJlYWt9VHIoKTtmb3IobGV0IGZyIG9mIGx0KWZyJiZSbihmciw0LHZvaWQgMCk7ZXIoKX1mdW5jdGlvbiBEdChWLHEpe3ZhciBwZTtyZXR1cm4ocGU9eG4uZ2V0KFYpKT09bnVsbD92b2lkIDA6cGUuZ2V0KHEpfWxldCBjbj1BLm1ha2VNYXAoIl9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZSIpLG5uPW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoVj0+ViE9PSJhcmd1bWVudHMiJiZWIT09ImNhbGxlciIpLm1hcChWPT5TeW1ib2xbVl0pLmZpbHRlcihBLmlzU3ltYm9sKSksYW49em4oKTtmdW5jdGlvbiB6bigpe2xldCBWPXt9O3JldHVyblsiaW5jbHVkZXMiLCJpbmRleE9mIiwibGFzdEluZGV4T2YiXS5mb3JFYWNoKHE9PntWW3FdPWZ1bmN0aW9uKC4uLnBlKXtsZXQgWmU9dG4odGhpcyk7Zm9yKGxldCBtdD0wLGV0PXRoaXMubGVuZ3RoO210PGV0O210KyspemUoWmUsImdldCIsbXQrIiIpO2xldCBLZT1aZVtxXSguLi5wZSk7cmV0dXJuIEtlPT09LTF8fEtlPT09ITE/WmVbcV0oLi4ucGUubWFwKHRuKSk6S2V9fSksWyJwdXNoIiwicG9wIiwic2hpZnQiLCJ1bnNoaWZ0Iiwic3BsaWNlIl0uZm9yRWFjaChxPT57VltxXT1mdW5jdGlvbiguLi5wZSl7c24oKSxUcigpO2xldCBaZT10bih0aGlzKVtxXS5hcHBseSh0aGlzLHBlKTtyZXR1cm4gZXIoKSxMcigpLFplfX0pLFZ9ZnVuY3Rpb24gRHIoVil7bGV0IHE9dG4odGhpcyk7cmV0dXJuIHplKHEsImhhcyIsVikscS5oYXNPd25Qcm9wZXJ0eShWKX1jbGFzcyBucntjb25zdHJ1Y3RvcihxPSExLHBlPSExKXt0aGlzLl9pc1JlYWRvbmx5PXEsdGhpcy5faXNTaGFsbG93PXBlfWdldChxLHBlLFplKXtsZXQgS2U9dGhpcy5faXNSZWFkb25seSxtdD10aGlzLl9pc1NoYWxsb3c7aWYocGU9PT0iX192X2lzUmVhY3RpdmUiKXJldHVybiFLZTtpZihwZT09PSJfX3ZfaXNSZWFkb25seSIpcmV0dXJuIEtlO2lmKHBlPT09Il9fdl9pc1NoYWxsb3ciKXJldHVybiBtdDtpZihwZT09PSJfX3ZfcmF3IilyZXR1cm4gWmU9PT0oS2U/bXQ/eG86QWk6bXQ/TGk6T2EpLmdldChxKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHEpPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKFplKT9xOnZvaWQgMDtsZXQgZXQ9QS5pc0FycmF5KHEpO2lmKCFLZSl7aWYoZXQmJkEuaGFzT3duKGFuLHBlKSlyZXR1cm4gUmVmbGVjdC5nZXQoYW4scGUsWmUpO2lmKHBlPT09Imhhc093blByb3BlcnR5IilyZXR1cm4gRHJ9bGV0IGx0PVJlZmxlY3QuZ2V0KHEscGUsWmUpO3JldHVybihBLmlzU3ltYm9sKHBlKT9ubi5oYXMocGUpOmNuKHBlKSl8fChLZXx8emUocSwiZ2V0IixwZSksbXQpP2x0OnlyKGx0KT9ldCYmQS5pc0ludGVnZXJLZXkocGUpP2x0Omx0LnZhbHVlOkEuaXNPYmplY3QobHQpP0tlP0tyKGx0KTpnbihsdCk6bHR9fWNsYXNzIHFyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IocT0hMSl7c3VwZXIoITEscSl9c2V0KHEscGUsWmUsS2Upe2xldCBtdD1xW3BlXTtpZighdGhpcy5faXNTaGFsbG93KXtsZXQgZnI9JHQobXQpO2lmKCFSZShaZSkmJiEkdChaZSkmJihtdD10bihtdCksWmU9dG4oWmUpKSwhQS5pc0FycmF5KHEpJiZ5cihtdCkmJiF5cihaZSkpcmV0dXJuIGZyPyExOihtdC52YWx1ZT1aZSwhMCl9bGV0IGV0PUEuaXNBcnJheShxKSYmQS5pc0ludGVnZXJLZXkocGUpP051bWJlcihwZSk8cS5sZW5ndGg6QS5oYXNPd24ocSxwZSksbHQ9UmVmbGVjdC5zZXQocSxwZSxaZSxLZSk7cmV0dXJuIHE9PT10bihLZSkmJihldD9BLmhhc0NoYW5nZWQoWmUsbXQpJiZvdChxLCJzZXQiLHBlLFplLG10KTpvdChxLCJhZGQiLHBlLFplKSksbHR9ZGVsZXRlUHJvcGVydHkocSxwZSl7bGV0IFplPUEuaGFzT3duKHEscGUpLEtlPXFbcGVdLG10PVJlZmxlY3QuZGVsZXRlUHJvcGVydHkocSxwZSk7cmV0dXJuIG10JiZaZSYmb3QocSwiZGVsZXRlIixwZSx2b2lkIDAsS2UpLG10fWhhcyhxLHBlKXtsZXQgWmU9UmVmbGVjdC5oYXMocSxwZSk7cmV0dXJuKCFBLmlzU3ltYm9sKHBlKXx8IW5uLmhhcyhwZSkpJiZ6ZShxLCJoYXMiLHBlKSxaZX1vd25LZXlzKHEpe3JldHVybiB6ZShxLCJpdGVyYXRlIixBLmlzQXJyYXkocSk/Imxlbmd0aCI6am4pLFJlZmxlY3Qub3duS2V5cyhxKX19Y2xhc3MgVXIgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihxPSExKXtzdXBlcighMCxxKX1zZXQocSxwZSl7cmV0dXJuITB9ZGVsZXRlUHJvcGVydHkocSxwZSl7cmV0dXJuITB9fWxldCBDaT1uZXcgcXIsVWE9bmV3IFVyLHFvPW5ldyBxcighMCksZ2k9bmV3IFVyKCEwKSxQcj1WPT5WLE5yPVY9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoVik7ZnVuY3Rpb24gdXIoVixxLHBlPSExLFplPSExKXtWPVYuX192X3JhdztsZXQgS2U9dG4oViksbXQ9dG4ocSk7cGV8fChBLmhhc0NoYW5nZWQocSxtdCkmJnplKEtlLCJnZXQiLHEpLHplKEtlLCJnZXQiLG10KSk7bGV0e2hhczpldH09TnIoS2UpLGx0PVplP1ByOnBlP09pOm9pO2lmKGV0LmNhbGwoS2UscSkpcmV0dXJuIGx0KFYuZ2V0KHEpKTtpZihldC5jYWxsKEtlLG10KSlyZXR1cm4gbHQoVi5nZXQobXQpKTtWIT09S2UmJlYuZ2V0KHEpfWZ1bmN0aW9uIFJvKFYscT0hMSl7bGV0IHBlPXRoaXMuX192X3JhdyxaZT10bihwZSksS2U9dG4oVik7cmV0dXJuIHF8fChBLmhhc0NoYW5nZWQoVixLZSkmJnplKFplLCJoYXMiLFYpLHplKFplLCJoYXMiLEtlKSksVj09PUtlP3BlLmhhcyhWKTpwZS5oYXMoVil8fHBlLmhhcyhLZSl9ZnVuY3Rpb24gS2koVixxPSExKXtyZXR1cm4gVj1WLl9fdl9yYXcsIXEmJnplKHRuKFYpLCJpdGVyYXRlIixqbiksUmVmbGVjdC5nZXQoViwic2l6ZSIsVil9ZnVuY3Rpb24gSmkoVil7Vj10bihWKTtsZXQgcT10bih0aGlzKTtyZXR1cm4gTnIocSkuaGFzLmNhbGwocSxWKXx8KHEuYWRkKFYpLG90KHEsImFkZCIsVixWKSksdGhpc31mdW5jdGlvbiBobyhWLHEpe3E9dG4ocSk7bGV0IHBlPXRuKHRoaXMpLHtoYXM6WmUsZ2V0OktlfT1OcihwZSksbXQ9WmUuY2FsbChwZSxWKTttdHx8KFY9dG4oViksbXQ9WmUuY2FsbChwZSxWKSk7bGV0IGV0PUtlLmNhbGwocGUsVik7cmV0dXJuIHBlLnNldChWLHEpLG10P0EuaGFzQ2hhbmdlZChxLGV0KSYmb3QocGUsInNldCIsVixxLGV0KTpvdChwZSwiYWRkIixWLHEpLHRoaXN9ZnVuY3Rpb24gWmkoVil7bGV0IHE9dG4odGhpcykse2hhczpwZSxnZXQ6WmV9PU5yKHEpLEtlPXBlLmNhbGwocSxWKTtLZXx8KFY9dG4oViksS2U9cGUuY2FsbChxLFYpKTtsZXQgbXQ9WmU/WmUuY2FsbChxLFYpOnZvaWQgMCxldD1xLmRlbGV0ZShWKTtyZXR1cm4gS2UmJm90KHEsImRlbGV0ZSIsVix2b2lkIDAsbXQpLGV0fWZ1bmN0aW9uIENhKCl7bGV0IFY9dG4odGhpcykscT1WLnNpemUhPT0wLHBlPXZvaWQgMCxaZT1WLmNsZWFyKCk7cmV0dXJuIHEmJm90KFYsImNsZWFyIix2b2lkIDAsdm9pZCAwLHBlKSxaZX1mdW5jdGlvbiBCaShWLHEpe3JldHVybiBmdW5jdGlvbihaZSxLZSl7bGV0IG10PXRoaXMsZXQ9bXQuX192X3JhdyxsdD10bihldCksZnI9cT9QcjpWP09pOm9pO3JldHVybiFWJiZ6ZShsdCwiaXRlcmF0ZSIsam4pLGV0LmZvckVhY2goKEhyLCRyKT0+WmUuY2FsbChLZSxmcihIciksZnIoJHIpLG10KSl9fWZ1bmN0aW9uIG1uKFYscSxwZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLlplKXtsZXQgS2U9dGhpcy5fX3ZfcmF3LG10PXRuKEtlKSxldD1BLmlzTWFwKG10KSxsdD1WPT09ImVudHJpZXMifHxWPT09U3ltYm9sLml0ZXJhdG9yJiZldCxmcj1WPT09ImtleXMiJiZldCxIcj1LZVtWXSguLi5aZSksJHI9cGU/UHI6cT9PaTpvaTtyZXR1cm4hcSYmemUobXQsIml0ZXJhdGUiLGZyP2hpOmpuKSx7bmV4dCgpe2xldHt2YWx1ZTpRaSxkb25lOl9pfT1Ici5uZXh0KCk7cmV0dXJuIF9pP3t2YWx1ZTpRaSxkb25lOl9pfTp7dmFsdWU6bHQ/WyRyKFFpWzBdKSwkcihRaVsxXSldOiRyKFFpKSxkb25lOl9pfX0sW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fX1mdW5jdGlvbiBBbihWKXtyZXR1cm4gZnVuY3Rpb24oLi4ucSl7cmV0dXJuIFY9PT0iZGVsZXRlIj8hMTpWPT09ImNsZWFyIj92b2lkIDA6dGhpc319ZnVuY3Rpb24gTWkoKXtsZXQgVj17Z2V0KG10KXtyZXR1cm4gdXIodGhpcyxtdCl9LGdldCBzaXplKCl7cmV0dXJuIEtpKHRoaXMpfSxoYXM6Um8sYWRkOkppLHNldDpobyxkZWxldGU6WmksY2xlYXI6Q2EsZm9yRWFjaDpCaSghMSwhMSl9LHE9e2dldChtdCl7cmV0dXJuIHVyKHRoaXMsbXQsITEsITApfSxnZXQgc2l6ZSgpe3JldHVybiBLaSh0aGlzKX0saGFzOlJvLGFkZDpKaSxzZXQ6aG8sZGVsZXRlOlppLGNsZWFyOkNhLGZvckVhY2g6QmkoITEsITApfSxwZT17Z2V0KG10KXtyZXR1cm4gdXIodGhpcyxtdCwhMCl9LGdldCBzaXplKCl7cmV0dXJuIEtpKHRoaXMsITApfSxoYXMobXQpe3JldHVybiBSby5jYWxsKHRoaXMsbXQsITApfSxhZGQ6QW4oImFkZCIpLHNldDpBbigic2V0IiksZGVsZXRlOkFuKCJkZWxldGUiKSxjbGVhcjpBbigiY2xlYXIiKSxmb3JFYWNoOkJpKCEwLCExKX0sWmU9e2dldChtdCl7cmV0dXJuIHVyKHRoaXMsbXQsITAsITApfSxnZXQgc2l6ZSgpe3JldHVybiBLaSh0aGlzLCEwKX0saGFzKG10KXtyZXR1cm4gUm8uY2FsbCh0aGlzLG10LCEwKX0sYWRkOkFuKCJhZGQiKSxzZXQ6QW4oInNldCIpLGRlbGV0ZTpBbigiZGVsZXRlIiksY2xlYXI6QW4oImNsZWFyIiksZm9yRWFjaDpCaSghMCwhMCl9O3JldHVyblsia2V5cyIsInZhbHVlcyIsImVudHJpZXMiLFN5bWJvbC5pdGVyYXRvcl0uZm9yRWFjaChtdD0+e1ZbbXRdPW1uKG10LCExLCExKSxwZVttdF09bW4obXQsITAsITEpLHFbbXRdPW1uKG10LCExLCEwKSxaZVttdF09bW4obXQsITAsITApfSksW1YscGUscSxaZV19bGV0W29yLHZpLFlvLEtvXT1NaSgpO2Z1bmN0aW9uIG1pKFYscSl7bGV0IHBlPXE/Vj9LbzpZbzpWP3ZpOm9yO3JldHVybihaZSxLZSxtdCk9PktlPT09Il9fdl9pc1JlYWN0aXZlIj8hVjpLZT09PSJfX3ZfaXNSZWFkb25seSI/VjpLZT09PSJfX3ZfcmF3Ij9aZTpSZWZsZWN0LmdldChBLmhhc093bihwZSxLZSkmJktlIGluIFplP3BlOlplLEtlLG10KX1sZXQgWXI9e2dldDptaSghMSwhMSl9LEFhPXtnZXQ6bWkoITEsITApfSxyaT17Z2V0Om1pKCEwLCExKX0sYnI9e2dldDptaSghMCwhMCl9O2Z1bmN0aW9uIGdvKFYscSxwZSl7bGV0IFplPXRuKHBlKTtpZihaZSE9PXBlJiZxLmNhbGwoVixaZSkpe2xldCBLZT1BLnRvUmF3VHlwZShWKTtSKGBSZWFjdGl2ZSAke0tlfSBjb250YWlucyBib3RoIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIG9mIHRoZSBzYW1lIG9iamVjdCR7S2U9PT0iTWFwIj8iIGFzIGtleXMiOiIifSwgd2hpY2ggY2FuIGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzLiBBdm9pZCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgcmF3IGFuZCByZWFjdGl2ZSB2ZXJzaW9ucyBvZiBhbiBvYmplY3QgYW5kIG9ubHkgdXNlIHRoZSByZWFjdGl2ZSB2ZXJzaW9uIGlmIHBvc3NpYmxlLmApfX1sZXQgT2E9bmV3IFdlYWtNYXAsTGk9bmV3IFdlYWtNYXAsQWk9bmV3IFdlYWtNYXAseG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gSm8oVil7c3dpdGNoKFYpe2Nhc2UiT2JqZWN0IjpjYXNlIkFycmF5IjpyZXR1cm4gMTtjYXNlIk1hcCI6Y2FzZSJTZXQiOmNhc2UiV2Vha01hcCI6Y2FzZSJXZWFrU2V0IjpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiB2byhWKXtyZXR1cm4gVi5fX3Zfc2tpcHx8IU9iamVjdC5pc0V4dGVuc2libGUoVik/MDpKbyhBLnRvUmF3VHlwZShWKSl9ZnVuY3Rpb24gZ24oVil7cmV0dXJuICR0KFYpP1Y6aWkoViwhMSxDaSxZcixPYSl9ZnVuY3Rpb24gT24oVil7cmV0dXJuIGlpKFYsITEscW8sQWEsTGkpfWZ1bmN0aW9uIEtyKFYpe3JldHVybiBpaShWLCEwLFVhLHJpLEFpKX1mdW5jdGlvbiBGbihWKXtyZXR1cm4gaWkoViwhMCxnaSxicix4byl9ZnVuY3Rpb24gaWkoVixxLHBlLFplLEtlKXtpZighQS5pc09iamVjdChWKXx8Vi5fX3ZfcmF3JiYhKHEmJlYuX192X2lzUmVhY3RpdmUpKXJldHVybiBWO2xldCBtdD1LZS5nZXQoVik7aWYobXQpcmV0dXJuIG10O2xldCBldD12byhWKTtpZihldD09PTApcmV0dXJuIFY7bGV0IGx0PW5ldyBQcm94eShWLGV0PT09Mj9aZTpwZSk7cmV0dXJuIEtlLnNldChWLGx0KSxsdH1mdW5jdGlvbiBGcihWKXtyZXR1cm4gJHQoVik/RnIoVi5fX3ZfcmF3KTohIShWJiZWLl9fdl9pc1JlYWN0aXZlKX1mdW5jdGlvbiAkdChWKXtyZXR1cm4hIShWJiZWLl9fdl9pc1JlYWRvbmx5KX1mdW5jdGlvbiBSZShWKXtyZXR1cm4hIShWJiZWLl9fdl9pc1NoYWxsb3cpfWZ1bmN0aW9uIFhpKFYpe3JldHVybiBGcihWKXx8JHQoVil9ZnVuY3Rpb24gdG4oVil7bGV0IHE9ViYmVi5fX3ZfcmF3O3JldHVybiBxP3RuKHEpOlZ9ZnVuY3Rpb24gbW8oVil7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoVikmJkEuZGVmKFYsIl9fdl9za2lwIiwhMCksVn1sZXQgb2k9Vj0+QS5pc09iamVjdChWKT9nbihWKTpWLE9pPVY9PkEuaXNPYmplY3QoVik/S3IoVik6Vixabz0iQ29tcHV0ZWQgaXMgc3RpbGwgZGlydHkgYWZ0ZXIgZ2V0dGVyIGV2YWx1YXRpb24sIGxpa2VseSBiZWNhdXNlIGEgY29tcHV0ZWQgaXMgbXV0YXRpbmcgaXRzIG93biBkZXBlbmRlbmN5IGluIGl0cyBnZXR0ZXIuIFN0YXRlIG11dGF0aW9ucyBpbiBjb21wdXRlZCBnZXR0ZXJzIHNob3VsZCBiZSBhdm9pZGVkLiAgQ2hlY2sgdGhlIGRvY3MgZm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZXNzZW50aWFscy9jb21wdXRlZC5odG1sI2dldHRlcnMtc2hvdWxkLWJlLXNpZGUtZWZmZWN0LWZyZWUiO2NsYXNzIFhve2NvbnN0cnVjdG9yKHEscGUsWmUsS2Upe3RoaXMuZ2V0dGVyPXEsdGhpcy5fc2V0dGVyPXBlLHRoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1JlYWRvbmx5PSExLHRoaXMuZWZmZWN0PW5ldyBjZSgoKT0+cSh0aGlzLl92YWx1ZSksKCk9PmFpKHRoaXMsdGhpcy5lZmZlY3QuX2RpcnR5TGV2ZWw9PT0yPzI6MykpLHRoaXMuZWZmZWN0LmNvbXB1dGVkPXRoaXMsdGhpcy5lZmZlY3QuYWN0aXZlPXRoaXMuX2NhY2hlYWJsZT0hS2UsdGhpcy5fX3ZfaXNSZWFkb25seT1aZX1nZXQgdmFsdWUoKXtsZXQgcT10bih0aGlzKTtyZXR1cm4oIXEuX2NhY2hlYWJsZXx8cS5lZmZlY3QuZGlydHkpJiZBLmhhc0NoYW5nZWQocS5fdmFsdWUscS5fdmFsdWU9cS5lZmZlY3QucnVuKCkpJiZhaShxLDQpLERpKHEpLHEuZWZmZWN0Ll9kaXJ0eUxldmVsPj0yJiZhaShxLDIpLHEuX3ZhbHVlfXNldCB2YWx1ZShxKXt0aGlzLl9zZXR0ZXIocSl9Z2V0IF9kaXJ0eSgpe3JldHVybiB0aGlzLmVmZmVjdC5kaXJ0eX1zZXQgX2RpcnR5KHEpe3RoaXMuZWZmZWN0LmRpcnR5PXF9fWZ1bmN0aW9uIFRhKFYscSxwZT0hMSl7bGV0IFplLEtlLG10PUEuaXNGdW5jdGlvbihWKTtyZXR1cm4gbXQ/KFplPVYsS2U9QS5OT09QKTooWmU9Vi5nZXQsS2U9Vi5zZXQpLG5ldyBYbyhaZSxLZSxtdHx8IUtlLHBlKX1mdW5jdGlvbiBEaShWKXt2YXIgcTtwbiYmRXQmJihWPXRuKFYpLGhuKEV0LChxPVYuZGVwKSE9bnVsbD9xOlYuZGVwPXRyKCgpPT5WLmRlcD12b2lkIDAsViBpbnN0YW5jZW9mIFhvP1Y6dm9pZCAwKSx2b2lkIDApKX1mdW5jdGlvbiBhaShWLHE9NCxwZSl7Vj10bihWKTtsZXQgWmU9Vi5kZXA7WmUmJlJuKFplLHEsdm9pZCAwKX1mdW5jdGlvbiB5cihWKXtyZXR1cm4hIShWJiZWLl9fdl9pc1JlZj09PSEwKX1mdW5jdGlvbiBfbyhWKXtyZXR1cm4gUW8oViwhMSl9ZnVuY3Rpb24gZnMoVil7cmV0dXJuIFFvKFYsITApfWZ1bmN0aW9uIFFvKFYscSl7cmV0dXJuIHlyKFYpP1Y6bmV3IHJuKFYscSl9Y2xhc3Mgcm57Y29uc3RydWN0b3IocSxwZSl7dGhpcy5fX3ZfaXNTaGFsbG93PXBlLHRoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9yYXdWYWx1ZT1wZT9xOnRuKHEpLHRoaXMuX3ZhbHVlPXBlP3E6b2kocSl9Z2V0IHZhbHVlKCl7cmV0dXJuIERpKHRoaXMpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShxKXtsZXQgcGU9dGhpcy5fX3ZfaXNTaGFsbG93fHxSZShxKXx8JHQocSk7cT1wZT9xOnRuKHEpLEEuaGFzQ2hhbmdlZChxLHRoaXMuX3Jhd1ZhbHVlKSYmKHRoaXMuX3Jhd1ZhbHVlPXEsdGhpcy5fdmFsdWU9cGU/cTpvaShxKSxhaSh0aGlzLDQscSkpfX1mdW5jdGlvbiBFcihWKXthaShWLDQsdm9pZCAwKX1mdW5jdGlvbiBXbihWKXtyZXR1cm4geXIoVik/Vi52YWx1ZTpWfWZ1bmN0aW9uIFNyKFYpe3JldHVybiBBLmlzRnVuY3Rpb24oVik/VigpOlduKFYpfWxldCBKcj17Z2V0OihWLHEscGUpPT5XbihSZWZsZWN0LmdldChWLHEscGUpKSxzZXQ6KFYscSxwZSxaZSk9PntsZXQgS2U9VltxXTtyZXR1cm4geXIoS2UpJiYheXIocGUpPyhLZS52YWx1ZT1wZSwhMCk6UmVmbGVjdC5zZXQoVixxLHBlLFplKX19O2Z1bmN0aW9uIGVhKFYpe3JldHVybiBGcihWKT9WOm5ldyBQcm94eShWLEpyKX1jbGFzcyB0YXtjb25zdHJ1Y3RvcihxKXt0aGlzLmRlcD12b2lkIDAsdGhpcy5fX3ZfaXNSZWY9ITA7bGV0e2dldDpwZSxzZXQ6WmV9PXEoKCk9PkRpKHRoaXMpLCgpPT5haSh0aGlzKSk7dGhpcy5fZ2V0PXBlLHRoaXMuX3NldD1aZX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZ2V0KCl9c2V0IHZhbHVlKHEpe3RoaXMuX3NldChxKX19ZnVuY3Rpb24gZHMoVil7cmV0dXJuIG5ldyB0YShWKX1mdW5jdGlvbiBCbyhWKXtsZXQgcT1BLmlzQXJyYXkoVik/bmV3IEFycmF5KFYubGVuZ3RoKTp7fTtmb3IobGV0IHBlIGluIFYpcVtwZV09TG8oVixwZSk7cmV0dXJuIHF9Y2xhc3MgTW97Y29uc3RydWN0b3IocSxwZSxaZSl7dGhpcy5fb2JqZWN0PXEsdGhpcy5fa2V5PXBlLHRoaXMuX2RlZmF1bHRWYWx1ZT1aZSx0aGlzLl9fdl9pc1JlZj0hMH1nZXQgdmFsdWUoKXtsZXQgcT10aGlzLl9vYmplY3RbdGhpcy5fa2V5XTtyZXR1cm4gcT09PXZvaWQgMD90aGlzLl9kZWZhdWx0VmFsdWU6cX1zZXQgdmFsdWUocSl7dGhpcy5fb2JqZWN0W3RoaXMuX2tleV09cX1nZXQgZGVwKCl7cmV0dXJuIER0KHRuKHRoaXMuX29iamVjdCksdGhpcy5fa2V5KX19Y2xhc3MgSGF7Y29uc3RydWN0b3IocSl7dGhpcy5fZ2V0dGVyPXEsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNSZWFkb25seT0hMH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZ2V0dGVyKCl9fWZ1bmN0aW9uICRhKFYscSxwZSl7cmV0dXJuIHlyKFYpP1Y6QS5pc0Z1bmN0aW9uKFYpP25ldyBIYShWKTpBLmlzT2JqZWN0KFYpJiZhcmd1bWVudHMubGVuZ3RoPjE/TG8oVixxLHBlKTpfbyhWKX1mdW5jdGlvbiBMbyhWLHEscGUpe2xldCBaZT1WW3FdO3JldHVybiB5cihaZSk/WmU6bmV3IE1vKFYscSxwZSl9bGV0IFBhPVRhLHBzPXtHRVQ6ImdldCIsSEFTOiJoYXMiLElURVJBVEU6Iml0ZXJhdGUifSxuYT17U0VUOiJzZXQiLEFERDoiYWRkIixERUxFVEU6ImRlbGV0ZSIsQ0xFQVI6ImNsZWFyIn0sRG89e1NLSVA6Il9fdl9za2lwIixJU19SRUFDVElWRToiX192X2lzUmVhY3RpdmUiLElTX1JFQURPTkxZOiJfX3ZfaXNSZWFkb25seSIsSVNfU0hBTExPVzoiX192X2lzU2hhbGxvdyIsUkFXOiJfX3ZfcmF3In07cmV0dXJuIF8uRWZmZWN0U2NvcGU9ZCxfLklURVJBVEVfS0VZPWpuLF8uUmVhY3RpdmVFZmZlY3Q9Y2UsXy5SZWFjdGl2ZUZsYWdzPURvLF8uVHJhY2tPcFR5cGVzPXBzLF8uVHJpZ2dlck9wVHlwZXM9bmEsXy5jb21wdXRlZD1UYSxfLmN1c3RvbVJlZj1kcyxfLmRlZmVycmVkQ29tcHV0ZWQ9UGEsXy5lZmZlY3Q9WixfLmVmZmVjdFNjb3BlPW0sXy5lbmFibGVUcmFja2luZz1rbixfLmdldEN1cnJlbnRTY29wZT1PZSxfLmlzUHJveHk9WGksXy5pc1JlYWN0aXZlPUZyLF8uaXNSZWFkb25seT0kdCxfLmlzUmVmPXlyLF8uaXNTaGFsbG93PVJlLF8ubWFya1Jhdz1tbyxfLm9uU2NvcGVEaXNwb3NlPWF0LF8ucGF1c2VTY2hlZHVsaW5nPVRyLF8ucGF1c2VUcmFja2luZz1zbixfLnByb3h5UmVmcz1lYSxfLnJlYWN0aXZlPWduLF8ucmVhZG9ubHk9S3IsXy5yZWY9X28sXy5yZXNldFNjaGVkdWxpbmc9ZXIsXy5yZXNldFRyYWNraW5nPUxyLF8uc2hhbGxvd1JlYWN0aXZlPU9uLF8uc2hhbGxvd1JlYWRvbmx5PUZuLF8uc2hhbGxvd1JlZj1mcyxfLnN0b3A9c2UsXy50b1Jhdz10bixfLnRvUmVmPSRhLF8udG9SZWZzPUJvLF8udG9WYWx1ZT1TcixfLnRyYWNrPXplLF8udHJpZ2dlcj1vdCxfLnRyaWdnZXJSZWY9RXIsXy51bnJlZj1XbixffSh7fSxnKTtyZXR1cm4gY31mdW5jdGlvbiBxdihnKXt2YXIgYz1mdW5jdGlvbihfKXsidXNlIHN0cmljdCI7bGV0IEE9YApgLFI9NDQsdz01MCxkPTUwLG09WyIlIiwiJSJdLEk9IiMwMDdhZmYiLE9lPS9eKFthLXotXSs6KT9cL1wvL2ksYXQ9L15kYXRhOi4qLC4qLyxFdD0iV0VCX0lOVk9LRV9BUFBTRVJWSUNFIixjZT0id3hzOi8vIixPPSJqc29uOi8vIixUdD0id3hzTW9kdWxlcyIsdnI9InJlbmRlcmpzTW9kdWxlcyIscHQ9Im9uU2hvdyIsWj0ib25IaWRlIixzZT0ib25MYXVuY2giLHBuPSJvbkVycm9yIixNcj0ib25UaGVtZUNoYW5nZSIsS249Im9mZlRoZW1lQ2hhbmdlIixzbj0ib25LZXlib2FyZEhlaWdodENoYW5nZSIsa249Im9uUGFnZU5vdEZvdW5kIixMcj0ib25VbmhhbmRsZWRSZWplY3Rpb24iLFRyPSJvbkV4aXQiLGVyPSJvbkxvYWQiLGhuPSJvblJlYWR5Iixlbj0ib25VbmxvYWQiLFJuPSJvbkluaXQiLHRyPSJvblNhdmVFeGl0U3RhdGUiLHhuPSJvblJlc2l6ZSIsam49Im9uQmFja1ByZXNzIixoaT0ib25QYWdlU2Nyb2xsIix6ZT0ib25UYWJJdGVtVGFwIixvdD0ib25SZWFjaEJvdHRvbSIsRHQ9Im9uUHVsbERvd25SZWZyZXNoIixjbj0ib25TaGFyZVRpbWVsaW5lIixubj0ib25TaGFyZUNoYXQiLGFuPSJvbkFkZFRvRmF2b3JpdGVzIix6bj0ib25TaGFyZUFwcE1lc3NhZ2UiLERyPSJvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAiLG5yPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENsaWNrZWQiLHFyPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENoYW5nZWQiLFVyPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENvbmZpcm1lZCIsQ2k9Im9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Rm9jdXNDaGFuZ2VkIixVYT0ib25BcHBFbnRlckZvcmVncm91bmQiLHFvPSJvbkFwcEVudGVyQmFja2dyb3VuZCIsZ2k9Im9uV3hzSW52b2tlQ2FsbE1ldGhvZCI7ZnVuY3Rpb24gUHIobGUpe2xldCBKPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGRlPT5KW2RlXXx8KEpbZGVdPWxlKGRlKSl9ZnVuY3Rpb24gTnIobGUpe3JldHVybiBQcihsZSl9ZnVuY3Rpb24gdXIobGU9IiIpe3JldHVybigiIitsZSkucmVwbGFjZSgvW15ceDAwLVx4ZmZdL2csIioqIikubGVuZ3RofWZ1bmN0aW9uIFJvKGxlKXtyZXR1cm4gbGUuaW5kZXhPZigiLyIpPT09MH1mdW5jdGlvbiBLaShsZSl7cmV0dXJuIFJvKGxlKT9sZToiLyIrbGV9ZnVuY3Rpb24gSmkobGUpe3JldHVybiBSbyhsZSk/bGUuc2xpY2UoMSk6bGV9bGV0IGhvPShsZSxKKT0+e2xldCBkZTtmb3IobGV0IFVlPTA7VWU8bGUubGVuZ3RoO1VlKyspZGU9bGVbVWVdKEopO3JldHVybiBkZX07ZnVuY3Rpb24gWmkobGUsSj1udWxsKXtsZXQgZGU7cmV0dXJuKC4uLlVlKT0+KGxlJiYoZGU9bGUuYXBwbHkoSixVZSksbGU9bnVsbCksZGUpfWZ1bmN0aW9uIENhKGxlLEope2xlPWxlfHx7fSxfLmlzU3RyaW5nKEopJiYoSj17ZXJyTXNnOkp9KSwvOm9rJC8udGVzdChKLmVyck1zZyk/Xy5pc0Z1bmN0aW9uKGxlLnN1Y2Nlc3MpJiZsZS5zdWNjZXNzKEopOl8uaXNGdW5jdGlvbihsZS5mYWlsKSYmbGUuZmFpbChKKSxfLmlzRnVuY3Rpb24obGUuY29tcGxldGUpJiZsZS5jb21wbGV0ZShKKX1mdW5jdGlvbiBCaShsZSl7bGV0IEo9e307cmV0dXJuIF8uaXNQbGFpbk9iamVjdChsZSkmJk9iamVjdC5rZXlzKGxlKS5zb3J0KCkuZm9yRWFjaChkZT0+e2xldCBVZT1kZTtKW1VlXT1sZVtVZV19KSxPYmplY3Qua2V5cyhKKT9KOmxlfWZ1bmN0aW9uIG1uKGxlKXtyZXR1cm4hIWxlLmFwcENvbnRleHR9ZnVuY3Rpb24gQW4obGUpe3JldHVybiBsZSYmKG1uKGxlKT9sZS5wcm94eTpsZSl9ZnVuY3Rpb24gTWkobGUpe3JldHVybiBsZS5ub2RlVHlwZT09PTF9ZnVuY3Rpb24gb3IobGUsSj0hMSl7bGV0e3Zub2RlOmRlfT1sZTtpZihNaShkZS5lbCkpcmV0dXJuIEo/ZGUuZWw/W2RlLmVsXTpbXTpkZS5lbDtsZXR7c3ViVHJlZTpVZX09bGU7aWYoVWUuc2hhcGVGbGFnJjE2KXtsZXQgZHQ9VWUuY2hpbGRyZW4uZmlsdGVyKG9uPT5vbi5lbCYmTWkob24uZWwpKTtpZihkdC5sZW5ndGg+MClyZXR1cm4gSj9kdC5tYXAob249Pm9uLmVsKTpkdFswXS5lbH1yZXR1cm4gSj9kZS5lbD9bZGUuZWxdOltdOmRlLmVsfWxldCB2aT0wO2Z1bmN0aW9uIFlvKGxlLC4uLkope2xldCBkZT1EYXRlLm5vdygpLFVlPXZpP2RlLXZpOjA7cmV0dXJuIHZpPWRlLGBbJHtkZX1dWyR7VWV9bXNdWyR7bGV9XVx1RkYxQSR7Si5tYXAoZHQ9PkpTT04uc3RyaW5naWZ5KGR0KSkuam9pbigiICIpfWB9bGV0IEtvPWVuY29kZVVSSUNvbXBvbmVudDtmdW5jdGlvbiBtaShsZSxKPUtvKXtsZXQgZGU9bGU/T2JqZWN0LmtleXMobGUpLm1hcChVZT0+e2xldCBkdD1sZVtVZV07cmV0dXJuIHR5cGVvZiBkdD09PXZvaWQgMHx8ZHQ9PT1udWxsP2R0PSIiOl8uaXNQbGFpbk9iamVjdChkdCkmJihkdD1KU09OLnN0cmluZ2lmeShkdCkpLEooVWUpKyI9IitKKGR0KX0pLmZpbHRlcihVZT0+VWUubGVuZ3RoPjApLmpvaW4oIiYiKTpudWxsO3JldHVybiBkZT9gPyR7ZGV9YDoiIn1mdW5jdGlvbiBZcihsZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoIiIrbGUpfWNhdGNoKEope31yZXR1cm4iIitsZX1mdW5jdGlvbiBBYShsZT17fSl7bGV0IEo9e307cmV0dXJuIE9iamVjdC5rZXlzKGxlKS5mb3JFYWNoKGRlPT57dHJ5e0pbZGVdPVlyKGxlW2RlXSl9Y2F0Y2goVWUpe0pbZGVdPWxlW2RlXX19KSxKfWxldCByaT0vXCsvZztmdW5jdGlvbiBicihsZSl7bGV0IEo9e307aWYobGU9PT0iInx8bGU9PT0iPyIpcmV0dXJuIEo7bGV0IFVlPShsZVswXT09PSI/Ij9sZS5zbGljZSgxKTpsZSkuc3BsaXQoIiYiKTtmb3IobGV0IGR0PTA7ZHQ8VWUubGVuZ3RoOysrZHQpe2xldCBvbj1VZVtkdF0ucmVwbGFjZShyaSwiICIpLEpuPW9uLmluZGV4T2YoIj0iKSxfbj1ZcihKbjwwP29uOm9uLnNsaWNlKDAsSm4pKSxWbj1KbjwwP251bGw6WXIob24uc2xpY2UoSm4rMSkpO2lmKF9uIGluIEope2xldCBkcj1KW19uXTtfLmlzQXJyYXkoZHIpfHwoZHI9Sltfbl09W2RyXSksZHIucHVzaChWbil9ZWxzZSBKW19uXT1Wbn1yZXR1cm4gSn1mdW5jdGlvbiBnbyhsZSl7bGV0W0osZGVdPWxlLnNwbGl0KCI/IiwyKTtyZXR1cm57cGF0aDpKLHF1ZXJ5OmJyKGRlfHwiIil9fWZ1bmN0aW9uIE9hKGxlKXtsZXQgSj17fTtyZXR1cm4gbGUmJk9iamVjdC5rZXlzKGxlKS5mb3JFYWNoKGRlPT57ZGUuaW5kZXhPZigiZGF0YS0iKT09PTAmJihKW2RlLnJlcGxhY2UoImRhdGEtIiwiIildPWxlW2RlXSl9KSxKfWNsYXNzIExpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoSil7c3VwZXIoSik7dGhpcy5uYW1lPSJET01FeGNlcHRpb24ifX1mdW5jdGlvbiBBaShsZSxKKXtyZXR1cm4gSiYmKEouY2FwdHVyZSYmKGxlKz0iQ2FwdHVyZSIpLEoub25jZSYmKGxlKz0iT25jZSIpLEoucGFzc2l2ZSYmKGxlKz0iUGFzc2l2ZSIpKSxgb24ke18uY2FwaXRhbGl6ZShfLmNhbWVsaXplKGxlKSl9YH1jbGFzcyB4b3tjb25zdHJ1Y3RvcihKLGRlKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy50aW1lU3RhbXA9RGF0ZS5ub3coKSx0aGlzLl9zdG9wPSExLHRoaXMuX2VuZD0hMSx0aGlzLnR5cGU9Six0aGlzLmJ1YmJsZXM9ISFkZS5idWJibGVzLHRoaXMuY2FuY2VsYWJsZT0hIWRlLmNhbmNlbGFibGV9cHJldmVudERlZmF1bHQoKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl7dGhpcy5fZW5kPXRoaXMuX3N0b3A9ITB9c3RvcFByb3BhZ2F0aW9uKCl7dGhpcy5fc3RvcD0hMH19ZnVuY3Rpb24gSm8obGUpe2lmKGxlIGluc3RhbmNlb2YgeG8pcmV0dXJuIGxlO2xldFtKXT1PbihsZS50eXBlKSxkZT1uZXcgeG8oSix7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSk7cmV0dXJuIF8uZXh0ZW5kKGRlLGxlKSxkZX1jbGFzcyB2b3tjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPU9iamVjdC5jcmVhdGUobnVsbCl9ZGlzcGF0Y2hFdmVudChKKXtsZXQgZGU9dGhpcy5saXN0ZW5lcnNbSi50eXBlXTtpZighZGUpcmV0dXJuITE7bGV0IFVlPUpvKEopLGR0PWRlLmxlbmd0aDtmb3IobGV0IG9uPTA7b248ZHQmJihkZVtvbl0uY2FsbCh0aGlzLFVlKSwhVWUuX2VuZCk7b24rKyk7cmV0dXJuIFVlLmNhbmNlbGFibGUmJlVlLmRlZmF1bHRQcmV2ZW50ZWR9YWRkRXZlbnRMaXN0ZW5lcihKLGRlLFVlKXtKPUFpKEosVWUpLCh0aGlzLmxpc3RlbmVyc1tKXXx8KHRoaXMubGlzdGVuZXJzW0pdPVtdKSkucHVzaChkZSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihKLGRlLFVlKXtKPUFpKEosVWUpO2xldCBkdD10aGlzLmxpc3RlbmVyc1tKXTtpZighZHQpcmV0dXJuO2xldCBvbj1kdC5pbmRleE9mKGRlKTtvbj4tMSYmZHQuc3BsaWNlKG9uLDEpfX1sZXQgZ249Lyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIE9uKGxlKXtsZXQgSjtpZihnbi50ZXN0KGxlKSl7Sj17fTtsZXQgZGU7Zm9yKDtkZT1sZS5tYXRjaChnbik7KWxlPWxlLnNsaWNlKDAsbGUubGVuZ3RoLWRlWzBdLmxlbmd0aCksSltkZVswXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5bXy5oeXBoZW5hdGUobGUuc2xpY2UoMikpLEpdfWxldCBLcj0oKCk9Pih7c3RvcDoxLHByZXZlbnQ6MTw8MSxzZWxmOjE8PDJ9KSkoKTtmdW5jdGlvbiBGbihsZSl7bGV0IEo9MDtyZXR1cm4gbGUuaW5jbHVkZXMoInN0b3AiKSYmKEp8PUtyLnN0b3ApLGxlLmluY2x1ZGVzKCJwcmV2ZW50IikmJihKfD1Lci5wcmV2ZW50KSxsZS5pbmNsdWRlcygic2VsZiIpJiYoSnw9S3Iuc2VsZiksSn1sZXQgaWk9MCxGcj0xLCR0PTMsUmU9ODtmdW5jdGlvbiBYaShsZSxKKXtsZXR7cGFyZW50Tm9kZTpkZX09bGU7aWYoIWRlKXJldHVybiBudWxsO2xldHtjaGlsZE5vZGVzOlVlfT1kZTtyZXR1cm4gVWVbVWUuaW5kZXhPZihsZSkrKEo9PT0ibiI/MTotMSldfHxudWxsfWZ1bmN0aW9uIHRuKGxlKXtsZXR7cGFyZW50Tm9kZTpKfT1sZTtpZihKKXtsZXR7Y2hpbGROb2RlczpkZX09SixVZT1kZS5pbmRleE9mKGxlKTtVZT4tMSYmKGxlLnBhcmVudE5vZGU9bnVsbCxkZS5zcGxpY2UoVWUsMSkpfX1mdW5jdGlvbiBtbyhsZSl7IWxlLm5vZGVJZCYmbGUucGFnZU5vZGUmJihsZS5ub2RlSWQ9bGUucGFnZU5vZGUuZ2VuSWQoKSl9Y2xhc3Mgb2kgZXh0ZW5kcyB2b3tjb25zdHJ1Y3RvcihKLGRlLFVlKXtzdXBlcigpO2lmKHRoaXMucGFnZU5vZGU9bnVsbCx0aGlzLnBhcmVudE5vZGU9bnVsbCx0aGlzLl90ZXh0PW51bGwsVWUpe2xldHtwYWdlTm9kZTpkdH09VWU7ZHQmJih0aGlzLnBhZ2VOb2RlPWR0LHRoaXMubm9kZUlkPWR0LmdlbklkKCksIWR0LmlzVW5tb3VudGVkJiZkdC5vbkNyZWF0ZSh0aGlzLGRlKSl9dGhpcy5ub2RlVHlwZT1KLHRoaXMubm9kZU5hbWU9ZGUsdGhpcy5jaGlsZE5vZGVzPVtdfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc1swXXx8bnVsbH1nZXQgbGFzdENoaWxkKCl7bGV0e2NoaWxkTm9kZXM6Sn09dGhpcyxkZT1KLmxlbmd0aDtyZXR1cm4gZGU/SltkZS0xXTpudWxsfWdldCBuZXh0U2libGluZygpe3JldHVybiBYaSh0aGlzLCJuIil9Z2V0IG5vZGVWYWx1ZSgpe3JldHVybiBudWxsfXNldCBub2RlVmFsdWUoSil7fWdldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLl90ZXh0fHwiIn1zZXQgdGV4dENvbnRlbnQoSil7dGhpcy5fdGV4dD1KLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uVGV4dENvbnRlbnQodGhpcyxKKX1nZXQgcGFyZW50RWxlbWVudCgpe2xldHtwYXJlbnROb2RlOkp9PXRoaXM7cmV0dXJuIEomJkoubm9kZVR5cGU9PT1Gcj9KOm51bGx9Z2V0IHByZXZpb3VzU2libGluZygpe3JldHVybiBYaSh0aGlzLCJwIil9YXBwZW5kQ2hpbGQoSil7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKEosbnVsbCl9Y2xvbmVOb2RlKEope2xldCBkZT1fLmV4dGVuZChPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSksdGhpcykse2F0dHJpYnV0ZXM6VWV9PWRlO3JldHVybiBVZSYmKGRlLmF0dHJpYnV0ZXM9Xy5leHRlbmQoe30sVWUpKSxKJiYoZGUuY2hpbGROb2Rlcz1kZS5jaGlsZE5vZGVzLm1hcChkdD0+ZHQuY2xvbmVOb2RlKCEwKSkpLGRlfWluc2VydEJlZm9yZShKLGRlKXt0bihKKSxKLnBhZ2VOb2RlPXRoaXMucGFnZU5vZGUsSi5wYXJlbnROb2RlPXRoaXMsbW8oSik7bGV0e2NoaWxkTm9kZXM6VWV9PXRoaXM7aWYoZGUpe2xldCBkdD1VZS5pbmRleE9mKGRlKTtpZihkdD09PS0xKXRocm93IG5ldyBMaSgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4iKTtVZS5zcGxpY2UoZHQsMCxKKX1lbHNlIFVlLnB1c2goSik7cmV0dXJuIHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkP3RoaXMucGFnZU5vZGUub25JbnNlcnRCZWZvcmUodGhpcyxKLGRlKTpKfXJlbW92ZUNoaWxkKEope2xldHtjaGlsZE5vZGVzOmRlfT10aGlzLFVlPWRlLmluZGV4T2YoSik7aWYoVWU9PT0tMSl0aHJvdyBuZXcgTGkoIkZhaWxlZCB0byBleGVjdXRlICdyZW1vdmVDaGlsZCcgb24gJ05vZGUnOiBUaGUgbm9kZSB0byBiZSByZW1vdmVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4iKTtyZXR1cm4gSi5wYXJlbnROb2RlPW51bGwsZGUuc3BsaWNlKFVlLDEpLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkP3RoaXMucGFnZU5vZGUub25SZW1vdmVDaGlsZChKKTpKfX1sZXQgT2k9ImNsYXNzIixabz0ic3R5bGUiLFhvPSIudk93bmVySWQiLFRhPSIudlJlbmRlcmpzIjtjbGFzcyBEaSBleHRlbmRzIG9pe2NvbnN0cnVjdG9yKEosZGUsVWUpe3N1cGVyKEosZGUsVWUpO3RoaXMuYXR0cmlidXRlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3R5bGU9bnVsbCx0aGlzLnZTaG93PW51bGwsdGhpcy5faHRtbD1udWxsfWdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW09pXXx8IiJ9c2V0IGNsYXNzTmFtZShKKXt0aGlzLnNldEF0dHJpYnV0ZShPaSxKKX1nZXQgaW5uZXJIVE1MKCl7cmV0dXJuIiJ9c2V0IGlubmVySFRNTChKKXt0aGlzLl9odG1sPUp9YWRkRXZlbnRMaXN0ZW5lcihKLGRlLFVlKXtzdXBlci5hZGRFdmVudExpc3RlbmVyKEosZGUsVWUpLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiYoZGUud3hzRXZlbnQ/dGhpcy5wYWdlTm9kZS5vbkFkZFd4c0V2ZW50KHRoaXMsQWkoSixVZSksZGUud3hzRXZlbnQsRm4oZGUubW9kaWZpZXJzfHxbXSkpOnRoaXMucGFnZU5vZGUub25BZGRFdmVudCh0aGlzLEFpKEosVWUpLEZuKGRlLm1vZGlmaWVyc3x8W10pKSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihKLGRlLFVlKXtzdXBlci5yZW1vdmVFdmVudExpc3RlbmVyKEosZGUsVWUpLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uUmVtb3ZlRXZlbnQodGhpcyxBaShKLFVlKSl9Z2V0QXR0cmlidXRlKEope3JldHVybiBKPT09Wm8/dGhpcy5zdHlsZTp0aGlzLmF0dHJpYnV0ZXNbSl19cmVtb3ZlQXR0cmlidXRlKEope0o9PVpvP3RoaXMuc3R5bGU9bnVsbDpkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW0pdLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uUmVtb3ZlQXR0cmlidXRlKHRoaXMsSil9c2V0QXR0cmlidXRlKEosZGUpe0o9PT1abz90aGlzLnN0eWxlPWRlOnRoaXMuYXR0cmlidXRlc1tKXT1kZSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblNldEF0dHJpYnV0ZSh0aGlzLEosZGUpfXRvSlNPTih7YXR0cjpKLG5vcm1hbGl6ZTpkZX09e30pe2xldHthdHRyaWJ1dGVzOlVlLHN0eWxlOmR0LGxpc3RlbmVyczpvbixfdGV4dDpKbn09dGhpcyxfbj17fTtPYmplY3Qua2V5cyhVZSkubGVuZ3RoJiYoX24uYT1kZT9kZShVZSk6VWUpO2xldCBWbj1PYmplY3Qua2V5cyhvbik7aWYoVm4ubGVuZ3RoKXtsZXQgZHIsdG89e307Vm4uZm9yRWFjaChabj0+e2xldCBibz1vbltabl07aWYoYm8ubGVuZ3RoKXtsZXR7d3hzRXZlbnQ6SWEsbW9kaWZpZXJzOnlvfT1ib1swXSxGbz1Gbih5b3x8W10pO0lhPyhkcnx8KGRyPXt9KSxkcltabl09W2RlP2RlKElhKTpJYSxGb10pOnRvW1puXT1Gb319KSxfbi5lPWRlP2RlKHRvLCExKTp0byxkciYmKF9uLnc9ZGU/ZGUoZHIsITEpOmRyKX1yZXR1cm4gZHQhPT1udWxsJiYoX24ucz1kZT9kZShkdCk6ZHQpLEp8fChfbi5pPXRoaXMubm9kZUlkLF9uLm49dGhpcy5ub2RlTmFtZSksSm4hPT1udWxsJiYoX24udD1kZT9kZShKbik6Sm4pLF9ufX1jbGFzcyBhaSBleHRlbmRzIG9pe2NvbnN0cnVjdG9yKEosZGUpe3N1cGVyKFJlLCIjY29tbWVudCIsZGUpO3RoaXMuX3RleHQ9IiJ9dG9KU09OKEo9e30pe3JldHVybiBKLmF0dHI/e306e2k6dGhpcy5ub2RlSWR9fX1jbGFzcyB5ciBleHRlbmRzIERpe2NvbnN0cnVjdG9yKEosZGUpe3N1cGVyKEZyLEoudG9VcHBlckNhc2UoKSxkZSk7dGhpcy50YWdOYW1lPXRoaXMubm9kZU5hbWV9fWNsYXNzIF9vIGV4dGVuZHMgeXJ7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfXNldCB2YWx1ZShKKXt0aGlzLnNldEF0dHJpYnV0ZSgidmFsdWUiLEopfX1jbGFzcyBmcyBleHRlbmRzIF9ve31jbGFzcyBRbyBleHRlbmRzIERpe2NvbnN0cnVjdG9yKEosZGUpe3N1cGVyKCR0LCIjdGV4dCIsZGUpO3RoaXMuX3RleHQ9Sn1nZXQgbm9kZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3RleHR8fCIifXNldCBub2RlVmFsdWUoSil7dGhpcy5fdGV4dD1KLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uTm9kZVZhbHVlKHRoaXMsSil9fWxldCBybj17QUQ6WyJkYXRhIl0sIkFELURSQVciOlsiZGF0YSJdLCJMSVZFLVBMQVlFUiI6WyJwaWN0dXJlLWluLXBpY3R1cmUtbW9kZSJdLE1BUDpbIm1hcmtlcnMiLCJwb2x5bGluZSIsImNpcmNsZXMiLCJjb250cm9scyIsImluY2x1ZGUtcG9pbnRzIiwicG9seWdvbnMiXSxQSUNLRVI6WyJyYW5nZSIsInZhbHVlIl0sIlBJQ0tFUi1WSUVXIjpbInZhbHVlIl0sIlJJQ0gtVEVYVCI6WyJub2RlcyJdLFZJREVPOlsiZGFubXUtbGlzdCIsImhlYWRlciJdLCJXRUItVklFVyI6WyJ3ZWJ2aWV3LXN0eWxlcyJdfSxFcj1bImFuaW1hdGlvbiJdLFduPShsZSxKKT0+e2lmKEVyLmluZGV4T2YoSik+LTEpcmV0dXJuITA7bGV0IGRlPXJuW2xlLm5vZGVOYW1lXTtyZXR1cm4hIShkZSYmZGUuaW5kZXhPZihKKT4tMSl9LFNyPTEsSnI9MixlYT0zLHRhPTQsZHM9NSxCbz02LE1vPTcsSGE9OCwkYT05LExvPTEwLFBhPTEyLHBzPTE1LG5hPTIwO2Z1bmN0aW9uIERvKGxlLEose2NsZWFyVGltZW91dDpkZSxzZXRUaW1lb3V0OlVlfSl7bGV0IGR0LG9uPWZ1bmN0aW9uKCl7ZGUoZHQpLGR0PVVlKCgpPT5sZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSil9O3JldHVybiBvbi5jYW5jZWw9ZnVuY3Rpb24oKXtkZShkdCl9LG9ufWNsYXNzIFZ7Y29uc3RydWN0b3IoSixkZSl7dGhpcy5pZD1KLHRoaXMubGlzdGVuZXI9e30sdGhpcy5lbWl0Q2FjaGU9W10sZGUmJk9iamVjdC5rZXlzKGRlKS5mb3JFYWNoKFVlPT57dGhpcy5vbihVZSxkZVtVZV0pfSl9ZW1pdChKLC4uLmRlKXtsZXQgVWU9dGhpcy5saXN0ZW5lcltKXTtpZighVWUpcmV0dXJuIHRoaXMuZW1pdENhY2hlLnB1c2goe2V2ZW50TmFtZTpKLGFyZ3M6ZGV9KTtVZS5mb3JFYWNoKGR0PT57ZHQuZm4uYXBwbHkoZHQuZm4sZGUpfSksdGhpcy5saXN0ZW5lcltKXT1VZS5maWx0ZXIoZHQ9PmR0LnR5cGUhPT0ib25jZSIpfW9uKEosZGUpe3RoaXMuX2FkZExpc3RlbmVyKEosIm9uIixkZSksdGhpcy5fY2xlYXJDYWNoZShKKX1vbmNlKEosZGUpe3RoaXMuX2FkZExpc3RlbmVyKEosIm9uY2UiLGRlKSx0aGlzLl9jbGVhckNhY2hlKEopfW9mZihKLGRlKXtsZXQgVWU9dGhpcy5saXN0ZW5lcltKXTtpZighIVVlKWlmKGRlKWZvcihsZXQgZHQ9MDtkdDxVZS5sZW5ndGg7KVVlW2R0XS5mbj09PWRlJiYoVWUuc3BsaWNlKGR0LDEpLGR0LS0pLGR0Kys7ZWxzZSBkZWxldGUgdGhpcy5saXN0ZW5lcltKXX1fY2xlYXJDYWNoZShKKXtmb3IobGV0IGRlPTA7ZGU8dGhpcy5lbWl0Q2FjaGUubGVuZ3RoO2RlKyspe2xldCBVZT10aGlzLmVtaXRDYWNoZVtkZV0sZHQ9Sj9VZS5ldmVudE5hbWU9PT1KP0o6bnVsbDpVZS5ldmVudE5hbWU7aWYoIWR0KWNvbnRpbnVlO2lmKHR5cGVvZiB0aGlzLmVtaXQuYXBwbHkodGhpcyxbZHQsLi4uVWUuYXJnc10pPT0ibnVtYmVyIil7dGhpcy5lbWl0Q2FjaGUucG9wKCk7Y29udGludWV9dGhpcy5lbWl0Q2FjaGUuc3BsaWNlKGRlLDEpLGRlLS19fV9hZGRMaXN0ZW5lcihKLGRlLFVlKXsodGhpcy5saXN0ZW5lcltKXXx8KHRoaXMubGlzdGVuZXJbSl09W10pKS5wdXNoKHtmbjpVZSx0eXBlOmRlfSl9fWxldCBxPVtSbixlcixwdCxaLGVuLGpuLGhpLHplLG90LER0LGNuLHpuLG5uLGFuLHRyLERyLG5yLHFyLFVyLENpXTtmdW5jdGlvbiBwZShsZSl7cmV0dXJuW2VyLHB0XS5pbmRleE9mKGxlKT4tMX1mdW5jdGlvbiBaZShsZSl7cmV0dXJuIHEuaW5kZXhPZihsZSk+LTF9bGV0IEtlPVtwdCxaLHNlLHBuLE1yLGtuLExyLFRyLFJuLGVyLGhuLGVuLHhuLGpuLGhpLHplLG90LER0LGNuLGFuLHpuLG5uLHRyLERyLG5yLHFyLFVyLENpXTtmdW5jdGlvbiBtdChsZSxKLGRlPSEwKXtyZXR1cm4gZGUmJiFfLmlzRnVuY3Rpb24oSik/ITE6S2UuaW5kZXhPZihsZSk+LTE/ITA6bGUuaW5kZXhPZigib24iKT09PTB9bGV0IGV0LGx0PVtdO2Z1bmN0aW9uIGZyKGxlKXtpZihldClyZXR1cm4gbGUoZXQpO2x0LnB1c2gobGUpfWZ1bmN0aW9uIEhyKGxlKXtldD1sZSxsdC5mb3JFYWNoKEo9PkoobGUpKX1sZXQgJHI9WmkoKGxlLEopPT5KKGxlKSksUWk9ZnVuY3Rpb24oKXt9O1FpLnByb3RvdHlwZT17X2lkOjEsb246ZnVuY3Rpb24obGUsSixkZSl7dmFyIFVlPXRoaXMuZXx8KHRoaXMuZT17fSk7cmV0dXJuKFVlW2xlXXx8KFVlW2xlXT1bXSkpLnB1c2goe2ZuOkosY3R4OmRlLF9pZDp0aGlzLl9pZH0pLHRoaXMuX2lkKyt9LG9uY2U6ZnVuY3Rpb24obGUsSixkZSl7dmFyIFVlPXRoaXM7ZnVuY3Rpb24gZHQoKXtVZS5vZmYobGUsZHQpLEouYXBwbHkoZGUsYXJndW1lbnRzKX1yZXR1cm4gZHQuXz1KLHRoaXMub24obGUsZHQsZGUpfSxlbWl0OmZ1bmN0aW9uKGxlKXt2YXIgSj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxkZT0oKHRoaXMuZXx8KHRoaXMuZT17fSkpW2xlXXx8W10pLnNsaWNlKCksVWU9MCxkdD1kZS5sZW5ndGg7Zm9yKFVlO1VlPGR0O1VlKyspZGVbVWVdLmZuLmFwcGx5KGRlW1VlXS5jdHgsSik7cmV0dXJuIHRoaXN9LG9mZjpmdW5jdGlvbihsZSxKKXt2YXIgZGU9dGhpcy5lfHwodGhpcy5lPXt9KSxVZT1kZVtsZV0sZHQ9W107aWYoVWUmJkope2Zvcih2YXIgb249VWUubGVuZ3RoLTE7b24+PTA7b24tLSlpZihVZVtvbl0uZm49PT1KfHxVZVtvbl0uZm4uXz09PUp8fFVlW29uXS5faWQ9PT1KKXtVZS5zcGxpY2Uob24sMSk7YnJlYWt9ZHQ9VWV9cmV0dXJuIGR0Lmxlbmd0aD9kZVtsZV09ZHQ6ZGVsZXRlIGRlW2xlXSx0aGlzfX07dmFyIF9pPVFpO2xldCBlbz17YmxhY2s6InJnYmEoMCwwLDAsMC40KSIsd2hpdGU6InJnYmEoMjU1LDI1NSwyNTUsMC40KSJ9O2Z1bmN0aW9uIGhzKGxlKXtyZXR1cm4gbGUmJmxlIGluIGVvP2VvW2xlXTpsZX1mdW5jdGlvbiBGaShsZSl7cmV0dXJuIGxlPT09ImJsYWNrIj8iIzAwMDAwMCI6IiNmZmZmZmYifWZ1bmN0aW9uIHdyKGxlLEosZGUpe2lmKF8uaXNTdHJpbmcoSikmJkouc3RhcnRzV2l0aCgiQCIpKXtsZXQgVWU9Si5yZXBsYWNlKCJAIiwiIiksZHQ9bGVbVWVdfHxKO3N3aXRjaChkZSl7Y2FzZSJ0aXRsZUNvbG9yIjpkdD1GaShkdCk7YnJlYWs7Y2FzZSJib3JkZXJTdHlsZSI6ZHQ9aHMoZHQpO2JyZWFrfXJldHVybiBkdH1yZXR1cm4gSn1mdW5jdGlvbiBzaShsZSxKPXt9LGRlPSJsaWdodCIpe2xldCBVZT1KW2RlXSxkdD17fTtyZXR1cm4gdHlwZW9mIFVlPT0idW5kZWZpbmVkInx8IWxlP2xlOihPYmplY3Qua2V5cyhsZSkuZm9yRWFjaChvbj0+e2xldCBKbj1sZVtvbl0sX249KCk9Pl8uaXNQbGFpbk9iamVjdChKbik/c2koSm4sSixkZSk6Xy5pc0FycmF5KEpuKT9Kbi5tYXAoVm49Pl8uaXNQbGFpbk9iamVjdChWbik/c2koVm4sSixkZSk6d3IoVWUsVm4pKTp3cihVZSxKbixvbik7ZHRbb25dPV9uKCl9KSxkdCl9dmFyIE5hPXtpbnZva2VBcnJheUZuczpobyxpc1VuaUxpZmVjeWNsZUhvb2s6bXQsZGVjb2RlZFF1ZXJ5OkFhLE9OX0xPQUQ6ZXIsT05fU0hPVzpwdCxMSU5FRkVFRDpBLFJFTkRFUkpTX01PRFVMRVM6dnIsZm9ybWF0TG9nOllvLFdYU19QUk9UT0NPTDpjZSxXWFNfTU9EVUxFUzpUdCxPTl9FUlJPUjpwbixVbmlMaWZlY3ljbGVIb29rczpLZSxpbnZva2VDcmVhdGVFcnJvckhhbmRsZXI6JHIsaW52b2tlQ3JlYXRlVnVlQXBwSG9vazpIcixvbmNlOlppLEkxOE5fSlNPTl9ERUxJTUlURVJTOm0sRW1pdHRlcjpfaSxub3JtYWxpemVTdHlsZXM6c2ksYWRkTGVhZGluZ1NsYXNoOktpLHJlc29sdmVDb21wb25lbnRJbnN0YW5jZTpBbixyZW1vdmVMZWFkaW5nU2xhc2g6SmksT05fUkVTSVpFOnhuLE9OX0FQUF9FTlRFUl9GT1JFR1JPVU5EOlVhLE9OX0FQUF9FTlRFUl9CQUNLR1JPVU5EOnFvLE9OX0hJREU6WixPTl9QQUdFX1NDUk9MTDpoaSxPTl9SRUFDSF9CT1RUT006b3QscGFyc2VOVnVlRGF0YXNldDpPYSxTQ0hFTUVfUkU6T2UsREFUQV9SRTphdCxjYWNoZVN0cmluZ0Z1bmN0aW9uOk5yLHBhcnNlUXVlcnk6YnIsY2FsbE9wdGlvbnM6Q2EsT05fVU5IQU5ETEVfUkVKRUNUSU9OOkxyLE9OX1BBR0VfTk9UX0ZPVU5EOmtuLFBSSU1BUllfQ09MT1I6SSxnZXRMZW46dXIsT05fVEhFTUVfQ0hBTkdFOk1yLFRBQkJBUl9IRUlHSFQ6dyxOQVZCQVJfSEVJR0hUOlIsc29ydE9iamVjdDpCaSxPRkZfVEhFTUVfQ0hBTkdFOktuLE9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0U6c24sVW5pTm9kZTpvaSxOT0RFX1RZUEVfUEFHRTppaSxBQ1RJT05fVFlQRV9QQUdFX0NSRUFURTpTcixBQ1RJT05fVFlQRV9QQUdFX0NSRUFURUQ6SnIsQUNUSU9OX1RZUEVfUEFHRV9TQ1JPTEw6cHMsQUNUSU9OX1RZUEVfSU5TRVJUOnRhLEFDVElPTl9UWVBFX0NSRUFURTplYSxBQ1RJT05fVFlQRV9SRU1PVkU6ZHMsQUNUSU9OX1RZUEVfQUREX0VWRU5UOkhhLEFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQ6UGEsQUNUSU9OX1RZUEVfUkVNT1ZFX0VWRU5UOiRhLEFDVElPTl9UWVBFX1NFVF9BVFRSSUJVVEU6Qm8sQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURTpNbyxBQ1RJT05fVFlQRV9TRVRfVEVYVDpMbyxPTl9SRUFEWTpobixPTl9VTkxPQUQ6ZW4sRXZlbnRDaGFubmVsOlYsbm9ybWFsaXplVGFiQmFyU3R5bGVzOmhzLE9OX05BVklHQVRJT05fQkFSX0JVVFRPTl9UQVA6RHIsc3RyaW5naWZ5UXVlcnk6bWksT05fUkVBQ0hfQk9UVE9NX0RJU1RBTkNFOmQsZGVib3VuY2U6RG8sT05fUFVMTF9ET1dOX1JFRlJFU0g6RHQsT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NIQU5HRUQ6cXIsT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NPTkZJUk1FRDpVcixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0xJQ0tFRDpucixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRDpDaSxPTl9CQUNLX1BSRVNTOmpuLHBhcnNlVXJsOmdvLG9uQ3JlYXRlVnVlQXBwOmZyLE9OX1RBQl9JVEVNX1RBUDp6ZSxPTl9MQVVOQ0g6c2UsQUNUSU9OX1RZUEVfRVZFTlQ6bmEsY3JlYXRlVW5pRXZlbnQ6Sm8sT05fV1hTX0lOVk9LRV9DQUxMX01FVEhPRDpnaSxXRUJfSU5WT0tFX0FQUFNFUlZJQ0U6RXQsaXNSb290SG9vazpaZSxpc1Jvb3RJbW1lZGlhdGVIb29rOnBlLFVuaUlucHV0RWxlbWVudDpfbyxVbmlUZXh0QXJlYUVsZW1lbnQ6ZnMsVW5pRWxlbWVudDp5cixVbmlUZXh0Tm9kZTpRbyxVbmlDb21tZW50Tm9kZTphaSxmb3JjZVBhdGNoUHJvcDpXbixKU09OX1BST1RPQ09MOk8scmVzb2x2ZU93bmVyRWw6b3IsQVRUUl9WX09XTkVSX0lEOlhvLEFUVFJfVl9SRU5ERVJKUzpUYX07cmV0dXJuIE5hfShnKTtyZXR1cm4gY312YXIgdms9MTtmdW5jdGlvbiBZdigpe3JldHVybih2aysrKS50b1N0cmluZygpfXZhciBRZD1nPT5nJiZKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGcpKXx8ZztmdW5jdGlvbiBzZihnKXtsZXQgYz1kbChnKTtyZXR1cm4gYy5zdWJzdHJpbmcoOCxjLmxlbmd0aC0xKX1mdW5jdGlvbiBlcChnKXtpZighUW4oYnRvYSkpcmV0dXJuIiI7bGV0IGM9QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG5ldyBVaW50OEFycmF5KGcpLF89PlN0cmluZy5mcm9tQ2hhckNvZGUoXykpLmpvaW4oIiIpO3JldHVybiBidG9hKGMpfWZ1bmN0aW9uIGxmKGcpe2lmKCFnfHx0eXBlb2YgZyE9Im9iamVjdCIpcmV0dXJuITA7Zm9yKGxldCBjIGluIGcpaWYoTGMoZyxjKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgS2Y9WyJvZmYiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwibG9nIiwiZGVidWciXSxKZj17fTtmdW5jdGlvbiBLdigpe0tmLmZvckVhY2goZz0+e2xldCBjPUtmLmluZGV4T2YoZyk7SmZbZ109e30sS2YuZm9yRWFjaChfPT57S2YuaW5kZXhPZihfKTw9YyYmKEpmW2ddW19dPSEwKX0pfSl9ZnVuY3Rpb24gZ3IoZyl7bGV0IGM9Z2xvYmFsLldYRW52aXJvbm1lbnQmJmdsb2JhbC5XWEVudmlyb25tZW50LmxvZ0xldmVsfHwibG9nIjtyZXR1cm4gSmZbY10mJkpmW2NdW2ddfWZ1bmN0aW9uIHBvKGcpe2dsb2JhbC5uYXRpdmVMb2coInd4SW50ZXJhY3Rpb25BbmFseXplcjogW2pzZm1dIitnLCJfX0RFQlVHIil9ZnVuY3Rpb24gSnYoZyxjLF8pe3JldHVybmAke2N9QCR7X30jJHtnfWB9dmFyIFpmPWNsYXNze2NvbnN0cnVjdG9yKGMpe3RoaXMuaW5zdGFuY2VJZD1TdHJpbmcoYyksdGhpcy5sYXN0Q2FsbGJhY2tJZD0wLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMuaG9va3M9e319YWRkKGMpe3JldHVybiB0aGlzLmxhc3RDYWxsYmFja0lkKyssdGhpcy5jYWxsYmFja3NbdGhpcy5sYXN0Q2FsbGJhY2tJZF09Yyx0aGlzLmxhc3RDYWxsYmFja0lkfXJlbW92ZShjKXtsZXQgXz10aGlzLmNhbGxiYWNrc1tjXTtyZXR1cm4gZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2NdLF99cmVnaXN0ZXJIb29rKGMsXyxBLFIpe2xldCB3PUp2KGMsXyxBKTt0aGlzLmhvb2tzW3ddJiZjb25zb2xlLndhcm4oYFtKUyBGcmFtZXdvcmtdIE92ZXJyaWRlIGFuIGV4aXN0aW5nIGNvbXBvbmVudCBob29rICIke3d9Ii5gKSx0aGlzLmhvb2tzW3ddPVJ9dHJpZ2dlckhvb2soYyxfLEEsUil7bGV0IHc9SnYoYyxfLEEpLGQ9dGhpcy5ob29rc1t3XTtpZighUW4oZCkpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEludmFsaWQgaG9vayBmdW5jdGlvbiB0eXBlICgke3R5cGVvZiBkfSkgb24gIiR7d30iLmApLG51bGw7bGV0IG09bnVsbDt0cnl7bT1kLmFwcGx5KG51bGwsUnx8W10pfWNhdGNoKEkpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBleGVjdXRlIHRoZSBob29rIGZ1bmN0aW9uIG9uICIke3d9Ii5gKSxJfXJldHVybiBtfWNvbnN1bWUoYyxfLEEpe2xldCBSPXRoaXMuY2FsbGJhY2tzW2NdO2lmKCh0eXBlb2YgQT09InVuZGVmaW5lZCJ8fEE9PT0hMSkmJmRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tjXSxRbihSKSl0cnl7cmV0dXJuIFIuY2FsbChudWxsLF8sQSl9Y2F0Y2godyl7dGhyb3cgY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uOgogJHt3LnRvU3RyaW5nKCl9YCksd31yZXR1cm4gbmV3IEVycm9yKGBpbnZhbGlkIGNhbGxiYWNrIGlkICIke2N9ImApfWNsb3NlKCl7dGhpcy5jYWxsYmFja3M9e30sdGhpcy5ob29rcz17fX19O3ZhciBYZj17fTtmdW5jdGlvbiBadihnLGMpe2cmJihYZltnXT1jKX1mdW5jdGlvbiBrbChnKXtyZXR1cm4gWGZbZ119ZnVuY3Rpb24gWHYoZyl7ZGVsZXRlIFhmW2ddfWZ1bmN0aW9uIG5pKGcpe2lmKGcpe2xldCBjPVhmW2ddO2lmKGMmJmMudGFza0NlbnRlcilyZXR1cm4gYy50YXNrQ2VudGVyfXJldHVybiBudWxsfWZ1bmN0aW9uIG1rKGcpe2cuY2FsY0NsYXNzTGlzdCYmZy5jYWxjQ2xhc3NMaXN0KCl9ZnVuY3Rpb24gdHAoZyxjLF8pe2xldHtkb2N1bWVudEVsZW1lbnQ6QX09ZztpZihBLnB1cmVDaGlsZHJlbi5sZW5ndGg+MHx8Yy5wYXJlbnROb2RlKXJldHVybjtsZXQgUj1BLmNoaWxkcmVuLHc9Xz9SLmluZGV4T2YoXyk6LTE7dzwwP1IucHVzaChjKTpSLnNwbGljZSh3LDAsYyksYy5ub2RlVHlwZT09PTE/KGMucm9sZT09PSJib2R5Ij8oYy5kb2NJZD1nLmlkLGMub3duZXJEb2N1bWVudD1nLGMucGFyZW50Tm9kZT1BLERjKGMsQSkpOihjLmNoaWxkcmVuLmZvckVhY2goZD0+e2QucGFyZW50Tm9kZT1jfSksbnAoZyxjKSxEYyhjLEEpLGRlbGV0ZSBnLm5vZGVNYXBbYy5ub2RlSWRdKSxBLnB1cmVDaGlsZHJlbi5wdXNoKGMpLF9rKGcsYykpOihjLnBhcmVudE5vZGU9QSxnLm5vZGVNYXBbYy5yZWZdPWMpfWZ1bmN0aW9uIF9rKGcsYyl7bGV0IF89Yy50b0pTT04oKTtnJiZnLnRhc2tDZW50ZXImJlFuKGcudGFza0NlbnRlci5zZW5kKSYmZy50YXNrQ2VudGVyLnNlbmQoImRvbSIse2FjdGlvbjoiY3JlYXRlQm9keSJ9LFtfXSl9ZnVuY3Rpb24gbnAoZyxjKXtjLnJvbGU9ImJvZHkiLGMuZGVwdGg9MSxkZWxldGUgZy5ub2RlTWFwW2Mubm9kZUlkXSxjLnJlZj0iX3Jvb3QiLGcubm9kZU1hcC5fcm9vdD1jLGcuYm9keT1jfWZ1bmN0aW9uIERjKGcsYyl7Zy5wYXJlbnROb2RlPWMsbWsoZyksYy5kb2NJZCYmKGcuZG9jSWQ9Yy5kb2NJZCxnLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LGcub3duZXJEb2N1bWVudC5ub2RlTWFwW2cubm9kZUlkXT1nLGcuZGVwdGg9Yy5kZXB0aCsxKSxnLmNoaWxkcmVuLmZvckVhY2goXz0+e0RjKF8sZyl9KX1mdW5jdGlvbiBycChnKXtmb3IoO2c7KXtpZihnLm5vZGVUeXBlPT09MSlyZXR1cm4gZztnPWcubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIGlwKGcpe2Zvcig7Zzspe2lmKGcubm9kZVR5cGU9PT0xKXJldHVybiBnO2c9Zy5wcmV2aW91c1NpYmxpbmd9fWZ1bmN0aW9uIEZjKGcsYyxfLEE9ITEpe188MCYmKF89MCk7bGV0IFI9Y1tfLTFdLHc9Y1tfXTtyZXR1cm4gYy5zcGxpY2UoXywwLGcpLEEmJihSJiYoUi5uZXh0U2libGluZz1nKSxnLnByZXZpb3VzU2libGluZz1SLGcubmV4dFNpYmxpbmc9dyx3JiYody5wcmV2aW91c1NpYmxpbmc9ZykpLF99ZnVuY3Rpb24gVmMoZyxjLF8sQT0hMSl7bGV0IFI9Yy5pbmRleE9mKGcpO2lmKFI8MClyZXR1cm4tMTtpZihBKXtsZXQgST1jW1ItMV0sT2U9Y1tSKzFdO0kmJihJLm5leHRTaWJsaW5nPU9lKSxPZSYmKE9lLnByZXZpb3VzU2libGluZz1JKX1jLnNwbGljZShSLDEpO2xldCB3PV87Ujw9XyYmKHc9Xy0xKTtsZXQgZD1jW3ctMV0sbT1jW3ddO3JldHVybiBjLnNwbGljZSh3LDAsZyksQSYmKGQmJihkLm5leHRTaWJsaW5nPWcpLGcucHJldmlvdXNTaWJsaW5nPWQsZy5uZXh0U2libGluZz1tLG0mJihtLnByZXZpb3VzU2libGluZz1nKSksUj09PXc/LTE6X31mdW5jdGlvbiBvcChnLGMsXz0hMSl7bGV0IEE9Yy5pbmRleE9mKGcpO2lmKCEoQTwwKSl7aWYoXyl7bGV0IFI9Y1tBLTFdLHc9Y1tBKzFdO1ImJihSLm5leHRTaWJsaW5nPXcpLHcmJih3LnByZXZpb3VzU2libGluZz1SKX1jLnNwbGljZShBLDEpfX12YXIgVWM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlcHRoPTA7dGhpcy5ub2RlSWQ9WXYoKSx0aGlzLnJlZj10aGlzLm5vZGVJZCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMucHVyZUNoaWxkcmVuPVtdLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMubmV4dFNpYmxpbmc9bnVsbCx0aGlzLnByZXZpb3VzU2libGluZz1udWxsfWRlc3Ryb3koKXtsZXQgYz1rbCh0aGlzLmRvY0lkKTtjJiYoZGVsZXRlIHRoaXMuZG9jSWQsZGVsZXRlIGMubm9kZU1hcFt0aGlzLm5vZGVJZF0pLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChfPT57Xy5kZXN0cm95KCl9KX19O3ZhciBRdj17fTtmdW5jdGlvbiBhcChnLGMpe2lmKCFZaShjKXx8IWMubGVuZ3RoKXJldHVybjtjbGFzcyBfIGV4dGVuZHMga297fWMuZm9yRWFjaChBPT57Xy5wcm90b3R5cGVbQV09ZnVuY3Rpb24oLi4uUil7bGV0IHc9bmkodGhpcy5kb2NJZCk7aWYodylyZXR1cm4gdy5zZW5kKCJjb21wb25lbnQiLHtyZWY6dGhpcy5yZWYsY29tcG9uZW50OmcsbWV0aG9kOkF9LFIpfX0pLFF2W2ddPV99ZnVuY3Rpb24gZW0oZyl7cmV0dXJuIFF2W2ddfWZ1bmN0aW9uIGRuKGcsYyxfLEEsUil7bGV0IHc9e3R5cGU6ImRlY2wiLHByb3A6Zyx2YWx1ZTpjLnRvU3RyaW5nKCkscmF3czpBLHNvdXJjZTpSfTtyZXR1cm4gXyYmKHcuaW1wb3J0YW50PSEwKSx3fXZhciBRZj0iYmFja2dyb3VuZENvbG9yIixlZD0iYmFja2dyb3VuZEltYWdlIixiaz1nPT57bGV0e3ZhbHVlOmMsaW1wb3J0YW50Ol8scmF3czpBLHNvdXJjZTpSfT1nO3JldHVybi9eIz9cUyskLy50ZXN0KGMpfHwvXnJnYmE/KC4rKSQvLnRlc3QoYyk/W2RuKGVkLCJub25lIixfLEEsUiksZG4oUWYsYyxfLEEsUildOi9ebGluZWFyLWdyYWRpZW50KC4rKSQvLnRlc3QoYyk/W2RuKGVkLGMsXyxBLFIpLGRuKFFmLCJ0cmFuc3BhcmVudCIsXyxBLFIpXTpjPT0iIj9bZG4oZWQsIm5vbmUiLF8sQSxSKSxkbihRZiwidHJhbnNwYXJlbnQiLF8sQSxSKV06W2ddfSx5az1nPT57bGV0e3ZhbHVlOmMsaW1wb3J0YW50Ol8scmF3czpBLHNvdXJjZTpSfT1nO3JldHVybi9eIz9cUyskLy50ZXN0KGMpfHwvXnJnYmE/KC4rKSQvLnRlc3QoYyk/W2RuKFFmLGMsXyxBLFIpXTovXmxpbmVhci1ncmFkaWVudCguKykkLy50ZXN0KGMpP1tkbihlZCxjLF8sQSxSKV06Yz09IiI/W2ddOltnXX07ZnVuY3Rpb24gRWsoZyl7cmV0dXJuIGM9PmcudHlwZT09PSJ1dnVlIj9iayhjKTp5ayhjKX1mdW5jdGlvbiB0bSgpe3JldHVybiJib3JkZXJUb3AifWZ1bmN0aW9uIG5tKCl7cmV0dXJuImJvcmRlclJpZ2h0In1mdW5jdGlvbiBybSgpe3JldHVybiJib3JkZXJCb3R0b20ifWZ1bmN0aW9uIGltKCl7cmV0dXJuImJvcmRlckxlZnQifXZhciB0ZD1nPT57bGV0e3Byb3A6Yyx2YWx1ZTpfLGltcG9ydGFudDpBLHJhd3M6Uixzb3VyY2U6d309ZyxkPXJmKGMpLnNwbGl0KCItIiksbT1kW2QubGVuZ3RoLTFdO209b2YobSk7bGV0IEk9Xy5yZXBsYWNlKC9ccyosXHMqL2csIiwiKS5zcGxpdCgvXHMrLyk7c3dpdGNoKEkubGVuZ3RoKXtjYXNlIDE6aWYoZC5sZW5ndGg9PT0zKXJldHVybltnXTtJLnB1c2goSVswXSxJWzBdLElbMF0pO2JyZWFrO2Nhc2UgMjpJLnB1c2goSVswXSxJWzFdKTticmVhaztjYXNlIDM6SS5wdXNoKElbMV0pO2JyZWFrfXJldHVybltkbih0bSgpK20sSVswXSxBLFIsdyksZG4obm0oKSttLElbMV0sQSxSLHcpLGRuKHJtKCkrbSxJWzJdLEEsUix3KSxkbihpbSgpK20sSVszXSxBLFIsdyldfSxzcD1nPT57bGV0e3Byb3A6Yyx2YWx1ZTpfLGltcG9ydGFudDpBLHJhd3M6Uixzb3VyY2U6d309ZyxkPXJmKGMpLnNwbGl0KCItIilbMV07ZD1vZihkKTtsZXQgbT1fLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKTtzd2l0Y2gobS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZ107Y2FzZSAyOm0ucHVzaChtWzBdLG1bMV0pO2JyZWFrO2Nhc2UgMzptLnB1c2gobVsxXSk7YnJlYWt9cmV0dXJuW2RuKHRtK2QsbVswXSxBLFIsdyksZG4obm0rZCxtWzFdLEEsUix3KSxkbihybStkLG1bMl0sQSxSLHcpLGRuKGltK2QsbVszXSxBLFIsdyldfSxvbT10ZCxTaz1zcCxhbT10ZCx3az1zcDtmdW5jdGlvbiBDayhnKXtyZXR1cm4gYz0+e2xldCBfPSgpPT4iV2lkdGgiLEE9KCk9PiJTdHlsZSIsUj0oKT0+IkNvbG9yIix7cHJvcDp3LHZhbHVlOmQsaW1wb3J0YW50Om0scmF3czpJLHNvdXJjZTpPZX09YyxhdD1kLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKSxFdD1bL15bXGRcLl0rXFMqfF4odGhpbnxtZWRpdW18dGhpY2spJC8sL14oc29saWR8ZGFzaGVkfGRvdHRlZHxub25lKSQvLC9cUysvXS5tYXAocHQ9PntsZXQgWj1hdC5maW5kSW5kZXgoc2U9PnB0LnRlc3Qoc2UpKTtyZXR1cm4gWjwwP251bGw6YXQuc3BsaWNlKFosMSlbMF19KSxjZT1nLnR5cGU9PSJ1dnVlIjtpZihjZSl7aWYoYXQubGVuZ3RoPjAmJmQhPSIiKXJldHVybltjXX1lbHNlIGlmKGF0Lmxlbmd0aD4wKXJldHVybltjXTtsZXQgTz1wdD0+cHQhPW51bGw/cHQudHJpbSgpOmcudHlwZT09InV2dWUiPyJtZWRpdW0iOiIwIixUdD1wdD0+cHQhPW51bGw/cHQudHJpbSgpOmcudHlwZT09InV2dWUiPyJub25lIjoic29saWQiLHZyPXB0PT5wdCE9bnVsbD9wdC50cmltKCk6IiMwMDAwMDAiO3JldHVybiBjZT9bLi4uYW0oZG4odytfKCksTyhFdFswXSksbSxJLE9lKSksLi4ub20oZG4odytBKCksVHQoRXRbMV0pLG0sSSxPZSkpLC4uLnRkKGRuKHcrUigpLHZyKEV0WzJdKSxtLEksT2UpKV06W2RuKHcrXygpLE8oRXRbMF0pLG0sSSxPZSksZG4odytBKCksVHQoRXRbMV0pLG0sSSxPZSksZG4odytSKCksdnIoRXRbMl0pLG0sSSxPZSldfX1mdW5jdGlvbiBBayhnKXtyZXR1cm4gYz0+e2xldCBfPSJXaWR0aCIsQT0iU3R5bGUiLFI9IkNvbG9yIix7cHJvcDp3LHZhbHVlOmQsaW1wb3J0YW50Om0scmF3czpJLHNvdXJjZTpPZX09YyxhdD1kLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKSxFdD1bL15bXGRcLl0rXFMqfF4odGhpbnxtZWRpdW18dGhpY2spJC8sL14oc29saWR8ZGFzaGVkfGRvdHRlZHxub25lKSQvLC9cUysvXS5tYXAoY2U9PntsZXQgTz1hdC5maW5kSW5kZXgoVHQ9PmNlLnRlc3QoVHQpKTtyZXR1cm4gTzwwP251bGw6YXQuc3BsaWNlKE8sMSlbMF19KTtyZXR1cm4gYXQubGVuZ3RoP1tjXTpbZG4odytfLChFdFswXXx8IjAiKS50cmltKCksbSxJLE9lKSxkbih3K0EsKEV0WzFdfHwic29saWQiKS50cmltKCksbSxJLE9lKSxkbih3K1IsKEV0WzJdfHwiIzAwMDAwMCIpLnRyaW0oKSxtLEksT2UpXX19dmFyIHNtPSJib3JkZXJUb3BMZWZ0UmFkaXVzIixsbT0iYm9yZGVyVG9wUmlnaHRSYWRpdXMiLGNtPSJib3JkZXJCb3R0b21SaWdodFJhZGl1cyIsdW09ImJvcmRlckJvdHRvbUxlZnRSYWRpdXMiLE9rPWc9PntsZXR7dmFsdWU6YyxpbXBvcnRhbnQ6XyxyYXdzOkEsc291cmNlOlJ9PWcsdz1jLnNwbGl0KC9ccysvKTtpZihjLmluY2x1ZGVzKCIvIikpcmV0dXJuW2ddO3N3aXRjaCh3Lmxlbmd0aCl7Y2FzZSAxOncucHVzaCh3WzBdLHdbMF0sd1swXSk7YnJlYWs7Y2FzZSAyOncucHVzaCh3WzBdLHdbMV0pO2JyZWFrO2Nhc2UgMzp3LnB1c2god1sxXSk7YnJlYWt9cmV0dXJuW2RuKHNtLHdbMF0sXyxBLFIpLGRuKGxtLHdbMV0sXyxBLFIpLGRuKGNtLHdbMl0sXyxBLFIpLGRuKHVtLHdbM10sXyxBLFIpXX0sVGs9Zz0+e2xldHt2YWx1ZTpjLGltcG9ydGFudDpfLHJhd3M6QSxzb3VyY2U6Un09Zyx3PWMuc3BsaXQoL1xzKy8pO2lmKGMuaW5jbHVkZXMoIi8iKSlyZXR1cm5bZ107c3dpdGNoKHcubGVuZ3RoKXtjYXNlIDE6cmV0dXJuW2ddO2Nhc2UgMjp3LnB1c2god1swXSx3WzFdKTticmVhaztjYXNlIDM6dy5wdXNoKHdbMV0pO2JyZWFrfXJldHVybltkbihzbSx3WzBdLF8sQSxSKSxkbihsbSx3WzFdLF8sQSxSKSxkbihjbSx3WzJdLF8sQSxSKSxkbih1bSx3WzNdLF8sQSxSKV19LFBrPSJmbGV4RGlyZWN0aW9uIixOaz0iZmxleFdyYXAiLElrPWc9PntsZXR7dmFsdWU6YyxpbXBvcnRhbnQ6XyxyYXdzOkEsc291cmNlOlJ9PWcsdz1jLnNwbGl0KC9ccysvKSxkPVsvXihjb2x1bW58Y29sdW1uLXJldmVyc2V8cm93fHJvdy1yZXZlcnNlKSQvLC9eKG5vd3JhcHx3cmFwfHdyYXAtcmV2ZXJzZSkkL10ubWFwKG09PntsZXQgST13LmZpbmRJbmRleChPZT0+bS50ZXN0KE9lKSk7cmV0dXJuIEk8MD9udWxsOncuc3BsaWNlKEksMSlbMF19KTtyZXR1cm4gdy5sZW5ndGg/W2ddOltkbihQayxkWzBdfHwiY29sdW1uIixfLEEsUiksZG4oTmssZFsxXXx8Im5vd3JhcCIsXyxBLFIpXX0sa2s9IlRvcCIsUms9IlJpZ2h0Iix4az0iQm90dG9tIixCaz0iTGVmdCIsZm09Zz0+Yz0+e2xldHt2YWx1ZTpfLGltcG9ydGFudDpBLHJhd3M6Uixzb3VyY2U6d309YyxkPV8uc3BsaXQoL1xzKy8pO3N3aXRjaChkLmxlbmd0aCl7Y2FzZSAxOmQucHVzaChkWzBdLGRbMF0sZFswXSk7YnJlYWs7Y2FzZSAyOmQucHVzaChkWzBdLGRbMV0pO2JyZWFrO2Nhc2UgMzpkLnB1c2goZFsxXSk7YnJlYWt9cmV0dXJuW2RuKGcra2ssZFswXSxBLFIsdyksZG4oZytSayxkWzFdLEEsUix3KSxkbihnK3hrLGRbMl0sQSxSLHcpLGRuKGcrQmssZFszXSxBLFIsdyldfSxNaz1mbSgibWFyZ2luIiksTGs9Zm0oInBhZGRpbmciKSxEaz0idHJhbnNpdGlvblByb3BlcnR5IixGaz0idHJhbnNpdGlvbkR1cmF0aW9uIixWaz0idHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIixVaz0idHJhbnNpdGlvbkRlbGF5IixIaz1nPT57bGV0e3ZhbHVlOmMsaW1wb3J0YW50Ol8scmF3czpBLHNvdXJjZTpSfT1nLHc9W10sZDtpZihnLnZhbHVlLmluY2x1ZGVzKCJjdWJpYy1iZXppZXIiKSl7bGV0IG09L14oXFMqKT9ccyooXGQqXC4/XGQrKD86bXN8cyk/KT9ccyooKFxTKil8Y3ViaWMtYmV6aWVyXCguKlwpKT9ccyooXGQqXC4/XGQrKD86bXN8cyk/KT8kLztkPWMubWF0Y2gobSl9ZWxzZXtsZXQgbT0vXihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pP1xzKihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pPyQvO2Q9Yy5tYXRjaChtKX1yZXR1cm4gZCYmKGRbMV0mJncucHVzaChkbihEayxkWzFdLF8sQSxSKSksZFsyXSYmdy5wdXNoKGRuKEZrLGRbMl0sXyxBLFIpKSxkWzNdJiZ3LnB1c2goZG4oVmssZFszXSxfLEEsUikpLGRbNF0mJncucHVzaChkbihVayxkWzRdLF8sQSxSKSkpLHd9O2Z1bmN0aW9uICRrKGcpe2xldCBjPWcudHlwZT09InV2dWUiP0NrKGcpOkFrKCksXz14dih7dHJhbnNpdGlvbjpIayxib3JkZXI6YyxiYWNrZ3JvdW5kOkVrKGcpLGJvcmRlclRvcDpjLGJvcmRlclJpZ2h0OmMsYm9yZGVyQm90dG9tOmMsYm9yZGVyTGVmdDpjLGJvcmRlclN0eWxlOmcudHlwZT09InV2dWUiP29tOlNrLGJvcmRlcldpZHRoOmcudHlwZT09InV2dWUiP2FtOndrLGJvcmRlckNvbG9yOmcudHlwZT09InV2dWUiP3RkOnNwLGJvcmRlclJhZGl1czpnLnR5cGU9PSJ1dnVlIj9PazpUayxtYXJnaW46TWsscGFkZGluZzpMa30sZy50eXBlIT09InV2dWUiP3tmbGV4RmxvdzpJa306e30pLEE9e307cmV0dXJuIEE9XyxBfXZhciBscCxkbT1TeW1ib2woImV4cGFuZGVkIik7ZnVuY3Rpb24gcG0oZyl7cmV0dXJue3Bvc3Rjc3NQbHVnaW46YCR7Zy50eXBlfHwibnZ1ZSJ9OmV4cGFuZGAsRGVjbGFyYXRpb24oXyl7aWYoX1tkbV0pcmV0dXJuO2xwfHwobHA9JGsoZykpO2xldCBBPWxwW18ucHJvcF07aWYoQSl7bGV0IFI9QShfKTtSLmxlbmd0aD09PTEmJlJbMF09PT1ffHxfLnJlcGxhY2VXaXRoKFIpfV9bZG1dPSEwfX19dmFyIGprPXBtKHt0eXBlOiJudnVlIn0pLkRlY2xhcmF0aW9uO2Z1bmN0aW9uIGNwKGcsYyl7bGV0IF89Zm8oe3JlcGxhY2VXaXRoKFIpe0E9Un19LHprKGcsYykpLEE9W19dO3JldHVybiBqayhfKSxBfWZ1bmN0aW9uIHprKGcsYyl7bGV0IF89YysiIjtyZXR1cm4gXy5pbmNsdWRlcygiIWltcG9ydGFudCIpP3twcm9wOmcsdmFsdWU6Xy5yZXBsYWNlKC9ccyohaW1wb3J0YW50LywiIiksaW1wb3J0YW50OiEwfTp7cHJvcDpnLHZhbHVlOl8saW1wb3J0YW50OiExfX12YXIgV2s9InZpZXciLEdrPVsiY2xpY2siLCJsb25ncHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJwYW5zdGFydCIsInBhbm1vdmUiLCJwYW5lbmQiLCJob3Jpem9udGFscGFuIiwidmVydGljYWxwYW4iLCJzd2lwZSJdO2Z1bmN0aW9uIHVwKGcsYyl7bGV0IF89a2woZyk7Xy5ub2RlTWFwW2Mubm9kZUlkXT1jfXZhciBmcDtmdW5jdGlvbiBobShnKXtmcHx8KGZwPWcpfXZhciBrbz1jbGFzcyBleHRlbmRzIFVje2NvbnN0cnVjdG9yKGM9V2ssXz17fSxBKXtzdXBlcigpO2xldCBSPWVtKGMpO2lmKFImJiFBKXJldHVybiBuZXcgUihjLF8sITApO3RoaXMubm9kZVR5cGU9MSx0aGlzLnR5cGU9Yyx0aGlzLmF0dHI9Xy5hdHRyfHx7fSx0aGlzLnN0eWxlPV8uc3R5bGV8fHt9LHRoaXMuY2xhc3NTdHlsZT1fLmNsYXNzU3R5bGV8fHt9LHRoaXMuY2xhc3NMaXN0PV8uY2xhc3NMaXN0fHxbXSx0aGlzLnN0eWxlU2hlZXQ9Xy5zdHlsZVNoZWV0fHx7fSx0aGlzLmV2ZW50PXt9fWFwcGVuZENoaWxkKGMpe2lmKCEoYy5wYXJlbnROb2RlJiZjLnBhcmVudE5vZGUhPT10aGlzKSl7aWYoYy5wYXJlbnROb2RlKXtpZihncigiZGVidWciKSYmcG8oYFthcHBlbmRDaGlsZF0oJHt0aGlzLmRvY0lkfSwke2MudHlwZX0sJHtjLnJlZn0pIE1vdmUgPCR7Yy50eXBlfT4gdG8gJHt0aGlzLmNoaWxkcmVuLmxlbmd0aH0gb2YgPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxWYyhjLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLGMubm9kZVR5cGU9PT0xKXtsZXQgXz1WYyhjLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksQT1uaSh0aGlzLmRvY0lkKTtpZihBJiZfPj0wKXJldHVybiBBLnNlbmQoImRvbSIse2FjdGlvbjoibW92ZUVsZW1lbnQifSxbYy5yZWYsdGhpcy5yZWYsX10pfX1lbHNlIGlmKGdyKCJkZWJ1ZyIpJiZwbyhgW2FwcGVuZENoaWxkXSgke3RoaXMuZG9jSWR9LCR7Yy50eXBlfSwke2MucmVmfSkgQXBwZW5kIDwke2MudHlwZX0+IHRvIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksRGMoYyx0aGlzKSxGYyhjLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLHRoaXMuZG9jSWQmJnVwKHRoaXMuZG9jSWQsYyksYy5ub2RlVHlwZT09PTEpe0ZjKGMsdGhpcy5wdXJlQ2hpbGRyZW4sdGhpcy5wdXJlQ2hpbGRyZW4ubGVuZ3RoKTtsZXQgXz1uaSh0aGlzLmRvY0lkKTtpZihfKXJldHVybiBfLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixjLnRvSlNPTigpLC0xXSl9fX1pbnNlcnRCZWZvcmUoYyxfKXtpZighKGMucGFyZW50Tm9kZSYmYy5wYXJlbnROb2RlIT09dGhpcykmJiEoYz09PV98fGMubmV4dFNpYmxpbmcmJmMubmV4dFNpYmxpbmc9PT1fKSl7aWYoYy5wYXJlbnROb2RlKXtpZihWYyhjLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKF8pLCEwKSxjLm5vZGVUeXBlPT09MSl7bGV0IEE9cnAoXyksUj1WYyhjLHRoaXMucHVyZUNoaWxkcmVuLEE/dGhpcy5wdXJlQ2hpbGRyZW4uaW5kZXhPZihBKTp0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgpLHc9bmkodGhpcy5kb2NJZCk7aWYodyYmUj49MClyZXR1cm4gdy5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW2MucmVmLHRoaXMucmVmLFJdKX19ZWxzZSBpZihncigiZGVidWciKSYmcG8oYFtpbnNlcnRCZWZvcmVdKCR7dGhpcy5kb2NJZH0sJHtjLnR5cGV9LCR7Yy5yZWZ9KSBJbnNlcnQgPCR7Yy50eXBlfT4gdG8gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KSwgYmVmb3JlICgke18ucmVmfSkuYCksRGMoYyx0aGlzKSxGYyhjLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKF8pLCEwKSx0aGlzLmRvY0lkJiZ1cCh0aGlzLmRvY0lkLGMpLGMubm9kZVR5cGU9PT0xKXtsZXQgQT1ycChfKSxSPUZjKGMsdGhpcy5wdXJlQ2hpbGRyZW4sQT90aGlzLnB1cmVDaGlsZHJlbi5pbmRleE9mKEEpOnRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksdz1uaSh0aGlzLmRvY0lkKTtpZih3KXJldHVybiB3LnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixjLnRvSlNPTigpLFJdKX19fWluc2VydEFmdGVyKGMsXyl7aWYoIShjLnBhcmVudE5vZGUmJmMucGFyZW50Tm9kZSE9PXRoaXMpJiYhKGM9PT1ffHxjLnByZXZpb3VzU2libGluZyYmYy5wcmV2aW91c1NpYmxpbmc9PT1fKSl7aWYoYy5wYXJlbnROb2RlKXtpZihWYyhjLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKF8pKzEsITApLGMubm9kZVR5cGU9PT0xKXtsZXQgQT1WYyhjLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2YoaXAoXykpKzEpLFI9bmkodGhpcy5kb2NJZCk7aWYoUiYmQT49MClyZXR1cm4gUi5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW2MucmVmLHRoaXMucmVmLEFdKX19ZWxzZSBpZihncigiZGVidWciKSYmcG8oYFtpbnNlcnRBZnRlcl0oJHt0aGlzLmRvY0lkfSwke2MudHlwZX0sJHtjLnJlZn0pIEluc2VydCA8JHtjLnR5cGV9PiB0byA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLCBhZnRlciAoJHtfLnJlZn0pLmApLERjKGMsdGhpcyksRmMoYyx0aGlzLmNoaWxkcmVuLHRoaXMuY2hpbGRyZW4uaW5kZXhPZihfKSsxLCEwKSx0aGlzLmRvY0lkJiZ1cCh0aGlzLmRvY0lkLGMpLGMubm9kZVR5cGU9PT0xKXtsZXQgQT1GYyhjLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2YoaXAoXykpKzEpLFI9bmkodGhpcy5kb2NJZCk7aWYoUilyZXR1cm4gUi5zZW5kKCJkb20iLHthY3Rpb246ImFkZEVsZW1lbnQifSxbdGhpcy5yZWYsYy50b0pTT04oKSxBXSl9fX1yZW1vdmVDaGlsZChjLF8pe2lmKGMucGFyZW50Tm9kZSYmKG9wKGMsdGhpcy5jaGlsZHJlbiwhMCksYy5ub2RlVHlwZT09PTEpKXtncigiZGVidWciKSYmcG8oYFtyZW1vdmVDaGlsZF0oJHt0aGlzLmRvY0lkfSwke2MudHlwZX0sJHtjLnJlZn0pIFJlbW92ZSA8JHtjLnR5cGV9PiBmcm9tIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksb3AoYyx0aGlzLnB1cmVDaGlsZHJlbik7bGV0IEE9bmkodGhpcy5kb2NJZCk7QSYmQS5zZW5kKCJkb20iLHthY3Rpb246InJlbW92ZUVsZW1lbnQifSxbYy5yZWZdKX1ffHxjLmRlc3Ryb3koKX1jbGVhcigpe2xldCBjPW5pKHRoaXMuZG9jSWQpO2MmJnRoaXMucHVyZUNoaWxkcmVuLmZvckVhY2goXz0+e2Muc2VuZCgiZG9tIix7YWN0aW9uOiJyZW1vdmVFbGVtZW50In0sW18ucmVmXSl9KSx0aGlzLmNoaWxkcmVuLmZvckVhY2goXz0+e18uZGVzdHJveSgpfSksdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGg9MH1zZXRBdHRyKGMsXyxBKXtpZih0aGlzLmF0dHJbY109PT1fJiZBIT09ITEpcmV0dXJuO3RoaXMuYXR0cltjXT1fO2xldCBSPW5pKHRoaXMuZG9jSWQpOyFBJiZSJiZSLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlQXR0cnMifSxbdGhpcy5yZWYse1tjXTpffV0pfXNldEF0dHJzKGMsXyl7aWYobGYoYykpcmV0dXJuO2xldCBBPXt9O2ZvcihsZXQgUiBpbiBjKXRoaXMuYXR0cltSXSE9PWNbUl0mJih0aGlzLmF0dHJbUl09Y1tSXSxBW1JdPWNbUl0pO2lmKCFsZihBKSl7bGV0IFI9bmkodGhpcy5kb2NJZCk7IV8mJlImJlIuc2VuZCgiZG9tIix7YWN0aW9uOiJ1cGRhdGVBdHRycyJ9LFt0aGlzLnJlZixBXSl9fXNldFN0eWxlKGMsXyxBKXtjcChjLF8pLmZvckVhY2goKHtwcm9wOlIsdmFsdWU6d30pPT57aWYodGhpcy5zdHlsZVtSXT09PXcmJkEhPT0hMSlyZXR1cm47dGhpcy5zdHlsZVtSXT13O2xldCBkPW5pKHRoaXMuZG9jSWQpOyFBJiZkJiZkLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlU3R5bGUifSxbdGhpcy5yZWYse1tSXTp3PT09IiImJlIgaW4gdGhpcy5jbGFzc1N0eWxlP3RoaXMuY2xhc3NTdHlsZVtSXTp3fV0pfSl9c2V0U3R5bGVzKGMsXyl7aWYobGYoYykpcmV0dXJuO2xldCBBPXt9O2ZvcihsZXQgUiBpbiBjKWNwKFIsY1tSXSkuZm9yRWFjaCgoe3Byb3A6dyx2YWx1ZTpkfSk9Pnt0aGlzLnN0eWxlW3ddIT09ZCYmKHRoaXMuc3R5bGVbd109ZCxBW3ddPWQ9PT0iIiYmdyBpbiB0aGlzLmNsYXNzU3R5bGU/dGhpcy5jbGFzc1N0eWxlW3ddOmQpfSk7aWYoIWxmKEEpKXtsZXQgUj1uaSh0aGlzLmRvY0lkKTshXyYmUiYmUi5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLEFdKX19c2V0Q2xhc3NTdHlsZShjKXtmb3IobGV0IEEgaW4gdGhpcy5jbGFzc1N0eWxlKXRoaXMuY2xhc3NTdHlsZVtBXT0iIjtmbyh0aGlzLmNsYXNzU3R5bGUsYyk7bGV0IF89bmkodGhpcy5kb2NJZCk7XyYmXy5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLHRoaXMudG9TdHlsZSgpXSl9c2V0Q2xhc3NMaXN0KGMpe2MubGVuZ3RoPT09dGhpcy5jbGFzc0xpc3QubGVuZ3RoJiZjLmZpbHRlcihfPT4hdGhpcy5jbGFzc0xpc3QuaW5jbHVkZXMoXykpLmxlbmd0aD09PTB8fCh0aGlzLmNsYXNzTGlzdD1jLHRoaXMucGFyZW50Tm9kZSYmdGhpcy5jYWxjQ2xhc3NMaXN0KCkpfWNhbGNDbGFzc0xpc3QoKXt0aGlzLnNldENsYXNzU3R5bGUoZnAodGhpcykpfXNldFN0eWxlU2hlZXQoYyl7dGhpcy5zdHlsZVNoZWV0PWN9YWRkRXZlbnQoYyxfLEEpe2lmKHRoaXMuZXZlbnR8fCh0aGlzLmV2ZW50PXt9KSwhdGhpcy5ldmVudFtjXSl7Z3IoImRlYnVnIikmJnBvKGBbYWRkRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBBZGQgIiR7Y30iIGV2ZW50IG9uIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksdGhpcy5ldmVudFtjXT17aGFuZGxlcjpfLHBhcmFtczpBfTtsZXQgUj1uaSh0aGlzLmRvY0lkKTtSJiZSLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRXZlbnQifSxbdGhpcy5yZWYsY10pfX1yZW1vdmVFdmVudChjKXtpZih0aGlzLmV2ZW50JiZ0aGlzLmV2ZW50W2NdKXtncigiZGVidWciKSYmcG8oYFtyZW1vdmVFdmVudF0oJHt0aGlzLmRvY0lkfSwke3RoaXMudHlwZX0sJHt0aGlzLnJlZn0pIFJlbW92ZSAiJHtjfSIgZXZlbnQgb24gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxkZWxldGUgdGhpcy5ldmVudFtjXTtsZXQgXz1uaSh0aGlzLmRvY0lkKTtfJiZfLnNlbmQoImRvbSIse2FjdGlvbjoicmVtb3ZlRXZlbnQifSxbdGhpcy5yZWYsY10pfX1maXJlRXZlbnQoYyxfLEEsUil7bGV0IHc9bnVsbCxkPSExLG09dGhpcy5ldmVudFtjXTtpZihtJiZfKXtncigiZGVidWciKSYmcG8oYFtmaXJlRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBGaXJlICIke2N9IiBldmVudCBvbiA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLmApO2xldCBJPW0uaGFuZGxlcjtfLnN0b3BQcm9wYWdhdGlvbj0oKT0+e2Q9ITB9LF8ucHJldmVudERlZmF1bHQ9KCk9Pnt9O3RyeXtSJiZSLnBhcmFtcz93PUkuY2FsbCh0aGlzLC4uLlIucGFyYW1zLF8pOnc9SS5jYWxsKHRoaXMsXyl9Y2F0Y2goT2Upe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBpbnZva2UgdGhlIGV2ZW50IGhhbmRsZXIgb2YgIiR7Y30iIG9uICR7dGhpcy50eXBlfSAoJHt0aGlzLnJlZn0pOgogJHtPZS50b1N0cmluZygpfWApLE9lfX1yZXR1cm4hZCYmQSYmR2suaW5kZXhPZihjKSE9PS0xJiZ0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQmJihfLmN1cnJlbnRUYXJnZXQ9dGhpcy5wYXJlbnROb2RlLHRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQoYyxfLEEpKSx3fXRvU3R5bGUoKXtsZXQgYz1PYmplY3QuYXNzaWduKHt9LHRoaXMuY2xhc3NTdHlsZSksXz10aGlzLnN0eWxlO2ZvcihsZXQgQSBpbiBfKXtsZXQgUj1fW0FdO2NbQV09Uj09PSIiJiZBIGluIHRoaXMuY2xhc3NTdHlsZT90aGlzLmNsYXNzU3R5bGVbQV06Un1yZXR1cm4gY310b0pTT04oYz0hMSl7bGV0IF89e3JlZjp0aGlzLnJlZi50b1N0cmluZygpLHR5cGU6dGhpcy50eXBlLGF0dHI6dGhpcy5hdHRyLHN0eWxlOnRoaXMudG9TdHlsZSgpfSxBPVtdO2ZvcihsZXQgUiBpbiB0aGlzLmV2ZW50KXtsZXR7cGFyYW1zOnd9PXRoaXMuZXZlbnRbUl07dz9BLnB1c2goe3R5cGU6UixwYXJhbXM6d30pOkEucHVzaChSKX1yZXR1cm4gQS5sZW5ndGgmJihfLmV2ZW50PUEpLCFjJiZ0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgmJihfLmNoaWxkcmVuPXRoaXMucHVyZUNoaWxkcmVuLm1hcChSPT5SLnRvSlNPTigpKSksX310b1N0cmluZygpe3JldHVybiI8Iit0aGlzLnR5cGUrIiBhdHRyPSIrSlNPTi5zdHJpbmdpZnkodGhpcy5hdHRyKSsiIHN0eWxlPSIrSlNPTi5zdHJpbmdpZnkodGhpcy50b1N0eWxlKCkpKyI+Iit0aGlzLnB1cmVDaGlsZHJlbi5tYXAoYz0+Yy50b1N0cmluZygpKS5qb2luKCIiKSsiPC8iK3RoaXMudHlwZSsiPiJ9fTtmdW5jdGlvbiBnbShnKXtsZXQgYz1nJiZnLl9fdl9yYXc7cmV0dXJuIGM/Z20oYyk6Z31mdW5jdGlvbiB2bShnKXtsZXQgYz1zZihnKTtzd2l0Y2goYyl7Y2FzZSJVbmRlZmluZWQiOmNhc2UiTnVsbCI6cmV0dXJuIiI7Y2FzZSJSZWdFeHAiOnJldHVybiBnLnRvU3RyaW5nKCk7Y2FzZSJEYXRlIjpyZXR1cm4gZy50b0lTT1N0cmluZygpO2Nhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJCb29sZWFuIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6cmV0dXJuIGdtKGcpO2Nhc2UiQXJyYXlCdWZmZXIiOnJldHVybnsiQHR5cGUiOiJiaW5hcnkiLGRhdGFUeXBlOmMsYmFzZTY0OmVwKGcpfTtjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpyZXR1cm57IkB0eXBlIjoiYmluYXJ5IixkYXRhVHlwZTpjLGJhc2U2NDplcChnLmJ1ZmZlcil9O2RlZmF1bHQ6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGcpfX12YXIgbmQ9ZnVuY3Rpb24oKXt9LE91PWNsYXNze2NvbnN0cnVjdG9yKGMsXyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImluc3RhbmNlSWQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOlN0cmluZyhjKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYWxsYmFja01hbmFnZXIiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOm5ldyBaZihjKX0pLG5kPV98fGZ1bmN0aW9uKCl7fX1jYWxsYmFjayhjLF8sQSl7cmV0dXJuIHRoaXMuY2FsbGJhY2tNYW5hZ2VyLmNvbnN1bWUoYyxfLEEpfXJlZ2lzdGVySG9vayhjLF8sQSxSKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIucmVnaXN0ZXJIb29rKGMsXyxBLFIpfXRyaWdnZXJIb29rKGMsXyxBLFIpe3JldHVybiB0aGlzLmNhbGxiYWNrTWFuYWdlci50cmlnZ2VySG9vayhjLF8sQSxSKX11cGRhdGVEYXRhKGMsXyxBKXt0aGlzLnNlbmQoIm1vZHVsZSIse21vZHVsZToiZG9tIixtZXRob2Q6InVwZGF0ZUNvbXBvbmVudERhdGEifSxbYyxfLEFdKX1kZXN0cm95Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuY2xvc2UoKX1ub3JtYWxpemUoYyxfPSExKXtsZXQgQT1zZihjKTtpZihjJiZjIGluc3RhbmNlb2Yga28pcmV0dXJuIGMucmVmO2lmKGMmJmMuJGVsIGluc3RhbmNlb2Yga28pcmV0dXJuIGMuJGVsLnJlZjtpZihBPT09IkZ1bmN0aW9uIilyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuYWRkKGMpLnRvU3RyaW5nKCk7aWYoXyl7aWYoQT09PSJPYmplY3QiKXtsZXQgUj17fTtmb3IobGV0IHcgaW4gYylSW3ddPXRoaXMubm9ybWFsaXplKGNbd10sITApO3JldHVybiBSfWlmKEE9PT0iQXJyYXkiKXJldHVybiBjLm1hcChSPT50aGlzLm5vcm1hbGl6ZShSLCEwKSl9cmV0dXJuIGMmJmMucmVmJiZjWyJbW1ZpcnR1YWxFbGVtZW50XV0iXT9jLnJlZjp2bShjKX1zZW5kKGMsXyxBLFIpe2xldHthY3Rpb246dyxjb21wb25lbnQ6ZCxyZWY6bSxtb2R1bGU6SSxtZXRob2Q6T2V9PV87c3dpdGNoKEE9QS5tYXAoYXQ9PnRoaXMubm9ybWFsaXplKGF0LGMhPT0ibW9kdWxlIikpLHNmKFIpPT09Ik9iamVjdCImJihSPXRoaXMubm9ybWFsaXplKFIsITApKSxjKXtjYXNlImRvbSI6cmV0dXJuIGdyKCJkZWJ1ZyIpJiZwbyhgW3Rhc2tdKCR7dGhpcy5pbnN0YW5jZUlkfSwke2N9LCR7d30pICR7SlNPTi5zdHJpbmdpZnkoQSl9YCksdGhpc1t3XSh0aGlzLmluc3RhbmNlSWQsQSk7Y2FzZSJjb21wb25lbnQiOnJldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLG0sT2UsQSxmbyh7Y29tcG9uZW50OmR9LFIpKTtkZWZhdWx0OnJldHVybiBncigiZGVidWciKSYmcG8oYFt0YXNrXSgke3RoaXMuaW5zdGFuY2VJZH0sJHtJfSwke09lfSkgJHtKU09OLnN0cmluZ2lmeShBKX1gKSx0aGlzLm1vZHVsZUhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLEksT2UsQSxSKX19Y2FsbERPTShjLF8pe3JldHVybiB0aGlzW2NdKHRoaXMuaW5zdGFuY2VJZCxfKX1jYWxsQ29tcG9uZW50KGMsXyxBLFIpe3JldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLGMsXyxBLFIpfWNhbGxNb2R1bGUoYyxfLEEsUil7cmV0dXJuIHRoaXMubW9kdWxlSGFuZGxlcih0aGlzLmluc3RhbmNlSWQsYyxfLEEsUil9fTtmdW5jdGlvbiBtbSgpe2xldCBnPXtjcmVhdGVGaW5pc2g6Z2xvYmFsLmNhbGxDcmVhdGVGaW5pc2gsdXBkYXRlRmluaXNoOmdsb2JhbC5jYWxsVXBkYXRlRmluaXNoLHJlZnJlc2hGaW5pc2g6Z2xvYmFsLmNhbGxSZWZyZXNoRmluaXNoLGNyZWF0ZUJvZHk6Z2xvYmFsLmNhbGxDcmVhdGVCb2R5LGFkZEVsZW1lbnQ6Z2xvYmFsLmNhbGxBZGRFbGVtZW50LHJlbW92ZUVsZW1lbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFbGVtZW50LG1vdmVFbGVtZW50Omdsb2JhbC5jYWxsTW92ZUVsZW1lbnQsdXBkYXRlQXR0cnM6Z2xvYmFsLmNhbGxVcGRhdGVBdHRycyx1cGRhdGVTdHlsZTpnbG9iYWwuY2FsbFVwZGF0ZVN0eWxlLGFkZEV2ZW50Omdsb2JhbC5jYWxsQWRkRXZlbnQscmVtb3ZlRXZlbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFdmVudCxfX3VwZGF0ZUNvbXBvbmVudERhdGE6Z2xvYmFsLl9fdXBkYXRlQ29tcG9uZW50RGF0YX0sYz1PdS5wcm90b3R5cGU7Zm9yKGxldCBfIGluIGcpe2xldCBBPWdbX107Y1tfXT1BPyhSLHcpPT5BKFIsLi4udyk6KFIsdyk9Pm5kKFIsW3ttb2R1bGU6ImRvbSIsbWV0aG9kOl8sYXJnczp3fV0sIi0xIil9Yy5jb21wb25lbnRIYW5kbGVyPWdsb2JhbC5jYWxsTmF0aXZlQ29tcG9uZW50fHwoKF8sQSxSLHcsZCk9Pm5kKF8sW3tjb21wb25lbnQ6ZC5jb21wb25lbnQscmVmOkEsbWV0aG9kOlIsYXJnczp3fV0pKSxjLm1vZHVsZUhhbmRsZXI9Z2xvYmFsLmNhbGxOYXRpdmVNb2R1bGV8fCgoXyxBLFIsdyk9Pm5kKF8sW3ttb2R1bGU6QSxtZXRob2Q6UixhcmdzOnd9XSkpfWZ1bmN0aW9uIHFrKGcsYyxfLEEsUix3KXtsZXQgZD1nLmdldFJlZihjKTtpZihkKXJldHVybiBnLmZpcmVFdmVudChkLF8sQSxSLHcpO2lmKEEpcmV0dXJuIEEuX25vZGVJZD1jLGcuZmlyZUV2ZW50KGcuZ2V0UmVmKCJfZG9jdW1lbnRFbGVtZW50IiksXyxBLFIsdyl9ZnVuY3Rpb24gWWsoZyxjLF8sQSl7cmV0dXJuIGcudGFza0NlbnRlci5jYWxsYmFjayhjLF8sQSl9ZnVuY3Rpb24gS2soZyxjLF8sQSxSKXtpZighZ3x8IWcudGFza0NlbnRlcilyZXR1cm4gY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gQ2FuJ3QgZmluZCAiZG9jdW1lbnQiIG9yICJ0YXNrQ2VudGVyIi5gKSxudWxsO2xldCB3PW51bGw7dHJ5e3c9Zy50YXNrQ2VudGVyLnRyaWdnZXJIb29rKGMsXyxBLFIpfWNhdGNoKGQpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byB0cmlnZ2VyIHRoZSAiJHtffUAke0F9IiBob29rIG9uICR7Y30uYCksZH1yZXR1cm4gd31mdW5jdGlvbiBkcChnLGMpe2xldCBfPWtsKGcpO2lmKCFfKXJldHVybiBuZXcgRXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byByZWNlaXZlVGFza3MsIGluc3RhbmNlICgke2d9KSBpcyBub3QgYXZhaWxhYmxlLmApO2lmKFlpKGMpKXJldHVybiBjLm1hcChBPT57c3dpdGNoKEEubWV0aG9kKXtjYXNlImNhbGxiYWNrIjpyZXR1cm4gWWsoXywuLi5BLmFyZ3MpO2Nhc2UiZmlyZUV2ZW50U3luYyI6Y2FzZSJmaXJlRXZlbnQiOnJldHVybiBxayhfLC4uLkEuYXJncyk7Y2FzZSJjb21wb25lbnRIb29rIjpyZXR1cm4gS2soXywuLi5BLmFyZ3MpfX0pfXZhciBsYz17fTtmdW5jdGlvbiBfbShnPXt9KXtmb3IobGV0IGMgaW4gZylMYyhsYyxjKXx8KGxjW2NdPXt9KSwhIVlpKGdbY10pJiZnW2NdLmZvckVhY2goXz0+e3BpKF8pP2xjW2NdW19dPSEwOkF1KF8pJiZwaShfLm5hbWUpJiYobGNbY11bXy5uYW1lXT1fLmFyZ3N8fFtdKX0pfWZ1bmN0aW9uIHJkKGcsYyl7cmV0dXJuIHBpKGMpPyEhKGxjW2ddJiZsY1tnXVtjXSk6ISFsY1tnXX1mdW5jdGlvbiBibShnKXtyZXR1cm4gbGNbZ119dmFyIHBwPXt9O2Z1bmN0aW9uIHltKGcpeyFZaShnKXx8Zy5mb3JFYWNoKGM9PnshY3x8KHBpKGMpP3BwW2NdPSEwOkF1KGMpJiZwaShjLnR5cGUpJiYocHBbYy50eXBlXT1jLGFwKGMudHlwZSxjLm1ldGhvZHMpKSl9KX1mdW5jdGlvbiBocChnKXtyZXR1cm4hIXBwW2ddfXZhciBjYz1bXTtmdW5jdGlvbiBpZChnLGMpe2dwKGcpP2NvbnNvbGUud2FybihgU2VydmljZSAiJHtnfSIgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbHJlYWR5IWApOihjPWZvKHt9LGMpLGNjLnB1c2goe25hbWU6ZyxvcHRpb25zOmN9KSl9ZnVuY3Rpb24gb2QoZyl7Y2Muc29tZSgoYyxfKT0+e2lmKGMubmFtZT09PWcpcmV0dXJuIGNjLnNwbGljZShfLDEpLCEwfSl9ZnVuY3Rpb24gZ3AoZyl7cmV0dXJuIEprKGcpPj0wfWZ1bmN0aW9uIEprKGcpe3JldHVybiBjYy5tYXAoYz0+Yy5uYW1lKS5pbmRleE9mKGcpfWZ1bmN0aW9uIFprKGcpe3JldHVybiBjPT57bGV0IF89R2YoZyxjKSx7Y3JlYXRlQXBwOkF9PV87Xy5jcmVhdGVWdWVBcHA9Xy5jcmVhdGVBcHA9KFIsdyk9PkEoUix3KS51c2UoWGssYyksYy5WdWU9X319dmFyIFhrPXtpbnN0YWxsKGcsYyl7UWsoZyxjKSxuZihjKS5pbml0QXBwKGcpfX07ZnVuY3Rpb24gUWsoZyxjKXtsZXR7bW91bnQ6X309ZztnLm1vdW50PUE9PntsZXQgUj1fKEEpO3JldHVybiBBPT09IiNhcHAiJiZjLl9fcmVnaXN0ZXJBcHAoUiksUn19ZnVuY3Rpb24gZTEoZyl7bGV0e1VuaVNoYXJlZDpjLFZ1ZVNoYXJlZDpfLFZ1ZVJlYWN0aXZpdHk6QX09Zzt2YXIgUj1mdW5jdGlvbih3LGQsbSxJKXsidXNlIHN0cmljdCI7dmFyIE9lPVtdO2Z1bmN0aW9uIGF0KGkpe09lLnB1c2goaSl9ZnVuY3Rpb24gRXQoKXtPZS5wb3AoKX1mdW5jdGlvbiBjZShpKXttLnBhdXNlVHJhY2tpbmcoKTtmb3IodmFyIGE9T2UubGVuZ3RoP09lW09lLmxlbmd0aC0xXS5jb21wb25lbnQ6bnVsbCxmPWEmJmEuYXBwQ29udGV4dC5jb25maWcud2FybkhhbmRsZXIsaD1PKCksQz1hcmd1bWVudHMubGVuZ3RoLFM9bmV3IEFycmF5KEM+MT9DLTE6MCksaz0xO2s8QztrKyspU1trLTFdPWFyZ3VtZW50c1trXTtpZihmKUtuKGYsYSwxMSxbaStTLm1hcChCPT57dmFyIEssUTtyZXR1cm4oUT0oSz1CLnRvU3RyaW5nKT09bnVsbD92b2lkIDA6Sy5jYWxsKEIpKSE9bnVsbD9ROkpTT04uc3RyaW5naWZ5KEIpfSkuam9pbigiIiksYSYmYS5wcm94eSxoLm1hcChCPT57dmFye3Zub2RlOkt9PUI7cmV0dXJuImF0IDwiLmNvbmNhdChvcyhhLEsudHlwZSksIj4iKX0pLmpvaW4oYApgKSxoXSk7ZWxzZXt2YXIgVT1bIltWdWUgd2Fybl06ICIuY29uY2F0KGkpLC4uLlNdO2gubGVuZ3RoJiZVLnB1c2goYApgLC4uLlR0KGgpKSxjb25zb2xlLndhcm4oLi4uVSl9bS5yZXNldFRyYWNraW5nKCl9ZnVuY3Rpb24gTygpe3ZhciBpPU9lW09lLmxlbmd0aC0xXTtpZighaSlyZXR1cm5bXTtmb3IodmFyIGE9W107aTspe3ZhciBmPWFbMF07ZiYmZi52bm9kZT09PWk/Zi5yZWN1cnNlQ291bnQrKzphLnB1c2goe3Zub2RlOmkscmVjdXJzZUNvdW50OjB9KTt2YXIgaD1pLmNvbXBvbmVudCYmaS5jb21wb25lbnQucGFyZW50O2k9aCYmaC52bm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBUdChpKXt2YXIgYT1bXTtyZXR1cm4gaS5mb3JFYWNoKChmLGgpPT57YS5wdXNoKC4uLmg9PT0wP1tdOltgCmBdLC4uLnZyKGYpKX0pLGF9ZnVuY3Rpb24gdnIoaSl7dmFye3Zub2RlOmEscmVjdXJzZUNvdW50OmZ9PWksaD1mPjA/Ii4uLiAoIi5jb25jYXQoZiwiIHJlY3Vyc2l2ZSBjYWxscykiKToiIixDPWEuY29tcG9uZW50P2EuY29tcG9uZW50LnBhcmVudD09bnVsbDohMSxTPSIgYXQgPCIuY29uY2F0KG9zKGEuY29tcG9uZW50LGEudHlwZSxDKSksaz0iPiIraDtyZXR1cm4gYS5wcm9wcz9bUywuLi5wdChhLnByb3BzKSxrXTpbUytrXX1mdW5jdGlvbiBwdChpKXt2YXIgYT1bXSxmPU9iamVjdC5rZXlzKGkpO3JldHVybiBmLnNsaWNlKDAsMykuZm9yRWFjaChoPT57YS5wdXNoKC4uLlooaCxpW2hdKSl9KSxmLmxlbmd0aD4zJiZhLnB1c2goIiAuLi4iKSxhfWZ1bmN0aW9uIFooaSxhLGYpe3JldHVybiBkLmlzU3RyaW5nKGEpPyhhPUpTT04uc3RyaW5naWZ5KGEpLGY/YTpbIiIuY29uY2F0KGksIj0iKS5jb25jYXQoYSldKTp0eXBlb2YgYT09Im51bWJlciJ8fHR5cGVvZiBhPT0iYm9vbGVhbiJ8fGE9PW51bGw/Zj9hOlsiIi5jb25jYXQoaSwiPSIpLmNvbmNhdChhKV06bS5pc1JlZihhKT8oYT1aKGksbS50b1JhdyhhLnZhbHVlKSwhMCksZj9hOlsiIi5jb25jYXQoaSwiPVJlZjwiKSxhLCI+Il0pOmQuaXNGdW5jdGlvbihhKT9bIiIuY29uY2F0KGksIj1mbiIpLmNvbmNhdChhLm5hbWU/IjwiLmNvbmNhdChhLm5hbWUsIj4iKToiIildOihhPW0udG9SYXcoYSksZj9hOlsiIi5jb25jYXQoaSwiPSIpLGFdKX1mdW5jdGlvbiBzZShpLGEpe2khPT12b2lkIDAmJih0eXBlb2YgaSE9Im51bWJlciI/Y2UoIiIuY29uY2F0KGEsIiBpcyBub3QgYSB2YWxpZCBudW1iZXIgLSBnb3QgIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGkpLCIuIikpOmlzTmFOKGkpJiZjZSgiIi5jb25jYXQoYSwiIGlzIE5hTiAtIHRoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4iKSkpfXZhciBwbj17U0VUVVBfRlVOQ1RJT046MCwiMCI6IlNFVFVQX0ZVTkNUSU9OIixSRU5ERVJfRlVOQ1RJT046MSwiMSI6IlJFTkRFUl9GVU5DVElPTiIsV0FUQ0hfR0VUVEVSOjIsIjIiOiJXQVRDSF9HRVRURVIiLFdBVENIX0NBTExCQUNLOjMsIjMiOiJXQVRDSF9DQUxMQkFDSyIsV0FUQ0hfQ0xFQU5VUDo0LCI0IjoiV0FUQ0hfQ0xFQU5VUCIsTkFUSVZFX0VWRU5UX0hBTkRMRVI6NSwiNSI6Ik5BVElWRV9FVkVOVF9IQU5ETEVSIixDT01QT05FTlRfRVZFTlRfSEFORExFUjo2LCI2IjoiQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVIiLFZOT0RFX0hPT0s6NywiNyI6IlZOT0RFX0hPT0siLERJUkVDVElWRV9IT09LOjgsIjgiOiJESVJFQ1RJVkVfSE9PSyIsVFJBTlNJVElPTl9IT09LOjksIjkiOiJUUkFOU0lUSU9OX0hPT0siLEFQUF9FUlJPUl9IQU5ETEVSOjEwLCIxMCI6IkFQUF9FUlJPUl9IQU5ETEVSIixBUFBfV0FSTl9IQU5ETEVSOjExLCIxMSI6IkFQUF9XQVJOX0hBTkRMRVIiLEZVTkNUSU9OX1JFRjoxMiwiMTIiOiJGVU5DVElPTl9SRUYiLEFTWU5DX0NPTVBPTkVOVF9MT0FERVI6MTMsIjEzIjoiQVNZTkNfQ09NUE9ORU5UX0xPQURFUiIsU0NIRURVTEVSOjE0LCIxNCI6IlNDSEVEVUxFUiJ9LE1yPXtzcDoic2VydmVyUHJlZmV0Y2ggaG9vayIsYmM6ImJlZm9yZUNyZWF0ZSBob29rIixjOiJjcmVhdGVkIGhvb2siLGJtOiJiZWZvcmVNb3VudCBob29rIixtOiJtb3VudGVkIGhvb2siLGJ1OiJiZWZvcmVVcGRhdGUgaG9vayIsdToidXBkYXRlZCIsYnVtOiJiZWZvcmVVbm1vdW50IGhvb2siLHVtOiJ1bm1vdW50ZWQgaG9vayIsYToiYWN0aXZhdGVkIGhvb2siLGRhOiJkZWFjdGl2YXRlZCBob29rIixlYzoiZXJyb3JDYXB0dXJlZCBob29rIixydGM6InJlbmRlclRyYWNrZWQgaG9vayIscnRnOiJyZW5kZXJUcmlnZ2VyZWQgaG9vayIsWzBdOiJzZXR1cCBmdW5jdGlvbiIsWzFdOiJyZW5kZXIgZnVuY3Rpb24iLFsyXToid2F0Y2hlciBnZXR0ZXIiLFszXToid2F0Y2hlciBjYWxsYmFjayIsWzRdOiJ3YXRjaGVyIGNsZWFudXAgZnVuY3Rpb24iLFs1XToibmF0aXZlIGV2ZW50IGhhbmRsZXIiLFs2XToiY29tcG9uZW50IGV2ZW50IGhhbmRsZXIiLFs3XToidm5vZGUgaG9vayIsWzhdOiJkaXJlY3RpdmUgaG9vayIsWzldOiJ0cmFuc2l0aW9uIGhvb2siLFsxMF06ImFwcCBlcnJvckhhbmRsZXIiLFsxMV06ImFwcCB3YXJuSGFuZGxlciIsWzEyXToicmVmIGZ1bmN0aW9uIixbMTNdOiJhc3luYyBjb21wb25lbnQgbG9hZGVyIixbMTRdOiJzY2hlZHVsZXIgZmx1c2guIFRoaXMgaXMgbGlrZWx5IGEgVnVlIGludGVybmFscyBidWcuIFBsZWFzZSBvcGVuIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlIC4ifTtmdW5jdGlvbiBLbihpLGEsZixoKXt0cnl7cmV0dXJuIGg/aSguLi5oKTppKCl9Y2F0Y2goQyl7a24oQyxhLGYpfX1mdW5jdGlvbiBzbihpLGEsZixoKXtpZihkLmlzRnVuY3Rpb24oaSkpe3ZhciBDPUtuKGksYSxmLGgpO3JldHVybiBDJiZkLmlzUHJvbWlzZShDKSYmQy5jYXRjaChVPT57a24oVSxhLGYpfSksQ31mb3IodmFyIFM9W10saz0wO2s8aS5sZW5ndGg7aysrKVMucHVzaChzbihpW2tdLGEsZixoKSk7cmV0dXJuIFN9ZnVuY3Rpb24ga24oaSxhLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxDPWE/YS52bm9kZTpudWxsO2lmKGEpe2Zvcih2YXIgUz1hLnBhcmVudCxrPWEucHJveHksVT1NcltmXXx8ZjtTOyl7dmFyIEI9Uy5lYztpZihCKXtmb3IodmFyIEs9MDtLPEIubGVuZ3RoO0srKylpZihCW0tdKGksayxVKT09PSExKXJldHVybn1TPVMucGFyZW50fXZhciBRPWEuYXBwQ29udGV4dC5jb25maWcuZXJyb3JIYW5kbGVyO2lmKFEpe0tuKFEsbnVsbCwxMCxbaSxrLFVdKTtyZXR1cm59fUxyKGksZixDLGgpfWZ1bmN0aW9uIExyKGksYSxmKXt2YXIgaD1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITA7e3ZhciBDPU1yW2FdfHxhO2YmJmF0KGYpLGNlKCJVbmhhbmRsZWQgZXJyb3IiLmNvbmNhdChDPyIgZHVyaW5nIGV4ZWN1dGlvbiBvZiAiLmNvbmNhdChDKToiIikpLGYmJkV0KCksY29uc29sZS5lcnJvcihpKX19dmFyIFRyPSExLGVyPSExLGhuPVtdLGVuPTAsUm49W10sdHI9bnVsbCx4bj0wLGpuPXt0aGVuKGkpe3NldFRpbWVvdXQoKCk9PmkoKSwwKX19LGhpPXcucGxhdGZvcm09PT0iaU9TIix6ZT1oaT9qbjpQcm9taXNlLnJlc29sdmUoKSxvdD1udWxsLER0PTEwMDtmdW5jdGlvbiBjbihpKXt2YXIgYT1vdHx8emU7cmV0dXJuIGk/YS50aGVuKHRoaXM/aS5iaW5kKHRoaXMpOmkpOmF9ZnVuY3Rpb24gbm4oaSl7Zm9yKHZhciBhPWVuKzEsZj1obi5sZW5ndGg7YTxmOyl7dmFyIGg9YStmPj4+MSxDPWhuW2hdLFM9Q2koQyk7UzxpfHxTPT09aSYmQy5wcmU/YT1oKzE6Zj1ofXJldHVybiBhfWZ1bmN0aW9uIGFuKGkpeyghaG4ubGVuZ3RofHwhaG4uaW5jbHVkZXMoaSxUciYmaS5hbGxvd1JlY3Vyc2U/ZW4rMTplbikpJiYoaS5pZD09bnVsbD9obi5wdXNoKGkpOmhuLnNwbGljZShubihpLmlkKSwwLGkpLHpuKCkpfWZ1bmN0aW9uIHpuKCl7IVRyJiYhZXImJihlcj0hMCxvdD16ZS50aGVuKHFvKSl9ZnVuY3Rpb24gRHIoaSl7dmFyIGE9aG4uaW5kZXhPZihpKTthPmVuJiZobi5zcGxpY2UoYSwxKX1mdW5jdGlvbiBucihpKXtkLmlzQXJyYXkoaSk/Um4ucHVzaCguLi5pKTooIXRyfHwhdHIuaW5jbHVkZXMoaSxpLmFsbG93UmVjdXJzZT94bisxOnhuKSkmJlJuLnB1c2goaSksem4oKX1mdW5jdGlvbiBxcihpLGEpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpUcj9lbisxOjA7Zm9yKGE9YXx8bmV3IE1hcDtmPGhuLmxlbmd0aDtmKyspe3ZhciBoPWhuW2ZdO2lmKGgmJmgucHJlKXtpZihpJiZoLmlkIT09aS51aWR8fGdpKGEsaCkpY29udGludWU7aG4uc3BsaWNlKGYsMSksZi0tLGgoKX19fWZ1bmN0aW9uIFVyKGkpe2lmKFJuLmxlbmd0aCl7dmFyIGE9Wy4uLm5ldyBTZXQoUm4pXS5zb3J0KChmLGgpPT5DaShmKS1DaShoKSk7aWYoUm4ubGVuZ3RoPTAsdHIpe3RyLnB1c2goLi4uYSk7cmV0dXJufWZvcih0cj1hLGk9aXx8bmV3IE1hcCx4bj0wO3huPHRyLmxlbmd0aDt4bisrKWdpKGksdHJbeG5dKXx8dHJbeG5dKCk7dHI9bnVsbCx4bj0wfX12YXIgQ2k9aT0+aS5pZD09bnVsbD8xLzA6aS5pZCxVYT0oaSxhKT0+e3ZhciBmPUNpKGkpLUNpKGEpO2lmKGY9PT0wKXtpZihpLnByZSYmIWEucHJlKXJldHVybi0xO2lmKGEucHJlJiYhaS5wcmUpcmV0dXJuIDF9cmV0dXJuIGZ9O2Z1bmN0aW9uIHFvKGkpe2VyPSExLFRyPSEwLGk9aXx8bmV3IE1hcCxobi5zb3J0KFVhKTt2YXIgYT1oPT5naShpLGgpO3RyeXtmb3IoZW49MDtlbjxobi5sZW5ndGg7ZW4rKyl7dmFyIGY9aG5bZW5dO2lmKGYmJmYuYWN0aXZlIT09ITEpe2lmKGEoZikpY29udGludWU7S24oZixudWxsLDE0KX19fWZpbmFsbHl7ZW49MCxobi5sZW5ndGg9MCxVcihpKSxUcj0hMSxvdD1udWxsLChobi5sZW5ndGh8fFJuLmxlbmd0aCkmJnFvKGkpfX1mdW5jdGlvbiBnaShpLGEpe2lmKCFpLmhhcyhhKSlpLnNldChhLDEpO2Vsc2V7dmFyIGY9aS5nZXQoYSk7aWYoZj5EdCl7dmFyIGg9YS5vd25lckluc3RhbmNlLEM9aCYmaXMoaC50eXBlKTtyZXR1cm4ga24oIk1heGltdW0gcmVjdXJzaXZlIHVwZGF0ZXMgZXhjZWVkZWQiLmNvbmNhdChDPyIgaW4gY29tcG9uZW50IDwiLmNvbmNhdChDLCI+Iik6IiIsIi4gVGhpcyBtZWFucyB5b3UgaGF2ZSBhIHJlYWN0aXZlIGVmZmVjdCB0aGF0IGlzIG11dGF0aW5nIGl0cyBvd24gZGVwZW5kZW5jaWVzIGFuZCB0aHVzIHJlY3Vyc2l2ZWx5IHRyaWdnZXJpbmcgaXRzZWxmLiBQb3NzaWJsZSBzb3VyY2VzIGluY2x1ZGUgY29tcG9uZW50IHRlbXBsYXRlLCByZW5kZXIgZnVuY3Rpb24sIHVwZGF0ZWQgaG9vayBvciB3YXRjaGVyIHNvdXJjZSBmdW5jdGlvbi4iKSxudWxsLDEwKSwhMH1lbHNlIGkuc2V0KGEsZisxKX19dmFyIFByPSExLE5yPW5ldyBTZXQ7ZC5nZXRHbG9iYWxUaGlzKCkuX19WVUVfSE1SX1JVTlRJTUVfXz17Y3JlYXRlUmVjb3JkOm1uKEppKSxyZXJlbmRlcjptbihaaSkscmVsb2FkOm1uKENhKX07dmFyIHVyPW5ldyBNYXA7ZnVuY3Rpb24gUm8oaSl7dmFyIGE9aS50eXBlLl9faG1ySWQsZj11ci5nZXQoYSk7Znx8KEppKGEsaS50eXBlKSxmPXVyLmdldChhKSksZi5pbnN0YW5jZXMuYWRkKGkpfWZ1bmN0aW9uIEtpKGkpe3VyLmdldChpLnR5cGUuX19obXJJZCkuaW5zdGFuY2VzLmRlbGV0ZShpKX1mdW5jdGlvbiBKaShpLGEpe3JldHVybiB1ci5oYXMoaSk/ITE6KHVyLnNldChpLHtpbml0aWFsRGVmOmhvKGEpLGluc3RhbmNlczpuZXcgU2V0fSksITApfWZ1bmN0aW9uIGhvKGkpe3JldHVybiBFYyhpKT9pLl9fdmNjT3B0czppfWZ1bmN0aW9uIFppKGksYSl7dmFyIGY9dXIuZ2V0KGkpOyFmfHwoZi5pbml0aWFsRGVmLnJlbmRlcj1hLFsuLi5mLmluc3RhbmNlc10uZm9yRWFjaChoPT57YSYmKGgucmVuZGVyPWEsaG8oaC50eXBlKS5yZW5kZXI9YSksaC5yZW5kZXJDYWNoZT1bXSxQcj0hMCxoLmVmZmVjdC5kaXJ0eT0hMCxoLnVwZGF0ZSgpLFByPSExfSkpfWZ1bmN0aW9uIENhKGksYSl7dmFyIGY9dXIuZ2V0KGkpO2lmKCEhZil7YT1obyhhKSxCaShmLmluaXRpYWxEZWYsYSk7dmFyIGg9Wy4uLmYuaW5zdGFuY2VzXTtmb3IodmFyIEMgb2YgaCl7dmFyIFM9aG8oQy50eXBlKTtOci5oYXMoUyl8fChTIT09Zi5pbml0aWFsRGVmJiZCaShTLGEpLE5yLmFkZChTKSksQy5hcHBDb250ZXh0LnByb3BzQ2FjaGUuZGVsZXRlKEMudHlwZSksQy5hcHBDb250ZXh0LmVtaXRzQ2FjaGUuZGVsZXRlKEMudHlwZSksQy5hcHBDb250ZXh0Lm9wdGlvbnNDYWNoZS5kZWxldGUoQy50eXBlKSxDLmNlUmVsb2FkPyhOci5hZGQoUyksQy5jZVJlbG9hZChhLnN0eWxlcyksTnIuZGVsZXRlKFMpKTpDLnBhcmVudD8oQy5wYXJlbnQuZWZmZWN0LmRpcnR5PSEwLGFuKEMucGFyZW50LnVwZGF0ZSkpOkMuYXBwQ29udGV4dC5yZWxvYWQ/Qy5hcHBDb250ZXh0LnJlbG9hZCgpOnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTpjb25zb2xlLndhcm4oIltITVJdIFJvb3Qgb3IgbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSBtb2RpZmllZC4gRnVsbCByZWxvYWQgcmVxdWlyZWQuIil9bnIoKCk9Pntmb3IodmFyIGsgb2YgaClOci5kZWxldGUoaG8oay50eXBlKSl9KX19ZnVuY3Rpb24gQmkoaSxhKXtkLmV4dGVuZChpLGEpO2Zvcih2YXIgZiBpbiBpKWYhPT0iX19maWxlIiYmIShmIGluIGEpJiZkZWxldGUgaVtmXX1mdW5jdGlvbiBtbihpKXtyZXR1cm4oYSxmKT0+e3RyeXtyZXR1cm4gaShhLGYpfWNhdGNoKGgpe2NvbnNvbGUuZXJyb3IoaCksY29uc29sZS53YXJuKCJbSE1SXSBTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgVnVlIGNvbXBvbmVudCBob3QtcmVsb2FkLiBGdWxsIHJlbG9hZCByZXF1aXJlZC4iKX19fXZhciBBbixNaT1bXSxvcj0hMTtmdW5jdGlvbiB2aShpKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWZbaC0xXT1hcmd1bWVudHNbaF07QW4/QW4uZW1pdChpLC4uLmYpOm9yfHxNaS5wdXNoKHtldmVudDppLGFyZ3M6Zn0pfWZ1bmN0aW9uIFlvKGksYSl7dmFyIGYsaDtpZihBbj1pLEFuKUFuLmVuYWJsZWQ9ITAsTWkuZm9yRWFjaChTPT57dmFye2V2ZW50OmssYXJnczpVfT1TO3JldHVybiBBbi5lbWl0KGssLi4uVSl9KSxNaT1bXTtlbHNlIGlmKHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuSFRNTEVsZW1lbnQmJiEoKGg9KGY9d2luZG93Lm5hdmlnYXRvcik9PW51bGw/dm9pZCAwOmYudXNlckFnZW50KT09bnVsbD92b2lkIDA6aC5pbmNsdWRlcygianNkb20iKSkpe3ZhciBDPWEuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1hLl9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX198fFtdO0MucHVzaChTPT57WW8oUyxhKX0pLHNldFRpbWVvdXQoKCk9PntBbnx8KGEuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1udWxsLG9yPSEwLE1pPVtdKX0sM2UzKX1lbHNlIG9yPSEwLE1pPVtdfWZ1bmN0aW9uIEtvKGksYSl7dmkoImFwcDppbml0IixpLGEse0ZyYWdtZW50Ok1uLFRleHQ6TG4sQ29tbWVudDpEbixTdGF0aWM6SGl9KX1mdW5jdGlvbiBtaShpKXt2aSgiYXBwOnVubW91bnQiLGkpfXZhciBZcj1nbygiY29tcG9uZW50OmFkZGVkIiksQWE9Z28oImNvbXBvbmVudDp1cGRhdGVkIikscmk9Z28oImNvbXBvbmVudDpyZW1vdmVkIiksYnI9aT0+e0FuJiZ0eXBlb2YgQW4uY2xlYW51cEJ1ZmZlcj09ImZ1bmN0aW9uIiYmIUFuLmNsZWFudXBCdWZmZXIoaSkmJnJpKGkpfTtmdW5jdGlvbiBnbyhpKXtyZXR1cm4gYT0+e3ZpKGksYS5hcHBDb250ZXh0LmFwcCxhLnVpZCxhLnBhcmVudD9hLnBhcmVudC51aWQ6dm9pZCAwLGEpfX12YXIgT2E9QWkoInBlcmY6c3RhcnQiKSxMaT1BaSgicGVyZjplbmQiKTtmdW5jdGlvbiBBaShpKXtyZXR1cm4oYSxmLGgpPT57dmkoaSxhLmFwcENvbnRleHQuYXBwLGEudWlkLGEsZixoKX19ZnVuY3Rpb24geG8oaSxhLGYpe3ZpKCJjb21wb25lbnQ6ZW1pdCIsaS5hcHBDb250ZXh0LmFwcCxpLGEsZil9ZnVuY3Rpb24gSm8oaSxhKXtpZighaS5pc1VubW91bnRlZCl7Zm9yKHZhciBmPWkudm5vZGUucHJvcHN8fGQuRU1QVFlfT0JKLGg9YXJndW1lbnRzLmxlbmd0aCxDPW5ldyBBcnJheShoPjI/aC0yOjApLFM9MjtTPGg7UysrKUNbUy0yXT1hcmd1bWVudHNbU107e3ZhcntlbWl0c09wdGlvbnM6ayxwcm9wc09wdGlvbnM6W1VdfT1pO2lmKGspaWYoIShhIGluIGspKSghVXx8IShkLnRvSGFuZGxlcktleShhKWluIFUpKSYmY2UoJ0NvbXBvbmVudCBlbWl0dGVkIGV2ZW50ICInLmNvbmNhdChhLCciIGJ1dCBpdCBpcyBuZWl0aGVyIGRlY2xhcmVkIGluIHRoZSBlbWl0cyBvcHRpb24gbm9yIGFzIGFuICInKS5jb25jYXQoZC50b0hhbmRsZXJLZXkoYSksJyIgcHJvcC4nKSk7ZWxzZXt2YXIgQj1rW2FdO2lmKGQuaXNGdW5jdGlvbihCKSl7dmFyIEs9QiguLi5DKTtLfHxjZSgnSW52YWxpZCBldmVudCBhcmd1bWVudHM6IGV2ZW50IHZhbGlkYXRpb24gZmFpbGVkIGZvciBldmVudCAiJy5jb25jYXQoYSwnIi4nKSl9fX12YXIgUT1DLGVlPWEuc3RhcnRzV2l0aCgidXBkYXRlOiIpLFk9ZWUmJmEuc2xpY2UoNyk7aWYoWSYmWSBpbiBmKXt2YXIgdmU9IiIuY29uY2F0KFk9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsIjpZLCJNb2RpZmllcnMiKSx7bnVtYmVyOlRlLHRyaW06aHR9PWZbdmVdfHxkLkVNUFRZX09CSjtodCYmKFE9Qy5tYXAoaGU9PmQuaXNTdHJpbmcoaGUpP2hlLnRyaW0oKTpoZSkpLFRlJiYoUT1DLm1hcChkLmxvb3NlVG9OdW1iZXIpKX14byhpLGEsUSk7e3ZhciBxZT1hLnRvTG93ZXJDYXNlKCk7cWUhPT1hJiZmW2QudG9IYW5kbGVyS2V5KHFlKV0mJmNlKCdFdmVudCAiJy5jb25jYXQocWUsJyIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgJykuY29uY2F0KG9zKGksaS50eXBlKSwnIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciAiJykuY29uY2F0KGEsJyIuIE5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIHYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSAiJykuY29uY2F0KGQuaHlwaGVuYXRlKGEpLCciIGluc3RlYWQgb2YgIicpLmNvbmNhdChhLCciLicpKX12YXIgTnQseHQ9ZltOdD1kLnRvSGFuZGxlcktleShhKV18fGZbTnQ9ZC50b0hhbmRsZXJLZXkoZC5jYW1lbGl6ZShhKSldOyF4dCYmZWUmJih4dD1mW050PWQudG9IYW5kbGVyS2V5KGQuaHlwaGVuYXRlKGEpKV0pLHh0JiZzbih4dCxpLDYsUSk7dmFyIG9lPWZbTnQrIk9uY2UiXTtpZihvZSl7aWYoIWkuZW1pdHRlZClpLmVtaXR0ZWQ9e307ZWxzZSBpZihpLmVtaXR0ZWRbTnRdKXJldHVybjtpLmVtaXR0ZWRbTnRdPSEwLHNuKG9lLGksNixRKX19fWZ1bmN0aW9uIHZvKGksYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLGg9YS5lbWl0c0NhY2hlLEM9aC5nZXQoaSk7aWYoQyE9PXZvaWQgMClyZXR1cm4gQzt2YXIgUz1pLmVtaXRzLGs9e30sVT0hMTtpZighZC5pc0Z1bmN0aW9uKGkpKXt2YXIgQj1LPT57dmFyIFE9dm8oSyxhLCEwKTtRJiYoVT0hMCxkLmV4dGVuZChrLFEpKX07IWYmJmEubWl4aW5zLmxlbmd0aCYmYS5taXhpbnMuZm9yRWFjaChCKSxpLmV4dGVuZHMmJkIoaS5leHRlbmRzKSxpLm1peGlucyYmaS5taXhpbnMuZm9yRWFjaChCKX1yZXR1cm4hUyYmIVU/KGQuaXNPYmplY3QoaSkmJmguc2V0KGksbnVsbCksbnVsbCk6KGQuaXNBcnJheShTKT9TLmZvckVhY2goSz0+a1tLXT1udWxsKTpkLmV4dGVuZChrLFMpLGQuaXNPYmplY3QoaSkmJmguc2V0KGksayksayl9ZnVuY3Rpb24gZ24oaSxhKXtyZXR1cm4haXx8IWQuaXNPbihhKT8hMTooYT1hLnNsaWNlKDIpLnJlcGxhY2UoL09uY2UkLywiIiksZC5oYXNPd24oaSxhWzBdLnRvTG93ZXJDYXNlKCkrYS5zbGljZSgxKSl8fGQuaGFzT3duKGksZC5oeXBoZW5hdGUoYSkpfHxkLmhhc093bihpLGEpKX12YXIgT249bnVsbCxLcj1udWxsO2Z1bmN0aW9uIEZuKGkpe3ZhciBhPU9uO3JldHVybiBPbj1pLEtyPWkmJmkudHlwZS5fX3Njb3BlSWR8fG51bGwsYX1mdW5jdGlvbiBpaShpKXtLcj1pfWZ1bmN0aW9uIEZyKCl7S3I9bnVsbH12YXIgJHQ9aT0+UmU7ZnVuY3Rpb24gUmUoaSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOk9uO2lmKCFhfHxpLl9uKXJldHVybiBpO3ZhciBmPWZ1bmN0aW9uKCl7Zi5fZCYmdHMoLTEpO3ZhciBoPUZuKGEpLEM7dHJ5e0M9aSguLi5hcmd1bWVudHMpfWZpbmFsbHl7Rm4oaCksZi5fZCYmdHMoMSl9cmV0dXJuIEFhKGEpLEN9O3JldHVybiBmLl9uPSEwLGYuX2M9ITAsZi5fZD0hMCxmfXZhciBYaT0hMTtmdW5jdGlvbiB0bigpe1hpPSEwfWZ1bmN0aW9uIG1vKGkpe3Zhcnt0eXBlOmEsdm5vZGU6Zixwcm94eTpoLHdpdGhQcm94eTpDLHByb3BzOlMscHJvcHNPcHRpb25zOltrXSxzbG90czpVLGF0dHJzOkIsZW1pdDpLLHJlbmRlcjpRLHJlbmRlckNhY2hlOmVlLGRhdGE6WSxzZXR1cFN0YXRlOnZlLGN0eDpUZSxpbmhlcml0QXR0cnM6aHR9PWkscWUsTnQseHQ9Rm4oaSk7WGk9ITE7dHJ5e2lmKGYuc2hhcGVGbGFnJjQpe3ZhciBvZT1DfHxoLGhlPXZlLl9faXNTY3JpcHRTZXR1cD9uZXcgUHJveHkob2Use2dldChDZSxudCxXZSl7cmV0dXJuIGNlKCJQcm9wZXJ0eSAnIi5jb25jYXQoU3RyaW5nKG50KSwiJyB3YXMgYWNjZXNzZWQgdmlhICd0aGlzJy4gQXZvaWQgdXNpbmcgJ3RoaXMnIGluIHRlbXBsYXRlcy4iKSksUmVmbGVjdC5nZXQoQ2UsbnQsV2UpfX0pOm9lO3FlPWtyKFEuY2FsbChoZSxvZSxlZSxTLHZlLFksVGUpKSxOdD1CfWVsc2V7dmFyIF9lPWE7Qj09PVMmJnRuKCkscWU9a3IoX2UubGVuZ3RoPjE/X2UoUyx7Z2V0IGF0dHJzKCl7cmV0dXJuIHRuKCksQn0sc2xvdHM6VSxlbWl0Okt9KTpfZShTLG51bGwpKSxOdD1hLnByb3BzP0I6Wm8oQil9fWNhdGNoKENlKXt6ci5sZW5ndGg9MCxrbihDZSxpLDEpLHFlPXNyKERuKX12YXIgJGU9cWUsc3Q9dm9pZCAwO2lmKHFlLnBhdGNoRmxhZz4wJiZxZS5wYXRjaEZsYWcmMjA0OCYmKFskZSxzdF09b2kocWUpKSxOdCYmaHQhPT0hMSl7dmFyIHR0PU9iamVjdC5rZXlzKE50KSx7c2hhcGVGbGFnOnl0fT0kZTtpZih0dC5sZW5ndGgpe2lmKHl0JigxfDYpKWsmJnR0LnNvbWUoZC5pc01vZGVsTGlzdGVuZXIpJiYoTnQ9WG8oTnQsaykpLCRlPWppKCRlLE50KTtlbHNlIGlmKCFYaSYmJGUudHlwZSE9PURuKXtmb3IodmFyIFllPU9iamVjdC5rZXlzKEIpLEw9W10sRz1bXSx0ZT0wLGJlPVllLmxlbmd0aDt0ZTxiZTt0ZSsrKXt2YXIgU2U9WWVbdGVdO2QuaXNPbihTZSk/ZC5pc01vZGVsTGlzdGVuZXIoU2UpfHxMLnB1c2goU2VbMl0udG9Mb3dlckNhc2UoKStTZS5zbGljZSgzKSk6Ry5wdXNoKFNlKX1HLmxlbmd0aCYmY2UoIkV4dHJhbmVvdXMgbm9uLXByb3BzIGF0dHJpYnV0ZXMgKCIuY29uY2F0KEcuam9pbigiLCAiKSwiKSB3ZXJlIHBhc3NlZCB0byBjb21wb25lbnQgYnV0IGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBiZWNhdXNlIGNvbXBvbmVudCByZW5kZXJzIGZyYWdtZW50IG9yIHRleHQgcm9vdCBub2Rlcy4iKSksTC5sZW5ndGgmJmNlKCJFeHRyYW5lb3VzIG5vbi1lbWl0cyBldmVudCBsaXN0ZW5lcnMgKCIuY29uY2F0KEwuam9pbigiLCAiKSwnKSB3ZXJlIHBhc3NlZCB0byBjb21wb25lbnQgYnV0IGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBiZWNhdXNlIGNvbXBvbmVudCByZW5kZXJzIGZyYWdtZW50IG9yIHRleHQgcm9vdCBub2Rlcy4gSWYgdGhlIGxpc3RlbmVyIGlzIGludGVuZGVkIHRvIGJlIGEgY29tcG9uZW50IGN1c3RvbSBldmVudCBsaXN0ZW5lciBvbmx5LCBkZWNsYXJlIGl0IHVzaW5nIHRoZSAiZW1pdHMiIG9wdGlvbi4nKSl9fX1yZXR1cm4gZi5kaXJzJiYoVGEoJGUpfHxjZSgiUnVudGltZSBkaXJlY3RpdmUgdXNlZCBvbiBjb21wb25lbnQgd2l0aCBub24tZWxlbWVudCByb290IG5vZGUuIFRoZSBkaXJlY3RpdmVzIHdpbGwgbm90IGZ1bmN0aW9uIGFzIGludGVuZGVkLiIpLCRlPWppKCRlKSwkZS5kaXJzPSRlLmRpcnM/JGUuZGlycy5jb25jYXQoZi5kaXJzKTpmLmRpcnMpLGYudHJhbnNpdGlvbiYmKFRhKCRlKXx8Y2UoIkNvbXBvbmVudCBpbnNpZGUgPFRyYW5zaXRpb24+IHJlbmRlcnMgbm9uLWVsZW1lbnQgcm9vdCBub2RlIHRoYXQgY2Fubm90IGJlIGFuaW1hdGVkLiIpLCRlLnRyYW5zaXRpb249Zi50cmFuc2l0aW9uKSxzdD9zdCgkZSk6cWU9JGUsRm4oeHQpLHFlfXZhciBvaT1pPT57dmFyIGE9aS5jaGlsZHJlbixmPWkuZHluYW1pY0NoaWxkcmVuLGg9T2koYSwhMSk7aWYoaCl7aWYoaC5wYXRjaEZsYWc+MCYmaC5wYXRjaEZsYWcmMjA0OClyZXR1cm4gb2koaCl9ZWxzZSByZXR1cm5baSx2b2lkIDBdO3ZhciBDPWEuaW5kZXhPZihoKSxTPWY/Zi5pbmRleE9mKGgpOi0xLGs9VT0+e2FbQ109VSxmJiYoUz4tMT9mW1NdPVU6VS5wYXRjaEZsYWc+MCYmKGkuZHluYW1pY0NoaWxkcmVuPVsuLi5mLFVdKSl9O3JldHVybltrcihoKSxrXX07ZnVuY3Rpb24gT2koaSl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxmLGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIEM9aVtoXTtpZihXcihDKSl7aWYoQy50eXBlIT09RG58fEMuY2hpbGRyZW49PT0idi1pZiIpe2lmKGYpcmV0dXJuO2lmKGY9QyxhJiZmLnBhdGNoRmxhZz4wJiZmLnBhdGNoRmxhZyYyMDQ4KXJldHVybiBPaShmLmNoaWxkcmVuKX19ZWxzZSByZXR1cm59cmV0dXJuIGZ9dmFyIFpvPWk9Pnt2YXIgYTtmb3IodmFyIGYgaW4gaSkoZj09PSJjbGFzcyJ8fGY9PT0ic3R5bGUifHxkLmlzT24oZikpJiYoKGF8fChhPXt9KSlbZl09aVtmXSk7cmV0dXJuIGF9LFhvPShpLGEpPT57dmFyIGY9e307Zm9yKHZhciBoIGluIGkpKCFkLmlzTW9kZWxMaXN0ZW5lcihoKXx8IShoLnNsaWNlKDkpaW4gYSkpJiYoZltoXT1pW2hdKTtyZXR1cm4gZn0sVGE9aT0+aS5zaGFwZUZsYWcmKDZ8MSl8fGkudHlwZT09PURuO2Z1bmN0aW9uIERpKGksYSxmKXt2YXJ7cHJvcHM6aCxjaGlsZHJlbjpDLGNvbXBvbmVudDpTfT1pLHtwcm9wczprLGNoaWxkcmVuOlUscGF0Y2hGbGFnOkJ9PWEsSz1TLmVtaXRzT3B0aW9ucztpZigoQ3x8VSkmJlByfHxhLmRpcnN8fGEudHJhbnNpdGlvbilyZXR1cm4hMDtpZihmJiZCPj0wKXtpZihCJjEwMjQpcmV0dXJuITA7aWYoQiYxNilyZXR1cm4gaD9haShoLGssSyk6ISFrO2lmKEImOClmb3IodmFyIFE9YS5keW5hbWljUHJvcHMsZWU9MDtlZTxRLmxlbmd0aDtlZSsrKXt2YXIgWT1RW2VlXTtpZihrW1ldIT09aFtZXSYmIWduKEssWSkpcmV0dXJuITB9fWVsc2UgcmV0dXJuKEN8fFUpJiYoIVV8fCFVLiRzdGFibGUpPyEwOmg9PT1rPyExOmg/az9haShoLGssSyk6ITA6ISFrO3JldHVybiExfWZ1bmN0aW9uIGFpKGksYSxmKXt2YXIgaD1PYmplY3Qua2V5cyhhKTtpZihoLmxlbmd0aCE9PU9iamVjdC5rZXlzKGkpLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIEM9MDtDPGgubGVuZ3RoO0MrKyl7dmFyIFM9aFtDXTtpZihhW1NdIT09aVtTXSYmIWduKGYsUykpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geXIoaSxhKXtmb3IodmFye3Zub2RlOmYscGFyZW50Omh9PWk7aDspe3ZhciBDPWguc3ViVHJlZTtpZihDLnN1c3BlbnNlJiZDLnN1c3BlbnNlLmFjdGl2ZUJyYW5jaD09PWYmJihDLmVsPWYuZWwpLEM9PT1mKShmPWgudm5vZGUpLmVsPWEsaD1oLnBhcmVudDtlbHNlIGJyZWFrfX12YXIgX289ImNvbXBvbmVudHMiLGZzPSJkaXJlY3RpdmVzIjtmdW5jdGlvbiBRbyhpLGEpe3JldHVybiBTcihfbyxpLCEwLGEpfHxpfXZhciBybj1TeW1ib2wuZm9yKCJ2LW5kYyIpO2Z1bmN0aW9uIEVyKGkpe3JldHVybiBkLmlzU3RyaW5nKGkpP1NyKF9vLGksITEpfHxpOml8fHJufWZ1bmN0aW9uIFduKGkpe3JldHVybiBTcihmcyxpKX1mdW5jdGlvbiBTcihpLGEpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMCxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxDPU9ufHxObjtpZihDKXt2YXIgUz1DLnR5cGU7aWYoaT09PV9vKXt2YXIgaz1pcyhTLCExKTtpZihrJiYoaz09PWF8fGs9PT1kLmNhbWVsaXplKGEpfHxrPT09ZC5jYXBpdGFsaXplKGQuY2FtZWxpemUoYSkpKSlyZXR1cm4gU312YXIgVT1KcihDW2ldfHxTW2ldLGEpfHxKcihDLmFwcENvbnRleHRbaV0sYSk7aWYoIVUmJmgpcmV0dXJuIFM7aWYoZiYmIVUpe3ZhciBCPWk9PT1fbz9gCklmIHRoaXMgaXMgYSBuYXRpdmUgY3VzdG9tIGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBleGNsdWRlIGl0IGZyb20gY29tcG9uZW50IHJlc29sdXRpb24gdmlhIGNvbXBpbGVyT3B0aW9ucy5pc0N1c3RvbUVsZW1lbnQuYDoiIjtjZSgiRmFpbGVkIHRvIHJlc29sdmUgIi5jb25jYXQoaS5zbGljZSgwLC0xKSwiOiAiKS5jb25jYXQoYSkuY29uY2F0KEIpKX1yZXR1cm4gVX1lbHNlIGNlKCJyZXNvbHZlIi5jb25jYXQoZC5jYXBpdGFsaXplKGkuc2xpY2UoMCwtMSkpLCIgY2FuIG9ubHkgYmUgdXNlZCBpbiByZW5kZXIoKSBvciBzZXR1cCgpLiIpKX1mdW5jdGlvbiBKcihpLGEpe3JldHVybiBpJiYoaVthXXx8aVtkLmNhbWVsaXplKGEpXXx8aVtkLmNhcGl0YWxpemUoZC5jYW1lbGl6ZShhKSldKX12YXIgZWE9aT0+aS5fX2lzU3VzcGVuc2UsdGE9MCxkcz17bmFtZToiU3VzcGVuc2UiLF9faXNTdXNwZW5zZTohMCxwcm9jZXNzKGksYSxmLGgsQyxTLGssVSxCLEspe2lmKGk9PW51bGwpSGEoYSxmLGgsQyxTLGssVSxCLEspO2Vsc2V7aWYoUyYmUy5kZXBzPjAmJiFpLnN1c3BlbnNlLmlzSW5GYWxsYmFjayl7YS5zdXNwZW5zZT1pLnN1c3BlbnNlLGEuc3VzcGVuc2Uudm5vZGU9YSxhLmVsPWkuZWw7cmV0dXJufSRhKGksYSxmLGgsQyxrLFUsQixLKX19LGh5ZHJhdGU6cHMsY3JlYXRlOlBhLG5vcm1hbGl6ZTpuYX0sQm89ZHM7ZnVuY3Rpb24gTW8oaSxhKXt2YXIgZj1pLnByb3BzJiZpLnByb3BzW2FdO2QuaXNGdW5jdGlvbihmKSYmZigpfWZ1bmN0aW9uIEhhKGksYSxmLGgsQyxTLGssVSxCKXt2YXJ7cDpLLG86e2NyZWF0ZUVsZW1lbnQ6UX19PUIsZWU9USgiZGl2IixhKSxZPWkuc3VzcGVuc2U9UGEoaSxDLGgsYSxlZSxmLFMsayxVLEIpO0sobnVsbCxZLnBlbmRpbmdCcmFuY2g9aS5zc0NvbnRlbnQsZWUsbnVsbCxoLFksUyxrKSxZLmRlcHM+MD8oTW8oaSwib25QZW5kaW5nIiksTW8oaSwib25GYWxsYmFjayIpLEsobnVsbCxpLnNzRmFsbGJhY2ssYSxmLGgsbnVsbCxTLGspLHEoWSxpLnNzRmFsbGJhY2spKTpZLnJlc29sdmUoITEsITApfWZ1bmN0aW9uICRhKGksYSxmLGgsQyxTLGssVSxCKXt2YXJ7cDpLLHVtOlEsbzp7Y3JlYXRlRWxlbWVudDplZX19PUIsWT1hLnN1c3BlbnNlPWkuc3VzcGVuc2U7WS52bm9kZT1hLGEuZWw9aS5lbDt2YXIgdmU9YS5zc0NvbnRlbnQsVGU9YS5zc0ZhbGxiYWNrLHthY3RpdmVCcmFuY2g6aHQscGVuZGluZ0JyYW5jaDpxZSxpc0luRmFsbGJhY2s6TnQsaXNIeWRyYXRpbmc6eHR9PVk7aWYocWUpWS5wZW5kaW5nQnJhbmNoPXZlLG9vKHZlLHFlKT8oSyhxZSx2ZSxZLmhpZGRlbkNvbnRhaW5lcixudWxsLEMsWSxTLGssVSksWS5kZXBzPD0wP1kucmVzb2x2ZSgpOk50JiYoeHR8fChLKGh0LFRlLGYsaCxDLG51bGwsUyxrLFUpLHEoWSxUZSkpKSk6KFkucGVuZGluZ0lkPXRhKysseHQ/KFkuaXNIeWRyYXRpbmc9ITEsWS5hY3RpdmVCcmFuY2g9cWUpOlEocWUsQyxZKSxZLmRlcHM9MCxZLmVmZmVjdHMubGVuZ3RoPTAsWS5oaWRkZW5Db250YWluZXI9ZWUoImRpdiIsZiksTnQ/KEsobnVsbCx2ZSxZLmhpZGRlbkNvbnRhaW5lcixudWxsLEMsWSxTLGssVSksWS5kZXBzPD0wP1kucmVzb2x2ZSgpOihLKGh0LFRlLGYsaCxDLG51bGwsUyxrLFUpLHEoWSxUZSkpKTpodCYmb28odmUsaHQpPyhLKGh0LHZlLGYsaCxDLFksUyxrLFUpLFkucmVzb2x2ZSghMCkpOihLKG51bGwsdmUsWS5oaWRkZW5Db250YWluZXIsbnVsbCxDLFksUyxrLFUpLFkuZGVwczw9MCYmWS5yZXNvbHZlKCkpKTtlbHNlIGlmKGh0JiZvbyh2ZSxodCkpSyhodCx2ZSxmLGgsQyxZLFMsayxVKSxxKFksdmUpO2Vsc2UgaWYoTW8oYSwib25QZW5kaW5nIiksWS5wZW5kaW5nQnJhbmNoPXZlLHZlLnNoYXBlRmxhZyY1MTI/WS5wZW5kaW5nSWQ9dmUuY29tcG9uZW50LnN1c3BlbnNlSWQ6WS5wZW5kaW5nSWQ9dGErKyxLKG51bGwsdmUsWS5oaWRkZW5Db250YWluZXIsbnVsbCxDLFksUyxrLFUpLFkuZGVwczw9MClZLnJlc29sdmUoKTtlbHNle3Zhcnt0aW1lb3V0Om9lLHBlbmRpbmdJZDpoZX09WTtvZT4wP3NldFRpbWVvdXQoKCk9PntZLnBlbmRpbmdJZD09PWhlJiZZLmZhbGxiYWNrKFRlKX0sb2UpOm9lPT09MCYmWS5mYWxsYmFjayhUZSl9fXZhciBMbz0hMTtmdW5jdGlvbiBQYShpLGEsZixoLEMsUyxrLFUsQixLKXt2YXIgUT1hcmd1bWVudHMubGVuZ3RoPjEwJiZhcmd1bWVudHNbMTBdIT09dm9pZCAwP2FyZ3VtZW50c1sxMF06ITE7TG98fChMbz0hMCxjb25zb2xlW2NvbnNvbGUuaW5mbz8iaW5mbyI6ImxvZyJdKCI8U3VzcGVuc2U+IGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGFuZCBpdHMgQVBJIHdpbGwgbGlrZWx5IGNoYW5nZS4iKSk7dmFye3A6ZWUsbTpZLHVtOnZlLG46VGUsbzp7cGFyZW50Tm9kZTpodCxyZW1vdmU6cWV9fT1LLE50LHh0PXBlKGkpO3h0JiYoYT09bnVsbD92b2lkIDA6YS5wZW5kaW5nQnJhbmNoKSYmKE50PWEucGVuZGluZ0lkLGEuZGVwcysrKTt2YXIgb2U9aS5wcm9wcz9kLnRvTnVtYmVyKGkucHJvcHMudGltZW91dCk6dm9pZCAwO3NlKG9lLCJTdXNwZW5zZSB0aW1lb3V0Iik7dmFyIGhlPVMsX2U9e3Zub2RlOmkscGFyZW50OmEscGFyZW50Q29tcG9uZW50OmYsbmFtZXNwYWNlOmssY29udGFpbmVyOmgsaGlkZGVuQ29udGFpbmVyOkMsZGVwczowLHBlbmRpbmdJZDp0YSsrLHRpbWVvdXQ6dHlwZW9mIG9lPT0ibnVtYmVyIj9vZTotMSxhY3RpdmVCcmFuY2g6bnVsbCxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiFRLGlzSHlkcmF0aW5nOlEsaXNVbm1vdW50ZWQ6ITEsZWZmZWN0czpbXSxyZXNvbHZlKCl7dmFyICRlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxzdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7e2lmKCEkZSYmIV9lLnBlbmRpbmdCcmFuY2gpdGhyb3cgbmV3IEVycm9yKCJzdXNwZW5zZS5yZXNvbHZlKCkgaXMgY2FsbGVkIHdpdGhvdXQgYSBwZW5kaW5nIGJyYW5jaC4iKTtpZihfZS5pc1VubW91bnRlZCl0aHJvdyBuZXcgRXJyb3IoInN1c3BlbnNlLnJlc29sdmUoKSBpcyBjYWxsZWQgb24gYW4gYWxyZWFkeSB1bm1vdW50ZWQgc3VzcGVuc2UgYm91bmRhcnkuIil9dmFye3Zub2RlOnR0LGFjdGl2ZUJyYW5jaDp5dCxwZW5kaW5nQnJhbmNoOlllLHBlbmRpbmdJZDpMLGVmZmVjdHM6RyxwYXJlbnRDb21wb25lbnQ6dGUsY29udGFpbmVyOmJlfT1fZSxTZT0hMTtfZS5pc0h5ZHJhdGluZz9fZS5pc0h5ZHJhdGluZz0hMTokZXx8KFNlPXl0JiZZZS50cmFuc2l0aW9uJiZZZS50cmFuc2l0aW9uLm1vZGU9PT0ib3V0LWluIixTZSYmKHl0LnRyYW5zaXRpb24uYWZ0ZXJMZWF2ZT0oKT0+e0w9PT1fZS5wZW5kaW5nSWQmJihZKFllLGJlLFM9PT1oZT9UZSh5dCk6UywwKSxucihHKSl9KSx5dCYmKGh0KHl0LmVsKSE9PV9lLmhpZGRlbkNvbnRhaW5lciYmKFM9VGUoeXQpKSx2ZSh5dCx0ZSxfZSwhMCkpLFNlfHxZKFllLGJlLFMsMCkpLHEoX2UsWWUpLF9lLnBlbmRpbmdCcmFuY2g9bnVsbCxfZS5pc0luRmFsbGJhY2s9ITE7Zm9yKHZhciBDZT1fZS5wYXJlbnQsbnQ9ITE7Q2U7KXtpZihDZS5wZW5kaW5nQnJhbmNoKXtDZS5lZmZlY3RzLnB1c2goLi4uRyksbnQ9ITA7YnJlYWt9Q2U9Q2UucGFyZW50fSFudCYmIVNlJiZucihHKSxfZS5lZmZlY3RzPVtdLHh0JiZhJiZhLnBlbmRpbmdCcmFuY2gmJk50PT09YS5wZW5kaW5nSWQmJihhLmRlcHMtLSxhLmRlcHM9PT0wJiYhc3QmJmEucmVzb2x2ZSgpKSxNbyh0dCwib25SZXNvbHZlIil9LGZhbGxiYWNrKCRlKXtpZighIV9lLnBlbmRpbmdCcmFuY2gpe3Zhcnt2bm9kZTpzdCxhY3RpdmVCcmFuY2g6dHQscGFyZW50Q29tcG9uZW50Onl0LGNvbnRhaW5lcjpZZSxuYW1lc3BhY2U6TH09X2U7TW8oc3QsIm9uRmFsbGJhY2siKTt2YXIgRz1UZSh0dCksdGU9KCk9PnshX2UuaXNJbkZhbGxiYWNrfHwoZWUobnVsbCwkZSxZZSxHLHl0LG51bGwsTCxVLEIpLHEoX2UsJGUpKX0sYmU9JGUudHJhbnNpdGlvbiYmJGUudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiI7YmUmJih0dC50cmFuc2l0aW9uLmFmdGVyTGVhdmU9dGUpLF9lLmlzSW5GYWxsYmFjaz0hMCx2ZSh0dCx5dCxudWxsLCEwKSxiZXx8dGUoKX19LG1vdmUoJGUsc3QsdHQpe19lLmFjdGl2ZUJyYW5jaCYmWShfZS5hY3RpdmVCcmFuY2gsJGUsc3QsdHQpLF9lLmNvbnRhaW5lcj0kZX0sbmV4dCgpe3JldHVybiBfZS5hY3RpdmVCcmFuY2gmJlRlKF9lLmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKCRlLHN0KXt2YXIgdHQ9ISFfZS5wZW5kaW5nQnJhbmNoO3R0JiZfZS5kZXBzKys7dmFyIHl0PSRlLnZub2RlLmVsOyRlLmFzeW5jRGVwLmNhdGNoKFllPT57a24oWWUsJGUsMCl9KS50aGVuKFllPT57aWYoISgkZS5pc1VubW91bnRlZHx8X2UuaXNVbm1vdW50ZWR8fF9lLnBlbmRpbmdJZCE9PSRlLnN1c3BlbnNlSWQpKXskZS5hc3luY1Jlc29sdmVkPSEwO3Zhcnt2bm9kZTpMfT0kZTthdChMKSxucygkZSxZZSwhMSkseXQmJihMLmVsPXl0KTt2YXIgRz0heXQmJiRlLnN1YlRyZWUuZWw7c3QoJGUsTCxodCh5dHx8JGUuc3ViVHJlZS5lbCkseXQ/bnVsbDpUZSgkZS5zdWJUcmVlKSxfZSxrLEIpLEcmJnFlKEcpLHlyKCRlLEwuZWwpLEV0KCksdHQmJi0tX2UuZGVwcz09PTAmJl9lLnJlc29sdmUoKX19KX0sdW5tb3VudCgkZSxzdCl7X2UuaXNVbm1vdW50ZWQ9ITAsX2UuYWN0aXZlQnJhbmNoJiZ2ZShfZS5hY3RpdmVCcmFuY2gsZiwkZSxzdCksX2UucGVuZGluZ0JyYW5jaCYmdmUoX2UucGVuZGluZ0JyYW5jaCxmLCRlLHN0KX19O3JldHVybiBfZX1mdW5jdGlvbiBwcyhpLGEsZixoLEMsUyxrLFUsQil7dmFyIEs9YS5zdXNwZW5zZT1QYShhLGgsZixpLnBhcmVudE5vZGUsZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksbnVsbCxDLFMsayxVLCEwKSxRPUIoaSxLLnBlbmRpbmdCcmFuY2g9YS5zc0NvbnRlbnQsZixLLFMsayk7cmV0dXJuIEsuZGVwcz09PTAmJksucmVzb2x2ZSghMSwhMCksUX1mdW5jdGlvbiBuYShpKXt2YXJ7c2hhcGVGbGFnOmEsY2hpbGRyZW46Zn09aSxoPWEmMzI7aS5zc0NvbnRlbnQ9RG8oaD9mLmRlZmF1bHQ6ZiksaS5zc0ZhbGxiYWNrPWg/RG8oZi5mYWxsYmFjayk6c3IoRG4pfWZ1bmN0aW9uIERvKGkpe3ZhciBhO2lmKGQuaXNGdW5jdGlvbihpKSl7dmFyIGY9Y2EmJmkuX2M7ZiYmKGkuX2Q9ITEsWnMoKSksaT1pKCksZiYmKGkuX2Q9ITAsYT1RcixsYSgpKX1pZihkLmlzQXJyYXkoaSkpe3ZhciBoPU9pKGkpOyFoJiZpLmZpbHRlcihDPT5DIT09cm4pLmxlbmd0aD4wJiZjZSgiPFN1c3BlbnNlPiBzbG90cyBleHBlY3QgYSBzaW5nbGUgcm9vdCBub2RlLiIpLGk9aH1yZXR1cm4gaT1rcihpKSxhJiYhaS5keW5hbWljQ2hpbGRyZW4mJihpLmR5bmFtaWNDaGlsZHJlbj1hLmZpbHRlcihDPT5DIT09aSkpLGl9ZnVuY3Rpb24gVihpLGEpe2EmJmEucGVuZGluZ0JyYW5jaD9kLmlzQXJyYXkoaSk/YS5lZmZlY3RzLnB1c2goLi4uaSk6YS5lZmZlY3RzLnB1c2goaSk6bnIoaSl9ZnVuY3Rpb24gcShpLGEpe2kuYWN0aXZlQnJhbmNoPWE7Zm9yKHZhcnt2bm9kZTpmLHBhcmVudENvbXBvbmVudDpofT1pLEM9YS5lbDshQyYmYS5jb21wb25lbnQ7KWE9YS5jb21wb25lbnQuc3ViVHJlZSxDPWEuZWw7Zi5lbD1DLGgmJmguc3ViVHJlZT09PWYmJihoLnZub2RlLmVsPUMseXIoaCxDKSl9ZnVuY3Rpb24gcGUoaSl7dmFyIGE7cmV0dXJuKChhPWkucHJvcHMpPT1udWxsP3ZvaWQgMDphLnN1c3BlbnNpYmxlKSE9bnVsbCYmaS5wcm9wcy5zdXNwZW5zaWJsZSE9PSExfXZhciBaZT1TeW1ib2wuZm9yKCJ2LXNjeCIpLEtlPSgpPT57e3ZhciBpPW9hKFplKTtyZXR1cm4gaXx8Y2UoIlNlcnZlciByZW5kZXJpbmcgY29udGV4dCBub3QgcHJvdmlkZWQuIE1ha2Ugc3VyZSB0byBvbmx5IGNhbGwgdXNlU1NSQ29udGV4dCgpIGNvbmRpdGlvbmFsbHkgaW4gdGhlIHNlcnZlciBidWlsZC4iKSxpfX07ZnVuY3Rpb24gbXQoaSxhKXtyZXR1cm4gJHIoaSxudWxsLGEpfWZ1bmN0aW9uIGV0KGksYSl7cmV0dXJuICRyKGksbnVsbCxkLmV4dGVuZCh7fSxhLHtmbHVzaDoicG9zdCJ9KSl9ZnVuY3Rpb24gbHQoaSxhKXtyZXR1cm4gJHIoaSxudWxsLGQuZXh0ZW5kKHt9LGEse2ZsdXNoOiJzeW5jIn0pKX12YXIgZnI9e307ZnVuY3Rpb24gSHIoaSxhLGYpe3JldHVybiBkLmlzRnVuY3Rpb24oYSl8fGNlKCJgd2F0Y2goZm4sIG9wdGlvbnM/KWAgc2lnbmF0dXJlIGhhcyBiZWVuIG1vdmVkIHRvIGEgc2VwYXJhdGUgQVBJLiBVc2UgYHdhdGNoRWZmZWN0KGZuLCBvcHRpb25zPylgIGluc3RlYWQuIGB3YXRjaGAgbm93IG9ubHkgc3VwcG9ydHMgYHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnM/KSBzaWduYXR1cmUuIiksJHIoaSxhLGYpfWZ1bmN0aW9uICRyKGksYSl7dmFye2ltbWVkaWF0ZTpmLGRlZXA6aCxmbHVzaDpDLG9uY2U6UyxvblRyYWNrOmssb25UcmlnZ2VyOlV9PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpkLkVNUFRZX09CSjtpZihhJiZTKXt2YXIgQj1hO2E9ZnVuY3Rpb24oKXtCKC4uLmFyZ3VtZW50cykseXQoKX19aCE9PXZvaWQgMCYmdHlwZW9mIGg9PSJudW1iZXIiJiZjZSgnd2F0Y2goKSAiZGVlcCIgb3B0aW9uIHdpdGggbnVtYmVyIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB3YXRjaCBkZXB0aCBpbiBmdXR1cmUgdmVyc2lvbnMuIFBsZWFzZSB1c2UgYSBib29sZWFuIGluc3RlYWQgdG8gYXZvaWQgcG90ZW50aWFsIGJyZWFrYWdlLicpLGF8fChmIT09dm9pZCAwJiZjZSgnd2F0Y2goKSAiaW1tZWRpYXRlIiBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyB0aGUgd2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS4nKSxoIT09dm9pZCAwJiZjZSgnd2F0Y2goKSAiZGVlcCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIHdhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuJyksUyE9PXZvaWQgMCYmY2UoJ3dhdGNoKCkgIm9uY2UiIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIHVzaW5nIHRoZSB3YXRjaChzb3VyY2UsIGNhbGxiYWNrLCBvcHRpb25zPykgc2lnbmF0dXJlLicpKTt2YXIgSz1ZZT0+e2NlKCJJbnZhbGlkIHdhdGNoIHNvdXJjZTogIixZZSwiQSB3YXRjaCBzb3VyY2UgY2FuIG9ubHkgYmUgYSBnZXR0ZXIvZWZmZWN0IGZ1bmN0aW9uLCBhIHJlZiwgYSByZWFjdGl2ZSBvYmplY3QsIG9yIGFuIGFycmF5IG9mIHRoZXNlIHR5cGVzLiIpfSxRPU5uLGVlPVllPT5oPT09ITA/WWU6ZW8oWWUsaD09PSExPzE6dm9pZCAwKSxZLHZlPSExLFRlPSExO2lmKG0uaXNSZWYoaSk/KFk9KCk9PmkudmFsdWUsdmU9bS5pc1NoYWxsb3coaSkpOm0uaXNSZWFjdGl2ZShpKT8oWT0oKT0+ZWUoaSksdmU9ITApOmQuaXNBcnJheShpKT8oVGU9ITAsdmU9aS5zb21lKFllPT5tLmlzUmVhY3RpdmUoWWUpfHxtLmlzU2hhbGxvdyhZZSkpLFk9KCk9PmkubWFwKFllPT57aWYobS5pc1JlZihZZSkpcmV0dXJuIFllLnZhbHVlO2lmKG0uaXNSZWFjdGl2ZShZZSkpcmV0dXJuIGVlKFllKTtpZihkLmlzRnVuY3Rpb24oWWUpKXJldHVybiBLbihZZSxRLDIpO0soWWUpfSkpOmQuaXNGdW5jdGlvbihpKT9hP1k9KCk9PktuKGksUSwyKTpZPSgpPT4ocWUmJnFlKCksc24oaSxRLDMsW050XSkpOihZPWQuTk9PUCxLKGkpKSxhJiZoKXt2YXIgaHQ9WTtZPSgpPT5lbyhodCgpKX12YXIgcWUsTnQ9WWU9PntxZT1zdC5vblN0b3A9KCk9PntLbihZZSxRLDQpLHFlPXN0Lm9uU3RvcD12b2lkIDB9fSx4dDtpZih3LmlzSW5TU1JDb21wb25lbnRTZXR1cClpZihOdD1kLk5PT1AsYT9mJiZzbihhLFEsMyxbWSgpLFRlP1tdOnZvaWQgMCxOdF0pOlkoKSxDPT09InN5bmMiKXt2YXIgb2U9S2UoKTt4dD1vZS5fX3dhdGNoZXJIYW5kbGVzfHwob2UuX193YXRjaGVySGFuZGxlcz1bXSl9ZWxzZSByZXR1cm4gZC5OT09QO3ZhciBoZT1UZT9uZXcgQXJyYXkoaS5sZW5ndGgpLmZpbGwoZnIpOmZyLF9lPSgpPT57aWYoISghc3QuYWN0aXZlfHwhc3QuZGlydHkpKWlmKGEpe3ZhciBZZT1zdC5ydW4oKTsoaHx8dmV8fChUZT9ZZS5zb21lKChMLEcpPT5kLmhhc0NoYW5nZWQoTCxoZVtHXSkpOmQuaGFzQ2hhbmdlZChZZSxoZSkpKSYmKHFlJiZxZSgpLHNuKGEsUSwzLFtZZSxoZT09PWZyP3ZvaWQgMDpUZSYmaGVbMF09PT1mcj9bXTpoZSxOdF0pLGhlPVllKX1lbHNlIHN0LnJ1bigpfTtfZS5hbGxvd1JlY3Vyc2U9ISFhO3ZhciAkZTtDPT09InN5bmMiPyRlPV9lOkM9PT0icG9zdCI/JGU9KCk9Pk9yKF9lLFEmJlEuc3VzcGVuc2UpOihfZS5wcmU9ITAsUSYmKF9lLmlkPVEudWlkKSwkZT0oKT0+YW4oX2UpKTt2YXIgc3Q9bmV3IG0uUmVhY3RpdmVFZmZlY3QoWSxkLk5PT1AsJGUpLHR0PW0uZ2V0Q3VycmVudFNjb3BlKCkseXQ9KCk9PntzdC5zdG9wKCksdHQmJmQucmVtb3ZlKHR0LmVmZmVjdHMsc3QpfTtyZXR1cm4gc3Qub25UcmFjaz1rLHN0Lm9uVHJpZ2dlcj1VLGE/Zj9fZSgpOmhlPXN0LnJ1bigpOkM9PT0icG9zdCI/T3Ioc3QucnVuLmJpbmQoc3QpLFEmJlEuc3VzcGVuc2UpOnN0LnJ1bigpLHh0JiZ4dC5wdXNoKHl0KSx5dH1mdW5jdGlvbiBRaShpLGEsZil7dmFyIGg9dGhpcy5wcm94eSxDPWQuaXNTdHJpbmcoaSk/aS5pbmNsdWRlcygiLiIpP19pKGgsaSk6KCk9PmhbaV06aS5iaW5kKGgsaCksUztkLmlzRnVuY3Rpb24oYSk/Uz1hOihTPWEuaGFuZGxlcixmPWEpO3ZhciBrPXVhKHRoaXMpLFU9JHIoQyxTLmJpbmQoaCksZik7cmV0dXJuIGsoKSxVfWZ1bmN0aW9uIF9pKGksYSl7dmFyIGY9YS5zcGxpdCgiLiIpO3JldHVybigpPT57Zm9yKHZhciBoPWksQz0wO0M8Zi5sZW5ndGgmJmg7QysrKWg9aFtmW0NdXTtyZXR1cm4gaH19ZnVuY3Rpb24gZW8oaSxhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06MCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2lmKCFkLmlzT2JqZWN0KGkpfHxpLl9fdl9za2lwKXJldHVybiBpO2lmKGEmJmE+MCl7aWYoZj49YSlyZXR1cm4gaTtmKyt9aWYoaD1ofHxuZXcgU2V0LGguaGFzKGkpKXJldHVybiBpO2lmKGguYWRkKGkpLG0uaXNSZWYoaSkpZW8oaS52YWx1ZSxhLGYsaCk7ZWxzZSBpZihkLmlzQXJyYXkoaSkpZm9yKHZhciBDPTA7QzxpLmxlbmd0aDtDKyspZW8oaVtDXSxhLGYsaCk7ZWxzZSBpZihkLmlzU2V0KGkpfHxkLmlzTWFwKGkpKWkuZm9yRWFjaChrPT57ZW8oayxhLGYsaCl9KTtlbHNlIGlmKGQuaXNQbGFpbk9iamVjdChpKSlmb3IodmFyIFMgaW4gaSllbyhpW1NdLGEsZixoKTtyZXR1cm4gaX1mdW5jdGlvbiBocyhpKXtkLmlzQnVpbHRJbkRpcmVjdGl2ZShpKSYmY2UoIkRvIG5vdCB1c2UgYnVpbHQtaW4gZGlyZWN0aXZlIGlkcyBhcyBjdXN0b20gZGlyZWN0aXZlIGlkOiAiK2kpfWZ1bmN0aW9uIEZpKGksYSl7aWYoT249PT1udWxsKXJldHVybiBjZSgid2l0aERpcmVjdGl2ZXMgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgcmVuZGVyIGZ1bmN0aW9ucy4iKSxpO2Zvcih2YXIgZj1LbChPbil8fE9uLnByb3h5LGg9aS5kaXJzfHwoaS5kaXJzPVtdKSxDPTA7QzxhLmxlbmd0aDtDKyspe3ZhcltTLGssVSxCPWQuRU1QVFlfT0JKXT1hW0NdO1MmJihkLmlzRnVuY3Rpb24oUykmJihTPXttb3VudGVkOlMsdXBkYXRlZDpTfSksUy5kZWVwJiZlbyhrKSxoLnB1c2goe2RpcjpTLGluc3RhbmNlOmYsdmFsdWU6ayxvbGRWYWx1ZTp2b2lkIDAsYXJnOlUsbW9kaWZpZXJzOkJ9KSl9cmV0dXJuIGl9ZnVuY3Rpb24gd3IoaSxhLGYsaCl7Zm9yKHZhciBDPWkuZGlycyxTPWEmJmEuZGlycyxrPTA7azxDLmxlbmd0aDtrKyspe3ZhciBVPUNba107UyYmKFUub2xkVmFsdWU9U1trXS52YWx1ZSk7dmFyIEI9VS5kaXJbaF07QiYmKG0ucGF1c2VUcmFja2luZygpLHNuKEIsZiw4LFtpLmVsLFUsaSxhXSksbS5yZXNldFRyYWNraW5nKCkpfX12YXIgc2k9U3ltYm9sKCJfbGVhdmVDYiIpLE5hPVN5bWJvbCgiX2VudGVyQ2IiKTtmdW5jdGlvbiBsZSgpe3ZhciBpPXtpc01vdW50ZWQ6ITEsaXNMZWF2aW5nOiExLGlzVW5tb3VudGluZzohMSxsZWF2aW5nVk5vZGVzOm5ldyBNYXB9O3JldHVybiBubygoKT0+e2kuaXNNb3VudGVkPSEwfSksVW8oKCk9PntpLmlzVW5tb3VudGluZz0hMH0pLGl9dmFyIEo9W0Z1bmN0aW9uLEFycmF5XSxkZT17bW9kZTpTdHJpbmcsYXBwZWFyOkJvb2xlYW4scGVyc2lzdGVkOkJvb2xlYW4sb25CZWZvcmVFbnRlcjpKLG9uRW50ZXI6SixvbkFmdGVyRW50ZXI6SixvbkVudGVyQ2FuY2VsbGVkOkosb25CZWZvcmVMZWF2ZTpKLG9uTGVhdmU6SixvbkFmdGVyTGVhdmU6SixvbkxlYXZlQ2FuY2VsbGVkOkosb25CZWZvcmVBcHBlYXI6SixvbkFwcGVhcjpKLG9uQWZ0ZXJBcHBlYXI6SixvbkFwcGVhckNhbmNlbGxlZDpKfSxVZT17bmFtZToiQmFzZVRyYW5zaXRpb24iLHByb3BzOmRlLHNldHVwKGksYSl7dmFye3Nsb3RzOmZ9PWEsaD1hbygpLEM9bGUoKTtyZXR1cm4oKT0+e3ZhciBTPWYuZGVmYXVsdCYmdG8oZi5kZWZhdWx0KCksITApO2lmKCEoIVN8fCFTLmxlbmd0aCkpe3ZhciBrPVNbMF07aWYoUy5sZW5ndGg+MSl7dmFyIFU9ITE7Zm9yKHZhciBCIG9mIFMpaWYoQi50eXBlIT09RG4pe2lmKFUpe2NlKCI8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50IG9yIGNvbXBvbmVudC4gVXNlIDx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuIik7YnJlYWt9az1CLFU9ITB9fXZhciBLPW0udG9SYXcoaSkse21vZGU6UX09SztpZihRJiZRIT09ImluLW91dCImJlEhPT0ib3V0LWluIiYmUSE9PSJkZWZhdWx0IiYmY2UoImludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICIuY29uY2F0KFEpKSxDLmlzTGVhdmluZylyZXR1cm4gX24oayk7dmFyIGVlPVZuKGspO2lmKCFlZSlyZXR1cm4gX24oayk7dmFyIFk9Sm4oZWUsSyxDLGgpO2RyKGVlLFkpO3ZhciB2ZT1oLnN1YlRyZWUsVGU9dmUmJlZuKHZlKTtpZihUZSYmVGUudHlwZSE9PURuJiYhb28oZWUsVGUpKXt2YXIgaHQ9Sm4oVGUsSyxDLGgpO2lmKGRyKFRlLGh0KSxRPT09Im91dC1pbiIpcmV0dXJuIEMuaXNMZWF2aW5nPSEwLGh0LmFmdGVyTGVhdmU9KCk9PntDLmlzTGVhdmluZz0hMSxoLnVwZGF0ZS5hY3RpdmUhPT0hMSYmKGguZWZmZWN0LmRpcnR5PSEwLGgudXBkYXRlKCkpfSxfbihrKTtRPT09ImluLW91dCImJmVlLnR5cGUhPT1EbiYmKGh0LmRlbGF5TGVhdmU9KHFlLE50LHh0KT0+e3ZhciBvZT1vbihDLFRlKTtvZVtTdHJpbmcoVGUua2V5KV09VGUscWVbc2ldPSgpPT57TnQoKSxxZVtzaV09dm9pZCAwLGRlbGV0ZSBZLmRlbGF5ZWRMZWF2ZX0sWS5kZWxheWVkTGVhdmU9eHR9KX1yZXR1cm4ga319fX0sZHQ9VWU7ZnVuY3Rpb24gb24oaSxhKXt2YXJ7bGVhdmluZ1ZOb2RlczpmfT1pLGg9Zi5nZXQoYS50eXBlKTtyZXR1cm4gaHx8KGg9T2JqZWN0LmNyZWF0ZShudWxsKSxmLnNldChhLnR5cGUsaCkpLGh9ZnVuY3Rpb24gSm4oaSxhLGYsaCl7dmFye2FwcGVhcjpDLG1vZGU6UyxwZXJzaXN0ZWQ6az0hMSxvbkJlZm9yZUVudGVyOlUsb25FbnRlcjpCLG9uQWZ0ZXJFbnRlcjpLLG9uRW50ZXJDYW5jZWxsZWQ6USxvbkJlZm9yZUxlYXZlOmVlLG9uTGVhdmU6WSxvbkFmdGVyTGVhdmU6dmUsb25MZWF2ZUNhbmNlbGxlZDpUZSxvbkJlZm9yZUFwcGVhcjpodCxvbkFwcGVhcjpxZSxvbkFmdGVyQXBwZWFyOk50LG9uQXBwZWFyQ2FuY2VsbGVkOnh0fT1hLG9lPVN0cmluZyhpLmtleSksaGU9b24oZixpKSxfZT0odHQseXQpPT57dHQmJnNuKHR0LGgsOSx5dCl9LCRlPSh0dCx5dCk9Pnt2YXIgWWU9eXRbMV07X2UodHQseXQpLGQuaXNBcnJheSh0dCk/dHQuZXZlcnkoTD0+TC5sZW5ndGg8PTEpJiZZZSgpOnR0Lmxlbmd0aDw9MSYmWWUoKX0sc3Q9e21vZGU6UyxwZXJzaXN0ZWQ6ayxiZWZvcmVFbnRlcih0dCl7dmFyIHl0PVU7aWYoIWYuaXNNb3VudGVkKWlmKEMpeXQ9aHR8fFU7ZWxzZSByZXR1cm47dHRbc2ldJiZ0dFtzaV0oITApO3ZhciBZZT1oZVtvZV07WWUmJm9vKGksWWUpJiZZZS5lbFtzaV0mJlllLmVsW3NpXSgpLF9lKHl0LFt0dF0pfSxlbnRlcih0dCl7dmFyIHl0PUIsWWU9SyxMPVE7aWYoIWYuaXNNb3VudGVkKWlmKEMpeXQ9cWV8fEIsWWU9TnR8fEssTD14dHx8UTtlbHNlIHJldHVybjt2YXIgRz0hMSx0ZT10dFtOYV09YmU9PntHfHwoRz0hMCxiZT9fZShMLFt0dF0pOl9lKFllLFt0dF0pLHN0LmRlbGF5ZWRMZWF2ZSYmc3QuZGVsYXllZExlYXZlKCksdHRbTmFdPXZvaWQgMCl9O3l0PyRlKHl0LFt0dCx0ZV0pOnRlKCl9LGxlYXZlKHR0LHl0KXt2YXIgWWU9U3RyaW5nKGkua2V5KTtpZih0dFtOYV0mJnR0W05hXSghMCksZi5pc1VubW91bnRpbmcpcmV0dXJuIHl0KCk7X2UoZWUsW3R0XSk7dmFyIEw9ITEsRz10dFtzaV09dGU9PntMfHwoTD0hMCx5dCgpLHRlP19lKFRlLFt0dF0pOl9lKHZlLFt0dF0pLHR0W3NpXT12b2lkIDAsaGVbWWVdPT09aSYmZGVsZXRlIGhlW1llXSl9O2hlW1llXT1pLFk/JGUoWSxbdHQsR10pOkcoKX0sY2xvbmUodHQpe3JldHVybiBKbih0dCxhLGYsaCl9fTtyZXR1cm4gc3R9ZnVuY3Rpb24gX24oaSl7aWYoRm8oaSkpcmV0dXJuIGk9amkoaSksaS5jaGlsZHJlbj1udWxsLGl9ZnVuY3Rpb24gVm4oaSl7cmV0dXJuIEZvKGkpP2kuY29tcG9uZW50P2kuY29tcG9uZW50LnN1YlRyZWU6aS5jaGlsZHJlbj9pLmNoaWxkcmVuWzBdOnZvaWQgMDppfWZ1bmN0aW9uIGRyKGksYSl7aS5zaGFwZUZsYWcmNiYmaS5jb21wb25lbnQ/ZHIoaS5jb21wb25lbnQuc3ViVHJlZSxhKTppLnNoYXBlRmxhZyYxMjg/KGkuc3NDb250ZW50LnRyYW5zaXRpb249YS5jbG9uZShpLnNzQ29udGVudCksaS5zc0ZhbGxiYWNrLnRyYW5zaXRpb249YS5jbG9uZShpLnNzRmFsbGJhY2spKTppLnRyYW5zaXRpb249YX1mdW5jdGlvbiB0byhpKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLGY9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsaD1bXSxDPTAsUz0wO1M8aS5sZW5ndGg7UysrKXt2YXIgaz1pW1NdLFU9Zj09bnVsbD9rLmtleTpTdHJpbmcoZikrU3RyaW5nKGsua2V5IT1udWxsP2sua2V5OlMpO2sudHlwZT09PU1uPyhrLnBhdGNoRmxhZyYxMjgmJkMrKyxoPWguY29uY2F0KHRvKGsuY2hpbGRyZW4sYSxVKSkpOihhfHxrLnR5cGUhPT1EbikmJmgucHVzaChVIT1udWxsP2ppKGsse2tleTpVfSk6ayl9aWYoQz4xKWZvcih2YXIgQj0wO0I8aC5sZW5ndGg7QisrKWhbQl0ucGF0Y2hGbGFnPS0yO3JldHVybiBofWZ1bmN0aW9uIFpuKGksYSl7cmV0dXJuIGQuaXNGdW5jdGlvbihpKT8oKCk9PmQuZXh0ZW5kKHtuYW1lOmkubmFtZX0sYSx7c2V0dXA6aX0pKSgpOml9dmFyIGJvPWk9PiEhaS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gSWEoaSl7ZC5pc0Z1bmN0aW9uKGkpJiYoaT17bG9hZGVyOml9KTt2YXJ7bG9hZGVyOmEsbG9hZGluZ0NvbXBvbmVudDpmLGVycm9yQ29tcG9uZW50OmgsZGVsYXk6Qz0yMDAsdGltZW91dDpTLHN1c3BlbnNpYmxlOms9ITAsb25FcnJvcjpVfT1pLEI9bnVsbCxLLFE9MCxlZT0oKT0+KFErKyxCPW51bGwsWSgpKSxZPSgpPT57dmFyIHZlO3JldHVybiBCfHwodmU9Qj1hKCkuY2F0Y2goVGU9PntpZihUZT1UZSBpbnN0YW5jZW9mIEVycm9yP1RlOm5ldyBFcnJvcihTdHJpbmcoVGUpKSxVKXJldHVybiBuZXcgUHJvbWlzZSgoaHQscWUpPT57dmFyIE50PSgpPT5odChlZSgpKSx4dD0oKT0+cWUoVGUpO1UoVGUsTnQseHQsUSsxKX0pO3Rocm93IFRlfSkudGhlbihUZT0+e2lmKHZlIT09QiYmQilyZXR1cm4gQjtpZihUZXx8Y2UoIkFzeW5jIGNvbXBvbmVudCBsb2FkZXIgcmVzb2x2ZWQgdG8gdW5kZWZpbmVkLiBJZiB5b3UgYXJlIHVzaW5nIHJldHJ5KCksIG1ha2Ugc3VyZSB0byByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS4iKSxUZSYmKFRlLl9fZXNNb2R1bGV8fFRlW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iTW9kdWxlIikmJihUZT1UZS5kZWZhdWx0KSxUZSYmIWQuaXNPYmplY3QoVGUpJiYhZC5pc0Z1bmN0aW9uKFRlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXN5bmMgY29tcG9uZW50IGxvYWQgcmVzdWx0OiAiLmNvbmNhdChUZSkpO3JldHVybiBLPVRlLFRlfSkpfTtyZXR1cm4gWm4oe25hbWU6IkFzeW5jQ29tcG9uZW50V3JhcHBlciIsX19hc3luY0xvYWRlcjpZLGdldCBfX2FzeW5jUmVzb2x2ZWQoKXtyZXR1cm4gS30sc2V0dXAoKXt2YXIgdmU9Tm47aWYoSylyZXR1cm4oKT0+eW8oSyx2ZSk7dmFyIFRlPXh0PT57Qj1udWxsLGtuKHh0LHZlLDEzLCFoKX07aWYoayYmdmUuc3VzcGVuc2V8fHcuaXNJblNTUkNvbXBvbmVudFNldHVwKXJldHVybiBZKCkudGhlbih4dD0+KCk9PnlvKHh0LHZlKSkuY2F0Y2goeHQ9PihUZSh4dCksKCk9Pmg/c3IoaCx7ZXJyb3I6eHR9KTpudWxsKSk7dmFyIGh0PW0ucmVmKCExKSxxZT1tLnJlZigpLE50PW0ucmVmKCEhQyk7cmV0dXJuIEMmJnNldFRpbWVvdXQoKCk9PntOdC52YWx1ZT0hMX0sQyksUyE9bnVsbCYmc2V0VGltZW91dCgoKT0+e2lmKCFodC52YWx1ZSYmIXFlLnZhbHVlKXt2YXIgeHQ9bmV3IEVycm9yKCJBc3luYyBjb21wb25lbnQgdGltZWQgb3V0IGFmdGVyICIuY29uY2F0KFMsIm1zLiIpKTtUZSh4dCkscWUudmFsdWU9eHR9fSxTKSxZKCkudGhlbigoKT0+e2h0LnZhbHVlPSEwLHZlLnBhcmVudCYmRm8odmUucGFyZW50LnZub2RlKSYmKHZlLnBhcmVudC5lZmZlY3QuZGlydHk9ITAsYW4odmUucGFyZW50LnVwZGF0ZSkpfSkuY2F0Y2goeHQ9PntUZSh4dCkscWUudmFsdWU9eHR9KSwoKT0+e2lmKGh0LnZhbHVlJiZLKXJldHVybiB5byhLLHZlKTtpZihxZS52YWx1ZSYmaClyZXR1cm4gc3IoaCx7ZXJyb3I6cWUudmFsdWV9KTtpZihmJiYhTnQudmFsdWUpcmV0dXJuIHNyKGYpfX19KX1mdW5jdGlvbiB5byhpLGEpe3ZhcntyZWY6Zixwcm9wczpoLGNoaWxkcmVuOkMsY2U6U309YS52bm9kZSxrPXNyKGksaCxDKTtyZXR1cm4gay5yZWY9ZixrLmNlPVMsZGVsZXRlIGEudm5vZGUuY2Usa312YXIgRm89aT0+aS50eXBlLl9faXNLZWVwQWxpdmUsUmw9e25hbWU6IktlZXBBbGl2ZSIsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAoaSxhKXt2YXJ7c2xvdHM6Zn09YSxoPWFvKCksQz1oLmN0eDtpZighQy5yZW5kZXJlcilyZXR1cm4oKT0+e3ZhciBvZT1mLmRlZmF1bHQmJmYuZGVmYXVsdCgpO3JldHVybiBvZSYmb2UubGVuZ3RoPT09MT9vZVswXTpvZX07dmFyIFM9bmV3IE1hcCxrPW5ldyBTZXQsVT1udWxsO2guX192X2NhY2hlPVM7dmFyIEI9aC5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6SyxtOlEsdW06ZWUsbzp7Y3JlYXRlRWxlbWVudDpZfX19PUMsdmU9WSgiZGl2IixudWxsKTtDLmFjdGl2YXRlPShvZSxoZSxfZSwkZSxzdCk9Pnt2YXIgdHQ9b2UuY29tcG9uZW50O1Eob2UsaGUsX2UsMCxCKSxLKHR0LnZub2RlLG9lLGhlLF9lLHR0LEIsJGUsb2Uuc2xvdFNjb3BlSWRzLHN0KSxPcigoKT0+e3R0LmlzRGVhY3RpdmF0ZWQ9ITEsdHQuYSYmZC5pbnZva2VBcnJheUZucyh0dC5hKTt2YXIgeXQ9b2UucHJvcHMmJm9lLnByb3BzLm9uVm5vZGVNb3VudGVkO3l0JiZ6aSh5dCx0dC5wYXJlbnQsb2UpfSxCKSxZcih0dCl9LEMuZGVhY3RpdmF0ZT1vZT0+e3ZhciBoZT1vZS5jb21wb25lbnQ7UShvZSx2ZSxudWxsLDEsQiksT3IoKCk9PntoZS5kYSYmZC5pbnZva2VBcnJheUZucyhoZS5kYSk7dmFyIF9lPW9lLnByb3BzJiZvZS5wcm9wcy5vblZub2RlVW5tb3VudGVkO19lJiZ6aShfZSxoZS5wYXJlbnQsb2UpLGhlLmlzRGVhY3RpdmF0ZWQ9ITB9LEIpLFlyKGhlKX07ZnVuY3Rpb24gVGUob2Upe1RpKG9lKSxlZShvZSxoLEIsITApfWZ1bmN0aW9uIGh0KG9lKXtTLmZvckVhY2goKGhlLF9lKT0+e3ZhciAkZT1pcyhoZS50eXBlKTskZSYmKCFvZXx8IW9lKCRlKSkmJnFlKF9lKX0pfWZ1bmN0aW9uIHFlKG9lKXt2YXIgaGU9Uy5nZXQob2UpOyFVfHwhb28oaGUsVSk/VGUoaGUpOlUmJlRpKFUpLFMuZGVsZXRlKG9lKSxrLmRlbGV0ZShvZSl9SHIoKCk9PltpLmluY2x1ZGUsaS5leGNsdWRlXSxvZT0+e3ZhcltoZSxfZV09b2U7aGUmJmh0KCRlPT5rYShoZSwkZSkpLF9lJiZodCgkZT0+IWthKF9lLCRlKSl9LHtmbHVzaDoicG9zdCIsZGVlcDohMH0pO3ZhciBOdD1udWxsLHh0PSgpPT57TnQhPW51bGwmJlMuc2V0KE50LGlhKGguc3ViVHJlZSkpfTtyZXR1cm4gbm8oeHQpLFZvKHh0KSxVbygoKT0+e1MuZm9yRWFjaChvZT0+e3ZhcntzdWJUcmVlOmhlLHN1c3BlbnNlOl9lfT1oLCRlPWlhKGhlKTtpZihvZS50eXBlPT09JGUudHlwZSYmb2Uua2V5PT09JGUua2V5KXtUaSgkZSk7dmFyIHN0PSRlLmNvbXBvbmVudC5kYTtzdCYmT3Ioc3QsX2UpO3JldHVybn1UZShvZSl9KX0pLCgpPT57aWYoTnQ9bnVsbCwhZi5kZWZhdWx0KXJldHVybiBudWxsO3ZhciBvZT1mLmRlZmF1bHQoKSxoZT1vZVswXTtpZihvZS5sZW5ndGg+MSlyZXR1cm4gY2UoIktlZXBBbGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSBjb21wb25lbnQgY2hpbGQuIiksVT1udWxsLG9lO2lmKCFXcihoZSl8fCEoaGUuc2hhcGVGbGFnJjQpJiYhKGhlLnNoYXBlRmxhZyYxMjgpKXJldHVybiBVPW51bGwsaGU7dmFyIF9lPWlhKGhlKSwkZT1fZS50eXBlLHN0PWlzKGJvKF9lKT9fZS50eXBlLl9fYXN5bmNSZXNvbHZlZHx8e306JGUpLHtpbmNsdWRlOnR0LGV4Y2x1ZGU6eXQsbWF4OlllfT1pO2lmKHR0JiYoIXN0fHwha2EodHQsc3QpKXx8eXQmJnN0JiZrYSh5dCxzdCkpcmV0dXJuIFU9X2UsaGU7dmFyIEw9X2Uua2V5PT1udWxsPyRlOl9lLmtleSxHPVMuZ2V0KEwpO3JldHVybiBfZS5lbCYmKF9lPWppKF9lKSxoZS5zaGFwZUZsYWcmMTI4JiYoaGUuc3NDb250ZW50PV9lKSksTnQ9TCxHPyhfZS5lbD1HLmVsLF9lLmNvbXBvbmVudD1HLmNvbXBvbmVudCxfZS50cmFuc2l0aW9uJiZkcihfZSxfZS50cmFuc2l0aW9uKSxfZS5zaGFwZUZsYWd8PTUxMixrLmRlbGV0ZShMKSxrLmFkZChMKSk6KGsuYWRkKEwpLFllJiZrLnNpemU+cGFyc2VJbnQoWWUsMTApJiZxZShrLnZhbHVlcygpLm5leHQoKS52YWx1ZSkpLF9lLnNoYXBlRmxhZ3w9MjU2LFU9X2UsZWEoaGUudHlwZSk/aGU6X2V9fX0scmE9Umw7ZnVuY3Rpb24ga2EoaSxhKXtyZXR1cm4gZC5pc0FycmF5KGkpP2kuc29tZShmPT5rYShmLGEpKTpkLmlzU3RyaW5nKGkpP2kuc3BsaXQoIiwiKS5pbmNsdWRlcyhhKTpkLmlzUmVnRXhwKGkpP2kudGVzdChhKTohMX1mdW5jdGlvbiBobChpLGEpe3hsKGksImEiLGEpfWZ1bmN0aW9uIHJyKGksYSl7eGwoaSwiZGEiLGEpfWZ1bmN0aW9uIHhsKGksYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOk5uLGg9aS5fX3dkY3x8KGkuX193ZGM9KCk9Pntmb3IodmFyIFM9ZjtTOyl7aWYoUy5pc0RlYWN0aXZhdGVkKXJldHVybjtTPVMucGFyZW50fXJldHVybiBpKCl9KTtpZihQaShhLGgsZiksZilmb3IodmFyIEM9Zi5wYXJlbnQ7QyYmQy5wYXJlbnQ7KUZvKEMucGFyZW50LnZub2RlKSYmamEoaCxhLGYsQyksQz1DLnBhcmVudH1mdW5jdGlvbiBqYShpLGEsZixoKXt2YXIgQz1QaShhLGksaCwhMCk7V2EoKCk9PntkLnJlbW92ZShoW2FdLEMpfSxmKX1mdW5jdGlvbiBUaShpKXtpLnNoYXBlRmxhZyY9fjI1NixpLnNoYXBlRmxhZyY9fjUxMn1mdW5jdGlvbiBpYShpKXtyZXR1cm4gaS5zaGFwZUZsYWcmMTI4P2kuc3NDb250ZW50Oml9ZnVuY3Rpb24gUGkoaSxhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Tm4saD1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7aWYoZil7aWYoSS5pc1Jvb3RIb29rKGkpJiZmIT09Zi5yb290JiYoZj1mLnJvb3QsSS5pc1Jvb3RJbW1lZGlhdGVIb29rKGkpKSl7dmFyIEM9Zi5wcm94eTtzbihhLmJpbmQoQyksZixpLEkuT05fTE9BRD09PWk/W0MuJHBhZ2Uub3B0aW9uc106W10pfXZhcntfX3BhZ2VfY29udGFpbmVyX186U309Zi5yb290LnZub2RlO1MmJlMub25JbmplY3RIb29rKGkpO3ZhciBrPWZbaV18fChmW2ldPVtdKSxVPWEuX193ZWh8fChhLl9fd2VoPWZ1bmN0aW9uKCl7aWYoIWYuaXNVbm1vdW50ZWQpe20ucGF1c2VUcmFja2luZygpO2Zvcih2YXIgSz11YShmKSxRPWFyZ3VtZW50cy5sZW5ndGgsZWU9bmV3IEFycmF5KFEpLFk9MDtZPFE7WSsrKWVlW1ldPWFyZ3VtZW50c1tZXTt2YXIgdmU9c24oYSxmLGksZWUpO3JldHVybiBLKCksbS5yZXNldFRyYWNraW5nKCksdmV9fSk7cmV0dXJuIGg/ay51bnNoaWZ0KFUpOmsucHVzaChVKSxVfWVsc2V7dmFyIEI9ZC50b0hhbmRsZXJLZXkoKE1yW2ldfHxpLnJlcGxhY2UoL15vbi8sIiIpKS5yZXBsYWNlKC8gaG9vayQvLCIiKSk7Y2UoIiIuY29uY2F0KEIsIiBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC4gTGlmZWN5Y2xlIGluamVjdGlvbiBBUElzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBzZXR1cCgpLiIpKyIgSWYgeW91IGFyZSB1c2luZyBhc3luYyBzZXR1cCgpLCBtYWtlIHN1cmUgdG8gcmVnaXN0ZXIgbGlmZWN5Y2xlIGhvb2tzIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQgc3RhdGVtZW50LiIpfX12YXIgQ3I9aT0+ZnVuY3Rpb24oYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOk5uO3JldHVybighdy5pc0luU1NSQ29tcG9uZW50U2V0dXB8fGk9PT0ic3AiKSYmUGkoaSxmdW5jdGlvbigpe3JldHVybiBhKC4uLmFyZ3VtZW50cyl9LGYpfSxSYT1DcigiYm0iKSxubz1DcigibSIpLHphPUNyKCJidSIpLFZvPUNyKCJ1IiksVW89Q3IoImJ1bSIpLFdhPUNyKCJ1bSIpLGdzPUNyKCJzcCIpLEdhPUNyKCJydGciKSxnbD1DcigicnRjIik7ZnVuY3Rpb24gQmwoaSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOk5uO1BpKCJlYyIsaSxhKX1mdW5jdGlvbiBFbyhpLGEsZixoKXt2YXIgQyxTPWYmJmZbaF07aWYoZC5pc0FycmF5KGkpfHxkLmlzU3RyaW5nKGkpKXtDPW5ldyBBcnJheShpLmxlbmd0aCk7Zm9yKHZhciBrPTAsVT1pLmxlbmd0aDtrPFU7aysrKUNba109YShpW2tdLGssdm9pZCAwLFMmJlNba10pfWVsc2UgaWYodHlwZW9mIGk9PSJudW1iZXIiKXtOdW1iZXIuaXNJbnRlZ2VyKGkpfHxjZSgiVGhlIHYtZm9yIHJhbmdlIGV4cGVjdCBhbiBpbnRlZ2VyIHZhbHVlIGJ1dCBnb3QgIi5jb25jYXQoaSwiLiIpKSxDPW5ldyBBcnJheShpKTtmb3IodmFyIEI9MDtCPGk7QisrKUNbQl09YShCKzEsQix2b2lkIDAsUyYmU1tCXSl9ZWxzZSBpZihkLmlzT2JqZWN0KGkpKWlmKGlbU3ltYm9sLml0ZXJhdG9yXSlDPUFycmF5LmZyb20oaSwodmUsVGUpPT5hKHZlLFRlLHZvaWQgMCxTJiZTW1RlXSkpO2Vsc2V7dmFyIEs9T2JqZWN0LmtleXMoaSk7Qz1uZXcgQXJyYXkoSy5sZW5ndGgpO2Zvcih2YXIgUT0wLGVlPUsubGVuZ3RoO1E8ZWU7USsrKXt2YXIgWT1LW1FdO0NbUV09YShpW1ldLFksUSxTJiZTW1FdKX19ZWxzZSBDPVtdO3JldHVybiBmJiYoZltoXT1DKSxDfWZ1bmN0aW9uIGZjKGksYSl7Zm9yKHZhciBmPWZ1bmN0aW9uKEMpe3ZhciBTPWFbQ107aWYoZC5pc0FycmF5KFMpKWZvcih2YXIgaz0wO2s8Uy5sZW5ndGg7aysrKWlbU1trXS5uYW1lXT1TW2tdLmZuO2Vsc2UgUyYmKGlbUy5uYW1lXT1TLmtleT9mdW5jdGlvbigpe3ZhciBVPVMuZm4oLi4uYXJndW1lbnRzKTtyZXR1cm4gVSYmKFUua2V5PVMua2V5KSxVfTpTLmZuKX0saD0wO2g8YS5sZW5ndGg7aCsrKWYoaCk7cmV0dXJuIGl9ZnVuY3Rpb24gdmwoaSxhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30saD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxDPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06dm9pZCAwO2lmKE9uLmlzQ0V8fE9uLnBhcmVudCYmYm8oT24ucGFyZW50KSYmT24ucGFyZW50LmlzQ0UpcmV0dXJuIGEhPT0iZGVmYXVsdCImJihmLm5hbWU9YSksc3IoInNsb3QiLGYsaCYmaCgpKTt2YXIgUz1pW2FdO1MmJlMubGVuZ3RoPjEmJihjZSgiU1NSLW9wdGltaXplZCBzbG90IGZ1bmN0aW9uIGRldGVjdGVkIGluIGEgbm9uLVNTUi1vcHRpbWl6ZWQgcmVuZGVyIGZ1bmN0aW9uLiBZb3UgbmVlZCB0byBtYXJrIHRoaXMgY29tcG9uZW50IHdpdGggJGR5bmFtaWMtc2xvdHMgaW4gdGhlIHBhcmVudCB0ZW1wbGF0ZS4iKSxTPSgpPT5bXSksUyYmUy5fYyYmKFMuX2Q9ITEpLFpzKCk7dmFyIGs9UyYmVXMoUyhmKSksVT1UbyhNbix7a2V5OmYua2V5fHxrJiZrLmtleXx8Il8iLmNvbmNhdChhKX0sa3x8KGg/aCgpOltdKSxrJiZpLl89PT0xPzY0Oi0yKTtyZXR1cm4hQyYmVS5zY29wZUlkJiYoVS5zbG90U2NvcGVJZHM9W1Uuc2NvcGVJZCsiLXMiXSksUyYmUy5fYyYmKFMuX2Q9ITApLFV9ZnVuY3Rpb24gVXMoaSl7cmV0dXJuIGkuc29tZShhPT5XcihhKT8hKGEudHlwZT09PURufHxhLnR5cGU9PT1NbiYmIVVzKGEuY2hpbGRyZW4pKTohMCk/aTpudWxsfWZ1bmN0aW9uIEhzKGksYSl7dmFyIGY9e307aWYoIWQuaXNPYmplY3QoaSkpcmV0dXJuIGNlKCJ2LW9uIHdpdGggbm8gYXJndW1lbnQgZXhwZWN0cyBhbiBvYmplY3QgdmFsdWUuIiksZjtmb3IodmFyIGggaW4gaSlmW2EmJi9bQS1aXS8udGVzdChoKT8ib246Ii5jb25jYXQoaCk6ZC50b0hhbmRsZXJLZXkoaCldPWlbaF07cmV0dXJuIGZ9dmFyIEhvPWk9Pmk/YmMoaSk/S2woaSl8fGkucHJveHk6SG8oaS5wYXJlbnQpOm51bGwscm89ZC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSx7JDppPT5pLCRlbDppPT5pLnZub2RlLmVsLCRkYXRhOmk9PmkuZGF0YSwkcHJvcHM6aT0+bS5zaGFsbG93UmVhZG9ubHkoaS5wcm9wcyksJGF0dHJzOmk9Pm0uc2hhbGxvd1JlYWRvbmx5KGkuYXR0cnMpLCRzbG90czppPT5tLnNoYWxsb3dSZWFkb25seShpLnNsb3RzKSwkcmVmczppPT5tLnNoYWxsb3dSZWFkb25seShpLnJlZnMpLCRwYXJlbnQ6aT0+SG8oaS5wYXJlbnQpLCRyb290Omk9PkhvKGkucm9vdCksJGVtaXQ6aT0+aS5lbWl0LCRvcHRpb25zOmk9PlRuKGkpLCRmb3JjZVVwZGF0ZTppPT5pLmZ8fChpLmY9KCk9PntpLmVmZmVjdC5kaXJ0eT0hMCxhbihpLnVwZGF0ZSl9KSwkbmV4dFRpY2s6aT0+aS5ufHwoaS5uPWNuLmJpbmQoaS5wcm94eSkpLCR3YXRjaDppPT5RaS5iaW5kKGkpfSksU289aT0+aT09PSJfInx8aT09PSIkIix3bz0oaSxhKT0+aSE9PWQuRU1QVFlfT0JKJiYhaS5fX2lzU2NyaXB0U2V0dXAmJmQuaGFzT3duKGksYSksdnM9e2dldChpLGEpe3ZhcntfOmZ9PWkse2N0eDpoLHNldHVwU3RhdGU6QyxkYXRhOlMscHJvcHM6ayxhY2Nlc3NDYWNoZTpVLHR5cGU6QixhcHBDb250ZXh0Okt9PWY7aWYoYT09PSJfX2lzVnVlIilyZXR1cm4hMDt2YXIgUTtpZihhWzBdIT09IiQiKXt2YXIgZWU9VVthXTtpZihlZSE9PXZvaWQgMClzd2l0Y2goZWUpe2Nhc2UgMTpyZXR1cm4gQ1thXTtjYXNlIDI6cmV0dXJuIFNbYV07Y2FzZSA0OnJldHVybiBoW2FdO2Nhc2UgMzpyZXR1cm4ga1thXX1lbHNle2lmKHdvKEMsYSkpcmV0dXJuIFVbYV09MSxDW2FdO2lmKFMhPT1kLkVNUFRZX09CSiYmZC5oYXNPd24oUyxhKSlyZXR1cm4gVVthXT0yLFNbYV07aWYoKFE9Zi5wcm9wc09wdGlvbnNbMF0pJiZkLmhhc093bihRLGEpKXJldHVybiBVW2FdPTMsa1thXTtpZihoIT09ZC5FTVBUWV9PQkomJmQuaGFzT3duKGgsYSkpcmV0dXJuIFVbYV09NCxoW2FdO1BuJiYoVVthXT0wKX19dmFyIFk9cm9bYV0sdmUsVGU7aWYoWSlyZXR1cm4gYT09PSIkYXR0cnMiPyhtLnRyYWNrKGYsImdldCIsYSksdG4oKSk6YT09PSIkc2xvdHMiJiZtLnRyYWNrKGYsImdldCIsYSksWShmKTtpZigodmU9Qi5fX2Nzc01vZHVsZXMpJiYodmU9dmVbYV0pKXJldHVybiB2ZTtpZihoIT09ZC5FTVBUWV9PQkomJmQuaGFzT3duKGgsYSkpcmV0dXJuIFVbYV09NCxoW2FdO2lmKFRlPUsuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsZC5oYXNPd24oVGUsYSkpcmV0dXJuIFRlW2FdO09uJiYoIWQuaXNTdHJpbmcoYSl8fGEuaW5kZXhPZigiX192IikhPT0wKSYmKFMhPT1kLkVNUFRZX09CSiYmU28oYVswXSkmJmQuaGFzT3duKFMsYSk/Y2UoIlByb3BlcnR5ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGEpLCcgbXVzdCBiZSBhY2Nlc3NlZCB2aWEgJGRhdGEgYmVjYXVzZSBpdCBzdGFydHMgd2l0aCBhIHJlc2VydmVkIGNoYXJhY3RlciAoIiQiIG9yICJfIikgYW5kIGlzIG5vdCBwcm94aWVkIG9uIHRoZSByZW5kZXIgY29udGV4dC4nKSk6Zj09PU9uJiZjZSgiUHJvcGVydHkgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSksIiB3YXMgYWNjZXNzZWQgZHVyaW5nIHJlbmRlciBidXQgaXMgbm90IGRlZmluZWQgb24gaW5zdGFuY2UuIikpKX0sc2V0KGksYSxmKXt2YXJ7XzpofT1pLHtkYXRhOkMsc2V0dXBTdGF0ZTpTLGN0eDprfT1oO3JldHVybiB3byhTLGEpPyhTW2FdPWYsITApOlMuX19pc1NjcmlwdFNldHVwJiZkLmhhc093bihTLGEpPyhjZSgnQ2Fubm90IG11dGF0ZSA8c2NyaXB0IHNldHVwPiBiaW5kaW5nICInLmNvbmNhdChhLCciIGZyb20gT3B0aW9ucyBBUEkuJykpLCExKTpDIT09ZC5FTVBUWV9PQkomJmQuaGFzT3duKEMsYSk/KENbYV09ZiwhMCk6ZC5oYXNPd24oaC5wcm9wcyxhKT8oY2UoJ0F0dGVtcHRpbmcgdG8gbXV0YXRlIHByb3AgIicuY29uY2F0KGEsJyIuIFByb3BzIGFyZSByZWFkb25seS4nKSksITEpOmFbMF09PT0iJCImJmEuc2xpY2UoMSlpbiBoPyhjZSgnQXR0ZW1wdGluZyB0byBtdXRhdGUgcHVibGljIHByb3BlcnR5ICInLmNvbmNhdChhLCciLiBQcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggJCBhcmUgcmVzZXJ2ZWQgYW5kIHJlYWRvbmx5LicpKSwhMSk6KGEgaW4gaC5hcHBDb250ZXh0LmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOmZ9KTprW2FdPWYsITApfSxoYXMoaSxhKXt2YXJ7Xzp7ZGF0YTpmLHNldHVwU3RhdGU6aCxhY2Nlc3NDYWNoZTpDLGN0eDpTLGFwcENvbnRleHQ6ayxwcm9wc09wdGlvbnM6VX19PWksQjtyZXR1cm4hIUNbYV18fGYhPT1kLkVNUFRZX09CSiYmZC5oYXNPd24oZixhKXx8d28oaCxhKXx8KEI9VVswXSkmJmQuaGFzT3duKEIsYSl8fGQuaGFzT3duKFMsYSl8fGQuaGFzT3duKHJvLGEpfHxkLmhhc093bihrLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGEpfSxkZWZpbmVQcm9wZXJ0eShpLGEsZil7cmV0dXJuIGYuZ2V0IT1udWxsP2kuXy5hY2Nlc3NDYWNoZVthXT0wOmQuaGFzT3duKGYsInZhbHVlIikmJnRoaXMuc2V0KGksYSxmLnZhbHVlLG51bGwpLFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoaSxhLGYpfX07dnMub3duS2V5cz1pPT4oY2UoIkF2b2lkIGFwcCBsb2dpYyB0aGF0IHJlbGllcyBvbiBlbnVtZXJhdGluZyBrZXlzIG9uIGEgY29tcG9uZW50IGluc3RhbmNlLiBUaGUga2V5cyB3aWxsIGJlIGVtcHR5IGluIHByb2R1Y3Rpb24gbW9kZSB0byBhdm9pZCBwZXJmb3JtYW5jZSBvdmVyaGVhZC4iKSxSZWZsZWN0Lm93bktleXMoaSkpO3ZhciBNbD1kLmV4dGVuZCh7fSx2cyx7Z2V0KGksYSl7aWYoYSE9PVN5bWJvbC51bnNjb3BhYmxlcylyZXR1cm4gdnMuZ2V0KGksYSxpKX0saGFzKGksYSl7dmFyIGY9YVswXSE9PSJfIiYmIWQuaXNHbG9iYWxseUFsbG93ZWQoYSk7cmV0dXJuIWYmJnZzLmhhcyhpLGEpJiZjZSgiUHJvcGVydHkgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSksIiBzaG91bGQgbm90IHN0YXJ0IHdpdGggXyB3aGljaCBpcyBhIHJlc2VydmVkIHByZWZpeCBmb3IgVnVlIGludGVybmFscy4iKSksZn19KTtmdW5jdGlvbiB6YyhpKXt2YXIgYT17fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl8iLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQ6KCk9Pml9KSxPYmplY3Qua2V5cyhybykuZm9yRWFjaChmPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OigpPT5yb1tmXShpKSxzZXQ6ZC5OT09QfSl9KSxhfWZ1bmN0aW9uIHkoaSl7dmFye2N0eDphLHByb3BzT3B0aW9uczpbZl19PWk7ZiYmT2JqZWN0LmtleXMoZikuZm9yRWFjaChoPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsaCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5pLnByb3BzW2hdLHNldDpkLk5PT1B9KX0pfWZ1bmN0aW9uIEQoaSl7dmFye2N0eDphLHNldHVwU3RhdGU6Zn09aTtPYmplY3Qua2V5cyhtLnRvUmF3KGYpKS5mb3JFYWNoKGg9PntpZighZi5fX2lzU2NyaXB0U2V0dXApe2lmKFNvKGhbMF0pKXtjZSgic2V0dXAoKSByZXR1cm4gcHJvcGVydHkgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoaCksJyBzaG91bGQgbm90IHN0YXJ0IHdpdGggIiQiIG9yICJfIiB3aGljaCBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMgZm9yIFZ1ZSBpbnRlcm5hbHMuJykpO3JldHVybn1PYmplY3QuZGVmaW5lUHJvcGVydHkoYSxoLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmZbaF0sc2V0OmQuTk9PUH0pfX0pfXZhciBXPWk9PmNlKCIiLmNvbmNhdChpLCIoKSBpcyBhIGNvbXBpbGVyLWhpbnQgaGVscGVyIHRoYXQgaXMgb25seSB1c2FibGUgaW5zaWRlIDxzY3JpcHQgc2V0dXA+IG9mIGEgc2luZ2xlIGZpbGUgY29tcG9uZW50LiBJdHMgYXJndW1lbnRzIHNob3VsZCBiZSBjb21waWxlZCBhd2F5IGFuZCBwYXNzaW5nIGl0IGF0IHJ1bnRpbWUgaGFzIG5vIGVmZmVjdC4iKSk7ZnVuY3Rpb24gJCgpe3JldHVybiBXKCJkZWZpbmVQcm9wcyIpLG51bGx9ZnVuY3Rpb24gbmUoKXtyZXR1cm4gVygiZGVmaW5lRW1pdHMiKSxudWxsfWZ1bmN0aW9uIGllKGkpe1coImRlZmluZUV4cG9zZSIpfWZ1bmN0aW9uIGdlKGkpe1coImRlZmluZU9wdGlvbnMiKX1mdW5jdGlvbiB3ZSgpe3JldHVybiBXKCJkZWZpbmVTbG90cyIpLG51bGx9ZnVuY3Rpb24gQmUoKXtXKCJkZWZpbmVNb2RlbCIpfWZ1bmN0aW9uIEhlKGksYSl7cmV0dXJuIFcoIndpdGhEZWZhdWx0cyIpLG51bGx9ZnVuY3Rpb24gRWUoKXtyZXR1cm4gdnQoKS5zbG90c31mdW5jdGlvbiBGZSgpe3JldHVybiB2dCgpLmF0dHJzfWZ1bmN0aW9uIHZ0KCl7dmFyIGk9YW8oKTtyZXR1cm4gaXx8Y2UoInVzZUNvbnRleHQoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuIiksaS5zZXR1cENvbnRleHR8fChpLnNldHVwQ29udGV4dD1ycyhpKSl9ZnVuY3Rpb24gUHQoaSl7cmV0dXJuIGQuaXNBcnJheShpKT9pLnJlZHVjZSgoYSxmKT0+KGFbZl09bnVsbCxhKSx7fSk6aX1mdW5jdGlvbiBGdChpLGEpe3ZhciBmPVB0KGkpO2Zvcih2YXIgaCBpbiBhKWlmKCFoLnN0YXJ0c1dpdGgoIl9fc2tpcCIpKXt2YXIgQz1mW2hdO0M/ZC5pc0FycmF5KEMpfHxkLmlzRnVuY3Rpb24oQyk/Qz1mW2hdPXt0eXBlOkMsZGVmYXVsdDphW2hdfTpDLmRlZmF1bHQ9YVtoXTpDPT09bnVsbD9DPWZbaF09e2RlZmF1bHQ6YVtoXX06Y2UoJ3Byb3BzIGRlZmF1bHQga2V5ICInLmNvbmNhdChoLCciIGhhcyBubyBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9uLicpKSxDJiZhWyJfX3NraXBfIi5jb25jYXQoaCldJiYoQy5za2lwRmFjdG9yeT0hMCl9cmV0dXJuIGZ9ZnVuY3Rpb24gU3QoaSxhKXtyZXR1cm4haXx8IWE/aXx8YTpkLmlzQXJyYXkoaSkmJmQuaXNBcnJheShhKT9pLmNvbmNhdChhKTpkLmV4dGVuZCh7fSxQdChpKSxQdChhKSl9ZnVuY3Rpb24gX3QoaSxhKXt2YXIgZj17fSxoPWZ1bmN0aW9uKFMpe2EuaW5jbHVkZXMoUyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFMse2VudW1lcmFibGU6ITAsZ2V0OigpPT5pW1NdfSl9O2Zvcih2YXIgQyBpbiBpKWgoQyk7cmV0dXJuIGZ9ZnVuY3Rpb24gVnQoaSl7dmFyIGE9YW8oKTthfHxjZSgid2l0aEFzeW5jQ29udGV4dCBjYWxsZWQgd2l0aG91dCBhY3RpdmUgY3VycmVudCBpbnN0YW5jZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcuIik7dmFyIGY9aSgpO3JldHVybiBmYSgpLGQuaXNQcm9taXNlKGYpJiYoZj1mLmNhdGNoKGg9Pnt0aHJvdyB1YShhKSxofSkpLFtmLCgpPT51YShhKV19ZnVuY3Rpb24gYm4oKXt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybihhLGYpPT57aVtmXT9jZSgiIi5jb25jYXQoYSwnIHByb3BlcnR5ICInKS5jb25jYXQoZiwnIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gJykuY29uY2F0KGlbZl0sIi4iKSk6aVtmXT1hfX12YXIgUG49ITA7ZnVuY3Rpb24gT3QoaSl7dmFyIGE9VG4oaSksZj1pLnByb3h5LGg9aS5jdHg7UG49ITEsYS5iZWZvcmVDcmVhdGUmJlVuKGEuYmVmb3JlQ3JlYXRlLGksImJjIik7dmFye2RhdGE6Qyxjb21wdXRlZDpTLG1ldGhvZHM6ayx3YXRjaDpVLHByb3ZpZGU6QixpbmplY3Q6SyxjcmVhdGVkOlEsYmVmb3JlTW91bnQ6ZWUsbW91bnRlZDpZLGJlZm9yZVVwZGF0ZTp2ZSx1cGRhdGVkOlRlLGFjdGl2YXRlZDpodCxkZWFjdGl2YXRlZDpxZSxiZWZvcmVEZXN0cm95Ok50LGJlZm9yZVVubW91bnQ6eHQsZGVzdHJveWVkOm9lLHVubW91bnRlZDpoZSxyZW5kZXI6X2UscmVuZGVyVHJhY2tlZDokZSxyZW5kZXJUcmlnZ2VyZWQ6c3QsZXJyb3JDYXB0dXJlZDp0dCxzZXJ2ZXJQcmVmZXRjaDp5dCxleHBvc2U6WWUsaW5oZXJpdEF0dHJzOkwsY29tcG9uZW50czpHLGRpcmVjdGl2ZXM6dGUsZmlsdGVyczpiZX09YSxTZT1ibigpO3t2YXJbQ2VdPWkucHJvcHNPcHRpb25zO2lmKENlKWZvcih2YXIgbnQgaW4gQ2UpU2UoIlByb3BzIixudCl9aWYoSyYmbG4oSyxoLFNlKSxrKWZvcih2YXIgV2UgaW4gayl7dmFyIFFlPWtbV2VdO2QuaXNGdW5jdGlvbihRZSk/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLFdlLHt2YWx1ZTpRZS5iaW5kKGYpLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksU2UoIk1ldGhvZHMiLFdlKSk6Y2UoJ01ldGhvZCAiJy5jb25jYXQoV2UsJyIgaGFzIHR5cGUgIicpLmNvbmNhdCh0eXBlb2YgUWUsJyIgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5PycpKX1pZihDJiZmdW5jdGlvbigpe2QuaXNGdW5jdGlvbihDKXx8Y2UoIlRoZSBkYXRhIG9wdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24uIFBsYWluIG9iamVjdCB1c2FnZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpO3ZhciB1bj1DLmNhbGwoZixmKTtpZihkLmlzUHJvbWlzZSh1bikmJmNlKCJkYXRhKCkgcmV0dXJuZWQgYSBQcm9taXNlIC0gbm90ZSBkYXRhKCkgY2Fubm90IGJlIGFzeW5jOyBJZiB5b3UgaW50ZW5kIHRvIHBlcmZvcm0gZGF0YSBmZXRjaGluZyBiZWZvcmUgY29tcG9uZW50IHJlbmRlcnMsIHVzZSBhc3luYyBzZXR1cCgpICsgPFN1c3BlbnNlPi4iKSwhZC5pc09iamVjdCh1bikpY2UoImRhdGEoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4iKTtlbHNle2kuZGF0YT1tLnJlYWN0aXZlKHVuKTt7dmFyIHduPWZ1bmN0aW9uKGxvKXtTZSgiRGF0YSIsbG8pLFNvKGxvWzBdKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsbG8se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDooKT0+dW5bbG9dLHNldDpkLk5PT1B9KX07Zm9yKHZhciBlaSBpbiB1bil3bihlaSl9fX0oKSxQbj0hMCxTKXt2YXIgVmU9ZnVuY3Rpb24odW4pe3ZhciB3bj1TW3VuXSxlaT1kLmlzRnVuY3Rpb24od24pP3duLmJpbmQoZixmKTpkLmlzRnVuY3Rpb24od24uZ2V0KT93bi5nZXQuYmluZChmLGYpOmQuTk9PUDtlaT09PWQuTk9PUCYmY2UoJ0NvbXB1dGVkIHByb3BlcnR5ICInLmNvbmNhdCh1biwnIiBoYXMgbm8gZ2V0dGVyLicpKTt2YXIgbG89IWQuaXNGdW5jdGlvbih3bikmJmQuaXNGdW5jdGlvbih3bi5zZXQpP3duLnNldC5iaW5kKGYpOigpPT57Y2UoJ1dyaXRlIG9wZXJhdGlvbiBmYWlsZWQ6IGNvbXB1dGVkIHByb3BlcnR5ICInLmNvbmNhdCh1biwnIiBpcyByZWFkb25seS4nKSl9LFluPVljKHtnZXQ6ZWksc2V0OmxvfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsdW4se2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+WW4udmFsdWUsc2V0OlNpPT5Zbi52YWx1ZT1TaX0pLFNlKCJDb21wdXRlZCIsdW4pfTtmb3IodmFyIEN0IGluIFMpVmUoQ3QpfWlmKFUpZm9yKHZhciBqdCBpbiBVKWlyKFVbanRdLGgsZixqdCk7aWYoQil7dmFyIFV0PWQuaXNGdW5jdGlvbihCKT9CLmNhbGwoZik6QjtSZWZsZWN0Lm93bktleXMoVXQpLmZvckVhY2godW49PntHbih1bixVdFt1bl0pfSl9USYmVW4oUSxpLCJjIik7ZnVuY3Rpb24gQnQodW4sd24pe2QuaXNBcnJheSh3bik/d24uZm9yRWFjaChlaT0+dW4oZWkuYmluZChmKSkpOnduJiZ1bih3bi5iaW5kKGYpKX1pZihCdChSYSxlZSksQnQobm8sWSksQnQoemEsdmUpLEJ0KFZvLFRlKSxCdChobCxodCksQnQocnIscWUpLEJ0KEJsLHR0KSxCdChnbCwkZSksQnQoR2Esc3QpLEJ0KFVvLHh0KSxCdChXYSxoZSksQnQoZ3MseXQpLGQuaXNBcnJheShZZSkpaWYoWWUubGVuZ3RoKXt2YXIgbHI9aS5leHBvc2VkfHwoaS5leHBvc2VkPXt9KTtZZS5mb3JFYWNoKHVuPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGxyLHVuLHtnZXQ6KCk9PmZbdW5dLHNldDp3bj0+Zlt1bl09d259KX0pfWVsc2UgaS5leHBvc2VkfHwoaS5leHBvc2VkPXt9KTtfZSYmaS5yZW5kZXI9PT1kLk5PT1AmJihpLnJlbmRlcj1fZSksTCE9bnVsbCYmKGkuaW5oZXJpdEF0dHJzPUwpLEcmJihpLmNvbXBvbmVudHM9RyksdGUmJihpLmRpcmVjdGl2ZXM9dGUpO3ZhciAkbj1pLmFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJGFwcGx5T3B0aW9uczskbiYmJG4oYSxpLGYpfWZ1bmN0aW9uIGxuKGksYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmQuTk9PUDtkLmlzQXJyYXkoaSkmJihpPVZyKGkpKTt2YXIgaD1mdW5jdGlvbihTKXt2YXIgaz1pW1NdLFU9dm9pZCAwO2QuaXNPYmplY3Qoayk/ImRlZmF1bHQiaW4gaz9VPW9hKGsuZnJvbXx8UyxrLmRlZmF1bHQsITApOlU9b2Eoay5mcm9tfHxTKTpVPW9hKGspLG0uaXNSZWYoVSk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsUyx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5VLnZhbHVlLHNldDpCPT5VLnZhbHVlPUJ9KTphW1NdPVUsZigiSW5qZWN0IixTKX07Zm9yKHZhciBDIGluIGkpaChDKX1mdW5jdGlvbiBVbihpLGEsZil7c24oZC5pc0FycmF5KGkpP2kubWFwKGg9PmguYmluZChhLnByb3h5KSk6aS5iaW5kKGEucHJveHkpLGEsZil9ZnVuY3Rpb24gaXIoaSxhLGYsaCl7dmFyIEM9aC5pbmNsdWRlcygiLiIpP19pKGYsaCk6KCk9PmZbaF07aWYoZC5pc1N0cmluZyhpKSl7dmFyIFM9YVtpXTtkLmlzRnVuY3Rpb24oUyk/SHIoQyxTKTpjZSgnSW52YWxpZCB3YXRjaCBoYW5kbGVyIHNwZWNpZmllZCBieSBrZXkgIicuY29uY2F0KGksJyInKSxTKX1lbHNlIGlmKGQuaXNGdW5jdGlvbihpKSlIcihDLGkuYmluZChmKSk7ZWxzZSBpZihkLmlzT2JqZWN0KGkpKWlmKGQuaXNBcnJheShpKSlpLmZvckVhY2goVT0+aXIoVSxhLGYsaCkpO2Vsc2V7dmFyIGs9ZC5pc0Z1bmN0aW9uKGkuaGFuZGxlcik/aS5oYW5kbGVyLmJpbmQoZik6YVtpLmhhbmRsZXJdO2QuaXNGdW5jdGlvbihrKT9IcihDLGssaSk6Y2UoJ0ludmFsaWQgd2F0Y2ggaGFuZGxlciBzcGVjaWZpZWQgYnkga2V5ICInLmNvbmNhdChpLmhhbmRsZXIsJyInKSxrKX1lbHNlIGNlKCdJbnZhbGlkIHdhdGNoIG9wdGlvbjogIicuY29uY2F0KGgsJyInKSxpKX1mdW5jdGlvbiBUbihpKXt2YXIgYT1pLnR5cGUse21peGluczpmLGV4dGVuZHM6aH09YSx7bWl4aW5zOkMsb3B0aW9uc0NhY2hlOlMsY29uZmlnOntvcHRpb25NZXJnZVN0cmF0ZWdpZXM6a319PWkuYXBwQ29udGV4dCxVPVMuZ2V0KGEpLEI7cmV0dXJuIFU/Qj1VOiFDLmxlbmd0aCYmIWYmJiFoP0I9YTooQj17fSxDLmxlbmd0aCYmQy5mb3JFYWNoKEs9PkhuKEIsSyxrLCEwKSksSG4oQixhLGspKSxkLmlzT2JqZWN0KGEpJiZTLnNldChhLEIpLEJ9ZnVuY3Rpb24gSG4oaSxhLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSx7bWl4aW5zOkMsZXh0ZW5kczpTfT1hO1MmJkhuKGksUyxmLCEwKSxDJiZDLmZvckVhY2goQj0+SG4oaSxCLGYsITApKTtmb3IodmFyIGsgaW4gYSlpZihoJiZrPT09ImV4cG9zZSIpY2UoJyJleHBvc2UiIG9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gZGVjbGFyZWQgaW4gbWl4aW5zIG9yIGV4dGVuZHMuIEl0IHNob3VsZCBvbmx5IGJlIGRlY2xhcmVkIGluIHRoZSBiYXNlIGNvbXBvbmVudCBpdHNlbGYuJyk7ZWxzZXt2YXIgVT1BcltrXXx8ZiYmZltrXTtpW2tdPVU/VShpW2tdLGFba10pOmFba119cmV0dXJuIGl9dmFyIEFyPXtkYXRhOnFhLHByb3BzOllhLGVtaXRzOllhLG1ldGhvZHM6JG8sY29tcHV0ZWQ6JG8sYmVmb3JlQ3JlYXRlOkd0LGNyZWF0ZWQ6R3QsYmVmb3JlTW91bnQ6R3QsbW91bnRlZDpHdCxiZWZvcmVVcGRhdGU6R3QsdXBkYXRlZDpHdCxiZWZvcmVEZXN0cm95Okd0LGJlZm9yZVVubW91bnQ6R3QsZGVzdHJveWVkOkd0LHVubW91bnRlZDpHdCxhY3RpdmF0ZWQ6R3QsZGVhY3RpdmF0ZWQ6R3QsZXJyb3JDYXB0dXJlZDpHdCxzZXJ2ZXJQcmVmZXRjaDpHdCxjb21wb25lbnRzOiRvLGRpcmVjdGl2ZXM6JG8sd2F0Y2g6X3MscHJvdmlkZTpxYSxpbmplY3Q6bXN9O2Z1bmN0aW9uIHFhKGksYSl7cmV0dXJuIGE/aT9mdW5jdGlvbigpe3JldHVybiBkLmV4dGVuZChkLmlzRnVuY3Rpb24oaSk/aS5jYWxsKHRoaXMsdGhpcyk6aSxkLmlzRnVuY3Rpb24oYSk/YS5jYWxsKHRoaXMsdGhpcyk6YSl9OmE6aX1mdW5jdGlvbiBtcyhpLGEpe3JldHVybiAkbyhWcihpKSxWcihhKSl9ZnVuY3Rpb24gVnIoaSl7aWYoZC5pc0FycmF5KGkpKXtmb3IodmFyIGE9e30sZj0wO2Y8aS5sZW5ndGg7ZisrKWFbaVtmXV09aVtmXTtyZXR1cm4gYX1yZXR1cm4gaX1mdW5jdGlvbiBHdChpLGEpe3JldHVybiBpP1suLi5uZXcgU2V0KFtdLmNvbmNhdChpLGEpKV06YX1mdW5jdGlvbiAkbyhpLGEpe3JldHVybiBpP2QuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksaSxhKTphfWZ1bmN0aW9uIFlhKGksYSl7cmV0dXJuIGk/ZC5pc0FycmF5KGkpJiZkLmlzQXJyYXkoYSk/Wy4uLm5ldyBTZXQoWy4uLmksLi4uYV0pXTpkLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLFB0KGkpLFB0KGEhPW51bGw/YTp7fSkpOmF9ZnVuY3Rpb24gX3MoaSxhKXtpZighaSlyZXR1cm4gYTtpZighYSlyZXR1cm4gaTt2YXIgZj1kLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLGkpO2Zvcih2YXIgaCBpbiBhKWZbaF09R3QoaVtoXSxhW2hdKTtyZXR1cm4gZn1mdW5jdGlvbiBicygpe3JldHVybnthcHA6bnVsbCxjb25maWc6e2lzTmF0aXZlVGFnOmQuTk8scGVyZm9ybWFuY2U6ITEsZ2xvYmFsUHJvcGVydGllczp7fSxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGFuZGxlcjp2b2lkIDAsY29tcGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpdmVzOnt9LHByb3ZpZGVzOk9iamVjdC5jcmVhdGUobnVsbCksb3B0aW9uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWNoZTpuZXcgV2Vha01hcH19dmFyIFpyPTA7ZnVuY3Rpb24gam8oaSxhKXtyZXR1cm4gZnVuY3Rpb24oaCl7dmFyIEM9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7ZC5pc0Z1bmN0aW9uKGgpfHwoaD1kLmV4dGVuZCh7fSxoKSksQyE9bnVsbCYmIWQuaXNPYmplY3QoQykmJihjZSgicm9vdCBwcm9wcyBwYXNzZWQgdG8gYXBwLm1vdW50KCkgbXVzdCBiZSBhbiBvYmplY3QuIiksQz1udWxsKTt2YXIgUz1icygpLGs9bmV3IFdlYWtTZXQsVT0hMSxCPVMuYXBwPXtfdWlkOlpyKyssX2NvbXBvbmVudDpoLF9wcm9wczpDLF9jb250YWluZXI6bnVsbCxfY29udGV4dDpTLF9pbnN0YW5jZTpudWxsLHZlcnNpb246YXMsZ2V0IGNvbmZpZygpe3JldHVybiBTLmNvbmZpZ30sc2V0IGNvbmZpZyhLKXtjZSgiYXBwLmNvbmZpZyBjYW5ub3QgYmUgcmVwbGFjZWQuIE1vZGlmeSBpbmRpdmlkdWFsIG9wdGlvbnMgaW5zdGVhZC4iKX0sdXNlKEspe2Zvcih2YXIgUT1hcmd1bWVudHMubGVuZ3RoLGVlPW5ldyBBcnJheShRPjE/US0xOjApLFk9MTtZPFE7WSsrKWVlW1ktMV09YXJndW1lbnRzW1ldO3JldHVybiBrLmhhcyhLKT9jZSgiUGx1Z2luIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0byB0YXJnZXQgYXBwLiIpOksmJmQuaXNGdW5jdGlvbihLLmluc3RhbGwpPyhrLmFkZChLKSxLLmluc3RhbGwoQiwuLi5lZSkpOmQuaXNGdW5jdGlvbihLKT8oay5hZGQoSyksSyhCLC4uLmVlKSk6Y2UoJ0EgcGx1Z2luIG11c3QgZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IHdpdGggYW4gImluc3RhbGwiIGZ1bmN0aW9uLicpLEJ9LG1peGluKEspe3JldHVybiBTLm1peGlucy5pbmNsdWRlcyhLKT9jZSgiTWl4aW4gaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIHRvIHRhcmdldCBhcHAiKyhLLm5hbWU/IjogIi5jb25jYXQoSy5uYW1lKToiIikpOlMubWl4aW5zLnB1c2goSyksQn0sY29tcG9uZW50KEssUSl7cmV0dXJuIGRhKEssUy5jb25maWcpLFE/KFMuY29tcG9uZW50c1tLXSYmY2UoJ0NvbXBvbmVudCAiJy5jb25jYXQoSywnIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgaW4gdGFyZ2V0IGFwcC4nKSksUy5jb21wb25lbnRzW0tdPVEsQik6Uy5jb21wb25lbnRzW0tdfSxkaXJlY3RpdmUoSyxRKXtyZXR1cm4gaHMoSyksUT8oUy5kaXJlY3RpdmVzW0tdJiZjZSgnRGlyZWN0aXZlICInLmNvbmNhdChLLCciIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBpbiB0YXJnZXQgYXBwLicpKSxTLmRpcmVjdGl2ZXNbS109USxCKTpTLmRpcmVjdGl2ZXNbS119LG1vdW50KEssUSxlZSl7aWYoVSljZSgiQXBwIGhhcyBhbHJlYWR5IGJlZW4gbW91bnRlZC5cbklmIHlvdSB3YW50IHRvIHJlbW91bnQgdGhlIHNhbWUgYXBwLCBtb3ZlIHlvdXIgYXBwIGNyZWF0aW9uIGxvZ2ljIGludG8gYSBmYWN0b3J5IGZ1bmN0aW9uIGFuZCBjcmVhdGUgZnJlc2ggYXBwIGluc3RhbmNlcyBmb3IgZWFjaCBtb3VudCAtIGUuZy4gYGNvbnN0IGNyZWF0ZU15QXBwID0gKCkgPT4gY3JlYXRlQXBwKEFwcClgIik7ZWxzZXtLLl9fdnVlX2FwcF9fJiZjZSgiVGhlcmUgaXMgYWxyZWFkeSBhbiBhcHAgaW5zdGFuY2UgbW91bnRlZCBvbiB0aGUgaG9zdCBjb250YWluZXIuXG4gSWYgeW91IHdhbnQgdG8gbW91bnQgYW5vdGhlciBhcHAgb24gdGhlIHNhbWUgaG9zdCBjb250YWluZXIsIHlvdSBuZWVkIHRvIHVubW91bnQgdGhlIHByZXZpb3VzIGFwcCBieSBjYWxsaW5nIGBhcHAudW5tb3VudCgpYCBmaXJzdC4iKTt2YXIgWT1zcihoLEMpO3JldHVybiBZLmFwcENvbnRleHQ9UyxlZT09PSEwP2VlPSJzdmciOmVlPT09ITEmJihlZT12b2lkIDApLFMucmVsb2FkPSgpPT57aShqaShZKSxLLGVlKX0sUSYmYT9hKFksSyk6aShZLEssZWUpLFU9ITAsQi5fY29udGFpbmVyPUssSy5fX3Z1ZV9hcHBfXz1CLEIuX2luc3RhbmNlPVkuY29tcG9uZW50LEtvKEIsYXMpLEtsKFkuY29tcG9uZW50KXx8WS5jb21wb25lbnQucHJveHl9fSx1bm1vdW50KCl7VT8oaShudWxsLEIuX2NvbnRhaW5lciksQi5faW5zdGFuY2U9bnVsbCxtaShCKSxkZWxldGUgQi5fY29udGFpbmVyLl9fdnVlX2FwcF9fKTpjZSgiQ2Fubm90IHVubW91bnQgYW4gYXBwIHRoYXQgaXMgbm90IG1vdW50ZWQuIil9LHByb3ZpZGUoSyxRKXtyZXR1cm4gSyBpbiBTLnByb3ZpZGVzJiZjZSgnQXBwIGFscmVhZHkgcHJvdmlkZXMgcHJvcGVydHkgd2l0aCBrZXkgIicuY29uY2F0KFN0cmluZyhLKSwnIi4gSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXcgdmFsdWUuJykpLFMucHJvdmlkZXNbS109USxCfSxydW5XaXRoQ29udGV4dChLKXt2YXIgUT1CbjtCbj1CO3RyeXtyZXR1cm4gSygpfWZpbmFsbHl7Qm49UX19fTtyZXR1cm4gQn19dmFyIEJuPW51bGw7ZnVuY3Rpb24gR24oaSxhKXtpZighTm4pY2UoInByb3ZpZGUoKSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBzZXR1cCgpLiIpO2Vsc2V7dmFyIGY9Tm4ucHJvdmlkZXMsaD1Obi5wYXJlbnQmJk5uLnBhcmVudC5wcm92aWRlcztoPT09ZiYmKGY9Tm4ucHJvdmlkZXM9T2JqZWN0LmNyZWF0ZShoKSksZltpXT1hLE5uLnR5cGUubXBUeXBlPT09ImFwcCImJk5uLmFwcENvbnRleHQuYXBwLnByb3ZpZGUoaSxhKX19ZnVuY3Rpb24gb2EoaSxhKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsaD1Obnx8T247aWYoaHx8Qm4pe3ZhciBDPWg/aC5wYXJlbnQ9PW51bGw/aC52bm9kZS5hcHBDb250ZXh0JiZoLnZub2RlLmFwcENvbnRleHQucHJvdmlkZXM6aC5wYXJlbnQucHJvdmlkZXM6Qm4uX2NvbnRleHQucHJvdmlkZXM7aWYoQyYmaSBpbiBDKXJldHVybiBDW2ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gZiYmZC5pc0Z1bmN0aW9uKGEpP2EuY2FsbChoJiZoLnByb3h5KTphO2NlKCdpbmplY3Rpb24gIicuY29uY2F0KFN0cmluZyhpKSwnIiBub3QgZm91bmQuJykpfWVsc2UgY2UoImluamVjdCgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkgb3IgZnVuY3Rpb25hbCBjb21wb25lbnRzLiIpfWZ1bmN0aW9uIEthKCl7cmV0dXJuISEoTm58fE9ufHxCbil9ZnVuY3Rpb24gSmEoaSxhLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxDPXt9LFM9e307ZC5kZWYoUyxYcywxKSxpLnByb3BzRGVmYXVsdHM9T2JqZWN0LmNyZWF0ZShudWxsKSxYcihpLGEsQyxTKTtmb3IodmFyIGsgaW4gaS5wcm9wc09wdGlvbnNbMF0payBpbiBDfHwoQ1trXT12b2lkIDApO0xsKGF8fHt9LEMsaSksZj9pLnByb3BzPWg/QzptLnNoYWxsb3dSZWFjdGl2ZShDKTppLnR5cGUucHJvcHM/aS5wcm9wcz1DOmkucHJvcHM9UyxpLmF0dHJzPVN9ZnVuY3Rpb24gaW8oaSl7Zm9yKDtpOyl7aWYoaS50eXBlLl9faG1ySWQpcmV0dXJuITA7aT1pLnBhcmVudH19ZnVuY3Rpb24gem8oaSxhLGYsaCl7dmFye3Byb3BzOkMsYXR0cnM6Uyx2bm9kZTp7cGF0Y2hGbGFnOmt9fT1pLFU9bS50b1JhdyhDKSxbQl09aS5wcm9wc09wdGlvbnMsSz0hMTtpZighaW8oaSkmJihofHxrPjApJiYhKGsmMTYpKXtpZihrJjgpZm9yKHZhciBRPWkudm5vZGUuZHluYW1pY1Byb3BzLGVlPTA7ZWU8US5sZW5ndGg7ZWUrKyl7dmFyIFk9UVtlZV07aWYoIWduKGkuZW1pdHNPcHRpb25zLFkpKXt2YXIgdmU9YVtZXTtpZihCKWlmKGQuaGFzT3duKFMsWSkpdmUhPT1TW1ldJiYoU1tZXT12ZSxLPSEwKTtlbHNle3ZhciBUZT1kLmNhbWVsaXplKFkpO0NbVGVdPSRzKEIsVSxUZSx2ZSxpLCExKX1lbHNlIHZlIT09U1tZXSYmKFNbWV09dmUsSz0hMCl9fX1lbHNle1hyKGksYSxDLFMpJiYoSz0hMCk7dmFyIGh0O2Zvcih2YXIgcWUgaW4gVSkoIWF8fCFkLmhhc093bihhLHFlKSYmKChodD1kLmh5cGhlbmF0ZShxZSkpPT09cWV8fCFkLmhhc093bihhLGh0KSkpJiYoQj9mJiYoZltxZV0hPT12b2lkIDB8fGZbaHRdIT09dm9pZCAwKSYmKENbcWVdPSRzKEIsVSxxZSx2b2lkIDAsaSwhMCkpOmRlbGV0ZSBDW3FlXSk7aWYoUyE9PVUpZm9yKHZhciBOdCBpbiBTKSghYXx8IWQuaGFzT3duKGEsTnQpJiYhMCkmJihkZWxldGUgU1tOdF0sSz0hMCl9SyYmbS50cmlnZ2VyKGksInNldCIsIiRhdHRycyIpLExsKGF8fHt9LEMsaSl9ZnVuY3Rpb24gWHIoaSxhLGYsaCl7dmFyW0MsU109aS5wcm9wc09wdGlvbnMsaz0hMSxVO2lmKGEpe2Zvcih2YXIgQiBpbiBhKWlmKCFkLmlzUmVzZXJ2ZWRQcm9wKEIpKXt2YXIgSz1hW0JdLFE9dm9pZCAwO0MmJmQuaGFzT3duKEMsUT1kLmNhbWVsaXplKEIpKT8hU3x8IVMuaW5jbHVkZXMoUSk/ZltRXT1LOihVfHwoVT17fSkpW1FdPUs6Z24oaS5lbWl0c09wdGlvbnMsQil8fCghKEIgaW4gaCl8fEshPT1oW0JdKSYmKGhbQl09SyxrPSEwKX19aWYoUylmb3IodmFyIGVlPW0udG9SYXcoZiksWT1VfHxkLkVNUFRZX09CSix2ZT0wO3ZlPFMubGVuZ3RoO3ZlKyspe3ZhciBUZT1TW3ZlXTtmW1RlXT0kcyhDLGVlLFRlLFlbVGVdLGksIWQuaGFzT3duKFksVGUpKX1yZXR1cm4ga31mdW5jdGlvbiAkcyhpLGEsZixoLEMsUyl7dmFyIGs9aVtmXTtpZihrIT1udWxsKXt2YXIgVT1kLmhhc093bihrLCJkZWZhdWx0Iik7aWYoVSYmaD09PXZvaWQgMCl7dmFyIEI9ay5kZWZhdWx0O2lmKGsudHlwZSE9PUZ1bmN0aW9uJiYhay5za2lwRmFjdG9yeSYmZC5pc0Z1bmN0aW9uKEIpKXt2YXJ7cHJvcHNEZWZhdWx0czpLfT1DO2lmKGYgaW4gSyloPUtbZl07ZWxzZXt2YXIgUT11YShDKTtoPUtbZl09Qi5jYWxsKG51bGwsYSksUSgpfX1lbHNlIGg9Qn1rWzBdJiYoUyYmIVU/aD0hMTprWzFdJiYoaD09PSIifHxoPT09ZC5oeXBoZW5hdGUoZikpJiYoaD0hMCkpfXJldHVybiBofWZ1bmN0aW9uIG1sKGksYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLGg9YS5wcm9wc0NhY2hlLEM9aC5nZXQoaSk7aWYoQylyZXR1cm4gQzt2YXIgUz1pLnByb3BzLGs9e30sVT1bXSxCPSExO2lmKCFkLmlzRnVuY3Rpb24oaSkpe3ZhciBLPW9lPT57Qj0hMDt2YXJbaGUsX2VdPW1sKG9lLGEsITApO2QuZXh0ZW5kKGssaGUpLF9lJiZVLnB1c2goLi4uX2UpfTshZiYmYS5taXhpbnMubGVuZ3RoJiZhLm1peGlucy5mb3JFYWNoKEspLGkuZXh0ZW5kcyYmSyhpLmV4dGVuZHMpLGkubWl4aW5zJiZpLm1peGlucy5mb3JFYWNoKEspfWlmKCFTJiYhQilyZXR1cm4gZC5pc09iamVjdChpKSYmaC5zZXQoaSxkLkVNUFRZX0FSUiksZC5FTVBUWV9BUlI7aWYoZC5pc0FycmF5KFMpKWZvcih2YXIgUT0wO1E8Uy5sZW5ndGg7USsrKXtkLmlzU3RyaW5nKFNbUV0pfHxjZSgicHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LiIsU1tRXSk7dmFyIGVlPWQuY2FtZWxpemUoU1tRXSk7WmEoZWUpJiYoa1tlZV09ZC5FTVBUWV9PQkopfWVsc2UgaWYoUyl7ZC5pc09iamVjdChTKXx8Y2UoImludmFsaWQgcHJvcHMgb3B0aW9ucyIsUyk7Zm9yKHZhciBZIGluIFMpe3ZhciB2ZT1kLmNhbWVsaXplKFkpO2lmKFphKHZlKSl7dmFyIFRlPVNbWV0saHQ9a1t2ZV09ZC5pc0FycmF5KFRlKXx8ZC5pc0Z1bmN0aW9uKFRlKT97dHlwZTpUZX06ZC5leHRlbmQoe30sVGUpO2lmKGh0KXt2YXIgcWU9enMoQm9vbGVhbixodC50eXBlKSxOdD16cyhTdHJpbmcsaHQudHlwZSk7aHRbMF09cWU+LTEsaHRbMV09TnQ8MHx8cWU8TnQsKHFlPi0xfHxkLmhhc093bihodCwiZGVmYXVsdCIpKSYmVS5wdXNoKHZlKX19fX12YXIgeHQ9W2ssVV07cmV0dXJuIGQuaXNPYmplY3QoaSkmJmguc2V0KGkseHQpLHh0fWZ1bmN0aW9uIFphKGkpe3JldHVybiBpWzBdIT09IiQiJiYhZC5pc1Jlc2VydmVkUHJvcChpKT8hMDooY2UoJ0ludmFsaWQgcHJvcCBuYW1lOiAiJy5jb25jYXQoaSwnIiBpcyBhIHJlc2VydmVkIHByb3BlcnR5LicpKSwhMSl9ZnVuY3Rpb24ganMoaSl7aWYoaT09PW51bGwpcmV0dXJuIm51bGwiO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iKXJldHVybiBpLm5hbWV8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7dmFyIGE9aS5jb25zdHJ1Y3RvciYmaS5jb25zdHJ1Y3Rvci5uYW1lO3JldHVybiBhfHwiIn1yZXR1cm4iIn1mdW5jdGlvbiBfbChpLGEpe3JldHVybiBqcyhpKT09PWpzKGEpfWZ1bmN0aW9uIHpzKGksYSl7cmV0dXJuIGQuaXNBcnJheShhKT9hLmZpbmRJbmRleChmPT5fbChmLGkpKTpkLmlzRnVuY3Rpb24oYSkmJl9sKGEsaSk/MDotMX1mdW5jdGlvbiBMbChpLGEsZil7dmFyIGg9bS50b1JhdyhhKSxDPWYucHJvcHNPcHRpb25zWzBdO2Zvcih2YXIgUyBpbiBDKXt2YXIgaz1DW1NdO2shPW51bGwmJldzKFMsaFtTXSxrLG0uc2hhbGxvd1JlYWRvbmx5KGgpLCFkLmhhc093bihpLFMpJiYhZC5oYXNPd24oaSxkLmh5cGhlbmF0ZShTKSkpfX1mdW5jdGlvbiBXcyhpLGEsZixoLEMpe3Zhcnt0eXBlOlMscmVxdWlyZWQ6ayx2YWxpZGF0b3I6VSxza2lwQ2hlY2s6Qn09ZjtpZihrJiZDKXtjZSgnTWlzc2luZyByZXF1aXJlZCBwcm9wOiAiJytpKyciJyk7cmV0dXJufWlmKCEoYT09bnVsbCYmIWspKXtpZihTIT1udWxsJiZTIT09ITAmJiFCKXtmb3IodmFyIEs9ITEsUT1kLmlzQXJyYXkoUyk/UzpbU10sZWU9W10sWT0wO1k8US5sZW5ndGgmJiFLO1krKyl7dmFye3ZhbGlkOnZlLGV4cGVjdGVkVHlwZTpUZX09RGwoYSxRW1ldKTtlZS5wdXNoKFRlfHwiIiksSz12ZX1pZighSyl7Y2UocXMoaSxhLGVlKSk7cmV0dXJufX1VJiYhVShhLGgpJiZjZSgnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCAiJytpKyciLicpfX12YXIgR3M9ZC5tYWtlTWFwKCJTdHJpbmcsTnVtYmVyLEJvb2xlYW4sRnVuY3Rpb24sU3ltYm9sLEJpZ0ludCIpO2Z1bmN0aW9uIERsKGksYSl7dmFyIGYsaD1qcyhhKTtpZihHcyhoKSl7dmFyIEM9dHlwZW9mIGk7Zj1DPT09aC50b0xvd2VyQ2FzZSgpLCFmJiZDPT09Im9iamVjdCImJihmPWkgaW5zdGFuY2VvZiBhKX1lbHNlIGg9PT0iT2JqZWN0Ij9mPWQuaXNPYmplY3QoaSk6aD09PSJBcnJheSI/Zj1kLmlzQXJyYXkoaSk6aD09PSJudWxsIj9mPWk9PT1udWxsOmY9aSBpbnN0YW5jZW9mIGE7cmV0dXJue3ZhbGlkOmYsZXhwZWN0ZWRUeXBlOmh9fWZ1bmN0aW9uIHFzKGksYSxmKXtpZihmLmxlbmd0aD09PTApcmV0dXJuJ1Byb3AgdHlwZSBbXSBmb3IgcHJvcCAiJy5jb25jYXQoaSxgIiB3b24ndCBtYXRjaCBhbnl0aGluZy4gRGlkIHlvdSBtZWFuIHRvIHVzZSB0eXBlIEFycmF5IGluc3RlYWQ/YCk7dmFyIGg9J0ludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgIicuY29uY2F0KGksJyIuIEV4cGVjdGVkICcpLmNvbmNhdChmLm1hcChkLmNhcGl0YWxpemUpLmpvaW4oIiB8ICIpKSxDPWZbMF0sUz1kLnRvUmF3VHlwZShhKSxrPWJpKGEsQyksVT1iaShhLFMpO3JldHVybiBmLmxlbmd0aD09PTEmJlhhKEMpJiYheXMoQyxTKSYmKGgrPSIgd2l0aCB2YWx1ZSAiLmNvbmNhdChrKSksaCs9IiwgZ290ICIuY29uY2F0KFMsIiAiKSxYYShTKSYmKGgrPSJ3aXRoIHZhbHVlICIuY29uY2F0KFUsIi4iKSksaH1mdW5jdGlvbiBiaShpLGEpe3JldHVybiBhPT09IlN0cmluZyI/JyInLmNvbmNhdChpLCciJyk6YT09PSJOdW1iZXIiPyIiLmNvbmNhdChOdW1iZXIoaSkpOiIiLmNvbmNhdChpKX1mdW5jdGlvbiBYYShpKXt2YXIgYT1bInN0cmluZyIsIm51bWJlciIsImJvb2xlYW4iXTtyZXR1cm4gYS5zb21lKGY9PmkudG9Mb3dlckNhc2UoKT09PWYpfWZ1bmN0aW9uIHlzKCl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkoaSksZj0wO2Y8aTtmKyspYVtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGEuc29tZShoPT5oLnRvTG93ZXJDYXNlKCk9PT0iYm9vbGVhbiIpfXZhciBFcz1pPT5pWzBdPT09Il8ifHxpPT09IiRzdGFibGUiLFZpPWk9PmQuaXNBcnJheShpKT9pLm1hcChrcik6W2tyKGkpXSxTcz0oaSxhLGYpPT57aWYoYS5fbilyZXR1cm4gYTt2YXIgaD1SZShmdW5jdGlvbigpe3JldHVybiBObiYmKCFmfHxmLnJvb3Q9PT1Obi5yb290KSYmY2UoJ1Nsb3QgIicuY29uY2F0KGksJyIgaW52b2tlZCBvdXRzaWRlIG9mIHRoZSByZW5kZXIgZnVuY3Rpb246IHRoaXMgd2lsbCBub3QgdHJhY2sgZGVwZW5kZW5jaWVzIHVzZWQgaW4gdGhlIHNsb3QuIEludm9rZSB0aGUgc2xvdCBmdW5jdGlvbiBpbnNpZGUgdGhlIHJlbmRlciBmdW5jdGlvbiBpbnN0ZWFkLicpKSxWaShhKC4uLmFyZ3VtZW50cykpfSxmKTtyZXR1cm4gaC5fYz0hMSxofSxRYT0oaSxhLGYpPT57dmFyIGg9aS5fY3R4O2Zvcih2YXIgQyBpbiBpKWlmKCFFcyhDKSl7dmFyIFM9aVtDXTtkLmlzRnVuY3Rpb24oUyk/YVtDXT1TcyhDLFMsaCk6UyE9bnVsbCYmZnVuY3Rpb24oKXtjZSgnTm9uLWZ1bmN0aW9uIHZhbHVlIGVuY291bnRlcmVkIGZvciBzbG90ICInLmNvbmNhdChDLCciLiBQcmVmZXIgZnVuY3Rpb24gc2xvdHMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4nKSk7dmFyIGs9VmkoUyk7YVtDXT0oKT0+a30oKX19LGRjPShpLGEpPT57Rm8oaS52bm9kZSl8fGNlKCJOb24tZnVuY3Rpb24gdmFsdWUgZW5jb3VudGVyZWQgZm9yIGRlZmF1bHQgc2xvdC4gUHJlZmVyIGZ1bmN0aW9uIHNsb3RzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuIik7dmFyIGY9VmkoYSk7aS5zbG90cy5kZWZhdWx0PSgpPT5mfSxHZT0oaSxhKT0+e2lmKGkudm5vZGUuc2hhcGVGbGFnJjMyKXt2YXIgZj1hLl87Zj8oaS5zbG90cz1tLnRvUmF3KGEpLGQuZGVmKGEsIl8iLGYpKTpRYShhLGkuc2xvdHM9e30pfWVsc2UgaS5zbG90cz17fSxhJiZkYyhpLGEpO2QuZGVmKGkuc2xvdHMsWHMsMSl9LEh0PShpLGEsZik9Pnt2YXJ7dm5vZGU6aCxzbG90czpDfT1pLFM9ITAsaz1kLkVNUFRZX09CSjtpZihoLnNoYXBlRmxhZyYzMil7dmFyIFU9YS5fO1U/UHI/KGQuZXh0ZW5kKEMsYSksbS50cmlnZ2VyKGksInNldCIsIiRzbG90cyIpKTpmJiZVPT09MT9TPSExOihkLmV4dGVuZChDLGEpLCFmJiZVPT09MSYmZGVsZXRlIEMuXyk6KFM9IWEuJHN0YWJsZSxRYShhLEMpKSxrPWF9ZWxzZSBhJiYoZGMoaSxhKSxrPXtkZWZhdWx0OjF9KTtpZihTKWZvcih2YXIgQiBpbiBDKSFFcyhCKSYma1tCXT09bnVsbCYmZGVsZXRlIENbQl19O2Z1bmN0aW9uIEl0KGksYSxmLGgpe3ZhciBDPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMTtpZihkLmlzQXJyYXkoaSkpe2kuZm9yRWFjaCgoaHQscWUpPT5JdChodCxhJiYoZC5pc0FycmF5KGEpP2FbcWVdOmEpLGYsaCxDKSk7cmV0dXJufWlmKCEoYm8oaCkmJiFDKSl7dmFyIFM9aC5zaGFwZUZsYWcmND9LbChoLmNvbXBvbmVudCl8fGguY29tcG9uZW50LnByb3h5OmguZWwsaz1DP251bGw6Uyx7aTpVLHI6Qn09aTtpZighVSl7Y2UoIk1pc3NpbmcgcmVmIG93bmVyIGNvbnRleHQuIHJlZiBjYW5ub3QgYmUgdXNlZCBvbiBob2lzdGVkIHZub2Rlcy4gQSB2bm9kZSB3aXRoIHJlZiBtdXN0IGJlIGNyZWF0ZWQgaW5zaWRlIHRoZSByZW5kZXIgZnVuY3Rpb24uIik7cmV0dXJufXZhciBLPWEmJmEucixRPVUucmVmcz09PWQuRU1QVFlfT0JKP1UucmVmcz17fTpVLnJlZnMsZWU9VS5zZXR1cFN0YXRlO2lmKEshPW51bGwmJkshPT1CJiYoZC5pc1N0cmluZyhLKT8oUVtLXT1udWxsLGQuaGFzT3duKGVlLEspJiYoZWVbS109bnVsbCkpOm0uaXNSZWYoSykmJihLLnZhbHVlPW51bGwpKSxkLmlzRnVuY3Rpb24oQikpS24oQixVLDEyLFtrLFFdKTtlbHNle3ZhciBZPWQuaXNTdHJpbmcoQiksdmU9bS5pc1JlZihCKTtpZihZfHx2ZSl7dmFyIFRlPSgpPT57aWYoaS5mKXt2YXIgaHQ9WT9kLmhhc093bihlZSxCKT9lZVtCXTpRW0JdOkIudmFsdWU7Qz9kLmlzQXJyYXkoaHQpJiZkLnJlbW92ZShodCxTKTpkLmlzQXJyYXkoaHQpP2h0LmluY2x1ZGVzKFMpfHxodC5wdXNoKFMpOlk/KFFbQl09W1NdLGQuaGFzT3duKGVlLEIpJiYoZWVbQl09UVtCXSkpOihCLnZhbHVlPVtTXSxpLmsmJihRW2kua109Qi52YWx1ZSkpfWVsc2UgWT8oUVtCXT1rLGQuaGFzT3duKGVlLEIpJiYoZWVbQl09aykpOnZlPyhCLnZhbHVlPWssaS5rJiYoUVtpLmtdPWspKTpjZSgiSW52YWxpZCB0ZW1wbGF0ZSByZWYgdHlwZToiLEIsIigiLmNvbmNhdCh0eXBlb2YgQiwiKSIpKX07az8oVGUuaWQ9LTEsT3IoVGUsZikpOlRlKCl9ZWxzZSBjZSgiSW52YWxpZCB0ZW1wbGF0ZSByZWYgdHlwZToiLEIsIigiLmNvbmNhdCh0eXBlb2YgQiwiKSIpKX19fXZhciB2bj0hMSxxbj1pPT5pLm5hbWVzcGFjZVVSSS5pbmNsdWRlcygic3ZnIikmJmkudGFnTmFtZSE9PSJmb3JlaWduT2JqZWN0IixJcj1pPT5pLm5hbWVzcGFjZVVSSS5pbmNsdWRlcygiTWF0aE1MIiksYXI9aT0+e2lmKHFuKGkpKXJldHVybiJzdmciO2lmKElyKGkpKXJldHVybiJtYXRobWwifSx5aT1pPT5pLm5vZGVUeXBlPT09ODtmdW5jdGlvbiBibChpKXt2YXJ7bXQ6YSxwOmYsbzp7cGF0Y2hQcm9wOmgsY3JlYXRlVGV4dDpDLG5leHRTaWJsaW5nOlMscGFyZW50Tm9kZTprLHJlbW92ZTpVLGluc2VydDpCLGNyZWF0ZUNvbW1lbnQ6S319PWksUT0ob2UsaGUpPT57aWYoIWhlLmhhc0NoaWxkTm9kZXMoKSl7Y2UoIkF0dGVtcHRpbmcgdG8gaHlkcmF0ZSBleGlzdGluZyBtYXJrdXAgYnV0IGNvbnRhaW5lciBpcyBlbXB0eS4gUGVyZm9ybWluZyBmdWxsIG1vdW50IGluc3RlYWQuIiksZihudWxsLG9lLGhlKSxVcigpLGhlLl92bm9kZT1vZTtyZXR1cm59dm49ITEsZWUoaGUuZmlyc3RDaGlsZCxvZSxudWxsLG51bGwsbnVsbCksVXIoKSxoZS5fdm5vZGU9b2Usdm4mJmNvbnNvbGUuZXJyb3IoIkh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuIil9LGVlPWZ1bmN0aW9uKG9lLGhlLF9lLCRlLHN0KXt2YXIgdHQ9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExLHl0PXlpKG9lKSYmb2UuZGF0YT09PSJbIixZZT0oKT0+aHQob2UsaGUsX2UsJGUsc3QseXQpLHt0eXBlOkwscmVmOkcsc2hhcGVGbGFnOnRlLHBhdGNoRmxhZzpiZX09aGUsU2U9b2Uubm9kZVR5cGU7aGUuZWw9b2UsIl9fdm5vZGUiaW4gb2V8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvZSwiX192bm9kZSIse3ZhbHVlOmhlLGVudW1lcmFibGU6ITF9KSwiX192dWVQYXJlbnRDb21wb25lbnQiaW4gb2V8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvZSwiX192dWVQYXJlbnRDb21wb25lbnQiLHt2YWx1ZTpfZSxlbnVtZXJhYmxlOiExfSksYmU9PT0tMiYmKHR0PSExLGhlLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXIgQ2U9bnVsbDtzd2l0Y2goTCl7Y2FzZSBMbjpTZSE9PTM/aGUuY2hpbGRyZW49PT0iIj8oQihoZS5lbD1DKCIiLG9lLnBhcmVudE5vZGUpLGsob2UpLG9lKSxDZT1vZSk6Q2U9WWUoKToob2UuZGF0YSE9PWhlLmNoaWxkcmVuJiYodm49ITAsY2UoIkh5ZHJhdGlvbiB0ZXh0IG1pc21hdGNoIGluIixvZS5wYXJlbnROb2RlLGAKICAtIHJlbmRlcmVkIG9uIHNlcnZlcjogYC5jb25jYXQoSlNPTi5zdHJpbmdpZnkob2UuZGF0YSksYAogIC0gZXhwZWN0ZWQgb24gY2xpZW50OiBgKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoaGUuY2hpbGRyZW4pKSksb2UuZGF0YT1oZS5jaGlsZHJlbiksQ2U9UyhvZSkpO2JyZWFrO2Nhc2UgRG46eHQob2UpPyhDZT1TKG9lKSxOdChoZS5lbD1vZS5jb250ZW50LmZpcnN0Q2hpbGQsb2UsX2UpKTpTZSE9PTh8fHl0P0NlPVllKCk6Q2U9UyhvZSk7YnJlYWs7Y2FzZSBIaTppZih5dCYmKG9lPVMob2UpLFNlPW9lLm5vZGVUeXBlKSxTZT09PTF8fFNlPT09Myl7Q2U9b2U7Zm9yKHZhciBudD0haGUuY2hpbGRyZW4ubGVuZ3RoLFdlPTA7V2U8aGUuc3RhdGljQ291bnQ7V2UrKyludCYmKGhlLmNoaWxkcmVuKz1DZS5ub2RlVHlwZT09PTE/Q2Uub3V0ZXJIVE1MOkNlLmRhdGEpLFdlPT09aGUuc3RhdGljQ291bnQtMSYmKGhlLmFuY2hvcj1DZSksQ2U9UyhDZSk7cmV0dXJuIHl0P1MoQ2UpOkNlfWVsc2UgWWUoKTticmVhaztjYXNlIE1uOnl0P0NlPVRlKG9lLGhlLF9lLCRlLHN0LHR0KTpDZT1ZZSgpO2JyZWFrO2RlZmF1bHQ6aWYodGUmMSkoU2UhPT0xfHxoZS50eXBlLnRvTG93ZXJDYXNlKCkhPT1vZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiYheHQob2UpP0NlPVllKCk6Q2U9WShvZSxoZSxfZSwkZSxzdCx0dCk7ZWxzZSBpZih0ZSY2KXtoZS5zbG90U2NvcGVJZHM9c3Q7dmFyIFFlPWsob2UpO2lmKHl0P0NlPXFlKG9lKTp5aShvZSkmJm9lLmRhdGE9PT0idGVsZXBvcnQgc3RhcnQiP0NlPXFlKG9lLG9lLmRhdGEsInRlbGVwb3J0IGVuZCIpOkNlPVMob2UpLGEoaGUsUWUsbnVsbCxfZSwkZSxhcihRZSksdHQpLGJvKGhlKSl7dmFyIFZlO3l0PyhWZT1zcihNbiksVmUuYW5jaG9yPUNlP0NlLnByZXZpb3VzU2libGluZzpRZS5sYXN0Q2hpbGQpOlZlPW9lLm5vZGVUeXBlPT09Mz92YygiIik6c3IoImRpdiIpLFZlLmVsPW9lLGhlLmNvbXBvbmVudC5zdWJUcmVlPVZlfX1lbHNlIHRlJjY0P1NlIT09OD9DZT1ZZSgpOkNlPWhlLnR5cGUuaHlkcmF0ZShvZSxoZSxfZSwkZSxzdCx0dCxpLHZlKTp0ZSYxMjg/Q2U9aGUudHlwZS5oeWRyYXRlKG9lLGhlLF9lLCRlLGFyKGsob2UpKSxzdCx0dCxpLGVlKTpjZSgiSW52YWxpZCBIb3N0Vk5vZGUgdHlwZToiLEwsIigiLmNvbmNhdCh0eXBlb2YgTCwiKSIpKX1yZXR1cm4gRyE9bnVsbCYmSXQoRyxudWxsLCRlLGhlKSxDZX0sWT0ob2UsaGUsX2UsJGUsc3QsdHQpPT57dHQ9dHR8fCEhaGUuZHluYW1pY0NoaWxkcmVuO3Zhcnt0eXBlOnl0LHByb3BzOlllLHBhdGNoRmxhZzpMLHNoYXBlRmxhZzpHLGRpcnM6dGUsdHJhbnNpdGlvbjpiZX09aGUsU2U9eXQ9PT0iaW5wdXQifHx5dD09PSJvcHRpb24iO3t0ZSYmd3IoaGUsbnVsbCxfZSwiY3JlYXRlZCIpO3ZhciBDZT0hMTtpZih4dChvZSkpe0NlPUNzKCRlLGJlKSYmX2UmJl9lLnZub2RlLnByb3BzJiZfZS52bm9kZS5wcm9wcy5hcHBlYXI7dmFyIG50PW9lLmNvbnRlbnQuZmlyc3RDaGlsZDtDZSYmYmUuYmVmb3JlRW50ZXIobnQpLE50KG50LG9lLF9lKSxoZS5lbD1vZT1udH1pZihHJjE2JiYhKFllJiYoWWUuaW5uZXJIVE1MfHxZZS50ZXh0Q29udGVudCkpKWZvcih2YXIgV2U9dmUob2UuZmlyc3RDaGlsZCxoZSxvZSxfZSwkZSxzdCx0dCksUWU9ITE7V2U7KXt2bj0hMCxRZXx8KGNlKCJIeWRyYXRpb24gY2hpbGRyZW4gbWlzbWF0Y2ggb24iLG9lLGAKU2VydmVyIHJlbmRlcmVkIGVsZW1lbnQgY29udGFpbnMgbW9yZSBjaGlsZCBub2RlcyB0aGFuIGNsaWVudCB2ZG9tLmApLFFlPSEwKTt2YXIgVmU9V2U7V2U9V2UubmV4dFNpYmxpbmcsVShWZSl9ZWxzZSBHJjgmJm9lLnRleHRDb250ZW50IT09aGUuY2hpbGRyZW4mJih2bj0hMCxjZSgiSHlkcmF0aW9uIHRleHQgY29udGVudCBtaXNtYXRjaCBvbiIsb2UsYAogIC0gcmVuZGVyZWQgb24gc2VydmVyOiBgLmNvbmNhdChvZS50ZXh0Q29udGVudCxgCiAgLSBleHBlY3RlZCBvbiBjbGllbnQ6IGApLmNvbmNhdChoZS5jaGlsZHJlbikpLG9lLnRleHRDb250ZW50PWhlLmNoaWxkcmVuKTtpZihZZSlmb3IodmFyIEN0IGluIFllKUZsKG9lLEN0LFllW0N0XSxoZSxfZSkmJih2bj0hMCksKFNlJiYoQ3QuZW5kc1dpdGgoInZhbHVlIil8fEN0PT09ImluZGV0ZXJtaW5hdGUiKXx8ZC5pc09uKEN0KSYmIWQuaXNSZXNlcnZlZFByb3AoQ3QpfHxDdFswXT09PSIuIikmJmgob2UsQ3QsbnVsbCxZZVtDdF0sdm9pZCAwLHZvaWQgMCxfZSk7dmFyIGp0OyhqdD1ZZSYmWWUub25Wbm9kZUJlZm9yZU1vdW50KSYmemkoanQsX2UsaGUpLHRlJiZ3cihoZSxudWxsLF9lLCJiZWZvcmVNb3VudCIpLCgoanQ9WWUmJlllLm9uVm5vZGVNb3VudGVkKXx8dGV8fENlKSYmVigoKT0+e2p0JiZ6aShqdCxfZSxoZSksQ2UmJmJlLmVudGVyKG9lKSx0ZSYmd3IoaGUsbnVsbCxfZSwibW91bnRlZCIpfSwkZSl9cmV0dXJuIG9lLm5leHRTaWJsaW5nfSx2ZT0ob2UsaGUsX2UsJGUsc3QsdHQseXQpPT57eXQ9eXR8fCEhaGUuZHluYW1pY0NoaWxkcmVuO2Zvcih2YXIgWWU9aGUuY2hpbGRyZW4sTD1ZZS5sZW5ndGgsRz0hMSx0ZT0wO3RlPEw7dGUrKyl7dmFyIGJlPXl0P1llW3RlXTpZZVt0ZV09a3IoWWVbdGVdKTtpZihvZSlvZT1lZShvZSxiZSwkZSxzdCx0dCx5dCk7ZWxzZXtpZihiZS50eXBlPT09TG4mJiFiZS5jaGlsZHJlbiljb250aW51ZTt2bj0hMCxHfHwoY2UoIkh5ZHJhdGlvbiBjaGlsZHJlbiBtaXNtYXRjaCBvbiIsX2UsYApTZXJ2ZXIgcmVuZGVyZWQgZWxlbWVudCBjb250YWlucyBmZXdlciBjaGlsZCBub2RlcyB0aGFuIGNsaWVudCB2ZG9tLmApLEc9ITApLGYobnVsbCxiZSxfZSxudWxsLCRlLHN0LGFyKF9lKSx0dCl9fXJldHVybiBvZX0sVGU9KG9lLGhlLF9lLCRlLHN0LHR0KT0+e3ZhcntzbG90U2NvcGVJZHM6eXR9PWhlO3l0JiYoc3Q9c3Q/c3QuY29uY2F0KHl0KTp5dCk7dmFyIFllPWsob2UpLEw9dmUoUyhvZSksaGUsWWUsX2UsJGUsc3QsdHQpO3JldHVybiBMJiZ5aShMKSYmTC5kYXRhPT09Il0iP1MoaGUuYW5jaG9yPUwpOih2bj0hMCxCKGhlLmFuY2hvcj1LKCJdIixZZSksWWUsTCksTCl9LGh0PShvZSxoZSxfZSwkZSxzdCx0dCk9PntpZih2bj0hMCxjZShgSHlkcmF0aW9uIG5vZGUgbWlzbWF0Y2g6Ci0gcmVuZGVyZWQgb24gc2VydmVyOmAsb2Usb2Uubm9kZVR5cGU9PT0zPyIodGV4dCkiOnlpKG9lKSYmb2UuZGF0YT09PSJbIj8iKHN0YXJ0IG9mIGZyYWdtZW50KSI6IiIsYAotIGV4cGVjdGVkIG9uIGNsaWVudDpgLGhlLnR5cGUpLGhlLmVsPW51bGwsdHQpZm9yKHZhciB5dD1xZShvZSk7Oyl7dmFyIFllPVMob2UpO2lmKFllJiZZZSE9PXl0KVUoWWUpO2Vsc2UgYnJlYWt9dmFyIEw9UyhvZSksRz1rKG9lKTtyZXR1cm4gVShvZSksZihudWxsLGhlLEcsTCxfZSwkZSxhcihHKSxzdCksTH0scWU9ZnVuY3Rpb24ob2Upe2Zvcih2YXIgaGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiJbIixfZT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Il0iLCRlPTA7b2U7KWlmKG9lPVMob2UpLG9lJiZ5aShvZSkmJihvZS5kYXRhPT09aGUmJiRlKyssb2UuZGF0YT09PV9lKSl7aWYoJGU9PT0wKXJldHVybiBTKG9lKTskZS0tfXJldHVybiBvZX0sTnQ9KG9lLGhlLF9lKT0+e3ZhciAkZT1oZS5wYXJlbnROb2RlOyRlJiYkZS5yZXBsYWNlQ2hpbGQob2UsaGUpO2Zvcih2YXIgc3Q9X2U7c3Q7KXN0LnZub2RlLmVsPT09aGUmJihzdC52bm9kZS5lbD1zdC5zdWJUcmVlLmVsPW9lKSxzdD1zdC5wYXJlbnR9LHh0PW9lPT5vZS5ub2RlVHlwZT09PTEmJm9lLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PSJ0ZW1wbGF0ZSI7cmV0dXJuW1EsZWVdfWZ1bmN0aW9uIEZsKGksYSxmLGgsQyl7dmFyIFMsayxVLEIsSztpZihhPT09ImNsYXNzIilCPWkuZ2V0QXR0cmlidXRlKCJjbGFzcyIpLEs9ZC5ub3JtYWxpemVDbGFzcyhmKSxwYyh5bChCfHwiIikseWwoSykpfHwoaz1VPSJjbGFzcyIpO2Vsc2UgaWYoYT09PSJzdHlsZSIpe0I9aS5nZXRBdHRyaWJ1dGUoInN0eWxlIiksSz1kLmlzU3RyaW5nKGYpP2Y6ZC5zdHJpbmdpZnlTdHlsZShkLm5vcm1hbGl6ZVN0eWxlKGYpKTt2YXIgUT1XYyhCKSxlZT1XYyhLKTtpZihoLmRpcnMpZm9yKHZhcntkaXI6WSx2YWx1ZTp2ZX1vZiBoLmRpcnMpWS5uYW1lPT09InNob3ciJiYhdmUmJmVlLnNldCgiZGlzcGxheSIsIm5vbmUiKTt2YXIgVGU9Qz09bnVsbD92b2lkIDA6Qy5zdWJUcmVlO2lmKGg9PT1UZXx8KFRlPT1udWxsP3ZvaWQgMDpUZS50eXBlKT09PU1uJiZUZS5jaGlsZHJlbi5pbmNsdWRlcyhoKSl7dmFyIGh0PShTPUM9PW51bGw/dm9pZCAwOkMuZ2V0Q3NzVmFycyk9PW51bGw/dm9pZCAwOlMuY2FsbChDKTtmb3IodmFyIHFlIGluIGh0KWVlLnNldCgiLS0iLmNvbmNhdChxZSksU3RyaW5nKGh0W3FlXSkpfWFhKFEsZWUpfHwoaz1VPSJzdHlsZSIpfWVsc2UoaSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQmJmQuaXNLbm93blN2Z0F0dHIoYSl8fGkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmKGQuaXNCb29sZWFuQXR0cihhKXx8ZC5pc0tub3duSHRtbEF0dHIoYSkpKSYmKGQuaXNCb29sZWFuQXR0cihhKT8oQj1pLmhhc0F0dHJpYnV0ZShhKSxLPWQuaW5jbHVkZUJvb2xlYW5BdHRyKGYpKTpmPT1udWxsPyhCPWkuaGFzQXR0cmlidXRlKGEpLEs9ITEpOihpLmhhc0F0dHJpYnV0ZShhKT9CPWkuZ2V0QXR0cmlidXRlKGEpOmE9PT0idmFsdWUiJiZpLnRhZ05hbWU9PT0iVEVYVEFSRUEiP0I9aS52YWx1ZTpCPSExLEs9ZC5pc1JlbmRlcmFibGVBdHRyVmFsdWUoZik/U3RyaW5nKGYpOiExKSxCIT09SyYmKGs9ImF0dHJpYnV0ZSIsVT1hKSk7aWYoayl7dmFyIE50PWhlPT5oZT09PSExPyIobm90IHJlbmRlcmVkKSI6IiIuY29uY2F0KFUsJz0iJykuY29uY2F0KGhlLCciJykseHQ9Ikh5ZHJhdGlvbiAiLmNvbmNhdChrLCIgbWlzbWF0Y2ggb24iKSxvZT1gCiAgLSByZW5kZXJlZCBvbiBzZXJ2ZXI6IGAuY29uY2F0KE50KEIpLGAKICAtIGV4cGVjdGVkIG9uIGNsaWVudDogYCkuY29uY2F0KE50KEspLGAKICBOb3RlOiB0aGlzIG1pc21hdGNoIGlzIGNoZWNrLW9ubHkuIFRoZSBET00gd2lsbCBub3QgYmUgcmVjdGlmaWVkIGluIHByb2R1Y3Rpb24gZHVlIHRvIHBlcmZvcm1hbmNlIG92ZXJoZWFkLgogIFlvdSBzaG91bGQgZml4IHRoZSBzb3VyY2Ugb2YgdGhlIG1pc21hdGNoLmApO3JldHVybiBjZSh4dCxpLG9lKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiB5bChpKXtyZXR1cm4gbmV3IFNldChpLnRyaW0oKS5zcGxpdCgvXHMrLykpfWZ1bmN0aW9uIHBjKGksYSl7aWYoaS5zaXplIT09YS5zaXplKXJldHVybiExO2Zvcih2YXIgZiBvZiBpKWlmKCFhLmhhcyhmKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBXYyhpKXt2YXIgYT1uZXcgTWFwO2Zvcih2YXIgZiBvZiBpLnNwbGl0KCI7Iikpe3ZhcltoLENdPWYuc3BsaXQoIjoiKTtoPWg9PW51bGw/dm9pZCAwOmgudHJpbSgpLEM9Qz09bnVsbD92b2lkIDA6Qy50cmltKCksaCYmQyYmYS5zZXQoaCxDKX1yZXR1cm4gYX1mdW5jdGlvbiBhYShpLGEpe2lmKGkuc2l6ZSE9PWEuc2l6ZSlyZXR1cm4hMTtmb3IodmFyW2YsaF1vZiBpKWlmKGghPT1hLmdldChmKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgQ28sbGk7ZnVuY3Rpb24gY2koaSxhKXtpLmFwcENvbnRleHQuY29uZmlnLnBlcmZvcm1hbmNlJiZWbCgpJiZsaS5tYXJrKCJ2dWUtIi5jb25jYXQoYSwiLSIpLmNvbmNhdChpLnVpZCkpLE9hKGksYSxWbCgpP2xpLm5vdygpOkRhdGUubm93KCkpfWZ1bmN0aW9uIEFvKGksYSl7aWYoaS5hcHBDb250ZXh0LmNvbmZpZy5wZXJmb3JtYW5jZSYmVmwoKSl7dmFyIGY9InZ1ZS0iLmNvbmNhdChhLCItIikuY29uY2F0KGkudWlkKSxoPWYrIjplbmQiO2xpLm1hcmsoaCksbGkubWVhc3VyZSgiPCIuY29uY2F0KG9zKGksaS50eXBlKSwiPiAiKS5jb25jYXQoYSksZixoKSxsaS5jbGVhck1hcmtzKGYpLGxpLmNsZWFyTWFya3MoaCl9TGkoaSxhLFZsKCk/bGkubm93KCk6RGF0ZS5ub3coKSl9ZnVuY3Rpb24gVmwoKXtyZXR1cm4gQ28hPT12b2lkIDB8fCh0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LnBlcmZvcm1hbmNlPyhDbz0hMCxsaT13aW5kb3cucGVyZm9ybWFuY2UpOkNvPSExKSxDb31mdW5jdGlvbiBqcigpe3ZhciBpPVtdO2lmKGkubGVuZ3RoKXt2YXIgYT1pLmxlbmd0aD4xO2NvbnNvbGUud2FybigiRmVhdHVyZSBmbGFnIi5jb25jYXQoYT8icyI6IiIsIiAiKS5jb25jYXQoaS5qb2luKCIsICIpLCIgIikuY29uY2F0KGE/ImFyZSI6ImlzIixgIG5vdCBleHBsaWNpdGx5IGRlZmluZWQuIFlvdSBhcmUgcnVubmluZyB0aGUgZXNtLWJ1bmRsZXIgYnVpbGQgb2YgVnVlLCB3aGljaCBleHBlY3RzIHRoZXNlIGNvbXBpbGUtdGltZSBmZWF0dXJlIGZsYWdzIHRvIGJlIGdsb2JhbGx5IGluamVjdGVkIHZpYSB0aGUgYnVuZGxlciBjb25maWcgaW4gb3JkZXIgdG8gZ2V0IGJldHRlciB0cmVlLXNoYWtpbmcgaW4gdGhlIHByb2R1Y3Rpb24gYnVuZGxlLgoKRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vbGluay52dWVqcy5vcmcvZmVhdHVyZS1mbGFncy5gKSl9fXZhciBPcj1WO2Z1bmN0aW9uIFlzKGkpe3JldHVybiBLcyhpKX1mdW5jdGlvbiB3cyhpKXtyZXR1cm4gS3MoaSxibCl9ZnVuY3Rpb24gS3MoaSxhKXtqcigpO3ZhciBmPWQuZ2V0R2xvYmFsVGhpcygpO2YuX19WVUVfXz0hMCxZbyhmLl9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX18sZik7dmFye2luc2VydDpoLHJlbW92ZTpDLHBhdGNoUHJvcDpTLGZvcmNlUGF0Y2hQcm9wOmssY3JlYXRlRWxlbWVudDpVLGNyZWF0ZVRleHQ6QixjcmVhdGVDb21tZW50Okssc2V0VGV4dDpRLHNldEVsZW1lbnRUZXh0OmVlLHBhcmVudE5vZGU6WSxuZXh0U2libGluZzp2ZSxzZXRTY29wZUlkOlRlPWQuTk9PUCxpbnNlcnRTdGF0aWNDb250ZW50Omh0fT1pLHFlPWZ1bmN0aW9uKGoscmUsUGUpe3ZhciBEZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbCxqZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxydD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bnVsbCxndD1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06dm9pZCAwLExlPWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XTpudWxsLGl0PWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTpQcj8hMTohIXJlLmR5bmFtaWNDaGlsZHJlbjtpZihqIT09cmUpe2omJiFvbyhqLHJlKSYmKERlPWVpKGopLEJ0KGosamUscnQsITApLGo9bnVsbCkscmUucGF0Y2hGbGFnPT09LTImJihpdD0hMSxyZS5keW5hbWljQ2hpbGRyZW49bnVsbCk7dmFye3R5cGU6SmUscmVmOk10LHNoYXBlRmxhZzpKdH09cmU7c3dpdGNoKEplKXtjYXNlIExuOk50KGoscmUsUGUsRGUpO2JyZWFrO2Nhc2UgRG46eHQoaixyZSxQZSxEZSk7YnJlYWs7Y2FzZSBIaTpqPT1udWxsP29lKHJlLFBlLERlLGd0KTpoZShqLHJlLFBlLGd0KTticmVhaztjYXNlIE1uOmJlKGoscmUsUGUsRGUsamUscnQsZ3QsTGUsaXQpO2JyZWFrO2RlZmF1bHQ6SnQmMT9zdChqLHJlLFBlLERlLGplLHJ0LGd0LExlLGl0KTpKdCY2P1NlKGoscmUsUGUsRGUsamUscnQsZ3QsTGUsaXQpOkp0JjY0fHxKdCYxMjg/SmUucHJvY2VzcyhqLHJlLFBlLERlLGplLHJ0LGd0LExlLGl0LFNpKTpjZSgiSW52YWxpZCBWTm9kZSB0eXBlOiIsSmUsIigiLmNvbmNhdCh0eXBlb2YgSmUsIikiKSl9TXQhPW51bGwmJmplJiZJdChNdCxqJiZqLnJlZixydCxyZXx8aiwhcmUpfX0sTnQ9KGoscmUsUGUsRGUpPT57aWYoaj09bnVsbCloKHJlLmVsPUIocmUuY2hpbGRyZW4sUGUpLFBlLERlKTtlbHNle3ZhciBqZT1yZS5lbD1qLmVsO3JlLmNoaWxkcmVuIT09ai5jaGlsZHJlbiYmUShqZSxyZS5jaGlsZHJlbil9fSx4dD0oaixyZSxQZSxEZSk9PntqPT1udWxsP2gocmUuZWw9SyhyZS5jaGlsZHJlbnx8IiIsUGUpLFBlLERlKTpyZS5lbD1qLmVsfSxvZT0oaixyZSxQZSxEZSk9Pntbai5lbCxqLmFuY2hvcl09aHQoai5jaGlsZHJlbixyZSxQZSxEZSxqLmVsLGouYW5jaG9yKX0saGU9KGoscmUsUGUsRGUpPT57aWYocmUuY2hpbGRyZW4hPT1qLmNoaWxkcmVuKXt2YXIgamU9dmUoai5hbmNob3IpOyRlKGopLFtyZS5lbCxyZS5hbmNob3JdPWh0KHJlLmNoaWxkcmVuLFBlLGplLERlKX1lbHNlIHJlLmVsPWouZWwscmUuYW5jaG9yPWouYW5jaG9yfSxfZT0oaixyZSxQZSk9Pntmb3IodmFye2VsOkRlLGFuY2hvcjpqZX09aixydDtEZSYmRGUhPT1qZTspcnQ9dmUoRGUpLGgoRGUscmUsUGUpLERlPXJ0O2goamUscmUsUGUpfSwkZT1qPT57Zm9yKHZhcntlbDpyZSxhbmNob3I6UGV9PWosRGU7cmUmJnJlIT09UGU7KURlPXZlKHJlKSxDKHJlKSxyZT1EZTtDKFBlKX0sc3Q9KGoscmUsUGUsRGUsamUscnQsZ3QsTGUsaXQpPT57cmUudHlwZT09PSJzdmciP2d0PSJzdmciOnJlLnR5cGU9PT0ibWF0aCImJihndD0ibWF0aG1sIiksaj09bnVsbD90dChyZSxQZSxEZSxqZSxydCxndCxMZSxpdCk6TChqLHJlLGplLHJ0LGd0LExlLGl0KX0sdHQ9KGoscmUsUGUsRGUsamUscnQsZ3QsTGUpPT57dmFyIGl0LEplLHtwcm9wczpNdCxzaGFwZUZsYWc6SnQsdHJhbnNpdGlvbjpZdCxkaXJzOklufT1qO2lmKGl0PWouZWw9VShqLnR5cGUscmUpLEp0Jjg/ZWUoaXQsai5jaGlsZHJlbik6SnQmMTYmJlllKGouY2hpbGRyZW4saXQsbnVsbCxEZSxqZSxzYShqLHJ0KSxndCxMZSksSW4mJndyKGosbnVsbCxEZSwiY3JlYXRlZCIpLHl0KGl0LGosai5zY29wZUlkLGd0LERlKSxNdCl7Zm9yKHZhciB0aSBpbiBNdCl0aSE9PSJ2YWx1ZSImJiFkLmlzUmVzZXJ2ZWRQcm9wKHRpKSYmUyhpdCx0aSxudWxsLE10W3RpXSxydCxqLmNoaWxkcmVuLERlLGplLHduKTsidmFsdWUiaW4gTXQmJlMoaXQsInZhbHVlIixudWxsLE10LnZhbHVlLHJ0KSwoSmU9TXQub25Wbm9kZUJlZm9yZU1vdW50KSYmemkoSmUsRGUsail9T2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCJfX3Zub2RlIix7dmFsdWU6aixlbnVtZXJhYmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCJfX3Z1ZVBhcmVudENvbXBvbmVudCIse3ZhbHVlOkRlLGVudW1lcmFibGU6ITF9KSxJbiYmd3IoaixudWxsLERlLCJiZWZvcmVNb3VudCIpO3ZhciBfcj1DcyhqZSxZdCk7X3ImJll0LmJlZm9yZUVudGVyKGl0KSxoKGl0LHJlLFBlKSwoKEplPU10JiZNdC5vblZub2RlTW91bnRlZCl8fF9yfHxJbikmJk9yKCgpPT57SmUmJnppKEplLERlLGopLF9yJiZZdC5lbnRlcihpdCksSW4mJndyKGosbnVsbCxEZSwibW91bnRlZCIpfSxqZSl9LHl0PShqLHJlLFBlLERlLGplKT0+e2lmKFBlJiZUZShqLFBlKSxEZSlmb3IodmFyIHJ0PTA7cnQ8RGUubGVuZ3RoO3J0KyspVGUoaixEZVtydF0pO2lmKGplKXt2YXIgZ3Q9amUuc3ViVHJlZTtpZihndC5wYXRjaEZsYWc+MCYmZ3QucGF0Y2hGbGFnJjIwNDgmJihndD1PaShndC5jaGlsZHJlbil8fGd0KSxyZT09PWd0KXt2YXIgTGU9amUudm5vZGU7eXQoaixMZSxMZS5zY29wZUlkLExlLnNsb3RTY29wZUlkcyxqZS5wYXJlbnQpfX19LFllPWZ1bmN0aW9uKGoscmUsUGUsRGUsamUscnQsZ3QsTGUpe2Zvcih2YXIgaXQ9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOjAsSmU9aXQ7SmU8ai5sZW5ndGg7SmUrKyl7dmFyIE10PWpbSmVdPUxlP1dvKGpbSmVdKTprcihqW0plXSk7cWUobnVsbCxNdCxyZSxQZSxEZSxqZSxydCxndCxMZSl9fSxMPShqLHJlLFBlLERlLGplLHJ0LGd0KT0+e3ZhciBMZT1yZS5lbD1qLmVsLHtwYXRjaEZsYWc6aXQsZHluYW1pY0NoaWxkcmVuOkplLGRpcnM6TXR9PXJlO2l0fD1qLnBhdGNoRmxhZyYxNjt2YXIgSnQ9ai5wcm9wc3x8ZC5FTVBUWV9PQkosWXQ9cmUucHJvcHN8fGQuRU1QVFlfT0JKLEluO2lmKFBlJiZVaShQZSwhMSksKEluPVl0Lm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZ6aShJbixQZSxyZSxqKSxNdCYmd3IocmUsaixQZSwiYmVmb3JlVXBkYXRlIiksUGUmJlVpKFBlLCEwKSxQciYmKGl0PTAsZ3Q9ITEsSmU9bnVsbCksSmU/KEcoai5keW5hbWljQ2hpbGRyZW4sSmUsTGUsUGUsRGUsc2EocmUsamUpLHJ0KSxVbChqLHJlKSk6Z3R8fFZlKGoscmUsTGUsbnVsbCxQZSxEZSxzYShyZSxqZSkscnQsITEpLGl0PjApe2lmKGl0JjE2KXRlKExlLHJlLEp0LFl0LFBlLERlLGplKTtlbHNlIGlmKGl0JjImJkp0LmNsYXNzIT09WXQuY2xhc3MmJlMoTGUsImNsYXNzIixudWxsLFl0LmNsYXNzLGplKSxpdCY0JiZTKExlLCJzdHlsZSIsSnQuc3R5bGUsWXQuc3R5bGUsamUpLGl0JjgpZm9yKHZhciB0aT1yZS5keW5hbWljUHJvcHMsX3I9MDtfcjx0aS5sZW5ndGg7X3IrKyl7dmFyIFdpPXRpW19yXSxScz1KdFtXaV0sb2w9WXRbV2ldOyhvbCE9PVJzfHxXaT09PSJ2YWx1ZSJ8fGsmJmsoTGUsV2kpKSYmUyhMZSxXaSxScyxvbCxqZSxqLmNoaWxkcmVuLFBlLERlLHduKX1pdCYxJiZqLmNoaWxkcmVuIT09cmUuY2hpbGRyZW4mJmVlKExlLHJlLmNoaWxkcmVuKX1lbHNlIWd0JiZKZT09bnVsbCYmdGUoTGUscmUsSnQsWXQsUGUsRGUsamUpOygoSW49WXQub25Wbm9kZVVwZGF0ZWQpfHxNdCkmJk9yKCgpPT57SW4mJnppKEluLFBlLHJlLGopLE10JiZ3cihyZSxqLFBlLCJ1cGRhdGVkIil9LERlKX0sRz0oaixyZSxQZSxEZSxqZSxydCxndCk9Pntmb3IodmFyIExlPTA7TGU8cmUubGVuZ3RoO0xlKyspe3ZhciBpdD1qW0xlXSxKZT1yZVtMZV0sTXQ9aXQuZWwmJihpdC50eXBlPT09TW58fCFvbyhpdCxKZSl8fGl0LnNoYXBlRmxhZyYoNnw2NCkpP1koaXQuZWwpOlBlO3FlKGl0LEplLE10LG51bGwsRGUsamUscnQsZ3QsITApfX0sdGU9KGoscmUsUGUsRGUsamUscnQsZ3QpPT57aWYoUGUhPT1EZSl7aWYoUGUhPT1kLkVNUFRZX09CSilmb3IodmFyIExlIGluIFBlKSFkLmlzUmVzZXJ2ZWRQcm9wKExlKSYmIShMZSBpbiBEZSkmJlMoaixMZSxQZVtMZV0sbnVsbCxndCxyZS5jaGlsZHJlbixqZSxydCx3bik7Zm9yKHZhciBpdCBpbiBEZSlpZighZC5pc1Jlc2VydmVkUHJvcChpdCkpe3ZhciBKZT1EZVtpdF0sTXQ9UGVbaXRdOyhKZSE9PU10JiZpdCE9PSJ2YWx1ZSJ8fGsmJmsoaixpdCkpJiZTKGosaXQsTXQsSmUsZ3QscmUuY2hpbGRyZW4samUscnQsd24pfSJ2YWx1ZSJpbiBEZSYmUyhqLCJ2YWx1ZSIsUGUudmFsdWUsRGUudmFsdWUsZ3QpfX0sYmU9KGoscmUsUGUsRGUsamUscnQsZ3QsTGUsaXQpPT57dmFyIEplPXJlLmVsPWo/ai5lbDpCKCIiLFBlKSxNdD1yZS5hbmNob3I9aj9qLmFuY2hvcjpCKCIiLFBlKSx7cGF0Y2hGbGFnOkp0LGR5bmFtaWNDaGlsZHJlbjpZdCxzbG90U2NvcGVJZHM6SW59PXJlOyhQcnx8SnQmMjA0OCkmJihKdD0wLGl0PSExLFl0PW51bGwpLEluJiYoTGU9TGU/TGUuY29uY2F0KEluKTpJbiksaj09bnVsbD8oaChKZSxQZSxEZSksaChNdCxQZSxEZSksWWUocmUuY2hpbGRyZW58fFtdLFBlLE10LGplLHJ0LGd0LExlLGl0KSk6SnQ+MCYmSnQmNjQmJll0JiZqLmR5bmFtaWNDaGlsZHJlbj8oRyhqLmR5bmFtaWNDaGlsZHJlbixZdCxQZSxqZSxydCxndCxMZSksVWwoaixyZSkpOlZlKGoscmUsUGUsTXQsamUscnQsZ3QsTGUsaXQpfSxTZT0oaixyZSxQZSxEZSxqZSxydCxndCxMZSxpdCk9PntyZS5zbG90U2NvcGVJZHM9TGUsaj09bnVsbD9yZS5zaGFwZUZsYWcmNTEyP2plLmN0eC5hY3RpdmF0ZShyZSxQZSxEZSxndCxpdCk6Q2UocmUsUGUsRGUsamUscnQsZ3QsaXQpOm50KGoscmUsaXQpfSxDZT0oaixyZSxQZSxEZSxqZSxydCxndCk9Pnt2YXIgTGU9ai5jb21wb25lbnQ9cHIoaixEZSxqZSk7aWYoTGUudHlwZS5fX2htcklkJiZSbyhMZSksYXQoaiksY2koTGUsIm1vdW50IiksRm8oaikmJihMZS5jdHgucmVuZGVyZXI9U2kpLGNpKExlLCJpbml0IiksR2MoTGUpLEFvKExlLCJpbml0IiksTGUuYXN5bmNEZXApe2lmKGplJiZqZS5yZWdpc3RlckRlcChMZSxXZSksIWouZWwpe3ZhciBpdD1MZS5zdWJUcmVlPXNyKERuKTt4dChudWxsLGl0LHJlLFBlKX19ZWxzZSBXZShMZSxqLHJlLFBlLGplLHJ0LGd0KTtpZihMZS4kd3hzTW9kdWxlcyl7dmFyIEplPUkucmVzb2x2ZU93bmVyRWwoTGUsITApO0plLmxlbmd0aCYmSmUuZm9yRWFjaChNdD0+e010LnNldEF0dHJpYnV0ZShJLkFUVFJfVl9PV05FUl9JRCxMZS51aWQpO3ZhcnskcmVuZGVyanNNb2R1bGVzOkp0fT1MZS50eXBlO0p0JiZNdC5zZXRBdHRyaWJ1dGUoSS5BVFRSX1ZfUkVOREVSSlMsSnQpfSl9RXQoKSxBbyhMZSwibW91bnQiKX0sbnQ9KGoscmUsUGUpPT57dmFyIERlPXJlLmNvbXBvbmVudD1qLmNvbXBvbmVudDtpZihEaShqLHJlLFBlKSlpZihEZS5hc3luY0RlcCYmIURlLmFzeW5jUmVzb2x2ZWQpe2F0KHJlKSxRZShEZSxyZSxQZSksRXQoKTtyZXR1cm59ZWxzZSBEZS5uZXh0PXJlLERyKERlLnVwZGF0ZSksRGUuZWZmZWN0LmRpcnR5PSEwLERlLnVwZGF0ZSgpO2Vsc2UgcmUuZWw9ai5lbCxEZS52bm9kZT1yZX0sV2U9KGoscmUsUGUsRGUsamUscnQsZ3QpPT57dmFyIExlPSgpPT57aWYoai5pc01vdW50ZWQpe3ZhcntuZXh0OnhyLGJ1OlBsLHU6eHMscGFyZW50OmNvLHZub2RlOmFsfT1qO3t2YXIgc2w9aGMoaik7aWYoc2wpe3hyJiYoeHIuZWw9YWwuZWwsUWUoaix4cixndCkpLHNsLmFzeW5jRGVwLnRoZW4oKCk9PntqLmlzVW5tb3VudGVkfHxMZSgpfSk7cmV0dXJufX12YXIgVGM9eHIsTmw7YXQoeHJ8fGoudm5vZGUpLFVpKGosITEpLHhyPyh4ci5lbD1hbC5lbCxRZShqLHhyLGd0KSk6eHI9YWwsUGwmJmQuaW52b2tlQXJyYXlGbnMoUGwpLChObD14ci5wcm9wcyYmeHIucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJnppKE5sLGNvLHhyLGFsKSxVaShqLCEwKSxjaShqLCJyZW5kZXIiKTt2YXIgY3M9bW8oaik7QW8oaiwicmVuZGVyIik7dmFyIHVzPWouc3ViVHJlZTtqLnN1YlRyZWU9Y3MsY2koaiwicGF0Y2giKSxxZSh1cyxjcyxZKHVzLmVsKSxlaSh1cyksaixqZSxydCksQW8oaiwicGF0Y2giKSx4ci5lbD1jcy5lbCxUYz09PW51bGwmJnlyKGosY3MuZWwpLHhzJiZPcih4cyxqZSksKE5sPXhyLnByb3BzJiZ4ci5wcm9wcy5vblZub2RlVXBkYXRlZCkmJk9yKCgpPT56aShObCxjbyx4cixhbCksamUpLEFhKGopLEV0KCl9ZWxzZXt2YXIgTXQse2VsOkp0LHByb3BzOll0fT1yZSx7Ym06SW4sbTp0aSxwYXJlbnQ6X3J9PWosV2k9Ym8ocmUpO2lmKFVpKGosITEpLEluJiZkLmludm9rZUFycmF5Rm5zKEluKSwhV2kmJihNdD1ZdCYmWXQub25Wbm9kZUJlZm9yZU1vdW50KSYmemkoTXQsX3IscmUpLFVpKGosITApLEp0JiZ3aSl7dmFyIFJzPSgpPT57Y2koaiwicmVuZGVyIiksai5zdWJUcmVlPW1vKGopLEFvKGosInJlbmRlciIpLGNpKGosImh5ZHJhdGUiKSx3aShKdCxqLnN1YlRyZWUsaixqZSxudWxsKSxBbyhqLCJoeWRyYXRlIil9O1dpP3JlLnR5cGUuX19hc3luY0xvYWRlcigpLnRoZW4oKCk9PiFqLmlzVW5tb3VudGVkJiZScygpKTpScygpfWVsc2V7Y2koaiwicmVuZGVyIik7dmFyIG9sPWouc3ViVHJlZT1tbyhqKTtBbyhqLCJyZW5kZXIiKSxjaShqLCJwYXRjaCIpLHFlKG51bGwsb2wsUGUsRGUsaixqZSxydCksQW8oaiwicGF0Y2giKSxyZS5lbD1vbC5lbH1pZih0aSYmT3IodGksamUpLCFXaSYmKE10PVl0JiZZdC5vblZub2RlTW91bnRlZCkpe3ZhciBsdT1yZTtPcigoKT0+emkoTXQsX3IsbHUpLGplKX0ocmUuc2hhcGVGbGFnJjI1Nnx8X3ImJmJvKF9yLnZub2RlKSYmX3Iudm5vZGUuc2hhcGVGbGFnJjI1NikmJmouYSYmT3Ioai5hLGplKSxqLmlzTW91bnRlZD0hMCxZcihqKSxyZT1QZT1EZT1udWxsfX0saXQ9ai5lZmZlY3Q9bmV3IG0uUmVhY3RpdmVFZmZlY3QoTGUsZC5OT09QLCgpPT5hbihKZSksai5zY29wZSksSmU9ai51cGRhdGU9KCk9PntpdC5kaXJ0eSYmaXQucnVuKCl9O0plLmlkPWoudWlkLFVpKGosITApLGl0Lm9uVHJhY2s9ai5ydGM/TXQ9PmQuaW52b2tlQXJyYXlGbnMoai5ydGMsTXQpOnZvaWQgMCxpdC5vblRyaWdnZXI9ai5ydGc/TXQ9PmQuaW52b2tlQXJyYXlGbnMoai5ydGcsTXQpOnZvaWQgMCxKZS5vd25lckluc3RhbmNlPWosSmUoKX0sUWU9KGoscmUsUGUpPT57cmUuY29tcG9uZW50PWo7dmFyIERlPWoudm5vZGUucHJvcHM7ai52bm9kZT1yZSxqLm5leHQ9bnVsbCx6byhqLHJlLnByb3BzLERlLFBlKSxIdChqLHJlLmNoaWxkcmVuLFBlKSxtLnBhdXNlVHJhY2tpbmcoKSxxcihqKSxtLnJlc2V0VHJhY2tpbmcoKX0sVmU9ZnVuY3Rpb24oaixyZSxQZSxEZSxqZSxydCxndCxMZSl7dmFyIGl0PWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTohMSxKZT1qJiZqLmNoaWxkcmVuLE10PWo/ai5zaGFwZUZsYWc6MCxKdD1yZS5jaGlsZHJlbix7cGF0Y2hGbGFnOll0LHNoYXBlRmxhZzpJbn09cmU7aWYoWXQ+MCl7aWYoWXQmMTI4KXtqdChKZSxKdCxQZSxEZSxqZSxydCxndCxMZSxpdCk7cmV0dXJufWVsc2UgaWYoWXQmMjU2KXtDdChKZSxKdCxQZSxEZSxqZSxydCxndCxMZSxpdCk7cmV0dXJufX1JbiY4PyhNdCYxNiYmd24oSmUsamUscnQpLEp0IT09SmUmJmVlKFBlLEp0KSk6TXQmMTY/SW4mMTY/anQoSmUsSnQsUGUsRGUsamUscnQsZ3QsTGUsaXQpOnduKEplLGplLHJ0LCEwKTooTXQmOCYmZWUoUGUsIiIpLEluJjE2JiZZZShKdCxQZSxEZSxqZSxydCxndCxMZSxpdCkpfSxDdD0oaixyZSxQZSxEZSxqZSxydCxndCxMZSxpdCk9PntqPWp8fGQuRU1QVFlfQVJSLHJlPXJlfHxkLkVNUFRZX0FSUjt2YXIgSmU9ai5sZW5ndGgsTXQ9cmUubGVuZ3RoLEp0PU1hdGgubWluKEplLE10KSxZdDtmb3IoWXQ9MDtZdDxKdDtZdCsrKXt2YXIgSW49cmVbWXRdPWl0P1dvKHJlW1l0XSk6a3IocmVbWXRdKTtxZShqW1l0XSxJbixQZSxudWxsLGplLHJ0LGd0LExlLGl0KX1KZT5NdD93bihqLGplLHJ0LCEwLCExLEp0KTpZZShyZSxQZSxEZSxqZSxydCxndCxMZSxpdCxKdCl9LGp0PShqLHJlLFBlLERlLGplLHJ0LGd0LExlLGl0KT0+e2Zvcih2YXIgSmU9MCxNdD1yZS5sZW5ndGgsSnQ9ai5sZW5ndGgtMSxZdD1NdC0xO0plPD1KdCYmSmU8PVl0Oyl7dmFyIEluPWpbSmVdLHRpPXJlW0plXT1pdD9XbyhyZVtKZV0pOmtyKHJlW0plXSk7aWYob28oSW4sdGkpKXFlKEluLHRpLFBlLG51bGwsamUscnQsZ3QsTGUsaXQpO2Vsc2UgYnJlYWs7SmUrK31mb3IoO0plPD1KdCYmSmU8PVl0Oyl7dmFyIF9yPWpbSnRdLFdpPXJlW1l0XT1pdD9XbyhyZVtZdF0pOmtyKHJlW1l0XSk7aWYob28oX3IsV2kpKXFlKF9yLFdpLFBlLG51bGwsamUscnQsZ3QsTGUsaXQpO2Vsc2UgYnJlYWs7SnQtLSxZdC0tfWlmKEplPkp0KXtpZihKZTw9WXQpZm9yKHZhciBScz1ZdCsxLG9sPVJzPE10P3JlW1JzXS5lbDpEZTtKZTw9WXQ7KXFlKG51bGwscmVbSmVdPWl0P1dvKHJlW0plXSk6a3IocmVbSmVdKSxQZSxvbCxqZSxydCxndCxMZSxpdCksSmUrK31lbHNlIGlmKEplPll0KWZvcig7SmU8PUp0OylCdChqW0plXSxqZSxydCwhMCksSmUrKztlbHNle3ZhciBsdT1KZSx4cj1KZSxQbD1uZXcgTWFwO2ZvcihKZT14cjtKZTw9WXQ7SmUrKyl7dmFyIHhzPXJlW0plXT1pdD9XbyhyZVtKZV0pOmtyKHJlW0plXSk7eHMua2V5IT1udWxsJiYoUGwuaGFzKHhzLmtleSkmJmNlKCJEdXBsaWNhdGUga2V5cyBmb3VuZCBkdXJpbmcgdXBkYXRlOiIsSlNPTi5zdHJpbmdpZnkoeHMua2V5KSwiTWFrZSBzdXJlIGtleXMgYXJlIHVuaXF1ZS4iKSxQbC5zZXQoeHMua2V5LEplKSl9dmFyIGNvLGFsPTAsc2w9WXQteHIrMSxUYz0hMSxObD0wLGNzPW5ldyBBcnJheShzbCk7Zm9yKEplPTA7SmU8c2w7SmUrKyljc1tKZV09MDtmb3IoSmU9bHU7SmU8PUp0O0plKyspe3ZhciB1cz1qW0plXTtpZihhbD49c2wpe0J0KHVzLGplLHJ0LCEwKTtjb250aW51ZX12YXIgbGw9dm9pZCAwO2lmKHVzLmtleSE9bnVsbClsbD1QbC5nZXQodXMua2V5KTtlbHNlIGZvcihjbz14cjtjbzw9WXQ7Y28rKylpZihjc1tjby14cl09PT0wJiZvbyh1cyxyZVtjb10pKXtsbD1jbzticmVha31sbD09PXZvaWQgMD9CdCh1cyxqZSxydCwhMCk6KGNzW2xsLXhyXT1KZSsxLGxsPj1ObD9ObD1sbDpUYz0hMCxxZSh1cyxyZVtsbF0sUGUsbnVsbCxqZSxydCxndCxMZSxpdCksYWwrKyl9dmFyIGRmPVRjP0hsKGNzKTpkLkVNUFRZX0FSUjtmb3IoY289ZGYubGVuZ3RoLTEsSmU9c2wtMTtKZT49MDtKZS0tKXt2YXIgVnU9eHIrSmUsSWw9cmVbVnVdLG5jPVZ1KzE8TXQ/cmVbVnUrMV0uZWw6RGU7Y3NbSmVdPT09MD9xZShudWxsLElsLFBlLG5jLGplLHJ0LGd0LExlLGl0KTpUYyYmKGNvPDB8fEplIT09ZGZbY29dP1V0KElsLFBlLG5jLDIpOmNvLS0pfX19LFV0PWZ1bmN0aW9uKGoscmUsUGUsRGUpe3ZhciBqZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCx7ZWw6cnQsdHlwZTpndCx0cmFuc2l0aW9uOkxlLGNoaWxkcmVuOml0LHNoYXBlRmxhZzpKZX09ajtpZihKZSY2KXtVdChqLmNvbXBvbmVudC5zdWJUcmVlLHJlLFBlLERlKTtyZXR1cm59aWYoSmUmMTI4KXtqLnN1c3BlbnNlLm1vdmUocmUsUGUsRGUpO3JldHVybn1pZihKZSY2NCl7Z3QubW92ZShqLHJlLFBlLFNpKTtyZXR1cm59aWYoZ3Q9PT1Nbil7aChydCxyZSxQZSk7Zm9yKHZhciBNdD0wO010PGl0Lmxlbmd0aDtNdCsrKVV0KGl0W010XSxyZSxQZSxEZSk7aChqLmFuY2hvcixyZSxQZSk7cmV0dXJufWlmKGd0PT09SGkpe19lKGoscmUsUGUpO3JldHVybn12YXIgSnQ9RGUhPT0yJiZKZSYxJiZMZTtpZihKdClpZihEZT09PTApTGUuYmVmb3JlRW50ZXIocnQpLGgocnQscmUsUGUpLE9yKCgpPT5MZS5lbnRlcihydCksamUpO2Vsc2V7dmFye2xlYXZlOll0LGRlbGF5TGVhdmU6SW4sYWZ0ZXJMZWF2ZTp0aX09TGUsX3I9KCk9PmgocnQscmUsUGUpLFdpPSgpPT57WXQocnQsKCk9PntfcigpLHRpJiZ0aSgpfSl9O0luP0luKHJ0LF9yLFdpKTpXaSgpfWVsc2UgaChydCxyZSxQZSl9LEJ0PWZ1bmN0aW9uKGoscmUsUGUpe3ZhciBEZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsamU9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLHt0eXBlOnJ0LHByb3BzOmd0LHJlZjpMZSxjaGlsZHJlbjppdCxkeW5hbWljQ2hpbGRyZW46SmUsc2hhcGVGbGFnOk10LHBhdGNoRmxhZzpKdCxkaXJzOll0fT1qO2lmKExlIT1udWxsJiZJdChMZSxudWxsLFBlLGosITApLE10JjI1Nil7cmUuY3R4LmRlYWN0aXZhdGUoaik7cmV0dXJufXZhciBJbj1NdCYxJiZZdCx0aT0hYm8oaiksX3I7aWYodGkmJihfcj1ndCYmZ3Qub25Wbm9kZUJlZm9yZVVubW91bnQpJiZ6aShfcixyZSxqKSxNdCY2KXVuKGouY29tcG9uZW50LFBlLERlKTtlbHNle2lmKE10JjEyOCl7ai5zdXNwZW5zZS51bm1vdW50KFBlLERlKTtyZXR1cm59SW4mJndyKGosbnVsbCxyZSwiYmVmb3JlVW5tb3VudCIpLE10JjY0P2oudHlwZS5yZW1vdmUoaixyZSxQZSxqZSxTaSxEZSk6SmUmJihydCE9PU1ufHxKdD4wJiZKdCY2NCk/d24oSmUscmUsUGUsITEsITApOihydD09PU1uJiZKdCYoMTI4fDI1Nil8fCFqZSYmTXQmMTYpJiZ3bihpdCxyZSxQZSksRGUmJmxyKGopfSh0aSYmKF9yPWd0JiZndC5vblZub2RlVW5tb3VudGVkKXx8SW4pJiZPcigoKT0+e19yJiZ6aShfcixyZSxqKSxJbiYmd3IoaixudWxsLHJlLCJ1bm1vdW50ZWQiKX0sUGUpfSxscj1qPT57dmFye3R5cGU6cmUsZWw6UGUsYW5jaG9yOkRlLHRyYW5zaXRpb246amV9PWo7aWYocmU9PT1Nbil7ai5wYXRjaEZsYWc+MCYmai5wYXRjaEZsYWcmMjA0OCYmamUmJiFqZS5wZXJzaXN0ZWQ/ai5jaGlsZHJlbi5mb3JFYWNoKEplPT57SmUudHlwZT09PURuP0MoSmUuZWwpOmxyKEplKX0pOiRuKFBlLERlKTtyZXR1cm59aWYocmU9PT1IaSl7JGUoaik7cmV0dXJufXZhciBydD0oKT0+e0MoUGUpLGplJiYhamUucGVyc2lzdGVkJiZqZS5hZnRlckxlYXZlJiZqZS5hZnRlckxlYXZlKCl9O2lmKGouc2hhcGVGbGFnJjEmJmplJiYhamUucGVyc2lzdGVkKXt2YXJ7bGVhdmU6Z3QsZGVsYXlMZWF2ZTpMZX09amUsaXQ9KCk9Pmd0KFBlLHJ0KTtMZT9MZShqLmVsLHJ0LGl0KTppdCgpfWVsc2UgcnQoKX0sJG49KGoscmUpPT57Zm9yKHZhciBQZTtqIT09cmU7KVBlPXZlKGopLEMoaiksaj1QZTtDKHJlKX0sdW49KGoscmUsUGUpPT57ai50eXBlLl9faG1ySWQmJktpKGopO3ZhcntidW06RGUsc2NvcGU6amUsdXBkYXRlOnJ0LHN1YlRyZWU6Z3QsdW06TGV9PWo7RGUmJmQuaW52b2tlQXJyYXlGbnMoRGUpLGplLnN0b3AoKSxydCYmKHJ0LmFjdGl2ZT0hMSxCdChndCxqLHJlLFBlKSksTGUmJk9yKExlLHJlKSxPcigoKT0+e2ouaXNVbm1vdW50ZWQ9ITB9LHJlKSxyZSYmcmUucGVuZGluZ0JyYW5jaCYmIXJlLmlzVW5tb3VudGVkJiZqLmFzeW5jRGVwJiYhai5hc3luY1Jlc29sdmVkJiZqLnN1c3BlbnNlSWQ9PT1yZS5wZW5kaW5nSWQmJihyZS5kZXBzLS0scmUuZGVwcz09PTAmJnJlLnJlc29sdmUoKSksYnIoail9LHduPWZ1bmN0aW9uKGoscmUsUGUpe2Zvcih2YXIgRGU9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLGplPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSxydD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06MCxndD1ydDtndDxqLmxlbmd0aDtndCsrKUJ0KGpbZ3RdLHJlLFBlLERlLGplKX0sZWk9aj0+ai5zaGFwZUZsYWcmNj9laShqLmNvbXBvbmVudC5zdWJUcmVlKTpqLnNoYXBlRmxhZyYxMjg/ai5zdXNwZW5zZS5uZXh0KCk6dmUoai5hbmNob3J8fGouZWwpLGxvPSExLFluPShqLHJlLFBlKT0+e2o9PW51bGw/cmUuX3Zub2RlJiZCdChyZS5fdm5vZGUsbnVsbCxudWxsLCEwKTpxZShyZS5fdm5vZGV8fG51bGwsaixyZSxudWxsLG51bGwsbnVsbCxQZSksbG98fChsbz0hMCxxcigpLFVyKCksbG89ITEpLHJlLl92bm9kZT1qfSxTaT17cDpxZSx1bTpCdCxtOlV0LHI6bHIsbXQ6Q2UsbWM6WWUscGM6VmUscGJjOkcsbjplaSxvOml9LE5vLHdpO3JldHVybiBhJiYoW05vLHdpXT1hKFNpKSkse3JlbmRlcjpZbixoeWRyYXRlOk5vLGNyZWF0ZUFwcDpqbyhZbixObyl9fWZ1bmN0aW9uIHNhKGksYSl7dmFye3R5cGU6Zixwcm9wczpofT1pO3JldHVybiBhPT09InN2ZyImJmY9PT0iZm9yZWlnbk9iamVjdCJ8fGE9PT0ibWF0aG1sIiYmZj09PSJhbm5vdGF0aW9uLXhtbCImJmgmJmguZW5jb2RpbmcmJmguZW5jb2RpbmcuaW5jbHVkZXMoImh0bWwiKT92b2lkIDA6YX1mdW5jdGlvbiBVaShpLGEpe3ZhcntlZmZlY3Q6Zix1cGRhdGU6aH09aTtmLmFsbG93UmVjdXJzZT1oLmFsbG93UmVjdXJzZT1hfWZ1bmN0aW9uIENzKGksYSl7cmV0dXJuKCFpfHxpJiYhaS5wZW5kaW5nQnJhbmNoKSYmYSYmIWEucGVyc2lzdGVkfWZ1bmN0aW9uIFVsKGksYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLGg9aS5jaGlsZHJlbixDPWEuY2hpbGRyZW47aWYoZC5pc0FycmF5KGgpJiZkLmlzQXJyYXkoQykpZm9yKHZhciBTPTA7UzxoLmxlbmd0aDtTKyspe3ZhciBrPWhbU10sVT1DW1NdO1Uuc2hhcGVGbGFnJjEmJiFVLmR5bmFtaWNDaGlsZHJlbiYmKChVLnBhdGNoRmxhZzw9MHx8VS5wYXRjaEZsYWc9PT0zMikmJihVPUNbU109V28oQ1tTXSksVS5lbD1rLmVsKSxmfHxVbChrLFUpKSxVLnR5cGU9PT1MbiYmKFUuZWw9ay5lbCksVS50eXBlPT09RG4mJiFVLmVsJiYoVS5lbD1rLmVsKX19ZnVuY3Rpb24gSGwoaSl7dmFyIGE9aS5zbGljZSgpLGY9WzBdLGgsQyxTLGssVSxCPWkubGVuZ3RoO2ZvcihoPTA7aDxCO2grKyl7dmFyIEs9aVtoXTtpZihLIT09MCl7aWYoQz1mW2YubGVuZ3RoLTFdLGlbQ108Syl7YVtoXT1DLGYucHVzaChoKTtjb250aW51ZX1mb3IoUz0wLGs9Zi5sZW5ndGgtMTtTPGs7KVU9UytrPj4xLGlbZltVXV08Sz9TPVUrMTprPVU7SzxpW2ZbU11dJiYoUz4wJiYoYVtoXT1mW1MtMV0pLGZbU109aCl9fWZvcihTPWYubGVuZ3RoLGs9ZltTLTFdO1MtLSA+MDspZltTXT1rLGs9YVtrXTtyZXR1cm4gZn1mdW5jdGlvbiBoYyhpKXt2YXIgYT1pLnN1YlRyZWUuY29tcG9uZW50O2lmKGEpcmV0dXJuIGEuYXN5bmNEZXAmJiFhLmFzeW5jUmVzb2x2ZWQ/YTpoYyhhKX12YXIgQXM9aT0+aS5fX2lzVGVsZXBvcnQsZXM9aT0+aSYmKGkuZGlzYWJsZWR8fGkuZGlzYWJsZWQ9PT0iIiksRWw9aT0+dHlwZW9mIFNWR0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZpIGluc3RhbmNlb2YgU1ZHRWxlbWVudCxPcz1pPT50eXBlb2YgTWF0aE1MRWxlbWVudD09ImZ1bmN0aW9uIiYmaSBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQsZ2M9KGksYSk9Pnt2YXIgZj1pJiZpLnRvO2lmKGQuaXNTdHJpbmcoZikpaWYoYSl7dmFyIGg9YShmKTtyZXR1cm4gaHx8Y2UoJ0ZhaWxlZCB0byBsb2NhdGUgVGVsZXBvcnQgdGFyZ2V0IHdpdGggc2VsZWN0b3IgIicuY29uY2F0KGYsJyIuIE5vdGUgdGhlIHRhcmdldCBlbGVtZW50IG11c3QgZXhpc3QgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZCAtIGkuZS4gdGhlIHRhcmdldCBjYW5ub3QgYmUgcmVuZGVyZWQgYnkgdGhlIGNvbXBvbmVudCBpdHNlbGYsIGFuZCBpZGVhbGx5IHNob3VsZCBiZSBvdXRzaWRlIG9mIHRoZSBlbnRpcmUgVnVlIGNvbXBvbmVudCB0cmVlLicpKSxofWVsc2UgcmV0dXJuIGNlKCJDdXJyZW50IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgc3RyaW5nIHRhcmdldCBmb3IgVGVsZXBvcnRzLiAobWlzc2luZyBxdWVyeVNlbGVjdG9yIHJlbmRlcmVyIG9wdGlvbikiKSxudWxsO2Vsc2UgcmV0dXJuIWYmJiFlcyhpKSYmY2UoIkludmFsaWQgVGVsZXBvcnQgdGFyZ2V0OiAiLmNvbmNhdChmKSksZn0sU2w9e25hbWU6IlRlbGVwb3J0IixfX2lzVGVsZXBvcnQ6ITAscHJvY2VzcyhpLGEsZixoLEMsUyxrLFUsQixLKXt2YXJ7bWM6USxwYzplZSxwYmM6WSxvOntpbnNlcnQ6dmUscXVlcnlTZWxlY3RvcjpUZSxjcmVhdGVUZXh0Omh0LGNyZWF0ZUNvbW1lbnQ6cWV9fT1LLE50PWVzKGEucHJvcHMpLHtzaGFwZUZsYWc6eHQsY2hpbGRyZW46b2UsZHluYW1pY0NoaWxkcmVuOmhlfT1hO2lmKFByJiYoQj0hMSxoZT1udWxsKSxpPT1udWxsKXt2YXIgX2U9YS5lbD1xZSgidGVsZXBvcnQgc3RhcnQiLGYpLCRlPWEuYW5jaG9yPXFlKCJ0ZWxlcG9ydCBlbmQiLGYpO3ZlKF9lLGYsaCksdmUoJGUsZixoKTt2YXIgc3Q9YS50YXJnZXQ9Z2MoYS5wcm9wcyxUZSksdHQ9YS50YXJnZXRBbmNob3I9aHQoIiIsZik7c3Q/KHZlKHR0LHN0KSxrPT09InN2ZyJ8fEVsKHN0KT9rPSJzdmciOihrPT09Im1hdGhtbCJ8fE9zKHN0KSkmJihrPSJtYXRobWwiKSk6TnR8fGNlKCJJbnZhbGlkIFRlbGVwb3J0IHRhcmdldCBvbiBtb3VudDoiLHN0LCIoIi5jb25jYXQodHlwZW9mIHN0LCIpIikpO3ZhciB5dD0obnQsV2UpPT57eHQmMTYmJlEob2UsbnQsV2UsQyxTLGssVSxCKX07TnQ/eXQoZiwkZSk6c3QmJnl0KHN0LHR0KX1lbHNle2EuZWw9aS5lbDt2YXIgWWU9YS5hbmNob3I9aS5hbmNob3IsTD1hLnRhcmdldD1pLnRhcmdldCxHPWEudGFyZ2V0QW5jaG9yPWkudGFyZ2V0QW5jaG9yLHRlPWVzKGkucHJvcHMpLGJlPXRlP2Y6TCxTZT10ZT9ZZTpHO2lmKGs9PT0ic3ZnInx8RWwoTCk/az0ic3ZnIjooaz09PSJtYXRobWwifHxPcyhMKSkmJihrPSJtYXRobWwiKSxoZT8oWShpLmR5bmFtaWNDaGlsZHJlbixoZSxiZSxDLFMsayxVKSxVbChpLGEsITApKTpCfHxlZShpLGEsYmUsU2UsQyxTLGssVSwhMSksTnQpdGU/YS5wcm9wcyYmaS5wcm9wcyYmYS5wcm9wcy50byE9PWkucHJvcHMudG8mJihhLnByb3BzLnRvPWkucHJvcHMudG8pOiRsKGEsZixZZSxLLDEpO2Vsc2UgaWYoKGEucHJvcHMmJmEucHJvcHMudG8pIT09KGkucHJvcHMmJmkucHJvcHMudG8pKXt2YXIgQ2U9YS50YXJnZXQ9Z2MoYS5wcm9wcyxUZSk7Q2U/JGwoYSxDZSxudWxsLEssMCk6Y2UoIkludmFsaWQgVGVsZXBvcnQgdGFyZ2V0IG9uIHVwZGF0ZToiLEwsIigiLmNvbmNhdCh0eXBlb2YgTCwiKSIpKX1lbHNlIHRlJiYkbChhLEwsRyxLLDEpfW1yKGEpfSxyZW1vdmUoaSxhLGYsaCxDLFMpe3Zhcnt1bTprLG86e3JlbW92ZTpVfX09Qyx7c2hhcGVGbGFnOkIsY2hpbGRyZW46SyxhbmNob3I6USx0YXJnZXRBbmNob3I6ZWUsdGFyZ2V0OlkscHJvcHM6dmV9PWk7aWYoWSYmVShlZSksUyYmVShRKSxCJjE2KWZvcih2YXIgVGU9U3x8IWVzKHZlKSxodD0wO2h0PEsubGVuZ3RoO2h0Kyspe3ZhciBxZT1LW2h0XTtrKHFlLGEsZixUZSwhIXFlLmR5bmFtaWNDaGlsZHJlbil9fSxtb3ZlOiRsLGh5ZHJhdGU6eGF9O2Z1bmN0aW9uICRsKGksYSxmLGgpe3ZhcntvOntpbnNlcnQ6Q30sbTpTfT1oLGs9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOjI7az09PTAmJkMoaS50YXJnZXRBbmNob3IsYSxmKTt2YXJ7ZWw6VSxhbmNob3I6QixzaGFwZUZsYWc6SyxjaGlsZHJlbjpRLHByb3BzOmVlfT1pLFk9az09PTI7aWYoWSYmQyhVLGEsZiksKCFZfHxlcyhlZSkpJiZLJjE2KWZvcih2YXIgdmU9MDt2ZTxRLmxlbmd0aDt2ZSsrKVMoUVt2ZV0sYSxmLDIpO1kmJkMoQixhLGYpfWZ1bmN0aW9uIHhhKGksYSxmLGgsQyxTLGssVSl7dmFye286e25leHRTaWJsaW5nOkIscGFyZW50Tm9kZTpLLHF1ZXJ5U2VsZWN0b3I6UX19PWssZWU9YS50YXJnZXQ9Z2MoYS5wcm9wcyxRKTtpZihlZSl7dmFyIFk9ZWUuX2xwYXx8ZWUuZmlyc3RDaGlsZDtpZihhLnNoYXBlRmxhZyYxNilpZihlcyhhLnByb3BzKSlhLmFuY2hvcj1VKEIoaSksYSxLKGkpLGYsaCxDLFMpLGEudGFyZ2V0QW5jaG9yPVk7ZWxzZXthLmFuY2hvcj1CKGkpO2Zvcih2YXIgdmU9WTt2ZTspaWYodmU9Qih2ZSksdmUmJnZlLm5vZGVUeXBlPT09OCYmdmUuZGF0YT09PSJ0ZWxlcG9ydCBhbmNob3IiKXthLnRhcmdldEFuY2hvcj12ZSxlZS5fbHBhPWEudGFyZ2V0QW5jaG9yJiZCKGEudGFyZ2V0QW5jaG9yKTticmVha31VKFksYSxlZSxmLGgsQyxTKX1tcihhKX1yZXR1cm4gYS5hbmNob3ImJkIoYS5hbmNob3IpfXZhciBKcz1TbDtmdW5jdGlvbiBtcihpKXt2YXIgYT1pLmN0eDtpZihhJiZhLnV0KXtmb3IodmFyIGY9aS5jaGlsZHJlblswXS5lbDtmJiZmIT09aS50YXJnZXRBbmNob3I7KWYubm9kZVR5cGU9PT0xJiZmLnNldEF0dHJpYnV0ZSgiZGF0YS12LW93bmVyIixhLnVpZCksZj1mLm5leHRTaWJsaW5nO2EudXQoKX19dmFyIE1uPVN5bWJvbC5mb3IoInYtZmd0IiksTG49U3ltYm9sLmZvcigidi10eHQiKSxEbj1TeW1ib2wuZm9yKCJ2LWNtdCIpLEhpPVN5bWJvbC5mb3IoInYtc3RjIiksenI9W10sUXI9bnVsbDtmdW5jdGlvbiBacygpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMTt6ci5wdXNoKFFyPWk/bnVsbDpbXSl9ZnVuY3Rpb24gbGEoKXt6ci5wb3AoKSxRcj16clt6ci5sZW5ndGgtMV18fG51bGx9dmFyIGNhPTE7ZnVuY3Rpb24gdHMoaSl7Y2ErPWl9ZnVuY3Rpb24gTmkoaSl7cmV0dXJuIGkuZHluYW1pY0NoaWxkcmVuPWNhPjA/UXJ8fGQuRU1QVFlfQVJSOm51bGwsbGEoKSxjYT4wJiZRciYmUXIucHVzaChpKSxpfWZ1bmN0aW9uIE9vKGksYSxmLGgsQyxTKXtyZXR1cm4gTmkoWG4oaSxhLGYsaCxDLFMsITApKX1mdW5jdGlvbiBUbyhpLGEsZixoLEMpe3JldHVybiBOaShzcihpLGEsZixoLEMsITApKX1mdW5jdGlvbiBXcihpKXtyZXR1cm4gaT9pLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gb28oaSxhKXtyZXR1cm4gYS5zaGFwZUZsYWcmNiYmTnIuaGFzKGEudHlwZSk/KGkuc2hhcGVGbGFnJj1+MjU2LGEuc2hhcGVGbGFnJj1+NTEyLCExKTppLnR5cGU9PT1hLnR5cGUmJmkua2V5PT09YS5rZXl9dmFyIGpsO2Z1bmN0aW9uIFB1KGkpe2psPWl9dmFyIHdsPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkoaSksZj0wO2Y8aTtmKyspYVtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpsKC4uLmpsP2psKGEsT24pOmEpfSxYcz0iX192SW50ZXJuYWwiLENsPWk9Pnt2YXJ7a2V5OmF9PWk7cmV0dXJuIGEhPW51bGw/YTpudWxsfSxUcz1pPT57dmFye3JlZjphLHJlZl9rZXk6ZixyZWZfZm9yOmh9PWk7cmV0dXJuIHR5cGVvZiBhPT0ibnVtYmVyIiYmKGE9IiIrYSksYSE9bnVsbD9kLmlzU3RyaW5nKGEpfHxtLmlzUmVmKGEpfHxkLmlzRnVuY3Rpb24oYSk/e2k6T24scjphLGs6ZixmOiEhaH06YTpudWxsfTtmdW5jdGlvbiBYbihpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbCxmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOjAsQz1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxTPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTppPT09TW4/MDoxLGs9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0hPT12b2lkIDA/YXJndW1lbnRzWzZdOiExLFU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOiExLEI9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6aSxwcm9wczphLGtleTphJiZDbChhKSxyZWY6YSYmVHMoYSksc2NvcGVJZDpLcixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpmLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRBbmNob3I6bnVsbCxzdGF0aWNDb3VudDowLHNoYXBlRmxhZzpTLHBhdGNoRmxhZzpoLGR5bmFtaWNQcm9wczpDLGR5bmFtaWNDaGlsZHJlbjpudWxsLGFwcENvbnRleHQ6bnVsbCxjdHg6T259O3JldHVybiBVPyhHbChCLGYpLFMmMTI4JiZpLm5vcm1hbGl6ZShCKSk6ZiYmKEIuc2hhcGVGbGFnfD1kLmlzU3RyaW5nKGYpPzg6MTYpLEIua2V5IT09Qi5rZXkmJmNlKCJWTm9kZSBjcmVhdGVkIHdpdGggaW52YWxpZCBrZXkgKE5hTikuIFZOb2RlIHR5cGU6IixCLnR5cGUpLGNhPjAmJiFrJiZRciYmKEIucGF0Y2hGbGFnPjB8fFMmNikmJkIucGF0Y2hGbGFnIT09MzImJlFyLnB1c2goQiksQn12YXIgc3I9d2w7ZnVuY3Rpb24gemwoaSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGwsZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbCxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTowLEM9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsUz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITE7aWYoKCFpfHxpPT09cm4pJiYoaXx8Y2UoIkludmFsaWQgdm5vZGUgdHlwZSB3aGVuIGNyZWF0aW5nIHZub2RlOiAiLmNvbmNhdChpLCIuIikpLGk9RG4pLFdyKGkpKXt2YXIgaz1qaShpLGEsITApO3JldHVybiBmJiZHbChrLGYpLGNhPjAmJiFTJiZRciYmKGsuc2hhcGVGbGFnJjY/UXJbUXIuaW5kZXhPZihpKV09azpRci5wdXNoKGspKSxrLnBhdGNoRmxhZ3w9LTIsa31pZihFYyhpKSYmKGk9aS5fX3ZjY09wdHMpLGEpe2E9JGkoYSk7dmFye2NsYXNzOlUsc3R5bGU6Qn09YTtVJiYhZC5pc1N0cmluZyhVKSYmKGEuY2xhc3M9ZC5ub3JtYWxpemVDbGFzcyhVKSksZC5pc09iamVjdChCKSYmKG0uaXNQcm94eShCKSYmIWQuaXNBcnJheShCKSYmKEI9ZC5leHRlbmQoe30sQikpLGEuc3R5bGU9ZC5ub3JtYWxpemVTdHlsZShCKSl9dmFyIEs9ZC5pc1N0cmluZyhpKT8xOmVhKGkpPzEyODpBcyhpKT82NDpkLmlzT2JqZWN0KGkpPzQ6ZC5pc0Z1bmN0aW9uKGkpPzI6MDtyZXR1cm4gSyY0JiZtLmlzUHJveHkoaSkmJihpPW0udG9SYXcoaSksY2UoIlZ1ZSByZWNlaXZlZCBhIENvbXBvbmVudCB0aGF0IHdhcyBtYWRlIGEgcmVhY3RpdmUgb2JqZWN0LiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIG92ZXJoZWFkIGFuZCBzaG91bGQgYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2Agb3IgdXNpbmcgYHNoYWxsb3dSZWZgIGluc3RlYWQgb2YgYHJlZmAuIixgCkNvbXBvbmVudCB0aGF0IHdhcyBtYWRlIHJlYWN0aXZlOiBgLGkpKSxYbihpLGEsZixoLEMsSyxTLCEwKX1mdW5jdGlvbiAkaShpKXtyZXR1cm4gaT9tLmlzUHJveHkoaSl8fFhzIGluIGk/ZC5leHRlbmQoe30saSk6aTpudWxsfWZ1bmN0aW9uIGppKGksYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLHtwcm9wczpoLHJlZjpDLHBhdGNoRmxhZzpTLGNoaWxkcmVuOmt9PWksVT1hP2tpKGh8fHt9LGEpOmgsQj17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTppLnR5cGUscHJvcHM6VSxrZXk6VSYmQ2woVSkscmVmOmEmJmEucmVmP2YmJkM/ZC5pc0FycmF5KEMpP0MuY29uY2F0KFRzKGEpKTpbQyxUcyhhKV06VHMoYSk6QyxzY29wZUlkOmkuc2NvcGVJZCxzbG90U2NvcGVJZHM6aS5zbG90U2NvcGVJZHMsY2hpbGRyZW46Uz09PS0xJiZkLmlzQXJyYXkoayk/ay5tYXAoV2wpOmssdGFyZ2V0OmkudGFyZ2V0LHRhcmdldEFuY2hvcjppLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDppLnN0YXRpY0NvdW50LHNoYXBlRmxhZzppLnNoYXBlRmxhZyxwYXRjaEZsYWc6YSYmaS50eXBlIT09TW4/Uz09PS0xPzE2OlN8MTY6UyxkeW5hbWljUHJvcHM6aS5keW5hbWljUHJvcHMsZHluYW1pY0NoaWxkcmVuOmkuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6aS5hcHBDb250ZXh0LGRpcnM6aS5kaXJzLHRyYW5zaXRpb246aS50cmFuc2l0aW9uLGNvbXBvbmVudDppLmNvbXBvbmVudCxzdXNwZW5zZTppLnN1c3BlbnNlLHNzQ29udGVudDppLnNzQ29udGVudCYmamkoaS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6aS5zc0ZhbGxiYWNrJiZqaShpLnNzRmFsbGJhY2spLGVsOmkuZWwsYW5jaG9yOmkuYW5jaG9yLGN0eDppLmN0eCxjZTppLmNlfTtyZXR1cm4gQn1mdW5jdGlvbiBXbChpKXt2YXIgYT1qaShpKTtyZXR1cm4gZC5pc0FycmF5KGkuY2hpbGRyZW4pJiYoYS5jaGlsZHJlbj1pLmNoaWxkcmVuLm1hcChXbCkpLGF9ZnVuY3Rpb24gdmMoKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiAiLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjA7cmV0dXJuIHNyKExuLG51bGwsaSxhKX1mdW5jdGlvbiBOdShpLGEpe3ZhciBmPXNyKEhpLG51bGwsaSk7cmV0dXJuIGYuc3RhdGljQ291bnQ9YSxmfWZ1bmN0aW9uIElpKCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIiLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBhPyhacygpLFRvKERuLG51bGwsaSkpOnNyKERuLG51bGwsaSl9ZnVuY3Rpb24ga3IoaSl7cmV0dXJuIGk9PW51bGx8fHR5cGVvZiBpPT0iYm9vbGVhbiI/c3IoRG4pOmQuaXNBcnJheShpKT9zcihNbixudWxsLGkuc2xpY2UoKSk6dHlwZW9mIGk9PSJvYmplY3QiP1dvKGkpOnNyKExuLG51bGwsU3RyaW5nKGkpKX1mdW5jdGlvbiBXbyhpKXtyZXR1cm4gaS5lbD09PW51bGwmJmkucGF0Y2hGbGFnIT09LTF8fGkubWVtbz9pOmppKGkpfWZ1bmN0aW9uIEdsKGksYSl7dmFyIGY9MCx7c2hhcGVGbGFnOmh9PWk7aWYoYT09bnVsbClhPW51bGw7ZWxzZSBpZihkLmlzQXJyYXkoYSkpZj0xNjtlbHNlIGlmKHR5cGVvZiBhPT0ib2JqZWN0IilpZihoJigxfDY0KSl7dmFyIEM9YS5kZWZhdWx0O0MmJihDLl9jJiYoQy5fZD0hMSksR2woaSxDKCkpLEMuX2MmJihDLl9kPSEwKSk7cmV0dXJufWVsc2V7Zj0zMjt2YXIgUz1hLl87IVMmJiEoWHMgaW4gYSk/YS5fY3R4PU9uOlM9PT0zJiZPbiYmKE9uLnNsb3RzLl89PT0xP2EuXz0xOihhLl89MixpLnBhdGNoRmxhZ3w9MTAyNCkpfWVsc2UgZC5pc0Z1bmN0aW9uKGEpPyhhPXtkZWZhdWx0OmEsX2N0eDpPbn0sZj0zMik6KGE9U3RyaW5nKGEpLGgmNjQ/KGY9MTYsYT1bdmMoYSldKTpmPTgpO2kuY2hpbGRyZW49YSxpLnNoYXBlRmxhZ3w9Zn1mdW5jdGlvbiBraSgpe2Zvcih2YXIgaT17fSxhPTA7YTxhcmd1bWVudHMubGVuZ3RoO2ErKyl7dmFyIGY9YTwwfHxhcmd1bWVudHMubGVuZ3RoPD1hP3ZvaWQgMDphcmd1bWVudHNbYV07Zm9yKHZhciBoIGluIGYpaWYoaD09PSJjbGFzcyIpaS5jbGFzcyE9PWYuY2xhc3MmJihpLmNsYXNzPWQubm9ybWFsaXplQ2xhc3MoW2kuY2xhc3MsZi5jbGFzc10pKTtlbHNlIGlmKGg9PT0ic3R5bGUiKWkuc3R5bGU9ZC5ub3JtYWxpemVTdHlsZShbaS5zdHlsZSxmLnN0eWxlXSk7ZWxzZSBpZihkLmlzT24oaCkpe3ZhciBDPWlbaF0sUz1mW2hdO1MmJkMhPT1TJiYhKGQuaXNBcnJheShDKSYmQy5pbmNsdWRlcyhTKSkmJihpW2hdPUM/W10uY29uY2F0KEMsUyk6Uyl9ZWxzZSBoIT09IiImJihpW2hdPWZbaF0pfXJldHVybiBpfWZ1bmN0aW9uIHppKGksYSxmKXt2YXIgaD1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtzbihpLGEsNyxbZixoXSl9dmFyIEl1PWJzKCksbWM9MDtmdW5jdGlvbiBwcihpLGEsZil7dmFyIGg9aS50eXBlLEM9KGE/YS5hcHBDb250ZXh0OmkuYXBwQ29udGV4dCl8fEl1LFM9e3VpZDptYysrLHZub2RlOmksdHlwZTpoLHBhcmVudDphLGFwcENvbnRleHQ6Qyxyb290Om51bGwsbmV4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxzY29wZTpuZXcgbS5FZmZlY3RTY29wZSghMCkscmVuZGVyOm51bGwscHJveHk6bnVsbCxleHBvc2VkOm51bGwsZXhwb3NlUHJveHk6bnVsbCx3aXRoUHJveHk6bnVsbCxwcm92aWRlczphP2EucHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShDLnByb3ZpZGVzKSxhY2Nlc3NDYWNoZTpudWxsLHJlbmRlckNhY2hlOltdLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVzOm51bGwscHJvcHNPcHRpb25zOm1sKGgsQyksZW1pdHNPcHRpb25zOnZvKGgsQyksZW1pdDpudWxsLGVtaXR0ZWQ6bnVsbCxwcm9wc0RlZmF1bHRzOmQuRU1QVFlfT0JKLGluaGVyaXRBdHRyczpoLmluaGVyaXRBdHRycyxjdHg6ZC5FTVBUWV9PQkosZGF0YTpkLkVNUFRZX09CSixwcm9wczpkLkVNUFRZX09CSixhdHRyczpkLkVNUFRZX09CSixzbG90czpkLkVNUFRZX09CSixyZWZzOmQuRU1QVFlfT0JKLHNldHVwU3RhdGU6ZC5FTVBUWV9PQkosc2V0dXBDb250ZXh0Om51bGwsYXR0cnNQcm94eTpudWxsLHNsb3RzUHJveHk6bnVsbCxzdXNwZW5zZTpmLHN1c3BlbnNlSWQ6Zj9mLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIFMuY3R4PXpjKFMpLFMucm9vdD1hP2Eucm9vdDpTLFMuZW1pdD1Kby5iaW5kKG51bGwsUyksaS5jZSYmaS5jZShTKSxTfXZhciBObj1udWxsLGFvPSgpPT5Obnx8T24sUHMsUXM7e3ZhciB1aT1kLmdldEdsb2JhbFRoaXMoKSxHcj0oaSxhKT0+e3ZhciBmO3JldHVybihmPXVpW2ldKXx8KGY9dWlbaV09W10pLGYucHVzaChhKSxoPT57Zi5sZW5ndGg+MT9mLmZvckVhY2goQz0+QyhoKSk6ZlswXShoKX19O1BzPUdyKCJfX1ZVRV9JTlNUQU5DRV9TRVRURVJTX18iLGk9Pk5uPWkpLFFzPUdyKCJfX1ZVRV9TU1JfU0VUVEVSU19fIixpPT53LmlzSW5TU1JDb21wb25lbnRTZXR1cD1pKX12YXIgdWE9aT0+e3ZhciBhPU5uO3JldHVybiBQcyhpKSxpLnNjb3BlLm9uKCksKCk9PntpLnNjb3BlLm9mZigpLFBzKGEpfX0sZmE9KCk9PntObiYmTm4uc2NvcGUub2ZmKCksUHMobnVsbCl9LF9jPWQubWFrZU1hcCgic2xvdCxjb21wb25lbnQiKTtmdW5jdGlvbiBkYShpLGEpe3Zhcntpc05hdGl2ZVRhZzpmfT1hOyhfYyhpKXx8ZihpKSkmJmNlKCJEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50IGlkOiAiK2kpfWZ1bmN0aW9uIGJjKGkpe3JldHVybiBpLnZub2RlLnNoYXBlRmxhZyY0fXcuaXNJblNTUkNvbXBvbmVudFNldHVwPSExO2Z1bmN0aW9uIEdjKGkpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTthJiZRcyhhKTt2YXJ7cHJvcHM6ZixjaGlsZHJlbjpofT1pLnZub2RlLEM9YmMoaSk7SmEoaSxmLEMsYSksR2UoaSxoKTt2YXIgUz1DP3BhKGksYSk6dm9pZCAwO3JldHVybiBhJiZRcyghMSksU31mdW5jdGlvbiBwYShpLGEpe3ZhciBmLGg9aS50eXBlO3tpZihoLm5hbWUmJmRhKGgubmFtZSxpLmFwcENvbnRleHQuY29uZmlnKSxoLmNvbXBvbmVudHMpZm9yKHZhciBDPU9iamVjdC5rZXlzKGguY29tcG9uZW50cyksUz0wO1M8Qy5sZW5ndGg7UysrKWRhKENbU10saS5hcHBDb250ZXh0LmNvbmZpZyk7aWYoaC5kaXJlY3RpdmVzKWZvcih2YXIgaz1PYmplY3Qua2V5cyhoLmRpcmVjdGl2ZXMpLFU9MDtVPGsubGVuZ3RoO1UrKylocyhrW1VdKTtoLmNvbXBpbGVyT3B0aW9ucyYmeWMoKSYmY2UoJyJjb21waWxlck9wdGlvbnMiIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSBidWlsZCBvZiBWdWUgdGhhdCBpbmNsdWRlcyB0aGUgcnVudGltZSBjb21waWxlci4gU2luY2UgeW91IGFyZSB1c2luZyBhIHJ1bnRpbWUtb25seSBidWlsZCwgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCB2aWEgeW91ciBidWlsZCB0b29sIGNvbmZpZyBpbnN0ZWFkLicpfWkuYWNjZXNzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSxpLnByb3h5PW0ubWFya1JhdyhuZXcgUHJveHkoaS5jdHgsdnMpKSx5KGkpO3ZhcntzZXR1cDpCfT1oO2lmKEIpe3ZhciBLPWkuc2V0dXBDb250ZXh0PUIubGVuZ3RoPjE/cnMoaSk6bnVsbCxRPXVhKGkpO20ucGF1c2VUcmFja2luZygpO3ZhciBlZT1LbihCLGksMCxbbS5zaGFsbG93UmVhZG9ubHkoaS5wcm9wcyksS10pO2lmKG0ucmVzZXRUcmFja2luZygpLFEoKSxkLmlzUHJvbWlzZShlZSkpe2lmKGVlLnRoZW4oZmEsZmEpLGEpcmV0dXJuIGVlLnRoZW4odmU9PntucyhpLHZlLGEpfSkuY2F0Y2godmU9Pntrbih2ZSxpLDApfSk7aWYoaS5hc3luY0RlcD1lZSwhaS5zdXNwZW5zZSl7dmFyIFk9KGY9aC5uYW1lKSE9bnVsbD9mOiJBbm9ueW1vdXMiO2NlKCJDb21wb25lbnQgPCIuY29uY2F0KFksIj46IHNldHVwIGZ1bmN0aW9uIHJldHVybmVkIGEgcHJvbWlzZSwgYnV0IG5vIDxTdXNwZW5zZT4gYm91bmRhcnkgd2FzIGZvdW5kIGluIHRoZSBwYXJlbnQgY29tcG9uZW50IHRyZWUuIEEgY29tcG9uZW50IHdpdGggYXN5bmMgc2V0dXAoKSBtdXN0IGJlIG5lc3RlZCBpbiBhIDxTdXNwZW5zZT4gaW4gb3JkZXIgdG8gYmUgcmVuZGVyZWQuIikpfX1lbHNlIG5zKGksZWUsYSl9ZWxzZSBZbChpLGEpfWZ1bmN0aW9uIG5zKGksYSxmKXtkLmlzRnVuY3Rpb24oYSk/aS50eXBlLl9fc3NySW5saW5lUmVuZGVyP2kuc3NyUmVuZGVyPWE6aS5yZW5kZXI9YTpkLmlzT2JqZWN0KGEpPyhXcihhKSYmY2UoInNldHVwKCkgc2hvdWxkIG5vdCByZXR1cm4gVk5vZGVzIGRpcmVjdGx5IC0gcmV0dXJuIGEgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuIiksaS5kZXZ0b29sc1Jhd1NldHVwU3RhdGU9YSxpLnNldHVwU3RhdGU9bS5wcm94eVJlZnMoYSksRChpKSk6YSE9PXZvaWQgMCYmY2UoInNldHVwKCkgc2hvdWxkIHJldHVybiBhbiBvYmplY3QuIFJlY2VpdmVkOiAiLmNvbmNhdChhPT09bnVsbD8ibnVsbCI6dHlwZW9mIGEpKSxZbChpLGYpfXZhciBFaSxxbDtmdW5jdGlvbiBzbyhpKXtFaT1pLHFsPWE9PnthLnJlbmRlci5fcmMmJihhLndpdGhQcm94eT1uZXcgUHJveHkoYS5jdHgsTWwpKX19dmFyIHljPSgpPT4hRWk7ZnVuY3Rpb24gWWwoaSxhLGYpe3ZhciBoPWkudHlwZTtpZighaS5yZW5kZXIpe2lmKCFhJiZFaSYmIWgucmVuZGVyKXt2YXIgQz1oLnRlbXBsYXRlfHxUbihpKS50ZW1wbGF0ZTtpZihDKXtjaShpLCJjb21waWxlIik7dmFye2lzQ3VzdG9tRWxlbWVudDpTLGNvbXBpbGVyT3B0aW9uczprfT1pLmFwcENvbnRleHQuY29uZmlnLHtkZWxpbWl0ZXJzOlUsY29tcGlsZXJPcHRpb25zOkJ9PWgsSz1kLmV4dGVuZChkLmV4dGVuZCh7aXNDdXN0b21FbGVtZW50OlMsZGVsaW1pdGVyczpVfSxrKSxCKTtoLnJlbmRlcj1FaShDLEspLEFvKGksImNvbXBpbGUiKX19aS5yZW5kZXI9aC5yZW5kZXJ8fGQuTk9PUCxxbCYmcWwoaSl9e3ZhciBRPXVhKGkpO20ucGF1c2VUcmFja2luZygpO3RyeXtPdChpKX1maW5hbGx5e20ucmVzZXRUcmFja2luZygpLFEoKX19IWgucmVuZGVyJiZpLnJlbmRlcj09PWQuTk9PUCYmIWEmJighRWkmJmgudGVtcGxhdGU/Y2UoJ0NvbXBvbmVudCBwcm92aWRlZCB0ZW1wbGF0ZSBvcHRpb24gYnV0IHJ1bnRpbWUgY29tcGlsYXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIG9mIFZ1ZS4gQ29uZmlndXJlIHlvdXIgYnVuZGxlciB0byBhbGlhcyAidnVlIiB0byAidnVlL2Rpc3QvdnVlLmVzbS1idW5kbGVyLmpzIi4nKTpjZSgiQ29tcG9uZW50IGlzIG1pc3NpbmcgdGVtcGxhdGUgb3IgcmVuZGVyIGZ1bmN0aW9uLiIpKX1mdW5jdGlvbiBrdShpKXtyZXR1cm4gaS5hdHRyc1Byb3h5fHwoaS5hdHRyc1Byb3h5PW5ldyBQcm94eShpLmF0dHJzLHtnZXQoYSxmKXtyZXR1cm4gdG4oKSxtLnRyYWNrKGksImdldCIsIiRhdHRycyIpLGFbZl19LHNldCgpe3JldHVybiBjZSgic2V0dXBDb250ZXh0LmF0dHJzIGlzIHJlYWRvbmx5LiIpLCExfSxkZWxldGVQcm9wZXJ0eSgpe3JldHVybiBjZSgic2V0dXBDb250ZXh0LmF0dHJzIGlzIHJlYWRvbmx5LiIpLCExfX0pKX1mdW5jdGlvbiBxYyhpKXtyZXR1cm4gaS5zbG90c1Byb3h5fHwoaS5zbG90c1Byb3h5PW5ldyBQcm94eShpLnNsb3RzLHtnZXQoYSxmKXtyZXR1cm4gbS50cmFjayhpLCJnZXQiLCIkc2xvdHMiKSxhW2ZdfX0pKX1mdW5jdGlvbiBycyhpKXt2YXIgYT1mPT57aWYoaS5leHBvc2VkJiZjZSgiZXhwb3NlKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UgcGVyIHNldHVwKCkuIiksZiE9bnVsbCl7dmFyIGg9dHlwZW9mIGY7aD09PSJvYmplY3QiJiYoZC5pc0FycmF5KGYpP2g9ImFycmF5IjptLmlzUmVmKGYpJiYoaD0icmVmIikpLGghPT0ib2JqZWN0IiYmY2UoImV4cG9zZSgpIHNob3VsZCBiZSBwYXNzZWQgYSBwbGFpbiBvYmplY3QsIHJlY2VpdmVkICIuY29uY2F0KGgsIi4iKSl9aS5leHBvc2VkPWZ8fHt9fTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7Z2V0IGF0dHJzKCl7cmV0dXJuIGt1KGkpfSxnZXQgc2xvdHMoKXtyZXR1cm4gcWMoaSl9LGdldCBlbWl0KCl7cmV0dXJuIGZ1bmN0aW9uKGYpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLEM9bmV3IEFycmF5KGg+MT9oLTE6MCksUz0xO1M8aDtTKyspQ1tTLTFdPWFyZ3VtZW50c1tTXTtyZXR1cm4gaS5lbWl0KGYsLi4uQyl9fSxleHBvc2U6YX0pfWZ1bmN0aW9uIEtsKGkpe2lmKGkuZXhwb3NlZClyZXR1cm4gaS5leHBvc2VQcm94eXx8KGkuZXhwb3NlUHJveHk9bmV3IFByb3h5KG0ucHJveHlSZWZzKG0ubWFya1JhdyhpLmV4cG9zZWQpKSx7Z2V0KGEsZil7aWYoZiBpbiBhKXJldHVybiBhW2ZdO2lmKGYgaW4gcm8pcmV0dXJuIHJvW2ZdKGkpO2lmKGY9PT0iJHNjb3BlIilyZXR1cm4gaS5jdHguJHNjb3BlfSxoYXMoYSxmKXtyZXR1cm4gZiBpbiBhfHxmIGluIHJvfHxmPT09IiRzY29wZSJ9fSkpfXZhciBSdT0vKD86XnxbLV9dKShcdykvZyxBbD1pPT5pLnJlcGxhY2UoUnUsYT0+YS50b1VwcGVyQ2FzZSgpKS5yZXBsYWNlKC9bLV9dL2csIiIpO2Z1bmN0aW9uIGlzKGkpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gZC5pc0Z1bmN0aW9uKGkpP2kuZGlzcGxheU5hbWV8fGkubmFtZTppLm5hbWV8fGEmJmkuX19uYW1lfWZ1bmN0aW9uIG9zKGksYSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLGg9aXMoYSk7aWYoIWgmJmEuX19maWxlKXt2YXIgQz1hLl9fZmlsZS5tYXRjaCgvKFteL1xcXSspXC5cdyskLyk7QyYmKGg9Q1sxXSl9aWYoIWgmJmkmJmkucGFyZW50KXt2YXIgUz1rPT57Zm9yKHZhciBVIGluIGspaWYoa1tVXT09PWEpcmV0dXJuIFV9O2g9UyhpLmNvbXBvbmVudHN8fGkucGFyZW50LnR5cGUuY29tcG9uZW50cyl8fFMoaS5hcHBDb250ZXh0LmNvbXBvbmVudHMpfXJldHVybiBoP0FsKGgpOmY/IkFwcCI6IkFub255bW91cyJ9ZnVuY3Rpb24gRWMoaSl7cmV0dXJuIGQuaXNGdW5jdGlvbihpKSYmIl9fdmNjT3B0cyJpbiBpfXZhciBZYz0oaSxhKT0+e3ZhciBmPW0uY29tcHV0ZWQoaSxhLHcuaXNJblNTUkNvbXBvbmVudFNldHVwKTt7dmFyIGg9YW8oKTtoJiZoLmFwcENvbnRleHQuY29uZmlnLndhcm5SZWN1cnNpdmVDb21wdXRlZCYmKGYuX3dhcm5SZWN1cnNpdmU9ITApfXJldHVybiBmfTtmdW5jdGlvbiB4dShpLGEpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpkLkVNUFRZX09CSixoPWFvKCk7aWYoIWgpcmV0dXJuIGNlKCJ1c2VNb2RlbCgpIGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBpbnN0YW5jZS4iKSxtLnJlZigpO2lmKCFoLnByb3BzT3B0aW9uc1swXVthXSlyZXR1cm4gY2UoJ3VzZU1vZGVsKCkgY2FsbGVkIHdpdGggcHJvcCAiJy5jb25jYXQoYSwnIiB3aGljaCBpcyBub3QgZGVjbGFyZWQuJykpLG0ucmVmKCk7dmFyIEM9ZC5jYW1lbGl6ZShhKSxTPWQuaHlwaGVuYXRlKGEpLGs9bS5jdXN0b21SZWYoKEIsSyk9Pnt2YXIgUTtyZXR1cm4gbHQoKCk9Pnt2YXIgZWU9aVthXTtkLmhhc0NoYW5nZWQoUSxlZSkmJihRPWVlLEsoKSl9KSx7Z2V0KCl7cmV0dXJuIEIoKSxmLmdldD9mLmdldChRKTpRfSxzZXQoZWUpe3ZhciBZPWgudm5vZGUucHJvcHM7IShZJiYoYSBpbiBZfHxDIGluIFl8fFMgaW4gWSkmJigib25VcGRhdGU6Ii5jb25jYXQoYSlpbiBZfHwib25VcGRhdGU6Ii5jb25jYXQoQylpbiBZfHwib25VcGRhdGU6Ii5jb25jYXQoUylpbiBZKSkmJmQuaGFzQ2hhbmdlZChlZSxRKSYmKFE9ZWUsSygpKSxoLmVtaXQoInVwZGF0ZToiLmNvbmNhdChhKSxmLnNldD9mLnNldChlZSk6ZWUpfX19KSxVPWE9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsTW9kaWZpZXJzIjoiIi5jb25jYXQoYSwiTW9kaWZpZXJzIik7cmV0dXJuIGtbU3ltYm9sLml0ZXJhdG9yXT0oKT0+e3ZhciBCPTA7cmV0dXJue25leHQoKXtyZXR1cm4gQjwyP3t2YWx1ZTpCKys/aVtVXXx8e306ayxkb25lOiExfTp7ZG9uZTohMH19fX0sa31mdW5jdGlvbiBLYyhpLGEsZil7dmFyIGg9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gaD09PTI/ZC5pc09iamVjdChhKSYmIWQuaXNBcnJheShhKT9XcihhKT9zcihpLG51bGwsW2FdKTpzcihpLGEpOnNyKGksbnVsbCxhKTooaD4zP2Y9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOmg9PT0zJiZXcihmKSYmKGY9W2ZdKSxzcihpLGEsZikpfWZ1bmN0aW9uIEJ1KCl7aWYodHlwZW9mIHdpbmRvdz09InVuZGVmaW5lZCIpcmV0dXJuO3ZhciBpPXtzdHlsZToiY29sb3I6IzNiYTc3NiJ9LGE9e3N0eWxlOiJjb2xvcjojMTY3N2ZmIn0sZj17c3R5bGU6ImNvbG9yOiNmNTIyMmQifSxoPXtzdHlsZToiY29sb3I6I2ViMmY5NiJ9LEM9e2hlYWRlcihlZSl7cmV0dXJuIGQuaXNPYmplY3QoZWUpP2VlLl9faXNWdWU/WyJkaXYiLGksIlZ1ZUluc3RhbmNlIl06bS5pc1JlZihlZSk/WyJkaXYiLHt9LFsic3BhbiIsaSxRKGVlKV0sIjwiLFUoZWUudmFsdWUpLCI+Il06bS5pc1JlYWN0aXZlKGVlKT9bImRpdiIse30sWyJzcGFuIixpLG0uaXNTaGFsbG93KGVlKT8iU2hhbGxvd1JlYWN0aXZlIjoiUmVhY3RpdmUiXSwiPCIsVShlZSksIj4iLmNvbmNhdChtLmlzUmVhZG9ubHkoZWUpPyIgKHJlYWRvbmx5KSI6IiIpXTptLmlzUmVhZG9ubHkoZWUpP1siZGl2Iix7fSxbInNwYW4iLGksbS5pc1NoYWxsb3coZWUpPyJTaGFsbG93UmVhZG9ubHkiOiJSZWFkb25seSJdLCI8IixVKGVlKSwiPiJdOm51bGw6bnVsbH0saGFzQm9keShlZSl7cmV0dXJuIGVlJiZlZS5fX2lzVnVlfSxib2R5KGVlKXtpZihlZSYmZWUuX19pc1Z1ZSlyZXR1cm5bImRpdiIse30sLi4uUyhlZS4kKV19fTtmdW5jdGlvbiBTKGVlKXt2YXIgWT1bXTtlZS50eXBlLnByb3BzJiZlZS5wcm9wcyYmWS5wdXNoKGsoInByb3BzIixtLnRvUmF3KGVlLnByb3BzKSkpLGVlLnNldHVwU3RhdGUhPT1kLkVNUFRZX09CSiYmWS5wdXNoKGsoInNldHVwIixlZS5zZXR1cFN0YXRlKSksZWUuZGF0YSE9PWQuRU1QVFlfT0JKJiZZLnB1c2goaygiZGF0YSIsbS50b1JhdyhlZS5kYXRhKSkpO3ZhciB2ZT1CKGVlLCJjb21wdXRlZCIpO3ZlJiZZLnB1c2goaygiY29tcHV0ZWQiLHZlKSk7dmFyIFRlPUIoZWUsImluamVjdCIpO3JldHVybiBUZSYmWS5wdXNoKGsoImluamVjdGVkIixUZSkpLFkucHVzaChbImRpdiIse30sWyJzcGFuIix7c3R5bGU6aC5zdHlsZSsiO29wYWNpdHk6MC42NiJ9LCIkIChpbnRlcm5hbCk6ICJdLFsib2JqZWN0Iix7b2JqZWN0OmVlfV1dKSxZfWZ1bmN0aW9uIGsoZWUsWSl7cmV0dXJuIFk9ZC5leHRlbmQoe30sWSksT2JqZWN0LmtleXMoWSkubGVuZ3RoP1siZGl2Iix7c3R5bGU6ImxpbmUtaGVpZ2h0OjEuMjVlbTttYXJnaW4tYm90dG9tOjAuNmVtIn0sWyJkaXYiLHtzdHlsZToiY29sb3I6IzQ3NjU4MiJ9LGVlXSxbImRpdiIse3N0eWxlOiJwYWRkaW5nLWxlZnQ6MS4yNWVtIn0sLi4uT2JqZWN0LmtleXMoWSkubWFwKHZlPT5bImRpdiIse30sWyJzcGFuIixoLHZlKyI6ICJdLFUoWVt2ZV0sITEpXSldXTpbInNwYW4iLHt9XX1mdW5jdGlvbiBVKGVlKXt2YXIgWT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHR5cGVvZiBlZT09Im51bWJlciI/WyJzcGFuIixhLGVlXTp0eXBlb2YgZWU9PSJzdHJpbmciP1sic3BhbiIsZixKU09OLnN0cmluZ2lmeShlZSldOnR5cGVvZiBlZT09ImJvb2xlYW4iP1sic3BhbiIsaCxlZV06ZC5pc09iamVjdChlZSk/WyJvYmplY3QiLHtvYmplY3Q6WT9tLnRvUmF3KGVlKTplZX1dOlsic3BhbiIsZixTdHJpbmcoZWUpXX1mdW5jdGlvbiBCKGVlLFkpe3ZhciB2ZT1lZS50eXBlO2lmKCFkLmlzRnVuY3Rpb24odmUpKXt2YXIgVGU9e307Zm9yKHZhciBodCBpbiBlZS5jdHgpSyh2ZSxodCxZKSYmKFRlW2h0XT1lZS5jdHhbaHRdKTtyZXR1cm4gVGV9fWZ1bmN0aW9uIEsoZWUsWSx2ZSl7dmFyIFRlPWVlW3ZlXTtpZihkLmlzQXJyYXkoVGUpJiZUZS5pbmNsdWRlcyhZKXx8ZC5pc09iamVjdChUZSkmJlkgaW4gVGV8fGVlLmV4dGVuZHMmJksoZWUuZXh0ZW5kcyxZLHZlKXx8ZWUubWl4aW5zJiZlZS5taXhpbnMuc29tZShodD0+SyhodCxZLHZlKSkpcmV0dXJuITB9ZnVuY3Rpb24gUShlZSl7cmV0dXJuIG0uaXNTaGFsbG93KGVlKT8iU2hhbGxvd1JlZiI6ZWUuZWZmZWN0PyJDb21wdXRlZFJlZiI6IlJlZiJ9d2luZG93LmRldnRvb2xzRm9ybWF0dGVycz93aW5kb3cuZGV2dG9vbHNGb3JtYXR0ZXJzLnB1c2goQyk6d2luZG93LmRldnRvb2xzRm9ybWF0dGVycz1bQ119ZnVuY3Rpb24gSmwoaSxhLGYsaCl7dmFyIEM9ZltoXTtpZihDJiZabChDLGkpKXJldHVybiBDO3ZhciBTPWEoKTtyZXR1cm4gUy5tZW1vPWkuc2xpY2UoKSxmW2hdPVN9ZnVuY3Rpb24gWmwoaSxhKXt2YXIgZj1pLm1lbW87aWYoZi5sZW5ndGghPWEubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaD0wO2g8Zi5sZW5ndGg7aCsrKWlmKGQuaGFzQ2hhbmdlZChmW2hdLGFbaF0pKXJldHVybiExO3JldHVybiBjYT4wJiZRciYmUXIucHVzaChpKSwhMH12YXIgYXM9IjMuNC4yMSIsc3M9Y2UsTXU9TXIsRW49QW4sbHM9WW8sR289e2NyZWF0ZUNvbXBvbmVudEluc3RhbmNlOnByLHNldHVwQ29tcG9uZW50OkdjLHJlbmRlckNvbXBvbmVudFJvb3Q6bW8sc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlOkZuLGlzVk5vZGU6V3Isbm9ybWFsaXplVk5vZGU6a3J9LEx1PUdvLFhsPW51bGwsU2M9bnVsbCxRbD1udWxsO2Z1bmN0aW9uIGhhKGksYSl7cmV0dXJuIGk9PT0iaW5wdXQiP25ldyBJLlVuaUlucHV0RWxlbWVudChpLGEpOmk9PT0idGV4dGFyZWEiP25ldyBJLlVuaVRleHRBcmVhRWxlbWVudChpLGEpOm5ldyBJLlVuaUVsZW1lbnQoaSxhKX1mdW5jdGlvbiBOcyhpLGEpe3JldHVybiBuZXcgSS5VbmlUZXh0Tm9kZShpLGEpfWZ1bmN0aW9uIGdhKGksYSl7cmV0dXJuIG5ldyBJLlVuaUNvbW1lbnROb2RlKGksYSl9dmFyIGVsLFJyPXtpbnNlcnQ6KGksYSxmKT0+e2EuaW5zZXJ0QmVmb3JlKGksZnx8bnVsbCl9LHJlbW92ZTppPT57dmFyIGE9aS5wYXJlbnROb2RlO2EmJmEucmVtb3ZlQ2hpbGQoaSl9LGNyZWF0ZUVsZW1lbnQ6KGksYSk9PmhhKGksYSksY3JlYXRlVGV4dDooaSxhKT0+TnMoaSxhKSxjcmVhdGVDb21tZW50OihpLGEpPT5nYShpLGEpLHNldFRleHQ6KGksYSk9PntpLm5vZGVWYWx1ZT1hfSxzZXRFbGVtZW50VGV4dDooaSxhKT0+e2kudGV4dENvbnRlbnQ9YX0scGFyZW50Tm9kZTppPT5pLnBhcmVudE5vZGUsbmV4dFNpYmxpbmc6aT0+aS5uZXh0U2libGluZyxzZXRTY29wZUlkKGksYSl7aS5zZXRBdHRyaWJ1dGUoYSwiIil9LGNsb25lTm9kZShpKXt2YXIgYT1pLmNsb25lTm9kZSghMCk7cmV0dXJuIl92YWx1ZSJpbiBpJiYoYS5fdmFsdWU9aS5fdmFsdWUpLGF9LGluc2VydFN0YXRpY0NvbnRlbnQoaSxhLGYpe3ZhciBoPWVsfHwoZWw9aGEoImRpdiIpKTtoLmlubmVySFRNTD1pO2Zvcih2YXIgQz1oLmZpcnN0Q2hpbGQsUz1DLGs9UztTOylrPVMsUnIuaW5zZXJ0KFMsYSxmKSxTPWguZmlyc3RDaGlsZDtyZXR1cm5bQyxrXX19O2Z1bmN0aW9uIHRsKGksYSl7YT09bnVsbCYmKGE9IiIpLGkuc2V0QXR0cmlidXRlKCJjbGFzcyIsYSl9ZnVuY3Rpb24gSXMoaSxhLGYpe2lmKCFmKWkucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpO2Vsc2UgaWYoZC5pc1N0cmluZyhmKSlhIT09ZiYmaS5zZXRBdHRyaWJ1dGUoInN0eWxlIixmKTtlbHNle3ZhciBoPXt9LEM9YSYmIWQuaXNTdHJpbmcoYSk7aWYoQyl7Zm9yKHZhciBTIGluIGEpZltTXT09bnVsbCYmKGhbU109IiIpO2Zvcih2YXIgayBpbiBmKXt2YXIgVT1mW2tdO1UhPT1hW2tdJiYoaFtrXT1VKX19ZWxzZSBmb3IodmFyIEIgaW4gZiloW0JdPWZbQl07T2JqZWN0LmtleXMoaCkubGVuZ3RoJiZpLnNldEF0dHJpYnV0ZSgic3R5bGUiLGgpfX1mdW5jdGlvbiBubChpLGEsZil7Zj09bnVsbD9pLnJlbW92ZUF0dHJpYnV0ZShhKTppLnNldEF0dHJpYnV0ZShhLGYpfWZ1bmN0aW9uIEpjKGksYSxmLGgpe2kuYWRkRXZlbnRMaXN0ZW5lcihhLGYsaCl9ZnVuY3Rpb24gQmEoaSxhLGYsaCl7aS5yZW1vdmVFdmVudExpc3RlbmVyKGEsZixoKX1mdW5jdGlvbiBaYyhpLGEsZixoKXt2YXIgQz1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxTPWkuX3ZlaXx8KGkuX3ZlaT17fSksaz1TW2FdO2lmKGgmJmspay52YWx1ZT1oO2Vsc2V7dmFyW1UsQl09TWEoYSk7aWYoaCl7dmFyIEs9U1thXT1maShoLEMpO0pjKGksVSxLLEIpfWVsc2UgayYmKEJhKGksVSxrLEIpLFNbYV09dm9pZCAwKX19dmFyIHZhPS8oPzpPbmNlfFBhc3NpdmV8Q2FwdHVyZSkkLztmdW5jdGlvbiBNYShpKXt2YXIgYTtpZih2YS50ZXN0KGkpKXthPXt9O2Zvcih2YXIgZjtmPWkubWF0Y2godmEpOylpPWkuc2xpY2UoMCxpLmxlbmd0aC1mWzBdLmxlbmd0aCksYVtmWzBdLnRvTG93ZXJDYXNlKCldPSEwfXJldHVybltkLmh5cGhlbmF0ZShpLnNsaWNlKDIpKSxhXX1mdW5jdGlvbiBmaShpLGEpe3ZhciBmPUM9PntzbihmLnZhbHVlLGEsNSxbQ10pfTtmLnZhbHVlPWk7dmFyIGg9bmV3IFNldDtyZXR1cm4gZC5pc0FycmF5KGYudmFsdWUpP2YudmFsdWUuZm9yRWFjaChDPT57Qy5tb2RpZmllcnMmJkMubW9kaWZpZXJzLmZvckVhY2goUz0+e2guYWRkKFMpfSl9KTooZi52YWx1ZS5tb2RpZmllcnMmJmYudmFsdWUubW9kaWZpZXJzLmZvckVhY2goQz0+e2guYWRkKEMpfSksU24oZixhKSksZi5tb2RpZmllcnM9Wy4uLmhdLGZ9ZnVuY3Rpb24gU24oaSxhKXtpZighIWEpe3Zhcnskd3hzTW9kdWxlczpmfT1hO2lmKCEhZil7dmFyIGg9aS52YWx1ZS50b1N0cmluZygpOyFmLmZpbmQoQz0+aC5pbmRleE9mKCIuIitDKyIuIik+LTEpfHwoaS53eHNFdmVudD1pLnZhbHVlKCkpfX19dmFyIHJsPShpLGEsZixoLEMsUyxrLFUsQik9Pntzd2l0Y2goYSl7Y2FzZSJjbGFzcyI6dGwoaSxoKTticmVhaztjYXNlInN0eWxlIjpJcyhpLGYsaCk7YnJlYWs7ZGVmYXVsdDppZihkLmlzT24oYSkpZC5pc01vZGVsTGlzdGVuZXIoYSl8fFpjKGksYSxmLGgsayk7ZWxzZXtpZihkLmlzT2JqZWN0KGgpKXt2YXIgSz1mPT09aDtpZihoPUkuSlNPTl9QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShoKSxLJiZpLmdldEF0dHJpYnV0ZShhKT09PWgpcmV0dXJufWVsc2UgaWYoZj09PWgpcmV0dXJuO25sKGksYSxoKX1icmVha319O2Z1bmN0aW9uIFhjKCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIkc3R5bGUiO3t2YXIgYT1hbygpO2lmKCFhKXJldHVybiBzcygidXNlQ3NzTW9kdWxlIG11c3QgYmUgY2FsbGVkIGluc2lkZSBzZXR1cCgpIiksZC5FTVBUWV9PQko7dmFyIGY9YS50eXBlLl9fY3NzTW9kdWxlcztpZighZilyZXR1cm4gc3MoIkN1cnJlbnQgaW5zdGFuY2UgZG9lcyBub3QgaGF2ZSBDU1MgbW9kdWxlcyBpbmplY3RlZC4iKSxkLkVNUFRZX09CSjt2YXIgaD1mW2ldO3JldHVybiBofHwoc3MoJ0N1cnJlbnQgaW5zdGFuY2UgZG9lcyBub3QgaGF2ZSBDU1MgbW9kdWxlIG5hbWVkICInLmNvbmNhdChpLCciLicpKSxkLkVNUFRZX09CSil9fWZ1bmN0aW9uIFFjKGkpe3ZhciBhPWFvKCk7aWYoIWEpe3NzKCJ1c2VDc3NWYXJzIGlzIGNhbGxlZCB3aXRob3V0IGN1cnJlbnQgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZS4iKTtyZXR1cm59dmFyIGY9KCk9PkxhKGEuc3ViVHJlZSxpKGEucHJveHkpKTtubygoKT0+bXQoZix7Zmx1c2g6InBvc3QifSkpLFZvKGYpfWZ1bmN0aW9uIExhKGksYSl7aWYoaS5zaGFwZUZsYWcmMTI4KXt2YXIgZj1pLnN1c3BlbnNlO2k9Zi5hY3RpdmVCcmFuY2gsZi5wZW5kaW5nQnJhbmNoJiYhZi5pc0h5ZHJhdGluZyYmZi5lZmZlY3RzLnB1c2goKCk9PntMYShmLmFjdGl2ZUJyYW5jaCxhKX0pfWZvcig7aS5jb21wb25lbnQ7KWk9aS5jb21wb25lbnQuc3ViVHJlZTtpZihpLnNoYXBlRmxhZyYxJiZpLmVsKWV1KGkuZWwsYSk7ZWxzZSBpZihpLnR5cGU9PT1NbilpLmNoaWxkcmVuLmZvckVhY2goUz0+TGEoUyxhKSk7ZWxzZSBpZihpLnR5cGU9PT1IaSlmb3IodmFye2VsOmgsYW5jaG9yOkN9PWk7aCYmKGV1KGgsYSksaCE9PUMpOyloPWgubmV4dFNpYmxpbmd9ZnVuY3Rpb24gZXUoaSxhKXtpZihpLm5vZGVUeXBlPT09MSlmb3IodmFyIGYgaW4gYSlpLnNldEF0dHJpYnV0ZSgiLS0iLmNvbmNhdChmKSxhW2ZdKX12YXIgbWE9InRyYW5zaXRpb24iLF9hPSJhbmltYXRpb24iLHdjPShpLGEpPT57dmFye3Nsb3RzOmZ9PWE7cmV0dXJuIEtjKGR0LENjKGkpLGYpfTt3Yy5kaXNwbGF5TmFtZT0iVHJhbnNpdGlvbiI7dmFyIHR1PXtuYW1lOlN0cmluZyx0eXBlOlN0cmluZyxjc3M6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxkdXJhdGlvbjpbU3RyaW5nLE51bWJlcixPYmplY3RdLGVudGVyRnJvbUNsYXNzOlN0cmluZyxlbnRlckFjdGl2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGFwcGVhckZyb21DbGFzczpTdHJpbmcsYXBwZWFyQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhclRvQ2xhc3M6U3RyaW5nLGxlYXZlRnJvbUNsYXNzOlN0cmluZyxsZWF2ZUFjdGl2ZUNsYXNzOlN0cmluZyxsZWF2ZVRvQ2xhc3M6U3RyaW5nfSxiYT13Yy5wcm9wcz1kLmV4dGVuZCh7fSxkdC5wcm9wcyx0dSksUG89ZnVuY3Rpb24oaSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOltdO2QuaXNBcnJheShpKT9pLmZvckVhY2goZj0+ZiguLi5hKSk6aSYmaSguLi5hKX0sbnU9aT0+aT9kLmlzQXJyYXkoaSk/aS5zb21lKGE9PmEubGVuZ3RoPjEpOmkubGVuZ3RoPjE6ITE7ZnVuY3Rpb24gQ2MoaSl7dmFyIGE9e307Zm9yKHZhciBmIGluIGkpZiBpbiB0dXx8KGFbZl09aVtmXSk7aWYoaS5jc3M9PT0hMSlyZXR1cm4gYTt2YXJ7bmFtZTpoPSJ2Iix0eXBlOkMsZHVyYXRpb246UyxlbnRlckZyb21DbGFzczprPSIiLmNvbmNhdChoLCItZW50ZXItZnJvbSIpLGVudGVyQWN0aXZlQ2xhc3M6VT0iIi5jb25jYXQoaCwiLWVudGVyLWFjdGl2ZSIpLGVudGVyVG9DbGFzczpCPSIiLmNvbmNhdChoLCItZW50ZXItdG8iKSxhcHBlYXJGcm9tQ2xhc3M6Sz1rLGFwcGVhckFjdGl2ZUNsYXNzOlE9VSxhcHBlYXJUb0NsYXNzOmVlPUIsbGVhdmVGcm9tQ2xhc3M6WT0iIi5jb25jYXQoaCwiLWxlYXZlLWZyb20iKSxsZWF2ZUFjdGl2ZUNsYXNzOnZlPSIiLmNvbmNhdChoLCItbGVhdmUtYWN0aXZlIiksbGVhdmVUb0NsYXNzOlRlPSIiLmNvbmNhdChoLCItbGVhdmUtdG8iKX09aSxodD1ydShTKSxxZT1odCYmaHRbMF0sTnQ9aHQmJmh0WzFdLHtvbkJlZm9yZUVudGVyOnh0LG9uRW50ZXI6b2Usb25FbnRlckNhbmNlbGxlZDpoZSxvbkxlYXZlOl9lLG9uTGVhdmVDYW5jZWxsZWQ6JGUsb25CZWZvcmVBcHBlYXI6c3Q9eHQsb25BcHBlYXI6dHQ9b2Usb25BcHBlYXJDYW5jZWxsZWQ6eXQ9aGV9PWEsWWU9KHRlLGJlLFNlKT0+e2tzKHRlLGJlP2VlOkIpLGtzKHRlLGJlP1E6VSksU2UmJlNlKCl9LEw9KHRlLGJlKT0+e2tzKHRlLFRlKSxrcyh0ZSx2ZSksYmUmJmJlKCl9LEc9dGU9PihiZSxTZSk9Pnt2YXIgQ2U9dGU/dHQ6b2UsbnQ9KCk9PlllKGJlLHRlLFNlKTtQbyhDZSxbYmUsbnRdKSxpdSgoKT0+e2tzKGJlLHRlP0s6aykseWEoYmUsdGU/ZWU6QiksbnUoQ2UpfHxvdShiZSxDLHFlLG50KX0pfTtyZXR1cm4gZC5leHRlbmQoYSx7b25CZWZvcmVFbnRlcih0ZSl7UG8oeHQsW3RlXSkseWEodGUsaykseWEodGUsVSl9LG9uQmVmb3JlQXBwZWFyKHRlKXtQbyhzdCxbdGVdKSx5YSh0ZSxLKSx5YSh0ZSxRKX0sb25FbnRlcjpHKCExKSxvbkFwcGVhcjpHKCEwKSxvbkxlYXZlKHRlLGJlKXt2YXIgU2U9KCk9PkwodGUsYmUpO3lhKHRlLFkpLE9jKCkseWEodGUsdmUpLGl1KCgpPT57a3ModGUsWSkseWEodGUsVGUpLG51KF9lKXx8b3UodGUsQyxOdCxTZSl9KSxQbyhfZSxbdGUsU2VdKX0sb25FbnRlckNhbmNlbGxlZCh0ZSl7WWUodGUsITEpLFBvKGhlLFt0ZV0pfSxvbkFwcGVhckNhbmNlbGxlZCh0ZSl7WWUodGUsITApLFBvKHl0LFt0ZV0pfSxvbkxlYXZlQ2FuY2VsbGVkKHRlKXtMKHRlKSxQbygkZSxbdGVdKX19KX1mdW5jdGlvbiBydShpKXtpZihpPT1udWxsKXJldHVybiBudWxsO2lmKGQuaXNPYmplY3QoaSkpcmV0dXJuW2VjKGkuZW50ZXIpLGVjKGkubGVhdmUpXTt2YXIgYT1lYyhpKTtyZXR1cm5bYSxhXX1mdW5jdGlvbiBlYyhpKXt2YXIgYT1kLnRvTnVtYmVyKGkpO3JldHVybiBEdShhKSxhfWZ1bmN0aW9uIER1KGkpe3R5cGVvZiBpIT0ibnVtYmVyIj9zcygiPHRyYW5zaXRpb24+IGV4cGxpY2l0IGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIGdvdCAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShpKSwiLiIpKTppc05hTihpKSYmc3MoIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBkdXJhdGlvbiBpcyBOYU4gLSB0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuIil9ZnVuY3Rpb24geWEoaSxhKXthLnNwbGl0KC9ccysvKS5mb3JFYWNoKGY9PmYmJmkuY2xhc3NMaXN0LmFkZChmKSksKGkuX3Z0Y3x8KGkuX3Z0Yz1uZXcgU2V0KSkuYWRkKGEpfWZ1bmN0aW9uIGtzKGksYSl7YS5zcGxpdCgvXHMrLykuZm9yRWFjaChoPT5oJiZpLmNsYXNzTGlzdC5yZW1vdmUoaCkpO3ZhcntfdnRjOmZ9PWk7ZiYmKGYuZGVsZXRlKGEpLGYuc2l6ZXx8KGkuX3Z0Yz12b2lkIDApKX1mdW5jdGlvbiBpdShpKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9KX12YXIgRnU9MDtmdW5jdGlvbiBvdShpLGEsZixoKXt2YXIgQz1pLl9lbmRJZD0rK0Z1LFM9KCk9PntDPT09aS5fZW5kSWQmJmgoKX07aWYoZilyZXR1cm4gc2V0VGltZW91dChTLGYpO3Zhcnt0eXBlOmssdGltZW91dDpVLHByb3BDb3VudDpCfT1FYShpLGEpO2lmKCFrKXJldHVybiBoKCk7dmFyIEs9aysiZW5kIixRPTAsZWU9KCk9PntpLnJlbW92ZUV2ZW50TGlzdGVuZXIoSyxZKSxTKCl9LFk9dmU9Pnt2ZS50YXJnZXQ9PT1pJiYrK1E+PUImJmVlKCl9O3NldFRpbWVvdXQoKCk9PntRPEImJmVlKCl9LFUrMSksaS5hZGRFdmVudExpc3RlbmVyKEssWSl9ZnVuY3Rpb24gRWEoaSxhKXt2YXIgZj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpKSxoPVRlPT4oZltUZV18fCIiKS5zcGxpdCgiLCAiKSxDPWgobWErIkRlbGF5IiksUz1oKG1hKyJEdXJhdGlvbiIpLGs9T2woQyxTKSxVPWgoX2ErIkRlbGF5IiksQj1oKF9hKyJEdXJhdGlvbiIpLEs9T2woVSxCKSxRPW51bGwsZWU9MCxZPTA7YT09PW1hP2s+MCYmKFE9bWEsZWU9ayxZPVMubGVuZ3RoKTphPT09X2E/Sz4wJiYoUT1fYSxlZT1LLFk9Qi5sZW5ndGgpOihlZT1NYXRoLm1heChrLEspLFE9ZWU+MD9rPks/bWE6X2E6bnVsbCxZPVE/UT09PW1hP1MubGVuZ3RoOkIubGVuZ3RoOjApO3ZhciB2ZT1RPT09bWEmJi9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLy50ZXN0KGZbbWErIlByb3BlcnR5Il0pO3JldHVybnt0eXBlOlEsdGltZW91dDplZSxwcm9wQ291bnQ6WSxoYXNUcmFuc2Zvcm06dmV9fWZ1bmN0aW9uIE9sKGksYSl7Zm9yKDtpLmxlbmd0aDxhLmxlbmd0aDspaT1pLmNvbmNhdChpKTtyZXR1cm4gTWF0aC5tYXgoLi4uYS5tYXAoKGYsaCk9PkFjKGYpK0FjKGlbaF0pKSl9ZnVuY3Rpb24gQWMoaSl7cmV0dXJuIE51bWJlcihpLnNsaWNlKDAsLTEpLnJlcGxhY2UoIiwiLCIuIikpKjFlM31mdW5jdGlvbiBPYygpe3JldHVybiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodH12YXIgaWw9bmV3IFdlYWtNYXAsRGE9bmV3IFdlYWtNYXAsdGM9e25hbWU6IlRyYW5zaXRpb25Hcm91cCIscHJvcHM6ZC5leHRlbmQoe30sYmEse3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30pLHNldHVwKGksYSl7dmFye3Nsb3RzOmZ9PWEsaD1hbygpLEM9bGUoKSxTLGs7cmV0dXJuIFZvKCgpPT57aWYoISFTLmxlbmd0aCl7dmFyIFU9aS5tb3ZlQ2xhc3N8fCIiLmNvbmNhdChpLm5hbWV8fCJ2IiwiLW1vdmUiKTtpZighIXAoU1swXS5lbCxoLnZub2RlLmVsLFUpKXtTLmZvckVhY2goVGwpLFMuZm9yRWFjaChvKTt2YXIgQj1TLmZpbHRlcihsKTtPYygpLEIuZm9yRWFjaChLPT57dmFyIFE9Sy5lbCxlZT1RLnN0eWxlO3lhKFEsVSksZWUudHJhbnNmb3JtPWVlLndlYmtpdFRyYW5zZm9ybT1lZS50cmFuc2l0aW9uRHVyYXRpb249IiI7dmFyIFk9US5fbW92ZUNiPXZlPT57dmUmJnZlLnRhcmdldCE9PVF8fCghdmV8fC90cmFuc2Zvcm0kLy50ZXN0KHZlLnByb3BlcnR5TmFtZSkpJiYoUS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixZKSxRLl9tb3ZlQ2I9bnVsbCxrcyhRLFUpKX07US5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixZKX0pfX19KSwoKT0+e3ZhciBVPW0udG9SYXcoaSksQj1DYyhVKSxLPVUudGFnfHxNbjtTPWssaz1mLmRlZmF1bHQ/dG8oZi5kZWZhdWx0KCkpOltdO2Zvcih2YXIgUT0wO1E8ay5sZW5ndGg7USsrKXt2YXIgZWU9a1tRXTtlZS5rZXkhPW51bGw/ZHIoZWUsSm4oZWUsQixDLGgpKTpzcygiPFRyYW5zaXRpb25Hcm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZC4iKX1pZihTKWZvcih2YXIgWT0wO1k8Uy5sZW5ndGg7WSsrKXt2YXIgdmU9U1tZXTtkcih2ZSxKbih2ZSxCLEMsaCkpLGlsLnNldCh2ZSx2ZS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9cmV0dXJuIHNyKEssbnVsbCxrKX19fSxhdT1pPT5kZWxldGUgaS5tb2RlO3RjLnByb3BzO3ZhciBzdT10YztmdW5jdGlvbiBUbChpKXt2YXIgYT1pLmVsO2EuX21vdmVDYiYmYS5fbW92ZUNiKCksYS5fZW50ZXJDYiYmYS5fZW50ZXJDYigpfWZ1bmN0aW9uIG8oaSl7RGEuc2V0KGksaS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9ZnVuY3Rpb24gbChpKXt2YXIgYT1pbC5nZXQoaSksZj1EYS5nZXQoaSksaD1hLmxlZnQtZi5sZWZ0LEM9YS50b3AtZi50b3A7aWYoaHx8Qyl7dmFyIFM9aS5lbC5zdHlsZTtyZXR1cm4gUy50cmFuc2Zvcm09Uy53ZWJraXRUcmFuc2Zvcm09InRyYW5zbGF0ZSgiLmNvbmNhdChoLCJweCwiKS5jb25jYXQoQywicHgpIiksUy50cmFuc2l0aW9uRHVyYXRpb249IjBzIixpfX1mdW5jdGlvbiBwKGksYSxmKXt2YXIgaD1pLmNsb25lTm9kZSgpO2kuX3Z0YyYmaS5fdnRjLmZvckVhY2goaz0+e2suc3BsaXQoL1xzKy8pLmZvckVhY2goVT0+VSYmaC5jbGFzc0xpc3QucmVtb3ZlKFUpKX0pLGYuc3BsaXQoL1xzKy8pLmZvckVhY2goaz0+ayYmaC5jbGFzc0xpc3QuYWRkKGspKSxoLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBDPWEubm9kZVR5cGU9PT0xP2E6YS5wYXJlbnROb2RlO0MuYXBwZW5kQ2hpbGQoaCk7dmFye2hhc1RyYW5zZm9ybTpTfT1FYShoKTtyZXR1cm4gQy5yZW1vdmVDaGlsZChoKSxTfXZhciBiPWk9Pnt2YXIgYT1pLnByb3BzWyJvblVwZGF0ZTptb2RlbFZhbHVlIl07cmV0dXJuIGQuaXNBcnJheShhKT9mPT5kLmludm9rZUFycmF5Rm5zKGEsZik6YX0sUD17Y3JlYXRlZChpLGEsZil7dmFye3ZhbHVlOmgsbW9kaWZpZXJzOnt0cmltOkMsbnVtYmVyOlN9fT1hO2kudmFsdWU9aD09bnVsbD8iIjpoLGkuX2Fzc2lnbj1iKGYpLEpjKGksImlucHV0IixrPT57dmFyIFU9ay5kZXRhaWwudmFsdWUsQj1pLnBhZ2VOb2RlO2kucGFnZU5vZGU9bnVsbCxpLnZhbHVlPVUsaS5wYWdlTm9kZT1CLEM/VT1VLnRyaW0oKTpTJiYoVT1kLnRvTnVtYmVyKFUpKSxpLl9hc3NpZ24oVSl9KX0sYmVmb3JlVXBkYXRlKGksYSxmKXt2YXJ7dmFsdWU6aH09YTtpLl9hc3NpZ249YihmKTt2YXIgQz1oPT1udWxsPyIiOmg7aS52YWx1ZSE9PUMmJihpLnZhbHVlPUMpfX0sVD1QLHg9WyJjdHJsIiwic2hpZnQiLCJhbHQiLCJtZXRhIl0sej17c3RvcDppPT5pLnN0b3BQcm9wYWdhdGlvbigpLHByZXZlbnQ6aT0+aS5wcmV2ZW50RGVmYXVsdCgpLHNlbGY6aT0+aS50YXJnZXQhPT1pLmN1cnJlbnRUYXJnZXQsY3RybDppPT4haS5jdHJsS2V5LHNoaWZ0Omk9PiFpLnNoaWZ0S2V5LGFsdDppPT4haS5hbHRLZXksbWV0YTppPT4haS5tZXRhS2V5LGxlZnQ6aT0+ImJ1dHRvbiJpbiBpJiZpLmJ1dHRvbiE9PTAsbWlkZGxlOmk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0xLHJpZ2h0Omk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0yLGV4YWN0OihpLGEpPT54LnNvbWUoZj0+aVsiIi5jb25jYXQoZiwiS2V5IildJiYhYS5pbmNsdWRlcyhmKSl9LEg9KGksYSk9Pnt2YXIgZj1mdW5jdGlvbihoKXtmb3IodmFyIEM9MDtDPGEubGVuZ3RoO0MrKyl7dmFyIFM9elthW0NdXTtpZihTJiZTKGgsYSkpcmV0dXJufWZvcih2YXIgaz1hcmd1bWVudHMubGVuZ3RoLFU9bmV3IEFycmF5KGs+MT9rLTE6MCksQj0xO0I8aztCKyspVVtCLTFdPWFyZ3VtZW50c1tCXTtyZXR1cm4gaShoLC4uLlUpfTtyZXR1cm4gZi5tb2RpZmllcnM9YSxmfSxYPXtlc2M6ImVzY2FwZSIsc3BhY2U6IiAiLHVwOiJhcnJvdy11cCIsbGVmdDoiYXJyb3ctbGVmdCIscmlnaHQ6ImFycm93LXJpZ2h0Iixkb3duOiJhcnJvdy1kb3duIixkZWxldGU6ImJhY2tzcGFjZSJ9LHllPShpLGEpPT5mPT57aWYoImtleSJpbiBmKXt2YXIgaD1kLmh5cGhlbmF0ZShmLmtleSk7aWYoYS5zb21lKEM9PkM9PT1ofHxYW0NdPT09aCkpcmV0dXJuIGkoZil9fSx1ZT17YmVmb3JlTW91bnQoaSxhKXt2YXJ7dmFsdWU6Zn09YTthZShpLGYpfSx1cGRhdGVkKGksYSl7dmFye3ZhbHVlOmYsb2xkVmFsdWU6aH09YTshZiE9IWgmJmFlKGksZil9LGJlZm9yZVVubW91bnQoaSxhKXt2YXJ7dmFsdWU6Zn09YTthZShpLGYpfX07ZnVuY3Rpb24gYWUoaSxhKXtpLnNldEF0dHJpYnV0ZSgiLnZTaG93IiwhIWEpfXZhciBrZT1kLmV4dGVuZCh7cGF0Y2hQcm9wOnJsLGZvcmNlUGF0Y2hQcm9wOkkuZm9yY2VQYXRjaFByb3B9LFJyKSxNZTtmdW5jdGlvbiB3dCgpe3JldHVybiBNZXx8KE1lPVlzKGtlKSl9dmFyIHV0PWZ1bmN0aW9uKCl7d3QoKS5yZW5kZXIoLi4uYXJndW1lbnRzKX0sa3Q9ZnVuY3Rpb24oKXt2YXIgaT13dCgpLmNyZWF0ZUFwcCguLi5hcmd1bWVudHMpO2ZlKGkpO3Zhcnttb3VudDphfT1pO3JldHVybiBpLm1vdW50PWY9PihkLmlzU3RyaW5nKGYpJiYoZj09PSIjYXBwIiYmS28oaSxhcyksZj1nYShmKSksZiYmYShmLCExLCExKSksaX0sUnQ9a3Q7ZnVuY3Rpb24gZmUoaSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGkuY29uZmlnLCJpc05hdGl2ZVRhZyIse3ZhbHVlOmE9PmQuaXNIVE1MVGFnKGEpfHxkLmlzU1ZHVGFnKGEpLHdyaXRhYmxlOiExfSl9ZnVuY3Rpb24gSWUoKXt9ZnVuY3Rpb24gTmUoKXt9ZnVuY3Rpb24gWGUoaSl7cmV0dXJuIGQuaXNPYmplY3QoaSk/SS5KU09OX1BST1RPQ09MK0pTT04uc3RyaW5naWZ5KGkpOml9dmFyIGN0PWk9PlhlKGkpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodywiY2FtZWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLmNhbWVsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJjYXBpdGFsaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYXBpdGFsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJub3JtYWxpemVDbGFzcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQubm9ybWFsaXplQ2xhc3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIm5vcm1hbGl6ZVByb3BzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5ub3JtYWxpemVQcm9wc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywibm9ybWFsaXplU3R5bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLm5vcm1hbGl6ZVN0eWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJ0b0Rpc3BsYXlTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLnRvRGlzcGxheVN0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywidG9IYW5kbGVyS2V5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC50b0hhbmRsZXJLZXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIkVmZmVjdFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5FZmZlY3RTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywiUmVhY3RpdmVFZmZlY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLlJlYWN0aXZlRWZmZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJUcmFja09wVHlwZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLlRyYWNrT3BUeXBlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywiVHJpZ2dlck9wVHlwZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLlRyaWdnZXJPcFR5cGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJjdXN0b21SZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLmN1c3RvbVJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywiZWZmZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5lZmZlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsImVmZmVjdFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5lZmZlY3RTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywiZ2V0Q3VycmVudFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5nZXRDdXJyZW50U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsImlzUHJveHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLmlzUHJveHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsImlzUmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLmlzUmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsImlzUmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLmlzUmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsImlzUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5pc1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywiaXNTaGFsbG93Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5pc1NoYWxsb3d9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIm1hcmtSYXciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLm1hcmtSYXd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIm9uU2NvcGVEaXNwb3NlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5vblNjb3BlRGlzcG9zZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywicHJveHlSZWZzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5wcm94eVJlZnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsInJlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5yZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywicmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLnJlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJyZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLnJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywic2hhbGxvd1JlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5zaGFsbG93UmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsInNoYWxsb3dSZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uc2hhbGxvd1JlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJzaGFsbG93UmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5zaGFsbG93UmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJzdG9wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5zdG9wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJ0b1JhdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0udG9SYXd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsInRvUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS50b1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodywidG9SZWZzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS50b1JlZnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsInRvVmFsdWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLnRvVmFsdWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsInRyaWdnZXJSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLnRyaWdnZXJSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsInVucmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS51bnJlZn19KSx3LkJhc2VUcmFuc2l0aW9uPWR0LHcuQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnM9ZGUsdy5Db21tZW50PURuLHcuRGVwcmVjYXRpb25UeXBlcz1RbCx3LkVycm9yQ29kZXM9cG4sdy5FcnJvclR5cGVTdHJpbmdzPU11LHcuRnJhZ21lbnQ9TW4sdy5LZWVwQWxpdmU9cmEsdy5TdGF0aWM9SGksdy5TdXNwZW5zZT1Cbyx3LlRlbGVwb3J0PUpzLHcuVGV4dD1Mbix3LlRyYW5zaXRpb249d2Msdy5UcmFuc2l0aW9uR3JvdXA9c3Usdy5hc3NlcnROdW1iZXI9c2Usdy5jYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZz1zbix3LmNhbGxXaXRoRXJyb3JIYW5kbGluZz1Lbix3LmNsb25lVk5vZGU9amksdy5jb21wYXRVdGlscz1TYyx3LmNvbXB1dGVkPVljLHcuY3JlYXRlQXBwPWt0LHcuY3JlYXRlQmxvY2s9VG8sdy5jcmVhdGVDb21tZW50PWdhLHcuY3JlYXRlQ29tbWVudFZOb2RlPUlpLHcuY3JlYXRlRWxlbWVudD1oYSx3LmNyZWF0ZUVsZW1lbnRCbG9jaz1Pbyx3LmNyZWF0ZUVsZW1lbnRWTm9kZT1Ybix3LmNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyPXdzLHcuY3JlYXRlUHJvcHNSZXN0UHJveHk9X3Qsdy5jcmVhdGVSZW5kZXJlcj1Zcyx3LmNyZWF0ZVNTUkFwcD1SdCx3LmNyZWF0ZVNsb3RzPWZjLHcuY3JlYXRlU3RhdGljVk5vZGU9TnUsdy5jcmVhdGVUZXh0Tm9kZT1Ocyx3LmNyZWF0ZVRleHRWTm9kZT12Yyx3LmNyZWF0ZVZOb2RlPXNyLHcuY3JlYXRlVnVlQXBwPWt0LHcuZGVmaW5lQXN5bmNDb21wb25lbnQ9SWEsdy5kZWZpbmVDb21wb25lbnQ9Wm4sdy5kZWZpbmVFbWl0cz1uZSx3LmRlZmluZUV4cG9zZT1pZSx3LmRlZmluZU1vZGVsPUJlLHcuZGVmaW5lT3B0aW9ucz1nZSx3LmRlZmluZVByb3BzPSQsdy5kZWZpbmVTbG90cz13ZSx3LmRldnRvb2xzPUVuLHcuZGV2dG9vbHNJbml0QXBwPUtvLHcuZ2V0Q3VycmVudEluc3RhbmNlPWFvLHcuZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuPXRvLHcuZ3VhcmRSZWFjdGl2ZVByb3BzPSRpLHcuaD1LYyx3LmhhbmRsZUVycm9yPWtuLHcuaGFzSW5qZWN0aW9uQ29udGV4dD1LYSx3LmluaXRDdXN0b21Gb3JtYXR0ZXI9QnUsdy5pbmplY3Q9b2Esdy5pbmplY3RIb29rPVBpLHcuaXNNZW1vU2FtZT1abCx3LmlzUnVudGltZU9ubHk9eWMsdy5pc1ZOb2RlPVdyLHcubG9nRXJyb3I9THIsdy5tZXJnZURlZmF1bHRzPUZ0LHcubWVyZ2VNb2RlbHM9U3Qsdy5tZXJnZVByb3BzPWtpLHcubmV4dFRpY2s9Y24sdy5vbkFjdGl2YXRlZD1obCx3Lm9uQmVmb3JlQWN0aXZhdGU9SWUsdy5vbkJlZm9yZURlYWN0aXZhdGU9TmUsdy5vbkJlZm9yZU1vdW50PVJhLHcub25CZWZvcmVVbm1vdW50PVVvLHcub25CZWZvcmVVcGRhdGU9emEsdy5vbkRlYWN0aXZhdGVkPXJyLHcub25FcnJvckNhcHR1cmVkPUJsLHcub25Nb3VudGVkPW5vLHcub25SZW5kZXJUcmFja2VkPWdsLHcub25SZW5kZXJUcmlnZ2VyZWQ9R2Esdy5vblNlcnZlclByZWZldGNoPWdzLHcub25Vbm1vdW50ZWQ9V2Esdy5vblVwZGF0ZWQ9Vm8sdy5vcGVuQmxvY2s9WnMsdy5wb3BTY29wZUlkPUZyLHcucHJvdmlkZT1Hbix3LnB1c2hTY29wZUlkPWlpLHcucXVldWVQb3N0Rmx1c2hDYj1ucix3LnJlZ2lzdGVyUnVudGltZUNvbXBpbGVyPXNvLHcucmVuZGVyPXV0LHcucmVuZGVyTGlzdD1Fbyx3LnJlbmRlclNsb3Q9dmwsdy5yZXNvbHZlQ29tcG9uZW50PVFvLHcucmVzb2x2ZURpcmVjdGl2ZT1Xbix3LnJlc29sdmVEeW5hbWljQ29tcG9uZW50PUVyLHcucmVzb2x2ZUZpbHRlcj1YbCx3LnJlc29sdmVUcmFuc2l0aW9uSG9va3M9Sm4sdy5zZXRCbG9ja1RyYWNraW5nPXRzLHcuc2V0RGV2dG9vbHNIb29rPWxzLHcuc2V0VHJhbnNpdGlvbkhvb2tzPWRyLHcuc3NyQ29udGV4dEtleT1aZSx3LnNzclV0aWxzPUx1LHcudG9IYW5kbGVycz1Icyx3LnRyYW5zZm9ybVZOb2RlQXJncz1QdSx3LnVzZUF0dHJzPUZlLHcudXNlQ3NzTW9kdWxlPVhjLHcudXNlQ3NzVmFycz1RYyx3LnVzZU1vZGVsPXh1LHcudXNlU1NSQ29udGV4dD1LZSx3LnVzZVNsb3RzPUVlLHcudXNlVHJhbnNpdGlvblN0YXRlPWxlLHcudk1vZGVsRHluYW1pYz1ULHcudk1vZGVsVGV4dD1QLHcudlNob3c9dWUsdy52ZXJzaW9uPWFzLHcud2Fybj1zcyx3LndhdGNoPUhyLHcud2F0Y2hFZmZlY3Q9bXQsdy53YXRjaFBvc3RFZmZlY3Q9ZXQsdy53YXRjaFN5bmNFZmZlY3Q9bHQsdy53aXRoQXN5bmNDb250ZXh0PVZ0LHcud2l0aEN0eD1SZSx3LndpdGhEZWZhdWx0cz1IZSx3LndpdGhEaXJlY3RpdmVzPUZpLHcud2l0aEtleXM9eWUsdy53aXRoTWVtbz1KbCx3LndpdGhNb2RpZmllcnM9SCx3LndpdGhTY29wZUlkPSR0LHcud3A9Y3Qsd30oe30sXyxBLGMpO3JldHVybiBSLl9fVFlQRV9fPSJ2dWUiLFJ9ZnVuY3Rpb24gRW0oZyxjLF8pe2xldCBBPV8uVnVlLFI9Xy5zZXRUaW1lb3V0LHc9Xy5jbGVhclRpbWVvdXQsZD1fLnNldEludGVydmFsLG09Xy5jbGVhckludGVydmFsLEk9Xy5fX3VuaUNvbmZpZyxPZT1fLl9fdW5pUm91dGVzLGF0PV8uVnVlU2hhcmVkLEV0PV8uVW5pU2hhcmVkO3ZhciBjZT1mdW5jdGlvbihaLHNlLHBuKXsidXNlIHN0cmljdCI7dmFyIE1yPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixLbj1mdW5jdGlvbigpe2xldCBlPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKHZhciB0PTA7dDxNci5sZW5ndGg7dCsrKWVbTXIuY2hhckNvZGVBdCh0KV09dDtyZXR1cm4gZX0oKTtmdW5jdGlvbiBzbihlKXt2YXIgdD1uZXcgVWludDhBcnJheShlKSxuLHI9dC5sZW5ndGgscz0iIjtmb3Iobj0wO248cjtuKz0zKXMrPU1yW3Rbbl0+PjJdLHMrPU1yWyh0W25dJjMpPDw0fHRbbisxXT4+NF0scys9TXJbKHRbbisxXSYxNSk8PDJ8dFtuKzJdPj42XSxzKz1Nclt0W24rMl0mNjNdO3JldHVybiByJTM9PT0yP3M9cy5zdWJzdHJpbmcoMCxzLmxlbmd0aC0xKSsiPSI6ciUzPT09MSYmKHM9cy5zdWJzdHJpbmcoMCxzLmxlbmd0aC0yKSsiPT0iKSxzfWZ1bmN0aW9uIGtuKGUpe3ZhciB0PWUubGVuZ3RoKi43NSxuPWUubGVuZ3RoLHIscz0wLHUsdixFLEY7ZVtlLmxlbmd0aC0xXT09PSI9IiYmKHQtLSxlW2UubGVuZ3RoLTJdPT09Ij0iJiZ0LS0pO3ZhciBOPW5ldyBBcnJheUJ1ZmZlcih0KSxNPW5ldyBVaW50OEFycmF5KE4pO2ZvcihyPTA7cjxuO3IrPTQpdT1LbltlLmNoYXJDb2RlQXQocildLHY9S25bZS5jaGFyQ29kZUF0KHIrMSldLEU9S25bZS5jaGFyQ29kZUF0KHIrMildLEY9S25bZS5jaGFyQ29kZUF0KHIrMyldLE1bcysrXT11PDwyfHY+PjQsTVtzKytdPSh2JjE1KTw8NHxFPj4yLE1bcysrXT0oRSYzKTw8NnxGJjYzO3JldHVybiBOfWxldCBMcj1bIm9yaWdpbmFsIiwiY29tcHJlc3NlZCJdLFRyPVsiYWxidW0iLCJjYW1lcmEiXSxlcj1bIkdFVCIsIk9QVElPTlMiLCJIRUFEIiwiUE9TVCIsIlBVVCIsIkRFTEVURSIsIlRSQUNFIiwiQ09OTkVDVCIsIlBBVENIIl07ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4hZXx8dC5pbmRleE9mKGUpPT09LTE/dFswXTplfWZ1bmN0aW9uIGVuKGUsdCl7cmV0dXJuIVouaXNBcnJheShlKXx8ZS5sZW5ndGg9PT0wfHxlLmZpbmQobj0+dC5pbmRleE9mKG4pPT09LTEpP3Q6ZX1mdW5jdGlvbiBSbihlLHQpe2NvbnNvbGUud2FybihgJHtlfTogJHt0fWApfWZ1bmN0aW9uIHRyKGUsdCxuLHIpe3J8fChyPVJuKTtmb3IobGV0IHMgaW4gbil7bGV0IHU9am4ocyx0W3NdLG5bc10sIVouaGFzT3duKHQscykpO1ouaXNTdHJpbmcodSkmJnIoZSx1KX19ZnVuY3Rpb24geG4oZSx0LG4scil7aWYoIW4pcmV0dXJuO2lmKCFaLmlzQXJyYXkobikpcmV0dXJuIHRyKGUsdFswXXx8T2JqZWN0LmNyZWF0ZShudWxsKSxuLHIpO2xldCBzPW4ubGVuZ3RoLHU9dC5sZW5ndGg7Zm9yKGxldCB2PTA7djxzO3YrKyl7bGV0IEU9blt2XSxGPU9iamVjdC5jcmVhdGUobnVsbCk7dT52JiYoRltFLm5hbWVdPXRbdl0pLHRyKGUsRix7W0UubmFtZV06RX0scil9fWZ1bmN0aW9uIGpuKGUsdCxuLHIpe1ouaXNQbGFpbk9iamVjdChuKXx8KG49e3R5cGU6bn0pO2xldHt0eXBlOnMscmVxdWlyZWQ6dSx2YWxpZGF0b3I6dn09bjtpZih1JiZyKXJldHVybidNaXNzaW5nIHJlcXVpcmVkIGFyZ3M6ICInK2UrJyInO2lmKCEodD09bnVsbCYmIXUpKXtpZihzIT1udWxsKXtsZXQgRT0hMSxGPVouaXNBcnJheShzKT9zOltzXSxOPVtdO2ZvcihsZXQgTT0wO008Ri5sZW5ndGgmJiFFO00rKyl7bGV0e3ZhbGlkOm1lLGV4cGVjdGVkVHlwZTpBZX09emUodCxGW01dKTtOLnB1c2goQWV8fCIiKSxFPW1lfWlmKCFFKXJldHVybiBvdChlLHQsTil9aWYodilyZXR1cm4gdih0KX19bGV0IGhpPVoubWFrZU1hcCgiU3RyaW5nLE51bWJlcixCb29sZWFuLEZ1bmN0aW9uLFN5bWJvbCIpO2Z1bmN0aW9uIHplKGUsdCl7bGV0IG4scj1EdCh0KTtpZihoaShyKSl7bGV0IHM9dHlwZW9mIGU7bj1zPT09ci50b0xvd2VyQ2FzZSgpLCFuJiZzPT09Im9iamVjdCImJihuPWUgaW5zdGFuY2VvZiB0KX1lbHNlIHI9PT0iT2JqZWN0Ij9uPVouaXNPYmplY3QoZSk6cj09PSJBcnJheSI/bj1aLmlzQXJyYXkoZSk6bj1lIGluc3RhbmNlb2YgdHx8Wi50b1Jhd1R5cGUoZSk9PT1EdCh0KTtyZXR1cm57dmFsaWQ6bixleHBlY3RlZFR5cGU6cn19ZnVuY3Rpb24gb3QoZSx0LG4pe2xldCByPWBJbnZhbGlkIGFyZ3M6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBhcmdzICIke2V9Ii4gRXhwZWN0ZWQgJHtuLm1hcChaLmNhcGl0YWxpemUpLmpvaW4oIiwgIil9YCxzPW5bMF0sdT1aLnRvUmF3VHlwZSh0KSx2PWNuKHQscyksRT1jbih0LHUpO3JldHVybiBuLmxlbmd0aD09PTEmJm5uKHMpJiYhYW4ocyx1KSYmKHIrPWAgd2l0aCB2YWx1ZSAke3Z9YCkscis9YCwgZ290ICR7dX0gYCxubih1KSYmKHIrPWB3aXRoIHZhbHVlICR7RX0uYCkscn1mdW5jdGlvbiBEdChlKXtsZXQgdD1lJiZlLnRvU3RyaW5nKCkubWF0Y2goL15ccypmdW5jdGlvbiAoXHcrKS8pO3JldHVybiB0P3RbMV06IiJ9ZnVuY3Rpb24gY24oZSx0KXtyZXR1cm4gdD09PSJTdHJpbmciP2AiJHtlfSJgOnQ9PT0iTnVtYmVyIj9gJHtOdW1iZXIoZSl9YDpgJHtlfWB9ZnVuY3Rpb24gbm4oZSl7cmV0dXJuWyJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIl0uc29tZShuPT5lLnRvTG93ZXJDYXNlKCk9PT1uKX1mdW5jdGlvbiBhbiguLi5lKXtyZXR1cm4gZS5zb21lKHQ9PnQudG9Mb3dlckNhc2UoKT09PSJib29sZWFuIil9ZnVuY3Rpb24gem4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlLmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX19bGV0IERyPTEsbnI9e307ZnVuY3Rpb24gcXIoZSx0LG4scj0hMSl7cmV0dXJuIG5yW2VdPXtuYW1lOnQsa2VlcEFsaXZlOnIsY2FsbGJhY2s6bn0sZX1mdW5jdGlvbiBVcihlLHQsbil7aWYodHlwZW9mIGU9PSJudW1iZXIiKXtsZXQgcj1ucltlXTtpZihyKXJldHVybiByLmtlZXBBbGl2ZXx8ZGVsZXRlIG5yW2VdLHIuY2FsbGJhY2sodCxuKX1yZXR1cm4gdH1mdW5jdGlvbiBDaShlKXtmb3IobGV0IHQgaW4gbnIpaWYobnJbdF0ubmFtZT09PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVWEoZSx0KXtmb3IobGV0IG4gaW4gbnIpe2xldCByPW5yW25dO3IuY2FsbGJhY2s9PT10JiZyLm5hbWU9PT1lJiZkZWxldGUgbnJbbl19fWZ1bmN0aW9uIHFvKGUpe3B0Lm9mZigiYXBpLiIrZSl9ZnVuY3Rpb24gZ2koZSl7cHQub24oImFwaS4iK2UsdD0+e2ZvcihsZXQgbiBpbiBucil7bGV0IHI9bnJbbl07ci5uYW1lPT09ZSYmci5jYWxsYmFjayh0KX19KX1mdW5jdGlvbiBQcihlLHQpe3JldHVybiBxcihEcisrLGUsdCwhMCl9bGV0IE5yPSJzdWNjZXNzIix1cj0iZmFpbCIsUm89ImNvbXBsZXRlIjtmdW5jdGlvbiBLaShlKXtsZXQgdD17fTtmb3IobGV0IG4gaW4gZSl7bGV0IHI9ZVtuXTtaLmlzRnVuY3Rpb24ocikmJih0W25dPXpuKHIpLGRlbGV0ZSBlW25dKX1yZXR1cm4gdH1mdW5jdGlvbiBKaShlLHQpe3JldHVybiFlfHxlLmluZGV4T2YoIjpmYWlsIik9PT0tMT90KyI6b2siOnQrZS5zdWJzdHJpbmcoZS5pbmRleE9mKCI6ZmFpbCIpKX1mdW5jdGlvbiBobyhlLHQ9e30se2JlZm9yZUFsbDpuLGJlZm9yZVN1Y2Nlc3M6cn09e30pe1ouaXNQbGFpbk9iamVjdCh0KXx8KHQ9e30pO2xldHtzdWNjZXNzOnMsZmFpbDp1LGNvbXBsZXRlOnZ9PUtpKHQpLEU9Wi5pc0Z1bmN0aW9uKHMpLEY9Wi5pc0Z1bmN0aW9uKHUpLE49Wi5pc0Z1bmN0aW9uKHYpLE09RHIrKztyZXR1cm4gcXIoTSxlLG1lPT57bWU9bWV8fHt9LG1lLmVyck1zZz1KaShtZS5lcnJNc2csZSksWi5pc0Z1bmN0aW9uKG4pJiZuKG1lKSxtZS5lcnJNc2c9PT1lKyI6b2siPyhaLmlzRnVuY3Rpb24ocikmJnIobWUsdCksRSYmcyhtZSkpOkYmJnUobWUpLE4mJnYobWUpfSksTX1sZXQgWmk9InN1Y2Nlc3MiLENhPSJmYWlsIixCaT0iY29tcGxldGUiLG1uPXt9LEFuPXt9O2Z1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKG4sdCl8fG59fWZ1bmN0aW9uIG9yKGUsdCxuKXtsZXQgcj0hMTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl7bGV0IHU9ZVtzXTtpZihyKXI9UHJvbWlzZS5yZXNvbHZlKE1pKHUsbikpO2Vsc2V7bGV0IHY9dSh0LG4pO2lmKFouaXNQcm9taXNlKHYpJiYocj1Qcm9taXNlLnJlc29sdmUodikpLHY9PT0hMSlyZXR1cm57dGhlbigpe30sY2F0Y2goKXt9fX19cmV0dXJuIHJ8fHt0aGVuKHMpe3JldHVybiBzKHQpfSxjYXRjaCgpe319fWZ1bmN0aW9uIHZpKGUsdD17fSl7cmV0dXJuW1ppLENhLEJpXS5mb3JFYWNoKG49PntsZXQgcj1lW25dO2lmKCFaLmlzQXJyYXkocikpcmV0dXJuO2xldCBzPXRbbl07dFtuXT1mdW5jdGlvbih2KXtvcihyLHYsdCkudGhlbihFPT5aLmlzRnVuY3Rpb24ocykmJnMoRSl8fEUpfX0pLHR9ZnVuY3Rpb24gWW8oZSx0KXtsZXQgbj1bXTtaLmlzQXJyYXkobW4ucmV0dXJuVmFsdWUpJiZuLnB1c2goLi4ubW4ucmV0dXJuVmFsdWUpO2xldCByPUFuW2VdO3JldHVybiByJiZaLmlzQXJyYXkoci5yZXR1cm5WYWx1ZSkmJm4ucHVzaCguLi5yLnJldHVyblZhbHVlKSxuLmZvckVhY2gocz0+e3Q9cyh0KXx8dH0pLHR9ZnVuY3Rpb24gS28oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtPYmplY3Qua2V5cyhtbikuZm9yRWFjaChyPT57ciE9PSJyZXR1cm5WYWx1ZSImJih0W3JdPW1uW3JdLnNsaWNlKCkpfSk7bGV0IG49QW5bZV07cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmZvckVhY2gocj0+e3IhPT0icmV0dXJuVmFsdWUiJiYodFtyXT0odFtyXXx8W10pLmNvbmNhdChuW3JdKSl9KSx0fWZ1bmN0aW9uIG1pKGUsdCxuLHIpe2xldCBzPUtvKGUpO3JldHVybiBzJiZPYmplY3Qua2V5cyhzKS5sZW5ndGg/Wi5pc0FycmF5KHMuaW52b2tlKT9vcihzLmludm9rZSxuKS50aGVuKHY9PnQodmkoS28oZSksdiksLi4ucikpOnQodmkocyxuKSwuLi5yKTp0KG4sLi4ucil9ZnVuY3Rpb24gWXIoZSl7cmV0dXJuISEoWi5pc1BsYWluT2JqZWN0KGUpJiZbTnIsdXIsUm9dLmZpbmQodD0+Wi5pc0Z1bmN0aW9uKGVbdF0pKSl9ZnVuY3Rpb24gQWEoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gcmkoZSx0KXtyZXR1cm4obj17fSwuLi5yKT0+WXIobik/WW8oZSxtaShlLHQsbixyKSk6WW8oZSxuZXcgUHJvbWlzZSgocyx1KT0+e21pKGUsdCxaLmV4dGVuZChuLHtzdWNjZXNzOnMsZmFpbDp1fSkscil9KSl9ZnVuY3Rpb24gYnIoZSx0KXtsZXQgbj1lWzBdO2lmKCF0fHwhdC5mb3JtYXRBcmdzfHwhWi5pc1BsYWluT2JqZWN0KHQuZm9ybWF0QXJncykmJlouaXNQbGFpbk9iamVjdChuKSlyZXR1cm47bGV0IHI9dC5mb3JtYXRBcmdzLHM9T2JqZWN0LmtleXMocik7Zm9yKGxldCB1PTA7dTxzLmxlbmd0aDt1Kyspe2xldCB2PXNbdV0sRT1yW3ZdO2lmKFouaXNGdW5jdGlvbihFKSl7bGV0IEY9RShlWzBdW3ZdLG4pO2lmKFouaXNTdHJpbmcoRikpcmV0dXJuIEZ9ZWxzZSBaLmhhc093bihuLHYpfHwoblt2XT1FKX19ZnVuY3Rpb24gZ28oZSx0LG4pe2xldCByPXtlcnJNc2c6dCsiOm9rIn07cmV0dXJuIFVyKGUsWi5leHRlbmQobnx8e30scikpfWZ1bmN0aW9uIE9hKGUsdCxuLHI9e30pe2xldCBzPXQrIjpmYWlsIix1PSIiO24/bi5pbmRleE9mKHMpPT09MD91PW46dT1zKyIgIituOnU9cyxkZWxldGUgci5lcnJDb2RlO2xldCB2PVouZXh0ZW5kKHtlcnJNc2c6dX0scik7cmV0dXJuIFVyKGUsdil9ZnVuY3Rpb24gTGkoZSx0LG4scil7aWYociYmci5iZWZvcmVJbnZva2Upe2xldCB1PXIuYmVmb3JlSW52b2tlKHQpO2lmKFouaXNTdHJpbmcodSkpcmV0dXJuIHV9bGV0IHM9YnIodCxyKTtpZihzKXJldHVybiBzfWZ1bmN0aW9uIEFpKGUpe2lmKCFaLmlzRnVuY3Rpb24oZSkpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3M6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBhcmdzICJjYWxsYmFjayIuIEV4cGVjdGVkIEZ1bmN0aW9uJyl9ZnVuY3Rpb24geG8oZSx0LG4pe3JldHVybiByPT57QWkocik7bGV0IHM9TGkoZSxbcl0sdm9pZCAwLG4pO2lmKHMpdGhyb3cgbmV3IEVycm9yKHMpO2xldCB1PSFDaShlKTtQcihlLHIpLHUmJihnaShlKSx0KCkpfX1mdW5jdGlvbiBKbyhlLHQsbil7cmV0dXJuIHI9PntBaShyKTtsZXQgcz1MaShlLFtyXSx2b2lkIDAsbik7aWYocyl0aHJvdyBuZXcgRXJyb3Iocyk7ZT1lLnJlcGxhY2UoIm9mZiIsIm9uIiksVWEoZSxyKSxDaShlKXx8KHFvKGUpLHQoKSl9fWZ1bmN0aW9uIHZvKGUpe3JldHVybiFlfHxaLmlzU3RyaW5nKGUpP2U6ZS5zdGFjaz8oKHR5cGVvZiBnbG9iYWxUaGlzPT0idW5kZWZpbmVkInx8IWdsb2JhbFRoaXMuaGFybW9ueUNoYW5uZWwpJiZjb25zb2xlLmVycm9yKGUubWVzc2FnZStgCmArZS5zdGFjayksZS5tZXNzYWdlKTplfWZ1bmN0aW9uIGduKGUsdCxuLHIpe3JldHVybiBzPT57bGV0IHU9aG8oZSxzLHIpLHY9TGkoZSxbc10sbixyKTtyZXR1cm4gdj9PYSh1LGUsdik6dChzLHtyZXNvbHZlOkU9PmdvKHUsZSxFKSxyZWplY3Q6KEUsRik9Pk9hKHUsZSx2byhFKSxGKX0pfX1mdW5jdGlvbiBPbihlLHQsbixyKXtyZXR1cm4oLi4ucyk9PntsZXQgdT1MaShlLHMsbixyKTtpZih1KXRocm93IG5ldyBFcnJvcih1KTtyZXR1cm4gdC5hcHBseShudWxsLHMpfX1mdW5jdGlvbiBLcihlLHQsbixyKXtyZXR1cm4gZ24oZSx0LG4scil9ZnVuY3Rpb24gRm4oZSx0LG4pe3JldHVybiB4byhlLHQsbil9ZnVuY3Rpb24gaWkoZSx0LG4pe3JldHVybiBKbyhlLHQsbil9ZnVuY3Rpb24gRnIoZSx0LG4scil7cmV0dXJuIHJpKGUsZ24oZSx0LHZvaWQgMCxyKSl9ZnVuY3Rpb24gJHQoZSx0LG4scil7cmV0dXJuIE9uKGUsdCx2b2lkIDAscil9ZnVuY3Rpb24gUmUoZSx0LG4scil7cmV0dXJuIHJpKGUsS3IoZSx0LHZvaWQgMCxyKSl9bGV0IFhpPSJiYXNlNjRUb0FycmF5QnVmZmVyIix0bj1be25hbWU6ImJhc2U2NCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxtbz0iYXJyYXlCdWZmZXJUb0Jhc2U2NCIsb2k9W3tuYW1lOiJhcnJheUJ1ZmZlciIsdHlwZTpbQXJyYXlCdWZmZXIsVWludDhBcnJheV0scmVxdWlyZWQ6ITB9XSxPaT0kdChYaSxlPT5rbihlKSx0biksWm89JHQobW8sZT0+c24oZSksb2kpO2Z1bmN0aW9uIFhvKCl7aWYodHlwZW9mIF9fU1lTVEVNX0lORk9fXyE9InVuZGVmaW5lZCIpcmV0dXJuIHdpbmRvdy5fX1NZU1RFTV9JTkZPX187bGV0e3Jlc29sdXRpb25XaWR0aDplfT1jLnNjcmVlbi5nZXRDdXJyZW50U2l6ZSgpfHx7cmVzb2x1dGlvbldpZHRoOjB9O3JldHVybntwbGF0Zm9ybTooYy5vcy5uYW1lfHwiIikudG9Mb3dlckNhc2UoKSxwaXhlbFJhdGlvOmMuc2NyZWVuLnNjYWxlLHdpbmRvd1dpZHRoOk1hdGgucm91bmQoZSl9fWxldCBUYT1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiLERpPVsieyIsIn0iXTtjbGFzcyBhaXtjb25zdHJ1Y3Rvcigpe3RoaXMuX2NhY2hlcz1PYmplY3QuY3JlYXRlKG51bGwpfWludGVycG9sYXRlKHQsbixyPURpKXtpZighbilyZXR1cm5bdF07bGV0IHM9dGhpcy5fY2FjaGVzW3RdO3JldHVybiBzfHwocz1mcyh0LHIpLHRoaXMuX2NhY2hlc1t0XT1zKSxRbyhzLG4pfX1sZXQgeXI9L14oPzpcZCkrLyxfbz0vXig/Olx3KSsvO2Z1bmN0aW9uIGZzKGUsW3Qsbl0pe2xldCByPVtdLHM9MCx1PSIiO2Zvcig7czxlLmxlbmd0aDspe2xldCB2PWVbcysrXTtpZih2PT09dCl7dSYmci5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTp1fSksdT0iIjtsZXQgRT0iIjtmb3Iodj1lW3MrK107diE9PXZvaWQgMCYmdiE9PW47KUUrPXYsdj1lW3MrK107bGV0IEY9dj09PW4sTj15ci50ZXN0KEUpPyJsaXN0IjpGJiZfby50ZXN0KEUpPyJuYW1lZCI6InVua25vd24iO3IucHVzaCh7dmFsdWU6RSx0eXBlOk59KX1lbHNlIHUrPXZ9cmV0dXJuIHUmJnIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6dX0pLHJ9ZnVuY3Rpb24gUW8oZSx0KXtsZXQgbj1bXSxyPTAscz1BcnJheS5pc0FycmF5KHQpPyJsaXN0IjpUYSh0KT8ibmFtZWQiOiJ1bmtub3duIjtpZihzPT09InVua25vd24iKXJldHVybiBuO2Zvcig7cjxlLmxlbmd0aDspe2xldCB1PWVbcl07c3dpdGNoKHUudHlwZSl7Y2FzZSJ0ZXh0IjpuLnB1c2godS52YWx1ZSk7YnJlYWs7Y2FzZSJsaXN0IjpuLnB1c2godFtwYXJzZUludCh1LnZhbHVlLDEwKV0pO2JyZWFrO2Nhc2UibmFtZWQiOnM9PT0ibmFtZWQiJiZuLnB1c2godFt1LnZhbHVlXSk7YnJlYWs7Y2FzZSJ1bmtub3duIjpicmVha31yKyt9cmV0dXJuIG59bGV0IHJuPSJ6aC1IYW5zIixFcj0iemgtSGFudCIsV249ImVuIixTcj0iZnIiLEpyPSJlcyIsZWE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx0YT0oZSx0KT0+ZWEuY2FsbChlLHQpLGRzPW5ldyBhaTtmdW5jdGlvbiBCbyhlLHQpe3JldHVybiEhdC5maW5kKG49PmUuaW5kZXhPZihuKSE9PS0xKX1mdW5jdGlvbiBNbyhlLHQpe3JldHVybiB0LmZpbmQobj0+ZS5pbmRleE9mKG4pPT09MCl9ZnVuY3Rpb24gSGEoZSx0KXtpZighZSlyZXR1cm47aWYoZT1lLnRyaW0oKS5yZXBsYWNlKC9fL2csIi0iKSx0JiZ0W2VdKXJldHVybiBlO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLGU9PT0iY2hpbmVzZSIpcmV0dXJuIHJuO2lmKGUuaW5kZXhPZigiemgiKT09PTApcmV0dXJuIGUuaW5kZXhPZigiLWhhbnMiKT4tMT9ybjplLmluZGV4T2YoIi1oYW50Iik+LTF8fEJvKGUsWyItdHciLCItaGsiLCItbW8iLCItY2h0Il0pP0VyOnJuO2xldCBuPVtXbixTcixKcl07dCYmT2JqZWN0LmtleXModCkubGVuZ3RoPjAmJihuPU9iamVjdC5rZXlzKHQpKTtsZXQgcj1NbyhlLG4pO2lmKHIpcmV0dXJuIHJ9Y2xhc3MgJGF7Y29uc3RydWN0b3Ioe2xvY2FsZTp0LGZhbGxiYWNrTG9jYWxlOm4sbWVzc2FnZXM6cix3YXRjaGVyOnMsZm9ybWF0ZXI6dX0pe3RoaXMubG9jYWxlPVduLHRoaXMuZmFsbGJhY2tMb2NhbGU9V24sdGhpcy5tZXNzYWdlPXt9LHRoaXMubWVzc2FnZXM9e30sdGhpcy53YXRjaGVycz1bXSxuJiYodGhpcy5mYWxsYmFja0xvY2FsZT1uKSx0aGlzLmZvcm1hdGVyPXV8fGRzLHRoaXMubWVzc2FnZXM9cnx8e30sdGhpcy5zZXRMb2NhbGUodHx8V24pLHMmJnRoaXMud2F0Y2hMb2NhbGUocyl9c2V0TG9jYWxlKHQpe2xldCBuPXRoaXMubG9jYWxlO3RoaXMubG9jYWxlPUhhKHQsdGhpcy5tZXNzYWdlcyl8fHRoaXMuZmFsbGJhY2tMb2NhbGUsdGhpcy5tZXNzYWdlc1t0aGlzLmxvY2FsZV18fCh0aGlzLm1lc3NhZ2VzW3RoaXMubG9jYWxlXT17fSksdGhpcy5tZXNzYWdlPXRoaXMubWVzc2FnZXNbdGhpcy5sb2NhbGVdLG4hPT10aGlzLmxvY2FsZSYmdGhpcy53YXRjaGVycy5mb3JFYWNoKHI9PntyKHRoaXMubG9jYWxlLG4pfSl9Z2V0TG9jYWxlKCl7cmV0dXJuIHRoaXMubG9jYWxlfXdhdGNoTG9jYWxlKHQpe2xldCBuPXRoaXMud2F0Y2hlcnMucHVzaCh0KS0xO3JldHVybigpPT57dGhpcy53YXRjaGVycy5zcGxpY2UobiwxKX19YWRkKHQsbixyPSEwKXtsZXQgcz10aGlzLm1lc3NhZ2VzW3RdO3M/cj9PYmplY3QuYXNzaWduKHMsbik6T2JqZWN0LmtleXMobikuZm9yRWFjaCh1PT57dGEocyx1KXx8KHNbdV09blt1XSl9KTp0aGlzLm1lc3NhZ2VzW3RdPW59Zih0LG4scil7cmV0dXJuIHRoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUodCxuLHIpLmpvaW4oIiIpfXQodCxuLHIpe2xldCBzPXRoaXMubWVzc2FnZTtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciPyhuPUhhKG4sdGhpcy5tZXNzYWdlcyksbiYmKHM9dGhpcy5tZXNzYWdlc1tuXSkpOnI9bix0YShzLHQpP3RoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUoc1t0XSxyKS5qb2luKCIiKTooY29uc29sZS53YXJuKGBDYW5ub3QgdHJhbnNsYXRlIHRoZSB2YWx1ZSBvZiBrZXlwYXRoICR7dH0uIFVzZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCBhcyBkZWZhdWx0LmApLHQpfX1mdW5jdGlvbiBMbyhlLHQpe2UuJHdhdGNoTG9jYWxlP2UuJHdhdGNoTG9jYWxlKG49Pnt0LnNldExvY2FsZShuKX0pOmUuJHdhdGNoKCgpPT5lLiRsb2NhbGUsbj0+e3Quc2V0TG9jYWxlKG4pfSl9ZnVuY3Rpb24gUGEoKXtyZXR1cm4gdHlwZW9mIE8hPSJ1bmRlZmluZWQiJiZPLmdldExvY2FsZT9PLmdldExvY2FsZSgpOnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiJiZnbG9iYWwuZ2V0TG9jYWxlP2dsb2JhbC5nZXRMb2NhbGUoKTpXbn1mdW5jdGlvbiBwcyhlLHQ9e30sbixyKXtpZih0eXBlb2YgZSE9InN0cmluZyIpe2xldCB2PVt0LGVdO2U9dlswXSx0PXZbMV19dHlwZW9mIGUhPSJzdHJpbmciJiYoZT1QYSgpKSx0eXBlb2YgbiE9InN0cmluZyImJihuPXR5cGVvZiBJIT0idW5kZWZpbmVkIiYmSS5mYWxsYmFja0xvY2FsZXx8V24pO2xldCBzPW5ldyAkYSh7bG9jYWxlOmUsZmFsbGJhY2tMb2NhbGU6bixtZXNzYWdlczp0LHdhdGNoZXI6cn0pLHU9KHYsRSk9PntpZih0eXBlb2YgVHQhPSJmdW5jdGlvbiIpdT1mdW5jdGlvbihGLE4pe3JldHVybiBzLnQoRixOKX07ZWxzZXtsZXQgRj0hMTt1PWZ1bmN0aW9uKE4sTSl7bGV0IG1lPVR0KCkuJHZtO3JldHVybiBtZSYmKG1lLiRsb2NhbGUsRnx8KEY9ITAsTG8obWUscykpKSxzLnQoTixNKX19cmV0dXJuIHUodixFKX07cmV0dXJue2kxOG46cyxmKHYsRSxGKXtyZXR1cm4gcy5mKHYsRSxGKX0sdCh2LEUpe3JldHVybiB1KHYsRSl9LGFkZCh2LEUsRj0hMCl7cmV0dXJuIHMuYWRkKHYsRSxGKX0sd2F0Y2godil7cmV0dXJuIHMud2F0Y2hMb2NhbGUodil9LGdldExvY2FsZSgpe3JldHVybiBzLmdldExvY2FsZSgpfSxzZXRMb2NhbGUodil7cmV0dXJuIHMuc2V0TG9jYWxlKHYpfX19ZnVuY3Rpb24gbmEoZSx0KXtyZXR1cm4gZS5pbmRleE9mKHRbMF0pPi0xfWxldCBEbz1zZS5vbmNlKCgpPT50eXBlb2YgSSE9InVuZGVmaW5lZCImJkkubG9jYWxlcyYmISFPYmplY3Qua2V5cyhJLmxvY2FsZXMpLmxlbmd0aCksVjtmdW5jdGlvbiBxKCl7bGV0IGU9Ty5nZXRMb2NhbGUoKSx0PUkubG9jYWxlcztyZXR1cm4gdFtlXXx8dFtJLmZhbGxiYWNrTG9jYWxlXXx8dC5lbnx8e319ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIG5hKGUsc2UuSTE4Tl9KU09OX0RFTElNSVRFUlMpP2V0KCkuZihlLHEoKSxzZS5JMThOX0pTT05fREVMSU1JVEVSUyk6ZX1mdW5jdGlvbiBaZShlLHQpe2lmKHQubGVuZ3RoPT09MSl7aWYoZSl7bGV0IHI9RT0+Wi5pc1N0cmluZyhFKSYmbmEoRSxzZS5JMThOX0pTT05fREVMSU1JVEVSUykscz10WzBdLHU9W107aWYoWi5pc0FycmF5KGUpJiYodT1lLmZpbHRlcihFPT5yKEVbc10pKSkubGVuZ3RoKXJldHVybiB1O2xldCB2PWVbdFswXV07aWYocih2KSlyZXR1cm4gZX1yZXR1cm59bGV0IG49dC5zaGlmdCgpO3JldHVybiBaZShlJiZlW25dLHQpfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIHQubWFwKG49Pm10KGUsbikpfWZ1bmN0aW9uIG10KGUsdCl7bGV0IG49WmUoZSx0KTtpZighbilyZXR1cm4hMTtsZXQgcj10W3QubGVuZ3RoLTFdO2lmKFouaXNBcnJheShuKSluLmZvckVhY2gocz0+bXQocyxbcl0pKTtlbHNle2xldCBzPW5bcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7Z2V0KCl7cmV0dXJuIHBlKHMpfSxzZXQodSl7cz11fX0pfXJldHVybiEwfWZ1bmN0aW9uIGV0KCl7aWYoIVYpe2xldCBlO2lmKHR5cGVvZiBUdD09ImZ1bmN0aW9uIj9lPWcucmVxdWlyZU1vZHVsZSgicGx1cyIpLmdldExhbmd1YWdlKCk6ZT1jLndlYnZpZXcuY3VycmVudFdlYnZpZXcoKS5nZXRTdHlsZSgpLmxvY2FsZSxWPXBzKGUpLERvKCkpe2xldCB0PU9iamVjdC5rZXlzKEkubG9jYWxlc3x8e30pO3QubGVuZ3RoJiZ0LmZvckVhY2gobj0+Vi5hZGQobixJLmxvY2FsZXNbbl0pKSxWLnNldExvY2FsZShlKX19cmV0dXJuIFZ9ZnVuY3Rpb24gbHQoZSx0LG4pe3JldHVybiB0LnJlZHVjZSgocixzLHUpPT4ocltlK3NdPW5bdV0scikse30pfWxldCBmcj1zZS5vbmNlKCgpPT57bGV0IGU9InVuaS5hcHAuIix0PVsicXVpdCJdO2V0KCkuYWRkKFduLGx0KGUsdCxbIlByZXNzIGJhY2sgYnV0dG9uIGFnYWluIHRvIGV4aXQiXSksITEpLGV0KCkuYWRkKEpyLGx0KGUsdCxbIlB1bHNlIG90cmEgdmV6IHBhcmEgc2FsaXIiXSksITEpLGV0KCkuYWRkKFNyLGx0KGUsdCxbIkFwcHV5ZXogXHhFMCBub3V2ZWF1IHBvdXIgcXVpdHRlciBsJ2FwcGxpY2F0aW9uIl0pLCExKSxldCgpLmFkZChybixsdChlLHQsWyJcdTUxOERcdTYzMDlcdTRFMDBcdTZCMjFcdTkwMDBcdTUxRkFcdTVFOTRcdTc1MjgiXSksITEpLGV0KCkuYWRkKEVyLGx0KGUsdCxbIlx1NTE4RFx1NjMwOVx1NEUwMFx1NkIyMVx1OTAwMFx1NTFGQVx1NjFDOVx1NzUyOCJdKSwhMSl9KSxIcj1zZS5vbmNlKCgpPT57bGV0IGU9InVuaS5zaG93QWN0aW9uU2hlZXQuIix0PVsiY2FuY2VsIl07ZXQoKS5hZGQoV24sbHQoZSx0LFsiQ2FuY2VsIl0pLCExKSxldCgpLmFkZChKcixsdChlLHQsWyJDYW5jZWxhciJdKSwhMSksZXQoKS5hZGQoU3IsbHQoZSx0LFsiQW5udWxlciJdKSwhMSksZXQoKS5hZGQocm4sbHQoZSx0LFsiXHU1M0Q2XHU2RDg4Il0pLCExKSxldCgpLmFkZChFcixsdChlLHQsWyJcdTUzRDZcdTZEODgiXSksITEpfSksJHI9c2Uub25jZSgoKT0+e2xldCBlPSJ1bmkuc2hvd01vZGFsLiIsdD1bImNhbmNlbCIsImNvbmZpcm0iXTtldCgpLmFkZChXbixsdChlLHQsWyJDYW5jZWwiLCJPSyJdKSwhMSksZXQoKS5hZGQoSnIsbHQoZSx0LFsiQ2FuY2VsYXIiLCJPSyJdKSwhMSksZXQoKS5hZGQoU3IsbHQoZSx0LFsiQW5udWxlciIsIk9LIl0pLCExKSxldCgpLmFkZChybixsdChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTc4NkVcdTVCOUEiXSksITEpLGV0KCkuYWRkKEVyLGx0KGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NzhCQVx1NUI5QSJdKSwhMSl9KSxRaT1zZS5vbmNlKCgpPT57bGV0IGU9InVuaS5jaG9vc2VJbWFnZS4iLHQ9WyJjYW5jZWwiLCJzb3VyY2VUeXBlLmFsYnVtIiwic291cmNlVHlwZS5jYW1lcmEiXTtldCgpLmFkZChXbixsdChlLHQsWyJDYW5jZWwiLCJBbGJ1bSIsIkNhbWVyYSJdKSwhMSksZXQoKS5hZGQoSnIsbHQoZSx0LFsiQ2FuY2VsYXIiLCJceEMxbGJ1bSIsIkNceEUxbWFyYSJdKSwhMSksZXQoKS5hZGQoU3IsbHQoZSx0LFsiQW5udWxlciIsIkFsYnVtIiwiQ2FtXHhFOXJhIl0pLCExKSxldCgpLmFkZChybixsdChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTRFQ0VcdTc2RjhcdTUxOENcdTkwMDlcdTYyRTkiLCJcdTYyQ0RcdTY0NDQiXSksITEpLGV0KCkuYWRkKEVyLGx0KGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NUY5RVx1NzZGOFx1NTE4QVx1OTA3OFx1NjRDNyIsIlx1NjJDRFx1NjUxRCJdKSwhMSl9KSxfaT1zZS5vbmNlKCgpPT57bGV0IGU9InVuaS5jaG9vc2VWaWRlby4iLHQ9WyJjYW5jZWwiLCJzb3VyY2VUeXBlLmFsYnVtIiwic291cmNlVHlwZS5jYW1lcmEiXTtldCgpLmFkZChXbixsdChlLHQsWyJDYW5jZWwiLCJBbGJ1bSIsIkNhbWVyYSJdKSwhMSksZXQoKS5hZGQoSnIsbHQoZSx0LFsiQ2FuY2VsYXIiLCJceEMxbGJ1bSIsIkNceEUxbWFyYSJdKSwhMSksZXQoKS5hZGQoU3IsbHQoZSx0LFsiQW5udWxlciIsIkFsYnVtIiwiQ2FtXHhFOXJhIl0pLCExKSxldCgpLmFkZChybixsdChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTRFQ0VcdTc2RjhcdTUxOENcdTkwMDlcdTYyRTkiLCJcdTYyQ0RcdTY0NDQiXSksITEpLGV0KCkuYWRkKEVyLGx0KGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NUY5RVx1NzZGOFx1NTE4QVx1OTA3OFx1NjRDNyIsIlx1NjJDRFx1NjUxRCJdKSwhMSl9KSxlbz1zZS5vbmNlKCgpPT57bGV0IGU9InVuaS5wcmV2aWV3SW1hZ2UuIix0PVsiY2FuY2VsIiwiYnV0dG9uLnNhdmUiLCJzYXZlLnN1Y2Nlc3MiLCJzYXZlLmZhaWwiXTtldCgpLmFkZChXbixsdChlLHQsWyJDYW5jZWwiLCJTYXZlIEltYWdlIiwiU2F2ZWQgc3VjY2Vzc2Z1bGx5IiwiU2F2ZSBmYWlsZWQiXSksITEpLGV0KCkuYWRkKEpyLGx0KGUsdCxbIkNhbmNlbGFyIiwiR3VhcmRhciBpbWFnZW4iLCJHdWFyZGFkbyBleGl0b3NhbWVudGUiLCJFcnJvciBhbCBndWFyZGFyIl0pLCExKSxldCgpLmFkZChTcixsdChlLHQsWyJBbm51bGVyIiwiR3VhcmRhciBpbWFnZW4iLCJFbnJlZ2lzdHJceEU5IGF2ZWMgc3VjY1x4RThzIiwiXHhDOWNoZWMgZGUgbGEgc2F1dmVnYXJkZSJdKSwhMSksZXQoKS5hZGQocm4sbHQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RkREXHU1QjU4XHU1NkZFXHU1MENGIiwiXHU0RkREXHU1QjU4XHU1NkZFXHU1MENGXHU1MjMwXHU3NkY4XHU1MThDXHU2MjEwXHU1MjlGIiwiXHU0RkREXHU1QjU4XHU1NkZFXHU1MENGXHU1MjMwXHU3NkY4XHU1MThDXHU1OTMxXHU4RDI1Il0pLCExKSxldCgpLmFkZChFcixsdChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTRGRERcdTVCNThcdTU3MTZcdTUwQ0YiLCJcdTRGRERcdTVCNThcdTU3MTZcdTUwQ0ZcdTUyMzBcdTc2RjhcdTUxOEFcdTYyMTBcdTUyOUYiLCJcdTRGRERcdTVCNThcdTU3MTZcdTUwQ0ZcdTUyMzBcdTc2RjhcdTUxOEFcdTU5MzFcdTY1NTciXSksITEpfSksaHM9c2Uub25jZSgoKT0+e2xldCBlPSJ1bmkuc2V0Q2xpcGJvYXJkRGF0YS4iLHQ9WyJzdWNjZXNzIiwiZmFpbCJdO2V0KCkuYWRkKFduLGx0KGUsdCxbIkNvbnRlbnQgY29waWVkIiwiQ29weSBmYWlsZWQsIHBsZWFzZSBjb3B5IG1hbnVhbGx5Il0pLCExKSxldCgpLmFkZChKcixsdChlLHQsWyJDb250ZW5pZG8gY29waWFkbyIsIkVycm9yIGFsIGNvcGlhciwgY29waWUgbWFudWFsbWVudGUiXSksITEpLGV0KCkuYWRkKFNyLGx0KGUsdCxbIkNvbnRlbnUgY29waVx4RTkiLCJceEM5Y2hlYyBkZSBsYSBjb3BpZSwgY29waWV6IG1hbnVlbGxlbWVudCJdKSwhMSksZXQoKS5hZGQocm4sbHQoZSx0LFsiXHU1MTg1XHU1QkI5XHU1REYyXHU1OTBEXHU1MjM2IiwiXHU1OTBEXHU1MjM2XHU1OTMxXHU4RDI1XHVGRjBDXHU4QkY3XHU2MjRCXHU1MkE4XHU1OTBEXHU1MjM2Il0pLCExKSxldCgpLmFkZChFcixsdChlLHQsWyJcdTUxNjdcdTVCQjlcdTVERjJcdTVGQTlcdTUyMzYiLCJcdTVGQTlcdTUyMzZcdTU5MzFcdTY1NTdcdUZGMENcdThBQ0JcdTYyNEJcdTUyRDVcdTVGQTlcdTg4RkQiXSksITEpfSksRmk9c2Uub25jZSgoKT0+e2xldCBlPSJ1bmkuc2NhbkNvZGUuIix0PVsidGl0bGUiLCJhbGJ1bSIsImZhaWwiLCJmbGFzaC5vbiIsImZsYXNoLm9mZiJdO2V0KCkuYWRkKFduLGx0KGUsdCxbIlNjYW4gY29kZSIsIkFsYnVtIiwiUmVjb2duaXRpb24gZmFpbHVyZSIsIlRhcCB0byB0dXJuIGxpZ2h0IG9uIiwiVGFwIHRvIHR1cm4gbGlnaHQgb2ZmIl0pLCExKSxldCgpLmFkZChKcixsdChlLHQsWyJDXHhGM2RpZ28gZGUgZXNjYW5lbyIsIlx4QzFsYnVtIiwiXHhDOWNoZWMgZGUgbGEgcmVjb25uYWlzc2FuY2UiLCJUb3F1ZSBwYXJhIGVuY2VuZGVyIGxhIGx1eiIsIlRvcXVlIHBhcmEgYXBhZ2FyIGxhIGx1eiJdKSwhMSksZXQoKS5hZGQoU3IsbHQoZSx0LFsiQ29kZSBkXHUyMDE5YW5hbHlzZSIsIkFsYnVtIiwiRmFsbG8gZGUgcmVjb25vY2ltaWVudG8iLCJBcHB1eWV6IHBvdXIgYWN0aXZlciBsJ1x4RTljbGFpcmFnZSIsIkFwcHV5ZXogcG91ciBkXHhFOXNhY3RpdmVyIGwnXHhFOWNsYWlyYWdlIl0pLCExKSxldCgpLmFkZChybixsdChlLHQsWyJcdTYyNkJcdTc4MDEiLCJcdTc2RjhcdTUxOEMiLCJcdThCQzZcdTUyMkJcdTU5MzFcdThEMjUiLCJcdThGN0JcdTg5RTZcdTcxNjdcdTRFQUUiLCJcdThGN0JcdTg5RTZcdTUxNzNcdTk1RUQiXSksITEpLGV0KCkuYWRkKEVyLGx0KGUsdCxbIlx1NjM4M1x1NzhCQyIsIlx1NzZGOFx1NTE4QSIsIlx1OEI1OFx1NTIyNVx1NTkzMVx1NjU1NyIsIlx1OEYxNVx1ODlGOFx1NzE2N1x1NEVBRSIsIlx1OEYxNVx1ODlGOFx1OTVEQ1x1OTU4OSJdKSwhMSl9KSx3cj1zZS5vbmNlKCgpPT57bGV0IGU9InVuaS5zdGFydFNvdGVyQXV0aGVudGljYXRpb24uIix0PVsiYXV0aENvbnRlbnQiLCJ3YWl0aW5nQ29udGVudCJdO2V0KCkuYWRkKFduLGx0KGUsdCxbIkZpbmdlcnByaW50IHJlY29nbml0aW9uIiwiVW5yZWNvZ25pemFibGUiXSksITEpLGV0KCkuYWRkKEpyLGx0KGUsdCxbIlJlY29ub2NpbWllbnRvIGRlIGh1ZWxsYXMgZGFjdGlsYXJlcyIsIklycmVjb25vY2libGUiXSksITEpLGV0KCkuYWRkKFNyLGx0KGUsdCxbIlJlY29ubmFpc3NhbmNlIGRlIGwnZW1wcmVpbnRlIGRpZ2l0YWxlIiwiTVx4RTljb25uYWlzc2FibGUiXSksITEpLGV0KCkuYWRkKHJuLGx0KGUsdCxbIlx1NjMwN1x1N0VCOVx1OEJDNlx1NTIyQlx1NEUyRC4uLiIsIlx1NjVFMFx1NkNENVx1OEJDNlx1NTIyQiJdKSwhMSksZXQoKS5hZGQoRXIsbHQoZSx0LFsiXHU2MzA3XHU3RDBCXHU4QjU4XHU1MjI1XHU0RTJELi4uIiwiXHU3MTIxXHU2Q0Q1XHU4QjU4XHU1MjI1Il0pLCExKX0pO2Z1bmN0aW9uIHNpKGUpe2lmKERvKCkpcmV0dXJuIEtlKGUsW1sidGl0bGVUZXh0Il0sWyJzZWFyY2hJbnB1dCIsInBsYWNlaG9sZGVyIl0sWyJidXR0b25zIiwidGV4dCJdXSl9ZnVuY3Rpb24gTmEoZSl7aWYoRG8oKSl7bGV0IHQ9ImNhcHRpb24iO3JldHVybiBLZShlLFtbImNvbnRlbnRkb3duIix0XSxbImNvbnRlbnRvdmVyIix0XSxbImNvbnRlbnRyZWZyZXNoIix0XV0pfX1mdW5jdGlvbiBsZShlKXtsZXQgdD1uZXcgc2UuRW1pdHRlcjtyZXR1cm57b24obixyKXtyZXR1cm4gdC5vbihuLHIpfSxvbmNlKG4scil7cmV0dXJuIHQub25jZShuLHIpfSxvZmYobixyKXtyZXR1cm4gdC5vZmYobixyKX0sZW1pdChuLC4uLnIpe3JldHVybiB0LmVtaXQobiwuLi5yKX0sc3Vic2NyaWJlKG4scixzPSExKXt0W3M/Im9uY2UiOiJvbiJdKGAke2V9LiR7bn1gLHIpfSx1bnN1YnNjcmliZShuLHIpe3Qub2ZmKGAke2V9LiR7bn1gLHIpfSxzdWJzY3JpYmVIYW5kbGVyKG4scixzKXt0LmVtaXQoYCR7ZX0uJHtufWAscixzKX19fWxldCBKPSJpbnZva2VWaWV3QXBpIixkZT0iaW52b2tlU2VydmljZUFwaSI7ZnVuY3Rpb24gVWUoZSl7cmV0dXJuIGU9ZSsiIixlLmluZGV4T2YoInJweCIpIT09LTF8fGUuaW5kZXhPZigidXB4IikhPT0tMX1mdW5jdGlvbiBkdChlLHQ9ITEpe2lmKHQpcmV0dXJuIG9uKGUpO2lmKFouaXNTdHJpbmcoZSkpe2xldCBuPXBhcnNlSW50KGUpfHwwO3JldHVybiBVZShlKT9PLnVweDJweChuKTpufXJldHVybiBlfWZ1bmN0aW9uIG9uKGUpe3JldHVybiBVZShlKT9lLnJlcGxhY2UoLyhcZCsoXC5cZCspPylbcnVdcHgvZywodCxuKT0+Ty51cHgycHgocGFyc2VGbG9hdChuKSkrInB4Iik6ZX1mdW5jdGlvbiBKbihlKXtyZXR1cm4gZS4kcGFnZX1mdW5jdGlvbiBfbihlKXtsZXQgdD1zZS5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSk7aWYodC4kcGFnZSlyZXR1cm4ga2EodCk7aWYoIXQuJClyZXR1cm47bGV0IG49dC4kLnJvb3QucHJveHk7aWYobiYmbi4kcGFnZSlyZXR1cm4ga2Eobil9ZnVuY3Rpb24gVm4oKXtsZXQgZT12cigpLHQ9ZS5sZW5ndGg7aWYodClyZXR1cm4gZVt0LTFdfWZ1bmN0aW9uIGRyKCl7dmFyIGU7bGV0IHQ9KGU9Vm4oKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLiRwYWdlO2lmKHQpcmV0dXJuIHQubWV0YX1mdW5jdGlvbiB0bygpe2xldCBlPWRyKCk7cmV0dXJuIGU/ZS5pZDotMX1mdW5jdGlvbiBabigpe2xldCBlPVZuKCk7aWYoZSlyZXR1cm4gZS4kdm19bGV0IGJvPVsibmF2aWdhdGlvbkJhciIsInB1bGxUb1JlZnJlc2giXTtmdW5jdGlvbiBJYSgpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEkuZ2xvYmFsU3R5bGV8fHt9KSl9ZnVuY3Rpb24geW8oZSx0KXtsZXQgbj1JYSgpLHI9Wi5leHRlbmQoe2lkOnR9LG4sZSk7Ym8uZm9yRWFjaCh1PT57clt1XT1aLmV4dGVuZCh7fSxuW3VdLGVbdV0pfSk7bGV0e25hdmlnYXRpb25CYXI6c309cjtyZXR1cm4gcy50aXRsZVRleHQmJnMudGl0bGVJbWFnZSYmKHMudGl0bGVUZXh0PSIiKSxyfWZ1bmN0aW9uIEZvKGUpe3JldHVybiBKU09OLnBhcnNlKGR0KEpTT04uc3RyaW5naWZ5KGUpLCEwKSl9ZnVuY3Rpb24gUmwoZSl7cmV0dXJuIGUub2Zmc2V0JiYoZS5vZmZzZXQ9ZHQoZS5vZmZzZXQpKSxlLmhlaWdodCYmKGUuaGVpZ2h0PWR0KGUuaGVpZ2h0KSksZS5yYW5nZSYmKGUucmFuZ2U9ZHQoZS5yYW5nZSkpLGV9ZnVuY3Rpb24gcmEoZSx0LG4scixzLHUpe2xldHtpZDp2LHJvdXRlOkV9PXIsRj1zZS5ub3JtYWxpemVTdHlsZXMoci5uYXZpZ2F0aW9uQmFyLEkudGhlbWVDb25maWcsdSkudGl0bGVDb2xvcjtyZXR1cm57aWQ6dixwYXRoOnNlLmFkZExlYWRpbmdTbGFzaChFKSxyb3V0ZTpFLGZ1bGxQYXRoOnQsb3B0aW9uczpuLG1ldGE6cixvcGVuVHlwZTplLGV2ZW50Q2hhbm5lbDpzLHN0YXR1c0JhclN0eWxlOkY9PT0iI2ZmZmZmZiI/ImxpZ2h0IjoiZGFyayJ9fWZ1bmN0aW9uIGthKGUpe3ZhciB0LG47cmV0dXJuKCh0PWUuJHBhZ2UpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5pZCl8fCgobj1lLiRiYXNlUGFnZSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmlkKX1mdW5jdGlvbiBobChlLHQsbil7bGV0IHI9ZS4kW3RdOyFaLmlzQXJyYXkocil8fG4uX193ZWgmJloucmVtb3ZlKHIsbi5fX3dlaCl9ZnVuY3Rpb24gcnIoZSx0LG4pe2lmKFouaXNTdHJpbmcoZSkpbj10LHQ9ZSxlPVpuKCk7ZWxzZSBpZih0eXBlb2YgZT09Im51bWJlciIpe2xldCBzPXZyKCkuZmluZCh1PT5Kbih1KS5pZD09PWUpO3M/ZT1zLiR2bTplPVpuKCl9aWYoIWUpcmV0dXJuO2lmKGUuX19jYWxsX2hvb2spcmV0dXJuIGUuX19jYWxsX2hvb2sodCxuKTtsZXQgcj1lLiRbdF07cmV0dXJuIHImJnNlLmludm9rZUFycmF5Rm5zKHIsbil9ZnVuY3Rpb24geGwoZSl7aWYoZS5pbmRleE9mKCIvIik9PT0wfHxlLmluZGV4T2YoInVuaToiKT09PTApcmV0dXJuIGU7bGV0IHQ9IiIsbj12cigpO3JldHVybiBuLmxlbmd0aCYmKHQ9Sm4obltuLmxlbmd0aC0xXSkucm91dGUpLGphKHQsZSl9ZnVuY3Rpb24gamEoZSx0KXtpZih0LmluZGV4T2YoIi8iKT09PTApcmV0dXJuIHQ7aWYodC5pbmRleE9mKCIuLyIpPT09MClyZXR1cm4gamEoZSx0LnNsaWNlKDIpKTtsZXQgbj10LnNwbGl0KCIvIikscj1uLmxlbmd0aCxzPTA7Zm9yKDtzPHImJm5bc109PT0iLi4iO3MrKyk7bi5zcGxpY2UoMCxzKSx0PW4uam9pbigiLyIpO2xldCB1PWUubGVuZ3RoPjA/ZS5zcGxpdCgiLyIpOltdO3JldHVybiB1LnNwbGljZSh1Lmxlbmd0aC1zLTEscysxKSxzZS5hZGRMZWFkaW5nU2xhc2godS5jb25jYXQobikuam9pbigiLyIpKX1mdW5jdGlvbiBUaShlLHQ9ITEpe3JldHVybiB0P09lLmZpbmQobj0+bi5wYXRoPT09ZXx8bi5hbGlhcz09PWUpOk9lLmZpbmQobj0+bi5wYXRoPT09ZSl9ZnVuY3Rpb24gaWEoZSl7bGV0IHQ9VGkoZSk7aWYodClyZXR1cm4gdC5tZXRhfWZ1bmN0aW9uIFBpKGUsdCxuKXtsZXQgcj1UaShzZS5hZGRMZWFkaW5nU2xhc2godCkpO2lmKHIpe2xldHttZXRhOnV9PXI7ZGVsZXRlIHUudGFiQmFySW5kZXgsdS5pc1F1aXQ9dS5pc1RhYkJhcj0hMX1sZXQgcz1UaShzZS5hZGRMZWFkaW5nU2xhc2gobikpO2lmKHMpe2xldHttZXRhOnV9PXM7dS50YWJCYXJJbmRleD1lLHUuaXNRdWl0PXUuaXNUYWJCYXI9ITA7bGV0IHY9SS50YWJCYXI7diYmdi5saXN0JiZ2Lmxpc3RbZV0mJih2Lmxpc3RbZV0ucGFnZVBhdGg9c2UucmVtb3ZlTGVhZGluZ1NsYXNoKG4pKX19bGV0IENyLFJhLG5vO2Z1bmN0aW9uIHphKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmdHlwZW9mIGRvY3VtZW50PT0ib2JqZWN0Ij8id2VidmlldyI6InY4In1mdW5jdGlvbiBWbygpe3JldHVybiBDci53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuaWR9bGV0IFVvLFdhLGdzPXt9O2Z1bmN0aW9uIEdhKGUpe2xldCB0PWUuZGF0YSYmZS5kYXRhLl9fbWVzc2FnZTtpZighdHx8IXQuX19wYWdlKXJldHVybjtsZXQgbj10Ll9fcGFnZSxyPWdzW25dO3ImJnIodCksdC5rZWVwfHxkZWxldGUgZ3Nbbl19ZnVuY3Rpb24gZ2woZSx0KXt6YSgpPT09InY4Ij9ubz8oVW8mJlVvLmNsb3NlKCksVW89bmV3IG5vKFZvKCkpLFVvLm9ubWVzc2FnZT1HYSk6V2F8fChXYT1SYS5yZXF1aXJlTW9kdWxlKCJnbG9iYWxFdmVudCIpLFdhLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIixHYSkpOndpbmRvdy5fX3BsdXNNZXNzYWdlPUdhLGdzW2VdPXR9Y2xhc3MgQmx7Y29uc3RydWN0b3IodCl7dGhpcy53ZWJ2aWV3PXR9c2VuZE1lc3NhZ2UodCl7bGV0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7X19tZXNzYWdlOntkYXRhOnR9fSkpLHI9dGhpcy53ZWJ2aWV3LmlkO25vP25ldyBubyhyKS5wb3N0TWVzc2FnZShuKTpDci53ZWJ2aWV3LnBvc3RNZXNzYWdlVG9VbmlOVmlldyYmQ3Iud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcobixyKX1jbG9zZSgpe3RoaXMud2Vidmlldy5jbG9zZSgpfX1mdW5jdGlvbiBFbyh7Y29udGV4dDplPXt9LHVybDp0LGRhdGE6bj17fSxzdHlsZTpyPXt9LG9uTWVzc2FnZTpzLG9uQ2xvc2U6dX0pe2xldCB2PUkuZGFya21vZGU7Q3I9ZS5wbHVzfHxjLFJhPWUud2VleHx8KHR5cGVvZiBnPT0ib2JqZWN0Ij9nOm51bGwpLG5vPWUuQnJvYWRjYXN0Q2hhbm5lbHx8KHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPT0ib2JqZWN0Ij9Ccm9hZGNhc3RDaGFubmVsOm51bGwpO2xldCBFPXthdXRvQmFja0J1dHRvbjohMCx0aXRsZVNpemU6IjE3cHgifSxGPWBwYWdlJHtEYXRlLm5vdygpfWA7cj1aLmV4dGVuZCh7fSxyKSxyLnRpdGxlTlZpZXchPT0hMSYmci50aXRsZU5WaWV3IT09Im5vbmUiJiYoci50aXRsZU5WaWV3PVouZXh0ZW5kKEUsci50aXRsZU5WaWV3KSk7bGV0IE49e3RvcDowLGJvdHRvbTowLHVzaW5nQ29tcG9uZW50czp7fSxwb3BHZXN0dXJlOiJjbG9zZSIsc2Nyb2xsSW5kaWNhdG9yOiJub25lIixhbmltYXRpb25UeXBlOiJwb3AtaW4iLGFuaW1hdGlvbkR1cmF0aW9uOjIwMCx1bmlOVmlldzp7cGF0aDpgLyR7dH0uanNgLGRlZmF1bHRGb250U2l6ZToxNix2aWV3cG9ydDpDci5zY3JlZW4ucmVzb2x1dGlvbldpZHRofX07cj1aLmV4dGVuZChOLHIpO2xldCBNPUNyLndlYnZpZXcuY3JlYXRlKCIiLEYscix7ZXh0cmFzOntmcm9tOlZvKCkscnVudGltZTp6YSgpLGRhdGE6Wi5leHRlbmQoe30sbix7ZGFya21vZGU6dn0pLHVzZUdsb2JhbEV2ZW50OiFub319KTtyZXR1cm4gTS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsdSksZ2woRixtZT0+e1ouaXNGdW5jdGlvbihzKSYmcyhtZS5kYXRhKSxtZS5rZWVwfHxNLmNsb3NlKCJhdXRvIil9KSxNLnNob3coci5hbmltYXRpb25UeXBlLHIuYW5pbWF0aW9uRHVyYXRpb24pLG5ldyBCbChNKX1sZXQgZmM9KGUsdCk9PnB0LmVtaXQoImFwaS4iK2UsdCksdmw9MTtmdW5jdGlvbiBVcyhlKXtyZXR1cm4oZXx8dG8oKSkrIi4iK0p9bGV0IEhzPShlLHQsbixyKT0+e2xldHtzdWJzY3JpYmU6cyxwdWJsaXNoSGFuZGxlcjp1fT1wdCx2PXI/dmwrKzowO3ImJnMoSisiLiIrdixyLCEwKSx1KFVzKG4pLHtpZDp2LG5hbWU6ZSxhcmdzOnR9LG4pfSxIbz0oZSx0LG4scik9PntsZXR7c3Vic2NyaWJlOnMsdW5zdWJzY3JpYmU6dSxwdWJsaXNoSGFuZGxlcjp2fT1wdCxFPXZsKyssRj1KKyIuIitFO3JldHVybiBzKEYsbiksdihVcyhyKSx7aWQ6RSxuYW1lOmUsYXJnczp0fSxyKSwoKT0+e3UoRil9fSxybz1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIFNvKCl7cHQuc3Vic2NyaWJlKGRlLHZzKX1mdW5jdGlvbiB3byhlLHQpe3JvW2VdfHwocm9bZV09dCl9ZnVuY3Rpb24gdnMoe2lkOmUsbmFtZTp0LGFyZ3M6bn0scil7bGV0IHM9dj0+e2UmJnB0LnB1Ymxpc2hIYW5kbGVyKGRlKyIuIitlLHYscil9LHU9cm9bdF07dT91KG4scyk6cyh7fSl9bGV0IE1sPVouZXh0ZW5kKGxlKCJ2aWV3Iikse2ludm9rZU9uQ2FsbGJhY2s6ZmMsaW52b2tlVmlld01ldGhvZDpIcyxpbnZva2VWaWV3TWV0aG9kS2VlcEFsaXZlOkhvfSk7ZnVuY3Rpb24gemMoKXtsZXR7b246ZX09cHQ7ZShzZS5PTl9SRVNJWkUseSksZShzZS5PTl9BUFBfRU5URVJfRk9SRUdST1VORCxEKSxlKHNlLk9OX0FQUF9FTlRFUl9CQUNLR1JPVU5ELFcpfWZ1bmN0aW9uIHkoZSl7bGV0IHQ9Vm4oKTtycih0LHNlLk9OX1JFU0laRSxlKSxwdC5pbnZva2VPbkNhbGxiYWNrKCJvbldpbmRvd1Jlc2l6ZSIsZSl9ZnVuY3Rpb24gRChlKXtsZXQgdD1WbigpO3JyKFR0KCksc2UuT05fU0hPVyxlKSxycih0LHNlLk9OX1NIT1cpfWZ1bmN0aW9uIFcoKXtycihUdCgpLHNlLk9OX0hJREUpLHJyKFZuKCksc2UuT05fSElERSl9bGV0ICQ9W3NlLk9OX1BBR0VfU0NST0xMLHNlLk9OX1JFQUNIX0JPVFRPTV07ZnVuY3Rpb24gbmUoKXskLmZvckVhY2goZT0+cHQuc3Vic2NyaWJlKGUsaWUoZSkpKX1mdW5jdGlvbiBpZShlKXtyZXR1cm4odCxuKT0+e3JyKHBhcnNlSW50KG4pLGUsdCl9fWZ1bmN0aW9uIGdlKCl7emMoKSxuZSgpfWZ1bmN0aW9uIHdlKGUpe2UuJHZtPWUsZS4kbXBUeXBlPSJhcHAiO2xldCB0PXBuLnJlZihldCgpLmdldExvY2FsZSgpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiJGxvY2FsZSIse2dldCgpe3JldHVybiB0LnZhbHVlfSxzZXQobil7dC52YWx1ZT1ufX0pfWZ1bmN0aW9uIEJlKGUsdCl7ZS5yb3V0ZT10LnJvdXRlLGUuJHZtPWUsZS4kcGFnZT10LGUuJG1wVHlwZT0icGFnZSIsZS4kZm9udEZhbWlseVNldD1uZXcgU2V0LHQubWV0YS5pc1RhYkJhciYmKGUuJC5fX2lzVGFiQmFyPSEwLGUuJC5fX2lzQWN0aXZlPSEwKX1mdW5jdGlvbiBIZSgpe3JldHVybntwYXRoOiIiLHF1ZXJ5Ont9LHNjZW5lOjEwMDEscmVmZXJyZXJJbmZvOnthcHBJZDoiIixleHRyYURhdGE6e319fX1mdW5jdGlvbiBFZShlLHQpe2xldCBuPWUuJG9wdGlvbnN8fHt9O24uZ2xvYmFsRGF0YT1aLmV4dGVuZChuLmdsb2JhbERhdGF8fHt9LHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnbG9iYWxEYXRhIix7Z2V0KCl7cmV0dXJuIG4uZ2xvYmFsRGF0YX0sc2V0KHIpe24uZ2xvYmFsRGF0YT1yfX0pfWxldCBGZTtmdW5jdGlvbiB2dCgpe3JldHVybiBGZX1mdW5jdGlvbiBQdChlKXtsZXQgdD1lLiQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQuY3R4LCIkY2hpbGRyZW4iLHtnZXQoKXtyZXR1cm4gYm4oKS5tYXAocj0+ci4kdm0pfX0pO2xldCBuPXQuYXBwQ29udGV4dDtGZT1aLmV4dGVuZChuLmFwcCx7bW91bnRQYWdlKHIscyx1KXtsZXQgdj1wbi5jcmVhdGVWTm9kZShyLHMpO3YuYXBwQ29udGV4dD1uLHYuX19wYWdlX2NvbnRhaW5lcl9fPXUscG4ucmVuZGVyKHYsdSk7bGV0IEU9di5jb21wb25lbnQucHJveHk7cmV0dXJuIEUuX19wYWdlX2NvbnRhaW5lcl9fPXUsRX0sdW5tb3VudFBhZ2U6cj0+e2xldHtfX3BhZ2VfY29udGFpbmVyX186c309cjtzJiYocy5pc1VubW91bnRlZD0hMCxwbi5yZW5kZXIobnVsbCxzKSl9fSl9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGUuJHBhZ2V9bGV0IFN0PVtdO2Z1bmN0aW9uIF90KGUpe2xldCB0PUZ0KGUpO2lmKCF0Lm1ldGEuaXNOVnVlKXJldHVybiBTdC5wdXNoKGUpO2xldCBuPVN0LmZpbmRJbmRleChyPT5GdChyKS5pZD09PXQuaWQpO24+LTE/U3Quc3BsaWNlKG4sMSxlKTpTdC5wdXNoKGUpfWZ1bmN0aW9uIFZ0KGUpe3JldHVybiBTdC5maW5kKHQ9PkZ0KHQpLmlkPT09ZSl9ZnVuY3Rpb24gYm4oKXtyZXR1cm4gU3R9ZnVuY3Rpb24gUG4oKXtyZXR1cm4gT3QoKX1mdW5jdGlvbiBPdCgpe2xldCBlPVtdO3JldHVybiBTdC5mb3JFYWNoKHQ9Pnt0LiQuX19pc1RhYkJhcj90LiQuX19pc0FjdGl2ZSYmZS5wdXNoKHQpOmUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gbG4oKXtsZXQgZT1WbigpOyFlfHxVbihlKX1mdW5jdGlvbiBVbihlKXtsZXQgdD1TdC5maW5kSW5kZXgocj0+cj09PWUpO2lmKHQ9PT0tMSlyZXR1cm47RnQoZSkubWV0YS5pc05WdWV8fHZ0KCkudW5tb3VudFBhZ2UoZSksU3Quc3BsaWNlKHQsMSl9ZnVuY3Rpb24gaXIoZSx0LG4pe0Z0KGUpLm1ldGEuaXNOVnVlP0huKGUsdCxuKTpUbihlLHQsbil9ZnVuY3Rpb24gVG4oZSx0LG4pe3B0Lmludm9rZVZpZXdNZXRob2QoInJlcXVlc3RDb21wb25lbnRJbmZvIix7cmVxczp0Lm1hcChyPT4oci5jb21wb25lbnQmJihyLmNvbXBvbmVudD1yLmNvbXBvbmVudC4kZWwubm9kZUlkKSxyKSl9LEZ0KGUpLmlkLG4pfWZ1bmN0aW9uIEhuKGUsdCxuKXtsZXQgcj1Bcih0KSxzPW5ldyBBcnJheShyLmxlbmd0aCk7cWEocixlLiRlbCxzKSxtcyhlLiRyZXF1aXJlTmF0aXZlUGx1Z2luKCJkb20iKSxzLDAsW10sdT0+e24odSl9KX1mdW5jdGlvbiBBcihlKXtsZXQgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXS5zZWxlY3RvcjtyLmluZGV4T2YoIiMiKT09PTAmJnQucHVzaChyLnN1YnN0cmluZygxKSl9cmV0dXJuIHR9ZnVuY3Rpb24gcWEoZSx0LG4pe2xldCByPXQuY2hpbGRyZW47aWYoIVouaXNBcnJheShyKSlyZXR1cm4hMTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKyl7bGV0IHU9cltzXTtpZih1LmF0dHIpe2xldCB2PWUuaW5kZXhPZih1LmF0dHIuaWQpO2lmKHY+PTAmJihuW3ZdPXtpZDplW3ZdLHJlZjp1LnJlZixkYXRhc2V0OnNlLnBhcnNlTlZ1ZURhdGFzZXQodS5hdHRyKX0sZS5sZW5ndGg9PT0xKSlicmVha311LmNoaWxkcmVuJiZxYShlLHUsbil9fWZ1bmN0aW9uIG1zKGUsdCxuLHIscyl7bGV0IHU9dFtuXTtlLmdldENvbXBvbmVudFJlY3QodS5yZWYsdj0+e3Yuc2l6ZS5pZD11LmlkLHYuc2l6ZS5kYXRhc2V0PXUuZGF0YXNldCxyLnB1c2godi5zaXplKSxuKz0xLG48dC5sZW5ndGg/bXMoZSx0LG4scixzKTpzKHIpfSl9ZnVuY3Rpb24gVnIoZSx0KXtwdC5pbnZva2VWaWV3TWV0aG9kKCJzZXRQYWdlTWV0YSIsdCxGdChlKS5pZCl9ZnVuY3Rpb24gR3QoZSl7aWYoZS5pbmRleE9mKCIvLyIpPT09MClyZXR1cm4iaHR0cHM6IitlO2lmKHNlLlNDSEVNRV9SRS50ZXN0KGUpfHxzZS5EQVRBX1JFLnRlc3QoZSkpcmV0dXJuIGU7aWYoWWEoZSkpcmV0dXJuImZpbGU6Ly8iKyRvKGUpO2xldCB0PSJmaWxlOi8vIiskbygiX3d3dyIpO2lmKGUuaW5kZXhPZigiLyIpPT09MClyZXR1cm4gZS5zdGFydHNXaXRoKCIvc3RvcmFnZS8iKXx8ZS5zdGFydHNXaXRoKCIvc2RjYXJkLyIpfHxlLmluY2x1ZGVzKCIvQ29udGFpbmVycy9EYXRhL0FwcGxpY2F0aW9uLyIpPyJmaWxlOi8vIitlOnQrZTtpZihlLmluZGV4T2YoIi4uLyIpPT09MHx8ZS5pbmRleE9mKCIuLyIpPT09MCl7aWYodHlwZW9mIF9faWRfXz09InN0cmluZyIpcmV0dXJuIHQramEoc2UuYWRkTGVhZGluZ1NsYXNoKF9faWRfXyksZSk7e2xldCBuPVZuKCk7aWYobilyZXR1cm4gdCtqYShzZS5hZGRMZWFkaW5nU2xhc2gobi5yb3V0ZSksZSl9fXJldHVybiBlfWxldCAkbz1zZS5jYWNoZVN0cmluZ0Z1bmN0aW9uKGU9PmMuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKS5yZXBsYWNlKC9eXC8/YXBwc1wvLywiL2FuZHJvaWRfYXNzZXQvYXBwcy8iKS5yZXBsYWNlKC9cLyQvLCIiKSk7ZnVuY3Rpb24gWWEoZSl7cmV0dXJuIGUuaW5kZXhPZigiX3d3dyIpPT09MHx8ZS5pbmRleE9mKCJfZG9jIik9PT0wfHxlLmluZGV4T2YoIl9kb2N1bWVudHMiKT09PTB8fGUuaW5kZXhPZigiX2Rvd25sb2FkcyIpPT09MH1sZXQgX3M9InN1Y2Nlc3MiLGJzPSJmYWlsIixqbz1bX3MsYnMsImNvbXBsZXRlIl07ZnVuY3Rpb24gQm4oZSx0LG4scil7aWYoIWUpcmV0dXJuO2lmKHR5cGVvZiBuPT0idW5kZWZpbmVkIilyZXR1cm4gZVt0XSgpO2xldFssc109SmEobixyKTtyZXR1cm4gT2JqZWN0LmtleXMocykubGVuZ3RoP2VbdF0oaW8odCxzKSk6ZVt0XSgpfWZ1bmN0aW9uIEduKGUsdCxuLHIpe2lmKCFlKXJldHVybjtsZXRbcyx1XT1KYShuLHIpO3JldHVybiBPYmplY3Qua2V5cyh1KS5sZW5ndGg/ZVt0XShzLGlvKHQsdSkpOmVbdF0ocyl9ZnVuY3Rpb24gb2EoZSx0KXtsZXQgbj1LYShlLHQuJGVsKTtyZXR1cm4gbnx8Y29uc29sZS5lcnJvcigiQ2FuIG5vdCBmaW5kIGAiK2UrImAiKX1mdW5jdGlvbiBLYShlLHQpe2lmKCFlfHwhdClyZXR1cm47aWYodC5hdHRyJiZ0LmF0dHIuaWQ9PT1lKXJldHVybiB0O2xldCBuPXQuY2hpbGRyZW47aWYoISFuKWZvcihsZXQgcj0wLHM9bi5sZW5ndGg7cjxzO3IrKyl7bGV0IHU9S2EoZSxuW3JdKTtpZih1KXJldHVybiB1fX1mdW5jdGlvbiBKYShlPXt9LHQpe2xldCBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1mdW5jdGlvbih1KXtsZXQgdj1lW3VdO1ouaXNGdW5jdGlvbih2KSYmKG5bdV09dixkZWxldGUgZVt1XSl9O3JldHVybiBqby5mb3JFYWNoKHIpLHQmJnQuZm9yRWFjaChyKSxbZSxuXX1mdW5jdGlvbiBpbyhlLHQpe3JldHVybiBmdW5jdGlvbihyKXtsZXQgcz1yLnR5cGU7ZGVsZXRlIHIudHlwZTtsZXQgdT10W3NdO2lmKHM9PT1fcz9yLmVyck1zZz1gJHtlfTpva2A6cz09PWJzJiYoci5lcnJNc2c9ZSsiOmZhaWwgIisoci5tc2c/IiAiK3IubXNnOiIiKSksZGVsZXRlIHIuY29kZSxkZWxldGUgci5tc2csWi5pc0Z1bmN0aW9uKHUpJiZ1KHIpLHM9PT1fc3x8cz09PWJzKXtsZXQgdj10LmNvbXBsZXRlO1ouaXNGdW5jdGlvbih2KSYmdihyKX19fWxldCB6bz17cGxheShlKXtyZXR1cm4gQm4oZSwicGxheSIpfSxwYXVzZShlKXtyZXR1cm4gQm4oZSwicGF1c2UiKX0sc2VlayhlLHQpe3JldHVybiBHbihlLCJzZWVrIix0LnBvc2l0aW9uKX0sc3RvcChlKXtyZXR1cm4gQm4oZSwic3RvcCIpfSxzZW5kRGFubXUoZSx0KXtyZXR1cm4gR24oZSwic2VuZERhbm11Iix0KX0scGxheWJhY2tSYXRlKGUsdCl7cmV0dXJuIEduKGUsInBsYXliYWNrUmF0ZSIsdC5yYXRlKX0scmVxdWVzdEZ1bGxTY3JlZW4oZSx0PXt9KXtyZXR1cm4gR24oZSwicmVxdWVzdEZ1bGxTY3JlZW4iLHQpfSxleGl0RnVsbFNjcmVlbihlKXtyZXR1cm4gQm4oZSwiZXhpdEZ1bGxTY3JlZW4iKX0sc2hvd1N0YXR1c0JhcihlKXtyZXR1cm4gQm4oZSwic2hvd1N0YXR1c0JhciIpfSxoaWRlU3RhdHVzQmFyKGUpe3JldHVybiBCbihlLCJoaWRlU3RhdHVzQmFyIil9fTtmdW5jdGlvbiBYcihlLHQsbixyKXtsZXQgcz1WdCh0KTtpZihzJiZGdChzKS5tZXRhLmlzTlZ1ZSl7bGV0IHU9cy4kdm07cmV0dXJuIHpvW25dKG9hKGUsdSkscil9cHQuaW52b2tlVmlld01ldGhvZCgidmlkZW8uIitlLHt2aWRlb0lkOmUsdHlwZTpuLGRhdGE6cn0sdCl9bGV0ICRzPXtnZXRDZW50ZXJMb2NhdGlvbihlLHQpe3JldHVybiBCbihlLCJnZXRDZW50ZXJMb2NhdGlvbiIsdCl9LG1vdmVUb0xvY2F0aW9uKGUsdCl7cmV0dXJuIEduKGUsIm1vdmVUb0xvY2F0aW9uIix0KX0sdHJhbnNsYXRlTWFya2VyKGUsdCl7cmV0dXJuIEduKGUsInRyYW5zbGF0ZU1hcmtlciIsdCxbImFuaW1hdGlvbkVuZCJdKX0saW5jbHVkZVBvaW50cyhlLHQpe3JldHVybiBHbihlLCJpbmNsdWRlUG9pbnRzIix0KX0sZ2V0UmVnaW9uKGUsdCl7cmV0dXJuIEJuKGUsImdldFJlZ2lvbiIsdCl9LGdldFNjYWxlKGUsdCl7cmV0dXJuIEJuKGUsImdldFNjYWxlIix0KX0sYWRkQ3VzdG9tTGF5ZXIoZSx0KXtyZXR1cm4gR24oZSwiYWRkQ3VzdG9tTGF5ZXIiLHQpfSxyZW1vdmVDdXN0b21MYXllcihlLHQpe3JldHVybiBHbihlLCJyZW1vdmVDdXN0b21MYXllciIsdCl9LGFkZEdyb3VuZE92ZXJsYXkoZSx0KXtyZXR1cm4gR24oZSwiYWRkR3JvdW5kT3ZlcmxheSIsdCl9LHJlbW92ZUdyb3VuZE92ZXJsYXkoZSx0KXtyZXR1cm4gR24oZSwicmVtb3ZlR3JvdW5kT3ZlcmxheSIsdCl9LHVwZGF0ZUdyb3VuZE92ZXJsYXkoZSx0KXtyZXR1cm4gR24oZSwidXBkYXRlR3JvdW5kT3ZlcmxheSIsdCl9LGluaXRNYXJrZXJDbHVzdGVyKGUsdCl7cmV0dXJuIEduKGUsImluaXRNYXJrZXJDbHVzdGVyIix0KX0sYWRkTWFya2VycyhlLHQpe3JldHVybiBHbihlLCJhZGRNYXJrZXJzIix0KX0scmVtb3ZlTWFya2VycyhlLHQpe3JldHVybiBHbihlLCJyZW1vdmVNYXJrZXJzIix0KX0sbW92ZUFsb25nKGUsdCl7cmV0dXJuIEduKGUsIm1vdmVBbG9uZyIsdCl9LHNldExvY01hcmtlckljb24oZSx0KXtyZXR1cm4gR24oZSwic2V0TG9jTWFya2VySWNvbiIsdCl9LG9wZW5NYXBBcHAoZSx0KXtyZXR1cm4gR24oZSwib3Blbk1hcEFwcCIsdCl9LG9uKGUsdCl7cmV0dXJuIGUub24odC5uYW1lLHQuY2FsbGJhY2spfX07ZnVuY3Rpb24gbWwoZSx0LG4scixzKXtsZXQgdT1WdCh0KTtpZih1JiZGdCh1KS5tZXRhLmlzTlZ1ZSl7bGV0IHY9dS4kdm07cmV0dXJuICRzW25dKG9hKGUsdikscil9cHQuaW52b2tlVmlld01ldGhvZCgibWFwLiIrZSx7dHlwZTpuLGRhdGE6cn0sdCxzKX1mdW5jdGlvbiBaYShlKXtyZXR1cm5gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuJHtlfWB9ZnVuY3Rpb24ganMoe3JlcUlkOmUsY29tcG9uZW50OnQsb3B0aW9uczpuLGNhbGxiYWNrOnJ9LHMpe2xldCB1PVphKGUpO3B0Lmludm9rZVZpZXdNZXRob2QoImFkZEludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6dX0scykscHQuc3Vic2NyaWJlKHUscil9ZnVuY3Rpb24gX2woe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe3B0Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZUludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkfSxuKSxwdC51bnN1YnNjcmliZShaYShlKSl9ZnVuY3Rpb24genMoZSl7cmV0dXJuYE1lZGlhUXVlcnlPYnNlcnZlci4ke2V9YH1mdW5jdGlvbiBMbCh7cmVxSWQ6ZSxjb21wb25lbnQ6dCxvcHRpb25zOm4sY2FsbGJhY2s6cn0scyl7bGV0IHU9enMoZSk7cHQuaW52b2tlVmlld01ldGhvZCgiYWRkTWVkaWFRdWVyeU9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6dX0scykscHQuc3Vic2NyaWJlKHUscil9ZnVuY3Rpb24gV3Moe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe3B0Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZU1lZGlhUXVlcnlPYnNlcnZlciIse3JlcUlkOmUsY29tcG9uZW50OnQuJGVsLm5vZGVJZH0sbikscHQudW5zdWJzY3JpYmUoenMoZSkpfWxldCBHcz0yMDAsRGw9WyJ1bmtub3duIiwibm9uZSIsImV0aGVybmV0Iiwid2lmaSIsIjJnIiwiM2ciLCI0ZyIsIjVnIl0scXM9Il9kb2MvdW5pYXBwX3RlbXAiLGJpPWAke3FzfV8ke0RhdGUubm93KCl9YDtmdW5jdGlvbiBYYShlKXtsZXQgdD1lLnNwbGl0KCIvIik7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24geXMoZSl7bGV0IHQ9ZS5zcGxpdCgiLiIpO3JldHVybiB0Lmxlbmd0aD4xPyIuIit0W3QubGVuZ3RoLTFdOiIifWxldCBFcz0iYmFja2J1dHRvbiI7ZnVuY3Rpb24gVmkoKXtPLm5hdmlnYXRlQmFjayh7ZnJvbToiYmFja2J1dHRvbiIsc3VjY2Vzcygpe319KX1sZXQgU3M9SGUoKSxRYT1IZSgpO2Z1bmN0aW9uIGRjKCl7cmV0dXJuIFouZXh0ZW5kKHt9LFFhKX1mdW5jdGlvbiBHZSgpe3JldHVybiBaLmV4dGVuZCh7fSxTcyl9ZnVuY3Rpb24gSHQoe3BhdGg6ZSxxdWVyeTp0LHJlZmVycmVySW5mbzpufSl7Wi5leHRlbmQoU3Mse3BhdGg6ZSxxdWVyeTp0P3NlLnBhcnNlUXVlcnkodCk6e30scmVmZXJyZXJJbmZvOm58fHt9fSl9ZnVuY3Rpb24gSXQoe3BhdGg6ZSxxdWVyeTp0LHJlZmVycmVySW5mbzpufSl7cmV0dXJuIFouZXh0ZW5kKFFhLHtwYXRoOmUscXVlcnk6dD9zZS5wYXJzZVF1ZXJ5KHQpOnt9LHJlZmVycmVySW5mbzpufHx7fSxjaGFubmVsOmMucnVudGltZS5jaGFubmVsLGxhdW5jaGVyOmMucnVudGltZS5sYXVuY2hlcn0pLFouZXh0ZW5kKFNzLFFhKSxTc31mdW5jdGlvbiB2bigpe2xldCBlPWcucmVxdWlyZU1vZHVsZSgicGx1cyIpO2lmKGUuZ2V0UmVkaXJlY3RJbmZvKXtsZXR7cGF0aDp0LHF1ZXJ5Om4sZXh0cmFEYXRhOnIsdXNlckFjdGlvbjpzLGZyb21BcHBpZDp1fT1lLmdldFJlZGlyZWN0SW5mbygpfHx7fSx2PXthcHBJZDp1LGV4dHJhRGF0YTp7fX07cmV0dXJuIHImJih2LmV4dHJhRGF0YT1yKSx7cGF0aDp0fHwiIixxdWVyeTpuPyI/IituOiIiLHJlZmVycmVySW5mbzp2LHVzZXJBY3Rpb246c319fXZhciBxbj17fTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIFVpbnQ4QXJyYXkhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgVWludDE2QXJyYXkhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgSW50MzJBcnJheSE9InVuZGVmaW5lZCI7ZnVuY3Rpb24gbih1LHYpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodSx2KX1lLmFzc2lnbj1mdW5jdGlvbih1KXtmb3IodmFyIHY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3YubGVuZ3RoOyl7dmFyIEU9di5zaGlmdCgpO2lmKCEhRSl7aWYodHlwZW9mIEUhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoRSsibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBGIGluIEUpbihFLEYpJiYodVtGXT1FW0ZdKX19cmV0dXJuIHV9LGUuc2hyaW5rQnVmPWZ1bmN0aW9uKHUsdil7cmV0dXJuIHUubGVuZ3RoPT09dj91OnUuc3ViYXJyYXk/dS5zdWJhcnJheSgwLHYpOih1Lmxlbmd0aD12LHUpfTt2YXIgcj17YXJyYXlTZXQ6ZnVuY3Rpb24odSx2LEUsRixOKXtpZih2LnN1YmFycmF5JiZ1LnN1YmFycmF5KXt1LnNldCh2LnN1YmFycmF5KEUsRStGKSxOKTtyZXR1cm59Zm9yKHZhciBNPTA7TTxGO00rKyl1W04rTV09dltFK01dfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKHUpe3ZhciB2LEUsRixOLE0sbWU7Zm9yKEY9MCx2PTAsRT11Lmxlbmd0aDt2PEU7disrKUYrPXVbdl0ubGVuZ3RoO2ZvcihtZT1uZXcgVWludDhBcnJheShGKSxOPTAsdj0wLEU9dS5sZW5ndGg7djxFO3YrKylNPXVbdl0sbWUuc2V0KE0sTiksTis9TS5sZW5ndGg7cmV0dXJuIG1lfX0scz17YXJyYXlTZXQ6ZnVuY3Rpb24odSx2LEUsRixOKXtmb3IodmFyIE09MDtNPEY7TSsrKXVbTitNXT12W0UrTV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHUpfX07ZS5zZXRUeXBlZD1mdW5jdGlvbih1KXt1PyhlLkJ1Zjg9VWludDhBcnJheSxlLkJ1ZjE2PVVpbnQxNkFycmF5LGUuQnVmMzI9SW50MzJBcnJheSxlLmFzc2lnbihlLHIpKTooZS5CdWY4PUFycmF5LGUuQnVmMTY9QXJyYXksZS5CdWYzMj1BcnJheSxlLmFzc2lnbihlLHMpKX0sZS5zZXRUeXBlZCh0KX0pKHFuKTt2YXIgSXI9e30sYXI9e30seWk9e30sYmw9cW4sRmw9NCx5bD0wLHBjPTEsV2M9MjtmdW5jdGlvbiBhYShlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7LS10Pj0wOyllW3RdPTB9dmFyIENvPTAsbGk9MSxjaT0yLEFvPTMsVmw9MjU4LGpyPTI5LE9yPTI1NixZcz1PcisxK2pyLHdzPTMwLEtzPTE5LHNhPTIqWXMrMSxVaT0xNSxDcz0xNixVbD03LEhsPTI1NixoYz0xNixBcz0xNyxlcz0xOCxFbD1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxPcz1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sZ2M9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLFNsPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSwkbD01MTIseGE9bmV3IEFycmF5KChZcysyKSoyKTthYSh4YSk7dmFyIEpzPW5ldyBBcnJheSh3cyoyKTthYShKcyk7dmFyIG1yPW5ldyBBcnJheSgkbCk7YWEobXIpO3ZhciBNbj1uZXcgQXJyYXkoVmwtQW8rMSk7YWEoTW4pO3ZhciBMbj1uZXcgQXJyYXkoanIpO2FhKExuKTt2YXIgRG49bmV3IEFycmF5KHdzKTthYShEbik7ZnVuY3Rpb24gSGkoZSx0LG4scixzKXt0aGlzLnN0YXRpY190cmVlPWUsdGhpcy5leHRyYV9iaXRzPXQsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1yLHRoaXMubWF4X2xlbmd0aD1zLHRoaXMuaGFzX3N0cmVlPWUmJmUubGVuZ3RofXZhciB6cixRcixacztmdW5jdGlvbiBsYShlLHQpe3RoaXMuZHluX3RyZWU9ZSx0aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9dH1mdW5jdGlvbiBjYShlKXtyZXR1cm4gZTwyNTY/bXJbZV06bXJbMjU2KyhlPj4+NyldfWZ1bmN0aW9uIHRzKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dCYyNTUsZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1fWZ1bmN0aW9uIE5pKGUsdCxuKXtlLmJpX3ZhbGlkPkNzLW4/KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LHRzKGUsZS5iaV9idWYpLGUuYmlfYnVmPXQ+PkNzLWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9bi1Dcyk6KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LGUuYmlfdmFsaWQrPW4pfWZ1bmN0aW9uIE9vKGUsdCxuKXtOaShlLG5bdCoyXSxuW3QqMisxXSl9ZnVuY3Rpb24gVG8oZSx0KXt2YXIgbj0wO2RvIG58PWUmMSxlPj4+PTEsbjw8PTE7d2hpbGUoLS10PjApO3JldHVybiBuPj4+MX1mdW5jdGlvbiBXcihlKXtlLmJpX3ZhbGlkPT09MTY/KHRzKGUsZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wKTplLmJpX3ZhbGlkPj04JiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109ZS5iaV9idWYmMjU1LGUuYmlfYnVmPj49OCxlLmJpX3ZhbGlkLT04KX1mdW5jdGlvbiBvbyhlLHQpe3ZhciBuPXQuZHluX3RyZWUscj10Lm1heF9jb2RlLHM9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsdT10LnN0YXRfZGVzYy5oYXNfc3RyZWUsdj10LnN0YXRfZGVzYy5leHRyYV9iaXRzLEU9dC5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxGPXQuc3RhdF9kZXNjLm1heF9sZW5ndGgsTixNLG1lLEFlLHhlLGJ0LEF0PTA7Zm9yKEFlPTA7QWU8PVVpO0FlKyspZS5ibF9jb3VudFtBZV09MDtmb3IobltlLmhlYXBbZS5oZWFwX21heF0qMisxXT0wLE49ZS5oZWFwX21heCsxO048c2E7TisrKU09ZS5oZWFwW05dLEFlPW5bbltNKjIrMV0qMisxXSsxLEFlPkYmJihBZT1GLEF0KyspLG5bTSoyKzFdPUFlLCEoTT5yKSYmKGUuYmxfY291bnRbQWVdKysseGU9MCxNPj1FJiYoeGU9dltNLUVdKSxidD1uW00qMl0sZS5vcHRfbGVuKz1idCooQWUreGUpLHUmJihlLnN0YXRpY19sZW4rPWJ0KihzW00qMisxXSt4ZSkpKTtpZihBdCE9PTApe2Rve2ZvcihBZT1GLTE7ZS5ibF9jb3VudFtBZV09PT0wOylBZS0tO2UuYmxfY291bnRbQWVdLS0sZS5ibF9jb3VudFtBZSsxXSs9MixlLmJsX2NvdW50W0ZdLS0sQXQtPTJ9d2hpbGUoQXQ+MCk7Zm9yKEFlPUY7QWUhPT0wO0FlLS0pZm9yKE09ZS5ibF9jb3VudFtBZV07TSE9PTA7KW1lPWUuaGVhcFstLU5dLCEobWU+cikmJihuW21lKjIrMV0hPT1BZSYmKGUub3B0X2xlbis9KEFlLW5bbWUqMisxXSkqblttZSoyXSxuW21lKjIrMV09QWUpLE0tLSl9fWZ1bmN0aW9uIGpsKGUsdCxuKXt2YXIgcj1uZXcgQXJyYXkoVWkrMSkscz0wLHUsdjtmb3IodT0xO3U8PVVpO3UrKylyW3VdPXM9cytuW3UtMV08PDE7Zm9yKHY9MDt2PD10O3YrKyl7dmFyIEU9ZVt2KjIrMV07RSE9PTAmJihlW3YqMl09VG8ocltFXSsrLEUpKX19ZnVuY3Rpb24gUHUoKXt2YXIgZSx0LG4scixzLHU9bmV3IEFycmF5KFVpKzEpO2ZvcihuPTAscj0wO3I8anItMTtyKyspZm9yKExuW3JdPW4sZT0wO2U8MTw8RWxbcl07ZSsrKU1uW24rK109cjtmb3IoTW5bbi0xXT1yLHM9MCxyPTA7cjwxNjtyKyspZm9yKERuW3JdPXMsZT0wO2U8MTw8T3Nbcl07ZSsrKW1yW3MrK109cjtmb3Iocz4+PTc7cjx3cztyKyspZm9yKERuW3JdPXM8PDcsZT0wO2U8MTw8T3Nbcl0tNztlKyspbXJbMjU2K3MrK109cjtmb3IodD0wO3Q8PVVpO3QrKyl1W3RdPTA7Zm9yKGU9MDtlPD0xNDM7KXhhW2UqMisxXT04LGUrKyx1WzhdKys7Zm9yKDtlPD0yNTU7KXhhW2UqMisxXT05LGUrKyx1WzldKys7Zm9yKDtlPD0yNzk7KXhhW2UqMisxXT03LGUrKyx1WzddKys7Zm9yKDtlPD0yODc7KXhhW2UqMisxXT04LGUrKyx1WzhdKys7Zm9yKGpsKHhhLFlzKzEsdSksZT0wO2U8d3M7ZSsrKUpzW2UqMisxXT01LEpzW2UqMl09VG8oZSw1KTt6cj1uZXcgSGkoeGEsRWwsT3IrMSxZcyxVaSksUXI9bmV3IEhpKEpzLE9zLDAsd3MsVWkpLFpzPW5ldyBIaShuZXcgQXJyYXkoMCksZ2MsMCxLcyxVbCl9ZnVuY3Rpb24gd2woZSl7dmFyIHQ7Zm9yKHQ9MDt0PFlzO3QrKyllLmR5bl9sdHJlZVt0KjJdPTA7Zm9yKHQ9MDt0PHdzO3QrKyllLmR5bl9kdHJlZVt0KjJdPTA7Zm9yKHQ9MDt0PEtzO3QrKyllLmJsX3RyZWVbdCoyXT0wO2UuZHluX2x0cmVlW0hsKjJdPTEsZS5vcHRfbGVuPWUuc3RhdGljX2xlbj0wLGUubGFzdF9saXQ9ZS5tYXRjaGVzPTB9ZnVuY3Rpb24gWHMoZSl7ZS5iaV92YWxpZD44P3RzKGUsZS5iaV9idWYpOmUuYmlfdmFsaWQ+MCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH1mdW5jdGlvbiBDbChlLHQsbixyKXtYcyhlKSx0cyhlLG4pLHRzKGUsfm4pLGJsLmFycmF5U2V0KGUucGVuZGluZ19idWYsZS53aW5kb3csdCxuLGUucGVuZGluZyksZS5wZW5kaW5nKz1ufWZ1bmN0aW9uIFRzKGUsdCxuLHIpe3ZhciBzPXQqMix1PW4qMjtyZXR1cm4gZVtzXTxlW3VdfHxlW3NdPT09ZVt1XSYmclt0XTw9cltuXX1mdW5jdGlvbiBYbihlLHQsbil7Zm9yKHZhciByPWUuaGVhcFtuXSxzPW48PDE7czw9ZS5oZWFwX2xlbiYmKHM8ZS5oZWFwX2xlbiYmVHModCxlLmhlYXBbcysxXSxlLmhlYXBbc10sZS5kZXB0aCkmJnMrKywhVHModCxyLGUuaGVhcFtzXSxlLmRlcHRoKSk7KWUuaGVhcFtuXT1lLmhlYXBbc10sbj1zLHM8PD0xO2UuaGVhcFtuXT1yfWZ1bmN0aW9uIHNyKGUsdCxuKXt2YXIgcixzLHU9MCx2LEU7aWYoZS5sYXN0X2xpdCE9PTApZG8gcj1lLnBlbmRpbmdfYnVmW2UuZF9idWYrdSoyXTw8OHxlLnBlbmRpbmdfYnVmW2UuZF9idWYrdSoyKzFdLHM9ZS5wZW5kaW5nX2J1ZltlLmxfYnVmK3VdLHUrKyxyPT09MD9PbyhlLHMsdCk6KHY9TW5bc10sT28oZSx2K09yKzEsdCksRT1FbFt2XSxFIT09MCYmKHMtPUxuW3ZdLE5pKGUscyxFKSksci0tLHY9Y2EociksT28oZSx2LG4pLEU9T3Nbdl0sRSE9PTAmJihyLT1Eblt2XSxOaShlLHIsRSkpKTt3aGlsZSh1PGUubGFzdF9saXQpO09vKGUsSGwsdCl9ZnVuY3Rpb24gemwoZSx0KXt2YXIgbj10LmR5bl90cmVlLHI9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUscz10LnN0YXRfZGVzYy5oYXNfc3RyZWUsdT10LnN0YXRfZGVzYy5lbGVtcyx2LEUsRj0tMSxOO2ZvcihlLmhlYXBfbGVuPTAsZS5oZWFwX21heD1zYSx2PTA7djx1O3YrKyluW3YqMl0hPT0wPyhlLmhlYXBbKytlLmhlYXBfbGVuXT1GPXYsZS5kZXB0aFt2XT0wKTpuW3YqMisxXT0wO2Zvcig7ZS5oZWFwX2xlbjwyOylOPWUuaGVhcFsrK2UuaGVhcF9sZW5dPUY8Mj8rK0Y6MCxuW04qMl09MSxlLmRlcHRoW05dPTAsZS5vcHRfbGVuLS0scyYmKGUuc3RhdGljX2xlbi09cltOKjIrMV0pO2Zvcih0Lm1heF9jb2RlPUYsdj1lLmhlYXBfbGVuPj4xO3Y+PTE7di0tKVhuKGUsbix2KTtOPXU7ZG8gdj1lLmhlYXBbMV0sZS5oZWFwWzFdPWUuaGVhcFtlLmhlYXBfbGVuLS1dLFhuKGUsbiwxKSxFPWUuaGVhcFsxXSxlLmhlYXBbLS1lLmhlYXBfbWF4XT12LGUuaGVhcFstLWUuaGVhcF9tYXhdPUUsbltOKjJdPW5bdioyXStuW0UqMl0sZS5kZXB0aFtOXT0oZS5kZXB0aFt2XT49ZS5kZXB0aFtFXT9lLmRlcHRoW3ZdOmUuZGVwdGhbRV0pKzEsblt2KjIrMV09bltFKjIrMV09TixlLmhlYXBbMV09TisrLFhuKGUsbiwxKTt3aGlsZShlLmhlYXBfbGVuPj0yKTtlLmhlYXBbLS1lLmhlYXBfbWF4XT1lLmhlYXBbMV0sb28oZSx0KSxqbChuLEYsZS5ibF9jb3VudCl9ZnVuY3Rpb24gJGkoZSx0LG4pe3ZhciByLHM9LTEsdSx2PXRbMCoyKzFdLEU9MCxGPTcsTj00O2Zvcih2PT09MCYmKEY9MTM4LE49MyksdFsobisxKSoyKzFdPTY1NTM1LHI9MDtyPD1uO3IrKyl1PXYsdj10WyhyKzEpKjIrMV0sISgrK0U8RiYmdT09PXYpJiYoRTxOP2UuYmxfdHJlZVt1KjJdKz1FOnUhPT0wPyh1IT09cyYmZS5ibF90cmVlW3UqMl0rKyxlLmJsX3RyZWVbaGMqMl0rKyk6RTw9MTA/ZS5ibF90cmVlW0FzKjJdKys6ZS5ibF90cmVlW2VzKjJdKyssRT0wLHM9dSx2PT09MD8oRj0xMzgsTj0zKTp1PT09dj8oRj02LE49Myk6KEY9NyxOPTQpKX1mdW5jdGlvbiBqaShlLHQsbil7dmFyIHIscz0tMSx1LHY9dFswKjIrMV0sRT0wLEY9NyxOPTQ7Zm9yKHY9PT0wJiYoRj0xMzgsTj0zKSxyPTA7cjw9bjtyKyspaWYodT12LHY9dFsocisxKSoyKzFdLCEoKytFPEYmJnU9PT12KSl7aWYoRTxOKWRvIE9vKGUsdSxlLmJsX3RyZWUpO3doaWxlKC0tRSE9PTApO2Vsc2UgdSE9PTA/KHUhPT1zJiYoT28oZSx1LGUuYmxfdHJlZSksRS0tKSxPbyhlLGhjLGUuYmxfdHJlZSksTmkoZSxFLTMsMikpOkU8PTEwPyhPbyhlLEFzLGUuYmxfdHJlZSksTmkoZSxFLTMsMykpOihPbyhlLGVzLGUuYmxfdHJlZSksTmkoZSxFLTExLDcpKTtFPTAscz11LHY9PT0wPyhGPTEzOCxOPTMpOnU9PT12PyhGPTYsTj0zKTooRj03LE49NCl9fWZ1bmN0aW9uIFdsKGUpe3ZhciB0O2ZvcigkaShlLGUuZHluX2x0cmVlLGUubF9kZXNjLm1heF9jb2RlKSwkaShlLGUuZHluX2R0cmVlLGUuZF9kZXNjLm1heF9jb2RlKSx6bChlLGUuYmxfZGVzYyksdD1Lcy0xO3Q+PTMmJmUuYmxfdHJlZVtTbFt0XSoyKzFdPT09MDt0LS0pO3JldHVybiBlLm9wdF9sZW4rPTMqKHQrMSkrNSs1KzQsdH1mdW5jdGlvbiB2YyhlLHQsbixyKXt2YXIgcztmb3IoTmkoZSx0LTI1Nyw1KSxOaShlLG4tMSw1KSxOaShlLHItNCw0KSxzPTA7czxyO3MrKylOaShlLGUuYmxfdHJlZVtTbFtzXSoyKzFdLDMpO2ppKGUsZS5keW5fbHRyZWUsdC0xKSxqaShlLGUuZHluX2R0cmVlLG4tMSl9ZnVuY3Rpb24gTnUoZSl7dmFyIHQ9NDA5MzYyNDQ0NyxuO2ZvcihuPTA7bjw9MzE7bisrLHQ+Pj49MSlpZih0JjEmJmUuZHluX2x0cmVlW24qMl0hPT0wKXJldHVybiB5bDtpZihlLmR5bl9sdHJlZVs5KjJdIT09MHx8ZS5keW5fbHRyZWVbMTAqMl0hPT0wfHxlLmR5bl9sdHJlZVsxMyoyXSE9PTApcmV0dXJuIHBjO2ZvcihuPTMyO248T3I7bisrKWlmKGUuZHluX2x0cmVlW24qMl0hPT0wKXJldHVybiBwYztyZXR1cm4geWx9dmFyIElpPSExO2Z1bmN0aW9uIGtyKGUpe0lpfHwoUHUoKSxJaT0hMCksZS5sX2Rlc2M9bmV3IGxhKGUuZHluX2x0cmVlLHpyKSxlLmRfZGVzYz1uZXcgbGEoZS5keW5fZHRyZWUsUXIpLGUuYmxfZGVzYz1uZXcgbGEoZS5ibF90cmVlLFpzKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MCx3bChlKX1mdW5jdGlvbiBXbyhlLHQsbixyKXtOaShlLChDbzw8MSkrKHI/MTowKSwzKSxDbChlLHQsbil9ZnVuY3Rpb24gR2woZSl7TmkoZSxsaTw8MSwzKSxPbyhlLEhsLHhhKSxXcihlKX1mdW5jdGlvbiBraShlLHQsbixyKXt2YXIgcyx1LHY9MDtlLmxldmVsPjA/KGUuc3RybS5kYXRhX3R5cGU9PT1XYyYmKGUuc3RybS5kYXRhX3R5cGU9TnUoZSkpLHpsKGUsZS5sX2Rlc2MpLHpsKGUsZS5kX2Rlc2MpLHY9V2woZSkscz1lLm9wdF9sZW4rMys3Pj4+Myx1PWUuc3RhdGljX2xlbiszKzc+Pj4zLHU8PXMmJihzPXUpKTpzPXU9bis1LG4rNDw9cyYmdCE9PS0xP1dvKGUsdCxuLHIpOmUuc3RyYXRlZ3k9PT1GbHx8dT09PXM/KE5pKGUsKGxpPDwxKSsocj8xOjApLDMpLHNyKGUseGEsSnMpKTooTmkoZSwoY2k8PDEpKyhyPzE6MCksMyksdmMoZSxlLmxfZGVzYy5tYXhfY29kZSsxLGUuZF9kZXNjLm1heF9jb2RlKzEsdisxKSxzcihlLGUuZHluX2x0cmVlLGUuZHluX2R0cmVlKSksd2woZSksciYmWHMoZSl9ZnVuY3Rpb24gemkoZSx0LG4pe3JldHVybiBlLnBlbmRpbmdfYnVmW2UuZF9idWYrZS5sYXN0X2xpdCoyXT10Pj4+OCYyNTUsZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2UubGFzdF9saXQqMisxXT10JjI1NSxlLnBlbmRpbmdfYnVmW2UubF9idWYrZS5sYXN0X2xpdF09biYyNTUsZS5sYXN0X2xpdCsrLHQ9PT0wP2UuZHluX2x0cmVlW24qMl0rKzooZS5tYXRjaGVzKyssdC0tLGUuZHluX2x0cmVlWyhNbltuXStPcisxKSoyXSsrLGUuZHluX2R0cmVlW2NhKHQpKjJdKyspLGUubGFzdF9saXQ9PT1lLmxpdF9idWZzaXplLTF9eWkuX3RyX2luaXQ9a3IseWkuX3RyX3N0b3JlZF9ibG9jaz1Xbyx5aS5fdHJfZmx1c2hfYmxvY2s9a2kseWkuX3RyX3RhbGx5PXppLHlpLl90cl9hbGlnbj1HbDtmdW5jdGlvbiBJdShlLHQsbixyKXtmb3IodmFyIHM9ZSY2NTUzNXwwLHU9ZT4+PjE2JjY1NTM1fDAsdj0wO24hPT0wOyl7dj1uPjJlMz8yZTM6bixuLT12O2RvIHM9cyt0W3IrK118MCx1PXUrc3wwO3doaWxlKC0tdik7cyU9NjU1MjEsdSU9NjU1MjF9cmV0dXJuIHN8dTw8MTZ8MH12YXIgbWM9SXU7ZnVuY3Rpb24gcHIoKXtmb3IodmFyIGUsdD1bXSxuPTA7bjwyNTY7bisrKXtlPW47Zm9yKHZhciByPTA7cjw4O3IrKyllPWUmMT8zOTg4MjkyMzg0XmU+Pj4xOmU+Pj4xO3Rbbl09ZX1yZXR1cm4gdH12YXIgTm49cHIoKTtmdW5jdGlvbiBhbyhlLHQsbixyKXt2YXIgcz1Obix1PXIrbjtlXj0tMTtmb3IodmFyIHY9cjt2PHU7disrKWU9ZT4+Pjhec1soZV50W3ZdKSYyNTVdO3JldHVybiBlXi0xfXZhciBQcz1hbyxRcz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9LHVpPXFuLEdyPXlpLHVhPW1jLGZhPVBzLF9jPVFzLGRhPTAsYmM9MSxHYz0zLHBhPTQsbnM9NSxFaT0wLHFsPTEsc289LTIseWM9LTMsWWw9LTUsa3U9LTEscWM9MSxycz0yLEtsPTMsUnU9NCxBbD0wLGlzPTIsb3M9OCxFYz05LFljPTE1LHh1PTgsS2M9MjksQnU9MjU2LEpsPUJ1KzErS2MsWmw9MzAsYXM9MTksc3M9MipKbCsxLE11PTE1LEVuPTMsbHM9MjU4LEdvPWxzK0VuKzEsTHU9MzIsWGw9NDIsU2M9NjksUWw9NzMsaGE9OTEsTnM9MTAzLGdhPTExMyxlbD02NjYsUnI9MSx0bD0yLElzPTMsbmw9NCxKYz0zO2Z1bmN0aW9uIEJhKGUsdCl7cmV0dXJuIGUubXNnPV9jW3RdLHR9ZnVuY3Rpb24gWmMoZSl7cmV0dXJuKGU8PDEpLShlPjQ/OTowKX1mdW5jdGlvbiB2YShlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7LS10Pj0wOyllW3RdPTB9ZnVuY3Rpb24gTWEoZSl7dmFyIHQ9ZS5zdGF0ZSxuPXQucGVuZGluZztuPmUuYXZhaWxfb3V0JiYobj1lLmF2YWlsX291dCksbiE9PTAmJih1aS5hcnJheVNldChlLm91dHB1dCx0LnBlbmRpbmdfYnVmLHQucGVuZGluZ19vdXQsbixlLm5leHRfb3V0KSxlLm5leHRfb3V0Kz1uLHQucGVuZGluZ19vdXQrPW4sZS50b3RhbF9vdXQrPW4sZS5hdmFpbF9vdXQtPW4sdC5wZW5kaW5nLT1uLHQucGVuZGluZz09PTAmJih0LnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiBmaShlLHQpe0dyLl90cl9mbHVzaF9ibG9jayhlLGUuYmxvY2tfc3RhcnQ+PTA/ZS5ibG9ja19zdGFydDotMSxlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQsdCksZS5ibG9ja19zdGFydD1lLnN0cnN0YXJ0LE1hKGUuc3RybSl9ZnVuY3Rpb24gU24oZSx0KXtlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10fWZ1bmN0aW9uIHJsKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQmMjU1fWZ1bmN0aW9uIFhjKGUsdCxuLHIpe3ZhciBzPWUuYXZhaWxfaW47cmV0dXJuIHM+ciYmKHM9cikscz09PTA/MDooZS5hdmFpbF9pbi09cyx1aS5hcnJheVNldCh0LGUuaW5wdXQsZS5uZXh0X2luLHMsbiksZS5zdGF0ZS53cmFwPT09MT9lLmFkbGVyPXVhKGUuYWRsZXIsdCxzLG4pOmUuc3RhdGUud3JhcD09PTImJihlLmFkbGVyPWZhKGUuYWRsZXIsdCxzLG4pKSxlLm5leHRfaW4rPXMsZS50b3RhbF9pbis9cyxzKX1mdW5jdGlvbiBRYyhlLHQpe3ZhciBuPWUubWF4X2NoYWluX2xlbmd0aCxyPWUuc3Ryc3RhcnQscyx1LHY9ZS5wcmV2X2xlbmd0aCxFPWUubmljZV9tYXRjaCxGPWUuc3Ryc3RhcnQ+ZS53X3NpemUtR28/ZS5zdHJzdGFydC0oZS53X3NpemUtR28pOjAsTj1lLndpbmRvdyxNPWUud19tYXNrLG1lPWUucHJldixBZT1lLnN0cnN0YXJ0K2xzLHhlPU5bcit2LTFdLGJ0PU5bcit2XTtlLnByZXZfbGVuZ3RoPj1lLmdvb2RfbWF0Y2gmJihuPj49MiksRT5lLmxvb2thaGVhZCYmKEU9ZS5sb29rYWhlYWQpO2RvIGlmKHM9dCwhKE5bcyt2XSE9PWJ0fHxOW3Mrdi0xXSE9PXhlfHxOW3NdIT09TltyXXx8TlsrK3NdIT09TltyKzFdKSl7cis9MixzKys7ZG87d2hpbGUoTlsrK3JdPT09TlsrK3NdJiZOWysrcl09PT1OWysrc10mJk5bKytyXT09PU5bKytzXSYmTlsrK3JdPT09TlsrK3NdJiZOWysrcl09PT1OWysrc10mJk5bKytyXT09PU5bKytzXSYmTlsrK3JdPT09TlsrK3NdJiZOWysrcl09PT1OWysrc10mJnI8QWUpO2lmKHU9bHMtKEFlLXIpLHI9QWUtbHMsdT52KXtpZihlLm1hdGNoX3N0YXJ0PXQsdj11LHU+PUUpYnJlYWs7eGU9TltyK3YtMV0sYnQ9TltyK3ZdfX13aGlsZSgodD1tZVt0Jk1dKT5GJiYtLW4hPT0wKTtyZXR1cm4gdjw9ZS5sb29rYWhlYWQ/djplLmxvb2thaGVhZH1mdW5jdGlvbiBMYShlKXt2YXIgdD1lLndfc2l6ZSxuLHIscyx1LHY7ZG97aWYodT1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49dCsodC1Hbykpe3VpLmFycmF5U2V0KGUud2luZG93LGUud2luZG93LHQsdCwwKSxlLm1hdGNoX3N0YXJ0LT10LGUuc3Ryc3RhcnQtPXQsZS5ibG9ja19zdGFydC09dCxyPWUuaGFzaF9zaXplLG49cjtkbyBzPWUuaGVhZFstLW5dLGUuaGVhZFtuXT1zPj10P3MtdDowO3doaWxlKC0tcik7cj10LG49cjtkbyBzPWUucHJldlstLW5dLGUucHJldltuXT1zPj10P3MtdDowO3doaWxlKC0tcik7dSs9dH1pZihlLnN0cm0uYXZhaWxfaW49PT0wKWJyZWFrO2lmKHI9WGMoZS5zdHJtLGUud2luZG93LGUuc3Ryc3RhcnQrZS5sb29rYWhlYWQsdSksZS5sb29rYWhlYWQrPXIsZS5sb29rYWhlYWQrZS5pbnNlcnQ+PUVuKWZvcih2PWUuc3Ryc3RhcnQtZS5pbnNlcnQsZS5pbnNfaD1lLndpbmRvd1t2XSxlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbdisxXSkmZS5oYXNoX21hc2s7ZS5pbnNlcnQmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbditFbi0xXSkmZS5oYXNoX21hc2ssZS5wcmV2W3YmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09dix2KyssZS5pbnNlcnQtLSwhKGUubG9va2FoZWFkK2UuaW5zZXJ0PEVuKSk7KTt9d2hpbGUoZS5sb29rYWhlYWQ8R28mJmUuc3RybS5hdmFpbF9pbiE9PTApfWZ1bmN0aW9uIGV1KGUsdCl7dmFyIG49NjU1MzU7Zm9yKG4+ZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihuPWUucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihlLmxvb2thaGVhZDw9MSl7aWYoTGEoZSksZS5sb29rYWhlYWQ9PT0wJiZ0PT09ZGEpcmV0dXJuIFJyO2lmKGUubG9va2FoZWFkPT09MClicmVha31lLnN0cnN0YXJ0Kz1lLmxvb2thaGVhZCxlLmxvb2thaGVhZD0wO3ZhciByPWUuYmxvY2tfc3RhcnQrbjtpZigoZS5zdHJzdGFydD09PTB8fGUuc3Ryc3RhcnQ+PXIpJiYoZS5sb29rYWhlYWQ9ZS5zdHJzdGFydC1yLGUuc3Ryc3RhcnQ9cixmaShlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCl8fGUuc3Ryc3RhcnQtZS5ibG9ja19zdGFydD49ZS53X3NpemUtR28mJihmaShlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIFJyfXJldHVybiBlLmluc2VydD0wLHQ9PT1wYT8oZmkoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/SXM6bmwpOihlLnN0cnN0YXJ0PmUuYmxvY2tfc3RhcnQmJihmaShlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCksUnIpfWZ1bmN0aW9uIG1hKGUsdCl7Zm9yKHZhciBuLHI7Oyl7aWYoZS5sb29rYWhlYWQ8R28pe2lmKExhKGUpLGUubG9va2FoZWFkPEdvJiZ0PT09ZGEpcmV0dXJuIFJyO2lmKGUubG9va2FoZWFkPT09MClicmVha31pZihuPTAsZS5sb29rYWhlYWQ+PUVuJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrRW4tMV0pJmUuaGFzaF9tYXNrLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCksbiE9PTAmJmUuc3Ryc3RhcnQtbjw9ZS53X3NpemUtR28mJihlLm1hdGNoX2xlbmd0aD1RYyhlLG4pKSxlLm1hdGNoX2xlbmd0aD49RW4paWYocj1Hci5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGgtRW4pLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aDw9ZS5tYXhfbGF6eV9tYXRjaCYmZS5sb29rYWhlYWQ+PUVuKXtlLm1hdGNoX2xlbmd0aC0tO2RvIGUuc3Ryc3RhcnQrKyxlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtFbi0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0O3doaWxlKC0tZS5tYXRjaF9sZW5ndGghPT0wKTtlLnN0cnN0YXJ0Kyt9ZWxzZSBlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wLGUuaW5zX2g9ZS53aW5kb3dbZS5zdHJzdGFydF0sZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrMV0pJmUuaGFzaF9tYXNrO2Vsc2Ugcj1Hci5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKztpZihyJiYoZmkoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBScn1yZXR1cm4gZS5pbnNlcnQ9ZS5zdHJzdGFydDxFbi0xP2Uuc3Ryc3RhcnQ6RW4tMSx0PT09cGE/KGZpKGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP0lzOm5sKTplLmxhc3RfbGl0JiYoZmkoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP1JyOnRsfWZ1bmN0aW9uIF9hKGUsdCl7Zm9yKHZhciBuLHIsczs7KXtpZihlLmxvb2thaGVhZDxHbyl7aWYoTGEoZSksZS5sb29rYWhlYWQ8R28mJnQ9PT1kYSlyZXR1cm4gUnI7aWYoZS5sb29rYWhlYWQ9PT0wKWJyZWFrfWlmKG49MCxlLmxvb2thaGVhZD49RW4mJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtFbi0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSxlLnByZXZfbGVuZ3RoPWUubWF0Y2hfbGVuZ3RoLGUucHJldl9tYXRjaD1lLm1hdGNoX3N0YXJ0LGUubWF0Y2hfbGVuZ3RoPUVuLTEsbiE9PTAmJmUucHJldl9sZW5ndGg8ZS5tYXhfbGF6eV9tYXRjaCYmZS5zdHJzdGFydC1uPD1lLndfc2l6ZS1HbyYmKGUubWF0Y2hfbGVuZ3RoPVFjKGUsbiksZS5tYXRjaF9sZW5ndGg8PTUmJihlLnN0cmF0ZWd5PT09cWN8fGUubWF0Y2hfbGVuZ3RoPT09RW4mJmUuc3Ryc3RhcnQtZS5tYXRjaF9zdGFydD40MDk2KSYmKGUubWF0Y2hfbGVuZ3RoPUVuLTEpKSxlLnByZXZfbGVuZ3RoPj1FbiYmZS5tYXRjaF9sZW5ndGg8PWUucHJldl9sZW5ndGgpe3M9ZS5zdHJzdGFydCtlLmxvb2thaGVhZC1FbixyPUdyLl90cl90YWxseShlLGUuc3Ryc3RhcnQtMS1lLnByZXZfbWF0Y2gsZS5wcmV2X2xlbmd0aC1FbiksZS5sb29rYWhlYWQtPWUucHJldl9sZW5ndGgtMSxlLnByZXZfbGVuZ3RoLT0yO2RvKytlLnN0cnN0YXJ0PD1zJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrRW4tMV0pJmUuaGFzaF9tYXNrLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCk7d2hpbGUoLS1lLnByZXZfbGVuZ3RoIT09MCk7aWYoZS5tYXRjaF9hdmFpbGFibGU9MCxlLm1hdGNoX2xlbmd0aD1Fbi0xLGUuc3Ryc3RhcnQrKyxyJiYoZmkoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBScn1lbHNlIGlmKGUubWF0Y2hfYXZhaWxhYmxlKXtpZihyPUdyLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksciYmZmkoZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sZS5zdHJtLmF2YWlsX291dD09PTApcmV0dXJuIFJyfWVsc2UgZS5tYXRjaF9hdmFpbGFibGU9MSxlLnN0cnN0YXJ0KyssZS5sb29rYWhlYWQtLX1yZXR1cm4gZS5tYXRjaF9hdmFpbGFibGUmJihyPUdyLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksZS5tYXRjaF9hdmFpbGFibGU9MCksZS5pbnNlcnQ9ZS5zdHJzdGFydDxFbi0xP2Uuc3Ryc3RhcnQ6RW4tMSx0PT09cGE/KGZpKGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP0lzOm5sKTplLmxhc3RfbGl0JiYoZmkoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP1JyOnRsfWZ1bmN0aW9uIHdjKGUsdCl7Zm9yKHZhciBuLHIscyx1LHY9ZS53aW5kb3c7Oyl7aWYoZS5sb29rYWhlYWQ8PWxzKXtpZihMYShlKSxlLmxvb2thaGVhZDw9bHMmJnQ9PT1kYSlyZXR1cm4gUnI7aWYoZS5sb29rYWhlYWQ9PT0wKWJyZWFrfWlmKGUubWF0Y2hfbGVuZ3RoPTAsZS5sb29rYWhlYWQ+PUVuJiZlLnN0cnN0YXJ0PjAmJihzPWUuc3Ryc3RhcnQtMSxyPXZbc10scj09PXZbKytzXSYmcj09PXZbKytzXSYmcj09PXZbKytzXSkpe3U9ZS5zdHJzdGFydCtscztkbzt3aGlsZShyPT09dlsrK3NdJiZyPT09dlsrK3NdJiZyPT09dlsrK3NdJiZyPT09dlsrK3NdJiZyPT09dlsrK3NdJiZyPT09dlsrK3NdJiZyPT09dlsrK3NdJiZyPT09dlsrK3NdJiZzPHUpO2UubWF0Y2hfbGVuZ3RoPWxzLSh1LXMpLGUubWF0Y2hfbGVuZ3RoPmUubG9va2FoZWFkJiYoZS5tYXRjaF9sZW5ndGg9ZS5sb29rYWhlYWQpfWlmKGUubWF0Y2hfbGVuZ3RoPj1Fbj8obj1Hci5fdHJfdGFsbHkoZSwxLGUubWF0Y2hfbGVuZ3RoLUVuKSxlLmxvb2thaGVhZC09ZS5tYXRjaF9sZW5ndGgsZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCk6KG49R3IuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyspLG4mJihmaShlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIFJyfXJldHVybiBlLmluc2VydD0wLHQ9PT1wYT8oZmkoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/SXM6bmwpOmUubGFzdF9saXQmJihmaShlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/UnI6dGx9ZnVuY3Rpb24gdHUoZSx0KXtmb3IodmFyIG47Oyl7aWYoZS5sb29rYWhlYWQ9PT0wJiYoTGEoZSksZS5sb29rYWhlYWQ9PT0wKSl7aWYodD09PWRhKXJldHVybiBScjticmVha31pZihlLm1hdGNoX2xlbmd0aD0wLG49R3IuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyssbiYmKGZpKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gUnJ9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PXBhPyhmaShlLCEwKSxlLnN0cm0uYXZhaWxfb3V0PT09MD9JczpubCk6ZS5sYXN0X2xpdCYmKGZpKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKT9Scjp0bH1mdW5jdGlvbiBiYShlLHQsbixyLHMpe3RoaXMuZ29vZF9sZW5ndGg9ZSx0aGlzLm1heF9sYXp5PXQsdGhpcy5uaWNlX2xlbmd0aD1uLHRoaXMubWF4X2NoYWluPXIsdGhpcy5mdW5jPXN9dmFyIFBvO1BvPVtuZXcgYmEoMCwwLDAsMCxldSksbmV3IGJhKDQsNCw4LDQsbWEpLG5ldyBiYSg0LDUsMTYsOCxtYSksbmV3IGJhKDQsNiwzMiwzMixtYSksbmV3IGJhKDQsNCwxNiwxNixfYSksbmV3IGJhKDgsMTYsMzIsMzIsX2EpLG5ldyBiYSg4LDE2LDEyOCwxMjgsX2EpLG5ldyBiYSg4LDMyLDEyOCwyNTYsX2EpLG5ldyBiYSgzMiwxMjgsMjU4LDEwMjQsX2EpLG5ldyBiYSgzMiwyNTgsMjU4LDQwOTYsX2EpXTtmdW5jdGlvbiBudShlKXtlLndpbmRvd19zaXplPTIqZS53X3NpemUsdmEoZS5oZWFkKSxlLm1heF9sYXp5X21hdGNoPVBvW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1Qb1tlLmxldmVsXS5nb29kX2xlbmd0aCxlLm5pY2VfbWF0Y2g9UG9bZS5sZXZlbF0ubmljZV9sZW5ndGgsZS5tYXhfY2hhaW5fbGVuZ3RoPVBvW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPUVuLTEsZS5tYXRjaF9hdmFpbGFibGU9MCxlLmluc19oPTB9ZnVuY3Rpb24gQ2MoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1vcyx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgdWkuQnVmMTYoc3MqMiksdGhpcy5keW5fZHRyZWU9bmV3IHVpLkJ1ZjE2KCgyKlpsKzEpKjIpLHRoaXMuYmxfdHJlZT1uZXcgdWkuQnVmMTYoKDIqYXMrMSkqMiksdmEodGhpcy5keW5fbHRyZWUpLHZhKHRoaXMuZHluX2R0cmVlKSx2YSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyB1aS5CdWYxNihNdSsxKSx0aGlzLmhlYXA9bmV3IHVpLkJ1ZjE2KDIqSmwrMSksdmEodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IHVpLkJ1ZjE2KDIqSmwrMSksdmEodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gcnUoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP0JhKGUsc28pOihlLnRvdGFsX2luPWUudG90YWxfb3V0PTAsZS5kYXRhX3R5cGU9aXMsdD1lLnN0YXRlLHQucGVuZGluZz0wLHQucGVuZGluZ19vdXQ9MCx0LndyYXA8MCYmKHQud3JhcD0tdC53cmFwKSx0LnN0YXR1cz10LndyYXA/WGw6Z2EsZS5hZGxlcj10LndyYXA9PT0yPzA6MSx0Lmxhc3RfZmx1c2g9ZGEsR3IuX3RyX2luaXQodCksRWkpfWZ1bmN0aW9uIGVjKGUpe3ZhciB0PXJ1KGUpO3JldHVybiB0PT09RWkmJm51KGUuc3RhdGUpLHR9ZnVuY3Rpb24gRHUoZSx0KXtyZXR1cm4hZXx8IWUuc3RhdGV8fGUuc3RhdGUud3JhcCE9PTI/c286KGUuc3RhdGUuZ3poZWFkPXQsRWkpfWZ1bmN0aW9uIHlhKGUsdCxuLHIscyx1KXtpZighZSlyZXR1cm4gc287dmFyIHY9MTtpZih0PT09a3UmJih0PTYpLHI8MD8odj0wLHI9LXIpOnI+MTUmJih2PTIsci09MTYpLHM8MXx8cz5FY3x8biE9PW9zfHxyPDh8fHI+MTV8fHQ8MHx8dD45fHx1PDB8fHU+UnUpcmV0dXJuIEJhKGUsc28pO3I9PT04JiYocj05KTt2YXIgRT1uZXcgQ2M7cmV0dXJuIGUuc3RhdGU9RSxFLnN0cm09ZSxFLndyYXA9dixFLmd6aGVhZD1udWxsLEUud19iaXRzPXIsRS53X3NpemU9MTw8RS53X2JpdHMsRS53X21hc2s9RS53X3NpemUtMSxFLmhhc2hfYml0cz1zKzcsRS5oYXNoX3NpemU9MTw8RS5oYXNoX2JpdHMsRS5oYXNoX21hc2s9RS5oYXNoX3NpemUtMSxFLmhhc2hfc2hpZnQ9fn4oKEUuaGFzaF9iaXRzK0VuLTEpL0VuKSxFLndpbmRvdz1uZXcgdWkuQnVmOChFLndfc2l6ZSoyKSxFLmhlYWQ9bmV3IHVpLkJ1ZjE2KEUuaGFzaF9zaXplKSxFLnByZXY9bmV3IHVpLkJ1ZjE2KEUud19zaXplKSxFLmxpdF9idWZzaXplPTE8PHMrNixFLnBlbmRpbmdfYnVmX3NpemU9RS5saXRfYnVmc2l6ZSo0LEUucGVuZGluZ19idWY9bmV3IHVpLkJ1ZjgoRS5wZW5kaW5nX2J1Zl9zaXplKSxFLmRfYnVmPTEqRS5saXRfYnVmc2l6ZSxFLmxfYnVmPSgxKzIpKkUubGl0X2J1ZnNpemUsRS5sZXZlbD10LEUuc3RyYXRlZ3k9dSxFLm1ldGhvZD1uLGVjKGUpfWZ1bmN0aW9uIGtzKGUsdCl7cmV0dXJuIHlhKGUsdCxvcyxZYyx4dSxBbCl9ZnVuY3Rpb24gaXUoZSx0KXt2YXIgbixyLHMsdTtpZighZXx8IWUuc3RhdGV8fHQ+bnN8fHQ8MClyZXR1cm4gZT9CYShlLHNvKTpzbztpZihyPWUuc3RhdGUsIWUub3V0cHV0fHwhZS5pbnB1dCYmZS5hdmFpbF9pbiE9PTB8fHIuc3RhdHVzPT09ZWwmJnQhPT1wYSlyZXR1cm4gQmEoZSxlLmF2YWlsX291dD09PTA/WWw6c28pO2lmKHIuc3RybT1lLG49ci5sYXN0X2ZsdXNoLHIubGFzdF9mbHVzaD10LHIuc3RhdHVzPT09WGwpaWYoci53cmFwPT09MillLmFkbGVyPTAsU24ociwzMSksU24ociwxMzkpLFNuKHIsOCksci5nemhlYWQ/KFNuKHIsKHIuZ3poZWFkLnRleHQ/MTowKSsoci5nemhlYWQuaGNyYz8yOjApKyhyLmd6aGVhZC5leHRyYT80OjApKyhyLmd6aGVhZC5uYW1lPzg6MCkrKHIuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLFNuKHIsci5nemhlYWQudGltZSYyNTUpLFNuKHIsci5nemhlYWQudGltZT4+OCYyNTUpLFNuKHIsci5nemhlYWQudGltZT4+MTYmMjU1KSxTbihyLHIuZ3poZWFkLnRpbWU+PjI0JjI1NSksU24ocixyLmxldmVsPT09OT8yOnIuc3RyYXRlZ3k+PXJzfHxyLmxldmVsPDI/NDowKSxTbihyLHIuZ3poZWFkLm9zJjI1NSksci5nemhlYWQuZXh0cmEmJnIuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKFNuKHIsci5nemhlYWQuZXh0cmEubGVuZ3RoJjI1NSksU24ocixyLmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksci5nemhlYWQuaGNyYyYmKGUuYWRsZXI9ZmEoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZywwKSksci5nemluZGV4PTAsci5zdGF0dXM9U2MpOihTbihyLDApLFNuKHIsMCksU24ociwwKSxTbihyLDApLFNuKHIsMCksU24ocixyLmxldmVsPT09OT8yOnIuc3RyYXRlZ3k+PXJzfHxyLmxldmVsPDI/NDowKSxTbihyLEpjKSxyLnN0YXR1cz1nYSk7ZWxzZXt2YXIgdj1vcysoci53X2JpdHMtODw8NCk8PDgsRT0tMTtyLnN0cmF0ZWd5Pj1yc3x8ci5sZXZlbDwyP0U9MDpyLmxldmVsPDY/RT0xOnIubGV2ZWw9PT02P0U9MjpFPTMsdnw9RTw8NixyLnN0cnN0YXJ0IT09MCYmKHZ8PUx1KSx2Kz0zMS12JTMxLHIuc3RhdHVzPWdhLHJsKHIsdiksci5zdHJzdGFydCE9PTAmJihybChyLGUuYWRsZXI+Pj4xNikscmwocixlLmFkbGVyJjY1NTM1KSksZS5hZGxlcj0xfWlmKHIuc3RhdHVzPT09U2MpaWYoci5nemhlYWQuZXh0cmEpe2ZvcihzPXIucGVuZGluZztyLmd6aW5kZXg8KHIuZ3poZWFkLmV4dHJhLmxlbmd0aCY2NTUzNSkmJiEoci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplJiYoci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPnMmJihlLmFkbGVyPWZhKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctcyxzKSksTWEoZSkscz1yLnBlbmRpbmcsci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplKSk7KVNuKHIsci5nemhlYWQuZXh0cmFbci5nemluZGV4XSYyNTUpLHIuZ3ppbmRleCsrO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5zJiYoZS5hZGxlcj1mYShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLXMscykpLHIuZ3ppbmRleD09PXIuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKHIuZ3ppbmRleD0wLHIuc3RhdHVzPVFsKX1lbHNlIHIuc3RhdHVzPVFsO2lmKHIuc3RhdHVzPT09UWwpaWYoci5nemhlYWQubmFtZSl7cz1yLnBlbmRpbmc7ZG97aWYoci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplJiYoci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPnMmJihlLmFkbGVyPWZhKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctcyxzKSksTWEoZSkscz1yLnBlbmRpbmcsci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplKSl7dT0xO2JyZWFrfXIuZ3ppbmRleDxyLmd6aGVhZC5uYW1lLmxlbmd0aD91PXIuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChyLmd6aW5kZXgrKykmMjU1OnU9MCxTbihyLHUpfXdoaWxlKHUhPT0wKTtyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+cyYmKGUuYWRsZXI9ZmEoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1zLHMpKSx1PT09MCYmKHIuZ3ppbmRleD0wLHIuc3RhdHVzPWhhKX1lbHNlIHIuc3RhdHVzPWhhO2lmKHIuc3RhdHVzPT09aGEpaWYoci5nemhlYWQuY29tbWVudCl7cz1yLnBlbmRpbmc7ZG97aWYoci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplJiYoci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPnMmJihlLmFkbGVyPWZhKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctcyxzKSksTWEoZSkscz1yLnBlbmRpbmcsci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplKSl7dT0xO2JyZWFrfXIuZ3ppbmRleDxyLmd6aGVhZC5jb21tZW50Lmxlbmd0aD91PXIuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChyLmd6aW5kZXgrKykmMjU1OnU9MCxTbihyLHUpfXdoaWxlKHUhPT0wKTtyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+cyYmKGUuYWRsZXI9ZmEoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1zLHMpKSx1PT09MCYmKHIuc3RhdHVzPU5zKX1lbHNlIHIuc3RhdHVzPU5zO2lmKHIuc3RhdHVzPT09TnMmJihyLmd6aGVhZC5oY3JjPyhyLnBlbmRpbmcrMj5yLnBlbmRpbmdfYnVmX3NpemUmJk1hKGUpLHIucGVuZGluZysyPD1yLnBlbmRpbmdfYnVmX3NpemUmJihTbihyLGUuYWRsZXImMjU1KSxTbihyLGUuYWRsZXI+PjgmMjU1KSxlLmFkbGVyPTAsci5zdGF0dXM9Z2EpKTpyLnN0YXR1cz1nYSksci5wZW5kaW5nIT09MCl7aWYoTWEoZSksZS5hdmFpbF9vdXQ9PT0wKXJldHVybiByLmxhc3RfZmx1c2g9LTEsRWl9ZWxzZSBpZihlLmF2YWlsX2luPT09MCYmWmModCk8PVpjKG4pJiZ0IT09cGEpcmV0dXJuIEJhKGUsWWwpO2lmKHIuc3RhdHVzPT09ZWwmJmUuYXZhaWxfaW4hPT0wKXJldHVybiBCYShlLFlsKTtpZihlLmF2YWlsX2luIT09MHx8ci5sb29rYWhlYWQhPT0wfHx0IT09ZGEmJnIuc3RhdHVzIT09ZWwpe3ZhciBGPXIuc3RyYXRlZ3k9PT1ycz90dShyLHQpOnIuc3RyYXRlZ3k9PT1LbD93YyhyLHQpOlBvW3IubGV2ZWxdLmZ1bmMocix0KTtpZigoRj09PUlzfHxGPT09bmwpJiYoci5zdGF0dXM9ZWwpLEY9PT1Scnx8Rj09PUlzKXJldHVybiBlLmF2YWlsX291dD09PTAmJihyLmxhc3RfZmx1c2g9LTEpLEVpO2lmKEY9PT10bCYmKHQ9PT1iYz9Hci5fdHJfYWxpZ24ocik6dCE9PW5zJiYoR3IuX3RyX3N0b3JlZF9ibG9jayhyLDAsMCwhMSksdD09PUdjJiYodmEoci5oZWFkKSxyLmxvb2thaGVhZD09PTAmJihyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApKSksTWEoZSksZS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gci5sYXN0X2ZsdXNoPS0xLEVpfXJldHVybiB0IT09cGE/RWk6ci53cmFwPD0wP3FsOihyLndyYXA9PT0yPyhTbihyLGUuYWRsZXImMjU1KSxTbihyLGUuYWRsZXI+PjgmMjU1KSxTbihyLGUuYWRsZXI+PjE2JjI1NSksU24ocixlLmFkbGVyPj4yNCYyNTUpLFNuKHIsZS50b3RhbF9pbiYyNTUpLFNuKHIsZS50b3RhbF9pbj4+OCYyNTUpLFNuKHIsZS50b3RhbF9pbj4+MTYmMjU1KSxTbihyLGUudG90YWxfaW4+PjI0JjI1NSkpOihybChyLGUuYWRsZXI+Pj4xNikscmwocixlLmFkbGVyJjY1NTM1KSksTWEoZSksci53cmFwPjAmJihyLndyYXA9LXIud3JhcCksci5wZW5kaW5nIT09MD9FaTpxbCl9ZnVuY3Rpb24gRnUoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP3NvOih0PWUuc3RhdGUuc3RhdHVzLHQhPT1YbCYmdCE9PVNjJiZ0IT09UWwmJnQhPT1oYSYmdCE9PU5zJiZ0IT09Z2EmJnQhPT1lbD9CYShlLHNvKTooZS5zdGF0ZT1udWxsLHQ9PT1nYT9CYShlLHljKTpFaSkpfWZ1bmN0aW9uIG91KGUsdCl7dmFyIG49dC5sZW5ndGgscixzLHUsdixFLEYsTixNO2lmKCFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSx2PXIud3JhcCx2PT09Mnx8dj09PTEmJnIuc3RhdHVzIT09WGx8fHIubG9va2FoZWFkKSlyZXR1cm4gc287Zm9yKHY9PT0xJiYoZS5hZGxlcj11YShlLmFkbGVyLHQsbiwwKSksci53cmFwPTAsbj49ci53X3NpemUmJih2PT09MCYmKHZhKHIuaGVhZCksci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSxNPW5ldyB1aS5CdWY4KHIud19zaXplKSx1aS5hcnJheVNldChNLHQsbi1yLndfc2l6ZSxyLndfc2l6ZSwwKSx0PU0sbj1yLndfc2l6ZSksRT1lLmF2YWlsX2luLEY9ZS5uZXh0X2luLE49ZS5pbnB1dCxlLmF2YWlsX2luPW4sZS5uZXh0X2luPTAsZS5pbnB1dD10LExhKHIpO3IubG9va2FoZWFkPj1Fbjspe3M9ci5zdHJzdGFydCx1PXIubG9va2FoZWFkLShFbi0xKTtkbyByLmluc19oPShyLmluc19oPDxyLmhhc2hfc2hpZnReci53aW5kb3dbcytFbi0xXSkmci5oYXNoX21hc2ssci5wcmV2W3Mmci53X21hc2tdPXIuaGVhZFtyLmluc19oXSxyLmhlYWRbci5pbnNfaF09cyxzKys7d2hpbGUoLS11KTtyLnN0cnN0YXJ0PXMsci5sb29rYWhlYWQ9RW4tMSxMYShyKX1yZXR1cm4gci5zdHJzdGFydCs9ci5sb29rYWhlYWQsci5ibG9ja19zdGFydD1yLnN0cnN0YXJ0LHIuaW5zZXJ0PXIubG9va2FoZWFkLHIubG9va2FoZWFkPTAsci5tYXRjaF9sZW5ndGg9ci5wcmV2X2xlbmd0aD1Fbi0xLHIubWF0Y2hfYXZhaWxhYmxlPTAsZS5uZXh0X2luPUYsZS5pbnB1dD1OLGUuYXZhaWxfaW49RSxyLndyYXA9dixFaX1hci5kZWZsYXRlSW5pdD1rcyxhci5kZWZsYXRlSW5pdDI9eWEsYXIuZGVmbGF0ZVJlc2V0PWVjLGFyLmRlZmxhdGVSZXNldEtlZXA9cnUsYXIuZGVmbGF0ZVNldEhlYWRlcj1EdSxhci5kZWZsYXRlPWl1LGFyLmRlZmxhdGVFbmQ9RnUsYXIuZGVmbGF0ZVNldERpY3Rpb25hcnk9b3UsYXIuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBFYT17fSxPbD1xbixBYz0hMCxPYz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2goZSl7QWM9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2goZSl7T2M9ITF9Zm9yKHZhciBpbD1uZXcgT2wuQnVmOCgyNTYpLERhPTA7RGE8MjU2O0RhKyspaWxbRGFdPURhPj0yNTI/NjpEYT49MjQ4PzU6RGE+PTI0MD80OkRhPj0yMjQ/MzpEYT49MTkyPzI6MTtpbFsyNTRdPWlsWzI1NF09MSxFYS5zdHJpbmcyYnVmPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixzLHUsdj1lLmxlbmd0aCxFPTA7Zm9yKHM9MDtzPHY7cysrKW49ZS5jaGFyQ29kZUF0KHMpLChuJjY0NTEyKT09PTU1Mjk2JiZzKzE8diYmKHI9ZS5jaGFyQ29kZUF0KHMrMSksKHImNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApLHMrKykpLEUrPW48MTI4PzE6bjwyMDQ4PzI6bjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IE9sLkJ1ZjgoRSksdT0wLHM9MDt1PEU7cysrKW49ZS5jaGFyQ29kZUF0KHMpLChuJjY0NTEyKT09PTU1Mjk2JiZzKzE8diYmKHI9ZS5jaGFyQ29kZUF0KHMrMSksKHImNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApLHMrKykpLG48MTI4P3RbdSsrXT1uOm48MjA0OD8odFt1KytdPTE5MnxuPj4+Nix0W3UrK109MTI4fG4mNjMpOm48NjU1MzY/KHRbdSsrXT0yMjR8bj4+PjEyLHRbdSsrXT0xMjh8bj4+PjYmNjMsdFt1KytdPTEyOHxuJjYzKToodFt1KytdPTI0MHxuPj4+MTgsdFt1KytdPTEyOHxuPj4+MTImNjMsdFt1KytdPTEyOHxuPj4+NiY2Myx0W3UrK109MTI4fG4mNjMpO3JldHVybiB0fTtmdW5jdGlvbiB0YyhlLHQpe2lmKHQ8NjU1MzQmJihlLnN1YmFycmF5JiZPY3x8IWUuc3ViYXJyYXkmJkFjKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLE9sLnNocmlua0J1ZihlLHQpKTtmb3IodmFyIG49IiIscj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbn1FYS5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB0YyhlLGUubGVuZ3RoKX0sRWEuYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IE9sLkJ1ZjgoZS5sZW5ndGgpLG49MCxyPXQubGVuZ3RoO248cjtuKyspdFtuXT1lLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9LEVhLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLHMsdSx2PXR8fGUubGVuZ3RoLEU9bmV3IEFycmF5KHYqMik7Zm9yKHI9MCxuPTA7bjx2Oyl7aWYocz1lW24rK10sczwxMjgpe0VbcisrXT1zO2NvbnRpbnVlfWlmKHU9aWxbc10sdT40KXtFW3IrK109NjU1MzMsbis9dS0xO2NvbnRpbnVlfWZvcihzJj11PT09Mj8zMTp1PT09Mz8xNTo3O3U+MSYmbjx2OylzPXM8PDZ8ZVtuKytdJjYzLHUtLTtpZih1PjEpe0VbcisrXT02NTUzMztjb250aW51ZX1zPDY1NTM2P0VbcisrXT1zOihzLT02NTUzNixFW3IrK109NTUyOTZ8cz4+MTAmMTAyMyxFW3IrK109NTYzMjB8cyYxMDIzKX1yZXR1cm4gdGMoRSxyKX0sRWEudXRmOGJvcmRlcj1mdW5jdGlvbihlLHQpe3ZhciBuO2Zvcih0PXR8fGUubGVuZ3RoLHQ+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxuPXQtMTtuPj0wJiYoZVtuXSYxOTIpPT09MTI4OyluLS07cmV0dXJuIG48MHx8bj09PTA/dDpuK2lsW2Vbbl1dPnQ/bjp0fTtmdW5jdGlvbiBhdSgpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9dmFyIHN1PWF1LFRsPWFyLG89cW4sbD1FYSxwPVFzLGI9c3UsUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFQ9MCx4PTQsej0wLEg9MSxYPTIseWU9LTEsdWU9MCxhZT04O2Z1bmN0aW9uIGtlKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGtlKSlyZXR1cm4gbmV3IGtlKGUpO3RoaXMub3B0aW9ucz1vLmFzc2lnbih7bGV2ZWw6eWUsbWV0aG9kOmFlLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6dWUsdG86IiJ9LGV8fHt9KTt2YXIgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz4wP3Qud2luZG93Qml0cz0tdC53aW5kb3dCaXRzOnQuZ3ppcCYmdC53aW5kb3dCaXRzPjAmJnQud2luZG93Qml0czwxNiYmKHQud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGIsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBuPVRsLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sdC5sZXZlbCx0Lm1ldGhvZCx0LndpbmRvd0JpdHMsdC5tZW1MZXZlbCx0LnN0cmF0ZWd5KTtpZihuIT09eil0aHJvdyBuZXcgRXJyb3IocFtuXSk7aWYodC5oZWFkZXImJlRsLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLHQuaGVhZGVyKSx0LmRpY3Rpb25hcnkpe3ZhciByO2lmKHR5cGVvZiB0LmRpY3Rpb25hcnk9PSJzdHJpbmciP3I9bC5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6UC5jYWxsKHQuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP3I9bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTpyPXQuZGljdGlvbmFyeSxuPVRsLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxyKSxuIT09eil0aHJvdyBuZXcgRXJyb3IocFtuXSk7dGhpcy5fZGljdF9zZXQ9ITB9fWtlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zdHJtLHI9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxzLHU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTt1PXQ9PT1+fnQ/dDp0PT09ITA/eDpULHR5cGVvZiBlPT0ic3RyaW5nIj9uLmlucHV0PWwuc3RyaW5nMmJ1ZihlKTpQLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP24uaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6bi5pbnB1dD1lLG4ubmV4dF9pbj0wLG4uYXZhaWxfaW49bi5pbnB1dC5sZW5ndGg7ZG97aWYobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IG8uQnVmOChyKSxuLm5leHRfb3V0PTAsbi5hdmFpbF9vdXQ9cikscz1UbC5kZWZsYXRlKG4sdSkscyE9PUgmJnMhPT16KXJldHVybiB0aGlzLm9uRW5kKHMpLHRoaXMuZW5kZWQ9ITAsITE7KG4uYXZhaWxfb3V0PT09MHx8bi5hdmFpbF9pbj09PTAmJih1PT09eHx8dT09PVgpKSYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMub25EYXRhKGwuYnVmMmJpbnN0cmluZyhvLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKG8uc2hyaW5rQnVmKG4ub3V0cHV0LG4ubmV4dF9vdXQpKSl9d2hpbGUoKG4uYXZhaWxfaW4+MHx8bi5hdmFpbF9vdXQ9PT0wKSYmcyE9PUgpO3JldHVybiB1PT09eD8ocz1UbC5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChzKSx0aGlzLmVuZGVkPSEwLHM9PT16KToodT09PVgmJih0aGlzLm9uRW5kKHopLG4uYXZhaWxfb3V0PTApLCEwKX0sa2UucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxrZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PXomJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKCIiKTp0aGlzLnJlc3VsdD1vLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O2Z1bmN0aW9uIE1lKGUsdCl7dmFyIG49bmV3IGtlKHQpO2lmKG4ucHVzaChlLCEwKSxuLmVycil0aHJvdyBuLm1zZ3x8cFtuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIHd0KGUsdCl7cmV0dXJuIHQ9dHx8e30sdC5yYXc9ITAsTWUoZSx0KX1mdW5jdGlvbiB1dChlLHQpe3JldHVybiB0PXR8fHt9LHQuZ3ppcD0hMCxNZShlLHQpfUlyLkRlZmxhdGU9a2UsSXIuZGVmbGF0ZT1NZSxJci5kZWZsYXRlUmF3PXd0LElyLmd6aXA9dXQ7dmFyIGt0PXt9LFJ0PXt9LGZlPTMwLEllPTEyLE5lPWZ1bmN0aW9uKHQsbil7dmFyIHIscyx1LHYsRSxGLE4sTSxtZSxBZSx4ZSxidCxBdCxadCx6dCxDbix5bixMdCxmdCxYdCxXdCxLdCxxdCxjcixRdDtyPXQuc3RhdGUscz10Lm5leHRfaW4sY3I9dC5pbnB1dCx1PXMrKHQuYXZhaWxfaW4tNSksdj10Lm5leHRfb3V0LFF0PXQub3V0cHV0LEU9di0obi10LmF2YWlsX291dCksRj12Kyh0LmF2YWlsX291dC0yNTcpLE49ci5kbWF4LE09ci53c2l6ZSxtZT1yLndoYXZlLEFlPXIud25leHQseGU9ci53aW5kb3csYnQ9ci5ob2xkLEF0PXIuYml0cyxadD1yLmxlbmNvZGUsenQ9ci5kaXN0Y29kZSxDbj0oMTw8ci5sZW5iaXRzKS0xLHluPSgxPDxyLmRpc3RiaXRzKS0xO2U6ZG97QXQ8MTUmJihidCs9Y3JbcysrXTw8QXQsQXQrPTgsYnQrPWNyW3MrK108PEF0LEF0Kz04KSxMdD1adFtidCZDbl07dDpmb3IoOzspe2lmKGZ0PUx0Pj4+MjQsYnQ+Pj49ZnQsQXQtPWZ0LGZ0PUx0Pj4+MTYmMjU1LGZ0PT09MClRdFt2KytdPUx0JjY1NTM1O2Vsc2UgaWYoZnQmMTYpe1h0PUx0JjY1NTM1LGZ0Jj0xNSxmdCYmKEF0PGZ0JiYoYnQrPWNyW3MrK108PEF0LEF0Kz04KSxYdCs9YnQmKDE8PGZ0KS0xLGJ0Pj4+PWZ0LEF0LT1mdCksQXQ8MTUmJihidCs9Y3JbcysrXTw8QXQsQXQrPTgsYnQrPWNyW3MrK108PEF0LEF0Kz04KSxMdD16dFtidCZ5bl07bjpmb3IoOzspe2lmKGZ0PUx0Pj4+MjQsYnQ+Pj49ZnQsQXQtPWZ0LGZ0PUx0Pj4+MTYmMjU1LGZ0JjE2KXtpZihXdD1MdCY2NTUzNSxmdCY9MTUsQXQ8ZnQmJihidCs9Y3JbcysrXTw8QXQsQXQrPTgsQXQ8ZnQmJihidCs9Y3JbcysrXTw8QXQsQXQrPTgpKSxXdCs9YnQmKDE8PGZ0KS0xLFd0Pk4pe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsci5tb2RlPWZlO2JyZWFrIGV9aWYoYnQ+Pj49ZnQsQXQtPWZ0LGZ0PXYtRSxXdD5mdCl7aWYoZnQ9V3QtZnQsZnQ+bWUmJnIuc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixyLm1vZGU9ZmU7YnJlYWsgZX1pZihLdD0wLHF0PXhlLEFlPT09MCl7aWYoS3QrPU0tZnQsZnQ8WHQpe1h0LT1mdDtkbyBRdFt2KytdPXhlW0t0KytdO3doaWxlKC0tZnQpO0t0PXYtV3QscXQ9UXR9fWVsc2UgaWYoQWU8ZnQpe2lmKEt0Kz1NK0FlLWZ0LGZ0LT1BZSxmdDxYdCl7WHQtPWZ0O2RvIFF0W3YrK109eGVbS3QrK107d2hpbGUoLS1mdCk7aWYoS3Q9MCxBZTxYdCl7ZnQ9QWUsWHQtPWZ0O2RvIFF0W3YrK109eGVbS3QrK107d2hpbGUoLS1mdCk7S3Q9di1XdCxxdD1RdH19fWVsc2UgaWYoS3QrPUFlLWZ0LGZ0PFh0KXtYdC09ZnQ7ZG8gUXRbdisrXT14ZVtLdCsrXTt3aGlsZSgtLWZ0KTtLdD12LVd0LHF0PVF0fWZvcig7WHQ+MjspUXRbdisrXT1xdFtLdCsrXSxRdFt2KytdPXF0W0t0KytdLFF0W3YrK109cXRbS3QrK10sWHQtPTM7WHQmJihRdFt2KytdPXF0W0t0KytdLFh0PjEmJihRdFt2KytdPXF0W0t0KytdKSl9ZWxzZXtLdD12LVd0O2RvIFF0W3YrK109UXRbS3QrK10sUXRbdisrXT1RdFtLdCsrXSxRdFt2KytdPVF0W0t0KytdLFh0LT0zO3doaWxlKFh0PjIpO1h0JiYoUXRbdisrXT1RdFtLdCsrXSxYdD4xJiYoUXRbdisrXT1RdFtLdCsrXSkpfX1lbHNlIGlmKChmdCY2NCk9PT0wKXtMdD16dFsoTHQmNjU1MzUpKyhidCYoMTw8ZnQpLTEpXTtjb250aW51ZSBufWVsc2V7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsci5tb2RlPWZlO2JyZWFrIGV9YnJlYWt9fWVsc2UgaWYoKGZ0JjY0KT09PTApe0x0PVp0WyhMdCY2NTUzNSkrKGJ0JigxPDxmdCktMSldO2NvbnRpbnVlIHR9ZWxzZSBpZihmdCYzMil7ci5tb2RlPUllO2JyZWFrIGV9ZWxzZXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixyLm1vZGU9ZmU7YnJlYWsgZX1icmVha319d2hpbGUoczx1JiZ2PEYpO1h0PUF0Pj4zLHMtPVh0LEF0LT1YdDw8MyxidCY9KDE8PEF0KS0xLHQubmV4dF9pbj1zLHQubmV4dF9vdXQ9dix0LmF2YWlsX2luPXM8dT81Kyh1LXMpOjUtKHMtdSksdC5hdmFpbF9vdXQ9djxGPzI1NysoRi12KToyNTctKHYtRiksci5ob2xkPWJ0LHIuYml0cz1BdH0sWGU9cW4sY3Q9MTUsaT04NTIsYT01OTIsZj0wLGg9MSxDPTIsUz1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGs9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxVPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxCPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF0sSz1mdW5jdGlvbih0LG4scixzLHUsdixFLEYpe3ZhciBOPUYuYml0cyxNPTAsbWU9MCxBZT0wLHhlPTAsYnQ9MCxBdD0wLFp0PTAsenQ9MCxDbj0wLHluPTAsTHQsZnQsWHQsV3QsS3QscXQ9bnVsbCxjcj0wLFF0LElvPW5ldyBYZS5CdWYxNihjdCsxKSxTdT1uZXcgWGUuQnVmMTYoY3QrMSksamY9bnVsbCxQdj0wLE52LHpmLFdmO2ZvcihNPTA7TTw9Y3Q7TSsrKUlvW01dPTA7Zm9yKG1lPTA7bWU8czttZSsrKUlvW25bcittZV1dKys7Zm9yKGJ0PU4seGU9Y3Q7eGU+PTEmJklvW3hlXT09PTA7eGUtLSk7aWYoYnQ+eGUmJihidD14ZSkseGU9PT0wKXJldHVybiB1W3YrK109MTw8MjR8NjQ8PDE2fDAsdVt2KytdPTE8PDI0fDY0PDwxNnwwLEYuYml0cz0xLDA7Zm9yKEFlPTE7QWU8eGUmJklvW0FlXT09PTA7QWUrKyk7Zm9yKGJ0PEFlJiYoYnQ9QWUpLHp0PTEsTT0xO008PWN0O00rKylpZih6dDw8PTEsenQtPUlvW01dLHp0PDApcmV0dXJuLTE7aWYoenQ+MCYmKHQ9PT1mfHx4ZSE9PTEpKXJldHVybi0xO2ZvcihTdVsxXT0wLE09MTtNPGN0O00rKylTdVtNKzFdPVN1W01dK0lvW01dO2ZvcihtZT0wO21lPHM7bWUrKyluW3IrbWVdIT09MCYmKEVbU3VbbltyK21lXV0rK109bWUpO2lmKHQ9PT1mPyhxdD1qZj1FLFF0PTE5KTp0PT09aD8ocXQ9Uyxjci09MjU3LGpmPWssUHYtPTI1NyxRdD0yNTYpOihxdD1VLGpmPUIsUXQ9LTEpLHluPTAsbWU9MCxNPUFlLEt0PXYsQXQ9YnQsWnQ9MCxYdD0tMSxDbj0xPDxidCxXdD1Dbi0xLHQ9PT1oJiZDbj5pfHx0PT09QyYmQ24+YSlyZXR1cm4gMTtmb3IoOzspe052PU0tWnQsRVttZV08UXQ/KHpmPTAsV2Y9RVttZV0pOkVbbWVdPlF0Pyh6Zj1qZltQditFW21lXV0sV2Y9cXRbY3IrRVttZV1dKTooemY9MzIrNjQsV2Y9MCksTHQ9MTw8TS1adCxmdD0xPDxBdCxBZT1mdDtkbyBmdC09THQsdVtLdCsoeW4+Plp0KStmdF09TnY8PDI0fHpmPDwxNnxXZnwwO3doaWxlKGZ0IT09MCk7Zm9yKEx0PTE8PE0tMTt5biZMdDspTHQ+Pj0xO2lmKEx0IT09MD8oeW4mPUx0LTEseW4rPUx0KTp5bj0wLG1lKyssLS1Jb1tNXT09PTApe2lmKE09PT14ZSlicmVhaztNPW5bcitFW21lXV19aWYoTT5idCYmKHluJld0KSE9PVh0KXtmb3IoWnQ9PT0wJiYoWnQ9YnQpLEt0Kz1BZSxBdD1NLVp0LHp0PTE8PEF0O0F0K1p0PHhlJiYoenQtPUlvW0F0K1p0XSwhKHp0PD0wKSk7KUF0KyssenQ8PD0xO2lmKENuKz0xPDxBdCx0PT09aCYmQ24+aXx8dD09PUMmJkNuPmEpcmV0dXJuIDE7WHQ9eW4mV3QsdVtYdF09YnQ8PDI0fEF0PDwxNnxLdC12fDB9fXJldHVybiB5biE9PTAmJih1W0t0K3luXT1NLVp0PDwyNHw2NDw8MTZ8MCksRi5iaXRzPWJ0LDB9LFE9cW4sZWU9bWMsWT1Qcyx2ZT1OZSxUZT1LLGh0PTAscWU9MSxOdD0yLHh0PTQsb2U9NSxoZT02LF9lPTAsJGU9MSxzdD0yLHR0PS0yLHl0PS0zLFllPS00LEw9LTUsRz04LHRlPTEsYmU9MixTZT0zLENlPTQsbnQ9NSxXZT02LFFlPTcsVmU9OCxDdD05LGp0PTEwLFV0PTExLEJ0PTEyLGxyPTEzLCRuPTE0LHVuPTE1LHduPTE2LGVpPTE3LGxvPTE4LFluPTE5LFNpPTIwLE5vPTIxLHdpPTIyLGo9MjMscmU9MjQsUGU9MjUsRGU9MjYsamU9MjcscnQ9MjgsZ3Q9MjksTGU9MzAsaXQ9MzEsSmU9MzIsTXQ9ODUyLEp0PTU5MixZdD0xNSxJbj1ZdDtmdW5jdGlvbiB0aShlKXtyZXR1cm4oZT4+PjI0JjI1NSkrKGU+Pj44JjY1MjgwKSsoKGUmNjUyODApPDw4KSsoKGUmMjU1KTw8MjQpfWZ1bmN0aW9uIF9yKCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBRLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBRLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIFdpKGUpe3ZhciB0O3JldHVybiFlfHwhZS5zdGF0ZT90dDoodD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPSIiLHQud3JhcCYmKGUuYWRsZXI9dC53cmFwJjEpLHQubW9kZT10ZSx0Lmxhc3Q9MCx0LmhhdmVkaWN0PTAsdC5kbWF4PTMyNzY4LHQuaGVhZD1udWxsLHQuaG9sZD0wLHQuYml0cz0wLHQubGVuY29kZT10LmxlbmR5bj1uZXcgUS5CdWYzMihNdCksdC5kaXN0Y29kZT10LmRpc3RkeW49bmV3IFEuQnVmMzIoSnQpLHQuc2FuZT0xLHQuYmFjaz0tMSxfZSl9ZnVuY3Rpb24gUnMoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP3R0Oih0PWUuc3RhdGUsdC53c2l6ZT0wLHQud2hhdmU9MCx0LnduZXh0PTAsV2koZSkpfWZ1bmN0aW9uIG9sKGUsdCl7dmFyIG4scjtyZXR1cm4hZXx8IWUuc3RhdGV8fChyPWUuc3RhdGUsdDwwPyhuPTAsdD0tdCk6KG49KHQ+PjQpKzEsdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8dD4xNSkpP3R0OihyLndpbmRvdyE9PW51bGwmJnIud2JpdHMhPT10JiYoci53aW5kb3c9bnVsbCksci53cmFwPW4sci53Yml0cz10LFJzKGUpKX1mdW5jdGlvbiBsdShlLHQpe3ZhciBuLHI7cmV0dXJuIGU/KHI9bmV3IF9yLGUuc3RhdGU9cixyLndpbmRvdz1udWxsLG49b2woZSx0KSxuIT09X2UmJihlLnN0YXRlPW51bGwpLG4pOnR0fWZ1bmN0aW9uIHhyKGUpe3JldHVybiBsdShlLEluKX12YXIgUGw9ITAseHMsY287ZnVuY3Rpb24gYWwoZSl7aWYoUGwpe3ZhciB0O2Zvcih4cz1uZXcgUS5CdWYzMig1MTIpLGNvPW5ldyBRLkJ1ZjMyKDMyKSx0PTA7dDwxNDQ7KWUubGVuc1t0KytdPTg7Zm9yKDt0PDI1NjspZS5sZW5zW3QrK109OTtmb3IoO3Q8MjgwOyllLmxlbnNbdCsrXT03O2Zvcig7dDwyODg7KWUubGVuc1t0KytdPTg7Zm9yKFRlKHFlLGUubGVucywwLDI4OCx4cywwLGUud29yayx7Yml0czo5fSksdD0wO3Q8MzI7KWUubGVuc1t0KytdPTU7VGUoTnQsZS5sZW5zLDAsMzIsY28sMCxlLndvcmsse2JpdHM6NX0pLFBsPSExfWUubGVuY29kZT14cyxlLmxlbmJpdHM9OSxlLmRpc3Rjb2RlPWNvLGUuZGlzdGJpdHM9NX1mdW5jdGlvbiBzbChlLHQsbixyKXt2YXIgcyx1PWUuc3RhdGU7cmV0dXJuIHUud2luZG93PT09bnVsbCYmKHUud3NpemU9MTw8dS53Yml0cyx1LnduZXh0PTAsdS53aGF2ZT0wLHUud2luZG93PW5ldyBRLkJ1ZjgodS53c2l6ZSkpLHI+PXUud3NpemU/KFEuYXJyYXlTZXQodS53aW5kb3csdCxuLXUud3NpemUsdS53c2l6ZSwwKSx1LnduZXh0PTAsdS53aGF2ZT11LndzaXplKToocz11LndzaXplLXUud25leHQscz5yJiYocz1yKSxRLmFycmF5U2V0KHUud2luZG93LHQsbi1yLHMsdS53bmV4dCksci09cyxyPyhRLmFycmF5U2V0KHUud2luZG93LHQsbi1yLHIsMCksdS53bmV4dD1yLHUud2hhdmU9dS53c2l6ZSk6KHUud25leHQrPXMsdS53bmV4dD09PXUud3NpemUmJih1LnduZXh0PTApLHUud2hhdmU8dS53c2l6ZSYmKHUud2hhdmUrPXMpKSksMH1mdW5jdGlvbiBUYyhlLHQpe3ZhciBuLHIscyx1LHYsRSxGLE4sTSxtZSxBZSx4ZSxidCxBdCxadD0wLHp0LENuLHluLEx0LGZ0LFh0LFd0LEt0LHF0PW5ldyBRLkJ1ZjgoNCksY3IsUXQsSW89WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFlfHwhZS5zdGF0ZXx8IWUub3V0cHV0fHwhZS5pbnB1dCYmZS5hdmFpbF9pbiE9PTApcmV0dXJuIHR0O249ZS5zdGF0ZSxuLm1vZGU9PT1CdCYmKG4ubW9kZT1sciksdj1lLm5leHRfb3V0LHM9ZS5vdXRwdXQsRj1lLmF2YWlsX291dCx1PWUubmV4dF9pbixyPWUuaW5wdXQsRT1lLmF2YWlsX2luLE49bi5ob2xkLE09bi5iaXRzLG1lPUUsQWU9RixLdD1fZTtlOmZvcig7Oylzd2l0Y2gobi5tb2RlKXtjYXNlIHRlOmlmKG4ud3JhcD09PTApe24ubW9kZT1scjticmVha31mb3IoO008MTY7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1pZihuLndyYXAmMiYmTj09PTM1NjE1KXtuLmNoZWNrPTAscXRbMF09TiYyNTUscXRbMV09Tj4+PjgmMjU1LG4uY2hlY2s9WShuLmNoZWNrLHF0LDIsMCksTj0wLE09MCxuLm1vZGU9YmU7YnJlYWt9aWYobi5mbGFncz0wLG4uaGVhZCYmKG4uaGVhZC5kb25lPSExKSwhKG4ud3JhcCYxKXx8KCgoTiYyNTUpPDw4KSsoTj4+OCkpJTMxKXtlLm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsbi5tb2RlPUxlO2JyZWFrfWlmKChOJjE1KSE9PUcpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPUxlO2JyZWFrfWlmKE4+Pj49NCxNLT00LFd0PShOJjE1KSs4LG4ud2JpdHM9PT0wKW4ud2JpdHM9V3Q7ZWxzZSBpZihXdD5uLndiaXRzKXtlLm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsbi5tb2RlPUxlO2JyZWFrfW4uZG1heD0xPDxXdCxlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9TiY1MTI/anQ6QnQsTj0wLE09MDticmVhaztjYXNlIGJlOmZvcig7TTwxNjspe2lmKEU9PT0wKWJyZWFrIGU7RS0tLE4rPXJbdSsrXTw8TSxNKz04fWlmKG4uZmxhZ3M9Tiwobi5mbGFncyYyNTUpIT09Ryl7ZS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9TGU7YnJlYWt9aWYobi5mbGFncyY1NzM0NCl7ZS5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsbi5tb2RlPUxlO2JyZWFrfW4uaGVhZCYmKG4uaGVhZC50ZXh0PU4+PjgmMSksbi5mbGFncyY1MTImJihxdFswXT1OJjI1NSxxdFsxXT1OPj4+OCYyNTUsbi5jaGVjaz1ZKG4uY2hlY2sscXQsMiwwKSksTj0wLE09MCxuLm1vZGU9U2U7Y2FzZSBTZTpmb3IoO008MzI7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1uLmhlYWQmJihuLmhlYWQudGltZT1OKSxuLmZsYWdzJjUxMiYmKHF0WzBdPU4mMjU1LHF0WzFdPU4+Pj44JjI1NSxxdFsyXT1OPj4+MTYmMjU1LHF0WzNdPU4+Pj4yNCYyNTUsbi5jaGVjaz1ZKG4uY2hlY2sscXQsNCwwKSksTj0wLE09MCxuLm1vZGU9Q2U7Y2FzZSBDZTpmb3IoO008MTY7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPU4mMjU1LG4uaGVhZC5vcz1OPj44KSxuLmZsYWdzJjUxMiYmKHF0WzBdPU4mMjU1LHF0WzFdPU4+Pj44JjI1NSxuLmNoZWNrPVkobi5jaGVjayxxdCwyLDApKSxOPTAsTT0wLG4ubW9kZT1udDtjYXNlIG50OmlmKG4uZmxhZ3MmMTAyNCl7Zm9yKDtNPDE2Oyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9bi5sZW5ndGg9TixuLmhlYWQmJihuLmhlYWQuZXh0cmFfbGVuPU4pLG4uZmxhZ3MmNTEyJiYocXRbMF09TiYyNTUscXRbMV09Tj4+PjgmMjU1LG4uY2hlY2s9WShuLmNoZWNrLHF0LDIsMCkpLE49MCxNPTB9ZWxzZSBuLmhlYWQmJihuLmhlYWQuZXh0cmE9bnVsbCk7bi5tb2RlPVdlO2Nhc2UgV2U6aWYobi5mbGFncyYxMDI0JiYoeGU9bi5sZW5ndGgseGU+RSYmKHhlPUUpLHhlJiYobi5oZWFkJiYoV3Q9bi5oZWFkLmV4dHJhX2xlbi1uLmxlbmd0aCxuLmhlYWQuZXh0cmF8fChuLmhlYWQuZXh0cmE9bmV3IEFycmF5KG4uaGVhZC5leHRyYV9sZW4pKSxRLmFycmF5U2V0KG4uaGVhZC5leHRyYSxyLHUseGUsV3QpKSxuLmZsYWdzJjUxMiYmKG4uY2hlY2s9WShuLmNoZWNrLHIseGUsdSkpLEUtPXhlLHUrPXhlLG4ubGVuZ3RoLT14ZSksbi5sZW5ndGgpKWJyZWFrIGU7bi5sZW5ndGg9MCxuLm1vZGU9UWU7Y2FzZSBRZTppZihuLmZsYWdzJjIwNDgpe2lmKEU9PT0wKWJyZWFrIGU7eGU9MDtkbyBXdD1yW3UreGUrK10sbi5oZWFkJiZXdCYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShXdCkpO3doaWxlKFd0JiZ4ZTxFKTtpZihuLmZsYWdzJjUxMiYmKG4uY2hlY2s9WShuLmNoZWNrLHIseGUsdSkpLEUtPXhlLHUrPXhlLFd0KWJyZWFrIGV9ZWxzZSBuLmhlYWQmJihuLmhlYWQubmFtZT1udWxsKTtuLmxlbmd0aD0wLG4ubW9kZT1WZTtjYXNlIFZlOmlmKG4uZmxhZ3MmNDA5Nil7aWYoRT09PTApYnJlYWsgZTt4ZT0wO2RvIFd0PXJbdSt4ZSsrXSxuLmhlYWQmJld0JiZuLmxlbmd0aDw2NTUzNiYmKG4uaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFd0KSk7d2hpbGUoV3QmJnhlPEUpO2lmKG4uZmxhZ3MmNTEyJiYobi5jaGVjaz1ZKG4uY2hlY2sscix4ZSx1KSksRS09eGUsdSs9eGUsV3QpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT1DdDtjYXNlIEN0OmlmKG4uZmxhZ3MmNTEyKXtmb3IoO008MTY7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1pZihOIT09KG4uY2hlY2smNjU1MzUpKXtlLm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsbi5tb2RlPUxlO2JyZWFrfU49MCxNPTB9bi5oZWFkJiYobi5oZWFkLmhjcmM9bi5mbGFncz4+OSYxLG4uaGVhZC5kb25lPSEwKSxlLmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9QnQ7YnJlYWs7Y2FzZSBqdDpmb3IoO008MzI7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1lLmFkbGVyPW4uY2hlY2s9dGkoTiksTj0wLE09MCxuLm1vZGU9VXQ7Y2FzZSBVdDppZihuLmhhdmVkaWN0PT09MClyZXR1cm4gZS5uZXh0X291dD12LGUuYXZhaWxfb3V0PUYsZS5uZXh0X2luPXUsZS5hdmFpbF9pbj1FLG4uaG9sZD1OLG4uYml0cz1NLHN0O2UuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1CdDtjYXNlIEJ0OmlmKHQ9PT1vZXx8dD09PWhlKWJyZWFrIGU7Y2FzZSBscjppZihuLmxhc3Qpe04+Pj49TSY3LE0tPU0mNyxuLm1vZGU9amU7YnJlYWt9Zm9yKDtNPDM7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1zd2l0Y2gobi5sYXN0PU4mMSxOPj4+PTEsTS09MSxOJjMpe2Nhc2UgMDpuLm1vZGU9JG47YnJlYWs7Y2FzZSAxOmlmKGFsKG4pLG4ubW9kZT1TaSx0PT09aGUpe04+Pj49MixNLT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOm4ubW9kZT1laTticmVhaztjYXNlIDM6ZS5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsbi5tb2RlPUxlfU4+Pj49MixNLT0yO2JyZWFrO2Nhc2UgJG46Zm9yKE4+Pj49TSY3LE0tPU0mNztNPDMyOyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9aWYoKE4mNjU1MzUpIT09KE4+Pj4xNl42NTUzNSkpe2UubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixuLm1vZGU9TGU7YnJlYWt9aWYobi5sZW5ndGg9TiY2NTUzNSxOPTAsTT0wLG4ubW9kZT11bix0PT09aGUpYnJlYWsgZTtjYXNlIHVuOm4ubW9kZT13bjtjYXNlIHduOmlmKHhlPW4ubGVuZ3RoLHhlKXtpZih4ZT5FJiYoeGU9RSkseGU+RiYmKHhlPUYpLHhlPT09MClicmVhayBlO1EuYXJyYXlTZXQocyxyLHUseGUsdiksRS09eGUsdSs9eGUsRi09eGUsdis9eGUsbi5sZW5ndGgtPXhlO2JyZWFrfW4ubW9kZT1CdDticmVhaztjYXNlIGVpOmZvcig7TTwxNDspe2lmKEU9PT0wKWJyZWFrIGU7RS0tLE4rPXJbdSsrXTw8TSxNKz04fWlmKG4ubmxlbj0oTiYzMSkrMjU3LE4+Pj49NSxNLT01LG4ubmRpc3Q9KE4mMzEpKzEsTj4+Pj01LE0tPTUsbi5uY29kZT0oTiYxNSkrNCxOPj4+PTQsTS09NCxuLm5sZW4+Mjg2fHxuLm5kaXN0PjMwKXtlLm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLG4ubW9kZT1MZTticmVha31uLmhhdmU9MCxuLm1vZGU9bG87Y2FzZSBsbzpmb3IoO24uaGF2ZTxuLm5jb2RlOyl7Zm9yKDtNPDM7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1uLmxlbnNbSW9bbi5oYXZlKytdXT1OJjcsTj4+Pj0zLE0tPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tJb1tuLmhhdmUrK11dPTA7aWYobi5sZW5jb2RlPW4ubGVuZHluLG4ubGVuYml0cz03LGNyPXtiaXRzOm4ubGVuYml0c30sS3Q9VGUoaHQsbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLGNyKSxuLmxlbmJpdHM9Y3IuYml0cyxLdCl7ZS5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsbi5tb2RlPUxlO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1ZbjtjYXNlIFluOmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtadD1uLmxlbmNvZGVbTiYoMTw8bi5sZW5iaXRzKS0xXSx6dD1adD4+PjI0LENuPVp0Pj4+MTYmMjU1LHluPVp0JjY1NTM1LCEoenQ8PU0pOyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9aWYoeW48MTYpTj4+Pj16dCxNLT16dCxuLmxlbnNbbi5oYXZlKytdPXluO2Vsc2V7aWYoeW49PT0xNil7Zm9yKFF0PXp0KzI7TTxRdDspe2lmKEU9PT0wKWJyZWFrIGU7RS0tLE4rPXJbdSsrXTw8TSxNKz04fWlmKE4+Pj49enQsTS09enQsbi5oYXZlPT09MCl7ZS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1MZTticmVha31XdD1uLmxlbnNbbi5oYXZlLTFdLHhlPTMrKE4mMyksTj4+Pj0yLE0tPTJ9ZWxzZSBpZih5bj09PTE3KXtmb3IoUXQ9enQrMztNPFF0Oyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9Tj4+Pj16dCxNLT16dCxXdD0wLHhlPTMrKE4mNyksTj4+Pj0zLE0tPTN9ZWxzZXtmb3IoUXQ9enQrNztNPFF0Oyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9Tj4+Pj16dCxNLT16dCxXdD0wLHhlPTExKyhOJjEyNyksTj4+Pj03LE0tPTd9aWYobi5oYXZlK3hlPm4ubmxlbituLm5kaXN0KXtlLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPUxlO2JyZWFrfWZvcig7eGUtLTspbi5sZW5zW24uaGF2ZSsrXT1XdH19aWYobi5tb2RlPT09TGUpYnJlYWs7aWYobi5sZW5zWzI1Nl09PT0wKXtlLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixuLm1vZGU9TGU7YnJlYWt9aWYobi5sZW5iaXRzPTksY3I9e2JpdHM6bi5sZW5iaXRzfSxLdD1UZShxZSxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLGNyKSxuLmxlbmJpdHM9Y3IuYml0cyxLdCl7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPUxlO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixjcj17Yml0czpuLmRpc3RiaXRzfSxLdD1UZShOdCxuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxjciksbi5kaXN0Yml0cz1jci5iaXRzLEt0KXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9TGU7YnJlYWt9aWYobi5tb2RlPVNpLHQ9PT1oZSlicmVhayBlO2Nhc2UgU2k6bi5tb2RlPU5vO2Nhc2UgTm86aWYoRT49NiYmRj49MjU4KXtlLm5leHRfb3V0PXYsZS5hdmFpbF9vdXQ9RixlLm5leHRfaW49dSxlLmF2YWlsX2luPUUsbi5ob2xkPU4sbi5iaXRzPU0sdmUoZSxBZSksdj1lLm5leHRfb3V0LHM9ZS5vdXRwdXQsRj1lLmF2YWlsX291dCx1PWUubmV4dF9pbixyPWUuaW5wdXQsRT1lLmF2YWlsX2luLE49bi5ob2xkLE09bi5iaXRzLG4ubW9kZT09PUJ0JiYobi5iYWNrPS0xKTticmVha31mb3Iobi5iYWNrPTA7WnQ9bi5sZW5jb2RlW04mKDE8PG4ubGVuYml0cyktMV0senQ9WnQ+Pj4yNCxDbj1adD4+PjE2JjI1NSx5bj1adCY2NTUzNSwhKHp0PD1NKTspe2lmKEU9PT0wKWJyZWFrIGU7RS0tLE4rPXJbdSsrXTw8TSxNKz04fWlmKENuJiYoQ24mMjQwKT09PTApe2ZvcihMdD16dCxmdD1DbixYdD15bjtadD1uLmxlbmNvZGVbWHQrKChOJigxPDxMdCtmdCktMSk+Pkx0KV0senQ9WnQ+Pj4yNCxDbj1adD4+PjE2JjI1NSx5bj1adCY2NTUzNSwhKEx0K3p0PD1NKTspe2lmKEU9PT0wKWJyZWFrIGU7RS0tLE4rPXJbdSsrXTw8TSxNKz04fU4+Pj49THQsTS09THQsbi5iYWNrKz1MdH1pZihOPj4+PXp0LE0tPXp0LG4uYmFjays9enQsbi5sZW5ndGg9eW4sQ249PT0wKXtuLm1vZGU9RGU7YnJlYWt9aWYoQ24mMzIpe24uYmFjaz0tMSxuLm1vZGU9QnQ7YnJlYWt9aWYoQ24mNjQpe2UubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLG4ubW9kZT1MZTticmVha31uLmV4dHJhPUNuJjE1LG4ubW9kZT13aTtjYXNlIHdpOmlmKG4uZXh0cmEpe2ZvcihRdD1uLmV4dHJhO008UXQ7KXtpZihFPT09MClicmVhayBlO0UtLSxOKz1yW3UrK108PE0sTSs9OH1uLmxlbmd0aCs9TiYoMTw8bi5leHRyYSktMSxOPj4+PW4uZXh0cmEsTS09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9bi53YXM9bi5sZW5ndGgsbi5tb2RlPWo7Y2FzZSBqOmZvcig7WnQ9bi5kaXN0Y29kZVtOJigxPDxuLmRpc3RiaXRzKS0xXSx6dD1adD4+PjI0LENuPVp0Pj4+MTYmMjU1LHluPVp0JjY1NTM1LCEoenQ8PU0pOyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9aWYoKENuJjI0MCk9PT0wKXtmb3IoTHQ9enQsZnQ9Q24sWHQ9eW47WnQ9bi5kaXN0Y29kZVtYdCsoKE4mKDE8PEx0K2Z0KS0xKT4+THQpXSx6dD1adD4+PjI0LENuPVp0Pj4+MTYmMjU1LHluPVp0JjY1NTM1LCEoTHQrenQ8PU0pOyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9Tj4+Pj1MdCxNLT1MdCxuLmJhY2srPUx0fWlmKE4+Pj49enQsTS09enQsbi5iYWNrKz16dCxDbiY2NCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsbi5tb2RlPUxlO2JyZWFrfW4ub2Zmc2V0PXluLG4uZXh0cmE9Q24mMTUsbi5tb2RlPXJlO2Nhc2UgcmU6aWYobi5leHRyYSl7Zm9yKFF0PW4uZXh0cmE7TTxRdDspe2lmKEU9PT0wKWJyZWFrIGU7RS0tLE4rPXJbdSsrXTw8TSxNKz04fW4ub2Zmc2V0Kz1OJigxPDxuLmV4dHJhKS0xLE4+Pj49bi5leHRyYSxNLT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1pZihuLm9mZnNldD5uLmRtYXgpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPUxlO2JyZWFrfW4ubW9kZT1QZTtjYXNlIFBlOmlmKEY9PT0wKWJyZWFrIGU7aWYoeGU9QWUtRixuLm9mZnNldD54ZSl7aWYoeGU9bi5vZmZzZXQteGUseGU+bi53aGF2ZSYmbi5zYW5lKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1MZTticmVha314ZT5uLnduZXh0Pyh4ZS09bi53bmV4dCxidD1uLndzaXplLXhlKTpidD1uLnduZXh0LXhlLHhlPm4ubGVuZ3RoJiYoeGU9bi5sZW5ndGgpLEF0PW4ud2luZG93fWVsc2UgQXQ9cyxidD12LW4ub2Zmc2V0LHhlPW4ubGVuZ3RoO3hlPkYmJih4ZT1GKSxGLT14ZSxuLmxlbmd0aC09eGU7ZG8gc1t2KytdPUF0W2J0KytdO3doaWxlKC0teGUpO24ubGVuZ3RoPT09MCYmKG4ubW9kZT1Obyk7YnJlYWs7Y2FzZSBEZTppZihGPT09MClicmVhayBlO3NbdisrXT1uLmxlbmd0aCxGLS0sbi5tb2RlPU5vO2JyZWFrO2Nhc2UgamU6aWYobi53cmFwKXtmb3IoO008MzI7KXtpZihFPT09MClicmVhayBlO0UtLSxOfD1yW3UrK108PE0sTSs9OH1pZihBZS09RixlLnRvdGFsX291dCs9QWUsbi50b3RhbCs9QWUsQWUmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz9ZKG4uY2hlY2sscyxBZSx2LUFlKTplZShuLmNoZWNrLHMsQWUsdi1BZSkpLEFlPUYsKG4uZmxhZ3M/Tjp0aShOKSkhPT1uLmNoZWNrKXtlLm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG4ubW9kZT1MZTticmVha31OPTAsTT0wfW4ubW9kZT1ydDtjYXNlIHJ0OmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDtNPDMyOyl7aWYoRT09PTApYnJlYWsgZTtFLS0sTis9clt1KytdPDxNLE0rPTh9aWYoTiE9PShuLnRvdGFsJjQyOTQ5NjcyOTUpKXtlLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPUxlO2JyZWFrfU49MCxNPTB9bi5tb2RlPWd0O2Nhc2UgZ3Q6S3Q9JGU7YnJlYWsgZTtjYXNlIExlOkt0PXl0O2JyZWFrIGU7Y2FzZSBpdDpyZXR1cm4gWWU7Y2FzZSBKZTpkZWZhdWx0OnJldHVybiB0dH1yZXR1cm4gZS5uZXh0X291dD12LGUuYXZhaWxfb3V0PUYsZS5uZXh0X2luPXUsZS5hdmFpbF9pbj1FLG4uaG9sZD1OLG4uYml0cz1NLChuLndzaXplfHxBZSE9PWUuYXZhaWxfb3V0JiZuLm1vZGU8TGUmJihuLm1vZGU8amV8fHQhPT14dCkpJiZzbChlLGUub3V0cHV0LGUubmV4dF9vdXQsQWUtZS5hdmFpbF9vdXQpLG1lLT1lLmF2YWlsX2luLEFlLT1lLmF2YWlsX291dCxlLnRvdGFsX2luKz1tZSxlLnRvdGFsX291dCs9QWUsbi50b3RhbCs9QWUsbi53cmFwJiZBZSYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP1kobi5jaGVjayxzLEFlLGUubmV4dF9vdXQtQWUpOmVlKG4uY2hlY2sscyxBZSxlLm5leHRfb3V0LUFlKSksZS5kYXRhX3R5cGU9bi5iaXRzKyhuLmxhc3Q/NjQ6MCkrKG4ubW9kZT09PUJ0PzEyODowKSsobi5tb2RlPT09U2l8fG4ubW9kZT09PXVuPzI1NjowKSwobWU9PT0wJiZBZT09PTB8fHQ9PT14dCkmJkt0PT09X2UmJihLdD1MKSxLdH1mdW5jdGlvbiBObChlKXtpZighZXx8IWUuc3RhdGUpcmV0dXJuIHR0O3ZhciB0PWUuc3RhdGU7cmV0dXJuIHQud2luZG93JiYodC53aW5kb3c9bnVsbCksZS5zdGF0ZT1udWxsLF9lfWZ1bmN0aW9uIGNzKGUsdCl7dmFyIG47cmV0dXJuIWV8fCFlLnN0YXRlfHwobj1lLnN0YXRlLChuLndyYXAmMik9PT0wKT90dDoobi5oZWFkPXQsdC5kb25lPSExLF9lKX1mdW5jdGlvbiB1cyhlLHQpe3ZhciBuPXQubGVuZ3RoLHIscyx1O3JldHVybiFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSxyLndyYXAhPT0wJiZyLm1vZGUhPT1VdCk/dHQ6ci5tb2RlPT09VXQmJihzPTEscz1lZShzLHQsbiwwKSxzIT09ci5jaGVjayk/eXQ6KHU9c2woZSx0LG4sbiksdT8oci5tb2RlPWl0LFllKTooci5oYXZlZGljdD0xLF9lKSl9UnQuaW5mbGF0ZVJlc2V0PVJzLFJ0LmluZmxhdGVSZXNldDI9b2wsUnQuaW5mbGF0ZVJlc2V0S2VlcD1XaSxSdC5pbmZsYXRlSW5pdD14cixSdC5pbmZsYXRlSW5pdDI9bHUsUnQuaW5mbGF0ZT1UYyxSdC5pbmZsYXRlRW5kPU5sLFJ0LmluZmxhdGVHZXRIZWFkZXI9Y3MsUnQuaW5mbGF0ZVNldERpY3Rpb25hcnk9dXMsUnQuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBsbD17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fTtmdW5jdGlvbiBkZigpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfXZhciBWdT1kZixJbD1SdCxuYz1xbixwZj1FYSxkaT1sbCx1ZD1Rcyx0Xz1zdSxuXz1WdSxUcD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIFBjKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFBjKSlyZXR1cm4gbmV3IFBjKGUpO3RoaXMub3B0aW9ucz1uYy5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LGV8fHt9KTt2YXIgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz49MCYmdC53aW5kb3dCaXRzPDE2JiYodC53aW5kb3dCaXRzPS10LndpbmRvd0JpdHMsdC53aW5kb3dCaXRzPT09MCYmKHQud2luZG93Qml0cz0tMTUpKSx0LndpbmRvd0JpdHM+PTAmJnQud2luZG93Qml0czwxNiYmIShlJiZlLndpbmRvd0JpdHMpJiYodC53aW5kb3dCaXRzKz0zMiksdC53aW5kb3dCaXRzPjE1JiZ0LndpbmRvd0JpdHM8NDgmJih0LndpbmRvd0JpdHMmMTUpPT09MCYmKHQud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IHRfLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj1JbC5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLHQud2luZG93Qml0cyk7aWYobiE9PWRpLlpfT0spdGhyb3cgbmV3IEVycm9yKHVkW25dKTtpZih0aGlzLmhlYWRlcj1uZXcgbl8sSWwuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLHQuZGljdGlvbmFyeSYmKHR5cGVvZiB0LmRpY3Rpb25hcnk9PSJzdHJpbmciP3QuZGljdGlvbmFyeT1wZi5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6VHAuY2FsbCh0LmRpY3Rpb25hcnkpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIiYmKHQuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheSh0LmRpY3Rpb25hcnkpKSx0LnJhdyYmKG49SWwuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHQuZGljdGlvbmFyeSksbiE9PWRpLlpfT0spKSl0aHJvdyBuZXcgRXJyb3IodWRbbl0pfVBjLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zdHJtLHI9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxzPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LHUsdixFLEYsTixNPSExO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7dj10PT09fn50P3Q6dD09PSEwP2RpLlpfRklOSVNIOmRpLlpfTk9fRkxVU0gsdHlwZW9mIGU9PSJzdHJpbmciP24uaW5wdXQ9cGYuYmluc3RyaW5nMmJ1ZihlKTpUcC5jYWxsKGUpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9uLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOm4uaW5wdXQ9ZSxuLm5leHRfaW49MCxuLmF2YWlsX2luPW4uaW5wdXQubGVuZ3RoO2Rve2lmKG4uYXZhaWxfb3V0PT09MCYmKG4ub3V0cHV0PW5ldyBuYy5CdWY4KHIpLG4ubmV4dF9vdXQ9MCxuLmF2YWlsX291dD1yKSx1PUlsLmluZmxhdGUobixkaS5aX05PX0ZMVVNIKSx1PT09ZGkuWl9ORUVEX0RJQ1QmJnMmJih1PUlsLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxzKSksdT09PWRpLlpfQlVGX0VSUk9SJiZNPT09ITAmJih1PWRpLlpfT0ssTT0hMSksdSE9PWRpLlpfU1RSRUFNX0VORCYmdSE9PWRpLlpfT0spcmV0dXJuIHRoaXMub25FbmQodSksdGhpcy5lbmRlZD0hMCwhMTtuLm5leHRfb3V0JiYobi5hdmFpbF9vdXQ9PT0wfHx1PT09ZGkuWl9TVFJFQU1fRU5EfHxuLmF2YWlsX2luPT09MCYmKHY9PT1kaS5aX0ZJTklTSHx8dj09PWRpLlpfU1lOQ19GTFVTSCkpJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/KEU9cGYudXRmOGJvcmRlcihuLm91dHB1dCxuLm5leHRfb3V0KSxGPW4ubmV4dF9vdXQtRSxOPXBmLmJ1ZjJzdHJpbmcobi5vdXRwdXQsRSksbi5uZXh0X291dD1GLG4uYXZhaWxfb3V0PXItRixGJiZuYy5hcnJheVNldChuLm91dHB1dCxuLm91dHB1dCxFLEYsMCksdGhpcy5vbkRhdGEoTikpOnRoaXMub25EYXRhKG5jLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpLG4uYXZhaWxfaW49PT0wJiZuLmF2YWlsX291dD09PTAmJihNPSEwKX13aGlsZSgobi5hdmFpbF9pbj4wfHxuLmF2YWlsX291dD09PTApJiZ1IT09ZGkuWl9TVFJFQU1fRU5EKTtyZXR1cm4gdT09PWRpLlpfU1RSRUFNX0VORCYmKHY9ZGkuWl9GSU5JU0gpLHY9PT1kaS5aX0ZJTklTSD8odT1JbC5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZCh1KSx0aGlzLmVuZGVkPSEwLHU9PT1kaS5aX09LKToodj09PWRpLlpfU1lOQ19GTFVTSCYmKHRoaXMub25FbmQoZGkuWl9PSyksbi5hdmFpbF9vdXQ9MCksITApfSxQYy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LFBjLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09ZGkuWl9PSyYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PW5jLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O2Z1bmN0aW9uIGZkKGUsdCl7dmFyIG49bmV3IFBjKHQpO2lmKG4ucHVzaChlLCEwKSxuLmVycil0aHJvdyBuLm1zZ3x8dWRbbi5lcnJdO3JldHVybiBuLnJlc3VsdH1mdW5jdGlvbiByXyhlLHQpe3JldHVybiB0PXR8fHt9LHQucmF3PSEwLGZkKGUsdCl9a3QuSW5mbGF0ZT1QYyxrdC5pbmZsYXRlPWZkLGt0LmluZmxhdGVSYXc9cl8sa3QudW5nemlwPWZkO3ZhciBpXz1xbi5hc3NpZ24sb189SXIsYV89a3Qsc189bGwsUHA9e307aV8oUHAsb18sYV8sc18pO3ZhciBOcD1QcDtsZXQgbF89InVweDJweCIsY189W3tuYW1lOiJ1cHgiLHR5cGU6W051bWJlcixTdHJpbmddLHJlcXVpcmVkOiEwfV0sdV89MWUtNCxmXz03NTAsSXA9ITEsZGQ9MCxrcD0wLFJwPTk2MCx4cD0zNzUsQnA9NzUwO2Z1bmN0aW9uIGRfKCl7bGV0e3dpbmRvd1dpZHRoOmUscGl4ZWxSYXRpbzp0LHBsYXRmb3JtOm59PVhvKCk7ZGQ9ZSxrcD10LElwPW49PT0iaW9zIn1mdW5jdGlvbiBwZChlLHQpe2xldCBuPU51bWJlcihlKTtyZXR1cm4gaXNOYU4obik/dDpufWZ1bmN0aW9uIHBfKCl7bGV0IGU9SS5nbG9iYWxTdHlsZXx8e307UnA9cGQoZS5ycHhDYWxjTWF4RGV2aWNlV2lkdGgsOTYwKSx4cD1wZChlLnJweENhbGNCYXNlRGV2aWNlV2lkdGgsMzc1KSxCcD1wZChlLnJweENhbGNCYXNlRGV2aWNlV2lkdGgsNzUwKX1sZXQgaF89JHQobF8sKGUsdCk9PntpZihkZD09PTAmJihkXygpLHBfKCkpLGU9TnVtYmVyKGUpLGU9PT0wKXJldHVybiAwO2xldCBuPXR8fGRkO249ZT09PUJwfHxuPD1ScD9uOnhwO2xldCByPWUvZl8qbjtyZXR1cm4gcjwwJiYocj0tcikscj1NYXRoLmZsb29yKHIrdV8pLHI9PT0wJiYoa3A9PT0xfHwhSXA/cj0xOnI9LjUpLGU8MD8tcjpyfSxjXyksZ189ImFkZEludGVyY2VwdG9yIix2Xz0icmVtb3ZlSW50ZXJjZXB0b3IiLE1wPVt7bmFtZToibWV0aG9kIix0eXBlOltTdHJpbmcsT2JqZWN0XSxyZXF1aXJlZDohMH1dLG1fPU1wO2Z1bmN0aW9uIExwKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChuPT57Wi5pc0Z1bmN0aW9uKHRbbl0pJiYoZVtuXT1fXyhlW25dLHRbbl0pKX0pfWZ1bmN0aW9uIERwKGUsdCl7IWV8fCF0fHxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49PntsZXQgcj1lW25dLHM9dFtuXTtaLmlzQXJyYXkocikmJlouaXNGdW5jdGlvbihzKSYmWi5yZW1vdmUocixzKX0pfWZ1bmN0aW9uIF9fKGUsdCl7bGV0IG49dD9lP2UuY29uY2F0KHQpOlouaXNBcnJheSh0KT90Olt0XTplO3JldHVybiBuJiZiXyhuKX1mdW5jdGlvbiBiXyhlKXtsZXQgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0LmluZGV4T2YoZVtuXSk9PT0tMSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fWxldCB5Xz0kdChnXywoZSx0KT0+e1ouaXNTdHJpbmcoZSkmJlouaXNQbGFpbk9iamVjdCh0KT9McChBbltlXXx8KEFuW2VdPXt9KSx0KTpaLmlzUGxhaW5PYmplY3QoZSkmJkxwKG1uLGUpfSxNcCksRV89JHQodl8sKGUsdCk9PntaLmlzU3RyaW5nKGUpP1ouaXNQbGFpbk9iamVjdCh0KT9EcChBbltlXSx0KTpkZWxldGUgQW5bZV06Wi5pc1BsYWluT2JqZWN0KGUpJiZEcChtbixlKX0sbV8pLFNfPXt9LHdfPSIkb24iLEZwPVt7bmFtZToiZXZlbnQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx7bmFtZToiY2FsbGJhY2siLHR5cGU6RnVuY3Rpb24scmVxdWlyZWQ6ITB9XSxDXz0iJG9uY2UiLEFfPUZwLE9fPSIkb2ZmIixUXz1be25hbWU6ImV2ZW50Iix0eXBlOltTdHJpbmcsQXJyYXldfSx7bmFtZToiY2FsbGJhY2siLHR5cGU6W0Z1bmN0aW9uLE51bWJlcl19XSxQXz0iJGVtaXQiLE5fPVt7bmFtZToiZXZlbnQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV07Y2xhc3MgSV97Y29uc3RydWN0b3IoKXt0aGlzLiRlbWl0dGVyPW5ldyBzZS5FbWl0dGVyfW9uKHQsbil7cmV0dXJuIHRoaXMuJGVtaXR0ZXIub24odCxuKX1vbmNlKHQsbil7cmV0dXJuIHRoaXMuJGVtaXR0ZXIub25jZSh0LG4pfW9mZih0LG4pe2lmKCF0KXt0aGlzLiRlbWl0dGVyLmU9e307cmV0dXJufXRoaXMuJGVtaXR0ZXIub2ZmKHQsbil9ZW1pdCh0LC4uLm4pe3RoaXMuJGVtaXR0ZXIuZW1pdCh0LC4uLm4pfX1sZXQgY3U9bmV3IElfLGtfPSR0KHdfLChlLHQpPT4oY3Uub24oZSx0KSwoKT0+Y3Uub2ZmKGUsdCkpLEZwKSxSXz0kdChDXywoZSx0KT0+KGN1Lm9uY2UoZSx0KSwoKT0+Y3Uub2ZmKGUsdCkpLEFfKSx4Xz0kdChPXywoZSx0KT0+e1ouaXNBcnJheShlKXx8KGU9ZT9bZV06W10pLGUuZm9yRWFjaChuPT57Y3Uub2ZmKG4sdCl9KX0sVF8pLEJfPSR0KFBfLChlLC4uLnQpPT57Y3UuZW1pdChlLC4uLnQpfSxOXyksVnA9W3tuYW1lOiJpZCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxNXz0iY3JlYXRlVmlkZW9Db250ZXh0IixMXz0iY3JlYXRlTWFwQ29udGV4dCIsRF89VnAsRl89ImNyZWF0ZUNhbnZhc0NvbnRleHQiLFZfPVt7bmFtZToiY2FudmFzSWQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fV0sVV89ImNyZWF0ZUlubmVyQXVkaW9Db250ZXh0IixIXz0iY3JlYXRlTGl2ZVB1c2hlckNvbnRleHQiLCRfPVZwLmNvbmNhdCh7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fSksal89Wy41LC44LDEsMS4yNSwxLjUsMl07Y2xhc3MgaGR7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1wbGF5KCl7WHIodGhpcy5pZCx0aGlzLnBhZ2VJZCwicGxheSIpfXBhdXNlKCl7WHIodGhpcy5pZCx0aGlzLnBhZ2VJZCwicGF1c2UiKX1zdG9wKCl7WHIodGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXNlZWsodCl7WHIodGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VlayIse3Bvc2l0aW9uOnR9KX1zZW5kRGFubXUodCl7WHIodGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VuZERhbm11Iix0KX1wbGF5YmFja1JhdGUodCl7fmpfLmluZGV4T2YodCl8fCh0PTEpLFhyKHRoaXMuaWQsdGhpcy5wYWdlSWQsInBsYXliYWNrUmF0ZSIse3JhdGU6dH0pfXJlcXVlc3RGdWxsU2NyZWVuKHQ9e30pe1hyKHRoaXMuaWQsdGhpcy5wYWdlSWQsInJlcXVlc3RGdWxsU2NyZWVuIix0KX1leGl0RnVsbFNjcmVlbigpe1hyKHRoaXMuaWQsdGhpcy5wYWdlSWQsImV4aXRGdWxsU2NyZWVuIil9c2hvd1N0YXR1c0Jhcigpe1hyKHRoaXMuaWQsdGhpcy5wYWdlSWQsInNob3dTdGF0dXNCYXIiKX1oaWRlU3RhdHVzQmFyKCl7WHIodGhpcy5pZCx0aGlzLnBhZ2VJZCwiaGlkZVN0YXR1c0JhciIpfX1sZXQgel89JHQoTV8sKGUsdCk9PnQ/bmV3IGhkKGUsX24odCkpOm5ldyBoZChlLF9uKFpuKCkpKSksV189KGUsdCk9PntsZXQgbj10LmVyck1zZ3x8IiI7bmV3IFJlZ0V4cCgiXFw6XFxzKmZhaWwiKS50ZXN0KG4pP2UuZmFpbCYmZS5mYWlsKHQpOmUuc3VjY2VzcyYmZS5zdWNjZXNzKHQpLGUuY29tcGxldGUmJmUuY29tcGxldGUodCl9LEdpPShlLHQsbixyKT0+e21sKGUsdCxuLHIscz0+e3ImJldfKHIscyl9KX07Y2xhc3MgZ2R7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1nZXRDZW50ZXJMb2NhdGlvbih0KXtHaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJnZXRDZW50ZXJMb2NhdGlvbiIsdCl9bW92ZVRvTG9jYXRpb24odCl7R2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwibW92ZVRvTG9jYXRpb24iLHQpfWdldFNjYWxlKHQpe0dpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImdldFNjYWxlIix0KX1nZXRSZWdpb24odCl7R2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwiZ2V0UmVnaW9uIix0KX1pbmNsdWRlUG9pbnRzKHQpe0dpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluY2x1ZGVQb2ludHMiLHQpfXRyYW5zbGF0ZU1hcmtlcih0KXtHaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJ0cmFuc2xhdGVNYXJrZXIiLHQpfSRnZXRBcHBNYXAoKXtyZXR1cm4gYy5tYXBzLmdldE1hcEJ5SWQodGhpcy5wYWdlSWQrIi1tYXAtIit0aGlzLmlkKX1hZGRDdXN0b21MYXllcih0KXtHaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJhZGRDdXN0b21MYXllciIsdCl9cmVtb3ZlQ3VzdG9tTGF5ZXIodCl7R2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlQ3VzdG9tTGF5ZXIiLHQpfWFkZEdyb3VuZE92ZXJsYXkodCl7R2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwiYWRkR3JvdW5kT3ZlcmxheSIsdCl9cmVtb3ZlR3JvdW5kT3ZlcmxheSh0KXtHaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJyZW1vdmVHcm91bmRPdmVybGF5Iix0KX11cGRhdGVHcm91bmRPdmVybGF5KHQpe0dpKHRoaXMuaWQsdGhpcy5wYWdlSWQsInVwZGF0ZUdyb3VuZE92ZXJsYXkiLHQpfWluaXRNYXJrZXJDbHVzdGVyKHQpe0dpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluaXRNYXJrZXJDbHVzdGVyIix0KX1hZGRNYXJrZXJzKHQpe0dpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImFkZE1hcmtlcnMiLHQpfXJlbW92ZU1hcmtlcnModCl7R2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlTWFya2VycyIsdCl9bW92ZUFsb25nKHQpe0dpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm1vdmVBbG9uZyIsdCl9c2V0TG9jTWFya2VySWNvbih0KXtHaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJzZXRMb2NNYXJrZXJJY29uIix0KX1vcGVuTWFwQXBwKHQpe0dpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm9wZW5NYXBBcHAiLHQpfW9uKHQsbil7R2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwib24iLHtuYW1lOnQsY2FsbGJhY2s6bn0pfX1sZXQgR189JHQoTF8sKGUsdCk9PnQ/bmV3IGdkKGUsX24odCkpOm5ldyBnZChlLF9uKFpuKCkpKSxEXyk7ZnVuY3Rpb24gcmMoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtuP3JbZV09TWF0aC5yb3VuZChuKTp0eXBlb2YgdCE9InVuZGVmaW5lZCImJihyW2VdPXQpfX1sZXQgVXA9cmMoIndpZHRoIiksSHA9cmMoImhlaWdodCIpLHFfPSJjYW52YXNHZXRJbWFnZURhdGEiLCRwPXtmb3JtYXRBcmdzOnt4OnJjKCJ4IikseTpyYygieSIpLHdpZHRoOlVwLGhlaWdodDpIcH19LGpwPXtjYW52YXNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSx5Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH0sd2lkdGg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSxoZWlnaHQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfX0sWV89ImNhbnZhc1B1dEltYWdlRGF0YSIsS189JHAsSl89Wi5leHRlbmQoe2RhdGE6e3R5cGU6VWludDhDbGFtcGVkQXJyYXkscmVxdWlyZWQ6ITB9fSxqcCx7aGVpZ2h0Ont0eXBlOk51bWJlcn19KSx6cD17UE5HOiJwbmciLEpQRzoianBnIixKUEVHOiJqcGcifSxaXz0iY2FudmFzVG9UZW1wRmlsZVBhdGgiLFhfPXtmb3JtYXRBcmdzOnt4OnJjKCJ4IiwwKSx5OnJjKCJ5IiwwKSx3aWR0aDpVcCxoZWlnaHQ6SHAsZGVzdFdpZHRoOnJjKCJkZXN0V2lkdGgiKSxkZXN0SGVpZ2h0OnJjKCJkZXN0SGVpZ2h0IiksZmlsZVR5cGUoZSx0KXtlPShlfHwiIikudG9VcHBlckNhc2UoKTtsZXQgbj16cFtlXTtufHwobj16cC5QTkcpLHQuZmlsZVR5cGU9bn0scXVhbGl0eShlLHQpe3QucXVhbGl0eT1lJiZlPjAmJmU8MT9lOjF9fX0sUV89e3g6TnVtYmVyLHk6TnVtYmVyLHdpZHRoOk51bWJlcixoZWlnaHQ6TnVtYmVyLGRlc3RXaWR0aDpOdW1iZXIsZGVzdEhlaWdodDpOdW1iZXIsY2FudmFzSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxmaWxlVHlwZTpTdHJpbmcscXVhbGl0eTpOdW1iZXJ9O2Z1bmN0aW9uIGhmKGUsdCxuLHIscyl7cHQuaW52b2tlVmlld01ldGhvZChgY2FudmFzLiR7ZX1gLHt0eXBlOm4sZGF0YTpyfSx0LHU9PntzJiZzKHUpfSl9dmFyIGViPVsic2NhbGUiLCJyb3RhdGUiLCJ0cmFuc2xhdGUiLCJzZXRUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm0iXSx0Yj1bImRyYXdJbWFnZSIsImZpbGxUZXh0IiwiZmlsbCIsInN0cm9rZSIsImZpbGxSZWN0Iiwic3Ryb2tlUmVjdCIsImNsZWFyUmVjdCIsInN0cm9rZVRleHQiXSxuYj1bInNldEZpbGxTdHlsZSIsInNldFRleHRBbGlnbiIsInNldFN0cm9rZVN0eWxlIiwic2V0R2xvYmFsQWxwaGEiLCJzZXRTaGFkb3ciLCJzZXRGb250U2l6ZSIsInNldExpbmVDYXAiLCJzZXRMaW5lSm9pbiIsInNldExpbmVXaWR0aCIsInNldE1pdGVyTGltaXQiLCJzZXRUZXh0QmFzZWxpbmUiLCJzZXRMaW5lRGFzaCJdO2Z1bmN0aW9uIHJiKGUsdCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gci5mb250PXQsci5tZWFzdXJlVGV4dChlKS53aWR0aHx8MH1sZXQgV3A9e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbjoiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIixzdGVlbGJsdWU6IiM0NjgyYjQiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdG9tYXRvOiIjZmY2MzQ3Iix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIn07ZnVuY3Rpb24gdmQoZSl7ZT1lfHwiIzAwMDAwMCI7bGV0IHQ9bnVsbDtpZigodD0vXiMoWzAtOXxBLUZ8YS1mXXs2fSkkLy5leGVjKGUpKSE9bnVsbCl7bGV0IHI9cGFyc2VJbnQodFsxXS5zbGljZSgwLDIpLDE2KSxzPXBhcnNlSW50KHRbMV0uc2xpY2UoMiw0KSwxNiksdT1wYXJzZUludCh0WzFdLnNsaWNlKDQpLDE2KTtyZXR1cm5bcixzLHUsMjU1XX1pZigodD0vXiMoWzAtOXxBLUZ8YS1mXXszfSkkLy5leGVjKGUpKSE9bnVsbCl7bGV0IHI9dFsxXS5zbGljZSgwLDEpLHM9dFsxXS5zbGljZSgxLDIpLHU9dFsxXS5zbGljZSgyLDMpO3JldHVybiByPXBhcnNlSW50KHIrciwxNikscz1wYXJzZUludChzK3MsMTYpLHU9cGFyc2VJbnQodSt1LDE2KSxbcixzLHUsMjU1XX1pZigodD0vXnJnYlwoKC4rKVwpJC8uZXhlYyhlKSkhPW51bGwpcmV0dXJuIHRbMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWluKDI1NSxwYXJzZUludChyLnRyaW0oKSkpfSkuY29uY2F0KDI1NSk7aWYoKHQ9L15yZ2JhXCgoLispXCkkLy5leGVjKGUpKSE9bnVsbClyZXR1cm4gdFsxXS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihyLHMpe3JldHVybiBzPT09Mz9NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHIudHJpbSgpKSk6TWF0aC5taW4oMjU1LHBhcnNlSW50KHIudHJpbSgpKSl9KTt2YXIgbj1lLnRvTG93ZXJDYXNlKCk7aWYoWi5oYXNPd24oV3Asbikpe3Q9L14jKFswLTl8QS1GfGEtZl17Niw4fSkkLy5leGVjKFdwW25dKTtsZXQgcj1wYXJzZUludCh0WzFdLnNsaWNlKDAsMiksMTYpLHM9cGFyc2VJbnQodFsxXS5zbGljZSgyLDQpLDE2KSx1PXBhcnNlSW50KHRbMV0uc2xpY2UoNCw2KSwxNiksdj1wYXJzZUludCh0WzFdLnNsaWNlKDYsOCksMTYpO3JldHVybiB2PXY+PTA/djoyNTUsW3Iscyx1LHZdfXJldHVybiBjb25zb2xlLmVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcjoiK2UpLFswLDAsMCwyNTVdfWNsYXNzIEdwe2NvbnN0cnVjdG9yKHQsbil7dGhpcy50eXBlPXQsdGhpcy5kYXRhPW4sdGhpcy5jb2xvclN0b3A9W119YWRkQ29sb3JTdG9wKHQsbil7dGhpcy5jb2xvclN0b3AucHVzaChbdCx2ZChuKV0pfX1jbGFzcyBpYntjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHlwZT0icGF0dGVybiIsdGhpcy5kYXRhPXQsdGhpcy5jb2xvclN0b3A9bn19Y2xhc3Mgb2J7Y29uc3RydWN0b3IodCl7dGhpcy53aWR0aD10fX1sZXQgYWI9KCk9PmJpO2NsYXNzIFV1e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMucGFnZUlkPW4sdGhpcy5hY3Rpb25zPVtdLHRoaXMucGF0aD1bXSx0aGlzLnN1YnBhdGg9W10sdGhpcy5kcmF3aW5nU3RhdGU9W10sdGhpcy5zdGF0ZT17bGluZURhc2g6WzAsMF0sc2hhZG93T2Zmc2V0WDowLHNoYWRvd09mZnNldFk6MCxzaGFkb3dCbHVyOjAsc2hhZG93Q29sb3I6WzAsMCwwLDBdLGZvbnQ6IjEwcHggc2Fucy1zZXJpZiIsZm9udFNpemU6MTAsZm9udFdlaWdodDoibm9ybWFsIixmb250U3R5bGU6Im5vcm1hbCIsZm9udEZhbWlseToic2Fucy1zZXJpZiJ9fXNldEZpbGxTdHlsZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRTdHJva2VTdHlsZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRTaGFkb3codCxuLHIscyl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9YWRkQ29sb3JTdG9wKHQsbil7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0TGluZVdpZHRoKHQpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfXNldExpbmVDYXAodCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0TGluZUpvaW4odCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0TGluZURhc2godCxuKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRNaXRlckxpbWl0KHQpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWZpbGxSZWN0KHQsbixyLHMpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfXN0cm9rZVJlY3QodCxuLHIscyl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9Y2xlYXJSZWN0KHQsbixyLHMpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWZpbGwoKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zdHJva2UoKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zY2FsZSh0LG4pe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfXJvdGF0ZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX10cmFuc2xhdGUodCxuKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRGb250U2l6ZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1maWxsVGV4dCh0LG4scixzKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRUZXh0QWxpZ24odCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0VGV4dEJhc2VsaW5lKHQpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWRyYXdJbWFnZSh0LG4scixzLHUsdixFLEYsTil7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0R2xvYmFsQWxwaGEodCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c3Ryb2tlVGV4dCh0LG4scixzKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRUcmFuc2Zvcm0odCxuLHIscyx1LHYpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWRyYXcodD0hMSxuKXt2YXIgcj1bLi4udGhpcy5hY3Rpb25zXTt0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLGhmKHRoaXMuaWQsdGhpcy5wYWdlSWQsImFjdGlvbnNDaGFuZ2VkIix7YWN0aW9uczpyLHJlc2VydmU6dH0sbil9Y3JlYXRlTGluZWFyR3JhZGllbnQodCxuLHIscyl7cmV0dXJuIG5ldyBHcCgibGluZWFyIixbdCxuLHIsc10pfWNyZWF0ZUNpcmN1bGFyR3JhZGllbnQodCxuLHIpe3JldHVybiBuZXcgR3AoInJhZGlhbCIsW3QsbixyXSl9Y3JlYXRlUGF0dGVybih0LG4pe2lmKG49PT12b2lkIDApY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZVBhdHRlcm4nIG9uICdDYW52YXNDb250ZXh0JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IDEgcHJlc2VudC4iKTtlbHNlIGlmKFsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLmluZGV4T2Yobik8MCljb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlUGF0dGVybicgb24gJ0NhbnZhc0NvbnRleHQnOiBUaGUgcHJvdmlkZWQgdHlwZSAoJyIrbisiJykgaXMgbm90IG9uZSBvZiAncmVwZWF0JywgJ25vLXJlcGVhdCcsICdyZXBlYXQteCcsIG9yICdyZXBlYXQteScuIik7ZWxzZSByZXR1cm4gbmV3IGliKHQsbil9bWVhc3VyZVRleHQodCxuKXtsZXQgcj10aGlzLnN0YXRlLmZvbnQscz0wO3tsZXQgdT1jLndlYnZpZXcuYWxsKCkuZmluZCh2PT52LmdldFVSTCgpLmVuZHNXaXRoKCJ3d3cvX191bmlhcHB2aWV3Lmh0bWwiKSk7dSYmKHM9TnVtYmVyKHUuZXZhbEpTU3luYyhgKCR7cmIudG9TdHJpbmcoKX0pKCR7SlNPTi5zdHJpbmdpZnkodCl9LCR7SlNPTi5zdHJpbmdpZnkocil9KWApKSl9cmV0dXJuIG5ldyBvYihzKX1zYXZlKCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2F2ZSIsZGF0YTpbXX0pLHRoaXMuZHJhd2luZ1N0YXRlLnB1c2godGhpcy5zdGF0ZSl9cmVzdG9yZSgpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InJlc3RvcmUiLGRhdGE6W119KSx0aGlzLnN0YXRlPXRoaXMuZHJhd2luZ1N0YXRlLnBvcCgpfHx7bGluZURhc2g6WzAsMF0sc2hhZG93T2Zmc2V0WDowLHNoYWRvd09mZnNldFk6MCxzaGFkb3dCbHVyOjAsc2hhZG93Q29sb3I6WzAsMCwwLDBdLGZvbnQ6IjEwcHggc2Fucy1zZXJpZiIsZm9udFNpemU6MTAsZm9udFdlaWdodDoibm9ybWFsIixmb250U3R5bGU6Im5vcm1hbCIsZm9udEZhbWlseToic2Fucy1zZXJpZiJ9fWJlZ2luUGF0aCgpe3RoaXMucGF0aD1bXSx0aGlzLnN1YnBhdGg9W10sdGhpcy5wYXRoLnB1c2goe21ldGhvZDoiYmVnaW5QYXRoIixkYXRhOltdfSl9bW92ZVRvKHQsbil7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoibW92ZVRvIixkYXRhOlt0LG5dfSksdGhpcy5zdWJwYXRoPVtbdCxuXV19bGluZVRvKHQsbil7dGhpcy5wYXRoLmxlbmd0aD09PTAmJnRoaXMuc3VicGF0aC5sZW5ndGg9PT0wP3RoaXMucGF0aC5wdXNoKHttZXRob2Q6Im1vdmVUbyIsZGF0YTpbdCxuXX0pOnRoaXMucGF0aC5wdXNoKHttZXRob2Q6ImxpbmVUbyIsZGF0YTpbdCxuXX0pLHRoaXMuc3VicGF0aC5wdXNoKFt0LG5dKX1xdWFkcmF0aWNDdXJ2ZVRvKHQsbixyLHMpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6InF1YWRyYXRpY0N1cnZlVG8iLGRhdGE6W3QsbixyLHNdfSksdGhpcy5zdWJwYXRoLnB1c2goW3Isc10pfWJlemllckN1cnZlVG8odCxuLHIscyx1LHYpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImJlemllckN1cnZlVG8iLGRhdGE6W3QsbixyLHMsdSx2XX0pLHRoaXMuc3VicGF0aC5wdXNoKFt1LHZdKX1hcmModCxuLHIscyx1LHY9ITEpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyYyIsZGF0YTpbdCxuLHIscyx1LHZdfSksdGhpcy5zdWJwYXRoLnB1c2goW3Qsbl0pfXJlY3QodCxuLHIscyl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoicmVjdCIsZGF0YTpbdCxuLHIsc119KSx0aGlzLnN1YnBhdGg9W1t0LG5dXX1hcmNUbyh0LG4scixzLHUpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyY1RvIixkYXRhOlt0LG4scixzLHVdfSksdGhpcy5zdWJwYXRoLnB1c2goW3Isc10pfWNsaXAoKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJjbGlwIixkYXRhOlsuLi50aGlzLnBhdGhdfSl9Y2xvc2VQYXRoKCl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoiY2xvc2VQYXRoIixkYXRhOltdfSksdGhpcy5zdWJwYXRoLmxlbmd0aCYmKHRoaXMuc3VicGF0aD1bdGhpcy5zdWJwYXRoLnNoaWZ0KCldKX1jbGVhckFjdGlvbnMoKXt0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLHRoaXMuc3VicGF0aD1bXX1nZXRBY3Rpb25zKCl7dmFyIHQ9Wy4uLnRoaXMuYWN0aW9uc107cmV0dXJuIHRoaXMuY2xlYXJBY3Rpb25zKCksdH1zZXQgbGluZURhc2hPZmZzZXQodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0TGluZURhc2hPZmZzZXQiLGRhdGE6W3RdfSl9c2V0IGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLGRhdGE6W3RdfSl9c2V0IHNoYWRvd0JsdXIodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Qmx1ciIsZGF0YTpbdF19KX1zZXQgc2hhZG93Q29sb3IodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Q29sb3IiLGRhdGE6W3RdfSl9c2V0IHNoYWRvd09mZnNldFgodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93T2Zmc2V0WCIsZGF0YTpbdF19KX1zZXQgc2hhZG93T2Zmc2V0WSh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRTaGFkb3dPZmZzZXRZIixkYXRhOlt0XX0pfXNldCBmb250KHQpe3ZhciBuPXRoaXM7dGhpcy5zdGF0ZS5mb250PXQ7dmFyIHI9dC5tYXRjaCgvXigoW1x3XC1dK1xzKSopKFxkK1wuP1xkKnI/cHgpKFwvKFxkK1wuP1xkKihyP3B4KT8pKT9ccysoLiopLyk7aWYocil7dmFyIHM9clsxXS50cmltKCkuc3BsaXQoL1xzLyksdT1wYXJzZUZsb2F0KHJbM10pLHY9cls3XSxFPVtdO3MuZm9yRWFjaChmdW5jdGlvbihOLE0pe1siaXRhbGljIiwib2JsaXF1ZSIsIm5vcm1hbCJdLmluZGV4T2YoTik+LTE/KEUucHVzaCh7bWV0aG9kOiJzZXRGb250U3R5bGUiLGRhdGE6W05dfSksbi5zdGF0ZS5mb250U3R5bGU9Tik6WyJib2xkIiwibm9ybWFsIiwibGlnaHRlciIsImJvbGRlciJdLmluZGV4T2YoTik+LTF8fC9eXGQrJC8udGVzdChOKT8oRS5wdXNoKHttZXRob2Q6InNldEZvbnRXZWlnaHQiLGRhdGE6W05dfSksbi5zdGF0ZS5mb250V2VpZ2h0PU4pOk09PT0wPyhFLnB1c2goe21ldGhvZDoic2V0Rm9udFN0eWxlIixkYXRhOlsibm9ybWFsIl19KSxuLnN0YXRlLmZvbnRTdHlsZT0ibm9ybWFsIik6TT09PTEmJkYoKX0pLHMubGVuZ3RoPT09MSYmRigpLHM9RS5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIE4uZGF0YVswXX0pLmpvaW4oIiAiKSx0aGlzLnN0YXRlLmZvbnRTaXplPXUsdGhpcy5zdGF0ZS5mb250RmFtaWx5PXYsdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0Rm9udCIsZGF0YTpbYCR7c30gJHt1fXB4ICR7dn1gXX0pfWVsc2UgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gc2V0ICdmb250JyBvbiAnQ2FudmFzQ29udGV4dCc6IGludmFsaWQgZm9ybWF0LiIpO2Z1bmN0aW9uIEYoKXtFLnB1c2goe21ldGhvZDoic2V0Rm9udFdlaWdodCIsZGF0YTpbIm5vcm1hbCJdfSksbi5zdGF0ZS5mb250V2VpZ2h0PSJub3JtYWwifX1nZXQgZm9udCgpe3JldHVybiB0aGlzLnN0YXRlLmZvbnR9c2V0IGZpbGxTdHlsZSh0KXt0aGlzLnNldEZpbGxTdHlsZSh0KX1zZXQgc3Ryb2tlU3R5bGUodCl7dGhpcy5zZXRTdHJva2VTdHlsZSh0KX1zZXQgZ2xvYmFsQWxwaGEodCl7dD1NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHQpKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxBbHBoYSIsZGF0YTpbdF19KX1zZXQgdGV4dEFsaWduKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldFRleHRBbGlnbiIsZGF0YTpbdF19KX1zZXQgbGluZUNhcCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lQ2FwIixkYXRhOlt0XX0pfXNldCBsaW5lSm9pbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lSm9pbiIsZGF0YTpbdF19KX1zZXQgbGluZVdpZHRoKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldExpbmVXaWR0aCIsZGF0YTpbdF19KX1zZXQgbWl0ZXJMaW1pdCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRNaXRlckxpbWl0IixkYXRhOlt0XX0pfXNldCB0ZXh0QmFzZWxpbmUodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0VGV4dEJhc2VsaW5lIixkYXRhOlt0XX0pfX1sZXQgc2I9c2Uub25jZSgoKT0+e1suLi5lYiwuLi50Yl0uZm9yRWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3N3aXRjaChuKXtjYXNlImZpbGwiOmNhc2Uic3Ryb2tlIjpyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4rIlBhdGgiLGRhdGE6Wy4uLnRoaXMucGF0aF19KX07Y2FzZSJmaWxsUmVjdCI6cmV0dXJuIGZ1bmN0aW9uKHIscyx1LHYpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6ImZpbGxQYXRoIixkYXRhOlt7bWV0aG9kOiJyZWN0IixkYXRhOltyLHMsdSx2XX1dfSl9O2Nhc2Uic3Ryb2tlUmVjdCI6cmV0dXJuIGZ1bmN0aW9uKHIscyx1LHYpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InN0cm9rZVBhdGgiLGRhdGE6W3ttZXRob2Q6InJlY3QiLGRhdGE6W3Iscyx1LHZdfV19KX07Y2FzZSJmaWxsVGV4dCI6Y2FzZSJzdHJva2VUZXh0IjpyZXR1cm4gZnVuY3Rpb24ocixzLHUsdil7dmFyIEU9W3IudG9TdHJpbmcoKSxzLHVdO3R5cGVvZiB2PT0ibnVtYmVyIiYmRS5wdXNoKHYpLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOkV9KX07Y2FzZSJkcmF3SW1hZ2UiOnJldHVybiBmdW5jdGlvbihyLHMsdSx2LEUsRixOLE0sbWUpe21lPT09dm9pZCAwJiYoRj1zLE49dSxNPXYsbWU9RSxzPXZvaWQgMCx1PXZvaWQgMCx2PXZvaWQgMCxFPXZvaWQgMCk7dmFyIEFlO2Z1bmN0aW9uIHhlKGJ0KXtyZXR1cm4gdHlwZW9mIGJ0PT0ibnVtYmVyIn1BZT14ZShzKSYmeGUodSkmJnhlKHYpJiZ4ZShFKT9bcixGLE4sTSxtZSxzLHUsdixFXTp4ZShNKSYmeGUobWUpP1tyLEYsTixNLG1lXTpbcixGLE5dLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOkFlfSl9O2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOnJ9KX19fVV1LnByb3RvdHlwZVtlXT10KGUpfSksbmIuZm9yRWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3N3aXRjaChuKXtjYXNlInNldEZpbGxTdHlsZSI6Y2FzZSJzZXRTdHJva2VTdHlsZSI6cmV0dXJuIGZ1bmN0aW9uKHIpe3R5cGVvZiByIT0ib2JqZWN0Ij90aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbIm5vcm1hbCIsdmQocildfSk6dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3IudHlwZSxyLmRhdGEsci5jb2xvclN0b3BdfSl9O2Nhc2Uic2V0R2xvYmFsQWxwaGEiOnJldHVybiBmdW5jdGlvbihyKXtyPU1hdGguZmxvb3IoMjU1KnBhcnNlRmxvYXQocikpLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyXX0pfTtjYXNlInNldFNoYWRvdyI6cmV0dXJuIGZ1bmN0aW9uKHIscyx1LHYpe3Y9dmQodiksdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3Iscyx1LHZdfSksdGhpcy5zdGF0ZS5zaGFkb3dCbHVyPXUsdGhpcy5zdGF0ZS5zaGFkb3dDb2xvcj12LHRoaXMuc3RhdGUuc2hhZG93T2Zmc2V0WD1yLHRoaXMuc3RhdGUuc2hhZG93T2Zmc2V0WT1zfTtjYXNlInNldExpbmVEYXNoIjpyZXR1cm4gZnVuY3Rpb24ocixzKXtyPXJ8fFswLDBdLHM9c3x8MCx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbcixzXX0pLHRoaXMuc3RhdGUubGluZURhc2g9cn07Y2FzZSJzZXRGb250U2l6ZSI6cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3RhdGUuZm9udD10aGlzLnN0YXRlLmZvbnQucmVwbGFjZSgvXGQrXC4/XGQqcHgvLHIrInB4IiksdGhpcy5zdGF0ZS5mb250U2l6ZT1yLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyXX0pfTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbiguLi5yKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpyfSl9fX1VdS5wcm90b3R5cGVbZV09dChlKX0pfSksbGI9JHQoRl8sKGUsdCk9PntpZihzYigpLHQpcmV0dXJuIG5ldyBVdShlLF9uKHQpKTtsZXQgbj1fbihabigpKTtpZihuKXJldHVybiBuZXcgVXUoZSxuKTtwdC5lbWl0KHNlLk9OX0VSUk9SLCJjcmVhdGVDYW52YXNDb250ZXh0OmZhaWwiKX0sVl8pLGNiPVJlKHFfLCh7Y2FudmFzSWQ6ZSx4OnQseTpuLHdpZHRoOnIsaGVpZ2h0OnN9LHtyZXNvbHZlOnUscmVqZWN0OnZ9KT0+e2xldCBFPV9uKFpuKCkpO2lmKCFFKXt2KCk7cmV0dXJufWZ1bmN0aW9uIEYoTil7aWYoTi5lcnJNc2cmJk4uZXJyTXNnLmluZGV4T2YoImZhaWwiKSE9PS0xKXt2KCIiLE4pO3JldHVybn1sZXQgTT1OLmRhdGE7TSYmTS5sZW5ndGgmJihOLmNvbXByZXNzZWQmJihNPU5wLmluZmxhdGVSYXcoTSkpLE4uZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoTSkpLGRlbGV0ZSBOLmNvbXByZXNzZWQsdShOKX1oZihlLEUsImdldEltYWdlRGF0YSIse3g6dCx5Om4sd2lkdGg6cixoZWlnaHQ6c30sRil9LGpwLCRwKSx1Yj1SZShZXywoe2NhbnZhc0lkOmUsZGF0YTp0LHg6bix5OnIsd2lkdGg6cyxoZWlnaHQ6dX0se3Jlc29sdmU6dixyZWplY3Q6RX0pPT57dmFyIEY9X24oWm4oKSk7aWYoIUYpe0UoKTtyZXR1cm59bGV0IE4sTT0oKT0+e2hmKGUsRiwicHV0SW1hZ2VEYXRhIix7ZGF0YTp0LHg6bix5OnIsd2lkdGg6cyxoZWlnaHQ6dSxjb21wcmVzc2VkOk59LG1lPT57aWYobWUuZXJyTXNnJiZtZS5lcnJNc2cuaW5kZXhPZigiZmFpbCIpIT09LTEpe0UoKTtyZXR1cm59dihtZSl9KX07Yy5vcy5uYW1lIT09ImlPUyJ8fHR5cGVvZiBfX1dFRVhfREVWVE9PTF9fPT0iYm9vbGVhbiI/KHQ9TnAuZGVmbGF0ZVJhdyh0LHt0bzoic3RyaW5nIn0pLE49ITApOnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCksTSgpfSxKXyxLXyksZmI9UmUoWl8sKHt4OmU9MCx5OnQ9MCx3aWR0aDpuLGhlaWdodDpyLGRlc3RXaWR0aDpzLGRlc3RIZWlnaHQ6dSxjYW52YXNJZDp2LGZpbGVUeXBlOkUscXVhbGl0eTpGfSx7cmVzb2x2ZTpOLHJlamVjdDpNfSk9Pnt2YXIgbWU9X24oWm4oKSk7aWYoIW1lKXtNKCk7cmV0dXJufWxldCBBZT1gJHthYigpfS9jYW52YXNgO2hmKHYsbWUsInRvVGVtcEZpbGVQYXRoIix7eDplLHk6dCx3aWR0aDpuLGhlaWdodDpyLGRlc3RXaWR0aDpzLGRlc3RIZWlnaHQ6dSxmaWxlVHlwZTpFLHF1YWxpdHk6RixkaXJuYW1lOkFlfSx4ZT0+e2lmKHhlLmVyck1zZyYmeGUuZXJyTXNnLmluZGV4T2YoImZhaWwiKSE9PS0xKXtNKCIiLHhlKTtyZXR1cm59Tih4ZSl9KX0sUV8sWF8pLHFwPVsib25DYW5wbGF5Iiwib25QbGF5Iiwib25QYXVzZSIsIm9uU3RvcCIsIm9uRW5kZWQiLCJvblRpbWVVcGRhdGUiLCJvbkVycm9yIiwib25XYWl0aW5nIiwib25TZWVraW5nIiwib25TZWVrZWQiXSxkYj1bIm9mZkNhbnBsYXkiLCJvZmZQbGF5Iiwib2ZmUGF1c2UiLCJvZmZTdG9wIiwib2ZmRW5kZWQiLCJvZmZUaW1lVXBkYXRlIiwib2ZmRXJyb3IiLCJvZmZXYWl0aW5nIiwib2ZmU2Vla2luZyIsIm9mZlNlZWtlZCJdLHBiPXt0aHJlc2hvbGRzOlswXSxpbml0aWFsUmF0aW86MCxvYnNlcnZlQWxsOiExfSxoYj1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLGdiPTE7ZnVuY3Rpb24gWXAoZT17fSl7cmV0dXJuIGhiLm1hcCh0PT5gJHtOdW1iZXIoZVt0XSl8fDB9cHhgKS5qb2luKCIgIil9Y2xhc3MgS3B7Y29uc3RydWN0b3IodCxuKXt0aGlzLl9wYWdlSWQ9X24odCksdGhpcy5fY29tcG9uZW50PXQsdGhpcy5fb3B0aW9ucz1aLmV4dGVuZCh7fSxwYixuKX1yZWxhdGl2ZVRvKHQsbil7cmV0dXJuIHRoaXMuX29wdGlvbnMucmVsYXRpdmVUb1NlbGVjdG9yPXQsdGhpcy5fb3B0aW9ucy5yb290TWFyZ2luPVlwKG4pLHRoaXN9cmVsYXRpdmVUb1ZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl9vcHRpb25zLnJlbGF0aXZlVG9TZWxlY3Rvcj12b2lkIDAsdGhpcy5fb3B0aW9ucy5yb290TWFyZ2luPVlwKHQpLHRoaXN9b2JzZXJ2ZSh0LG4peyFaLmlzRnVuY3Rpb24obil8fCh0aGlzLl9vcHRpb25zLnNlbGVjdG9yPXQsdGhpcy5fcmVxSWQ9Z2IrKyxqcyh7cmVxSWQ6dGhpcy5fcmVxSWQsY29tcG9uZW50OnRoaXMuX2NvbXBvbmVudCxvcHRpb25zOnRoaXMuX29wdGlvbnMsY2FsbGJhY2s6bn0sdGhpcy5fcGFnZUlkKSl9ZGlzY29ubmVjdCgpe3RoaXMuX3JlcUlkJiZfbCh7cmVxSWQ6dGhpcy5fcmVxSWQsY29tcG9uZW50OnRoaXMuX2NvbXBvbmVudH0sdGhpcy5fcGFnZUlkKX19bGV0IHZiPSR0KCJjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsKGUsdCk9PihlPXNlLnJlc29sdmVDb21wb25lbnRJbnN0YW5jZShlKSxlJiYhX24oZSkmJih0PWUsZT1udWxsKSxlP25ldyBLcChlLHQpOm5ldyBLcChabigpLHQpKSksbWI9MTtjbGFzcyBKcHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9wYWdlSWQ9dC4kcGFnZSYmdC4kcGFnZS5pZCx0aGlzLl9jb21wb25lbnQ9dH1vYnNlcnZlKHQsbil7IVouaXNGdW5jdGlvbihuKXx8KHRoaXMuX3JlcUlkPW1iKyssTGwoe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnQsb3B0aW9uczp0LGNhbGxiYWNrOm59LHRoaXMuX3BhZ2VJZCkpfWRpc2Nvbm5lY3QoKXt0aGlzLl9yZXFJZCYmV3Moe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnR9LHRoaXMuX3BhZ2VJZCl9fWxldCBfYj0kdCgiY3JlYXRlTWVkaWFRdWVyeU9ic2VydmVyIixlPT4oZT1zZS5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIV9uKGUpJiYoZT1udWxsKSxlP25ldyBKcChlKTpuZXcgSnAoWm4oKSkpKSxiYj0wLG1kPXt9O2Z1bmN0aW9uIHliKGUsdCxuLHIpe2xldCBzPXtvcHRpb25zOnJ9LHU9ciYmKCJzdWNjZXNzImluIHJ8fCJmYWlsImluIHJ8fCJjb21wbGV0ZSJpbiByKTtpZih1KXtsZXQgdj1TdHJpbmcoYmIrKyk7cy5jYWxsYmFja0lkPXYsbWRbdl09cn1wdC5pbnZva2VWaWV3TWV0aG9kKGBlZGl0b3IuJHtlfWAse3R5cGU6bixkYXRhOnN9LHQsKHtjYWxsYmFja0lkOnYsZGF0YTpFfSk9Pnt1JiYoc2UuY2FsbE9wdGlvbnMobWRbdl0sRSksZGVsZXRlIG1kW3ZdKX0pfWNsYXNzIEVie2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMucGFnZUlkPW59Zm9ybWF0KHQsbil7dGhpcy5fZXhlYygiZm9ybWF0Iix7bmFtZTp0LHZhbHVlOm59KX1pbnNlcnREaXZpZGVyKCl7dGhpcy5fZXhlYygiaW5zZXJ0RGl2aWRlciIpfWluc2VydEltYWdlKHQpe3RoaXMuX2V4ZWMoImluc2VydEltYWdlIix0KX1pbnNlcnRUZXh0KHQpe3RoaXMuX2V4ZWMoImluc2VydFRleHQiLHQpfXNldENvbnRlbnRzKHQpe3RoaXMuX2V4ZWMoInNldENvbnRlbnRzIix0KX1nZXRDb250ZW50cyh0KXt0aGlzLl9leGVjKCJnZXRDb250ZW50cyIsdCl9Y2xlYXIodCl7dGhpcy5fZXhlYygiY2xlYXIiLHQpfXJlbW92ZUZvcm1hdCh0KXt0aGlzLl9leGVjKCJyZW1vdmVGb3JtYXQiLHQpfXVuZG8odCl7dGhpcy5fZXhlYygidW5kbyIsdCl9cmVkbyh0KXt0aGlzLl9leGVjKCJyZWRvIix0KX1ibHVyKHQpe3RoaXMuX2V4ZWMoImJsdXIiLHQpfWdldFNlbGVjdGlvblRleHQodCl7dGhpcy5fZXhlYygiZ2V0U2VsZWN0aW9uVGV4dCIsdCl9c2Nyb2xsSW50b1ZpZXcodCl7dGhpcy5fZXhlYygic2Nyb2xsSW50b1ZpZXciLHQpfV9leGVjKHQsbil7eWIodGhpcy5pZCx0aGlzLnBhZ2VJZCx0LG4pfX1sZXQgU2I9e2NhbnZhczpVdSxtYXA6Z2QsdmlkZW86aGQsZWRpdG9yOkVifTtmdW5jdGlvbiBacChlKXtpZihlJiZlLmNvbnRleHRJbmZvKXtsZXR7aWQ6dCx0eXBlOm4scGFnZTpyfT1lLmNvbnRleHRJbmZvLHM9U2Jbbl07ZS5jb250ZXh0PW5ldyBzKHQsciksZGVsZXRlIGUuY29udGV4dEluZm99fWNsYXNzIF9ke2NvbnN0cnVjdG9yKHQsbixyLHMpe3RoaXMuX3NlbGVjdG9yUXVlcnk9dCx0aGlzLl9jb21wb25lbnQ9bix0aGlzLl9zZWxlY3Rvcj1yLHRoaXMuX3NpbmdsZT1zfWJvdW5kaW5nQ2xpZW50UmVjdCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHtpZDohMCxkYXRhc2V0OiEwLHJlY3Q6ITAsc2l6ZTohMH0sdCksdGhpcy5fc2VsZWN0b3JRdWVyeX1maWVsZHModCxuKXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHQsbiksdGhpcy5fc2VsZWN0b3JRdWVyeX1zY3JvbGxPZmZzZXQodCl7cmV0dXJuIHRoaXMuX3NlbGVjdG9yUXVlcnkuX3B1c2godGhpcy5fc2VsZWN0b3IsdGhpcy5fY29tcG9uZW50LHRoaXMuX3NpbmdsZSx7aWQ6ITAsZGF0YXNldDohMCxzY3JvbGxPZmZzZXQ6ITB9LHQpLHRoaXMuX3NlbGVjdG9yUXVlcnl9Y29udGV4dCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHtjb250ZXh0OiEwfSx0KSx0aGlzLl9zZWxlY3RvclF1ZXJ5fW5vZGUodCl7cmV0dXJuIHRoaXMuX3NlbGVjdG9yUXVlcnkuX3B1c2godGhpcy5fc2VsZWN0b3IsdGhpcy5fY29tcG9uZW50LHRoaXMuX3NpbmdsZSx7bm9kZTohMH0sdCksdGhpcy5fc2VsZWN0b3JRdWVyeX19Y2xhc3Mgd2J7Y29uc3RydWN0b3IodCl7dGhpcy5fY29tcG9uZW50PXZvaWQgMCx0aGlzLl9wYWdlPXQsdGhpcy5fcXVldWU9W10sdGhpcy5fcXVldWVDYj1bXX1leGVjKHQpe3JldHVybiBpcih0aGlzLl9wYWdlLHRoaXMuX3F1ZXVlLG49PntsZXQgcj10aGlzLl9xdWV1ZUNiO24uZm9yRWFjaCgocyx1KT0+e1ouaXNBcnJheShzKT9zLmZvckVhY2goWnApOlpwKHMpO2xldCB2PXJbdV07Wi5pc0Z1bmN0aW9uKHYpJiZ2LmNhbGwodGhpcyxzKX0pLFouaXNGdW5jdGlvbih0KSYmdC5jYWxsKHRoaXMsbil9KSx0aGlzLl9ub2Rlc1JlZn1pbih0KXtyZXR1cm4gdGhpcy5fY29tcG9uZW50PXNlLnJlc29sdmVDb21wb25lbnRJbnN0YW5jZSh0KSx0aGlzfXNlbGVjdCh0KXtyZXR1cm4gdGhpcy5fbm9kZXNSZWY9bmV3IF9kKHRoaXMsdGhpcy5fY29tcG9uZW50LHQsITApfXNlbGVjdEFsbCh0KXtyZXR1cm4gdGhpcy5fbm9kZXNSZWY9bmV3IF9kKHRoaXMsdGhpcy5fY29tcG9uZW50LHQsITEpfXNlbGVjdFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX25vZGVzUmVmPW5ldyBfZCh0aGlzLG51bGwsIiIsITApfV9wdXNoKHQsbixyLHMsdSl7dGhpcy5fcXVldWUucHVzaCh7Y29tcG9uZW50Om4sc2VsZWN0b3I6dCxzaW5nbGU6cixmaWVsZHM6c30pLHRoaXMuX3F1ZXVlQ2IucHVzaCh1KX19bGV0IENiPSR0KCJjcmVhdGVTZWxlY3RvclF1ZXJ5IixlPT4oZT1zZS5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIV9uKGUpJiYoZT1udWxsKSxuZXcgd2IoZXx8Wm4oKSkpKSxBYj0iY3JlYXRlQW5pbWF0aW9uIixPYj17Zm9ybWF0QXJnczp7fX0sVGI9e2R1cmF0aW9uOk51bWJlcix0aW1pbmdGdW5jdGlvbjpTdHJpbmcsZGVsYXk6TnVtYmVyLHRyYW5zZm9ybU9yaWdpbjpTdHJpbmd9LFBiPXtkdXJhdGlvbjo0MDAsdGltaW5nRnVuY3Rpb246ImxpbmVhciIsZGVsYXk6MCx0cmFuc2Zvcm1PcmlnaW46IjUwJSA1MCUgMCJ9O2NsYXNzIFhwe2NvbnN0cnVjdG9yKHQpe3RoaXMuYWN0aW9ucz1bXSx0aGlzLmN1cnJlbnRUcmFuc2Zvcm09e30sdGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzPVtdLHRoaXMub3B0aW9uPVouZXh0ZW5kKHt9LFBiLHQpfV9nZXRPcHRpb24odCl7bGV0IG49e3RyYW5zaXRpb246Wi5leHRlbmQoe30sdGhpcy5vcHRpb24sdCksdHJhbnNmb3JtT3JpZ2luOiIifTtyZXR1cm4gbi50cmFuc2Zvcm1PcmlnaW49bi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixkZWxldGUgbi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixufV9wdXNoQW5pbWF0ZXModCxuKXt0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXMucHVzaCh7dHlwZTp0LGFyZ3M6bn0pfV9jb252ZXJUeXBlKHQpe3JldHVybiB0LnJlcGxhY2UoL1tBLVpdL2csbj0+YC0ke24udG9Mb3dlckNhc2UoKX1gKX1fZ2V0VmFsdWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIj9gJHt0fXB4YDp0fWV4cG9ydCgpe2xldCB0PXRoaXMuYWN0aW9ucztyZXR1cm4gdGhpcy5hY3Rpb25zPVtdLHthY3Rpb25zOnR9fXN0ZXAodCl7cmV0dXJuIHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcy5mb3JFYWNoKG49PntuLnR5cGUhPT0ic3R5bGUiP3RoaXMuY3VycmVudFRyYW5zZm9ybVtuLnR5cGVdPW46dGhpcy5jdXJyZW50VHJhbnNmb3JtW2Ake24udHlwZX0uJHtuLmFyZ3NbMF19YF09bn0pLHRoaXMuYWN0aW9ucy5wdXNoKHthbmltYXRlczpPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudFRyYW5zZm9ybSksb3B0aW9uOnRoaXMuX2dldE9wdGlvbih0KX0pLHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcz1bXSx0aGlzfX1sZXQgTmI9c2Uub25jZSgoKT0+e2xldCBlPVsibWF0cml4IiwibWF0cml4M2QiLCJyb3RhdGUiLCJyb3RhdGUzZCIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNjYWxlIiwic2NhbGUzZCIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInNrZXciLCJza2V3WCIsInNrZXdZIiwidHJhbnNsYXRlIiwidHJhbnNsYXRlM2QiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiXSx0PVsib3BhY2l0eSIsImJhY2tncm91bmRDb2xvciJdLG49WyJ3aWR0aCIsImhlaWdodCIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdO2UuY29uY2F0KHQsbikuZm9yRWFjaChyPT57WHAucHJvdG90eXBlW3JdPWZ1bmN0aW9uKC4uLnMpe3JldHVybiB0LmNvbmNhdChuKS5pbmNsdWRlcyhyKT90aGlzLl9wdXNoQW5pbWF0ZXMoInN0eWxlIixbdGhpcy5fY29udmVyVHlwZShyKSxuLmluY2x1ZGVzKHIpP3RoaXMuX2dldFZhbHVlKHNbMF0pOnNbMF1dKTp0aGlzLl9wdXNoQW5pbWF0ZXMocixzKSx0aGlzfX0pfSksSWI9JHQoQWIsZT0+KE5iKCksbmV3IFhwKGUpKSxUYixPYiksUXA9Im9uVGFiQmFyTWlkQnV0dG9uVGFwIixrYj1GbihRcCwoKT0+e30pLFJiPSJvbldpbmRvd1Jlc2l6ZSIseGI9Im9mZldpbmRvd1Jlc2l6ZSIsQmI9Rm4oUmIsKCk9Pnt9KSxNYj1paSh4YiwoKT0+e30pLGVoPSJzZXRMb2NhbGUiLExiPSJnZXRMb2NhbGUiLHRoPSJvbkxvY2FsZUNoYW5nZSIsSHU9JHQoTGIsKCk9PntsZXQgZT1UdCh7YWxsb3dEZWZhdWx0OiEwfSk7cmV0dXJuIGUmJmUuJHZtP2UuJHZtLiRsb2NhbGU6ZXQoKS5nZXRMb2NhbGUoKX0pLERiPUZuKHRoLCgpPT57fSksRmI9JHQoZWgsZT0+e2xldCB0PVR0KCk7cmV0dXJuIHQmJnQuJHZtLiRsb2NhbGUhPT1lPyh0LiR2bS4kbG9jYWxlPWUsdnIoKS5mb3JFYWNoKHM9PntwdC5wdWJsaXNoSGFuZGxlcihlaCxlLHMuJHBhZ2UuaWQpfSksZy5yZXF1aXJlTW9kdWxlKCJwbHVzIikuc2V0TGFuZ3VhZ2UoZSkscHQuaW52b2tlT25DYWxsYmFjayh0aCx7bG9jYWxlOmV9KSwhMCk6ITF9KSxWYj1SZSgic2V0UGFnZU1ldGEiLChlLHtyZXNvbHZlOnR9KT0+e3QoVnIoWm4oKSxlKSl9KSxuaD0iZ2V0U2VsZWN0ZWRUZXh0UmFuZ2UiLFViPVJlKG5oLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3B0Lmludm9rZVZpZXdNZXRob2Qobmgse30sdG8oKSxyPT57dHlwZW9mIHIuZW5kPT0idW5kZWZpbmVkIiYmdHlwZW9mIHIuc3RhcnQ9PSJ1bmRlZmluZWQiP24oIm5vIGZvY3VzZWQiKTp0KHIpfSl9KSxnZj17W3NlLk9OX1VOSEFORExFX1JFSkVDVElPTl06W10sW3NlLk9OX1BBR0VfTk9UX0ZPVU5EXTpbXSxbc2UuT05fRVJST1JdOltdLFtzZS5PTl9TSE9XXTpbXSxbc2UuT05fSElERV06W119O2Z1bmN0aW9uICR1KGUsdCl7bGV0IG49VHQoe2FsbG93RGVmYXVsdDohMH0pO2lmKG4mJm4uJHZtKXJldHVybiBwbi5pbmplY3RIb29rKGUsdCxuLiR2bS4kKTtnZltlXS5wdXNoKHQpfWZ1bmN0aW9uIEhiKGUpe09iamVjdC5rZXlzKGdmKS5mb3JFYWNoKHQ9PntnZlt0XS5mb3JFYWNoKG49Pntwbi5pbmplY3RIb29rKHQsbixlKX0pfSl9ZnVuY3Rpb24ganUoZSx0KXtsZXQgbj1UdCh7YWxsb3dEZWZhdWx0OiEwfSk7aWYobiYmbi4kdm0pcmV0dXJuIGhsKG4uJHZtLGUsdCk7Wi5yZW1vdmUoZ2ZbZV0sdCl9ZnVuY3Rpb24gJGIoZSl7JHUoc2UuT05fVU5IQU5ETEVfUkVKRUNUSU9OLGUpfWZ1bmN0aW9uIGpiKGUpe2p1KHNlLk9OX1VOSEFORExFX1JFSkVDVElPTixlKX1mdW5jdGlvbiB6YihlKXskdShzZS5PTl9QQUdFX05PVF9GT1VORCxlKX1mdW5jdGlvbiBXYihlKXtqdShzZS5PTl9QQUdFX05PVF9GT1VORCxlKX1mdW5jdGlvbiBHYihlKXskdShzZS5PTl9FUlJPUixlKX1mdW5jdGlvbiBxYihlKXtqdShzZS5PTl9FUlJPUixlKX1mdW5jdGlvbiBZYihlKXskdShzZS5PTl9TSE9XLGUpfWZ1bmN0aW9uIEtiKGUpe2p1KHNlLk9OX1NIT1csZSl9ZnVuY3Rpb24gSmIoZSl7JHUoc2UuT05fSElERSxlKX1mdW5jdGlvbiBaYihlKXtqdShzZS5PTl9ISURFLGUpfWxldCBYYj0kdCgiZ2V0RW50ZXJPcHRpb25zU3luYyIsKCk9PkdlKCkpLFFiPSR0KCJnZXRMYXVuY2hPcHRpb25zU3luYyIsKCk9PmRjKCkpLHp1LGJkLHlkLHJoO2Z1bmN0aW9uIGloKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaCh0KXt9cmV0dXJuIGV9ZnVuY3Rpb24gRWQoZSl7aWYoZS50eXBlPT09ImVuYWJsZWQiKXlkPSEwLHJoPWUub2ZmbGluZTtlbHNlIGlmKGUudHlwZT09PSJjbGllbnRJZCIpenU9ZS5jaWQsYmQ9ZS5lcnJNc2csb2goenUsZS5lcnJNc2cpO2Vsc2UgaWYoZS50eXBlPT09InB1c2hNc2ciKXtsZXQgdD17dHlwZToicmVjZWl2ZSIsZGF0YTppaChlLm1lc3NhZ2UpfTtmb3IobGV0IG49MDtuPGljLmxlbmd0aCYmKGljW25dKHQpLCF0LnN0b3BwZWQpO24rKyk7fWVsc2UgZS50eXBlPT09ImNsaWNrIiYmaWMuZm9yRWFjaCh0PT57dCh7dHlwZToiY2xpY2siLGRhdGE6aWgoZS5tZXNzYWdlKX0pfSl9bGV0IFNkPVtdO2Z1bmN0aW9uIG9oKGUsdCl7U2QuZm9yRWFjaChuPT57bihlLHQpfSksU2QubGVuZ3RoPTB9bGV0IGV5PVJlKCJnZXRQdXNoQ2xpZW50SWQiLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2lmKHJoKXtjLnB1c2guZ2V0Q2xpZW50SW5mb0FzeW5jKHI9Pnt0KHtjaWQ6ci5jbGllbnRpZH0pfSxyPT57bihyLmNvZGUrIjogIityLm1lc3NhZ2UpfSk7cmV0dXJufVByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0eXBlb2YgeWQ9PSJ1bmRlZmluZWQiJiYoeWQ9ITEsenU9IiIsYmQ9InVuaVB1c2ggaXMgbm90IGVuYWJsZWQiKSxTZC5wdXNoKChyLHMpPT57cj90KHtjaWQ6cn0pOm4ocyl9KSx0eXBlb2YgenUhPSJ1bmRlZmluZWQiJiZvaCh6dSxiZCl9KX0pLGljPVtdLGFoPSExLHR5PWU9PntpYy5pbmRleE9mKGUpPT09LTEmJmljLnB1c2goZSksYWh8fChhaD0hMCxjLnB1c2guYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHQ9PntFZCh7dHlwZToiY2xpY2siLG1lc3NhZ2U6dH0pfSksYy5wdXNoLmFkZEV2ZW50TGlzdGVuZXIoInJlY2VpdmUiLHQ9PntFZCh7dHlwZToicHVzaE1zZyIsbWVzc2FnZTp0fSl9KSl9LG55PWU9PntpZighZSlpYy5sZW5ndGg9MDtlbHNle2xldCB0PWljLmluZGV4T2YoZSk7dD4tMSYmaWMuc3BsaWNlKHQsMSl9fSxyeT0iY2FuSVVzZSIsaXk9W3tuYW1lOiJzY2hlbWEiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0sb3k9ImdldEJhY2tncm91bmRBdWRpb01hbmFnZXIiLGF5PSJtYWtlUGhvbmVDYWxsIixzeT17cGhvbmVOdW1iZXI6U3RyaW5nfSxseT0iYWRkUGhvbmVDb250YWN0IixjeT17Zm9ybWF0QXJnczp7Zmlyc3ROYW1lKGUpe2lmKCFlKXJldHVybiJhZGRQaG9uZUNvbnRhY3Q6ZmFpbCBwYXJhbWV0ZXIgZXJyb3I6IHBhcmFtZXRlci5maXJzdE5hbWUgc2hvdWxkIG5vdCBiZSBlbXB0eTsifX19LHV5PXtmaXJzdE5hbWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxwaG90b0ZpbGVQYXRoOlN0cmluZyxuaWNrTmFtZTpTdHJpbmcsbGFzdE5hbWU6U3RyaW5nLG1pZGRsZU5hbWU6U3RyaW5nLHJlbWFyazpTdHJpbmcsbW9iaWxlUGhvbmVOdW1iZXI6U3RyaW5nLHdlQ2hhdE51bWJlcjpTdHJpbmcsYWRkcmVzc0NvdW50cnk6U3RyaW5nLGFkZHJlc3NTdGF0ZTpTdHJpbmcsYWRkcmVzc0NpdHk6U3RyaW5nLGFkZHJlc3NTdHJlZXQ6U3RyaW5nLGFkZHJlc3NQb3N0YWxDb2RlOlN0cmluZyxvcmdhbml6YXRpb246U3RyaW5nLHRpdGxlOlN0cmluZyx3b3JrRmF4TnVtYmVyOlN0cmluZyx3b3JrUGhvbmVOdW1iZXI6U3RyaW5nLGhvc3ROdW1iZXI6U3RyaW5nLGVtYWlsOlN0cmluZyx1cmw6U3RyaW5nLHdvcmtBZGRyZXNzQ291bnRyeTpTdHJpbmcsd29ya0FkZHJlc3NTdGF0ZTpTdHJpbmcsd29ya0FkZHJlc3NDaXR5OlN0cmluZyx3b3JrQWRkcmVzc1N0cmVldDpTdHJpbmcsd29ya0FkZHJlc3NQb3N0YWxDb2RlOlN0cmluZyxob21lRmF4TnVtYmVyOlN0cmluZyxob21lUGhvbmVOdW1iZXI6U3RyaW5nLGhvbWVBZGRyZXNzQ291bnRyeTpTdHJpbmcsaG9tZUFkZHJlc3NTdGF0ZTpTdHJpbmcsaG9tZUFkZHJlc3NDaXR5OlN0cmluZyxob21lQWRkcmVzc1N0cmVldDpTdHJpbmcsaG9tZUFkZHJlc3NQb3N0YWxDb2RlOlN0cmluZ30sZnk9ImdldENsaXBib2FyZERhdGEiLGR5PSJzZXRDbGlwYm9hcmREYXRhIixweT17Zm9ybWF0QXJnczp7c2hvd1RvYXN0OiEwfSxiZWZvcmVJbnZva2UoKXtocygpfSxiZWZvcmVTdWNjZXNzKGUsdCl7aWYoIXQuc2hvd1RvYXN0KXJldHVybjtsZXR7dDpufT1ldCgpLHI9bigidW5pLnNldENsaXBib2FyZERhdGEuc3VjY2VzcyIpO3ImJk8uc2hvd1RvYXN0KHt0aXRsZTpyLGljb246InN1Y2Nlc3MiLG1hc2s6ITF9KX19LGh5PXtkYXRhOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2hvd1RvYXN0Ont0eXBlOkJvb2xlYW59fSxzaD0ib25BY2NlbGVyb21ldGVyIixneT0ib2ZmQWNjZWxlcm9tZXRlciIsdnk9InN0YXJ0QWNjZWxlcm9tZXRlciIsbXk9InN0b3BBY2NlbGVyb21ldGVyIixsaD0ib25Db21wYXNzIixfeT0ib2ZmQ29tcGFzcyIsYnk9InN0YXJ0Q29tcGFzcyIseXk9InN0b3BDb21wYXNzIixFeT0idmlicmF0ZVNob3J0IixTeT0idmlicmF0ZUxvbmciLGNoPSJvbkJsdWV0b290aERldmljZUZvdW5kIix1aD0ib25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UiLGZoPSJvbkJMRUNvbm5lY3Rpb25TdGF0ZUNoYW5nZSIsZGg9Im9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsd3k9InN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSIsQ3k9e3NlcnZpY2VzOkFycmF5LGFsbG93RHVwbGljYXRlc0tleTpCb29sZWFuLGludGVydmFsOk51bWJlcn0sQXk9ImdldENvbm5lY3RlZEJsdWV0b290aERldmljZXMiLE95PXtzZXJ2aWNlczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH19LFR5PSJjcmVhdGVCTEVDb25uZWN0aW9uIixQeT17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sTnk9ImNsb3NlQkxFQ29ubmVjdGlvbiIsSXk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGt5PSJnZXRCTEVEZXZpY2VTZXJ2aWNlcyIsUnk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHh5PSJnZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MiLEJ5PXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNlcnZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxNeT0ibm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsTHk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHN0YXRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITB9fSxEeT0icmVhZEJMRUNoYXJhY3RlcmlzdGljVmFsdWUiLEZ5PXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNlcnZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGNoYXJhY3RlcmlzdGljSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sVnk9IndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSIsVXk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHZhbHVlOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sSHk9InNldEJMRU1UVSIsJHk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sbXR1Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH19LGp5PSJnZXRCTEVEZXZpY2VSU1NJIix6eT17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0scGg9Im9uQmVhY29uVXBkYXRlIixoaD0ib25CZWFjb25TZXJ2aWNlQ2hhbmdlIixXeT0iZ2V0QmVhY29ucyIsR3k9InN0YXJ0QmVhY29uRGlzY292ZXJ5IixxeT17dXVpZHM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9fSxZeT0ic3RvcEJlYWNvbkRpc2NvdmVyeSIsS3k9ImdldFNjcmVlbkJyaWdodG5lc3MiLEp5PSJzZXRTY3JlZW5CcmlnaHRuZXNzIixaeT0ic2V0S2VlcFNjcmVlbk9uIixYeT0iY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uIixReT0iY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZSIsZTA9WyJmaW5nZXJQcmludCIsImZhY2lhbCIsInNwZWVjaCJdLHQwPXtmb3JtYXRBcmdzOntjaGVja0F1dGhNb2RlKGUsdCl7aWYoIWV8fCFlMC5pbmNsdWRlcyhlKSlyZXR1cm4iY2hlY2tBdXRoTW9kZSBcdTU4NkJcdTUxOTlcdTk1MTlcdThCRUYifX19LG4wPXtjaGVja0F1dGhNb2RlOlN0cmluZ30scjA9InN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbiIsaTA9e2Zvcm1hdEFyZ3M6e3JlcXVlc3RBdXRoTW9kZXMoZSx0KXtpZighZS5pbmNsdWRlcygiZmluZ2VyUHJpbnQiKSYmIWUuaW5jbHVkZXMoImZhY2lhbCIpKXJldHVybiJyZXF1ZXN0QXV0aE1vZGVzIFx1NTg2Qlx1NTE5OVx1OTUxOVx1OEJFRiJ9fX0sbzA9e3JlcXVlc3RBdXRoTW9kZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGNoYWxsZW5nZTpTdHJpbmcsYXV0aENvbnRlbnQ6U3RyaW5nfSxhMD0ic2NhbkNvZGUiLHMwPXtvbmx5RnJvbUNhbWVyYTpCb29sZWFuLHNjYW5UeXBlOkFycmF5LGF1dG9EZWNvZGVDaGFyU2V0OkJvb2xlYW4sc291bmQ6U3RyaW5nLGF1dG9ab29tOkJvb2xlYW59LGwwPVsiZGVmYXVsdCIsIm5vbmUiXSxjMD17Zm9ybWF0QXJnczp7c291bmQoZSx0KXtsMC5pbmNsdWRlcyhlKXx8KHQuc291bmQ9Im5vbmUiKX0sYXV0b1pvb20oZSx0KXt0eXBlb2YgZT09InVuZGVmaW5lZCImJih0LmF1dG9ab29tPSEwKX19fSx1MD0iZ2V0U3lzdGVtU2V0dGluZyIsZjA9ImdldEFwcEF1dGhvcml6ZVNldHRpbmciLGQwPSJvcGVuQXBwQXV0aG9yaXplU2V0dGluZyIscDA9ImdldFN0b3JhZ2UiLGdoPXtrZXk6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0saDA9ImdldFN0b3JhZ2VTeW5jIix2aD1be25hbWU6ImtleSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxnMD0ic2V0U3RvcmFnZSIsdjA9e2tleTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGRhdGE6e3JlcXVpcmVkOiEwfX0sbTA9InNldFN0b3JhZ2VTeW5jIixfMD1be25hbWU6ImtleSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHtuYW1lOiJkYXRhIixyZXF1aXJlZDohMH1dLG1oPSJyZW1vdmVTdG9yYWdlIixiMD1naCx5MD12aCxFMD0ic2F2ZUZpbGUiLFMwPXtmb3JtYXRBcmdzOnt0ZW1wRmlsZVBhdGgoZSx0KXt0LnRlbXBGaWxlUGF0aD1HdChlKX19fSx3MD17dGVtcEZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEMwPSJnZXRTYXZlZEZpbGVMaXN0IixBMD0icmVtb3ZlU2F2ZWRGaWxlIixPMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPUd0KGUpfX19LFQwPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxQMD0iZ2V0RmlsZUluZm8iLE4wPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9R3QoZSl9fX0sSTA9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGswPSJnZXRTYXZlZEZpbGVJbmZvIixSMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPUd0KGUpfX19LHgwPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxCMD0ib3BlbkRvY3VtZW50IixNMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPUd0KGUpfX19LEwwPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGZpbGVUeXBlOlN0cmluZ30sRDA9ImhpZGVLZXlib2FyZCIsRjA9InNob3dLZXlib2FyZCIsVjA9ImNob29zZUxvY2F0aW9uIixVMD17a2V5d29yZDpTdHJpbmcsbGF0aXR1ZGU6TnVtYmVyLGxvbmdpdHVkZTpOdW1iZXJ9LF9oPSJnZXRMb2NhdGlvbiIsYmg9WyJ3Z3M4NCIsImdjajAyIl0sSDA9e2Zvcm1hdEFyZ3M6e3R5cGUoZSx0KXtlPShlfHwiIikudG9Mb3dlckNhc2UoKSxiaC5pbmRleE9mKGUpPT09LTE/dC50eXBlPWJoWzBdOnQudHlwZT1lfSxhbHRpdHVkZShlLHQpe3QuYWx0aXR1ZGU9ZXx8ITF9fX0sJDA9e3R5cGU6U3RyaW5nLGFsdGl0dWRlOkJvb2xlYW59LGowPSJvcGVuTG9jYXRpb24iLHloPShlLHQpPT57aWYodD09PXZvaWQgMClyZXR1cm5gJHtlfSBzaG91bGQgbm90IGJlIGVtcHR5LmA7aWYodHlwZW9mIHQhPSJudW1iZXIiKXtsZXQgbj10eXBlb2YgdDtyZXR1cm4gbj1uWzBdLnRvVXBwZXJDYXNlKCkrbi5zdWJzdHJpbmcoMSksYEV4cGVjdGVkIE51bWJlciwgZ290ICR7bn0gd2l0aCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KHQpfS5gfX0sejA9e2Zvcm1hdEFyZ3M6e2xhdGl0dWRlKGUsdCl7bGV0IG49eWgoImxhdGl0dWRlIixlKTtpZihuKXJldHVybiBuO3QubGF0aXR1ZGU9ZX0sbG9uZ2l0dWRlKGUsdCl7bGV0IG49eWgoImxvbmdpdHVkZSIsZSk7aWYobilyZXR1cm4gbjt0LmxvbmdpdHVkZT1lfSxzY2FsZShlLHQpe2U9TWF0aC5mbG9vcihlKSx0LnNjYWxlPWU+PTUmJmU8PTE4P2U6MTh9fX0sVzA9e2xhdGl0dWRlOk51bWJlcixsb25naXR1ZGU6TnVtYmVyLHNjYWxlOk51bWJlcixuYW1lOlN0cmluZyxhZGRyZXNzOlN0cmluZ30sRzA9ImNob29zZUltYWdlIixxMD17Zm9ybWF0QXJnczp7Y291bnQoZSx0KXsoIWV8fGU8PTApJiYodC5jb3VudD05KX0sc2l6ZVR5cGUoZSx0KXt0LnNpemVUeXBlPWVuKGUsTHIpfSxzb3VyY2VUeXBlKGUsdCl7dC5zb3VyY2VUeXBlPWVuKGUsVHIpfSxleHRlbnNpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgQXJyYXkmJmUubGVuZ3RoPT09MClyZXR1cm4icGFyYW0gZXh0ZW5zaW9uIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlfHwodC5leHRlbnNpb249WyIqIl0pfX19LFkwPXtjb3VudDpOdW1iZXIsc2l6ZVR5cGU6W0FycmF5LFN0cmluZ10sc291cmNlVHlwZTpBcnJheSxleHRlbnNpb246QXJyYXl9LEswPSJjaG9vc2VWaWRlbyIsSjA9e2Zvcm1hdEFyZ3M6e3NvdXJjZVR5cGUoZSx0KXt0LnNvdXJjZVR5cGU9ZW4oZSxUcil9LGNvbXByZXNzZWQ6ITAsbWF4RHVyYXRpb246NjAsY2FtZXJhOiJiYWNrIixleHRlbnNpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgQXJyYXkmJmUubGVuZ3RoPT09MClyZXR1cm4icGFyYW0gZXh0ZW5zaW9uIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlfHwodC5leHRlbnNpb249WyIqIl0pfX19LFowPXtzb3VyY2VUeXBlOkFycmF5LGNvbXByZXNzZWQ6Qm9vbGVhbixtYXhEdXJhdGlvbjpOdW1iZXIsY2FtZXJhOlN0cmluZyxleHRlbnNpb246QXJyYXl9LFgwPSJnZXRJbWFnZUluZm8iLFEwPXtmb3JtYXRBcmdzOntzcmMoZSx0KXt0LnNyYz1HdChlKX19fSxlRT17c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHRFPSJwcmV2aWV3SW1hZ2UiLG5FPXtmb3JtYXRBcmdzOnt1cmxzKGUsdCl7dC51cmxzPWUubWFwKG49PlouaXNTdHJpbmcobikmJm4/R3Qobik6IiIpfSxjdXJyZW50KGUsdCl7dHlwZW9mIGU9PSJudW1iZXIiP3QuY3VycmVudD1lPjAmJmU8dC51cmxzLmxlbmd0aD9lOjA6Wi5pc1N0cmluZyhlKSYmZSYmKHQuY3VycmVudD1HdChlKSl9fX0sckU9e3VybHM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGN1cnJlbnQ6e3R5cGU6W051bWJlcixTdHJpbmddfX0saUU9ImNsb3NlUHJldmlld0ltYWdlIixvRT0iZ2V0VmlkZW9JbmZvIixhRT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9R3QoZSl9fX0sc0U9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxsRT0ic2F2ZUltYWdlVG9QaG90b3NBbGJ1bSIsY0U9e2Zvcm1hdEFyZ3M6e2ZpbGVQYXRoKGUsdCl7dC5maWxlUGF0aD1HdChlKX19fSx1RT17ZmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sZkU9InNhdmVWaWRlb1RvUGhvdG9zQWxidW0iLGRFPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9R3QoZSl9fX0scEU9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGhFPSJnZXRSZWNvcmRlck1hbmFnZXIiLGdFPSJjb21wcmVzc0ltYWdlIix2RT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9R3QoZSl9fX0sbUU9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxfRT0iY29tcHJlc3NWaWRlbyIsYkU9e2Zvcm1hdEFyZ3M6e3NyYyhlLHQpe3Quc3JjPUd0KGUpfX19LHlFPXtzcmM6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxxdWFsaXR5OlN0cmluZyxiaXRyYXRlOk51bWJlcixmcHM6TnVtYmVyLHJlc29sdXRpb246TnVtYmVyfSxFRT0icmVxdWVzdCIsU0U9e0pTT046Impzb24ifSx3RT1bInRleHQiLCJhcnJheWJ1ZmZlciJdLENFPSJ0ZXh0IixFaD1lbmNvZGVVUklDb21wb25lbnQ7ZnVuY3Rpb24gQUUoZSx0KXtsZXQgbj1lLnNwbGl0KCIjIikscj1uWzFdfHwiIjtuPW5bMF0uc3BsaXQoIj8iKTtsZXQgcz1uWzFdfHwiIjtlPW5bMF07bGV0IHU9cy5zcGxpdCgiJiIpLmZpbHRlcihFPT5FKSx2PXt9O3UuZm9yRWFjaChFPT57bGV0IEY9RS5zcGxpdCgiPSIpO3ZbRlswXV09RlsxXX0pO2ZvcihsZXQgRSBpbiB0KWlmKFouaGFzT3duKHQsRSkpe2xldCBGPXRbRV07dHlwZW9mIEY9PSJ1bmRlZmluZWQifHxGPT09bnVsbD9GPSIiOlouaXNQbGFpbk9iamVjdChGKSYmKEY9SlNPTi5zdHJpbmdpZnkoRikpLHZbRWgoRSldPUVoKEYpfXJldHVybiBzPU9iamVjdC5rZXlzKHYpLm1hcChFPT5gJHtFfT0ke3ZbRV19YCkuam9pbigiJiIpLGUrKHM/Ij8iK3M6IiIpKyhyPyIjIityOiIiKX1sZXQgT0U9e21ldGhvZDpTdHJpbmcsZGF0YTpbT2JqZWN0LFN0cmluZyxBcnJheSxBcnJheUJ1ZmZlcl0sdXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyOk9iamVjdCxkYXRhVHlwZTpTdHJpbmcscmVzcG9uc2VUeXBlOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbn0sVEU9e2Zvcm1hdEFyZ3M6e21ldGhvZChlLHQpe3QubWV0aG9kPWhuKChlfHwiIikudG9VcHBlckNhc2UoKSxlcil9LGRhdGEoZSx0KXt0LmRhdGE9ZXx8IiJ9LHVybChlLHQpe3QubWV0aG9kPT09ZXJbMF0mJlouaXNQbGFpbk9iamVjdCh0LmRhdGEpJiZPYmplY3Qua2V5cyh0LmRhdGEpLmxlbmd0aCYmKHQudXJsPUFFKGUsdC5kYXRhKSl9LGhlYWRlcihlLHQpe2xldCBuPXQuaGVhZGVyPWV8fHt9O3QubWV0aG9kIT09ZXJbMF0mJihPYmplY3Qua2V5cyhuKS5maW5kKHI9PnIudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXx8KG5bIkNvbnRlbnQtVHlwZSJdPSJhcHBsaWNhdGlvbi9qc29uIikpfSxkYXRhVHlwZShlLHQpe3QuZGF0YVR5cGU9KGV8fFNFLkpTT04pLnRvTG93ZXJDYXNlKCl9LHJlc3BvbnNlVHlwZShlLHQpe3QucmVzcG9uc2VUeXBlPShlfHwiIikudG9Mb3dlckNhc2UoKSx3RS5pbmRleE9mKHQucmVzcG9uc2VUeXBlKT09PS0xJiYodC5yZXNwb25zZVR5cGU9Q0UpfX19LFBFPSJjb25maWdNVExTIixORT17Y2VydGlmaWNhdGVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sSUU9e2Zvcm1hdEFyZ3M6e2NlcnRpZmljYXRlcyhlKXtpZihlLnNvbWUodD0+Wi50b1Jhd1R5cGUodC5ob3N0KSE9PSJTdHJpbmciKSlyZXR1cm4iXHU1M0MyXHU2NTcwXHU5MTREXHU3RjZFXHU5NTE5XHU4QkVGXHVGRjBDXHU4QkY3XHU3ODZFXHU4QkE0XHU1NDBFXHU5MUNEXHU4QkQ1In19fSxrRT0iZG93bmxvYWRGaWxlIixSRT17Zm9ybWF0QXJnczp7aGVhZGVyKGUsdCl7dC5oZWFkZXI9ZXx8e319fX0seEU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGhlYWRlcjpPYmplY3QsdGltZW91dDpOdW1iZXJ9LEJFPSJ1cGxvYWRGaWxlIixNRT17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXtlJiYodC5maWxlUGF0aD1HdChlKSl9LGhlYWRlcihlLHQpe3QuaGVhZGVyPWV8fHt9fSxmb3JtRGF0YShlLHQpe3QuZm9ybURhdGE9ZXx8e319fX0sTEU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGZpbGVzOkFycmF5LGZpbGVQYXRoOlN0cmluZyxuYW1lOlN0cmluZyxoZWFkZXI6T2JqZWN0LGZvcm1EYXRhOk9iamVjdCx0aW1lb3V0Ok51bWJlcn0sREU9ImNvbm5lY3RTb2NrZXQiLEZFPXtmb3JtYXRBcmdzOntoZWFkZXIoZSx0KXt0LmhlYWRlcj1lfHx7fX0sbWV0aG9kKGUsdCl7dC5tZXRob2Q9aG4oKGV8fCIiKS50b1VwcGVyQ2FzZSgpLGVyKX0scHJvdG9jb2xzKGUsdCl7Wi5pc1N0cmluZyhlKSYmKHQucHJvdG9jb2xzPVtlXSl9fX0sVkU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGhlYWRlcjp7dHlwZTpPYmplY3R9LG1ldGhvZDpTdHJpbmcscHJvdG9jb2xzOltBcnJheSxTdHJpbmddfSxVRT0ic2VuZFNvY2tldE1lc3NhZ2UiLEhFPXtkYXRhOltTdHJpbmcsQXJyYXlCdWZmZXJdfSwkRT0iY2xvc2VTb2NrZXQiLGpFPXtjb2RlOk51bWJlcixyZWFzb246U3RyaW5nfSx6RT0ic3RhcnRMb2NhdGlvblVwZGF0ZSIsU2g9Im9uTG9jYXRpb25DaGFuZ2UiLFdFPSJzdG9wTG9jYXRpb25VcGRhdGUiLEdFPSJvZmZMb2NhdGlvbkNoYW5nZSIscUU9Im9mZkxvY2F0aW9uQ2hhbmdlRXJyb3IiLHdoPSJvbkxvY2F0aW9uQ2hhbmdlRXJyb3IiLENoPVsid2dzODQiLCJnY2owMiJdLFlFPXt0eXBlOlN0cmluZ30sS0U9e2Zvcm1hdEFyZ3M6e3R5cGUoZSx0KXtlPShlfHwiIikudG9Mb3dlckNhc2UoKSxDaC5pbmRleE9mKGUpPT09LTE/dC50eXBlPUNoWzFdOnQudHlwZT1lfX19O2Z1bmN0aW9uIEpFKGUpe2lmKCFaLmlzU3RyaW5nKGUpKXJldHVybiBlO2xldCB0PWUuaW5kZXhPZigiPyIpO2lmKHQ9PT0tMSlyZXR1cm4gZTtsZXQgbj1lLnNsaWNlKHQrMSkudHJpbSgpLnJlcGxhY2UoL14oXD98I3wmKS8sIiIpO2lmKCFuKXJldHVybiBlO2U9ZS5zbGljZSgwLHQpO2xldCByPVtdO3JldHVybiBuLnNwbGl0KCImIikuZm9yRWFjaChzPT57bGV0IHU9cy5yZXBsYWNlKC9cKy9nLCIgIikuc3BsaXQoIj0iKSx2PXUuc2hpZnQoKSxFPXUubGVuZ3RoPjA/dS5qb2luKCI9Iik6IiI7ci5wdXNoKHYrIj0iK2VuY29kZVVSSUNvbXBvbmVudChFKSl9KSxyLmxlbmd0aD9lKyI/IityLmpvaW4oIiYiKTplfWxldCBaRT1bInNsaWRlLWluLXJpZ2h0Iiwic2xpZGUtaW4tbGVmdCIsInNsaWRlLWluLXRvcCIsInNsaWRlLWluLWJvdHRvbSIsImZhZGUtaW4iLCJ6b29tLW91dCIsInpvb20tZmFkZS1vdXQiLCJwb3AtaW4iLCJub25lIl0sWEU9WyJzbGlkZS1vdXQtcmlnaHQiLCJzbGlkZS1vdXQtbGVmdCIsInNsaWRlLW91dC10b3AiLCJzbGlkZS1vdXQtYm90dG9tIiwiZmFkZS1vdXQiLCJ6b29tLWluIiwiem9vbS1mYWRlLWluIiwicG9wLW91dCIsIm5vbmUiXSx1dT17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHdkPSJuYXZpZ2F0ZVRvIixDZD0icmVkaXJlY3RUbyIsQWg9InJlTGF1bmNoIix2Zj0ic3dpdGNoVGFiIixRRT0ibmF2aWdhdGVCYWNrIixtZj0icHJlbG9hZFBhZ2UiLEFkPSJ1blByZWxvYWRQYWdlIixlUz1aLmV4dGVuZCh7fSx1dSxPaChaRSkpLHRTPVouZXh0ZW5kKHtkZWx0YTp7dHlwZTpOdW1iZXJ9fSxPaChYRSkpLG5TPXV1LHJTPXV1LGlTPXV1LG9TPXV1LGFTPXV1LHNTPWZ1KHdkKSxsUz1mdShDZCksY1M9ZnUoQWgpLHVTPWZ1KHZmKSxmUz17Zm9ybWF0QXJnczp7ZGVsdGEoZSx0KXtlPXBhcnNlSW50KGUrIiIpfHwxLHQuZGVsdGE9TWF0aC5taW4odnIoKS5sZW5ndGgtMSxlKX19fSxkUz1mdShtZikscFM9ZnUoQWQpO2Z1bmN0aW9uIE9oKGUpe3JldHVybnthbmltYXRpb25UeXBlOnt0eXBlOlN0cmluZyx2YWxpZGF0b3IodCl7aWYodCYmZS5pbmRleE9mKHQpPT09LTEpcmV0dXJuImAiK3QrImAgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGFuaW1hdGlvblR5cGVgIChzdXBwb3J0ZWQgdmFsdWVzIGFyZTogYCIrZS5qb2luKCJgfGAiKSsiYCkifX0sYW5pbWF0aW9uRHVyYXRpb246e3R5cGU6TnVtYmVyfX19bGV0IF9mO2Z1bmN0aW9uIGhTKCl7X2Y9IiJ9ZnVuY3Rpb24gZnUoZSl7cmV0dXJue2Zvcm1hdEFyZ3M6e3VybDpnUyhlKX0sYmVmb3JlQWxsOmhTfX1mdW5jdGlvbiBnUyhlKXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZighbilyZXR1cm4nTWlzc2luZyByZXF1aXJlZCBhcmdzOiAidXJsIic7bj14bChuKTtsZXQgcz1uLnNwbGl0KCI/IilbMF0sdT1UaShzLCEwKTtpZighdSlyZXR1cm4icGFnZSBgIituKyJgIGlzIG5vdCBmb3VuZCI7aWYoZT09PXdkfHxlPT09Q2Qpe2lmKHUubWV0YS5pc1RhYkJhcilyZXR1cm5gY2FuIG5vdCAke2V9IGEgdGFiYmFyIHBhZ2VgfWVsc2UgaWYoZT09PXZmJiYhdS5tZXRhLmlzVGFiQmFyKXJldHVybiJjYW4gbm90IHN3aXRjaCB0byBuby10YWJCYXIgcGFnZSI7aWYoKGU9PT12Znx8ZT09PW1mKSYmdS5tZXRhLmlzVGFiQmFyJiZyLm9wZW5UeXBlIT09ImFwcExhdW5jaCImJihuPXMpLHUubWV0YS5pc0VudHJ5JiYobj1uLnJlcGxhY2UodS5hbGlhcywiLyIpKSxyLnVybD1KRShuKSxlIT09QWQpe2lmKGU9PT1tZil7aWYoIXUubWV0YS5pc05WdWUpcmV0dXJuImNhbiBub3QgcHJlbG9hZCB2dWUgcGFnZSI7aWYodS5tZXRhLmlzVGFiQmFyKXtsZXQgdj12cigpLEU9dS5wYXRoLnNsaWNlKDEpO2lmKHYuZmluZChGPT5GLnJvdXRlPT09RSkpcmV0dXJuInRhYkJhciBwYWdlIGAiK0UrImAgYWxyZWFkeSBleGlzdHMifXJldHVybn1pZihfZj09PW4mJnIub3BlblR5cGUhPT0iYXBwTGF1bmNoIilyZXR1cm5gJHtfZn0gbG9ja2VkYDtJLnJlYWR5JiYoX2Y9bil9fX1sZXQgdlM9ImhpZGVMb2FkaW5nIixtUz0iaGlkZVRvYXN0IixUaD0ibG9hZEZvbnRGYWNlIixfUz17ZmFtaWx5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc291cmNlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZGVzYzpPYmplY3R9LGJTPVsiI2ZmZmZmZiIsIiMwMDAwMDAiXSx5Uz0ic2V0TmF2aWdhdGlvbkJhckNvbG9yIixFUz17Zm9ybWF0QXJnczp7YW5pbWF0aW9uKGUsdCl7ZXx8KGU9e2R1cmF0aW9uOjAsdGltaW5nRnVuYzoibGluZWFyIn0pLHQuYW5pbWF0aW9uPXtkdXJhdGlvbjplLmR1cmF0aW9ufHwwLHRpbWluZ0Z1bmM6ZS50aW1pbmdGdW5jfHwibGluZWFyIn19fX0sU1M9e2Zyb250Q29sb3I6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwLHZhbGlkYXRvcihlKXtpZihiUy5pbmRleE9mKGUpPT09LTEpcmV0dXJuYGludmFsaWQgZnJvbnRDb2xvciAiJHtlfSJgfX0sYmFja2dyb3VuZENvbG9yOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sYW5pbWF0aW9uOk9iamVjdH0sd1M9InNldE5hdmlnYXRpb25CYXJUaXRsZSIsQ1M9e3RpdGxlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEFTPSJzaG93TmF2aWdhdGlvbkJhckxvYWRpbmciLE9TPSJoaWRlTmF2aWdhdGlvbkJhckxvYWRpbmciLFBoPSJwYWdlU2Nyb2xsVG8iLFRTPXtzY3JvbGxUb3A6TnVtYmVyLHNlbGVjdG9yOlN0cmluZyxkdXJhdGlvbjpOdW1iZXJ9LFBTPXtmb3JtYXRBcmdzOntkdXJhdGlvbjozMDB9fSxOUz0ic2hvd0FjdGlvblNoZWV0IixJUz17aXRlbUxpc3Q6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LHRpdGxlOlN0cmluZyxpdGVtQ29sb3I6U3RyaW5nLHBvcG92ZXI6T2JqZWN0fSxrUz17Zm9ybWF0QXJnczp7aXRlbUNvbG9yOiIjMDAwIn19LFJTPSJzaG93TG9hZGluZyIseFM9e3RpdGxlOlN0cmluZyxtYXNrOkJvb2xlYW59LEJTPXtmb3JtYXRBcmdzOnt0aXRsZToiIixtYXNrOiExfX0sTVM9InNob3dNb2RhbCIsTFM9e3RpdGxlOlN0cmluZyxjb250ZW50OlN0cmluZyxzaG93Q2FuY2VsOkJvb2xlYW4sY2FuY2VsVGV4dDpTdHJpbmcsY2FuY2VsQ29sb3I6U3RyaW5nLGNvbmZpcm1UZXh0OlN0cmluZyxjb25maXJtQ29sb3I6U3RyaW5nfSxEUz17YmVmb3JlSW52b2tlKCl7JHIoKX0sZm9ybWF0QXJnczp7dGl0bGU6IiIsY29udGVudDoiIixwbGFjZWhvbGRlclRleHQ6IiIsc2hvd0NhbmNlbDohMCxlZGl0YWJsZTohMSxjYW5jZWxUZXh0KGUsdCl7aWYoIVouaGFzT3duKHQsImNhbmNlbFRleHQiKSl7bGV0e3Q6bn09ZXQoKTt0LmNhbmNlbFRleHQ9bigidW5pLnNob3dNb2RhbC5jYW5jZWwiKX19LGNhbmNlbENvbG9yOiIjMDAwIixjb25maXJtVGV4dChlLHQpe2lmKCFaLmhhc093bih0LCJjb25maXJtVGV4dCIpKXtsZXR7dDpufT1ldCgpO3QuY29uZmlybVRleHQ9bigidW5pLnNob3dNb2RhbC5jb25maXJtIil9fSxjb25maXJtQ29sb3I6c2UuUFJJTUFSWV9DT0xPUn19LEZTPSJzaG93VG9hc3QiLFZTPVsic3VjY2VzcyIsImxvYWRpbmciLCJub25lIiwiZXJyb3IiXSxVUz17dGl0bGU6U3RyaW5nLGljb246U3RyaW5nLGltYWdlOlN0cmluZyxkdXJhdGlvbjpOdW1iZXIsbWFzazpCb29sZWFufSxIUz17Zm9ybWF0QXJnczp7dGl0bGU6IiIsaWNvbihlLHQpe3QuaWNvbj1obihlLFZTKX0saW1hZ2UoZSx0KXtlP3QuaW1hZ2U9R3QoZSk6dC5pbWFnZT0iIn0sZHVyYXRpb246MTUwMCxtYXNrOiExfX0sJFM9InN0YXJ0UHVsbERvd25SZWZyZXNoIixqUz0ic3RvcFB1bGxEb3duUmVmcmVzaCIsV3U9e2luZGV4Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH19LG9jPXtiZWZvcmVJbnZva2UoKXtsZXQgZT1kcigpO2lmKGUmJiFlLmlzVGFiQmFyKXJldHVybiJub3QgVGFiQmFyIHBhZ2UifSxmb3JtYXRBcmdzOntpbmRleChlKXtpZighSS50YWJCYXIubGlzdFtlXSlyZXR1cm4idGFiYmFyIGl0ZW0gbm90IGZvdW5kIn19fSx6Uz0ic2V0VGFiQmFySXRlbSIsV1M9Wi5leHRlbmQoe3RleHQ6U3RyaW5nLGljb25QYXRoOlN0cmluZyxzZWxlY3RlZEljb25QYXRoOlN0cmluZyxwYWdlUGF0aDpTdHJpbmd9LFd1KSxHUz17YmVmb3JlSW52b2tlOm9jLmJlZm9yZUludm9rZSxmb3JtYXRBcmdzOlouZXh0ZW5kKHtwYWdlUGF0aChlLHQpe2UmJih0LnBhZ2VQYXRoPXNlLnJlbW92ZUxlYWRpbmdTbGFzaChlKSl9fSxvYy5mb3JtYXRBcmdzKX0scVM9InNldFRhYkJhclN0eWxlIixZUz17Y29sb3I6U3RyaW5nLHNlbGVjdGVkQ29sb3I6U3RyaW5nLGJhY2tncm91bmRDb2xvcjpTdHJpbmcsYmFja2dyb3VuZEltYWdlOlN0cmluZyxiYWNrZ3JvdW5kUmVwZWF0OlN0cmluZyxib3JkZXJTdHlsZTpTdHJpbmd9LEtTPS9eKGxpbmVhcnxyYWRpYWwpLWdyYWRpZW50XCguKz9cKTs/JC8sSlM9e2JlZm9yZUludm9rZTpvYy5iZWZvcmVJbnZva2UsZm9ybWF0QXJnczp7YmFja2dyb3VuZEltYWdlKGUsdCl7ZSYmIUtTLnRlc3QoZSkmJih0LmJhY2tncm91bmRJbWFnZT1HdChlKSl9LGJvcmRlclN0eWxlKGUsdCl7ZSYmKHQuYm9yZGVyU3R5bGU9ZT09PSJ3aGl0ZSI/IndoaXRlIjoiYmxhY2siKX19fSxaUz0iaGlkZVRhYkJhciIsTmg9e2FuaW1hdGlvbjpCb29sZWFufSxYUz0ic2hvd1RhYkJhciIsUVM9TmgsZXc9ImhpZGVUYWJCYXJSZWREb3QiLHR3PVd1LG53PW9jLHJ3PSJzaG93VGFiQmFyUmVkRG90Iixpdz1XdSxvdz1vYyxhdz0icmVtb3ZlVGFiQmFyQmFkZ2UiLHN3PVd1LGx3PW9jLGN3PSJzZXRUYWJCYXJCYWRnZSIsdXc9Wi5leHRlbmQoe3RleHQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sV3UpLGZ3PXtiZWZvcmVJbnZva2U6b2MuYmVmb3JlSW52b2tlLGZvcm1hdEFyZ3M6Wi5leHRlbmQoe3RleHQoZSx0KXtzZS5nZXRMZW4oZSk+PTQmJih0LnRleHQ9Ii4uLiIpfX0sb2MuZm9ybWF0QXJncyl9LGR3PSJnZXRQcm92aWRlciIscHc9e3NlcnZpY2U6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0saHc9ImxvZ2luIixndz17cHJvdmlkZXI6U3RyaW5nLHNjb3BlczpbU3RyaW5nLEFycmF5XSx0aW1lb3V0Ok51bWJlcix1bml2ZXJpZnlTdHlsZTpPYmplY3Qsb25seUF1dGhvcml6ZTpCb29sZWFufSx2dz0iZ2V0VXNlckluZm8iLG13PXtwcm92aWRlcjpTdHJpbmcsd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sdGltZW91dDpOdW1iZXIsbGFuZzpTdHJpbmd9LF93PSJnZ2V0VXNlclByb2ZpbGVnZXRVc2VyUHJvZmlsZSIsYnc9e3Byb3ZpZGVyOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbix0aW1lb3V0Ok51bWJlcixsYW5nOlN0cmluZ30seXc9InByZUxvZ2luIixFdz17VU5JVkVSSUZZOiJ1bml2ZXJpZnkifSxTdz17Zm9ybWF0QXJnczp7cHJvdmlkZXIoZSx0KXtpZihPYmplY3QudmFsdWVzKEV3KS5pbmRleE9mKFN0cmluZyhlKSk8MClyZXR1cm4icHJvdmlkZXIgZXJyb3IifX19LHd3PXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxDdz0iY2xvc2VBdXRoVmlldyIsQXc9ImdldENoZWNrQm94U3RhdGUiLE93PSJnZXRVbml2ZXJpZnlNYW5hZ2VyIixUdz0ic2hhcmUiLEloPVsiV1hTY2VuZVNlc3Npb24iLCJXWFNjZW5lVGltZWxpbmUiLCJXWFNjZW5lRmF2b3JpdGUiXSxQdz17Zm9ybWF0QXJnczp7c2NlbmUoZSx0KXtsZXR7cHJvdmlkZXI6bixvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpyfT10O2lmKG49PT0id2VpeGluIiYmIXImJighZXx8IUloLmluY2x1ZGVzKGUpKSlyZXR1cm5gXHU1MjA2XHU0RUFCXHU1MjMwXHU1RkFFXHU0RkUxXHU2NUY2XHVGRjBDc2NlbmVcdTVGQzVcdTk4N0JcdTRFM0FcdTRFRTVcdTRFMEJcdTUxNzZcdTRFMkRcdTRFMDBcdTRFMkFcdUZGMUEke0loLmpvaW4oIlx1MzAwMSIpfWB9LHN1bW1hcnkoZSx0KXtpZih0LnR5cGU9PT0xJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU3RUFGXHU2NTg3XHU2NzJDXHU2NUY2XHVGRjBDc3VtbWFyeVx1NUZDNVx1NTg2QiJ9LGhyZWYoZSx0KXtpZih0LnR5cGU9PT0wJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1NkZFXHU2NTg3XHU2NUY2XHVGRjBDaHJlZlx1NUZDNVx1NTg2QiJ9LGltYWdlVXJsKGUsdCl7aWYoWzAsMiw1XS5pbmNsdWRlcyhOdW1iZXIodC50eXBlKSkmJiFlKXJldHVybiJcdTUyMDZcdTRFQUJcdTU2RkVcdTY1ODdcdTMwMDFcdTdFQUZcdTU2RkVcdTcyNDdcdTMwMDFcdTVDMEZcdTdBMEJcdTVFOEZcdTY1RjZcdUZGMENpbWFnZVVybFx1NUZDNVx1NTg2Qlx1RkYwQ1x1NjNBOFx1ODM1MFx1NEY3Rlx1NzUyOFx1NUMwRlx1NEU4RTIwS2JcdTc2ODRcdTU2RkVcdTcyNDcifSxtZWRpYVVybChlLHQpe2lmKFszLDRdLmluY2x1ZGVzKE51bWJlcih0LnR5cGUpKSYmIWUpcmV0dXJuIlx1NTIwNlx1NEVBQlx1OTdGM1x1NEU1MFx1MzAwMVx1ODlDNlx1OTg5MVx1NjVGNlx1RkYwQ21lZGlhVXJsXHU1RkM1XHU1ODZCIn0sbWluaVByb2dyYW0oZSx0KXtpZih0LnR5cGU9PT01JiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1QzBGXHU3QTBCXHU1RThGXHU2NUY2XHVGRjBDbWluaVByb2dyYW1cdTVGQzVcdTU4NkIifSxjb3JwaWQoZSx0KXtpZih0Lm9wZW5DdXN0b21lclNlcnZpY2VDaGF0JiYhZSlyZXR1cm4iXHU0RjdGXHU3NTI4XHU2MjUzXHU1RjAwXHU1QkEyXHU2NzBEXHU1MjlGXHU4MEZEXHU2NUY2IGNvcnBpZCBcdTVGQzVcdTU4NkIifSxjdXN0b21lclVybChlLHQpe2lmKHQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQmJiFlKXJldHVybiJcdTRGN0ZcdTc1MjhcdTYyNTNcdTVGMDBcdTVCQTJcdTY3MERcdTUyOUZcdTgwRkRcdTY1RjYgY3VzdG9tZXJVcmwgXHU1RkM1XHU1ODZCIn19fSxOdz17cHJvdmlkZXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx0eXBlOk51bWJlcix0aXRsZTpTdHJpbmcsc2NlbmU6U3RyaW5nLHN1bW1hcnk6U3RyaW5nLGhyZWY6U3RyaW5nLGltYWdlVXJsOlN0cmluZyxtZWRpYVVybDpTdHJpbmcsbWluaVByb2dyYW06T2JqZWN0fSxJdz0ic2hhcmVXaXRoU3lzdGVtIixraD1bInRleHQiLCJpbWFnZSJdLGt3PXtmb3JtYXRBcmdzOnt0eXBlKGUsdCl7aWYoZSYmIWtoLmluY2x1ZGVzKGUpKXJldHVybiJcdTUyMDZcdTRFQUJcdTUzQzJcdTY1NzAgdHlwZSBcdTRFMERcdTZCNjNcdTc4NkVcdTMwMDJcdTUzRUFcdTY1MkZcdTYzMDF0ZXh0XHUzMDAxaW1hZ2UiO3QudHlwZT1obihlLGtoKX19fSxSdz17dHlwZTpTdHJpbmcsc3VtbWFyeTpTdHJpbmcsaHJlZjpTdHJpbmcsaW1hZ2VVcmw6U3RyaW5nfSx4dz0icmVxdWVzdFBheW1lbnQiLEJ3PXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LG9yZGVySW5mbzp7dHlwZTpbU3RyaW5nLE9iamVjdF0scmVxdWlyZWQ6ITB9LHRpbWVTdGFtcDpTdHJpbmcsbm9uY2VTdHI6U3RyaW5nLHBhY2thZ2U6U3RyaW5nLHNpZ25UeXBlOlN0cmluZyxwYXlTaWduOlN0cmluZ30sTXc9ImNyZWF0ZVB1c2hNZXNzYWdlIixMdz17Zm9ybWF0QXJnczp7Y29udGVudChlKXtpZighZSlyZXR1cm4iY29udGVudCBpcyByZXF1aXJlZCJ9fX0sRHc9ImdldENoYW5uZWxNYW5hZ2VyIixGdz0iY3JlYXRlUmV3YXJkZWRWaWRlb0FkIixWdz17Zm9ybWF0QXJnczp7YWRwaWQ6IiIsYWRVbml0SWQ6IiJ9fSxVdz17YWRwaWQ6U3RyaW5nLGFkVW5pdElkOlN0cmluZ30sSHc9ImNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0FkIiwkdz17Zm9ybWF0QXJnczp7YWRwaWQ6IiJ9fSxqdz17YWRwaWQ6U3RyaW5nfSx6dz0iY3JlYXRlSW50ZXJzdGl0aWFsQWQiLFd3PXtmb3JtYXRBcmdzOnthZHBpZDoiIixhZFVuaXRJZDoiIn19LEd3PXthZHBpZDpTdHJpbmcsYWRVbml0SWQ6U3RyaW5nfSxxdz0iY3JlYXRlSW50ZXJhY3RpdmVBZCIsWXc9e2Zvcm1hdEFyZ3M6e2FkcGlkKGUsdCl7aWYoIWUpcmV0dXJuImFkcGlkIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlJiYodC5hZHBpZD1lKX0scHJvdmlkZXIoZSx0KXtpZighZSlyZXR1cm4icHJvdmlkZXIgc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2UmJih0LnByb3ZpZGVyPWUpfX19LEt3PXthZHBpZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHByb3ZpZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19O2Z1bmN0aW9uIE5jKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2RlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSxaLmlzRnVuY3Rpb24odCkmJihyPXQocikpLGUocil9fWZ1bmN0aW9uIEJyKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3I9cnx8e30sdD1yLm1lc3NhZ2V8fHR8fCIiLGRlbGV0ZSByLm1lc3NhZ2UsZSh0LFouZXh0ZW5kKHtjb2RlOjB9LHIpKX19ZnVuY3Rpb24gZHUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlKCkoZnVuY3Rpb24ocil7ciYmKGRlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSkscHQuaW52b2tlT25DYWxsYmFjayh0LHIpfSl9fWZ1bmN0aW9uIFJpKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocix7cmVzb2x2ZTpzLHJlamVjdDp1fSl7ZSgpKFouZXh0ZW5kKHt9LFouaXNGdW5jdGlvbih0KT90KHIpOnIse3N1Y2Nlc3M6TmMocyxuKSxmYWlsOkJyKHUpfSkpfX1mdW5jdGlvbiBHdShlPSIiKXtpZighKEkudGFiQmFyJiZaLmlzQXJyYXkoSS50YWJCYXIubGlzdCkpKXJldHVybiExO3RyeXtpZighZSl7bGV0IG49T3QoKTtpZighbi5sZW5ndGgpcmV0dXJuITE7bGV0IHI9bltuLmxlbmd0aC0xXTtyZXR1cm4gcj9GdChyKS5tZXRhLmlzVGFiQmFyOiExfS9eXC8vLnRlc3QoZSl8fChlPXNlLmFkZExlYWRpbmdTbGFzaChlKSk7bGV0IHQ9VGkoZSk7cmV0dXJuIHQmJnQubWV0YS5pc1RhYkJhcn1jYXRjaCh0KXt9cmV0dXJuITF9bGV0IEJzPSJfX1RZUEUiLEp3PSJ1bmktc3RvcmFnZS1rZXlzIjtmdW5jdGlvbiBPZChlKXtsZXQgdD1bIm9iamVjdCIsInN0cmluZyIsIm51bWJlciIsImJvb2xlYW4iLCJ1bmRlZmluZWQiXTt0cnl7bGV0IG49Wi5pc1N0cmluZyhlKT9KU09OLnBhcnNlKGUpOmUscj1uLnR5cGU7aWYodC5pbmRleE9mKHIpPj0wKXtsZXQgcz1PYmplY3Qua2V5cyhuKTtpZihzLmxlbmd0aD09PTImJiJkYXRhImluIG4pe2lmKHR5cGVvZiBuLmRhdGE9PT1yKXJldHVybiBuLmRhdGE7aWYocj09PSJvYmplY3QiJiYvXlxkezR9LVxkezJ9LVxkezJ9VFxkezJ9XDpcZHsyfVw6XGR7Mn1cLlxkezN9WiQvLnRlc3Qobi5kYXRhKSlyZXR1cm4gbmV3IERhdGUobi5kYXRhKX1lbHNlIGlmKHMubGVuZ3RoPT09MSlyZXR1cm4iIn19Y2F0Y2gobil7fX1sZXQgWnc9JHQobTAsKGUsdCk9PntsZXQgbj10eXBlb2YgdCxyPW49PT0ic3RyaW5nIj90OkpTT04uc3RyaW5naWZ5KHt0eXBlOm4sZGF0YTp0fSk7dHJ5e249PT0ic3RyaW5nIiYmT2QocikhPT12b2lkIDA/Yy5zdG9yYWdlLnNldEl0ZW0oZStCcyxuKTpjLnN0b3JhZ2UucmVtb3ZlSXRlbShlK0JzKSxjLnN0b3JhZ2Uuc2V0SXRlbShlLHIpfWNhdGNoKHMpe319LF8wKSxYdz1SZShnMCwoe2tleTplLGRhdGE6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57bGV0IHM9dHlwZW9mIHQsdT1zPT09InN0cmluZyI/dDpKU09OLnN0cmluZ2lmeSh7dHlwZTpzLGRhdGE6dH0pO3RyeXtsZXQgdj1jLnN0b3JhZ2U7cz09PSJzdHJpbmciJiZPZCh1KSE9PXZvaWQgMD92LnNldEl0ZW1Bc3luYyhlK0JzLHMsKCk9Pnt9KTp2LnJlbW92ZUl0ZW1Bc3luYyhlK0JzLCgpPT57fSksdi5zZXRJdGVtQXN5bmMoZSx1LG4sQnIocikpfWNhdGNoKHYpe3Iodi5tZXNzYWdlKX19LHYwKTtmdW5jdGlvbiBUZChlLHQpe2xldCBuPXQ7aWYoZSE9PSJzdHJpbmcifHxlPT09InN0cmluZyImJnQ9PT0neyJ0eXBlIjoidW5kZWZpbmVkIn0nKXRyeXtsZXQgcj1KU09OLnBhcnNlKHQpLHM9T2Qocik7aWYocyE9PXZvaWQgMCluPXM7ZWxzZSBpZihlJiYobj1yLFouaXNTdHJpbmcocikpKXtyPUpTT04ucGFyc2Uocik7bGV0IHU9dHlwZW9mIHI7dT09PSJudW1iZXIiJiZlPT09ImRhdGUiP249bmV3IERhdGUocik6dT09PShbIm51bGwiLCJhcnJheSJdLmluZGV4T2YoZSk8MD9lOiJvYmplY3QiKSYmKG49cil9fWNhdGNoKHIpe31yZXR1cm4gbn1sZXQgUXc9JHQoaDAsZT0+e2xldCB0PWMuc3RvcmFnZS5nZXRJdGVtKGUpLHI9KGMuc3RvcmFnZS5nZXRJdGVtKGUrQnMpfHwiIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gWi5pc1N0cmluZyh0KT9UZChyLHQpOiIifSx2aCksZUM9UmUocDAsKHtrZXk6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9Yy5zdG9yYWdlO3IuZ2V0SXRlbUFzeW5jKGUsZnVuY3Rpb24ocyl7ci5nZXRJdGVtQXN5bmMoZStCcyxmdW5jdGlvbih1KXtsZXQgRT0odS5kYXRhfHwiIikudG9Mb3dlckNhc2UoKTt0KHtkYXRhOlRkKEUscy5kYXRhKX0pfSxmdW5jdGlvbigpe3Qoe2RhdGE6VGQoIiIscy5kYXRhKX0pfSl9LEJyKG4pKX0sZ2gpLHRDPSR0KG1oLGU9PntjLnN0b3JhZ2UucmVtb3ZlSXRlbShlK0JzKSxjLnN0b3JhZ2UucmVtb3ZlSXRlbShlKX0seTApLG5DPVJlKG1oLCh7a2V5OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2Muc3RvcmFnZS5yZW1vdmVJdGVtQXN5bmMoZStCcywoKT0+e30pLGMuc3RvcmFnZS5yZW1vdmVJdGVtQXN5bmMoZSx0LEJyKG4pKX0sYjApLHJDPSR0KCJjbGVhclN0b3JhZ2VTeW5jIiwoKT0+e2Muc3RvcmFnZS5jbGVhcigpfSksaUM9UmUoImNsZWFyU3RvcmFnZSIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57Yy5zdG9yYWdlLmNsZWFyQXN5bmModCxCcihuKSl9KSxSaD0kdCgiZ2V0U3RvcmFnZUluZm9TeW5jIiwoKT0+e2xldCBlPWMuc3RvcmFnZS5nZXRMZW5ndGgoKXx8MCx0PVtdLG49MDtmb3IobGV0IHI9MDtyPGU7cisrKXtsZXQgcz1jLnN0b3JhZ2Uua2V5KHIpO2lmKHMhPT1KdyYmKHMuaW5kZXhPZihCcyk8MHx8cy5pbmRleE9mKEJzKStCcy5sZW5ndGghPT1zLmxlbmd0aCkpe2xldCB1PWMuc3RvcmFnZS5nZXRJdGVtKHMpO24rPXMubGVuZ3RoK3UubGVuZ3RoLHQucHVzaChzKX19cmV0dXJue2tleXM6dCxjdXJyZW50U2l6ZTpNYXRoLmNlaWwobioyLzEwMjQpLGxpbWl0U2l6ZTpOdW1iZXIuTUFYX1ZBTFVFfX0pLG9DPVJlKCJnZXRTdG9yYWdlSW5mbyIsKGUse3Jlc29sdmU6dH0pPT57dChSaCgpKX0pLGFDPVJlKFAwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2MuaW8uZ2V0RmlsZUluZm8oWi5leHRlbmQoZSx7c3VjY2VzczpOYyh0KSxmYWlsOkJyKG4pfSkpfSxJMCxOMCksc0M9MCx4aD0idW5pYXBwX3NhdmUiLGxDPWBfZG9jLyR7eGh9YDtmdW5jdGlvbiBjQyhlLHQpe3Q9dHx8ZnVuY3Rpb24oKXt9LGMuaW8ucmVxdWVzdEZpbGVTeXN0ZW0oYy5pby5QUklWQVRFX0RPQyxuPT57bi5yb290LmdldERpcmVjdG9yeSh4aCx7Y3JlYXRlOiEwfSxlLHQpfSx0KX1sZXQgdUM9UmUoRTAsKHt0ZW1wRmlsZVBhdGg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9QnIobikscz1gJHtEYXRlLm5vdygpfSR7c0MrK30ke3lzKGUpfWA7Yy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsdT0+e2NDKHY9Pnt1LmNvcHlUbyh2LHMsKCk9PntsZXQgRT1sQysiLyIrczt0KHtzYXZlZEZpbGVQYXRoOkV9KX0scil9LHIpfSxyKX0sdzAsUzApLGZDPSJ1bmlhcHBfc2F2ZSI7ZnVuY3Rpb24gZEMoZSx0KXt0PXR8fGZ1bmN0aW9uKCl7fSxjLmlvLnJlcXVlc3RGaWxlU3lzdGVtKGMuaW8uUFJJVkFURV9ET0Msbj0+e24ucm9vdC5nZXREaXJlY3RvcnkoZkMse2NyZWF0ZTohMH0sZSx0KX0sdCl9bGV0IHBDPVJlKEMwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPUJyKG4pO2RDKHM9Pnt2YXIgdT1zLmNyZWF0ZVJlYWRlcigpLHY9W107dS5yZWFkRW50cmllcyhFPT57RSYmRS5sZW5ndGg/RS5mb3JFYWNoKEY9PntGLmdldE1ldGFkYXRhKE49Pnt2LnB1c2goe2ZpbGVQYXRoOmMuaW8uY29udmVydEFic29sdXRlRmlsZVN5c3RlbShGLmZ1bGxQYXRoKSxjcmVhdGVUaW1lOk4ubW9kaWZpY2F0aW9uVGltZS5nZXRUaW1lKCksc2l6ZTpOLnNpemV9KSx2Lmxlbmd0aD09PUUubGVuZ3RoJiZ0KHtmaWxlTGlzdDp2fSl9LHIsITEpfSk6dCh7ZmlsZUxpc3Q6dn0pfSxyKX0scil9KSxoQz1SZShrMCwoe2ZpbGVQYXRoOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPUJyKG4pO2MuaW8ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChlLHM9PntzLmdldE1ldGFkYXRhKHU9Pnt0KHtjcmVhdGVUaW1lOnUubW9kaWZpY2F0aW9uVGltZS5nZXRUaW1lKCksc2l6ZTp1LnNpemV9KX0sciwhMSl9LHIpfSx4MCxSMCksZ0M9UmUoQTAsKHtmaWxlUGF0aDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1CcihuKTtjLmlvLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZSxzPT57cy5yZW1vdmUoKCk9Pnt0KCl9LHIpfSxyKX0sVDAsTzApLHZDPVJlKEIwLCh7ZmlsZVBhdGg6ZSxmaWxlVHlwZTp0fSx7cmVzb2x2ZTpuLHJlamVjdDpyfSk9PntsZXQgcz1CcihyKTtjLnJ1bnRpbWUub3BlbkRvY3VtZW50KEd0KGUpLHZvaWQgMCxuLHMpfSxMMCxNMCksbUM9JHQocnksZT0+ISFaLmhhc093bihPLGUpLGl5KSxxdSxCaD1jLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZTtmdW5jdGlvbiBfQyhlKXtCaD1lfWZ1bmN0aW9uIE1oKGUpe3F1PWUsQmgoZSl9Yy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU9TWg7ZnVuY3Rpb24gY2woZSl7aWYoIWUpe2xldCB0PVZuKCk7aWYoIXR8fChlPUZ0KHQpLnN0YXR1c0JhclN0eWxlLCFlfHxlPT09cXUpKXJldHVybn1lIT09cXUmJihxdT1lLGMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKGUpKX1mdW5jdGlvbiBMaChlKXtwdC5vbihzZS5PTl9USEVNRV9DSEFOR0UsZSl9ZnVuY3Rpb24gYkMoZSl7cHQub2ZmKHNlLk9OX1RIRU1FX0NIQU5HRSxlKX1mdW5jdGlvbiB5Qygpe3JldHVybiBEaCgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsifWZ1bmN0aW9uIERoKCl7cmV0dXJuIGMubmF2aWdhdG9yLmdldFVJU3R5bGUoKX1mdW5jdGlvbiBFQygpe2lmKEkuZGFya21vZGUpe2xldCBlPXlDKCk7Y2woZSksYm4oKS5mb3JFYWNoKG49PntGdChuKS5zdGF0dXNCYXJTdHlsZT1lfSl9fWZ1bmN0aW9uIFBkKGUpe2lmKEkuZGFya21vZGUpe2xldCB0PXt9LG49Yy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpLHI9WXUoKTtyZXR1cm4gciYmci5ob3N0VGhlbWUmJihuPXIuaG9zdFRoZW1lKSx0PXNlLm5vcm1hbGl6ZVN0eWxlcyhlLEkudGhlbWVDb25maWcsbiksdH1yZXR1cm4gZX1mdW5jdGlvbiBTQyhlLHQpe2lmKEkuZGFya21vZGUpe2xldCBuPSgpPT57bGV0e2xpc3Q6cj1bXSxjb2xvcjpzLHNlbGVjdGVkQ29sb3I6dSxiYWNrZ3JvdW5kQ29sb3I6dixib3JkZXJTdHlsZTpFLG1pZEJ1dHRvbjpGfT1QZCh0KTtlJiYoZS5zZXRUYWJCYXJTdHlsZSh7Y29sb3I6cyxzZWxlY3RlZENvbG9yOnUsYmFja2dyb3VuZENvbG9yOnYsYm9yZGVyU3R5bGU6RSxtaWRCdXR0b246Rn0pLGUuc2V0VGFiQmFySXRlbXMoe2xpc3Q6ci5tYXAoTj0+KHtpY29uUGF0aDpOLmljb25QYXRoLHNlbGVjdGVkSWNvblBhdGg6Ti5zZWxlY3RlZEljb25QYXRoLHZpc2libGU6Ti52aXNpYmxlfSkpfSkpfTtuKCksTGgobil9fWZ1bmN0aW9uIEZoKGUsdCl7aWYoSS5kYXJrbW9kZSl7bGV0IG49KCk9PntsZXQgcj10KCk7ci5hbmltYXRpb25BbHBoYUJHQ29sb3Isci5iYWNrZ3JvdW5kLHIuYmFja2dyb3VuZENvbG9yQm90dG9tLHIuYmFja2dyb3VuZENvbG9yVG9wO3ZhciBzPXIudGl0bGVOVmlldzt0eXBlb2YgcyE9InVuZGVmaW5lZCImJnR5cGVvZiBzPT0ib2JqZWN0IiYmKHMuYmFja2dyb3VuZENvbG9yLHMudGl0bGVDb2xvciksZSYmZS5zZXRTdHlsZShyKX07TGgobiksZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PmJDKG4pKX19bGV0IEljLE5kPSEwLGhyO2Z1bmN0aW9uIHdDKGUsdCxuKXshaHJ8fChlPT09Im5vbmUiPyhoci5oaWRlVGFiQmFyUmVkRG90KHtpbmRleDp0fSksaHIucmVtb3ZlVGFiQmFyQmFkZ2Uoe2luZGV4OnR9KSk6ZT09PSJ0ZXh0Ij9oci5zZXRUYWJCYXJCYWRnZSh7aW5kZXg6dCx0ZXh0Om59KTplPT09InJlZERvdCImJmhyLnNob3dUYWJCYXJSZWREb3Qoe2luZGV4OnR9KSl9ZnVuY3Rpb24gQ0MoZSl7aHImJmhyLnNldFRhYkJhckl0ZW1zKGUpfWZ1bmN0aW9uIEFDKGUsdCxuLHIscyx1KXtsZXQgdj17aW5kZXg6ZX07aWYodCE9PXZvaWQgMCYmKHYudGV4dD10KSxuJiYodi5pY29uUGF0aD1HdChuKSksciYmKHYuc2VsZWN0ZWRJY29uUGF0aD1HdChyKSksdSE9PXZvaWQgMCYmKHYuaWNvbmZvbnQ9dSkscyE9PXZvaWQgMCl7di52aXNpYmxlPUljLmxpc3RbZV0udmlzaWJsZT1zLGRlbGV0ZSB2LmluZGV4O2xldCBFPUljLmxpc3QubWFwKEY9Pih7dmlzaWJsZTpGLnZpc2libGV9KSk7RVtlXT12LENDKHtsaXN0OkV9KX1lbHNlIGhyJiZoci5zZXRUYWJCYXJJdGVtKHYpfWZ1bmN0aW9uIE9DKGUpe2hyJiZoci5zZXRUYWJCYXJTdHlsZShlKX1mdW5jdGlvbiBUQyhlKXtOZD0hMSxociYmaHIuaGlkZVRhYkJhcih7YW5pbWF0aW9uOmV9KX1mdW5jdGlvbiBQQyhlKXtOZD0hMCxociYmaHIuc2hvd1RhYkJhcih7YW5pbWF0aW9uOmV9KX1sZXQgYmY9W107dmFyIHhpPXtpZDoiMCIsaW5pdChlLHQpe2UmJmUubGlzdC5sZW5ndGgmJihJYz1lKTt0cnl7aHI9Zy5yZXF1aXJlTW9kdWxlKCJ1bmktdGFidmlldyIpfWNhdGNoKG4pe2NvbnNvbGUubG9nKGB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbigidW5pLXRhYnZpZXciKSBlcnJvciAke259YCl9aHIub25NYXNrQ2xpY2soKCk9PntiZi5mb3JFYWNoKG49PntuKCl9KX0pLGhyJiZoci5vbkNsaWNrKCh7aW5kZXg6bn0pPT57bGV0IHI9SWMuc2VsZWN0ZWRJbmRleDt0KEljLmxpc3Rbbl0sbik7bGV0IHM9SWMuc2VsZWN0ZWRJbmRleDtuIT09cyYmaHIuc3dpdGNoU2VsZWN0KHtpbmRleDpyfSl9KSxociYmaHIub25NaWRCdXR0b25DbGljaygoKT0+cHQuaW52b2tlT25DYWxsYmFjayhRcCkpLFNDKGhyLGUpfSxpbmRleE9mKGUpe2xldCB0PXRoaXMuY29uZmlnLG49dCYmdC5saXN0JiZ0Lmxpc3QubGVuZ3RoO2lmKG4pe2ZvcihsZXQgcj0wO3I8bjtyKyspaWYodC5saXN0W3JdLnBhZ2VQYXRoPT09ZXx8dC5saXN0W3JdLnBhZ2VQYXRoPT09YCR7ZX0uaHRtbGApcmV0dXJuIHJ9cmV0dXJuLTF9LHN3aXRjaFRhYihlKXtsZXQgdD10aGlzLmluZGV4T2YoZSk7cmV0dXJuIHQ+PTA/KGhyJiZoci5zd2l0Y2hTZWxlY3Qoe2luZGV4OnR9KSx0aGlzLmNvbmZpZy5zZWxlY3RlZEluZGV4PXQsITApOiExfSxzZXRUYWJCYXJCYWRnZTp3QyxzZXRUYWJCYXJJdGVtOkFDLHNldFRhYkJhclN0eWxlOk9DLGhpZGVUYWJCYXI6VEMsc2hvd1RhYkJhcjpQQyxhcHBlbmQoZSl7aHImJmhyLmFwcGVuZCh7aWQ6ZS5pZH0sKHtjb2RlOnR9KT0+e3QhPT0wJiZSKCgpPT57dGhpcy5hcHBlbmQoZSl9LDIwKX0pfSxnZXQgY29uZmlnKCl7cmV0dXJuIEljfHxJLnRhYkJhcn0sZ2V0IHZpc2libGUoKXtyZXR1cm4gTmR9LGdldCBoZWlnaHQoKXtsZXQgZT10aGlzLmNvbmZpZztyZXR1cm4oZSYmZS5oZWlnaHQ/cGFyc2VGbG9hdChlLmhlaWdodCk6c2UuVEFCQkFSX0hFSUdIVCkrYy5uYXZpZ2F0b3IuZ2V0U2FmZUFyZWFJbnNldHMoKS5kZXZpY2VCb3R0b219LGdldCBjb3Zlcigpe2xldCBlPXRoaXMuY29uZmlnO3JldHVybiBlJiZbImV4dHJhbGlnaHQiLCJsaWdodCIsImRhcmsiXS5pbmRleE9mKGUuYmx1ckVmZmVjdCk+PTB9LHNldFN0eWxlKHttYXNrOmV9KXtoci5zZXRNYXNrKHtjb2xvcjplfSl9LGFkZEV2ZW50TGlzdGVuZXIoZSx0KXtiZi5wdXNoKHQpfSxyZW1vdmVFdmVudExpc3RlbmVyKGUsdCl7bGV0IG49YmYuaW5kZXhPZih0KTtiZi5zcGxpY2UobiwxKX19O2Z1bmN0aW9uIHlmKCl7bGV0IGU9Vm4oKTtyZXR1cm4gZT9lLiRnZXRBcHBXZWJ2aWV3KCk6bnVsbH1mdW5jdGlvbiBWaChlKXtyZXR1cm4gZT9lLiRnZXRBcHBXZWJ2aWV3KCk6eWYoKX1sZXQgVWg9bnVsbDtmdW5jdGlvbiBIaCgpe3JldHVybiBVaH1mdW5jdGlvbiBJZChlKXtVaD1lfWZ1bmN0aW9uIGtkKCl7cmV0dXJuIGMubmF2aWdhdG9yLmlzSW1tZXJzZWRTdGF0dXNiYXIoKT9NYXRoLnJvdW5kKGMub3MubmFtZT09PSJpT1MiP2MubmF2aWdhdG9yLmdldFNhZmVBcmVhSW5zZXRzKCkudG9wOmMubmF2aWdhdG9yLmdldFN0YXR1c2JhckhlaWdodCgpKTowfWZ1bmN0aW9uICRoKCl7bGV0IGU9Yy5uYXZpZ2F0b3IuZ2V0U3RhdHVzQmFyU3R5bGUoKTtyZXR1cm4gZT09PSJVSVN0YXR1c0JhclN0eWxlQmxhY2tUcmFuc2x1Y2VudCJ8fGU9PT0iVUlTdGF0dXNCYXJTdHlsZUJsYWNrT3BhcXVlInx8ZT09PSJudWxsIj9lPSJsaWdodCI6ZT09PSJVSVN0YXR1c0JhclN0eWxlRGVmYXVsdCImJihlPSJkYXJrIiksZX1mdW5jdGlvbiBOQygpe2xldHtyZXNvbHV0aW9uV2lkdGg6ZSxyZXNvbHV0aW9uSGVpZ2h0OnR9PWMuc2NyZWVuLmdldEN1cnJlbnRTaXplKCl8fHtyZXNvbHV0aW9uV2lkdGg6MCxyZXNvbHV0aW9uSGVpZ2h0OjB9O3JldHVybntzY3JlZW5XaWR0aDpNYXRoLnJvdW5kKGUpLHNjcmVlbkhlaWdodDpNYXRoLnJvdW5kKHQpfX1sZXQgamg9JHQoImdldFdpbmRvd0luZm8iLCgpPT57bGV0IGU9Yy5vcy5uYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW9zIix7c2NyZWVuV2lkdGg6dCxzY3JlZW5IZWlnaHQ6bn09TkMoKSxyPWtkKCkscyx1PXtoZWlnaHQ6MCxjb3ZlcjohMX0sdj15ZigpO2lmKHYpe2xldCBidD12LmdldFN0eWxlKCksQXQ9YnQmJmJ0LnRpdGxlTlZpZXc7QXQmJkF0LnR5cGUmJkF0LnR5cGUhPT0ibm9uZSImJih1LmhlaWdodD1BdC50eXBlPT09InRyYW5zcGFyZW50Ij8wOnIrc2UuTkFWQkFSX0hFSUdIVCx1LmNvdmVyPUF0LnR5cGU9PT0idHJhbnNwYXJlbnQifHxBdC50eXBlPT09ImZsb2F0Iikscz12LmdldFNhZmVBcmVhSW5zZXRzKCl9ZWxzZSBzPWMubmF2aWdhdG9yLmdldFNhZmVBcmVhSW5zZXRzKCk7bGV0IEU9e2hlaWdodDowLGNvdmVyOiExfTtHdSgpJiYoRS5oZWlnaHQ9eGkudmlzaWJsZT94aS5oZWlnaHQ6MCxFLmNvdmVyPXhpLmNvdmVyKTtsZXQgRj11LmNvdmVyP3UuaGVpZ2h0OjAsTj1FLmNvdmVyP0UuaGVpZ2h0OjAsTT1uLXUuaGVpZ2h0LUUuaGVpZ2h0LG1lPW4tKHUuY292ZXI/MDp1LmhlaWdodCktKEUuY292ZXI/MDpFLmhlaWdodCksQWU9dDsoIUUuaGVpZ2h0fHxFLmNvdmVyKSYmIXMuYm90dG9tJiZzLmRldmljZUJvdHRvbSYmKE0tPXMuZGV2aWNlQm90dG9tLG1lLT1zLmRldmljZUJvdHRvbSkscz1lP3M6e2xlZnQ6MCxyaWdodDowLHRvcDp1LmhlaWdodCYmIXUuY292ZXI/MDpyLGJvdHRvbTowfTtsZXQgeGU9e2xlZnQ6cy5sZWZ0LHJpZ2h0OkFlLXMucmlnaHQsdG9wOnMudG9wLGJvdHRvbTptZS1zLmJvdHRvbSx3aWR0aDpBZS1zLmxlZnQtcy5yaWdodCxoZWlnaHQ6bWUtcy50b3Atcy5ib3R0b219O3JldHVybntwaXhlbFJhdGlvOmMuc2NyZWVuLnNjYWxlLHNjcmVlbldpZHRoOnQsc2NyZWVuSGVpZ2h0Om4sd2luZG93V2lkdGg6QWUsd2luZG93SGVpZ2h0Ok0sc3RhdHVzQmFySGVpZ2h0OnIsc2FmZUFyZWE6eGUsc2FmZUFyZWFJbnNldHM6e3RvcDpzLnRvcCxyaWdodDpzLnJpZ2h0LGJvdHRvbTpzLmJvdHRvbSxsZWZ0OnMubGVmdH0sd2luZG93VG9wOkYsd2luZG93Qm90dG9tOk4sc2NyZWVuVG9wOm4tTX19KSxNcyxFZj0hMDtmdW5jdGlvbiBZdSgpe2lmKCFFZilyZXR1cm47bGV0e2dldFN5c3RlbUluZm9TeW5jOmV9PWcucmVxdWlyZU1vZHVsZSgicGx1cyIpO2lmKE1zPWUoKSxaLmlzU3RyaW5nKE1zKSl0cnl7TXM9SlNPTi5wYXJzZShNcyl9Y2F0Y2godCl7fXJldHVybiBNc31sZXQgemg9JHQoImdldERldmljZUluZm8iLCgpPT57WXUoKTtsZXR7ZGV2aWNlQnJhbmQ6ZT0iIixkZXZpY2VNb2RlbDp0LG9zTmFtZTpuLG9zVmVyc2lvbjpyLGRldmljZU9yaWVudGF0aW9uOnMsZGV2aWNlVHlwZTp1LGRldmljZUlkOnYsb3NMYW5ndWFnZTpFLG9zVGhlbWU6Rixyb21OYW1lOk4scm9tVmVyc2lvbjpNfT1NcyxtZT1lLnRvTG93ZXJDYXNlKCksQWU9bi50b0xvd2VyQ2FzZSgpO3JldHVybnticmFuZDptZSxkZXZpY2VCcmFuZDptZSxkZXZpY2VNb2RlbDp0LGRldmljZVBpeGVsUmF0aW86Yy5zY3JlZW4uc2NhbGUsZGV2aWNlSWQ6dixkZXZpY2VPcmllbnRhdGlvbjpzLGRldmljZVR5cGU6dSxtb2RlbDp0LHBsYXRmb3JtOkFlLHN5c3RlbTpgJHtBZT09PSJpb3MiPyJpT1MiOiJBbmRyb2lkIn0gJHtyfWAsb3NOYW1lOm4sb3NWZXJzaW9uOnIsb3NMYW5ndWFnZTpFLG9zVGhlbWU6Rixyb21OYW1lOk4scm9tVmVyc2lvbjpNfX0pLFdoPSR0KCJnZXRBcHBCYXNlSW5mbyIsKCk9PntZdSgpO2xldHtob3N0UGFja2FnZU5hbWU6ZSxob3N0TmFtZTp0LGhvc3RWZXJzaW9uOm4saG9zdExhbmd1YWdlOnIsb3NMYW5ndWFnZTpzLGhvc3RUaGVtZTp1LGFwcElkOnYsYXBwTmFtZTpFLGFwcFZlcnNpb246RixhcHBWZXJzaW9uQ29kZTpOLGFwcFdndFZlcnNpb246TSx1bmlDb21waWxlVmVyc2lvbjptZSx1bmlSdW50aW1lVmVyc2lvbjpBZSx1bmlQbGF0Zm9ybTp4ZX09TXM7cmV0dXJue2FwcElkOnYsYXBwTmFtZTpFLGFwcFZlcnNpb246RixhcHBWZXJzaW9uQ29kZTpOLGFwcFdndFZlcnNpb246TSxhcHBMYW5ndWFnZTpIdT9IdSgpOnMsZW5hYmxlRGVidWc6ITEsaG9zdFBhY2thZ2VOYW1lOmUsaG9zdE5hbWU6dCxob3N0VmVyc2lvbjpuLGhvc3RMYW5ndWFnZTpyLGhvc3RUaGVtZTp1LGhvc3RGb250U2l6ZVNldHRpbmc6dm9pZCAwLGhvc3RTREtWZXJzaW9uOnZvaWQgMCxsYW5ndWFnZTpzLFNES1ZlcnNpb246IiIsdGhlbWU6RGgoKSx2ZXJzaW9uOmMucnVudGltZS5pbm5lclZlcnNpb24saXNVbmlBcHBYOiExLHVuaVBsYXRmb3JtOnhlLHVuaVJ1bnRpbWVWZXJzaW9uOkFlLHVuaUNvbXBpbGVWZXJzaW9uOm1lLHVuaUNvbXBpbGVyVmVyc2lvbjptZX19KSxHaD0kdCgiZ2V0U3lzdGVtSW5mb1N5bmMiLCgpPT57RWY9ITAsWXUoKSxFZj0hMTtsZXQgZT1qaCgpLHQ9emgoKSxuPVdoKCk7RWY9ITA7bGV0IHI9e2ZvbnRTaXplU2V0dGluZzpuLmhvc3RGb250U2l6ZVNldHRpbmcsb3NOYW1lOk1zLm9zTmFtZS50b0xvd2VyQ2FzZSgpfTtNcy5ob3N0TmFtZSYmKHIuaG9zdFNES1ZlcnNpb249TXMudW5pUnVudGltZVZlcnNpb24pO2xldCBzPVouZXh0ZW5kKE1zLGUsdCxuLHIpO3JldHVybiBkZWxldGUgcy5zY3JlZW5Ub3AsZGVsZXRlIHMuZW5hYmxlRGVidWcsSS5kYXJrbW9kZXx8ZGVsZXRlIHMudGhlbWUsc2Uuc29ydE9iamVjdChzKX0pLElDPVJlKCJnZXRTeXN0ZW1JbmZvIiwoZSx7cmVzb2x2ZTp0fSk9PnQoR2goKSkpLHB1PW51bGwsa0M9Rm4obGgsKCk9PntxaCgpfSksUkM9aWkoX3ksKCk9PntZaCgpfSkscWg9UmUoYnksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57cHV8fChwdT1jLm9yaWVudGF0aW9uLndhdGNoT3JpZW50YXRpb24ocj0+e3B0Lmludm9rZU9uQ2FsbGJhY2sobGgse2RpcmVjdGlvbjpyLm1hZ25ldGljSGVhZGluZ30pfSxyPT57bihyLm1lc3NhZ2UpLHB1PW51bGx9LHtmcmVxdWVuY3k6R3N9KSksUih0LEdzKX0pLFloPVJlKHl5LChlLHtyZXNvbHZlOnR9KT0+e3B1JiYoYy5vcmllbnRhdGlvbi5jbGVhcldhdGNoKHB1KSxwdT1udWxsKSx0KCl9KSx4Qz1SZShFeSwoZSx7cmVzb2x2ZTp0fSk9PntjLmRldmljZS52aWJyYXRlKDE1KSx0KCl9KSxCQz1SZShTeSwoZSx7cmVzb2x2ZTp0fSk9PntjLmRldmljZS52aWJyYXRlKDQwMCksdCgpfSksaHU9bnVsbCxNQz1GbihzaCwoKT0+e0toKCl9KSxMQz1paShneSwoKT0+e0poKCl9KSxLaD1SZSh2eSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntodXx8KGh1PWMuYWNjZWxlcm9tZXRlci53YXRjaEFjY2VsZXJhdGlvbihyPT57cHQuaW52b2tlT25DYWxsYmFjayhzaCx7eDpyJiZyLnhBeGlzfHwwLHk6ciYmci55QXhpc3x8MCx6OnImJnIuekF4aXN8fDB9KX0scj0+e2h1PW51bGwsbihgc3RhcnRBY2NlbGVyb21ldGVyOmZhaWwgJHtyLm1lc3NhZ2V9YCl9LHtmcmVxdWVuY3k6R3N9KSksUih0LEdzKX0pLEpoPVJlKG15LChlLHtyZXNvbHZlOnR9KT0+e2h1JiYoYy5hY2NlbGVyb21ldGVyLmNsZWFyV2F0Y2goaHUpLGh1PW51bGwpLHQoKX0pLERDPUZuKGNoLGR1KCgpPT5jLmJsdWV0b290aC5vbkJsdWV0b290aERldmljZUZvdW5kLmJpbmQoYy5ibHVldG9vdGgpLGNoKSksRkM9Rm4odWgsZHUoKCk9PmMuYmx1ZXRvb3RoLm9uQmx1ZXRvb3RoQWRhcHRlclN0YXRlQ2hhbmdlLmJpbmQoYy5ibHVldG9vdGgpLHVoKSksVkM9Rm4oZmgsZHUoKCk9PmMuYmx1ZXRvb3RoLm9uQkxFQ29ubmVjdGlvblN0YXRlQ2hhbmdlLmJpbmQoYy5ibHVldG9vdGgpLGZoKSksVUM9Rm4oZGgsZHUoKCk9PmMuYmx1ZXRvb3RoLm9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZS5iaW5kKGMuYmx1ZXRvb3RoKSxkaCkpLEhDPVJlKCJvcGVuQmx1ZXRvb3RoQWRhcHRlciIsUmkoKCk9PmMuYmx1ZXRvb3RoLm9wZW5CbHVldG9vdGhBZGFwdGVyLmJpbmQoYy5ibHVldG9vdGgpKSksJEM9UmUoImNsb3NlQmx1ZXRvb3RoQWRhcHRlciIsUmkoKCk9PmMuYmx1ZXRvb3RoLmNsb3NlQmx1ZXRvb3RoQWRhcHRlci5iaW5kKGMuYmx1ZXRvb3RoKSkpLGpDPVJlKCJnZXRCbHVldG9vdGhBZGFwdGVyU3RhdGUiLFJpKCgpPT5jLmJsdWV0b290aC5nZXRCbHVldG9vdGhBZGFwdGVyU3RhdGUuYmluZChjLmJsdWV0b290aCkpKSx6Qz1SZSh3eSxSaSgoKT0+Yy5ibHVldG9vdGguc3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5LmJpbmQoYy5ibHVldG9vdGgpKSxDeSksV0M9UmUoInN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5IixSaSgoKT0+Yy5ibHVldG9vdGguc3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkuYmluZChjLmJsdWV0b290aCkpKSxHQz1SZSgiZ2V0Qmx1ZXRvb3RoRGV2aWNlcyIsUmkoKCk9PmMuYmx1ZXRvb3RoLmdldEJsdWV0b290aERldmljZXMuYmluZChjLmJsdWV0b290aCkpKSxxQz1SZShBeSxSaSgoKT0+Yy5ibHVldG9vdGguZ2V0Q29ubmVjdGVkQmx1ZXRvb3RoRGV2aWNlcy5iaW5kKGMuYmx1ZXRvb3RoKSksT3kpLFlDPVJlKFR5LFJpKCgpPT5jLmJsdWV0b290aC5jcmVhdGVCTEVDb25uZWN0aW9uLmJpbmQoYy5ibHVldG9vdGgpKSxQeSksS0M9UmUoTnksUmkoKCk9PmMuYmx1ZXRvb3RoLmNsb3NlQkxFQ29ubmVjdGlvbi5iaW5kKGMuYmx1ZXRvb3RoKSksSXkpLEpDPVJlKGt5LFJpKCgpPT5jLmJsdWV0b290aC5nZXRCTEVEZXZpY2VTZXJ2aWNlcy5iaW5kKGMuYmx1ZXRvb3RoKSksUnkpLFpDPVJlKHh5LFJpKCgpPT5jLmJsdWV0b290aC5nZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MuYmluZChjLmJsdWV0b290aCkpLEJ5KSxYQz1SZShNeSxSaSgoKT0+Yy5ibHVldG9vdGgubm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZS5iaW5kKGMuYmx1ZXRvb3RoKSksTHkpLFFDPVJlKER5LFJpKCgpPT5jLmJsdWV0b290aC5yZWFkQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZS5iaW5kKGMuYmx1ZXRvb3RoKSksRnkpLGVBPVJlKFZ5LFJpKCgpPT5jLmJsdWV0b290aC53cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWUuYmluZChjLmJsdWV0b290aCkpLFV5KSx0QT1SZShIeSxSaSgoKT0+Yy5ibHVldG9vdGguc2V0QkxFTVRVLmJpbmQoYy5ibHVldG9vdGgpKSwkeSksbkE9UmUoanksUmkoKCk9PmMuYmx1ZXRvb3RoLmdldEJMRURldmljZVJTU0kuYmluZChjLmJsdWV0b290aCkpLHp5KSxyQT1GbihwaCxkdSgoKT0+Yy5pYmVhY29uLm9uQmVhY29uVXBkYXRlLmJpbmQoYy5pYmVhY29uKSxwaCkpLGlBPUZuKGhoLGR1KCgpPT5jLmliZWFjb24ub25CZWFjb25TZXJ2aWNlQ2hhbmdlLmJpbmQoYy5pYmVhY29uKSxoaCkpLG9BPVJlKFd5LFJpKCgpPT5jLmliZWFjb24uZ2V0QmVhY29ucy5iaW5kKGMuaWJlYWNvbikpKSxhQT1SZShHeSxSaSgoKT0+Yy5pYmVhY29uLnN0YXJ0QmVhY29uRGlzY292ZXJ5LmJpbmQoYy5pYmVhY29uKSkscXkpLHNBPVJlKFl5LFJpKCgpPT5jLmliZWFjb24uc3RvcEJlYWNvbkRpc2NvdmVyeS5iaW5kKGMuaWJlYWNvbikpKSxsQT1SZShheSwoe3Bob25lTnVtYmVyOmV9LHtyZXNvbHZlOnR9KT0+KGMuZGV2aWNlLmRpYWwoZSksdCgpKSxzeSksY0E9e25hbWU6e2dpdmVuTmFtZToiZmlyc3ROYW1lIixtaWRkbGVOYW1lOiJtaWRkbGVOYW1lIixmYW1pbHlOYW1lOiJsYXN0TmFtZSJ9LG5pY2tuYW1lOiJuaWNrTmFtZSIscGhvdG9zOnt0eXBlOiJ1cmwiLHZhbHVlOiJwaG90b0ZpbGVQYXRoIn0sbm90ZToicmVtYXJrIixwaG9uZU51bWJlcnM6W3t0eXBlOiJtb2JpbGUiLHZhbHVlOiJtb2JpbGVQaG9uZU51bWJlciJ9LHt0eXBlOiJ3b3JrIix2YWx1ZToid29ya1Bob25lTnVtYmVyIn0se3R5cGU6ImNvbXBhbnkiLHZhbHVlOiJob3N0TnVtYmVyIn0se3R5cGU6ImhvbWUgZmF4Iix2YWx1ZToiaG9tZUZheE51bWJlciJ9LHt0eXBlOiJ3b3JrIGZheCIsdmFsdWU6IndvcmtGYXhOdW1iZXIifV0sZW1haWxzOlt7dHlwZToiaG9tZSIsdmFsdWU6ImVtYWlsIn1dLHVybHM6W3t0eXBlOiJvdGhlciIsdmFsdWU6InVybCJ9XSxvcmdhbml6YXRpb25zOlt7dHlwZToiY29tcGFueSIsbmFtZToib3JnYW5pemF0aW9uIix0aXRsZToidGl0bGUifV0saW1zOlt7dHlwZToib3RoZXIiLHZhbHVlOiJ3ZUNoYXROdW1iZXIifV0sYWRkcmVzc2VzOlt7dHlwZToib3RoZXIiLHByZWZlcnJlZDohMCxjb3VudHJ5OiJhZGRyZXNzQ291bnRyeSIscmVnaW9uOiJhZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJhZGRyZXNzQ2l0eSIsc3RyZWV0QWRkcmVzczoiYWRkcmVzc1N0cmVldCIscG9zdGFsQ29kZToiYWRkcmVzc1Bvc3RhbENvZGUifSx7dHlwZToiaG9tZSIsY291bnRyeToiaG9tZUFkZHJlc3NDb3VudHJ5IixyZWdpb246ImhvbWVBZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJob21lQWRkcmVzc0NpdHkiLHN0cmVldEFkZHJlc3M6ImhvbWVBZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJob21lQWRkcmVzc1Bvc3RhbENvZGUifSx7dHlwZToiY29tcGFueSIsY291bnRyeToid29ya0FkZHJlc3NDb3VudHJ5IixyZWdpb246IndvcmtBZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJ3b3JrQWRkcmVzc0NpdHkiLHN0cmVldEFkZHJlc3M6IndvcmtBZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJ3b3JrQWRkcmVzc1Bvc3RhbENvZGUifV19LHVBPVsidHlwZSIsInByZWZlcnJlZCJdO2Z1bmN0aW9uIFJkKGUsdCxuKXtsZXQgcj0wO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKHM9PntsZXQgdT1uW3NdO3R5cGVvZiB1IT09Im9iamVjdCI/dUEuaW5kZXhPZihzKSE9PS0xP2Vbc109bltzXTp0eXBlb2YgdFt1XSE9InVuZGVmaW5lZCI/KHIrKyxlW3NdPXRbdV0pOmRlbGV0ZSBlW3NdOnUgaW5zdGFuY2VvZiBBcnJheT8oZVtzXT1bXSx1LmZvckVhY2goRT0+e2xldCBGPXt9O1JkKEYsdCxFKSYmZVtzXS5wdXNoKEYpfSksZVtzXS5sZW5ndGg/cisrOmRlbGV0ZSBlW3NdKTooZVtzXT17fSxSZChlW3NdLHQsdSk/cisrOmRlbGV0ZSBlW3NdKX0pLHJ9bGV0IGZBPVJlKGx5LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+eyFlLnBob3RvRmlsZVBhdGgmJihlLnBob3RvRmlsZVBhdGg9IiIpLGMuY29udGFjdHMuZ2V0QWRkcmVzc0Jvb2soYy5jb250YWN0cy5BRERSRVNTQk9PS19QSE9ORSxyPT57bGV0IHM9ci5jcmVhdGUoKTtSZChzLGUsY0EpLHMuc2F2ZSgoKT0+dCgpLHU9Pm4oKSl9LHI9Pm4oKSl9LHV5LGN5KTtmdW5jdGlvbiBGYShlKXtyZXR1cm4gdHlwZW9mIGchPSJ1bmRlZmluZWQiP2cucmVxdWlyZU1vZHVsZShlKTpfX3JlcXVpcmVOYXRpdmVQbHVnaW5fXyhlKX1mdW5jdGlvbiBaaChlLHQsbil7cmV0dXJuIEZhKCJwbHVzIikuc2VuZE5hdGl2ZUV2ZW50KGUsdCxuKX1sZXQgZEE9UmUoZnksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57RmEoImNsaXBib2FyZCIpLmdldFN0cmluZyhzPT57cy5yZXN1bHQ9PT0ic3VjY2VzcyI/dCh7ZGF0YTpzLmRhdGF9KTpuKCJnZXRDbGlwYm9hcmREYXRhOmZhaWwiKX0pfSkscEE9UmUoZHksKGUse3Jlc29sdmU6dH0pPT57RmEoImNsaXBib2FyZCIpLnNldFN0cmluZyhlLmRhdGEpLHQoKX0saHkscHkpLFhoPSJvbk5ldHdvcmtTdGF0dXNDaGFuZ2UiO2Z1bmN0aW9uIFFoKCl7ZWcoKS50aGVuKCh7bmV0d29ya1R5cGU6ZX0pPT57cHQuaW52b2tlT25DYWxsYmFjayhYaCx7aXNDb25uZWN0ZWQ6ZSE9PSJub25lIixuZXR3b3JrVHlwZTplfSl9KX1sZXQgaEE9Rm4oWGgsKCk9PntjLmdsb2JhbEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm5ldGNoYW5nZSIsUWgpfSksZ0E9aWkoIm9mZk5ldHdvcmtTdGF0dXNDaGFuZ2UiLCgpPT57Yy5nbG9iYWxFdmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJuZXRjaGFuZ2UiLFFoKX0pLGVnPVJlKCJnZXROZXR3b3JrVHlwZSIsKGUse3Jlc29sdmU6dH0pPT57bGV0IG49RGxbYy5uZXR3b3JraW5mby5nZXRDdXJyZW50VHlwZSgpXXx8InVua25vd24iO3JldHVybiB0KHtuZXR3b3JrVHlwZTpufSl9KTtmdW5jdGlvbiB0Zygpe2lmKGMub3MubmFtZS50b0xvd2VyQ2FzZSgpIT09ImlvcyIpcmV0dXJuITE7bGV0IHQ9RmEoImZhY2VJRCIpO3JldHVybiEhKHQmJnQuaXNTdXBwb3J0KCkpfWZ1bmN0aW9uIG5nKCl7cmV0dXJuISEoYy5maW5nZXJwcmludCYmYy5maW5nZXJwcmludC5pc1N1cHBvcnQoKSl9bGV0IHJnPWU9PntsZXQgdD1bXTtyZXR1cm4gbmcoKSYmdC5wdXNoKCJmaW5nZXJQcmludCIpLHRnKCkmJnQucHVzaCgiZmFjaWFsIiksZSYmZSh7c3VwcG9ydE1vZGU6dH0pLHtzdXBwb3J0TW9kZTp0LGVyck1zZzoiY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uOm9rIn19LHZBPVJlKFh5LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3JnKHQpfSksaWc9KHtjaGVja0F1dGhNb2RlOmUscmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj0odSx2KT0+biYmbih1LHYpLHM9dT0+dCYmdCh1KTtpZihlPT09ImZpbmdlclByaW50Iil7aWYobmcoKSl7bGV0IHU9Yy5maW5nZXJwcmludC5pc0tleWd1YXJkU2VjdXJlKCkmJmMuZmluZ2VycHJpbnQuaXNFbnJvbGxlZEZpbmdlcnByaW50cygpO3JldHVybiBzKHtpc0Vucm9sbGVkOnV9KSx7aXNFbnJvbGxlZDp1LGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpvayJ9fXJldHVybiByKCJub3Qgc3VwcG9ydCIse2lzRW5yb2xsZWQ6ITF9KSx7aXNFbnJvbGxlZDohMSxlcnJNc2c6ImNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6ZmFpbCBub3Qgc3VwcG9ydCJ9fWVsc2UgaWYoZT09PSJmYWNpYWwiKXtpZih0ZygpKXtsZXQgdT1GYSgiZmFjZUlEIiksdj11JiZ1LmlzS2V5Z3VhcmRTZWN1cmUoKSYmdS5pc0Vucm9sbGVkRmFjZUlEKCk7cmV0dXJuIHMoe2lzRW5yb2xsZWQ6dn0pLHtpc0Vucm9sbGVkOnYsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOm9rIn19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19LG1BPVJlKFF5LCh7Y2hlY2tBdXRoTW9kZTplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntpZyh7Y2hlY2tBdXRoTW9kZTplLHJlc29sdmU6dCxyZWplY3Q6bn0pfSxuMCx0MCksX0E9UmUocjAsKHtyZXF1ZXN0QXV0aE1vZGVzOmUsY2hhbGxlbmdlOnQ9ITEsYXV0aENvbnRlbnQ6bn0se3Jlc29sdmU6cixyZWplY3Q6c30pPT57d3IoKTtsZXR7dDp1fT1ldCgpLHtzdXBwb3J0TW9kZTp2fT1yZygpO2lmKCF2Lmxlbmd0aClyZXR1cm4gcygibm90IHN1cHBvcnQiLHthdXRoTW9kZToiZmluZ2VyUHJpbnQiLGVyckNvZGU6OTAwMDF9KTtsZXQgRT1bXTtpZihlLmZvckVhY2goYnQ9Pnt2LmluZGV4T2YoYnQpPi0xJiZFLnB1c2goYnQpfSksIUUubGVuZ3RoKXJldHVybiBzKCJzdGFydFNvdGVyQXV0aGVudGljYXRpb246ZmFpbCBubyBjb3JyZXNwb25kaW5nIG1vZGUiLHthdXRoTW9kZToiZmluZ2VyUHJpbnQiLGVyckNvZGU6OTAwMDN9KTtsZXQgRj1bXTtpZihFLmZvckVhY2goYnQ9PntpZyh7Y2hlY2tBdXRoTW9kZTpidH0pLmlzRW5yb2xsZWQmJkYucHVzaChidCl9KSwhRi5sZW5ndGgpcmV0dXJuIHMoYHN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbjpmYWlsIG5vICR7RVswXX0gZW5yb2xsZWRgLHthdXRoTW9kZTpFWzBdLGVyckNvZGU6OTAwMTF9KTtsZXQgTj1GWzBdLE09bnVsbCxtZSxBZT1ufHx1KCJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLmF1dGhDb250ZW50IikseGU9YnQ9PntsZXR7Y29kZTpBdH09YnQsWnQ9e2F1dGhNb2RlOk59LHp0PXs0OigpPT57TT8odyhtZSksTS5zZXRUaXRsZSh1KCJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLndhaXRpbmdDb250ZW50IikpLG1lPVIoKCk9PntNJiZNLnNldFRpdGxlKEFlKX0sMWUzKSk6cygiIixaLmV4dGVuZChadCx7ZXJyQ29kZTo5MDAwOX0pKX0sNTooKT0+e2MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCkscygiYXV0aGVudGljYXRlIGZyZWV6ZS4gcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciIsWi5leHRlbmQoWnQse2VyckNvZGU6OTAwMTB9KSl9LDY6KCk9PntjLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpLHMoImNhbmNlbCIsWi5leHRlbmQoWnQse2VyckNvZGU6OTAwMDh9KSl9fTtBdCYmenRbQXRdP3p0W0F0XSgpOihjLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpLHMoIiIsWi5leHRlbmQoWnQse2VyckNvZGU6OTAwMDd9KSkpfTtOPT09ImZpbmdlclByaW50Ij8oYy5vcy5uYW1lLnRvTG93ZXJDYXNlKCk9PT0iYW5kcm9pZCImJihNPWMubmF0aXZlVUkuc2hvd1dhaXRpbmcoQWUpLE0ub25jbG9zZT1mdW5jdGlvbigpe2MuZmluZ2VycHJpbnQuY2FuY2VsKCl9KSxjLmZpbmdlcnByaW50LmF1dGhlbnRpY2F0ZSgoKT0+e2MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCkscih7YXV0aE1vZGU6TixlcnJDb2RlOjB9KX0seGUse21lc3NhZ2U6QWV9KSk6Tj09PSJmYWNpYWwiJiZGYSgiZmFjZUlEIikuYXV0aGVudGljYXRlKHttZXNzYWdlOkFlfSxBdD0+e0F0LnR5cGU9PT0ic3VjY2VzcyImJkF0LmNvZGU9PT0wP3Ioe2F1dGhNb2RlOk4sZXJyQ29kZTowfSk6eGUoQXQpfSl9LG8wLGkwKSxiQT1SZShhMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntGaSgpO2xldHt0OnJ9PWV0KCksdT0kaCgpIT09ImxpZ2h0Iix2LEU9ITEsRj1Fbyh7dXJsOiJfX3VuaWFwcHNjYW4iLGRhdGE6T2JqZWN0LmFzc2lnbih7fSxlLHttZXNzYWdlczp7ZmFpbDpyKCJ1bmkuc2NhbkNvZGUuZmFpbCIpLCJmbGFzaC5vbiI6cigidW5pLnNjYW5Db2RlLmZsYXNoLm9uIiksImZsYXNoLm9mZiI6cigidW5pLnNjYW5Db2RlLmZsYXNoLm9mZiIpfX0pLHN0eWxlOnthbmltYXRpb25UeXBlOmUuYW5pbWF0aW9uVHlwZXx8InBvcC1pbiIsdGl0bGVOVmlldzp7YXV0b0JhY2tCdXR0b246ITAsdHlwZToiZmxvYXQiLHRpdGxlVGV4dDplLnRpdGxlVGV4dHx8cigidW5pLnNjYW5Db2RlLnRpdGxlIiksdGl0bGVDb2xvcjoiI2ZmZmZmZiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIixidXR0b25zOmUub25seUZyb21DYW1lcmE/W106W3t0ZXh0OmUuYWxidW1UZXh0fHxyKCJ1bmkuc2NhbkNvZGUuYWxidW0iKSxmb250U2l6ZToiMTdweCIsd2lkdGg6IjYwcHgiLG9uY2xpY2s6KCk9PntGLnNlbmRNZXNzYWdlKHt0eXBlOiJnYWxsZXJ5In0pfX1dfSxwb3BHZXN0dXJlOiJjbG9zZSIsYmFja2dyb3VuZDoiIzAwMDAwMCIsYmFja0J1dHRvbkF1dG9Db250cm9sOiJjbG9zZSJ9LG9uTWVzc2FnZSh7ZXZlbnQ6TixkZXRhaWw6TX0pe3Y9TSxFPU49PT0ibWFya2VkIn0sb25DbG9zZSgpe3UmJmMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIiksdj9FPyhkZWxldGUgdi5tZXNzYWdlLHQodikpOm4odi5tZXNzYWdlKTpuKCJjYW5jZWwiKX19KTt1JiYoYy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0IiksRi53ZWJ2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLCh7dHlwZTpOLHJlc3VsdDpNfSk9PntOPT09InN0YXJ0Ij9jLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgiZGFyayIpOk49PT0iZW5kIiYmIU0mJmMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJsaWdodCIpfSkpfSxzMCxjMCksb2c9ZT0+e3B0Lmludm9rZU9uQ2FsbGJhY2soc2UuT05fVEhFTUVfQ0hBTkdFLGUpfSx5QT1GbihzZS5PTl9USEVNRV9DSEFOR0UsKCk9PntwdC5vbihzZS5PTl9USEVNRV9DSEFOR0Usb2cpfSksRUE9aWkoc2UuT0ZGX1RIRU1FX0NIQU5HRSwoKT0+e3B0Lm9mZihzZS5PTl9USEVNRV9DSEFOR0Usb2cpfSksU0E9UmUoS3ksKGUse3Jlc29sdmU6dH0pPT57bGV0IG49Yy5zY3JlZW4uZ2V0QnJpZ2h0bmVzcyghMSk7dCh7dmFsdWU6bn0pfSksd0E9UmUoSnksKGUse3Jlc29sdmU6dH0pPT57Yy5zY3JlZW4uc2V0QnJpZ2h0bmVzcyhlLnZhbHVlLCExKSx0KCl9KSxDQT1SZShaeSwoZSx7cmVzb2x2ZTp0fSk9PntjLmRldmljZS5zZXRXYWtlbG9jayghIWUua2VlcFNjcmVlbk9uKSx0KCl9KSxBQT0kdCh1MCwoKT0+e2xldHtnZXRTeXN0ZW1TZXR0aW5nOmV9PWcucmVxdWlyZU1vZHVsZSgicGx1cyIpLHQ9ZSgpO3RyeXt0eXBlb2YgdD09InN0cmluZyImJih0PUpTT04ucGFyc2UodCkpfWNhdGNoKG4pe31yZXR1cm4gdH0pLGFnPSR0KGYwLCgpPT57bGV0e2dldEFwcEF1dGhvcml6ZVNldHRpbmc6ZX09Zy5yZXF1aXJlTW9kdWxlKCJwbHVzIiksdD1lKCk7dHJ5e3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9SlNPTi5wYXJzZSh0KSl9Y2F0Y2gobil7fWZvcihsZXQgbiBpbiB0KVouaGFzT3duKHQsbikmJnRbbl09PT0idW5kZWZpbmVkIiYmKHRbbl09dm9pZCAwKTtyZXR1cm4gdH0pLE9BPVJlKGQwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtvcGVuQXBwQXV0aG9yaXplU2V0dGluZzpyfT1nLnJlcXVpcmVNb2R1bGUoInBsdXMiKTtyKHU9Pnt1LnR5cGU9PT0ic3VjY2VzcyI/dCgpOm4oKX0pfSksVEE9UmUoWDAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9YmkrIi9kb3dubG9hZC8iO2MuaW8uZ2V0SW1hZ2VJbmZvKFouZXh0ZW5kKGUse3NhdmVQYXRoOnIsZmlsZW5hbWU6cixzdWNjZXNzOk5jKHQpLGZhaWw6QnIobil9KSl9LGVFLFEwKSxQQT1SZShvRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntjLmlvLmdldFZpZGVvSW5mbyh7ZmlsZVBhdGg6ZS5zcmMsc3VjY2VzczpyPT57dCh7b3JpZW50YXRpb246ci5vcmllbnRhdGlvbix0eXBlOnIudHlwZSxkdXJhdGlvbjpyLmR1cmF0aW9uLHNpemU6ci5zaXplLGhlaWdodDpyLmhlaWdodCx3aWR0aDpyLndpZHRoLGZwczpyLmZwc3x8MzAsYml0cmF0ZTpyLmJpdHJhdGV9KX0sZmFpbDpCcihuKX0pfSxzRSxhRSksTkE9UmUodEUsKHtjdXJyZW50OmU9MCxpbmRpY2F0b3I6dD0ibnVtYmVyIixsb29wOm49ITEsdXJsczpyLGxvbmdQcmVzc0FjdGlvbnM6c30se3Jlc29sdmU6dSxyZWplY3Q6dn0pPT57ZW8oKTtsZXR7dDpFfT1ldCgpO3I9ci5tYXAoTj0+R3QoTikpO2xldCBGPU51bWJlcihlKTtpc05hTihGKT8oZT1yLmluZGV4T2YoR3QoZSkpLGU9ZTwwPzA6ZSk6ZT1GLGMubmF0aXZlVUkucHJldmlld0ltYWdlKHIse2N1cnJlbnQ6ZSxpbmRpY2F0b3I6dCxsb29wOm4sb25Mb25nUHJlc3M6ZnVuY3Rpb24oTil7bGV0IE09W10sbWU9IiIsQWU9cyYmWi5pc1BsYWluT2JqZWN0KHMpO0FlPyhNPXMuaXRlbUxpc3Q/cy5pdGVtTGlzdDpbXSxtZT1zLml0ZW1Db2xvcj9zLml0ZW1Db2xvcjoiIzAwMDAwMCIpOihNPVtFKCJ1bmkucHJldmlld0ltYWdlLmJ1dHRvbi5zYXZlIildLG1lPSIjMDAwMDAwIik7bGV0IHhlPXtidXR0b25zOk0ubWFwKGJ0PT4oe3RpdGxlOmJ0LGNvbG9yOm1lfSkpLGNhbmNlbDpFKCJ1bmkucHJldmlld0ltYWdlLmNhbmNlbCIpfTtjLm5hdGl2ZVVJLmFjdGlvblNoZWV0KHhlLGJ0PT57aWYoYnQuaW5kZXg+MCl7aWYoQWUpe1ouaXNGdW5jdGlvbihzLnN1Y2Nlc3MpJiZzLnN1Y2Nlc3Moe3RhcEluZGV4OmJ0LmluZGV4LTEsaW5kZXg6Ti5pbmRleH0pO3JldHVybn1jLmdhbGxlcnkuc2F2ZShOLnVybCwoKT0+e2MubmF0aXZlVUkudG9hc3QoRSgidW5pLnByZXZpZXdJbWFnZS5zYXZlLnN1Y2Nlc3MiKSl9LGZ1bmN0aW9uKCl7Yy5uYXRpdmVVSS50b2FzdChFKCJ1bmkucHJldmlld0ltYWdlLnNhdmUuZmFpbCIpKX0pfWVsc2UgQWUmJlouaXNGdW5jdGlvbihzLmZhaWwpJiZzLmZhaWwoe2Vyck1zZzoic2hvd0FjdGlvblNoZWV0OmZhaWwgY2FuY2VsIn0pfSl9fSksdSgpfSxyRSxuRSksSUE9UmUoaUUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57dHJ5e2MubmF0aXZlVUkuY2xvc2VQcmV2aWV3SW1hZ2UoKSx0KCl9Y2F0Y2gocil7bigpfX0pLHhkLGd1PSExLEJkLHZ1PShlLHQ9e30pPT57a0EoWi5leHRlbmQoe3N0YXRlOmV9LHQpKX0sS3U9e3N0YXJ0KHtkdXJhdGlvbjplPTZlNCxzYW1wbGVSYXRlOnQsbnVtYmVyT2ZDaGFubmVsczpuLGVuY29kZUJpdFJhdGU6cixmb3JtYXQ6cz0ibXAzIixmcmFtZVNpemU6dX09e30pe2lmKGd1KXJldHVybiB2dSgic3RhcnQiKTt4ZD1jLmF1ZGlvLmdldFJlY29yZGVyKCkseGQucmVjb3JkKHtmb3JtYXQ6cyxzYW1wbGVyYXRlOnQ/U3RyaW5nKHQpOnZvaWQgMCxmaWxlbmFtZTpiaSsiL3JlY29yZGVyLyJ9LHY9PnZ1KCJzdG9wIix7dGVtcEZpbGVQYXRoOnZ9KSx2PT52dSgiZXJyb3IiLHtlcnJNc2c6di5tZXNzYWdlfSkpLEJkPVIoKCk9PntLdS5zdG9wKCl9LGUpLHZ1KCJzdGFydCIpLGd1PSEwfSxzdG9wKCl7Z3UmJih4ZC5zdG9wKCksZ3U9ITEsQmQmJncoQmQpKX0scGF1c2UoKXtndSYmdnUoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHBhdXNlIn0pfSxyZXN1bWUoKXtndSYmdnUoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHJlc3VtZSJ9KX19LGtjPXtwYXVzZTpudWxsLHJlc3VtZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLGVycm9yOm51bGx9O2Z1bmN0aW9uIGtBKGUpe2xldCB0PWUuc3RhdGU7ZGVsZXRlIGUuc3RhdGUsZGVsZXRlIGUuZXJyTXNnLHQmJlouaXNGdW5jdGlvbihrY1t0XSkmJmtjW3RdKGUpfWNsYXNzIFJBe2NvbnN0cnVjdG9yKCl7fW9uRXJyb3IodCl7a2MuZXJyb3I9dH1vbkZyYW1lUmVjb3JkZWQodCl7fW9uSW50ZXJydXB0aW9uQmVnaW4odCl7fW9uSW50ZXJydXB0aW9uRW5kKHQpe31vblBhdXNlKHQpe2tjLnBhdXNlPXR9b25SZXN1bWUodCl7a2MucmVzdW1lPXR9b25TdGFydCh0KXtrYy5zdGFydD10fW9uU3RvcCh0KXtrYy5zdG9wPXR9cGF1c2UoKXtLdS5wYXVzZSgpfXJlc3VtZSgpe0t1LnJlc3VtZSgpfXN0YXJ0KHQ9e30pe0t1LnN0YXJ0KHQpfXN0b3AoKXtLdS5zdG9wKCl9fWxldCBzZyx4QT0kdChoRSwoKT0+c2d8fChzZz1uZXcgUkEpKSxCQT1SZShmRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntjLmdhbGxlcnkuc2F2ZShlLmZpbGVQYXRoLE5jKHQpLEJyKG4pKX0scEUsZEUpLE1BPVJlKGxFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2MuZ2FsbGVyeS5zYXZlKGUuZmlsZVBhdGgsTmModCksQnIobikpfSx1RSxjRSksTEE9UmUoZ0UsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9YCR7Yml9L2NvbXByZXNzZWQvJHtEYXRlLm5vdygpfV8ke1hhKGUuc3JjKX1gLHtjb21wcmVzc2VkV2lkdGg6cyxjb21wcmVzc2VkSGVpZ2h0OnV9PWU7dHlwZW9mIHM9PSJudW1iZXIiJiYoZS53aWR0aD1zKyJweCIpLHR5cGVvZiB1PT0ibnVtYmVyIiYmKGUuaGVpZ2h0PXUrInB4IiksYy56aXAuY29tcHJlc3NJbWFnZShaLmV4dGVuZCh7fSxlLHtkc3Q6cn0pLCgpPT57dCh7dGVtcEZpbGVQYXRoOnJ9KX0sbil9LG1FLHZFKSxEQT1SZShfRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1gJHtiaX0vY29tcHJlc3NlZC8ke0RhdGUubm93KCl9XyR7WGEoZS5zcmMpfWA7Yy56aXAuY29tcHJlc3NWaWRlbyhaLmV4dGVuZCh7fSxlLHtmaWxlbmFtZTpyfSkscz0+e3Qoe3RlbXBGaWxlUGF0aDpyLHNpemU6cy5zaXplfSl9LG4pfSx5RSxiRSk7ZnVuY3Rpb24gRkEoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57Yy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsZnVuY3Rpb24ocil7ci5nZXRNZXRhZGF0YSh0LG4sITEpfSxuKX0pfWxldCBWQT1SZShHMCwoe2NvdW50OmUsc2l6ZVR5cGU6dCxzb3VyY2VUeXBlOm4sY3JvcDpyfT17fSx7cmVzb2x2ZTpzLHJlamVjdDp1fSk9PntRaSgpO2xldHt0OnZ9PWV0KCksRT1Ccih1KTtmdW5jdGlvbiBGKG1lKXtsZXQgQWU9W10seGU9W107UHJvbWlzZS5hbGwobWUubWFwKGJ0PT5GQShidCkpKS50aGVuKGJ0PT57YnQuZm9yRWFjaCgoQXQsWnQpPT57bGV0IHp0PW1lW1p0XTt4ZS5wdXNoKHp0KSxBZS5wdXNoKHtwYXRoOnp0LHNpemU6QXQuc2l6ZX0pfSkscyh7dGVtcEZpbGVQYXRoczp4ZSx0ZW1wRmlsZXM6QWV9KX0pLmNhdGNoKEUpfWZ1bmN0aW9uIE4oKXtjLmNhbWVyYS5nZXRDYW1lcmEoKS5jYXB0dXJlSW1hZ2UoQWU9PkYoW0FlXSksRSx7ZmlsZW5hbWU6YmkrIi9jYW1lcmEvIixyZXNvbHV0aW9uOiJoaWdoIixjcm9wOnIsc2l6ZVR5cGU6dH0pfWZ1bmN0aW9uIE0oKXtjLmdhbGxlcnkucGljaygoe2ZpbGVzOm1lfSk9PkYobWUpLEUse21heGltdW06ZSxtdWx0aXBsZTohMCxzeXN0ZW06ITEsZmlsZW5hbWU6YmkrIi9nYWxsZXJ5LyIscGVybWlzc2lvbkFsZXJ0OiEwLGNyb3A6cixzaXplVHlwZTp0fSl9aWYobi5sZW5ndGg9PT0xKXtpZihuLmluY2x1ZGVzKCJhbGJ1bSIpKXtNKCk7cmV0dXJufWVsc2UgaWYobi5pbmNsdWRlcygiY2FtZXJhIikpe04oKTtyZXR1cm59fWMubmF0aXZlVUkuYWN0aW9uU2hlZXQoe2NhbmNlbDp2KCJ1bmkuY2hvb3NlSW1hZ2UuY2FuY2VsIiksYnV0dG9uczpbe3RpdGxlOnYoInVuaS5jaG9vc2VJbWFnZS5zb3VyY2VUeXBlLmNhbWVyYSIpfSx7dGl0bGU6digidW5pLmNob29zZUltYWdlLnNvdXJjZVR5cGUuYWxidW0iKX1dfSxtZT0+e3N3aXRjaChtZS5pbmRleCl7Y2FzZSAxOk4oKTticmVhaztjYXNlIDI6TSgpO2JyZWFrO2RlZmF1bHQ6RSgpO2JyZWFrfX0pfSxZMCxxMCksVUE9UmUoSzAsKHtzb3VyY2VUeXBlOmUsY29tcHJlc3NlZDp0LG1heER1cmF0aW9uOm4sY2FtZXJhOnJ9LHtyZXNvbHZlOnMscmVqZWN0OnV9KT0+e19pKCk7bGV0e3Q6dn09ZXQoKSxFPUJyKHUpO2Z1bmN0aW9uIEYobWUpe2MuaW8uZ2V0VmlkZW9JbmZvKHtmaWxlUGF0aDptZSxzdWNjZXNzKEFlKXtsZXQgeGU9e2Vyck1zZzoiY2hvb3NlVmlkZW86b2siLHRlbXBGaWxlUGF0aDptZSxzaXplOkFlLnNpemUsZHVyYXRpb246QWUuZHVyYXRpb24sd2lkdGg6QWUud2lkdGgsaGVpZ2h0OkFlLmhlaWdodH07cyh4ZSl9LGZhaWw6RX0pfWZ1bmN0aW9uIE4oKXtjLmdhbGxlcnkucGljaygoe2ZpbGVzOm1lfSk9PkYobWVbMF0pLEUse2ZpbHRlcjoidmlkZW8iLHN5c3RlbTohMSxtdWx0aXBsZTohMCxtYXhpbXVtOjEsZmlsZW5hbWU6YmkrIi9nYWxsZXJ5LyIscGVybWlzc2lvbkFsZXJ0OiEwLHZpZGVvQ29tcHJlc3M6dH0pfWZ1bmN0aW9uIE0oKXtjLmNhbWVyYS5nZXRDYW1lcmEoKS5zdGFydFZpZGVvQ2FwdHVyZShGLEUse2luZGV4OnI9PT0iZnJvbnQiPyIyIjoiMSIsdmlkZW9NYXhpbXVtRHVyYXRpb246bixmaWxlbmFtZTpiaSsiL2NhbWVyYS8iLHZpZGVvQ29tcHJlc3M6dH0pfWlmKGUubGVuZ3RoPT09MSl7aWYoZS5pbmNsdWRlcygiYWxidW0iKSl7TigpO3JldHVybn1lbHNlIGlmKGUuaW5jbHVkZXMoImNhbWVyYSIpKXtNKCk7cmV0dXJufX1jLm5hdGl2ZVVJLmFjdGlvblNoZWV0KHtjYW5jZWw6digidW5pLmNob29zZVZpZGVvLmNhbmNlbCIpLGJ1dHRvbnM6W3t0aXRsZTp2KCJ1bmkuY2hvb3NlVmlkZW8uc291cmNlVHlwZS5jYW1lcmEiKX0se3RpdGxlOnYoInVuaS5jaG9vc2VWaWRlby5zb3VyY2VUeXBlLmFsYnVtIil9XX0sbWU9Pntzd2l0Y2gobWUuaW5kZXgpe2Nhc2UgMTpNKCk7YnJlYWs7Y2FzZSAyOk4oKTticmVhaztkZWZhdWx0OkUoKTticmVha319KX0sWjAsSjApLEhBPVJlKEYwLChlLHtyZXNvbHZlOnR9KT0+e2Mua2V5LnNob3dTb2Z0S2V5Ym9yZCgpLHQoKX0pLCRBPVJlKEQwLChlLHtyZXNvbHZlOnR9KT0+e2Mua2V5LmhpZGVTb2Z0S2V5Ym9yZCgpLHQoKX0pO2Z1bmN0aW9uIGxnKGUpe3B0Lmludm9rZU9uQ2FsbGJhY2soc2UuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSxlKX1sZXQgakE9Rm4oc2UuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSwoKT0+e3B0Lm9uKHNlLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsbGcpfSksekE9aWkoc2UuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSwoKT0+e3B0Lm9mZihzZS5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLGxnKX0pO2NsYXNzIFdBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl9kb3dubG9hZGVyPXQsdC5hZGRFdmVudExpc3RlbmVyKCJzdGF0ZWNoYW5nZWQiLChuLHIpPT57bi5kb3dubG9hZGVkU2l6ZSYmbi50b3RhbFNpemUmJnRoaXMuX2NhbGxiYWNrcy5mb3JFYWNoKHM9PntzKHtwcm9ncmVzczpNYXRoLnJvdW5kKG4uZG93bmxvYWRlZFNpemUvbi50b3RhbFNpemUqMTAwKSx0b3RhbEJ5dGVzV3JpdHRlbjpuLmRvd25sb2FkZWRTaXplLHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6bi50b3RhbFNpemV9KX0pfSl9YWJvcnQoKXt0aGlzLl9kb3dubG9hZGVyLmFib3J0KCl9b25Qcm9ncmVzc1VwZGF0ZSh0KXshWi5pc0Z1bmN0aW9uKHQpfHx0aGlzLl9jYWxsYmFja3MucHVzaCh0KX1vZmZQcm9ncmVzc1VwZGF0ZSh0KXtsZXQgbj10aGlzLl9jYWxsYmFja3MuaW5kZXhPZih0KTtuPj0wJiZ0aGlzLl9jYWxsYmFja3Muc3BsaWNlKG4sMSl9b25IZWFkZXJzUmVjZWl2ZWQodCl7dGhyb3cgbmV3IEVycm9yKCJNZXRob2Qgbm90IGltcGxlbWVudGVkLiIpfW9mZkhlYWRlcnNSZWNlaXZlZCh0KXt0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuIil9fWxldCBHQT1GcihrRSwoe3VybDplLGhlYWRlcjp0LHRpbWVvdXQ6bn0se3Jlc29sdmU6cixyZWplY3Q6c30pPT57bj0obnx8SS5uZXR3b3JrVGltZW91dCYmSS5uZXR3b3JrVGltZW91dC5yZXF1ZXN0fHw2MCoxZTMpLzFlMztsZXQgdT1jLmRvd25sb2FkZXIuY3JlYXRlRG93bmxvYWQoZSx7dGltZW91dDpuLGZpbGVuYW1lOmJpKyIvZG93bmxvYWQvIixyZXRyeTowLHJldHJ5SW50ZXJ2YWw6MH0sKEUsRik9PntGP3Ioe3RlbXBGaWxlUGF0aDpFLmZpbGVuYW1lLHN0YXR1c0NvZGU6Rn0pOnMoYHN0YXR1c0NvZGU6ICR7Rn1gKX0pLHY9bmV3IFdBKHUpO2ZvcihsZXQgRSBpbiB0KVouaGFzT3duKHQsRSkmJnUuc2V0UmVxdWVzdEhlYWRlcihFLHRbRV0pO3JldHVybiB1LnN0YXJ0KCksdn0seEUsUkUpLHFBPWU9PntsZXQgdD1lWyJTZXQtQ29va2llIl18fGVbInNldC1jb29raWUiXSxuPVtdO2lmKCF0KXJldHVybltdO3RbMF09PT0iWyImJnRbdC5sZW5ndGgtMV09PT0iXSImJih0PXQuc2xpY2UoMSwtMSkpO2xldCByPXQuc3BsaXQoIjsiKTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdLmluZGV4T2YoIkV4cGlyZXM9IikhPT0tMXx8cltzXS5pbmRleE9mKCJleHBpcmVzPSIpIT09LTE/bi5wdXNoKHJbc10ucmVwbGFjZSgiLCIsIiIpKTpuLnB1c2gocltzXSk7cmV0dXJuIG49bi5qb2luKCI7Iikuc3BsaXQoIiwiKSxufTtmdW5jdGlvbiBZQShlLHQpe2lmKFouaXNTdHJpbmcoZS5kYXRhKSYmZS5kYXRhLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGUuZGF0YT1lLmRhdGEuc2xpY2UoMSkpLGUuc3RhdHVzQ29kZT1wYXJzZUludChTdHJpbmcoZS5zdGF0dXNDb2RlKSwxMCksWi5pc1BsYWluT2JqZWN0KGUuaGVhZGVyKSYmKGUuaGVhZGVyPU9iamVjdC5rZXlzKGUuaGVhZGVyKS5yZWR1Y2UoZnVuY3Rpb24obixyKXtsZXQgcz1lLmhlYWRlcltyXTtyZXR1cm4gWi5pc0FycmF5KHMpP25bcl09cy5qb2luKCIsIik6Wi5pc1N0cmluZyhzKSYmKG5bcl09cyksbn0se30pKSx0LmRhdGFUeXBlJiZ0LmRhdGFUeXBlLnRvTG93ZXJDYXNlKCk9PT0ianNvbiIpdHJ5e2UuZGF0YT1KU09OLnBhcnNlKGUuZGF0YSl9Y2F0Y2gobil7fXJldHVybiBlfWNsYXNzIEtBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlcXVlc3RUYXNrPXR9YWJvcnQoKXt0aGlzLl9yZXF1ZXN0VGFzay5hYm9ydCgpfW9mZkhlYWRlcnNSZWNlaXZlZCgpe31vbkhlYWRlcnNSZWNlaXZlZCgpe319bGV0IEpBPUZyKEVFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtoZWFkZXI6cixtZXRob2Q6cyxkYXRhOnUsdGltZW91dDp2LHVybDpFLHJlc3BvbnNlVHlwZTpGLHNzbFZlcmlmeTpOLGZpcnN0SXB2NDpNLHRsczptZX09ZSxBZTtmb3IobGV0IGZ0IGluIHIpaWYoZnQudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXtBZT1yW2Z0XTticmVha31zIT09IkdFVCImJkFlJiZBZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik9PT0wJiZaLmlzUGxhaW5PYmplY3QodSkmJih1PUpTT04uc3RyaW5naWZ5KHUpKTtsZXQgeGU9RmEoInN0cmVhbSIpLGJ0PXt9LEF0LFp0LHp0PSExO2ZvcihsZXQgZnQgaW4gcilpZighenQmJmZ0LnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIil7aWYoenQ9ITAsYnRbIkNvbnRlbnQtVHlwZSJdPXJbZnRdLHMhPT0iR0VUIiYmcltmdF0uaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik9PT0wJiYhWi5pc1N0cmluZyh1KSYmISh1IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXtsZXQgWHQ9W107Zm9yKGxldCBXdCBpbiB1KVouaGFzT3duKHUsV3QpJiZYdC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChXdCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh1W1d0XSkpO3U9WHQuam9pbigiJiIpfX1lbHNlIGJ0W2Z0XT1yW2Z0XTshenQmJnM9PT0iUE9TVCImJihidFsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIpLHYmJihBdD1SKCgpPT57WnQ9ITAsbigidGltZW91dCIpfSx2KzIwMCkpO2xldCBDbj17bWV0aG9kOnMsdXJsOkUudHJpbSgpLGhlYWRlcnM6YnQsdHlwZTpGPT09ImFycmF5YnVmZmVyIj8iYmFzZTY0IjoidGV4dCIsdGltZW91dDp2fHw2ZTUsc3NsVmVyaWZ5OiFOLGZpcnN0SXB2NDpNLHRsczptZX0seW49ITE7cyE9PSJHRVQiJiYodG9TdHJpbmcuY2FsbCh1KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/eW49ITA6Q24uYm9keT1aLmlzU3RyaW5nKHUpP3U6SlNPTi5zdHJpbmdpZnkodSkpO2xldCBMdD0oe29rOmZ0LHN0YXR1czpYdCxkYXRhOld0LGhlYWRlcnM6S3QsZXJyb3JNc2c6cXR9KT0+e2lmKFp0KXJldHVybjtBdCYmdyhBdCk7bGV0IGNyPVh0O2lmKGNyPjApdChZQSh7ZGF0YTpmdCYmRj09PSJhcnJheWJ1ZmZlciI/T2koV3QpOld0LHN0YXR1c0NvZGU6Y3IsaGVhZGVyOkt0LGNvb2tpZXM6cUEoS3QpfSxlKSk7ZWxzZXtsZXQgUXQ9ImFib3J0IHN0YXR1c0NvZGU6IitjcjtxdCYmKFF0PVF0KyIgIitxdCksbihRdCl9fTtyZXR1cm4geW4/eGUuZmV0Y2hXaXRoQXJyYXlCdWZmZXIoeyJAdHlwZSI6ImJpbmFyeSIsYmFzZTY0OlpvKHUpfSxDbixMdCk6eGUuZmV0Y2goQ24sTHQpLG5ldyBLQSh7YWJvcnQoKXtadD0hMCxBdCYmdyhBdCksbigiYWJvcnQiKX19KX0sT0UsVEUpLFpBPVJlKFBFLCh7Y2VydGlmaWNhdGVzOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e0ZhKCJzdHJlYW0iKS5jb25maWdNVExTKGUsKHt0eXBlOnMsY29kZTp1LG1lc3NhZ2U6dn0pPT57c3dpdGNoKHMpe2Nhc2Uic3VjY2VzcyI6dCh7Y29kZTp1fSk7YnJlYWs7Y2FzZSJmYWlsIjpuKHYse2NvZGU6dX0pO2JyZWFrfX0pfSxORSxJRSksbXU9W10sX3U9e30sTWQ9e29wZW46IiIsY2xvc2U6IiIsZXJyb3I6IiIsbWVzc2FnZToiIn0sSnU7ZnVuY3Rpb24gWEEoZSl7bGV0IHQ9U3RyaW5nKERhdGUubm93KCkpLG47dHJ5e0p1fHwoSnU9RmEoInVuaS13ZWJTb2NrZXQiKSxRQShKdSkpLEp1LldlYlNvY2tldCh7aWQ6dCx1cmw6ZS51cmwscHJvdG9jb2w6Wi5pc0FycmF5KGUucHJvdG9jb2xzKT9lLnByb3RvY29scy5qb2luKCIsIik6ZS5wcm90b2NvbHMsaGVhZGVyOmUuaGVhZGVyfSl9Y2F0Y2gocil7bj1yfXJldHVybntzb2NrZXQ6SnUsc29ja2V0SWQ6dCxlcnJNc2c6bn19ZnVuY3Rpb24gUUEoZSl7ZS5vbm9wZW4odD0+e2xldCBuPV91W3QuaWRdOyFufHxuLl9zb2NrZXRPbk9wZW4oKX0pLGUub25tZXNzYWdlKHQ9PntsZXQgbj1fdVt0LmlkXTshbnx8bi5fc29ja2V0T25NZXNzYWdlKHQpfSksZS5vbmVycm9yKHQ9PntsZXQgbj1fdVt0LmlkXTshbnx8bi5fc29ja2V0T25FcnJvcigpfSksZS5vbmNsb3NlKHQ9PntsZXR7aWQ6bixjb2RlOnIscmVhc29uOnN9PXQsdT1fdVtuXTshdXx8dS5fc29ja2V0T25DbG9zZSh7Y29kZTpyLHJlYXNvbjpzfSl9KX1jbGFzcyBlT3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9bix0aGlzLl9zb2NrZXQ9dCx0aGlzLl9jYWxsYmFja3M9e29wZW46W10sY2xvc2U6W10sZXJyb3I6W10sbWVzc2FnZTpbXX0sdGhpcy5DTE9TRUQ9Myx0aGlzLkNMT1NJTkc9Mix0aGlzLkNPTk5FQ1RJTkc9MCx0aGlzLk9QRU49MSx0aGlzLnJlYWR5U3RhdGU9dGhpcy5DTE9TRUQsISF0aGlzLl9zb2NrZXR9X3NvY2tldE9uT3Blbigpe3RoaXMucmVhZHlTdGF0ZT10aGlzLk9QRU4sdGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgib3BlbiIpfV9zb2NrZXRPbk1lc3NhZ2UodCl7dGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgibWVzc2FnZSIse2RhdGE6dHlwZW9mIHQuZGF0YT09Im9iamVjdCI/T2kodC5kYXRhLmJhc2U2NCk6dC5kYXRhfSl9X3NvY2tldE9uRXJyb3IoKXt0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJlcnJvciIpLHRoaXMub25FcnJvck9yQ2xvc2UoKX1fc29ja2V0T25DbG9zZSh0KXt0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJjbG9zZSIsdCksdGhpcy5vbkVycm9yT3JDbG9zZSgpfW9uRXJyb3JPckNsb3NlKCl7dGhpcy5yZWFkeVN0YXRlPXRoaXMuQ0xPU0VELGRlbGV0ZSBfdVt0aGlzLmlkXTtsZXQgdD1tdS5pbmRleE9mKHRoaXMpO3Q+PTAmJm11LnNwbGljZSh0LDEpfXNvY2tldFN0YXRlQ2hhbmdlKHQsbj17fSl7bGV0e2NvZGU6cixyZWFzb246c309bix1PXQ9PT0ibWVzc2FnZSI/e2RhdGE6bi5kYXRhfTp0PT09ImNsb3NlIj97Y29kZTpyLHJlYXNvbjpzfTp7fTt0aGlzPT09bXVbMF0mJk1kW3RdJiZwdC5pbnZva2VPbkNhbGxiYWNrKE1kW3RdLHUpLHRoaXMuX2NhbGxiYWNrc1t0XS5mb3JFYWNoKHY9PntaLmlzRnVuY3Rpb24odikmJnYodSl9KX1zZW5kKHQsbj0hMCl7dGhpcy5yZWFkeVN0YXRlIT09dGhpcy5PUEVOJiZzZS5jYWxsT3B0aW9ucyh0LCJzZW5kU29ja2V0TWVzc2FnZTpmYWlsIFdlYlNvY2tldCBpcyBub3QgY29ubmVjdGVkIik7dHJ5e3RoaXMuX3NvY2tldC5zZW5kKHtpZDp0aGlzLmlkLGRhdGE6dHlwZW9mIHQuZGF0YT09Im9iamVjdCI/eyJAdHlwZSI6ImJpbmFyeSIsYmFzZTY0OlpvKHQuZGF0YSl9OnQuZGF0YX0pLG4mJnNlLmNhbGxPcHRpb25zKHQsInNlbmRTb2NrZXRNZXNzYWdlOm9rIil9Y2F0Y2gocil7biYmc2UuY2FsbE9wdGlvbnModCxgc2VuZFNvY2tldE1lc3NhZ2U6ZmFpbCAke3J9YCl9fWNsb3NlKHQsbj0hMCl7dGhpcy5yZWFkeVN0YXRlPXRoaXMuQ0xPU0lORzt0cnl7dGhpcy5fc29ja2V0LmNsb3NlKFouZXh0ZW5kKHtpZDp0aGlzLmlkLGFyZ3M6dH0pKSxuJiZzZS5jYWxsT3B0aW9ucyh0LCJjbG9zZVNvY2tldDpvayIpfWNhdGNoKHIpe24mJnNlLmNhbGxPcHRpb25zKHQsYGNsb3NlU29ja2V0OmZhaWwgJHtyfWApfX1vbk9wZW4odCl7dGhpcy5fY2FsbGJhY2tzLm9wZW4ucHVzaCh0KX1vbkNsb3NlKHQpe3RoaXMuX2NhbGxiYWNrcy5jbG9zZS5wdXNoKHQpfW9uRXJyb3IodCl7dGhpcy5fY2FsbGJhY2tzLmVycm9yLnB1c2godCl9b25NZXNzYWdlKHQpe3RoaXMuX2NhbGxiYWNrcy5tZXNzYWdlLnB1c2godCl9fWxldCB0Tz1GcihERSwoe3VybDplLHByb3RvY29sczp0LGhlYWRlcjpuLG1ldGhvZDpyfSx7cmVzb2x2ZTpzLHJlamVjdDp1fSk9PntsZXR7c29ja2V0OnYsc29ja2V0SWQ6RSxlcnJNc2c6Rn09WEEoe3VybDplLHByb3RvY29sczp0LGhlYWRlcjpuLG1ldGhvZDpyfSksTj1uZXcgZU8odixFKTtyZXR1cm4gRj9SKCgpPT57dShGKX0sMCk6KG11LnB1c2goTiksX3VbRV09TiksUigoKT0+e3MoKX0sMCksTn0sVkUsRkUpLG5PPVJlKFVFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPW11WzBdO2lmKCFyfHxyLnJlYWR5U3RhdGUhPT1yLk9QRU4pe24oIldlYlNvY2tldCBpcyBub3QgY29ubmVjdGVkIik7cmV0dXJufXIuc2VuZCh7ZGF0YTplLmRhdGF9LCExKSx0KCl9LEhFKSxyTz1SZSgkRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1tdVswXTtpZighcil7bigiV2ViU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQiKTtyZXR1cm59ci5yZWFkeVN0YXRlPXIuQ0xPU0lORyxyLmNsb3NlKGUsITEpLHQoKX0sakUpO2Z1bmN0aW9uIFNmKGUpe2xldCB0PWBvblNvY2tldCR7Wi5jYXBpdGFsaXplKGUpfWA7cmV0dXJuIEZuKHQsKCk9PntNZFtlXT10fSl9bGV0IGlPPVNmKCJvcGVuIiksb089U2YoImVycm9yIiksYU89U2YoIm1lc3NhZ2UiKSxzTz1TZigiY2xvc2UiKTtjbGFzcyBsT3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fdXBsb2FkZXI9dCx0LmFkZEV2ZW50TGlzdGVuZXIoInN0YXRlY2hhbmdlZCIsKG4scik9PntuLnVwbG9hZGVkU2l6ZSYmbi50b3RhbFNpemUmJnRoaXMuX2NhbGxiYWNrcy5mb3JFYWNoKHM9PntzKHtwcm9ncmVzczpwYXJzZUludChTdHJpbmcobi51cGxvYWRlZFNpemUvbi50b3RhbFNpemUqMTAwKSksdG90YWxCeXRlc1NlbnQ6bi51cGxvYWRlZFNpemUsdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kOm4udG90YWxTaXplfSl9KX0pfWFib3J0KCl7dGhpcy5fdXBsb2FkZXIuYWJvcnQoKX1vblByb2dyZXNzVXBkYXRlKHQpeyFaLmlzRnVuY3Rpb24odCl8fHRoaXMuX2NhbGxiYWNrcy5wdXNoKHQpfW9uSGVhZGVyc1JlY2VpdmVkKCl7fW9mZlByb2dyZXNzVXBkYXRlKHQpe2xldCBuPXRoaXMuX2NhbGxiYWNrcy5pbmRleE9mKHQpO24+PTAmJnRoaXMuX2NhbGxiYWNrcy5zcGxpY2UobiwxKX1vZmZIZWFkZXJzUmVjZWl2ZWQoKXt9fWxldCBjTz1GcihCRSwoe3VybDplLHRpbWVvdXQ6dCxoZWFkZXI6bixmb3JtRGF0YTpyLGZpbGVzOnMsZmlsZVBhdGg6dSxuYW1lOnZ9LHtyZXNvbHZlOkUscmVqZWN0OkZ9KT0+e3Q9KHR8fEkubmV0d29ya1RpbWVvdXQmJkkubmV0d29ya1RpbWVvdXQudXBsb2FkRmlsZXx8NjAqMWUzKS8xZTM7bGV0IE49Yy51cGxvYWRlci5jcmVhdGVVcGxvYWQoZSx7dGltZW91dDp0LHJldHJ5OjAscmV0cnlJbnRlcnZhbDowfSwobWUsQWUpPT57QWU/RSh7ZGF0YTptZS5yZXNwb25zZVRleHQsc3RhdHVzQ29kZTpBZX0pOkYoYHN0YXR1c0NvZGU6ICR7QWV9YCl9KTtmb3IobGV0IG1lIGluIG4pWi5oYXNPd24obixtZSkmJk4uc2V0UmVxdWVzdEhlYWRlcihtZSxTdHJpbmcoblttZV0pKTtmb3IobGV0IG1lIGluIHIpWi5oYXNPd24ocixtZSkmJk4uYWRkRGF0YShtZSxTdHJpbmcoclttZV0pKTtzJiZzLmxlbmd0aD9zLmZvckVhY2gobWU9PntOLmFkZEZpbGUoR3QobWUudXJpKSx7a2V5Om1lLm5hbWV8fCJmaWxlIn0pfSk6Ti5hZGRGaWxlKEd0KHUpLHtrZXk6dn0pO2xldCBNPW5ldyBsTyhOKTtyZXR1cm4gTi5zdGFydCgpLE19LExFLE1FKSxhYz17fSx1Tz1bInBsYXkiLCJjYW5wbGF5IiwiZW5kZWQiLCJzdG9wIiwid2FpdGluZyIsInNlZWtpbmciLCJzZWVrZWQiLCJwYXVzZSJdLGNnPSJwbGF5YmFjayIsZk89MjAwLGRPPWU9PntsZXQgdD1hY1tlXTshdHx8dC5pbml0U3RhdGVDaGFnZXx8KHQuaW5pdFN0YXRlQ2hhZ2U9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbj0+e3VnKHtzdGF0ZToiZXJyb3IiLGF1ZGlvSWQ6ZSxlcnJNc2c6Ik1lZGlhRXJyb3IiLGVyckNvZGU6bi5jb2RlfSl9KSx1Ty5mb3JFYWNoKG49Pnt0LmFkZEV2ZW50TGlzdGVuZXIobiwoKT0+e249PT0icGxheSI/dC5pc1N0b3BwZWQ9ITE6bj09PSJzdG9wIiYmKHQuaXNTdG9wcGVkPSEwKSx1Zyh7c3RhdGU6bixhdWRpb0lkOmV9KX0pfSkpfTtmdW5jdGlvbiBwTygpe2xldCBlPWAke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpfWAsdD1hY1tlXT1jLmF1ZGlvLmNyZWF0ZVBsYXllcigiIik7cmV0dXJuIHQuc3JjPSIiLHQudm9sdW1lPTEsdC5zdGFydFRpbWU9MCx0LnNldFNlc3Npb25DYXRlZ29yeShjZykse2Vyck1zZzoiY3JlYXRlQXVkaW9JbnN0YW5jZTpvayIsYXVkaW9JZDplfX1mdW5jdGlvbiBoTyh7YXVkaW9JZDplLHNyYzp0LHN0YXJ0VGltZTpuLGF1dG9wbGF5OnI9ITEsbG9vcDpzPSExLG9iZXlNdXRlU3dpdGNoOnUsdm9sdW1lOnYsc2Vzc2lvbkNhdGVnb3J5OkU9Y2cscGxheWJhY2tSYXRlOkZ9KXtsZXQgTj1hY1tlXTtpZihOKXtsZXQgTT17bG9vcDpzLGF1dG9wbGF5OnJ9O2lmKHQpe2xldCBtZT1HdCh0KTtOLnNyYyE9PW1lJiYoTi5zcmM9TS5zcmM9bWUpfW4mJihOLnN0YXJ0VGltZT1NLnN0YXJ0VGltZT1uKSx0eXBlb2Ygdj09Im51bWJlciImJihOLnZvbHVtZT1NLnZvbHVtZT12KSxOLnNldFN0eWxlcyhNKSxFJiZOLnNldFNlc3Npb25DYXRlZ29yeShFKSxGJiZOLnBsYXliYWNrUmF0ZSYmTi5wbGF5YmFja1JhdGUoRiksZE8oZSl9cmV0dXJue2Vyck1zZzoic2V0QXVkaW9TdGF0ZTpvayJ9fWZ1bmN0aW9uIGdPKHthdWRpb0lkOmV9KXtsZXQgdD1hY1tlXTtpZighdClyZXR1cm57ZXJyTXNnOiJnZXRBdWRpb1N0YXRlOmZhaWwifTtsZXR7c3JjOm4sc3RhcnRUaW1lOnIsdm9sdW1lOnN9PXQ7cmV0dXJue2Vyck1zZzoiZ2V0QXVkaW9TdGF0ZTpvayIsZHVyYXRpb246MWUzKih0LmdldER1cmF0aW9uKCl8fDApLGN1cnJlbnRUaW1lOnQuaXNTdG9wcGVkPzA6MWUzKnQuZ2V0UG9zaXRpb24oKSxwYXVzZWQ6dC5pc1BhdXNlZCgpLHNyYzpuLHZvbHVtZTpzLHN0YXJ0VGltZToxZTMqcixidWZmZXJlZDoxZTMqdC5nZXRCdWZmZXJlZCgpfX1mdW5jdGlvbiB2Tyh7b3BlcmF0aW9uVHlwZTplLGF1ZGlvSWQ6dCxjdXJyZW50VGltZTpufSl7bGV0IHI9YWNbdF07c3dpdGNoKGUpe2Nhc2UicGxheSI6Y2FzZSJwYXVzZSI6Y2FzZSJzdG9wIjpyW2U9PT0icGxheSImJnIuaXNQYXVzZWQoKT8icmVzdW1lIjplXSgpO2JyZWFrO2Nhc2Uic2VlayI6dHlwZW9mIG4hPSJ1bmRlZmluZWQiJiZyLnNlZWtUbyhuLzFlMyk7YnJlYWt9cmV0dXJue2Vyck1zZzoib3BlcmF0ZUF1ZGlvOm9rIn19bGV0IExkPU9iamVjdC5jcmVhdGUobnVsbCksdWc9KHtzdGF0ZTplLGF1ZGlvSWQ6dCxlcnJNc2c6bixlcnJDb2RlOnJ9KT0+e2xldCBzPUxkW3RdO2lmKHMpaWYoRmQocyxlLG4sciksZT09PSJwbGF5Iil7bGV0IHU9cy5jdXJyZW50VGltZTtGZChzLCJ0aW1lVXBkYXRlIikscy5fX3RpbWluZz1kKCgpPT57cy5jdXJyZW50VGltZSE9PXUmJkZkKHMsInRpbWVVcGRhdGUiKX0sZk8pfWVsc2UoZT09PSJwYXVzZSJ8fGU9PT0ic3RvcCJ8fGU9PT0iZXJyb3IiKSYmbShzLl9fdGltaW5nKX0sbU89W3tuYW1lOiJzcmMiLGNhY2hlOiEwfSx7bmFtZToic3RhcnRUaW1lIixkZWZhdWx0OjAsY2FjaGU6ITB9LHtuYW1lOiJhdXRvcGxheSIsZGVmYXVsdDohMSxjYWNoZTohMH0se25hbWU6Imxvb3AiLGRlZmF1bHQ6ITEsY2FjaGU6ITB9LHtuYW1lOiJvYmV5TXV0ZVN3aXRjaCIsZGVmYXVsdDohMCxyZWFkb25seTohMCxjYWNoZTohMH0se25hbWU6ImR1cmF0aW9uIixyZWFkb25seTohMH0se25hbWU6ImN1cnJlbnRUaW1lIixyZWFkb25seTohMH0se25hbWU6InBhdXNlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJidWZmZXJlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJ2b2x1bWUifSx7bmFtZToicGxheWJhY2tSYXRlIixjYWNoZTohMH1dO2NsYXNzIERke2NvbnN0cnVjdG9yKHQpe3RoaXMuaWQ9dCx0aGlzLl9jYWxsYmFja3M9e30sdGhpcy5fb3B0aW9ucz17fSxxcC5mb3JFYWNoKG49Pnt0aGlzLl9jYWxsYmFja3Nbbl09W119KSxtTy5mb3JFYWNoKG49PntsZXQgcj1uLm5hbWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMscix7Z2V0OigpPT57bGV0IHM9bi5jYWNoZT90aGlzLl9vcHRpb25zOmdPKHthdWRpb0lkOnRoaXMuaWR9KSx1PXIgaW4gcz9zW3JdOm4uZGVmYXVsdDtyZXR1cm4gdHlwZW9mIHU9PSJudW1iZXIiJiZyIT09InZvbHVtZSI/dS8xZTM6dX0sc2V0Om4ucmVhZG9ubHk/dm9pZCAwOnM9Pnt0aGlzLl9vcHRpb25zW3JdPXMsaE8oWi5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7YXVkaW9JZDp0aGlzLmlkfSkpfX0pfSksX08oKX1wbGF5KCl7dGhpcy5fb3BlcmF0ZSgicGxheSIpfXBhdXNlKCl7dGhpcy5fb3BlcmF0ZSgicGF1c2UiKX1zdG9wKCl7dGhpcy5fb3BlcmF0ZSgic3RvcCIpfXNlZWsodCl7dGhpcy5fb3BlcmF0ZSgic2VlayIse2N1cnJlbnRUaW1lOnQqMWUzfSl9ZGVzdHJveSgpe20odGhpcy5fX3RpbWluZyksYWNbdGhpcy5pZF0mJihhY1t0aGlzLmlkXS5jbG9zZSgpLGRlbGV0ZSBhY1t0aGlzLmlkXSksZGVsZXRlIExkW3RoaXMuaWRdfV9vcGVyYXRlKHQsbil7dk8oWi5leHRlbmQoe30sbix7YXVkaW9JZDp0aGlzLmlkLG9wZXJhdGlvblR5cGU6dH0pKX19bGV0IF9PPXNlLm9uY2UoKCk9PntxcC5mb3JFYWNoKGU9PntEZC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCl7Wi5pc0Z1bmN0aW9uKHQpJiZ0aGlzLl9jYWxsYmFja3NbZV0ucHVzaCh0KX19KSxkYi5mb3JFYWNoKGU9PntEZC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCl7bGV0IG49dGhpcy5fY2FsbGJhY2tzW2VdLHI9bi5pbmRleE9mKHQpO3I+PTAmJm4uc3BsaWNlKHIsMSl9fSl9KTtmdW5jdGlvbiBGZChlLHQsbixyKXtsZXQgcz1gb24ke1ouY2FwaXRhbGl6ZSh0KX1gO2UuX2NhbGxiYWNrc1tzXS5mb3JFYWNoKHU9PntaLmlzRnVuY3Rpb24odSkmJnUodD09PSJlcnJvciI/e2Vyck1zZzpuLGVyckNvZGU6cn06e30pfSl9bGV0IGJPPSR0KFVfLCgpPT57bGV0e2F1ZGlvSWQ6ZX09cE8oKSx0PW5ldyBEZChlKTtyZXR1cm4gTGRbZV09dCx0fSkseU89WyJjYW5wbGF5IiwicGxheSIsInBhdXNlIiwic3RvcCIsImVuZGVkIiwidGltZVVwZGF0ZSIsInByZXYiLCJuZXh0IiwiZXJyb3IiLCJ3YWl0aW5nIl0sZmc9e2NhbnBsYXk6W10scGxheTpbXSxwYXVzZTpbXSxzdG9wOltdLGVuZGVkOltdLHRpbWVVcGRhdGU6W10scHJldjpbXSxuZXh0OltdLGVycm9yOltdLHdhaXRpbmc6W119LGZuLFZkPW51bGwsRU89MjUwLFNPPVsicGxheSIsInBhdXNlIiwiZW5kZWQiLCJzdG9wIiwiY2FucGxheSJdO2Z1bmN0aW9uIHdPKCl7d2YoKSxSYyh7c3RhdGU6InRpbWVVcGRhdGUifSksVmQ9ZCgoKT0+e1JjKHtzdGF0ZToidGltZVVwZGF0ZSJ9KX0sRU8pfWZ1bmN0aW9uIHdmKCl7VmQhPT1udWxsJiZtKFZkKX1mdW5jdGlvbiBDTygpe2lmKGZuKXJldHVybjtsZXQgZT1wdC5pbnZva2VPbkNhbGxiYWNrO2ZuPWMuYXVkaW8uY3JlYXRlUGxheWVyKHthdXRvcGxheTohMCxiYWNrZ3JvdW5kQ29udHJvbDohMH0pLGZuLnNyYz1mbi50aXRsZT1mbi5lcG5hbWU9Zm4uc2luZ2VyPWZuLmNvdmVySW1nVXJsPWZuLndlYlVybD0iIixmbi5zdGFydFRpbWU9MCxTTy5mb3JFYWNoKHQ9Pntmbi5hZGRFdmVudExpc3RlbmVyKHQsKCk9Pnt0PT09InBsYXkiPyhmbi5pc1N0b3BwZWQ9ITEsd08oKSk6dD09PSJzdG9wIiYmKGZuLmlzU3RvcHBlZD0hMCksKHQ9PT0icGF1c2UifHx0PT09ImVuZGVkInx8dD09PSJzdG9wIikmJndmKCk7bGV0IG49YG9uTXVzaWMke3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWA7ZShuLHtkYXRhVXJsOmZuLnNyYyxlcnJNc2c6YCR7bn06b2tgfSksUmMoe3N0YXRlOnQsZGF0YVVybDpmbi5zcmN9KX0pfSksZm4uYWRkRXZlbnRMaXN0ZW5lcigid2FpdGluZyIsKCk9Pnt3ZigpLFJjKHtzdGF0ZToid2FpdGluZyIsZGF0YVVybDpmbi5zcmN9KX0pLGZuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0PT57d2YoKSxlKCJvbk11c2ljRXJyb3IiLHtkYXRhVXJsOmZuLnNyYyxlcnJNc2c6IkVycm9yOiIrdC5tZXNzYWdlfSksUmMoe3N0YXRlOiJlcnJvciIsZGF0YVVybDpmbi5zcmMsZXJyTXNnOnQubWVzc2FnZSxlcnJDb2RlOnQuY29kZX0pfSksZm4uYWRkRXZlbnRMaXN0ZW5lcigicHJldiIsKCk9PntSYyh7c3RhdGU6InByZXYifSl9KSxmbi5hZGRFdmVudExpc3RlbmVyKCJuZXh0IiwoKT0+e1JjKHtzdGF0ZToibmV4dCJ9KX0pfWZ1bmN0aW9uIEFPKCl7bGV0IGU9e2R1cmF0aW9uOjAsY3VycmVudFRpbWU6MCxwYXVzZWQ6ITEsc3JjOiIiLGJ1ZmZlcmVkOjAsdGl0bGU6IiIsZXBuYW1lOiIiLHNpbmdlcjoiIixjb3ZlckltZ1VybDoiIix3ZWJVcmw6IiIsc3RhcnRUaW1lOjAsZXJyTXNnOiJnZXRCYWNrZ3JvdW5kQXVkaW9TdGF0ZTpvayJ9O2lmKGZuKXtsZXQgdD17ZHVyYXRpb246Zm4uZ2V0RHVyYXRpb24oKXx8MCxjdXJyZW50VGltZTpmbi5pc1N0b3BwZWQ/MDpmbi5nZXRQb3NpdGlvbigpLHBhdXNlZDpmbi5pc1BhdXNlZCgpLHNyYzpmbi5zcmMsYnVmZmVyZWQ6Zm4uZ2V0QnVmZmVyZWQoKSx0aXRsZTpmbi50aXRsZSxlcG5hbWU6Zm4uZXBuYW1lLHNpbmdlcjpmbi5zaW5nZXIsY292ZXJJbWdVcmw6Zm4uY292ZXJJbWdVcmwsd2ViVXJsOmZuLndlYlVybCxzdGFydFRpbWU6Zm4uc3RhcnRUaW1lfTtlPVouZXh0ZW5kKGUsdCl9cmV0dXJuIGV9ZnVuY3Rpb24gZGcoZSx0KXtDTygpO2xldCBuPVsic3JjIiwic3RhcnRUaW1lIiwiY292ZXJJbWdVcmwiLCJ3ZWJVcmwiLCJzaW5nZXIiLCJlcG5hbWUiLCJ0aXRsZSJdO2lmKHQ9PT0icGxheWJhY2tSYXRlIil7bGV0IHM9ZVt0XTtmbi5wbGF5YmFja1JhdGUmJmZuLnBsYXliYWNrUmF0ZShwYXJzZUZsb2F0KHMpKTtyZXR1cm59bGV0IHI9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChzPT57aWYobi5pbmRleE9mKHMpPj0wKXtsZXQgdT1lW3NdO3M9PT1uWzBdJiZ1JiYodT1HdCh1KSksZm5bc109cltzXT11fX0pLGZuLnNldFN0eWxlcyhyKX1mdW5jdGlvbiBPTyh7b3BlcmF0aW9uVHlwZTplLHNyYzp0LHBvc2l0aW9uOm4sYXBpOnI9Im9wZXJhdGVNdXNpY1BsYXllciIsdGl0bGU6cyxjb3ZlckltZ1VybDp1fSl7dmFyIHY9WyJyZXN1bWUiLCJwYXVzZSIsInN0b3AiXTtyZXR1cm4gdi5pbmRleE9mKGUpPjA/Zm4mJmZuW2VdKCk6ZT09PSJwbGF5Ij8oZGcoe3NyYzp0LHN0YXJ0VGltZTpuLHRpdGxlOnMsY292ZXJJbWdVcmw6dX0pLGZuLnBsYXkoKSk6ZT09PSJzZWVrIiYmZm4mJmZuLnNlZWtUbyhuKSx7ZXJyTXNnOmAke3J9Om9rYH19ZnVuY3Rpb24gVE8oe29wZXJhdGlvblR5cGU6ZSxzcmM6dCxzdGFydFRpbWU6bixjdXJyZW50VGltZTpyfSl7cmV0dXJuIE9PKHtvcGVyYXRpb25UeXBlOmUsc3JjOnQscG9zaXRpb246bnx8cnx8MCxhcGk6Im9wZXJhdGVCYWNrZ3JvdW5kQXVkaW8ifSl9ZnVuY3Rpb24gUmMoe3N0YXRlOmUsZXJyTXNnOnQsZXJyQ29kZTpuLGRhdGFVcmw6cn0pe2ZnW2VdLmZvckVhY2gocz0+e1ouaXNGdW5jdGlvbihzKSYmcyhlPT09ImVycm9yIj97ZXJyTXNnOnQsZXJyQ29kZTpufTp7fSl9KX1sZXQgUE89c2Uub25jZSgoKT0+e3lPLmZvckVhY2goZT0+e3BnLnByb3RvdHlwZVtgb24ke1ouY2FwaXRhbGl6ZShlKX1gXT1mdW5jdGlvbih0KXtmZ1tlXS5wdXNoKHQpfX0pfSksTk89W3tuYW1lOiJkdXJhdGlvbiIscmVhZG9ubHk6ITB9LHtuYW1lOiJjdXJyZW50VGltZSIscmVhZG9ubHk6ITB9LHtuYW1lOiJwYXVzZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToic3JjIixjYWNoZTohMH0se25hbWU6InN0YXJ0VGltZSIsZGVmYXVsdDowLGNhY2hlOiEwfSx7bmFtZToiYnVmZmVyZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToidGl0bGUiLGNhY2hlOiEwfSx7bmFtZToiZXBuYW1lIixjYWNoZTohMH0se25hbWU6InNpbmdlciIsY2FjaGU6ITB9LHtuYW1lOiJjb3ZlckltZ1VybCIsY2FjaGU6ITB9LHtuYW1lOiJ3ZWJVcmwiLGNhY2hlOiEwfSx7bmFtZToicHJvdG9jb2wiLHJlYWRvbmx5OiEwLGRlZmF1bHQ6Imh0dHAifSx7bmFtZToicGxheWJhY2tSYXRlIixkZWZhdWx0OjEsY2FjaGU6ITB9XTtjbGFzcyBwZ3tjb25zdHJ1Y3Rvcigpe3RoaXMuX29wdGlvbnM9e30sTk8uZm9yRWFjaCh0PT57bGV0IG49dC5uYW1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLG4se2dldDooKT0+e2xldCByPXQuY2FjaGU/dGhpcy5fb3B0aW9uczpBTygpO3JldHVybiBuIGluIHI/cltuXTp0LmRlZmF1bHR9LHNldDp0LnJlYWRvbmx5P3ZvaWQgMDpyPT57dGhpcy5fb3B0aW9uc1tuXT1yLGRnKHRoaXMuX29wdGlvbnMsbil9fSl9KSxQTygpfXBsYXkoKXt0aGlzLl9vcGVyYXRlKCJwbGF5Iil9cGF1c2UoKXt0aGlzLl9vcGVyYXRlKCJwYXVzZSIpfXN0b3AoKXt0aGlzLl9vcGVyYXRlKCJzdG9wIil9c2Vlayh0KXt0aGlzLl9vcGVyYXRlKCJzZWVrIix7Y3VycmVudFRpbWU6dH0pfV9vcGVyYXRlKHQsbil7VE8oWi5leHRlbmQoe30sbix7b3BlcmF0aW9uVHlwZTp0fSkpfX1sZXQgaGcsSU89JHQob3ksKCk9PmhnfHwoaGc9bmV3IHBnKSk7Y2xhc3Mga097Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5jdHg9bn1zdGFydCh0KXtyZXR1cm4gQm4odGhpcy5jdHgsInN0YXJ0Iix0KX1zdG9wKHQpe3JldHVybiBCbih0aGlzLmN0eCwic3RvcCIsdCl9cGF1c2UodCl7cmV0dXJuIEJuKHRoaXMuY3R4LCJwYXVzZSIsdCl9cmVzdW1lKHQpe3JldHVybiBCbih0aGlzLmN0eCwicmVzdW1lIix0KX1zd2l0Y2hDYW1lcmEodCl7cmV0dXJuIEJuKHRoaXMuY3R4LCJzd2l0Y2hDYW1lcmEiLHQpfXNuYXBzaG90KHQpe3JldHVybiBCbih0aGlzLmN0eCwic25hcHNob3QiLHQpfXRvZ2dsZVRvcmNoKHQpe3JldHVybiBCbih0aGlzLmN0eCwidG9nZ2xlVG9yY2giLHQpfXBsYXlCR00odCl7cmV0dXJuIEduKHRoaXMuY3R4LCJwbGF5QkdNIix0KX1zdG9wQkdNKHQpe3JldHVybiBCbih0aGlzLmN0eCwic3RvcEJHTSIsdCl9cGF1c2VCR00odCl7cmV0dXJuIEJuKHRoaXMuY3R4LCJwYXVzZUJHTSIsdCl9cmVzdW1lQkdNKHQpe3JldHVybiBCbih0aGlzLmN0eCwicmVzdW1lQkdNIix0KX1zZXRCR01Wb2x1bWUodCl7cmV0dXJuIEduKHRoaXMuY3R4LCJzZXRCR01Wb2x1bWUiLHQpfXN0YXJ0UHJldmlldyh0KXtyZXR1cm4gQm4odGhpcy5jdHgsInN0YXJ0UHJldmlldyIsdCl9c3RvcFByZXZpZXcodCl7cmV0dXJuIEJuKHRoaXMuY3R4LCJzdG9wUHJldmlldyIsdCl9fWZ1bmN0aW9uIHNjKGUsdCxuLHIpe3B0Lmludm9rZVZpZXdNZXRob2QoImxpdmVwdXNoZXIuIitlLHtsaXZlUHVzaGVySWQ6ZSx0eXBlOm4sZGF0YTpyfSx0KX1jbGFzcyBST3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9dCx0aGlzLnBhZ2VJZD1ufXN0YXJ0KCl7c2ModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RhcnQiKX1zdG9wKCl7c2ModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXBhdXNlKCl7c2ModGhpcy5pZCx0aGlzLnBhZ2VJZCwicGF1c2UiKX1yZXN1bWUoKXtzYyh0aGlzLmlkLHRoaXMucGFnZUlkLCJyZXN1bWUiKX1zd2l0Y2hDYW1lcmEoKXtzYyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzd2l0Y2hDYW1lcmEiKX1zdGFydFByZXZpZXcoKXtzYyh0aGlzLmlkLHRoaXMucGFnZUlkLCJwcmV2aWV3Iil9c3RvcFByZXZpZXcoKXtzYyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzdG9wIil9c25hcHNob3QoKXtzYyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzbmFwc2hvdCIpfX1sZXQgeE89JHQoSF8sKGUsdCk9PntpZih0LiRwYWdlLm1ldGEuaXNOVnVlKXtpZighdClyZXR1cm4gY29uc29sZS53YXJuKCJ1bmkuY3JlYXRlTGl2ZVB1c2hlckNvbnRleHQ6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAxIHByZXNlbnQiKTtsZXQgbj1vYShlLHQpO3JldHVybiBuP25ldyBrTyhlLG4pOmNvbnNvbGUud2FybigiQ2FuIG5vdCBmaW5kIGAiK2UrImAiKX1yZXR1cm4gbmV3IFJPKGUsdC4kcGFnZS5pZCl9LCRfKTtmdW5jdGlvbiBCTyhlLHQsbixyKXtmdW5jdGlvbiBzKHUpe3JldHVybiB1IGluc3RhbmNlb2Ygbj91Om5ldyBuKGZ1bmN0aW9uKHYpe3YodSl9KX1yZXR1cm4gbmV3KG58fChuPVByb21pc2UpKShmdW5jdGlvbih1LHYpe2Z1bmN0aW9uIEUoTSl7dHJ5e04oci5uZXh0KE0pKX1jYXRjaChtZSl7dihtZSl9fWZ1bmN0aW9uIEYoTSl7dHJ5e04oci50aHJvdyhNKSl9Y2F0Y2gobWUpe3YobWUpfX1mdW5jdGlvbiBOKE0pe00uZG9uZT91KE0udmFsdWUpOnMoTS52YWx1ZSkudGhlbihFLEYpfU4oKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfXR5cGVvZiBTdXBwcmVzc2VkRXJyb3I9PSJmdW5jdGlvbiImJlN1cHByZXNzZWRFcnJvcjtsZXQgcWk9My4xNDE1OTI2NTM1ODk3OTMsQ2Y9NjM3ODI0NSxBZj0uMDA2NjkzNDIxNjIyOTY1OTQzO2Z1bmN0aW9uIE1PKGUsdCl7aWYodD0rdCxlPStlLGdnKGUsdCkpcmV0dXJuW2UsdF07bGV0IG49dmcoZS0xMDUsdC0zNSkscj1tZyhlLTEwNSx0LTM1KSxzPXQvMTgwKnFpLHU9TWF0aC5zaW4ocyk7dT0xLUFmKnUqdTtsZXQgdj1NYXRoLnNxcnQodSk7bj1uKjE4MC8oQ2YqKDEtQWYpLyh1KnYpKnFpKSxyPXIqMTgwLyhDZi92Kk1hdGguY29zKHMpKnFpKTtsZXQgRT10K24sRj1lK3I7cmV0dXJuW2UqMi1GLHQqMi1FXX1mdW5jdGlvbiBMTyhlLHQpe2lmKHQ9K3QsZT0rZSxnZyhlLHQpKXJldHVybltlLHRdO2xldCBuPXZnKGUtMTA1LHQtMzUpLHI9bWcoZS0xMDUsdC0zNSkscz10LzE4MCpxaSx1PU1hdGguc2luKHMpO3U9MS1BZip1KnU7bGV0IHY9TWF0aC5zcXJ0KHUpO249bioxODAvKENmKigxLUFmKS8odSp2KSpxaSkscj1yKjE4MC8oQ2YvdipNYXRoLmNvcyhzKSpxaSk7bGV0IEU9dCtuO3JldHVybltlK3IsRV19bGV0IGdnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8NzIuMDA0fHxlPjEzNy44MzQ3fHx0PC44MjkzfHx0PjU1LjgyNzF8fCExfSx2Zz1mdW5jdGlvbihlLHQpe2xldCBuPS0xMDArMiplKzMqdCsuMip0KnQrLjEqZSp0Ky4yKk1hdGguc3FydChNYXRoLmFicyhlKSk7cmV0dXJuIG4rPSgyMCpNYXRoLnNpbig2KmUqcWkpKzIwKk1hdGguc2luKDIqZSpxaSkpKjIvMyxuKz0oMjAqTWF0aC5zaW4odCpxaSkrNDAqTWF0aC5zaW4odC8zKnFpKSkqMi8zLG4rPSgxNjAqTWF0aC5zaW4odC8xMipxaSkrMzIwKk1hdGguc2luKHQqcWkvMzApKSoyLzMsbn0sbWc9ZnVuY3Rpb24oZSx0KXtsZXQgbj0zMDArZSsyKnQrLjEqZSplKy4xKmUqdCsuMSpNYXRoLnNxcnQoTWF0aC5hYnMoZSkpO3JldHVybiBuKz0oMjAqTWF0aC5zaW4oNiplKnFpKSsyMCpNYXRoLnNpbigyKmUqcWkpKSoyLzMsbis9KDIwKk1hdGguc2luKGUqcWkpKzQwKk1hdGguc2luKGUvMypxaSkpKjIvMyxuKz0oMTUwKk1hdGguc2luKGUvMTIqcWkpKzMwMCpNYXRoLnNpbihlLzMwKnFpKSkqMi8zLG59O2Z1bmN0aW9uIF9nKGUsdCxuKXtsZXQgcj10LmNvb3JkcztpZihlIT09dC5jb29yZHNUeXBlKXtsZXQgcztlPT09Indnczg0Ij9zPU1PKHIubG9uZ2l0dWRlLHIubGF0aXR1ZGUpOmU9PT0iZ2NqMDIiJiYocz1MTyhyLmxvbmdpdHVkZSxyLmxhdGl0dWRlKSkscyYmKHIubG9uZ2l0dWRlPXNbMF0sci5sYXRpdHVkZT1zWzFdKX1uKHt0eXBlOmUsYWx0aXR1ZGU6ci5hbHRpdHVkZXx8MCxsYXRpdHVkZTpyLmxhdGl0dWRlLGxvbmdpdHVkZTpyLmxvbmdpdHVkZSxzcGVlZDpyLnNwZWVkLGFjY3VyYWN5OnIuYWNjdXJhY3ksYWRkcmVzczp0LmFkZHJlc3MsZXJyTXNnOiJnZXRMb2NhdGlvbjpvayJ9KX1sZXQgRE89UmUoX2gsKHt0eXBlOmU9Indnczg0IixnZW9jb2RlOnQ9ITEsYWx0aXR1ZGU6bj0hMSxoaWdoQWNjdXJhY3lFeHBpcmVUaW1lOnIsaXNIaWdoQWNjdXJhY3k6cz0hMX0se3Jlc29sdmU6dSxyZWplY3Q6dn0pPT57Yy5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oRT0+e19nKGUsRSx1KX0sRT0+e2lmKEUuY29kZT09PTE1MDEpe19nKGUsRSx1KTtyZXR1cm59digiZ2V0TG9jYXRpb246ZmFpbCAiK0UubWVzc2FnZSl9LHtnZW9jb2RlOnQsZW5hYmxlSGlnaEFjY3VyYWN5OnN8fG4sdGltZW91dDpyLGNvb3Jkc1R5cGU6ZX0pfSwkMCxIMCk7ZnVuY3Rpb24gYmcoKXt3byhfaCwoZSx0KT0+e08uZ2V0TG9jYXRpb24oe3R5cGU6ZS50eXBlLGFsdGl0dWRlOmUuYWx0aXR1ZGUsaGlnaEFjY3VyYWN5RXhwaXJlVGltZTplLmhpZ2hBY2N1cmFjeUV4cGlyZVRpbWUsaXNIaWdoQWNjdXJhY3k6ZS5pc0hpZ2hBY2N1cmFjeSxzdWNjZXNzKG4pe3Qoe2xhdGl0dWRlOm4ubGF0aXR1ZGUsbG9uZ2l0dWRlOm4ubG9uZ2l0dWRlLHNwZWVkOm4uc3BlZWQsYWNjdXJhY3k6bi5hY2N1cmFjeSxhbHRpdHVkZTpuLmFsdGl0dWRlLHZlcnRpY2FsQWNjdXJhY3k6bi52ZXJ0aWNhbEFjY3VyYWN5LGhvcml6b250YWxBY2N1cmFjeTpuLmhvcml6b250YWxBY2N1cmFjeX0pfSxmYWlsKG4pe3Qoe2Vyck1zZzpuLmVyck1zZ3x8ImdldExvY2F0aW9uOmZhaWwifSl9fSl9KX1sZXQgeWc9InZkU3luYyIsRk89Il9fdW5pYXBwX19zZXJ2aWNlIixidT0ib25XZWJ2aWV3UmVhZHkiLFZPPTAsVU89IndlYnZpZXdJbnNlcnRlZCIsSE89IndlYnZpZXdSZW1vdmVkIjtjbGFzcyAkTyBleHRlbmRzIHNlLlVuaU5vZGV7Y29uc3RydWN0b3IodCxuLHI9ITEpe3N1cGVyKHNlLk5PREVfVFlQRV9QQUdFLCIjcGFnZSIsbnVsbCk7dGhpcy5faWQ9MSx0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3VwZGF0aW5nPSExLHRoaXMuX2NyZWF0ZUFjdGlvbk1hcD1uZXcgTWFwLHRoaXMudXBkYXRlQWN0aW9ucz1bXSx0aGlzLmRpY3RzPVtdLHRoaXMubm9kZUlkPTAsdGhpcy5wYWdlSWQ9dCx0aGlzLnBhZ2VOb2RlPXRoaXMsdGhpcy5vcHRpb25zPW4sdGhpcy5pc1VubW91bnRlZD0hMSx0aGlzLmNyZWF0ZUFjdGlvbj1bc2UuQUNUSU9OX1RZUEVfUEFHRV9DUkVBVEUsbl0sdGhpcy5jcmVhdGVkQWN0aW9uPVtzZS5BQ1RJT05fVFlQRV9QQUdFX0NSRUFURURdLHRoaXMubm9ybWFsaXplRGljdD10aGlzLl9ub3JtYWxpemVEaWN0LmJpbmQodGhpcyksdGhpcy5fdXBkYXRlPXRoaXMudXBkYXRlLmJpbmQodGhpcyksciYmdGhpcy5zZXR1cCgpfV9ub3JtYWxpemVEaWN0KHQsbj0hMCl7aWYoIVouaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4gdGhpcy5hZGREaWN0KHQpO2xldCByPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKHM9PntsZXQgdT1bdGhpcy5hZGREaWN0KHMpXSx2PXRbc107bj91LnB1c2godGhpcy5hZGREaWN0KHYpKTp1LnB1c2godiksci5wdXNoKHUpfSkscn1hZGREaWN0KHQpe2xldHtkaWN0czpufT10aGlzLHI9bi5pbmRleE9mKHQpO3JldHVybiByPi0xP3I6bi5wdXNoKHQpLTF9b25JbmplY3RIb29rKHQpeyh0PT09c2UuT05fUEFHRV9TQ1JPTEx8fHQ9PT1zZS5PTl9SRUFDSF9CT1RUT00pJiYhdGhpcy5zY3JvbGxBY3Rpb24mJih0aGlzLnNjcm9sbEFjdGlvbj1bc2UuQUNUSU9OX1RZUEVfUEFHRV9TQ1JPTEwsdGhpcy5vcHRpb25zLm9uUmVhY2hCb3R0b21EaXN0YW5jZV0sdGhpcy5wdXNoKHRoaXMuc2Nyb2xsQWN0aW9uKSl9b25DcmVhdGUodCxuKXtyZXR1cm4gV08odGhpcyx0Lm5vZGVJZCxuKSx0fW9uSW5zZXJ0QmVmb3JlKHQsbixyKXtyZXR1cm4gR08odGhpcyxuLHQubm9kZUlkLHImJnIubm9kZUlkfHwtMSksbn1vblJlbW92ZUNoaWxkKHQpe3JldHVybiBxTyh0aGlzLHQubm9kZUlkKSx0fW9uQWRkRXZlbnQodCxuLHIpe3QucGFyZW50Tm9kZSYmWU8odGhpcyx0Lm5vZGVJZCxuLHIpfW9uQWRkV3hzRXZlbnQodCxuLHIscyl7dC5wYXJlbnROb2RlJiZLTyh0aGlzLHQubm9kZUlkLG4scixzKX1vblJlbW92ZUV2ZW50KHQsbil7dC5wYXJlbnROb2RlJiZKTyh0aGlzLHQubm9kZUlkLG4pfW9uU2V0QXR0cmlidXRlKHQsbixyKXt0LnBhcmVudE5vZGUmJlhPKHRoaXMsdC5ub2RlSWQsbixyKX1vblJlbW92ZUF0dHJpYnV0ZSh0LG4pe3QucGFyZW50Tm9kZSYmUU8odGhpcyx0Lm5vZGVJZCxuKX1vblRleHRDb250ZW50KHQsbil7dC5wYXJlbnROb2RlJiZTZyh0aGlzLHQubm9kZUlkLG4pfW9uTm9kZVZhbHVlKHQsbil7dC5wYXJlbnROb2RlJiZTZyh0aGlzLHQubm9kZUlkLG4pfWdlbklkKCl7cmV0dXJuIHRoaXMuX2lkKyt9cHVzaCh0LG4pe2lmKCF0aGlzLmlzVW5tb3VudGVkKXtzd2l0Y2godFswXSl7Y2FzZSBzZS5BQ1RJT05fVFlQRV9DUkVBVEU6dGhpcy5fY3JlYXRlQWN0aW9uTWFwLnNldCh0WzFdLHQpO2JyZWFrO2Nhc2Ugc2UuQUNUSU9OX1RZUEVfSU5TRVJUOmxldCByPXRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5nZXQodFsxXSk7cj8oclszXT10WzJdLHJbNF09dFszXSxuJiYocls1XT1uKSk6KG4mJih0WzRdPW4pLHRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpKTticmVha310WzBdIT09c2UuQUNUSU9OX1RZUEVfSU5TRVJUJiZ0aGlzLnVwZGF0ZUFjdGlvbnMucHVzaCh0KSx0aGlzLl91cGRhdGluZ3x8KHRoaXMuX3VwZGF0aW5nPSEwLHBuLnF1ZXVlUG9zdEZsdXNoQ2IodGhpcy5fdXBkYXRlKSl9fXJlc3RvcmUoKXt0aGlzLmNsZWFyKCksdGhpcy5zZXR1cCgpLHRoaXMuc2Nyb2xsQWN0aW9uJiZ0aGlzLnB1c2godGhpcy5zY3JvbGxBY3Rpb24pO2xldCB0PW49Pnt0aGlzLm9uQ3JlYXRlKG4sbi5ub2RlTmFtZSksdGhpcy5vbkluc2VydEJlZm9yZShuLnBhcmVudE5vZGUsbixudWxsKSxuLmNoaWxkTm9kZXMuZm9yRWFjaChyPT57dChyKX0pfTt0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaChuPT50KG4pKSx0aGlzLnB1c2godGhpcy5jcmVhdGVkQWN0aW9uKX1zZXR1cCgpe3RoaXMuc2VuZChbdGhpcy5jcmVhdGVBY3Rpb25dKX11cGRhdGUoKXtsZXR7ZGljdHM6dCx1cGRhdGVBY3Rpb25zOm4sX2NyZWF0ZUFjdGlvbk1hcDpyfT10aGlzO3RoaXMuX2NyZWF0ZWR8fCh0aGlzLl9jcmVhdGVkPSEwLG4ucHVzaCh0aGlzLmNyZWF0ZWRBY3Rpb24pKSxuLmxlbmd0aCYmKHQubGVuZ3RoJiZuLnVuc2hpZnQoW1ZPLHRdKSx0aGlzLnNlbmQobikpLHRoaXMuY2xlYXIoKX1jbGVhcigpe3RoaXMuZGljdHMubGVuZ3RoPTAsdGhpcy51cGRhdGVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuX3VwZGF0aW5nPSExLHRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5jbGVhcigpfXNlbmQodCl7cHQucHVibGlzaEhhbmRsZXIoeWcsdCx0aGlzLnBhZ2VJZCl9ZmlyZUV2ZW50KHQsbil7bGV0IHI9RWcodCx0aGlzKTtyJiZyLmRpc3BhdGNoRXZlbnQobil9fWZ1bmN0aW9uIGpPKGUpe2xldCB0PVZ0KGUpO3JldHVybiB0P3QuX19wYWdlX2NvbnRhaW5lcl9fOm51bGx9ZnVuY3Rpb24gVWQoZSx0LG4pe2lmKHR5cGVvZiBuPT0ibnVtYmVyIiYmKG49ak8obikpLG5bZV09PT10KXJldHVybiBuO2xldHtjaGlsZE5vZGVzOnJ9PW47Zm9yKGxldCBzPTA7czxyLmxlbmd0aDtzKyspe2xldCB1PVVkKGUsdCxyW3NdKTtpZih1KXJldHVybiB1fXJldHVybiBudWxsfWZ1bmN0aW9uIEVnKGUsdCl7cmV0dXJuIFVkKCJub2RlSWQiLGUsdCl9ZnVuY3Rpb24gek8oZSx0KXtyZXR1cm4gVWQoIm5vZGVOYW1lIixlLnRvVXBwZXJDYXNlKCksdCl9ZnVuY3Rpb24gV08oZSx0LG4pe2UucHVzaChbc2UuQUNUSU9OX1RZUEVfQ1JFQVRFLHQsZS5hZGREaWN0KG4pLC0xLC0xXSl9ZnVuY3Rpb24gR08oZSx0LG4scil7bGV0IHM9dC50b0pTT04oe2F0dHI6ITAsbm9ybWFsaXplOmUubm9ybWFsaXplRGljdH0pO2UucHVzaChbc2UuQUNUSU9OX1RZUEVfSU5TRVJULHQubm9kZUlkLG4scl0sT2JqZWN0LmtleXMocykubGVuZ3RoP3M6dm9pZCAwKX1mdW5jdGlvbiBxTyhlLHQpe2UucHVzaChbc2UuQUNUSU9OX1RZUEVfUkVNT1ZFLHRdKX1mdW5jdGlvbiBZTyhlLHQsbixyKXtlLnB1c2goW3NlLkFDVElPTl9UWVBFX0FERF9FVkVOVCx0LGUuYWRkRGljdChuKSxyXSl9ZnVuY3Rpb24gS08oZSx0LG4scixzKXtlLnB1c2goW3NlLkFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQsdCxlLmFkZERpY3QobiksZS5hZGREaWN0KHIpLHNdKX1mdW5jdGlvbiBKTyhlLHQsbil7ZS5wdXNoKFtzZS5BQ1RJT05fVFlQRV9SRU1PVkVfRVZFTlQsdCxlLmFkZERpY3QobildKX1mdW5jdGlvbiBaTyhlLHQsbil7cmV0dXJuIHQ9PT0ic3R5bGUiJiZaLmlzUGxhaW5PYmplY3Qobik/ZS5ub3JtYWxpemVEaWN0KG4pOmUuYWRkRGljdChuKX1mdW5jdGlvbiBYTyhlLHQsbixyKXtlLnB1c2goW3NlLkFDVElPTl9UWVBFX1NFVF9BVFRSSUJVVEUsdCxlLmFkZERpY3QobiksWk8oZSxuLHIpXSl9ZnVuY3Rpb24gUU8oZSx0LG4pe2UucHVzaChbc2UuQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURSx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIFNnKGUsdCxuKXtlLnB1c2goW3NlLkFDVElPTl9UWVBFX1NFVF9URVhULHQsZS5hZGREaWN0KG4pXSl9ZnVuY3Rpb24gZVQoZSx0LG4pe3JldHVybiBuZXcgJE8oZSx0LG4pfWZ1bmN0aW9uIHdnKGUpe2xldCB0PWUuc2V0dXA7cmV0dXJuIGUuaW5oZXJpdEF0dHJzPSExLGUuc2V0dXA9KG4scik9PntsZXR7YXR0cnM6e19fcGFnZUlkOnMsX19wYWdlUGF0aDp1LF9fcGFnZUluc3RhbmNlOnZ9fT1yLEY9cG4uZ2V0Q3VycmVudEluc3RhbmNlKCkucHJveHk7aWYoQmUoRix2KSx0VChzLEYsdikscG4ub25Nb3VudGVkKCgpPT57cG4ubmV4dFRpY2soKCk9PntycihGLHNlLk9OX1JFQURZKX0pfSkscG4ub25CZWZvcmVVbm1vdW50KCgpPT57cnIoRixzZS5PTl9VTkxPQUQpfSksdClyZXR1cm4gdChuLHIpfSxlfWZ1bmN0aW9uIENnKGUsdCxuKXt7bGV0IHI9KCk9PmMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChlKyIiKTt0LiRnZXRBcHBXZWJ2aWV3PXIsdC4kLmN0eC4kc2NvcGU9eyRnZXRBcHBXZWJ2aWV3OnJ9fXJldHVybiB0LmdldE9wZW5lckV2ZW50Q2hhbm5lbD0oKT0+KG4uZXZlbnRDaGFubmVsfHwobi5ldmVudENoYW5uZWw9bmV3IHNlLkV2ZW50Q2hhbm5lbChlKSksbi5ldmVudENoYW5uZWwpLHR9ZnVuY3Rpb24gdFQoZSx0LG4pe190KENnKGUsdCxuKSl9ZnVuY3Rpb24gblQoZSl7cmV0dXJuIFouaXNGdW5jdGlvbihlKX1sZXQgQWc9bmV3IE1hcDtmdW5jdGlvbiBIZChlLHQpe0FnLnNldChlLHNlLm9uY2UoaVQodCkpKX1mdW5jdGlvbiByVChlLHQsbixyLHMpe2xldCB1PWVUKGUscywhMCksdj12dCgpLEU9QWcuZ2V0KHQpKCksRj1OPT52Lm1vdW50UGFnZShOLFouZXh0ZW5kKHtfX3BhZ2VJZDplLF9fcGFnZVBhdGg6dCxfX3BhZ2VRdWVyeTpuLF9fcGFnZUluc3RhbmNlOnJ9LG4pLHUpO3JldHVybiBaLmlzUHJvbWlzZShFKT9FLnRoZW4oTj0+RihOKSk6RihFKX1mdW5jdGlvbiBpVChlKXtyZXR1cm4oKT0+blQoZSk/ZSgpLnRoZW4odD0+d2codCkpOndnKGUpfWZ1bmN0aW9uIG9UKGUpe3JldHVybiBCTyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHQ9Ty5fX3VuaUNsb3VkO2lmKCF0KXRocm93IG5ldyBFcnJvcigiXHU0RjdGXHU3NTI4dW5pLmNob29zZUxvY2F0aW9uXHU0RTE0XHU0RjdGXHU3NTI4XHU4MTdFXHU4QkFGXHU1NzMwXHU1NkZFXHU2NUY2XHVGRjBDXHU5NzAwXHU2NDJEXHU5MTREdW5pQ2xvdWRcdTRGN0ZcdTc1MjhcdUZGMENcdThCRTZcdTYwQzVcdThCRjdcdTUzQzJcdTgwMDNcdUZGMUFodHRwczovL3VuaWFwcC5kY2xvdWQubmV0LmNuL2FwaS9sb2NhdGlvbi9sb2NhdGlvbi5odG1sI2Nob29zZWxvY2F0aW9uIik7bGV0e2tleXdvcmQ6bixsYXRpdHVkZTpyLGxvbmdpdHVkZTpzLHBhZ2VJbmRleDp1LHBhZ2VTaXplOnYsc2VjdXJlOkV9PWUsRj10LmltcG9ydE9iamVjdCgidW5pLW1hcC1jbyIse2N1c3RvbVVJOiEwLHNlY3JldE1ldGhvZHM6RT97Y2hvb3NlTG9jYXRpb246ImJvdGgifTp7fX0pLE49W107cmV0dXJuIG4/Tj0oeWllbGQgRi5jaG9vc2VMb2NhdGlvbih7YWN0aW9uOiJzZWFyY2giLGRhdGE6e2tleXdvcmQ6bixsb2NhdGlvbjp7bGF0OnIsbG5nOnN9LHJhZGl1czoxZTMsYXV0b19leHRlbmQ6MSxnZXRfc3VicG9pczowLG9yZGVyYnk6IndlaWdodCIscGFnZV9pbmRleDp1LHBhZ2Vfc2l6ZTp2fSxwcm92aWRlcjoicXFtYXAiLG5lZWRPcmlnaW5hbFJlc3VsdDohMH0pKS5yZXN1bHQuZGF0YXx8W106Tj0oeWllbGQgRi5jaG9vc2VMb2NhdGlvbih7YWN0aW9uOiJsb2NhdGlvbjJhZGRyZXNzIixkYXRhOntsb2NhdGlvbjpgJHtyfSwke3N9YCxnZXRfcG9pOjEscG9pX29wdGlvbnM6e3BhZ2VfaW5kZXg6dSxwYWdlX3NpemU6dn19LHByb3ZpZGVyOiJxcW1hcCIsbmVlZE9yaWdpbmFsUmVzdWx0OiEwfSkpLnJlc3VsdC5yZXN1bHQucG9pc3x8W10sTn0pfWZ1bmN0aW9uIGFUKCl7d28oIm1hcFBsYWNlU2VhcmNoIiwoZSx0KT0+e29UKGUpLnRoZW4odCkuY2F0Y2gobj0+e2NvbnNvbGUuZXJyb3IobiksdCh7ZXJyTXNnOiJtYXBQbGFjZVNlYXJjaDpmYWlsIn0pfSl9KX1sZXQgc1Q9e2RhdGEoKXtyZXR1cm57a2V5d29yZDoiIixsYXRpdHVkZTowLGxvbmdpdHVkZTowLHVzZVNlY3VyZU5ldHdvcms6ITEsbG9hZGVkOiExLGNoYW5uZWw6dm9pZCAwLGNsb3NlZDohMX19LG9uTG9hZChlKXt0aGlzLmxhdGl0dWRlPWUubGF0aXR1ZGUsdGhpcy5sb25naXR1ZGU9ZS5sb25naXR1ZGUsdGhpcy5rZXl3b3JkPWUua2V5d29yZCx0aGlzLnVzZVNlY3VyZU5ldHdvcms9ZS51c2VTZWN1cmVOZXR3b3JrPT09InRydWUiLHRoaXMubG9hZGVkPSEwLHRoaXMuY2hhbm5lbD10aGlzLmdldE9wZW5lckV2ZW50Q2hhbm5lbCgpfSxvblVubG9hZCgpe3RoaXMuY2xvc2VkfHx0aGlzLmNoYW5uZWwuZW1pdCgiY2xvc2UiLHt9KX0sbWV0aG9kczp7b25DbG9zZShlKXt0aGlzLmNsb3NlZD0hMCx0aGlzLmNoYW5uZWwuZW1pdCgiY2xvc2UiLGUuZGV0YWlsKSxPLm5hdmlnYXRlQmFjaygpfX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuLHIscyx1KXtyZXR1cm4gcy5sb2FkZWQ/KHBuLm9wZW5CbG9jaygpLHBuLmNyZWF0ZUVsZW1lbnRCbG9jaygibG9jYXRpb24tcGlja2VyIix7a2V5OjAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxsYXRpdHVkZTpzLmxhdGl0dWRlLGxvbmdpdHVkZTpzLmxvbmdpdHVkZSxrZXl3b3JkOnMua2V5d29yZCx1c2VTZWN1cmVOZXR3b3JrOnMudXNlU2VjdXJlTmV0d29yayxvbkNsb3NlOnRbMF18fCh0WzBdPSguLi52KT0+dS5vbkNsb3NlJiZ1Lm9uQ2xvc2UoLi4udikpfSxudWxsLDQwLFsibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJrZXl3b3JkIl0pKTpwbi5jcmVhdGVDb21tZW50Vk5vZGUoInYtaWYiLCEwKX19LE9mPSJfX3VuaWFwcGNob29zZWxvY2F0aW9uIixsVD1zZS5vbmNlKCgpPT57SGQoT2Ysc1QpLE9lLnB1c2goe21ldGE6e25hdmlnYXRpb25CYXI6e3N0eWxlOiJjdXN0b20ifSxpc05WdWU6ITEscm91dGU6T2Z9LHBhdGg6Ii8iK09mfSl9KSxjVD1SZShWMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntpZihJLnFxTWFwS2V5KXtsVCgpO2xldHtrZXl3b3JkOkU9IiIsbGF0aXR1ZGU6Rj0iIixsb25naXR1ZGU6Tj0iIix1c2VTZWN1cmVOZXR3b3JrOk09ITF9PWV8fHt9O08ubmF2aWdhdGVUbyh7dXJsOiIvIitPZisiP2tleXdvcmQ9IitFKyImbGF0aXR1ZGU9IitGKyImbG9uZ2l0dWRlPSIrTisiJnVzZVNlY3VyZU5ldHdvcms9IitNLGV2ZW50czp7Y2xvc2U6bWU9PnttZSYmbWUubGF0aXR1ZGU/dChtZSk6bigiY2FuY2VsIil9fSxmYWlsOm1lPT57bihtZS5lcnJNc2d8fCJjYW5jZWwiKX19KTtyZXR1cm59bGV0IHM9JGgoKSE9PSJsaWdodCIsdSx2PUVvKHt1cmw6Il9fdW5pYXBwY2hvb3NlbG9jYXRpb24iLGRhdGE6Wi5leHRlbmQoe30sZSx7bG9jYWxlOkh1KCl9KSxzdHlsZTp7YW5pbWF0aW9uVHlwZTplLmFuaW1hdGlvblR5cGV8fCJzbGlkZS1pbi1ib3R0b20iLHRpdGxlTlZpZXc6ITEscG9wR2VzdHVyZToiY2xvc2UiLHNjcm9sbEluZGljYXRvcjoibm9uZSJ9LG9uTWVzc2FnZSh7ZXZlbnQ6RSxkZXRhaWw6Rn0pe0U9PT0ic2VsZWN0ZWQiJiYodT1GKX0sb25DbG9zZSgpe3MmJmMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIiksdT90KHUpOm4oImNhbmNlbCIpfX0pO3MmJihjLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgibGlnaHQiKSx2LndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigicG9wR2VzdHVyZSIsKHt0eXBlOkUscmVzdWx0OkZ9KT0+e0U9PT0ic3RhcnQiP2MubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIik6RT09PSJlbmQiJiYhRiYmYy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0Iil9KSl9LFUwKSxPZz17ZW46eyJtYXAudGl0bGUuYW1hcCI6IkF1dG9OYXZpIE1hcHMiLCJtYXAudGl0bGUuYmFpZHUiOiJCYWlkdSBNYXBzIiwibWFwLnRpdGxlLnRlbmNlbnQiOiJUZW5jZW50IE1hcHMiLCJtYXAudGl0bGUuYXBwbGUiOiJBcHBsZSBNYXBzIiwibWFwLnRpdGxlLmdvb2dsZSI6Ikdvb2dsZSBNYXBzIiwibG9jYXRpb24udGl0bGUiOiJNeSBMb2NhdGlvbiIsInNlbGVjdC5jYW5jZWwiOiJDYW5jZWwiLCJsb2NhdGlvbi5kZXN0aW5hdGlvbiI6IkRlc3RpbmF0aW9uIn0semg6eyJtYXAudGl0bGUuYW1hcCI6Ilx1OUFEOFx1NUZCN1x1NTczMFx1NTZGRSIsIm1hcC50aXRsZS5iYWlkdSI6Ilx1NzY3RVx1NUVBNlx1NTczMFx1NTZGRSIsIm1hcC50aXRsZS50ZW5jZW50IjoiXHU4MTdFXHU4QkFGXHU1NzMwXHU1NkZFIiwibWFwLnRpdGxlLmFwcGxlIjoiXHU4MkY5XHU2NzlDXHU1NzMwXHU1NkZFIiwibWFwLnRpdGxlLmdvb2dsZSI6Ilx1OEMzN1x1NkI0Q1x1NTczMFx1NTZGRSIsImxvY2F0aW9uLnRpdGxlIjoiXHU2MjExXHU3Njg0XHU0RjREXHU3RjZFIiwic2VsZWN0LmNhbmNlbCI6Ilx1NTNENlx1NkQ4OCIsImxvY2F0aW9uLmRlc3RpbmF0aW9uIjoiXHU3NkVFXHU2ODA3XHU1NzMwXHU3MEI5In19LFRmPSIiO2Z1bmN0aW9uIHVUKCl7VGZ8fChUZj1jLm9zLmxhbmd1YWdlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKS5zcGxpdCgiLSIpWzBdKX1mdW5jdGlvbiB1bChlKXtyZXR1cm4gdVQoKSxPZ1tUZl0mJk9nW1RmXVtlXXx8ZX1mdW5jdGlvbiBmVChlLHQsbixyKXtsZXQgcz1nLnJlcXVpcmVNb2R1bGUoIm1hcFNlYXJjaCIpO3ZhciB1PVt7dGl0bGU6dWwoIm1hcC50aXRsZS50ZW5jZW50IiksZ2V0VXJsOmZ1bmN0aW9uKCl7dmFyIEY7cmV0dXJuIEY9Imh0dHBzOi8vYXBpcy5tYXAucXEuY29tL3VyaS92MS9yb3V0ZXBsYW4/dHlwZT1kcml2ZSZ0bz0iK2VuY29kZVVSSUNvbXBvbmVudChuKSsiJnRvY29vcmQ9IitlbmNvZGVVUklDb21wb25lbnQoZSsiLCIrdCkrIiZyZWZlcmVyPUFQUCIsRn19LHt0aXRsZTp1bCgibWFwLnRpdGxlLmdvb2dsZSIpLGdldFVybDpmdW5jdGlvbigpe3ZhciBGO3JldHVybiBGPSJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvP2RhZGRyPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pKyImc2xsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUrIiwiK3QpLEZ9fV0sdj1be3RpdGxlOnVsKCJtYXAudGl0bGUuYW1hcCIpLHBuYW1lOiJjb20uYXV0b25hdmkubWluaW1hcCIsYWN0aW9uOnI/Imlvc2FtYXA6Ly8iOiJhbWFwdXJpOi8vIixnZXRVcmw6ZnVuY3Rpb24oKXt2YXIgRjtyZXR1cm4gcj9GPSJpb3NhbWFwOi8vcGF0aCI6Rj0iYW1hcHVyaTovL3JvdXRlL3BsYW4vIixGKz0iP3NvdXJjZUFwcGxpY2F0aW9uPUFQUCZkbmFtZT0iK2VuY29kZVVSSUNvbXBvbmVudChuKSsiJmRsYXQ9IitlKyImZGxvbj0iK3QrIiZkZXY9MCIsRn19LHt0aXRsZTp1bCgibWFwLnRpdGxlLmJhaWR1IikscG5hbWU6ImNvbS5iYWlkdS5CYWlkdU1hcCIsYWN0aW9uOiJiYWlkdW1hcDovLyIsZ2V0VXJsOmZ1bmN0aW9uKCl7dmFyIEY9ImJhaWR1bWFwOi8vbWFwL2RpcmVjdGlvbj9kZXN0aW5hdGlvbj0iK2VuY29kZVVSSUNvbXBvbmVudCgibGF0bG5nOiIrZSsiLCIrdCsifG5hbWU6IituKSsiJm1vZGU9ZHJpdmluZyZzcmM9QVBQJmNvb3JkX3R5cGU9Z2NqMDIiO3JldHVybiBGfX0se3RpdGxlOnVsKCJtYXAudGl0bGUudGVuY2VudCIpLHBuYW1lOiJjb20udGVuY2VudC5tYXAiLGFjdGlvbjoicXFtYXA6Ly8iLGdldFVybDooKT0+e3ZhciBGO3JldHVybiBGPSJxcW1hcDovL21hcC9yb3V0ZXBsYW4/dHlwZT1kcml2ZSIrKHI/IiZmcm9tPSIrZW5jb2RlVVJJQ29tcG9uZW50KHVsKCJsb2NhdGlvbi50aXRsZSIpKToiIikrIiZ0bz0iK2VuY29kZVVSSUNvbXBvbmVudChuKSsiJnRvY29vcmQ9IitlbmNvZGVVUklDb21wb25lbnQoZSsiLCIrdCkrIiZyZWZlcmVyPUFQUCIsRn19LHt0aXRsZTp1bCgibWFwLnRpdGxlLmdvb2dsZSIpLHBuYW1lOiJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzIixhY3Rpb246ImNvbWdvb2dsZW1hcHN1cmw6Ly8iLGdldFVybDpmdW5jdGlvbigpe3ZhciBGO3JldHVybiByP0Y9ImNvbWdvb2dsZW1hcHN1cmw6Ly9tYXBzLmdvb2dsZS5jb20vIjpGPSJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvIixGKz0iP2RhZGRyPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pKyImc2xsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUrIiwiK3QpLEZ9fV0sRT1bXTt2LmZvckVhY2goZnVuY3Rpb24oRil7dmFyIE49Yy5ydW50aW1lLmlzQXBwbGljYXRpb25FeGlzdCh7cG5hbWU6Ri5wbmFtZSxhY3Rpb246Ri5hY3Rpb259KTtOJiZFLnB1c2goRil9KSxyJiZFLnVuc2hpZnQoe3RpdGxlOnVsKCJtYXAudGl0bGUuYXBwbGUiKSxuYXZpZ2F0ZVRvOmZ1bmN0aW9uKCl7cy5vcGVuU3lzdGVtTWFwTmF2aWdhdGlvbih7bG9uZ2l0dWRlOnQsbGF0aXR1ZGU6ZSxuYW1lOm59KX19KSxFLmxlbmd0aD09PTAmJihFPUUuY29uY2F0KHUpKSxjLm5hdGl2ZVVJLmFjdGlvblNoZWV0KHtjYW5jZWw6dWwoInNlbGVjdC5jYW5jZWwiKSxidXR0b25zOkV9LGZ1bmN0aW9uKEYpe3ZhciBOPUYuaW5kZXgsTTtOPjAmJihNPUVbTi0xXSxNLm5hdmlnYXRlVG8/TS5uYXZpZ2F0ZVRvKCk6Yy5ydW50aW1lLm9wZW5VUkwoTS5nZXRVcmwoKSxmdW5jdGlvbigpe30sTS5wbmFtZSkpfSl9bGV0IGRUPXtkYXRhKCl7cmV0dXJue2xhdGl0dWRlOjAsbG9uZ2l0dWRlOjAsbmFtZToiIixsb2FkZWQ6ITEsc2hvd05hdjohMX19LG9uTG9hZChlKXt0aGlzLmxhdGl0dWRlPWUubGF0aXR1ZGUsdGhpcy5sb25naXR1ZGU9ZS5sb25naXR1ZGUsdGhpcy5uYW1lPWUubmFtZSx0aGlzLmxvYWRlZD0hMH0sb25CYWNrUHJlc3MoKXtpZih0aGlzLnNob3dOYXYpcmV0dXJuIHRoaXMuc2hvd05hdj0hMSwhMH0sbWV0aG9kczp7b25DbG9zZShlKXtPLm5hdmlnYXRlQmFjaygpfSxvbk5hdkNsaWNrKCl7bGV0IGU9Zy5jb25maWcuZW52LnBsYXRmb3JtPT09ImlPUyI7ZlQodGhpcy5sYXRpdHVkZSx0aGlzLmxvbmdpdHVkZSx0aGlzLm5hbWV8fHVsKCJsb2NhdGlvbi5kZXN0aW5hdGlvbiIpLGUpfX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuLHIscyx1KXtyZXR1cm4gcy5sb2FkZWQ/KHBuLm9wZW5CbG9jaygpLHBuLmNyZWF0ZUVsZW1lbnRCbG9jaygibG9jYXRpb24tdmlldyIse2tleTowLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sbGF0aXR1ZGU6cy5sYXRpdHVkZSxsb25naXR1ZGU6cy5sb25naXR1ZGUsc2hvd05hdjpzLnNob3dOYXYsbmFtZTpzLm5hbWUsb25DbG9zZTp0WzBdfHwodFswXT0oLi4udik9PnUub25DbG9zZSYmdS5vbkNsb3NlKC4uLnYpKSxvbk5hdkNsaWNrOnRbMV18fCh0WzFdPSguLi52KT0+dS5vbk5hdkNsaWNrJiZ1Lm9uTmF2Q2xpY2soLi4udikpfSxudWxsLDQwLFsibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJzaG93TmF2Il0pKTpwbi5jcmVhdGVDb21tZW50Vk5vZGUoInYtaWYiLCEwKX19LFBmPSJfX3VuaWFwcG9wZW5sb2NhdGlvbiIscFQ9c2Uub25jZSgoKT0+e0hkKFBmLGRUKSxPZS5wdXNoKHttZXRhOntuYXZpZ2F0aW9uQmFyOntzdHlsZToiY3VzdG9tIn0saXNOVnVlOiExLHJvdXRlOlBmfSxwYXRoOiIvIitQZn0pfSksaFQ9UmUoajAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57aWYoSS5xcU1hcEtleSl7cFQoKTtsZXR7bGF0aXR1ZGU6cj0iIixsb25naXR1ZGU6cz0iIixuYW1lOnU9IiJ9PWV8fHt9O08ubmF2aWdhdGVUbyh7dXJsOiIvIitQZisiP2xhdGl0dWRlPSIrcisiJmxvbmdpdHVkZT0iK3MrIiZuYW1lPSIrdSxzdWNjZXNzOnY9Pnt0KCl9LGZhaWw6dj0+e24odi5lcnJNc2d8fCJjYW5jZWwiKX19KTtyZXR1cm59cmV0dXJuIEVvKHt1cmw6Il9fdW5pYXBwb3BlbmxvY2F0aW9uIixkYXRhOlouZXh0ZW5kKHt9LGUse2xvY2FsZTpIdSgpfSksc3R5bGU6e3RpdGxlTlZpZXc6e3R5cGU6InRyYW5zcGFyZW50In0scG9wR2VzdHVyZToiY2xvc2UiLGJhY2tCdXR0b25BdXRvQ29udHJvbDoiY2xvc2UifSxvbkNsb3NlKCl7bigiY2FuY2VsIil9fSksdCgpfSxXMCx6MCksTmY9ITEsWnU9MCxnVD1SZSh6RSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntadT1adXx8Yy5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHI9PntOZj0hMCxwdC5pbnZva2VPbkNhbGxiYWNrKFNoLHIuY29vcmRzKX0scj0+e05mfHwobihyLm1lc3NhZ2UpLE5mPSEwKSxwdC5pbnZva2VPbkNhbGxiYWNrKHdoLHtlcnJNc2c6YG9uTG9jYXRpb25DaGFuZ2U6ZmFpbCAke3IubWVzc2FnZX1gfSl9LHtjb29yZHNUeXBlOmU9PW51bGw/dm9pZCAwOmUudHlwZX0pLFIodCwxMDApfSxZRSxLRSksdlQ9UmUoV0UsKGUse3Jlc29sdmU6dH0pPT57WnUmJihjLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2goWnUpLE5mPSExLFp1PTApLHQoKX0pLG1UPUZuKFNoLCgpPT57fSksX1Q9aWkoR0UsKCk9Pnt9KSxiVD1Gbih3aCwoKT0+e30pLHlUPWlpKHFFLCgpPT57fSksRVQ9UmUoTVMsKHt0aXRsZTplPSIiLGNvbnRlbnQ6dD0iIixzaG93Q2FuY2VsOm49ITAsY2FuY2VsVGV4dDpyLGNhbmNlbENvbG9yOnMsY29uZmlybVRleHQ6dSxjb25maXJtQ29sb3I6dixlZGl0YWJsZTpFPSExLHBsYWNlaG9sZGVyVGV4dDpGPSIifT17fSx7cmVzb2x2ZTpOfSk9PntsZXQgTT1uP1tyLHVdOlt1XSxtZT1FP0Y6TTt0PXR8fCIgIixjLm5hdGl2ZVVJW0U/InByb21wdCI6ImNvbmZpcm0iXSh0LEFlPT57aWYobil7bGV0IHhlPUFlLmluZGV4PT09MSxidD17Y29uZmlybTp4ZSxjYW5jZWw6QWUuaW5kZXg9PT0wfHxBZS5pbmRleD09PS0xfTt4ZSYmRSYmKGJ0LmNvbnRlbnQ9QWUudmFsdWUpLE4oYnQpfWVsc2V7bGV0IHhlPXtjb25maXJtOkFlLmluZGV4PT09MCxjYW5jZWw6ITF9O0UmJih4ZS5jb250ZW50PUFlLnZhbHVlKSxOKHhlKX19LGUsbWUsTSl9LExTLERTKSxTVD17bGlnaHQ6e2l0ZW1Db2xvcjoiIzAwMDAwMCJ9LGRhcms6e2l0ZW1Db2xvcjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpIn19LHdUPVJlKE5TLCh7aXRlbUxpc3Q6ZT1bXSxpdGVtQ29sb3I6dCx0aXRsZTpuPSIiLHBvcG92ZXI6cn0se3Jlc29sdmU6cyxyZWplY3Q6dX0pPT57dD09PSIjMDAwIiYmSS5kYXJrbW9kZSYmKHQ9U1RbYy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpXS5pdGVtQ29sb3IpLEhyKCk7bGV0e3Q6dn09ZXQoKSxFPXt0aXRsZTpuLGNhbmNlbDp2KCJ1bmkuc2hvd0FjdGlvblNoZWV0LmNhbmNlbCIpLGJ1dHRvbnM6ZS5tYXAoRj0+KHt0aXRsZTpGLGNvbG9yOnR9KSl9O2MubmF0aXZlVUkuYWN0aW9uU2hlZXQoWi5leHRlbmQoRSx7cG9wb3ZlcjpyfSksRj0+e0YuaW5kZXg+MD9zKHt0YXBJbmRleDpGLmluZGV4LTF9KTp1KCJzaG93QWN0aW9uU2hlZXQ6ZmFpbCBjYW5jZWwiKX0pfSxJUyxrUyksWHUsJGQ9ITEsSWY9IiIsa2YsQ1Q9UmUoUlMsKGUsdCk9PlRnKFouZXh0ZW5kKHt9LGUse3R5cGU6ImxvYWRpbmciLGljb246ImxvYWRpbmcifSksdCkseFMsQlMpLFRnPSh7dGl0bGU6ZT0iIixpY29uOnQ9InN1Y2Nlc3MiLGltYWdlOm49IiIsZHVyYXRpb246cj0xNTAwLG1hc2s6cz0hMSxwb3NpdGlvbjp1LHR5cGU6dj0idG9hc3QiLHN0eWxlOkV9LHtyZXNvbHZlOkYscmVqZWN0Ok59KT0+e2lmKFJmKCIiKSxJZj12LFsidG9wIiwiY2VudGVyIiwiYm90dG9tIl0uaW5jbHVkZXMoU3RyaW5nKHUpKSljLm5hdGl2ZVVJLnRvYXN0KGUse3ZlcnRpY2FsQWxpZ246dX0pLCRkPSEwO2Vsc2V7dCYmIX5bInN1Y2Nlc3MiLCJsb2FkaW5nIiwiZXJyb3IiLCJub25lIl0uaW5kZXhPZih0KSYmKHQ9InN1Y2Nlc3MiKTtsZXQgTT17bW9kYWw6cyxiYWNrOiJ0cmFuc21pdCIscGFkZGluZzoiMTBweCIsc2l6ZToiMTZweCJ9OyFuJiYoIXR8fHQ9PT0ibm9uZSIpP00ubG9hZGluZz17ZGlzcGxheToibm9uZSJ9OihNLndpZHRoPSIxNDBweCIsTS5oZWlnaHQ9IjExMnB4Iiksbj9NLmxvYWRpbmc9e2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6IjU1cHgiLGljb246bixpbnRlcnZhbDpyfTpbInN1Y2Nlc3MiLCJlcnJvciJdLmluZGV4T2YodCkhPT0tMSYmKE0ubG9hZGluZz17ZGlzcGxheToiYmxvY2siLGhlaWdodDoiNTVweCIsaWNvbjp0PT09InN1Y2Nlc3MiPyJfX3VuaWFwcHN1Y2Nlc3MucG5nIjoiX191bmlhcHBlcnJvci5wbmciLGludGVydmFsOnJ9KTt0cnl7WHU9Yy5uYXRpdmVVSS5zaG93V2FpdGluZyhlLFouZXh0ZW5kKE0sRSkpfWNhdGNoKG1lKXtOKGAke21lfWApfX1yZXR1cm4gSWY9PT0idG9hc3QiJiYoa2Y9UigoKT0+e1JmKCIiKX0scikpLEYoKX0sQVQ9UmUoRlMsVGcsVVMsSFMpLE9UPVJlKG1TLChlLHQpPT5SZigidG9hc3QiLHQpKSxUVD1SZSh2UywoZSx0KT0+UmYoImxvYWRpbmciLHQpKTtmdW5jdGlvbiBSZihlPSJ0b2FzdCIsdCl7cmV0dXJuIGUmJmUhPT1JZnx8KGtmJiYodyhrZiksa2Y9bnVsbCksJGQ/Yy5uYXRpdmVVSS5jbG9zZVRvYXN0KCk6WHUmJlh1LmNsb3NlJiZYdS5jbG9zZSgpLFh1PW51bGwsJGQ9ITEsSWY9IiIpLHQmJnQucmVzb2x2ZSgpfWxldCBQVD1SZSgkUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1IaCgpO2lmKHImJnIuZW5kUHVsbFRvUmVmcmVzaCgpLHI9eWYoKSwhcilyZXR1cm4gbigpO3IuYmVnaW5QdWxsVG9SZWZyZXNoKCksSWQociksdCgpfSksTlQ9UmUoalMsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9SGgoKXx8eWYoKTtpZighcilyZXR1cm4gbigpO3IuZW5kUHVsbFRvUmVmcmVzaCgpLElkKG51bGwpLHQoKX0pLElUPVJlKFRoLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPV9uKFpuKCkpO3B0Lmludm9rZVZpZXdNZXRob2QoVGgsZSxyLHM9Pnt0eXBlb2Ygcz09InN0cmluZyI/bihzKTp0KCl9KX0sX1MpLGtUPVJlKFBoLChlLHtyZXNvbHZlOnR9KT0+e2xldCBuPV9uKFpuKCkpO3B0Lmludm9rZVZpZXdNZXRob2QoUGgsZSxuLHQpfSxUUyxQUyksUlQ9UmUod1MsKHtfX3BhZ2VfXzplLHRpdGxlOnR9LHtyZXNvbHZlOm4scmVqZWN0OnJ9KT0+e2xldCBzPVZoKGUpO2lmKHMpe2xldCB1PXMuZ2V0U3R5bGUoKTt1JiZ1LnRpdGxlTlZpZXcmJnMuc2V0U3R5bGUoe3RpdGxlTlZpZXc6e3RpdGxlVGV4dDp0fX0pLG4oKX1lbHNlIHIoKX0sQ1MpLHhUPVJlKEFTLChlLHtyZXNvbHZlOnR9KT0+e2MubmF0aXZlVUkuc2hvd1dhaXRpbmcoIiIse21vZGFsOiExfSksdCgpfSksQlQ9UmUoT1MsKGUse3Jlc29sdmU6dH0pPT57Yy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSx0KCl9KTtmdW5jdGlvbiBNVChlKXtsZXQgdD12cigpOyF0Lmxlbmd0aHx8KHRbdC5sZW5ndGgtMV0uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU9ZSl9bGV0IExUPVJlKHlTLCh7X19wYWdlX186ZSxmcm9udENvbG9yOnQsYmFja2dyb3VuZENvbG9yOm59LHtyZXNvbHZlOnIscmVqZWN0OnN9KT0+e2xldCB1PVZoKGUpO2lmKHUpe2xldCB2PXt9O3QmJih2LnRpdGxlQ29sb3I9dCksbiYmKHYuYmFja2dyb3VuZENvbG9yPW4pO2xldCBFPXQ9PT0iIzAwMDAwMCI/ImRhcmsiOiJsaWdodCI7Yy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoRSksTVQoRSk7bGV0IEY9dS5nZXRTdHlsZSgpO0YmJkYudGl0bGVOVmlldyYmKEYudGl0bGVOVmlldy5hdXRvQmFja0J1dHRvbiYmKHYuYmFja0J1dHRvbj12LmJhY2tCdXR0b258fHt9LHYuYmFja0J1dHRvbi5jb2xvcj10KSx1LnNldFN0eWxlKHt0aXRsZU5WaWV3OnZ9KSkscigpfWVsc2UgcygpfSxTUyxFUyksRFQ9UmUoY3csKHtpbmRleDplLHRleHQ6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57eGkuc2V0VGFiQmFyQmFkZ2UoInRleHQiLGUsdCksbigpfSx1dyxmdyksRlQ9UmUoelMsKHtpbmRleDplLHRleHQ6dCxpY29uUGF0aDpuLHNlbGVjdGVkSWNvblBhdGg6cixwYWdlUGF0aDpzLHZpc2libGU6dSxpY29uZm9udDp2fSx7cmVzb2x2ZTpFfSk9PntpZih4aS5zZXRUYWJCYXJJdGVtKGUsdCxuLHIsdSx2KSxzKXtsZXQgRj1JLnRhYkJhci5saXN0W2VdO2lmKEYpe2xldCBOPUYucGFnZVBhdGgsTT1zZS5yZW1vdmVMZWFkaW5nU2xhc2gocyk7TSE9PU4mJlBpKGUsTixNKX19RSgpfSxXUyxHUyksVlQ9UmUocVMsKGU9e30se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57aWYoIUd1KCkpcmV0dXJuIG4oIm5vdCBUYWJCYXIgcGFnZSIpO2UuYm9yZGVyU3R5bGU9c2Uubm9ybWFsaXplVGFiQmFyU3R5bGVzKGUuYm9yZGVyU3R5bGUpLHhpLnNldFRhYkJhclN0eWxlKGUpLHQoKX0sWVMsSlMpLFVUPVJlKFpTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWUmJmUuYW5pbWF0aW9uO2lmKCFHdSgpKXJldHVybiBuKCJub3QgVGFiQmFyIHBhZ2UiKTt4aS5oaWRlVGFiQmFyKEJvb2xlYW4ocikpLHQoKX0sTmgpLEhUPVJlKFhTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWUmJmUuYW5pbWF0aW9uO2lmKCFHdSgpKXJldHVybiBuKCJub3QgVGFiQmFyIHBhZ2UiKTt4aS5zaG93VGFiQmFyKEJvb2xlYW4ocikpLHQoKX0sUVMpLCRUPVJlKHJ3LCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57eGkuc2V0VGFiQmFyQmFkZ2UoInJlZERvdCIsZSksdCgpfSxpdyxvdyksUGc9ZT0+eGkuc2V0VGFiQmFyQmFkZ2UoIm5vbmUiLGUpLGpUPVJlKGF3LCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57UGcoZSksdCgpfSxzdyxsdykselQ9UmUoZXcsKHtpbmRleDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntQZyhlKSx0KCl9LHR3LG53KSxOZz0iVW5pQXBwU3ViTlZ1ZSI7Y2xhc3MgV1R7Y29uc3RydWN0b3IodCxuKXt0aGlzLmNhbGxiYWNrcz1bXTtsZXQgcj10aGlzLndlYnZpZXc9Yy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQpO2lmKHRoaXMuaXNTdWI9bnx8ITEsci5fX3VuaWFwcF9tYXNrX2lkKXtsZXQgcz10aGlzLm1hc2tXZWJ2aWV3PXIuX191bmlhcHBfbWFza19pZD09PSIwIj97c2V0U3R5bGUoe21hc2s6dn0pe0ZhKCJ1bmktdGFidmlldyIpLnNldE1hc2soe2NvbG9yOnZ9KX19OmMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChyLl9fdW5pYXBwX21hc2tfaWQpLHU9ZnVuY3Rpb24oKXtzLnNldFN0eWxlKHttYXNrOiJub25lIn0pfTtyLmFkZEV2ZW50TGlzdGVuZXIoImhpZGUiLHUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLHUpfX1zaG93KC4uLnQpe2lmKHRoaXMubWFza1dlYnZpZXcpe2xldCBuPXRoaXMud2Vidmlldy5fX3VuaWFwcF9tYXNrO3RoaXMubWFza1dlYnZpZXcuc2V0U3R5bGUoe21hc2s6bn0pfXRoaXMud2Vidmlldy5zaG93KC4uLnQpfWhpZGUoLi4udCl7dGhpcy53ZWJ2aWV3LmhpZGUoLi4udCl9c2V0U3R5bGUodCl7dGhpcy53ZWJ2aWV3LnNldFN0eWxlKHQpfWluaXRNZXNzYWdlKCl7aWYodGhpcy5tZXNzYWdlUmVhZHkpcmV0dXJuO3RoaXMubWVzc2FnZVJlYWR5PSEwO2xldCB0PXI9PntpZihyLmRhdGEmJnIuZGF0YS50eXBlPT09Tmcpe2xldCBzPXIuZGF0YS50YXJnZXQ7cy5pZD09PXRoaXMud2Vidmlldy5pZCYmcy5pc1N1Yj09PXRoaXMuaXNTdWImJnRoaXMuY2FsbGJhY2tzLmZvckVhY2godT0+e3Uoe29yaWdpbjp0aGlzLndlYnZpZXcuX191bmlhcHBfaG9zdCxkYXRhOnIuZGF0YS5kYXRhfSl9KX19O0ZhKCJnbG9iYWxFdmVudCIpLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIix0KSx0aGlzLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCgpPT57dGhpcy5jYWxsYmFja3MubGVuZ3RoPTB9KX1wb3N0TWVzc2FnZSh0KXtjLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KHt0eXBlOk5nLGRhdGE6dCx0YXJnZXQ6e2lkOnRoaXMud2Vidmlldy5pZCxpc1N1YjohdGhpcy5pc1N1Yn19LEZPKX1vbk1lc3NhZ2UodCl7dGhpcy5pbml0TWVzc2FnZSgpLHRoaXMuY2FsbGJhY2tzLnB1c2godCl9fWxldCBHVD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgV1QoZSx0KX07ZnVuY3Rpb24gcVQoZSx0LG4scixzLHUsdil7YyE9PW4mJihBPXBuPWUsZz10LGM9bixfQyhjLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSksYy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU9TWgsUj1yLHc9cyxkPXUsbT12KSxJLnNlcnZpY2VSZWFkeT0hMH1mdW5jdGlvbiBZVCgpe2xldCBlPVsiQXJyYXlCdWZmZXIiLCJJbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXSx0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO3Rbcl09Z2xvYmFsW3JdfXJldHVybiB0fWZ1bmN0aW9uIEtUKGUpe1ouZXh0ZW5kKGdsb2JhbCxlKX1sZXQgSWc9e29hdXRoKGUpe2Mub2F1dGguZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e3Q9dCxlKHQpfSl9LHNoYXJlKGUpe2Muc2hhcmUuZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e2UodCl9KX0scGF5bWVudChlKXtjLnBheW1lbnQuZ2V0Q2hhbm5lbHModD0+e2xldCBuPVtdO3QuZm9yRWFjaCgoe2lkOnJ9KT0+e24ucHVzaChyKX0pLGUobnVsbCxuLHQpfSx0PT57ZSh0KX0pfSxwdXNoKGUpe2lmKHR5cGVvZiBnIT0idW5kZWZpbmVkInx8dHlwZW9mIGMhPSJ1bmRlZmluZWQiKXtsZXQgdD1jLnB1c2guZ2V0Q2xpZW50SW5mbygpO2UobnVsbCxbdC5pZF0sW3RdKX1lbHNlIGUobnVsbCxbXSl9fSxKVD1SZShkdywoe3NlcnZpY2U6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57SWdbZV0/SWdbZV0oKHIscz1bXSx1PVtdKT0+e3I/bihyLm1lc3NhZ2UpOnQoe3NlcnZpY2U6ZSxwcm92aWRlcjpzLHByb3ZpZGVyczp1Lm1hcCh2PT4odHlwZW9mIHYuc2VydmljZVJlYWR5PT0iYm9vbGVhbiImJih2LmlzQXBwRXhpc3Q9di5zZXJ2aWNlUmVhZHkpLHR5cGVvZiB2Lm5hdGl2ZUNsaWVudD09ImJvb2xlYW4iJiYodi5pc0FwcEV4aXN0PXYubmF0aXZlQ2xpZW50KSx2KSl9KX0pOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LHB3KSx4ZjtmdW5jdGlvbiBRdShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntjLm9hdXRoLmdldFNlcnZpY2VzKHI9PntsZXQgcz1yLmZpbmQoKHtpZDp1fSk9PnU9PT1lKTtzP3Qocyk6bihuZXcgRXJyb3IoInByb3ZpZGVyIG5vdCBmaW5kIikpfSxuKX0pfWxldCBrZz1SZShodywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyfHwid2VpeGluIixzPUJyKG4pLHU9cj09PSJhcHBsZSIsdj11P3tzY29wZToiZW1haWwifTplLnVuaXZlcmlmeVN0eWxlP3t1bml2ZXJpZnlTdHlsZTpRVChlLnVuaXZlcmlmeVN0eWxlLHMpfTp7fTtRdShyKS50aGVuKEU9PntmdW5jdGlvbiBGKCl7aWYoZS5vbmx5QXV0aG9yaXplJiZyPT09IndlaXhpbiIpe0UuYXV0aG9yaXplKCh7Y29kZTpOfSk9Pnt0KHtjb2RlOk4sYXV0aFJlc3VsdDoiIn0pfSxzKTtyZXR1cm59RS5sb2dpbihOPT57bGV0IE09Ti50YXJnZXQuYXV0aFJlc3VsdCxtZT1OLnRhcmdldC5hcHBsZUluZm87dCh7Y29kZTpNLmNvZGUsYXV0aFJlc3VsdDpNLGFwcGxlSW5mbzptZX0pfSxzLHYpfXV8fHI9PT0idW5pdmVyaWZ5Ij9GKCk6RS5sb2dvdXQoRixGKX0pLmNhdGNoKHMpfSxndyksUmc9KGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZS5wcm92aWRlcnx8IndlaXhpbiIscz1CcihuKTtRdShyKS50aGVuKHU9Pnt1LmdldFVzZXJJbmZvKHY9PntsZXQgRT17bmlja05hbWU6IiJ9O2lmKHI9PT0id2VpeGluIil7bGV0IE49dS51c2VySW5mbztOJiYoRT17b3BlbklkOk4ub3BlbmlkLG5pY2tOYW1lOk4ubmlja25hbWUsZ2VuZGVyOk4uc2V4LGNpdHk6Ti5jaXR5LHByb3ZpbmNlOk4ucHJvdmluY2UsY291bnRyeTpOLmNvdW50cnksYXZhdGFyVXJsOk4uaGVhZGltZ3VybCx1bmlvbklkOk4udW5pb25pZH0pfWVsc2UgaWYocj09PSJhcHBsZSIpe2xldCBOPXUuYXBwbGVJbmZvO04mJihFPXtvcGVuSWQ6Ti51c2VyLGZ1bGxOYW1lOk4uZnVsbE5hbWUsZW1haWw6Ti5lbWFpbCxhdXRob3JpemF0aW9uQ29kZTpOLmF1dGhvcml6YXRpb25Db2RlLGlkZW50aXR5VG9rZW46Ti5pZGVudGl0eVRva2VuLHJlYWxVc2VyU3RhdHVzOk4ucmVhbFVzZXJTdGF0dXN9KX1lbHNlIEU9dS51c2VySW5mbyxFJiYoRS5vcGVuSWQ9RS5vcGVuSWR8fEUub3BlbmlkfHx1LmF1dGhSZXN1bHQub3BlbmlkLEUubmlja05hbWU9RS5uaWNrTmFtZXx8RS5uaWNrbmFtZSxFLmF2YXRhclVybD1FLmF2YXRhclVybHx8RS5oZWFkaW1ndXJsKTtsZXQgRj17fTtlLmRhdGEmJmUuZGF0YS5hcGlfbmFtZT09PSJ3ZWJhcGlfZ2V0dXNlcmluZm8iP0YuZGF0YT17ZGF0YTpKU09OLnN0cmluZ2lmeShFKSxyYXdEYXRhOiIiLHNpZ25hdHVyZToiIixlbmNyeXB0ZWREYXRhOiIiLGl2OiIifTpGLnVzZXJJbmZvPUUsdChGKX0scyl9KS5jYXRjaCgoKT0+e24oIlx1OEJGN1x1NTE0OFx1OEMwM1x1NzUyOCB1bmkubG9naW4iKX0pfSxaVD1SZSh2dyxSZyxtdyksWFQ9UmUoX3csUmcsYncpLHhnPVJlKHl3LCh7cHJvdmlkZXI6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9TmModCkscz1CcihuKTtRdShlKS50aGVuKHU9PnUucHJlTG9naW4ocixzKSkuY2F0Y2gocyl9LHd3LFN3KSxCZz0oKT0+UXUoInVuaXZlcmlmeSIpLnRoZW4oZT0+ZS5jbG9zZUF1dGhWaWV3KCkpLE1nPSR0KEN3LEJnKSxMZz1SZShBdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1OYyh0KSxzPUJyKG4pO3RyeXtRdSgidW5pdmVyaWZ5IikudGhlbih1PT57bGV0IHY9dS5nZXRDaGVja0JveFN0YXRlKCk7cih7c3RhdGU6dn0pfSl9Y2F0Y2godSl7cyh1KX19KTtmdW5jdGlvbiBRVChlLHQpe3JldHVybiBaLmlzUGxhaW5PYmplY3QoZSkmJlouaXNQbGFpbk9iamVjdChlLmJ1dHRvbnMpJiZaLnRvVHlwZVN0cmluZyhlLmJ1dHRvbnMubGlzdCk9PT0iW29iamVjdCBBcnJheV0iJiZlLmJ1dHRvbnMubGlzdC5mb3JFYWNoKChuLHIpPT57ZS5idXR0b25zLmxpc3Rbcl0ub25jbGljaz1mdW5jdGlvbigpe2xldCBzPXtjb2RlOiIzMDAwOCIsbWVzc2FnZToiXHU3NTI4XHU2MjM3XHU3MEI5XHU1MUZCXHU0RTg2XHU4MUVBXHU1QjlBXHU0RTQ5XHU2MzA5XHU5NEFFIixpbmRleDpyLHByb3ZpZGVyOm4ucHJvdmlkZXJ9O1ouaXNQbGFpbk9iamVjdCh4Zik/eGYuX3RyaWdnZXJVbml2ZXJpZnlCdXR0b25zQ2xpY2socyk6QmcoKS50aGVuKCgpPT57dChzKX0pfX0pLGV9Y2xhc3MgZVB7Y29uc3RydWN0b3IoKXt0aGlzLnByb3ZpZGVyPSJ1bml2ZXJpZnkiLHRoaXMuZXZlbnROYW1lPSJhcGkudW5pdmVyaWZ5QnV0dG9uc0NsaWNrIn1jbG9zZSgpe3JldHVybiBNZygpfWxvZ2luKHQpe3JldHVybiBrZyh0aGlzLl9nZXRPcHRpb25zKHQpKX1nZXRDaGVja0JveFN0YXRlKHQpe3JldHVybiBMZyh0KX1wcmVMb2dpbih0KXtyZXR1cm4geGcodGhpcy5fZ2V0T3B0aW9ucyh0KSl9b25CdXR0b25zQ2xpY2sodCl7cHQub24odGhpcy5ldmVudE5hbWUsdCl9b2ZmQnV0dG9uc0NsaWNrKHQpe3B0Lm9mZih0aGlzLmV2ZW50TmFtZSx0KX1fdHJpZ2dlclVuaXZlcmlmeUJ1dHRvbnNDbGljayh0KXtwdC5lbWl0KHRoaXMuZXZlbnROYW1lLHQpfV9nZXRPcHRpb25zKHQ9e30pe3JldHVybiBaLmV4dGVuZCh7fSx0LHtwcm92aWRlcjp0aGlzLnByb3ZpZGVyfSl9fWxldCB0UD0kdChPdywoKT0+eGZ8fCh4Zj1uZXcgZVApKSxuUD1SZShNdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1hZygpO2lmKHIubm90aWZpY2F0aW9uQXV0aG9yaXplZCE9PSJhdXRob3JpemVkIilyZXR1cm4gbigibm90aWZpY2F0aW9uQXV0aG9yaXplZDogIityLm5vdGlmaWNhdGlvbkF1dGhvcml6ZWQpO2xldCBzPVouZXh0ZW5kKHt9LGUpO2RlbGV0ZSBzLmNvbnRlbnQsZGVsZXRlIHMucGF5bG9hZCxjLnB1c2guY3JlYXRlTWVzc2FnZShlLmNvbnRlbnQsZS5wYXlsb2FkLHMpLHQoKX0sdm9pZCAwLEx3KSxEZyxyUD0kdChEdywoKT0+RGd8fChEZz1jLnB1c2guZ2V0Q2hhbm5lbE1hbmFnZXIoKSkpLGlQPSR0KCJyZWdpc3RlclJ1bnRpbWUiLGU9PntaLmV4dGVuZChqc1J1bnRpbWUsZSl9KSxvUD17MDp7bmFtZToid2ViIix0aXRsZToiXHU1NkZFXHU2NTg3In0sMTp7bmFtZToidGV4dCIsdGl0bGU6Ilx1N0VBRlx1NjU4N1x1NUI1NyJ9LDI6e25hbWU6ImltYWdlIix0aXRsZToiXHU3RUFGXHU1NkZFXHU3MjQ3In0sMzp7bmFtZToibXVzaWMiLHRpdGxlOiJcdTk3RjNcdTRFNTAifSw0OntuYW1lOiJ2aWRlbyIsdGl0bGU6Ilx1ODlDNlx1OTg5MSJ9LDU6e25hbWU6Im1pbmlQcm9ncmFtIix0aXRsZToiXHU1QzBGXHU3QTBCXHU1RThGIn19LGFQPWU9PntlLnR5cGU9ZS50eXBlfHwwO2xldHtwcm92aWRlcjp0LHR5cGU6bix0aXRsZTpyLHN1bW1hcnk6cyxocmVmOnUsaW1hZ2VVcmw6dixtZWRpYVVybDpFLHNjZW5lOkYsbWluaVByb2dyYW06TixvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpNLGNvcnBpZDptZSxjdXN0b21lclVybDpBZX09ZTtaLmlzU3RyaW5nKHYpJiZ2JiYodj1HdCh2KSk7bGV0IHhlPW9QW25dO2lmKHhlKXtsZXQgYnQ9e3Byb3ZpZGVyOnQsdHlwZTp4ZS5uYW1lLHRpdGxlOnIsY29udGVudDpzLGhyZWY6dSxwaWN0dXJlczpbdl0sdGh1bWJzOnY/W3ZdOnZvaWQgMCxtZWRpYTpFLG1pbmlQcm9ncmFtOk4sZXh0cmE6e3NjZW5lOkZ9LG9wZW5DdXN0b21lclNlcnZpY2VDaGF0Ok0sY29ycGlkOm1lLHVybDpBZX07cmV0dXJuIHQ9PT0id2VpeGluIiYmKG49PT0xfHxuPT09MikmJmRlbGV0ZSBidC50aHVtYnMsYnR9cmV0dXJuIlx1NTIwNlx1NEVBQlx1NTNDMlx1NjU3MCB0eXBlIFx1NEUwRFx1NkI2M1x1Nzg2RSJ9LEZnPWZ1bmN0aW9uKGUsdCxuLHIscz0ic2hhcmUiKXtsZXQgdT1CcihyKSx2PXQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQ/Im9wZW5DdXN0b21lclNlcnZpY2VDaGF0Ijoic2VuZCI7dHJ5e2Vbdl0odCwoKT0+e24oKX0sdSl9Y2F0Y2goRSl7dSh7bWVzc2FnZTpgJHt0LnByb3ZpZGVyfSAke3Z9IFx1NjVCOVx1NkNENVx1OEMwM1x1NzUyOFx1NTkzMVx1OEQyNWB9KX19LHNQPVJlKFR3LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWFQKGUpLHM9QnIobik7aWYoWi5pc1N0cmluZyhyKSlyZXR1cm4gbihyKTtjLnNoYXJlLmdldFNlcnZpY2VzKHU9PntsZXQgdj11LmZpbmQoKHtpZDpFfSk9PkU9PT1yLnByb3ZpZGVyKTt2P3YuYXV0aGVudGljYXRlZD9GZyh2LHIsdCxuKTp2LmF1dGhvcml6ZSgoKT0+RmcodixyLHQsbikscyk6bigic2VydmljZSBub3QgZm91bmQiKX0scyl9LE53LFB3KSxsUD1SZShJdywoe3R5cGU6ZSxpbWFnZVVybDp0LHN1bW1hcnk6bixocmVmOnJ9LHtyZXNvbHZlOnMscmVqZWN0OnV9KT0+e2xldCB2PUJyKHUpO1ouaXNTdHJpbmcodCkmJnQmJih0PUd0KHQpKSxjLnNoYXJlLnNlbmRXaXRoU3lzdGVtKHt0eXBlOmUscGljdHVyZXM6dD9bdF06dm9pZCAwLGNvbnRlbnQ6bixocmVmOnJ9LCgpPT5zKCksdil9LFJ3LGt3KSxjUD1SZSh4dywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyLHM9QnIobik7Yy5wYXltZW50LmdldENoYW5uZWxzKHU9PntsZXQgdj11LmZpbmQoKHtpZDpFfSk9PkU9PT1yKTt2P2MucGF5bWVudC5yZXF1ZXN0KHYsZS5vcmRlckluZm8sRT0+e3QoRSl9LHMpOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LHMpfSxCdyksVmc9WmgsdVA9UmUoIm5hdmlnYXRlVG9NaW5pUHJvZ3JhbSIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57VmcoIm5hdmlnYXRlVG9VbmlNUCIsZSxyPT57aWYoci5lcnJNc2cmJnIuZXJyTXNnLmluZGV4T2YoIjpvayIpPT09LTEpcmV0dXJuIG4oci5lcnJNc2cuc3BsaXQoIiAiKVsxXSk7dCgpfSl9KSxVZz1bXTtmdW5jdGlvbiBIZyhlKXtVZy5wdXNoKGUpfWxldCBmUD1IZztmdW5jdGlvbiBkUChlLHQpe1VnLmZvckVhY2gobj0+bihlLHQpKX1mdW5jdGlvbiBwUChlLHQsLi4ubil7bGV0IHI9dlAoZSx0LG4pO3ImJmNvbnNvbGVbZV0ocil9ZnVuY3Rpb24gaFAoKXtyZXR1cm4gdHlwZW9mIF9fY2hhbm5lbElkX189PSJzdHJpbmciJiZfX2NoYW5uZWxJZF9ffWZ1bmN0aW9uIGdQKGUsdCl7c3dpdGNoKFoudG9SYXdUeXBlKHQpKXtjYXNlIkZ1bmN0aW9uIjpyZXR1cm4iZnVuY3Rpb24oKSB7IFtuYXRpdmUgY29kZV0gfSI7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gdlAoZSx0LG4pe3JldHVybiBoUCgpPyhuLnB1c2godC5yZXBsYWNlKCJhdCAiLCJ1bmktYXBwOi8vLyIpKSxjb25zb2xlW2VdLmFwcGx5KGNvbnNvbGUsbikpOm4ubWFwKGZ1bmN0aW9uKHMpe2xldCB1PVoudG9UeXBlU3RyaW5nKHMpLnRvTG93ZXJDYXNlKCk7aWYoWyJbb2JqZWN0IG9iamVjdF0iLCJbb2JqZWN0IGFycmF5XSIsIltvYmplY3QgbW9kdWxlXSJdLmluZGV4T2YodSkhPT0tMSl0cnl7cz0iLS0tQkVHSU46SlNPTi0tLSIrSlNPTi5zdHJpbmdpZnkocyxnUCkrIi0tLUVORDpKU09OLS0tIn1jYXRjaCh2KXtzPXV9ZWxzZSBpZihzPT09bnVsbClzPSItLS1OVUxMLS0tIjtlbHNlIGlmKHM9PT12b2lkIDApcz0iLS0tVU5ERUZJTkVELS0tIjtlbHNle2xldCB2PVoudG9SYXdUeXBlKHMpLnRvVXBwZXJDYXNlKCk7dj09PSJOVU1CRVIifHx2PT09IkJPT0xFQU4iP3M9Ii0tLUJFR0lOOiIrdisiLS0tIitzKyItLS1FTkQ6Iit2KyItLS0iOnM9U3RyaW5nKHMpfXJldHVybiBzfSkuam9pbigiLS0tQ09NTUEtLS0iKSsiICIrdH1sZXQgJGc9MSxqZCxtUD17fTtmdW5jdGlvbiBqZyhlKXtyZXR1cm4gZSYmdHlwZW9mIGUuZ2V0Tm9kZUlkPT0iZnVuY3Rpb24iJiZlLnBhZ2VJZH1mdW5jdGlvbiBfUChlKXtyZXR1cm4gZSYmZS4kJiZlLiQucHJveHk9PT1lfWZ1bmN0aW9uIGJQKGUpe2lmKGpnKGUpKXJldHVybiBlfWZ1bmN0aW9uIHlQKGUpe2lmKF9QKGUpKXJldHVybiBlLiRlbH1mdW5jdGlvbiBFUChlKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyV3JhcHBlciE9InVuZGVmaW5lZCI/e19fdHlwZV9fOiJBcnJheUJ1ZmZlciIsdmFsdWU6bmV3IEFycmF5QnVmZmVyV3JhcHBlcihlKX06e19fdHlwZV9fOiJBcnJheUJ1ZmZlciIsdmFsdWU6ZX19ZnVuY3Rpb24gU1AoZSx0KXtsZXQgbj0iIixyPSIiO3JldHVybiBlJiZlLmdldE5vZGVJZCYmKHI9ZS5wYWdlSWQsbj1lLmdldE5vZGVJZCgpKSx7X190eXBlX186dCxwYWdlSWQ6cixub2RlSWQ6bn19ZnVuY3Rpb24gemcoZSl7bGV0IHQ9ZSYmZS5fX3ZfcmF3O3JldHVybiB0P3pnKHQpOmV9ZnVuY3Rpb24gemQoZSx0LG4scil7aWYoZT16ZyhlKSx0eXBlb2YgZT09ImZ1bmN0aW9uIil7bGV0IHM7aWYobil7bGV0IHU9T2JqZWN0LmtleXModCkuZmluZCh2PT50W3ZdPT09ZSk7cz11P3BhcnNlSW50KHUpOiRnKyssdFtzXT1lfWVsc2Ugcz0kZysrLHRbc109ZTtyZXR1cm4gc31lbHNle2lmKFouaXNBcnJheShlKSlyZXR1cm4gci5kZXB0aCsrLGUubWFwKHM9PnpkKHMsdCxuLHIpKTtpZihlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIHIuZGVwdGg+MCYmKHIubmVzdGVkPSEwKSxFUChlKTtpZihaLmlzUGxhaW5PYmplY3QoZSl8fGpnKGUpKXtsZXQgcz1iUChlKSx1PXM/dm9pZCAwOnlQKGUpLHY9c3x8dTtpZih2KXJldHVybiByLmRlcHRoPjAmJihyLm5lc3RlZD0hMCksU1AodixzPyJVbmlFbGVtZW50IjoiQ29tcG9uZW50UHVibGljSW5zdGFuY2UiKTt7bGV0IEU9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goRj0+e3IuZGVwdGgrKyxFW0ZdPXpkKGVbRl0sdCxuLHIpfSksRX19fXJldHVybiBlfWZ1bmN0aW9uIHdQKGUsdCxuLHIpe3JldHVybiBlZigibWV0aG9kIixlLHQsbixyKX1mdW5jdGlvbiBXZCgpe3JldHVybiBqZHx8KGpkPU8ucmVxdWlyZU5hdGl2ZVBsdWdpbigiVVRTLVByb3h5IikpLGpkfWZ1bmN0aW9uIFdnKGUsdCxuLHIscyl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJcdThGRDRcdTU2REVcdTUwM0NcdTRFM0FcdUZGMUEiK0pTT04uc3RyaW5naWZ5KHQpKyJcdUZGMUJcdThCRjdcdTZDNDJcdTUzQzJcdTY1NzBcdTRFM0FcdUZGMUEiK0pTT04uc3RyaW5naWZ5KGUpKTtpZihaLmlzU3RyaW5nKHQpKXRyeXt0PUpTT04ucGFyc2UodCl9Y2F0Y2godSl7dGhyb3cgbmV3IEVycm9yKGBKU09OLnBhcnNlKCR7dH0pOiBgK3UpfWlmKHQuZXJyTXNnKXRocm93IG5ldyBFcnJvcih0LmVyck1zZyk7aWYobiYmbi50eXBlPT09ImludGVyZmFjZSImJnR5cGVvZiB0LnBhcmFtcz09Im51bWJlciIpe2lmKCF0LnBhcmFtcylyZXR1cm4gbnVsbDtpZih0LnBhcmFtcz09PXImJnMpcmV0dXJuIHM7aWYoR2Rbbi5vcHRpb25zXSl7bGV0IHU9S2coWi5leHRlbmQoe2luc3RhbmNlSWQ6dC5wYXJhbXN9LEdkW24ub3B0aW9uc10pKTtyZXR1cm4gbmV3IHV9fXJldHVybiB0LnBhcmFtc31mdW5jdGlvbiBHZyhlKXtpZihlLmVyck1zZyl0aHJvdyBuZXcgRXJyb3IoZS5lcnJNc2cpO3JldHVybiBkZWxldGUgZS5lcnJNc2csV2coZSxXZCgpLmludm9rZVN5bmMoZSwoKT0+e30pKX1mdW5jdGlvbiBlZihlLHQse21vZHVsZU5hbWU6bixtb2R1bGVUeXBlOnIscGFja2FnZTpzLGNsYXNzOnUsbmFtZTp2LG1ldGhvZDpFLGNvbXBhbmlvbjpGLGtlZXBBbGl2ZTpOLHBhcmFtczpNLHJldHVybjptZSxlcnJNc2c6QWV9LHhlLGJ0KXtOfHwoTj0odi5pbmRleE9mKCJvbiIpPT09MHx8di5pbmRleE9mKCJvZmYiKT09PTApJiZNLmxlbmd0aD09PTEmJk1bMF0udHlwZT09PSJVVFNDYWxsYmFjayIpO2xldCBBdD14ZT97bW9kdWxlTmFtZTpuLG1vZHVsZVR5cGU6cixpZDp4ZSx0eXBlOmUsbmFtZTp2LG1ldGhvZDpNLG5lc3RlZDohMSxrZWVwQWxpdmU6Tn06e21vZHVsZU5hbWU6bixtb2R1bGVUeXBlOnIscGFja2FnZTpzLGNsYXNzOnUsbmFtZTpFfHx2LHR5cGU6ZSxjb21wYW5pb246RixtZXRob2Q6TSxuZXN0ZWQ6ITEsa2VlcEFsaXZlOk59O3JldHVybiguLi5adCk9PntpZihBZSl0aHJvdyBuZXcgRXJyb3IoQWUpO2xldCB6dD1OP21QOnt9LENuPSh7aWQ6ZnQsbmFtZTpYdCxwYXJhbXM6V3R9KT0+e2xldCBLdD16dFtmdF07S3Q/KEt0KC4uLld0KSxOfHxkZWxldGUgenRbZnRdKTpjb25zb2xlLmVycm9yKGB1dHNcdTYzRDJcdTRFRjZbJHtufV0gJHtzfSR7dX0uJHt2LnJlcGxhY2UoIkJ5SnMiLCIiKX0gJHtYdH1cdTU2REVcdThDMDNcdTUxRkRcdTY1NzBcdTVERjJcdTkxQ0FcdTY1M0VcdUZGMENcdTRFMERcdTgwRkRcdTUxOERcdTZCMjFcdTYyNjdcdTg4NENcdUZGMENcdTUzQzJcdTgwMDNcdTY1ODdcdTY4NjNcdUZGMUFodHRwczovL2RvYy5kY2xvdWQubmV0LmNuL3VuaS1hcHAteC9wbHVnaW4vdXRzLXBsdWdpbi5odG1sI2tlZXBhbGl2ZWApfSx5bj17ZGVwdGg6MCxuZXN0ZWQ6ITF9LEx0PVouZXh0ZW5kKHt9LEF0LHtwYXJhbXM6WnQubWFwKGZ0PT56ZChmdCx6dCxOLHluKSl9KTtyZXR1cm4gTHQubmVzdGVkPXluLm5lc3RlZCx0P25ldyBQcm9taXNlKChmdCxYdCk9PntXZCgpLmludm9rZUFzeW5jKEx0LFd0PT57V3QudHlwZSE9PSJyZXR1cm4iP0NuKFd0KTpXdC5lcnJNc2c/WHQoV3QuZXJyTXNnKTpmdChXdC5wYXJhbXMpfSl9KTpXZyhMdCxXZCgpLmludm9rZVN5bmMoTHQsQ24pLG1lLHhlLGJ0KX19ZnVuY3Rpb24gcWcoZSx0KXtyZXR1cm4gdC5tYWluJiYhdC5tZXRob2QmJkpnKCkmJih0Lm1ldGhvZD0ic18iK3QubmFtZSksZWYoIm1ldGhvZCIsZSx0LDApfWxldCBDUD1xZztmdW5jdGlvbiBZZyhlLHQpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyImJlouaGFzT3duKHQsZSsiQnlKcyIpP2UrIkJ5SnMiOmV9ZnVuY3Rpb24gQVAoZSl7cmV0dXJuIHR5cGVvZiBlPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBPUChlKXtyZXR1cm4hQVAoZS5pbnN0YW5jZUlkKX1mdW5jdGlvbiBCZihlKXtyZXR1cm4iX18kc2V0IitaLmNhcGl0YWxpemUoZSl9ZnVuY3Rpb24gS2coZSl7bGV0e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOnMsbWV0aG9kczp1LHByb3BzOnYsc2V0dGVyczpFLGVyck1zZzpGfT1lLE49e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOnMsZXJyTXNnOkZ9LE0sbWU9W10sQWU9e30seGU9W10sYnQ9e30sQXQ9ITE7T1AoZSk/KEF0PSEwLE09ZS5pbnN0YW5jZUlkKToobWU9ZS5jb25zdHJ1Y3Rvci5wYXJhbXMsQWU9ZS5zdGF0aWNNZXRob2RzLHhlPWUuc3RhdGljUHJvcHMsYnQ9ZS5zdGF0aWNTZXR0ZXJzKSxKZygpJiZtZS5maW5kKHluPT55bi50eXBlPT09IlVUU0NhbGxiYWNrInx8eW4udHlwZS5pbmRleE9mKCJKU09OT2JqZWN0Iik+MCkmJm1lLnB1c2goe25hbWU6Il9ieUpzIix0eXBlOiJib29sZWFuIn0pO2xldCBadD1jbGFzc3tjb25zdHJ1Y3RvciguLi5MdCl7aWYodGhpcy5fX2luc3RhbmNlSWQ9MCxGKXRocm93IG5ldyBFcnJvcihGKTtsZXQgZnQ9e307aWYoQXQ/dHlwZW9mIE09PSJudW1iZXIiJiYodGhpcy5fX2luc3RhbmNlSWQ9TSk6dGhpcy5fX2luc3RhbmNlSWQ9ZWYoImNvbnN0cnVjdG9yIiwhMSxaLmV4dGVuZCh7bmFtZToiY29uc3RydWN0b3IiLGtlZXBBbGl2ZTohMSxwYXJhbXM6bWV9LE4pLDApLmFwcGx5KG51bGwsTHQpLCF0aGlzLl9faW5zdGFuY2VJZCl0aHJvdyBuZXcgRXJyb3IoYG5ldyAke3N9IGlzIGZhaWxlZGApO2xldCBYdD10aGlzLFd0PW5ldyBQcm94eShYdCx7Z2V0KEt0LHF0KXtpZihxdD09PSJfX3Zfc2tpcCIpcmV0dXJuITA7aWYoIWZ0W3F0XSl7aWYocXQ9WWcocXQsdSksWi5oYXNPd24odSxxdCkpe2xldHthc3luYzpjcixrZWVwQWxpdmU6UXQscGFyYW1zOklvLHJldHVybjpTdX09dVtxdF07ZnRbcXRdPXdQKCEhY3IsWi5leHRlbmQoe25hbWU6cXQsa2VlcEFsaXZlOlF0LHBhcmFtczpJbyxyZXR1cm46U3V9LE4pLFh0Ll9faW5zdGFuY2VJZCxXdCl9ZWxzZSBpZih2LmluY2x1ZGVzKHF0KSlyZXR1cm4gR2coe21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4saWQ6WHQuX19pbnN0YW5jZUlkLHR5cGU6ImdldHRlciIsa2VlcEFsaXZlOiExLG5lc3RlZDohMSxuYW1lOnF0LGVyck1zZzpGfSl9cmV0dXJuIGZ0W3F0XX0sc2V0KEt0LHF0LGNyKXtpZih2LmluY2x1ZGVzKHF0KSl7bGV0IFF0PUJmKHF0KTtpZighZnRbUXRdKXtsZXQgSW89RVtxdF07SW8mJihmdFtRdF09ZWYoInNldHRlciIsITEsWi5leHRlbmQoe25hbWU6cXQsa2VlcEFsaXZlOiExLHBhcmFtczpbSW9dfSxOKSxYdC5fX2luc3RhbmNlSWQsV3QpKX1yZXR1cm4gZnRbQmYocXQpXShjciksITB9cmV0dXJuITF9fSk7cmV0dXJuIE9iamVjdC5mcmVlemUoV3QpfX0senQ9e30sQ249e307cmV0dXJuIE9iamVjdC5mcmVlemUobmV3IFByb3h5KFp0LHtnZXQoeW4sTHQsZnQpe2lmKEx0PVlnKEx0LEFlKSxaLmhhc093bihBZSxMdCkpe2lmKCFDbltMdF0pe2xldHthc3luYzpYdCxrZWVwQWxpdmU6V3QscGFyYW1zOkt0LHJldHVybjpxdH09QWVbTHRdO0NuW0x0XT1xZyghIVh0LFouZXh0ZW5kKHtuYW1lOkx0LGNvbXBhbmlvbjohMCxrZWVwQWxpdmU6V3QscGFyYW1zOkt0LHJldHVybjpxdH0sTikpfXJldHVybiBDbltMdF19cmV0dXJuIHhlLmluY2x1ZGVzKEx0KT9HZyhaLmV4dGVuZCh7bmFtZTpMdCxjb21wYW5pb246ITAsdHlwZToiZ2V0dGVyIn0sTikpOlJlZmxlY3QuZ2V0KHluLEx0LGZ0KX0sc2V0KHluLEx0LGZ0KXtpZih4ZS5pbmNsdWRlcyhMdCkpe2xldCBYdD1CZihMdCk7aWYoIXp0W1h0XSl7bGV0IFd0PWJ0W0x0XTtXdCYmKHp0W1h0XT1lZigic2V0dGVyIiwhMSxaLmV4dGVuZCh7bmFtZTpMdCxrZWVwQWxpdmU6ITEscGFyYW1zOltXdF19LE4pLDApKX1yZXR1cm4genRbQmYoTHQpXShmdCksITB9cmV0dXJuITF9fSkpfWZ1bmN0aW9uIE1mKCl7cmV0dXJuIHR5cGVvZiBjIT0idW5kZWZpbmVkIiYmYy5vcy5uYW1lPT09IkFuZHJvaWQifWZ1bmN0aW9uIEpnKCl7cmV0dXJuIU1mKCl9ZnVuY3Rpb24gVFAoZSx0KXtyZXR1cm4gTWYoKT8idXRzLnNkay4iKyh0PyJtb2R1bGVzLiI6IiIpK2U6IiJ9ZnVuY3Rpb24gUFAoZSx0KXtyZXR1cm4gWmcoZSxNZigpPyJJbmRleEt0IjoiSW5kZXhTd2lmdCIsdCl9ZnVuY3Rpb24gWmcoZSx0LG4pe3JldHVybiBNZigpP3Q6IlVUU1NESyIrKG4/Ik1vZHVsZXMiOiIiKStaLmNhcGl0YWxpemUoZSkrWi5jYXBpdGFsaXplKHQpfWxldCBHZD17fTtmdW5jdGlvbiBOUChlLHQpe0dkW2VdPXR9bGV0IFhnPXt9O2Z1bmN0aW9uIElQKGUsdCl7WGdbZV09dH1mdW5jdGlvbiBrUChlLHQ9ITEpe2xldCBuPVhnW2VdO3JldHVybiBufHx0fHxjb25zb2xlLmVycm9yKGAke2V9IGlzIG5vdCBmb3VuZGApLG59bGV0IFNhPXtsb2FkOiJsb2FkIixjbG9zZToiY2xvc2UiLGVycm9yOiJlcnJvciIsYWRDbGlja2VkOiJhZENsaWNrZWQifTtjbGFzcyBRZ3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NhbGxiYWNrcz17fX1vbkxvYWQodCl7dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcihTYS5sb2FkLHQpfW9uQ2xvc2UodCl7dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcihTYS5jbG9zZSx0KX1vbkVycm9yKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIoU2EuZXJyb3IsdCl9b2ZmTG9hZCh0KXt0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKFNhLmxvYWQsdCl9b2ZmQ2xvc2UodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcihTYS5jbG9zZSx0KX1vZmZFcnJvcih0KXt0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKFNhLmVycm9yLHQpfV9hZGRFdmVudExpc3RlbmVyKHQsbil7IVouaXNGdW5jdGlvbihuKXx8KHRoaXMuX2NhbGxiYWNrc1t0XXx8KHRoaXMuX2NhbGxiYWNrc1t0XT1bXSksdGhpcy5fY2FsbGJhY2tzW3RdLnB1c2gobikpfV9yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IHI9dGhpcy5fY2FsbGJhY2tzW3RdLHM9ci5pbmRleE9mKG4pO3M+LTEmJnIuc3BsaWNlKHMsMSl9X2Rpc3BhdGNoRXZlbnQodCxuKXt0aGlzLl9jYWxsYmFja3NbdF0uZm9yRWFjaChyPT57cihufHx7fSl9KX19Y2xhc3MgcWQgZXh0ZW5kcyBRZ3tjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7dGhpcy5wcmVsb2FkPSEwLHRoaXMuX2lzTG9hZGVkPSExLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9sb2FkUHJvbWlzZVJlamVjdD1udWxsLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW51bGwsdGhpcy5wcmVsb2FkPW4ucHJlbG9hZCE9PXZvaWQgMD9uLnByZWxvYWQ6ITE7bGV0IHI9dGhpcy5fYWRJbnN0YW5jZT10O3Iub25Mb2FkKCgpPT57dGhpcy5faXNMb2FkZWQ9ITAsdGhpcy5faXNMb2FkaW5nPSExLHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZSE9bnVsbCYmKHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZSgpLHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT1udWxsKSx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmUhPW51bGwmJih0aGlzLl9zaG93UHJvbWlzZVJlc29sdmUoKSx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9zaG93QWQoKSksdGhpcy5fZGlzcGF0Y2hFdmVudChTYS5sb2FkLHt9KX0pLHIub25DbG9zZShzPT57dGhpcy5faXNMb2FkZWQ9ITEsdGhpcy5faXNMb2FkaW5nPSExLHRoaXMuX2Rpc3BhdGNoRXZlbnQoU2EuY2xvc2UscyksdGhpcy5wcmVsb2FkPT09ITAmJnRoaXMuX2xvYWRBZCgpfSksci5vbkVycm9yKHM9Pnt0aGlzLl9pc0xvYWRpbmc9ITE7bGV0IHU9e2NvZGU6cy5jb2RlLGVyck1zZzpzLm1lc3NhZ2V9O3RoaXMuX2Rpc3BhdGNoRXZlbnQoU2EuZXJyb3IsdSk7bGV0IHY9bmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHUpKTt0aGlzLl9sb2FkUHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0KHYpLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwpLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0IT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZWplY3QodiksdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCl9KSxyLm9uQWRDbGlja2VkJiZyLm9uQWRDbGlja2VkKCgpPT57dGhpcy5fZGlzcGF0Y2hFdmVudChTYS5hZENsaWNrZWQse30pfSl9Z2V0UHJvdmlkZXIoKXtyZXR1cm4gdGhpcy5fYWRJbnN0YW5jZS5nZXRQcm92aWRlcigpfWxvYWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9Pnt0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9dCx0aGlzLl9sb2FkUHJvbWlzZVJlamVjdD1uLCF0aGlzLl9pc0xvYWRpbmcmJih0aGlzLl9pc0xvYWRlZD90KCIiKTp0aGlzLl9sb2FkQWQoKSl9KX1zaG93KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPXQsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nJiYodGhpcy5faXNMb2FkZWQ/KHRoaXMuX3Nob3dBZCgpLHQoIiIpKTp0aGlzLl9sb2FkQWQoKSl9KX1kZXN0cm95KCl7dGhpcy5fYWRJbnN0YW5jZS5kZXN0cm95KCl9X2xvYWRBZCgpe3RoaXMuX2lzTG9hZGVkPSExLHRoaXMuX2lzTG9hZGluZz0hMCx0aGlzLl9hZEluc3RhbmNlLmxvYWQoKX1fc2hvd0FkKCl7dGhpcy5fYWRJbnN0YW5jZS5zaG93KCl9fWNsYXNzIFJQIGV4dGVuZHMgcWR7Y29uc3RydWN0b3IodCl7c3VwZXIoYy5hZC5jcmVhdGVSZXdhcmRlZFZpZGVvQWQodCksdCk7dGhpcy5fbG9hZEFkKCl9fWxldCB4UD0kdChGdyxlPT5uZXcgUlAoZSksVXcsVncpO2NsYXNzIEJQIGV4dGVuZHMgcWR7Y29uc3RydWN0b3IodCl7c3VwZXIoYy5hZC5jcmVhdGVGdWxsU2NyZWVuVmlkZW9BZCh0KSx0KTt0aGlzLnByZWxvYWQ9ITF9fWxldCBNUD0kdChIdyxlPT5uZXcgQlAoZSksancsJHcpO2NsYXNzIExQIGV4dGVuZHMgcWR7Y29uc3RydWN0b3IodCl7c3VwZXIoYy5hZC5jcmVhdGVJbnRlcnN0aXRpYWxBZCh0KSx0KTt0aGlzLnByZWxvYWQ9ITEsdGhpcy5fbG9hZEFkKCl9fWxldCBEUD0kdCh6dyxlPT5uZXcgTFAoZSksR3csV3cpLExzPXt9LHhjPXt9O2Z1bmN0aW9uIEZQKGUpe2xldCB0PWUucHJvdmlkZXI7aWYoTHNbdF18fChMc1t0XT17fSksdHlwZW9mIExzW3RdLnBsdWdpbj09Im9iamVjdCIpe2Uuc3VjY2VzcyhMc1t0XS5wbHVnaW4pO3JldHVybn1pZih4Y1t0XXx8KHhjW3RdPVtdKSx4Y1t0XS5wdXNoKGUpLExzW3RdLnN0YXR1cz09PSEwKXtlLl9fcGx1Z2luPUxzW3RdLnBsdWdpbjtyZXR1cm59THNbdF0uc3RhdHVzPSEwO2xldCBuPUZhKHQpO2lmKCFufHwhbi5pbml0U0RLKXt4Y1t0XS5mb3JFYWNoKHI9PntyLmZhaWwoe2NvZGU6LTEsbWVzc2FnZToicHJvdmlkZXIgWyIrdCsiXSBpbnZhbGlkIn0pfSkseGNbdF0ubGVuZ3RoPTAsTHNbdF0uc3RhdHVzPSExO3JldHVybn1Mc1t0XS5wbHVnaW49bixlLl9fcGx1Z2luPW4sbi5pbml0U0RLKHI9PntsZXQgcz1yLmNvZGU9PT0xfHxyLmNvZGU9PT0iMSI7cz9Mc1t0XS5wbHVnaW49bjpMc1t0XS5zdGF0dXM9ITEseGNbdF0uZm9yRWFjaCh1PT57cz91LnN1Y2Nlc3ModS5fX3BsdWdpbik6dS5mYWlsKHIpfSkseGNbdF0ubGVuZ3RoPTB9KX1jbGFzcyBWUCBleHRlbmRzIFFne2NvbnN0cnVjdG9yKHQpe3N1cGVyKCk7dGhpcy5fYWRwaWQ9IiIsdGhpcy5fcHJvdmlkZXI9IiIsdGhpcy5fdXNlckRhdGE9bnVsbCx0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsLHRoaXMuX2FkSW5zdGFuY2U9bnVsbCx0aGlzLl9hZEVycm9yPSIiLHRoaXMuX2FkcGlkPXQuYWRwaWQsdGhpcy5fcHJvdmlkZXI9dC5wcm92aWRlcix0aGlzLl91c2VyRGF0YT10LnVzZXJEYXRhLFIoKCk9Pnt0aGlzLl9pbml0KCl9KX1faW5pdCgpe3RoaXMuX2FkRXJyb3I9IiIsRlAoe3Byb3ZpZGVyOnRoaXMuX3Byb3ZpZGVyLHN1Y2Nlc3M6dD0+e3RoaXMuX2FkSW5zdGFuY2U9dCx0aGlzLl91c2VyRGF0YSYmdGhpcy5iaW5kVXNlckRhdGEodGhpcy5fdXNlckRhdGEpLHRoaXMuX2xvYWRBZCgpfSxmYWlsOnQ9Pnt0aGlzLl9hZEVycm9yPXQsdGhpcy5fbG9hZFByb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlamVjdCh0aGlzLl9jcmVhdGVFcnJvcih0KSksdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9bnVsbCksdGhpcy5fZGlzcGF0Y2hFdmVudChTYS5lcnJvcix0KX19KX1nZXRQcm92aWRlcigpe3JldHVybiB0aGlzLl9wcm92aWRlcn1sb2FkKCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57aWYodGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPXQsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nKXtpZih0aGlzLl9hZEVycm9yKXt0aGlzLl9pbml0KCk7cmV0dXJufXRoaXMuX2lzTG9hZGVkP3QoIiIpOnRoaXMuX2xvYWRBZCgpfX0pfXNob3coKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntpZih0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9dCx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1uLCF0aGlzLl9pc0xvYWRpbmcpe2lmKHRoaXMuX2FkRXJyb3Ipe3RoaXMuX2luaXQoKTtyZXR1cm59dGhpcy5faXNMb2FkZWQ/KHRoaXMuX3Nob3dBZCgpLHQoIiIpKTp0aGlzLl9sb2FkQWQoKX19KX1yZXBvcnRFeHBvc3VyZSgpe3RoaXMuX2FkSW5zdGFuY2UhPT1udWxsJiZ0aGlzLl9hZEluc3RhbmNlLnJlcG9ydEV4cG9zdXJlKCl9YmluZFVzZXJEYXRhKHQpe3RoaXMuX2FkSW5zdGFuY2UhPT1udWxsJiZ0aGlzLl9hZEluc3RhbmNlLmJpbmRVc2VyRGF0YSh0KX1kZXN0cm95KCl7dGhpcy5fYWRJbnN0YW5jZSE9PW51bGwmJnRoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSYmdGhpcy5fYWRJbnN0YW5jZS5kZXN0cm95KHthZHBpZDp0aGlzLl9hZHBpZH0pfV9sb2FkQWQoKXtpZih0aGlzLl9hZEluc3RhbmNlIT09bnVsbCl7aWYodGhpcy5faXNMb2FkaW5nPT09ITApcmV0dXJuO3RoaXMuX2lzTG9hZGluZz0hMCx0aGlzLl9hZEluc3RhbmNlLmxvYWREYXRhKHthZHBpZDp0aGlzLl9hZHBpZH0sdD0+e3RoaXMuX2lzTG9hZGVkPSEwLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUoKSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9bnVsbCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlKCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd0FkKCkpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoU2EubG9hZCx0KX0sdD0+e3RoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KHRoaXMuX2NyZWF0ZUVycm9yKHQpKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9kaXNwYXRjaEV2ZW50KFNhLmVycm9yLHQpfSl9fV9zaG93QWQoKXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5faXNMb2FkZWQ9PT0hMCYmdGhpcy5fYWRJbnN0YW5jZS5zaG93KHthZHBpZDp0aGlzLl9hZHBpZH0sKCk9Pnt0aGlzLl9pc0xvYWRlZD0hMX0sdD0+e3RoaXMuX2lzTG9hZGVkPSExLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0IT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZWplY3QodGhpcy5fY3JlYXRlRXJyb3IodCkpLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW51bGwpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoU2EuZXJyb3IsdCl9KX1fY3JlYXRlRXJyb3IodCl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh0KSl9fWxldCBVUD0kdChxdyxlPT5uZXcgVlAoZSksS3csWXcpLGV2PWMub3MubmFtZT09PSJBbmRyb2lkIiYmcGFyc2VJbnQoYy5vcy52ZXJzaW9uKTw2LEhQPWV2PyJzbGlkZS1pbi1yaWdodCI6InBvcC1pbiIsTGY9MzAwLHR2PWV2PyJzbGlkZS1vdXQtcmlnaHQiOiJwb3Atb3V0IiwkUD0iX3d3dy9fX3VuaWFwcHZpZXcuaHRtbCIsalA9IndlYnZpZXdJZCIselA9InVuaU1QTmF0aXZlRXZlbnQiO2Z1bmN0aW9uIFdQKGUsdCxuKXtuJiZ0LmlzTlZ1ZSYmKGUudW5pTlZpZXc9e3BhdGg6bixkZWZhdWx0Rm9udFNpemU6SS5kZWZhdWx0Rm9udFNpemUsdmlld3BvcnQ6SS52aWV3cG9ydH0pfWxldCBHUD0vXiNbYS16MC05XXs2fSQvaTtmdW5jdGlvbiBxUChlKXtyZXR1cm4gZSYmKEdQLnRlc3QoZSl8fGU9PT0idHJhbnNwYXJlbnQiKX1mdW5jdGlvbiBZUChlLHQpe2xldHtiYWNrZ3JvdW5kQ29sb3I6bn09dDshbnx8IXFQKG4pfHwoZS5iYWNrZ3JvdW5kP249ZS5iYWNrZ3JvdW5kOmUuYmFja2dyb3VuZD1uLGUuYmFja2dyb3VuZENvbG9yVG9wfHwoZS5iYWNrZ3JvdW5kQ29sb3JUb3A9biksZS5iYWNrZ3JvdW5kQ29sb3JCb3R0b218fChlLmJhY2tncm91bmRDb2xvckJvdHRvbT1uKSxlLmFuaW1hdGlvbkFscGhhQkdDb2xvcnx8KGUuYW5pbWF0aW9uQWxwaGFCR0NvbG9yPW4pLHR5cGVvZiBlLndlYnZpZXdCR1RyYW5zcGFyZW50PT0idW5kZWZpbmVkIiYmKGUud2Vidmlld0JHVHJhbnNwYXJlbnQ9ITApKX1mdW5jdGlvbiBLUChlLHQpe2UucG9wR2VzdHVyZT09PSJoaWRlIiYmZGVsZXRlIGUucG9wR2VzdHVyZSx0LmlzUXVpdCYmKGUucG9wR2VzdHVyZT1jLm9zLm5hbWU9PT0iaU9TIj8iYXBwYmFjayI6Im5vbmUiKX1mdW5jdGlvbiBKUChlLHQpe2lmKCF0LmVuYWJsZVB1bGxEb3duUmVmcmVzaClyZXR1cm47bGV0IG49UmwoWi5leHRlbmQoe30sYy5vcy5uYW1lPT09IkFuZHJvaWQiP1hQOlFQLHQucHVsbFRvUmVmcmVzaCkpO2UucHVsbFRvUmVmcmVzaD1aUChuLHQpfWZ1bmN0aW9uIFpQKGUsdCl7bGV0IG49TmEoZSk7aWYoIW4pcmV0dXJuIGU7bGV0W3Iscyx1XT1uO3JldHVybihyfHxzfHx1KSYmTy5vbkxvY2FsZUNoYW5nZSgoKT0+e2xldCB2PWMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh0LmlkKyIiKTtpZighdilyZXR1cm47bGV0IEU9e3N1cHBvcnQ6ITB9O3ImJihFLmNvbnRlbnRkb3duPXtjYXB0aW9uOmUuY29udGVudGRvd24uY2FwdGlvbn0pLHMmJihFLmNvbnRlbnRvdmVyPXtjYXB0aW9uOmUuY29udGVudG92ZXIuY2FwdGlvbn0pLHUmJihFLmNvbnRlbnRyZWZyZXNoPXtjYXB0aW9uOmUuY29udGVudHJlZnJlc2guY2FwdGlvbn0pLHYuc2V0U3R5bGUoe3B1bGxUb1JlZnJlc2g6RX0pfSksZX1sZXQgWFA9e3N1cHBvcnQ6ITAsc3R5bGU6ImNpcmNsZSJ9LFFQPXtzdXBwb3J0OiEwLHN0eWxlOiJkZWZhdWx0IixoZWlnaHQ6IjUwcHgiLHJhbmdlOiIyMDBweCIsY29udGVudGRvd246e2NhcHRpb246IiJ9LGNvbnRlbnRvdmVyOntjYXB0aW9uOiIifSxjb250ZW50cmVmcmVzaDp7Y2FwdGlvbjoiIn19O2Z1bmN0aW9uIGVOKGUsdCl7bGV0e25hdmlnYXRpb25CYXI6bn09dDtpZihuLnN0eWxlPT09ImN1c3RvbSIpcmV0dXJuITE7bGV0IHI9ITA7dC5pc1F1aXQmJihyPSExKTtsZXQgcz17YXV0b0JhY2tCdXR0b246cn07T2JqZWN0LmtleXMobikuZm9yRWFjaCh1PT57bGV0IHY9blt1XTt1PT09InRpdGxlSW1hZ2UiJiZ2P3MudGFncz1uTih2KTp1PT09ImJ1dHRvbnMiJiZaLmlzQXJyYXkodik/cy5idXR0b25zPXYubWFwKChFLEYpPT4oRS5vbmNsaWNrPXJOKEYpLEUpKTpzW3VdPXZ9KSxlLnRpdGxlTlZpZXc9dE4ocyx0KX1mdW5jdGlvbiB0TihlLHQpe2xldCBuPXNpKGUpO2lmKCFuKXJldHVybiBlO2xldFtyLHNdPW47cmV0dXJuKHJ8fHMpJiZPLm9uTG9jYWxlQ2hhbmdlKCgpPT57bGV0IHU9Yy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQuaWQrIiIpO2lmKCF1KXJldHVybjtsZXQgdj17fTtyJiYodi50aXRsZVRleHQ9ZS50aXRsZVRleHQpLHMmJih2LnNlYXJjaElucHV0PXtwbGFjZWhvbGRlcjplLnNlYXJjaElucHV0LnBsYWNlaG9sZGVyfSksdS5zZXRTdHlsZSh7dGl0bGVOVmlldzp2fSl9KSxlfWZ1bmN0aW9uIG5OKGUpe3JldHVyblt7dGFnOiJpbWciLHNyYzplLHBvc2l0aW9uOntsZWZ0OiJhdXRvIix0b3A6ImF1dG8iLHdpZHRoOiJhdXRvIixoZWlnaHQ6IjI2cHgifX1dfWZ1bmN0aW9uIHJOKGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmluZGV4PWUscnIoc2UuT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUCxuKX19ZnVuY3Rpb24gbnYoZSx0LG4pe2xldCByPXtib3VuY2U6InZlcnRpY2FsIn07cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gocz0+e2lOLmluZGV4T2Yocyk9PT0tMSYmKHJbc109dFtzXSl9KSxuLmlkIT09IjEiJiZXUChyLHQsZSksS1Aocix0KSxZUChyLHQpLGVOKHIsdCksSlAocix0KSxyfWxldCBpTj1bImlkIiwicm91dGUiLCJpc05WdWUiLCJpc1F1aXQiLCJpc0VudHJ5IiwiaXNUYWJCYXIiLCJ0YWJCYXJJbmRleCIsIndpbmRvd1RvcCIsInRvcFdpbmRvdyIsImxlZnRXaW5kb3ciLCJyaWdodFdpbmRvdyIsIm1heFdpZHRoIiwidXNpbmdDb21wb25lbnRzIiwiZGlzYWJsZVNjcm9sbCIsImVuYWJsZVB1bGxEb3duUmVmcmVzaCIsIm5hdmlnYXRpb25CYXIiLCJwdWxsVG9SZWZyZXNoIiwib25SZWFjaEJvdHRvbURpc3RhbmNlIiwicGFnZU9yaWVudGF0aW9uIiwiYmFja2dyb3VuZENvbG9yIl0scnY9MjtmdW5jdGlvbiBpdigpe3JldHVybiBydn1mdW5jdGlvbiBvdigpe3JldHVybiBydisrfWZ1bmN0aW9uIGF2KGUpe3JldHVybiBlfWZ1bmN0aW9uIHN2KGUsdCl7bGV0IG49dD9zZS5zdHJpbmdpZnlRdWVyeSh0LGF2KToiIjtyZXR1cm57cGF0aDplLnNsaWNlKDEpLHF1ZXJ5Om4mJm4uc2xpY2UoMSl9fWZ1bmN0aW9uIG9OKGUsdCxuKXtsZXQgcj1uP3NlLnN0cmluZ2lmeVF1ZXJ5KG4sYXYpOiIiO3JldHVybntpc1RhYjplLGFyZ3VtZW50czpKU09OLnN0cmluZ2lmeSh7cGF0aDp0LnNsaWNlKDEpLHF1ZXJ5OnImJnIuc2xpY2UoMSl9KX19ZnVuY3Rpb24gYU4oe3BhdGg6ZSxxdWVyeTp0LHJvdXRlT3B0aW9uczpuLHdlYnZpZXdFeHRyYXM6cn0pe2xldCBzPSgpPT5udihlLFBkKG4ubWV0YSkse2lkOnUrIiJ9KSx1PW92KCksdj1zKCk7di51bmlQYWdlVXJsPXN2KGUsdCksdi5pc1RhYj0hIW4ubWV0YS5pc1RhYkJhcjtsZXQgRT1jLndlYnZpZXcuY3JlYXRlKCIiLFN0cmluZyh1KSx2LFouZXh0ZW5kKHtudnVlOiEwLF9fcGF0aF9fOmUsX19xdWVyeV9fOkpTT04uc3RyaW5naWZ5KHQpfSxyKSk7cmV0dXJuIEZoKEUscyksRX1sZXQgdW87ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIHVvPWV9ZnVuY3Rpb24gc04oKXtyZXR1cm4gdW99ZnVuY3Rpb24gbE4oKXtyZXR1cm4oIXVvfHx1by5fX3VuaWFwcF9yb3V0ZSkmJih1bz1jLndlYnZpZXcuY3JlYXRlKCRQLFN0cmluZyhvdigpKSx7Y29udGVudEFkanVzdDohMX0pKSx1b31mdW5jdGlvbiBjTihlKXtsZXR7cG9wdXBTdWJOVnVlV2Vidmlld3M6dH09ZTshdHx8ZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49Pnt0W25dLmNsb3NlKCJub25lIil9KX0pfWxldCBjdj0hMTtmdW5jdGlvbiB1digpe2lmKGN2KXJldHVybjtjdj0hMDtsZXQgZSx0O2lmKGcucmVxdWlyZU1vZHVsZSgicGx1cyIpLmdldFJlZGlyZWN0SW5mbyl7bGV0e3BhdGg6dSxxdWVyeTp2LHJlZmVycmVySW5mbzpFfT12bigpO3UmJihlPXUsdD12KSxJLnJlZmVycmVySW5mbz1FfWVsc2V7bGV0IHU9Yy5ydW50aW1lLmFyZ3VtZW50cztpZighdSlyZXR1cm47dHJ5e2xldCB2PUpTT04ucGFyc2UodSk7ZT12LnBhdGh8fHYucGF0aE5hbWUsdD12LnF1ZXJ5PyI/Iit2LnF1ZXJ5OiIifWNhdGNoKHYpe319aWYoIWV8fGU9PT1JLmVudHJ5UGFnZVBhdGgpe3QmJihJLmVudHJ5UGFnZVF1ZXJ5PXQpO3JldHVybn1sZXQgcj1zZS5hZGRMZWFkaW5nU2xhc2goZSkscz1UaShyKTshc3x8KHMubWV0YS5pc1RhYkJhcnx8KEkucmVhbEVudHJ5UGFnZVBhdGg9SS5yZWFsRW50cnlQYWdlUGF0aHx8SS5lbnRyeVBhZ2VQYXRoKSxJLmVudHJ5UGFnZVBhdGg9ZSxJLmVudHJ5UGFnZVF1ZXJ5PXQpfWZ1bmN0aW9uIERmKGUsdCl7bGV0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShUaShlKSkpO3JldHVybiBuLm1ldGE9eW8obi5tZXRhKSx0IT09InByZWxvYWRQYWdlIiYmIUkucmVhbEVudHJ5UGFnZVBhdGgmJih0PT09InJlTGF1bmNoInx8dnIoKS5sZW5ndGg9PT0wKT9uLm1ldGEuaXNRdWl0PSEwOm4ubWV0YS5pc1RhYkJhcnx8KG4ubWV0YS5pc1F1aXQ9ITEpLG59bGV0IERzPXt9O2Z1bmN0aW9uIHVOKGUpe2xldCB0PU9iamVjdC5rZXlzKERzKS5maW5kKG49PkRzW25dLmlkPT09ZS5pZCk7dCYmZGVsZXRlIERzW3RdfWZ1bmN0aW9uIGZOKHt1cmw6ZX0pe2xldCB0PURzW2VdO3JldHVybiB0JiYodC5fX3BhZ2VfXyYmT3QoKS5maW5kKG49Pm49PT10Ll9fcGFnZV9fKT90Ll9fcHJlbG9hZF9fPSExOnQuY2xvc2UoIm5vbmUiKSxkZWxldGUgRHNbZV0pLHR9ZnVuY3Rpb24gZE4oe3VybDplLHBhdGg6dCxxdWVyeTpufSl7aWYoIURzW2VdKXtsZXQgcj1EZih0LCJwcmVsb2FkUGFnZSIpO0RzW2VdPWd2KHtwYXRoOnQscm91dGVPcHRpb25zOnIscXVlcnk6bix3ZWJ2aWV3RXh0cmFzOntfX3ByZWxvYWRfXzohMH19KX1yZXR1cm4gRHNbZV19ZnVuY3Rpb24gdGYoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOnIsd2VidmlldzpzLG52dWVQYWdlVm06dSxldmVudENoYW5uZWw6dn0pe2lmKHMmJnV2KCksRHNbZV0pe3M9RHNbZV07bGV0IEFlPXM7aWYoQWUuX19wYWdlX18paWYoT3QoKS5maW5kKHhlPT54ZT09PUFlLl9fcGFnZV9fKSlzPXZvaWQgMDtlbHNlIHJldHVybiB2JiYoRnQoQWUuX19wYWdlX18pLmV2ZW50Q2hhbm5lbD12KSxyPT09ImxhdW5jaCI/cE4oZSx0LG4sQWUsdSx2KTpfdChBZS5fX3BhZ2VfXyksQWV9bGV0IEU9RGYodCxyKTtzPyhzPWMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChzLmlkKSxzLm52dWU9RS5tZXRhLmlzTlZ1ZSk6cz1ndih7cGF0aDp0LHJvdXRlT3B0aW9uczpFLHF1ZXJ5Om59KSxFLm1ldGEuaWQ9cGFyc2VJbnQocy5pZCksISFFLm1ldGEuaXNUYWJCYXImJnhpLmFwcGVuZChzKSxTTihzLHQsbixFLm1ldGEpO2xldCBOPXQuc2xpY2UoMSk7cy5fX3VuaWFwcF9yb3V0ZT1OO2xldCBNPXJhKHIsZSxuLEUubWV0YSx2LEkuZGFya21vZGU/Yy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpLG1lPXBhcnNlSW50KHMuaWQpO3JldHVybiBzLm52dWU/dT9nTihtZSx1LE0pOmZ2KG1lLHMsTSk6clQobWUsTixuLE0saE4oRSkpLHN9ZnVuY3Rpb24gcE4oZSx0LG4scixzLHUpe2xldCB2PURmKHQsInByZWxvYWRQYWdlIik7di5tZXRhLmlkPXBhcnNlSW50KHIuaWQpO2xldCBFPXJhKCJwcmVsb2FkUGFnZSIsZSxuLHYubWV0YSx1LEkuZGFya21vZGU/Yy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpO0JlKHMsRSksci5fX3BhZ2VfXz1zfWZ1bmN0aW9uIGhOKHttZXRhOmV9KXtsZXQgdD1rZCgpLHtwbGF0Zm9ybTpuLHBpeGVsUmF0aW86cix3aW5kb3dXaWR0aDpzfT1YbygpO3JldHVybntjc3M6ITAscm91dGU6ZS5yb3V0ZSx2ZXJzaW9uOjEsbG9jYWxlOiIiLHBsYXRmb3JtOm4scGl4ZWxSYXRpbzpyLHdpbmRvd1dpZHRoOnMsZGlzYWJsZVNjcm9sbDplLmRpc2FibGVTY3JvbGw9PT0hMCxvblBhZ2VTY3JvbGw6ITEsb25QYWdlUmVhY2hCb3R0b206ITEsb25SZWFjaEJvdHRvbURpc3RhbmNlOlouaGFzT3duKGUsIm9uUmVhY2hCb3R0b21EaXN0YW5jZSIpP2Uub25SZWFjaEJvdHRvbURpc3RhbmNlOnNlLk9OX1JFQUNIX0JPVFRPTV9ESVNUQU5DRSxzdGF0dXNiYXJIZWlnaHQ6dCx3aW5kb3dUb3A6ZS5uYXZpZ2F0aW9uQmFyLnR5cGU9PT0iZmxvYXQiP3Qrc2UuTkFWQkFSX0hFSUdIVDowLHdpbmRvd0JvdHRvbTp4aS5pbmRleE9mKGUucm91dGUpPj0wJiZ4aS5jb3Zlcj94aS5oZWlnaHQ6MH19ZnVuY3Rpb24gZ04oZSx0LG4pe0JlKHQsbiksX3QoQ2coZSx0LG4pKSxlPT09MSYmKEkuc3BsYXNoc2NyZWVuJiZJLnNwbGFzaHNjcmVlbi5hdXRvY2xvc2UmJiFJLnNwbGFzaHNjcmVlbi5hbHdheXNTaG93QmVmb3JlUmVuZGVyJiZjLm5hdmlnYXRvci5jbG9zZVNwbGFzaHNjcmVlbigpLEkub25SZWFkeShmdW5jdGlvbigpe2J2KCl9KSl9ZnVuY3Rpb24gZnYoZSx0LG4pe2xldCByPXskOnt9LCRnZXRBcHBXZWJ2aWV3KCl7cmV0dXJuIHR9LGdldE9wZW5lckV2ZW50Q2hhbm5lbCgpe3JldHVybiBuLmV2ZW50Q2hhbm5lbHx8KG4uZXZlbnRDaGFubmVsPW5ldyBzZS5FdmVudENoYW5uZWwoZSkpLG4uZXZlbnRDaGFubmVsfSxfX3NldHVwKHMsdSl7cy4kZ2V0QXBwV2Vidmlldz0oKT0+dCxzLmdldE9wZW5lckV2ZW50Q2hhbm5lbD11LmdldE9wZW5lckV2ZW50Q2hhbm5lbCxCZShzLG4pLHQuX19wcmVsb2FkX18mJih0Ll9fcGFnZV9fPXMpO2xldCB2PWJuKCksRT12LmZpbmRJbmRleChGPT5GPT09dSk7RT4tMSYmdi5zcGxpY2UoRSwxLHMpfX07QmUocixuKSx0Ll9fcHJlbG9hZF9fPyh0Ll9fcGFnZV9fPXIsdC5hZGRFdmVudExpc3RlbmVyKCJzaG93IiwoKT0+e3JyKHQuX19wYWdlX18sc2UuT05fU0hPVyl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoImhpZGUiLCgpPT57cnIodC5fX3BhZ2VfXyxzZS5PTl9ISURFKX0pKTpfdChyKX1mdW5jdGlvbiBkdihlKXtyZXR1cm4gSS5yZWFsRW50cnlQYWdlUGF0aCYmUG4oKVswXT09PWV9ZnVuY3Rpb24gcHYoKXtJLmVudHJ5UGFnZVBhdGg9SS5yZWFsRW50cnlQYWdlUGF0aCxkZWxldGUgSS5yZWFsRW50cnlQYWdlUGF0aCxPLnJlTGF1bmNoKHt1cmw6c2UuYWRkTGVhZGluZ1NsYXNoKEkuZW50cnlQYWdlUGF0aCl9KX1mdW5jdGlvbiB2TihlKXtsZXQgdDtlLmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLG49PntpZihuLnR5cGU9PT0ic3RhcnQiKXtsZXQgcj1PdCgpLHM9cltyLmxlbmd0aC0yXTt0PXF1O2xldCB1O3MmJih1PUZ0KHMpLnN0YXR1c0JhclN0eWxlKSx1JiZjbCh1KX1lbHNlIGlmKG4udHlwZT09PSJlbmQiJiYhbi5yZXN1bHQpY2wodCk7ZWxzZSBpZihuLnR5cGU9PT0iZW5kIiYmbi5yZXN1bHQpe2xldCByPXZyKCkubGVuZ3RoLHM9Vm4oKTtsbigpLGNsKCkscyYmcj09PTEmJmR2KHMpP3B2KCk6cnIoc2UuT05fU0hPVyl9fSl9ZnVuY3Rpb24gbU4oZSl7aWYoZS5udnVlKXJldHVybjtsZXQgdD1lLmlkLHtzdWJzY3JpYmU6bix1bnN1YnNjcmliZTpyfT1wdCxzPSh1LHYpPT57aWYodCE9PXYpcmV0dXJuO3IoYnUscyk7bGV0IEU9VnQocGFyc2VJbnQodikpO0UmJkUuX19wYWdlX2NvbnRhaW5lcl9fLnJlc3RvcmUoKX07ZS5hZGRFdmVudExpc3RlbmVyKCJyZWNvdmVyeSIsKCk9PntuKGJ1LHMpfSl9ZnVuY3Rpb24gX04oZSl7bGV0e2VtaXQ6dH09cHQsbj1mdW5jdGlvbih7d2lkdGg6cixoZWlnaHQ6c30pe2xldCB2PXtkZXZpY2VPcmllbnRhdGlvbjpNYXRoLmFicyhjLm5hdmlnYXRvci5nZXRPcmllbnRhdGlvbigpKT09PTkwPyJsYW5kc2NhcGUiOiJwb3J0cmFpdCIsc2l6ZTp7d2luZG93V2lkdGg6TWF0aC5jZWlsKHIpLHdpbmRvd0hlaWdodDpNYXRoLmNlaWwocyl9fTt0KHNlLk9OX1JFU0laRSx2LHBhcnNlSW50KGUuaWQpKX07ZS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHNlLmRlYm91bmNlKG4sNTAse3NldFRpbWVvdXQ6UixjbGVhclRpbWVvdXQ6d30pKX1sZXQgaHY9e3B1bGxUb1JlZnJlc2g6c2UuT05fUFVMTF9ET1dOX1JFRlJFU0gsdGl0bGVOVmlld1NlYXJjaElucHV0Q2hhbmdlZDpzZS5PTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0hBTkdFRCx0aXRsZU5WaWV3U2VhcmNoSW5wdXRDb25maXJtZWQ6c2UuT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NPTkZJUk1FRCx0aXRsZU5WaWV3U2VhcmNoSW5wdXRDbGlja2VkOnNlLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dEZvY3VzQ2hhbmdlZDpzZS5PTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRH07ZnVuY3Rpb24gYk4oZSl7bGV0IHQ9cGFyc2VJbnQoZS5pZCk7T2JqZWN0LmtleXMoaHYpLmZvckVhY2gobj0+e2xldCByPWh2W25dO2UuYWRkRXZlbnRMaXN0ZW5lcihuLHM9PntyPT09c2UuT05fUFVMTF9ET1dOX1JFRlJFU0gmJklkKGUpLHJyKHQscixzKX0pfSksY04oZSksX04oZSksYy5vcy5uYW1lPT09ImlPUyImJihtTihlKSx2TihlKSl9ZnVuY3Rpb24geU4oZSx0LG4scil7bGV0IHM9KCk9Pm52KHQsUGQociksZSksdT1zKCk7dS51bmlQYWdlVXJsPXN2KHQsbik7bGV0IHY9ISFyLmlzVGFiQmFyO3IuaXNOVnVlP3UuaXNUYWI9djp1LmRlYnVnUmVmcmVzaD1vTih2LHQsbiksdS5sb2NhbGU9Zy5yZXF1aXJlTW9kdWxlKCJwbHVzIikuZ2V0TGFuZ3VhZ2UoKSxGaChlLHMpLGUuc2V0U3R5bGUodSl9ZnVuY3Rpb24gRU4oZSx0LG4peyhuLnN1Yk5WdWVzfHxbXSkuZm9yRWFjaChzPT57aWYoIXMucGF0aClyZXR1cm47bGV0IHU9Rm8ocy5zdHlsZXx8e30pLHY9cy50eXBlPT09Im5hdmlnYXRpb25CYXIiLEU9cy50eXBlPT09InBvcHVwIjt1LnVuaU5WaWV3PXtwYXRoOnMucGF0aC5yZXBsYWNlKCIubnZ1ZSIsIi5qcyIpLGRlZmF1bHRGb250U2l6ZTpJLmRlZmF1bHRGb250U2l6ZSx2aWV3cG9ydDpJLnZpZXdwb3J0fTtsZXQgRj17X191bmlhcHBfaG9zdDp0LF9fdW5pYXBwX29yaWdpbjp1LnVuaU5WaWV3LnBhdGguc3BsaXQoIj8iKVswXS5yZXBsYWNlKCIuanMiLCIiKSxfX3VuaWFwcF9vcmlnaW5faWQ6ZS5pZCxfX3VuaWFwcF9vcmlnaW5fdHlwZTplLl9fdW5pYXBwX3R5cGV9LE47dj8odS5wb3NpdGlvbj0iZG9jayIsdS5kb2NrPSJ0b3AiLHUudG9wPSIwIix1LndpZHRoPSIxMDAlIix1LmhlaWdodD1TdHJpbmcoc2UuTkFWQkFSX0hFSUdIVCtrZCgpKSxkZWxldGUgdS5sZWZ0LGRlbGV0ZSB1LnJpZ2h0LGRlbGV0ZSB1LmJvdHRvbSxkZWxldGUgdS5tYXJnaW4pOkUmJih1LnBvc2l0aW9uPSJhYnNvbHV0ZSIsR3UodCk/Tj14aTpOPWUsRi5fX3VuaWFwcF9tYXNrPXUubWFza3x8InJnYmEoMCwwLDAsMC41KSIsRi5fX3VuaWFwcF9tYXNrX2lkPU4uaWQpLGRlbGV0ZSB1Lm1hc2s7bGV0IE09Yy53ZWJ2aWV3LmNyZWF0ZSgiIixzLmlkLHUsRik7aWYoRSl7Ti5wb3B1cFN1Yk5WdWVXZWJ2aWV3c3x8KE4ucG9wdXBTdWJOVnVlV2Vidmlld3M9e30pLE4ucG9wdXBTdWJOVnVlV2Vidmlld3NbTS5pZF09TTtsZXQgbWU9ZnVuY3Rpb24oKXtOLnNldFN0eWxlKHttYXNrOiJub25lIn0pLE0uaGlkZSgiYXV0byIpfTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1hc2tDbGljayIsbWUpO2xldCBBZT0hMTtNLmFkZEV2ZW50TGlzdGVuZXIoInNob3ciLCgpPT57QWV8fChjLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixWaSksYy5rZXkuYWRkRXZlbnRMaXN0ZW5lcigiYmFja2J1dHRvbiIsbWUpLEFlPSEwKX0pLE0uYWRkRXZlbnRMaXN0ZW5lcigiaGlkZSIsKCk9PntBZSYmKGMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLG1lKSxjLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixWaSksQWU9ITEpfSksTS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntkZWxldGUgTi5wb3B1cFN1Yk5WdWVXZWJ2aWV3c1tNLmlkXSxBZSYmKGMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLG1lKSxjLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixWaSksQWU9ITEpfSl9ZWxzZSBlLmFwcGVuZChNKX0pfWZ1bmN0aW9uIFNOKGUsdCxuLHIpeyhlLmlkPT09IjEifHwhci5pc05WdWUpJiZ5TihlLHQsbixyKSxFTihlLHQsciksYk4oZSl9ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIGUucm91dGVPcHRpb25zLm1ldGEuaXNOVnVlP2FOKGUpOml2KCk9PT0yP2Mud2Vidmlldy5nZXRMYXVuY2hXZWJ2aWV3KCk6c04oKX1mdW5jdGlvbiB2dihlLHQpe3B0Lm9uY2UoYnUrIi4iK2UsdCl9bGV0IEZzPSExO2Z1bmN0aW9uIG12KGUsdCxuKXtGcz17cGF0aDplLG52dWU6aWEoZSkuaXNOVnVlLGNhbGxiYWNrOnR9fWZ1bmN0aW9uIF92KGUsdCxuKXtVbihlKSxCYyhlLiRnZXRBcHBXZWJ2aWV3KCksdCxuKX1mdW5jdGlvbiBGZihlLHQsbj0hMSl7aWYoIW4mJkZzKXJldHVybiBjb25zb2xlLmVycm9yKGBXYWl0aW5nIHRvIG5hdmlnYXRlIHRvOiAke0ZzLnBhdGh9LCBkbyBub3Qgb3BlcmF0ZSBjb250aW51b3VzbHk6ICR7ZX0uYCk7aWYoSS5yZW5kZXJlcj09PSJuYXRpdmUiKXJldHVybiB2cigpLmxlbmd0aD09PTA/bXYoZSx0LCJ3YWl0Rm9yUmVhZHkiKTp0KCk7bGV0IHI9IXVvfHx1byYmdW8uX191bmlhcHBfcm91dGUscz11byYmIXVvLmxvYWRlZDtyfHxzP212KGUsdCxyPyJ3YWl0Rm9yQ3JlYXRlIjoid2FpdEZvclJlYWR5Iik6dCgpLHMmJnZ2KHVvLmlkLFZmKX1mdW5jdGlvbiBWZigpe2lmKCFGcylyZXR1cm47bGV0e2NhbGxiYWNrOmV9PUZzO3JldHVybiBGcz0hMSxlKCl9ZnVuY3Rpb24gYnYoKXtpZihJLnJlbmRlcmVyPT09Im5hdGl2ZSIpcmV0dXJuIEZzJiZGcy5udnVlP1ZmKCk6dm9pZCAwO2xldCBlPWxOKCk7aWYoISFGcyl7aWYoRnMubnZ1ZSlyZXR1cm4gVmYoKTtlLmxvYWRlZD9Gcy5jYWxsYmFjaygpOnZ2KGUuaWQsVmYpfX1mdW5jdGlvbiBCYyhlLHQsbil7ZVtlLl9fcHJlbG9hZF9fPyJoaWRlIjoiY2xvc2UiXSh0LG4pfWZ1bmN0aW9uIFVmKGUsdCxuLHIscyl7dHlwZW9mIHM9PSJ1bmRlZmluZWQiJiYocz1lLm52dWU/MDoxMDApO2xldCB1PWZ1bmN0aW9uKCl7dS5fY2FsbGVkfHwodS5fY2FsbGVkPSEwLHImJnIoKSxidigpKX07dS5fY2FsbGVkPSExLFIoKCk9PntsZXQgdj1SKCgpPT57dSgpfSxuKzE1MCk7ZS5zaG93KHQsbiwoKT0+e3UuX2NhbGxlZHx8dyh2KSx1KCl9KX0scyl9ZnVuY3Rpb24gd04oZSx0KXtsZXQgbj1lLmNoaWxkcmVuKCk7aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gdCgpO2xldCByPW4uZmluZChzPT5zLmlkLmluZGV4T2YoalApPT09MCl8fG5bMF07ci5jYW5CYWNrKCh7Y2FuQmFjazpzfSk9PntzP3IuYmFjaygpOnQoKX0pfWxldCBDTj1SZShRRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1WbigpO2lmKCFyKXJldHVybiBuKCJnZXRDdXJyZW50UGFnZXMgaXMgZW1wdHkiKTtpZihycihyLHNlLk9OX0JBQ0tfUFJFU1Mse2Zyb206ZS5mcm9tfHwibmF2aWdhdGVCYWNrIn0pKXJldHVybiB0KCk7aWYoTy5oaWRlVG9hc3QoKSxPLmhpZGVMb2FkaW5nKCksRnQocikubWV0YS5pc1F1aXQpQU4oKTtlbHNlIGlmKGR2KHIpKXB2KCk7ZWxzZXtsZXR7ZGVsdGE6cyxhbmltYXRpb25UeXBlOnUsYW5pbWF0aW9uRHVyYXRpb246dn09ZTtPTihzLHUsdil9cmV0dXJuIHQoKX0sdFMsZlMpLEhmPTA7ZnVuY3Rpb24gQU4oKXtmcigpLEhmP0RhdGUubm93KCktSGY8MmUzJiZjLnJ1bnRpbWUucXVpdCgpOihIZj1EYXRlLm5vdygpLGMubmF0aXZlVUkudG9hc3QoZXQoKS50KCJ1bmkuYXBwLnF1aXQiKSksUigoKT0+e0hmPTB9LDJlMykpfWZ1bmN0aW9uIE9OKGUsdCxuKXtsZXQgcj1PdCgpLHM9ci5sZW5ndGgsdT1yW3MtMV07ZT4xJiZyLnNsaWNlKHMtZSxzLTEpLnJldmVyc2UoKS5mb3JFYWNoKEY9PntCYyhjLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQoYCR7RnQoRikuaWR9YCksIm5vbmUiLDApfSk7bGV0IHY9ZnVuY3Rpb24oRil7dD9CYyhGLHQsbnx8TGYpOkZ0KHUpLm9wZW5UeXBlPT09InJlZGlyZWN0VG8iP0JjKEYsdHYsTGYpOkJjKEYsImF1dG8iKSxyLnNsaWNlKHMtZSxzKS5mb3JFYWNoKE49PlVuKE4pKSxjbCgpLHJyKHNlLk9OX1NIT1cpfSxFPWMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChgJHtGdCh1KS5pZH1gKTtpZighdS5fX3VuaWFwcF93ZWJ2aWV3KXJldHVybiB2KEUpO3dOKEUsKCk9Pnt2KEUpfSl9bGV0IHl2PShlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHt1cmw6cixldmVudHM6cyxhbmltYXRpb25UeXBlOnUsYW5pbWF0aW9uRHVyYXRpb246dn09ZSx7cGF0aDpFLHF1ZXJ5OkZ9PXNlLnBhcnNlVXJsKHIpLFtOLE1dPU5OKEUsdSx2KTtGZihFLCgpPT57UE4oe3VybDpyLHBhdGg6RSxxdWVyeTpGLGV2ZW50czpzLGFuaVR5cGU6TixhbmlEdXJhdGlvbjpNfSkudGhlbih0KS5jYXRjaChuKX0sZS5vcGVuVHlwZT09PSJhcHBMYXVuY2giKX0sVE49UmUod2QseXYsZVMsc1MpO2Z1bmN0aW9uIFBOKHt1cmw6ZSxwYXRoOnQscXVlcnk6bixldmVudHM6cixhbmlUeXBlOnMsYW5pRHVyYXRpb246dX0pe3JyKHNlLk9OX0hJREUpO2xldCB2PW5ldyBzZS5FdmVudENoYW5uZWwoaXYoKSsxLHIpO3JldHVybiBuZXcgUHJvbWlzZShFPT57VWYodGYoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJuYXZpZ2F0ZVRvIixldmVudENoYW5uZWw6dn0pLHMsdSwoKT0+e0Uoe2V2ZW50Q2hhbm5lbDp2fSl9KSxjbCgpfSl9ZnVuY3Rpb24gTk4oZSx0LG4pe2xldHtnbG9iYWxTdHlsZTpyfT1JLHM9aWEoZSk7cmV0dXJuW3R8fHMuYW5pbWF0aW9uVHlwZXx8ci5hbmltYXRpb25UeXBlfHxIUCxufHxzLmFuaW1hdGlvbkR1cmF0aW9ufHxyLmFuaW1hdGlvbkR1cmF0aW9ufHxMZl19bGV0IElOPVJlKENkLCh7dXJsOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtwYXRoOnIscXVlcnk6c309c2UucGFyc2VVcmwoZSk7RmYociwoKT0+e2tOKHt1cmw6ZSxwYXRoOnIscXVlcnk6c30pLnRoZW4odCkuY2F0Y2gobil9KX0sblMsbFMpO2Z1bmN0aW9uIGtOKHt1cmw6ZSxwYXRoOnQscXVlcnk6bn0pe2xldCByPVZuKCk7cmV0dXJuIHImJlVuKHIpLG5ldyBQcm9taXNlKHM9PntVZih0Zih7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6InJlZGlyZWN0VG8ifSksIm5vbmUiLDAsKCk9PntpZihyKXtsZXQgdT1yLiRnZXRBcHBXZWJ2aWV3KCk7dS5fX3ByZWxvYWRfXyYmdU4odSksdS5jbG9zZSgibm9uZSIpfXModm9pZCAwKX0pLGNsKCl9KX1sZXQgUk49KHt1cmw6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3BhdGg6cixxdWVyeTpzfT1zZS5wYXJzZVVybChlKTtGZihyLCgpPT57eE4oe3VybDplLHBhdGg6cixxdWVyeTpzfSkudGhlbih0KS5jYXRjaChuKX0pfTtmdW5jdGlvbiB4Tih7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBzPWJuKCkuc2xpY2UoMCk7T2UuZmluZCh2PT52LnBhdGg9PT10KS5tZXRhLmlzVGFiQmFyJiZ4aS5zd2l0Y2hUYWIodC5zbGljZSgxKSksVWYodGYoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJyZUxhdW5jaCJ9KSwibm9uZSIsMCwoKT0+e3MuZm9yRWFjaCh2PT5fdih2LCJub25lIikpLHIodm9pZCAwKX0pLGNsKCl9KX1sZXQgQk49UmUoQWgsUk4sclMsY1MpLEV2PShlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHt1cmw6cn09ZSx7cGF0aDpzLHF1ZXJ5OnV9PXNlLnBhcnNlVXJsKHIpO0ZmKHMsKCk9PntMTih7dXJsOnIscGF0aDpzLHF1ZXJ5OnV9KS50aGVuKHQpLmNhdGNoKG4pfSxlLm9wZW5UeXBlPT09ImFwcExhdW5jaCIpfSxNTj1SZSh2ZixFdixpUyx1Uyk7ZnVuY3Rpb24gTE4oe3VybDplLHBhdGg6dCxxdWVyeTpufSl7eGkuc3dpdGNoVGFiKHQuc2xpY2UoMSkpO2xldCByPU90KCkscz1yLmxlbmd0aCx1PSExLHY9ITEsRTtzPj0xJiYoRT1yW3MtMV0sRSYmIUUuJC5fX2lzVGFiQmFyPyh2PSEwLHIucmV2ZXJzZSgpLmZvckVhY2goTj0+eyFOLiQuX19pc1RhYkJhciYmTiE9PUUmJl92KE4sIm5vbmUiKX0pLFVuKEUpLFIoKCk9PntGdChFKS5vcGVuVHlwZT09PSJyZWRpcmVjdFRvIj9CYyhFLiRnZXRBcHBXZWJ2aWV3KCksdHYsTGYpOkJjKEUuJGdldEFwcFdlYnZpZXcoKSwiYXV0byIpfSwxMDApKTp1PSEwKTtsZXQgRjtyZXR1cm4gYm4oKS5mb3JFYWNoKE49PntzZS5hZGRMZWFkaW5nU2xhc2goTi5yb3V0ZSk9PT10PyhOLiQuX19pc0FjdGl2ZXx8KHY9ITApLE4uJC5fX2lzQWN0aXZlPSEwLEY9Tik6Ti4kLl9faXNUYWJCYXImJihOLiQuX19pc0FjdGl2ZT0hMSl9KSxFPT09RiYmKHU9ITEpLEUmJnUmJnJyKEUsc2UuT05fSElERSksbmV3IFByb21pc2UoTj0+e2lmKEYpe2xldCBNPUYuJGdldEFwcFdlYnZpZXcoKTtNLnNob3coIm5vbmUiKSx2JiYhTS5fX3ByZWxvYWRfXyYmcnIoRixzZS5PTl9TSE9XKSxjbCgpLE4odm9pZCAwKX1lbHNlIFVmKHRmKHt1cmw6ZSxwYXRoOnQscXVlcnk6bixvcGVuVHlwZToic3dpdGNoVGFiIn0pLCJub25lIiwwLCgpPT57Y2woKSxOKHZvaWQgMCl9LDcwKX0pfWxldCBETj1SZShBZCwoe3VybDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1mTih7dXJsOmV9KTtpZihyKXt0KHtpZDpyLmlkLHVybDplLGVyck1zZzoidW5QcmVsb2FkUGFnZTpvayJ9KTtyZXR1cm59bigibm90IGZvdW5kIil9LGFTLHBTKSxGTj1SZShtZiwoe3VybDplfSx7cmVzb2x2ZTp0fSk9PntpZihEc1tlXSlyZXR1cm47bGV0IG49ZS5zcGxpdCgiPyIpLHI9blswXSxzPXNlLnBhcnNlUXVlcnkoblsxXXx8IiIpLHU9ZE4oe3VybDplLHBhdGg6cixxdWVyeTpzfSksdj1EZihyLCJwcmVsb2FkUGFnZSIpO3YubWV0YS5pZD1wYXJzZUludCh1LmlkKTtsZXQgRT1yYSgicHJlbG9hZFBhZ2UiLGUscyx2Lm1ldGEsdm9pZCAwLEkuZGFya21vZGU/Yy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpO2Z2KHBhcnNlSW50KHUuaWQpLHUsRSksdCh7aWQ6dS5pZCx1cmw6ZSxlcnJNc2c6InByZWxvYWRQYWdlOm9rIn0pfSxvUyxkUyk7dmFyIFZOPXtfX3Byb3RvX186bnVsbCwkZW1pdDpCXywkb2ZmOnhfLCRvbjprXywkb25jZTpSXyxfX2xvZ19fOnBQLGFkZEludGVyY2VwdG9yOnlfLGFkZFBob25lQ29udGFjdDpmQSxhcnJheUJ1ZmZlclRvQmFzZTY0OlpvLGJhc2U2NFRvQXJyYXlCdWZmZXI6T2ksY2FuSVVzZTptQyxjYW52YXNHZXRJbWFnZURhdGE6Y2IsY2FudmFzUHV0SW1hZ2VEYXRhOnViLGNhbnZhc1RvVGVtcEZpbGVQYXRoOmZiLGNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6bUEsY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uOnZBLGNob29zZUltYWdlOlZBLGNob29zZUxvY2F0aW9uOmNULGNob29zZVZpZGVvOlVBLGNsZWFyU3RvcmFnZTppQyxjbGVhclN0b3JhZ2VTeW5jOnJDLGNsb3NlQXV0aFZpZXc6TWcsY2xvc2VCTEVDb25uZWN0aW9uOktDLGNsb3NlQmx1ZXRvb3RoQWRhcHRlcjokQyxjbG9zZVByZXZpZXdJbWFnZTpJQSxjbG9zZVNvY2tldDpyTyxjb21wcmVzc0ltYWdlOkxBLGNvbXByZXNzVmlkZW86REEsY29uZmlnTVRMUzpaQSxjb25uZWN0U29ja2V0OnRPLGNyZWF0ZUFuaW1hdGlvbjpJYixjcmVhdGVCTEVDb25uZWN0aW9uOllDLGNyZWF0ZUNhbnZhc0NvbnRleHQ6bGIsY3JlYXRlRnVsbFNjcmVlblZpZGVvQWQ6TVAsY3JlYXRlSW5uZXJBdWRpb0NvbnRleHQ6Yk8sY3JlYXRlSW50ZXJhY3RpdmVBZDpVUCxjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcjp2YixjcmVhdGVJbnRlcnN0aXRpYWxBZDpEUCxjcmVhdGVMaXZlUHVzaGVyQ29udGV4dDp4TyxjcmVhdGVNYXBDb250ZXh0OkdfLGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlcjpfYixjcmVhdGVQdXNoTWVzc2FnZTpuUCxjcmVhdGVSZXdhcmRlZFZpZGVvQWQ6eFAsY3JlYXRlU2VsZWN0b3JRdWVyeTpDYixjcmVhdGVWaWRlb0NvbnRleHQ6el8sZG93bmxvYWRGaWxlOkdBLGdldEFwcEF1dGhvcml6ZVNldHRpbmc6YWcsZ2V0QXBwQmFzZUluZm86V2gsZ2V0QkxFRGV2aWNlQ2hhcmFjdGVyaXN0aWNzOlpDLGdldEJMRURldmljZVJTU0k6bkEsZ2V0QkxFRGV2aWNlU2VydmljZXM6SkMsZ2V0QmFja2dyb3VuZEF1ZGlvTWFuYWdlcjpJTyxnZXRCZWFjb25zOm9BLGdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZTpqQyxnZXRCbHVldG9vdGhEZXZpY2VzOkdDLGdldENoYW5uZWxNYW5hZ2VyOnJQLGdldENoZWNrQm94U3RhdGU6TGcsZ2V0Q2xpcGJvYXJkRGF0YTpkQSxnZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzOnFDLGdldERldmljZUluZm86emgsZ2V0RW50ZXJPcHRpb25zU3luYzpYYixnZXRGaWxlSW5mbzphQyxnZXRJbWFnZUluZm86VEEsZ2V0TGF1bmNoT3B0aW9uc1N5bmM6UWIsZ2V0TG9jYWxlOkh1LGdldExvY2F0aW9uOkRPLGdldE5ldHdvcmtUeXBlOmVnLGdldFByb3ZpZGVyOkpULGdldFB1c2hDbGllbnRJZDpleSxnZXRSZWNvcmRlck1hbmFnZXI6eEEsZ2V0U2F2ZWRGaWxlSW5mbzpoQyxnZXRTYXZlZEZpbGVMaXN0OnBDLGdldFNjcmVlbkJyaWdodG5lc3M6U0EsZ2V0U2VsZWN0ZWRUZXh0UmFuZ2U6VWIsZ2V0U3RvcmFnZTplQyxnZXRTdG9yYWdlSW5mbzpvQyxnZXRTdG9yYWdlSW5mb1N5bmM6UmgsZ2V0U3RvcmFnZVN5bmM6UXcsZ2V0U3ViTlZ1ZUJ5SWQ6R1QsZ2V0U3lzdGVtSW5mbzpJQyxnZXRTeXN0ZW1JbmZvU3luYzpHaCxnZXRTeXN0ZW1TZXR0aW5nOkFBLGdldFVuaXZlcmlmeU1hbmFnZXI6dFAsZ2V0VXNlckluZm86WlQsZ2V0VXNlclByb2ZpbGU6WFQsZ2V0VmlkZW9JbmZvOlBBLGdldFdpbmRvd0luZm86amgsaGlkZUtleWJvYXJkOiRBLGhpZGVMb2FkaW5nOlRULGhpZGVOYXZpZ2F0aW9uQmFyTG9hZGluZzpCVCxoaWRlVGFiQmFyOlVULGhpZGVUYWJCYXJSZWREb3Q6elQsaGlkZVRvYXN0Ok9ULGluaXRVVFNDbGFzc05hbWU6WmcsaW5pdFVUU0luZGV4Q2xhc3NOYW1lOlBQLGluaXRVVFNQYWNrYWdlTmFtZTpUUCxpbml0VVRTUHJveHlDbGFzczpLZyxpbml0VVRTUHJveHlGdW5jdGlvbjpDUCxpbnRlcmNlcHRvcnM6U18saW52b2tlUHVzaENhbGxiYWNrOkVkLGxvYWRGb250RmFjZTpJVCxsb2dpbjprZyxtYWtlUGhvbmVDYWxsOmxBLG5hdmlnYXRlQmFjazpDTixuYXZpZ2F0ZVRvOlROLG5hdmlnYXRlVG9NaW5pUHJvZ3JhbTp1UCxub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlOlhDLG9mZkFjY2VsZXJvbWV0ZXJDaGFuZ2U6TEMsb2ZmQXBwSGlkZTpaYixvZmZBcHBTaG93OktiLG9mZkNvbXBhc3NDaGFuZ2U6UkMsb2ZmRXJyb3I6cWIsb2ZmS2V5Ym9hcmRIZWlnaHRDaGFuZ2U6ekEsb2ZmTG9jYXRpb25DaGFuZ2U6X1Qsb2ZmTG9jYXRpb25DaGFuZ2VFcnJvcjp5VCxvZmZOZXR3b3JrU3RhdHVzQ2hhbmdlOmdBLG9mZlBhZ2VOb3RGb3VuZDpXYixvZmZQdXNoTWVzc2FnZTpueSxvZmZUaGVtZUNoYW5nZTpFQSxvZmZVbmhhbmRsZWRSZWplY3Rpb246amIsb2ZmV2luZG93UmVzaXplOk1iLG9uQWNjZWxlcm9tZXRlckNoYW5nZTpNQyxvbkFwcEhpZGU6SmIsb25BcHBTaG93OlliLG9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZTpVQyxvbkJMRUNvbm5lY3Rpb25TdGF0ZUNoYW5nZTpWQyxvbkJlYWNvblNlcnZpY2VDaGFuZ2U6aUEsb25CZWFjb25VcGRhdGU6ckEsb25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2U6RkMsb25CbHVldG9vdGhEZXZpY2VGb3VuZDpEQyxvbkNvbXBhc3NDaGFuZ2U6a0Msb25DcmVhdGVWdWVBcHA6c2Uub25DcmVhdGVWdWVBcHAsb25FcnJvcjpHYixvbkhvc3RFdmVudFJlY2VpdmU6SGcsb25LZXlib2FyZEhlaWdodENoYW5nZTpqQSxvbkxvY2FsZUNoYW5nZTpEYixvbkxvY2F0aW9uQ2hhbmdlOm1ULG9uTG9jYXRpb25DaGFuZ2VFcnJvcjpiVCxvbk5hdGl2ZUV2ZW50UmVjZWl2ZTpmUCxvbk5ldHdvcmtTdGF0dXNDaGFuZ2U6aEEsb25QYWdlTm90Rm91bmQ6emIsb25QdXNoTWVzc2FnZTp0eSxvblNvY2tldENsb3NlOnNPLG9uU29ja2V0RXJyb3I6b08sb25Tb2NrZXRNZXNzYWdlOmFPLG9uU29ja2V0T3BlbjppTyxvblRhYkJhck1pZEJ1dHRvblRhcDprYixvblRoZW1lQ2hhbmdlOnlBLG9uVW5oYW5kbGVkUmVqZWN0aW9uOiRiLG9uV2luZG93UmVzaXplOkJiLG9wZW5BcHBBdXRob3JpemVTZXR0aW5nOk9BLG9wZW5CbHVldG9vdGhBZGFwdGVyOkhDLG9wZW5Eb2N1bWVudDp2QyxvcGVuTG9jYXRpb246aFQscGFnZVNjcm9sbFRvOmtULHByZUxvZ2luOnhnLHByZWxvYWRQYWdlOkZOLHByZXZpZXdJbWFnZTpOQSxyZUxhdW5jaDpCTixyZWFkQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZTpRQyxyZWRpcmVjdFRvOklOLHJlZ2lzdGVyUnVudGltZTppUCxyZWdpc3RlclVUU0ludGVyZmFjZTpOUCxyZWdpc3RlclVUU1BsdWdpbjpJUCxyZW1vdmVJbnRlcmNlcHRvcjpFXyxyZW1vdmVTYXZlZEZpbGU6Z0MscmVtb3ZlU3RvcmFnZTpuQyxyZW1vdmVTdG9yYWdlU3luYzp0QyxyZW1vdmVUYWJCYXJCYWRnZTpqVCxyZXF1ZXN0OkpBLHJlcXVlc3RQYXltZW50OmNQLHJlcXVpcmVHbG9iYWw6WVQscmVxdWlyZU5hdGl2ZVBsdWdpbjpGYSxyZXF1aXJlVVRTUGx1Z2luOmtQLHJlc3RvcmVHbG9iYWw6cVQsc2F2ZUZpbGU6dUMsc2F2ZUltYWdlVG9QaG90b3NBbGJ1bTpNQSxzYXZlVmlkZW9Ub1Bob3Rvc0FsYnVtOkJBLHNjYW5Db2RlOmJBLHNlbmRIb3N0RXZlbnQ6Vmcsc2VuZE5hdGl2ZUV2ZW50OlpoLHNlbmRTb2NrZXRNZXNzYWdlOm5PLHNldEJMRU1UVTp0QSxzZXRDbGlwYm9hcmREYXRhOnBBLHNldEtlZXBTY3JlZW5PbjpDQSxzZXRMb2NhbGU6RmIsc2V0TmF2aWdhdGlvbkJhckNvbG9yOkxULHNldE5hdmlnYXRpb25CYXJUaXRsZTpSVCxzZXRQYWdlTWV0YTpWYixzZXRTY3JlZW5CcmlnaHRuZXNzOndBLHNldFN0b3JhZ2U6WHcsc2V0U3RvcmFnZVN5bmM6Wncsc2V0VGFiQmFyQmFkZ2U6RFQsc2V0VGFiQmFySXRlbTpGVCxzZXRUYWJCYXJTdHlsZTpWVCxzaGFyZTpzUCxzaGFyZVdpdGhTeXN0ZW06bFAsc2hvd0FjdGlvblNoZWV0OndULHNob3dLZXlib2FyZDpIQSxzaG93TG9hZGluZzpDVCxzaG93TW9kYWw6RVQsc2hvd05hdmlnYXRpb25CYXJMb2FkaW5nOnhULHNob3dUYWJCYXI6SFQsc2hvd1RhYkJhclJlZERvdDokVCxzaG93VG9hc3Q6QVQsc3RhcnRBY2NlbGVyb21ldGVyOktoLHN0YXJ0QmVhY29uRGlzY292ZXJ5OmFBLHN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeTp6QyxzdGFydENvbXBhc3M6cWgsc3RhcnRMb2NhdGlvblVwZGF0ZTpnVCxzdGFydFB1bGxEb3duUmVmcmVzaDpQVCxzdGFydFNvdGVyQXV0aGVudGljYXRpb246X0Esc3RvcEFjY2VsZXJvbWV0ZXI6Smgsc3RvcEJlYWNvbkRpc2NvdmVyeTpzQSxzdG9wQmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeTpXQyxzdG9wQ29tcGFzczpZaCxzdG9wTG9jYXRpb25VcGRhdGU6dlQsc3RvcFB1bGxEb3duUmVmcmVzaDpOVCxzdWJzY3JpYmVHZXRMb2NhdGlvbjpiZyxzd2l0Y2hUYWI6TU4sc3luY0RhdGFUb0dsb2JhbDpLVCx1blByZWxvYWRQYWdlOkROLHVwbG9hZEZpbGU6Y08sdXB4MnB4OmhfLHZpYnJhdGVMb25nOkJDLHZpYnJhdGVTaG9ydDp4Qyx3ZWV4R2V0U3lzdGVtSW5mb1N5bmM6WXUsd3JpdGVCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlOmVBfTtsZXQgVU49Wi5leHRlbmQoTWwse3B1Ymxpc2hIYW5kbGVyOkhOfSk7ZnVuY3Rpb24gSE4oZSx0LG4pe3Q9SlNPTi5zdHJpbmdpZnkodCksWi5pc0FycmF5KG4pfHwobj1bbl0pO2xldCByPWB0eXBlb2YgVW5pVmlld0pTQnJpZGdlICE9PSAndW5kZWZpbmVkJyAmJiBVbmlWaWV3SlNCcmlkZ2Uuc3Vic2NyaWJlSGFuZGxlcigiJHtlfSIsJHt0fSxfX1BBR0VfSURfXylgO24uZm9yRWFjaChzPT57bGV0IHU9U3RyaW5nKHMpLHY9Yy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHUpO3YmJnYuZXZhbEpTKHIucmVwbGFjZSgiX19QQUdFX0lEX18iLHUpKX0pfWZ1bmN0aW9uICROKCl7bGV0e3RhYkJhcjplfT1JO2lmKCEoZSYmZS5saXN0JiZlLmxpc3QubGVuZ3RoKSlyZXR1cm47bGV0e2VudHJ5UGFnZVBhdGg6bn09STtlLnNlbGVjdGVkSW5kZXg9MDtsZXQgcj1lLmxpc3QuZmluZEluZGV4KHM9PnMucGFnZVBhdGg9PT1uKTt4aS5pbml0KGUsKHMsdSk9PntPLnN3aXRjaFRhYih7dXJsOnNlLmFkZExlYWRpbmdTbGFzaChzLnBhZ2VQYXRoKSxvcGVuVHlwZToic3dpdGNoVGFiIixmcm9tOiJ0YWJCYXIiLHN1Y2Nlc3MoKXtycihzZS5PTl9UQUJfSVRFTV9UQVAse2luZGV4OnUsdGV4dDpzLnRleHQscGFnZVBhdGg6cy5wYWdlUGF0aH0pfX0pfSksciE9PS0xJiYoZS5zZWxlY3RlZEluZGV4PXIsciE9PTAmJnhpLnN3aXRjaFRhYihuKSl9ZnVuY3Rpb24gak4oKXtsZXQgZT1jLmdsb2JhbEV2ZW50LHQ9Zy5yZXF1aXJlTW9kdWxlKCJnbG9iYWxFdmVudCIpLHtlbWl0Om4scHVibGlzaEhhbmRsZXI6cn09cHQ7Zy5jb25maWcucHJlbG9hZD9jLmtleS5hZGRFdmVudExpc3RlbmVyKEVzLFZpKTplLmFkZEV2ZW50TGlzdGVuZXIoInNwbGFzaGNsb3NlZCIsKCk9PntjLmtleS5hZGRFdmVudExpc3RlbmVyKEVzLFZpKX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigicGF1c2UiLCgpPT57bihzZS5PTl9BUFBfRU5URVJfQkFDS0dST1VORCl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInJlc3VtZSIsKCk9PntsZXQgdT12bigpO3UmJnUudXNlckFjdGlvbiYmSHQodSksbihzZS5PTl9BUFBfRU5URVJfRk9SRUdST1VORCxHZSgpKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidWlzdHlsZWNoYW5nZSIsZnVuY3Rpb24odSl7bGV0IHY9e3RoZW1lOnUudWlzdHlsZX07bihzZS5PTl9USEVNRV9DSEFOR0UsdikscihzZS5PTl9USEVNRV9DSEFOR0Usdix0bygpKSxFQygpfSk7bGV0IHM9MDtlLmFkZEV2ZW50TGlzdGVuZXIoIktleWJvYXJkSGVpZ2h0Q2hhbmdlIixmdW5jdGlvbih1KXtzIT09dS5oZWlnaHQmJihzPXUuaGVpZ2h0LG4oc2UuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSx7aGVpZ2h0OnN9KSl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoelAsZnVuY3Rpb24odSl7dSYmdS5ldmVudCYmZFAodS5ldmVudCx1LmRhdGEpfSksZS5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsU3YpLGUuYWRkRXZlbnRMaXN0ZW5lcigiV2Vidmlld1Bvc3RNZXNzYWdlIixTdil9ZnVuY3Rpb24gU3Yoe2RhdGE6ZX0pe2UmJmUudHlwZSYmcHQuc3Vic2NyaWJlSGFuZGxlcigicGx1c01lc3NhZ2UuIitlLnR5cGUsZS5hcmdzKX1mdW5jdGlvbiB3dihlLHQsbj0hMSl7cHQuc3Vic2NyaWJlKCJwbHVzTWVzc2FnZS4iK2UsdCxuKX1mdW5jdGlvbiB6TihlKXtIYihlLiQpO2xldHtlbnRyeVBhZ2VQYXRoOnQsZW50cnlQYWdlUXVlcnk6bixyZWZlcnJlckluZm86cn09SSxzPUl0KHtwYXRoOnQscXVlcnk6bixyZWZlcnJlckluZm86cn0pO3JyKGUsc2UuT05fTEFVTkNILHMpLHJyKGUsc2UuT05fU0hPVyxzKTtsZXQgdT1nLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5nZXRBcHBTdGF0ZTsodSYmTnVtYmVyKHUoKSkpPT09MiYmcnIoZSxzZS5PTl9ISURFLHMpfWZ1bmN0aW9uIEN2KGUpe3JldHVybiBlPWUucmVwbGFjZSgvXC8kLywiIiksZS5pbmRleE9mKCJfIik9PT0wP2MuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKTplfWZ1bmN0aW9uIFdOKCl7bGV0IGU9Q3YocXMpLHQ9Q3YoYmkpLG49dC5zcGxpdCgiLyIpO24ucG9wKCk7bGV0IHI9bi5qb2luKCIvIik7Yy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGMuaW8uY29udmVydEFic29sdXRlRmlsZVN5c3RlbShyKSxzPT57cy5jcmVhdGVSZWFkZXIoKS5yZWFkRW50cmllcyhmdW5jdGlvbih2KXtsZXQgRT12O0UmJkUubGVuZ3RoJiZFLmZvckVhY2goZnVuY3Rpb24oRil7Ri5pc0RpcmVjdG9yeSYmRi5mdWxsUGF0aC5pbmRleE9mKGUpPT09MCYmRi5mdWxsUGF0aC5pbmRleE9mKHQpIT09MCYmRi5yZW1vdmVSZWN1cnNpdmVseSgpfSl9KX0pfWxldCBBdj0wLHl1PTAsJGY9bnVsbCxNYz1udWxsO2Z1bmN0aW9uIEdOKGUsdCl7aWYoJGY9bnVsbCxNYyYmKHcoTWMpLE1jPW51bGwpLGUudHlwZT09PSJvbkZvY3VzIilpZih5dT4wKWUuZGV0YWlsLmhlaWdodD15dTtlbHNle01jPVIoZnVuY3Rpb24oKXtlLmRldGFpbC5oZWlnaHQ9eXUsdChlKX0sQXYpLCRmPWZ1bmN0aW9uKCl7TWMmJih3KE1jKSxNYz1udWxsKSxlLmRldGFpbC5oZWlnaHQ9eXUsdChlKX07cmV0dXJufXQoZSl9ZnVuY3Rpb24gcU4oKXtBdj1jLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIj8zMDA6NzAwLHB0Lm9uKHNlLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsdD0+e2lmKHl1PXQuaGVpZ2h0LHl1PjApe2xldCBuPSRmOyRmPW51bGwsbiYmbigpfX0pfWZ1bmN0aW9uIFlOKGUsdCxuKXtsZXQgcj10LnR5cGU7cj09PSJvbkZvY3VzInx8cj09PSJvbkJsdXIiP0dOKHQscz0+e24uZmlyZUV2ZW50KGUscyl9KTpuLmZpcmVFdmVudChlLHQpfWZ1bmN0aW9uIEtOKGUsdCl7bGV0IG49VnQocGFyc2VJbnQodCkpO2lmKCFuKXJldHVybjtsZXQgcj1uLl9fcGFnZV9jb250YWluZXJfXztlLmZvckVhY2gocz0+e3N3aXRjaChzWzBdKXtjYXNlIHNlLkFDVElPTl9UWVBFX0VWRU5UOllOKHNbMV0sc1syXSxyKTticmVha319KX1sZXQgT3Y9e307ZnVuY3Rpb24gSk4oZSx0LG4pe2xldHthZHBpZDpyLHdpZHRoOnN9PWUsdT1yKyItIitzLHY9T3ZbdV07aWYodiYmdi5sZW5ndGg+MCl7dCh2LnNwbGljZSgwLDEpWzBdKTtyZXR1cm59Yy5hZC5nZXRBZHMoZSxFPT57bGV0IEY9RS5hZHM7dChGLnNwbGljZSgwLDEpWzBdKSxPdlt1XT12P3YuY29uY2F0KEYpOkZ9LEU9PntuKHtlcnJDb2RlOkUuY29kZSxlcnJNc2c6RS5tZXNzYWdlfSl9KX1mdW5jdGlvbiBaTigpe3dvKCJnZXRBZERhdGEiLChlLHQpPT57Sk4oZSxuPT57dCh7Y29kZTowLGRhdGE6bn0pfSxuPT57dCh7Y29kZToxLG1lc3NhZ2U6bn0pfSl9KX1sZXQgWE49WyJzd2l0Y2hUYWIiLCJyZUxhdW5jaCIsInJlZGlyZWN0VG8iLCJuYXZpZ2F0ZVRvIiwibmF2aWdhdGVCYWNrIl07ZnVuY3Rpb24gUU4oKXtYTi5mb3JFYWNoKGU9Pnt3byhlLHQ9PntPW2VdKFouZXh0ZW5kKHQse2ZhaWwobil7Y29uc29sZS5lcnJvcihuLmVyck1zZyl9fSkpfSl9KX1sZXQgVHY9ITE7ZnVuY3Rpb24gZUkoZSx0KXtsZXQgbj10PT09IjEiO2lmKCEobiYmVHYpKXtpZihuPyhUdj0hMCxsdihjLndlYnZpZXcuZ2V0TGF1bmNoV2VidmlldygpKSk6dW98fGx2KGMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh0KSksIXVvLmxvYWRlZCl7aWYodW8uaWQhPT10KXJldHVybiBjb25zb2xlLmVycm9yKGB3ZWJ2aWV3UmVhZHlbJHt1by5pZH1dWyR7dH1dIG5vdCBtYXRjaGApO3VvLmxvYWRlZD0hMH1wdC5lbWl0KGJ1KyIuIit0KSxuJiZ0SSgpfX1mdW5jdGlvbiB0SSgpe2xldHthdXRvY2xvc2U6ZSxhbHdheXNTaG93QmVmb3JlUmVuZGVyOnR9PUkuc3BsYXNoc2NyZWVuO2UmJiF0JiZjLm5hdmlnYXRvci5jbG9zZVNwbGFzaHNjcmVlbigpO2xldCBuPXNlLmFkZExlYWRpbmdTbGFzaChJLmVudHJ5UGFnZVBhdGgpLHI9VGkobik7aWYoIXIubWV0YS5pc05WdWUpe2xldCBzPXt1cmw6bisoSS5lbnRyeVBhZ2VRdWVyeXx8IiIpLG9wZW5UeXBlOiJhcHBMYXVuY2gifSx1PXtyZXNvbHZlKCl7fSxyZWplY3QoKXt9fTtyZXR1cm4gci5tZXRhLmlzVGFiQmFyP0V2KHMsdSk6eXYocyx1KX19ZnVuY3Rpb24gbkkoZSx0KXtsZXQgbj1WdChwYXJzZUludCh0KSk7biYmKG4uX191bmlhcHBfd2Vidmlldz0hMCl9ZnVuY3Rpb24gckkoZSx0KXtsZXQgbj1WdChwYXJzZUludCh0KSk7biYmZGVsZXRlIG4uX191bmlhcHBfd2Vidmlld31sZXQgaUk9KHtuYW1lOmUsYXJnOnR9LG4pPT57ZT09PSJwb3N0TWVzc2FnZSI/b0koblswXSx0KTpPW2VdKFouZXh0ZW5kKHQse2ZhaWwocil7Y29uc29sZS5lcnJvcihyLmVyck1zZyl9fSkpfTtmdW5jdGlvbiBvSShlLHQpe2xldCBuPXpPKCJ3ZWItdmlldyIscGFyc2VJbnQoZSkpO24mJm4uZGlzcGF0Y2hFdmVudChzZS5jcmVhdGVVbmlFdmVudCh7dHlwZToib25NZXNzYWdlIix0YXJnZXQ6T2JqZWN0LmNyZWF0ZShudWxsKSxjdXJyZW50VGFyZ2V0Ok9iamVjdC5jcmVhdGUobnVsbCksZGV0YWlsOntkYXRhOlt0XX19KSl9ZnVuY3Rpb24gYUkoe25vZGVJZDplLG93bmVySWQ6dCxtZXRob2Q6bixhcmdzOnJ9LHMpe2xldCB1PUVnKGUscGFyc2VJbnQocykpO2lmKCF1KXJldHVybjtsZXQgdj1zSSh0LHUuX192dWVQYXJlbnRDb21wb25lbnQpOyF2fHwhdltuXXx8dltuXShyKX1mdW5jdGlvbiBzSShlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQudWlkPT09ZSlyZXR1cm4gdC5wcm94eTtsZXQgbj10LnBhcmVudDtmb3IoO247KXtpZihuLnVpZD09PWUpcmV0dXJuIG4ucHJveHk7bj1uLnBhcmVudH1yZXR1cm4gdC5wcm94eX1mdW5jdGlvbiBsSSgpe2xldHtzdWJzY3JpYmU6ZSxzdWJzY3JpYmVIYW5kbGVyOnQscHVibGlzaEhhbmRsZXI6bn09cHQ7aWYod3YoInN1YnNjcmliZUhhbmRsZXIiLCh7dHlwZTpyLGRhdGE6cyxwYWdlSWQ6dX0pPT57dChyLHMsdSl9KSx3dihzZS5XRUJfSU5WT0tFX0FQUFNFUlZJQ0UsKHtkYXRhOnIsd2Vidmlld0lkczpzfSk9PntpSShyLHMpfSksSS5yZW5kZXJlciE9PSJuYXRpdmUiKXtlKGJ1LGVJKSxlKHlnLEtOKSxTbygpLFpOKCksUU4oKSxlKFVPLG5JKSxlKEhPLHJJKSxlKHNlLk9OX1dYU19JTlZPS0VfQ0FMTF9NRVRIT0QsYUkpO2xldCByPVRpKHNlLmFkZExlYWRpbmdTbGFzaChJLmVudHJ5UGFnZVBhdGgpKTtyJiYhci5tZXRhLmlzTlZ1ZSYmbihidSx7fSwxKSxiZygpLGFUKCl9fWxldCBFdSxZZD17Z2xvYmFsRGF0YTp7fX07ZnVuY3Rpb24gY0koe2FsbG93RGVmYXVsdDplPSExfT17fSl7aWYoRXUpcmV0dXJuIEV1O2lmKGUpcmV0dXJuIFlkO2NvbnNvbGUuZXJyb3IoIlt3YXJuXTogZ2V0QXBwKCkgZmFpbGVkLiBMZWFybiBtb3JlOiBodHRwczovL3VuaWFwcC5kY2xvdWQuaW8vY29sbG9jYXRpb24vZnJhbWUvd2luZG93P2lkPWdldGFwcC4iKX1mdW5jdGlvbiB1SShlKXtpZihPLlZ1ZXgmJmUuJHN0b3JlKXtsZXR7dXNlU3RvcmU6dH09Ty5WdWV4O08uVnVleC51c2VTdG9yZT1uPT5uP3Qobik6ZS4kc3RvcmV9UHQoZSksRXU9ZSx3ZShFdSksWi5leHRlbmQoRXUsWWQpLEVlKEV1LFlkLmdsb2JhbERhdGEpLGdlKCksdXYoKSwkTigpLGpOKCkscU4oKSxsSSgpLHpOKGUpLFIoV04sMWU0KSxJLnJlYWR5PSEwfXZhciBmST17dW5pOlZOLGdldEFwcDpjSSxnZXRDdXJyZW50UGFnZXM6UG4sX19kZWZpbmVQYWdlOkhkLF9fcmVnaXN0ZXJBcHA6dUksX19yZWdpc3RlclBhZ2U6dGYsVW5pU2VydmljZUpTQnJpZGdlOlVOfTtyZXR1cm4gZkl9KGF0LEV0LEEpO2NlPWNlLmRlZmF1bHR8fGNlO2xldCBPPWNlLnVuaSxUdD1jZS5nZXRBcHAsdnI9Y2UuZ2V0Q3VycmVudFBhZ2VzLHB0PWNlLlVuaVNlcnZpY2VKU0JyaWRnZTtyZXR1cm4gY2V9dmFyIFNtPVprKGUxKTt2YXIgYWQ7ZnVuY3Rpb24gd20oZyl7YWQ9Zy5nZXRMb2NhdGlvbn1mdW5jdGlvbiBDbShnKXt0MShnKX1mdW5jdGlvbiB0MShnKXtsZXQgYz1nLmdldExvY2F0aW9uO2MhPT1hZCYmKGcuZ2V0TG9jYXRpb249ZnVuY3Rpb24oXyl7aWYoXy50eXBlJiZfLnR5cGU9PT0iZ2NqMDIiKXRyeXtyZXR1cm4gYyhfKX1jYXRjaChBKXtyZXR1cm4gZy5nZXRMb2NhdGlvbj1hZCxnLmdldExvY2F0aW9uKF8pfWVsc2UgcmV0dXJuIGFkKF8pfSl9ZnVuY3Rpb24gQW0oZyl7d20oZyl9ZnVuY3Rpb24gT20oZyl7Q20oZyl9dmFyIFRtPWc9PntsZXR7cmVnaXN0ZXJVVFNJbnRlcmZhY2U6Yyxpbml0VVRTUHJveHlDbGFzczpfLGluaXRVVFNQcm94eUZ1bmN0aW9uOkEsaW5pdFVUU1BhY2thZ2VOYW1lOlIsaW5pdFVUU0luZGV4Q2xhc3NOYW1lOncsaW5pdFVUU0NsYXNzTmFtZTpkfT1nLG09IkRDbG91ZFVuaUNob29zZU1lZGlhIixJPSJ1bmktY2hvb3NlTWVkaWEiLE9lPSJidWlsdC1pbiIsYXQ9IiIsRXQ9ITAsY2U9UihtLEV0KSxPPXcobSxFdCk7Zy5jaG9vc2VNZWRpYT1BKCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpPZSxlcnJNc2c6YXQsbWFpbjohMCxwYWNrYWdlOmNlLGNsYXNzOk8sbmFtZToiY2hvb3NlTWVkaWFCeUpzIixrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUNob29zZU1lZGlhQ2hvb3NlTWVkaWFPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46IiJ9KX07dmFyIFBtPWc9PntsZXR7cmVnaXN0ZXJVVFNJbnRlcmZhY2U6Yyxpbml0VVRTUHJveHlDbGFzczpfLGluaXRVVFNQcm94eUZ1bmN0aW9uOkEsaW5pdFVUU1BhY2thZ2VOYW1lOlIsaW5pdFVUU0luZGV4Q2xhc3NOYW1lOncsaW5pdFVUU0NsYXNzTmFtZTpkfT1nLG09IkRDbG91ZFVuaUNyZWF0ZVJlcXVlc3RQZXJtaXNzaW9uTGlzdGVuZXIiLEk9InVuaS1jcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyIixPZT0iYnVpbHQtaW4iLGF0PSIiLEV0PSEwLGNlPVIobSxFdCksTz13KG0sRXQpO2MoIlJlcXVlc3RQZXJtaXNzaW9uTGlzdGVuZXJPcHRpb25zIixPYmplY3QuYXNzaWduKHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpPZSxlcnJNc2c6YXQscGFja2FnZTpjZSxjbGFzczpkKG0sIlJlcXVlc3RQZXJtaXNzaW9uTGlzdGVuZXJCeUpzUHJveHkiLEV0KX0se21ldGhvZHM6e29uUmVxdWVzdEJ5SnM6e2FzeW5jOiExLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJjYWxsYmFjayIsdHlwZToiVVRTQ2FsbGJhY2sifV19LG9uQ29uZmlybUJ5SnM6e2FzeW5jOiExLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJjYWxsYmFjayIsdHlwZToiVVRTQ2FsbGJhY2sifV19LG9uQ29tcGxldGVCeUpzOnthc3luYzohMSxrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToiY2FsbGJhY2siLHR5cGU6IlVUU0NhbGxiYWNrIn1dfSxzdG9wQnlKczp7YXN5bmM6ITEsa2VlcEFsaXZlOiExLHBhcmFtczpbXX19LHByb3BzOltdLHNldHRlcnM6e319KSksZy5jcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyPUEoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOk9lLGVyck1zZzphdCxtYWluOiEwLHBhY2thZ2U6Y2UsY2xhc3M6TyxuYW1lOiJjcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbXSxyZXR1cm46e3R5cGU6ImludGVyZmFjZSIsb3B0aW9uczoiUmVxdWVzdFBlcm1pc3Npb25MaXN0ZW5lck9wdGlvbnMifX0pfTt2YXIgTm09Zz0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpjLGluaXRVVFNQcm94eUNsYXNzOl8saW5pdFVUU1Byb3h5RnVuY3Rpb246QSxpbml0VVRTUGFja2FnZU5hbWU6Uixpbml0VVRTSW5kZXhDbGFzc05hbWU6dyxpbml0VVRTQ2xhc3NOYW1lOmR9PWcsbT0iRENsb3VkVW5pRXhpdCIsST0idW5pLWV4aXQiLE9lPSJidWlsdC1pbiIsYXQ9IiIsRXQ9ITAsY2U9UihtLEV0KSxPPXcobSxFdCk7Zy5leGl0PUEoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOk9lLGVyck1zZzphdCxtYWluOiEwLHBhY2thZ2U6Y2UsY2xhc3M6TyxuYW1lOiJleGl0QnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlFeGl0RXhpdE9wdGlvbnNKU09OT2JqZWN0IixkZWZhdWx0OiJVVFNOdWxsIn1dLHJldHVybjoiIn0pfTt2YXIgSW09Zz0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpjLGluaXRVVFNQcm94eUNsYXNzOl8saW5pdFVUU1Byb3h5RnVuY3Rpb246QSxpbml0VVRTUGFja2FnZU5hbWU6Uixpbml0VVRTSW5kZXhDbGFzc05hbWU6dyxpbml0VVRTQ2xhc3NOYW1lOmR9PWcsbT0iRENsb3VkVW5pRmFjaWFsVmVyaWZ5IixJPSJGYWNpYWxSZWNvZ25pdGlvblZlcmlmeShcdTVCOUVcdTRFQkFcdThCQTRcdThCQzEpIixPZT0iYnVpbHQtaW4iLGF0PSIiLEV0PSEwLGNlPVIobSxFdCksTz13KG0sRXQpO2cuc3RhcnRGYWNpYWxSZWNvZ25pdGlvblZlcmlmeT1BKCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpPZSxlcnJNc2c6YXQsbWFpbjohMCxwYWNrYWdlOmNlLGNsYXNzOk8sbmFtZToic3RhcnRGYWNpYWxSZWNvZ25pdGlvblZlcmlmeUJ5SnMiLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJmYWNlU3R5bGUiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlGYWNpYWxWZXJpZnlTdGFydEZhY2lhbFJlY29nbml0aW9uVmVyaWZ5T3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOiIifSksZy5nZXRGYWNpYWxSZWNvZ25pdGlvbk1ldGFJbmZvPUEoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOk9lLGVyck1zZzphdCxtYWluOiEwLHBhY2thZ2U6Y2UsY2xhc3M6TyxuYW1lOiJnZXRGYWNpYWxSZWNvZ25pdGlvbk1ldGFJbmZvQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbXSxyZXR1cm46IiJ9KX07dmFyIGttPWc9PntsZXR7cmVnaXN0ZXJVVFNJbnRlcmZhY2U6Yyxpbml0VVRTUHJveHlDbGFzczpfLGluaXRVVFNQcm94eUZ1bmN0aW9uOkEsaW5pdFVUU1BhY2thZ2VOYW1lOlIsaW5pdFVUU0luZGV4Q2xhc3NOYW1lOncsaW5pdFVUU0NsYXNzTmFtZTpkfT1nLG09IkRDbG91ZFVuaUdldExvY2F0aW9uVGVuY2VudFVuaTEiLEk9InVuaS1nZXRMb2NhdGlvbi10ZW5jZW50LXVuaTEiLE9lPSJidWlsdC1pbiIsYXQ9IiIsRXQ9ITAsY2U9UihtLEV0KSxPPXcobSxFdCk7Zy5nZXRMb2NhdGlvbj1BKCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpPZSxlcnJNc2c6YXQsbWFpbjohMCxwYWNrYWdlOmNlLGNsYXNzOk8sbmFtZToiZ2V0TG9jYXRpb25CeUpzIixrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUdldExvY2F0aW9uVGVuY2VudFVuaTFHZXRMb2NhdGlvbk9wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjoiIn0pfTt2YXIgUm09Zz0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpjLGluaXRVVFNQcm94eUNsYXNzOl8saW5pdFVUU1Byb3h5RnVuY3Rpb246QSxpbml0VVRTUGFja2FnZU5hbWU6Uixpbml0VVRTSW5kZXhDbGFzc05hbWU6dyxpbml0VVRTQ2xhc3NOYW1lOmR9PWcsbT0iRENsb3VkVW5pSW5zdGFsbEFwayIsST0idW5pLWluc3RhbGxBcGsiLE9lPSJidWlsdC1pbiIsYXQ9IiIsRXQ9ITAsY2U9UihtLEV0KSxPPXcobSxFdCk7Zy5pbnN0YWxsQXBrPUEoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOk9lLGVyck1zZzphdCxtYWluOiEwLHBhY2thZ2U6Y2UsY2xhc3M6TyxuYW1lOiJpbnN0YWxsQXBrQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlJbnN0YWxsQXBrSW5zdGFsbEFwa09wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjoiIn0pfTt2YXIgeG09Zz0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpjLGluaXRVVFNQcm94eUNsYXNzOl8saW5pdFVUU1Byb3h5RnVuY3Rpb246QSxpbml0VVRTUGFja2FnZU5hbWU6Uixpbml0VVRTSW5kZXhDbGFzc05hbWU6dyxpbml0VVRTQ2xhc3NOYW1lOmR9PWcsbT0iRENsb3VkVW5pUHJpdmFjeSIsST0idW5pLXByaXZhY3kiLE9lPSJidWlsdC1pbiIsYXQ9IiIsRXQ9ITAsY2U9UihtLEV0KSxPPXcobSxFdCk7Zy5nZXRQcml2YWN5U2V0dGluZz1BKCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpPZSxlcnJNc2c6YXQsbWFpbjohMCxwYWNrYWdlOmNlLGNsYXNzOk8sbmFtZToiZ2V0UHJpdmFjeVNldHRpbmdCeUpzIixrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaVByaXZhY3lHZXRQcml2YWN5U2V0dGluZ09wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjoiIn0pLGcucmVzZXRQcml2YWN5QXV0aG9yaXphdGlvbj1BKCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpPZSxlcnJNc2c6YXQsbWFpbjohMCxwYWNrYWdlOmNlLGNsYXNzOk8sbmFtZToicmVzZXRQcml2YWN5QXV0aG9yaXphdGlvbkJ5SnMiLGtlZXBBbGl2ZTohMSxwYXJhbXM6W10scmV0dXJuOiIifSksZy5vblByaXZhY3lBdXRob3JpemF0aW9uQ2hhbmdlPUEoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOk9lLGVyck1zZzphdCxtYWluOiEwLHBhY2thZ2U6Y2UsY2xhc3M6TyxuYW1lOiJvblByaXZhY3lBdXRob3JpemF0aW9uQ2hhbmdlQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbe25hbWU6ImNhbGxiYWNrIix0eXBlOiJVVFNDYWxsYmFjayJ9XSxyZXR1cm46IiJ9KSxnLm9mZlByaXZhY3lBdXRob3JpemF0aW9uQ2hhbmdlPUEoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOk9lLGVyck1zZzphdCxtYWluOiEwLHBhY2thZ2U6Y2UsY2xhc3M6TyxuYW1lOiJvZmZQcml2YWN5QXV0aG9yaXphdGlvbkNoYW5nZUJ5SnMiLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJpZCIsdHlwZToibnVtYmVyIn1dLHJldHVybjoiIn0pfTt2YXIgQm09Zz0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpjLGluaXRVVFNQcm94eUNsYXNzOl8saW5pdFVUU1Byb3h5RnVuY3Rpb246QSxpbml0VVRTUGFja2FnZU5hbWU6Uixpbml0VVRTSW5kZXhDbGFzc05hbWU6dyxpbml0VVRTQ2xhc3NOYW1lOmR9PWcsbT0iRENsb3VkVW5pVGhlbWUiLEk9InVuaS10aGVtZSIsT2U9ImJ1aWx0LWluIixhdD0iIixFdD0hMCxjZT1SKG0sRXQpLE89dyhtLEV0KX07ZnVuY3Rpb24gTW0oZyl7QW0oZyksVG0oZyksUG0oZyksTm0oZyksSW0oZyksa20oZyksUm0oZykseG0oZyksQm0oZyksT20oZyl9dmFyIHZwLG1wLF9wLHBsLGJwLHlwLEVwO2Z1bmN0aW9uIExtKCl7cmV0dXJuIHBsP3tfX2RlZmluZVBhZ2U6dnAsX19yZWdpc3RlckFwcDptcCxfX3JlZ2lzdGVyUGFnZTpfcCx1bmk6cGwsd3g6cGwsZ2V0QXBwOmJwLGdldEN1cnJlbnRQYWdlczp5cCxVbmlTZXJ2aWNlSlNCcmlkZ2U6RXB9Ont9fWZ1bmN0aW9uIERtKGcpe2xldHt3ZWV4OmMscGx1czpfLFZ1ZVNoYXJlZDpBfT1nO3JldHVybiBwbHx8KHtfX2RlZmluZVBhZ2U6dnAsX19yZWdpc3RlckFwcDptcCxfX3JlZ2lzdGVyUGFnZTpfcCx1bmk6cGwsZ2V0QXBwOmJwLGdldEN1cnJlbnRQYWdlczp5cCxVbmlTZXJ2aWNlSlNCcmlkZ2U6RXB9PUVtKGMsXyxnKSxwbC5WdWVTaGFyZWQ9QSxNbShwbCksTXYocGwpKSx7X19kZWZpbmVQYWdlOnZwLF9fcmVnaXN0ZXJBcHA6bXAsX19yZWdpc3RlclBhZ2U6X3AscGx1czpfLHVuaTpwbCx3eDpwbCxnZXRBcHA6YnAsZ2V0Q3VycmVudFBhZ2VzOnlwLFVuaVNlcnZpY2VKU0JyaWRnZTpFcH19ZnVuY3Rpb24gRm0oZyxjKXtsZXR7X191bmlDb25maWc6X309YztpZighXylyZXR1cm47bGV0IEE9Yy53ZWV4O0EuZG9jdW1lbnQuX18kYXV0b21hdG9yX189ISFfLmF1dG9tYXRvcjtsZXQgUj1fLnJlbmRlcmVyIT09Im5hdGl2ZSImJkEuY29uZmlnLmJ1bmRsZVVybC5pbmRleE9mKCJhcHAtc2VydmljZS5qcyIpIT09LTE7aWYoZm8oYyxMbSgpKSxSP1NtKGMpOihWdihnLGMpLGhtKGMuVnVlLnBhcnNlQ2xhc3NTdHlsZXMpKSxmbyhjLERtKGMpKSxBLmNvbmZpZy5wbHVzX3dlYl9pZD09PSIxIil7bGV0IEk9QS5yZXF1aXJlTW9kdWxlKCJwbHVzIik7SS5zZXREZWZhdWx0Rm9udFNpemUmJkkuc2V0RGVmYXVsdEZvbnRTaXplKE1hdGgucm91bmQoYy5wbHVzLnNjcmVlbi5yZXNvbHV0aW9uV2lkdGgvMjApKX1sZXR7c2NhbGU6dyxkZXZpY2VXaWR0aDpkLHBsYXRmb3JtOm19PWdsb2JhbC5XWEVudmlyb25tZW50O2lmKG0udG9Mb3dlckNhc2UoKT09PSJpb3MiKXtsZXQgST1NYXRoLmNlaWwoZC93KTtBLnJlcXVpcmVNb2R1bGUoIm1ldGEiKS5zZXRWaWV3cG9ydCh7d2lkdGg6SSxyb3VuZE9mZkRldmlhdGlvbjohMX0pfX12YXIgSGM9Y2xhc3MgZXh0ZW5kcyBVY3tjb25zdHJ1Y3RvcihjKXtzdXBlcigpO3RoaXMubm9kZVR5cGU9ODt0aGlzLnR5cGU9ImNvbW1lbnQiO3RoaXMudmFsdWU9IiI7dGhpcy52YWx1ZT1jfXRvU3RyaW5nKCl7cmV0dXJuIjwhLS0gIit0aGlzLnZhbHVlKyIgLS0+In19O2Z1bmN0aW9uIHdhKGcsYz1bXSl7cmV0dXJue21vZHVsZToiZG9tIixtZXRob2Q6ZyxhcmdzOmN9fXZhciBUdT1jbGFzc3tjb25zdHJ1Y3RvcihjLF8pe3RoaXMuaWQ9Yyx0aGlzLmJhdGNoZWQ9ITEsdGhpcy51cGRhdGVzPVtdLFFuKF8pP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJoYW5kbGVyIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6X30pOmNvbnNvbGUuZXJyb3IoIltKUyBSdW50aW1lXSBpbnZhbGlkIHBhcmFtZXRlciwgaGFuZGxlciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1jcmVhdGVGaW5pc2goYyl7cmV0dXJuIHRoaXMuaGFuZGxlcihbd2EoImNyZWF0ZUZpbmlzaCIpXSxjKX11cGRhdGVGaW5pc2goYyl7cmV0dXJuIHRoaXMuaGFuZGxlcihbd2EoInVwZGF0ZUZpbmlzaCIpXSxjKX1yZWZyZXNoRmluaXNoKGMpe3JldHVybiB0aGlzLmhhbmRsZXIoW3dhKCJyZWZyZXNoRmluaXNoIildLGMpfWNyZWF0ZUJvZHkoYyl7bGV0IF89Yy50b0pTT04oKSxBPV8uY2hpbGRyZW47ZGVsZXRlIF8uY2hpbGRyZW47bGV0IFI9W3dhKCJjcmVhdGVCb2R5IixbX10pXTtyZXR1cm4gQSYmUi5wdXNoLmFwcGx5KFIsQS5tYXAodz0+d2EoImFkZEVsZW1lbnQiLFtfLnJlZix3LC0xXSkpKSx0aGlzLmFkZEFjdGlvbnMoUil9YWRkRWxlbWVudChjLF8sQSl7cmV0dXJuIEE+PTB8fChBPS0xKSx0aGlzLmFkZEFjdGlvbnMod2EoImFkZEVsZW1lbnQiLFtfLGMudG9KU09OKCksQV0pKX1yZW1vdmVFbGVtZW50KGMpe2lmKFlpKGMpKXtsZXQgXz1jLm1hcChBPT53YSgicmVtb3ZlRWxlbWVudCIsW0FdKSk7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhfKX1yZXR1cm4gdGhpcy5hZGRBY3Rpb25zKHdhKCJyZW1vdmVFbGVtZW50IixbY10pKX1tb3ZlRWxlbWVudChjLF8sQSl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyh3YSgibW92ZUVsZW1lbnQiLFtjLF8sQV0pKX1zZXRBdHRyKGMsXyxBKXtyZXR1cm4gdGhpcy5hZGRBY3Rpb25zKHdhKCJ1cGRhdGVBdHRycyIsW2Mse1tfXTpBfV0pKX1zZXRTdHlsZShjLF8sQSl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyh3YSgidXBkYXRlU3R5bGUiLFtjLHtbX106QX1dKSl9c2V0U3R5bGVzKGMsXyl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyh3YSgidXBkYXRlU3R5bGUiLFtjLF9dKSl9YWRkRXZlbnQoYyxfKXtyZXR1cm4gdGhpcy5hZGRBY3Rpb25zKHdhKCJhZGRFdmVudCIsW2MsX10pKX1yZW1vdmVFdmVudChjLF8pe3JldHVybiB0aGlzLmFkZEFjdGlvbnMod2EoInJlbW92ZUV2ZW50IixbYyxfXSkpfWhhbmRsZXIoYyxfKXtyZXR1cm4gXyYmXygpfWFkZEFjdGlvbnMoYyl7bGV0IF89dGhpcy51cGRhdGVzLEE9dGhpcy5oYW5kbGVyO2lmKFlpKGMpfHwoYz1bY10pLHRoaXMuYmF0Y2hlZClfLnB1c2guYXBwbHkoXyxjKTtlbHNlIHJldHVybiBBKGMpfX07dmFyIFNwPXtjcmVhdGVCb2R5OiJjYWxsQ3JlYXRlQm9keSIsYWRkRWxlbWVudDoiY2FsbEFkZEVsZW1lbnQiLHJlbW92ZUVsZW1lbnQ6ImNhbGxSZW1vdmVFbGVtZW50Iixtb3ZlRWxlbWVudDoiY2FsbE1vdmVFbGVtZW50Iix1cGRhdGVBdHRyczoiY2FsbFVwZGF0ZUF0dHJzIix1cGRhdGVTdHlsZToiY2FsbFVwZGF0ZVN0eWxlIixhZGRFdmVudDoiY2FsbEFkZEV2ZW50IixyZW1vdmVFdmVudDoiY2FsbFJlbW92ZUV2ZW50In07ZnVuY3Rpb24gVm0oZyxjKXtsZXQgXz1jfHxnbG9iYWwuY2FsbE5hdGl2ZTtyZXR1cm4gUW4oXyl8fGNvbnNvbGUuZXJyb3IoIltKUyBSdW50aW1lXSBubyBkZWZhdWx0IGhhbmRsZXIiKSxmdW5jdGlvbihSKXtZaShSKXx8KFI9W1JdKTtmb3IobGV0IHc9MDt3PFIubGVuZ3RoO3crKyl7bGV0IGQ9cjEoZyxSW3ddLF8pO2lmKGQ9PT0tMSlyZXR1cm4gZH19fWZ1bmN0aW9uIG4xKGcsYyl7cmV0dXJuIGc9PT0iZG9tIiYmU3BbY10mJlFuKGdsb2JhbFtTcFtjXV0pfWZ1bmN0aW9uIHIxKGcsYyxfKXtsZXR7bW9kdWxlOkEsbWV0aG9kOlIsYXJnczp3fT1jO3JldHVybiBuMShBLFIpP2dsb2JhbFtTcFtSXV0oZywuLi53LCItMSIpOl8oZyxbY10sIi0xIil9dmFyIHNkPWNsYXNzIGV4dGVuZHMga297Y29uc3RydWN0b3IoYyl7c3VwZXIoKTt0aGlzLnZhbHVlPWMsdGhpcy5ub2RlVHlwZT0zLHRoaXMudHlwZT0idGV4dCIsdGhpcy52YWx1ZT0iIn10b1N0cmluZygpe3JldHVybiIiK3RoaXMudmFsdWV9fTt2YXIgVW09e3NsaWRlcjp7Y2hhbmdlOmZ1bmN0aW9uKGcpe3JldHVybntpbmRleDpnLmluZGV4LHNvdXJjZTpnLnNvdXJjZX19LHNjcm9sbDpmdW5jdGlvbihnKXtyZXR1cm57b2Zmc2V0WFJhdGlvOmcub2Zmc2V0WFJhdGlvLG9mZnNldFlSYXRpbzpnLm9mZnNldFlSYXRpbyxkcmFnOmcuZHJhZ319fSwic2Nyb2xsLXZpZXciOntzY3JvbGxlbmQ6ZnVuY3Rpb24oZyl7cmV0dXJue2NvbnRlbnRPZmZzZXQ6Zy5jb250ZW50T2Zmc2V0fX19fTtmdW5jdGlvbiBIbShnKXtsZXR7YXR0cjpjLG9mZnNldExlZnQ6XyxvZmZzZXRUb3A6QX09ZyxSPXt9O3JldHVybiBjJiZPYmplY3Qua2V5cyhjKS5mb3JFYWNoKHc9Pnt3LmluZGV4T2YoImRhdGEtIik9PT0wJiYoUlt3LnJlcGxhY2UoImRhdGEtIiwiIildPWNbd10pfSkse2lkOmMmJmMuaWR8fCIiLGRhdGFzZXQ6UixvZmZzZXRMZWZ0Ol98fDAsb2Zmc2V0VG9wOkF8fDB9fXZhciBpMT1bImEiLCJkaXYiLCJsaXN0IiwiY2VsbCIsImxvYWRpbmciLCJyZWZyZXNoIiwicmVjeWNsZS1saXN0Iiwic2Nyb2xsZXIiLCJpbmRpY2F0b3IiLCJ3YXRlcmZhbGwiLCJ3ZWIiLCJyaWNodGV4dCJdLG8xPVsidmlld2FwcGVhciIsInZpZXdkaXNhcHBlYXIiXSxhMT17bWFya2VydGFwOlsibWFya2VySWQiXSxjb250cm9sdGFwOlsiY29udHJvbElkIl0scmVnaW9uY2hhbmdlOlsiY2F1c2VkQnkiXSxlbmQ6WyJjYXVzZWRCeSJdLGFwcGVhcjpbImRpcmVjdGlvbiJdLGRpc2FwcGVhcjpbImRpcmVjdGlvbiJdfTtmdW5jdGlvbiAkbShnLGMpe2xldCBfPWcudHlwZTtpZihvMS5pbmRleE9mKF8pIT09LTEpcmV0dXJuIGc7bGV0IEE9Zy5jdXJyZW50VGFyZ2V0LFI9QS50eXBlLnJlcGxhY2UoInUtIiwiIik7aWYoaTEuaW5kZXhPZihSKSE9PS0xKXJldHVybiBnO2xldHt0aW1lc3RhbXA6dyx0YXJnZXQ6ZH09ZztpZighYyl7bGV0IE9lPVVtW1JdO09lP1FuKE9lW19dKT9jPU9lW19dKGcpOmM9Zy5kZXRhaWx8fHt9OmM9Zy5kZXRhaWx8fHt9fWxldCBtPXt0eXBlOl8sdGltZVN0YW1wOncsdGFyZ2V0OkhtKGQpLGN1cnJlbnRUYXJnZXQ6SG0oQSksZGV0YWlsOmMsdG91Y2hlczpfPT09InRvdWNoZW5kInx8Xz09PSJwYW5lbmQiP1tdOmcuY2hhbmdlZFRvdWNoZXMsY2hhbmdlZFRvdWNoZXM6Zy5jaGFuZ2VkVG91Y2hlc307Zy5jb21wb25lbnRJZCYmKG0uY29tcG9uZW50SWQ9Zy5jb21wb25lbnRJZCk7bGV0IEk9YTFbX107cmV0dXJuIEkmJkkuZm9yRWFjaChPZT0+e0xjKGcsT2UpJiYobVtPZV09Z1tPZV0pfSksbX1mdW5jdGlvbiBzMShnLGMpe2xldCBfPWMuYXR0cnN8fHt9O2ZvcihsZXQgUiBpbiBfKWcuc2V0QXR0cihSLF9bUl0sITApO2xldCBBPWMuc3R5bGV8fHt9O2ZvcihsZXQgUiBpbiBBKWcuc2V0U3R5bGUoUixBW1JdLCEwKX12YXIgVmE9Y2xhc3N7Y29uc3RydWN0b3IoYyxfPSIiLEEpe2M9Yz9jLnRvU3RyaW5nKCk6IiIsdGhpcy5pZD1jLHRoaXMuVVJMPV8sWnYoYyx0aGlzKSx0aGlzLm5vZGVNYXA9e307bGV0IFI9VmEuTGlzdGVuZXJ8fFR1O3RoaXMubGlzdGVuZXI9bmV3IFIoYyxBfHxWbShjLFZhLmhhbmRsZXIpKSx0aGlzLnRhc2tDZW50ZXI9bmV3IE91KGMsQT8odyxkKT0+QShkKTpWYS5oYW5kbGVyKSx0aGlzLmNyZWF0ZURvY3VtZW50RWxlbWVudCgpfWdldFJlZihjKXtyZXR1cm4gdGhpcy5ub2RlTWFwW2NdfW9wZW4oKXt0aGlzLmxpc3RlbmVyLmJhdGNoZWQ9ITF9Y2xvc2UoKXt0aGlzLmxpc3RlbmVyLmJhdGNoZWQ9ITB9Y3JlYXRlRG9jdW1lbnRFbGVtZW50KCl7aWYoIXRoaXMuZG9jdW1lbnRFbGVtZW50KXtsZXQgYz1uZXcga28oImRvY3VtZW50Iik7Yy5kb2NJZD10aGlzLmlkLGMub3duZXJEb2N1bWVudD10aGlzLGMucm9sZT0iZG9jdW1lbnRFbGVtZW50IixjLnJlZj0iX2RvY3VtZW50RWxlbWVudCIsdGhpcy5ub2RlTWFwLl9kb2N1bWVudEVsZW1lbnQ9Yyx0aGlzLmRvY3VtZW50RWxlbWVudD1jLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJhcHBlbmRDaGlsZCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOl89Pnt0cCh0aGlzLF8pfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJpbnNlcnRCZWZvcmUiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTooXyxBKT0+e3RwKHRoaXMsXyxBKX19KSxncigiZGVidWciKSYmcG8oYENyZWF0ZSBkb2N1bWVudCBlbGVtZW50IChpZDogIiR7Yy5kb2NJZH0iLCByZWY6ICIke2MucmVmfSIpYCl9cmV0dXJuIHRoaXMuZG9jdW1lbnRFbGVtZW50fWNyZWF0ZUJvZHkoYyxfKXtpZighdGhpcy5ib2R5KXtsZXQgQT1uZXcga28oYyxfKTtucCh0aGlzLEEpLGdyKCJkZWJ1ZyIpJiZwbyhgW2NyZWF0ZUJvZHldKCR7dGhpcy5pZH0sJHtBLnR5cGV9LCR7QS5yZWZ9KSAoJHtKU09OLnN0cmluZ2lmeShBLnRvSlNPTighMCkpfSkuYCl9cmV0dXJuIHRoaXMuYm9keX1jcmVhdGVFbGVtZW50KGMsXyl7bGV0IEE9bmV3IGtvKGMsXyk7cmV0dXJuIGdyKCJkZWJ1ZyIpJiZwbyhgW2NyZWF0ZUVsZW1lbnRdKCR7dGhpcy5pZH0sJHtBLnR5cGV9LCR7QS5yZWZ9KSAoJHtKU09OLnN0cmluZ2lmeShBLnRvSlNPTighMCkpfSkuYCksQX1jcmVhdGVDb21tZW50KGMpe3JldHVybiBuZXcgSGMoYyl9Y3JlYXRlVGV4dChjKXtyZXR1cm4gbmV3IHNkKGMpfWZpcmVFdmVudChjLF8sQSxSLHcpe2lmKCFjKXJldHVybjtBPUF8fHt9LEEudHlwZT1BLnR5cGV8fF8sQS50YXJnZXQ9YyxBLmN1cnJlbnRUYXJnZXQ9YyxBLnRpbWVzdGFtcD1EYXRlLm5vdygpLFImJnMxKGMsUik7bGV0IGQ9ITAsbT10aGlzLmdldFJlZigiX3Jvb3QiKTtpZihtJiZtLmF0dHIpe2xldCBJPW0uYXR0ci5idWJibGU7ZD1JPT09InRydWUifHxJPT09ITB8fGQmJkk9PT12b2lkIDB9cmV0dXJuIEE9JG0oQSksYy5maXJlRXZlbnQoXyxBLGQsdyl9ZGVzdHJveSgpe2dyKCJkZWJ1ZyIpJiZwbyhgW2Rlc3Ryb3ldKCR7dGhpcy5pZH0sZG9jdW1lbnQpIERlc3Ryb3kgZG9jdW1lbnQgKGlkOiAiJHt0aGlzLmlkfSIsIFVSTDogIiR7dGhpcy5VUkx9IilgKSx0aGlzLnRhc2tDZW50ZXIuZGVzdHJveUNhbGxiYWNrKCksZGVsZXRlIHRoaXMubGlzdGVuZXIsZGVsZXRlIHRoaXMubm9kZU1hcCxkZWxldGUgdGhpcy50YXNrQ2VudGVyLFh2KHRoaXMuaWQpfX07VmEuaGFuZGxlcj1udWxsO3ZhciBqbT17SW5wdXRFbGVtZW50RGl2OiI8V2hpdGVTcGFjZT58PExpbmVUZXJtaW5hdG9yPnw8UmVzZXJ2ZWRXb3JkPnw8SWRlbnRpZmllcj58PE51bWVyaWNMaXRlcmFsPnw8UHVuY3R1YXRvcj58PFN0cmluZ0xpdGVyYWw+IixJbnB1dEVsZW1lbnRSZWdFeHA6IjxXaGl0ZVNwYWNlPnw8TGluZVRlcm1pbmF0b3I+fDxSZXNlcnZlZFdvcmQ+fDxJZGVudGlmaWVyPnw8TnVtZXJpY0xpdGVyYWw+fDxQdW5jdHVhdG9yPnw8U3RyaW5nTGl0ZXJhbD4iLFJlc2VydmVkV29yZDoiPEtleXdvcmQ+fDxOdWxsTGl0ZXJhbD58PEJvb2xlYW5MaXRlcmFsPiIsV2hpdGVTcGFjZTovW1x0XHZcZlx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMEFcdTIwMkZcdTIwNWZcdTMwMDBcdUZFRkZdLyxMaW5lVGVybWluYXRvcjovW1xuXHJcdTIwMjhcdTIwMjldLyxLZXl3b3JkOi9uZXcoPyFbXyRhLXpBLVowLTldKXx2b2lkKD8hW18kYS16QS1aMC05XSl8ZGVsZXRlKD8hW18kYS16QS1aMC05XSl8aW4oPyFbXyRhLXpBLVowLTldKXxpbnN0YW5jZW9mKD8hW18kYS16QS1aMC05XSl8dHlwZW9mKD8hW18kYS16QS1aMC05XSkvLE51bGxMaXRlcmFsOi9udWxsKD8hW18kYS16QS1aMC05XSkvLEJvb2xlYW5MaXRlcmFsOi8oPzp0cnVlfGZhbHNlKSg/IVtfJGEtekEtWjAtOV0pLyxJZGVudGlmaWVyOi9bXyRhLXpBLVpdW18kYS16QS1aMC05XSovLFB1bmN0dWF0b3I6L1wvfD0+fFwqXCp8Pj4+PXw+Pj18PDw9fD09PXwhPT18Pj4+fDw8fCU9fFwqPXwtPXxcKz18PD18Pj18PT18IT18XF49fFx8PXxcfFx8fCYmfCY9fD4+fFwrXCt8LS18XDp8fXxcKnwmfFx8fFxefCF8fnwtfFwrfFw/fCV8PXw+fDx8LHw7fFwuKD8hWzAtOV0pfFxdfFxbfFwpfFwofHsvLERpdlB1bmN0dWF0b3I6L1wvPXxcLy8sTnVtZXJpY0xpdGVyYWw6Lyg/OjBbeFhdWzAtOWEtZkEtRl0qfFwuWzAtOV0rfCg/OlsxLTldK1swLTldKnwwKSg/OlwuWzAtOV0qfFwuKT8pKD86W2VFXVsrLV17MCwxfVswLTldKyk/KD8hW18kYS16QS1aMC05XSkvLFN0cmluZ0xpdGVyYWw6LyIoPzpbXiJcblxcXHJcdTIwMjhcdTIwMjldfFxcKD86WyciXFxiZm5ydHZcblxyXHUyMDI4XHUyMDI5XXxcclxuKXxcXHhbMC05YS1mQS1GXXsyfXxcXHVbMC05YS1mQS1GXXs0fXxcXFteMC05dXgnIlxcYmZucnR2XG5cXFxyXHUyMDI4XHUyMDI5XSkqInwnKD86W14nXG5cXFxyXHUyMDI4XHUyMDI5XXxcXCg/OlsnIlxcYmZucnR2XG5cclx1MjAyOFx1MjAyOV18XHJcbil8XFx4WzAtOWEtZkEtRl17Mn18XFx1WzAtOWEtZkEtRl17NH18XFxbXjAtOXV4JyJcXGJmbnJ0dlxuXFxcclx1MjAyOFx1MjAyOV0pKicvLFJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbDovXC8oPzpcWyg/OlxcW1xzXFNdfFteXF1dKSpcXXxbXipcL1xcXG5cclx1MjAyOFx1MjAyOV18XFxbXlxuXHJcdTIwMjhcdTIwMjldKSg/OlxbKD86XFxbXHNcU118W15cXV0pKlxdfFteXC9cXFxuXHJcdTIwMjhcdTIwMjldfFxcW15cblxyXHUyMDI4XHUyMDI5XSkqXC9bMC05YS16QS1aXSovfTtmdW5jdGlvbiB6bShnLGMsXyl7dmFyIEE9W2NdO2Z1bmN0aW9uIFIoZCl7dmFyIG09bmV3IFJlZ0V4cDtyZXR1cm4gbS5jb21waWxlKGQucmVwbGFjZSgvPChbXj5dKyk+L2csZnVuY3Rpb24oSSxPZSl7cmV0dXJuIGdbT2VdPyhBLnB1c2goT2UpLGdbT2VdaW5zdGFuY2VvZiBSZWdFeHA/IigiK2dbT2VdLnNvdXJjZSsiKSI6IigiK1IoZ1tPZV0pLnNvdXJjZSsiKSIpOiIifSksXyksbX12YXIgdz1SKGdbY10pO3RoaXMuZXhlYz1mdW5jdGlvbihkKXt2YXIgbT13LmV4ZWMoZCk7aWYobT09bnVsbClyZXR1cm4gbnVsbDtmb3IodmFyIEk9bmV3IFN0cmluZyhtWzBdKSxPZT0wO09lPEEubGVuZ3RoO09lKyspbVtPZV0mJihJW0FbT2VdXT1tW09lXSk7cmV0dXJuIEl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsYXN0SW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5sYXN0SW5kZXh9LHNldDpmdW5jdGlvbihkKXt3Lmxhc3RJbmRleD1kfX0pfWZ1bmN0aW9uIGwxKCl7dmFyIGc9bmV3IHptKGptLCJJbnB1dEVsZW1lbnREaXYiLCJnIiksYz1uZXcgem0oam0sIklucHV0RWxlbWVudFJlZ0V4cCIsImciKSxfO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzb3VyY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX30sc2V0OmZ1bmN0aW9uKEEpe189QSxnLmxhc3RJbmRleD0wLGMubGFzdEluZGV4PTB9fSksdGhpcy5yZXNldD1mdW5jdGlvbigpe2cubGFzdEluZGV4PTAsYy5sYXN0SW5kZXg9MH0sdGhpcy5nZXROZXh0VG9rZW49ZnVuY3Rpb24oQSl7dmFyIFI9Zy5sYXN0SW5kZXgsdztBP3c9Zzp3PWM7dmFyIGQ9dy5leGVjKF8pO2lmKGQmJncubGFzdEluZGV4LVI+ZC5sZW5ndGgpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIHRva2VuIElMTEVHQUwiKTtyZXR1cm4gZy5sYXN0SW5kZXg9dy5sYXN0SW5kZXgsYy5sYXN0SW5kZXg9dy5sYXN0SW5kZXgsZH19dmFyIFdtPXtJZGVudGlmaWVyTmFtZTpbWyJJZGVudGlmaWVyIl1dLExpdGVyYWw6W1siTnVsbExpdGVyYWwiXSxbIkJvb2xlYW5MaXRlcmFsIl0sWyJOdW1lcmljTGl0ZXJhbCJdLFsiU3RyaW5nTGl0ZXJhbCJdLFsiUmVndWxhckV4cHJlc3Npb25MaXRlcmFsIl1dLFByaW1hcnlFeHByZXNzaW9uOltbIklkZW50aWZpZXIiXSxbIkxpdGVyYWwiXSxbIigiLCJFeHByZXNzaW9uIiwiKSJdXSxDYWxsRXhwcmVzc2lvbjpbWyJQcmltYXJ5RXhwcmVzc2lvbiIsIkFyZ3VtZW50cyJdLFsiQ2FsbEV4cHJlc3Npb24iLCJBcmd1bWVudHMiXV0sQXJndW1lbnRzOltbIigiLCIpIl0sWyIoIiwiQXJndW1lbnRMaXN0IiwiKSJdXSxBcmd1bWVudExpc3Q6W1siQ29uZGl0aW9uYWxFeHByZXNzaW9uIl0sWyJBcmd1bWVudExpc3QiLCIsIiwiQ29uZGl0aW9uYWxFeHByZXNzaW9uIl1dLExlZnRIYW5kU2lkZUV4cHJlc3Npb246W1siUHJpbWFyeUV4cHJlc3Npb24iXSxbIkNhbGxFeHByZXNzaW9uIl1dLFVuYXJ5RXhwcmVzc2lvbjpbWyJMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIl0sWyJ2b2lkIiwiVW5hcnlFeHByZXNzaW9uIl0sWyIrIiwiVW5hcnlFeHByZXNzaW9uIl0sWyItIiwiVW5hcnlFeHByZXNzaW9uIl0sWyJ+IiwiVW5hcnlFeHByZXNzaW9uIl0sWyIhIiwiVW5hcnlFeHByZXNzaW9uIl1dLEV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbjpbWyJVbmFyeUV4cHJlc3Npb24iXSxbIkV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbiIsIioqIiwiVW5hcnlFeHByZXNzaW9uIl1dLE11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbjpbWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIvIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iXSxbIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiIsIioiLCJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iXSxbIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiIsIiUiLCJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iXV0sQWRkaXRpdmVFeHByZXNzaW9uOltbIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiJdLFsiQWRkaXRpdmVFeHByZXNzaW9uIiwiKyIsIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiJdLFsiQWRkaXRpdmVFeHByZXNzaW9uIiwiLSIsIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiJdXSxTaGlmdEV4cHJlc3Npb246W1siQWRkaXRpdmVFeHByZXNzaW9uIl0sWyJTaGlmdEV4cHJlc3Npb24iLCI8PCIsIkFkZGl0aXZlRXhwcmVzc2lvbiJdLFsiU2hpZnRFeHByZXNzaW9uIiwiPj4iLCJBZGRpdGl2ZUV4cHJlc3Npb24iXSxbIlNoaWZ0RXhwcmVzc2lvbiIsIj4+PiIsIkFkZGl0aXZlRXhwcmVzc2lvbiJdXSxSZWxhdGlvbmFsRXhwcmVzc2lvbjpbWyJTaGlmdEV4cHJlc3Npb24iXSxbIlJlbGF0aW9uYWxFeHByZXNzaW9uIiwiPCIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI+IiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsIjw9IiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsIj49IiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsImluc3RhbmNlb2YiLCJTaGlmdEV4cHJlc3Npb24iXSxbIlJlbGF0aW9uYWxFeHByZXNzaW9uIiwiaW4iLCJTaGlmdEV4cHJlc3Npb24iXV0sRXF1YWxpdHlFeHByZXNzaW9uOltbIlJlbGF0aW9uYWxFeHByZXNzaW9uIl0sWyJFcXVhbGl0eUV4cHJlc3Npb24iLCI9PSIsIlJlbGF0aW9uYWxFeHByZXNzaW9uIl0sWyJFcXVhbGl0eUV4cHJlc3Npb24iLCIhPSIsIlJlbGF0aW9uYWxFeHByZXNzaW9uIl0sWyJFcXVhbGl0eUV4cHJlc3Npb24iLCI9PT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiIT09IiwiUmVsYXRpb25hbEV4cHJlc3Npb24iXV0sQml0d2lzZUFOREV4cHJlc3Npb246W1siRXF1YWxpdHlFeHByZXNzaW9uIl0sWyJCaXR3aXNlQU5ERXhwcmVzc2lvbiIsIiYiLCJFcXVhbGl0eUV4cHJlc3Npb24iXV0sQml0d2lzZVhPUkV4cHJlc3Npb246W1siQml0d2lzZUFOREV4cHJlc3Npb24iXSxbIkJpdHdpc2VYT1JFeHByZXNzaW9uIiwiXiIsIkJpdHdpc2VBTkRFeHByZXNzaW9uIl1dLEJpdHdpc2VPUkV4cHJlc3Npb246W1siQml0d2lzZVhPUkV4cHJlc3Npb24iXSxbIkJpdHdpc2VPUkV4cHJlc3Npb24iLCJ8IiwiQml0d2lzZVhPUkV4cHJlc3Npb24iXV0sTG9naWNhbEFOREV4cHJlc3Npb246W1siQml0d2lzZU9SRXhwcmVzc2lvbiJdLFsiTG9naWNhbEFOREV4cHJlc3Npb24iLCImJiIsIkJpdHdpc2VPUkV4cHJlc3Npb24iXV0sTG9naWNhbE9SRXhwcmVzc2lvbjpbWyJMb2dpY2FsQU5ERXhwcmVzc2lvbiJdLFsiTG9naWNhbE9SRXhwcmVzc2lvbiIsInx8IiwiTG9naWNhbEFOREV4cHJlc3Npb24iXV0sQ29uZGl0aW9uYWxFeHByZXNzaW9uOltbIkxvZ2ljYWxPUkV4cHJlc3Npb24iXSxbIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCI/IiwiTG9naWNhbE9SRXhwcmVzc2lvbiIsIjoiLCJMb2dpY2FsT1JFeHByZXNzaW9uIl1dLEV4cHJlc3Npb246W1siQ29uZGl0aW9uYWxFeHByZXNzaW9uIl0sWyJFeHByZXNzaW9uIiwiLCIsIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdXSxQcm9ncmFtOltbIkV4cHJlc3Npb24iXV19O2Z1bmN0aW9uIGNmKGcsYyl7dGhpcy5uYW1lPWcsdGhpcy50b2tlbj1jLHRoaXMuY2hpbGROb2Rlcz1bXSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKF8pe2lmKF98fChfPSIiKSx0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPT0xKXJldHVybiB0aGlzLmNoaWxkTm9kZXNbMF0udG9TdHJpbmcoXyk7Zm9yKHZhciBBPV8rdGhpcy5uYW1lKyh0aGlzLnRva2VuIT1udWxsJiZ0aGlzLm5hbWUhPXRoaXMudG9rZW4/IjoiK3RoaXMudG9rZW46IiIpK2AKYCxSPTA7Ujx0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1IrKylBKz10aGlzLmNoaWxkTm9kZXNbUl0udG9TdHJpbmcoXysiICAgICIpO3JldHVybiBBfX1mdW5jdGlvbiBjMSgpe3ZhciBnLGM9e1Byb2dyYW06IiQifSxfPXt9O2Z1bmN0aW9uIEEobSl7X1tKU09OLnN0cmluZ2lmeShtKV09bTtmb3IodmFyIEk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSk7SS5sZW5ndGg7KXt2YXIgT2U9SS5zaGlmdCgpOyFXbVtPZV18fFdtW09lXS5mb3JFYWNoKGZ1bmN0aW9uKEV0KXttW0V0WzBdXXx8SS5wdXNoKEV0WzBdKTt2YXIgY2U9bSxPPW51bGw7RXQuZm9yRWFjaChmdW5jdGlvbihUdCl7Y2VbVHRdfHwoY2VbVHRdPXt9KSxPPWNlLGNlPWNlW1R0XX0pLG1bT2VdLiRkaXYmJihjZS4kZGl2PSEwKSxjZS4kcmVkdWNlPU9lLGNlLiRjb3VudD1FdC5sZW5ndGh9KX1mb3IodmFyIGF0IGluIG0pdHlwZW9mIG1bYXRdIT0ib2JqZWN0Inx8YXQuY2hhckF0KDApPT0iJCJ8fG1bYXRdLiRjbG9zdXJlfHwoX1tKU09OLnN0cmluZ2lmeShtW2F0XSldP21bYXRdPV9bSlNPTi5zdHJpbmdpZnkobVthdF0pXTpBKG1bYXRdKSk7bS4kY2xvc3VyZT0hMH1BKGMpO3ZhciBSPVtdLHc9W2NdLGQ9Yzt0aGlzLmluc2VydFN5bWJvbD1mdW5jdGlvbihJLE9lKXtmb3IoOyFkW0kubmFtZV0mJmQuJHJlZHVjZTspe2Zvcih2YXIgYXQ9ZC4kY291bnQsRXQ9bmV3IGNmKGQuJHJlZHVjZSk7YXQtLTspRXQuY2hpbGROb2Rlcy5wdXNoKFIucG9wKCkpLHcucG9wKCk7ZD13W3cubGVuZ3RoLTFdLHRoaXMuaW5zZXJ0U3ltYm9sKEV0KX1pZihkPWRbSS5uYW1lXSxSLnB1c2goSSksdy5wdXNoKGQpLCFkKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZC4kZGl2fSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7ZD1jLFI9W10sdz1bY119LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJncmFtbWFyVHJlZSIse2dldDpmdW5jdGlvbigpe3RyeXtmb3IoO2QuJHJlZHVjZTspe2Zvcih2YXIgbT1kLiRjb3VudCxJPW5ldyBjZihkLiRyZWR1Y2UpO20tLTspSS5jaGlsZE5vZGVzLnB1c2goUi5wb3AoKSksdy5wb3AoKTtkPXdbdy5sZW5ndGgtMV0sdGhpcy5pbnNlcnRTeW1ib2woSSl9aWYoUi5sZW5ndGg+MCYmZFsiOyJdKXJldHVybiB0aGlzLmluc2VydFN5bWJvbChuZXcgY2YoIjsiLCI7IikpLHRoaXMuZ3JhbW1hclRyZWU7aWYoUi5sZW5ndGghPTF8fFJbMF0ubmFtZSE9IlByb2dyYW0iKXRocm93IG5ldyBFcnJvcn1jYXRjaChPZSl7dGhyb3cgbmV3IFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCIpfXJldHVybiBSWzBdfX0pfWZ1bmN0aW9uIHUxKCl7dGhpcy5sZXhpY2FsUGFyc2VyPW5ldyBsMSx0aGlzLnN5bnRhY3RpY2FsUGFyc2VyPW5ldyBjMTt2YXIgZz1bIk51bGxMaXRlcmFsIiwiQm9vbGVhbkxpdGVyYWwiLCJOdW1lcmljTGl0ZXJhbCIsIlN0cmluZ0xpdGVyYWwiLCJSZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWwiLCJJZGVudGlmaWVyIiwiKioiLCI9PiIsInsiLCJ9IiwiKCIsIikiLCJbIiwiXSIsIi4iLCI7IiwiLCIsIjwiLCI+IiwiPD0iLCI+PSIsIj09IiwiIT0iLCI9PT0iLCIhPT0iLCIrIiwiLSIsIioiLCIlIiwiKysiLCItLSIsIjw8IiwiPj4iLCI+Pj4iLCImIiwifCIsIl4iLCIhIiwifiIsIiYmIiwifHwiLCI/IiwiOiIsIj0iLCIrPSIsIi09IiwiKj0iLCIlPSIsIjw8PSIsIj4+PSIsIj4+Pj0iLCImPSIsInw9IiwiXj0iLCIvIiwiLz0iLCJpbnN0YW5jZW9mIiwidHlwZW9mIiwibmV3Iiwidm9pZCIsImRlYnVnZ2VyIiwidGhpcyIsImRlbGV0ZSIsImluIl0sYz17fTtnLmZvckVhY2goZnVuY3Rpb24oXyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsXyx7fSl9KSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5sZXhpY2FsUGFyc2VyLnJlc2V0KCksdGhpcy5zeW50YWN0aWNhbFBhcnNlci5yZXNldCgpfSx0aGlzLnBhcnNlPWZ1bmN0aW9uKF8sQSl7dmFyIFIsdz0hMTt0aGlzLmxleGljYWxQYXJzZXIuc291cmNlPV87Zm9yKHZhciBkPSExO1I9dGhpcy5sZXhpY2FsUGFyc2VyLmdldE5leHRUb2tlbihkKTspe0EmJkEoUik7dHJ5e2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFIpLnNvbWUobT0+Yy5oYXNPd25Qcm9wZXJ0eShtKT8oZD10aGlzLnN5bnRhY3RpY2FsUGFyc2VyLmluc2VydFN5bWJvbChuZXcgY2YobSxSKSx3KSx3PSExLCEwKTohMSkpY29udGludWU7KFIuS2V5d29yZHx8Ui5QdW5jdHVhdG9yfHxSLkRpdlB1bmN0dWF0b3IpJiZjLmhhc093blByb3BlcnR5KFIudG9TdHJpbmcoKSkmJihkPXRoaXMuc3ludGFjdGljYWxQYXJzZXIuaW5zZXJ0U3ltYm9sKG5ldyBjZihSLnRvU3RyaW5nKCksUiksdykpfWNhdGNoKG0pe3Rocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCB0b2tlbiAiK1IpfX1yZXR1cm4gdGhpcy5zeW50YWN0aWNhbFBhcnNlci5ncmFtbWFyVHJlZX19dmFyIEdtPW5ldyB1MTtmdW5jdGlvbiBmMShnKXtHbS5yZXNldCgpLHRoaXMudHJlZT1HbS5wYXJzZShnKSx0aGlzLnBhdGhzPVtdO3ZhciBjPU9iamVjdC5jcmVhdGUobnVsbCksXz10aGlzLEE9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmlzU2ltcGxlLHRoaXMuaXNDb25zdCx3KHRoaXMudHJlZSksUih0aGlzLnRyZWUpLHRoaXMucGF0aHMubGVuZ3RoPT09MCYmKHRoaXMuaXNDb25zdD0hMCksdGhpcy5zZXR0ZXI9ZnVuY3Rpb24oSSl7Zm9yKHZhciBPZT1jLGF0PTA7YXQ8SS5sZW5ndGgtMTthdCsrKU9lW0lbYXRdXXx8KE9lW0lbYXRdXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPZT1PZVtJW2F0XV07cmV0dXJue2lzQ29tcGxldGVkOmZ1bmN0aW9uKCl7Zm9yKHZhciBFdCBpbiBBKWlmKCFBW0V0XSlyZXR1cm4hMTtyZXR1cm4hMH0sc2V0OmZ1bmN0aW9uKEV0KXtpZihBW0kuam9pbigiLiIpXXx8KEFbSS5qb2luKCIuIildPSEwKSxPZVtJW2F0XV09RXQsdGhpcy5pc0NvbXBsZXRlZCgpKXJldHVybiBfLmV4ZWMoKX19fSx0aGlzLnZhbHVlT2Y9dGhpcy5leGVjPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBmdW5jdGlvbigpe3JldHVybigwLGV2YWwpKGcpfS5jYWxsKGMpfWNhdGNoKEkpe319O2Z1bmN0aW9uIFIoSSl7Zm9yKHZhciBPZT1JO09lLmNoaWxkTm9kZXMubGVuZ3RoPD0xJiZPZS5uYW1lIT09Ik1lbWJlckV4cHJlc3Npb24iOylPZT1PZS5jaGlsZE5vZGVzWzBdO09lLm5hbWU9PT0iTWVtYmVyRXhwcmVzc2lvbiI/Xy5pc1NpbXBsZT0hMDpfLmlzU2ltcGxlPSExfWZ1bmN0aW9uIHcoSSl7aWYoSS5uYW1lPT09IkNhbGxFeHByZXNzaW9uIiYmSS5jaGlsZE5vZGVzW0kuY2hpbGROb2Rlcy5sZW5ndGgtMV0ubmFtZSE9PSJDYWxsRXhwcmVzc2lvbiIpe3ZhciBPZT1kKEkuY2hpbGROb2Rlc1sxXSk7dyhJLmNoaWxkTm9kZXNbMF0pfWVsc2UgaWYoSS5uYW1lPT09Ik5ld0V4cHJlc3Npb24iJiZJLmNoaWxkTm9kZXMubGVuZ3RoPT09MSl2YXIgT2U9ZChJLmNoaWxkTm9kZXNbMF0pO2Vsc2UgaWYoSS5uYW1lPT09Ik1lbWJlckV4cHJlc3Npb24iJiZJLmNoaWxkTm9kZXMubGVuZ3RoPT09MSl2YXIgT2U9ZChJKTtlbHNlIGZvcih2YXIgYXQ9MDthdDxJLmNoaWxkTm9kZXMubGVuZ3RoO2F0KyspdyhJLmNoaWxkTm9kZXNbYXRdKX1mdW5jdGlvbiBkKEkpe2lmKEkuY2hpbGROb2Rlc1swXS5uYW1lPT09IklkZW50aWZpZXJOYW1lIil7dmFyIE9lPWQoSS5jaGlsZE5vZGVzWzJdKTtyZXR1cm4gT2UmJihPZT1PZS5jb25jYXQoSS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0udG9rZW4udG9TdHJpbmcoKSkpLG0oT2UpLE9lfWVsc2UgaWYoSS5jaGlsZE5vZGVzWzBdLm5hbWU9PT0iUHJpbWFyeUV4cHJlc3Npb24iKWlmKEkuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLm5hbWU9PT0iSWRlbnRpZmllciIpe3ZhciBPZT1bSS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0udG9rZW4udG9TdHJpbmcoKV07cmV0dXJuIG0oT2UpLE9lfWVsc2UgcmV0dXJuIG51bGw7ZWxzZXtpZihJLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJdIilyZXR1cm4gZChJLmNoaWxkTm9kZXNbM10pLHcoSS5jaGlsZE5vZGVzWzFdKSxudWxsO2lmKEkuY2hpbGROb2Rlc1swXS5uYW1lPT09IkFyZ3VtZW50cyIpcmV0dXJuIHcoSS5jaGlsZE5vZGVzWzBdKSx3KEkuY2hpbGROb2Rlc1sxXSksbnVsbDtmb3IodmFyIGF0PTA7YXQ8SS5jaGlsZE5vZGVzLmxlbmd0aDthdCsrKXcoSS5jaGlsZE5vZGVzW2F0XSl9fWZ1bmN0aW9uIG0oSSl7Zm9yKHZhciBPZT1jLGF0PTA7YXQ8SS5sZW5ndGgtMTthdCsrKU9lW0lbYXRdXXx8KE9lW0lbYXRdXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPZT1PZVtJW2F0XV07Xy5wYXRocy5wdXNoKEkpLEFbSS5qb2luKCIuIildPSExfX1mdW5jdGlvbiAkYyhnKXt2YXIgYz1nLmNoaWxkTm9kZXMuc2xpY2UoKS5yZXZlcnNlKCksXz1jLmZpbHRlcihJPT4hSS50b2tlbnx8IUkudG9rZW4uUHVuY3R1YXRvcik7aWYoZy5uYW1lPT09IlVuYXJ5RXhwcmVzc2lvbiImJmMubGVuZ3RoPT09MiYmY1swXS5uYW1lPT09Ii0iJiZfLmxlbmd0aD09PTEpe3ZhciBBPSRjKF9bMF0pO3JldHVybiBBLnZhbHVlPS1BLnZhbHVlLEF9aWYoZy5uYW1lPT09IkFyZ3VtZW50cyIpe2Zvcih2YXIgUj1bXSx3PV9bMF07dzspdy5jaGlsZE5vZGVzLmxlbmd0aD09PTMmJihSLnVuc2hpZnQody5jaGlsZE5vZGVzWzBdKSx3PXcuY2hpbGROb2Rlc1syXSksdy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJihSLnVuc2hpZnQody5jaGlsZE5vZGVzWzBdKSx3PW51bGwpO3JldHVybnt0eXBlOiJBcmd1bWVudHMiLGNoaWxkcmVuOlIubWFwKEk9PiRjKEkpKX19aWYoXyYmXy5sZW5ndGg9PT0xKXt2YXIgQT0kYyhfWzBdKTtyZXR1cm4gQX1pZihnLnRva2VuJiZbIk51bGxMaXRlcmFsIiwiQm9vbGVhbkxpdGVyYWwiLCJOdW1lcmljTGl0ZXJhbCIsIlN0cmluZ0xpdGVyYWwiLCJJZGVudGlmaWVyIl0uc29tZShJPT5nLnRva2VuW0ldKSl7dmFyIGQ9T2JqZWN0LmtleXMoZy50b2tlbikuZmlsdGVyKEk9PkkubWF0Y2goL0xpdGVyYWwvKXx8SS5tYXRjaCgvSWRlbnRpZmllci8pKVswXSxtPXtOdWxsTGl0ZXJhbDpudWxsLEJvb2xlYW5MaXRlcmFsOkJvb2xlYW4oZy50b2tlbiksTnVtZXJpY0xpdGVyYWw6TnVtYmVyKGcudG9rZW4pLFN0cmluZ0xpdGVyYWw6Zy50b2tlbixJZGVudGlmaWVyOmcudG9rZW59W2RdO3JldHVybnt0eXBlOmQsdmFsdWU6bX19cmV0dXJuIGcubmFtZT09PSJDYWxsRXhwcmVzc2lvbiI/e3R5cGU6IkNhbGxFeHByZXNzaW9uIixjaGlsZHJlbjpbJGMoY1swXSksJGMoY1sxXSldfTp7dHlwZTpjLmZpbHRlcihJPT5JLnRva2VuJiZJLnRva2VuLlB1bmN0dWF0b3IpWzBdLm5hbWUsY2hpbGRyZW46Yy5maWx0ZXIoST0+IUkudG9rZW58fCFJLnRva2VuLlB1bmN0dWF0b3IpLm1hcChJPT4kYyhJKSl9fWZ1bmN0aW9uIHFtKGcpe3ZhciBjPW5ldyBmMShnKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoJGMoYy50cmVlKSxudWxsKX1mdW5jdGlvbiBkMShnLGMpe3JldHVybiBjPT09ImJpbmQiJiYoZz09PSJiaW5kaW5neCJ8fGc9PT0iYmluZGluZyIpfWZ1bmN0aW9uIFltKGcpe2lmKCFnKXJldHVybjt0cnl7Zz1KU09OLnBhcnNlKGcpfWNhdGNoKF8pe31sZXQgYz17fTtpZihwaShnKT9jLm9yaWdpbj1nOmcmJihjLm9yaWdpbj1nLm9yaWdpbixjLnRyYW5zZm9ybWVkPWcudHJhbnNmb3JtZWQpLCEoIWMudHJhbnNmb3JtZWQmJiFjLm9yaWdpbikpcmV0dXJuIGMudHJhbnNmb3JtZWQ9Yy50cmFuc2Zvcm1lZHx8cW0oYy5vcmlnaW4pLGN9ZnVuY3Rpb24gcDEoZyl7cmV0dXJuIGcmJihnLmV4aXRFeHByZXNzaW9uPVltKGcuZXhpdEV4cHJlc3Npb24pLGcucHJvcHMmJmcucHJvcHMuZm9yRWFjaChjPT57Yy5leHByZXNzaW9uPVltKGMuZXhwcmVzc2lvbil9KSxnKX1mdW5jdGlvbiBoMShnKXtyZXR1cm4gZnVuY3Rpb24oYz17fSl7aWYoUW4oZykpcmV0dXJuIGcoe3N0YXRlOmMuc3RhdGU9PT0iZW5kIj8iZXhpdCI6Yy5zdGF0ZSx0OmMudCE9PXZvaWQgMD9jLnQ6Yy5kZWx0YVR9KX19ZnVuY3Rpb24gS20oZyxjLF8pe3JldHVybiBfJiYoZDEoZyxjKT9mdW5jdGlvbihBLFI9ZnVuY3Rpb24oKXt9KXtpZighQSl0aHJvdyBuZXcgRXJyb3IoInNob3VsZCBwYXNzIG9wdGlvbnMgZm9yIGJpbmRpbmciKTtyZXR1cm4gcDEoQSksXyhBLEEmJkEuZXZlbnRUeXBlPT09InRpbWluZyI/aDEoUik6Uil9Ol8pfWZ1bmN0aW9uIGcxKGcsYyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsIltbQ3VycmVudEluc3RhbmNlSWRdXSIse3ZhbHVlOmN9KX1mdW5jdGlvbiBKbShnKXtyZXR1cm4gZ1siW1tDdXJyZW50SW5zdGFuY2VJZF1dIl19ZnVuY3Rpb24gdjEoZyxjLF8pe2xldCBBPW5pKGcpO3JldHVybiFBfHwhUW4oQS5zZW5kKT8oY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIGZpbmQgdGFza0NlbnRlciAoJHtnfSkuYCksbnVsbCk6KC4uLlIpPT5BLnNlbmQoIm1vZHVsZSIse21vZHVsZTpjLG1ldGhvZDpffSxSKX1mdW5jdGlvbiBtMShnLGMsXyxBKXtsZXQgUj1uaShnKTtyZXR1cm4hUnx8IVFuKFIuc2VuZCk/KGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBmaW5kIHRhc2tDZW50ZXIgKCR7Z30pLmApLG51bGwpOlFuKEEpP3c9PlIuc2VuZCgibW9kdWxlIix7bW9kdWxlOmMsbWV0aG9kOl99LFt3XSk6KGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdICR7Y30uJHtffSBtdXN0IGJlIGFzc2lnbmVkIGFzIGEgZnVuY3Rpb24uYCksbnVsbCl9dmFyIGxkPWNsYXNze2NvbnN0cnVjdG9yKGMsXyl7ZzEodGhpcyxTdHJpbmcoYykpLHRoaXMuY29uZmlnPV98fHt9LHRoaXMuZG9jdW1lbnQ9bmV3IFZhKGMsdGhpcy5jb25maWcuYnVuZGxlVXJsKSx0aGlzLnJlcXVpcmVNb2R1bGU9dGhpcy5yZXF1aXJlTW9kdWxlLmJpbmQodGhpcyksdGhpcy5pbXBvcnRTY3JpcHQ9dGhpcy5pbXBvcnRTY3JpcHQuYmluZCh0aGlzKSx0aGlzLmlzUmVnaXN0ZXJlZE1vZHVsZT1yZCx0aGlzLmlzUmVnaXN0ZXJlZENvbXBvbmVudD1ocH1yZXF1aXJlTW9kdWxlKGMpe2xldCBfPUptKHRoaXMpO2lmKCEoXyYmdGhpcy5kb2N1bWVudCYmdGhpcy5kb2N1bWVudC50YXNrQ2VudGVyKSl7Y29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIHJlcXVpcmVNb2R1bGUoIiR7Y30iKSwgaW5zdGFuY2UgKCR7X30pIGRvZXNuJ3QgZXhpc3QgYW55bW9yZS5gKTtyZXR1cm59aWYoIXJkKGMpKXtjb25zb2xlLndhcm4oYFtKUyBGcmFtZXdvcmtdIFx1NUY1M1x1NTI0RFx1OEZEMFx1ODg0Q1x1NzY4NFx1NTdGQVx1NUVBN1x1NEUwRFx1NTMwNVx1NTQyQlx1NTM5Rlx1NzUxRlx1NjNEMlx1NEVGNlske2N9XVx1RkYwQ1x1OEJGN1x1NTcyOG1hbmlmZXN0XHU0RTJEXHU5MTREXHU3RjZFXHU4QkU1XHU2M0QyXHU0RUY2XHVGRjBDXHU5MUNEXHU2NUIwXHU1MjM2XHU0RjVDXHU1MzA1XHU2MkVDXHU4QkU1XHU1MzlGXHU3NTFGXHU2M0QyXHU0RUY2XHU3Njg0XHU4MUVBXHU1QjlBXHU0RTQ5XHU4RkQwXHU4ODRDXHU1N0ZBXHU1RUE3YCk7cmV0dXJufWxldCBBPXt9LFI9Ym0oYyk7Zm9yKGxldCB3IGluIFIpT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsdyx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5LbShjLHcsdjEoXyxjLHcpKSxzZXQ6ZD0+bTEoXyxjLHcsZCl9KTtyZXR1cm4gQX1zdXBwb3J0cyhjKXtpZighcGkoYykpcmV0dXJuIG51bGw7bGV0IF89Yy5tYXRjaCgvXkAoXHcrKVwvKFtcdy1dKykoXC4oXHcrKSk/JC9pKTtpZihfKXtsZXQgQT1fWzFdLFI9X1syXSx3PV9bNF07c3dpdGNoKEEpe2Nhc2UibW9kdWxlIjpyZXR1cm4gcmQoUix3KTtjYXNlImNvbXBvbmVudCI6cmV0dXJuIGhwKFIpfX1yZXR1cm4gbnVsbH1pbXBvcnRTY3JpcHQoYyxfPXt9KXtsZXQgQT1KbSh0aGlzKSxSPW5pKEEpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih3LGQpe2lmKCFSfHwhUW4oUi5zZW5kKSlyZXR1cm4gZChuZXcgRXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBpbXBvcnQgc2NyaXB0ICIke2N9Iiwgbm8gdGFza0NlbnRlciAoJHtBfSkgbWF0Y2hlZC5gKSk7dHJ5e1Iuc2VuZCgibW9kdWxlIix7bW9kdWxlOiJzY3JpcHQiLG1ldGhvZDoiaW1wb3J0U2NyaXB0In0sW2MsX10se2NhbGxiYWNrOlttPT53KG0pLG09PmQobSldfSl9Y2F0Y2gobSl7ZChtKX19KX19O2Z1bmN0aW9uIF8xKGcsYyl7bGV0IF89T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gXy5zZXJ2aWNlPU9iamVjdC5jcmVhdGUobnVsbCksY2MuZm9yRWFjaCgoe25hbWU6QSxvcHRpb25zOlJ9KT0+e2xldCB3PVIuY3JlYXRlO2lmKHcpdHJ5e2xldCBkPXcoZyxjKTtmbyhfLnNlcnZpY2UsZCksZm8oXyxkLmluc3RhbmNlKX1jYXRjaChkKXtjb25zb2xlLmVycm9yKGBbSlMgUnVudGltZV0gRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2aWNlICR7QX0uYCl9fSksZGVsZXRlIF8uc2VydmljZS5pbnN0YW5jZSxWcyhfLnNlcnZpY2UpLF99dmFyIGIxPXt1aWQ6MH0seTE9cXYoYWYpLEUxPUd2KGFmKTtmdW5jdGlvbiBabShnLGMsXyl7bGV0IEE9bmV3IGxkKGcsYyksUj0iVnVlIix3PV8xKGcse3dlZXg6QSxudnVlOkEsY29uZmlnOmMsY3JlYXRlZDpEYXRlLm5vdygpLGZyYW1ld29yazpSfSk7VnModyk7bGV0IGQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZm8oZCxQMShBKSksZm8oZCx3LHtTaGFyZWRPYmplY3Q6YjEsd2VleDpBLG52dWU6QSxyZXF1aXJlTW9kdWxlOm09PkEucmVxdWlyZU1vZHVsZShtKSxfX1dFRVhfQ0FMTF9KQVZBU0NSSVBUX186ZHAsc2VydmljZXM6d30pLGQucGx1cz1uZXcgZC5XZWV4UGx1cyhBKSxkLlZ1ZVNoYXJlZD1hZixkLlVuaVNoYXJlZD15MSxkLlZ1ZVJlYWN0aXZpdHk9RTEsRm0oZyxkKSxWcyhkKSxkfWZ1bmN0aW9uIFMxKGcsYyxfPXt9KXtsZXQgQT0iVnVlIjtfPVFkKF8pLF8uZW52PVFkKGdsb2JhbC5XWEVudmlyb25tZW50fHx7fSksXy5idW5kbGVUeXBlPUE7bGV0IFI9Wm0oZyxfKTt3MShjLFIpfWZ1bmN0aW9uIHcxKGcsYyl7bGV0IF89W10sQT1bXTtmb3IobGV0IGQgaW4gYylfLnB1c2goZCksQS5wdXNoKGNbZF0pO2xldCB3PSIoZnVuY3Rpb24gKGdsb2JhbCkgeyAiK2AKZ2xvYmFsID0gKGZ1bmN0aW9uICgpIHsKICB2YXIgZwogIC8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlCiAgZyA9IChmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcwogIH0pKCkKICB0cnkgewogICAgLy8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApCiAgICBnID0gZyB8fCBuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKQogIH0gY2F0Y2ggKGUpIHsKICAgIC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlCiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpIGcgPSB3aW5kb3cKICB9CiAgcmV0dXJuIGcKfSkoKSB8fCBnbG9iYWw7CmArZysiIH0pKE9iamVjdC5jcmVhdGUodGhpcykpIjtyZXR1cm4gbmV3IEZ1bmN0aW9uKC4uLl8sdykoLi4uQSl9ZnVuY3Rpb24gQzEoZyl7bGV0IGM9a2woZyk7dHJ5e2lmKGMmJmMuYm9keSlyZXR1cm4gYy5ib2R5LnRvSlNPTigpfWNhdGNoKF8pe2NvbnNvbGUuZXJyb3IoIltKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBnZXQgdGhlIHZpcnR1YWwgZG9tIHRyZWUuIik7cmV0dXJufX1mdW5jdGlvbiBBMShnKXtEdihnKSxjYy5mb3JFYWNoKGM9PntsZXQgXz1jLm9wdGlvbnMuZGVzdHJveTtfJiZfKGcpfSl9ZnVuY3Rpb24gTzEoZyl7RnYoZyksY2MuZm9yRWFjaChjPT57bGV0IF89Yy5vcHRpb25zLnJlZnJlc2g7XyYmXyhnKX0pfXZhciBUMT17Y3JlYXRlSW5zdGFuY2U6UzEsY3JlYXRlSW5zdGFuY2VDb250ZXh0OlptLGdldFJvb3Q6QzEsZ2V0RG9jdW1lbnQ6a2wscmVnaXN0ZXJTZXJ2aWNlOmlkLHVucmVnaXN0ZXJTZXJ2aWNlOm9kLGNhbGxKUyhnLGMpe3JldHVybiBkcChnLGMpfSxyZWdpc3RlckNvbXBvbmVudHM6eW0scmVnaXN0ZXJNb2R1bGVzOl9tLGRlc3Ryb3lJbnN0YW5jZTpBMSxyZWZyZXNoSW5zdGFuY2U6TzF9O2Z1bmN0aW9uIHdwKCl7cmV0dXJuIG1tKCksVDF9ZnVuY3Rpb24gUDEoZyl7aWYoZ2xvYmFsLnNldFRpbWVvdXQmJmdsb2JhbC5zZXRJbnRlcnZhbClyZXR1cm57c2V0VGltZW91dDpnbG9iYWwuc2V0VGltZW91dCxzZXRJbnRlcnZhbDpnbG9iYWwuc2V0SW50ZXJ2YWwsY2xlYXJUaW1lb3V0Omdsb2JhbC5jbGVhclRpbWVvdXQsY2xlYXJJbnRlcnZhbDpnbG9iYWwuY2xlYXJJbnRlcnZhbH07bGV0IGM9Zy5yZXF1aXJlTW9kdWxlKCJ0aW1lciIpO3JldHVybntzZXRUaW1lb3V0OiguLi5BKT0+e2xldCBSPWZ1bmN0aW9uKCl7QVswXSguLi5BLnNsaWNlKDIpKX07cmV0dXJuIGMuc2V0VGltZW91dChSLEFbMV0pLGcuZG9jdW1lbnQudGFza0NlbnRlci5jYWxsYmFja01hbmFnZXIubGFzdENhbGxiYWNrSWQudG9TdHJpbmcoKX0sc2V0SW50ZXJ2YWw6KC4uLkEpPT57bGV0IFI9ZnVuY3Rpb24oKXtBWzBdKC4uLkEuc2xpY2UoMikpfTtyZXR1cm4gYy5zZXRJbnRlcnZhbChSLEFbMV0pLGcuZG9jdW1lbnQudGFza0NlbnRlci5jYWxsYmFja01hbmFnZXIubGFzdENhbGxiYWNrSWQudG9TdHJpbmcoKX0sY2xlYXJUaW1lb3V0OkE9PntjLmNsZWFyVGltZW91dChBKX0sY2xlYXJJbnRlcnZhbDpBPT57Yy5jbGVhckludGVydmFsKEEpfX19dmFyIFhtPXtEb2N1bWVudDpWYSxFbGVtZW50OmtvLENvbW1lbnQ6SGMsTGlzdGVuZXI6VHUsVGFza0NlbnRlcjpPdSxzZW5kVGFza3MoLi4uZyl7cmV0dXJuIFFuKGNhbGxOYXRpdmUpP2NhbGxOYXRpdmUoLi4uZyk6KGdsb2JhbC5jYWxsTmF0aXZlfHwoKCk9Pnt9KSkoLi4uZyl9fTtWYS5oYW5kbGVyPVhtLnNlbmRUYXNrczt2YXIgamM9WG07ZnVuY3Rpb24gTjEoKXtWcyhqYy5Db21tZW50KSxWcyhqYy5MaXN0ZW5lciksVnMoamMuRG9jdW1lbnQucHJvdG90eXBlKSxWcyhqYy5Db21tZW50LnByb3RvdHlwZSksVnMoamMuTGlzdGVuZXIucHJvdG90eXBlKX12YXIgY2Q9e3NlcnZpY2U6e3JlZ2lzdGVyOmlkLHVucmVnaXN0ZXI6b2QsaGFzOmdwfSxmcmVlemVQcm90b3R5cGU6TjEsaW5pdDp3cCxjb25maWc6amN9O3ZhciBDcD1jbGFzc3tjb25zdHJ1Y3RvcihjLF89e30pe3RoaXMudHlwZT1jfHwibWVzc2FnZSIsdGhpcy5kYXRhPV8uZGF0YXx8bnVsbCx0aGlzLm9yaWdpbj1fLm9yaWdpbnx8IiIsdGhpcy5zb3VyY2U9Xy5zb3VyY2V8fG51bGwsdGhpcy5wb3J0cz1fLnBvcnRzfHxbXSx0aGlzLnRhcmdldD1udWxsLHRoaXMudGltZVN0YW1wPURhdGUubm93KCl9fTt2YXIgdWM9e30sdWY9e307ZnVuY3Rpb24gQXAoKXt9QXAucHJvdG90eXBlLnBvc3RNZXNzYWdlPWZ1bmN0aW9uKGcpe2lmKHRoaXMuX2Nsb3NlZCl0aHJvdyBuZXcgRXJyb3IoYEJyb2FkY2FzdENoYW5uZWwgIiR7dGhpcy5uYW1lfSIgaXMgY2xvc2VkLmApO2xldCBjPXVjW3RoaXMubmFtZV07aWYoYyYmYy5sZW5ndGgpZm9yKGxldCBfPTA7XzxjLmxlbmd0aDsrK18pe2xldCBBPWNbX107QS5fY2xvc2VkfHxBPT09dGhpc3x8UW4oQS5vbm1lc3NhZ2UpJiZBLm9ubWVzc2FnZShuZXcgQ3AoIm1lc3NhZ2UiLHtkYXRhOmd9KSl9fTtBcC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtpZighdGhpcy5fY2xvc2VkJiYodGhpcy5fY2xvc2VkPSEwLHVjW3RoaXMubmFtZV0pKXtsZXQgZz11Y1t0aGlzLm5hbWVdLmZpbHRlcihjPT5jIT09dGhpcyk7Zy5sZW5ndGg/dWNbdGhpcy5uYW1lXT1nOmRlbGV0ZSB1Y1t0aGlzLm5hbWVdfX07dmFyIFFtPXtjcmVhdGU6Zz0+e2lmKHVmW2ddPVtdLFFuKGdsb2JhbC5Ccm9hZGNhc3RDaGFubmVsKSlyZXR1cm57fTtsZXQgYz17QnJvYWRjYXN0Q2hhbm5lbDpmdW5jdGlvbihfKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiExLHZhbHVlOlN0cmluZyhfKX0pLHRoaXMuX2Nsb3NlZD0hMSx0aGlzLm9ubWVzc2FnZT1udWxsLHVjW3RoaXMubmFtZV18fCh1Y1t0aGlzLm5hbWVdPVtdKSx1Y1t0aGlzLm5hbWVdLnB1c2godGhpcyksdWZbZ10ucHVzaCh0aGlzKX19O3JldHVybiBjLkJyb2FkY2FzdENoYW5uZWwucHJvdG90eXBlPUFwLnByb3RvdHlwZSx7aW5zdGFuY2U6Y319LGRlc3Ryb3k6Zz0+e3VmW2ddJiYodWZbZ10uZm9yRWFjaChjPT5jLmNsb3NlKCkpLGRlbGV0ZSB1ZltnXSl9fTtmdW5jdGlvbiBPcCgpe2xldHtpbml0Omd9PWNkO2NkLnNlcnZpY2UucmVnaXN0ZXIoIkJyb2FkY2FzdENoYW5uZWwiLFFtKSxjZC5mcmVlemVQcm90b3R5cGUoKTtsZXQgYz1nKCk7Zm9yKGxldCBfIGluIGMpZ2xvYmFsW19dPSguLi5BKT0+e2xldCBSPWNbX10oLi4uQSk7cmV0dXJuIFIgaW5zdGFuY2VvZiBFcnJvciYmY29uc29sZS5lcnJvcihSLnRvU3RyaW5nKCkpLFJ9fXZhciAkQj1nbG9iYWwuY29uc29sZTtmdW5jdGlvbiBlXygpe2lmKEt2KCksZ2xvYmFsLldYRW52aXJvbm1lbnQmJmdsb2JhbC5XWEVudmlyb25tZW50LnBsYXRmb3JtIT09IldlYiIpZ2xvYmFsLmNvbnNvbGU9e2RlYnVnOiguLi5nKT0+e2dyKCJkZWJ1ZyIpJiZnbG9iYWwubmF0aXZlTG9nKC4uLmZmKGcpLCJfX0RFQlVHIil9LGxvZzooLi4uZyk9PntncigibG9nIikmJmdsb2JhbC5uYXRpdmVMb2coLi4uZmYoZyksIl9fTE9HIil9LGluZm86KC4uLmcpPT57Z3IoImluZm8iKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5mZihnKSwiX19JTkZPIil9LHdhcm46KC4uLmcpPT57Z3IoIndhcm4iKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5mZihnKSwiX19XQVJOIil9LGVycm9yOiguLi5nKT0+e2dyKCJlcnJvciIpJiZnbG9iYWwubmF0aXZlTG9nKC4uLmZmKGcpLCJfX0VSUk9SIil9fTtlbHNle2xldHtkZWJ1ZzpnLGxvZzpjLGluZm86Xyx3YXJuOkEsZXJyb3I6Un09Y29uc29sZTtjb25zb2xlLl9fb3JpX189e2RlYnVnOmcsbG9nOmMsaW5mbzpfLHdhcm46QSxlcnJvcjpSfSxjb25zb2xlLmRlYnVnPSguLi53KT0+e2dyKCJkZWJ1ZyIpJiZjb25zb2xlLl9fb3JpX18uZGVidWcuYXBwbHkoY29uc29sZSx3KX0sY29uc29sZS5sb2c9KC4uLncpPT57Z3IoImxvZyIpJiZjb25zb2xlLl9fb3JpX18ubG9nLmFwcGx5KGNvbnNvbGUsdyl9LGNvbnNvbGUuaW5mbz0oLi4udyk9PntncigiaW5mbyIpJiZjb25zb2xlLl9fb3JpX18uaW5mby5hcHBseShjb25zb2xlLHcpfSxjb25zb2xlLndhcm49KC4uLncpPT57Z3IoIndhcm4iKSYmY29uc29sZS5fX29yaV9fLndhcm4uYXBwbHkoY29uc29sZSx3KX0sY29uc29sZS5lcnJvcj0oLi4udyk9PntncigiZXJyb3IiKSYmY29uc29sZS5fX29yaV9fLmVycm9yLmFwcGx5KGNvbnNvbGUsdyl9fX1mdW5jdGlvbiBmZihnKXtyZXR1cm4gZy5tYXAoYz0+e2lmKGRsKGMpLnRvTG93ZXJDYXNlKCk9PT0iW29iamVjdCBvYmplY3RdIil0cnl7Yz1KU09OLnN0cmluZ2lmeShjKX1jYXRjaChBKXtjPSJbb2JqZWN0IG9iamVjdF0ifWVsc2UgYz1TdHJpbmcoYyk7cmV0dXJuIGN9KX1lXygpO09wKCk7fSkoKTsKLyohICNfX05PX1NJREVfRUZGRUNUU19fICovCi8qKgoqIEBkY2xvdWRpby91bmktYXBwLW52dWUgdjMuNC4yMQoqIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpYnV0b3JzCiogQGxpY2Vuc2UgTUlUCioqLwovKioKKiBAZGNsb3VkaW8vdW5pLWFwcC1zZXJ2aWNlLXZ1ZSB2My40LjIxCiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnMKKiBAbGljZW5zZSBNSVQKKiovCi8qKgoqIEB2dWUvcmVhY3Rpdml0eSB2My40LjIxCiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnMKKiBAbGljZW5zZSBNSVQKKiovCi8qKgoqIEB2dWUvc2hhcmVkIHYzLjQuMjEKKiAoYykgMjAxOC1wcmVzZW50IFl1eGkgKEV2YW4pIFlvdSBhbmQgVnVlIGNvbnRyaWJ1dG9ycwoqIEBsaWNlbnNlIE1JVAoqKi8K